Update .gitignore to include .env files, change page title to 'IRTH projects', add new floor plan images, and enhance DocumentTitle component for dynamic title management based on route. Refactor FloorPopup and FloorSelect components for improved functionality and maintainability.

This commit is contained in:
2026-04-15 19:03:48 +05:00
parent 698c019856
commit beddbab3f3
72 changed files with 2171 additions and 1190 deletions
+2
View File
@@ -13,6 +13,8 @@ dist
dist-ssr
dist.zip
*.local
.env
*.env
public/virtual-tours
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/irth.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Rove Home</title>
<title>IRTH projects</title>
</head>
<body>
<div id="root"></div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
import { useEffect } from "react";
import { useLocation, useParams } from "react-router";
const TITLES: Record<string, string> = {
"dubai-marina": "Rove Home Dubai Marina",
"marasi-drive": "Rove Home Marasi Drive",
hq: "HQ by Rove",
};
const DEFAULT_TITLE = "IRTH projects";
function getTitleForComplex(complexName: string | undefined): string {
if (!complexName) return DEFAULT_TITLE;
return TITLES[complexName] ?? DEFAULT_TITLE;
}
function DocumentTitle() {
const { pathname } = useLocation();
const params = useParams();
useEffect(() => {
const complexName = params.complexName ?? params.complexSlug;
const isInBuilding =
pathname.startsWith("/complex/") ||
pathname.startsWith("/unit-types/") ||
pathname.startsWith("/virtual-tour/");
document.title = isInBuilding
? getTitleForComplex(complexName)
: DEFAULT_TITLE;
}, [pathname, params.complexName, params.complexSlug]);
return null;
}
export default DocumentTitle;
+68 -66
View File
@@ -23,14 +23,12 @@ function getAmenitiesCount(complexName: string, title: string) {
function FloorPopup({ title, complexName, data, onSelect }: FloorPopupProps) {
const { setPopup } = usePopupStore();
const amenitiesCount = useMemo(
() => {
// Check if title is in SPECIAL_FLOORS or try to get amenities count
const amenities = getAmenitiesCount(complexName, title);
return amenities || null;
},
[title, complexName]
);
const amenitiesCount = useMemo(() => {
// Check if title is in SPECIAL_FLOORS or try to get amenities count
const amenities = getAmenitiesCount(complexName, title);
return amenities || null;
}, [title, complexName]);
return (
<div className="flex flex-col 2xl:gap-y-[0.556vw] gap-y-2">
@@ -43,21 +41,23 @@ function FloorPopup({ title, complexName, data, onSelect }: FloorPopupProps) {
)}
</div>
<div className="flex 2xl:gap-[0.278vw] gap-1">
<p className="2xl:px-[0.556vw] 2xl:py-[0.278vw] px-2 py-0.5 bg-[#F3F3F2] 2xl:rounded-[0.278vw] rounded text-caption-s opacity-70">
{amenitiesCount !== null
? `${amenitiesCount?.total} Amenities`
: `${
complexName === "marasi-drive" && data
? data[
title.split(" ")[0] === "East"
? "East"
: title.split(" ")[0] === "West"
? "West"
: "others"
]?.totalUnits
: data?.others.totalUnits
} apartments`}
</p>
{(data || amenitiesCount) && (
<p className="2xl:px-[0.556vw] 2xl:py-[0.278vw] px-2 py-0.5 bg-[#F3F3F2] 2xl:rounded-[0.278vw] rounded text-caption-s opacity-70">
{amenitiesCount !== null
? `${amenitiesCount?.total} Amenities`
: `${
complexName === "marasi-drive"
? data[
title.split(" ")[0] === "East"
? "East"
: title.split(" ")[0] === "West"
? "West"
: "others"
]?.totalUnits
: data?.others.totalUnits
} apartments`}
</p>
)}
{!amenitiesCount && (
<div className="2xl:px-[0.556vw] 2xl:py-[0.278vw] px-2 py-0.5 bg-[#30B216] bg-opacity-[8%] 2xl:rounded-[0.278vw] rounded flex 2xl:gap-[0.278vw] gap-1">
<span className="2xl:size-[0.833vw] size-3 text-[#30B216]">
@@ -68,50 +68,52 @@ function FloorPopup({ title, complexName, data, onSelect }: FloorPopupProps) {
)}
</div>
{((amenitiesCount?.indoor && amenitiesCount?.outdoor) ||
!amenitiesCount) && (
<hr className="border-[#E2E2DC] 2xl:h-[0.069vw] h-px" />
!amenitiesCount) &&
data && <hr className="border-[#E2E2DC] 2xl:h-[0.069vw] h-px" />}
{data && (
<div className="flex flex-col 2xl:gap-y-[0.556vw] gap-y-2">
{!amenitiesCount ? (
Object.entries(
data[
title.split(" ")[0] === "East"
? "East"
: title.split(" ")[0] === "West"
? "West"
: "others"
].types
).map(([unitType, count]) => (
<div className="flex 2xl:gap-[0.556vw] gap-2" key={unitType}>
<p className="bg-[#00BED7] rounded-full flex justify-center items-center font-mono text-caption-s text-white 2xl:size-[1.111vw] size-4">
{count}
</p>
<p className="text-caption-m opacity-70">
{formattedUnitTypes.get(unitType) || unitType}
</p>
</div>
))
) : (
<>
{amenitiesCount?.indoor && (
<div className="flex 2xl:gap-[0.556vw] gap-2">
<p className="bg-[#00BED7] rounded-full flex justify-center items-center font-mono text-caption-s text-white 2xl:size-[1.111vw] size-4">
{amenitiesCount.indoor}
</p>
<p className="text-caption-m opacity-70">Indoor Amenities</p>
</div>
)}
{amenitiesCount?.outdoor && (
<div className="flex 2xl:gap-[0.556vw] gap-2">
<p className="bg-[#00BED7] rounded-full flex justify-center items-center font-mono text-caption-s text-white 2xl:size-[1.111vw] size-4">
{amenitiesCount.outdoor}
</p>
<p className="text-caption-m opacity-70">Outdoor Amenities</p>
</div>
)}
</>
)}
</div>
)}
<div className="flex flex-col 2xl:gap-y-[0.556vw] gap-y-2">
{!amenitiesCount && data ? (
Object.entries(
data[
title.split(" ")[0] === "East"
? "East"
: title.split(" ")[0] === "West"
? "West"
: "others"
].types
).map(([unitType, count]) => (
<div className="flex 2xl:gap-[0.556vw] gap-2" key={unitType}>
<p className="bg-[#00BED7] rounded-full flex justify-center items-center font-mono text-caption-s text-white 2xl:size-[1.111vw] size-4">
{count}
</p>
<p className="text-caption-m opacity-70">
{formattedUnitTypes.get(unitType) || unitType}
</p>
</div>
))
) : (
<>
{amenitiesCount?.indoor && (
<div className="flex 2xl:gap-[0.556vw] gap-2">
<p className="bg-[#00BED7] rounded-full flex justify-center items-center font-mono text-caption-s text-white 2xl:size-[1.111vw] size-4">
{amenitiesCount.indoor}
</p>
<p className="text-caption-m opacity-70">Indoor Amenities</p>
</div>
)}
{amenitiesCount?.outdoor && (
<div className="flex 2xl:gap-[0.556vw] gap-2">
<p className="bg-[#00BED7] rounded-full flex justify-center items-center font-mono text-caption-s text-white 2xl:size-[1.111vw] size-4">
{amenitiesCount.outdoor}
</p>
<p className="text-caption-m opacity-70">Outdoor Amenities</p>
</div>
)}
</>
)}
</div>
<Button
variant="cta"
size="small"
+87 -79
View File
@@ -604,7 +604,8 @@ function FloorSelect({
floorData.floor === +floor!.split(" ").at(-1)! ||
floorData.floor === +floor!.split(" ").at(-1)!.split("-")[0]
) ||
SPECIAL_FLOORS.includes(floor)
SPECIAL_FLOORS.includes(floor) ||
(["19-20", "23-24", "27-28"].includes(floor) && complexName === "hq")
)
setPopup(
<FloorPopup
@@ -697,6 +698,91 @@ function FloorSelect({
className="pointer-events-none"
/>
<g ref={ref}>
{Object.entries(
floorsMasks[complexName as keyof typeof floorsMasks]
).map(([floorTitle, d]) => (
<path
onMouseMove={!isMobile ? handleFloorMouseMove : undefined}
onClick={() => {
if (!isMobile && !hasMoved && !hasZoomed) {
handleFloorClick(floorTitle);
}
}}
// onTouchStart={(e) => {
// // e.stopPropagation();
// setPosition({
// x: e.touches[0].clientX,
// y: e.touches[0].clientY,
// });
// }}
onTouchEnd={(e) => {
if (isMobile && !hasMoved && !hasZoomed) {
e.stopPropagation();
setHoveredFloor(
SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!
);
openPopup(
floorTitle,
!SPECIAL_FLOORS.includes(floorTitle) &&
complexName === "marasi-drive"
? (floorTitle.split(" ")[0] as "West" | "East")
: undefined
);
}
}}
onMouseEnter={() => {
setHoveredFloor(
SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!
);
if (!isMobile)
openPopup(
floorTitle,
!SPECIAL_FLOORS.includes(floorTitle) &&
complexName === "marasi-drive"
? (floorTitle.split(" ")[0] as "West" | "East")
: undefined
);
}}
onMouseLeave={(e) => {
if (!isMobile) {
const relatedTarget = (e.nativeEvent as MouseEvent)
.relatedTarget;
const movingToAnotherFloor =
relatedTarget instanceof SVGPathElement &&
ref.current?.contains(relatedTarget);
if (!movingToAnotherFloor) {
setPopup(null);
setHoveredFloor(null);
}
}
}}
key={floorTitle}
d={d}
className={clsx(
`fill-[#00BED7] cursor-pointer transition-opacity duration-300 hover:opacity-60 pointer-events-auto`,
selectedFloor ===
(SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!) ||
hoveredFloor ===
(SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!)
? "opacity-60"
: "opacity-20"
)}
/>
))}
{Object.entries(enumerationMasks[complexName]).map(
([floorTitle, mask]) =>
Array.isArray(mask) ? (
@@ -777,84 +863,6 @@ function FloorSelect({
</Fragment>
)
)}
{Object.entries(
floorsMasks[complexName as keyof typeof floorsMasks]
).map(([floorTitle, d]) => (
<path
onMouseMove={!isMobile ? handleFloorMouseMove : undefined}
onClick={() => {
if (!isMobile && !hasMoved && !hasZoomed) {
handleFloorClick(floorTitle);
}
}}
// onTouchStart={(e) => {
// // e.stopPropagation();
// setPosition({
// x: e.touches[0].clientX,
// y: e.touches[0].clientY,
// });
// }}
onTouchEnd={(e) => {
if (isMobile && !hasMoved && !hasZoomed) {
e.stopPropagation();
setHoveredFloor(
SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!
);
openPopup(
floorTitle,
!SPECIAL_FLOORS.includes(floorTitle) &&
complexName === "marasi-drive"
? (floorTitle.split(" ")[0] as "West" | "East")
: undefined
);
}
}}
onMouseEnter={() => {
setHoveredFloor(
SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!
);
if (!isMobile)
openPopup(
floorTitle,
!SPECIAL_FLOORS.includes(floorTitle) &&
complexName === "marasi-drive"
? (floorTitle.split(" ")[0] as "West" | "East")
: undefined
);
}}
onMouseLeave={() => {
if (!isMobile) {
setPopup(null);
setHoveredFloor(null);
}
}}
key={floorTitle}
d={d}
className={clsx(
`fill-[#00BED7] cursor-pointer transition-opacity duration-300 hover:opacity-60 pointer-events-auto`,
selectedFloor ===
(SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!) ||
hoveredFloor ===
(SPECIAL_FLOORS.includes(floorTitle) ||
complexName === "marasi-drive"
? floorTitle
: floorTitle.split(" ").at(-1)!)
? "opacity-60"
: "opacity-20"
)}
/>
))}
</g>
</svg>
</div>
+13 -3
View File
@@ -10,6 +10,7 @@ import Logo from "./header/Logo";
import NavItem from "./header/NavItem";
import BrochuresDropdown from "./header/BrochuresDropdown";
import MobileMenu from "./header/MobileMenu";
import clsx from "clsx";
function Header() {
function handleLogoClick() {
@@ -31,14 +32,19 @@ function Header() {
return (
<>
<header className="sticky top-0 left-0 w-full h-14 md:max-2xl:h-16 2xl:h-[4.444vw] flex items-center justify-center bg-white ring-[0.069vw] ring-[#E2E2DC] z-20">
<header
className={clsx(
"sticky top-0 left-0 w-full h-14 md:max-2xl:h-16 2xl:h-[4.444vw] flex items-center justify-center bg-white ring-[0.069vw] ring-[#E2E2DC] z-20",
modal && "max-md:border-b border-[#E2E2DC]"
)}
>
<div className="flex 2xl:gap-[1.111vw] gap-4 flex-1">
<Logo onClick={handleLogoClick} />
<div className="flex 2xl:gap-[0.278vw] gap-1 items-center max-md:hidden">
<span className="2xl:size-[1.389vw] size-5 opacity-40">
<LocationIcon />
</span>
<p className="opacity-40 text-s">Dubai</p>
<p className="text-s opacity-40">Dubai</p>
</div>
</div>
<div className="max-2xl:order-2">
@@ -68,7 +74,11 @@ function Header() {
</div>
<div className="flex flex-1 justify-end">{/* <ProfileBar /> */}</div>
</header>
<MobileMenu opened={opened} onClose={() => setOpened(false)} menuRef={menuRef} />
<MobileMenu
opened={opened}
onClose={() => setOpened(false)}
menuRef={menuRef}
/>
</>
);
}
+25 -9
View File
@@ -7,20 +7,36 @@ import { motion } from "motion/react";
import { useSwipeable } from "react-swipeable";
export interface InteriorSliderProps {
unitTypeSlug: string;
projectSlug: string;
unitTypeSlug?: string;
projectSlug?: string;
mockImages?: string[];
}
function InteriorSlider({ unitTypeSlug, projectSlug }: InteriorSliderProps) {
const images = projects
?.find((project) => project.slug === projectSlug)
?.types.find((type) => type.slug === unitTypeSlug)?.interiors;
function InteriorSlider({
unitTypeSlug,
projectSlug,
mockImages,
}: InteriorSliderProps) {
const images =
mockImages ||
projects
?.find((project) => project.slug === projectSlug)
?.types.find((type) => type.slug === unitTypeSlug)?.interiors;
const [currentIndex, setCurrentIndex] = useState(0);
const handlers = useSwipeable({
onSwipedLeft: () =>
images && setCurrentIndex(Math.min(currentIndex + 1, images.length - 1)),
onTouchStartOrOnMouseDown: ({ event }) => {
// После первого кадра гасим всплытие, иначе вложенные trackMouse оба ловят жест; на первом кадре всплытие нужно внешнему слайдеру
if (currentIndex > 0) {
event.stopPropagation();
}
},
onSwipedLeft: () => {
if (images) {
setCurrentIndex(Math.min(currentIndex + 1, images.length - 1));
}
},
onSwipedRight: () => setCurrentIndex(Math.max(currentIndex - 1, 0)),
preventScrollOnSwipe: true,
touchEventOptions: {
@@ -46,7 +62,7 @@ function InteriorSlider({ unitTypeSlug, projectSlug }: InteriorSliderProps) {
<img
src={src}
alt=""
className="object-cover object-center flex-shrink-0 h-full pointer-events-none"
className="size-full object-cover object-center flex-shrink-0 pointer-events-none"
/>
</div>
))}
+1 -4
View File
@@ -61,10 +61,7 @@ function ModalContainer() {
className="absolute inset-0 cursor-pointer"
onClick={() => setModal(null)}
/>
<div
ref={containerRef}
className="relative w-full max-md:border-t border-[#E2E2DC]"
>
<div ref={containerRef} className="relative w-full">
{modal}
<Button
onlyIcon
+6 -3
View File
@@ -52,9 +52,12 @@ function NewUnitSlider({ children }: PropsWithChildren) {
});
const handlers = useSwipeable({
onSwipedLeft: () =>
slides[currentSlide].text !== "Interior" &&
setCurrentSlide(Math.min(currentSlide + 1, slides.length - 1)),
onSwipedLeft: () => {
const slideText = slides[currentSlide]?.text;
if (slideText !== "Interior") {
setCurrentSlide(Math.min(currentSlide + 1, slides.length - 1));
}
},
onSwipedRight: () => setCurrentSlide(Math.max(currentSlide - 1, 0)),
preventScrollOnSwipe: true,
touchEventOptions: {
+24 -6
View File
@@ -3,15 +3,21 @@ import { api } from "../api/ky";
import { Unit } from "../types/IUnit";
import GenericFloorPlan from "./floor-plans/GenericFloorPlan";
import { getFloorPlanConfigForUnit } from "../data/floor-plan-config";
import { getSlugFromProjectName } from "../data/complex-config";
import { ComplexName } from "../types/ComplexName";
import { mergeHqLoungeVirtualUnits } from "../utils/hqLoungeVirtualUnits";
// ─── Helpers ─────────────────────────────────────────────
function getFloorParam(complexName: ComplexName, unit: Unit): string {
if (complexName === "dubai-marina" && (unit.floor === 39 || unit.floor === 40))
if (
complexName === "dubai-marina" &&
(unit.floor === 39 || unit.floor === 40)
)
return "39";
if (complexName === "dubai-marina" && (unit.floor === 41 || unit.floor === 42))
if (
complexName === "dubai-marina" &&
(unit.floor === 41 || unit.floor === 42)
)
return "41";
if (complexName === "hq" && (unit.floor === 29 || unit.floor === 30))
return "29";
@@ -21,13 +27,17 @@ function getFloorParam(complexName: ComplexName, unit: Unit): string {
// ─── Component ───────────────────────────────────────────
function OnFloorMask({ unit }: { unit: Unit }) {
const complexName = getSlugFromProjectName(unit.project);
const complexName = unit.projectSlug;
const config = complexName
? getFloorPlanConfigForUnit(complexName, unit)
: null;
const floorParam = complexName ? getFloorParam(complexName, unit) : "";
const { data: unitsOnFloor } = useQuery({
enabled:
!(
complexName === "hq" && [19, 20, 23, 24, 27, 28].includes(unit.floor)
) && !config,
queryKey: ["units-on-floor", complexName, floorParam, unit.wing],
queryFn: () =>
api
@@ -39,12 +49,20 @@ function OnFloorMask({ unit }: { unit: Unit }) {
}`
)
.json<Unit[]>(),
enabled: !!complexName && !!config,
});
if (!complexName || !config) return null;
const units = unitsOnFloor ?? [unit];
const baseUnits = unitsOnFloor ?? [unit];
const units =
complexName === "hq"
? mergeHqLoungeVirtualUnits(
baseUnits,
unit.floor,
config.masks,
config.getMaskKey
)
: baseUnits;
// Marasi Drive uses component-based rendering (inline SVG)
if (config.component) {
-5
View File
@@ -8,7 +8,6 @@ import { api } from "../api/ky";
import IMarker from "../types/IMarker";
import { formattedUnitTypes } from "../data/formattedUnitTypes";
import { useNavigate } from "react-router";
import { useEffect } from "react";
function SelectedComplexCard({
marker,
@@ -27,10 +26,6 @@ function SelectedComplexCard({
const navigate = useNavigate();
useEffect(() => {
console.log(marker);
}, [marker]);
return (
<motion.div
key={marker.name}
+30 -31
View File
@@ -14,6 +14,8 @@ interface UnitPopupProps {
balconyArea: number;
price: number;
complexName: string;
/** HQ shared lounge (unit number …00); popup shows title + floor only */
isLounge?: boolean;
}
function UnitPopup({
@@ -23,6 +25,7 @@ function UnitPopup({
unitNumber,
squareFt,
complexName,
isLounge,
}: UnitPopupProps) {
const { setPopup } = usePopupStore();
@@ -31,48 +34,44 @@ function UnitPopup({
<div className="2xl:space-y-[0.833vw] space-y-3">
<div className="2xl:space-y-[0.556vw] space-y-2">
<p className="text-h5 font-medium">
{formattedUnitTypes.get(unitType) || unitType}
{isLounge ? "Lounge" : formattedUnitTypes.get(unitType) || unitType}
</p>
<div className="flex items-center 2xl:gap-[0.556vw] gap-2">
{wing && (
{!isLounge && !!wing && (
<>
<p className="text-caption-s opacity-70">{wing} Wing</p>
<div className="2xl:size-[0.278vw] size-1 rounded-full bg-[#E2E2DC]" />
</>
)}
<p className="text-caption-s opacity-70">Floor {floor}</p>
<div className="2xl:size-[0.278vw] size-1 rounded-full bg-[#E2E2DC]" />
<p className="text-caption-s opacity-70">{unitNumber}</p>
</div>
<div className="2xl:p-[0.208vw] p-[3px] 2xl:rounded-[0.278vw] rounded bg-[#30B216] bg-opacity-[8%] flex 2xl:gap-[0.278vw] gap-1 w-fit">
<span className="2xl:size-[0.833vw] size-3 text-[#30B216]">
<HumanIcon />
</span>
<p className="text-caption-s text-[#30B216]">Virtual Tour</p>
{!isLounge && (
<>
<div className="2xl:size-[0.278vw] size-1 rounded-full bg-[#E2E2DC]" />
<p className="text-caption-s opacity-70">{unitNumber}</p>
</>
)}
</div>
{!isLounge && (
<div className="2xl:p-[0.208vw] p-[3px] 2xl:rounded-[0.278vw] rounded bg-[#30B216] bg-opacity-[8%] flex 2xl:gap-[0.278vw] gap-1 w-fit">
<span className="2xl:size-[0.833vw] size-3 text-[#30B216]">
<HumanIcon />
</span>
<p className="text-caption-s text-[#30B216]">Virtual Tour</p>
</div>
)}
</div>
</div>
<hr className="2xl:h-[0.069vw] h-px border-[#E2E2DC]" />
<div className="flex flex-col 2xl:gap-[0.556vw] gap-2">
<div className="flex 2xl:gap-[0.556vw] gap-2 justify-between">
<p className="text-caption-m opacity-70">Total Area</p>
<p className="text-caption-m">{squareFt.toFixed(2)} Sqft</p>
</div>
{/* <div className="flex 2xl:gap-[0.556vw] gap-2 justify-between">
<p className="text-caption-m opacity-70">Suites Area</p>
<p className="text-caption-m">{suitesArea.toFixed(2)} Sqft</p>
</div>
<div className="flex 2xl:gap-[0.556vw] gap-2 justify-between">
<p className="text-caption-m opacity-70">Balcony Area</p>
<p className="text-caption-m">{balconyArea.toFixed(2)} Sqft</p>
</div> */}
</div>
{/* <p className="text-h5 font-medium text-[#00BED7]">
{`AED ${Intl.NumberFormat("ar-AE", {
currency: "AED",
minimumFractionDigits: 0,
}).format(price)}`}
</p> */}
{!isLounge && !!squareFt && (
<>
<hr className="2xl:h-[0.069vw] h-px border-[#E2E2DC]" />
<div className="flex flex-col 2xl:gap-[0.556vw] gap-2">
<div className="flex 2xl:gap-[0.556vw] gap-2 justify-between">
<p className="text-caption-m opacity-70">Total Area</p>
<p className="text-caption-m">{squareFt.toFixed(2)} Sqft</p>
</div>
</div>
</>
)}
<Button
variant="cta"
size="small"
+1 -1
View File
@@ -1,6 +1,6 @@
function VideoModal({ src }: { src: string }) {
return (
<div className="h-dvh flex z-10 justify-center items-center w-full">
<div className="max-h-[95dvh] aspect-video flex z-10 justify-center items-center w-full">
<video
src={src}
className="object-cover max-w-[95%] 2xl:rounded-[0.833vw] rounded-xl max-2xl:landscape:h-[calc(100dvh-56px)]"
+33 -15
View File
@@ -31,7 +31,7 @@ interface GenericFloorPlanProps {
children?: React.ReactNode;
}
const defaultGetMaskKey = (unitNo: string) => unitNo.slice(-2);
const defaultGetMaskKey = (unitNo: string) => unitNo.slice(0, 2);
// ─── Main component ──────────────────────────────────────
@@ -82,6 +82,7 @@ function GenericFloorPlan({
{/* Unit overlays */}
{units.map((unit) => {
const maskKey = getMaskKey(unit.unitNo);
const maskData = masks.get(maskKey);
if (!maskData) return <Fragment key={unit.unitNo} />;
@@ -161,6 +162,7 @@ function GenericFloorPlanUnit({
suitesArea={u.suitsArea}
balconyArea={u.balconyArea}
price={u.salesPrice}
isLounge={formattedUnitType === "Lounge"}
/>
);
}
@@ -175,21 +177,37 @@ function GenericFloorPlanUnit({
return (
<g>
<text
transform={textTransform}
className={clsx(
"text-[8px] select-none",
isUnitPage && !isOtherUnit ? "fill-[#374151]" : "fill-white"
{!(
complexName === "hq" &&
[
"19-20",
"23-24",
"27-28",
"19",
"20",
"23",
"24",
"27",
"28",
].includes(floor || "")
) &&
formattedUnitType !== "Lounge" && (
<text
transform={textTransform}
className={clsx(
"text-[8px] select-none",
isUnitPage && !isOtherUnit ? "fill-[#374151]" : "fill-white"
)}
textAnchor="middle"
>
<tspan x={0} y={0}>
{unit.unitNo}
</tspan>
<tspan x={0} y={15}>
{formattedUnitType}
</tspan>
</text>
)}
textAnchor="middle"
>
<tspan x={0} y={0}>
{unit.unitNo}
</tspan>
<tspan x={0} y={15}>
{formattedUnitType}
</tspan>
</text>
<path
onClick={
!isUnitPage && !isMobile && !selectedUnit
@@ -12,6 +12,8 @@ import { isMobile } from "react-device-detect";
import GenericFloorPlan from "./GenericFloorPlan";
import { getFloorPlanConfig } from "../../data/floor-plan-config";
import { getComplexConfig } from "../../data/complex-config";
import { hqMockUnits } from "../../data/hq192327mockUnits";
import { mergeHqLoungeVirtualUnits } from "../../utils/hqLoungeVirtualUnits";
// ─── Props ───────────────────────────────────────────────
@@ -36,6 +38,8 @@ function ResidentialFloorView({
}: ResidentialFloorViewProps) {
const { setPopup, setPosition } = usePopupStore();
const [isCombinable, setIsCombinable] = useState(false);
const [isLower, setIsLower] = useState(false);
const [option, setOption] = useState<"1" | "2">("1");
const complexConfig = getComplexConfig(complexName);
const floorNumber = floor.floorNumber;
@@ -49,6 +53,8 @@ function ResidentialFloorView({
const config = getFloorPlanConfig(complexName, selectedFloor, {
isCombinable,
wing: wing as "East" | "West",
isLower,
option,
});
// ── Floor display name ─────────────────────────────────
@@ -63,8 +69,7 @@ function ResidentialFloorView({
: currentFloorData?.others?.totalUnits || 0;
// ── Special floor check (Dubai Marina: 39-40, 41-42) ──
const isSpecialFloor =
selectedFloor === "39-40" || selectedFloor === "41-42";
const isSpecialFloor = selectedFloor === "39-40" || selectedFloor === "41-42";
// ── Select options ─────────────────────────────────────
const selectOptions = getSelectOptions(complexName, floorsData);
@@ -76,9 +81,12 @@ function ResidentialFloorView({
>
{/* ── Header ──────────────────────────────────────── */}
<div className="2xl:space-y-[0.556vw] space-y-2 border-b border-[#E2E2DC] 2xl:pb-[1.667vw] pb-4">
<p className="font-medium text-h4">{floorTitle}</p>
<p className="text-h4 font-medium">{floorTitle}</p>
<div className="flex items-center 2xl:gap-[0.278vw] gap-1">
<Badge variant="secondary" text={`${totalUnits} Apartments`} />
{!(
complexName === "hq" &&
[19, 20, 23, 24, 27, 28].includes(floor.floorNumber)
) && <Badge variant="secondary" text={`${totalUnits} Apartments`} />}
{complexConfig.hasCombinable && !isSpecialFloor && (
<Badge variant="primary" text="Combinable" />
)}
@@ -122,6 +130,43 @@ function ResidentialFloorView({
</div>
)}
{/* HQ: 29-30 floor toggle (kostyl ebuchii) */}
{complexName === "hq" &&
[19, 23, 27, 29].includes(floor.floorNumber) && (
<div className="flex gap-2 justify-center items-center">
<Button
variant={isLower ? "cta" : "primary"}
onClick={() => setIsLower(true)}
>
Lower
</Button>
<Button
variant={!isLower ? "cta" : "primary"}
onClick={() => setIsLower(false)}
>
Upper
</Button>
</div>
)}
{/* HQ: 19-23-27 floor toggle (kostyl ebuchii) */}
{complexName === "hq" && [19, 23, 27].includes(floor.floorNumber) && (
<div className="flex gap-2 justify-center items-center">
<Button
variant={option === "1" ? "cta" : "primary"}
onClick={() => setOption("1")}
>
Option 1
</Button>
<Button
variant={option === "2" ? "cta" : "primary"}
onClick={() => setOption("2")}
>
Option 2
</Button>
</div>
)}
{/* ── Floor plan ──────────────────────────────────── */}
<div
className="2xl:py-[1.667vw] 2xl:px-[1.111vw] max-2xl:p-4 border border-[#E2E2DC] 2xl:rounded-[0.833vw] rounded-lg relative 2xl:space-y-[2.222vw] space-y-8"
@@ -133,7 +178,13 @@ function ResidentialFloorView({
complexName={complexName}
config={config}
selectedFloor={selectedFloor}
unitsOnFloor={unitsOnFloor}
unitsOnFloor={
complexName === "hq" && [19, 23, 27].includes(floor.floorNumber)
? hqMockUnits[floor.floorNumber as keyof typeof hqMockUnits][
isLower ? 0 : 1
][option === "1" ? 0 : 1]
: unitsOnFloor
}
floorNumber={floorNumber}
/>
</div>
@@ -180,14 +231,33 @@ function getSelectOptions(
if (complexName === "hq") {
if (!floorsData) return [];
// Exclude floors 19, 20, 23, 24, 27, 28
const excludedFloors = [19, 20, 23, 24, 27, 28];
return floorsData
.filter((item) => !excludedFloors.includes(item.floor))
.map((item) => {
if (item.floor === 29) return "29-30";
return item.floor.toString();
});
return [
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"17",
"18",
"19-20",
"21",
"22",
"23-24",
"25",
"26",
"27-28",
"29-30",
];
// if (!floorsData) return [];
// return floorsData.map((item) => {
// if (item.floor === 29) return "29-30";
// return item.floor.toString();
// });
}
// Default
@@ -211,8 +281,7 @@ function UnitTypeBadges({
wing: string;
}) {
if (complexName === "marasi-drive") {
const wingData =
currentFloorData?.[wing as "West" | "East"];
const wingData = currentFloorData?.[wing as "West" | "East"];
return (
<>
@@ -309,6 +378,16 @@ function FloorPlanRenderer({
}
// Image-based rendering (Dubai Marina, HQ)
const units =
complexName === "hq"
? mergeHqLoungeVirtualUnits(
unitsOnFloor,
floorNumber,
config.masks,
config.getMaskKey
)
: unitsOnFloor;
return (
<GenericFloorPlan
complexName={complexName}
@@ -318,7 +397,7 @@ function FloorPlanRenderer({
getMaskKey={config.getMaskKey}
filterUnits={config.filterUnits}
selectedFloor={selectedFloor}
unitsOnFloor={unitsOnFloor}
unitsOnFloor={units}
wing={config.wing}
/>
);
+25 -5
View File
@@ -1,26 +1,33 @@
// ─── Marasi Drive ────────────────────────────────────────
/** Marasi Drive East Wing lower: floors 521 */
export const MARASI_EAST_LOWER_FLOORS = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21];
export const MARASI_EAST_LOWER_FLOORS = [
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
];
/** Marasi Drive East Wing upper: floors 2431 */
export const MARASI_EAST_UPPER_FLOORS = [24, 25, 26, 27, 28, 29, 30, 31];
/** Marasi Drive West Wing lower: floors 521 */
export const MARASI_WEST_LOWER_FLOORS = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21];
export const MARASI_WEST_LOWER_FLOORS = [
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
];
/** Marasi Drive West Wing upper: floors 2431 */
export const MARASI_WEST_UPPER_FLOORS = [24, 25, 26, 27, 28, 29, 30, 31];
/** Legacy: Marasi Drive East Wing (all floors) */
export const MARASI_EAST_FLOORS = [...MARASI_EAST_LOWER_FLOORS, ...MARASI_EAST_UPPER_FLOORS];
export const MARASI_EAST_FLOORS = [
...MARASI_EAST_LOWER_FLOORS,
...MARASI_EAST_UPPER_FLOORS,
];
// ─── Dubai Marina ────────────────────────────────────────
/** Dubai Marina: standard floors (738, excluding 21) */
export const DUBAI_MARINA_STANDARD_FLOORS = [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
];
// ─── HQ ──────────────────────────────────────────────────
@@ -45,3 +52,16 @@ export const HQ_18_22_26_FLOORS = [18, 22, 26];
/** HQ: floors 29-30 (combined) */
export const HQ_29_30_FLOORS = [29, 30];
/** HQ: floors 19-27 (combined) */
export const HQ_19_23_27_FLOORS = [
"19-20",
"23-24",
"27-28",
"19",
"20",
"23",
"24",
"27",
"28",
];
+3 -1
View File
@@ -63,7 +63,9 @@ export function getProjectName(complexName: ComplexName): string {
}
/** Resolve a slug from the full project name (e.g. "Rove Home Dubai Marina" → "dubai-marina") */
export function getSlugFromProjectName(projectName: string): ComplexName | null {
export function getSlugFromProjectName(
projectName: string
): ComplexName | null {
const entry = Object.values(complexConfigs).find(
(c) => c.projectName === projectName
);
+82 -10
View File
@@ -6,11 +6,9 @@ import { dubaiMarinaMasks as dubaiMarina3940Masks } from "./floor-plan-masks/dub
import { dubaiMarinaMasks as dubaiMarina4142Masks } from "./floor-plan-masks/dubai-marina_41-42";
import { hq5_9_13Masks } from "./floor-plan-masks/hq_5_9_13";
import { hq6_10_14Masks } from "./floor-plan-masks/hq_6_10_14";
import { hq7_11Masks } from "./floor-plan-masks/hq_7_11";
import { hq8_12Masks } from "./floor-plan-masks/hq_8_12";
import { hq17_21_25Masks } from "./floor-plan-masks/hq_17_21_25";
import { hq18_22_26Masks } from "./floor-plan-masks/hq_18_22_26";
import { hq29_30Masks } from "./floor-plan-masks/hq_29_30";
import { hq29_30MasksLower } from "./floor-plan-masks/hq_29_30_lower";
import { Unit } from "../types/IUnit";
import { filterDuplicateUnits } from "../utils/filterDuplicateUnits";
import {
@@ -25,6 +23,8 @@ import {
MARASI_EAST_FLOORS,
MARASI_WEST_LOWER_FLOORS,
MARASI_WEST_UPPER_FLOORS,
HQ_19_23_27_FLOORS,
// HQ_19_23_27_FLOORS,
} from "../constants/floor-ranges";
import {
floorPlanMarasiDriveEastMasks,
@@ -34,6 +34,13 @@ import {
import FloorPlanMarasiDriveEast from "../components/FloorPlanMarasiDriveEast";
import FloorPlanMarasiDriveWestLower from "../components/FloorPlanMarasiDriveWestLower";
import FloorPlanMarasiDriveWestUpper from "../components/FloorPlanMarasiDriveWestUpper";
import { hq7_11Masks } from "./floor-plan-masks/hq_7_11";
import { hq8_12Masks } from "./floor-plan-masks/hq_8_12";
import { hq29_30MasksUpper } from "./floor-plan-masks/hq_29_30_upper";
import { hq_19_23_27_1Masks } from "./floor-plan-masks/hq_19_23_27_1";
import { hq_19_23_27_2Masks } from "./floor-plan-masks/hq_19_23_27_2";
import { hq_19_23_27_1_upperMasks } from "./floor-plan-masks/hq_19_23_27_1_upper";
import { hq_19_23_27_2_upperMasks } from "./floor-plan-masks/hq_19_23_27_2_upper";
// ─── Types ───────────────────────────────────────────────
@@ -127,10 +134,45 @@ const hq182226: FloorPlanLayoutConfig = {
getMaskKey: (unitNo) => unitNo.slice(-2),
};
const hq2930: FloorPlanLayoutConfig = {
const hq192327_1_lower: FloorPlanLayoutConfig = {
viewBox: "0 0 752 668",
imagePath: "/images/floor-plans/hq/floor-plan_29-30.jpg",
masks: hq29_30Masks,
imagePath: "/images/floor-plans/hq/floor-plan_19_23_27_1.jpg",
masks: hq_19_23_27_1Masks,
getMaskKey: (unitNo) => unitNo.slice(-2),
};
const hq192327_1_upper: FloorPlanLayoutConfig = {
viewBox: "0 0 752 668",
imagePath: "/images/floor-plans/hq/floor-plan_20_24_28_1.jpg",
masks: hq_19_23_27_1_upperMasks,
getMaskKey: (unitNo) => unitNo.slice(-2),
};
const hq192327_2_lower: FloorPlanLayoutConfig = {
viewBox: "0 0 752 668",
imagePath: "/images/floor-plans/hq/floor-plan_19_23_27_2.jpg",
masks: hq_19_23_27_2Masks,
getMaskKey: (unitNo) => unitNo.slice(-3),
};
const hq192327_2_upper: FloorPlanLayoutConfig = {
viewBox: "0 0 752 668",
imagePath: "/images/floor-plans/hq/floor-plan_20_24_28_2.jpg",
masks: hq_19_23_27_2_upperMasks,
getMaskKey: (unitNo) => unitNo.slice(-3),
};
const hq2930Lower: FloorPlanLayoutConfig = {
viewBox: "0 0 752 668",
imagePath: "/images/floor-plans/hq/floor-plan_29-30_lower.jpg",
masks: hq29_30MasksLower,
getMaskKey: (unitNo) => unitNo.slice(-2),
};
const hq2930Upper: FloorPlanLayoutConfig = {
viewBox: "0 0 752 668",
imagePath: "/images/floor-plans/hq/floor-plan_29-30_upper.jpg",
masks: hq29_30MasksUpper,
getMaskKey: (unitNo) => unitNo.slice(-2),
};
@@ -169,14 +211,25 @@ const marasiDriveWestUpper: FloorPlanLayoutConfig = {
export function getFloorPlanConfig(
complexName: ComplexName,
floorStr: string,
options?: { isCombinable?: boolean; wing?: "East" | "West" }
options?: {
isCombinable?: boolean;
wing?: "East" | "West";
isLower?: boolean;
option?: "1" | "2";
}
): FloorPlanLayoutConfig | null {
const floorNum = parseInt(floorStr);
// ── Marasi Drive ──────────────────────────────────────
if (complexName === "marasi-drive") {
// Wing can be passed explicitly or parsed from "East 5" / "West 5"
const wing = options?.wing || (floorStr.startsWith("East") ? "East" : floorStr.startsWith("West") ? "West" : null);
const wing =
options?.wing ||
(floorStr.startsWith("East")
? "East"
: floorStr.startsWith("West")
? "West"
: null);
const num = wing ? parseInt(floorStr.split(" ").at(-1) || "") : floorNum;
if (wing === "East" && MARASI_EAST_FLOORS.includes(num)) {
@@ -192,7 +245,9 @@ export function getFloorPlanConfig(
// ── Dubai Marina ──────────────────────────────────────
if (complexName === "dubai-marina") {
if (DUBAI_MARINA_STANDARD_FLOORS.includes(floorNum)) {
return options?.isCombinable ? dubaiMarinaStandardComb : dubaiMarinaStandard;
return options?.isCombinable
? dubaiMarinaStandardComb
: dubaiMarinaStandard;
}
if (floorStr === "39-40" || floorNum === 39 || floorNum === 40) {
return dubaiMarina3940;
@@ -223,7 +278,16 @@ export function getFloorPlanConfig(
return hq182226;
}
if (HQ_29_30_FLOORS.includes(floorNum)) {
return hq2930;
return options?.isLower ? hq2930Lower : hq2930Upper;
}
if (HQ_19_23_27_FLOORS.includes(floorStr)) {
return options?.option === "1"
? options?.isLower
? hq192327_1_lower
: hq192327_1_upper
: options?.isLower
? hq192327_2_lower
: hq192327_2_upper;
}
// Other HQ floor layouts can be added here as mask data becomes available
}
@@ -243,5 +307,13 @@ export function getFloorPlanConfigForUnit(
return getFloorPlanConfig(complexName, floorStr, {
isCombinable: unit.unitNo.endsWith("-C"),
wing: unit.wing as "East" | "West" | undefined,
isLower:
complexName === "hq" ? [19, 23, 27, 29].includes(unit.floor) : undefined,
option:
complexName === "hq"
? unit.unitNo.endsWith("F")
? "2"
: "1"
: undefined,
});
}
+9 -1
View File
@@ -1,6 +1,14 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq17_21_25Masks: FloorPlanMasks = new Map([
[
"00",
{
d: "M363.787 358.605h-18.621v20.689h18.641v28.984h6.215v1.168h-6.215v22.372h23.515v-22.372h-6.065v-1.168h9.148v33.01h41.394v-15.334h-2.934v-5.903h2.934v-29.584h-2.43v-5.25h-.502v-5.957h2.932v-16.847h-2.988v-5.061h-65.024z",
textTransform: [364, 359],
formattedUnitType: "Lounge",
},
],
[
"01",
{
@@ -86,7 +94,7 @@ export const hq17_21_25Masks: FloorPlanMasks = new Map([
{
d: "M298.303 297.5H304.803V259H316.303V254H334.303V259H362.803V230.5H360.803L360.803 210.625H319.836L319.836 230.725H317V217H284.351V219.5H263.678V218.54C259.996 218.518 257 221.496 257 225.178V241H251.803C248.489 241 246.303 243.686 246.303 247V272C246.303 275.314 248.489 278 251.803 278H256.879V299.923H261.73V299.308H263.528V298.5H270.537V300H298.303V297.5Z",
textTransform: [298, 240],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
+1 -1
View File
@@ -86,7 +86,7 @@ export const hq18_22_26Masks: FloorPlanMasks = new Map([
{
d: "M298.303 297.5H304.803V259H316.303V254H334.303V259H362.803V230.5H360.803L360.803 210.625H319.836L319.836 230.725H317V217H284.351V219.5H263.678V218.54C259.996 218.518 257 221.496 257 225.178V241H251.803C248.489 241 246.303 243.686 246.303 247V272C246.303 275.314 248.489 278 251.803 278H256.879V299.923H261.73V299.308H263.528V298.5H270.537V300H298.303V297.5Z",
textTransform: [298, 240],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -0,0 +1,36 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq_19_23_27_1Masks: FloorPlanMasks = new Map([
[
"01",
{
d: "M495.001 363.946c.302.004.919.011.962 0l-.003 24.328c0 1.847-.133 4.509-.333 5.557-.199 1.048-.449 2.163-.965 3.245-.515 1.081-1.797 3.361-2.695 4.659-.899 1.297-18.011 24.749-19.137 26.233-1.125 1.484-3.479 3.683-6.65 5.627-2.538 1.555-6.787 2.012-8.595 2.045h-22.76l-.26-.97H431.7v8.696h-41.791v-32.57h-29.75v11.92H349.33v-11.92h-32.741v-23.471h4.668v-5.745h-4.668v-20.892h112.162v3.754h4.799v1.401h54.754v-.865h1.866v-.509h4.831z",
formattedUnitType: "",
textTransform: [465, 364],
},
],
[
"02",
{
d: "M385.103 114.146v84.533l60.415.21v-2.583h7.551v5.879h-6.516v158.647h6.545v3.984h28.094v-2.987h7.021v.924h1.94v.462h5.805V112.861c.005-15.827.013-47.829 0-49.223-.016-1.742-.22-7.816-1.836-10.594s-5.148-6.529-7.628-7.69a18.9 18.9 0 0 0-10.045-1.664c-4.097.44-6.859 2.464-8.114 3.406S418.718 86.1 416.851 87.692c-1.866 1.591-4.165 4.381-5.56 6.994-1.116 2.09-1.362 5.348-1.346 6.715v12.745z",
formattedUnitType: "",
textTransform: [414, 154],
},
],
[
"03",
{
d: "M259.951 342.653h-4.843l.02-117.844c.302-1.709.453-1.977 1.844-3.603 1.113-1.3 3.654-1.554 4.786-1.518v.739h20.759v-2.441h35.939v-7.397h41.72l-.082 21.216h1.831v28.605h-28.59v-4.802h-17.98v87.045h-46.417v-1.399h-7.088v.886h-1.899z",
formattedUnitType: "",
textTransform: [286, 343],
},
],
[
"04",
{
d: "M365.025 551.953v-84.559l-60.339.074v2.277h-7.832v-5.874h6.544V387.45h-6.547v-6.012h6.547v-37.574h-34.494l.053 1.56h-7.114v-.847h-1.916v-.695h-4.779c-.09 0-.018 201.331 0 202.45s.21 1.697 1.451 3.376 2.554 1.958 3.533 2.116c.784.126 1.423.052 1.644 0v-.869h20.849v3.479h-2.752c-.033 10.869-.078 33.125 0 35.193.098 2.584.88 3.436 1.634 5.043.755 1.607 1.915 3.162 2.696 4.077s16.278 20.702 17.504 22.213 2.43 2.846 3.897 3.81c1.467.963 2.365 1.511 3.657 2.124s4.576 1.423 6.568 1.467h.024c1.983.044 3.858.085 5.603-.482 1.752-.569 3.963-1.62 5.627-2.693s3.503-2.868 4.795-4.576c1.033-1.366 13.546-18.548 19.673-26.968 2.058-2.857 6.709-9.287 8.849-12.156 2.676-3.585 4.457-7.559 4.959-8.931.402-1.099.524-4.907.536-6.674v-13.258h-.87z",
formattedUnitType: "",
textTransform: [414, 503],
},
],
]);
@@ -0,0 +1,52 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq_19_23_27_1_upperMasks: FloorPlanMasks = new Map([
[
"01",
{
d: "M488.304 365.222h1.462s.607 5.544 0 14.201c-.13 1.857-1.937 5.237-5.108 7.181-2.538 1.555-15.519.952-17.327.986h-32.766v47.324H431.7v8.696h-41.791v-32.57h-29.75v11.92H349.33v-11.92h-32.741v-23.471h4.668v-5.745h-4.668v-20.891h112.162v3.754h4.799v1.4h54.754z",
formattedUnitType: "",
textTransform: [465, 364],
},
],
[
"02",
{
d: "M490.153 363.459h5.805V200.5H490v.5h-2v1h-7v-2h-27.931v2.429h-6.516v158.647h6.545v3.984h28.094v-2.987h7.021v.924h1.94z",
formattedUnitType: "",
textTransform: [414, 154],
},
],
[
"03",
{
d: "M385.103 198.923V114.39h49.713v-12.745c-.016-1.367-.374-5.9.742-7.99 1.395-2.613 3.686-4.336 5.991-5.488h42.476a9 9 0 0 1 9 9v15.348h1.846v.59h1.087V199H490v-.5h-2v-1h-7v1.5h-27.931v-2.45h-7.551v2.583z",
formattedUnitType: "",
textTransform: [286, 343],
},
],
[
"04",
{
d: "M259.951 342.897h-4.843l.02-117.844c.302-1.709.453-1.977 1.844-3.603 1.113-1.3 3.655-1.554 4.786-1.518v.739h20.759v-2.441h35.939v-7.397h41.721l-.083 21.216h1.831v28.605h-28.59v-4.802h-17.98v87.045h-46.417v-1.399h-7.087v.886h-1.9z",
formattedUnitType: "",
textTransform: [414, 503],
},
],
[
"05",
{
d: "M259.927 344.126h-4.779c-.051 0-.05 65.55-.036 122.052H260v-.678h1.5v-.5h7.5v1.178h27.854v-2.063h6.544v-76.421h-6.547v-6.012h6.547v-37.574h-34.494l.054 1.56h-7.114v-.846h-1.917z",
formattedUnitType: "",
textTransform: [414, 503],
},
],
[
"06",
{
d: "m365.025 467.639-60.339.073v2.277h-7.832V467.5H269v1.5h-7.5v-1H260v-.5h-4.887c.01 41.971.028 78.601.035 79.076.018 1.12.21 1.697 1.452 3.376s2.553 1.959 3.533 2.116c.783.126 1.422.052 1.644 0v-.869h20.848v18.123a9 9 0 0 0 9 9h40.182a9 9 0 0 0 9-9v-14.796h17.428v-.581h1.889v-.524h4.901z",
formattedUnitType: "",
textTransform: [414, 503],
},
],
]);
@@ -0,0 +1,12 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq_19_23_27_2Masks: FloorPlanMasks = new Map([
[
"01F",
{
d: "M385.103 114.146v84.533h41.89v-2.373h7.694v5.994l10.831-.068v-5.926h7.551v5.879l-18.382.115v146.511h-14.063l8.127 11.877v-1.293h3.696v5.047l1.102.032 11.754.342-.174-3.869 7.969-.115v3.984h28.094v-2.987h7.021v.924h1.94v.462h5.805V112.861c.005-15.827.012-47.829 0-49.223-.016-1.742-.22-7.816-1.836-10.594s-5.148-6.529-7.628-7.69a18.9 18.9 0 0 0-10.045-1.664c-4.097.44-6.859 2.464-8.115 3.406-1.255.942-49.616 39.004-51.483 40.596s-4.165 4.381-5.56 6.994c-1.116 2.09-1.363 5.348-1.346 6.715v12.745zm-20.078 353.249h-4.866l-55.473.073v2.277h-7.832v-5.874h7.832l.112-76.421h-7.947v-6.012h18.47l.019-21.995.015-16.79h-46.417l.019 2.771h-7.114v-.847h-1.916v-.695h-4.779c-.09 0-.018 201.331 0 202.45s.21 1.697 1.451 3.376 2.554 1.958 3.533 2.116c.784.126 1.423.052 1.644 0v-.869h20.849v3.479h-2.752c-.033 10.869-.078 33.125 0 35.193.098 2.584.88 3.436 1.634 5.043.755 1.607 1.915 3.162 2.696 4.077s16.278 20.702 17.504 22.213 2.43 2.846 3.897 3.81c1.467.963 2.365 1.511 3.657 2.124s4.576 1.423 6.568 1.467h.024c1.983.044 3.858.085 5.603-.482 1.752-.569 3.963-1.62 5.627-2.693s3.503-2.868 4.795-4.576c1.033-1.366 13.546-18.548 19.673-26.969 2.058-2.856 6.709-9.287 8.849-12.155 2.676-3.585 4.457-7.559 4.959-8.931.402-1.099.524-4.907.535-6.674v-13.258h-.869zm130.938-103.449c-.044.011-.66.004-.962 0v.523h-4.831v.509h-1.866v.865h-54.755v-1.369l-1.102-.032h-3.696v-3.754l-8.127-11.877h14.063V224.109l-74.558-1.187.047-12.333h-41.72v7.397h-35.94v2.441h-20.758v-.739c-1.132-.036-3.674.218-4.786 1.518-1.391 1.626-1.542 1.894-1.844 3.603l-.044 119.073h4.843l.024-1.742h1.899v-.886h7.088v1.399h46.205l-1.022-87.045 1.234 87.045-.015 16.79.015 1.245v20.892h5.902v5.745h-5.918l.016-5.745-10.527-.142-.03 6.012-.112 76.421v3.597l55.473-.073v-56.599h29.749v32.57H431.7v-8.696h2.865l.26.97h22.76c1.808-.033 6.057-.49 8.595-2.045 3.171-1.944 5.525-4.143 6.65-5.627s18.238-24.936 19.137-26.233c.898-1.298 2.179-3.578 2.695-4.659.516-1.082.766-2.197.965-3.245.2-1.048.333-3.71.333-5.557z",
formattedUnitType: "",
textTransform: [385, 114],
},
],
]);
@@ -0,0 +1,12 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq_19_23_27_2_upperMasks: FloorPlanMasks = new Map([
[
"01F",
{
d: "M484.025 88.167a9 9 0 0 1 9 9v15.348h1.846v.589h1.087v250.355h-5.805v-.462h-.228c.125 4.271.221 11.002-.159 16.426-.131 1.857-1.937 5.237-5.109 7.181-2.537 1.555-15.518.952-17.326.986h-32.767v47.324H431.7v8.696h-41.792v-32.57h-29.749v11.92H349.33v-11.92h-6.924l.007.111v11.9h-12.494v22.607h-13.934v21.556l49.039-.06v86.267h-4.9v.523h-1.889v.582h-17.428v14.796a9 9 0 0 1-9 9h-40.182a9 9 0 0 1-9-9v-18.123h-20.849v.869c-.222.053-.86.126-1.643 0-.98-.157-2.292-.437-3.533-2.116s-1.434-2.256-1.452-3.376c-.017-1.11-.086-198.709-.001-202.397h-.039l.021-119.125.063-.367c.247-1.434.351-2.034 1.637-3.538 1.113-1.3 3.962-2.011 5.094-1.975v1.206h20.759v-2.441h35.774v-7.511h44.543v11.064l23.983 1.3.16-23.019h-2.038V114.39h49.712v-12.744c-.016-1.368-.373-5.9.743-7.99 1.395-2.614 3.686-4.337 5.991-5.489zM296.854 469.989h7.833v-5.875h-7.833zm18.501-197.5v71.323h.065v4.731h20.879v-76.054zm-53.504 69.009v.887h-1.9v1.794h-.024v.346h1.917v.848h7.114l-.054-1.561h.033v-2.314zm53.504-85.646v5.754h18.54v-5.754z",
formattedUnitType: "",
textTransform: [385, 114],
},
],
]);
@@ -1,6 +1,6 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq29_30Masks: FloorPlanMasks = new Map([
export const hq29_30MasksLower: FloorPlanMasks = new Map([
[
"05",
{
+100
View File
@@ -0,0 +1,100 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq29_30MasksUpper: FloorPlanMasks = new Map([
[
"05",
{
d: "M494.688 84.623v27.457H492.8v-.5h-35.769v-4.731h-3.548v4.731H428.69V84.623z",
textTransform: [465, 85],
formattedUnitType: "PL",
},
],
[
"03",
{
d: "M453.046 199.145h9.967l-.002 12.303h5.52v67.905h-15.505v-2.288h-7.672v2.32h-10.617l-.044-80.316 10.688.063v2.327h7.665z",
textTransform: [465, 235],
formattedUnitType: "PL",
},
],
[
"06",
{
d: "M392.358 115.212v-1.052l-6.417.101-.256 21.817h13.549v23.553h12.171v26.009h5.643c.047 4.035.113 12.137 0 12.263s6.561.053 9.911 0v-2.365h6.815v-34.831h-4.696v-5.911h4.696v-37.221h-6.558v-2.363c0-.023-23.261-.01-34.858 0",
textTransform: [414, 154],
formattedUnitType: "PL",
},
],
[
"02",
{
d: "M430.229 356.829V346.34h4.695v-65.981l10.649.153v2.313h7.676v-2.466h9.912v12.327c1.829.009 5.52.021 5.643 0 .123-.02.052 45.367 0 68.063h-15.551v-2.304h-7.689v2.304h-12.945v-3.92z",
textTransform: [465, 315],
formattedUnitType: "PL",
},
],
[
"04",
{
d: "M453.045 197.896h9.968l-.002-12.303h5.871v-70.395h-15.856v2.288h-7.672v-2.32h-10.617l-.045 82.806 10.689-.063v-2.328h7.664z",
textTransform: [465, 154],
formattedUnitType: "PL",
},
],
[
"10",
{
d: "M306.213 546.442h10.671l-.03-82.63h-10.601v2.358h-7.667l-.059-2.358h-9.928v12.18h-5.556v70.45h15.507v-2.349h7.663z",
textTransform: [286, 503],
formattedUnitType: "PL",
},
],
[
"09",
{
d: "M298.543 462.552h-9.967l.002-12.303h-5.52v-67.905h15.504v2.288h7.673v-2.32h10.617l.044 80.315-10.688-.063v-2.327h-7.665z",
textTransform: [286, 421],
formattedUnitType: "PL",
},
],
[
"08",
{
d: "M298.543 300.62h-9.967l.002 12.303h-5.52v67.905h15.504v-2.288h7.673v2.32h10.617l.044-80.316-10.688.064v2.327h-7.665z",
textTransform: [286, 339],
formattedUnitType: "PL",
},
],
[
"12",
{
d: "M361.166 547.627h4.701l-.031-22.018h-13.549v-23.552h-12.171v-26.009h-5.643c-.047-4.035-.113-12.137 0-12.263.113-.127-6.56-.053-9.911 0v2.365h-6.508v34.83h4.695v5.912h-4.695v37.22h6.506v2.364c0 .023 23.195.009 34.793 0v.507h1.813z",
textTransform: [338, 503],
formattedUnitType: "PL",
},
],
[
"11",
{
d: "m301.599 577.739.097-27.757 57.696.042v-.537h1.836v-.65h4.703c.022 1.665.054 6.382 0 11.936s-1.515 9.823-2.239 11.264l-6.719 9.316-5.038-3.614z",
textTransform: [327, 567],
formattedUnitType: "PL",
},
],
[
"07",
{
d: "M306.248 299.666h10.637l-.031-28.944h46.039v-32.461h-79.942l.14 49.014h5.492v12.391h9.968v-2.36h7.697z",
textTransform: [298, 239],
formattedUnitType: "PL",
},
],
[
"01",
{
d: "M318.049 378.756v-32.445l111.002-.061v15.736h5.642v16.767h-5.642v5.91h5.642v7.997h-88.008v-8.099h-23.943v-5.805z",
textTransform: [405, 380],
formattedUnitType: "PR",
},
],
]);
+9 -1
View File
@@ -1,6 +1,14 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq5_9_13Masks: FloorPlanMasks = new Map([
[
"00",
{
d: "M364.237 358.485h-18.622v20.689h18.642v28.984h6.214v1.168h-6.214v22.371h23.515v-22.371h-6.066v-1.168h9.148v33.01h41.394v-15.334h-2.933v-5.903h2.933v-29.585h-2.43v-5.249h-.502v-5.957h2.932v-16.847h-2.988v-5.062h-65.023z",
textTransform: [364, 358],
formattedUnitType: "Lounge",
},
],
[
"01",
{
@@ -86,7 +94,7 @@ export const hq5_9_13Masks: FloorPlanMasks = new Map([
{
d: "M298.303 297.5h6.5V259h11.5v-5h18v5h28.5v-28.5h-2v-19.875h-40.967v20.1H317V217h-32.649v2.5h-20.673v-.96a6.64 6.64 0 0 0-6.678 6.638V241h-5.197c-3.314 0-5.5 2.686-5.5 6v25c0 3.314 2.186 6 5.5 6h5.076v21.923h4.851v-.615h1.798v-.808h7.009v1.5h27.766z",
textTransform: [298, 240],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
+1 -1
View File
@@ -86,7 +86,7 @@ export const hq6_10_14Masks: FloorPlanMasks = new Map([
{
d: "M298.303 297.5h6.5V259h11.5v-5h18v5h28.5v-28.5h-2v-19.875h-40.967v20.1H317V217h-32.649v2.5h-20.673v-.96L257 218.5V241h-5.197c-3.314 0-5.5 2.686-5.5 6v25c0 3.314 2.186 6 5.5 6h5.076v21.923h4.851v-.615h1.798v-.808h7.009v1.5h27.766z",
textTransform: [298, 240],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
+72 -40
View File
@@ -1,6 +1,14 @@
import { FloorPlanMasks } from "../../types/FloorPlanMasks";
export const hq7_11Masks: FloorPlanMasks = new Map([
[
"00",
{
d: "M363.787 358.605h-18.621v20.689h18.641v28.984h6.215v1.168h-6.215v22.372h23.515v-22.372h-6.065v-1.168h9.148v33.01h41.394v-15.334h-2.934v-5.903h2.934v-29.584h-2.43v-5.25h-.502v-5.957h2.932v-16.847h-2.988v-5.061h-65.024z",
textTransform: [364, 359],
formattedUnitType: "Lounge",
},
],
[
"08",
{
@@ -9,36 +17,52 @@ export const hq7_11Masks: FloorPlanMasks = new Map([
formattedUnitType: "LE",
},
],
// [
// "09",
// {
// d: "M429.279 154.76v2.451h-29.478v-1.449h-7.126v.738H391v1h-15.879v-12.176c0-3.313 2.265-6 5.579-6h5.3l-.3-19a6 6 0 0 1 6-6h.8v3.176h35v2.324h6.5v34.936z",
// textTransform: [413, 134],
// formattedUnitType: "ST",
// },
// ],
// [
// "10",
// {
// d: "M429.279 160.74v-2.451h-29.478v1.449h-7.126V159H391v-1h-15.879v12.176c0 3.313 2.265 6 5.579 6h5.3V198h41.5v-2.324h6.5V160.74z",
// textTransform: [413, 173],
// formattedUnitType: "ST",
// },
// ],
[
"09",
"09", // 09 + 10
{
d: "M429.279 154.76v2.451h-29.478v-1.449h-7.126v.738H391v1h-15.879v-12.176c0-3.313 2.265-6 5.579-6h5.3l-.3-19a6 6 0 0 1 6-6h.8v3.176h35v2.324h6.5v34.936z",
textTransform: [413, 134],
formattedUnitType: "ST",
d: "M429.279 154.76v2.451h-29.478v-1.449h-7.126v.738H391v1h-15.879v-12.176c0-3.313 2.265-6 5.579-6h5.3l-.3-19a6 6 0 0 1 6-6h.8v3.176h35v2.324h6.5v34.936zm0 5.98v-3.529h-29.478v2.527h-7.126V159H391v-1.5h-15.879v12.676c0 3.313 2.265 6 5.579 6h5.3V198h41.5v-2.324h6.5V160.74z",
textTransform: [413, 153],
formattedUnitType: "DE",
},
],
// [
// "21",
// {
// d: "M324.666 542.5H318.2l-.2-35h4.773V505H352.5v1.5h7v-.866h1.728V505H376.5l.132 11.933a6 6 0 0 1-5.999 6.067H365.7v25.156h-4.423v-.594h-1.862V544.5h-34.749z",
// textTransform: [334, 525],
// formattedUnitType: "ST",
// },
// ],
// [
// "22",
// {
// d: "M324.681 466.656h-6.452l-.118 34.844h4.662l-.001 2.415h29.689v-1.419l7.039.004v.818h1.809v.838H376.7l.132-11.933a6 6 0 0 0-6-6.067h-4.933v-21.791h-41.218z",
// textTransform: [334, 480],
// formattedUnitType: "ST",
// },
// ],
[
"10",
"21", // 21 + 22
{
d: "M429.279 160.74v-2.451h-29.478v1.449h-7.126V159H391v-1h-15.879v12.176c0 3.313 2.265 6 5.579 6h5.3V198h41.5v-2.324h6.5V160.74z",
textTransform: [413, 173],
formattedUnitType: "ST",
},
],
[
"21",
{
d: "M324.666 542.5H318.2l-.2-35h4.773V505H352.5v1.5h7v-.866h1.728V505H376.5l.132 11.933a6 6 0 0 1-5.999 6.067H365.7v25.156h-4.423v-.594h-1.862V544.5h-34.749z",
textTransform: [334, 525],
formattedUnitType: "ST",
},
],
[
"22",
{
d: "M324.681 466.656h-6.452l-.118 34.844h4.662l-.001 2.415h29.689v-1.419l7.039.004v.818h1.809v.838H376.7l.132-11.933a6 6 0 0 0-6-6.067h-4.933v-21.791h-41.218z",
textTransform: [334, 480],
formattedUnitType: "ST",
d: "M324.666 542.5H318.2l-.2-35h4.773l-.001-3.586h29.726l.002 2.586h7v-.866h1.728l.081-1.478h15.272l.051 12.777a6 6 0 0 1-5.999 6.067H365.7v25.156h-4.423v-.594h-1.862V544.5h-34.749zm.015-75.844h-6.452l-.118 34.844h4.662l-.001 2.414h29.689v-1.418l7.039.004v.817h1.809v.839H376.7l.132-11.934a6 6 0 0 0-6-6.066h-4.933v-21.792h-41.218z",
textTransform: [334, 503],
formattedUnitType: "DE",
},
],
[
@@ -62,7 +86,7 @@ export const hq7_11Masks: FloorPlanMasks = new Map([
{
d: "M492.703 114.526h1.885l.09 65.512h4.933a6 6 0 0 1 6 6v24.79a6 6 0 0 1-6 6h-5.033v21.886h-4.744v-.492h-1.835v-.94h-7.027v1.544h-34.319v-37.312h6.489v-5.974h-6.36l-.137-75.726h6.46v-2.38h39.598z",
textTransform: [468, 168],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -70,7 +94,7 @@ export const hq7_11Masks: FloorPlanMasks = new Map([
{
d: "M492.703 364.09h1.885l.09-65.511h4.933a6 6 0 0 0 6-6v-24.791a6 6 0 0 0-6-6h-5.033v-21.886h-4.744v.493h-1.835v.939h-7.027v-1.544h-34.319v37.312h6.489v5.975h-6.36l-.137 75.726h6.46v2.379h39.598z",
textTransform: [468, 302],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -78,7 +102,7 @@ export const hq7_11Masks: FloorPlanMasks = new Map([
{
d: "M261.382 340.845h-4.769v-21.736h-4.933a6 6 0 0 1-6-6v-25.407c0-3.314 2.384-5.502 5.698-5.502h5.089v-63.6h6.664v.9h20.73v-2.386h20.91l-.129 80.492h-6.522v5.902h6.522v37.316h-34.403v-1.459h-7.067v.874h-1.79z",
textTransform: [286, 265],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -86,7 +110,7 @@ export const hq7_11Masks: FloorPlanMasks = new Map([
{
d: "M261.382 423.622h-4.769v21.736h-4.933a6 6 0 0 0-6 6v25.407c0 3.313 2.384 5.501 5.698 5.501h5.089v66.089h6.664v-3.388h20.73v2.386h14.207v-4.652h6.574v-75.84h-6.522v-5.903h6.522v-37.315h-34.403v1.459h-7.067v-.874h-1.79z",
textTransform: [286, 477],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -97,20 +121,28 @@ export const hq7_11Masks: FloorPlanMasks = new Map([
formattedUnitType: "ST",
},
],
// [
// "15",
// {
// d: "M304.72 341.971v37.417h-6.574v2.438h-27.862v-1.568h-7.139v.899h-1.783v.709h-15.6l-.118-12.03c-.037-3.34 1.732-6.079 6.377-5.906h4.933v-3.319l-.363-.5v-18.187h4.863v.555h1.672v.976h7.23v-1.484z",
// textTransform: [286, 359],
// formattedUnitType: "ST",
// },
// ],
// [
// "16",
// {
// d: "M304.72 422.449v-37.417h-6.574v-2.438h-27.862v1.567h-7.139v-.898h-1.783v-.709h-15.6l-.118 12.03c-.037 3.339 1.732 6.079 6.377 5.906h4.933v3.319l-.363.5v18.187h4.863v-.555h1.672v-.976h7.23v1.484z",
// textTransform: [286, 400],
// formattedUnitType: "ST",
// },
// ],
[
"16",
"15", // 15 + 16
{
d: "M304.72 422.449v-37.417h-6.574v-2.438h-27.862v1.567h-7.139v-.898h-1.783v-.709h-15.6l-.118 12.03c-.037 3.339 1.732 6.079 6.377 5.906h4.933v3.319l-.363.5v18.187h4.863v-.555h1.672v-.976h7.23v1.484z",
textTransform: [286, 400],
formattedUnitType: "ST",
},
],
[
"15",
{
d: "M304.72 341.971v37.417h-6.574v2.438h-27.862v-1.568h-7.139v.899h-1.783v.709h-15.6l-.118-12.03c-.037-3.34 1.732-6.079 6.377-5.906h4.933v-3.319l-.363-.5v-18.187h4.863v.555h1.672v.976h7.23v-1.484z",
textTransform: [286, 359],
formattedUnitType: "ST",
d: "M304.72 422.449v-37.418h-6.574v-3.205h-27.862v2.335h-7.139v-.898h-1.783v-1.397h-15.6l-.118 12.718c-.037 3.339 1.732 6.079 6.377 5.906h4.933v3.318l-.363.5v18.188h4.863v-.555h1.672v-.976h7.23v1.484zm0-80.478v37.417h-6.574v2.438h-27.862v-1.568h-7.139v.899h-1.783v.709h-15.6l-.118-12.03c-.037-3.34 1.732-6.079 6.377-5.906h4.933v-3.319l-.363-.5v-18.187h4.863v.555h1.672v.976h7.23v-1.484z",
textTransform: [286, 379],
formattedUnitType: "DE",
},
],
]);
+64 -39
View File
@@ -9,36 +9,53 @@ export const hq8_12Masks: FloorPlanMasks = new Map([
// formattedUnitType: "ST",
// },
// ],
// [
// "09",
// {
// d: "M429.279 154.76v2.451h-29.478v-1.449h-7.126v.738H391v1h-15.879v-12.176c0-3.313 2.265-6 5.579-6h5.3l-.3-19a6 6 0 0 1 6-6h.8v3.176h35v2.324h6.5v34.936z",
// textTransform: [415, 133],
// formattedUnitType: "ST",
// },
// ],
// [
// "10",
// {
// d: "M429.279 160.74v-2.451h-29.478v1.449h-7.126V159H391v-1h-15.879v12.176c0 3.313 2.265 6 5.579 6h5.3V198h41.5v-2.324h6.5V160.74z",
// textTransform: [415, 173],
// formattedUnitType: "ST",
// },
// ],
[
"09",
// 09 + 10
{
d: "M429.279 154.76v2.451h-29.478v-1.449h-7.126v.738H391v1h-15.879v-12.176c0-3.313 2.265-6 5.579-6h5.3l-.3-19a6 6 0 0 1 6-6h.8v3.176h35v2.324h6.5v34.936z",
textTransform: [415, 133],
formattedUnitType: "ST",
d: "M429.279 154.76v2.451h-29.478v-1.449h-7.126v.738H391v1h-15.879v-12.176c0-3.313 2.265-6 5.579-6h5.3l-.3-19a6 6 0 0 1 6-6h.8v3.176h35v2.324h6.5v34.936z M429.279 160.74v-3.529h-29.478v2.527h-7.126V159H391v-1.5h-15.879v12.676c0 3.313 2.265 6 5.579 6h5.3V198h41.5v-2.324h6.5V160.74z",
textTransform: [415, 153],
formattedUnitType: "DE",
},
],
// [
// "21",
// {
// d: "M324.666 542.5H318.2l-.2-35h4.773V505H352.5v1.5h7v-.866h1.728V505H376.5l.132 11.933a6 6 0 0 1-5.999 6.067H365.7v25.156h-4.423v-.594h-1.862V544.5h-34.749z",
// textTransform: [339, 522],
// formattedUnitType: "ST",
// },
// ],
// [
// "22",
// {
// d: "M324.681 466.656h-6.452l-.118 34.844h4.662l-.001 2.415h29.689v-1.419l7.039.004v.818h1.809v.838H376.7l.132-11.933a6 6 0 0 0-6-6.067h-4.933v-21.791h-41.218z",
// textTransform: [339, 480],
// formattedUnitType: "ST",
// },
// ],
[
"10",
"21", // 21 + 22
{
d: "M429.279 160.74v-2.451h-29.478v1.449h-7.126V159H391v-1h-15.879v12.176c0 3.313 2.265 6 5.579 6h5.3V198h41.5v-2.324h6.5V160.74z",
textTransform: [415, 173],
formattedUnitType: "ST",
},
],
[
"21",
{
d: "M324.666 542.5H318.2l-.2-35h4.773V505H352.5v1.5h7v-.866h1.728V505H376.5l.132 11.933a6 6 0 0 1-5.999 6.067H365.7v25.156h-4.423v-.594h-1.862V544.5h-34.749z",
textTransform: [339, 522],
formattedUnitType: "ST",
},
],
[
"22",
{
d: "M324.681 466.656h-6.452l-.118 34.844h4.662l-.001 2.415h29.689v-1.419l7.039.004v.818h1.809v.838H376.7l.132-11.933a6 6 0 0 0-6-6.067h-4.933v-21.791h-41.218z",
textTransform: [339, 480],
formattedUnitType: "ST",
d: "M324.666 542.5H318.2l-.2-35h4.773l-.001-3.586h29.726l.002 2.586h7v-.866h1.728l.081-1.478h15.272l.051 12.777a6 6 0 0 1-5.999 6.067H365.7v25.156h-4.423v-.594h-1.862V544.5h-34.749zm.015-75.844h-6.452l-.118 34.844h4.662l-.001 2.414h29.689v-1.418l7.039.004v.817h1.809v.839H376.7l.132-11.934a6 6 0 0 0-6-6.066h-4.933v-21.792h-41.218z",
textTransform: [339, 501],
formattedUnitType: "DE",
},
],
// [
@@ -62,7 +79,7 @@ export const hq8_12Masks: FloorPlanMasks = new Map([
{
d: "M492.703 114.526h1.885l.09 65.512h4.933a6 6 0 0 1 6 6v24.79a6 6 0 0 1-6 6h-5.033v21.886h-4.744v-.492h-1.835v-.94h-7.027v1.544h-34.319v-37.312h6.489v-5.974h-6.36l-.137-75.726h6.46v-2.38h39.598z",
textTransform: [466, 173],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -70,7 +87,7 @@ export const hq8_12Masks: FloorPlanMasks = new Map([
{
d: "M492.703 364.09h1.885l.09-65.511h4.933a6 6 0 0 0 6-6v-24.791a6 6 0 0 0-6-6h-5.033v-21.886h-4.744v.493h-1.835v.939h-7.027v-1.544h-34.319v37.312h6.489v5.975h-6.36l-.137 75.726h6.46v2.379h39.598z",
textTransform: [466, 296],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -78,7 +95,7 @@ export const hq8_12Masks: FloorPlanMasks = new Map([
{
d: "M261.382 340.845h-4.769v-21.736h-4.933a6 6 0 0 1-6-6v-25.407c0-3.314 2.384-5.502 5.698-5.502h5.089v-63.6h6.664v.9h20.73v-2.386h20.91l-.129 80.492h-6.522v5.902h6.522v37.316h-34.403v-1.459h-7.067v.874h-1.79z",
textTransform: [288, 278],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -86,7 +103,7 @@ export const hq8_12Masks: FloorPlanMasks = new Map([
{
d: "M261.382 423.622h-4.769v21.736h-4.933a6 6 0 0 0-6 6v25.407c0 3.313 2.384 5.501 5.698 5.501h5.089v66.089h6.664v-3.388h20.73v2.386h14.207v-4.652h6.574v-75.84h-6.522v-5.903h6.522v-37.315h-34.403v1.459h-7.067v-.874h-1.79z",
textTransform: [288, 480],
formattedUnitType: "ST",
formattedUnitType: "EX",
},
],
[
@@ -97,20 +114,28 @@ export const hq8_12Masks: FloorPlanMasks = new Map([
formattedUnitType: "ST",
},
],
// [
// "16",
// {
// d: "M304.72 422.449v-37.417h-6.574v-2.438h-27.862v1.567h-7.139v-.898h-1.783v-.709h-15.6l-.118 12.03c-.037 3.339 1.732 6.079 6.377 5.906h4.933v3.319l-.363.5v18.187h4.863v-.555h1.672v-.976h7.23v1.484z",
// textTransform: [288, 400],
// formattedUnitType: "ST",
// },
// ],
// [
// "15",
// {
// d: "M304.72 341.971v37.417h-6.574v2.438h-27.862v-1.568h-7.139v.899h-1.783v.709h-15.6l-.118-12.03c-.037-3.34 1.732-6.079 6.377-5.906h4.933v-3.319l-.363-.5v-18.187h4.863v.555h1.672v.976h7.23v-1.484z",
// textTransform: [288, 359],
// formattedUnitType: "ST",
// },
// ],
[
"16",
"15", // 15 + 16
{
d: "M304.72 422.449v-37.417h-6.574v-2.438h-27.862v1.567h-7.139v-.898h-1.783v-.709h-15.6l-.118 12.03c-.037 3.339 1.732 6.079 6.377 5.906h4.933v3.319l-.363.5v18.187h4.863v-.555h1.672v-.976h7.23v1.484z",
textTransform: [288, 400],
formattedUnitType: "ST",
},
],
[
"15",
{
d: "M304.72 341.971v37.417h-6.574v2.438h-27.862v-1.568h-7.139v.899h-1.783v.709h-15.6l-.118-12.03c-.037-3.34 1.732-6.079 6.377-5.906h4.933v-3.319l-.363-.5v-18.187h4.863v.555h1.672v.976h7.23v-1.484z",
textTransform: [288, 359],
formattedUnitType: "ST",
d: "M304.72 422.449v-37.418h-6.574v-3.205h-27.862v2.335h-7.139v-.898h-1.783v-1.397h-15.6l-.118 12.718c-.037 3.339 1.732 6.079 6.377 5.906h4.933v3.318l-.363.5v18.188h4.863v-.555h1.672v-.976h7.23v1.484zm0-80.478v37.417h-6.574v2.438h-27.862v-1.568h-7.139v.899h-1.783v.709h-15.6l-.118-12.03c-.037-3.34 1.732-6.079 6.377-5.906h4.933v-3.319l-.363-.5v-18.187h4.863v.555h1.672v.976h7.23v-1.484z",
textTransform: [288, 380],
formattedUnitType: "DE",
},
],
]);
+24 -2
View File
@@ -184,18 +184,40 @@ export const hqFloors: FloorData[] = [
main: "/images/floor-plans/hq/arcade.jpg",
content: [],
},
video: "/videos/hq/arcade.mp4",
},
// Residential floor 29-30 (combined)
{
id: "floor-19-20",
name: "19-20",
displayName: "19-20",
type: "residential",
floorNumber: 19,
},
{
id: "floor-23-24",
name: "23-24",
displayName: "23-24",
type: "residential",
floorNumber: 23,
},
{
id: "floor-27-28",
name: "27-28",
displayName: "27-28",
type: "residential",
floorNumber: 27,
},
{
id: "floor-29-30",
name: "29-30",
displayName: "29-30",
displayName: "29",
type: "residential",
floorNumber: 29,
},
// Residential floors (excluding 19, 20, 23, 24, 27, 28)
// Residential floors (excluding 20, 24, 28)
...[26, 25, 22, 21, 18, 17].map((floor) => ({
id: `floor-${floor}`,
name: `${floor}`,
+729
View File
@@ -0,0 +1,729 @@
import { Unit } from "../types/IUnit";
export const hq19mockUnits: [Unit[], Unit[]] = [
[
{
id: "1901",
unitNo: "1901",
project: "HQ by Rove",
projectSlug: "hq",
floor: 19,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "1902",
unitNo: "1902",
project: "HQ by Rove",
projectSlug: "hq",
floor: 19,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "1903",
unitNo: "1903",
project: "HQ by Rove",
projectSlug: "hq",
floor: 19,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "1904",
unitNo: "1904",
project: "HQ by Rove",
projectSlug: "hq",
floor: 19,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
[
{
id: "1901F",
unitNo: "1901F",
project: "HQ by Rove",
projectSlug: "hq",
floor: 19,
unitType: "Full floor",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
];
export const hq20mockUnits: [Unit[], Unit[]] = [
[
{
id: "2001",
unitNo: "2001",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2002",
unitNo: "2002",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2003",
unitNo: "2003",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2004",
unitNo: "2004",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2005",
unitNo: "2005",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2006",
unitNo: "2006",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
[
{
id: "2001F",
unitNo: "2001F",
project: "HQ by Rove",
projectSlug: "hq",
floor: 20,
unitType: "Full floor",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
];
export const hq23mockUnits: [Unit[], Unit[]] = [
[
{
id: "2301",
unitNo: "2301",
project: "HQ by Rove",
projectSlug: "hq",
floor: 23,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2302",
unitNo: "2302",
project: "HQ by Rove",
projectSlug: "hq",
floor: 23,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2303",
unitNo: "2303",
project: "HQ by Rove",
projectSlug: "hq",
floor: 23,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2304",
unitNo: "2304",
project: "HQ by Rove",
projectSlug: "hq",
floor: 23,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
[
{
id: "2301F",
unitNo: "2301F",
project: "HQ by Rove",
projectSlug: "hq",
floor: 23,
unitType: "Full floor",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
];
export const hq24mockUnits: [Unit[], Unit[]] = [
[
{
id: "2401",
unitNo: "2401",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2402",
unitNo: "2402",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2403",
unitNo: "2403",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2404",
unitNo: "2404",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2405",
unitNo: "2405",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2406",
unitNo: "2406",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
[
{
id: "2401F",
unitNo: "2401F",
project: "HQ by Rove",
projectSlug: "hq",
floor: 24,
unitType: "Full floor",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
];
export const hq27mockUnits: [Unit[], Unit[]] = [
[
{
id: "2701",
unitNo: "2701",
project: "HQ by Rove",
projectSlug: "hq",
floor: 27,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2702",
unitNo: "2702",
project: "HQ by Rove",
projectSlug: "hq",
floor: 27,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2703",
unitNo: "2703",
project: "HQ by Rove",
projectSlug: "hq",
floor: 27,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2704",
unitNo: "2704",
project: "HQ by Rove",
projectSlug: "hq",
floor: 27,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
[
{
id: "2701F",
unitNo: "2701F",
project: "HQ by Rove",
projectSlug: "hq",
floor: 27,
unitType: "Full floor",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
];
export const hq28mockUnits: [Unit[], Unit[]] = [
[
{
id: "2801",
unitNo: "2801",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2802",
unitNo: "2802",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2803",
unitNo: "2803",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2804",
unitNo: "2804",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2805",
unitNo: "2805",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
{
id: "2806",
unitNo: "2806",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Simplex office",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
[
{
id: "2801",
unitNo: "2801F",
project: "HQ by Rove",
projectSlug: "hq",
floor: 28,
unitType: "Full floor",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: true,
},
],
];
export const hqMockUnits = {
19: [hq19mockUnits, hq20mockUnits],
23: [hq23mockUnits, hq24mockUnits],
27: [hq27mockUnits, hq28mockUnits],
};
export function getHQMockUnit(unitNumber: string) {
const floor = +unitNumber.slice(0, 2);
const isFullFloor = unitNumber.endsWith("F");
if (floor === 19) {
return hq19mockUnits[isFullFloor ? 1 : 0][
isFullFloor ? 0 : (+unitNumber.slice(-2) - 1)!
];
} else if (floor === 20) {
return hq20mockUnits[isFullFloor ? 1 : 0][
isFullFloor ? 0 : (+unitNumber.slice(-2) - 1)!
];
} else if (floor === 23) {
return hq23mockUnits[isFullFloor ? 1 : 0][
isFullFloor ? 0 : (+unitNumber.slice(-2) - 1)!
];
} else if (floor === 24) {
return hq24mockUnits[isFullFloor ? 1 : 0][
isFullFloor ? 0 : (+unitNumber.slice(-2) - 1)!
];
} else if (floor === 27) {
return hq27mockUnits[isFullFloor ? 1 : 0][
isFullFloor ? 0 : (+unitNumber.slice(-2) - 1)!
];
} else if (floor === 28) {
return hq28mockUnits[isFullFloor ? 1 : 0][
isFullFloor ? 0 : (+unitNumber.slice(-2) - 1)!
];
}
return null;
}
+31 -342
View File
@@ -167,35 +167,28 @@ export const floorsMasks = {
"36": "m2038.5 532-160.68 14.832a2.003 2.003 0 0 0-1.82 1.992v19.496c0 1.173 1 2.094 2.17 1.993L2038.5 556.5h55.5l122.88 7.373a2 2 0 0 0 2.12-1.997v-20.492c0-1.058-.82-1.933-1.88-1.997L2094 532z",
"37": "m2038.5 504-160.7 16.317c-1.02.104-1.8.964-1.8 1.99v19.5c0 1.177 1.01 2.1 2.18 1.991L2038.5 529h55.5l122.88 7.373a2 2 0 0 0 2.12-1.997v-20.992c0-1.058-.82-1.933-1.88-1.997L2094 504z",
"38": "M1876 496.78v18.5a2 2 0 0 0 2.21 1.989L2038.5 500.5h55.5l122.87 7.864a2.003 2.003 0 0 0 2.13-1.996v-19.999c0-1.052-.81-1.924-1.86-1.996L2094 476h-55.5l-160.73 18.793a2 2 0 0 0-1.77 1.987",
// "39": "M1869 470.768v17.515a2.003 2.003 0 0 0 2.21 1.989L2038.5 473h55.5l122.86 8.846a2 2 0 0 0 2.14-1.995v-20.005c0-1.042-.8-1.91-1.84-1.993L2094 448h-55.5l-167.75 20.783c-1 .124-1.75.975-1.75 1.985",
"39-40":
"M1869,470.77v17.51c0,1.19,1.03,2.11,2.21,1.99l167.29-17.27h55.5l122.86,8.85c1.15.08,2.14-.83,2.14-1.99v-20.01c-.04-1.78-.1-5.48,0-6.03v-20c0-1.03-.78-1.89-1.81-1.99l-123.19-11.83h-55.5l-167.77,22.77c-.99.13-1.73.98-1.73,1.98v19.48c.02,2.02.05,6.16,0,6.54Z",
// "40": "M1869 444.747v19.483a2 2 0 0 0 2.25 1.984L2038.5 445h55.5l122.82 10.809a2.004 2.004 0 0 0 2.18-1.993v-19.999c0-1.03-.78-1.892-1.81-1.991L2094 420h-55.5l-167.77 22.765a2 2 0 0 0-1.73 1.982",
"41-42":
"M1869,420.21v17.5c0,1.21,1.07,2.15,2.27,1.98l167.23-22.69h55.5l122.81,11.79c1.17.11,2.19-.81,2.19-1.99v-46.03c0-1.01-.76-1.86-1.76-1.98l-123.24-14.79h-55.33c-.11,0-.23.01-.34.03l-167.67,29.18c-.96.17-1.66,1-1.66,1.97v25.03Z",
// "41": "M1869 420.212v17.498a2 2 0 0 0 2.27 1.982L2038.5 417h55.5l122.81 11.79a2 2 0 0 0 2.19-1.991v-19.996c0-1.025-.77-1.884-1.79-1.989L2094 392h-55.34c-.11 0-.21.008-.31.024l-167.66 26.212c-.97.152-1.69.99-1.69 1.976",
// "42": "M1869 395.182v18.474c0 1.23 1.1 2.169 2.31 1.975l167.03-26.606c.11-.017.21-.025.32-.025H2094l122.79 12.77a2 2 0 0 0 2.21-1.989v-19.007c0-1.012-.76-1.865-1.76-1.985L2094 364h-55.33c-.11 0-.23.01-.34.03l-167.67 29.182a2 2 0 0 0-1.66 1.97",
Rooftop:
"M1869 347.274v41.343a2 2 0 0 0 2.35 1.97l167.98-29.557c.11-.02.23-.03.34-.03H2094l117.5 14.5 13.39 3.472a.89.89 0 0 0 1.11-.859v-18.927c0-.444-.15-.876-.42-1.228l-2.52-3.242a2.02 2.02 0 0 0-1.46-.769l-5.72-.336a2.003 2.003 0 0 1-1.88-1.997V272.2a2 2 0 0 0-1.68-1.974l-21.14-3.452a2 2 0 0 1-1.68-1.974v-32.569c0-.994-.73-1.837-1.71-1.98l-55.64-8.084a1.34 1.34 0 0 1-1.15-1.327c0-.74-.6-1.34-1.34-1.34h-1.77c-.77 0-1.39.624-1.39 1.395 0 .847-.75 1.499-1.59 1.38l-46.3-6.547a1.88 1.88 0 0 1-1.61-1.855v-.373a1.5 1.5 0 0 0-1.5-1.5h-1.04c-.25 0-.46.206-.46.46 0 .283-.25.499-.53.453l-61.65-10.035a1.997 1.997 0 0 0-2.32 1.974v4.534c0 .942-.66 1.756-1.58 1.955l-16.54 3.577c-.25.054-.51.06-.76.017l-17.78-3.036a2.004 2.004 0 0 0-2.34 1.972v4.068c0 .917-.62 1.717-1.51 1.94l-8.13 2.031c-.24.06-.48.075-.73.045l-17.89-2.181a1.998 1.998 0 0 0-2.24 1.985v3.111c0 .949-.67 1.767-1.6 1.959l-15.1 3.11q-.3.06-.6.031l-17.5-1.75a2 2 0 0 0-2.2 1.99v46.708c0 .927-.64 1.733-1.54 1.947l-15.92 3.771a2 2 0 0 0-1.54 1.946v53.144c0 .777-.45 1.484-1.15 1.813l-12.7 5.922a2 2 0 0 0-1.15 1.813",
},
hq: {
"Roof Level":
"M1628.34 295.302c-.4 10.458 3.96 18.094 6.18 20.604l.18 79.548c.64-1.031 2.71-3.258 5.91-3.913 4.01-.818 74.13 3.6 83.13 4.337 7.21.589 29.73 12.464 40.1 18.328l-4.05 3.803 96.2 57.429 31.74 4.385 35.34-33.022h4.9l.59-8.958h10.42c4.93-5.825 16.13-17.881 21.53-19.503 6.76-2.028 60.09 0 64.45 0 3.5 0 26.72 17.386 37.9 26.079l-5.73 4.051 22.45 15.332h6.57l34.13 24.095v4.016l31.04 23.912 5.29-2.556 31.21 25.19v5.111l29.57 22.451h4.75l27.93 19.166v3.651l10 7.185 3.71-3.374 37.96 26.886-.44-23.635c4.09-1.312 6.34-5.028 6.85-10.857.41-4.663-4.39-10.298-6.85-12.532-83.11-64.82-250.44-195.35-254.87-198.912-5.54-4.451-11.68-10.585-20.19-11.476-8.5-.89-49.36-3.166-57.77-2.968-6.73.159-25.16 19.127-33.54 28.592v25.34l-3.17-.692v-1.385l-186.82-125.793-15.46-7.108c-25.8-1.587-78.97-4.805-85.22-4.976-7.82-.213-15.42 9.095-15.92 22.169",
// "30": "M2306.48 629.883c-.12-4.43-3.21-8.743-4.74-10.346l-37.96-26.886-3.71 3.374-10-7.185v-3.651l-27.93-19.166h-4.75l-29.57-22.452v-5.111l-31.21-25.189-5.3 2.555-31.03-23.912v-4.015l-34.13-24.095h-6.57l-22.45-15.333 5.73-4.05c-11.18-8.693-34.4-26.079-37.9-26.079-4.37 0-57.69-2.028-64.45 0-5.4 1.622-16.6 13.678-21.53 19.503h-10.42l-.59 8.958h-4.9l-35.34 33.022-31.74-4.386-96.2-57.428 4.05-3.803c-10.37-5.864-32.89-17.739-40.1-18.328-9-.737-79.12-5.155-83.13-4.337-3.2.655-5.27 2.881-5.91 3.913-2.27.66-6.81 4.179-6.81 12.976s10.7 25.146 16.05 32.221v10.776h30.6l18.5-19.707 28.76 1.807c3.14-.162 10.84.097 16.55 2.433s80.81 47.585 117.64 69.917h37.58l28.57-26.054h18.17l23.72-27.164c2.7-3.162 55.36-6.834 60.93-2.783l271.9 199.66v-6.248c3.25-2.623 9.73-8.977 9.62-13.407",
// "29": "M1643.94 451.428c-5.35 1.686-33.71 21.737 0 48.36.07.055 0-5.57 0-5.57-7.22-8.621-8.44-13.81-5.87-21.053 3.36-9.473 16.72-8.086 24.37-7.602 15.49.978 54.16 4.62 71.55 6.319 5.81 2.446 18.26 8.113 21.61 11.212s9.55 2.378 12.23 1.631l22.67 15.063c-.1.69-.1 2.258.73 3.004.83.745 28.24 16.677 41.85 24.55l5.38-1.865 17.53 12.431h37.58l27.45-25.172h7.54l5.62-.621v-7.252l7.15 7.252c5.87-6.665 19-20.2 24.55-21.029 6.94-1.036 56.97 1.865 60.29 1.865 2.65 0 21.47 13.546 30.55 20.319h8.81v2.555l9.32 6.234 3.6 2.076v3.293c0 .595 119.03 83.07 178.55 124.233 2.34-1.84 7.35-5.706 8.68-6.444 1.66-.923 2.77-.369 5.26 1.292 1.99 1.33 18.11 12.834 25.92 18.42v-15.392l-271.9-199.66c-5.57-4.051-58.22-.379-60.93 2.782l-23.72 27.165h-18.17l-28.57 26.054h-37.58c-36.83-22.333-111.93-67.581-117.64-69.917s-13.41-2.596-16.55-2.433l-28.76-1.807-18.5 19.707z",
"29-30":
"M1640.61 391.543c4.01-.818 74.13 3.601 83.13 4.337 7.21.589 29.73 12.464 40.1 18.328l-4.05 3.803 96.2 57.428 31.74 4.386 35.34-33.022h4.9l.59-8.958h10.42c4.93-5.825 16.13-17.881 21.53-19.503 6.76-2.028 60.08 0 64.45 0 3.5 0 26.72 17.386 37.9 26.079l-5.73 4.051 22.45 15.333h6.57l34.13 24.093v4.016l31.03 23.912 5.3-2.555 31.21 25.19v5.11l29.57 22.452h4.75l27.92 19.166v3.651l10.01 7.185 3.71-3.375 37.96 26.887c1.53 1.603 4.62 5.917 4.74 10.347.11 4.43-6.37 10.783-9.62 13.406v21.639c-7.81-5.586-23.93-17.089-25.92-18.419-2.49-1.662-3.6-2.216-5.26-1.293-1.33.738-6.34 4.604-8.68 6.444-59.52-41.163-178.55-123.638-178.55-124.233v-3.293l-3.6-2.076-9.32-6.234v-2.555h-8.81c-9.08-6.773-27.9-20.319-30.55-20.319-3.32 0-53.35-2.901-60.29-1.865-5.55.829-18.68 14.364-24.55 21.028l-7.15-7.251v7.251l-5.62.622h-7.54l-27.45 25.172h-37.58l-17.53-12.43-5.38 1.864c-13.61-7.873-41.02-23.804-41.85-24.55s-.83-2.313-.73-3.004l-22.67-15.063c-2.68.747-8.88 1.467-12.23-1.631-3.35-3.099-15.8-8.766-21.61-11.212-17.39-1.699-56.06-5.341-71.55-6.319-7.65-.484-21.01-1.871-24.37 7.602-2.57 7.243-1.35 12.432 5.87 21.053 0 .042.07 5.609 0 5.57-33.18-26.207-6.22-46.045-.27-48.267l.27-.093v-10.776c-5.35-7.074-16.05-23.423-16.05-32.22s4.54-12.316 6.81-12.976c.64-1.031 2.71-3.258 5.91-3.913",
// "28": "M2308.01 678.627c.11-6.353-7.39-11.779-11.15-13.698-7.81-5.586-23.93-17.09-25.92-18.42-2.49-1.661-3.6-2.215-5.26-1.292-1.33.739-6.34 4.604-8.68 6.444-59.52-41.163-178.55-123.638-178.55-124.233v-3.293l-3.6-2.076-9.32-6.234v-2.555h-8.81c-9.08-6.773-27.9-20.319-30.55-20.319-3.32 0-53.35-2.901-60.29-1.865-5.55.829-18.68 14.364-24.55 21.029l-7.15-7.252v7.252l-5.62.621h-7.54l-27.45 25.172h-37.58l-17.53-12.431-5.38 1.865c-13.61-7.873-41.02-23.804-41.85-24.55s-.83-2.314-.73-3.004l-22.67-15.063c-2.68.747-8.88 1.468-12.23-1.631s-15.8-8.766-21.61-11.212c-17.39-1.699-56.06-5.341-71.55-6.319-15.49-.979-21.55.001-24.42 7.512-3.83 10.026.57 15.312 5.92 21.104v25.429l80.9 2.031v-16.776l32.46 14.745 10.53-1.395 90.1 51.209h35.64l27.45-24.703h18.7c7.02-7.554 22.09-22.66 26.16-22.66h60.29c2.29 0 23.02 11.981 33.09 17.972h6.27v7.573l12.92 9.376 7.88-5.639 35.34 24.243v8.169l29.14 19.92 7.66-3.939 30.61 20.37v9.229l26 17.894 6.75-4.502 28.25 18.119v8.779l6.92 4.614 8.68-5.568-.96 31.872c.21 1.062 6.22 6.773 6.22 6.773s15.8 9.212 25.92 14.371v-30.234c3.67-1.627 11.03-6.47 11.15-12.824",
// "27": "M2308.01 734.658c0-4.954-7.43-10.326-11.15-12.973-10.12-5.159-25.92-14.371-25.92-14.371s-6.01-5.711-6.22-6.773l.96-31.872-8.68 5.568-6.92-4.615v-8.778l-28.25-18.119-6.75 4.502-26-17.895v-9.228l-30.61-20.37-7.66 3.939-29.14-19.92v-8.169l-35.34-24.243-7.88 5.639-12.92-9.376v-7.574h-6.27c-10.07-5.99-30.8-17.971-33.09-17.971h-60.29c-4.07 0-19.14 15.106-26.16 22.66h-18.7l-27.45 24.703h-35.64l-90.1-51.21-10.53 1.396-32.46-14.745v16.775l-80.9-2.03c-5.45.703-7.48 6.598-7.81 9.457-2.74 1.649-8.24 6.576-8.24 13.086 0 5.511 3.94 10.991 6.82 14.011-.3-4.839 1.08-15.263 8.9-18.254 7.83-2.991 63.52-1.246 90.38 0l25.45 13.078 4.35-1.187 24.54 14.048 69.6 38.076h35.64l27.45-23.577h7.54v-8.161h3.96l7.2 4.627c7.07-6.084 22.2-18.458 26.16-19.281 4.95-1.028 57.91 2.442 60.29 2.442 1.9 0 19.68 11.741 28.34 17.611l4.75-1.8 194.72 128.184c.09 2.096.61 6.529 2.01 7.492 1.39.964 29.87 19.223 43.93 28.232v8.406c2.7-1.749 8.09-6.485 8.09-11.44",
"27-28":
"M2308.01 734.658c0-4.954-7.43-10.326-11.15-12.973-10.12-5.159-25.92-14.371-25.92-14.371s-6.01-5.711-6.22-6.773l.96-31.872-8.68 5.568-6.92-4.615v-8.778l-28.25-18.119-6.75 4.502-26-17.895v-9.228l-30.61-20.37-7.66 3.939-29.14-19.92v-8.169l-35.34-24.243-7.88 5.639-12.92-9.376v-7.574h-6.27c-10.07-5.99-30.8-17.971-33.09-17.971h-60.29c-4.07 0-19.14 15.106-26.16 22.66h-18.7l-27.45 24.703h-35.64l-90.1-51.21-10.53 1.396-32.46-14.745v16.775l-80.9-2.03c-5.45.703-7.48 6.598-7.81 9.457-2.74 1.649-8.24 6.576-8.24 13.086 0 5.511 3.94 10.991 6.82 14.011-.3-4.839 1.08-15.263 8.9-18.254 7.83-2.991 63.52-1.246 90.38 0l25.45 13.078 4.35-1.187 24.54 14.048 69.6 38.076h35.64l27.45-23.577h7.54v-8.161h3.96l7.2 4.627c7.07-6.084 22.2-18.458 26.16-19.281 4.95-1.028 57.91 2.442 60.29 2.442 1.9 0 19.68 11.741 28.34 17.611l4.75-1.8 194.72 128.184c.09 2.096.61 6.529 2.01 7.492 1.39.964 29.87 19.223 43.93 28.232v8.406c2.7-1.749 8.09-6.485 8.09-11.44m0-56.031c.11-6.353-7.39-11.779-11.15-13.698-7.81-5.586-23.93-17.09-25.92-18.42-2.49-1.661-3.6-2.215-5.26-1.292-1.33.739-6.34 4.604-8.68 6.444-59.52-41.163-178.55-123.638-178.55-124.233v-3.293l-3.6-2.076-9.32-6.234v-2.555h-8.81c-9.08-6.773-27.9-20.319-30.55-20.319-3.32 0-53.35-2.901-60.29-1.865-5.55.829-18.68 14.364-24.55 21.029l-7.15-7.252v7.252l-5.62.621h-7.54l-27.45 25.172h-37.58l-17.53-12.431-5.38 1.865c-13.61-7.873-41.02-23.804-41.85-24.55s-.83-2.314-.73-3.004l-22.67-15.063c-2.68.747-8.88 1.468-12.23-1.631s-15.8-8.766-21.61-11.212c-17.39-1.699-56.06-5.341-71.55-6.319-15.49-.979-21.55.001-24.42 7.512-3.83 10.026.57 15.312 5.92 21.104v25.429l80.9 2.031v-16.776l32.46 14.745 10.53-1.395 90.1 51.209h35.64l27.45-24.703h18.7c7.02-7.554 22.09-22.66 26.16-22.66h60.29c2.29 0 23.02 11.981 33.09 17.972h6.27v7.573l12.92 9.376 7.88-5.639 35.34 24.243v8.169l29.14 19.92 7.66-3.939 30.61 20.37v9.229l26 17.894 6.75-4.502 28.25 18.119v8.779l6.92 4.614 8.68-5.568-.96 31.872c.21 1.062 6.22 6.773 6.22 6.773s15.8 9.212 25.92 14.371v-30.234c3.67-1.627 11.03-6.47 11.15-12.824",
"26": "M1634.71 556.162c.52.547 1 1.014 1.43 1.385v13.554c1.04-3.223 4.8-9.635 11.47-9.49 8.35.182 84.64 5.171 88.52 5.971 3.11.64 82.49 42.935 121.8 64.003h35.64l27.46-21.821h7.53l32.3-10.305 32.65-.939v-8.074l7.72-4.016c8.33.432 25.48 1.296 27.41 1.296 1.92 0 181.66 111.25 271.28 166.875v-16.908c-14.06-9.009-42.54-27.269-43.93-28.232s-1.92-5.397-2.01-7.493l-194.71-128.183-4.76 1.799c-8.66-5.87-26.44-17.61-28.34-17.61-2.38 0-55.34-3.471-60.29-2.442-3.96.822-19.09 13.197-26.16 19.281l-7.2-4.628h-3.96v8.161h-7.53l-27.46 23.578h-35.64l-69.6-38.077-24.53-14.047-4.36 1.187-25.45-13.079c-26.86-1.246-82.55-2.991-90.38 0-7.82 2.991-9.19 13.416-8.9 18.254",
"25": "M1627.89 604.065c0 6.158 6.67 17.321 16.38 24.962l-.66-5.074c-2.68-2.064-7.73-7.562-6.5-13.041 1.54-6.847 5.03-11.18 24-10.667 15.18.41 55.91 3.453 74.37 4.923l21.74 11.899 8.08-4.593 23.03 12.482v5.031l47.21 22.793 2.93-1.928 17.52 10.433h37.58l27.45-21.424h7.54c9.98-8.683 30.43-26.351 32.3-27.559 2.33-1.509 65.31 1.509 67.78 1.509s34.3 19.347 35.67 19.896c1.1.439 1.37 6.403 1.37 9.33l14.68 9.056c.13 1.26.69 3.902 1.9 4.387s22.33 12.733 32.74 18.796l2.73-1.718 33.75 19.706c-.13 1.482.44 4.85 3.84 6.467s19.07 10.577 26.48 14.855l4.24-1.415 29 18.291c-.5.955-.22 3.539 4.95 6.232 5.18 2.694 17.45 9.835 22.94 13.069h3.54l14.05 7.983 5.66-4.143c9.69 5.066 30 15.851 33.74 18.456v-18.456c-89.63-55.625-269.36-166.875-271.28-166.875-1.93 0-19.08-.865-27.41-1.297l-7.72 4.017v8.074l-32.65.939-32.3 10.304h-7.54l-27.45 21.822h-35.64c-39.31-21.068-118.69-63.364-121.8-64.004-3.88-.8-80.18-5.789-88.52-5.97-6.67-.145-10.43 6.266-11.48 9.49v21.415c-2.74 1.283-8.24 5.389-8.24 11.547",
// "24": "M2308.01 783.187c0-5.072-5.39-8.865-8.09-10.128-3.74-2.606-24.05-13.39-33.74-18.457l-5.66 4.144-14.05-7.984h-3.54c-5.49-3.233-17.76-10.374-22.94-13.068-5.17-2.694-5.45-5.278-4.95-6.233l-29-18.29-4.24 1.414c-7.41-4.278-23.08-13.238-26.48-14.855-3.4-1.616-3.98-4.985-3.84-6.467l-33.75-19.705-2.73 1.718c-10.41-6.064-31.53-18.311-32.74-18.796s-1.77-3.127-1.9-4.388l-14.68-9.055c0-2.927-.27-8.892-1.37-9.331-1.37-.548-33.2-19.895-35.67-19.895s-65.45-3.019-67.78-1.509c-1.87 1.207-22.32 18.875-32.3 27.558h-7.54l-27.45 21.425h-37.58l-17.53-10.433-2.92 1.928-47.21-22.794v-5.03l-23.03-12.482-8.08 4.592-21.74-11.898c-18.46-1.47-59.19-4.514-74.37-4.924-18.97-.513-22.46 3.82-24 10.668-1.23 5.478 3.82 10.976 6.5 13.041l.66 5.074-.66 23.753 80.58 3.019v-14.686l7.24-2.555 25.79 11.281h10.18l22.99 11.446c1.2-1.829 3.95-5.486 5.32-5.486 1.7 0 41.03 20.647 42.75 20.86 1.39.17 1.45 4.895 1.31 7.237l18.16 9.578h39.73l23.36-20.544h7.54c9.9-6.488 30.23-19.6 32.3-20.15 2.57-.688 65.08-.688 67.78-.688 2.15 0 25.59 13.892 37.04 20.838v3.523l13.39 6.271c2.09-1.516 6.52-4.578 7.53-4.703 1.25-.157 33.86 19.282 34.95 19.909.88.501.37 6.375 0 9.249l30.73 16.46c1.15-1.254 3.73-3.857 4.86-4.233 1.41-.47 30.73 15.259 31.35 16.774.5 1.211.21 5.834 0 7.995l26.55 16.616c1.55-.94 4.9-2.915 5.9-3.292 1.26-.47 27.75 13.912 28.53 14.736.63.659.26 5.291 0 7.525l5.02 3.427h9.56v15.698l32.96 13.301v-17.269c3.66-1.797 11-6.659 11-11.73",
// "23": "M2308.01 840.453c-.53-5.712-7.55-9.715-11-11.002v-17.269l-32.96-13.301v-15.698h-9.56l-5.02-3.427c.26-2.234.63-6.866 0-7.525-.78-.823-27.27-15.206-28.53-14.735-1 .376-4.35 2.351-5.9 3.292l-26.55-16.617c.21-2.16.5-6.784 0-7.995-.62-1.514-29.94-17.244-31.35-16.774-1.13.377-3.71 2.979-4.86 4.233l-30.72-16.46c.36-2.874.87-8.747 0-9.249-1.1-.627-33.71-20.066-34.96-19.909-1.01.126-5.44 3.188-7.53 4.703l-13.39-6.271v-3.522c-11.45-6.946-34.89-20.838-37.04-20.838-2.7 0-65.21 0-67.78.687-2.07.55-22.4 13.663-32.3 20.151h-7.53l-23.37 20.543h-39.73l-18.16-9.578c.14-2.341.08-7.067-1.3-7.237-1.73-.213-41.06-20.859-42.76-20.859-1.36 0-4.12 3.657-5.32 5.485l-22.99-11.445h-10.18l-25.79-11.281-7.24 2.554v14.687l-80.58-3.02c-3.69 1.056-6.52 4.399-7.47 5.938v4.949c-2.97 1.466-8.78 5.872-8.25 11.766s5.72 11.4 8.25 13.416c-.26-3.549.31-11.352 4.61-14.162 5.36-3.513 90.26-1.952 94.65-1.756 3.51.156 16.49 6.179 22.54 9.172l6.44-1.464 21.66 11.222h7.91l63.98 32.844h35.64l27.46-19.555h7.53l6.76-4.855 6.67 3.091c6.35-4.61 19.89-14.092 23.27-15.134 4.23-1.302 61.17 1.953 63.38 2.604 1.76.521 19.02 9.747 27.43 14.294l3.58-1.764 196.34 108.871c-.57 1.844-.83 5.988 2.69 7.811 4.39 2.278 38.82 17.576 40.03 21.318.97 2.995 1.21 6.652 1.21 8.106 2.92-.632 8.61-3.323 8.09-9.035",
"23-24":
"M2308.01 840.453c-.53-5.712-7.55-9.715-11-11.002v-17.269l-32.96-13.301v-15.698h-9.56l-5.02-3.427c.26-2.234.63-6.866 0-7.525-.78-.823-27.27-15.206-28.53-14.735-1 .376-4.35 2.351-5.9 3.292l-26.55-16.617c.21-2.16.5-6.784 0-7.995-.62-1.514-29.94-17.244-31.35-16.774-1.13.377-3.71 2.979-4.86 4.233l-30.72-16.46c.36-2.874.87-8.747 0-9.249-1.1-.627-33.71-20.066-34.96-19.909-1.01.126-5.44 3.188-7.53 4.703l-13.39-6.271v-3.522c-11.45-6.946-34.89-20.838-37.04-20.838-2.7 0-65.21 0-67.78.687-2.07.55-22.4 13.663-32.3 20.151h-7.53l-23.37 20.543h-39.73l-18.16-9.578c.14-2.341.08-7.067-1.3-7.237-1.73-.213-41.06-20.859-42.76-20.859-1.36 0-4.12 3.657-5.32 5.485l-22.99-11.445h-10.18l-25.79-11.281-7.24 2.554v14.687l-80.58-3.02c-3.69 1.056-6.52 4.399-7.47 5.938v4.949c-2.97 1.466-8.78 5.872-8.25 11.766s5.72 11.4 8.25 13.416c-.26-3.549.31-11.352 4.61-14.162 5.36-3.513 90.26-1.952 94.65-1.756 3.51.156 16.49 6.179 22.54 9.172l6.44-1.464 21.66 11.222h7.91l63.98 32.844h35.64l27.46-19.555h7.53l6.76-4.855 6.67 3.091c6.35-4.61 19.89-14.092 23.27-15.134 4.23-1.302 61.17 1.953 63.38 2.604 1.76.521 19.02 9.747 27.43 14.294l3.58-1.764 196.34 108.871c-.57 1.844-.83 5.988 2.69 7.811 4.39 2.278 38.82 17.576 40.03 21.318.97 2.995 1.21 6.652 1.21 8.106 2.92-.632 8.61-3.323 8.09-9.035m0-57.266c0-5.072-5.39-8.865-8.09-10.128-3.74-2.606-24.05-13.39-33.74-18.457l-5.66 4.144-14.05-7.984h-3.54c-5.49-3.233-17.76-10.374-22.94-13.068-5.17-2.694-5.45-5.278-4.95-6.233l-29-18.29-4.24 1.414c-7.41-4.278-23.08-13.238-26.48-14.855-3.4-1.616-3.98-4.985-3.84-6.467l-33.75-19.705-2.73 1.718c-10.41-6.064-31.53-18.311-32.74-18.796s-1.77-3.127-1.9-4.388l-14.68-9.055c0-2.927-.27-8.892-1.37-9.331-1.37-.548-33.2-19.895-35.67-19.895s-65.45-3.019-67.78-1.509c-1.87 1.207-22.32 18.875-32.3 27.558h-7.54l-27.45 21.425h-37.58l-17.53-10.433-2.92 1.928-47.21-22.794v-5.03l-23.03-12.482-8.08 4.592-21.74-11.898c-18.46-1.47-59.19-4.514-74.37-4.924-18.97-.513-22.46 3.82-24 10.668-1.23 5.478 3.82 10.976 6.5 13.041l.66 5.074-.66 23.753 80.58 3.019v-14.686l7.24-2.555 25.79 11.281h10.18l22.99 11.446c1.2-1.829 3.95-5.486 5.32-5.486 1.7 0 41.03 20.647 42.75 20.86 1.39.17 1.45 4.895 1.31 7.237l18.16 9.578h39.73l23.36-20.544h7.54c9.9-6.488 30.23-19.6 32.3-20.15 2.57-.688 65.08-.688 67.78-.688 2.15 0 25.59 13.892 37.04 20.838v3.523l13.39 6.271c2.09-1.516 6.52-4.578 7.53-4.703 1.25-.157 33.86 19.282 34.95 19.909.88.501.37 6.375 0 9.249l30.73 16.46c1.15-1.254 3.73-3.857 4.86-4.233 1.41-.47 30.73 15.259 31.35 16.774.5 1.211.21 5.834 0 7.995l26.55 16.616c1.55-.94 4.9-2.915 5.9-3.292 1.26-.47 27.75 13.912 28.53 14.736.63.659.26 5.291 0 7.525l5.02 3.427h9.56v15.698l32.96 13.301v-17.269c3.66-1.797 11-6.659 11-11.73",
"22": "M1640.75 674.687c-4.3 2.81-4.87 10.612-4.62 14.162v14.537c.9-1.999 4.15-6.087 10-6.442 7.31-.443 85.97 3.35 91.06 3.35 4.08 0 34.27 15.196 48.85 22.794h9.2l62.69 29.938h35.64l27.45-15.093h7.54c11.37-6.942 34.64-20.96 36.7-21.492 2.58-.664 60.37 3.102 63.38 3.102 2.4 0 148.35 73.411 221.02 110.116v5.539l50.26 26.469v-12.175c0-1.455-.24-5.111-1.21-8.106-1.22-3.743-35.64-19.04-40.04-21.318-3.51-1.823-3.25-5.967-2.69-7.811l-196.33-108.871-3.58 1.764c-8.41-4.548-25.67-13.774-27.43-14.294-2.21-.651-59.15-3.906-63.38-2.604-3.38 1.041-16.92 10.523-23.27 15.134l-6.67-3.092-6.76 4.856h-7.54l-27.45 19.555h-35.64l-63.99-32.845h-7.9l-21.66-11.221-6.44 1.464c-6.05-2.993-19.03-9.017-22.54-9.173-4.39-.195-89.29-1.756-94.65 1.757",
"21": "M2308.01 888.834c0-3.848-5.39-7.481-8.09-8.817v-18.354l-50.26-26.469v-5.539c-72.67-36.705-218.62-110.116-221.02-110.116-3.01 0-60.8-3.766-63.38-3.101-2.06.531-25.33 14.549-36.7 21.491h-7.54l-27.45 15.093h-35.64l-62.69-29.938h-9.2c-14.58-7.598-44.77-22.794-48.85-22.794-5.09 0-83.75-3.793-91.06-3.35-5.85.355-9.1 4.443-10 6.442v22.522c-2.93.807-8.68 4.091-8.24 10.777s10.59 17.595 15.61 22.214l.11-3.596c-2.98-3.058-8.22-10.277-5.31-14.691 3.64-5.517 20.69-4.765 38.88-4.639 18.18.125 54.67 2.131 58.93 3.385 4.27 1.254 17.18 5.643 20.69 10.032l10.54-1.881 23.32 11.411c-.13.752.08 2.383 1.88 2.884 1.81.502 27.67 11.829 40.38 17.43l6.9-1.254 17.43 9.154h38.24l25.53-18.308h7.54l5.05-4.263 7.53 2.006c7.05-4.221 21.76-12.84 24.12-13.543 2.96-.877 57.26.502 60.77 1.505 2.81.803 22.23 10.784 31.6 15.675l7.15-3.637 193.89 99.502 5.29 2.209c.04 1.545.93 4.824 4.12 5.578 3.97.942 30.08 13.086 31.84 16.227 1.41 2.513-1.45 6.141-3.06 7.642 3.13.146 11.15-4.08 11.15-8.889",
// "20": "M1643.5 758.896v28.482l80.82 1.295v-14.7l6.64-2.416 26.77 10.27 9.61-1.41 23.32 9.062c1.45-1.343 4.62-4.068 5.75-4.229 1.41-.201 42.11 17.117 43.41 17.52 1.03.322.43 6.309 0 9.263l17.43 5.236h38.24l26.46-16.513h6.61l5.05-3.021 7.53 1.41c5.39-3.377 17.46-10.508 22.61-12.013 6.45-1.882 57.19 0 59.21 0 1.61 0 23.78 9.082 34.67 13.624l7.15-1.611 14.76 9.062c1.32-.802 4.64-2.348 7.38-2.12 3.42.285 31.77 14.585 32.62 15.485.69.72.29 4.415 0 6.172l144.42 67.678v6.839l32.9 15.173v-19.71c1.61-1.5 4.47-5.129 3.06-7.641-1.76-3.141-27.87-15.286-31.84-16.228-3.19-.754-4.08-4.032-4.12-5.577l-5.29-2.209-193.89-99.502-7.15 3.636c-9.37-4.89-28.79-14.872-31.6-15.674-3.51-1.003-57.81-2.383-60.77-1.505-2.36.702-17.07 9.321-24.12 13.543l-7.53-2.007-5.05 4.264h-7.54l-25.53 18.308h-38.24l-17.43-9.154-6.9 1.254c-12.71-5.601-38.57-16.929-40.38-17.43-1.8-.502-2.01-2.132-1.88-2.884l-23.32-11.411-10.54 1.88c-3.51-4.388-16.42-8.777-20.69-10.031-4.26-1.254-40.75-3.261-58.93-3.386-1.72-.012-3.42-.029-5.11-.046-16.17-.165-30.47-.311-33.77 4.686-2.91 4.414 2.33 11.632 5.31 14.69z",
// "19": "M2308.01 945.597c.29-3.847-7.31-7.238-11.15-8.452v-19.709l-32.9-15.173v-6.839l-144.42-67.678c.29-1.757.69-5.452 0-6.172-.85-.9-29.21-15.2-32.62-15.485-2.74-.228-6.06 1.318-7.38 2.12l-14.77-9.062-7.14 1.611c-10.89-4.542-33.06-13.624-34.67-13.624-2.02 0-52.76-1.882-59.21 0-5.15 1.505-17.22 8.636-22.62 12.013l-7.52-1.41-5.06 3.021h-6.6l-26.46 16.513h-38.25l-17.43-5.236c.44-2.954 1.04-8.941 0-9.263-1.3-.403-41.99-17.721-43.4-17.52-1.13.161-4.3 2.886-5.75 4.229l-23.32-9.062-9.61 1.41-26.77-10.27-6.64 2.416v14.7l-80.82-1.295c-3.34.703-6.3 3.958-7.37 5.498v4.839c-2.75 1.686-8.24 5.982-8.24 9.677s5.49 9.09 8.24 11.326c-.39-3.191 1.39-10.302 8.51-13.211 3.38-.383 12.34-1.129 21.14-1.052 8.81.076 49.66 1.371 68.99 2.009l22.96 9.089 6.99-2.296 92.52 36.621h36.64l28.07-16.388h6.6l5.89-4.813 6.69 2.98c5.99-3.858 18.23-11.712 19.33-12.262 1.03-.516 37.94.966 57.22 1.739l.01.001c6.43.258 10.9.437 11.41.437 1.65 0 14.67 7.334 20.97 11.002l9.29-1.719 195.23 91.353c-.05 1.155.1 3.626 1.14 4.274s29.84 14.109 44.12 20.758v5.933c2.6-.923 7.87-3.731 8.16-7.578",
"19-20":
"M2308.01 945.597c.29-3.847-7.31-7.238-11.15-8.452v-19.709l-32.9-15.173v-6.839l-144.42-67.678c.29-1.757.69-5.452 0-6.172-.85-.9-29.21-15.2-32.62-15.485-2.74-.228-6.06 1.318-7.38 2.12l-14.77-9.062-7.14 1.611c-10.89-4.542-33.06-13.624-34.67-13.624-2.02 0-52.76-1.882-59.21 0-5.15 1.505-17.22 8.636-22.62 12.013l-7.52-1.41-5.06 3.021h-6.6l-26.46 16.513h-38.25l-17.43-5.236c.44-2.954 1.04-8.941 0-9.263-1.3-.403-41.99-17.721-43.4-17.52-1.13.161-4.3 2.886-5.75 4.229l-23.32-9.062-9.61 1.41-26.77-10.27-6.64 2.416v14.7l-80.82-1.295c-3.34.703-6.3 3.958-7.37 5.498v4.839c-2.75 1.686-8.24 5.982-8.24 9.677s5.49 9.09 8.24 11.326c-.39-3.191 1.39-10.302 8.51-13.211 3.38-.383 12.34-1.129 21.14-1.052 8.81.076 49.66 1.371 68.99 2.009l22.96 9.089 6.99-2.296 92.52 36.621h36.64l28.07-16.388h6.6l5.89-4.813 6.69 2.98c5.99-3.858 18.23-11.712 19.33-12.262 1.03-.516 37.94.966 57.22 1.739l.01.001c6.43.258 10.9.437 11.41.437 1.65 0 14.67 7.334 20.97 11.002l9.29-1.719 195.23 91.353c-.05 1.155.1 3.626 1.14 4.274s29.84 14.109 44.12 20.758v5.933c2.6-.923 7.87-3.731 8.16-7.578M1643.5 758.896v28.482l80.82 1.295v-14.7l6.64-2.416 26.77 10.27 9.61-1.41 23.32 9.062c1.45-1.343 4.62-4.068 5.75-4.229 1.41-.201 42.11 17.117 43.41 17.52 1.03.322.43 6.309 0 9.263l17.43 5.236h38.24l26.46-16.513h6.61l5.05-3.021 7.53 1.41c5.39-3.377 17.46-10.508 22.61-12.013 6.45-1.882 57.19 0 59.21 0 1.61 0 23.78 9.082 34.67 13.624l7.15-1.611 14.76 9.062c1.32-.802 4.64-2.348 7.38-2.12 3.42.285 31.77 14.585 32.62 15.485.69.72.29 4.415 0 6.172l144.42 67.678v6.839l32.9 15.173v-19.71c1.61-1.5 4.47-5.129 3.06-7.641-1.76-3.141-27.87-15.286-31.84-16.228-3.19-.754-4.08-4.032-4.12-5.577l-5.29-2.209-193.89-99.502-7.15 3.636c-9.37-4.89-28.79-14.872-31.6-15.674-3.51-1.003-57.81-2.383-60.77-1.505-2.36.702-17.07 9.321-24.12 13.543l-7.53-2.007-5.05 4.264h-7.54l-25.53 18.308h-38.24l-17.43-9.154-6.9 1.254c-12.71-5.601-38.57-16.929-40.38-17.43-1.8-.502-2.01-2.132-1.88-2.884l-23.32-11.411-10.54 1.88c-3.51-4.388-16.42-8.777-20.69-10.031-4.26-1.254-40.75-3.261-58.93-3.386-1.72-.012-3.42-.029-5.11-.046-16.17-.165-30.47-.311-33.77 4.686-2.91 4.414 2.33 11.632 5.31 14.69z",
"18": "M1644.64 805.505c-7.12 2.909-8.9 10.02-8.51 13.211v21.664c1.28-3.215 5.82-9.532 13.8-9.076 9.97.57 81.2 3.135 84.84 3.42 2.91.227 82.86 30.205 122.48 45.166l36.63.855 28.07-13.963h6.61l31.9-14.961c21.47-.237 65.25-.741 68.64-.855 3.4-.114 147.96 59.13 219.82 88.766l.71 5.861 50.22 20.497v-18.852c-14.28-6.649-43.08-20.109-44.12-20.758s-1.19-3.119-1.14-4.274l-195.23-91.353-9.28 1.719c-6.31-3.668-19.33-11.002-20.98-11.002-.51 0-4.98-.179-11.42-.438-19.28-.773-56.19-2.255-57.22-1.739-1.1.55-13.34 8.404-19.32 12.262l-6.7-2.98-5.88 4.813h-6.61l-28.07 16.388h-36.63l-92.53-36.621-6.99 2.296-22.96-9.089c-19.33-.638-60.18-1.933-68.98-2.009-8.81-.077-17.77.669-21.15 1.052",
"17": "M1643.86 887.229c-5.07-3.996-15.36-13.042-15.97-17.265-.62-4.223 5.24-7.038 8.24-7.918v-21.663c1.28-3.216 5.82-9.532 13.8-9.076 9.97.57 81.2 3.134 84.84 3.419 2.91.228 82.86 30.206 122.47 45.166l36.64.855 28.07-13.963h6.6l31.91-14.96c21.47-.238 65.25-.741 68.64-.855s147.96 59.129 219.82 88.765l.71 5.862 50.22 20.497v18.339c-50.46-21.266-153.48-64.547-161.92-67.551-8.44-3.003-12.11-1.898-12.89-.971l-16.93 5.912c-10.24-3.671-30.71-11.282-30.71-12.359v-7.955l-13.49-5.49h-10.58c-1.56-2.385-19.71-10.578-21.68-10.682s-61.29-2.593-67.51-1.556c-4.98.83-17.84 10.509-23.65 15.245l-6.63-.622-5.31 3.76-34.67 16.674-5.09-1.879-31.55-3.053-90.41-32.033h-9.57c-1.06-1.789-19.8-9.728-23.9-9.728-.66 0-3.46-.08-7.7-.202-22.15-.638-83.77-2.411-86.9.202-2.98 2.492 2.16 11.095 5.1 15.085",
"Reset 16":
@@ -967,20 +960,6 @@ export const enumerationMasks: Record<
height: 20,
d: "M2253.51 462.734c-1.43 0-2.48-.6-2.94-1.404l.9-.636c.42.66 1.05 1.02 2.02 1.02 1.28 0 2.01-.624 2.01-1.56 0-.924-.77-1.56-1.98-1.56h-.85v-1.008h.85c1.09 0 1.8-.6 1.8-1.452 0-.864-.67-1.452-1.83-1.452-.9 0-1.48.348-1.84.936l-.88-.624c.46-.744 1.43-1.332 2.76-1.332 1.82 0 2.98 1.008 2.98 2.4 0 .936-.53 1.62-1.42 1.956v.024c1.04.372 1.6 1.128 1.6 2.148 0 1.476-1.22 2.544-3.18 2.544m5.12-.396.42-.984c.41.228.89.36 1.43.36 1.9 0 2.68-1.596 2.79-3.624h-.02c-.52.732-1.41 1.116-2.38 1.116-1.61 0-2.77-1.08-2.77-2.724 0-1.668 1.2-2.82 3.06-2.82 2.5 0 3.24 2.088 3.24 4.164 0 2.328-.94 4.908-3.91 4.908-.73 0-1.36-.156-1.86-.396m2.47-4.128c.89 0 1.94-.432 1.94-1.608 0-.876-.6-1.932-1.95-1.932-1.12 0-1.83.696-1.83 1.764 0 1.02.66 1.776 1.84 1.776m4.58 1.344v-1.056h2.86v1.056zm10.9.024v1.008h-1.61v2.016h-1.18v-2.016h-4.44v-.876l4.13-5.916h1.49v5.784zm-5.94 0h3.15v-4.476h-.02zm9.85 3.156c-2.59 0-3.18-2.196-3.18-4.524 0-2.316.57-4.548 3.18-4.548 2.59 0 3.18 2.196 3.18 4.524 0 2.316-.58 4.548-3.18 4.548m0-1.02c1.81 0 1.99-1.8 1.99-3.516s-.18-3.516-1.99-3.516-1.99 1.8-1.99 3.516.18 3.516 1.99 3.516",
},
// "39": {
// x: 2251,
// y: 463.402,
// width: 33,
// height: 20,
// d: "M2263.03 478.534c-1.43 0-2.47-.6-2.94-1.404l.9-.636c.42.66 1.05 1.02 2.03 1.02 1.27 0 2-.624 2-1.56 0-.924-.77-1.56-1.98-1.56h-.85v-1.008h.85c1.09 0 1.8-.6 1.8-1.452 0-.864-.67-1.452-1.82-1.452-.9 0-1.49.348-1.85.936l-.88-.624c.46-.744 1.43-1.332 2.76-1.332 1.83 0 2.98 1.008 2.98 2.4 0 .936-.53 1.62-1.42 1.956v.024c1.05.372 1.6 1.128 1.6 2.148 0 1.476-1.21 2.544-3.18 2.544m5.12-.396.42-.984c.41.228.89.36 1.43.36 1.91 0 2.69-1.596 2.8-3.624h-.03c-.51.732-1.4 1.116-2.37 1.116-1.61 0-2.78-1.08-2.78-2.724 0-1.668 1.2-2.82 3.06-2.82 2.5 0 3.24 2.088 3.24 4.164 0 2.328-.93 4.908-3.91 4.908-.73 0-1.35-.156-1.86-.396m2.47-4.128c.89 0 1.95-.432 1.95-1.608 0-.876-.6-1.932-1.96-1.932-1.11 0-1.82.696-1.82 1.764 0 1.02.66 1.776 1.83 1.776",
// },
// "40": {
// x: 2251,
// y: 436.602,
// width: 33,
// height: 20,
// d: "M2266.89 448.578v1.008h-1.61v2.016h-1.17v-2.016h-4.44v-.876l4.13-5.916h1.48v5.784zm-5.94 0h3.16v-4.476h-.03zm9.85 3.156c-2.59 0-3.18-2.196-3.18-4.524 0-2.316.58-4.548 3.18-4.548s3.18 2.196 3.18 4.524c0 2.316-.57 4.548-3.18 4.548m0-1.02c1.82 0 2-1.8 2-3.516s-.18-3.516-2-3.516c-1.81 0-1.99 1.8-1.99 3.516s.18 3.516 1.99 3.516",
// },
"41-42": {
x: 2241,
y: 396,
@@ -988,20 +967,6 @@ export const enumerationMasks: Record<
height: 20,
d: "M2257.37 407.976v1.008h-1.61V411h-1.17v-2.016h-4.44v-.876l4.12-5.916h1.49v5.784zm-5.94 0h3.16V403.5h-.03zm7.28 3.024v-1.044h2.15v-6.3c-.66.396-1.4.636-2.15.828v-1.044c1-.3 1.84-.696 2.52-1.248h.82v7.764h2.13V411zm6.97-3.048v-1.056h2.86v1.056zm10.9.024v1.008h-1.61V411h-1.18v-2.016h-4.44v-.876l4.13-5.916h1.49v5.784zm-5.94 0h3.15V403.5h-.02zm6.91 3.024v-.852l3.07-3.072c.86-.852 1.42-1.62 1.42-2.472 0-.888-.59-1.5-1.72-1.5-.9 0-1.45.384-1.94 1.068l-.86-.66c.65-.9 1.56-1.452 2.88-1.452 1.78 0 2.82.996 2.82 2.46 0 .948-.44 1.884-1.4 2.844l-2.58 2.568v.024h4.16V411z",
},
// "41": {
// x: 2251,
// y: 409.801,
// width: 33,
// height: 20,
// d: "M2266.89 421.777v1.008h-1.61v2.016h-1.17v-2.016h-4.44v-.876l4.13-5.916h1.48v5.784zm-5.94 0h3.16v-4.476h-.03zm7.29 3.024v-1.044h2.14v-6.3c-.66.396-1.4.636-2.14.828v-1.044c.99-.3 1.83-.696 2.52-1.248h.81v7.764h2.14v1.044z",
// },
// "42": {
// x: 2251,
// y: 383,
// width: 33,
// height: 20,
// d: "M2266.89 394.976v1.008h-1.61V398h-1.17v-2.016h-4.44v-.876l4.13-5.916h1.48v5.784zm-5.94 0h3.16V390.5h-.03zm6.91 3.024v-.852l3.08-3.072c.86-.852 1.41-1.62 1.41-2.472 0-.888-.59-1.5-1.71-1.5-.9 0-1.46.384-1.95 1.068l-.85-.66c.65-.9 1.56-1.452 2.88-1.452 1.78 0 2.82.996 2.82 2.46 0 .948-.44 1.884-1.4 2.844l-2.58 2.568v.024h4.16V398z",
// },
"Sky 44": {
x: 2240,
y: 313,
@@ -1011,7 +976,6 @@ export const enumerationMasks: Record<
},
},
hq: {
// x="2232.72" y="1291.62" width="44.976" height="27.25"
"5": [
{
x: 1561.19,
@@ -1020,15 +984,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "m1578.09 1261.38-.28 3.7c.5-.22 1.11-.36 1.91-.36 2.67 0 4.58 1.63 4.58 4.18 0 2.51-1.86 4.24-4.83 4.24-1.97 0-3.41-.77-4.22-1.8l1.25-1.13c.7.91 1.65 1.41 3.01 1.41 1.89 0 3.02-1.04 3.02-2.68 0-1.61-1.18-2.72-3.13-2.72-.91 0-1.56.25-2.11.57h-1.34l.55-6.97h7.05v1.56z",
},
// {
// x: 2232.72,
// y: 1291.62,
// width: 44.976,
// height: 27.251,
// d: "m2253.32 1301.48-.26 3.38c.45-.19 1.01-.32 1.75-.32 2.43 0 4.18 1.49 4.18 3.82 0 2.29-1.7 3.88-4.41 3.88-1.8 0-3.13-.7-3.86-1.65l1.14-1.03c.64.83 1.51 1.29 2.75 1.29 1.73 0 2.76-.95 2.76-2.45 0-1.47-1.07-2.49-2.86-2.49-.83 0-1.42.23-1.93.53h-1.22l.5-6.38h6.45v1.42z",
// },
],
// x="2232.72" y="1263.91" width="44.976" height="27.25"
"6": [
{
x: 1561.19,
@@ -1037,15 +993,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "m1583.99 1227.29-.64 1.43c-.66-.39-1.47-.57-2.27-.57-2.75 0-3.97 2.16-4.17 5.15h.04c.79-1.06 2.18-1.57 3.56-1.57 2.59 0 4.24 1.78 4.24 4.16 0 2.5-1.81 4.26-4.67 4.26-3.74 0-4.9-3.02-4.9-6.21 0-3.63 1.52-7.31 5.94-7.31 1.14 0 2.09.25 2.87.66m-3.82 11.36c1.79 0 2.82-1.13 2.82-2.7 0-1.52-.96-2.74-2.86-2.74-1.53 0-2.97.82-2.97 2.47 0 1.23.81 2.97 3.01 2.97",
},
// {
// x: 2232.72,
// y: 1263.91,
// width: 44.976,
// height: 27.251,
// d: "m2258.72 1272.76-.59 1.31c-.61-.36-1.34-.52-2.08-.52-2.52 0-3.63 1.98-3.81 4.71h.03c.72-.97 2-1.44 3.26-1.44 2.37 0 3.87 1.64 3.87 3.81 0 2.29-1.65 3.89-4.27 3.89-3.41 0-4.48-2.76-4.48-5.67 0-3.32 1.39-6.69 5.43-6.69 1.05 0 1.92.23 2.64.6m-3.5 10.39c1.63 0 2.58-1.03 2.58-2.47 0-1.39-.88-2.5-2.62-2.5-1.4 0-2.71.75-2.71 2.25 0 1.13.73 2.72 2.75 2.72",
// },
],
// x="2232.72" y="1235.66" width="44.976" height="27.25"
"7": [
{
x: 1561.19,
@@ -1054,15 +1002,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "m1577.34 1206.95 4.99-11.57h-7.02v-1.55h8.9v1.3l-5.01 11.82z",
},
// {
// x: 2232.72,
// y: 1235.66,
// width: 44.976,
// height: 27.251,
// d: "m2252.63 1256.09 4.56-10.58h-6.42v-1.42h8.14v1.19l-4.58 10.81z",
// },
],
// x="2232.72" y="1207.6" width="44.976" height="27.25"
"8": [
{
x: 1561.19,
@@ -1071,15 +1011,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1579.79 1174.15c-2.89 0-4.73-1.52-4.73-3.72 0-1.51.85-2.59 2.43-3.2v-.03c-1.34-.56-2.15-1.63-2.15-3.02 0-2.08 1.77-3.54 4.45-3.54 2.72 0 4.47 1.46 4.47 3.54 0 1.39-.82 2.43-2.14 2.95v.03c1.55.63 2.43 1.76 2.43 3.27 0 2.2-1.86 3.72-4.76 3.72m0-7.65c1.58 0 2.7-.95 2.7-2.22 0-1.23-.98-2.14-2.7-2.14-1.71 0-2.68.91-2.68 2.14 0 1.27 1.13 2.22 2.68 2.22m0 1.45c-1.75 0-2.96 1-2.96 2.41 0 1.33 1.07 2.29 2.96 2.29 1.92 0 2.99-.96 2.99-2.29 0-1.41-1.23-2.41-2.99-2.41",
},
// {
// x: 2232.72,
// y: 1207.6,
// width: 44.976,
// height: 27.251,
// d: "M2254.87 1228.21c-2.65 0-4.33-1.39-4.33-3.4 0-1.39.78-2.37 2.22-2.92v-.04c-1.22-.5-1.96-1.49-1.96-2.76 0-1.9 1.62-3.24 4.07-3.24 2.49 0 4.09 1.34 4.09 3.24 0 1.27-.75 2.22-1.96 2.7v.03c1.42.57 2.22 1.6 2.22 2.99 0 2.01-1.7 3.4-4.35 3.4m0-7c1.44 0 2.47-.86 2.47-2.02 0-1.13-.9-1.97-2.47-1.97s-2.45.84-2.45 1.97c0 1.16 1.03 2.02 2.45 2.02m0 1.33c-1.6 0-2.71.92-2.71 2.21 0 1.21.98 2.09 2.71 2.09 1.75 0 2.73-.88 2.73-2.09 0-1.29-1.12-2.21-2.73-2.21",
// },
],
// x="2232.72" y="1179.61" width="44.976" height="27.25"
"9": [
{
x: 1561.19,
@@ -1088,15 +1020,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "m1575.86 1140.57.63-1.47c.6.34 1.32.54 2.12.54 2.85 0 4.01-2.38 4.17-5.4h-.04c-.77 1.09-2.09 1.66-3.54 1.66-2.39 0-4.13-1.61-4.13-4.06 0-2.48 1.79-4.2 4.56-4.2 3.72 0 4.83 3.11 4.83 6.21 0 3.47-1.4 7.31-5.83 7.31-1.09 0-2.02-.23-2.77-.59m3.68-6.15c1.33 0 2.9-.64 2.9-2.4 0-1.3-.89-2.88-2.92-2.88-1.66 0-2.71 1.04-2.71 2.63 0 1.52.98 2.65 2.73 2.65",
},
// {
// x: 2232.72,
// y: 1179.61,
// width: 44.976,
// height: 27.251,
// d: "m2251.27 1199.69.58-1.34c.55.31 1.21.49 1.94.49 2.6 0 3.67-2.18 3.81-4.94h-.03c-.7 1-1.91 1.52-3.24 1.52-2.19 0-3.78-1.47-3.78-3.71 0-2.27 1.64-3.84 4.18-3.84 3.4 0 4.41 2.84 4.41 5.67 0 3.17-1.27 6.69-5.33 6.69-1 0-1.85-.21-2.54-.54m3.37-5.63c1.21 0 2.65-.59 2.65-2.19 0-1.19-.81-2.63-2.66-2.63-1.52 0-2.49.95-2.49 2.4 0 1.39.9 2.42 2.5 2.42",
// },
],
// x="2232.72" y="1151.96" width="44.976" height="27.25"
"10": [
{
x: 1561.19,
@@ -1105,15 +1029,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1570.3 1107.97v-1.56h3.2v-9.39c-.99.59-2.1.95-3.2 1.24v-1.56c1.48-.44 2.73-1.03 3.75-1.86h1.22v11.57h3.18v1.56zm15.05.19c-3.86 0-4.74-3.27-4.74-6.74 0-3.45.86-6.77 4.74-6.77 3.86 0 4.74 3.27 4.74 6.74 0 3.45-.86 6.77-4.74 6.77m0-1.52c2.7 0 2.97-2.68 2.97-5.23 0-2.56-.27-5.24-2.97-5.24s-2.97 2.68-2.97 5.24c0 2.55.27 5.23 2.97 5.23",
},
// {
// x: 2232.72,
// y: 1151.96,
// width: 44.976,
// height: 27.251,
// d: "M2245.94 1172.4v-1.42h2.93v-8.59c-.9.54-1.92.87-2.93 1.13v-1.43c1.36-.4 2.5-.94 3.43-1.7h1.12v10.59h2.91v1.42zm13.77.18c-3.53 0-4.34-2.99-4.34-6.17 0-3.15.79-6.2 4.34-6.2 3.53 0 4.33 3 4.33 6.17 0 3.16-.78 6.2-4.33 6.2m0-1.39c2.47 0 2.71-2.46 2.71-4.79 0-2.34-.24-4.8-2.71-4.8s-2.72 2.46-2.72 4.8c0 2.33.25 4.79 2.72 4.79",
// },
],
// x="2232.72" y="1123.9" width="44.976" height="27.25"
"11": [
{
x: 1561.19,
@@ -1122,15 +1038,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1570.3 1074.97v-1.55h3.2v-9.39c-.99.59-2.1.95-3.2 1.23v-1.55c1.48-.45 2.73-1.04 3.75-1.86h1.22v11.57h3.18v1.55zm11.22 0v-1.55h3.2v-9.39c-.98.59-2.09.95-3.2 1.23v-1.55c1.49-.45 2.74-1.04 3.76-1.86h1.21v11.57h3.19v1.55z",
},
// {
// x: 2232.72,
// y: 1123.9,
// width: 44.976,
// height: 27.251,
// d: "M2245.94 1144.34v-1.42h2.93v-8.59c-.9.54-1.92.87-2.93 1.13v-1.42c1.36-.41 2.5-.95 3.43-1.71h1.12v10.59h2.91v1.42zm10.27 0v-1.42h2.93v-8.59c-.9.54-1.92.87-2.93 1.13v-1.42c1.36-.41 2.5-.95 3.43-1.71h1.12v10.59h2.91v1.42z",
// },
],
// x="2232.72" y="1095.84" width="44.976" height="27.25"
"12": [
{
x: 1561.19,
@@ -1139,15 +1047,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1570.3 1041.98v-1.56h3.2v-9.39c-.99.59-2.1.95-3.2 1.24v-1.56c1.48-.45 2.73-1.04 3.75-1.86h1.22v11.57h3.18v1.56zm10.67 0v-1.27l4.58-4.58c1.28-1.27 2.11-2.41 2.11-3.68 0-1.33-.88-2.24-2.56-2.24-1.34 0-2.16.57-2.9 1.59l-1.27-.98c.97-1.34 2.33-2.16 4.29-2.16 2.65 0 4.21 1.48 4.21 3.66 0 1.41-.67 2.81-2.1 4.24l-3.84 3.82v.04h6.2v1.56z",
},
// {
// x: 2232.72,
// y: 1095.84,
// width: 44.976,
// height: 27.251,
// d: "M2245.94 1116.28v-1.42h2.93v-8.59c-.9.54-1.92.87-2.93 1.13v-1.42c1.36-.41 2.5-.95 3.43-1.7h1.12v10.58h2.91v1.42zm9.76 0v-1.16l4.19-4.19c1.18-1.16 1.93-2.2 1.93-3.37 0-1.21-.8-2.04-2.34-2.04-1.23 0-1.98.52-2.65 1.46l-1.16-.9c.88-1.23 2.13-1.98 3.92-1.98 2.42 0 3.85 1.35 3.85 3.35 0 1.29-.61 2.57-1.92 3.88l-3.51 3.5v.03h5.67v1.42z",
// },
],
// x="2232.72" y="1067.64" width="44.976" height="27.25"
"13": [
{
x: 1561.19,
@@ -1156,32 +1056,16 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1570.3 1008.98v-1.56h3.2v-9.383c-.99.59-2.1.948-3.2 1.234v-1.556c1.48-.446 2.73-1.037 3.75-1.859h1.22v11.564h3.18v1.56zm14.55.2c-2.13 0-3.68-.9-4.38-2.1l1.34-.94c.63.98 1.58 1.52 3.02 1.52 1.9 0 2.99-.93 2.99-2.33 0-1.37-1.14-2.32-2.95-2.32h-1.27v-1.5h1.27c1.63 0 2.68-.9 2.68-2.167 0-1.288-1-2.164-2.72-2.164-1.34 0-2.21.519-2.75 1.395l-1.3-.93c.67-1.109 2.12-1.985 4.11-1.985 2.72 0 4.43 1.502 4.43 3.576 0 1.395-.79 2.415-2.11 2.915v.04c1.56.55 2.38 1.68 2.38 3.2 0 2.19-1.81 3.79-4.74 3.79",
},
// {
// x: 2232.72,
// y: 1067.64,
// width: 44.976,
// height: 27.251,
// d: "M2246.62 1088.08v-1.42h2.93v-8.59c-.9.54-1.92.87-2.93 1.13v-1.42c1.36-.41 2.5-.95 3.43-1.71h1.12v10.59h2.91v1.42zm13.32.18c-1.95 0-3.37-.82-4.01-1.91l1.22-.87c.58.9 1.44 1.39 2.77 1.39 1.73 0 2.73-.85 2.73-2.13 0-1.26-1.05-2.12-2.7-2.12h-1.16v-1.38h1.16c1.49 0 2.45-.82 2.45-1.98 0-1.17-.91-1.98-2.48-1.98-1.23 0-2.03.48-2.52 1.28l-1.19-.85c.62-1.01 1.94-1.82 3.76-1.82 2.48 0 4.05 1.38 4.05 3.28 0 1.27-.72 2.2-1.93 2.66v.03c1.43.51 2.18 1.54 2.18 2.93 0 2.01-1.65 3.47-4.33 3.47",
// },
],
// x="2232.72" y="1039.66" width="44.976" height="27.25"
"14": [
{
x: 1561.19,
y: 955.359,
width: 38.006,
height: 32.502,
height: 27.251,
d: "M1570.3 975.984v-1.555h3.2v-9.387c-.99.59-2.1.948-3.2 1.234v-1.556c1.48-.447 2.73-1.037 3.75-1.859h1.22v11.568h3.18v1.555zm20.45-4.505v1.502h-2.4v3.003h-1.75v-3.003h-6.61v-1.306l6.15-8.814h2.21v8.618zm-8.85 0h4.7v-6.669h-.04z",
},
// {
// x: 2232.72,
// y: 1039.66,
// width: 44.976,
// height: 27.25,
// d: "M2245.94 1060.09v-1.42h2.93v-8.59c-.9.54-1.92.87-2.93 1.13v-1.42c1.36-.41 2.5-.95 3.43-1.7h1.12v10.58h2.91v1.42zm18.71-4.12v1.38h-2.19v2.74h-1.61v-2.74h-6.05v-1.2l5.63-8.06h2.03v7.88zm-8.1 0h4.3v-6.1h-.03z",
// },
],
// x="2232.72" y="985.001" width="93.954" height="27.25"
"Reset 16": [
{
x: 1500.24,
@@ -1190,15 +1074,7 @@ export const enumerationMasks: Record<
height: 32.502,
d: "m1523.04 920.722-2.79-5.775h-3.64v5.775h-1.81V906.99h5.6c2.54 0 4.41 1.449 4.41 3.934 0 1.841-1.11 3.075-2.75 3.611l3.02 6.187zm-6.43-12.158v4.809h3.75c1.47 0 2.63-.786 2.63-2.396 0-1.627-1.13-2.413-2.61-2.413zm10.99 6.615h5.33c-.11-1.573-.89-2.825-2.59-2.825-1.68 0-2.58 1.216-2.74 2.825m5.47 3.129 1.18 1.055c-.85 1.001-2.09 1.555-3.63 1.555-3.02 0-4.73-1.984-4.73-5.006 0-2.896 1.71-4.988 4.48-4.988 2.76 0 4.24 2.056 4.24 4.684 0 .286-.02.733-.05.984h-6.94c.18 1.823 1.23 2.878 3.02 2.878 1.06 0 1.86-.393 2.43-1.162m6.8 2.61c-1.7 0-3.02-.5-4.02-1.448l1.04-1.162c.84.805 1.89 1.18 3.04 1.18 1.52 0 2.25-.554 2.25-1.377 0-.912-.97-1.126-2.58-1.466-1.8-.393-3.41-.947-3.41-2.807 0-1.645 1.29-2.914 3.79-2.914 1.54 0 2.74.465 3.74 1.376l-1.02 1.163c-.82-.751-1.74-1.109-2.77-1.109-1.34 0-2.02.572-2.02 1.305 0 .894.85 1.091 2.52 1.449 1.77.393 3.47.894 3.47 2.807 0 1.752-1.4 3.003-4.03 3.003m7.17-5.739h5.32c-.1-1.573-.89-2.825-2.59-2.825-1.68 0-2.57 1.216-2.73 2.825m5.47 3.129 1.18 1.055c-.86 1.001-2.09 1.555-3.63 1.555-3.02 0-4.74-1.984-4.74-5.006 0-2.896 1.72-4.988 4.49-4.988 2.75 0 4.24 2.056 4.24 4.684 0 .286-.02.733-.06.984h-6.94c.18 1.823 1.24 2.878 3.03 2.878 1.05 0 1.86-.393 2.43-1.162m2.29-5.775v-1.413h1.92v-3.039h1.7v3.039h2.3v1.413h-2.3v5.256c0 1.145.3 1.663 1.55 1.663.32 0 .56-.036.75-.071v1.376c-.37.09-.8.161-1.34.161-1.82 0-2.66-1.001-2.66-2.699v-5.686zm12.56 8.189v-1.556h3.2v-9.386c-.98.59-2.09.947-3.2 1.233v-1.555c1.48-.447 2.74-1.037 3.76-1.86h1.21v11.568h3.18v1.556zm19.24-12.659-.65 1.43c-.66-.393-1.46-.572-2.27-.572-2.75 0-3.97 2.164-4.16 5.15h.03c.79-1.055 2.18-1.574 3.56-1.574 2.59 0 4.24 1.788 4.24 4.166 0 2.503-1.81 4.255-4.67 4.255-3.73 0-4.9-3.021-4.9-6.204 0-3.629 1.52-7.312 5.94-7.312 1.14 0 2.09.25 2.88.661m-3.83 11.353c1.79 0 2.83-1.126 2.83-2.699 0-1.52-.97-2.736-2.86-2.736-1.54 0-2.97.823-2.97 2.468 0 1.233.8 2.967 3 2.967",
},
// {
// x: 2232.72,
// y: 985.001,
// width: 93.954,
// height: 27.25,
// d: "m2253.91 1005.44-2.55-5.29h-3.33v5.29h-1.66v-12.563h5.12c2.33 0 4.04 1.325 4.04 3.598 0 1.685-1.01 2.813-2.52 3.304l2.77 5.661zm-5.88-11.124v4.4h3.43c1.34 0 2.4-.72 2.4-2.192 0-1.488-1.03-2.208-2.38-2.208zm10.06 6.054h4.87c-.1-1.442-.82-2.587-2.37-2.587-1.54 0-2.36 1.113-2.5 2.587m5 2.86 1.08.96c-.79.92-1.91 1.43-3.32 1.43-2.76 0-4.33-1.82-4.33-4.58 0-2.651 1.57-4.565 4.1-4.565 2.52 0 3.88 1.881 3.88 4.285 0 .26-.02.67-.05.9h-6.35c.17 1.67 1.13 2.63 2.77 2.63.96 0 1.7-.36 2.22-1.06m6.22 2.39c-1.55 0-2.77-.46-3.68-1.33l.95-1.06c.77.74 1.73 1.08 2.78 1.08 1.39 0 2.06-.51 2.06-1.26 0-.83-.88-1.03-2.36-1.34-1.65-.36-3.12-.87-3.12-2.569 0-1.505 1.18-2.666 3.47-2.666 1.4 0 2.5.425 3.42 1.259l-.94 1.063c-.75-.687-1.58-1.014-2.53-1.014-1.23 0-1.85.524-1.85 1.194 0 .818.78.998 2.31 1.323 1.62.36 3.17.82 3.17 2.57 0 1.6-1.28 2.75-3.68 2.75m6.55-5.25h4.88c-.1-1.442-.82-2.587-2.38-2.587-1.53 0-2.35 1.113-2.5 2.587m5.01 2.86 1.08.96c-.79.92-1.92 1.43-3.32 1.43-2.77 0-4.34-1.82-4.34-4.58 0-2.651 1.57-4.565 4.11-4.565 2.52 0 3.87 1.881 3.87 4.285 0 .26-.01.67-.05.9h-6.34c.16 1.67 1.13 2.63 2.76 2.63.97 0 1.7-.36 2.23-1.06m2.1-5.283v-1.292h1.75v-2.78h1.55v2.78h2.11v1.292h-2.11v4.813c0 1.04.28 1.52 1.42 1.52.3 0 .51-.04.69-.07v1.26c-.34.08-.74.15-1.23.15-1.66 0-2.43-.92-2.43-2.47v-5.203zm11.48 7.493v-1.43h2.93v-8.582c-.9.54-1.91.867-2.93 1.129v-1.423c1.36-.409 2.51-.949 3.44-1.701h1.11v10.577h2.91v1.43zm17.6-11.582-.59 1.309c-.6-.36-1.34-.524-2.08-.524-2.51 0-3.63 1.979-3.81 4.71h.04c.72-.964 1.99-1.439 3.25-1.439 2.37 0 3.88 1.636 3.88 3.806 0 2.29-1.66 3.9-4.27 3.9-3.42 0-4.48-2.77-4.48-5.678 0-3.32 1.39-6.689 5.43-6.689 1.04 0 1.91.229 2.63.605m-3.5 10.382c1.64 0 2.58-1.03 2.58-2.47 0-1.39-.88-2.498-2.61-2.498-1.41 0-2.72.748-2.72 2.258 0 1.13.74 2.71 2.75 2.71",
// },
],
// x="2232.72" y="942.313" width="44.976" height="27.25"
"17": [
{
x: 1561.19,
@@ -1207,15 +1083,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1570.3 857.168v-1.556h3.2v-9.386c-.99.59-2.1.947-3.2 1.233v-1.555c1.48-.447 2.73-1.037 3.75-1.859h1.22v11.567h3.18v1.556zm10.94 0 4.99-11.568h-7.03v-1.555h8.91v1.305l-5.01 11.818z",
},
// {
// x: 2232.72,
// y: 942.313,
// width: 44.976,
// height: 27.251,
// d: "M2247.3 962.751v-1.423h2.93v-8.587c-.9.54-1.91.867-2.93 1.129v-1.423c1.36-.409 2.5-.949 3.44-1.701h1.11v10.582h2.91v1.423zm10.01 0 4.57-10.582h-6.43v-1.423h8.14v1.194l-4.58 10.811z",
// },
],
// x="2232.72" y="914.421" width="44.976" height="27.25"
"18": [
{
x: 1561.19,
@@ -1224,49 +1092,16 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1570.3 824.172v-1.556h3.2v-9.386c-.99.59-2.1.947-3.2 1.233v-1.555c1.48-.447 2.73-1.037 3.75-1.86h1.22v11.568h3.18v1.556zm15.03.197c-2.9 0-4.74-1.52-4.74-3.719 0-1.52.86-2.593 2.43-3.201v-.036c-1.34-.554-2.14-1.627-2.14-3.021 0-2.074 1.77-3.54 4.45-3.54 2.72 0 4.47 1.466 4.47 3.54 0 1.394-.82 2.431-2.14 2.95v.036c1.55.625 2.43 1.752 2.43 3.272 0 2.199-1.86 3.719-4.76 3.719m0-7.653c1.57 0 2.7-.947 2.7-2.217 0-1.234-.98-2.145-2.7-2.145s-2.68.911-2.68 2.145c0 1.27 1.13 2.217 2.68 2.217m0 1.448c-1.75 0-2.97 1.002-2.97 2.414 0 1.323 1.08 2.289 2.97 2.289 1.91 0 2.99-.966 2.99-2.289 0-1.412-1.24-2.414-2.99-2.414",
},
// {
// x: 2232.72,
// y: 914.421,
// width: 44.976,
// height: 27.251,
// d: "M2245.94 934.858v-1.423h2.93v-8.586c-.9.54-1.92.867-2.93 1.128v-1.422c1.36-.409 2.5-.949 3.43-1.701h1.12v10.581h2.91v1.423zm13.75.18c-2.65 0-4.33-1.39-4.33-3.402 0-1.39.78-2.371 2.22-2.927v-.033c-1.22-.507-1.96-1.488-1.96-2.764 0-1.897 1.62-3.238 4.07-3.238 2.49 0 4.09 1.341 4.09 3.238 0 1.276-.75 2.224-1.96 2.699v.032c1.42.573 2.22 1.603 2.22 2.993 0 2.012-1.7 3.402-4.35 3.402m0-7c1.44 0 2.47-.867 2.47-2.028 0-1.128-.9-1.962-2.47-1.962s-2.45.834-2.45 1.962c0 1.161 1.03 2.028 2.45 2.028m0 1.325c-1.6 0-2.71.916-2.71 2.208 0 1.21.98 2.093 2.71 2.093 1.75 0 2.73-.883 2.73-2.093 0-1.292-1.12-2.208-2.73-2.208",
// },
],
// x="2232.72" y="886.528" width="44.976" height="27.25"
"19": [
"19-20": [
{
x: 1561.19,
y: 770.552,
width: 38.006,
height: 27.251,
d: "M1570.3 791.177v-1.556h3.2v-9.386c-.99.59-2.1.947-3.2 1.233v-1.555c1.48-.447 2.73-1.037 3.75-1.86h1.22v11.568h3.18v1.556zm11.1-.394.62-1.466c.61.34 1.33.537 2.13.537 2.84 0 4.01-2.378 4.17-5.4h-.04c-.77 1.091-2.09 1.663-3.54 1.663-2.39 0-4.13-1.609-4.13-4.059 0-2.485 1.79-4.201 4.56-4.201 3.72 0 4.83 3.111 4.83 6.204 0 3.468-1.4 7.312-5.83 7.312-1.09 0-2.02-.232-2.77-.59m3.68-6.15c1.32 0 2.9-.644 2.9-2.396 0-1.305-.9-2.879-2.92-2.879-1.66 0-2.71 1.037-2.71 2.629 0 1.52.98 2.646 2.73 2.646",
d: "M1545.94 774.726v-1.571h3.23v-9.482c-.99.596-2.11.958-3.23 1.247v-1.572c1.49-.451 2.76-1.047 3.79-1.878h1.23v11.685h3.21v1.571zm11.21-.397.63-1.481a4.4 4.4 0 0 0 2.15.541c2.87 0 4.05-2.401 4.21-5.454h-.04c-.77 1.102-2.11 1.68-3.57 1.68-2.42 0-4.17-1.625-4.17-4.1 0-2.51 1.8-4.244 4.6-4.244 3.76 0 4.88 3.143 4.88 6.267 0 3.504-1.41 7.386-5.89 7.386-1.1 0-2.04-.234-2.8-.595m3.72-6.213c1.34 0 2.93-.65 2.93-2.42 0-1.318-.91-2.908-2.95-2.908-1.68 0-2.74 1.048-2.74 2.655 0 1.535.99 2.673 2.76 2.673m6.9 2.023v-1.59h4.3v1.59zm6.51 4.587v-1.282l4.63-4.624c1.3-1.282 2.13-2.438 2.13-3.72 0-1.336-.89-2.257-2.59-2.257-1.35 0-2.18.578-2.92 1.607l-1.28-.993c.97-1.355 2.34-2.186 4.33-2.186 2.67 0 4.24 1.499 4.24 3.703 0 1.426-.66 2.835-2.11 4.28l-3.88 3.865v.036h6.26v1.571zm15.77.198c-3.9 0-4.79-3.304-4.79-6.808 0-3.485.87-6.845 4.79-6.845 3.9 0 4.78 3.305 4.78 6.809 0 3.485-.86 6.844-4.78 6.844m0-1.535c2.72 0 2.99-2.709 2.99-5.291s-.27-5.291-2.99-5.291c-2.73 0-3 2.708-3 5.291 0 2.582.27 5.291 3 5.291",
x: 1535,
y: 754.084,
width: 70.26,
height: 27.25,
},
// {
// x: 2232.72,
// y: 886.528,
// width: 44.976,
// height: 27.251,
// d: "M2245.94 906.966v-1.423h2.93v-8.587c-.9.54-1.92.867-2.93 1.129v-1.423c1.36-.409 2.5-.949 3.43-1.701h1.12v10.582h2.91v1.423zm10.15-.36.58-1.341c.55.31 1.21.49 1.94.49 2.6 0 3.67-2.175 3.81-4.939h-.03c-.7.998-1.91 1.521-3.24 1.521-2.19 0-3.78-1.472-3.78-3.712 0-2.274 1.64-3.844 4.18-3.844 3.4 0 4.41 2.846 4.41 5.675 0 3.173-1.27 6.689-5.33 6.689-1 0-1.85-.212-2.54-.539m3.37-5.626c1.21 0 2.65-.589 2.65-2.192 0-1.194-.81-2.633-2.66-2.633-1.52 0-2.49.949-2.49 2.404 0 1.39.9 2.421 2.5 2.421",
// },
],
// x="2232.72" y="858.386" width="44.976" height="27.25"
"20": [
{
x: 1561.19,
y: 737.556,
width: 38.006,
height: 27.251,
d: "M1569.74 758.181v-1.27l4.58-4.577c1.29-1.269 2.11-2.414 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.163 4.29-2.163 2.64 0 4.2 1.484 4.2 3.665 0 1.412-.66 2.807-2.09 4.237l-3.85 3.826v.036h6.21v1.556zm15.61.196c-3.86 0-4.74-3.272-4.74-6.74 0-3.451.86-6.776 4.74-6.776 3.86 0 4.74 3.271 4.74 6.74 0 3.451-.86 6.776-4.74 6.776m0-1.519c2.7 0 2.97-2.682 2.97-5.239s-.27-5.239-2.97-5.239-2.97 2.682-2.97 5.239.27 5.239 2.97 5.239",
},
// {
// x: 2232.72,
// y: 858.386,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 878.823v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.357 3.85 3.352 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.423zm14.28.18c-3.53 0-4.34-2.993-4.34-6.166 0-3.156.79-6.198 4.34-6.198 3.53 0 4.33 2.993 4.33 6.165 0 3.157-.78 6.199-4.33 6.199m0-1.39c2.47 0 2.71-2.453 2.71-4.792s-.24-4.792-2.71-4.792-2.72 2.453-2.72 4.792.25 4.792 2.72 4.792",
// },
],
// x="2232.72" y="830.512" width="44.976" height="27.25"
"21": [
{
x: 1561.19,
@@ -1275,15 +1110,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1569.74 725.186v-1.27l4.58-4.577c1.29-1.269 2.11-2.414 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.164 4.29-2.164 2.64 0 4.2 1.484 4.2 3.666 0 1.412-.66 2.807-2.09 4.237l-3.85 3.826v.036h6.21v1.556zm11.78 0v-1.556h3.2v-9.387c-.98.59-2.09.948-3.2 1.234v-1.555c1.49-.447 2.74-1.037 3.76-1.86h1.21v11.568h3.19v1.556z",
},
// {
// x: 2232.72,
// y: 830.512,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 850.949v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.357 3.85 3.352 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.423zm10.78 0v-1.423h2.93v-8.586c-.9.54-1.92.867-2.93 1.128v-1.423c1.36-.408 2.5-.948 3.43-1.7h1.12v10.581h2.91v1.423z",
// },
],
// x="2232.72" y="801.952" width="44.976" height="27.25"
"22": [
{
x: 1561.19,
@@ -1292,49 +1119,16 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1569.74 692.191v-1.269l4.58-4.577c1.29-1.27 2.11-2.414 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.164 4.29-2.164 2.64 0 4.2 1.484 4.2 3.666 0 1.412-.66 2.807-2.09 4.237l-3.85 3.826v.036h6.21v1.555zm11.23 0v-1.269l4.58-4.577c1.28-1.27 2.11-2.414 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.9 1.591l-1.27-.983c.97-1.341 2.33-2.164 4.29-2.164 2.65 0 4.21 1.484 4.21 3.666 0 1.412-.67 2.807-2.1 4.237l-3.84 3.826v.036h6.2v1.555z",
},
// {
// x: 2232.72,
// y: 801.952,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 822.389v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.456l-1.16-.9c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.358 3.85 3.353 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.422zm10.27 0v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.456l-1.16-.9c.88-1.227 2.13-1.979 3.92-1.979 2.42 0 3.85 1.358 3.85 3.353 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.422z",
// },
],
// x="2232.72" y="773.636" width="44.976" height="27.25"
"23": [
"23-24": [
{
x: 1561.19,
y: 638.568,
width: 38.006,
height: 27.251,
d: "M1569.74 659.193v-1.269l4.58-4.577c1.29-1.27 2.11-2.414 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.164 4.29-2.164 2.64 0 4.2 1.484 4.2 3.666 0 1.412-.66 2.807-2.09 4.237l-3.85 3.826v.036h6.21v1.555zm15.11.197c-2.13 0-3.68-.894-4.38-2.092l1.34-.947c.63.983 1.58 1.519 3.02 1.519 1.9 0 2.99-.929 2.99-2.324 0-1.377-1.14-2.324-2.95-2.324h-1.27v-1.502h1.27c1.63 0 2.68-.894 2.68-2.164 0-1.287-1-2.163-2.72-2.163-1.34 0-2.21.518-2.75 1.395l-1.3-.93c.67-1.109 2.12-1.985 4.11-1.985 2.72 0 4.43 1.502 4.43 3.576 0 1.395-.79 2.414-2.11 2.914v.036c1.56.554 2.38 1.681 2.38 3.201 0 2.199-1.81 3.79-4.74 3.79",
d: "M1545.38 644.726v-1.282l4.62-4.624c1.3-1.282 2.13-2.438 2.13-3.72 0-1.336-.88-2.257-2.58-2.257-1.36 0-2.19.578-2.93 1.607l-1.28-.993c.98-1.355 2.35-2.186 4.33-2.186 2.68 0 4.25 1.499 4.25 3.703 0 1.426-.67 2.835-2.11 4.28l-3.89 3.865v.036h6.27v1.571zm15.26.198c-2.15 0-3.72-.902-4.43-2.112l1.36-.958c.63.994 1.59 1.535 3.05 1.535 1.91 0 3.02-.939 3.02-2.347 0-1.391-1.16-2.348-2.98-2.348h-1.29v-1.517h1.29c1.64 0 2.71-.903 2.71-2.185 0-1.301-1.02-2.185-2.75-2.185-1.35 0-2.24.523-2.78 1.408l-1.32-.939c.69-1.12 2.15-2.005 4.15-2.005 2.75 0 4.48 1.517 4.48 3.612 0 1.409-.79 2.438-2.13 2.944v.036c1.57.56 2.4 1.698 2.4 3.233 0 2.221-1.82 3.828-4.78 3.828m6.99-4.785v-1.59h4.29v1.59zm6.51 4.587v-1.282l4.62-4.624c1.3-1.282 2.14-2.438 2.14-3.72 0-1.336-.89-2.257-2.59-2.257-1.35 0-2.18.578-2.92 1.607l-1.29-.993c.98-1.355 2.35-2.186 4.34-2.186 2.67 0 4.24 1.499 4.24 3.703 0 1.426-.67 2.835-2.11 4.28l-3.88 3.865v.036h6.26v1.571zm20.99-4.551v1.517h-2.42v3.034h-1.77v-3.034h-6.68v-1.319l6.21-8.903h2.24v8.705zm-8.94 0h4.75v-6.736h-.04z",
x: 1535,
y: 624.084,
width: 70.26,
height: 27.25,
},
// {
// x: 2232.72,
// y: 773.636,
// width: 44.976,
// height: 27.251,
// d: "M2246.11 794.073v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.93-1.979 2.42 0 3.84 1.357 3.84 3.352 0 1.292-.61 2.568-1.91 3.876l-3.52 3.5v.033h5.67v1.423zm13.83.18c-1.95 0-3.37-.818-4.01-1.914l1.22-.866c.58.899 1.44 1.39 2.77 1.39 1.73 0 2.73-.851 2.73-2.126 0-1.26-1.05-2.127-2.7-2.127h-1.16v-1.373h1.16c1.49 0 2.45-.818 2.45-1.979 0-1.178-.91-1.979-2.48-1.979-1.23 0-2.03.474-2.52 1.276l-1.19-.851c.62-1.014 1.94-1.815 3.76-1.815 2.48 0 4.05 1.373 4.05 3.271 0 1.275-.72 2.208-1.93 2.665v.033c1.43.507 2.18 1.538 2.18 2.928 0 2.011-1.65 3.467-4.33 3.467",
// },
],
// x="2232.72" y="745.537" width="44.976" height="27.25"
"24": [
{
x: 1561.19,
y: 605.573,
width: 38.006,
height: 27.251,
d: "M1569.74 626.198v-1.269l4.58-4.577c1.29-1.27 2.11-2.414 2.11-3.683 0-1.324-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.164 4.29-2.164 2.64 0 4.2 1.484 4.2 3.665 0 1.413-.66 2.807-2.09 4.238l-3.85 3.826v.036h6.21v1.555zm20.78-4.505v1.502h-2.39v3.003h-1.76v-3.003h-6.61v-1.306l6.15-8.814h2.22v8.618zm-8.85 0h4.7v-6.669h-.03z",
},
// {
// x: 2232.72,
// y: 745.537,
// width: 44.976,
// height: 27.251,
// d: "M2246.11 765.974v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.93-1.979 2.42 0 3.84 1.357 3.84 3.353 0 1.292-.61 2.567-1.91 3.876l-3.52 3.5v.032h5.67v1.423zm19.01-4.121v1.374h-2.19v2.747h-1.6v-2.747h-6.05v-1.194l5.62-8.063h2.03v7.883zm-8.09 0h4.3v-6.1h-.04z",
// },
],
// x="2232.72" y="717.386" width="44.976" height="27.25"
"25": [
{
x: 1561.19,
@@ -1343,15 +1137,7 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1569.74 593.204v-1.269l4.58-4.577c1.29-1.27 2.11-2.414 2.11-3.684 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.573-2.89 1.592l-1.27-.984c.96-1.341 2.32-2.163 4.29-2.163 2.64 0 4.2 1.484 4.2 3.665 0 1.413-.66 2.807-2.09 4.238l-3.85 3.826v.036h6.21v1.555zm13.89-11.568-.28 3.701c.5-.214 1.11-.357 1.91-.357 2.66 0 4.58 1.627 4.58 4.183 0 2.503-1.86 4.238-4.83 4.238-1.97 0-3.42-.769-4.22-1.806l1.25-1.126c.7.911 1.65 1.412 3.01 1.412 1.89 0 3.02-1.037 3.02-2.682 0-1.609-1.18-2.718-3.13-2.718-.91 0-1.56.251-2.11.573h-1.34l.55-6.973h7.05v1.555z",
},
// {
// x: 2232.72,
// y: 717.386,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 737.823v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.357 3.85 3.352 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.423zm12.71-10.582-.26 3.386c.45-.196 1.01-.327 1.75-.327 2.43 0 4.18 1.488 4.18 3.827 0 2.289-1.7 3.876-4.41 3.876-1.8 0-3.13-.703-3.86-1.652l1.14-1.03c.64.834 1.51 1.292 2.75 1.292 1.73 0 2.76-.949 2.76-2.453 0-1.472-1.07-2.486-2.86-2.486-.83 0-1.42.229-1.93.523h-1.22l.5-6.378h6.45v1.422z",
// },
],
// x="2232.72" y="688.841" width="44.976" height="27.25"
"26": [
{
x: 1561.19,
@@ -1360,83 +1146,25 @@ export const enumerationMasks: Record<
height: 27.251,
d: "M1569.74 560.208v-1.269l4.58-4.578c1.29-1.269 2.11-2.413 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.573-2.89 1.592l-1.27-.984c.96-1.341 2.32-2.163 4.29-2.163 2.64 0 4.2 1.484 4.2 3.665 0 1.413-.66 2.807-2.09 4.238l-3.85 3.826v.036h6.21v1.555zm19.79-12.659-.64 1.431c-.66-.394-1.47-.572-2.27-.572-2.75 0-3.97 2.163-4.17 5.149h.04c.79-1.055 2.18-1.574 3.56-1.574 2.59 0 4.23 1.788 4.23 4.166 0 2.504-1.8 4.256-4.66 4.256-3.74 0-4.9-3.022-4.9-6.204 0-3.63 1.52-7.313 5.93-7.313 1.15 0 2.1.25 2.88.661m-3.82 11.354c1.78 0 2.82-1.127 2.82-2.7 0-1.52-.96-2.736-2.86-2.736-1.54 0-2.97.823-2.97 2.468 0 1.234.81 2.968 3.01 2.968",
},
// {
// x: 2232.72,
// y: 688.841,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 709.276v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.357 3.85 3.353 0 1.292-.61 2.567-1.92 3.876l-3.51 3.5v.032h5.67v1.423zm18.11-11.579-.59 1.308c-.61-.359-1.34-.523-2.08-.523-2.52 0-3.63 1.979-3.81 4.71h.03c.72-.965 2-1.439 3.26-1.439 2.37 0 3.87 1.635 3.87 3.811 0 2.289-1.65 3.892-4.27 3.892-3.41 0-4.48-2.764-4.48-5.675 0-3.32 1.39-6.689 5.43-6.689 1.05 0 1.92.229 2.64.605m-3.5 10.385c1.63 0 2.58-1.03 2.58-2.469 0-1.391-.88-2.503-2.62-2.503-1.4 0-2.71.753-2.71 2.257 0 1.129.73 2.715 2.75 2.715",
// },
],
// x="2232.72" y="661.096" width="44.976" height="27.25"
"27": [
"27-28": [
{
x: 1561.19,
y: 506.588,
width: 38.006,
height: 27.251,
d: "M1569.74 527.213v-1.27l4.58-4.577c1.29-1.269 2.11-2.413 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.592l-1.27-.984c.96-1.341 2.32-2.163 4.29-2.163 2.64 0 4.2 1.484 4.2 3.665 0 1.413-.66 2.807-2.09 4.237l-3.85 3.827v.035h6.21v1.556zm13.14 0 4.99-11.568h-7.03v-1.556h8.91v1.306l-5.01 11.818z",
x: 1535,
y: 491.084,
width: 70.26,
height: 27.25,
d: "M1545.38 511.726v-1.282l4.62-4.624c1.3-1.282 2.13-2.438 2.13-3.72 0-1.336-.88-2.257-2.58-2.257-1.36 0-2.19.578-2.93 1.607l-1.28-.993c.98-1.355 2.35-2.186 4.33-2.186 2.68 0 4.25 1.499 4.25 3.703 0 1.426-.67 2.835-2.11 4.28l-3.89 3.865v.036h6.27v1.571zm13.27 0 5.04-11.685h-7.1v-1.571h8.99v1.318l-5.05 11.938zm9.12-4.587v-1.59h4.3v1.59zm6.51 4.587v-1.282l4.63-4.624c1.3-1.282 2.13-2.438 2.13-3.72 0-1.336-.89-2.257-2.59-2.257-1.35 0-2.18.578-2.92 1.607l-1.28-.993c.97-1.355 2.34-2.186 4.33-2.186 2.67 0 4.24 1.499 4.24 3.703 0 1.426-.66 2.835-2.11 4.28l-3.88 3.865v.036h6.26v1.571zm15.75.198c-2.93 0-4.79-1.535-4.79-3.756 0-1.535.87-2.619 2.46-3.233v-.036c-1.36-.56-2.17-1.643-2.17-3.052 0-2.095 1.79-3.576 4.5-3.576 2.74 0 4.51 1.481 4.51 3.576 0 1.409-.83 2.456-2.16 2.98v.036c1.57.632 2.45 1.77 2.45 3.305 0 2.221-1.88 3.756-4.8 3.756m0-7.729c1.59 0 2.73-.957 2.73-2.239 0-1.246-1-2.168-2.73-2.168-1.74 0-2.71.922-2.71 2.168 0 1.282 1.14 2.239 2.71 2.239m0 1.463c-1.77 0-3 1.011-3 2.438 0 1.336 1.08 2.311 3 2.311 1.93 0 3.01-.975 3.01-2.311 0-1.427-1.24-2.438-3.01-2.438",
},
// {
// x: 2232.72,
// y: 661.096,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 681.533v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.357 3.85 3.352 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.423zm12.02 0 4.56-10.582h-6.42v-1.422h8.14v1.193l-4.58 10.811z",
// },
],
// x="2232.72" y="633.218" width="44.976" height="27.25"
"28": [
"29-30": [
{
x: 1561.19,
y: 473.591,
width: 38.006,
height: 27.251,
d: "M1569.74 494.217v-1.27l4.58-4.577c1.29-1.269 2.11-2.413 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.163 4.29-2.163 2.64 0 4.2 1.484 4.2 3.665 0 1.412-.66 2.807-2.09 4.237l-3.85 3.827v.035h6.21v1.556zm15.59.196c-2.9 0-4.74-1.519-4.74-3.718 0-1.52.86-2.593 2.43-3.201v-.036c-1.34-.554-2.14-1.627-2.14-3.021 0-2.074 1.77-3.54 4.45-3.54 2.72 0 4.47 1.466 4.47 3.54 0 1.394-.82 2.431-2.14 2.95v.036c1.55.625 2.43 1.752 2.43 3.272 0 2.199-1.86 3.718-4.76 3.718m0-7.652c1.57 0 2.7-.948 2.7-2.217 0-1.234-.98-2.145-2.7-2.145s-2.68.911-2.68 2.145c0 1.269 1.13 2.217 2.68 2.217m0 1.448c-1.75 0-2.97 1.002-2.97 2.414 0 1.323 1.08 2.289 2.97 2.289 1.91 0 2.99-.966 2.99-2.289 0-1.412-1.24-2.414-2.99-2.414",
d: "M1546 444.684v-1.249l4.51-4.504c1.26-1.249 2.07-2.375 2.07-3.624 0-1.302-.86-2.199-2.51-2.199-1.32 0-2.13.563-2.85 1.565l-1.25-.967c.95-1.32 2.29-2.129 4.22-2.129 2.6 0 4.14 1.46 4.14 3.607 0 1.389-.66 2.762-2.06 4.169l-3.79 3.765v.035h6.11v1.531zm11.47-.387.62-1.443c.6.334 1.3.528 2.09.528 2.8 0 3.94-2.34 4.1-5.313h-.03c-.76 1.073-2.06 1.636-3.49 1.636-2.35 0-4.06-1.583-4.06-3.994 0-2.445 1.76-4.134 4.49-4.134 3.65 0 4.75 3.061 4.75 6.105 0 3.413-1.38 7.195-5.74 7.195-1.07 0-1.99-.229-2.73-.58m3.63-6.052c1.3 0 2.85-.634 2.85-2.358 0-1.284-.88-2.832-2.87-2.832-1.64 0-2.67 1.02-2.67 2.586 0 1.495.96 2.604 2.69 2.604m6.72 1.97v-1.548h4.18v1.548zm10.3 4.662c-2.09 0-3.62-.88-4.31-2.058l1.32-.933c.62.968 1.55 1.496 2.97 1.496 1.87 0 2.94-.915 2.94-2.287 0-1.355-1.12-2.287-2.9-2.287h-1.25v-1.478h1.25c1.6 0 2.64-.88 2.64-2.129 0-1.266-.99-2.128-2.68-2.128-1.32 0-2.18.51-2.71 1.372l-1.28-.915c.67-1.091 2.09-1.953 4.05-1.953 2.67 0 4.36 1.478 4.36 3.519 0 1.372-.78 2.375-2.08 2.867v.035c1.53.546 2.34 1.654 2.34 3.149 0 2.164-1.77 3.73-4.66 3.73m11.4 0c-3.8 0-4.66-3.219-4.66-6.632 0-3.396.84-6.668 4.66-6.668 3.8 0 4.66 3.22 4.66 6.633 0 3.395-.84 6.667-4.66 6.667m0-1.495c2.66 0 2.92-2.639 2.92-5.155s-.26-5.154-2.92-5.154-2.92 2.638-2.92 5.154.26 5.155 2.92 5.155",
x: 1535,
y: 424.084,
width: 70.26,
height: 27.1986,
},
// {
// x: 2232.72,
// y: 633.218,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 653.655v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.21-.8-2.044-2.34-2.044-1.23 0-1.98.523-2.65 1.455l-1.16-.899c.88-1.227 2.13-1.979 3.92-1.979 2.43 0 3.85 1.357 3.85 3.352 0 1.292-.61 2.568-1.92 3.877l-3.51 3.499v.033h5.67v1.423zm14.26.18c-2.65 0-4.33-1.39-4.33-3.402 0-1.39.78-2.371 2.22-2.927v-.033c-1.22-.507-1.96-1.488-1.96-2.764 0-1.897 1.62-3.238 4.07-3.238 2.49 0 4.09 1.341 4.09 3.238 0 1.276-.75 2.224-1.96 2.698v.033c1.42.573 2.22 1.603 2.22 2.993 0 2.012-1.7 3.402-4.35 3.402m0-7c1.44 0 2.47-.867 2.47-2.028 0-1.128-.9-1.962-2.47-1.962s-2.45.834-2.45 1.962c0 1.161 1.03 2.028 2.45 2.028m0 1.325c-1.6 0-2.71.916-2.71 2.208 0 1.21.98 2.093 2.71 2.093 1.75 0 2.73-.883 2.73-2.093 0-1.292-1.12-2.208-2.73-2.208",
// },
],
// x="2232.72" y="604.812" width="44.976" height="27.25"
"29": [
{
x: 1561.19,
y: 440.596,
width: 38.006,
height: 27.251,
d: "M1569.74 461.222v-1.27l4.58-4.577c1.29-1.269 2.11-2.414 2.11-3.683 0-1.323-.88-2.235-2.56-2.235-1.34 0-2.16.572-2.89 1.591l-1.27-.983c.96-1.341 2.32-2.163 4.29-2.163 2.64 0 4.2 1.484 4.2 3.665 0 1.412-.66 2.807-2.09 4.237l-3.85 3.826v.036h6.21v1.556zm11.66-.394.62-1.466c.61.34 1.33.537 2.13.537 2.84 0 4.01-2.378 4.17-5.4h-.04c-.77 1.091-2.09 1.663-3.54 1.663-2.39 0-4.13-1.609-4.13-4.059 0-2.485 1.79-4.201 4.56-4.201 3.72 0 4.83 3.111 4.83 6.204 0 3.468-1.4 7.312-5.83 7.312-1.09 0-2.02-.232-2.77-.59m3.68-6.15c1.32 0 2.9-.644 2.9-2.396 0-1.305-.9-2.879-2.92-2.879-1.66 0-2.71 1.037-2.71 2.629 0 1.519.98 2.646 2.73 2.646",
},
// {
// x: 2232.72,
// y: 604.812,
// width: 44.976,
// height: 27.251,
// d: "M2245.43 625.249v-1.161l4.19-4.187c1.18-1.161 1.93-2.208 1.93-3.369 0-1.211-.8-2.045-2.34-2.045-1.23 0-1.98.524-2.65 1.456l-1.16-.9c.88-1.226 2.13-1.979 3.92-1.979 2.43 0 3.85 1.358 3.85 3.353 0 1.292-.61 2.568-1.92 3.876l-3.51 3.5v.033h5.67v1.423zm10.66-.36.58-1.341c.55.311 1.21.491 1.94.491 2.6 0 3.67-2.176 3.81-4.94h-.03c-.7.998-1.91 1.521-3.24 1.521-2.19 0-3.78-1.472-3.78-3.712 0-2.273 1.64-3.844 4.18-3.844 3.4 0 4.41 2.846 4.41 5.676 0 3.172-1.27 6.689-5.33 6.689-1 0-1.85-.213-2.54-.54m3.37-5.626c1.21 0 2.65-.589 2.65-2.192 0-1.194-.81-2.633-2.66-2.633-1.52 0-2.49.949-2.49 2.404 0 1.391.9 2.421 2.5 2.421",
// },
],
// x="2232.72" y="576.978" width="44.976" height="27.25"
"30": [
{
x: 1561.19,
y: 407.701,
width: 38.006,
height: 27.251,
d: "M1573.76 428.422c-2.12 0-3.68-.894-4.38-2.092l1.34-.947c.63.983 1.58 1.52 3.03 1.52 1.89 0 2.98-.93 2.98-2.325 0-1.377-1.14-2.324-2.95-2.324h-1.27v-1.502h1.27c1.63 0 2.68-.894 2.68-2.163 0-1.288-1-2.164-2.71-2.164-1.34 0-2.22.519-2.76 1.395l-1.3-.93c.68-1.108 2.13-1.985 4.11-1.985 2.72 0 4.43 1.502 4.43 3.576 0 1.395-.78 2.414-2.11 2.915v.035c1.56.555 2.38 1.681 2.38 3.201 0 2.199-1.8 3.79-4.74 3.79m11.59 0c-3.86 0-4.74-3.272-4.74-6.74 0-3.451.86-6.777 4.74-6.777 3.86 0 4.74 3.272 4.74 6.741 0 3.451-.86 6.776-4.74 6.776m0-1.519c2.7 0 2.97-2.682 2.97-5.239s-.27-5.239-2.97-5.239-2.97 2.682-2.97 5.239.27 5.239 2.97 5.239",
},
// {
// x: 2232.72,
// y: 576.978,
// width: 44.976,
// height: 27.251,
// d: "M2249.11 597.595c-1.94 0-3.37-.818-4-1.914l1.22-.867c.57.9 1.44 1.391 2.77 1.391 1.73 0 2.73-.851 2.73-2.127 0-1.259-1.05-2.126-2.7-2.126h-1.16v-1.374h1.16c1.49 0 2.45-.817 2.45-1.978 0-1.178-.91-1.979-2.48-1.979-1.23 0-2.03.474-2.52 1.275l-1.2-.85c.62-1.014 1.95-1.816 3.76-1.816 2.49 0 4.06 1.374 4.06 3.271 0 1.276-.72 2.208-1.93 2.666v.033c1.42.507 2.18 1.537 2.18 2.927 0 2.012-1.66 3.468-4.34 3.468m10.6 0c-3.53 0-4.34-2.993-4.34-6.166 0-3.157.79-6.199 4.34-6.199 3.53 0 4.33 2.993 4.33 6.166 0 3.157-.78 6.199-4.33 6.199m0-1.39c2.47 0 2.71-2.454 2.71-4.792 0-2.339-.24-4.792-2.71-4.792s-2.72 2.453-2.72 4.792.25 4.792 2.72 4.792",
// },
],
// x="2232.72" y="537.653" width="102.129" height="27.25"
"Roof Level": [
{
x: 1492.11,
@@ -1445,15 +1173,7 @@ export const enumerationMasks: Record<
height: 32.502,
d: "m1514.92 353.458-2.79-5.775h-3.65v5.775h-1.81v-13.731h5.6c2.54 0 4.42 1.448 4.42 3.933 0 1.842-1.11 3.075-2.76 3.612l3.02 6.186zm-6.44-12.158v4.81h3.75c1.47 0 2.63-.787 2.63-2.396 0-1.627-1.12-2.414-2.61-2.414zm14 12.355c-3 0-4.72-2.217-4.72-4.989 0-2.789 1.72-5.006 4.72-5.006 3.02 0 4.7 2.253 4.7 5.006 0 2.736-1.68 4.989-4.7 4.989m-.02-8.547c-1.98 0-2.98 1.645-2.98 3.558 0 1.896 1 3.54 2.98 3.54 1.99 0 3.01-1.644 3.01-3.54 0-1.913-1.02-3.558-3.01-3.558m11.02 8.547c-3 0-4.72-2.217-4.72-4.989 0-2.789 1.72-5.006 4.72-5.006 3.02 0 4.7 2.253 4.7 5.006 0 2.736-1.68 4.989-4.7 4.989m-.02-8.547c-1.98 0-2.98 1.645-2.98 3.558 0 1.896 1 3.54 2.98 3.54 1.99 0 3.01-1.644 3.01-3.54 0-1.913-1.02-3.558-3.01-3.558m7.64 8.35v-8.189h-1.91v-1.412h1.91v-1.609c0-1.77 1.06-2.718 2.88-2.718.43 0 .79.054 1.13.143v1.412a3.2 3.2 0 0 0-.79-.089c-1.11 0-1.52.447-1.52 1.466v1.395h2.31v1.412h-2.31v8.189zm11.84 0h-1.69v-13.731h1.69zm3.92-5.543h5.33c-.11-1.573-.9-2.825-2.6-2.825-1.68 0-2.57 1.216-2.73 2.825m5.47 3.129 1.18 1.055c-.86 1.001-2.09 1.556-3.63 1.556-3.02 0-4.74-1.985-4.74-5.007 0-2.896 1.72-4.988 4.49-4.988 2.75 0 4.24 2.056 4.24 4.685 0 .286-.02.733-.06.983h-6.93c.18 1.824 1.23 2.878 3.02 2.878 1.05 0 1.86-.393 2.43-1.162m9.93-7.187h1.79l-3.79 9.601h-1.81l-3.77-9.601h1.86l2.82 7.652h.04zm4.38 4.058h5.33c-.11-1.573-.89-2.825-2.59-2.825-1.68 0-2.58 1.216-2.74 2.825m5.47 3.129 1.18 1.055c-.86 1.001-2.09 1.556-3.63 1.556-3.02 0-4.74-1.985-4.74-5.007 0-2.896 1.72-4.988 4.49-4.988 2.76 0 4.24 2.056 4.24 4.685 0 .286-.02.733-.05.983h-6.94c.18 1.824 1.23 2.878 3.02 2.878 1.06 0 1.86-.393 2.43-1.162m5.37 2.414h-1.7v-13.731h1.7z",
},
// {
// x: 2232.72,
// y: 537.653,
// width: 102.129,
// height: 27.25,
// d: "m2253.91 558.09-2.55-5.283h-3.33v5.283h-1.66v-12.56h5.12c2.33 0 4.04 1.324 4.04 3.598 0 1.684-1.01 2.813-2.52 3.303l2.77 5.659zm-5.88-11.121v4.399h3.43c1.34 0 2.4-.719 2.4-2.191 0-1.489-1.03-2.208-2.38-2.208zm12.8 11.301c-2.74 0-4.31-2.028-4.31-4.563 0-2.551 1.57-4.579 4.31-4.579 2.77 0 4.3 2.06 4.3 4.579 0 2.502-1.53 4.563-4.3 4.563m-.01-7.818c-1.82 0-2.73 1.505-2.73 3.255 0 1.734.91 3.238 2.73 3.238 1.81 0 2.74-1.504 2.74-3.238 0-1.75-.93-3.255-2.74-3.255m10.08 7.818c-2.75 0-4.32-2.028-4.32-4.563 0-2.551 1.57-4.579 4.32-4.579 2.76 0 4.3 2.06 4.3 4.579 0 2.502-1.54 4.563-4.3 4.563m-.02-7.818c-1.82 0-2.73 1.505-2.73 3.255 0 1.734.91 3.238 2.73 3.238 1.81 0 2.75-1.504 2.75-3.238 0-1.75-.94-3.255-2.75-3.255m6.99 7.638v-7.491h-1.75v-1.292h1.75v-1.471c0-1.62.96-2.486 2.63-2.486.39 0 .72.049 1.03.13v1.292a2.8 2.8 0 0 0-.72-.081c-1.01 0-1.39.409-1.39 1.341v1.275h2.11v1.292h-2.11v7.491zm10.83 0h-1.55v-12.56h1.55zm3.58-5.07h4.87c-.09-1.439-.81-2.584-2.37-2.584-1.53 0-2.35 1.112-2.5 2.584m5 2.862 1.08.965c-.78.916-1.91 1.423-3.32 1.423-2.76 0-4.33-1.815-4.33-4.579 0-2.65 1.57-4.563 4.11-4.563 2.51 0 3.87 1.88 3.87 4.285 0 .261-.01.67-.05.899h-6.34c.16 1.668 1.13 2.633 2.76 2.633.97 0 1.7-.36 2.22-1.063m9.09-6.575h1.63l-3.46 8.783h-1.65l-3.46-8.783h1.71l2.58 7h.03zm4.01 3.713h4.87c-.1-1.439-.82-2.584-2.37-2.584-1.54 0-2.36 1.112-2.5 2.584m5 2.862 1.08.965c-.79.916-1.91 1.423-3.32 1.423-2.76 0-4.33-1.815-4.33-4.579 0-2.65 1.57-4.563 4.1-4.563 2.52 0 3.88 1.88 3.88 4.285 0 .261-.02.67-.05.899h-6.35c.17 1.668 1.13 2.633 2.77 2.633.96 0 1.7-.36 2.22-1.063m4.91 2.208h-1.55v-12.56h1.55z",
// },
],
// x="2232.72" y="1443" width="122.624" height="27.25"
"Ground Level": [
{
x: 1451.48,
@@ -1462,15 +1182,7 @@ export const enumerationMasks: Record<
height: 32.502,
d: "M1472.89 1454.53h5.69v7.82h-1.83l-.02-2.08h-.04c-.74 1.32-2.32 2.3-4.48 2.3-4.2 0-6.67-3.32-6.67-7.59 0-4.33 2.49-7.82 7.02-7.82 2.61 0 4.62 1.17 5.87 3.12l-1.6 1.01c-.88-1.5-2.3-2.43-4.25-2.43-3.22 0-5.04 2.55-5.04 6.06 0 3.61 1.84 5.95 4.98 5.95 2.51 0 4.15-1.52 4.15-4.06 0-.23 0-.44-.04-.62h-3.74zm8.7 7.82v-10.47h1.79l.04 1.58h.04c.7-1.31 1.68-1.8 2.69-1.8.37 0 .64.06.88.14v1.82c-.18-.06-.55-.14-.98-.14-1.73 0-2.61 1.23-2.61 2.51v6.36zm11.72.22c-3.28 0-5.15-2.42-5.15-5.44 0-3.05 1.87-5.47 5.15-5.47 3.3 0 5.13 2.46 5.13 5.47 0 2.98-1.83 5.44-5.13 5.44m-.02-9.33c-2.17 0-3.26 1.8-3.26 3.89 0 2.06 1.09 3.86 3.26 3.86 2.16 0 3.28-1.8 3.28-3.86 0-2.09-1.12-3.89-3.28-3.89m16.47-1.36v10.47h-1.82l-.02-1.54h-.04c-.68 1.04-1.87 1.76-3.39 1.76-2.26 0-3.69-1.46-3.69-3.67v-7.02h1.86v6.65c0 1.37.76 2.44 2.38 2.44 1.75 0 2.86-1.21 2.86-2.85v-6.24zm3.08 10.47v-10.47h1.8l.04 1.54h.03c.67-1.05 1.84-1.76 3.4-1.76 2.26 0 3.69 1.47 3.69 3.67v7.02h-1.86v-6.65c0-1.36-.8-2.44-2.38-2.44-1.75 0-2.86 1.21-2.86 2.85v6.24zm16.04.22c-2.95 0-4.66-2.44-4.66-5.37 0-3.08 1.81-5.54 4.76-5.54 1.38 0 2.59.61 3.41 1.74h.04v-6.03h1.85v14.98h-1.81l-.02-1.69h-.04c-.88 1.26-2.13 1.91-3.53 1.91m.33-1.62c2.07 0 3.28-1.62 3.28-3.84 0-2.3-1.21-3.83-3.22-3.83-2.18 0-3.18 1.86-3.18 3.87 0 1.95 1 3.8 3.12 3.8m13.08 1.4v-14.98h1.97v13.27h7.63v1.71zm12.35-6.04h5.81c-.11-1.72-.97-3.08-2.82-3.08-1.84 0-2.81 1.32-2.99 3.08m5.97 3.41 1.29 1.15c-.94 1.09-2.28 1.7-3.96 1.7-3.3 0-5.17-2.17-5.17-5.46 0-3.16 1.87-5.45 4.89-5.45 3.01 0 4.63 2.25 4.63 5.12 0 .31-.02.79-.06 1.07h-7.57c.2 1.99 1.35 3.14 3.3 3.14 1.15 0 2.03-.43 2.65-1.27m10.83-7.84h1.95l-4.13 10.47h-1.97l-4.12-10.47h2.03l3.08 8.35h.04zm4.78 4.43h5.82c-.12-1.72-.98-3.08-2.83-3.08-1.84 0-2.81 1.32-2.99 3.08m5.97 3.41 1.29 1.15c-.94 1.09-2.28 1.7-3.96 1.7-3.3 0-5.17-2.17-5.17-5.46 0-3.16 1.87-5.45 4.9-5.45 3 0 4.62 2.25 4.62 5.12 0 .31-.02.79-.06 1.07h-7.57c.2 1.99 1.35 3.14 3.3 3.14 1.15 0 2.03-.43 2.65-1.27m5.86 2.63h-1.86v-14.98h1.86z",
},
// {
// x: 2232.72,
// y: 1443,
// width: 122.624,
// height: 27.25,
// d: "M2250.67 1456.88h4.77v6.56h-1.53l-.02-1.75h-.03c-.63 1.11-1.95 1.93-3.77 1.93-3.51 0-5.59-2.78-5.59-6.37 0-3.63 2.09-6.55 5.89-6.55 2.19 0 3.88.98 4.92 2.61l-1.34.85c-.74-1.26-1.93-2.04-3.56-2.04-2.7 0-4.22 2.14-4.22 5.09 0 3.02 1.53 4.98 4.17 4.98 2.11 0 3.48-1.27 3.48-3.4 0-.19 0-.37-.03-.52h-3.14zm7.29 6.56v-8.79h1.5l.04 1.33h.03c.59-1.1 1.41-1.51 2.26-1.51.31 0 .54.05.73.12v1.52c-.15-.05-.46-.11-.82-.11-1.45 0-2.19 1.03-2.19 2.11v5.33zm9.83.18c-2.75 0-4.32-2.03-4.32-4.57 0-2.55 1.57-4.58 4.32-4.58 2.76 0 4.3 2.06 4.3 4.58 0 2.51-1.54 4.57-4.3 4.57m-.02-7.82c-1.81 0-2.73 1.5-2.73 3.25 0 1.74.92 3.24 2.73 3.24 1.82 0 2.75-1.5 2.75-3.24 0-1.75-.93-3.25-2.75-3.25m13.81-1.15v8.79h-1.52l-.02-1.3h-.03c-.57.87-1.57 1.48-2.85 1.48-1.89 0-3.09-1.23-3.09-3.08v-5.89h1.56v5.58c0 1.15.64 2.05 1.99 2.05 1.47 0 2.41-1.02 2.41-2.39v-5.24zm2.59 8.79v-8.79h1.5l.04 1.3h.03c.55-.89 1.54-1.48 2.84-1.48 1.9 0 3.1 1.23 3.1 3.08v5.89h-1.56v-5.58c0-1.15-.67-2.04-1.99-2.04-1.48 0-2.41 1.01-2.41 2.38v5.24zm13.45.18c-2.47 0-3.91-2.05-3.91-4.5 0-2.59 1.52-4.65 3.99-4.65 1.16 0 2.17.51 2.86 1.46h.03v-5.05h1.56v12.56h-1.53l-.01-1.43h-.03c-.74 1.07-1.79 1.61-2.96 1.61m.27-1.36c1.74 0 2.75-1.36 2.75-3.22 0-1.93-1.01-3.21-2.7-3.21-1.83 0-2.66 1.56-2.66 3.24 0 1.64.83 3.19 2.61 3.19m12.4 1.18h-1.56v-12.56h1.56zm3.58-5.07h4.87c-.1-1.44-.82-2.59-2.37-2.59-1.54 0-2.36 1.11-2.5 2.59m5 2.86 1.08.96c-.78.92-1.91 1.43-3.32 1.43-2.76 0-4.33-1.82-4.33-4.58 0-2.65 1.57-4.57 4.1-4.57 2.52 0 3.88 1.89 3.88 4.29 0 .26-.02.67-.05.9h-6.35c.17 1.67 1.13 2.63 2.77 2.63.96 0 1.7-.36 2.22-1.06m9.09-6.58h1.63l-3.47 8.79h-1.65l-3.45-8.79h1.7l2.59 7h.03zm4 3.72h4.88c-.1-1.44-.82-2.59-2.38-2.59-1.53 0-2.35 1.11-2.5 2.59m5.01 2.86 1.08.96c-.79.92-1.92 1.43-3.32 1.43-2.77 0-4.34-1.82-4.34-4.58 0-2.65 1.57-4.57 4.11-4.57 2.52 0 3.87 1.89 3.87 4.29 0 .26-.01.67-.05.9h-6.34c.16 1.67 1.13 2.63 2.76 2.63.97 0 1.7-.36 2.23-1.06m4.91 2.21h-1.56v-12.56h1.56z",
// },
],
// x="2232.72" y="1497.73" width="118.537" height="27.25"
"Arcade Level": [
{
x: 1454.73,
@@ -1479,15 +1191,7 @@ export const enumerationMasks: Record<
height: 32.502,
d: "m1479.79 1523.98-1.62-4.2h-6.67l-1.6 4.2h-2.07l5.89-14.98h2.32l5.89 14.98zm-7.65-5.89h5.37l-2.68-6.97h-.04zm11.44 5.89v-10.48h1.79l.04 1.58h.04c.7-1.31 1.68-1.79 2.69-1.79.37 0 .65.06.88.13v1.82c-.17-.06-.55-.14-.97-.14-1.74 0-2.62 1.23-2.62 2.52v6.36zm11.68.21c-3.21 0-5.09-2.32-5.09-5.4 0-3.1 1.86-5.5 5.07-5.5 1.99 0 3.4.95 4.2 2.45l-1.54.88c-.53-1.01-1.37-1.75-2.69-1.75-2.05 0-3.16 1.71-3.16 3.88 0 2.1 1.07 3.86 3.27 3.86 1.39 0 2.23-.7 2.73-1.7l1.47.84c-.75 1.46-2.23 2.44-4.26 2.44m13.89-.21h-1.81l-.04-1.53h-.04c-.58 1.04-1.66 1.74-3.16 1.74-2.05 0-3.37-1.31-3.37-3.16 0-1.36.7-2.28 2.03-2.71 1.15-.37 2.84-.45 4.56-.51v-.93c0-1.08-.74-2.03-2.32-2.03-1.33 0-2.09.62-2.42 1.58l-1.54-.74c.6-1.58 2.11-2.4 4.02-2.4 2.49 0 4.09 1.3 4.09 3.59zm-4.62-1.35c1.7 0 2.79-1.29 2.79-2.79v-.6c-.7.02-1.79.09-2.67.21-1.19.16-2.07.49-2.07 1.56 0 .98.74 1.62 1.95 1.62m11.7 1.56c-2.95 0-4.67-2.44-4.67-5.36 0-3.09 1.82-5.54 4.76-5.54 1.39 0 2.6.6 3.42 1.73h.04V1509h1.85v14.98h-1.82l-.01-1.7h-.04c-.88 1.27-2.13 1.91-3.53 1.91m.33-1.62c2.07 0 3.27-1.62 3.27-3.84 0-2.3-1.2-3.82-3.21-3.82-2.19 0-3.18 1.85-3.18 3.86 0 1.95.99 3.8 3.12 3.8m9.33-4.64h5.81c-.11-1.72-.97-3.08-2.82-3.08-1.84 0-2.81 1.32-2.99 3.08m5.97 3.41 1.29 1.15c-.94 1.1-2.28 1.7-3.96 1.7-3.3 0-5.17-2.16-5.17-5.46 0-3.16 1.87-5.44 4.9-5.44 3 0 4.62 2.24 4.62 5.11 0 .31-.02.8-.06 1.07h-7.57c.2 1.99 1.35 3.14 3.3 3.14 1.15 0 2.03-.43 2.65-1.27m8.94 2.64V1509h1.97v13.26h7.63v1.72zm12.35-6.05h5.81c-.11-1.72-.97-3.08-2.83-3.08-1.83 0-2.8 1.32-2.98 3.08m5.97 3.41 1.29 1.15c-.94 1.1-2.29 1.7-3.96 1.7-3.3 0-5.17-2.16-5.17-5.46 0-3.16 1.87-5.44 4.89-5.44 3.01 0 4.63 2.24 4.63 5.11 0 .31-.02.8-.06 1.07h-7.57c.19 1.99 1.35 3.14 3.3 3.14 1.15 0 2.02-.43 2.65-1.27m10.83-7.84h1.95l-4.13 10.48h-1.97l-4.12-10.48h2.03l3.08 8.35h.04zm4.78 4.43h5.81c-.11-1.72-.97-3.08-2.83-3.08-1.83 0-2.8 1.32-2.98 3.08m5.97 3.41 1.29 1.15c-.94 1.1-2.29 1.7-3.96 1.7-3.3 0-5.17-2.16-5.17-5.46 0-3.16 1.87-5.44 4.89-5.44 3.01 0 4.63 2.24 4.63 5.11 0 .31-.02.8-.06 1.07h-7.57c.2 1.99 1.35 3.14 3.3 3.14 1.15 0 2.02-.43 2.65-1.27m5.86 2.64h-1.86V1509h1.86z",
},
// {
// x: 2232.72,
// y: 1497.73,
// width: 118.537,
// height: 27.25,
// d: "m2253.73 1518.16-1.36-3.51h-5.6l-1.34 3.51h-1.73l4.94-12.56h1.95l4.93 12.56zm-6.42-4.94h4.5l-2.24-5.84h-.03zm9.59 4.94v-8.78h1.51l.03 1.32h.03c.59-1.09 1.41-1.5 2.26-1.5.31 0 .54.05.74.11v1.53c-.15-.05-.46-.12-.82-.12-1.46 0-2.19 1.03-2.19 2.11v5.33zm9.8.18c-2.7 0-4.27-1.94-4.27-4.53 0-2.6 1.56-4.61 4.26-4.61 1.66 0 2.84.8 3.51 2.06l-1.29.74c-.44-.85-1.14-1.48-2.26-1.48-1.71 0-2.65 1.44-2.65 3.26 0 1.77.9 3.24 2.75 3.24 1.16 0 1.87-.59 2.29-1.43l1.23.71c-.62 1.22-1.87 2.04-3.57 2.04m11.65-.18h-1.52l-.03-1.27h-.04c-.49.86-1.39 1.45-2.65 1.45-1.71 0-2.83-1.09-2.83-2.65 0-1.14.59-1.91 1.7-2.27.97-.31 2.39-.38 3.83-.43v-.78c0-.9-.62-1.7-1.94-1.7-1.12 0-1.75.52-2.03 1.32l-1.29-.62c.5-1.32 1.76-2.01 3.36-2.01 2.1 0 3.44 1.1 3.44 3.01zm-3.88-1.13c1.43 0 2.34-1.08 2.34-2.34v-.5c-.59.01-1.5.08-2.24.18-1 .13-1.73.41-1.73 1.31 0 .81.62 1.35 1.63 1.35m9.81 1.31c-2.47 0-3.91-2.04-3.91-4.5 0-2.58 1.52-4.64 3.99-4.64 1.16 0 2.18.51 2.86 1.46h.04v-5.06h1.55v12.56h-1.52l-.02-1.42h-.03c-.74 1.06-1.78 1.6-2.96 1.6m.28-1.36c1.73 0 2.75-1.35 2.75-3.22 0-1.93-1.02-3.2-2.7-3.2-1.84 0-2.67 1.55-2.67 3.24 0 1.63.83 3.18 2.62 3.18m7.82-3.89h4.88c-.1-1.44-.82-2.58-2.37-2.58-1.54 0-2.36 1.11-2.51 2.58m5.01 2.86 1.08.97c-.79.91-1.91 1.42-3.32 1.42-2.77 0-4.34-1.81-4.34-4.58 0-2.65 1.57-4.56 4.11-4.56 2.52 0 3.88 1.88 3.88 4.28 0 .27-.02.68-.05.9h-6.35c.16 1.67 1.13 2.64 2.77 2.64.96 0 1.7-.36 2.22-1.07m8.92 2.21h-1.55v-12.56h1.55zm3.58-5.07h4.87c-.09-1.44-.81-2.58-2.37-2.58-1.54 0-2.35 1.11-2.5 2.58m5 2.86 1.08.97c-.78.91-1.91 1.42-3.32 1.42-2.76 0-4.33-1.81-4.33-4.58 0-2.65 1.57-4.56 4.1-4.56 2.52 0 3.88 1.88 3.88 4.28 0 .27-.02.68-.05.9h-6.34c.16 1.67 1.12 2.64 2.76 2.64.96 0 1.7-.36 2.22-1.07m9.09-6.57h1.63l-3.46 8.78h-1.66l-3.45-8.78h1.71l2.58 7h.03zm4.01 3.71h4.87c-.1-1.44-.82-2.58-2.37-2.58-1.54 0-2.36 1.11-2.5 2.58m5 2.86 1.08.97c-.79.91-1.91 1.42-3.32 1.42-2.76 0-4.33-1.81-4.33-4.58 0-2.65 1.57-4.56 4.1-4.56 2.52 0 3.88 1.88 3.88 4.28 0 .27-.02.68-.05.9H2328c.17 1.67 1.13 2.64 2.77 2.64.96 0 1.7-.36 2.22-1.07m4.91 2.21h-1.55v-12.56h1.55z",
// },
],
// x="2232.72" y="1381.67" width="121.262" height="27.25"
"Parking Levels": [
{
x: 1440.1,
@@ -1496,15 +1200,7 @@ export const enumerationMasks: Record<
height: 32.502,
d: "M1454.8 1387.23h5.91c3.06 0 5.38 1.74 5.38 4.82s-2.37 4.88-5.44 4.88h-3.88v5.28h-1.97zm1.97 7.98h4.02c1.89 0 3.3-1.05 3.3-3.12 0-2.11-1.45-3.14-3.3-3.14h-4.02zm18.99 7h-1.81l-.04-1.52h-.04c-.58 1.04-1.66 1.74-3.16 1.74-2.05 0-3.37-1.31-3.37-3.16 0-1.37.7-2.28 2.03-2.71 1.15-.37 2.84-.45 4.56-.51v-.94c0-1.07-.74-2.02-2.32-2.02-1.33 0-2.09.62-2.42 1.58l-1.54-.75c.6-1.58 2.11-2.39 4.02-2.39 2.49 0 4.09 1.3 4.09 3.58zm-4.62-1.34c1.7 0 2.79-1.29 2.79-2.79v-.61c-.7.02-1.8.1-2.67.22-1.19.15-2.07.49-2.07 1.56 0 .97.74 1.62 1.95 1.62m7.66 1.34v-10.47h1.79l.04 1.58h.04c.7-1.31 1.68-1.79 2.69-1.79.37 0 .65.05.88.13v1.82c-.18-.06-.55-.14-.98-.14-1.73 0-2.61 1.23-2.61 2.52v6.35zm13.88 0-3.12-4.68h-1.5v4.68h-1.85v-14.98h1.85v8.76h1.6l2.89-4.25h2.2l-3.57 5.03 3.75 5.44zm3.93-12.97v-2.01h2v2.01zm1.93 12.97h-1.86v-10.47h1.86zm3.08 0v-10.47h1.79l.04 1.54h.04c.66-1.05 1.83-1.75 3.39-1.75 2.27 0 3.69 1.46 3.69 3.66v7.02h-1.85v-6.65c0-1.36-.8-2.44-2.38-2.44-1.76 0-2.87 1.21-2.87 2.85v6.24zm21.16-10.47v9.32c0 3.34-2.14 4.94-5.3 4.94-1.66 0-2.99-.47-3.92-1.09l.84-1.47c.76.51 1.67.98 3.06.98 1.95 0 3.49-.88 3.49-3.36v-.89h-.04c-.8 1.24-2.07 1.87-3.49 1.87-2.77 0-4.47-2.34-4.47-5.19 0-2.87 1.72-5.32 4.61-5.32 1.52 0 2.65.68 3.39 1.71h.04l.06-1.5zm-4.89 8.68c2.01 0 3.1-1.64 3.1-3.67 0-2.01-1.11-3.61-3.08-3.61-2.05 0-3.08 1.68-3.08 3.65 0 1.89.95 3.63 3.06 3.63m12.91 1.79v-14.98h1.97v13.27h7.63v1.71zm12.35-6.04h5.81c-.11-1.72-.97-3.08-2.83-3.08-1.83 0-2.8 1.32-2.98 3.08m5.97 3.41 1.29 1.15c-.94 1.09-2.29 1.7-3.96 1.7-3.3 0-5.17-2.17-5.17-5.46 0-3.16 1.87-5.44 4.89-5.44 3.01 0 4.63 2.24 4.63 5.11 0 .31-.02.8-.06 1.07h-7.57c.19 1.99 1.35 3.14 3.3 3.14 1.15 0 2.02-.43 2.65-1.27m10.83-7.84h1.95l-4.13 10.47h-1.97l-4.12-10.47h2.03l3.08 8.35h.04zm4.78 4.43h5.81c-.11-1.72-.97-3.08-2.83-3.08-1.83 0-2.8 1.32-2.98 3.08m5.97 3.41 1.29 1.15c-.94 1.09-2.29 1.7-3.96 1.7-3.3 0-5.17-2.17-5.17-5.46 0-3.16 1.87-5.44 4.89-5.44 3.01 0 4.63 2.24 4.63 5.11 0 .31-.02.8-.06 1.07h-7.57c.2 1.99 1.35 3.14 3.3 3.14 1.15 0 2.02-.43 2.65-1.27m5.86 2.63h-1.86v-14.98h1.86zm6.49.22c-1.85 0-3.3-.55-4.39-1.58l1.13-1.27c.92.88 2.07 1.29 3.32 1.29 1.66 0 2.46-.61 2.46-1.5 0-1-1.06-1.23-2.81-1.6-1.97-.43-3.73-1.04-3.73-3.07 0-1.79 1.41-3.17 4.14-3.17 1.67 0 2.98.5 4.07 1.5l-1.11 1.26c-.9-.81-1.89-1.2-3.02-1.2-1.46 0-2.21.62-2.21 1.42 0 .97.94 1.19 2.75 1.58 1.94.43 3.79.97 3.79 3.06 0 1.91-1.52 3.28-4.39 3.28",
},
// {
// x: 2232.72,
// y: 1381.67,
// width: 121.262,
// height: 27.25,
// d: "M2245.04 1389.54h4.96c2.56 0 4.51 1.46 4.51 4.04 0 2.59-1.99 4.09-4.56 4.09h-3.26v4.43h-1.65zm1.65 6.69h3.37c1.59 0 2.77-.88 2.77-2.62 0-1.76-1.21-2.63-2.77-2.63h-3.37zm15.93 5.87h-1.52l-.04-1.27h-.03c-.49.86-1.39 1.45-2.65 1.45-1.72 0-2.83-1.09-2.83-2.65 0-1.14.59-1.91 1.7-2.27.97-.31 2.39-.38 3.83-.43v-.78c0-.9-.62-1.7-1.95-1.7-1.11 0-1.75.52-2.02 1.32l-1.3-.62c.51-1.32 1.77-2.01 3.37-2.01 2.1 0 3.44 1.1 3.44 3.01zm-3.88-1.13c1.42 0 2.34-1.08 2.34-2.33v-.51c-.59.01-1.5.08-2.24.18-1 .13-1.73.41-1.73 1.31 0 .81.62 1.35 1.63 1.35m6.42 1.13v-8.78h1.51l.03 1.32h.03c.59-1.09 1.41-1.5 2.26-1.5.31 0 .54.05.74.11v1.53c-.15-.05-.46-.12-.82-.12-1.46 0-2.19 1.03-2.19 2.11v5.33zm11.64 0-2.61-3.92h-1.26v3.92h-1.55v-12.56h1.55v7.35h1.34l2.42-3.57h1.85l-2.99 4.22 3.14 4.56zm3.29-10.87v-1.69h1.69v1.69zm1.62 10.87h-1.55v-8.78h1.55zm2.59 0v-8.78h1.5l.03 1.29h.04c.55-.88 1.53-1.47 2.84-1.47 1.9 0 3.09 1.23 3.09 3.07v5.89h-1.55v-5.57c0-1.15-.67-2.05-2-2.05-1.47 0-2.4 1.02-2.4 2.39v5.23zm17.74-8.78v7.82c0 2.79-1.79 4.14-4.44 4.14-1.39 0-2.51-.4-3.29-.92l.7-1.23c.64.43 1.41.82 2.57.82 1.64 0 2.93-.74 2.93-2.81v-.75h-.04c-.67 1.04-1.73 1.57-2.92 1.57-2.33 0-3.75-1.97-3.75-4.36 0-2.4 1.44-4.46 3.86-4.46 1.28 0 2.23.57 2.85 1.44h.03l.05-1.26zm-4.1 7.28c1.68 0 2.6-1.38 2.6-3.08 0-1.68-.93-3.02-2.58-3.02-1.72 0-2.59 1.4-2.59 3.06 0 1.58.8 3.04 2.57 3.04m12.25 1.5h-1.55v-12.56h1.55zm3.58-5.07h4.87c-.09-1.44-.81-2.58-2.37-2.58-1.53 0-2.35 1.11-2.5 2.58m5.01 2.86 1.07.97c-.78.92-1.91 1.42-3.32 1.42-2.76 0-4.33-1.81-4.33-4.58 0-2.65 1.57-4.56 4.11-4.56 2.51 0 3.87 1.88 3.87 4.29 0 .26-.01.67-.05.89h-6.34c.16 1.67 1.13 2.64 2.76 2.64.97 0 1.7-.36 2.23-1.07m9.08-6.57h1.64l-3.47 8.78h-1.65l-3.45-8.78h1.7l2.58 7h.03zm4.01 3.71h4.87c-.1-1.44-.82-2.58-2.37-2.58-1.54 0-2.36 1.11-2.5 2.58m5 2.86 1.08.97c-.78.92-1.91 1.42-3.32 1.42-2.76 0-4.33-1.81-4.33-4.58 0-2.65 1.57-4.56 4.1-4.56 2.52 0 3.88 1.88 3.88 4.29 0 .26-.02.67-.05.89h-6.35c.17 1.67 1.13 2.64 2.77 2.64.96 0 1.7-.36 2.22-1.07m4.91 2.21h-1.55v-12.56h1.55z",
// },
],
// x="2232.72" y="1321.13" width="123.986" height="27.25"
"Podium Level": [
{
x: 1449.85,
@@ -1513,13 +1209,6 @@ export const enumerationMasks: Record<
height: 32.502,
d: "M1464.55 1310.84h5.91c3.07 0 5.39 1.74 5.39 4.82s-2.38 4.87-5.44 4.87h-3.89v5.29h-1.97zm1.97 7.98h4.02c1.89 0 3.3-1.06 3.3-3.12 0-2.11-1.45-3.14-3.3-3.14h-4.02zm15.72 7.21c-3.28 0-5.15-2.41-5.15-5.44 0-3.04 1.87-5.46 5.15-5.46 3.29 0 5.13 2.46 5.13 5.46 0 2.99-1.84 5.44-5.13 5.44m-.02-9.32c-2.17 0-3.26 1.8-3.26 3.88 0 2.07 1.09 3.86 3.26 3.86 2.16 0 3.27-1.79 3.27-3.86 0-2.08-1.11-3.88-3.27-3.88m11.59 9.32c-2.95 0-4.66-2.43-4.66-5.36 0-3.08 1.81-5.54 4.75-5.54 1.39 0 2.6.61 3.42 1.74h.04v-6.03h1.85v14.98h-1.81l-.02-1.7h-.04c-.88 1.27-2.13 1.91-3.53 1.91m.33-1.62c2.07 0 3.28-1.61 3.28-3.84 0-2.3-1.21-3.82-3.22-3.82-2.19 0-3.18 1.85-3.18 3.86 0 1.95.99 3.8 3.12 3.8m8.07-11.56v-2.01h2v2.01zm1.93 12.97h-1.86v-10.47h1.86zm11.99-10.47v10.47h-1.81l-.02-1.54h-.04c-.68 1.03-1.87 1.75-3.4 1.75-2.26 0-3.68-1.46-3.68-3.66v-7.02h1.85v6.65c0 1.36.76 2.43 2.38 2.43 1.76 0 2.87-1.2 2.87-2.84v-6.24zm4.92 1.4h.04c.64-1 1.64-1.62 3.08-1.62 1.5 0 2.63.68 3.16 1.8.76-1.23 1.97-1.8 3.39-1.8 2.11 0 3.5 1.33 3.5 3.32v7.37h-1.86v-6.94c0-1.21-.7-2.15-2.16-2.15-1.56 0-2.56 1.05-2.56 2.5v6.59h-1.85v-6.94c0-1.21-.72-2.15-2.15-2.15-1.56 0-2.57 1.05-2.57 2.5v6.59h-1.85v-10.47h1.79zm21.14 9.07v-14.98h1.97v13.26h7.63v1.72zm12.35-6.05h5.81c-.11-1.71-.97-3.08-2.83-3.08-1.83 0-2.8 1.33-2.98 3.08m5.97 3.42 1.29 1.15c-.94 1.09-2.29 1.69-3.96 1.69-3.3 0-5.17-2.16-5.17-5.46 0-3.16 1.87-5.44 4.89-5.44 3.01 0 4.63 2.24 4.63 5.11 0 .31-.02.8-.06 1.07h-7.57c.19 1.99 1.35 3.14 3.3 3.14 1.15 0 2.02-.43 2.65-1.26m10.83-7.84h1.95l-4.13 10.47h-1.97l-4.12-10.47h2.03l3.08 8.34h.04zm4.78 4.42h5.81c-.11-1.71-.97-3.08-2.82-3.08-1.84 0-2.81 1.33-2.99 3.08m5.97 3.42 1.29 1.15c-.94 1.09-2.29 1.69-3.96 1.69-3.3 0-5.17-2.16-5.17-5.46 0-3.16 1.87-5.44 4.89-5.44 3.01 0 4.63 2.24 4.63 5.11 0 .31-.02.8-.06 1.07h-7.57c.2 1.99 1.35 3.14 3.3 3.14 1.15 0 2.03-.43 2.65-1.26m5.86 2.63h-1.86v-14.98h1.86z",
},
// {
// x: 2232.72,
// y: 1321.13,
// width: 123.986,
// height: 27.25,
// d: "M2245.04 1329.01h4.96c2.56 0 4.51 1.46 4.51 4.04s-1.99 4.09-4.56 4.09h-3.26v4.43h-1.65zm1.65 6.69h3.37c1.59 0 2.77-.88 2.77-2.62 0-1.76-1.21-2.63-2.77-2.63h-3.37zm13.18 6.05c-2.75 0-4.32-2.03-4.32-4.56 0-2.55 1.57-4.58 4.32-4.58 2.76 0 4.3 2.06 4.3 4.58 0 2.5-1.54 4.56-4.3 4.56m-.02-7.82c-1.81 0-2.73 1.51-2.73 3.26 0 1.73.92 3.24 2.73 3.24 1.82 0 2.75-1.51 2.75-3.24 0-1.75-.93-3.26-2.75-3.26m9.72 7.82c-2.47 0-3.91-2.04-3.91-4.5 0-2.58 1.52-4.64 3.99-4.64 1.16 0 2.18.5 2.86 1.45h.04v-5.05h1.55v12.56h-1.52l-.02-1.42h-.03c-.74 1.06-1.78 1.6-2.96 1.6m.28-1.36c1.73 0 2.75-1.35 2.75-3.22 0-1.93-1.02-3.2-2.7-3.2-1.83 0-2.67 1.55-2.67 3.23 0 1.64.84 3.19 2.62 3.19m6.76-9.7v-1.68h1.69v1.68zm1.62 10.88h-1.55v-8.78h1.55zm10.06-8.78v8.78h-1.52l-.02-1.29h-.03c-.57.87-1.57 1.47-2.85 1.47-1.89 0-3.09-1.23-3.09-3.07v-5.89h1.56v5.57c0 1.15.63 2.05 1.99 2.05 1.47 0 2.4-1.01 2.4-2.39v-5.23zm4.12 1.18h.04c.54-.84 1.37-1.36 2.58-1.36 1.26 0 2.21.57 2.65 1.5.64-1.03 1.65-1.5 2.85-1.5 1.76 0 2.92 1.11 2.92 2.78v6.18h-1.55v-5.82c0-1.02-.59-1.8-1.82-1.8-1.3 0-2.14.88-2.14 2.09v5.53h-1.55v-5.82c0-1.02-.61-1.8-1.8-1.8-1.31 0-2.16.88-2.16 2.09v5.53h-1.55v-8.78h1.5zm19.15 7.6h-1.55v-12.56h1.55zm3.58-5.07h4.88c-.1-1.44-.82-2.58-2.37-2.58-1.54 0-2.36 1.11-2.51 2.58m5.01 2.86 1.08.97c-.79.91-1.92 1.42-3.32 1.42-2.77 0-4.34-1.82-4.34-4.58 0-2.65 1.57-4.56 4.11-4.56 2.52 0 3.88 1.88 3.88 4.28 0 .26-.02.67-.05.9h-6.35c.16 1.67 1.13 2.64 2.76 2.64.97 0 1.71-.36 2.23-1.07m9.08-6.57h1.64l-3.47 8.78h-1.65l-3.45-8.78h1.7l2.58 7h.04zm4.01 3.71h4.87c-.09-1.44-.81-2.58-2.37-2.58-1.54 0-2.35 1.11-2.5 2.58m5 2.86 1.08.97c-.78.91-1.91 1.42-3.32 1.42-2.76 0-4.33-1.82-4.33-4.58 0-2.65 1.57-4.56 4.1-4.56 2.52 0 3.88 1.88 3.88 4.28 0 .26-.02.67-.05.9h-6.34c.16 1.67 1.12 2.64 2.76 2.64.97 0 1.7-.36 2.22-1.07m4.92 2.21h-1.56v-12.56h1.56z",
// },
],
},
};
+39 -1
View File
@@ -2053,6 +2053,44 @@ export const projects: Project[] = [
],
tourAvailable: false,
},
{
name: "Deluxe office",
slug: "deluxe",
floors: "Floor 5-14 / 17-18 / 21-22 / 25-26",
area: "1360-1446 Sqft",
desc: [
`Double the size, enjoy dedicated meeting
rooms, upgraded furnishings, and the
option to tailor your space with open or
closed layouts.`,
],
interiors: [
// "/images/interiors/hq/deluxe/1.jpg",
"/images/interiors/hq/deluxe/2.jpg",
"/images/interiors/hq/deluxe/3.jpg",
],
legend: [],
tourAvailable: false,
},
{
name: "Executive office",
slug: "executive",
floors: "Floor 5-14 / 17-18 / 21-22 / 25-26",
area: "1986-2264 Sqft",
desc: [
`Triple-sized with expanded seating,
generous storage, and versatile layouts,
available in open, semi-open, or closed
configurations to suit growing teams.`,
],
interiors: [
// "/images/interiors/hq/executive/1.jpg",
"/images/interiors/hq/executive/2.jpg",
"/images/interiors/hq/executive/3.jpg",
],
legend: [],
tourAvailable: false,
},
{
name: "Simplex Edge office",
slug: "simplex-edge",
@@ -2417,7 +2455,7 @@ export const projects: Project[] = [
],
interiors: [
"/images/interiors/hq/presidential-loft/2.jpg",
"/images/interiors/hq/presidential-loft/1.jpg",
// "/images/interiors/hq/presidential-loft/1.jpg",
"/images/interiors/hq/presidential-loft/3.jpg",
],
legend: [
+15 -11
View File
@@ -3,6 +3,7 @@ import { Outlet, useLocation } from "react-router";
import Footer from "../components/Footer";
import clsx from "clsx";
import { useEffect } from "react";
import DocumentTitle from "../components/DocumentTitle";
function DefaultLayout() {
const { pathname } = useLocation();
@@ -12,18 +13,21 @@ function DefaultLayout() {
}, [pathname]);
return (
<div
className={clsx(
"min-h-dvh flex flex-col select-none",
pathname.endsWith("/about") ? "bg-white" : "bg-[#F3F3F2]"
)}
>
<Header />
<div className="flex-1 flex flex-col justify-between">
<Outlet />
<>
<DocumentTitle />
<div
className={clsx(
"min-h-dvh flex flex-col select-none",
pathname.endsWith("/about") ? "bg-white" : "bg-[#F3F3F2]"
)}
>
<Header />
<div className="flex flex-col flex-1 justify-between">
<Outlet />
</div>
<Footer />
</div>
<Footer />
</div>
</>
);
}
+4
View File
@@ -1,6 +1,7 @@
import Header from "../components/Header";
import { Outlet, useLocation } from "react-router";
import { useEffect } from "react";
import DocumentTitle from "../components/DocumentTitle";
function LayoutWithoutFooter() {
const { pathname } = useLocation();
@@ -10,12 +11,15 @@ function LayoutWithoutFooter() {
}, [pathname]);
return (
<>
<DocumentTitle />
<div className="flex flex-col select-none min-h-dvh">
<Header />
<div className="2xl:h-[calc(100dvh-4.444vw)] md:max-2xl:h-[calc(100dvh-64px)] h-[calc(100dvh-56px)]">
<Outlet />
</div>
</div>
</>
);
}
+3 -7
View File
@@ -1,7 +1,6 @@
import FloorSelect, { FloorsData } from "../components/FloorSelect";
import { useParams } from "react-router";
import FloorSidebar from "../components/FloorSidebar";
import { useState, useMemo, useEffect } from "react";
import { useQuery } from "@tanstack/react-query";
import { api } from "../api/ky";
@@ -13,6 +12,7 @@ import { getComplexFloors } from "../data/complex-config";
function FloorsPage() {
const [selectedFloor, setSelectedFloor] = useState<string | null>(null);
const { complexName } = useParams<{
complexName: ComplexName;
}>();
@@ -25,11 +25,7 @@ function FloorsPage() {
const { data: floorsData } = useQuery({
queryKey: ["floors-data", complexName],
queryFn: () =>
api
.get(
`units/get-floors-data/${complexName}`,
)
.json<FloorsData[]>(),
api.get(`units/get-floors-data/${complexName}`).json<FloorsData[]>(),
});
const { data: unitsOnFloor } = useQuery({
@@ -44,7 +40,7 @@ function FloorsPage() {
complexName === "marasi-drive"
? `&wing=${selectedFloor?.split(" ")[0]}`
: ""
}`,
}`
)
.json<Unit[]>(),
});
-353
View File
@@ -1,353 +0,0 @@
function TestPage() {
return (
<div className="relative h-screen">
<div className="h-screen left-0 top-0 absolute overflow-hidden">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente
explicabo aut tenetur, minima, at ratione molestias maxime harum nulla,
perspiciatis voluptatibus quas? Earum, ab quam totam quasi explicabo
temporibus ex. Voluptas obcaecati suscipit eius pariatur soluta! Id
voluptate ducimus harum itaque laudantium aliquam voluptatem nulla
repudiandae magni officiis voluptatibus sed autem corrupti natus
impedit, blanditiis labore praesentium ab. Molestias, velit. Laudantium
ducimus reprehenderit ab, est reiciendis nisi suscipit minus natus,
quibusdam expedita nulla quis inventore officia hic ipsum sit ad, quam
facilis doloribus. Accusamus repellat dolores eaque incidunt ab numquam.
Reprehenderit corrupti excepturi iure molestiae perferendis, distinctio
ad? Culpa cum quaerat ipsa tempora totam delectus in, assumenda
laudantium ea provident explicabo cumque minus quos iste, asperiores
tenetur eaque. Quo, enim? Asperiores officiis cupiditate aut ea at
minus, voluptate assumenda, aliquid illo pariatur inventore dolorum
impedit magni dolorem earum, officia ipsa? Non esse culpa illum possimus
recusandae consequatur perspiciatis iure architecto. Sit, voluptas
molestiae dolor fuga nostrum, asperiores doloremque debitis enim
assumenda excepturi cum facilis ipsum illum animi repellendus ducimus ea
adipisci, numquam corrupti consequatur? Dolorum vel nisi vitae facilis
unde! Voluptates non cum autem eius qui deleniti, voluptatem accusamus
ex illum! Error neque ex placeat, ea distinctio ab, dolore officiis at
voluptates saepe reprehenderit odio temporibus quibusdam ipsum, sunt
non. Error soluta aliquid totam iure praesentium pariatur a consequatur
minus recusandae aut et doloribus, necessitatibus officiis cupiditate
dolorum, officia doloremque molestiae, dolores autem voluptates eveniet
quod voluptatibus. Unde, quaerat aliquid! Excepturi hic qui repellendus
rerum necessitatibus ducimus repellat minima rem doloremque impedit
voluptate perferendis, et quo dolores? Labore, commodi! Nobis unde
aperiam quos aspernatur placeat numquam laboriosam mollitia rem odit.
Natus ipsum architecto perferendis voluptatum aspernatur at,
necessitatibus quia. Sed ea aut quas, quaerat odit temporibus nemo
quibusdam voluptate, pariatur doloribus quisquam qui eos sint dolor
laudantium molestias repellat minima! Dolorum, quaerat? Aliquid
asperiores porro alias rem nihil necessitatibus aut eligendi
voluptatibus consectetur optio. Aliquam quidem laudantium cumque ullam
laboriosam? Quisquam recusandae rem repellat! Beatae suscipit quasi sint
eum fuga. Cumque rerum quod cupiditate voluptatum quia, perferendis
doloribus distinctio sapiente quas, accusantium rem dolor adipisci
deleniti unde officiis suscipit nulla eveniet ipsum. Quia et iusto
accusamus provident aperiam aut temporibus. Debitis consequuntur dolores
eveniet eligendi perferendis, ratione sint unde magnam accusamus culpa
laborum illum eius officiis cum deserunt alias, qui, ab voluptatibus
dolor ducimus nulla dignissimos. Quasi perspiciatis nihil rem? At, omnis
enim nobis illo earum magni porro magnam corporis repellendus beatae
saepe, adipisci voluptas dicta quia iure dolor minima exercitationem
dolores placeat reiciendis! Cupiditate molestiae assumenda libero
pariatur dolorum! Quasi eos minus, nostrum tempore aut delectus ad
exercitationem natus maiores sed voluptatem, hic, recusandae consequatur
asperiores possimus sapiente nihil a facilis aliquid velit rem! Illo,
distinctio. Magni, et aliquid! Molestiae eveniet repellat rem
consequuntur nesciunt, impedit ea nam commodi, itaque officia fuga nobis
a ad dolorum nisi omnis quos iusto. Quibusdam accusamus nam laboriosam
culpa exercitationem earum nihil! Ratione. Eaque odit, sed voluptatem
deserunt et reiciendis ducimus voluptatibus in magnam magni. Quis
architecto ab repellat commodi rem incidunt ullam, inventore, laudantium
est vel et voluptate assumenda fugit veritatis similique? Ipsa aperiam
cupiditate odit doloribus ex autem. Adipisci odio nam consequatur
reiciendis dolorem, in doloremque nihil, architecto necessitatibus
beatae incidunt expedita. Dolore sit eveniet tenetur dolores mollitia
totam qui reiciendis. Nemo exercitationem eaque voluptatibus amet facere
autem odio perferendis deserunt, eveniet modi id sit vero nisi
reiciendis, explicabo fugit cupiditate non quam adipisci excepturi
accusantium possimus soluta laboriosam nesciunt? Consectetur. Possimus
explicabo officia aliquid. Cumque perspiciatis animi enim nam minima!
Fuga eaque assumenda dicta obcaecati dolorum vero delectus, repellat
quae. At deleniti repudiandae facere optio quibusdam, saepe alias modi
minima. Iste cumque quasi, fuga, recusandae vel molestiae praesentium
adipisci, hic ipsa enim doloremque minima eaque. Autem modi iusto
accusamus reiciendis! Incidunt, expedita et neque quas sapiente magni ut
at? Quos! Similique voluptatum quam, dolore quae fugiat porro quos
provident dolor magnam natus in consequuntur doloribus tenetur veniam
ipsum eaque eligendi vero placeat ducimus odit esse. Maxime ab
asperiores rerum excepturi. Nisi soluta est veniam sapiente consectetur
iste laboriosam voluptates corrupti minus totam. Commodi quos laborum
earum maiores ipsam itaque, exercitationem reiciendis, enim sequi alias
molestiae modi? Hic veritatis eveniet quod. Iste laudantium incidunt
dicta autem sequi placeat, sit beatae quo, eum facere veniam laboriosam
labore obcaecati? Voluptas aspernatur eos corporis dolores neque
excepturi quas sit ex reiciendis, quis dolorum quo! Eum harum distinctio
hic officiis labore deserunt sint quod dicta odio quae ut incidunt,
temporibus doloremque totam ratione. Obcaecati impedit voluptatibus
quisquam tenetur eius sint officia accusamus natus ut atque! Placeat
necessitatibus doloribus alias non ut vel sit similique eveniet, soluta
nostrum delectus dignissimos saepe culpa exercitationem harum iure
accusamus molestiae eius inventore laborum! Quaerat rem alias aliquid
fugit nisi. Dignissimos natus veritatis consequuntur molestiae enim aut
cumque explicabo odio non quibusdam fugit quisquam, aspernatur nobis,
quasi quidem labore vero animi porro impedit! Tempore assumenda optio
minus iste excepturi nemo? Alias ad non consectetur modi doloremque
possimus! Voluptate delectus unde reiciendis necessitatibus at alias
deleniti non? Sint ex accusantium quae soluta labore quod exercitationem
doloremque tempora, optio id non sit! Recusandae explicabo aspernatur
quibusdam illo commodi error sed dicta deserunt vel expedita laborum
soluta nam iusto quo, debitis eligendi reiciendis dolore velit?
Blanditiis deleniti ex doloremque quis nihil odit quasi! Sequi,
voluptatibus repudiandae sapiente, officia illo unde optio ducimus
officiis exercitationem obcaecati quasi. Corrupti soluta et asperiores
totam ad consequatur ut tenetur, modi rerum iure, ipsam doloremque
ratione animi culpa? Excepturi ullam voluptate soluta saepe ratione
magni sit nulla cum corrupti ad iste illo tempora molestias maxime
omnis, magnam et rerum in animi tenetur quae! Eum animi perferendis
laboriosam dolores? Veritatis possimus qui exercitationem quas quam
corporis aliquid, fugiat, assumenda alias doloremque odit iste, fuga
officiis ducimus laborum vel a? Dolore facere dolor quos, similique nemo
velit nulla ullam repudiandae. Vel, culpa, aliquam pariatur id expedita
numquam iure quisquam repudiandae nisi at temporibus explicabo dolores
reprehenderit. Quae soluta incidunt maiores omnis blanditiis nisi
numquam similique quibusdam vero quaerat, et dignissimos? Consequatur
minima saepe accusamus totam explicabo eius soluta! Fuga earum molestiae
neque eum perferendis reprehenderit voluptatibus velit? Rerum dolorem
nostrum tempore veritatis fugit aut illum doloremque? Error beatae ipsam
nemo! Praesentium atque rerum fuga aperiam asperiores. Animi porro
sequi, voluptate numquam placeat voluptates corrupti consectetur? Eum
quae reiciendis quos quod, deserunt voluptas aut facere at aliquid ullam
excepturi velit dolor. Porro nisi deserunt id quam a suscipit corrupti
soluta? Debitis maiores officia accusantium enim deleniti fugiat rerum
ab necessitatibus laborum, asperiores amet, corporis, ea id officiis
labore veniam! Sit, optio. Nemo nam error, esse ratione doloremque
itaque tempore impedit, dolore, repellendus ea possimus dolor assumenda
officiis expedita dolorum tenetur minus amet? Possimus aliquam veritatis
beatae deleniti odit necessitatibus harum eum? Repellendus error iste
voluptate qui aperiam distinctio perferendis facere corrupti porro,
dolor vel possimus voluptatem laudantium a, esse fugit assumenda amet
autem numquam doloribus accusamus asperiores! Labore, accusantium?
Debitis, accusamus. Temporibus dolores nam nulla eaque dolorem. Ipsum
ipsam, ab aspernatur, commodi reiciendis dolore iure ut eligendi nulla
atque architecto, debitis omnis vero velit eveniet quisquam voluptatibus
voluptate cumque ullam dolores. Deserunt accusantium molestiae
voluptates deleniti minus distinctio maxime ullam magni placeat?
Nesciunt nobis eum quibusdam laboriosam, fugiat quia sapiente quos
voluptatibus possimus? Reiciendis molestias at fuga labore itaque quod
quidem. Adipisci provident animi dolorem! Vitae architecto eum enim
optio fugiat, aliquid quis voluptatibus veritatis corrupti sequi,
asperiores perferendis! Cumque quae aliquam aliquid corporis odio itaque
ipsum tenetur totam quisquam amet! Dolorem vitae beatae voluptatem
cupiditate inventore tempore rem, explicabo repellat veniam corrupti
nesciunt possimus impedit dolor ullam aspernatur earum atque minima. Ea
optio cumque porro veniam error odit assumenda quae! Commodi, nisi velit
perspiciatis aliquid ut quidem accusantium! Cupiditate doloribus id
vitae, facilis, illo tempora fugiat sit quis reiciendis, quod a.
Provident reiciendis maiores, hic ducimus aperiam repellendus officia
sit. Aperiam laboriosam voluptates dolorum labore ab molestiae
praesentium veniam odit sed blanditiis. Quo alias nam facilis, veritatis
voluptatem mollitia eveniet magnam totam doloremque architecto quisquam
quasi tempore voluptatum adipisci saepe. Eos iste tenetur, laboriosam
dolore dolores ullam! Quae adipisci porro quia hic, impedit eligendi
modi accusantium? Adipisci sunt eaque, voluptatibus quos velit quam
beatae aliquam, deleniti ipsum, vel molestias quidem. Voluptas sed dolor
perferendis, expedita ea aliquam blanditiis molestiae incidunt fugit
minima mollitia nihil? Doloremque hic repellat neque voluptates corrupti
facere doloribus, rem architecto labore itaque porro tempora, nisi
harum! Dicta ducimus ipsum, iure recusandae nemo aspernatur. Deleniti
suscipit quia deserunt autem odit nihil iste quae tempore, cupiditate
eius totam corporis adipisci culpa numquam repudiandae veritatis,
laborum aliquid maiores maxime? Porro facilis, ex harum laborum
consectetur non autem commodi aliquid ullam ea distinctio accusantium
praesentium ratione ut error, delectus, magnam inventore excepturi eius?
Amet nihil earum cum facilis hic veritatis. Accusamus obcaecati totam
ipsa facilis sequi ipsam, odit harum delectus explicabo ut, recusandae
quia dolorem unde sapiente! Accusantium tenetur provident earum ducimus
nobis. Voluptatem dolore beatae ea veritatis similique sed. Dolores
accusamus qui, nam minus optio aliquid. Ipsa vitae magnam fuga ex
perspiciatis deleniti laboriosam totam ducimus quis, unde eius
doloremque et repudiandae ea libero incidunt quidem eos magni? Minima!
Soluta libero voluptas itaque aspernatur recusandae doloribus nisi
consequuntur, doloremque fugiat magni, repellat alias voluptatum
assumenda nesciunt nobis, ex eveniet nulla esse? Ex, suscipit. Quos quam
expedita nemo aperiam consectetur! Perspiciatis facere aperiam vitae,
inventore quibusdam esse deserunt accusamus suscipit nemo cupiditate,
repellat quis veniam dolorem sequi nostrum laborum. Nemo tempore quasi
aliquam possimus quae iste reprehenderit quo maiores voluptatem.
Laborum, voluptas id! Similique, recusandae? Laboriosam soluta
doloremque reprehenderit temporibus porro quaerat ipsa excepturi ad.
Maxime eveniet dolor quibusdam, molestias at, officiis blanditiis
aliquam consectetur eligendi, debitis quia porro eaque? Aperiam fuga
architecto eligendi in eum recusandae odio adipisci pariatur repudiandae
corporis sequi nam, vitae soluta vero sapiente facilis sed quos quasi
excepturi distinctio? Natus animi enim facere dolor. Nesciunt.
Laboriosam rerum recusandae ad eius hic earum vitae magni nam.
Blanditiis consequatur illum laborum totam nostrum perferendis esse
officiis sapiente dolorum assumenda! Laudantium laborum distinctio quae
perspiciatis error maxime voluptatem! Corrupti, minus illo id magnam
error, exercitationem voluptate aut laudantium assumenda qui nobis,
eaque consectetur eius. Incidunt dolor, reprehenderit, accusamus quaerat
magnam ab excepturi odio quam ea fugiat ad rerum! Quasi qui aut
quibusdam consequatur. Repellendus magnam consequatur dolores voluptate
eaque corporis minima numquam? Vel quisquam rerum iusto laborum
voluptatibus nisi nobis animi? Beatae ipsa hic exercitationem officia
dignissimos voluptatum. Odio placeat et totam quisquam, rerum delectus,
voluptas vitae nemo velit neque quas iusto! Itaque incidunt praesentium
atque quidem magni voluptatibus voluptas quam possimus. Expedita
distinctio illo quos sit consequuntur? Ratione, eos praesentium iusto
accusantium repellendus debitis, consequuntur asperiores consequatur
illo a autem quo perferendis molestias culpa tenetur ipsum ab
voluptatibus nulla. Aperiam, quas ex delectus quos nulla corporis magni?
Laboriosam voluptates vero corrupti pariatur. Modi quos a exercitationem
culpa. Atque ducimus perspiciatis temporibus? Numquam illum, sapiente
impedit corporis optio aut. A voluptatibus officiis quibusdam maiores
unde animi sint magnam! Repellendus modi at quas error praesentium aut
sed eligendi voluptatibus, sapiente provident eius asperiores, odit eum,
iure maiores quo. Dolor architecto quos repellat repudiandae animi
deserunt reprehenderit voluptates officiis minus. Aliquid, ut!
Asperiores suscipit quasi unde repellat voluptatem optio dolorum, ab
blanditiis porro dolor perferendis illum commodi tenetur alias
recusandae eius ipsum maxime sequi vitae obcaecati deleniti animi
officia. Voluptatem! Assumenda necessitatibus totam possimus ex non
inventore quis dolorum unde dolorem obcaecati esse fuga, omnis quibusdam
consequuntur itaque nam commodi distinctio repellat saepe explicabo
sapiente quam exercitationem quaerat eligendi. Atque? Necessitatibus,
nihil modi possimus qui excepturi, commodi odit quae autem est hic,
dolorem quo maiores consequatur recusandae dolores neque consectetur eum
numquam atque iure! Eius debitis veritatis repellat saepe dolore? Vero
eos, sapiente quas veritatis consequuntur quisquam doloribus
exercitationem vitae laboriosam ipsam repellendus ex nobis placeat
voluptas! At iusto doloremque eos magni eius, odio corrupti! Suscipit
alias fuga tenetur quidem! Ut atque sapiente nobis. Obcaecati earum
debitis amet, libero aspernatur placeat deleniti praesentium officia!
Blanditiis ratione ipsam architecto minus reprehenderit possimus natus
fuga optio dolorem. Soluta eligendi asperiores sapiente veniam.
Consequuntur, quae deserunt harum ut asperiores, maxime necessitatibus
corrupti molestiae eveniet nam tempora unde commodi recusandae optio
odio quos doloremque culpa nesciunt, at et! Alias corporis voluptates
sit exercitationem ipsa? Modi hic accusantium esse dolor porro nostrum
maxime ipsum fuga beatae dolores nulla natus mollitia veniam veritatis
totam, corrupti dolorum repudiandae at. Ea incidunt dolore, distinctio
illo unde debitis libero. Ea sit expedita qui perferendis fugit natus
id! Exercitationem vero facere facilis error natus quod enim odio
aliquid iure, doloremque similique quaerat architecto neque accusamus
porro asperiores ex? Omnis, dolor! Placeat perspiciatis, nesciunt earum
totam esse similique consectetur. Tenetur omnis aliquam dolor deserunt
corrupti excepturi, ab aperiam error molestias asperiores blanditiis
totam enim, officiis ipsa architecto magni neque ut velit! Perspiciatis
quo numquam nisi a quaerat ipsam quod ipsa, aspernatur expedita ducimus
magni molestiae est eius odit, animi ipsum quis modi sapiente obcaecati
vitae consequatur maxime! Quaerat natus repellendus ipsam. Quidem enim
amet modi iste mollitia doloremque architecto. Ratione illo consequuntur
eos error eius esse ea in modi reprehenderit deleniti nostrum reiciendis
exercitationem id, at similique voluptatibus, commodi omnis beatae.
Fugiat fuga alias eum quia natus accusantium dicta ab minus harum
libero. Maiores laboriosam explicabo vel quasi voluptates necessitatibus
ea sit, aspernatur, alias suscipit magni error ad nihil nulla ipsa!
Provident tempora odit exercitationem architecto. Quae qui dolor ex in
nam. Obcaecati esse unde ratione debitis aperiam at eveniet? Facere
repudiandae deserunt ut vel odio, architecto iste sunt optio reiciendis!
Inventore voluptates quam libero modi eligendi. Adipisci, vel? Sit iure
officiis optio dignissimos ratione, quam magnam rem autem at excepturi
perspiciatis voluptate rerum id hic, modi sed nostrum. Libero, quidem?
Odio blanditiis error tempore recusandae deserunt quod odit dolorum eos
voluptatum repudiandae cupiditate vero fugit ullam eius temporibus dicta
cum veritatis, dolore labore eum accusamus maiores repellendus? Quasi,
accusantium accusamus? Rem explicabo, doloremque nostrum quo alias
exercitationem perspiciatis ratione ex aspernatur asperiores rerum
natus, debitis quia ad delectus tempora accusantium temporibus incidunt
dignissimos porro commodi! Odio voluptatum et possimus minus. Quisquam
quibusdam recusandae atque eos repellat quis expedita cum. Facere ex,
blanditiis mollitia voluptatibus error commodi saepe at consectetur,
quaerat fugit aliquid aperiam culpa, repellendus similique dolore ut
ducimus corporis. Incidunt ipsam error quisquam, temporibus, ipsum
accusamus odio asperiores dolore praesentium excepturi repudiandae
libero porro non, molestias iusto obcaecati quod. Cupiditate labore
placeat ex maxime natus, fugiat saepe officiis voluptatibus! Commodi,
quisquam? Consequatur porro cumque assumenda enim accusamus architecto
quaerat cupiditate nisi eum ipsam. Perferendis animi numquam excepturi
tempore, nobis temporibus? Sapiente ratione vitae accusamus atque illo
expedita vero debitis! Nam, doloremque cum, fuga nostrum qui voluptatem
autem eligendi repellendus delectus sit, adipisci cumque debitis labore
tempora optio. A animi odio facilis quibusdam quasi. Assumenda nostrum
quibusdam deserunt sapiente aliquid? Inventore deleniti, sit ipsa
consectetur excepturi voluptatum. Ipsam veniam sunt ad odio, rem sint
eveniet corporis sit impedit voluptates modi earum repellendus nobis
facere, dolorum quae laborum consequatur nisi consequuntur. Alias ex vel
tempore doloribus quae. Culpa quidem magnam dolor voluptatum neque
assumenda, laudantium tenetur placeat facere officia esse! Ad totam quis
sed ipsam cum nesciunt odit provident veniam est. Facere commodi minima
aut quos magnam nam et, assumenda, fuga, perspiciatis aliquam nulla
distinctio quia impedit illum sequi esse similique optio fugiat suscipit
eum labore iure repudiandae unde! Ratione, dolore. Recusandae cum amet
quibusdam reprehenderit sapiente laboriosam, dolores unde facilis,
sequi, eos minima ipsam laudantium enim ullam? Tenetur quasi provident
eius tempore aperiam, libero aliquid mollitia illum ipsa, ex natus. Odio
quas atque reiciendis laudantium. Rerum, consequatur aliquam illum
corporis nulla accusantium consequuntur, voluptas aut inventore
molestias nobis sit perspiciatis ullam fugit tempora dolore itaque nam
perferendis veniam magnam fugiat? Impedit et accusantium esse illo
nostrum optio sapiente, nam unde quam doloremque culpa ipsa blanditiis
numquam nulla modi, dolore voluptas. Assumenda omnis aut aliquam, dolor
fugiat sapiente sit animi distinctio. Aliquam qui molestias dolore
vitae! Quasi fuga nisi vel voluptatem sit quaerat error sunt odit
deleniti quibusdam rem esse, optio tenetur in voluptatum at excepturi
doloribus fugit nesciunt ut voluptatibus. Id sapiente repudiandae nisi
ullam saepe adipisci ipsam molestias impedit? Nulla quod sequi fuga rem
accusamus fugit voluptas voluptatem delectus ipsam dicta id quis
aspernatur, accusantium incidunt ducimus! Molestias, adipisci!
Repudiandae accusamus, repellendus possimus facilis minus adipisci
reprehenderit dignissimos repellat laboriosam alias vero a assumenda in
vel! Atque quam, quos omnis obcaecati accusantium ad facilis culpa eaque
officia natus amet. Adipisci, odio voluptatum nulla tempore corporis
nisi iste dolores quos rerum fugiat ratione necessitatibus veniam qui!
Deleniti dolor, maxime illo at nemo quibusdam facilis doloremque, itaque
molestiae placeat iusto labore! Doloremque, optio, odit error debitis
esse sequi incidunt eaque reiciendis distinctio possimus nesciunt
blanditiis facere! Enim maiores voluptate ea eius saepe libero tempora
laboriosam, reprehenderit illo quisquam sequi consequuntur ex? Hic,
quod. Corrupti numquam voluptas deserunt totam unde consequatur,
voluptatem est, similique dolores, asperiores cumque. Ab iste, repellat
possimus quod magni cum veritatis molestias corporis quam, sed
voluptatibus? Ullam, temporibus! Quam beatae, facilis atque ducimus
eaque veniam dolore fugiat magnam, odit architecto accusantium, ab
tenetur! Officiis reiciendis aut magnam veniam optio suscipit totam
atque dicta inventore! Ab repudiandae vero facilis? Neque consectetur,
qui nemo commodi quod et atque nesciunt voluptatem quaerat quas error
officia eveniet ipsam iste iusto saepe, illo dolore ab recusandae!
Tempore maiores quas numquam distinctio debitis dicta? Soluta saepe
similique quod cupiditate blanditiis sint earum nobis officia assumenda,
sit ipsam officiis laudantium alias labore modi fugit. Dolor amet
eligendi fugit sunt magni officia reiciendis cum. Corporis, molestias!
Possimus voluptatibus recusandae non similique beatae obcaecati
perferendis sed provident doloribus laboriosam? Beatae blanditiis ea
tempora aliquam quos dicta, inventore sint magnam ipsa et nisi maxime
voluptates delectus aperiam id? Cumque maxime magni, ipsam dignissimos
nesciunt modi libero optio, ad quisquam molestiae quidem autem error.
Recusandae assumenda maxime culpa, ratione quo, sapiente aspernatur
consequatur possimus deleniti asperiores hic, corrupti sit. Blanditiis
possimus vero aliquid, aspernatur magnam, tenetur incidunt deleniti ea
veritatis dolorum atque sapiente adipisci! Qui pariatur praesentium
officia laudantium vel modi expedita quis, sequi voluptate nihil
placeat, omnis neque? Eos pariatur quam maxime quos culpa consequatur
voluptates eveniet, soluta, exercitationem, adipisci incidunt natus
necessitatibus dolorem minus autem facilis nihil temporibus odio labore
magni laboriosam rem ad. Assumenda, quibusdam quisquam?
</div>
<div className="max-h-screen w-1/2 right-0 top-0 absolute overflow-y-auto">
<div className="min-h-screen bg-neutral-200 p-8 gap-8 flex flex-col justify-between">
<div className="">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Magni ex
labore fuga delectus, quae dolores neque iure culpa architecto,
maiores error provident amet doloremque voluptas laboriosam
aliquid quasi in aperiam!
</p>
</div>
</div>
</div>
</div>
);
}
export default TestPage;
+366 -134
View File
@@ -1,6 +1,6 @@
import { useEffect } from "react";
import { useQuery } from "@tanstack/react-query";
import { useParams } from "react-router";
import { useMemo } from "react";
import { api } from "../api/ky";
import { Unit } from "../types/IUnit";
import ShareIcon from "../components/icons/ShareIcon";
@@ -18,11 +18,54 @@ import UnitSliderItem from "../components/UnitSliderItem";
import UnitTypeImageWithMarkers from "../components/UnitTypeImageWithMarkers";
import OnFloorMask from "../components/OnFloorMask";
import InteriorSlider from "../components/InteriorSlider";
import { getHQMockUnit } from "../data/hq192327mockUnits";
import { ComplexName } from "../types/ComplexName";
import {
createHqLoungeVirtualUnit,
isHqLoungeUnitNo,
} from "../utils/hqLoungeVirtualUnits";
const mockInteriors = [
"/images/interiors/hq/studio/2.jpg",
"/images/interiors/hq/simplex-edge/2.jpg",
"/images/interiors/hq/deluxe/2.jpg",
"/images/interiors/hq/deluxe/3.jpg",
"/images/interiors/hq/executive/2.jpg",
"/images/interiors/hq/executive/3.jpg",
];
const HQ_LOUNGE_INTERIOR_IMAGES = [
"/images/interiors/hq/lounge/1.jpg",
"/images/interiors/hq/lounge/2.jpg",
"/images/interiors/hq/lounge/3.jpg",
];
function UnitPage() {
const params = useParams<{ complexName: string; unitNumber: string }>();
const params = useParams<{ complexName: ComplexName; unitNumber: string }>();
const { data: unit } = useQuery({
const hqLoungeVirtual = useMemo(() => {
if (
params.complexName !== "hq" ||
!params.unitNumber ||
!isHqLoungeUnitNo(params.unitNumber)
)
return null;
const floor = parseInt(params.unitNumber.slice(0, -2), 10);
return createHqLoungeVirtualUnit(floor, params.unitNumber);
}, [params.complexName, params.unitNumber]);
const { data: fetchedUnit, isFetching } = useQuery({
enabled:
!hqLoungeVirtual &&
!(
params.complexName === "hq" &&
(params.unitNumber?.startsWith("19") ||
params.unitNumber?.startsWith("20") ||
params.unitNumber?.startsWith("23") ||
params.unitNumber?.startsWith("24") ||
params.unitNumber?.startsWith("27") ||
params.unitNumber?.startsWith("28"))
),
queryKey: ["unit", params.complexName, params.unitNumber],
queryFn: () =>
api
@@ -30,6 +73,8 @@ function UnitPage() {
.json<Unit>(),
});
const unit = fetchedUnit ?? hqLoungeVirtual ?? undefined;
const { favoriteUnits, setFavoriteUnits } = useFavoritesUnitsStore();
function handleFavorite() {
@@ -43,22 +88,158 @@ function UnitPage() {
const { setModal } = useModalStore();
const displayUnitType = unit
? formattedUnitTypes.get(unit.unitType) || unit.unitType
: "Rove Home";
if (isFetching && !hqLoungeVirtual) return <div>Loading...</div>;
useEffect(() => {
document.title = displayUnitType;
return () => {
document.title = "Rove Home";
};
}, [displayUnitType]);
if (!unit)
return (
<div className="2xl:p-[2.222vw] md:max-2xl:p-6 p-4 max-2xl:pb-0 bg-white flex 2xl:gap-[2.222vw] md:max-2xl:gap-8 gap-6 max-2xl:flex-col 2xl:items-start">
<div className="max-md:aspect-square relative">
<NewUnitSlider>
<UnitSliderItem text="On the floor">
<svg className="2xl:py-[2.222vw] py-8 size-full">
<OnFloorMask unit={getHQMockUnit(params.unitNumber!)!} />
</svg>
</UnitSliderItem>
{innerWidth >= 768 ? (
<UnitSliderItem text="Interior">
<InteriorSlider mockImages={mockInteriors} />
</UnitSliderItem>
) : (
mockInteriors.map((interior, index) => (
<UnitSliderItem text={`interior ${index + 1}`} key={index}>
<img
src={interior}
alt=""
className="size-full object-cover pointer-events-none"
/>
</UnitSliderItem>
))
)}
</NewUnitSlider>
</div>
<div className="2xl:w-[21.944vw] flex-shrink-0 py-4">
{/* <div className="2xl:space-y-[1.667vw] space-y-6"> */}
<div className="flex justify-between items-start">
<div className="2xl:space-y-[1.111vw] space-y-4">
<h3 className="text-h3 font-medium">
{params.unitNumber?.endsWith("F")
? "Full floor"
: "Simplex office"}
</h3>
<div className="2xl:space-y-[0.556vw] space-y-2">
<p className="text-s text-[#00BED7]">HQ by Rove</p>
<div className="flex items-center 2xl:gap-[0.556vw]">
<p className="text-s opacity-70">
Floor {params.unitNumber?.slice(0, 2)}
</p>
</div>
</div>
</div>
<div>
<Button variant="tertiary" onlyIcon onClick={handleShare}>
<span className="2xl:size-[1.389vw] size-5">
<ShareIcon />
</span>
</Button>
</div>
</div>
{/* </div> */}
</div>
</div>
);
if (!unit) return null;
if (unit.unitType === "Lounge" && unit.projectSlug === "hq") {
return (
<div className="2xl:p-[2.222vw] md:max-2xl:p-6 p-4 bg-white flex 2xl:gap-[2.222vw] md:max-2xl:gap-8 gap-6 max-2xl:flex-col 2xl:items-start">
<div className="max-md:aspect-square md:aspect-video md:min-h-0 md:overflow-hidden relative w-full">
<NewUnitSlider>
<UnitSliderItem text="Layout">
<UnitTypeImageWithMarkers
complexName="hq"
unitTypeVariant="lounge"
legend={[]}
/>
</UnitSliderItem>
<UnitSliderItem text="On the floor">
<svg className="2xl:py-[2.222vw] py-8 size-full">
<OnFloorMask unit={unit} />
</svg>
</UnitSliderItem>
{innerWidth >= 768 ? (
<UnitSliderItem text="Interior">
<InteriorSlider mockImages={HQ_LOUNGE_INTERIOR_IMAGES} />
</UnitSliderItem>
) : (
HQ_LOUNGE_INTERIOR_IMAGES.map((src, index) => (
<UnitSliderItem text={`interior ${index + 1}`} key={src}>
<img
src={src}
alt=""
className="size-full object-cover pointer-events-none"
/>
</UnitSliderItem>
))
)}
</NewUnitSlider>
<Button
variant="cta"
onlyIcon={innerWidth < 768}
size="large"
className="absolute 2xl:right-[1.667vw] 2xl:top-[1.667vw] right-6 top-6 max-md:hidden"
onClick={() =>
setModal(<VideoModal src={`/videos/hq/lounge.mp4`} />)
}
>
<div className="2xl:size-[1.389vw] size-5">
<PlayIcon />
</div>
Video tour
</Button>
</div>
<div className="flex flex-col justify-between md:max-2xl:gap-6 gap-4 2xl:w-[21.944vw] flex-shrink-0">
<div className="flex justify-between items-start">
<div className="2xl:space-y-[1.111vw] space-y-4">
<h3 className="text-h3 font-medium">Lounge</h3>
<div className="2xl:space-y-[0.556vw] space-y-2">
<p className="text-s text-[#00BED7]">HQ by Rove</p>
<p className="text-s opacity-70">Floor {unit.floor}</p>
</div>
</div>
<Button
variant="tertiary"
onlyIcon
onClick={() =>
navigator.share({
title: `Lounge — Floor ${unit.floor}`,
url: window.location.href,
})
}
>
<span className="2xl:size-[1.389vw] size-5">
<ShareIcon />
</span>
</Button>
</div>
<Button
variant="cta"
size="large"
className="md:hidden w-full"
onClick={() =>
setModal(<VideoModal src={`/videos/hq/lounge.mp4`} />)
}
>
Video tour
</Button>
</div>
</div>
);
}
function handleShare() {
navigator.share({
title: `${unit!.unitType} - ${unit!.unitNo}`,
title: `${
params.unitNumber?.endsWith("F") ? "Full floor" : "Deluxe office"
} - ${params.unitNumber}`,
url: window.location.href,
});
}
@@ -67,98 +248,150 @@ function UnitPage() {
.find((project) => project.slug === unit.projectSlug)
?.types.find((type) => type.slug === unit.unitTypeVariantSlug);
const virtualTourAvailable = projects
.find((project) => project.slug === params.complexName)
?.types.find(
(type) => type.slug === unit.unitTypeVariantSlug
)?.tourAvailable;
const videoTourAvailable =
unit.projectSlug === "hq" &&
[
"loft-edge",
"penthouse-loft",
"presidential-loft",
"studio",
"deluxe",
"executive",
].includes(unit.unitTypeVariantSlug);
return (
<div className="2xl:p-[2.222vw] md:max-2xl:p-6 p-4 max-2xl:pb-0 bg-white flex 2xl:gap-[2.222vw] md:max-2xl:gap-8 gap-6 max-2xl:flex-col">
<div className="max-md:aspect-square relative">
<NewUnitSlider>
{unit.isLoft ? (
<>
<UnitSliderItem text="Lower">
<UnitTypeImageWithMarkers
complexName={unit.projectSlug}
unitTypeVariant={
unit.unitTypeVariantSlug +
"-lower" +
(unit.side ? `-${unit.side}` : "")
}
floor="lower"
legend={unitType?.legend || []}
/>
</UnitSliderItem>
<UnitSliderItem text="Upper">
<UnitTypeImageWithMarkers
complexName={unit.projectSlug}
unitTypeVariant={
unit.unitTypeVariantSlug +
"-upper" +
(unit.side ? `-${unit.side}` : "")
}
floor="upper"
legend={unitType?.legend || []}
/>
</UnitSliderItem>
</>
) : (
<UnitSliderItem text="Layout">
<UnitTypeImageWithMarkers
complexName={unit.projectSlug}
unitTypeVariant={
unit.unitTypeVariantSlug + (unit.side ? `-${unit.side}` : "")
}
legend={unitType?.legend || []}
/>
</UnitSliderItem>
)}
<UnitSliderItem text="On the floor">
<svg className="2xl:py-[2.222vw] py-8 size-full">
<OnFloorMask unit={unit} />
</svg>
</UnitSliderItem>
{innerWidth >= 768 ? (
<UnitSliderItem text="Interior">
<InteriorSlider
unitTypeSlug={unit.unitTypeVariantSlug}
projectSlug={unit.projectSlug}
/>
</UnitSliderItem>
) : (
unitType?.interiors.map((interior, index) => (
<UnitSliderItem text={`interior ${index + 1}`} key={index}>
<img
src={interior}
alt=""
className="size-full object-cover pointer-events-none"
/>
</UnitSliderItem>
))
)}
</NewUnitSlider>
<div className="2xl:p-[2.222vw] md:max-2xl:p-6 p-4 max-2xl:pb-0 bg-white flex 2xl:gap-[2.222vw] md:max-2xl:gap-8 gap-6 max-2xl:flex-col 2xl:items-start">
<div className="max-md:aspect-square md:aspect-video md:min-h-0 md:overflow-hidden relative w-full">
{unit.projectSlug === "hq" &&
[
"loft-edge",
"penthouse-loft",
"presidential-loft",
"studio",
].includes(unit.unitTypeVariantSlug) && (
<Button
variant="cta"
onlyIcon={innerWidth < 768}
size="large"
className="absolute 2xl:right-[1.667vw] 2xl:top-[1.667vw] right-6 top-6 max-md:hidden"
onClick={() =>
setModal(
<VideoModal
src={`/videos/unit-types/hq/${unit.unitTypeVariantSlug}.mp4`}
unit.unitTypeVariantSlug === "executive" &&
params.unitNumber?.endsWith("11") ? (
<NewUnitSlider>
<UnitSliderItem text="On the floor">
<svg className="2xl:py-[2.222vw] py-8 size-full">
<OnFloorMask unit={unit} />
</svg>
</UnitSliderItem>
{innerWidth >= 768 ? (
<UnitSliderItem text="Interior">
<InteriorSlider
unitTypeSlug={unit.unitTypeVariantSlug}
projectSlug={unit.projectSlug}
/>
</UnitSliderItem>
) : (
unitType?.interiors.map((interior, index) => (
<UnitSliderItem text={`interior ${index + 1}`} key={index}>
<img
src={interior}
alt=""
className="size-full object-cover pointer-events-none"
/>
)
}
>
<div className="2xl:size-[1.389vw] size-5">
<PlayIcon />
</div>
Video tour
</Button>
)}
</UnitSliderItem>
))
)}
</NewUnitSlider>
) : (
<NewUnitSlider>
{unit.isLoft ? (
<>
<UnitSliderItem text="Lower">
<UnitTypeImageWithMarkers
complexName={unit.projectSlug}
unitTypeVariant={
unit.unitTypeVariantSlug +
"-lower" +
(unit.side ? `-${unit.side}` : "")
}
floor="lower"
legend={unitType?.legend || []}
/>
</UnitSliderItem>
<UnitSliderItem text="Upper">
<UnitTypeImageWithMarkers
complexName={unit.projectSlug}
unitTypeVariant={
unit.unitTypeVariantSlug +
"-upper" +
(unit.side ? `-${unit.side}` : "")
}
floor="upper"
legend={unitType?.legend || []}
/>
</UnitSliderItem>
</>
) : params.complexName === "hq" &&
params.unitNumber?.endsWith("01") ? (
<></>
) : (
<UnitSliderItem text="Layout">
<UnitTypeImageWithMarkers
complexName={unit.projectSlug}
unitTypeVariant={
unit.unitTypeVariantSlug +
(unit.side ? `-${unit.side}` : "")
}
legend={unitType?.legend || []}
/>
</UnitSliderItem>
)}
<UnitSliderItem text="On the floor">
<svg className="2xl:py-[2.222vw] py-8 size-full">
<OnFloorMask unit={unit} />
</svg>
</UnitSliderItem>
{innerWidth >= 768 ? (
<UnitSliderItem text="Interior">
<InteriorSlider
unitTypeSlug={unit.unitTypeVariantSlug}
projectSlug={unit.projectSlug}
/>
</UnitSliderItem>
) : (
unitType?.interiors.map((interior, index) => (
<UnitSliderItem text={`interior ${index + 1}`} key={index}>
<img
src={interior}
alt=""
className="size-full object-cover pointer-events-none"
/>
</UnitSliderItem>
))
)}
</NewUnitSlider>
)}
{videoTourAvailable && (
<Button
variant="cta"
onlyIcon={innerWidth < 768}
size="large"
className="absolute 2xl:right-[1.667vw] 2xl:top-[1.667vw] right-6 top-6 max-md:hidden"
onClick={() =>
setModal(
<VideoModal
src={`/videos/unit-types/hq/${
["studio", "deluxe", "executive"].includes(
unit.unitTypeVariantSlug
)
? "studio"
: unit.unitTypeVariantSlug
}.mp4`}
/>
)
}
>
<div className="2xl:size-[1.389vw] size-5">
<PlayIcon />
</div>
Video tour
</Button>
)}
</div>
<div className="flex flex-col justify-between md:max-2xl:gap-6 gap-4 2xl:w-[21.944vw] flex-shrink-0">
<div className="2xl:space-y-[1.667vw] space-y-6">
@@ -169,7 +402,7 @@ function UnitPage() {
</h3>
<div className="2xl:space-y-[0.556vw] space-y-2">
<p className="text-s text-[#00BED7]">{unit.project}</p>
<div className="flex items-center 2xl:gap-[0.556vw]">
<div className="flex items-center 2xl:gap-[0.556vw] gap-2">
{unit.wing && (
<>
<p className="text-s opacity-70">{unit.wing}</p>
@@ -218,7 +451,7 @@ function UnitPage() {
</div>
</button>
)}
<div className="flex flex-col 2xl:gap-y-[0.556vw]">
<div className="flex flex-col 2xl:gap-y-[0.556vw] gap-y-2 pb-4">
<div className="flex justify-between">
<p className="text-s opacity-70">Total Area</p>
<p className="text-s">{unit.squareFt.toFixed(2)} Sqft</p>
@@ -275,36 +508,28 @@ function UnitPage() {
Book
</Button>
</div> */}
<div className="flex 2xl:flex-col 2xl:gap-[0.556vw] gap-2 2xl:bottom-[2.222vw] bottom-0 bg-white md:max-2xl:-mx-[3.125vw] md:max-2xl:p-[3.125vw] max-md:-mx-4 max-md:p-4 max-2xl:rounded-t-2xl max-2xl:shadow-[0_-4px_20px_0_rgba(0,0,0,0.05)]">
{projects
.find((project) => project.slug === params.complexName)
?.types.find((type) => type.slug === unit.unitTypeVariantSlug)
?.tourAvailable && (
<Button
variant="cta"
size="large"
onClick={() =>
window.open(
`/virtual-tour/${params.complexName}/${unit.unitTypeVariantSlug}`,
"_blank"
)
}
>
Virtual tour
</Button>
)}
{/* <Button disabled variant="cta" size="large">
{(virtualTourAvailable || videoTourAvailable) && (
<div className="flex 2xl:flex-col 2xl:gap-[0.556vw] gap-2 2xl:bottom-[2.222vw] bottom-0 bg-white md:max-2xl:-mx-[3.125vw] md:max-2xl:p-[3.125vw] max-md:-mx-4 max-md:p-4 max-2xl:rounded-t-2xl max-2xl:shadow-[0_-4px_20px_0_rgba(0,0,0,0.05)]">
{virtualTourAvailable && (
<Button
variant="cta"
size="large"
onClick={() =>
window.open(
`/virtual-tour/${params.complexName}/${unit.unitTypeVariantSlug}`,
"_blank"
)
}
>
Virtual tour
</Button>
)}
{/* <Button disabled variant="cta" size="large">
Book
</Button> */}
{/* videos for hq units */}
{unit.projectSlug === "hq" &&
[
"loft-edge",
"penthouse-loft",
"presidential-loft",
"studio",
].includes(unit.unitTypeVariantSlug) && (
{/* videos for hq units */}
{videoTourAvailable && (
<Button
variant="cta"
size="large"
@@ -312,7 +537,13 @@ function UnitPage() {
onClick={() =>
setModal(
<VideoModal
src={`/videos/unit-types/hq/${unit.unitTypeVariantSlug}.mp4`}
src={`/videos/unit-types/hq/${
["studio", "deluxe", "executive"].includes(
unit.unitTypeVariantSlug
)
? "studio"
: unit.unitTypeVariantSlug
}.mp4`}
/>
)
}
@@ -320,7 +551,8 @@ function UnitPage() {
Video tour
</Button>
)}
</div>
</div>
)}
</div>
</div>
);
+3 -1
View File
@@ -1,8 +1,10 @@
import { ComplexName } from "./ComplexName";
export interface Unit {
id: string;
unitNo: string;
project: string;
projectSlug: string;
projectSlug: ComplexName;
floor: number;
unitType: string;
unitView: string;
+55
View File
@@ -0,0 +1,55 @@
import { Unit } from "../types/IUnit";
import { FloorPlanMasks } from "../types/FloorPlanMasks";
/** HQ lounge uses suffix 00 (e.g. floor 5 → unitNo "500"). */
export function isHqLoungeUnitNo(unitNo: string): boolean {
return /^\d+00$/.test(unitNo) && parseInt(unitNo.slice(0, -2), 10) >= 1;
}
export function createHqLoungeVirtualUnit(floor: number, unitNo: string): Unit {
return {
id: `hq-lounge-${unitNo}`,
unitNo,
project: "HQ by Rove",
projectSlug: "hq",
floor,
unitType: "Lounge",
unitView: "",
state: "",
noOfBathrooms: 0,
suitsArea: 0,
squareFt: 0,
noOfParkingSpace: 0,
salesPrice: 0,
balconyArea: 0,
unitTypeVariantSlug: "",
isLoft: false,
};
}
/**
* Masks may define Lounge zones (e.g. key "00") that are not returned by the API.
* Adds a synthetic unit so hover/click work; unitNo is `${floor}${maskKey}` (e.g. 5 + "00" → "500").
*/
export function mergeHqLoungeVirtualUnits(
units: Unit[],
floor: number,
masks: FloorPlanMasks,
getMaskKey: (unitNo: string) => string
): Unit[] {
const seen = new Set(units.map((u) => u.unitNo));
const extra: Unit[] = [];
for (const [maskKey, maskData] of masks) {
if (maskData.formattedUnitType !== "Lounge") continue;
const unitNo = `${floor}${maskKey}`;
if (getMaskKey(unitNo) !== maskKey) continue;
if (seen.has(unitNo)) continue;
seen.add(unitNo);
extra.push(createHqLoungeVirtualUnit(floor, unitNo));
}
return extra.length ? [...units, ...extra] : units;
}