@meetelise/studio-components 0.0.27 → 0.0.28

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 (58) hide show
  1. package/dist/componentSchema.json +251 -1
  2. package/dist/components/AmenityList.d.ts +19 -9
  3. package/dist/components/AmenityList.d.ts.map +1 -1
  4. package/dist/components/AmenityList.js +74 -39
  5. package/dist/components/AmenityList.js.map +1 -1
  6. package/dist/components/ScheduleTour.d.ts +3 -1
  7. package/dist/components/ScheduleTour.d.ts.map +1 -1
  8. package/dist/components/ScheduleTour.js +37 -21
  9. package/dist/components/ScheduleTour.js.map +1 -1
  10. package/dist/components/browser/ComponentBrowser.d.ts.map +1 -1
  11. package/dist/components/browser/ComponentBrowser.js +7 -2
  12. package/dist/components/browser/ComponentBrowser.js.map +1 -1
  13. package/dist/components/browser/ComponentShowcase.d.ts.map +1 -1
  14. package/dist/components/browser/ComponentShowcase.js +70 -13
  15. package/dist/components/browser/ComponentShowcase.js.map +1 -1
  16. package/dist/components/browser/componentFixtures.d.ts +8 -0
  17. package/dist/components/browser/componentFixtures.d.ts.map +1 -0
  18. package/dist/components/browser/componentFixtures.js +141 -0
  19. package/dist/components/browser/componentFixtures.js.map +1 -0
  20. package/dist/components/browser/componentMeta.d.ts.map +1 -1
  21. package/dist/components/browser/componentMeta.js +71 -2
  22. package/dist/components/browser/componentMeta.js.map +1 -1
  23. package/dist/components/registry.d.ts.map +1 -1
  24. package/dist/components/registry.js +2 -0
  25. package/dist/components/registry.js.map +1 -1
  26. package/dist/components/units/AvailableUnitsExplorer.d.ts +54 -0
  27. package/dist/components/units/AvailableUnitsExplorer.d.ts.map +1 -0
  28. package/dist/components/units/AvailableUnitsExplorer.js +322 -0
  29. package/dist/components/units/AvailableUnitsExplorer.js.map +1 -0
  30. package/dist/components/units/InteractiveUnitMap.d.ts +67 -0
  31. package/dist/components/units/InteractiveUnitMap.d.ts.map +1 -0
  32. package/dist/components/units/InteractiveUnitMap.js +331 -0
  33. package/dist/components/units/InteractiveUnitMap.js.map +1 -0
  34. package/dist/components/units/UnitCard.d.ts +3 -1
  35. package/dist/components/units/UnitCard.d.ts.map +1 -1
  36. package/dist/components/units/UnitCard.js +5 -2
  37. package/dist/components/units/UnitCard.js.map +1 -1
  38. package/dist/components/units/UnitExplorer.d.ts.map +1 -1
  39. package/dist/components/units/UnitExplorer.js +4 -0
  40. package/dist/components/units/UnitExplorer.js.map +1 -1
  41. package/dist/components/units/UnitPage.d.ts +6 -1
  42. package/dist/components/units/UnitPage.d.ts.map +1 -1
  43. package/dist/components/units/UnitPage.js +69 -10
  44. package/dist/components/units/UnitPage.js.map +1 -1
  45. package/dist/components/units/types.d.ts +51 -0
  46. package/dist/components/units/types.d.ts.map +1 -1
  47. package/dist/hooks/useAuth.d.ts +3 -3
  48. package/dist/hooks/useAuth.d.ts.map +1 -1
  49. package/dist/hooks/useAuth.js +4 -2
  50. package/dist/hooks/useAuth.js.map +1 -1
  51. package/dist/index.d.ts +2 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +1 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/schema/componentSchema.d.ts.map +1 -1
  56. package/dist/schema/componentSchema.js +63 -2
  57. package/dist/schema/componentSchema.js.map +1 -1
  58. package/package.json +2 -1
@@ -0,0 +1,322 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import useSWR from "swr";
4
+ import useSWRInfinite from "swr/infinite";
5
+ import { twMerge } from "tailwind-merge";
6
+ import { useAuth } from "../../hooks/useAuth";
7
+ import { useSiteConfig } from "../../hooks/useSiteConfig";
8
+ import { useNavigate } from "../../router";
9
+ import { DEFAULT_UNIT_MAP_PROVIDER, InteractiveUnitMap, } from "./InteractiveUnitMap";
10
+ import { UnitCard } from "./UnitCard";
11
+ export function InfiniteLoadTrigger({ hasMore, loading, onLoadMore, }) {
12
+ const triggerRef = useRef(null);
13
+ useEffect(() => {
14
+ const trigger = triggerRef.current;
15
+ if (!trigger || !hasMore || loading || typeof IntersectionObserver === "undefined")
16
+ return;
17
+ const observer = new IntersectionObserver(([entry]) => {
18
+ if (!entry?.isIntersecting)
19
+ return;
20
+ observer.disconnect();
21
+ onLoadMore();
22
+ }, { rootMargin: "240px 0px" });
23
+ observer.observe(trigger);
24
+ return () => observer.disconnect();
25
+ }, [hasMore, loading, onLoadMore]);
26
+ if (!hasMore && !loading)
27
+ return null;
28
+ return (_jsx("div", { ref: triggerRef, className: "flex min-h-8 items-center justify-center py-3", "aria-live": "polite", children: loading ? (_jsx("span", { className: "text-sm text-[var(--color-muted)]", children: "Loading more homes..." })) : (_jsx("span", { className: "sr-only", children: "More homes load as you scroll" })) }));
29
+ }
30
+ const SERVER_SORT_LABELS = {
31
+ rent_asc: "Price: Low to high",
32
+ rent_desc: "Price: High to low",
33
+ date_available_asc: "Move-in: Soonest",
34
+ sqft_asc: "Size: Smallest",
35
+ sqft_desc: "Size: Largest",
36
+ bedrooms_asc: "Bedrooms: Fewest",
37
+ unit_number_asc: "Unit Number",
38
+ };
39
+ const EMPTY_FILTERS = {
40
+ q: "",
41
+ propertyId: "",
42
+ bedrooms: "",
43
+ minBathrooms: "",
44
+ minRent: "",
45
+ maxRent: "",
46
+ moveInDate: "",
47
+ };
48
+ const columnClasses = {
49
+ 1: "grid-cols-1",
50
+ 2: "grid-cols-1 md:grid-cols-2",
51
+ 3: "grid-cols-1 md:grid-cols-2 xl:grid-cols-3",
52
+ };
53
+ const BEDROOM_OPTIONS = [0, 1, 2, 3, 4, 5];
54
+ const BATHROOM_OPTIONS = [1, 2, 3];
55
+ function parsePropertyIds(propertyIds) {
56
+ return new Set((propertyIds ?? "").split(",").map((value) => value.trim()).filter(Boolean));
57
+ }
58
+ function propertyIdIsAllowed(propertyId, allowedPropertyIds) {
59
+ return !propertyId || allowedPropertyIds.size === 0 || allowedPropertyIds.has(propertyId);
60
+ }
61
+ function FilterMenu({ id, label, activeCount = 0, open, onToggle, children, }) {
62
+ return (_jsxs("div", { className: "relative", children: [_jsxs("button", { type: "button", "aria-haspopup": "dialog", "aria-expanded": open, "aria-controls": id, onClick: onToggle, className: twMerge("flex h-11 items-center gap-2 rounded-[var(--radius)] border bg-white px-3 text-sm font-medium text-[var(--color-foreground)] transition-colors", open
63
+ ? "border-[var(--color-primary)] ring-2 ring-[var(--color-primary)]/10"
64
+ : "border-[var(--color-muted)]/30 hover:border-[var(--color-primary)]/50"), children: [label, activeCount > 0 && (_jsx("span", { className: "inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-[var(--color-primary)] px-1.5 text-xs font-semibold text-white", children: activeCount })), _jsx("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", fill: "none", className: twMerge("h-4 w-4 text-[var(--color-muted)] transition-transform", open && "rotate-180"), children: _jsx("path", { d: "m6 8 4 4 4-4", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), open && (_jsx("div", { id: id, role: "dialog", className: "absolute right-0 z-30 mt-2 w-[min(20rem,calc(100vw-2rem))] rounded-[var(--radius)] border border-[var(--color-muted)]/20 bg-white p-4 shadow-lg", children: children }))] }));
65
+ }
66
+ function FilterChip({ label, onRemove }) {
67
+ return (_jsxs("button", { type: "button", onClick: onRemove, className: "inline-flex items-center gap-1.5 rounded-full bg-[var(--color-primary)]/8 px-3 py-1.5 text-xs font-medium text-[var(--color-primary)] hover:bg-[var(--color-primary)]/15", children: [label, _jsx("span", { "aria-hidden": "true", children: "\u00D7" }), _jsxs("span", { className: "sr-only", children: ["Remove ", label, " filter"] })] }));
68
+ }
69
+ /** Debounce free-text/number inputs so each keystroke doesn't refire the API trio. */
70
+ function useDebouncedValue(value, delayMs) {
71
+ const [debounced, setDebounced] = useState(value);
72
+ useEffect(() => {
73
+ const timer = window.setTimeout(() => setDebounced(value), delayMs);
74
+ return () => window.clearTimeout(timer);
75
+ }, [value, delayMs]);
76
+ return debounced;
77
+ }
78
+ function formatRent(value) {
79
+ if (value == null)
80
+ return null;
81
+ return `$${Number(value).toLocaleString()}`;
82
+ }
83
+ function formatRentRange(marker) {
84
+ const min = formatRent(marker.min_rent);
85
+ const max = formatRent(marker.max_rent);
86
+ if (min && max && min !== max)
87
+ return `${min}-${max}`;
88
+ return min ?? max ?? "Contact for pricing";
89
+ }
90
+ function formatMarkerBedrooms(marker) {
91
+ if (!marker.bedrooms.length)
92
+ return "";
93
+ return marker.bedrooms
94
+ .map((bed) => (bed === 0 ? "Studio" : `${bed} bed`))
95
+ .join(", ");
96
+ }
97
+ function unitHref(unit, unitBasePath) {
98
+ if (unit.detail_path)
99
+ return unit.detail_path;
100
+ if (unit.id == null)
101
+ return null;
102
+ return `${unitBasePath.replace(/\/$/, "")}/${unit.id}`;
103
+ }
104
+ export function AvailableUnitsExplorer({ layout = "split", listLayout = "grid", columns = 2, pageSize = 20, propertyIds, defaultPropertyId, showMap = true, mapHeight = "520px", mapProvider = DEFAULT_UNIT_MAP_PROVIDER, mapboxAccessToken, mapboxStyleUrl, maplibreTheme = "light", maplibreStyleUrl, mapFitMode = "all", mapMaxZoom = 14, showFilters = true, showSearch = true, showPropertyFilter = true, showBedroomFilter = true, showBathroomFilter = true, showPriceFilter = true, showMoveInFilter = true, showSort = true, showPricing = true, showAvailability = true, showFloorplan = true, showSquareFootage = true, showUnitNumber = true, showBedBath = true, showApplyButton = false, showScheduleButton = true, showSpecials = false, showImages = false, showLoadMore = false, cardStyle = "standard", onlyAvailable = true, sortBy = "rent_asc", applyUrl, unitBasePath = "/units", emptyMessage = "No available units match your search.", className, "data-node-id": dataNodeId, }) {
105
+ const config = useSiteConfig();
106
+ const { authenticatedFetch } = useAuth();
107
+ const navigate = useNavigate();
108
+ const siteId = config.siteId;
109
+ const apiBaseUrl = config.property?.apiBaseUrl ?? "";
110
+ const allowedPropertyIds = useMemo(() => parsePropertyIds(propertyIds), [propertyIds]);
111
+ const initialPropertyId = defaultPropertyId && propertyIdIsAllowed(defaultPropertyId, allowedPropertyIds)
112
+ ? defaultPropertyId
113
+ : "";
114
+ const [filters, setFilters] = useState({
115
+ ...EMPTY_FILTERS,
116
+ propertyId: initialPropertyId,
117
+ });
118
+ const [sortField, setSortField] = useState(sortBy);
119
+ const [selectedMarkerId, setSelectedMarkerId] = useState(null);
120
+ const [openFilter, setOpenFilter] = useState(null);
121
+ const filterControlsRef = useRef(null);
122
+ useEffect(() => {
123
+ if (!openFilter)
124
+ return;
125
+ const closeOnOutsideClick = (event) => {
126
+ if (!filterControlsRef.current?.contains(event.target))
127
+ setOpenFilter(null);
128
+ };
129
+ const closeOnEscape = (event) => {
130
+ if (event.key === "Escape")
131
+ setOpenFilter(null);
132
+ };
133
+ document.addEventListener("mousedown", closeOnOutsideClick);
134
+ document.addEventListener("keydown", closeOnEscape);
135
+ return () => {
136
+ document.removeEventListener("mousedown", closeOnOutsideClick);
137
+ document.removeEventListener("keydown", closeOnEscape);
138
+ };
139
+ }, [openFilter]);
140
+ useEffect(() => {
141
+ setFilters((current) => propertyIdIsAllowed(current.propertyId, allowedPropertyIds)
142
+ ? current
143
+ : { ...current, propertyId: "" });
144
+ }, [allowedPropertyIds]);
145
+ // Text/number inputs update per keystroke; only query with them after a pause.
146
+ // Discrete controls (dropdowns, date picker) stay immediate.
147
+ const typedFilters = useMemo(() => ({ q: filters.q, minRent: filters.minRent, maxRent: filters.maxRent }), [filters.q, filters.minRent, filters.maxRent]);
148
+ const debouncedTypedFilters = useDebouncedValue(typedFilters, 400);
149
+ const queryFilters = useMemo(() => ({ ...filters, ...debouncedTypedFilters }), [filters, debouncedTypedFilters]);
150
+ const jsonFetcher = useCallback(async (url) => {
151
+ const res = await authenticatedFetch(url);
152
+ if (!res.ok)
153
+ throw new Error(`API error: ${res.status}`);
154
+ return res.json();
155
+ }, [authenticatedFetch]);
156
+ const buildParams = useCallback((cursor, mode = "list") => {
157
+ const params = new URLSearchParams();
158
+ if (mode === "list") {
159
+ params.set("limit", String(pageSize));
160
+ params.set("include_floorplan", "true");
161
+ if (showImages)
162
+ params.set("include_media", "true");
163
+ if (showSpecials)
164
+ params.set("include_specials", "true");
165
+ if (cursor)
166
+ params.set("cursor", cursor);
167
+ params.set("sort_by", sortField);
168
+ }
169
+ if (mode !== "list")
170
+ params.set("limit", "5000");
171
+ if (onlyAvailable)
172
+ params.set("only_available", "true");
173
+ const selectedPropertyId = propertyIdIsAllowed(queryFilters.propertyId, allowedPropertyIds)
174
+ ? queryFilters.propertyId
175
+ : "";
176
+ const effectivePropertyIds = selectedPropertyId || propertyIds || "";
177
+ if (effectivePropertyIds)
178
+ params.set("property_ids", effectivePropertyIds);
179
+ if (queryFilters.q.trim())
180
+ params.set("q", queryFilters.q.trim());
181
+ if (queryFilters.bedrooms)
182
+ params.set("bedrooms", queryFilters.bedrooms);
183
+ if (queryFilters.minBathrooms)
184
+ params.set("min_bathrooms", queryFilters.minBathrooms);
185
+ if (queryFilters.minRent)
186
+ params.set("min_rent", queryFilters.minRent);
187
+ if (queryFilters.maxRent)
188
+ params.set("max_rent", queryFilters.maxRent);
189
+ // A chosen move-in date is a ceiling: show units ready by that date.
190
+ if (queryFilters.moveInDate)
191
+ params.set("move_in_end", queryFilters.moveInDate);
192
+ return params.toString();
193
+ }, [allowedPropertyIds, queryFilters, onlyAvailable, pageSize, propertyIds, showImages, showSpecials, sortField]);
194
+ const { data, error, setSize, isLoading, isValidating } = useSWRInfinite((pageIndex, previousPageData) => {
195
+ if (!siteId)
196
+ return null;
197
+ if (pageIndex > 0 && previousPageData && !previousPageData.cursor)
198
+ return null;
199
+ const cursor = previousPageData?.cursor ?? undefined;
200
+ return `${apiBaseUrl}/v1/sites/${siteId}/units?${buildParams(cursor, "list")}`;
201
+ }, jsonFetcher, { revalidateFirstPage: false, keepPreviousData: true });
202
+ // A filter or sort change starts a new result set — collapse any
203
+ // "Load more" pages so we don't refetch the full depth of the old set.
204
+ const listQueryKey = buildParams(undefined, "list");
205
+ useEffect(() => {
206
+ setSize(1);
207
+ // eslint-disable-next-line react-hooks/exhaustive-deps
208
+ }, [listQueryKey]);
209
+ const markersKey = siteId && showMap
210
+ ? `${apiBaseUrl}/v1/sites/${siteId}/unit-markers?${buildParams(undefined, "markers")}`
211
+ : null;
212
+ const propertiesKey = siteId && showFilters && showPropertyFilter
213
+ ? `${apiBaseUrl}/v1/sites/${siteId}/properties`
214
+ : null;
215
+ // keepPreviousData holds the last result while a filter change revalidates,
216
+ // so the map stays mounted and dropdowns don't vanish mid-request.
217
+ const { data: markerData, error: markerError } = useSWR(markersKey, jsonFetcher, { keepPreviousData: true });
218
+ const { data: propertyData } = useSWR(propertiesKey, jsonFetcher);
219
+ const units = data ? data.flatMap((page) => page.items) : [];
220
+ const hasMore = data ? data[data.length - 1]?.cursor != null : false;
221
+ const markers = markerData?.items ?? [];
222
+ const selectedMarker = markers.find((marker) => marker.id === selectedMarkerId) ?? null;
223
+ const propertyOptions = useMemo(() => {
224
+ return (propertyData?.items ?? [])
225
+ .filter((property) => allowedPropertyIds.size === 0 || allowedPropertyIds.has(String(property.id)))
226
+ .map((property) => ({
227
+ value: String(property.id),
228
+ label: property.name ?? property.address ?? `Community ${property.id}`,
229
+ }))
230
+ .sort((a, b) => a.label.localeCompare(b.label));
231
+ }, [allowedPropertyIds, propertyData]);
232
+ const selectedPropertyId = propertyIdIsAllowed(filters.propertyId, allowedPropertyIds)
233
+ ? filters.propertyId
234
+ : "";
235
+ const hasActiveFilters = filters.q ||
236
+ selectedPropertyId ||
237
+ filters.bedrooms ||
238
+ filters.minBathrooms ||
239
+ filters.minRent ||
240
+ filters.maxRent ||
241
+ filters.moveInDate;
242
+ const loadNextPage = useCallback(() => {
243
+ setSize((currentSize) => currentSize + 1);
244
+ }, [setSize]);
245
+ if (!siteId) {
246
+ return (_jsx("div", { "data-node-id": dataNodeId, className: "text-sm text-[var(--color-muted)]", children: "No site configured" }));
247
+ }
248
+ const filterInputClasses = "h-11 rounded-[var(--radius)] border border-[var(--color-muted)]/30 bg-white px-3 text-sm text-[var(--color-foreground)]";
249
+ const selectedBedrooms = filters.bedrooms ? filters.bedrooms.split(",") : [];
250
+ const toggleBedroom = (bedroom) => {
251
+ const value = String(bedroom);
252
+ setFilters((current) => {
253
+ const selected = new Set(current.bedrooms ? current.bedrooms.split(",") : []);
254
+ if (selected.has(value))
255
+ selected.delete(value);
256
+ else
257
+ selected.add(value);
258
+ return {
259
+ ...current,
260
+ bedrooms: [...selected].sort((a, b) => Number(a) - Number(b)).join(","),
261
+ };
262
+ });
263
+ };
264
+ const bedroomLabel = selectedBedrooms.length === 0
265
+ ? "Bedrooms"
266
+ : selectedBedrooms.map((value) => value === "0" ? "Studio" : `${value} bed`).join(", ");
267
+ const rentLabel = filters.minRent || filters.maxRent
268
+ ? `${filters.minRent ? `$${Number(filters.minRent).toLocaleString()}` : "Any"}–${filters.maxRent ? `$${Number(filters.maxRent).toLocaleString()}` : "Any"}`
269
+ : "Monthly rent";
270
+ const secondaryFilterCount = Number(Boolean(selectedPropertyId)) +
271
+ Number(Boolean(filters.minBathrooms)) + Number(Boolean(filters.moveInDate));
272
+ const selectedProperty = propertyOptions.find((option) => option.value === selectedPropertyId);
273
+ const filterControls = showFilters ? (_jsxs("div", { ref: filterControlsRef, className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [showSearch && (_jsx("input", { type: "search", value: filters.q, onChange: (event) => setFilters((current) => ({ ...current, q: event.target.value })), placeholder: "Community, address, or unit", "aria-label": "Search by community, address, or unit", className: twMerge(filterInputClasses, "min-w-[240px] flex-[2_1_320px]") })), showBedroomFilter && (_jsx(FilterMenu, { id: "unit-filter-bedrooms", label: bedroomLabel, activeCount: selectedBedrooms.length, open: openFilter === "bedrooms", onToggle: () => setOpenFilter((current) => current === "bedrooms" ? null : "bedrooms"), children: _jsxs("fieldset", { children: [_jsx("legend", { className: "mb-3 text-sm font-semibold text-[var(--color-foreground)]", children: "Bedrooms" }), _jsx("div", { className: "grid grid-cols-3 gap-2", children: BEDROOM_OPTIONS.map((bedroom) => {
274
+ const checked = selectedBedrooms.includes(String(bedroom));
275
+ return (_jsxs("label", { className: twMerge("cursor-pointer rounded-[var(--radius)] border px-3 py-2 text-center text-sm", checked
276
+ ? "border-[var(--color-primary)] bg-[var(--color-primary)]/8 text-[var(--color-primary)]"
277
+ : "border-[var(--color-muted)]/25 text-[var(--color-foreground)]"), children: [_jsx("input", { type: "checkbox", checked: checked, onChange: () => toggleBedroom(bedroom), className: "sr-only" }), bedroom === 0 ? "Studio" : bedroom] }, bedroom));
278
+ }) })] }) })), showPriceFilter && (_jsx(FilterMenu, { id: "unit-filter-rent", label: rentLabel, activeCount: Number(Boolean(filters.minRent || filters.maxRent)), open: openFilter === "rent", onToggle: () => setOpenFilter((current) => current === "rent" ? null : "rent"), children: _jsxs("fieldset", { children: [_jsx("legend", { className: "mb-3 text-sm font-semibold text-[var(--color-foreground)]", children: "Monthly rent" }), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsxs("label", { className: "text-xs text-[var(--color-muted)]", children: ["Minimum", _jsx("input", { type: "number", inputMode: "numeric", value: filters.minRent, onChange: (event) => setFilters((current) => ({ ...current, minRent: event.target.value })), placeholder: "No minimum", className: twMerge(filterInputClasses, "mt-1 w-full") })] }), _jsxs("label", { className: "text-xs text-[var(--color-muted)]", children: ["Maximum", _jsx("input", { type: "number", inputMode: "numeric", value: filters.maxRent, onChange: (event) => setFilters((current) => ({ ...current, maxRent: event.target.value })), placeholder: "No maximum", className: twMerge(filterInputClasses, "mt-1 w-full") })] })] })] }) })), (showPropertyFilter || showBathroomFilter || showMoveInFilter) && (_jsx(FilterMenu, { id: "unit-filter-more", label: "More filters", activeCount: secondaryFilterCount, open: openFilter === "more", onToggle: () => setOpenFilter((current) => current === "more" ? null : "more"), children: _jsxs("div", { className: "flex flex-col gap-4", children: [showBathroomFilter && (_jsxs("fieldset", { children: [_jsx("legend", { className: "mb-2 text-sm font-semibold text-[var(--color-foreground)]", children: "Bathrooms" }), _jsxs("div", { className: "flex gap-2", children: [BATHROOM_OPTIONS.map((bathroom) => (_jsxs("label", { className: twMerge("cursor-pointer rounded-[var(--radius)] border px-3 py-2 text-sm", filters.minBathrooms === String(bathroom) ? "border-[var(--color-primary)] bg-[var(--color-primary)]/8 text-[var(--color-primary)]" : "border-[var(--color-muted)]/25"), children: [_jsx("input", { type: "radio", name: "minimum-bathrooms", checked: filters.minBathrooms === String(bathroom), onChange: () => setFilters((current) => ({ ...current, minBathrooms: String(bathroom) })), className: "sr-only" }), bathroom, "+"] }, bathroom))), filters.minBathrooms && _jsx("button", { type: "button", onClick: () => setFilters((current) => ({ ...current, minBathrooms: "" })), className: "text-xs text-[var(--color-primary)] hover:underline", children: "Any" })] })] })), showMoveInFilter && (_jsxs("label", { className: "text-sm font-semibold text-[var(--color-foreground)]", children: ["Move in by", _jsx("input", { type: "date", value: filters.moveInDate, onChange: (event) => setFilters((current) => ({ ...current, moveInDate: event.target.value })), className: twMerge(filterInputClasses, "mt-1 w-full font-normal") })] })), showPropertyFilter && propertyOptions.length > 1 && (_jsxs("label", { className: "text-sm font-semibold text-[var(--color-foreground)]", children: ["Community", _jsxs("select", { value: selectedPropertyId, onChange: (event) => setFilters((current) => ({ ...current, propertyId: event.target.value })), className: twMerge(filterInputClasses, "mt-1 w-full font-normal"), children: [_jsx("option", { value: "", children: "All communities" }), propertyOptions.map((option) => _jsx("option", { value: option.value, children: option.label }, option.value))] })] }))] }) })), showSort && (_jsxs("div", { className: "relative ml-auto", children: [_jsxs("button", { type: "button", "aria-haspopup": "listbox", "aria-expanded": openFilter === "sort", "aria-controls": "unit-sort-menu", "aria-label": `Sort by ${SERVER_SORT_LABELS[sortField]}`, onClick: () => setOpenFilter((current) => current === "sort" ? null : "sort"), className: twMerge("flex h-11 items-center gap-2 rounded-[var(--radius)] border bg-white px-3 text-left transition-colors", openFilter === "sort"
279
+ ? "border-[var(--color-primary)] ring-2 ring-[var(--color-primary)]/10"
280
+ : "border-[var(--color-muted)]/30 hover:border-[var(--color-primary)]/50"), children: [_jsx("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", fill: "none", className: "h-4 w-4 shrink-0 text-[var(--color-primary)]", children: _jsx("path", { d: "M6 4v12m0 0-2.5-2.5M6 16l2.5-2.5M14 16V4m0 0-2.5 2.5M14 4l2.5 2.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }), _jsx("span", { className: "hidden text-xs font-medium text-[var(--color-muted)] sm:inline", children: "Sort" }), _jsx("span", { className: "max-w-44 truncate text-sm font-semibold text-[var(--color-foreground)]", children: SERVER_SORT_LABELS[sortField] }), _jsx("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", fill: "none", className: twMerge("h-4 w-4 shrink-0 text-[var(--color-muted)] transition-transform", openFilter === "sort" && "rotate-180"), children: _jsx("path", { d: "m6 8 4 4 4-4", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), openFilter === "sort" && (_jsxs("div", { id: "unit-sort-menu", role: "listbox", "aria-label": "Sort homes", className: "absolute right-0 z-30 mt-2 w-64 overflow-hidden rounded-[var(--radius)] border border-[var(--color-muted)]/20 bg-white p-1.5 shadow-lg", children: [_jsx("div", { className: "px-3 pb-1.5 pt-2 text-xs font-semibold uppercase tracking-wide text-[var(--color-muted)]", children: "Sort homes by" }), Object.keys(SERVER_SORT_LABELS).map((value) => {
281
+ const selected = value === sortField;
282
+ return (_jsxs("button", { type: "button", role: "option", "aria-selected": selected, onClick: () => {
283
+ setSortField(value);
284
+ setOpenFilter(null);
285
+ }, className: twMerge("flex w-full items-center justify-between gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors", selected
286
+ ? "bg-[var(--color-primary)]/8 font-semibold text-[var(--color-primary)]"
287
+ : "text-[var(--color-foreground)] hover:bg-[var(--color-muted)]/10"), children: [SERVER_SORT_LABELS[value], selected && (_jsx("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", fill: "none", className: "h-4 w-4 shrink-0", children: _jsx("path", { d: "m4.5 10.5 3.5 3.5 7.5-8", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) }))] }, value));
288
+ })] }))] }))] }), hasActiveFilters && (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [filters.q && _jsx(FilterChip, { label: `Search: ${filters.q}`, onRemove: () => setFilters((current) => ({ ...current, q: "" })) }), filters.bedrooms && _jsx(FilterChip, { label: bedroomLabel, onRemove: () => setFilters((current) => ({ ...current, bedrooms: "" })) }), (filters.minRent || filters.maxRent) && _jsx(FilterChip, { label: rentLabel, onRemove: () => setFilters((current) => ({ ...current, minRent: "", maxRent: "" })) }), filters.minBathrooms && _jsx(FilterChip, { label: `${filters.minBathrooms}+ bathrooms`, onRemove: () => setFilters((current) => ({ ...current, minBathrooms: "" })) }), filters.moveInDate && _jsx(FilterChip, { label: `Move in by ${filters.moveInDate}`, onRemove: () => setFilters((current) => ({ ...current, moveInDate: "" })) }), selectedPropertyId && _jsx(FilterChip, { label: selectedProperty?.label ?? "Selected community", onRemove: () => setFilters((current) => ({ ...current, propertyId: "" })) }), _jsx("button", { type: "button", onClick: () => { setFilters({ ...EMPTY_FILTERS, propertyId: initialPropertyId }); setSelectedMarkerId(null); }, className: "px-2 py-1 text-xs font-semibold text-[var(--color-primary)] hover:underline", children: "Clear all" })] }))] })) : null;
289
+ const mapPanel = showMap ? (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "relative overflow-hidden rounded-[var(--radius)] border border-[var(--color-muted)]/20 bg-[#dce6ea]", style: {
290
+ height: mapHeight,
291
+ }, children: [markers.length === 0 ? (_jsx("div", { className: "flex h-full items-center justify-center px-6 text-center text-sm text-[var(--color-muted)]", children: !markerData && !markerError
292
+ ? "Loading map..."
293
+ : markerError
294
+ ? "Map is unavailable right now."
295
+ : "No mapped units match your search." })) : (_jsx(_Fragment, { children: _jsx(InteractiveUnitMap, { markers: markers, selectedMarkerId: selectedMarkerId, onMarkerSelect: (markerId) => setSelectedMarkerId((current) => (current === markerId ? null : markerId)), provider: mapProvider, mapboxAccessToken: mapboxAccessToken, mapboxStyleUrl: mapboxStyleUrl, maplibreTheme: maplibreTheme, maplibreStyleUrl: maplibreStyleUrl, fitMode: mapFitMode, maxZoom: mapMaxZoom }) })), selectedMarker && (_jsxs("div", { className: "absolute bottom-3 left-3 right-3 rounded-[var(--radius)] border border-[var(--color-muted)]/15 bg-white p-3 shadow-lg sm:right-auto sm:w-72", children: [_jsx("div", { className: "text-sm font-semibold text-[var(--color-foreground)]", children: selectedMarker.label ?? selectedMarker.property?.name ?? "Community" }), _jsxs("div", { className: "mt-1 text-xs text-[var(--color-muted)]", children: [selectedMarker.count, " units | ", formatRentRange(selectedMarker), formatMarkerBedrooms(selectedMarker) ? ` | ${formatMarkerBedrooms(selectedMarker)}` : ""] }), _jsx("button", { onClick: () => {
296
+ const markerPropertyId = String(selectedMarker.property?.id ?? selectedMarker.property_id);
297
+ if (!propertyIdIsAllowed(markerPropertyId, allowedPropertyIds))
298
+ return;
299
+ setFilters((current) => ({ ...current, propertyId: markerPropertyId }));
300
+ }, disabled: !propertyIdIsAllowed(String(selectedMarker.property?.id ?? selectedMarker.property_id), allowedPropertyIds), className: "mt-3 rounded-[var(--radius)] bg-[var(--color-primary)] px-3 py-1.5 text-xs font-semibold text-white transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40", children: "Show units" })] }))] }), markerData?.truncated && (_jsx("p", { className: "text-xs text-[var(--color-muted)]", children: "Showing the first 5,000 mapped units for these filters." }))] })) : null;
301
+ // With keepPreviousData the old result set stays visible while a new
302
+ // filter combination loads — dim it so it reads as stale, not current.
303
+ const showingStaleResults = isValidating && !isLoading && units.length > 0;
304
+ const navigateToSchedule = (href) => {
305
+ navigate(href);
306
+ window.location.hash = "schedule";
307
+ };
308
+ const navigateToUnit = (href) => {
309
+ navigate(href);
310
+ window.history.replaceState(window.history.state, "", href);
311
+ };
312
+ const listPanel = (_jsxs("div", { "aria-busy": showingStaleResults, className: twMerge("min-w-0", showingStaleResults && "pointer-events-none select-none opacity-60 transition-opacity"), children: [error && (_jsx("div", { className: "mb-4 text-sm text-red-600", children: "Units are unavailable right now." })), isLoading && units.length === 0 ? (_jsx("div", { className: "py-12 text-center text-sm text-[var(--color-muted)]", children: "Loading units..." })) : units.length === 0 && !error ? (_jsx("div", { className: "py-12 text-center text-sm text-[var(--color-muted)]", children: emptyMessage })) : listLayout === "grid" ? (_jsx("div", { className: twMerge("grid gap-4", columnClasses[columns] ?? columnClasses[2]), children: units.map((unit) => {
313
+ const href = unitHref(unit, unitBasePath);
314
+ return (_jsxs("div", { className: "min-w-0", children: [unit.property?.name && (_jsx("div", { className: "mb-1 text-xs font-medium text-[var(--color-muted)]", children: unit.property.name })), _jsx(UnitCard, { unit: unit, style: cardStyle, showPricing: showPricing, showAvailability: showAvailability, showFloorplan: showFloorplan, showSquareFootage: showSquareFootage, showUnitNumber: showUnitNumber, showBedBath: showBedBath, showApplyButton: showApplyButton, showScheduleButton: showScheduleButton, showSpecials: showSpecials, showImage: showImages, applyUrl: applyUrl, onClick: href ? () => navigateToUnit(href) : undefined, onSchedule: href ? () => navigateToSchedule(href) : undefined })] }, unit.id ?? `${unit.property_id}:${unit.unit_number}`));
315
+ }) })) : (_jsx("div", { className: "flex flex-col gap-3", children: units.map((unit) => {
316
+ const href = unitHref(unit, unitBasePath);
317
+ return (_jsxs("div", { children: [unit.property?.name && (_jsx("div", { className: "mb-1 text-xs font-medium text-[var(--color-muted)]", children: unit.property.name })), _jsx(UnitCard, { unit: unit, style: cardStyle, showPricing: showPricing, showAvailability: showAvailability, showFloorplan: showFloorplan, showSquareFootage: showSquareFootage, showUnitNumber: showUnitNumber, showBedBath: showBedBath, showApplyButton: showApplyButton, showScheduleButton: showScheduleButton, showSpecials: showSpecials, showImage: showImages, applyUrl: applyUrl, onClick: href ? () => navigateToUnit(href) : undefined, onSchedule: href ? () => navigateToSchedule(href) : undefined })] }, unit.id ?? `${unit.property_id}:${unit.unit_number}`));
318
+ }) })), hasMore &&
319
+ (showLoadMore ? (_jsx("div", { className: "mt-6 text-center", children: _jsx("button", { type: "button", onClick: loadNextPage, disabled: isValidating, className: "rounded-[var(--radius)] border border-[var(--color-primary)]/30 px-5 py-2 text-sm font-semibold text-[var(--color-primary)] transition-colors hover:bg-[var(--color-primary)]/5 disabled:opacity-50", children: isValidating ? "Loading..." : "Load more" }) })) : (_jsx(InfiniteLoadTrigger, { hasMore: true, loading: isValidating, onLoadMore: loadNextPage })))] }));
320
+ return (_jsxs("div", { "data-node-id": dataNodeId, className: twMerge("flex w-full flex-col gap-6", className), children: [filterControls, showMap && layout === "split" ? (_jsxs("div", { className: "grid gap-6 lg:grid-cols-[minmax(300px,0.9fr)_minmax(0,1.1fr)]", children: [mapPanel, _jsx("div", { role: "region", "aria-label": "Available homes", tabIndex: 0, className: "min-w-0 lg:max-h-[var(--unit-map-height)] lg:overflow-y-auto lg:overscroll-contain lg:pr-2", style: { "--unit-map-height": mapHeight }, children: listPanel })] })) : (_jsxs("div", { className: "flex flex-col gap-6", children: [mapPanel, listPanel] }))] }));
321
+ }
322
+ //# sourceMappingURL=AvailableUnitsExplorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvailableUnitsExplorer.js","sourceRoot":"","sources":["../../../src/components/units/AvailableUnitsExplorer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Protocol } from "pmtiles";
2
+ import type { PublicUnitMarker } from "./types";
3
+ export type UnitMapProvider = "auto" | "mapbox" | "maplibre";
4
+ export type UnitMapFitMode = "all" | "dense";
5
+ export type UnitMapTheme = "light" | "dark";
6
+ export declare const DEFAULT_UNIT_MAP_PROVIDER: UnitMapProvider;
7
+ export declare const ELISE_MAPLIBRE_STYLE_URLS: Record<UnitMapTheme, string>;
8
+ interface InteractiveUnitMapProps {
9
+ markers: PublicUnitMarker[];
10
+ selectedMarkerId: string | null;
11
+ onMarkerSelect: (markerId: string) => void;
12
+ provider?: UnitMapProvider;
13
+ mapboxAccessToken?: string;
14
+ mapboxStyleUrl?: string;
15
+ maplibreTheme?: UnitMapTheme;
16
+ maplibreStyleUrl?: string;
17
+ fitMode?: UnitMapFitMode;
18
+ maxZoom?: number;
19
+ fitPadding?: number;
20
+ className?: string;
21
+ }
22
+ interface StudioRuntimeConfig {
23
+ mapboxAccessToken?: string;
24
+ mapboxStyleUrl?: string;
25
+ maplibreStyleUrl?: string;
26
+ }
27
+ interface MapInstance {
28
+ addControl(control: unknown, position?: string): void;
29
+ fitBounds(bounds: unknown, options?: Record<string, unknown>): void;
30
+ flyTo(options: Record<string, unknown>): void;
31
+ off(type: string, listener: () => void): void;
32
+ on(type: string, listener: () => void): void;
33
+ remove(): void;
34
+ resize(): void;
35
+ }
36
+ interface MapMarker {
37
+ addTo(map: MapInstance): MapMarker;
38
+ remove(): void;
39
+ setLngLat(lngLat: [number, number]): MapMarker;
40
+ }
41
+ interface MapLibrary {
42
+ addProtocol(name: string, handler: Protocol["tile"]): void;
43
+ accessToken?: string;
44
+ LngLatBounds: new (sw?: [number, number], ne?: [number, number]) => {
45
+ extend(lngLat: [number, number]): void;
46
+ };
47
+ Map: new (options: Record<string, unknown>) => MapInstance;
48
+ Marker: new (options: {
49
+ element: HTMLElement;
50
+ anchor?: string;
51
+ }) => MapMarker;
52
+ NavigationControl: new (options?: Record<string, unknown>) => unknown;
53
+ }
54
+ declare global {
55
+ interface Window {
56
+ __ELISE_STUDIO_MAPBOX_ACCESS_TOKEN__?: string;
57
+ __ELISE_STUDIO_RUNTIME_CONFIG__?: StudioRuntimeConfig;
58
+ mapboxgl?: MapLibrary;
59
+ maplibregl?: MapLibrary;
60
+ }
61
+ }
62
+ export declare function ensurePmtilesProtocol(library: Pick<MapLibrary, "addProtocol">): void;
63
+ export declare function markerButtonClasses(selected: boolean): string;
64
+ export declare function markerBubbleClasses(selected: boolean): string;
65
+ export declare function InteractiveUnitMap({ markers, selectedMarkerId, onMarkerSelect, provider, mapboxAccessToken, mapboxStyleUrl, maplibreTheme, maplibreStyleUrl, fitMode, maxZoom, fitPadding, className, }: InteractiveUnitMapProps): import("react/jsx-runtime").JSX.Element;
66
+ export {};
67
+ //# sourceMappingURL=InteractiveUnitMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveUnitMap.d.ts","sourceRoot":"","sources":["../../../src/components/units/InteractiveUnitMap.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAC5C,eAAO,MAAM,yBAAyB,EAAE,eAA4B,CAAC;AAKrE,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGlE,CAAC;AAGF,UAAU,uBAAuB;IAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACpE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9C,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC7C,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC;IACnC,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAChD;AAED,UAAU,UAAU;IAClB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK;QAClE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;KACxC,CAAC;IACF,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,WAAW,CAAC;IAC3D,MAAM,EAAE,KAAK,OAAO,EAAE;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,SAAS,CAAC;IAC9E,iBAAiB,EAAE,KAAK,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;CACvE;AAYD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,oCAAoC,CAAC,EAAE,MAAM,CAAC;QAC9C,+BAA+B,CAAC,EAAE,mBAAmB,CAAC;QACtD,QAAQ,CAAC,EAAE,UAAU,CAAC;QACtB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;CACF;AAgFD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAI,CAKpF;AA+BD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAK7D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAO7D;AAqFD,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAoC,EACpC,iBAAiB,EACjB,cAAc,EACd,aAAuB,EACvB,gBAAgB,EAChB,OAAe,EACf,OAAY,EACZ,UAAe,EACf,SAAS,GACV,EAAE,uBAAuB,2CAoLzB"}