@meetelise/studio-components 0.0.4 → 0.0.6
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 +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +72 -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/dist/utils/resolveConfig.d.ts +53 -0
- package/dist/utils/resolveConfig.d.ts.map +1 -0
- package/dist/utils/resolveConfig.js +291 -0
- package/dist/utils/resolveConfig.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
const aspectClasses = {
|
|
4
|
+
"16/9": "aspect-[16/9]",
|
|
5
|
+
"4/3": "aspect-[4/3]",
|
|
6
|
+
"1/1": "aspect-square",
|
|
7
|
+
auto: "",
|
|
8
|
+
};
|
|
9
|
+
export function VideoPlayer({ src, poster, controls = true, autoplay = false, loop = false, aspect = "16/9", className, }) {
|
|
10
|
+
if (!src)
|
|
11
|
+
return null;
|
|
12
|
+
return (_jsx("div", { className: twMerge("w-full overflow-hidden rounded-lg bg-black", aspectClasses[aspect] ?? aspectClasses["16/9"], className), children: _jsx("video", { src: src, poster: poster, controls: controls, autoPlay: autoplay, loop: loop, muted: autoplay, playsInline: true, className: "w-full h-full object-cover" }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=VideoPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoPlayer.js","sourceRoot":"","sources":["../../src/components/VideoPlayer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAkBzC,MAAM,aAAa,GAA2B;IAC5C,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAC1B,GAAG,EACH,MAAM,EACN,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,KAAK,EACZ,MAAM,GAAG,MAAM,EACf,SAAS,GACQ;IACjB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,OAAO,CACL,cACE,SAAS,EAAE,OAAO,CAChB,4CAA4C,EAC5C,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,EAC9C,SAAS,CACV,YAED,gBACE,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,QAAQ,EACf,WAAW,QACX,SAAS,EAAC,4BAA4B,GACtC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface VirtualTourEmbedProps {
|
|
2
|
+
src: string;
|
|
3
|
+
aspectRatio?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function VirtualTourEmbed({ src, aspectRatio, title, className, }: VirtualTourEmbedProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=VirtualTourEmbed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualTourEmbed.d.ts","sourceRoot":"","sources":["../../src/components/VirtualTourEmbed.tsx"],"names":[],"mappings":"AAAA,UAAU,qBAAqB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,WAAoB,EACpB,KAAsB,EACtB,SAAc,GACf,EAAE,qBAAqB,2CAiBvB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export function VirtualTourEmbed({ src, aspectRatio = "16/9", title = "Virtual Tour", className = "", }) {
|
|
3
|
+
return (_jsx("div", { className: `w-full overflow-hidden rounded-[var(--radius)] ${className}`, style: { aspectRatio }, children: _jsx("iframe", { src: src, width: "100%", height: "100%", style: { border: 0 }, allowFullScreen: true, loading: "lazy", title: title }) }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=VirtualTourEmbed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualTourEmbed.js","sourceRoot":"","sources":["../../src/components/VirtualTourEmbed.tsx"],"names":[],"mappings":";AAOA,MAAM,UAAU,gBAAgB,CAAC,EAC/B,GAAG,EACH,WAAW,GAAG,MAAM,EACpB,KAAK,GAAG,cAAc,EACtB,SAAS,GAAG,EAAE,GACQ;IACtB,OAAO,CACL,cACE,SAAS,EAAE,kDAAkD,SAAS,EAAE,EACxE,KAAK,EAAE,EAAE,WAAW,EAAE,YAEtB,iBACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EACpB,eAAe,QACf,OAAO,EAAC,MAAM,EACd,KAAK,EAAE,KAAK,GACZ,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentBrowser.d.ts","sourceRoot":"","sources":["../../../src/components/browser/ComponentBrowser.tsx"],"names":[],"mappings":"AAiMA,wBAAgB,gBAAgB,4CAU/B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
|
+
import { componentMeta, getComponentsByCategory, CATEGORIES } from "./componentMeta";
|
|
4
|
+
import { ComponentShowcase } from "./ComponentShowcase";
|
|
5
|
+
import { navigate, useCurrentPath } from "../../router";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Category icons (simple SVGs)
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const CATEGORY_ICONS = {
|
|
10
|
+
"Heroes & Media": _jsx("path", { d: "M15 10l4.553-2.276A1 1 0 0 1 21 8.618v6.764a1 1 0 0 1-1.447.894L15 14M5 18h8a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2z" }),
|
|
11
|
+
"Content Cards": _jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("path", { d: "M3 9h18M9 21V9" })] }),
|
|
12
|
+
"Text & Typography": _jsx("path", { d: "M4 7V4h16v3M9 20h6M12 4v16" }),
|
|
13
|
+
Layout: _jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "3", width: "7", height: "7" }), _jsx("rect", { x: "14", y: "3", width: "7", height: "7" }), _jsx("rect", { x: "14", y: "14", width: "7", height: "7" }), _jsx("rect", { x: "3", y: "14", width: "7", height: "7" })] }),
|
|
14
|
+
Navigation: _jsx(_Fragment, { children: _jsx("path", { d: "M3 12h18M3 6h18M3 18h18" }) }),
|
|
15
|
+
"Data & Amenities": _jsx(_Fragment, { children: _jsx("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" }) }),
|
|
16
|
+
"Units & Floor Plans": _jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("path", { d: "M3 9h18M9 21V9" })] }),
|
|
17
|
+
Forms: _jsxs(_Fragment, { children: [_jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), _jsx("path", { d: "M14 2v6h6M16 13H8M16 17H8M10 9H8" })] }),
|
|
18
|
+
};
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Browse page
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
function BrowsePage() {
|
|
23
|
+
const [search, setSearch] = useState("");
|
|
24
|
+
const byCategory = useMemo(() => getComponentsByCategory(), []);
|
|
25
|
+
const filteredByCategory = useMemo(() => {
|
|
26
|
+
if (!search.trim())
|
|
27
|
+
return byCategory;
|
|
28
|
+
const q = search.toLowerCase();
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const [cat, names] of Object.entries(byCategory)) {
|
|
31
|
+
const filtered = names.filter((n) => n.toLowerCase().includes(q) ||
|
|
32
|
+
componentMeta[n]?.description.toLowerCase().includes(q));
|
|
33
|
+
if (filtered.length > 0)
|
|
34
|
+
result[cat] = filtered;
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}, [byCategory, search]);
|
|
38
|
+
const totalCount = Object.values(filteredByCategory).reduce((sum, arr) => sum + arr.length, 0);
|
|
39
|
+
return (_jsxs("div", { className: "min-h-screen bg-gray-50", children: [_jsx("div", { className: "bg-white border-b border-gray-200", children: _jsxs("div", { className: "max-w-6xl mx-auto px-4 py-8", children: [_jsx("h1", { className: "text-3xl font-bold text-gray-900", children: "Component Browser" }), _jsxs("p", { className: "text-gray-500 mt-1", children: [totalCount, " components available \u2014 click any to see live previews, prop controls, and copyable site.json snippets."] }), _jsxs("div", { className: "mt-4 relative max-w-md", children: [_jsxs("svg", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-gray-400", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "M21 21l-4.35-4.35" })] }), _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search components...", className: "w-full pl-9 pr-4 py-2 text-sm border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent" })] })] }) }), _jsx("div", { className: "max-w-6xl mx-auto px-4 py-8 space-y-10", children: CATEGORIES.map((cat) => {
|
|
40
|
+
const names = filteredByCategory[cat];
|
|
41
|
+
if (!names || names.length === 0)
|
|
42
|
+
return null;
|
|
43
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "text-gray-400", children: CATEGORY_ICONS[cat] }), _jsx("h2", { className: "text-lg font-semibold text-gray-900", children: cat }), _jsx("span", { className: "text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full", children: names.length })] }), _jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4", children: names.map((name) => {
|
|
44
|
+
const meta = componentMeta[name];
|
|
45
|
+
if (!meta)
|
|
46
|
+
return null;
|
|
47
|
+
return (_jsxs("button", { onClick: () => navigate(`/components/${name}`), className: "group text-left bg-white border border-gray-200 rounded-xl p-4 hover:border-indigo-300 hover:shadow-md transition-all cursor-pointer", children: [_jsxs("div", { className: "flex items-start justify-between", children: [_jsxs("div", { children: [_jsx("h3", { className: "font-semibold text-gray-900 group-hover:text-indigo-600 transition-colors", children: name }), _jsx("p", { className: "text-sm text-gray-500 mt-1 line-clamp-2", children: meta.description })] }), _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "text-gray-300 group-hover:text-indigo-400 transition-colors mt-1 shrink-0", children: _jsx("path", { d: "M9 18l6-6-6-6" }) })] }), _jsxs("div", { className: "flex gap-1.5 mt-3 flex-wrap", children: [_jsxs("span", { className: "text-xs px-1.5 py-0.5 bg-gray-50 text-gray-500 rounded", children: [meta.presets.length, " preset", meta.presets.length !== 1 ? "s" : ""] }), meta.hasChildren && (_jsx("span", { className: "text-xs px-1.5 py-0.5 bg-blue-50 text-blue-600 rounded", children: "children" })), meta.needsApi && (_jsx("span", { className: "text-xs px-1.5 py-0.5 bg-amber-50 text-amber-600 rounded", children: "API" })), Object.keys(meta.props).length > 0 && (_jsxs("span", { className: "text-xs px-1.5 py-0.5 bg-gray-50 text-gray-500 rounded", children: [Object.keys(meta.props).length, " props"] }))] })] }, name));
|
|
48
|
+
}) })] }, cat));
|
|
49
|
+
}) })] }));
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Detail page
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
function DetailPage({ componentName }) {
|
|
55
|
+
const meta = componentMeta[componentName];
|
|
56
|
+
if (!meta) {
|
|
57
|
+
return (_jsx("div", { className: "min-h-screen bg-gray-50 flex items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-2xl font-bold text-gray-900", children: "Component not found" }), _jsxs("p", { className: "text-gray-500 mt-2", children: ["\u201C", componentName, "\u201D is not in the registry."] }), _jsx("button", { onClick: () => navigate("/"), className: "mt-4 text-indigo-600 hover:underline cursor-pointer", children: "\u2190 Back to Browser" })] }) }));
|
|
58
|
+
}
|
|
59
|
+
return (_jsxs("div", { className: "min-h-screen bg-gray-50", children: [_jsx("div", { className: "bg-white border-b border-gray-200", children: _jsxs("div", { className: "max-w-5xl mx-auto px-4 py-3 flex items-center gap-3", children: [_jsxs("button", { onClick: () => navigate("/"), className: "text-sm text-gray-500 hover:text-gray-900 cursor-pointer flex items-center gap-1", children: [_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 18l-6-6 6-6" }) }), "All Components"] }), _jsx("span", { className: "text-gray-300", children: "/" }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: componentName })] }) }), _jsx("div", { className: "max-w-5xl mx-auto px-4 py-8", children: _jsx(ComponentShowcase, { name: componentName, meta: meta }) })] }));
|
|
60
|
+
}
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Router
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
export function ComponentBrowser() {
|
|
65
|
+
const path = useCurrentPath();
|
|
66
|
+
// Match /components/:name
|
|
67
|
+
if (path.startsWith("/components/")) {
|
|
68
|
+
const componentName = path.replace("/components/", "");
|
|
69
|
+
return _jsx(DetailPage, { componentName: componentName });
|
|
70
|
+
}
|
|
71
|
+
return _jsx(BrowsePage, {});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=ComponentBrowser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentBrowser.js","sourceRoot":"","sources":["../../../src/components/browser/ComponentBrowser.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ComponentMeta } from "./componentMeta";
|
|
2
|
+
interface ComponentShowcaseProps {
|
|
3
|
+
name: string;
|
|
4
|
+
meta: ComponentMeta;
|
|
5
|
+
}
|
|
6
|
+
export declare function ComponentShowcase({ name, meta }: ComponentShowcaseProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ComponentShowcase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentShowcase.d.ts","sourceRoot":"","sources":["../../../src/components/browser/ComponentShowcase.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,iBAAiB,CAAC;AAoKlF,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,sBAAsB,2CAgIvE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
|
+
import { componentRegistry } from "../registry";
|
|
4
|
+
import { renderNode } from "../../renderer";
|
|
5
|
+
import { ThemeProvider } from "../ThemeProvider";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Theme presets for the switcher
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
const THEME_PRESETS = {
|
|
10
|
+
Modern: {
|
|
11
|
+
colors: { background: "#f8fafc", foreground: "#1e293b", primary: "#4f46e5", secondary: "#64748b", accent: "#0ea5e9", muted: "#94a3b8" },
|
|
12
|
+
fonts: "modern",
|
|
13
|
+
radius: "lg",
|
|
14
|
+
shadow: "soft",
|
|
15
|
+
},
|
|
16
|
+
Editorial: {
|
|
17
|
+
colors: { background: "#fafaf9", foreground: "#1c1917", primary: "#0f766e", secondary: "#57534e", accent: "#0d9488", muted: "#a8a29e" },
|
|
18
|
+
fonts: "editorial",
|
|
19
|
+
radius: "lg",
|
|
20
|
+
shadow: "soft",
|
|
21
|
+
},
|
|
22
|
+
Clean: {
|
|
23
|
+
colors: { background: "#ffffff", foreground: "#18181b", primary: "#2563eb", secondary: "#71717a", accent: "#3b82f6", muted: "#a1a1aa" },
|
|
24
|
+
fonts: "clean",
|
|
25
|
+
radius: "sm",
|
|
26
|
+
shadow: "none",
|
|
27
|
+
},
|
|
28
|
+
Bold: {
|
|
29
|
+
colors: { background: "#0f172a", foreground: "#f1f5f9", primary: "#f59e0b", secondary: "#94a3b8", accent: "#eab308", muted: "#64748b" },
|
|
30
|
+
fonts: "bold",
|
|
31
|
+
radius: "none",
|
|
32
|
+
shadow: "crisp",
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Prop Controls
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
function PropControl({ name, schema, value, onChange, }) {
|
|
39
|
+
const t = schema.type;
|
|
40
|
+
if (t.kind === "boolean") {
|
|
41
|
+
return (_jsxs("label", { className: "flex items-center justify-between gap-2 py-1.5", children: [_jsx("span", { className: "text-sm text-gray-600", children: schema.label ?? name }), _jsx("input", { type: "checkbox", checked: Boolean(value ?? t.default), onChange: (e) => onChange(name, e.target.checked), className: "w-4 h-4 accent-[var(--color-primary)]" })] }));
|
|
42
|
+
}
|
|
43
|
+
if (t.kind === "enum") {
|
|
44
|
+
const current = value ?? t.default;
|
|
45
|
+
return (_jsxs("label", { className: "flex items-center justify-between gap-2 py-1.5", children: [_jsx("span", { className: "text-sm text-gray-600", children: schema.label ?? name }), _jsx("div", { className: "flex gap-1 flex-wrap justify-end", children: t.options.map((opt) => (_jsx("button", { onClick: () => onChange(name, opt), className: `px-2 py-0.5 text-xs rounded-md cursor-pointer transition-colors ${String(current) === String(opt)
|
|
46
|
+
? "bg-indigo-600 text-white"
|
|
47
|
+
: "bg-gray-100 text-gray-600 hover:bg-gray-200"}`, children: String(opt) }, String(opt)))) })] }));
|
|
48
|
+
}
|
|
49
|
+
if (t.kind === "string") {
|
|
50
|
+
return (_jsxs("label", { className: "flex items-center justify-between gap-2 py-1.5", children: [_jsx("span", { className: "text-sm text-gray-600 shrink-0", children: schema.label ?? name }), _jsx("input", { type: "text", value: String(value ?? t.default ?? ""), onChange: (e) => onChange(name, e.target.value), placeholder: t.placeholder, className: "text-sm border border-gray-200 rounded px-2 py-1 w-48 text-right" })] }));
|
|
51
|
+
}
|
|
52
|
+
if (t.kind === "number") {
|
|
53
|
+
return (_jsxs("label", { className: "flex items-center justify-between gap-2 py-1.5", children: [_jsx("span", { className: "text-sm text-gray-600", children: schema.label ?? name }), _jsx("input", { type: "number", value: Number(value ?? t.default ?? 0), min: t.min, max: t.max, onChange: (e) => onChange(name, Number(e.target.value)), className: "text-sm border border-gray-200 rounded px-2 py-1 w-20 text-right" })] }));
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// JSON Preview
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
function JsonPreview({ componentName, props, children }) {
|
|
61
|
+
const [copied, setCopied] = useState(false);
|
|
62
|
+
const json = { type: componentName, props };
|
|
63
|
+
if (children && children.length > 0) {
|
|
64
|
+
json.children = children;
|
|
65
|
+
}
|
|
66
|
+
const text = JSON.stringify(json, null, 2);
|
|
67
|
+
const handleCopy = () => {
|
|
68
|
+
navigator.clipboard.writeText(text);
|
|
69
|
+
setCopied(true);
|
|
70
|
+
setTimeout(() => setCopied(false), 2000);
|
|
71
|
+
};
|
|
72
|
+
return (_jsxs("div", { className: "relative", children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsx("span", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider", children: "site.json snippet" }), _jsx("button", { onClick: handleCopy, className: "text-xs px-2 py-1 rounded bg-gray-100 hover:bg-gray-200 text-gray-600 cursor-pointer transition-colors", children: copied ? "Copied!" : "Copy" })] }), _jsx("pre", { className: "text-xs bg-gray-50 border border-gray-200 rounded-lg p-3 overflow-x-auto max-h-64 overflow-y-auto", children: _jsx("code", { children: text }) })] }));
|
|
73
|
+
}
|
|
74
|
+
export function ComponentShowcase({ name, meta }) {
|
|
75
|
+
const [activePresetIdx, setActivePresetIdx] = useState(0);
|
|
76
|
+
const [themeName, setThemeName] = useState("Modern");
|
|
77
|
+
const [overrides, setOverrides] = useState({});
|
|
78
|
+
const activePreset = meta.presets[activePresetIdx] ?? meta.presets[0];
|
|
79
|
+
const theme = THEME_PRESETS[themeName] ?? THEME_PRESETS.Modern;
|
|
80
|
+
// Merge preset props with user overrides
|
|
81
|
+
const currentProps = useMemo(() => ({ ...activePreset?.props, ...overrides }), [activePreset, overrides]);
|
|
82
|
+
const handlePropChange = (propName, value) => {
|
|
83
|
+
setOverrides((prev) => ({ ...prev, [propName]: value }));
|
|
84
|
+
};
|
|
85
|
+
const handlePresetChange = (idx) => {
|
|
86
|
+
setActivePresetIdx(idx);
|
|
87
|
+
setOverrides({}); // Reset overrides on preset change
|
|
88
|
+
};
|
|
89
|
+
// Build SiteNode tree for rendering
|
|
90
|
+
const siteNode = useMemo(() => {
|
|
91
|
+
const node = { type: name, props: currentProps };
|
|
92
|
+
if (activePreset?.children) {
|
|
93
|
+
node.children = activePreset.children;
|
|
94
|
+
}
|
|
95
|
+
return node;
|
|
96
|
+
}, [name, currentProps, activePreset]);
|
|
97
|
+
const Component = componentRegistry[name];
|
|
98
|
+
return (_jsxs("div", { className: "flex flex-col gap-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-3xl font-bold text-gray-900", children: name }), _jsx("p", { className: "text-gray-500 mt-1", children: meta.description }), meta.needsApi && (_jsxs("span", { className: "inline-flex items-center gap-1 mt-2 text-xs text-amber-700 bg-amber-50 px-2 py-1 rounded-full", children: [_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }) }), "Requires API connection for live data"] }))] }), meta.presets.length > 1 && (_jsx("div", { className: "flex flex-wrap gap-2", children: meta.presets.map((preset, i) => (_jsx("button", { onClick: () => handlePresetChange(i), className: `px-3 py-1.5 text-sm rounded-lg cursor-pointer transition-colors ${i === activePresetIdx
|
|
99
|
+
? "bg-indigo-600 text-white"
|
|
100
|
+
: "bg-gray-100 text-gray-700 hover:bg-gray-200"}`, children: preset.label }, preset.label))) })), _jsxs("div", { className: "border border-gray-200 rounded-xl overflow-hidden", children: [_jsxs("div", { className: "bg-gray-50 px-4 py-2 border-b border-gray-200 flex items-center justify-between", children: [_jsx("span", { className: "text-xs text-gray-500 font-medium", children: "Preview" }), _jsx("div", { className: "flex gap-1", children: Object.keys(THEME_PRESETS).map((t) => (_jsx("button", { onClick: () => setThemeName(t), className: `px-2 py-0.5 text-xs rounded cursor-pointer transition-colors ${t === themeName
|
|
101
|
+
? "bg-indigo-600 text-white"
|
|
102
|
+
: "bg-white text-gray-500 border border-gray-200 hover:bg-gray-50"}`, children: t }, t))) })] }), _jsx("div", { className: "min-h-[120px]", children: _jsx(ThemeProvider, { theme: theme, children: _jsx("div", { className: "p-6", children: Component ? renderNode(siteNode) : _jsxs("p", { className: "text-red-500", children: ["Component not found: ", name] }) }) }) })] }), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6", children: [Object.keys(meta.props).length > 0 && (_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold text-gray-900 mb-3 uppercase tracking-wider", children: "Props" }), _jsx("div", { className: "bg-white border border-gray-200 rounded-xl p-4 divide-y divide-gray-100", children: Object.entries(meta.props).map(([propName, schema]) => (_jsx(PropControl, { name: propName, schema: schema, value: currentProps[propName], onChange: handlePropChange }, propName))) })] })), _jsxs("div", { children: [_jsx("h3", { className: "text-sm font-semibold text-gray-900 mb-3 uppercase tracking-wider", children: "Code" }), _jsx(JsonPreview, { componentName: name, props: currentProps, children: activePreset?.children })] })] })] }));
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=ComponentShowcase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentShowcase.js","sourceRoot":"","sources":["../../../src/components/browser/ComponentShowcase.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type PropType = {
|
|
2
|
+
kind: "boolean";
|
|
3
|
+
default?: boolean;
|
|
4
|
+
} | {
|
|
5
|
+
kind: "enum";
|
|
6
|
+
options: (string | number)[];
|
|
7
|
+
default?: string | number;
|
|
8
|
+
} | {
|
|
9
|
+
kind: "string";
|
|
10
|
+
default?: string;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "number";
|
|
14
|
+
min?: number;
|
|
15
|
+
max?: number;
|
|
16
|
+
default?: number;
|
|
17
|
+
};
|
|
18
|
+
export interface PropSchema {
|
|
19
|
+
type: PropType;
|
|
20
|
+
label?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ComponentPreset {
|
|
23
|
+
label: string;
|
|
24
|
+
props: Record<string, unknown>;
|
|
25
|
+
children?: unknown[];
|
|
26
|
+
}
|
|
27
|
+
export interface ComponentMeta {
|
|
28
|
+
category: string;
|
|
29
|
+
description: string;
|
|
30
|
+
props: Record<string, PropSchema>;
|
|
31
|
+
presets: ComponentPreset[];
|
|
32
|
+
/** Whether this component accepts children (rendered via presets) */
|
|
33
|
+
hasChildren?: boolean;
|
|
34
|
+
/** Whether this component needs API access (propertyId) — shown with a note */
|
|
35
|
+
needsApi?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare const componentMeta: Record<string, ComponentMeta>;
|
|
38
|
+
export declare const CATEGORIES: readonly ["Heroes & Media", "Content Cards", "Text & Typography", "Layout", "Navigation", "Data & Amenities", "Units & Floor Plans", "Forms"];
|
|
39
|
+
export declare function getComponentsByCategory(): Record<string, string[]>;
|
|
40
|
+
//# sourceMappingURL=componentMeta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentMeta.d.ts","sourceRoot":"","sources":["../../../src/components/browser/componentMeta.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CA0tBvD,CAAC;AAMF,eAAO,MAAM,UAAU,+IASb,CAAC;AAEX,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAWlE"}
|