@meetelise/studio-components 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Accordion.d.ts +16 -0
- package/dist/components/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion.js +28 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/AddressBlock.d.ts +14 -0
- package/dist/components/AddressBlock.d.ts.map +1 -0
- package/dist/components/AddressBlock.js +13 -0
- package/dist/components/AddressBlock.js.map +1 -0
- package/dist/components/AmenityList.d.ts +20 -0
- package/dist/components/AmenityList.d.ts.map +1 -0
- package/dist/components/AmenityList.js +75 -0
- package/dist/components/AmenityList.js.map +1 -0
- package/dist/components/Badge.d.ts +9 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +16 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Button.d.ts +12 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +38 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/CTABanner.d.ts +11 -0
- package/dist/components/CTABanner.d.ts.map +1 -0
- package/dist/components/CTABanner.js +17 -0
- package/dist/components/CTABanner.js.map +1 -0
- package/dist/components/ContactForm.d.ts +11 -0
- package/dist/components/ContactForm.d.ts.map +1 -0
- package/dist/components/ContactForm.js +91 -0
- package/dist/components/ContactForm.js.map +1 -0
- package/dist/components/Container.d.ts +9 -3
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/Container.js +19 -8
- package/dist/components/Container.js.map +1 -1
- package/dist/components/Divider.d.ts +9 -0
- package/dist/components/Divider.d.ts.map +1 -0
- package/dist/components/Divider.js +15 -0
- package/dist/components/Divider.js.map +1 -0
- package/dist/components/EliseChat.d.ts +8 -0
- package/dist/components/EliseChat.d.ts.map +1 -0
- package/dist/components/EliseChat.js +22 -0
- package/dist/components/EliseChat.js.map +1 -0
- package/dist/components/FeatureCard.d.ts +15 -0
- package/dist/components/FeatureCard.d.ts.map +1 -0
- package/dist/components/FeatureCard.js +13 -0
- package/dist/components/FeatureCard.js.map +1 -0
- package/dist/components/Footer.d.ts +10 -0
- package/dist/components/Footer.d.ts.map +1 -0
- package/dist/components/Footer.js +19 -0
- package/dist/components/Footer.js.map +1 -0
- package/dist/components/Gallery.d.ts +18 -0
- package/dist/components/Gallery.d.ts.map +1 -0
- package/dist/components/Gallery.js +86 -0
- package/dist/components/Gallery.js.map +1 -0
- package/dist/components/Icon.d.ts +8 -0
- package/dist/components/Icon.d.ts.map +1 -0
- package/dist/components/Icon.js +26 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/Lightbox.d.ts +13 -0
- package/dist/components/Lightbox.d.ts.map +1 -0
- package/dist/components/Lightbox.js +23 -0
- package/dist/components/Lightbox.js.map +1 -0
- package/dist/components/MapEmbed.d.ts +16 -0
- package/dist/components/MapEmbed.d.ts.map +1 -0
- package/dist/components/MapEmbed.js +6 -0
- package/dist/components/MapEmbed.js.map +1 -0
- package/dist/components/Modal.d.ts +9 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +19 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/Nav.d.ts +11 -0
- package/dist/components/Nav.d.ts.map +1 -0
- package/dist/components/Nav.js +53 -0
- package/dist/components/Nav.js.map +1 -0
- package/dist/components/ScheduleTour.d.ts +8 -0
- package/dist/components/ScheduleTour.d.ts.map +1 -0
- package/dist/components/ScheduleTour.js +158 -0
- package/dist/components/ScheduleTour.js.map +1 -0
- package/dist/components/ScrollReveal.d.ts +12 -0
- package/dist/components/ScrollReveal.d.ts.map +1 -0
- package/dist/components/ScrollReveal.js +37 -0
- package/dist/components/ScrollReveal.js.map +1 -0
- package/dist/components/Slot.d.ts +14 -0
- package/dist/components/Slot.d.ts.map +1 -0
- package/dist/components/Slot.js +5 -0
- package/dist/components/Slot.js.map +1 -0
- package/dist/components/Stat.d.ts +12 -0
- package/dist/components/Stat.d.ts.map +1 -0
- package/dist/components/Stat.js +12 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/Testimonial.d.ts +10 -0
- package/dist/components/Testimonial.d.ts.map +1 -0
- package/dist/components/Testimonial.js +9 -0
- package/dist/components/Testimonial.js.map +1 -0
- package/dist/components/Text.d.ts +3 -2
- package/dist/components/Text.d.ts.map +1 -1
- package/dist/components/Text.js +16 -7
- package/dist/components/Text.js.map +1 -1
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeProvider.js +85 -5
- package/dist/components/ThemeProvider.js.map +1 -1
- package/dist/components/VideoHero.d.ts +16 -0
- package/dist/components/VideoHero.d.ts.map +1 -0
- package/dist/components/VideoHero.js +19 -0
- package/dist/components/VideoHero.js.map +1 -0
- package/dist/components/VideoPlayer.d.ts +18 -0
- package/dist/components/VideoPlayer.d.ts.map +1 -0
- package/dist/components/VideoPlayer.js +14 -0
- package/dist/components/VideoPlayer.js.map +1 -0
- package/dist/components/VirtualTourEmbed.d.ts +9 -0
- package/dist/components/VirtualTourEmbed.d.ts.map +1 -0
- package/dist/components/VirtualTourEmbed.js +5 -0
- package/dist/components/VirtualTourEmbed.js.map +1 -0
- package/dist/components/browser/ComponentBrowser.d.ts +2 -0
- package/dist/components/browser/ComponentBrowser.d.ts.map +1 -0
- package/dist/components/browser/ComponentBrowser.js +73 -0
- package/dist/components/browser/ComponentBrowser.js.map +1 -0
- package/dist/components/browser/ComponentShowcase.d.ts +8 -0
- package/dist/components/browser/ComponentShowcase.d.ts.map +1 -0
- package/dist/components/browser/ComponentShowcase.js +104 -0
- package/dist/components/browser/ComponentShowcase.js.map +1 -0
- package/dist/components/browser/componentMeta.d.ts +40 -0
- package/dist/components/browser/componentMeta.d.ts.map +1 -0
- package/dist/components/browser/componentMeta.js +726 -0
- package/dist/components/browser/componentMeta.js.map +1 -0
- package/dist/components/registry.d.ts.map +1 -1
- package/dist/components/registry.js +56 -0
- package/dist/components/registry.js.map +1 -1
- package/dist/components/units/FloorPlanCard.d.ts +16 -0
- package/dist/components/units/FloorPlanCard.d.ts.map +1 -0
- package/dist/components/units/FloorPlanCard.js +28 -0
- package/dist/components/units/FloorPlanCard.js.map +1 -0
- package/dist/components/units/FloorplanExplorer.d.ts +21 -0
- package/dist/components/units/FloorplanExplorer.d.ts.map +1 -0
- package/dist/components/units/FloorplanExplorer.js +39 -0
- package/dist/components/units/FloorplanExplorer.js.map +1 -0
- package/dist/components/units/PricingMatrixModal.d.ts +12 -0
- package/dist/components/units/PricingMatrixModal.d.ts.map +1 -0
- package/dist/components/units/PricingMatrixModal.js +78 -0
- package/dist/components/units/PricingMatrixModal.js.map +1 -0
- package/dist/components/units/UnitCard.d.ts +12 -3
- package/dist/components/units/UnitCard.d.ts.map +1 -1
- package/dist/components/units/UnitCard.js +33 -5
- package/dist/components/units/UnitCard.js.map +1 -1
- package/dist/components/units/UnitDetail.d.ts +11 -0
- package/dist/components/units/UnitDetail.d.ts.map +1 -0
- package/dist/components/units/UnitDetail.js +16 -0
- package/dist/components/units/UnitDetail.js.map +1 -0
- package/dist/components/units/UnitExplorer.d.ts +16 -2
- package/dist/components/units/UnitExplorer.d.ts.map +1 -1
- package/dist/components/units/UnitExplorer.js +128 -27
- package/dist/components/units/UnitExplorer.js.map +1 -1
- package/dist/components/units/UnitFilters.d.ts +2 -2
- package/dist/components/units/UnitFilters.d.ts.map +1 -1
- package/dist/components/units/UnitFilters.js +2 -2
- package/dist/components/units/UnitFilters.js.map +1 -1
- package/dist/components/units/UnitPage.d.ts +8 -0
- package/dist/components/units/UnitPage.d.ts.map +1 -0
- package/dist/components/units/UnitPage.js +130 -0
- package/dist/components/units/UnitPage.js.map +1 -0
- package/dist/components/units/types.d.ts +109 -24
- package/dist/components/units/types.d.ts.map +1 -1
- package/dist/components/units/types.js +1 -0
- package/dist/components/units/types.js.map +1 -1
- package/dist/hooks/useAnalytics.d.ts +16 -0
- package/dist/hooks/useAnalytics.d.ts.map +1 -0
- package/dist/hooks/useAnalytics.js +65 -0
- package/dist/hooks/useAnalytics.js.map +1 -0
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +8 -2
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useFees.d.ts +8 -0
- package/dist/hooks/useFees.d.ts.map +1 -0
- package/dist/hooks/useFees.js +37 -0
- package/dist/hooks/useFees.js.map +1 -0
- package/dist/hooks/useFloorplans.d.ts +19 -0
- package/dist/hooks/useFloorplans.d.ts.map +1 -0
- package/dist/hooks/useFloorplans.js +52 -0
- package/dist/hooks/useFloorplans.js.map +1 -0
- package/dist/hooks/useModal.d.ts +11 -0
- package/dist/hooks/useModal.d.ts.map +1 -0
- package/dist/hooks/useModal.js +35 -0
- package/dist/hooks/useModal.js.map +1 -0
- package/dist/hooks/useProperty.d.ts +66 -0
- package/dist/hooks/useProperty.d.ts.map +1 -0
- package/dist/hooks/useProperty.js +49 -0
- package/dist/hooks/useProperty.js.map +1 -0
- package/dist/hooks/useSpecials.d.ts +8 -0
- package/dist/hooks/useSpecials.d.ts.map +1 -0
- package/dist/hooks/useSpecials.js +37 -0
- package/dist/hooks/useSpecials.js.map +1 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +46 -3
- package/dist/renderer.js.map +1 -1
- package/dist/router.d.ts +9 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +34 -1
- package/dist/router.js.map +1 -1
- package/dist/types.d.ts +47 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/imageUrl.d.ts +21 -0
- package/dist/utils/imageUrl.d.ts.map +1 -0
- package/dist/utils/imageUrl.js +46 -0
- package/dist/utils/imageUrl.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface AccordionItem {
|
|
2
|
+
title: string;
|
|
3
|
+
content?: string;
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
interface AccordionProps {
|
|
7
|
+
items: AccordionItem[];
|
|
8
|
+
allowMultiple?: boolean;
|
|
9
|
+
defaultOpen?: number[];
|
|
10
|
+
colorScheme?: "light" | "dark";
|
|
11
|
+
className?: string;
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
export declare function Accordion({ items, allowMultiple, defaultOpen, colorScheme, className, }: AccordionProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAqB,EACrB,WAAgB,EAChB,WAAqB,EACrB,SAAS,GACV,EAAE,cAAc,2CAgFhB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from "react";
|
|
3
|
+
import { twMerge } from "tailwind-merge";
|
|
4
|
+
export function Accordion({ items, allowMultiple = false, defaultOpen = [], colorScheme = "light", className, }) {
|
|
5
|
+
const isDark = colorScheme === "dark";
|
|
6
|
+
const [openIndices, setOpenIndices] = useState(new Set(defaultOpen));
|
|
7
|
+
const toggle = useCallback((index) => {
|
|
8
|
+
setOpenIndices((prev) => {
|
|
9
|
+
const next = new Set(allowMultiple ? prev : []);
|
|
10
|
+
if (prev.has(index)) {
|
|
11
|
+
next.delete(index);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
next.add(index);
|
|
15
|
+
}
|
|
16
|
+
return next;
|
|
17
|
+
});
|
|
18
|
+
}, [allowMultiple]);
|
|
19
|
+
return (_jsx("div", { className: twMerge("divide-y border-y", isDark
|
|
20
|
+
? "divide-white/10 border-white/10"
|
|
21
|
+
: "divide-[var(--color-muted)]/15 border-[var(--color-muted)]/15", className), children: items.map((item, i) => {
|
|
22
|
+
const isOpen = openIndices.has(i);
|
|
23
|
+
return (_jsxs("div", { children: [_jsxs("button", { onClick: () => toggle(i), className: twMerge("flex w-full items-center justify-between py-4 text-left text-sm font-medium transition-colors cursor-pointer", isDark
|
|
24
|
+
? "text-white/90 hover:text-[var(--color-accent)]"
|
|
25
|
+
: "text-[var(--color-foreground)] hover:text-[var(--color-primary)]"), "aria-expanded": isOpen, children: [_jsx("span", { children: item.title }), _jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", className: twMerge("shrink-0 ml-2 transition-transform duration-200", isOpen && "rotate-180"), children: _jsx("path", { d: "M4 6l4 4 4-4" }) })] }), _jsx("div", { className: twMerge("overflow-hidden transition-all duration-200", isOpen ? "max-h-[2000px] pb-4" : "max-h-0"), children: item.content ? (_jsx("p", { className: twMerge("text-sm", isDark ? "text-white/60" : "text-[var(--color-secondary)]"), children: item.content })) : (item.children) })] }, i));
|
|
26
|
+
}) }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAiBzC,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,aAAa,GAAG,KAAK,EACrB,WAAW,GAAG,EAAE,EAChB,WAAW,GAAG,OAAO,EACrB,SAAS,GACM;IACf,MAAM,MAAM,GAAG,WAAW,KAAK,MAAM,CAAC;IACtC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAC5C,IAAI,GAAG,CAAC,WAAW,CAAC,CACrB,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAa,EAAE,EAAE;QAChB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAChB,mBAAmB,EACnB,MAAM;YACJ,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,+DAA+D,EACnE,SAAS,CACV,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,CACL,0BACE,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,OAAO,CAChB,8GAA8G,EAC9G,MAAM;4BACJ,CAAC,CAAC,gDAAgD;4BAClD,CAAC,CAAC,kEAAkE,CACvE,mBACc,MAAM,aAErB,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACzB,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,SAAS,EAAE,OAAO,CAChB,iDAAiD,EACjD,MAAM,IAAI,YAAY,CACvB,YAED,eAAM,CAAC,EAAC,cAAc,GAAG,GACrB,IACC,EACT,cACE,SAAS,EAAE,OAAO,CAChB,6CAA6C,EAC7C,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAC3C,YAEA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CACd,YAAG,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,+BAA+B,CAAC,YACzF,IAAI,CAAC,OAAO,GACX,CACL,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,QAAQ,CACd,GACG,KAxCE,CAAC,CAyCL,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface AddressBlockProps {
|
|
2
|
+
address?: string;
|
|
3
|
+
city?: string;
|
|
4
|
+
state?: string;
|
|
5
|
+
postalCode?: string;
|
|
6
|
+
phone?: string;
|
|
7
|
+
googleMapsUrl?: string;
|
|
8
|
+
layout?: "inline" | "stacked";
|
|
9
|
+
colorScheme?: "light" | "dark";
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function AddressBlock({ address, city, state, postalCode, phone, googleMapsUrl, layout, colorScheme, className, }: AddressBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=AddressBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddressBlock.d.ts","sourceRoot":"","sources":["../../src/components/AddressBlock.tsx"],"names":[],"mappings":"AAAA,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,aAAa,EACb,MAAkB,EAClB,WAAqB,EACrB,SAAc,GACf,EAAE,iBAAiB,2CAwCnB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function AddressBlock({ address, city, state, postalCode, phone, googleMapsUrl, layout = "stacked", colorScheme = "light", className = "", }) {
|
|
3
|
+
const textColor = colorScheme === "dark" ? "text-white" : "text-[var(--color-foreground)]";
|
|
4
|
+
const mutedColor = colorScheme === "dark" ? "text-white/70" : "text-[var(--color-secondary)]";
|
|
5
|
+
const isInline = layout === "inline";
|
|
6
|
+
const fullAddress = [address, city, state ? `${state} ${postalCode ?? ""}`.trim() : postalCode]
|
|
7
|
+
.filter(Boolean)
|
|
8
|
+
.join(", ");
|
|
9
|
+
const mapsUrl = googleMapsUrl ??
|
|
10
|
+
(fullAddress ? `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(fullAddress)}` : undefined);
|
|
11
|
+
return (_jsxs("div", { className: `${isInline ? "flex flex-wrap items-center gap-4" : "flex flex-col gap-2"} ${className}`, children: [fullAddress && _jsx("p", { className: `${textColor} font-[family-name:var(--font-body)]`, children: fullAddress }), _jsxs("div", { className: `flex ${isInline ? "gap-4" : "flex-col gap-2"}`, children: [phone && (_jsx("a", { href: `tel:${phone.replace(/[^\d+]/g, "")}`, className: `${mutedColor} hover:text-[var(--color-primary)] transition-colors font-[family-name:var(--font-body)]`, children: phone })), mapsUrl && (_jsx("a", { href: mapsUrl, target: "_blank", rel: "noopener noreferrer", className: "text-[var(--color-primary)] hover:underline font-[family-name:var(--font-body)]", children: "Get Directions \u2192" }))] })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=AddressBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddressBlock.js","sourceRoot":"","sources":["../../src/components/AddressBlock.tsx"],"names":[],"mappings":";AAYA,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,KAAK,EACL,UAAU,EACV,KAAK,EACL,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,WAAW,GAAG,OAAO,EACrB,SAAS,GAAG,EAAE,GACI;IAClB,MAAM,SAAS,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gCAAgC,CAAC;IAC3F,MAAM,UAAU,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,+BAA+B,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC;IAErC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SAC5F,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,OAAO,GACX,aAAa;QACb,CAAC,WAAW,CAAC,CAAC,CAAC,mDAAmD,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEnH,OAAO,CACL,eAAK,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qBAAqB,IAAI,SAAS,EAAE,aACrG,WAAW,IAAI,YAAG,SAAS,EAAE,GAAG,SAAS,sCAAsC,YAAG,WAAW,GAAK,EAEnG,eAAK,SAAS,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,aAC5D,KAAK,IAAI,CACR,YACE,IAAI,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAC3C,SAAS,EAAE,GAAG,UAAU,0FAA0F,YAEjH,KAAK,GACJ,CACL,EAEA,OAAO,IAAI,CACV,YACE,IAAI,EAAE,OAAO,EACb,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,iFAAiF,sCAGzF,CACL,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface AmenityItem {
|
|
2
|
+
name: string;
|
|
3
|
+
category?: string;
|
|
4
|
+
icon?: string;
|
|
5
|
+
}
|
|
6
|
+
interface AmenityListProps {
|
|
7
|
+
/** When set, fetches amenities live from GET /v1/property/{propertyId}/amenities */
|
|
8
|
+
propertyId?: string;
|
|
9
|
+
/** Static amenities from content blob (fallback when propertyId is not set) */
|
|
10
|
+
amenities?: AmenityItem[];
|
|
11
|
+
layout?: "iconGrid" | "categorized" | "list";
|
|
12
|
+
columns?: 2 | 3 | 4 | 6;
|
|
13
|
+
showIcons?: boolean;
|
|
14
|
+
/** Use "dark" when rendered on a dark background */
|
|
15
|
+
colorScheme?: "light" | "dark";
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function AmenityList({ propertyId: propertyIdProp, amenities: staticAmenities, layout, columns, showIcons, colorScheme, className, }: AmenityListProps): import("react/jsx-runtime").JSX.Element | null;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=AmenityList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AmenityList.d.ts","sourceRoot":"","sources":["../../src/components/AmenityList.tsx"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkCD,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,eAAoB,EAC/B,MAAmB,EACnB,OAAW,EACX,SAAgB,EAChB,WAAqB,EACrB,SAAS,GACV,EAAE,gBAAgB,kDA6GlB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState, useEffect, useCallback } from "react";
|
|
3
|
+
import { twMerge } from "tailwind-merge";
|
|
4
|
+
import { useSiteConfig } from "../hooks/useSiteConfig";
|
|
5
|
+
import { useAuth } from "../hooks/useAuth";
|
|
6
|
+
import { Icon } from "./Icon";
|
|
7
|
+
import { Accordion } from "./Accordion";
|
|
8
|
+
const gridColClasses = {
|
|
9
|
+
2: "grid-cols-2",
|
|
10
|
+
3: "grid-cols-2 sm:grid-cols-3",
|
|
11
|
+
4: "grid-cols-2 sm:grid-cols-4",
|
|
12
|
+
6: "grid-cols-3 sm:grid-cols-6",
|
|
13
|
+
};
|
|
14
|
+
function AmenityRow({ item, showIcons, isDark = false, }) {
|
|
15
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [showIcons && item.icon && (_jsx(Icon, { name: item.icon, size: "sm", className: isDark ? "text-[var(--color-accent)]" : "text-[var(--color-primary)]" })), _jsx("span", { className: twMerge("text-sm", isDark ? "text-white/80" : "text-[var(--color-secondary)]"), children: item.name })] }));
|
|
16
|
+
}
|
|
17
|
+
export function AmenityList({ propertyId: propertyIdProp, amenities: staticAmenities = [], layout = "iconGrid", columns = 3, showIcons = true, colorScheme = "light", className, }) {
|
|
18
|
+
const isDark = colorScheme === "dark";
|
|
19
|
+
const config = useSiteConfig();
|
|
20
|
+
const { authenticatedFetch } = useAuth();
|
|
21
|
+
const propertyId = propertyIdProp ?? config.property?.propertyId;
|
|
22
|
+
const apiBaseUrl = config.property?.apiBaseUrl ?? "";
|
|
23
|
+
const [apiAmenities, setApiAmenities] = useState(null);
|
|
24
|
+
const fetchAmenities = useCallback(async () => {
|
|
25
|
+
if (!propertyId)
|
|
26
|
+
return;
|
|
27
|
+
try {
|
|
28
|
+
const url = `${apiBaseUrl}/v1/properties/${propertyId}?include_amenities=true`;
|
|
29
|
+
const res = await authenticatedFetch(url);
|
|
30
|
+
if (!res.ok)
|
|
31
|
+
throw new Error(`${res.status}`);
|
|
32
|
+
const data = await res.json();
|
|
33
|
+
const items = (data.amenities ?? []).map((a) => ({
|
|
34
|
+
name: a.name,
|
|
35
|
+
category: a.amenity_level === "Unit" ? "Apartment Features"
|
|
36
|
+
: a.amenity_level === "Community" ? "Community Amenities"
|
|
37
|
+
: a.amenity_level ?? a.category,
|
|
38
|
+
}));
|
|
39
|
+
setApiAmenities(items);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
setApiAmenities(null);
|
|
43
|
+
}
|
|
44
|
+
}, [propertyId, apiBaseUrl, authenticatedFetch]);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (propertyId)
|
|
47
|
+
fetchAmenities();
|
|
48
|
+
}, [propertyId, fetchAmenities]);
|
|
49
|
+
const amenities = apiAmenities ?? staticAmenities;
|
|
50
|
+
const grouped = useMemo(() => {
|
|
51
|
+
const map = new Map();
|
|
52
|
+
for (const item of amenities) {
|
|
53
|
+
const cat = item.category ?? "General";
|
|
54
|
+
const arr = map.get(cat) ?? [];
|
|
55
|
+
arr.push(item);
|
|
56
|
+
map.set(cat, arr);
|
|
57
|
+
}
|
|
58
|
+
return map;
|
|
59
|
+
}, [amenities]);
|
|
60
|
+
if (amenities.length === 0)
|
|
61
|
+
return null;
|
|
62
|
+
if (layout === "iconGrid") {
|
|
63
|
+
return (_jsx("div", { className: twMerge("grid gap-6", gridColClasses[columns] ?? gridColClasses[3], className), children: amenities.map((item) => (_jsxs("div", { className: "flex flex-col items-center gap-2 text-center", children: [showIcons && item.icon && (_jsx(Icon, { name: item.icon, size: "lg", className: isDark ? "text-[var(--color-accent)]" : "text-[var(--color-primary)]" })), _jsx("span", { className: twMerge("text-sm font-medium", isDark ? "text-white" : "text-[var(--color-foreground)]"), children: item.name })] }, item.name))) }));
|
|
64
|
+
}
|
|
65
|
+
if (layout === "categorized") {
|
|
66
|
+
const items = [...grouped.entries()].map(([category, categoryItems]) => ({
|
|
67
|
+
title: category,
|
|
68
|
+
children: (_jsx("div", { className: "flex flex-col gap-2", children: categoryItems.map((item) => (_jsx(AmenityRow, { item: item, showIcons: showIcons, isDark: isDark }, item.name))) })),
|
|
69
|
+
}));
|
|
70
|
+
return _jsx(Accordion, { items: items, allowMultiple: true, colorScheme: colorScheme, className: className });
|
|
71
|
+
}
|
|
72
|
+
// list layout
|
|
73
|
+
return (_jsx("div", { className: twMerge("flex flex-col gap-2", className), children: amenities.map((item) => (_jsx(AmenityRow, { item: item, showIcons: showIcons }, item.name))) }));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=AmenityList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AmenityList.js","sourceRoot":"","sources":["../../src/components/AmenityList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAqBxC,MAAM,cAAc,GAA2B;IAC7C,CAAC,EAAE,aAAa;IAChB,CAAC,EAAE,4BAA4B;IAC/B,CAAC,EAAE,4BAA4B;IAC/B,CAAC,EAAE,4BAA4B;CAChC,CAAC;AAEF,SAAS,UAAU,CAAC,EAClB,IAAI,EACJ,SAAS,EACT,MAAM,GAAG,KAAK,GAKf;IACC,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACrC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CACzB,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,6BAA6B,GAChF,CACH,EACD,eAAM,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,+BAA+B,CAAC,YAC5F,IAAI,CAAC,IAAI,GACL,IACH,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,eAAe,GAAG,EAAE,EAC/B,MAAM,GAAG,UAAU,EACnB,OAAO,GAAG,CAAC,EACX,SAAS,GAAG,IAAI,EAChB,WAAW,GAAG,OAAO,EACrB,SAAS,GACQ;IACjB,MAAM,MAAM,GAAG,WAAW,KAAK,MAAM,CAAC;IACtC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,cAAc,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IAErD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IAE7E,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,UAAU,kBAAkB,UAAU,yBAAyB,CAAC;YAC/E,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAkB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CACrD,CAAC,CAA8D,EAAE,EAAE,CAAC,CAAC;gBACnE,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB;oBACnD,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,qBAAqB;wBACzD,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,QAAQ;aACxC,CAAC,CACH,CAAC;YACF,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU;YAAE,cAAc,EAAE,CAAC;IACnC,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,YAAY,IAAI,eAAe,CAAC;IAElD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC;YACvC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAChB,YAAY,EACZ,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,EAC5C,SAAS,CACV,YAEA,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,eAEE,SAAS,EAAC,8CAA8C,aAEvD,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CACzB,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,6BAA6B,GAChF,CACH,EACD,eAAM,SAAS,EAAE,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gCAAgC,CAAC,YACtG,IAAI,CAAC,IAAI,GACL,KAZF,IAAI,CAAC,IAAI,CAaV,CACP,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CACtC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,CACR,cAAK,SAAS,EAAC,qBAAqB,YACjC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,KAAC,UAAU,IAET,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,IAHT,IAAI,CAAC,IAAI,CAId,CACH,CAAC,GACE,CACP;SACF,CAAC,CACH,CAAC;QAEF,OAAO,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,QAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;IACnG,CAAC;IAED,cAAc;IACd,OAAO,CACL,cAAK,SAAS,EAAE,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,YACtD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACvB,KAAC,UAAU,IAAiB,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,IAA3C,IAAI,CAAC,IAAI,CAAsC,CACjE,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface BadgeProps {
|
|
2
|
+
label: string;
|
|
3
|
+
variant?: "default" | "success" | "warning" | "info" | "accent";
|
|
4
|
+
size?: "sm" | "md";
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function Badge({ label, variant, size, className }: BadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,OAAmB,EAAE,IAAW,EAAE,SAAc,EAAE,EAAE,UAAU,2CAQ5F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
const VARIANT_CLASSES = {
|
|
3
|
+
default: "bg-[var(--color-muted)]/15 text-[var(--color-foreground)]",
|
|
4
|
+
success: "bg-emerald-100 text-emerald-800",
|
|
5
|
+
warning: "bg-amber-100 text-amber-800",
|
|
6
|
+
info: "bg-sky-100 text-sky-800",
|
|
7
|
+
accent: "bg-[var(--color-primary)]/10 text-[var(--color-primary)]",
|
|
8
|
+
};
|
|
9
|
+
const SIZE_CLASSES = {
|
|
10
|
+
sm: "text-xs px-2 py-0.5",
|
|
11
|
+
md: "text-sm px-2.5 py-1",
|
|
12
|
+
};
|
|
13
|
+
export function Badge({ label, variant = "default", size = "sm", className = "" }) {
|
|
14
|
+
return (_jsx("span", { className: `inline-flex items-center rounded-full font-medium font-[family-name:var(--font-body)] ${VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.default} ${SIZE_CLASSES[size] ?? SIZE_CLASSES.sm} ${className}`, children: label }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":";AAOA,MAAM,eAAe,GAA2B;IAC9C,OAAO,EAAE,2DAA2D;IACpE,OAAO,EAAE,iCAAiC;IAC1C,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,yBAAyB;IAC/B,MAAM,EAAE,0DAA0D;CACnE,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,GAAG,EAAE,EAAc;IAC3F,OAAO,CACL,eACE,SAAS,EAAE,yFAAyF,eAAe,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,SAAS,EAAE,YAE9M,KAAK,GACD,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface ButtonProps {
|
|
2
|
+
content: string;
|
|
3
|
+
variant?: "primary" | "secondary" | "outline" | "ghost";
|
|
4
|
+
size?: "sm" | "md" | "lg";
|
|
5
|
+
fullWidth?: boolean;
|
|
6
|
+
action?: "navigate" | "scroll" | "openModal" | "externalLink";
|
|
7
|
+
target?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function Button({ content, variant, size, fullWidth, action, target, className, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,OAAmB,EACnB,IAAW,EACX,SAAiB,EACjB,MAAmB,EACnB,MAAM,EACN,SAAS,GACV,EAAE,WAAW,2CAmCb"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
import { navigate } from "../router";
|
|
4
|
+
import { useModal } from "../hooks/useModal";
|
|
5
|
+
const variantClasses = {
|
|
6
|
+
primary: "bg-[var(--color-primary)] text-white shadow-md hover:shadow-lg hover:brightness-110",
|
|
7
|
+
secondary: "bg-[var(--color-secondary)] text-white shadow-md hover:shadow-lg hover:brightness-110",
|
|
8
|
+
outline: "border-2 border-[var(--color-primary)] text-[var(--color-primary)] bg-transparent hover:bg-[var(--color-primary)]/5",
|
|
9
|
+
ghost: "text-[var(--color-primary)] bg-transparent hover:bg-[var(--color-primary)]/5",
|
|
10
|
+
};
|
|
11
|
+
const sizeClasses = {
|
|
12
|
+
sm: "px-4 py-2 text-sm",
|
|
13
|
+
md: "px-6 py-3 text-sm",
|
|
14
|
+
lg: "px-8 py-4 text-base",
|
|
15
|
+
};
|
|
16
|
+
export function Button({ content, variant = "primary", size = "md", fullWidth = false, action = "navigate", target, className, }) {
|
|
17
|
+
const { openModal } = useModal();
|
|
18
|
+
const handleClick = () => {
|
|
19
|
+
if (!target)
|
|
20
|
+
return;
|
|
21
|
+
switch (action) {
|
|
22
|
+
case "navigate":
|
|
23
|
+
navigate(target);
|
|
24
|
+
break;
|
|
25
|
+
case "scroll":
|
|
26
|
+
document.getElementById(target)?.scrollIntoView({ behavior: "smooth" });
|
|
27
|
+
break;
|
|
28
|
+
case "openModal":
|
|
29
|
+
openModal(target);
|
|
30
|
+
break;
|
|
31
|
+
case "externalLink":
|
|
32
|
+
window.open(target, "_blank", "noopener");
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return (_jsx("button", { onClick: handleClick, className: twMerge("inline-flex items-center justify-center rounded-[var(--radius)] font-semibold transition-all duration-200 cursor-pointer", variantClasses[variant] ?? variantClasses.primary, sizeClasses[size] ?? sizeClasses.md, fullWidth && "w-full", className), children: content }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAY7C,MAAM,cAAc,GAA2B;IAC7C,OAAO,EACL,qFAAqF;IACvF,SAAS,EACP,uFAAuF;IACzF,OAAO,EACL,qHAAqH;IACvH,KAAK,EACH,8EAA8E;CACjF,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,KAAK,EACjB,MAAM,GAAG,UAAU,EACnB,MAAM,EACN,SAAS,GACG;IACZ,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU;gBACb,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACjB,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxE,MAAM;YACR,KAAK,WAAW;gBACd,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM;QACV,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,iBACE,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,OAAO,CAChB,0HAA0H,EAC1H,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO,EACjD,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,EACnC,SAAS,IAAI,QAAQ,EACrB,SAAS,CACV,YAEA,OAAO,GACD,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface CTABannerProps {
|
|
2
|
+
/** Background gradient or solid color */
|
|
3
|
+
bg?: string;
|
|
4
|
+
/** Gradient direction for two-color gradients */
|
|
5
|
+
gradient?: string;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function CTABanner({ bg, gradient, children, className, }: CTABannerProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=CTABanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CTABanner.d.ts","sourceRoot":"","sources":["../../src/components/CTABanner.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAsBhB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
export function CTABanner({ bg, gradient, children, className, }) {
|
|
4
|
+
const style = {};
|
|
5
|
+
if (gradient) {
|
|
6
|
+
style.background = gradient;
|
|
7
|
+
}
|
|
8
|
+
else if (bg) {
|
|
9
|
+
style.backgroundColor = bg;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
style.background =
|
|
13
|
+
"linear-gradient(135deg, var(--color-primary), var(--color-accent, var(--color-primary)))";
|
|
14
|
+
}
|
|
15
|
+
return (_jsx("div", { className: twMerge("w-full py-16 md:py-20 px-4", className), style: style, children: _jsx("div", { className: "max-w-3xl mx-auto text-center", children: children }) }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=CTABanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CTABanner.js","sourceRoot":"","sources":["../../src/components/CTABanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAWzC,MAAM,UAAU,SAAS,CAAC,EACxB,EAAE,EACF,QAAQ,EACR,QAAQ,EACR,SAAS,GACM;IACf,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC9B,CAAC;SAAM,IAAI,EAAE,EAAE,CAAC;QACd,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,UAAU;YACd,0FAA0F,CAAC;IAC/F,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAChB,4BAA4B,EAC5B,SAAS,CACV,EACD,KAAK,EAAE,KAAK,YAEZ,cAAK,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAO,GAC3D,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface ContactFormProps {
|
|
2
|
+
propertyId?: string;
|
|
3
|
+
source?: string;
|
|
4
|
+
fields?: string[];
|
|
5
|
+
submitLabel?: string;
|
|
6
|
+
successMessage?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function ContactForm({ propertyId: propertyIdProp, source, fields, submitLabel, successMessage, className, }: ContactFormProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ContactForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactForm.d.ts","sourceRoot":"","sources":["../../src/components/ContactForm.tsx"],"names":[],"mappings":"AAKA,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EAAE,cAAc,EAC1B,MAAkB,EAClB,MAAuB,EACvB,WAAoB,EACpB,cAA6C,EAC7C,SAAS,GACV,EAAE,gBAAgB,2CAoIlB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { twMerge } from "tailwind-merge";
|
|
4
|
+
import { useSiteConfig } from "../hooks/useSiteConfig";
|
|
5
|
+
import { useAuth } from "../hooks/useAuth";
|
|
6
|
+
const DEFAULT_FIELDS = [
|
|
7
|
+
"firstName",
|
|
8
|
+
"lastName",
|
|
9
|
+
"email",
|
|
10
|
+
"phone",
|
|
11
|
+
"moveInDate",
|
|
12
|
+
"bedrooms",
|
|
13
|
+
"message",
|
|
14
|
+
];
|
|
15
|
+
const fieldLabels = {
|
|
16
|
+
firstName: "First Name",
|
|
17
|
+
lastName: "Last Name",
|
|
18
|
+
email: "Email",
|
|
19
|
+
phone: "Phone",
|
|
20
|
+
moveInDate: "Desired Move-in Date",
|
|
21
|
+
bedrooms: "Bedrooms",
|
|
22
|
+
message: "Message",
|
|
23
|
+
};
|
|
24
|
+
const requiredFields = new Set(["firstName", "lastName", "email", "phone"]);
|
|
25
|
+
export function ContactForm({ propertyId: propertyIdProp, source = "website", fields = DEFAULT_FIELDS, submitLabel = "Send", successMessage = "Thanks! We'll be in touch.", className, }) {
|
|
26
|
+
const config = useSiteConfig();
|
|
27
|
+
const { authenticatedFetch } = useAuth();
|
|
28
|
+
const propertyId = propertyIdProp ?? config.property?.propertyId;
|
|
29
|
+
const apiBaseUrl = config.property?.apiBaseUrl ?? "";
|
|
30
|
+
const [values, setValues] = useState({});
|
|
31
|
+
const [status, setStatus] = useState("idle");
|
|
32
|
+
const [errorMsg, setErrorMsg] = useState("");
|
|
33
|
+
const set = (field, value) => setValues((prev) => ({ ...prev, [field]: value }));
|
|
34
|
+
const handleSubmit = async (e) => {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
if (!propertyId)
|
|
37
|
+
return;
|
|
38
|
+
setStatus("submitting");
|
|
39
|
+
setErrorMsg("");
|
|
40
|
+
try {
|
|
41
|
+
const body = {
|
|
42
|
+
property_id: propertyId,
|
|
43
|
+
source,
|
|
44
|
+
};
|
|
45
|
+
if (values.firstName)
|
|
46
|
+
body.first_name = values.firstName;
|
|
47
|
+
if (values.lastName)
|
|
48
|
+
body.last_name = values.lastName;
|
|
49
|
+
if (values.email)
|
|
50
|
+
body.email = values.email;
|
|
51
|
+
if (values.phone)
|
|
52
|
+
body.phone = values.phone;
|
|
53
|
+
if (values.moveInDate)
|
|
54
|
+
body.move_in_date = values.moveInDate;
|
|
55
|
+
if (values.bedrooms)
|
|
56
|
+
body.bedrooms = Number(values.bedrooms);
|
|
57
|
+
// message is not a field on the prospect API -- could be added as a note
|
|
58
|
+
const res = await authenticatedFetch(`${apiBaseUrl}/v1/prospect`, {
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: { "Content-Type": "application/json" },
|
|
61
|
+
body: JSON.stringify(body),
|
|
62
|
+
});
|
|
63
|
+
if (!res.ok)
|
|
64
|
+
throw new Error(`Request failed: ${res.status}`);
|
|
65
|
+
setStatus("success");
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
setErrorMsg("Something went wrong. Please try again.");
|
|
69
|
+
setStatus("error");
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
if (status === "success") {
|
|
73
|
+
return (_jsx("div", { className: twMerge("text-center py-8", className), children: _jsx("p", { className: "text-[var(--color-primary)] font-medium", children: successMessage }) }));
|
|
74
|
+
}
|
|
75
|
+
return (_jsxs("form", { onSubmit: handleSubmit, className: twMerge("flex flex-col gap-4", className), children: [fields.map((field) => {
|
|
76
|
+
const label = fieldLabels[field] ?? field;
|
|
77
|
+
const isRequired = requiredFields.has(field);
|
|
78
|
+
if (field === "bedrooms") {
|
|
79
|
+
return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-sm font-medium text-[var(--color-foreground)]", children: [label, isRequired && " *"] }), _jsxs("select", { value: values.bedrooms ?? "", onChange: (e) => set("bedrooms", e.target.value), className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-2 text-sm", children: [_jsx("option", { value: "", children: "Select" }), _jsx("option", { value: "0", children: "Studio" }), _jsx("option", { value: "1", children: "1 Bedroom" }), _jsx("option", { value: "2", children: "2 Bedrooms" }), _jsx("option", { value: "3", children: "3 Bedrooms" }), _jsx("option", { value: "4", children: "4 Bedrooms" })] })] }, field));
|
|
80
|
+
}
|
|
81
|
+
if (field === "message") {
|
|
82
|
+
return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-sm font-medium text-[var(--color-foreground)]", children: label }), _jsx("textarea", { value: values.message ?? "", onChange: (e) => set("message", e.target.value), rows: 3, className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-2 text-sm resize-y" })] }, field));
|
|
83
|
+
}
|
|
84
|
+
const inputType = field === "email" ? "email" :
|
|
85
|
+
field === "phone" ? "tel" :
|
|
86
|
+
field === "moveInDate" ? "date" :
|
|
87
|
+
"text";
|
|
88
|
+
return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-sm font-medium text-[var(--color-foreground)]", children: [label, isRequired && " *"] }), _jsx("input", { type: inputType, value: values[field] ?? "", onChange: (e) => set(field, e.target.value), required: isRequired, className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-2 text-sm" })] }, field));
|
|
89
|
+
}), status === "error" && (_jsx("p", { className: "text-red-600 text-sm", children: errorMsg })), _jsx("button", { type: "submit", disabled: status === "submitting", className: "mt-2 rounded-md bg-[var(--color-primary)] px-6 py-3 text-sm font-semibold text-white hover:opacity-90 transition-opacity disabled:opacity-50 cursor-pointer", children: status === "submitting" ? "Sending..." : submitLabel })] }));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=ContactForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactForm.js","sourceRoot":"","sources":["../../src/components/ContactForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
interface ContainerProps {
|
|
2
|
+
id?: string;
|
|
2
3
|
bg?: string;
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
/** Background image URL — rendered behind content with optional overlay */
|
|
5
|
+
bgImage?: string;
|
|
6
|
+
/** Semi-transparent overlay on bgImage, e.g. "rgba(0,0,0,0.5)" */
|
|
7
|
+
bgOverlay?: string;
|
|
8
|
+
padding?: "none" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
9
|
+
/** Content max-width: narrow (640px), default (896px), wide (1152px), full (no constraint) */
|
|
10
|
+
maxWidth?: "narrow" | "default" | "wide" | "full";
|
|
5
11
|
children?: React.ReactNode;
|
|
6
12
|
className?: string;
|
|
7
13
|
}
|
|
8
|
-
export declare function Container({ bg, padding,
|
|
14
|
+
export declare function Container({ id, bg, bgImage, bgOverlay, padding, maxWidth, children, className, }: ContainerProps): import("react/jsx-runtime").JSX.Element;
|
|
9
15
|
export {};
|
|
10
16
|
//# sourceMappingURL=Container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACrD,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,EAAE,EACF,OAAO,EACP,SAAS,EACT,OAAc,EACd,QAAoB,EACpB,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAoChB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { twMerge } from "tailwind-merge";
|
|
3
3
|
const paddingClasses = {
|
|
4
4
|
none: "py-0",
|
|
@@ -6,13 +6,24 @@ const paddingClasses = {
|
|
|
6
6
|
md: "py-8 px-4",
|
|
7
7
|
lg: "py-16 px-4",
|
|
8
8
|
xl: "py-24 px-4",
|
|
9
|
+
"2xl": "py-32 px-4",
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const maxWidthClasses = {
|
|
12
|
+
narrow: "max-w-2xl mx-auto",
|
|
13
|
+
default: "max-w-4xl mx-auto",
|
|
14
|
+
wide: "max-w-6xl mx-auto",
|
|
15
|
+
full: "w-full",
|
|
16
|
+
};
|
|
17
|
+
export function Container({ id, bg, bgImage, bgOverlay, padding = "lg", maxWidth = "default", children, className, }) {
|
|
18
|
+
const defaults = ["w-full", paddingClasses[padding] ?? paddingClasses.lg].join(" ");
|
|
19
|
+
const outerStyle = {};
|
|
20
|
+
if (bg)
|
|
21
|
+
outerStyle.backgroundColor = bg;
|
|
22
|
+
if (bgImage) {
|
|
23
|
+
outerStyle.backgroundImage = `url(${bgImage})`;
|
|
24
|
+
outerStyle.backgroundSize = "cover";
|
|
25
|
+
outerStyle.backgroundPosition = "center";
|
|
26
|
+
}
|
|
27
|
+
return (_jsxs("div", { id: id, className: twMerge(defaults, "relative", className), style: outerStyle, children: [bgImage && bgOverlay && (_jsx("div", { className: "absolute inset-0", style: { backgroundColor: bgOverlay } })), _jsx("div", { className: twMerge("relative", maxWidthClasses[maxWidth] ?? maxWidthClasses.default), children: children })] }));
|
|
17
28
|
}
|
|
18
29
|
//# sourceMappingURL=Container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAgBzC,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;CACpB,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC9C,MAAM,EAAE,mBAAmB;IAC3B,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EACxB,EAAE,EACF,EAAE,EACF,OAAO,EACP,SAAS,EACT,OAAO,GAAG,IAAI,EACd,QAAQ,GAAG,SAAS,EACpB,QAAQ,EACR,SAAS,GACM;IACf,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CAC5E,GAAG,CACJ,CAAC;IAEF,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,IAAI,EAAE;QAAE,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,eAAe,GAAG,OAAO,OAAO,GAAG,CAAC;QAC/C,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,UAAU,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IAC3C,CAAC;IAED,OAAO,CACL,eACE,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EACnD,KAAK,EAAE,UAAU,aAGhB,OAAO,IAAI,SAAS,IAAI,CACvB,cACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,GACrC,CACH,EACD,cACE,SAAS,EAAE,OAAO,CAChB,UAAU,EACV,eAAe,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,OAAO,CACrD,YAEA,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface DividerProps {
|
|
2
|
+
label?: string;
|
|
3
|
+
color?: string;
|
|
4
|
+
spacing?: "sm" | "md" | "lg";
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function Divider({ label, color, spacing, className }: DividerProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=Divider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.d.ts","sourceRoot":"","sources":["../../src/components/Divider.tsx"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAc,EAAE,SAAS,EAAE,EAAE,YAAY,2CA4BhF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
const spacingClasses = {
|
|
4
|
+
sm: "my-4",
|
|
5
|
+
md: "my-8",
|
|
6
|
+
lg: "my-16",
|
|
7
|
+
};
|
|
8
|
+
export function Divider({ label, color, spacing = "md", className }) {
|
|
9
|
+
const lineColor = color ?? "var(--color-muted)";
|
|
10
|
+
if (label) {
|
|
11
|
+
return (_jsxs("div", { className: twMerge("flex items-center gap-4", spacingClasses[spacing] ?? spacingClasses.md, className), children: [_jsx("div", { className: "flex-1 h-px", style: { backgroundColor: lineColor, opacity: 0.2 } }), _jsx("span", { className: "text-xs font-semibold uppercase tracking-widest text-[var(--color-muted)]", children: label }), _jsx("div", { className: "flex-1 h-px", style: { backgroundColor: lineColor, opacity: 0.2 } })] }));
|
|
12
|
+
}
|
|
13
|
+
return (_jsx("div", { className: twMerge(spacingClasses[spacing] ?? spacingClasses.md, className), children: _jsx("div", { className: "h-px w-full", style: { backgroundColor: lineColor, opacity: 0.15 } }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=Divider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.js","sourceRoot":"","sources":["../../src/components/Divider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AASzC,MAAM,cAAc,GAA2B;IAC7C,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,EAAgB;IAC/E,MAAM,SAAS,GAAG,KAAK,IAAI,oBAAoB,CAAC;IAEhD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,eACE,SAAS,EAAE,OAAO,CAChB,yBAAyB,EACzB,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE,EAC5C,SAAS,CACV,aAED,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAI,EACpF,eAAM,SAAS,EAAC,2EAA2E,YACxF,KAAK,GACD,EACP,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAI,IAChF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,YAE3E,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAI,GACjF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EliseChat.d.ts","sourceRoot":"","sources":["../../src/components/EliseChat.tsx"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,SAAS,CAAC,EACxB,UAAU,EACV,SAA8B,GAC/B,EAAE,cAAc,QAqBhB"}
|