@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.
Files changed (211) hide show
  1. package/dist/components/Accordion.d.ts +16 -0
  2. package/dist/components/Accordion.d.ts.map +1 -0
  3. package/dist/components/Accordion.js +28 -0
  4. package/dist/components/Accordion.js.map +1 -0
  5. package/dist/components/AddressBlock.d.ts +14 -0
  6. package/dist/components/AddressBlock.d.ts.map +1 -0
  7. package/dist/components/AddressBlock.js +13 -0
  8. package/dist/components/AddressBlock.js.map +1 -0
  9. package/dist/components/AmenityList.d.ts +20 -0
  10. package/dist/components/AmenityList.d.ts.map +1 -0
  11. package/dist/components/AmenityList.js +75 -0
  12. package/dist/components/AmenityList.js.map +1 -0
  13. package/dist/components/Badge.d.ts +9 -0
  14. package/dist/components/Badge.d.ts.map +1 -0
  15. package/dist/components/Badge.js +16 -0
  16. package/dist/components/Badge.js.map +1 -0
  17. package/dist/components/Button.d.ts +12 -0
  18. package/dist/components/Button.d.ts.map +1 -0
  19. package/dist/components/Button.js +38 -0
  20. package/dist/components/Button.js.map +1 -0
  21. package/dist/components/CTABanner.d.ts +11 -0
  22. package/dist/components/CTABanner.d.ts.map +1 -0
  23. package/dist/components/CTABanner.js +17 -0
  24. package/dist/components/CTABanner.js.map +1 -0
  25. package/dist/components/ContactForm.d.ts +11 -0
  26. package/dist/components/ContactForm.d.ts.map +1 -0
  27. package/dist/components/ContactForm.js +91 -0
  28. package/dist/components/ContactForm.js.map +1 -0
  29. package/dist/components/Container.d.ts +9 -3
  30. package/dist/components/Container.d.ts.map +1 -1
  31. package/dist/components/Container.js +19 -8
  32. package/dist/components/Container.js.map +1 -1
  33. package/dist/components/Divider.d.ts +9 -0
  34. package/dist/components/Divider.d.ts.map +1 -0
  35. package/dist/components/Divider.js +15 -0
  36. package/dist/components/Divider.js.map +1 -0
  37. package/dist/components/EliseChat.d.ts +8 -0
  38. package/dist/components/EliseChat.d.ts.map +1 -0
  39. package/dist/components/EliseChat.js +22 -0
  40. package/dist/components/EliseChat.js.map +1 -0
  41. package/dist/components/FeatureCard.d.ts +15 -0
  42. package/dist/components/FeatureCard.d.ts.map +1 -0
  43. package/dist/components/FeatureCard.js +13 -0
  44. package/dist/components/FeatureCard.js.map +1 -0
  45. package/dist/components/Footer.d.ts +10 -0
  46. package/dist/components/Footer.d.ts.map +1 -0
  47. package/dist/components/Footer.js +19 -0
  48. package/dist/components/Footer.js.map +1 -0
  49. package/dist/components/Gallery.d.ts +18 -0
  50. package/dist/components/Gallery.d.ts.map +1 -0
  51. package/dist/components/Gallery.js +86 -0
  52. package/dist/components/Gallery.js.map +1 -0
  53. package/dist/components/Icon.d.ts +8 -0
  54. package/dist/components/Icon.d.ts.map +1 -0
  55. package/dist/components/Icon.js +26 -0
  56. package/dist/components/Icon.js.map +1 -0
  57. package/dist/components/Lightbox.d.ts +13 -0
  58. package/dist/components/Lightbox.d.ts.map +1 -0
  59. package/dist/components/Lightbox.js +23 -0
  60. package/dist/components/Lightbox.js.map +1 -0
  61. package/dist/components/MapEmbed.d.ts +16 -0
  62. package/dist/components/MapEmbed.d.ts.map +1 -0
  63. package/dist/components/MapEmbed.js +6 -0
  64. package/dist/components/MapEmbed.js.map +1 -0
  65. package/dist/components/Modal.d.ts +9 -0
  66. package/dist/components/Modal.d.ts.map +1 -0
  67. package/dist/components/Modal.js +19 -0
  68. package/dist/components/Modal.js.map +1 -0
  69. package/dist/components/Nav.d.ts +11 -0
  70. package/dist/components/Nav.d.ts.map +1 -0
  71. package/dist/components/Nav.js +53 -0
  72. package/dist/components/Nav.js.map +1 -0
  73. package/dist/components/ScheduleTour.d.ts +8 -0
  74. package/dist/components/ScheduleTour.d.ts.map +1 -0
  75. package/dist/components/ScheduleTour.js +158 -0
  76. package/dist/components/ScheduleTour.js.map +1 -0
  77. package/dist/components/ScrollReveal.d.ts +12 -0
  78. package/dist/components/ScrollReveal.d.ts.map +1 -0
  79. package/dist/components/ScrollReveal.js +37 -0
  80. package/dist/components/ScrollReveal.js.map +1 -0
  81. package/dist/components/Slot.d.ts +14 -0
  82. package/dist/components/Slot.d.ts.map +1 -0
  83. package/dist/components/Slot.js +5 -0
  84. package/dist/components/Slot.js.map +1 -0
  85. package/dist/components/Stat.d.ts +12 -0
  86. package/dist/components/Stat.d.ts.map +1 -0
  87. package/dist/components/Stat.js +12 -0
  88. package/dist/components/Stat.js.map +1 -0
  89. package/dist/components/Testimonial.d.ts +10 -0
  90. package/dist/components/Testimonial.d.ts.map +1 -0
  91. package/dist/components/Testimonial.js +9 -0
  92. package/dist/components/Testimonial.js.map +1 -0
  93. package/dist/components/Text.d.ts +3 -2
  94. package/dist/components/Text.d.ts.map +1 -1
  95. package/dist/components/Text.js +16 -7
  96. package/dist/components/Text.js.map +1 -1
  97. package/dist/components/ThemeProvider.d.ts.map +1 -1
  98. package/dist/components/ThemeProvider.js +85 -5
  99. package/dist/components/ThemeProvider.js.map +1 -1
  100. package/dist/components/VideoHero.d.ts +16 -0
  101. package/dist/components/VideoHero.d.ts.map +1 -0
  102. package/dist/components/VideoHero.js +19 -0
  103. package/dist/components/VideoHero.js.map +1 -0
  104. package/dist/components/VideoPlayer.d.ts +18 -0
  105. package/dist/components/VideoPlayer.d.ts.map +1 -0
  106. package/dist/components/VideoPlayer.js +14 -0
  107. package/dist/components/VideoPlayer.js.map +1 -0
  108. package/dist/components/VirtualTourEmbed.d.ts +9 -0
  109. package/dist/components/VirtualTourEmbed.d.ts.map +1 -0
  110. package/dist/components/VirtualTourEmbed.js +5 -0
  111. package/dist/components/VirtualTourEmbed.js.map +1 -0
  112. package/dist/components/browser/ComponentBrowser.d.ts +2 -0
  113. package/dist/components/browser/ComponentBrowser.d.ts.map +1 -0
  114. package/dist/components/browser/ComponentBrowser.js +73 -0
  115. package/dist/components/browser/ComponentBrowser.js.map +1 -0
  116. package/dist/components/browser/ComponentShowcase.d.ts +8 -0
  117. package/dist/components/browser/ComponentShowcase.d.ts.map +1 -0
  118. package/dist/components/browser/ComponentShowcase.js +104 -0
  119. package/dist/components/browser/ComponentShowcase.js.map +1 -0
  120. package/dist/components/browser/componentMeta.d.ts +40 -0
  121. package/dist/components/browser/componentMeta.d.ts.map +1 -0
  122. package/dist/components/browser/componentMeta.js +726 -0
  123. package/dist/components/browser/componentMeta.js.map +1 -0
  124. package/dist/components/registry.d.ts.map +1 -1
  125. package/dist/components/registry.js +56 -0
  126. package/dist/components/registry.js.map +1 -1
  127. package/dist/components/units/FloorPlanCard.d.ts +16 -0
  128. package/dist/components/units/FloorPlanCard.d.ts.map +1 -0
  129. package/dist/components/units/FloorPlanCard.js +28 -0
  130. package/dist/components/units/FloorPlanCard.js.map +1 -0
  131. package/dist/components/units/FloorplanExplorer.d.ts +21 -0
  132. package/dist/components/units/FloorplanExplorer.d.ts.map +1 -0
  133. package/dist/components/units/FloorplanExplorer.js +39 -0
  134. package/dist/components/units/FloorplanExplorer.js.map +1 -0
  135. package/dist/components/units/PricingMatrixModal.d.ts +12 -0
  136. package/dist/components/units/PricingMatrixModal.d.ts.map +1 -0
  137. package/dist/components/units/PricingMatrixModal.js +78 -0
  138. package/dist/components/units/PricingMatrixModal.js.map +1 -0
  139. package/dist/components/units/UnitCard.d.ts +12 -3
  140. package/dist/components/units/UnitCard.d.ts.map +1 -1
  141. package/dist/components/units/UnitCard.js +33 -5
  142. package/dist/components/units/UnitCard.js.map +1 -1
  143. package/dist/components/units/UnitDetail.d.ts +11 -0
  144. package/dist/components/units/UnitDetail.d.ts.map +1 -0
  145. package/dist/components/units/UnitDetail.js +16 -0
  146. package/dist/components/units/UnitDetail.js.map +1 -0
  147. package/dist/components/units/UnitExplorer.d.ts +16 -2
  148. package/dist/components/units/UnitExplorer.d.ts.map +1 -1
  149. package/dist/components/units/UnitExplorer.js +128 -27
  150. package/dist/components/units/UnitExplorer.js.map +1 -1
  151. package/dist/components/units/UnitFilters.d.ts +2 -2
  152. package/dist/components/units/UnitFilters.d.ts.map +1 -1
  153. package/dist/components/units/UnitFilters.js +2 -2
  154. package/dist/components/units/UnitFilters.js.map +1 -1
  155. package/dist/components/units/UnitPage.d.ts +8 -0
  156. package/dist/components/units/UnitPage.d.ts.map +1 -0
  157. package/dist/components/units/UnitPage.js +130 -0
  158. package/dist/components/units/UnitPage.js.map +1 -0
  159. package/dist/components/units/types.d.ts +109 -24
  160. package/dist/components/units/types.d.ts.map +1 -1
  161. package/dist/components/units/types.js +1 -0
  162. package/dist/components/units/types.js.map +1 -1
  163. package/dist/hooks/useAnalytics.d.ts +16 -0
  164. package/dist/hooks/useAnalytics.d.ts.map +1 -0
  165. package/dist/hooks/useAnalytics.js +65 -0
  166. package/dist/hooks/useAnalytics.js.map +1 -0
  167. package/dist/hooks/useAuth.d.ts.map +1 -1
  168. package/dist/hooks/useAuth.js +8 -2
  169. package/dist/hooks/useAuth.js.map +1 -1
  170. package/dist/hooks/useFees.d.ts +8 -0
  171. package/dist/hooks/useFees.d.ts.map +1 -0
  172. package/dist/hooks/useFees.js +37 -0
  173. package/dist/hooks/useFees.js.map +1 -0
  174. package/dist/hooks/useFloorplans.d.ts +19 -0
  175. package/dist/hooks/useFloorplans.d.ts.map +1 -0
  176. package/dist/hooks/useFloorplans.js +52 -0
  177. package/dist/hooks/useFloorplans.js.map +1 -0
  178. package/dist/hooks/useModal.d.ts +11 -0
  179. package/dist/hooks/useModal.d.ts.map +1 -0
  180. package/dist/hooks/useModal.js +35 -0
  181. package/dist/hooks/useModal.js.map +1 -0
  182. package/dist/hooks/useProperty.d.ts +66 -0
  183. package/dist/hooks/useProperty.d.ts.map +1 -0
  184. package/dist/hooks/useProperty.js +49 -0
  185. package/dist/hooks/useProperty.js.map +1 -0
  186. package/dist/hooks/useSpecials.d.ts +8 -0
  187. package/dist/hooks/useSpecials.d.ts.map +1 -0
  188. package/dist/hooks/useSpecials.js +37 -0
  189. package/dist/hooks/useSpecials.js.map +1 -0
  190. package/dist/index.d.ts +12 -3
  191. package/dist/index.d.ts.map +1 -1
  192. package/dist/index.js +9 -1
  193. package/dist/index.js.map +1 -1
  194. package/dist/renderer.d.ts.map +1 -1
  195. package/dist/renderer.js +72 -3
  196. package/dist/renderer.js.map +1 -1
  197. package/dist/router.d.ts +9 -0
  198. package/dist/router.d.ts.map +1 -1
  199. package/dist/router.js +34 -1
  200. package/dist/router.js.map +1 -1
  201. package/dist/types.d.ts +47 -1
  202. package/dist/types.d.ts.map +1 -1
  203. package/dist/utils/imageUrl.d.ts +21 -0
  204. package/dist/utils/imageUrl.d.ts.map +1 -0
  205. package/dist/utils/imageUrl.js +46 -0
  206. package/dist/utils/imageUrl.js.map +1 -0
  207. package/dist/utils/resolveConfig.d.ts +53 -0
  208. package/dist/utils/resolveConfig.d.ts.map +1 -0
  209. package/dist/utils/resolveConfig.js +291 -0
  210. package/dist/utils/resolveConfig.js.map +1 -0
  211. 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,2 @@
1
+ export declare function ComponentBrowser(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ComponentBrowser.d.ts.map
@@ -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":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAExD,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,MAAM,cAAc,GAAoC;IACtD,gBAAgB,EAAE,eAAM,CAAC,EAAC,6IAA6I,GAAG;IAC1K,eAAe,EAAE,8BAAE,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,gBAAgB,GAAG,IAAG;IACnG,mBAAmB,EAAE,eAAM,CAAC,EAAC,4BAA4B,GAAG;IAC5D,MAAM,EAAE,8BAAE,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,GAAG,IAAG;IACrL,UAAU,EAAE,4BAAE,eAAM,CAAC,EAAC,yBAAyB,GAAG,GAAG;IACrD,kBAAkB,EAAE,4BAAE,eAAM,CAAC,EAAC,8FAA8F,GAAG,GAAG;IAClI,qBAAqB,EAAE,8BAAE,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,gBAAgB,GAAG,IAAG;IACzG,KAAK,EAAE,8BAAE,eAAM,CAAC,EAAC,4DAA4D,GAAG,EAAA,eAAM,CAAC,EAAC,kCAAkC,GAAG,IAAG;CACjI,CAAC;AAEF,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,UAAU;IACjB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,UAAU,CAAC;QACtC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3B,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1D,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAClD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/F,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aAEtC,cAAK,SAAS,EAAC,mCAAmC,YAChD,eAAK,SAAS,EAAC,6BAA6B,aAC1C,aAAI,SAAS,EAAC,kCAAkC,kCAAuB,EACvE,aAAG,SAAS,EAAC,oBAAoB,aAC9B,UAAU,oHACT,EAGJ,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAK,SAAS,EAAC,wDAAwD,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,aAClK,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,mBAAmB,GAAG,IAC1D,EACN,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1C,WAAW,EAAC,sBAAsB,EAClC,SAAS,EAAC,gJAAgJ,GAC1J,IACE,IACF,GACF,EAGN,cAAK,SAAS,EAAC,wCAAwC,YACpD,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACtB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAE9C,OAAO,CACL,0BAEE,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,SAAS,EAAC,eAAe,YACvK,cAAc,CAAC,GAAG,CAAC,GAChB,EACN,aAAI,SAAS,EAAC,qCAAqC,YAAE,GAAG,GAAM,EAC9D,eAAM,SAAS,EAAC,4DAA4D,YAAE,KAAK,CAAC,MAAM,GAAQ,IAC9F,EAGN,cAAK,SAAS,EAAC,sDAAsD,YAClE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oCAClB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;oCACjC,IAAI,CAAC,IAAI;wCAAE,OAAO,IAAI,CAAC;oCAEvB,OAAO,CACL,kBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC,EAC9C,SAAS,EAAC,sIAAsI,aAEhJ,eAAK,SAAS,EAAC,kCAAkC,aAC/C,0BACE,aAAI,SAAS,EAAC,2EAA2E,YACtF,IAAI,GACF,EACL,YAAG,SAAS,EAAC,yCAAyC,YACnD,IAAI,CAAC,WAAW,GACf,IACA,EACN,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,SAAS,EAAC,2EAA2E,YACrL,eAAM,CAAC,EAAC,eAAe,GAAG,GACtB,IACF,EAGN,eAAK,SAAS,EAAC,6BAA6B,aAC1C,gBAAM,SAAS,EAAC,wDAAwD,aACrE,IAAI,CAAC,OAAO,CAAC,MAAM,aAAS,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAC5D,EACN,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,wDAAwD,yBAAgB,CACzF,EACA,IAAI,CAAC,QAAQ,IAAI,CAChB,eAAM,SAAS,EAAC,0DAA0D,oBAAW,CACtF,EACA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CACrC,gBAAM,SAAS,EAAC,wDAAwD,aACrE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,cAC1B,CACR,IACG,KAlCD,IAAI,CAmCF,CACV,CAAC;gCACJ,CAAC,CAAC,GACE,KAxDE,GAAG,CAyDP,CACP,CAAC;gBACJ,CAAC,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,SAAS,UAAU,CAAC,EAAE,aAAa,EAA6B;IAC9D,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,cAAK,SAAS,EAAC,0DAA0D,YACvE,eAAK,SAAS,EAAC,aAAa,aAC1B,aAAI,SAAS,EAAC,kCAAkC,oCAAyB,EACzE,aAAG,SAAS,EAAC,oBAAoB,uBAAS,aAAa,sCAAoC,EAC3F,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,EAAC,qDAAqD,uCAE5F,IACL,GACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aAEtC,cAAK,SAAS,EAAC,mCAAmC,YAChD,eAAK,SAAS,EAAC,qDAAqD,aAClE,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5B,SAAS,EAAC,kFAAkF,aAE5F,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,YAAC,eAAM,CAAC,EAAC,iBAAiB,GAAG,GAAM,sBAE7H,EACT,eAAM,SAAS,EAAC,eAAe,kBAAS,EACxC,eAAM,SAAS,EAAC,mCAAmC,YAAE,aAAa,GAAQ,IACtE,GACF,EAGN,cAAK,SAAS,EAAC,6BAA6B,YAC1C,KAAC,iBAAiB,IAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAI,GAClD,IACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAE9B,0BAA0B;IAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,KAAC,UAAU,IAAC,aAAa,EAAE,aAAa,GAAI,CAAC;IACtD,CAAC;IAED,OAAO,KAAC,UAAU,KAAG,CAAC;AACxB,CAAC"}
@@ -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"}