@meetelise/studio-components 0.0.0

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 (70) hide show
  1. package/README.md +1 -0
  2. package/dist/components/Container.d.ts +10 -0
  3. package/dist/components/Container.d.ts.map +1 -0
  4. package/dist/components/Container.js +18 -0
  5. package/dist/components/Container.js.map +1 -0
  6. package/dist/components/Grid.d.ts +9 -0
  7. package/dist/components/Grid.d.ts.map +1 -0
  8. package/dist/components/Grid.js +24 -0
  9. package/dist/components/Grid.js.map +1 -0
  10. package/dist/components/Link.d.ts +8 -0
  11. package/dist/components/Link.d.ts.map +1 -0
  12. package/dist/components/Link.js +11 -0
  13. package/dist/components/Link.js.map +1 -0
  14. package/dist/components/Section.d.ts +7 -0
  15. package/dist/components/Section.d.ts.map +1 -0
  16. package/dist/components/Section.js +7 -0
  17. package/dist/components/Section.js.map +1 -0
  18. package/dist/components/Stack.d.ts +11 -0
  19. package/dist/components/Stack.d.ts.map +1 -0
  20. package/dist/components/Stack.js +32 -0
  21. package/dist/components/Stack.js.map +1 -0
  22. package/dist/components/Text.d.ts +8 -0
  23. package/dist/components/Text.d.ts.map +1 -0
  24. package/dist/components/Text.js +22 -0
  25. package/dist/components/Text.js.map +1 -0
  26. package/dist/components/ThemeProvider.d.ts +8 -0
  27. package/dist/components/ThemeProvider.d.ts.map +1 -0
  28. package/dist/components/ThemeProvider.js +22 -0
  29. package/dist/components/ThemeProvider.js.map +1 -0
  30. package/dist/components/registry.d.ts +2 -0
  31. package/dist/components/registry.d.ts.map +1 -0
  32. package/dist/components/registry.js +18 -0
  33. package/dist/components/registry.js.map +1 -0
  34. package/dist/components/units/UnitCard.d.ts +15 -0
  35. package/dist/components/units/UnitCard.d.ts.map +1 -0
  36. package/dist/components/units/UnitCard.js +12 -0
  37. package/dist/components/units/UnitCard.js.map +1 -0
  38. package/dist/components/units/UnitExplorer.d.ts +22 -0
  39. package/dist/components/units/UnitExplorer.d.ts.map +1 -0
  40. package/dist/components/units/UnitExplorer.js +93 -0
  41. package/dist/components/units/UnitExplorer.js.map +1 -0
  42. package/dist/components/units/UnitFilters.d.ts +14 -0
  43. package/dist/components/units/UnitFilters.d.ts.map +1 -0
  44. package/dist/components/units/UnitFilters.js +26 -0
  45. package/dist/components/units/UnitFilters.js.map +1 -0
  46. package/dist/components/units/types.d.ts +35 -0
  47. package/dist/components/units/types.d.ts.map +1 -0
  48. package/dist/components/units/types.js +2 -0
  49. package/dist/components/units/types.js.map +1 -0
  50. package/dist/hooks/useSiteConfig.d.ts +7 -0
  51. package/dist/hooks/useSiteConfig.d.ts.map +1 -0
  52. package/dist/hooks/useSiteConfig.js +13 -0
  53. package/dist/hooks/useSiteConfig.js.map +1 -0
  54. package/dist/index.d.ts +8 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +6 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/renderer.d.ts +6 -0
  59. package/dist/renderer.d.ts.map +1 -0
  60. package/dist/renderer.js +23 -0
  61. package/dist/renderer.js.map +1 -0
  62. package/dist/router.d.ts +3 -0
  63. package/dist/router.d.ts.map +1 -0
  64. package/dist/router.js +20 -0
  65. package/dist/router.js.map +1 -0
  66. package/dist/types.d.ts +34 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +32 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+ elise-studio-components
@@ -0,0 +1,10 @@
1
+ interface ContainerProps {
2
+ bg?: string;
3
+ padding?: "none" | "sm" | "md" | "lg" | "xl";
4
+ fullWidth?: boolean;
5
+ children?: React.ReactNode;
6
+ className?: string;
7
+ }
8
+ export declare function Container({ bg, padding, fullWidth, children, className, }: ContainerProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=Container.d.ts.map
@@ -0,0 +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;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAgB,SAAS,CAAC,EACxB,EAAE,EACF,OAAc,EACd,SAAgB,EAChB,QAAQ,EACR,SAAS,GACV,EAAE,cAAc,2CAahB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const paddingClasses = {
4
+ none: "py-0",
5
+ sm: "py-4 px-4",
6
+ md: "py-8 px-4",
7
+ lg: "py-16 px-4",
8
+ xl: "py-24 px-4",
9
+ };
10
+ export function Container({ bg, padding = "lg", fullWidth = true, children, className, }) {
11
+ const defaults = [
12
+ fullWidth ? "w-full" : "max-w-4xl mx-auto",
13
+ paddingClasses[padding] ?? paddingClasses.lg,
14
+ ].join(" ");
15
+ const style = bg ? { backgroundColor: bg } : undefined;
16
+ return (_jsx("div", { className: twMerge(defaults, className), style: style, children: _jsx("div", { className: fullWidth ? "max-w-4xl mx-auto" : undefined, children: children }) }));
17
+ }
18
+ //# sourceMappingURL=Container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/components/Container.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAUzC,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;CACjB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EACxB,EAAE,EACF,OAAO,GAAG,IAAI,EACd,SAAS,GAAG,IAAI,EAChB,QAAQ,EACR,SAAS,GACM;IACf,MAAM,QAAQ,GAAG;QACf,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB;QAC1C,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,EAAE;KAC7C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvD,OAAO,CACL,cAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YACxD,cAAK,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,YAAG,QAAQ,GAAO,GACzE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface GridProps {
2
+ columns?: 1 | 2 | 3 | 4;
3
+ gap?: "none" | "sm" | "md" | "lg" | "xl";
4
+ children?: React.ReactNode;
5
+ className?: string;
6
+ }
7
+ export declare function Grid({ columns, gap, children, className }: GridProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/components/Grid.tsx"],"names":[],"mappings":"AAEA,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,wBAAgB,IAAI,CAAC,EAAE,OAAW,EAAE,GAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,SAAS,2CAQ/E"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const columnClasses = {
4
+ 1: "grid-cols-1",
5
+ 2: "grid-cols-1 md:grid-cols-2",
6
+ 3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
7
+ 4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
8
+ };
9
+ const gapClasses = {
10
+ none: "gap-0",
11
+ sm: "gap-2",
12
+ md: "gap-4",
13
+ lg: "gap-8",
14
+ xl: "gap-12",
15
+ };
16
+ export function Grid({ columns = 3, gap = "md", children, className }) {
17
+ const defaults = [
18
+ "grid",
19
+ columnClasses[columns] ?? columnClasses[3],
20
+ gapClasses[gap] ?? gapClasses.md,
21
+ ].join(" ");
22
+ return _jsx("div", { className: twMerge(defaults, className), children: children });
23
+ }
24
+ //# sourceMappingURL=Grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../src/components/Grid.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AASzC,MAAM,aAAa,GAA2B;IAC5C,CAAC,EAAE,aAAa;IAChB,CAAC,EAAE,4BAA4B;IAC/B,CAAC,EAAE,2CAA2C;IAC9C,CAAC,EAAE,2CAA2C;CAC/C,CAAC;AAEF,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,OAAO;IACb,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,QAAQ;CACb,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAa;IAC9E,MAAM,QAAQ,GAAG;QACf,MAAM;QACN,aAAa,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;QAC1C,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE;KACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,cAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,CAAC;AACxE,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface LinkProps {
2
+ to: string;
3
+ content: string;
4
+ className?: string;
5
+ }
6
+ export declare function Link({ to, content, className }: LinkProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=Link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AAGA,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,2CAazD"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { navigate } from "../router";
4
+ const defaults = "text-[var(--color-primary)] underline-offset-2 hover:underline cursor-pointer";
5
+ export function Link({ to, content, className }) {
6
+ return (_jsx("a", { href: to, className: twMerge(defaults, className), onClick: (e) => {
7
+ e.preventDefault();
8
+ navigate(to);
9
+ }, children: content }));
10
+ }
11
+ //# sourceMappingURL=Link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.js","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAQrC,MAAM,QAAQ,GAAG,+EAA+E,CAAC;AAEjG,MAAM,UAAU,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAa;IACxD,OAAO,CACL,YACE,IAAI,EAAE,EAAE,EACR,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EACvC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC,YAEA,OAAO,GACN,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface SectionProps {
2
+ children?: React.ReactNode;
3
+ className?: string;
4
+ }
5
+ export declare function Section({ children, className }: SectionProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=Section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/components/Section.tsx"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,2CAM5D"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const defaults = "max-w-4xl mx-auto px-6 py-12";
4
+ export function Section({ children, className }) {
5
+ return (_jsx("section", { className: twMerge(defaults, className), children: children }));
6
+ }
7
+ //# sourceMappingURL=Section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section.js","sourceRoot":"","sources":["../../src/components/Section.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAOzC,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAEhD,MAAM,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAgB;IAC3D,OAAO,CACL,kBAAS,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,YAC7C,QAAQ,GACD,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface StackProps {
2
+ direction?: "vertical" | "horizontal";
3
+ gap?: "none" | "sm" | "md" | "lg" | "xl";
4
+ align?: "start" | "center" | "end" | "stretch";
5
+ justify?: "start" | "center" | "end" | "between";
6
+ children?: React.ReactNode;
7
+ className?: string;
8
+ }
9
+ export declare function Stack({ direction, gap, align, justify, children, className, }: StackProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=Stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,wBAAgB,KAAK,CAAC,EACpB,SAAsB,EACtB,GAAU,EACV,KAAiB,EACjB,OAAiB,EACjB,QAAQ,EACR,SAAS,GACV,EAAE,UAAU,2CAUZ"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const gapClasses = {
4
+ none: "gap-0",
5
+ sm: "gap-2",
6
+ md: "gap-4",
7
+ lg: "gap-8",
8
+ xl: "gap-12",
9
+ };
10
+ const alignClasses = {
11
+ start: "items-start",
12
+ center: "items-center",
13
+ end: "items-end",
14
+ stretch: "items-stretch",
15
+ };
16
+ const justifyClasses = {
17
+ start: "justify-start",
18
+ center: "justify-center",
19
+ end: "justify-end",
20
+ between: "justify-between",
21
+ };
22
+ export function Stack({ direction = "vertical", gap = "md", align = "stretch", justify = "start", children, className, }) {
23
+ const defaults = [
24
+ "flex",
25
+ direction === "horizontal" ? "flex-row" : "flex-col",
26
+ gapClasses[gap] ?? gapClasses.md,
27
+ alignClasses[align] ?? alignClasses.stretch,
28
+ justifyClasses[justify] ?? justifyClasses.start,
29
+ ].join(" ");
30
+ return _jsx("div", { className: twMerge(defaults, className), children: children });
31
+ }
32
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAWzC,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,OAAO;IACb,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,QAAQ;CACb,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,cAAc;IACtB,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,eAAe;CACzB,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,EACpB,SAAS,GAAG,UAAU,EACtB,GAAG,GAAG,IAAI,EACV,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,OAAO,EACjB,QAAQ,EACR,SAAS,GACE;IACX,MAAM,QAAQ,GAAG;QACf,MAAM;QACN,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;QACpD,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE;QAChC,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO;QAC3C,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,KAAK;KAChD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,cAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,CAAC;AACxE,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface TextProps {
2
+ content: string;
3
+ variant?: "h1" | "h2" | "h3" | "body" | "caption";
4
+ className?: string;
5
+ }
6
+ export declare function Text({ content, variant, className }: TextProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=Text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAGA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,OAAgB,EAAE,SAAS,EAAE,EAAE,SAAS,2CAIvE"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const variantDefaults = {
4
+ h1: "text-4xl font-bold mb-3 text-[var(--color-foreground)]",
5
+ h2: "text-3xl font-semibold mb-2 text-[var(--color-secondary)]",
6
+ h3: "text-2xl font-semibold mb-2 text-[var(--color-primary)]",
7
+ body: "text-base leading-relaxed mb-2 text-[var(--color-foreground)]",
8
+ caption: "text-sm mb-2 text-[var(--color-muted)]",
9
+ };
10
+ const variantTags = {
11
+ h1: "h1",
12
+ h2: "h2",
13
+ h3: "h3",
14
+ body: "p",
15
+ caption: "span",
16
+ };
17
+ export function Text({ content, variant = "body", className }) {
18
+ const Tag = variantTags[variant] ?? "p";
19
+ const defaults = variantDefaults[variant] ?? variantDefaults.body;
20
+ return _jsx(Tag, { className: twMerge(defaults, className), children: content });
21
+ }
22
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.js","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQzC,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,wDAAwD;IAC5D,EAAE,EAAE,2DAA2D;IAC/D,EAAE,EAAE,yDAAyD;IAC7D,IAAI,EAAE,+DAA+D;IACrE,OAAO,EAAE,wCAAwC;CAClD,CAAC;AAEF,MAAM,WAAW,GAAsC;IACrD,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,SAAS,EAAa;IACtE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;IACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;IAClE,OAAO,KAAC,GAAG,IAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAG,OAAO,GAAO,CAAC;AACvE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SiteTheme } from "../types";
2
+ interface ThemeProviderProps {
3
+ theme?: SiteTheme;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare function ThemeProvider({ theme, children }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/components/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAa1C,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAepE"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const defaultTheme = {
3
+ colors: {
4
+ background: "#f8fafc",
5
+ foreground: "#1e293b",
6
+ primary: "#4f46e5",
7
+ secondary: "#64748b",
8
+ accent: "#0ea5e9",
9
+ muted: "#94a3b8",
10
+ },
11
+ };
12
+ export function ThemeProvider({ theme, children }) {
13
+ const merged = {
14
+ colors: { ...defaultTheme.colors, ...theme?.colors },
15
+ };
16
+ const style = {};
17
+ for (const [key, value] of Object.entries(merged.colors)) {
18
+ style[`--color-${key}`] = value;
19
+ }
20
+ return (_jsx("div", { style: style, className: "min-h-screen bg-[var(--color-background)] text-[var(--color-foreground)]", children: children }));
21
+ }
22
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/components/ThemeProvider.tsx"],"names":[],"mappings":";AAEA,MAAM,YAAY,GAAc;IAC9B,MAAM,EAAE;QACN,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS;KACjB;CACF,CAAC;AAOF,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAsB;IACnE,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE;KACrD,CAAC;IAEF,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IAClC,CAAC;IAED,OAAO,CACL,cAAK,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC,0EAA0E,YACpG,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const componentRegistry: Record<string, React.ComponentType<any>>;
2
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAQtE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Text } from "./Text";
2
+ import { Section } from "./Section";
3
+ import { Link } from "./Link";
4
+ import { Stack } from "./Stack";
5
+ import { Grid } from "./Grid";
6
+ import { Container } from "./Container";
7
+ import { UnitExplorer } from "./units/UnitExplorer";
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ export const componentRegistry = {
10
+ Text,
11
+ Section,
12
+ Link,
13
+ Stack,
14
+ Grid,
15
+ Container,
16
+ UnitExplorer,
17
+ };
18
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAA6C;IACzE,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,SAAS;IACT,YAAY;CACb,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { UnitV2 } from "./types";
2
+ interface UnitCardProps {
3
+ unit: UnitV2;
4
+ style: "compact" | "standard";
5
+ showPricing: boolean;
6
+ showAvailability: boolean;
7
+ showFloorplan: boolean;
8
+ showSquareFootage: boolean;
9
+ showUnitNumber: boolean;
10
+ showBedBath: boolean;
11
+ className?: string;
12
+ }
13
+ export declare function UnitCard({ unit, style, showPricing, showAvailability, showFloorplan, showSquareFootage, showUnitNumber, showBedBath, className, }: UnitCardProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=UnitCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitCard.d.ts","sourceRoot":"","sources":["../../../src/components/units/UnitCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,SAAS,GACV,EAAE,aAAa,2CAiFf"}
@@ -0,0 +1,12 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ function formatStatus(status) {
4
+ return status.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
5
+ }
6
+ export function UnitCard({ unit, style, showPricing, showAvailability, showFloorplan, showSquareFootage, showUnitNumber, showBedBath, className, }) {
7
+ const compact = style === "compact";
8
+ return (_jsxs("div", { className: twMerge("rounded-lg border border-[var(--color-muted)]/20 bg-white overflow-hidden", compact ? "p-3" : "p-5", className), children: [showUnitNumber && (_jsxs("div", { className: twMerge("font-semibold text-[var(--color-foreground)]", compact ? "text-sm" : "text-base"), children: ["Unit ", unit.unit_number] })), showFloorplan && unit.floor_plan && (_jsx("div", { className: "text-sm text-[var(--color-muted)]", children: unit.floor_plan })), _jsxs("div", { className: twMerge("flex flex-wrap gap-x-3 gap-y-1 text-[var(--color-secondary)]", compact ? "mt-1 text-xs" : "mt-2 text-sm"), children: [showBedBath && (_jsxs(_Fragment, { children: [_jsxs("span", { children: [unit.bedrooms, " bed"] }), _jsxs("span", { children: [Number(unit.bathrooms), " bath"] })] })), showSquareFootage && unit.square_feet != null && (_jsxs("span", { children: [unit.square_feet.toLocaleString(), " sqft"] }))] }), showPricing && unit.asking_rent != null && (_jsxs("div", { className: twMerge("font-semibold text-[var(--color-primary)]", compact ? "mt-1 text-sm" : "mt-3 text-lg"), children: ["$", Number(unit.asking_rent).toLocaleString(), "/mo"] })), showAvailability && unit.available_date && (_jsxs("div", { className: twMerge("text-[var(--color-muted)]", compact ? "mt-1 text-xs" : "mt-2 text-sm"), children: ["Available ", new Date(unit.available_date).toLocaleDateString()] })), unit.unit_leasing_status && (_jsx("div", { className: "mt-2", children: _jsx("span", { className: twMerge("inline-block rounded-full px-2 py-0.5 text-xs font-medium", unit.unit_leasing_status === "available"
9
+ ? "bg-green-100 text-green-800"
10
+ : "bg-[var(--color-muted)]/10 text-[var(--color-muted)]"), children: formatStatus(unit.unit_leasing_status) }) }))] }));
11
+ }
12
+ //# sourceMappingURL=UnitCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitCard.js","sourceRoot":"","sources":["../../../src/components/units/UnitCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAezC,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,SAAS,GACK;IACd,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC;IAEpC,OAAO,CACL,eACE,SAAS,EAAE,OAAO,CAChB,2EAA2E,EAC3E,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EACvB,SAAS,CACV,aAEA,cAAc,IAAI,CACjB,eACE,SAAS,EAAE,OAAO,CAChB,8CAA8C,EAC9C,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAClC,sBAEK,IAAI,CAAC,WAAW,IAClB,CACP,EAEA,aAAa,IAAI,IAAI,CAAC,UAAU,IAAI,CACnC,cAAK,SAAS,EAAC,mCAAmC,YAAE,IAAI,CAAC,UAAU,GAAO,CAC3E,EAED,eACE,SAAS,EAAE,OAAO,CAChB,8DAA8D,EAC9D,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAC1C,aAEA,WAAW,IAAI,CACd,8BACE,2BAAO,IAAI,CAAC,QAAQ,YAAY,EAChC,2BAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,IACzC,CACJ,EACA,iBAAiB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,CAChD,2BAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,aAAa,CACtD,IACG,EAEL,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,CAC1C,eACE,SAAS,EAAE,OAAO,CAChB,2CAA2C,EAC3C,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAC1C,kBAEC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,WACvC,CACP,EAEA,gBAAgB,IAAI,IAAI,CAAC,cAAc,IAAI,CAC1C,eACE,SAAS,EAAE,OAAO,CAChB,2BAA2B,EAC3B,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAC1C,2BAEU,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,kBAAkB,EAAE,IACzD,CACP,EAEA,IAAI,CAAC,mBAAmB,IAAI,CAC3B,cAAK,SAAS,EAAC,MAAM,YACnB,eACE,SAAS,EAAE,OAAO,CAChB,2DAA2D,EAC3D,IAAI,CAAC,mBAAmB,KAAK,WAAW;wBACtC,CAAC,CAAC,6BAA6B;wBAC/B,CAAC,CAAC,sDAAsD,CAC3D,YAEA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAClC,GACH,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { UnitFilterValues } from "./types";
2
+ interface UnitExplorerProps {
3
+ layout?: "grid" | "list";
4
+ columns?: 1 | 2 | 3 | 4;
5
+ pageSize?: number;
6
+ showFilters?: boolean;
7
+ showPricing?: boolean;
8
+ showAvailability?: boolean;
9
+ showFloorplan?: boolean;
10
+ showVirtualTour?: boolean;
11
+ showSquareFootage?: boolean;
12
+ showUnitNumber?: boolean;
13
+ showBedBath?: boolean;
14
+ cardStyle?: "compact" | "standard";
15
+ onlyAvailable?: boolean;
16
+ defaultFilters?: UnitFilterValues | null;
17
+ emptyMessage?: string;
18
+ className?: string;
19
+ }
20
+ export declare function UnitExplorer({ layout, columns, pageSize, showFilters, showPricing, showAvailability, showFloorplan, showVirtualTour, showSquareFootage, showUnitNumber, showBedBath, cardStyle, onlyAvailable, defaultFilters, emptyMessage, className, }: UnitExplorerProps): import("react/jsx-runtime").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=UnitExplorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitExplorer.d.ts","sourceRoot":"","sources":["../../../src/components/units/UnitExplorer.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEnE,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuBD,wBAAgB,YAAY,CAAC,EAC3B,MAAe,EACf,OAAW,EACX,QAAa,EACb,WAAkB,EAClB,WAAkB,EAClB,gBAAuB,EACvB,aAAoB,EACpB,eAAuB,EACvB,iBAAwB,EACxB,cAAqB,EACrB,WAAkB,EAClB,SAAsB,EACtB,aAAoB,EACpB,cAAqB,EACrB,YAAmC,EACnC,SAAS,GACV,EAAE,iBAAiB,2CA6KnB"}
@@ -0,0 +1,93 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useCallback } from "react";
3
+ import useSWRInfinite from "swr/infinite";
4
+ import { twMerge } from "tailwind-merge";
5
+ import { useSiteConfig } from "../../hooks/useSiteConfig";
6
+ import { UnitCard } from "./UnitCard";
7
+ import { UnitFilters } from "./UnitFilters";
8
+ const columnClasses = {
9
+ 1: "grid-cols-1",
10
+ 2: "grid-cols-1 md:grid-cols-2",
11
+ 3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
12
+ 4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
13
+ };
14
+ const EMPTY_FILTERS = {
15
+ bedrooms: null,
16
+ minRent: null,
17
+ maxRent: null,
18
+ moveInDate: null,
19
+ floorplanName: null,
20
+ };
21
+ const fetcher = (url) => fetch(url).then((res) => {
22
+ if (!res.ok)
23
+ throw new Error(`API error: ${res.status}`);
24
+ return res.json();
25
+ });
26
+ export function UnitExplorer({ layout = "grid", columns = 3, pageSize = 20, showFilters = true, showPricing = true, showAvailability = true, showFloorplan = true, showVirtualTour = false, showSquareFootage = true, showUnitNumber = true, showBedBath = true, cardStyle = "standard", onlyAvailable = true, defaultFilters = null, emptyMessage = "No units available", className, }) {
27
+ const config = useSiteConfig();
28
+ const propertyId = config.property?.propertyId;
29
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
30
+ const [filters, setFilters] = useState(defaultFilters ?? EMPTY_FILTERS);
31
+ const buildParams = useCallback((cursor) => {
32
+ const params = new URLSearchParams();
33
+ params.set("limit", String(pageSize));
34
+ if (cursor)
35
+ params.set("cursor", cursor);
36
+ if (filters.bedrooms != null)
37
+ params.set("num_bedrooms", String(filters.bedrooms));
38
+ if (filters.minRent != null)
39
+ params.set("min_rent", String(filters.minRent));
40
+ if (filters.maxRent != null)
41
+ params.set("max_rent", String(filters.maxRent));
42
+ if (filters.moveInDate)
43
+ params.set("move_in_date_earliest", filters.moveInDate);
44
+ if (filters.floorplanName)
45
+ params.set("floorplan_name", filters.floorplanName);
46
+ if (onlyAvailable)
47
+ params.set("only_available", "true");
48
+ return params.toString();
49
+ }, [pageSize, filters, onlyAvailable]);
50
+ const { data, error, size, setSize, isLoading, isValidating } = useSWRInfinite((pageIndex, previousPageData) => {
51
+ if (!propertyId)
52
+ return null;
53
+ if (pageIndex > 0 && previousPageData && !previousPageData.pagination.has_more)
54
+ return null;
55
+ const cursor = previousPageData?.pagination.next_cursor ?? undefined;
56
+ return `${apiBaseUrl}/v2/properties/${propertyId}/units?${buildParams(cursor)}`;
57
+ }, fetcher, { revalidateFirstPage: false });
58
+ const allUnits = data ? data.flatMap((page) => page.units) : [];
59
+ const hasMore = data
60
+ ? (data[data.length - 1]?.pagination.has_more ?? false)
61
+ : false;
62
+ const isEmpty = !isLoading && allUnits.length === 0;
63
+ // Client-side filtering for params V2 doesn't support yet
64
+ const filteredUnits = allUnits.filter((unit) => {
65
+ if (filters.minRent != null &&
66
+ (unit.asking_rent == null || unit.asking_rent < filters.minRent))
67
+ return false;
68
+ if (filters.maxRent != null &&
69
+ (unit.asking_rent == null || unit.asking_rent > filters.maxRent))
70
+ return false;
71
+ return true;
72
+ });
73
+ // Infinite scroll via IntersectionObserver on a sentinel element
74
+ const sentinelRef = useRef(null);
75
+ useEffect(() => {
76
+ const sentinel = sentinelRef.current;
77
+ if (!sentinel)
78
+ return;
79
+ const observer = new IntersectionObserver((entries) => {
80
+ if (entries[0].isIntersecting && hasMore && !isValidating) {
81
+ setSize((s) => s + 1);
82
+ }
83
+ }, { rootMargin: "200px" });
84
+ observer.observe(sentinel);
85
+ return () => observer.disconnect();
86
+ }, [hasMore, isValidating, setSize]);
87
+ if (!propertyId) {
88
+ return (_jsx("div", { className: "text-[var(--color-muted)] text-sm", children: "No property configured" }));
89
+ }
90
+ return (_jsxs("div", { className: twMerge("w-full", className), children: [showFilters && (_jsx(UnitFilters, { filters: filters, onChange: setFilters, units: allUnits, showBedrooms: true, showPriceRange: showPricing, showMoveInDate: showAvailability, showFloorplanFilter: showFloorplan })), error && (_jsx("div", { className: "text-red-600 text-sm mb-4", children: "Failed to load units. Please try again later." })), isEmpty && !error && (_jsx("div", { className: "text-[var(--color-muted)] text-center py-12", children: emptyMessage })), filteredUnits.length > 0 &&
91
+ (layout === "grid" ? (_jsx("div", { className: twMerge("grid gap-4", columnClasses[columns] ?? columnClasses[3]), children: filteredUnits.map((unit) => (_jsx(UnitCard, { unit: unit, style: cardStyle, showPricing: showPricing, showAvailability: showAvailability, showFloorplan: showFloorplan, showSquareFootage: showSquareFootage, showUnitNumber: showUnitNumber, showBedBath: showBedBath }, unit.id))) })) : (_jsx("div", { className: "flex flex-col gap-3", children: filteredUnits.map((unit) => (_jsx(UnitCard, { unit: unit, style: cardStyle, showPricing: showPricing, showAvailability: showAvailability, showFloorplan: showFloorplan, showSquareFootage: showSquareFootage, showUnitNumber: showUnitNumber, showBedBath: showBedBath }, unit.id))) }))), hasMore && _jsx("div", { ref: sentinelRef, className: "h-1" }), isValidating && !isLoading && (_jsx("div", { className: "text-center py-4 text-[var(--color-muted)] text-sm", children: "Loading more..." })), isLoading && (_jsx("div", { className: "text-center py-12 text-[var(--color-muted)]", children: "Loading units..." }))] }));
92
+ }
93
+ //# sourceMappingURL=UnitExplorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitExplorer.js","sourceRoot":"","sources":["../../../src/components/units/UnitExplorer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { UnitV2, UnitFilterValues } from "./types";
2
+ interface UnitFiltersProps {
3
+ filters: UnitFilterValues;
4
+ onChange: (filters: UnitFilterValues) => void;
5
+ units: UnitV2[];
6
+ showBedrooms: boolean;
7
+ showPriceRange: boolean;
8
+ showMoveInDate: boolean;
9
+ showFloorplanFilter: boolean;
10
+ className?: string;
11
+ }
12
+ export declare function UnitFilters({ filters, onChange, units, showBedrooms, showPriceRange, showMoveInDate, showFloorplanFilter, className, }: UnitFiltersProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=UnitFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitFilters.d.ts","sourceRoot":"","sources":["../../../src/components/units/UnitFilters.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAExD,UAAU,gBAAgB;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,SAAS,GACV,EAAE,gBAAgB,2CA+FlB"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ function FilterChip({ label, active, onClick, }) {
4
+ return (_jsx("button", { onClick: onClick, className: twMerge("rounded-full px-3 py-1 text-sm font-medium transition-colors", active
5
+ ? "bg-[var(--color-primary)] text-white"
6
+ : "bg-[var(--color-muted)]/10 text-[var(--color-foreground)] hover:bg-[var(--color-muted)]/20"), children: label }));
7
+ }
8
+ export function UnitFilters({ filters, onChange, units, showBedrooms, showPriceRange, showMoveInDate, showFloorplanFilter, className, }) {
9
+ const bedroomOptions = [
10
+ ...new Set(units.map((u) => u.bedrooms)),
11
+ ].sort((a, b) => a - b);
12
+ const floorplanOptions = [
13
+ ...new Set(units.map((u) => u.floor_plan).filter((fp) => fp != null)),
14
+ ].sort();
15
+ return (_jsxs("div", { className: twMerge("flex flex-wrap items-center gap-3 mb-6", className), children: [showBedrooms && bedroomOptions.length > 0 && (_jsxs("div", { className: "flex gap-1", children: [_jsx(FilterChip, { label: "All", active: filters.bedrooms === null, onClick: () => onChange({ ...filters, bedrooms: null }) }), bedroomOptions.map((bed) => (_jsx(FilterChip, { label: bed === 0 ? "Studio" : `${bed} Bed`, active: filters.bedrooms === bed, onClick: () => onChange({
16
+ ...filters,
17
+ bedrooms: filters.bedrooms === bed ? null : bed,
18
+ }) }, bed)))] })), showFloorplanFilter && floorplanOptions.length > 1 && (_jsxs("select", { value: filters.floorplanName ?? "", onChange: (e) => onChange({ ...filters, floorplanName: e.target.value || null }), className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-1.5 text-sm text-[var(--color-foreground)]", children: [_jsx("option", { value: "", children: "All Floor Plans" }), floorplanOptions.map((fp) => (_jsx("option", { value: fp, children: fp }, fp)))] })), showPriceRange && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { type: "number", placeholder: "Min $", value: filters.minRent ?? "", onChange: (e) => onChange({
19
+ ...filters,
20
+ minRent: e.target.value ? Number(e.target.value) : null,
21
+ }), className: "w-24 rounded-md border border-[var(--color-muted)]/30 bg-white px-2 py-1.5 text-sm" }), _jsx("span", { className: "text-[var(--color-muted)] text-sm", children: "\u2013" }), _jsx("input", { type: "number", placeholder: "Max $", value: filters.maxRent ?? "", onChange: (e) => onChange({
22
+ ...filters,
23
+ maxRent: e.target.value ? Number(e.target.value) : null,
24
+ }), className: "w-24 rounded-md border border-[var(--color-muted)]/30 bg-white px-2 py-1.5 text-sm" })] })), showMoveInDate && (_jsx("input", { type: "date", value: filters.moveInDate ?? "", onChange: (e) => onChange({ ...filters, moveInDate: e.target.value || null }), className: "rounded-md border border-[var(--color-muted)]/30 bg-white px-3 py-1.5 text-sm" }))] }));
25
+ }
26
+ //# sourceMappingURL=UnitFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitFilters.js","sourceRoot":"","sources":["../../../src/components/units/UnitFilters.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAczC,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,MAAM,EACN,OAAO,GAKR;IACC,OAAO,CACL,iBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,OAAO,CAChB,8DAA8D,EAC9D,MAAM;YACJ,CAAC,CAAC,sCAAsC;YACxC,CAAC,CAAC,4FAA4F,CACjG,YAEA,KAAK,GACC,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,SAAS,GACQ;IACjB,MAAM,cAAc,GAAG;QACrB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACzC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAExB,MAAM,gBAAgB,GAAG;QACvB,GAAG,IAAI,GAAG,CACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,CACxE;KACF,CAAC,IAAI,EAAE,CAAC;IAET,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,CAAC,wCAAwC,EAAE,SAAS,CAAC,aACzE,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5C,eAAK,SAAS,EAAC,YAAY,aACzB,KAAC,UAAU,IACT,KAAK,EAAC,KAAK,EACX,MAAM,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI,EACjC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GACvD,EACD,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAC3B,KAAC,UAAU,IAET,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,EAC1C,MAAM,EAAE,OAAO,CAAC,QAAQ,KAAK,GAAG,EAChC,OAAO,EAAE,GAAG,EAAE,CACZ,QAAQ,CAAC;4BACP,GAAG,OAAO;4BACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;yBAChD,CAAC,IAPC,GAAG,CASR,CACH,CAAC,IACE,CACP,EAEA,mBAAmB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CACrD,kBACE,KAAK,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,EAClC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,EAEjE,SAAS,EAAC,8GAA8G,aAExH,iBAAQ,KAAK,EAAC,EAAE,gCAAyB,EACxC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAC5B,iBAAiB,KAAK,EAAE,EAAE,YACvB,EAAE,IADQ,EAAE,CAEN,CACV,CAAC,IACK,CACV,EAEA,cAAc,IAAI,CACjB,eAAK,SAAS,EAAC,yBAAyB,aACtC,gBACE,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,OAAO,EACnB,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,QAAQ,CAAC;4BACP,GAAG,OAAO;4BACV,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;yBACxD,CAAC,EAEJ,SAAS,EAAC,oFAAoF,GAC9F,EACF,eAAM,SAAS,EAAC,mCAAmC,uBAAe,EAClE,gBACE,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,OAAO,EACnB,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,QAAQ,CAAC;4BACP,GAAG,OAAO;4BACV,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;yBACxD,CAAC,EAEJ,SAAS,EAAC,oFAAoF,GAC9F,IACE,CACP,EAEA,cAAc,IAAI,CACjB,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,EAE9D,SAAS,EAAC,+EAA+E,GACzF,CACH,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ export interface UnitV2 {
2
+ id: string;
3
+ property_id: string;
4
+ unit_number: string;
5
+ building_id: string | null;
6
+ bedrooms: number;
7
+ bathrooms: number;
8
+ square_feet: number | null;
9
+ floor: number | null;
10
+ building_name: string | null;
11
+ floor_plan: string | null;
12
+ floor_plan_id: string | null;
13
+ unit_leasing_status: string | null;
14
+ unit_status: string | null;
15
+ available_date: string | null;
16
+ market_rent: number | null;
17
+ asking_rent: number | null;
18
+ created_at: string;
19
+ updated_at: string;
20
+ }
21
+ export interface UnitsPageResponse {
22
+ units: UnitV2[];
23
+ pagination: {
24
+ next_cursor: string | null;
25
+ has_more: boolean;
26
+ };
27
+ }
28
+ export interface UnitFilterValues {
29
+ bedrooms: number | null;
30
+ minRent: number | null;
31
+ maxRent: number | null;
32
+ moveInDate: string | null;
33
+ floorplanName: string | null;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/units/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/units/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { SiteConfig } from "../types";
2
+ export declare function SiteConfigProvider({ config, children, }: {
3
+ config: SiteConfig;
4
+ children: React.ReactNode;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ export declare function useSiteConfig(): SiteConfig;
7
+ //# sourceMappingURL=useSiteConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSiteConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useSiteConfig.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAMA;AAED,wBAAgB,aAAa,IAAI,UAAU,CAI1C"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ const SiteConfigContext = createContext(null);
4
+ export function SiteConfigProvider({ config, children, }) {
5
+ return (_jsx(SiteConfigContext.Provider, { value: config, children: children }));
6
+ }
7
+ export function useSiteConfig() {
8
+ const ctx = useContext(SiteConfigContext);
9
+ if (!ctx)
10
+ throw new Error("useSiteConfig must be used within SiteConfigProvider");
11
+ return ctx;
12
+ }
13
+ //# sourceMappingURL=useSiteConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSiteConfig.js","sourceRoot":"","sources":["../../src/hooks/useSiteConfig.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,MAAM,iBAAiB,GAAG,aAAa,CAAoB,IAAI,CAAC,CAAC;AAEjE,MAAM,UAAU,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,GAIT;IACC,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YACtC,QAAQ,GACkB,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { renderNode, SiteRenderer } from "./renderer";
2
+ export { componentRegistry } from "./components/registry";
3
+ export { ThemeProvider } from "./components/ThemeProvider";
4
+ export { SiteConfigProvider, useSiteConfig } from "./hooks/useSiteConfig";
5
+ export { navigate, useCurrentPath } from "./router";
6
+ export type { SiteNode, SitePage, SiteMeta, SiteTheme, SiteProperty, SiteConfig, } from "./types";
7
+ export type { UnitV2, UnitsPageResponse, UnitFilterValues, } from "./components/units/types";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpD,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,MAAM,EACN,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { renderNode, SiteRenderer } from "./renderer";
2
+ export { componentRegistry } from "./components/registry";
3
+ export { ThemeProvider } from "./components/ThemeProvider";
4
+ export { SiteConfigProvider, useSiteConfig } from "./hooks/useSiteConfig";
5
+ export { navigate, useCurrentPath } from "./router";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SiteNode, SiteConfig } from "./types";
2
+ export declare function renderNode(node: SiteNode): React.ReactNode;
3
+ export declare function SiteRenderer({ siteJson }: {
4
+ siteJson: SiteConfig;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
6
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC,SAAS,CAY1D;AAMD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,UAAU,CAAA;CAAE,kDAKlE"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { componentRegistry } from "./components/registry";
3
+ import { useCurrentPath } from "./router";
4
+ export function renderNode(node) {
5
+ const Component = componentRegistry[node.type];
6
+ if (!Component) {
7
+ console.warn(`Unknown component type: ${node.type}`);
8
+ return null;
9
+ }
10
+ const children = node.children?.map((child, i) => (_jsx(RenderNode, { node: child }, i)));
11
+ return _jsx(Component, { ...node.props, children: children });
12
+ }
13
+ function RenderNode({ node }) {
14
+ return _jsx(_Fragment, { children: renderNode(node) });
15
+ }
16
+ export function SiteRenderer({ siteJson }) {
17
+ const path = useCurrentPath();
18
+ const page = siteJson.pages.find((p) => p.path === path) ?? siteJson.pages[0];
19
+ if (!page)
20
+ return null;
21
+ return _jsx(_Fragment, { children: renderNode(page.tree) });
22
+ }
23
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAChD,KAAC,UAAU,IAAS,IAAI,EAAE,KAAK,IAAd,CAAC,CAAiB,CACpC,CAAC,CAAC;IAEH,OAAO,KAAC,SAAS,OAAK,IAAI,CAAC,KAAK,YAAG,QAAQ,GAAa,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,IAAI,EAAsB;IAC9C,OAAO,4BAAG,UAAU,CAAC,IAAI,CAAC,GAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAA4B;IACjE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,4BAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC;AACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function navigate(to: string): void;
2
+ export declare function useCurrentPath(): string;
3
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.tsx"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,QAGlC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAevC"}
package/dist/router.js ADDED
@@ -0,0 +1,20 @@
1
+ import { useState, useEffect, useCallback } from "react";
2
+ let listeners = [];
3
+ export function navigate(to) {
4
+ window.history.pushState({}, "", to);
5
+ listeners.forEach((fn) => fn());
6
+ }
7
+ export function useCurrentPath() {
8
+ const [path, setPath] = useState(window.location.pathname);
9
+ const sync = useCallback(() => setPath(window.location.pathname), []);
10
+ useEffect(() => {
11
+ listeners.push(sync);
12
+ window.addEventListener("popstate", sync);
13
+ return () => {
14
+ listeners = listeners.filter((fn) => fn !== sync);
15
+ window.removeEventListener("popstate", sync);
16
+ };
17
+ }, [sync]);
18
+ return path;
19
+ }
20
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzD,IAAI,SAAS,GAAsB,EAAE,CAAC;AAEtC,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface SiteNode {
2
+ type: string;
3
+ props: Record<string, string | number | boolean>;
4
+ children?: SiteNode[];
5
+ }
6
+ export interface SitePage {
7
+ path: string;
8
+ tree: SiteNode;
9
+ }
10
+ export interface SiteMeta {
11
+ title: string;
12
+ description?: string;
13
+ }
14
+ export interface SiteTheme {
15
+ colors: {
16
+ background: string;
17
+ foreground: string;
18
+ primary: string;
19
+ secondary: string;
20
+ accent: string;
21
+ muted: string;
22
+ };
23
+ }
24
+ export interface SiteProperty {
25
+ propertyId: string;
26
+ apiBaseUrl?: string;
27
+ }
28
+ export interface SiteConfig {
29
+ meta: SiteMeta;
30
+ theme?: SiteTheme;
31
+ property?: SiteProperty;
32
+ pages: SitePage[];
33
+ }
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@meetelise/studio-components",
3
+ "version": "0.0.0",
4
+ "description": "Elise Studio component library — renderer, layout primitives, and data-fetching components for property websites",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/MeetElise/elise-studio-components.git"
8
+ },
9
+ "license": "UNLICENSED",
10
+ "main": "dist/index.js",
11
+ "module": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "files": ["dist"],
14
+ "scripts": {
15
+ "typecheck": "tsc --noEmit",
16
+ "build": "tsc"
17
+ },
18
+ "dependencies": {
19
+ "swr": "^2.3.3",
20
+ "tailwind-merge": "^3.6.0"
21
+ },
22
+ "peerDependencies": {
23
+ "react": "^18.0.0 || ^19.0.0",
24
+ "react-dom": "^18.0.0 || ^19.0.0",
25
+ "tailwindcss": "^4.0.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/react": "^19.1.0",
29
+ "@types/react-dom": "^19.1.0",
30
+ "typescript": "^5.8.0"
31
+ }
32
+ }