@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.
- package/README.md +1 -0
- package/dist/components/Container.d.ts +10 -0
- package/dist/components/Container.d.ts.map +1 -0
- package/dist/components/Container.js +18 -0
- package/dist/components/Container.js.map +1 -0
- package/dist/components/Grid.d.ts +9 -0
- package/dist/components/Grid.d.ts.map +1 -0
- package/dist/components/Grid.js +24 -0
- package/dist/components/Grid.js.map +1 -0
- package/dist/components/Link.d.ts +8 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/Link.js +11 -0
- package/dist/components/Link.js.map +1 -0
- package/dist/components/Section.d.ts +7 -0
- package/dist/components/Section.d.ts.map +1 -0
- package/dist/components/Section.js +7 -0
- package/dist/components/Section.js.map +1 -0
- package/dist/components/Stack.d.ts +11 -0
- package/dist/components/Stack.d.ts.map +1 -0
- package/dist/components/Stack.js +32 -0
- package/dist/components/Stack.js.map +1 -0
- package/dist/components/Text.d.ts +8 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Text.js +22 -0
- package/dist/components/Text.js.map +1 -0
- package/dist/components/ThemeProvider.d.ts +8 -0
- package/dist/components/ThemeProvider.d.ts.map +1 -0
- package/dist/components/ThemeProvider.js +22 -0
- package/dist/components/ThemeProvider.js.map +1 -0
- package/dist/components/registry.d.ts +2 -0
- package/dist/components/registry.d.ts.map +1 -0
- package/dist/components/registry.js +18 -0
- package/dist/components/registry.js.map +1 -0
- package/dist/components/units/UnitCard.d.ts +15 -0
- package/dist/components/units/UnitCard.d.ts.map +1 -0
- package/dist/components/units/UnitCard.js +12 -0
- package/dist/components/units/UnitCard.js.map +1 -0
- package/dist/components/units/UnitExplorer.d.ts +22 -0
- package/dist/components/units/UnitExplorer.d.ts.map +1 -0
- package/dist/components/units/UnitExplorer.js +93 -0
- package/dist/components/units/UnitExplorer.js.map +1 -0
- package/dist/components/units/UnitFilters.d.ts +14 -0
- package/dist/components/units/UnitFilters.d.ts.map +1 -0
- package/dist/components/units/UnitFilters.js +26 -0
- package/dist/components/units/UnitFilters.js.map +1 -0
- package/dist/components/units/types.d.ts +35 -0
- package/dist/components/units/types.d.ts.map +1 -0
- package/dist/components/units/types.js +2 -0
- package/dist/components/units/types.js.map +1 -0
- package/dist/hooks/useSiteConfig.d.ts +7 -0
- package/dist/hooks/useSiteConfig.d.ts.map +1 -0
- package/dist/hooks/useSiteConfig.js +13 -0
- package/dist/hooks/useSiteConfig.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/renderer.d.ts +6 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +23 -0
- package/dist/renderer.js.map +1 -0
- package/dist/router.d.ts +3 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +20 -0
- package/dist/router.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,cAAc,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAsB5C,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,aAAa,GAAqB;IACtC,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,IAAI,EAAgC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEL,MAAM,UAAU,YAAY,CAAC,EAC3B,MAAM,GAAG,MAAM,EACf,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,EAAE,EACb,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,IAAI,EAClB,gBAAgB,GAAG,IAAI,EACvB,aAAa,GAAG,IAAI,EACpB,eAAe,GAAG,KAAK,EACvB,iBAAiB,GAAG,IAAI,EACxB,cAAc,GAAG,IAAI,EACrB,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,UAAU,EACtB,aAAa,GAAG,IAAI,EACpB,cAAc,GAAG,IAAI,EACrB,YAAY,GAAG,oBAAoB,EACnC,SAAS,GACS;IAClB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IAErD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,cAAc,IAAI,aAAa,CAChC,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAe,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI;YAC1B,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI;YACzB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI;YACzB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,UAAU;YACpB,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,aAAa;YACvB,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,aAAa;YAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,EACD,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CACnC,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,GAC3D,cAAc,CACZ,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE;QAC9B,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,SAAS,GAAG,CAAC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ;YAC5E,OAAO,IAAI,CAAC;QACd,MAAM,MAAM,GAAG,gBAAgB,EAAE,UAAU,CAAC,WAAW,IAAI,SAAS,CAAC;QACrE,OAAO,GAAG,UAAU,kBAAkB,UAAU,UAAU,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IAClF,CAAC,EACD,OAAO,EACP,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAC/B,CAAC;IAEJ,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI;QAClB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC;QACvD,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAEpD,0DAA0D;IAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,IACE,OAAO,CAAC,OAAO,IAAI,IAAI;YACvB,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YAEhE,OAAO,KAAK,CAAC;QACf,IACE,OAAO,CAAC,OAAO,IAAI,IAAI;YACvB,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YAEhE,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,iEAAiE;IACjE,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,OAAO,EAAE,EAAE;YACV,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,EACD,EAAE,UAAU,EAAE,OAAO,EAAE,CACxB,CAAC;QAEF,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAErC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CACL,cAAK,SAAS,EAAC,mCAAmC,uCAE5C,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,aACzC,WAAW,IAAI,CACd,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,QAAQ,EACf,YAAY,QACZ,cAAc,EAAE,WAAW,EAC3B,cAAc,EAAE,gBAAgB,EAChC,mBAAmB,EAAE,aAAa,GAClC,CACH,EAEA,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,2BAA2B,8DAEpC,CACP,EAEA,OAAO,IAAI,CAAC,KAAK,IAAI,CACpB,cAAK,SAAS,EAAC,6CAA6C,YACzD,YAAY,GACT,CACP,EAEA,aAAa,CAAC,MAAM,GAAG,CAAC;gBACvB,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CACnB,cACE,SAAS,EAAE,OAAO,CAChB,YAAY,EACZ,aAAa,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAC3C,YAEA,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,KAAC,QAAQ,IAEP,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,IARnB,IAAI,CAAC,EAAE,CASZ,CACH,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qBAAqB,YACjC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,KAAC,QAAQ,IAEP,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,IARnB,IAAI,CAAC,EAAE,CASZ,CACH,CAAC,GACE,CACP,CAAC,EAEH,OAAO,IAAI,cAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAC,KAAK,GAAG,EAEpD,YAAY,IAAI,CAAC,SAAS,IAAI,CAC7B,cAAK,SAAS,EAAC,oDAAoD,gCAE7D,CACP,EAEA,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,6CAA6C,iCAEtD,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/renderer.js
ADDED
|
@@ -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"}
|
package/dist/router.d.ts
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|