@meetelise/studio-components 0.0.22 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/componentSchema.json +43 -1
- package/dist/components/Accordion.d.ts +1 -1
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Accordion.js +5 -1
- package/dist/components/Accordion.js.map +1 -1
- package/dist/components/AddressBlock.d.ts.map +1 -1
- package/dist/components/AddressBlock.js +4 -0
- package/dist/components/AddressBlock.js.map +1 -1
- package/dist/components/AmenityList.d.ts +1 -1
- package/dist/components/AmenityList.d.ts.map +1 -1
- package/dist/components/AmenityList.js +37 -6
- package/dist/components/AmenityList.js.map +1 -1
- package/dist/components/Container.d.ts +2 -1
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/Container.js +5 -3
- package/dist/components/Container.js.map +1 -1
- package/dist/components/FeatureCard.d.ts +2 -1
- package/dist/components/FeatureCard.d.ts.map +1 -1
- package/dist/components/FeatureCard.js +2 -1
- package/dist/components/FeatureCard.js.map +1 -1
- package/dist/components/Footer.d.ts +2 -1
- package/dist/components/Footer.d.ts.map +1 -1
- package/dist/components/Footer.js +2 -1
- package/dist/components/Footer.js.map +1 -1
- package/dist/components/Gallery.d.ts +3 -2
- package/dist/components/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery.js +45 -12
- package/dist/components/Gallery.js.map +1 -1
- package/dist/components/Image.d.ts +2 -1
- package/dist/components/Image.d.ts.map +1 -1
- package/dist/components/Image.js +2 -1
- package/dist/components/Image.js.map +1 -1
- package/dist/components/Lightbox.d.ts +2 -1
- package/dist/components/Lightbox.d.ts.map +1 -1
- package/dist/components/Lightbox.js +2 -1
- package/dist/components/Lightbox.js.map +1 -1
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/Link.js +4 -0
- package/dist/components/Link.js.map +1 -1
- package/dist/components/Modal.d.ts +1 -1
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Modal.js +4 -2
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/Nav.d.ts +2 -1
- package/dist/components/Nav.d.ts.map +1 -1
- package/dist/components/Nav.js +3 -2
- package/dist/components/Nav.js.map +1 -1
- package/dist/components/PropertyCard.d.ts +1 -1
- package/dist/components/PropertyCard.d.ts.map +1 -1
- package/dist/components/PropertyCard.js +9 -1
- package/dist/components/PropertyCard.js.map +1 -1
- package/dist/components/StudioEditPlaceholder.d.ts +9 -0
- package/dist/components/StudioEditPlaceholder.d.ts.map +1 -0
- package/dist/components/StudioEditPlaceholder.js +8 -0
- package/dist/components/StudioEditPlaceholder.js.map +1 -0
- package/dist/components/StudioImage.d.ts +18 -0
- package/dist/components/StudioImage.d.ts.map +1 -0
- package/dist/components/StudioImage.js +76 -0
- package/dist/components/StudioImage.js.map +1 -0
- package/dist/components/VideoEmbed.d.ts +10 -0
- package/dist/components/VideoEmbed.d.ts.map +1 -0
- package/dist/components/VideoEmbed.js +47 -0
- package/dist/components/VideoEmbed.js.map +1 -0
- package/dist/components/VideoHero.d.ts +2 -1
- package/dist/components/VideoHero.d.ts.map +1 -1
- package/dist/components/VideoHero.js +3 -1
- package/dist/components/VideoHero.js.map +1 -1
- package/dist/components/VideoPlayer.d.ts +1 -1
- package/dist/components/VideoPlayer.d.ts.map +1 -1
- package/dist/components/VideoPlayer.js +4 -2
- package/dist/components/VideoPlayer.js.map +1 -1
- package/dist/components/browser/componentMeta.d.ts.map +1 -1
- package/dist/components/browser/componentMeta.js +31 -0
- package/dist/components/browser/componentMeta.js.map +1 -1
- package/dist/components/registry.d.ts.map +1 -1
- package/dist/components/registry.js +2 -0
- package/dist/components/registry.js.map +1 -1
- package/dist/components/units/FloorPlanCard.d.ts.map +1 -1
- package/dist/components/units/FloorPlanCard.js +2 -2
- package/dist/components/units/FloorPlanCard.js.map +1 -1
- package/dist/components/units/FloorplanExplorer.d.ts.map +1 -1
- package/dist/components/units/FloorplanExplorer.js +3 -3
- package/dist/components/units/FloorplanExplorer.js.map +1 -1
- package/dist/components/units/UnitCard.d.ts.map +1 -1
- package/dist/components/units/UnitCard.js +3 -3
- package/dist/components/units/UnitCard.js.map +1 -1
- package/dist/components/units/UnitPage.d.ts.map +1 -1
- package/dist/components/units/UnitPage.js +2 -2
- package/dist/components/units/UnitPage.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/componentSchema.d.ts +1 -1
- package/dist/schema/componentSchema.d.ts.map +1 -1
- package/dist/schema/componentSchema.js +16 -1
- package/dist/schema/componentSchema.js.map +1 -1
- package/dist/utils/imageUrl.d.ts +13 -3
- package/dist/utils/imageUrl.d.ts.map +1 -1
- package/dist/utils/imageUrl.js +58 -19
- package/dist/utils/imageUrl.js.map +1 -1
- package/dist/utils/resolveConfig.d.ts +48 -4
- package/dist/utils/resolveConfig.d.ts.map +1 -1
- package/dist/utils/resolveConfig.js +171 -14
- package/dist/utils/resolveConfig.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,32 +1,47 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useMemo, useEffect, useCallback } from "react";
|
|
2
|
+
import { useState, useMemo, useEffect, useCallback, useRef } from "react";
|
|
3
3
|
import { twMerge } from "tailwind-merge";
|
|
4
4
|
import { useSiteConfig } from "../hooks/useSiteConfig";
|
|
5
5
|
import { useAuth } from "../hooks/useAuth";
|
|
6
|
-
import { imageUrl } from "../utils/imageUrl";
|
|
7
6
|
import { Lightbox } from "./Lightbox";
|
|
7
|
+
import { StudioEditPlaceholder } from "./StudioEditPlaceholder";
|
|
8
|
+
import { StudioImage } from "./StudioImage";
|
|
8
9
|
const gridColClasses = {
|
|
9
10
|
2: "grid-cols-1 sm:grid-cols-2",
|
|
10
11
|
3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
11
12
|
4: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4",
|
|
12
13
|
};
|
|
14
|
+
const gridSizes = {
|
|
15
|
+
2: "(min-width: 640px) 50vw, 100vw",
|
|
16
|
+
3: "(min-width: 1024px) 33vw, (min-width: 640px) 50vw, 100vw",
|
|
17
|
+
4: "(min-width: 1024px) 25vw, (min-width: 640px) 33vw, 50vw",
|
|
18
|
+
};
|
|
13
19
|
/** Map media API "type" field to a user-friendly category name. */
|
|
14
20
|
const TYPE_TO_CATEGORY = {
|
|
15
21
|
Building: "Community",
|
|
16
22
|
UnitPhotography: "Interiors",
|
|
17
23
|
Floorplan: "Floor Plans",
|
|
18
24
|
};
|
|
25
|
+
function imageKey(src, index) {
|
|
26
|
+
if (typeof src === "string")
|
|
27
|
+
return `${src}-${index}`;
|
|
28
|
+
return `${src?.asset ?? src?.src ?? "image"}-${index}`;
|
|
29
|
+
}
|
|
19
30
|
export function Gallery({ propertyId: propertyIdProp, images: staticImages = [], categories, layout = "grid", columns = 3, className, "data-node-id": dataNodeId, }) {
|
|
20
31
|
const config = useSiteConfig();
|
|
21
32
|
const { authenticatedFetch } = useAuth();
|
|
22
33
|
const propertyId = propertyIdProp ?? config.property?.propertyId;
|
|
23
34
|
const apiBaseUrl = config.property?.apiBaseUrl ?? "";
|
|
24
35
|
const [apiImages, setApiImages] = useState(null);
|
|
25
|
-
const [loading, setLoading] = useState(
|
|
36
|
+
const [loading, setLoading] = useState(Boolean(propertyId));
|
|
37
|
+
const [loadedPropertyId, setLoadedPropertyId] = useState(null);
|
|
38
|
+
const requestSeqRef = useRef(0);
|
|
26
39
|
// Fetch from media API when propertyId is available
|
|
27
40
|
const fetchMedia = useCallback(async () => {
|
|
28
41
|
if (!propertyId)
|
|
29
42
|
return;
|
|
43
|
+
const requestSeq = requestSeqRef.current + 1;
|
|
44
|
+
requestSeqRef.current = requestSeq;
|
|
30
45
|
setLoading(true);
|
|
31
46
|
try {
|
|
32
47
|
const res = await authenticatedFetch(`${apiBaseUrl}/v1/properties/${propertyId}?include_media=true`);
|
|
@@ -37,21 +52,38 @@ export function Gallery({ propertyId: propertyIdProp, images: staticImages = [],
|
|
|
37
52
|
alt: m.name || m.description || "",
|
|
38
53
|
category: TYPE_TO_CATEGORY[m.type ?? ""] ?? m.type ?? undefined,
|
|
39
54
|
}));
|
|
55
|
+
if (requestSeq !== requestSeqRef.current)
|
|
56
|
+
return;
|
|
40
57
|
setApiImages(items);
|
|
41
58
|
}
|
|
42
59
|
catch {
|
|
60
|
+
if (requestSeq !== requestSeqRef.current)
|
|
61
|
+
return;
|
|
43
62
|
setApiImages(null);
|
|
44
63
|
}
|
|
45
64
|
finally {
|
|
46
|
-
|
|
65
|
+
if (requestSeq === requestSeqRef.current) {
|
|
66
|
+
setLoadedPropertyId(propertyId);
|
|
67
|
+
setLoading(false);
|
|
68
|
+
}
|
|
47
69
|
}
|
|
48
70
|
}, [propertyId, apiBaseUrl, authenticatedFetch]);
|
|
49
71
|
useEffect(() => {
|
|
50
|
-
if (propertyId)
|
|
51
|
-
|
|
72
|
+
if (!propertyId) {
|
|
73
|
+
requestSeqRef.current += 1;
|
|
74
|
+
setApiImages(null);
|
|
75
|
+
setLoadedPropertyId(null);
|
|
76
|
+
setLoading(false);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
fetchMedia();
|
|
52
80
|
}, [propertyId, fetchMedia]);
|
|
53
81
|
// Use API images if available, else static content-blob images
|
|
54
|
-
const
|
|
82
|
+
const hasFreshApiImages = Boolean(propertyId) && loadedPropertyId === propertyId && apiImages !== null;
|
|
83
|
+
const images = hasFreshApiImages ? apiImages : staticImages;
|
|
84
|
+
const isWaitingForApiImages = Boolean(propertyId) &&
|
|
85
|
+
staticImages.length === 0 &&
|
|
86
|
+
(loading || loadedPropertyId !== propertyId);
|
|
55
87
|
const [activeCategory, setActiveCategory] = useState(null);
|
|
56
88
|
const [lightboxIndex, setLightboxIndex] = useState(null);
|
|
57
89
|
const [carouselIndex, setCarouselIndex] = useState(0);
|
|
@@ -66,11 +98,12 @@ export function Gallery({ propertyId: propertyIdProp, images: staticImages = [],
|
|
|
66
98
|
return images;
|
|
67
99
|
return images.filter((img) => img.category === activeCategory);
|
|
68
100
|
}, [images, activeCategory]);
|
|
69
|
-
if (loading) {
|
|
101
|
+
if (loading || isWaitingForApiImages) {
|
|
70
102
|
return (_jsx("div", { "data-node-id": dataNodeId, className: twMerge("text-center py-8 text-[var(--color-muted)]", className), children: "Loading gallery..." }));
|
|
71
103
|
}
|
|
72
|
-
if (images.length === 0)
|
|
73
|
-
return
|
|
104
|
+
if (images.length === 0) {
|
|
105
|
+
return (_jsx(StudioEditPlaceholder, { "data-node-id": dataNodeId, label: "Add gallery images", hint: "Photos will appear here", className: className }));
|
|
106
|
+
}
|
|
74
107
|
return (_jsxs("div", { "data-node-id": dataNodeId, className: twMerge("w-full", className), children: [derivedCategories.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-2 mb-6", children: derivedCategories.map((cat) => {
|
|
75
108
|
const isActive = cat === "All" ? !activeCategory : activeCategory === cat;
|
|
76
109
|
return (_jsx("button", { onClick: () => setActiveCategory(cat === "All" ? null : cat), className: twMerge("rounded-full px-4 py-1.5 text-sm font-medium transition-colors cursor-pointer", isActive
|
|
@@ -78,9 +111,9 @@ export function Gallery({ propertyId: propertyIdProp, images: staticImages = [],
|
|
|
78
111
|
: "bg-[var(--color-muted)]/10 text-[var(--color-foreground)] hover:bg-[var(--color-muted)]/20"), children: cat }, cat));
|
|
79
112
|
}) })), layout === "grid" ? (
|
|
80
113
|
/* Grid Layout */
|
|
81
|
-
_jsx("div", { className: twMerge("grid gap-3", gridColClasses[columns] ?? gridColClasses[3]), children: filtered.map((img, i) => (_jsx("button", { onClick: () => setLightboxIndex(i), className: "group relative aspect-[4/3] overflow-hidden rounded-lg bg-gray-100 cursor-pointer", children: _jsx(
|
|
114
|
+
_jsx("div", { className: twMerge("grid gap-3", gridColClasses[columns] ?? gridColClasses[3]), children: filtered.map((img, i) => (_jsx("button", { onClick: () => setLightboxIndex(i), className: "group relative aspect-[4/3] overflow-hidden rounded-lg bg-gray-100 cursor-pointer", children: _jsx(StudioImage, { src: img.src, alt: img.alt ?? "", sizes: gridSizes[columns] ?? gridSizes[3], quality: 75, allowCrop: false, className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105" }) }, imageKey(img.src, i)))) })) : (
|
|
82
115
|
/* Carousel Layout */
|
|
83
|
-
_jsx("div", { className: "relative", children: filtered.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "aspect-[16/9] overflow-hidden rounded-lg bg-gray-100", children: _jsx(
|
|
116
|
+
_jsx("div", { className: "relative", children: filtered.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "aspect-[16/9] overflow-hidden rounded-lg bg-gray-100", children: _jsx(StudioImage, { src: filtered[carouselIndex % filtered.length]?.src, alt: filtered[carouselIndex % filtered.length]?.alt ?? "", sizes: "100vw", quality: 85, allowCrop: false, className: "w-full h-full object-cover" }) }), _jsxs("div", { className: "absolute top-3 right-3 bg-black/50 text-white text-xs px-2 py-1 rounded", children: [(carouselIndex % filtered.length) + 1, " /", " ", filtered.length] }), filtered.length > 1 && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: () => setCarouselIndex((carouselIndex - 1 + filtered.length) %
|
|
84
117
|
filtered.length), className: "absolute left-2 top-1/2 -translate-y-1/2 bg-black/40 hover:bg-black/60 text-white rounded-full p-2 cursor-pointer", "aria-label": "Previous", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 18l-6-6 6-6" }) }) }), _jsx("button", { onClick: () => setCarouselIndex((carouselIndex + 1) % filtered.length), className: "absolute right-2 top-1/2 -translate-y-1/2 bg-black/40 hover:bg-black/60 text-white rounded-full p-2 cursor-pointer", "aria-label": "Next", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M9 18l6-6-6-6" }) }) })] })), _jsx("button", { onClick: () => setLightboxIndex(carouselIndex % filtered.length), className: "absolute inset-0 cursor-pointer", "aria-label": "Open fullscreen" })] })) })), lightboxIndex != null && (_jsx(Lightbox, { images: filtered, index: lightboxIndex, onClose: () => setLightboxIndex(null), onChange: setLightboxIndex }))] }));
|
|
85
118
|
}
|
|
86
119
|
//# sourceMappingURL=Gallery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gallery.js","sourceRoot":"","sources":["../../src/components/Gallery.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Gallery.js","sourceRoot":"","sources":["../../src/components/Gallery.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAA0B,MAAM,eAAe,CAAC;AAmBpE,MAAM,cAAc,GAA2B;IAC7C,CAAC,EAAE,4BAA4B;IAC/B,CAAC,EAAE,2CAA2C;IAC9C,CAAC,EAAE,2CAA2C;CAC/C,CAAC;AAEF,MAAM,SAAS,GAA2B;IACxC,CAAC,EAAE,gCAAgC;IACnC,CAAC,EAAE,0DAA0D;IAC7D,CAAC,EAAE,yDAAyD;CAC7D,CAAC;AAEF,mEAAmE;AACnE,MAAM,gBAAgB,GAA2B;IAC/C,QAAQ,EAAE,WAAW;IACrB,eAAe,EAAE,WAAW;IAC5B,SAAS,EAAE,aAAa;CACzB,CAAC;AAEF,SAAS,QAAQ,CAAC,GAAsB,EAAE,KAAa;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACtD,OAAO,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EACtB,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,YAAY,GAAG,EAAE,EACzB,UAAU,EACV,MAAM,GAAG,MAAM,EACf,OAAO,GAAG,CAAC,EACX,SAAS,EACT,cAAc,EAAE,UAAU,GACb;IACb,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,cAAc,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC;IAErD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEhC,oDAAoD;IACpD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7C,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;QACnC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAClC,GAAG,UAAU,kBAAkB,UAAU,qBAAqB,CAC/D,CAAC;YACF,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACvD,MAAM,QAAQ,GAA+E,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAE9G,MAAM,KAAK,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE;gBAClC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS;aAChE,CAAC,CAAC,CAAC;YACJ,IAAI,UAAU,KAAK,aAAa,CAAC,OAAO;gBAAE,OAAO;YACjD,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,UAAU,KAAK,aAAa,CAAC,OAAO;gBAAE,OAAO;YACjD,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBACzC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAChC,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,UAAU,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IAE7B,+DAA+D;IAC/D,MAAM,iBAAiB,GACrB,OAAO,CAAC,UAAU,CAAC,IAAI,gBAAgB,KAAK,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC;IAC/E,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAC5D,MAAM,qBAAqB,GACzB,OAAO,CAAC,UAAU,CAAC;QACnB,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,OAAO,IAAI,gBAAgB,KAAK,UAAU,CAAC,CAAC;IAE/C,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE;QACrC,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,KAAK;YAAE,OAAO,MAAM,CAAC;QAC/D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;IACjE,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAE7B,IAAI,OAAO,IAAI,qBAAqB,EAAE,CAAC;QACrC,OAAO,CACL,8BAAmB,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,4CAA4C,EAAE,SAAS,CAAC,mCAEpG,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CACL,KAAC,qBAAqB,oBACN,UAAU,EACxB,KAAK,EAAC,oBAAoB,EAC1B,IAAI,EAAC,yBAAyB,EAC9B,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,+BAAmB,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,aAEnE,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAC/B,cAAK,SAAS,EAAC,2BAA2B,YACvC,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC7B,MAAM,QAAQ,GACZ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,KAAK,GAAG,CAAC;oBAC3D,OAAO,CACL,iBAEE,OAAO,EAAE,GAAG,EAAE,CACZ,iBAAiB,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAE/C,SAAS,EAAE,OAAO,CAChB,+EAA+E,EAC/E,QAAQ;4BACN,CAAC,CAAC,sCAAsC;4BACxC,CAAC,CAAC,4FAA4F,CACjG,YAEA,GAAG,IAXC,GAAG,CAYD,CACV,CAAC;gBACJ,CAAC,CAAC,GACE,CACP,EAEA,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;YACnB,iBAAiB;YACjB,cACE,SAAS,EAAE,OAAO,CAChB,YAAY,EACZ,cAAc,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAC7C,YAEA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAClC,SAAS,EAAC,mFAAmF,YAE7F,KAAC,WAAW,IACV,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAClB,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EACzC,OAAO,EAAE,EAAE,EACX,SAAS,EAAE,KAAK,EAChB,SAAS,EAAC,oFAAoF,GAC9F,IAXG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAYlB,CACV,CAAC,GACE,CACP,CAAC,CAAC,CAAC;YACF,qBAAqB;YACrB,cAAK,SAAS,EAAC,UAAU,YACtB,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,8BACE,cAAK,SAAS,EAAC,sDAAsD,YACnE,KAAC,WAAW,IACV,GAAG,EAAE,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EACnD,GAAG,EACD,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,EAEtD,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,EAAE,EACX,SAAS,EAAE,KAAK,EAChB,SAAS,EAAC,4BAA4B,GACtC,GACE,EAGN,eAAK,SAAS,EAAC,yEAAyE,aACrF,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAI,GAAG,EAC5C,QAAQ,CAAC,MAAM,IACZ,EAGL,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,8BACE,iBACE,OAAO,EAAE,GAAG,EAAE,CACZ,gBAAgB,CACd,CAAC,aAAa,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;wCACnC,QAAQ,CAAC,MAAM,CAClB,EAEH,SAAS,EAAC,mHAAmH,gBAClH,UAAU,YAErB,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,YAEf,eAAM,CAAC,EAAC,iBAAiB,GAAG,GACxB,GACC,EACT,iBACE,OAAO,EAAE,GAAG,EAAE,CACZ,gBAAgB,CACd,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CACtC,EAEH,SAAS,EAAC,oHAAoH,gBACnH,MAAM,YAEjB,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,YAEf,eAAM,CAAC,EAAC,eAAe,GAAG,GACtB,GACC,IACR,CACJ,EAGD,iBACE,OAAO,EAAE,GAAG,EAAE,CACZ,gBAAgB,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,EAEnD,SAAS,EAAC,iCAAiC,gBAChC,iBAAiB,GAC5B,IACD,CACJ,GACG,CACP,EAGA,aAAa,IAAI,IAAI,IAAI,CACxB,KAAC,QAAQ,IACP,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACrC,QAAQ,EAAE,gBAAgB,GAC1B,CACH,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/components/Image.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/components/Image.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEpE,UAAU,UAAW,SAAQ,sBAAsB;IACjD,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,UAAU,kDAWpF"}
|
package/dist/components/Image.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { twMerge } from "tailwind-merge";
|
|
3
|
+
import { StudioImage } from "./StudioImage";
|
|
3
4
|
export function Image({ src, alt, className, "data-node-id": dataNodeId }) {
|
|
4
5
|
if (!src)
|
|
5
6
|
return null;
|
|
6
|
-
return (_jsx(
|
|
7
|
+
return (_jsx(StudioImage, { "data-node-id": dataNodeId, src: src, alt: alt ?? "", sizes: "100vw", className: twMerge("max-w-full", className) }));
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=Image.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/components/Image.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/components/Image.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,WAAW,EAA0B,MAAM,eAAe,CAAC;AAQpE,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAc;IACnF,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,CACL,KAAC,WAAW,oBACI,UAAU,EACxB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,IAAI,EAAE,EACd,KAAK,EAAC,OAAO,EACb,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,GAC3C,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/components/Lightbox.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/components/Lightbox.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEpE,UAAU,aAAa;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAsF3E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useCallback } from "react";
|
|
3
|
+
import { StudioImage } from "./StudioImage";
|
|
3
4
|
export function Lightbox({ images, index, onClose, onChange }) {
|
|
4
5
|
const image = images[index];
|
|
5
6
|
if (!image)
|
|
@@ -18,6 +19,6 @@ export function Lightbox({ images, index, onClose, onChange }) {
|
|
|
18
19
|
window.addEventListener("keydown", onKey);
|
|
19
20
|
return () => window.removeEventListener("keydown", onKey);
|
|
20
21
|
}, [onClose, goPrev, goNext]);
|
|
21
|
-
return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/90", onClick: onClose, children: [_jsx("button", { onClick: onClose, className: "absolute top-4 right-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Close", children: _jsx("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 6l12 12M18 6L6 18" }) }) }), _jsxs("div", { className: "absolute top-4 left-4 text-white/60 text-sm", children: [index + 1, " / ", images.length] }), images.length > 1 && (_jsx("button", { onClick: (e) => { e.stopPropagation(); goPrev(); }, className: "absolute left-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Previous", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 18l-6-6 6-6" }) }) })), _jsx(
|
|
22
|
+
return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/90", onClick: onClose, children: [_jsx("button", { onClick: onClose, className: "absolute top-4 right-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Close", children: _jsx("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 6l12 12M18 6L6 18" }) }) }), _jsxs("div", { className: "absolute top-4 left-4 text-white/60 text-sm", children: [index + 1, " / ", images.length] }), images.length > 1 && (_jsx("button", { onClick: (e) => { e.stopPropagation(); goPrev(); }, className: "absolute left-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Previous", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M15 18l-6-6 6-6" }) }) })), _jsx(StudioImage, { src: image.src, alt: image.alt ?? "", sizes: "90vw", quality: 90, allowCrop: false, className: "max-w-[90vw] max-h-[85vh] object-contain", onClick: (e) => e.stopPropagation() }), images.length > 1 && (_jsx("button", { onClick: (e) => { e.stopPropagation(); goNext(); }, className: "absolute right-4 text-white/70 hover:text-white z-10 cursor-pointer", "aria-label": "Next", children: _jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M9 18l6-6-6-6" }) }) })), image.alt && (_jsx("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 text-white/70 text-sm text-center max-w-md", children: image.alt }))] }));
|
|
22
23
|
}
|
|
23
24
|
//# sourceMappingURL=Lightbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../src/components/Lightbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../src/components/Lightbox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGvD,UAAU,SAAU,SAAQ,sBAAsB;IAChD,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,cAAc,EAAE,UAAU,EAAE,EAAE,SAAS,2CA2BrF"}
|
package/dist/components/Link.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { twMerge } from "tailwind-merge";
|
|
3
3
|
import { useNavigate } from "../router";
|
|
4
|
+
import { StudioEditPlaceholder } from "./StudioEditPlaceholder";
|
|
4
5
|
const defaults = "text-[var(--color-primary)] underline-offset-2 hover:underline cursor-pointer";
|
|
5
6
|
export function Link({ to, content, className, "data-node-id": dataNodeId }) {
|
|
6
7
|
const navigate = useNavigate();
|
|
8
|
+
if (!content) {
|
|
9
|
+
return (_jsx(StudioEditPlaceholder, { "data-node-id": dataNodeId, label: "Empty Link", hint: "Add link text", className: className }));
|
|
10
|
+
}
|
|
7
11
|
return (_jsx("a", { "data-node-id": dataNodeId, href: to, className: twMerge(defaults, className), onClick: (e) => {
|
|
8
12
|
e.preventDefault();
|
|
9
13
|
navigate(to);
|
|
@@ -1 +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,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
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,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,MAAM,QAAQ,GAAG,+EAA+E,CAAC;AAEjG,MAAM,UAAU,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAa;IACpF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CACL,KAAC,qBAAqB,oBACN,UAAU,EACxB,KAAK,EAAC,YAAY,EAClB,IAAI,EAAC,eAAe,EACpB,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,4BACgB,UAAU,EACxB,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"}
|
|
@@ -5,6 +5,6 @@ interface ModalProps extends EditableNodeAttributes {
|
|
|
5
5
|
children?: React.ReactNode;
|
|
6
6
|
className?: string;
|
|
7
7
|
}
|
|
8
|
-
export declare function Modal({ id, title, children, className, "data-node-id": dataNodeId }: ModalProps): import("react/jsx-runtime").JSX.Element
|
|
8
|
+
export declare function Modal({ id, title, children, className, "data-node-id": dataNodeId }: ModalProps): import("react/jsx-runtime").JSX.Element;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=Modal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGvD,UAAU,UAAW,SAAQ,sBAAsB;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,UAAU,2CAqE/F"}
|
package/dist/components/Modal.js
CHANGED
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useRef, useEffect } from "react";
|
|
3
3
|
import { twMerge } from "tailwind-merge";
|
|
4
4
|
import { useModal } from "../hooks/useModal";
|
|
5
|
+
import { StudioEditPlaceholder } from "./StudioEditPlaceholder";
|
|
5
6
|
export function Modal({ id, title, children, className, "data-node-id": dataNodeId }) {
|
|
6
7
|
const { activeModalId, closeModal } = useModal();
|
|
7
8
|
const panelRef = useRef(null);
|
|
@@ -12,8 +13,9 @@ export function Modal({ id, title, children, className, "data-node-id": dataNode
|
|
|
12
13
|
panelRef.current.focus();
|
|
13
14
|
}
|
|
14
15
|
}, [isOpen]);
|
|
15
|
-
if (!isOpen)
|
|
16
|
-
return
|
|
16
|
+
if (!isOpen) {
|
|
17
|
+
return (_jsx(StudioEditPlaceholder, { "data-node-id": dataNodeId, label: "Closed Modal", hint: "Open this modal from a button", className: className }));
|
|
18
|
+
}
|
|
17
19
|
return (_jsxs("div", { "data-node-id": dataNodeId, className: "fixed inset-0 z-50 flex items-center justify-center p-4", onClick: closeModal, role: "dialog", "aria-modal": "true", "aria-label": title, children: [_jsx("div", { className: "absolute inset-0 bg-black/60" }), _jsxs("div", { ref: panelRef, tabIndex: -1, onClick: (e) => e.stopPropagation(), className: twMerge("relative z-10 w-full max-w-lg max-h-[90vh] overflow-y-auto rounded-[var(--radius)] bg-white shadow-2xl", className), children: [_jsxs("div", { className: "flex items-center justify-between border-b border-gray-100 px-6 py-4", children: [title && (_jsx("h2", { className: "text-lg font-semibold text-[var(--color-foreground)]", children: title })), _jsx("button", { onClick: closeModal, className: "ml-auto rounded-md p-1 text-[var(--color-muted)] hover:text-[var(--color-foreground)] transition-colors cursor-pointer", "aria-label": "Close", children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M5 5l10 10M15 5L5 15" }) }) })] }), _jsx("div", { className: "px-6 py-5", children: children })] })] }));
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=Modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/components/Modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAShE,MAAM,UAAU,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAc;IAC9F,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,aAAa,KAAK,EAAE,CAAC;IAEpC,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/B,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CACL,KAAC,qBAAqB,oBACN,UAAU,EACxB,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,+BAA+B,EACpC,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,+BACgB,UAAU,EACxB,SAAS,EAAC,yDAAyD,EACnE,OAAO,EAAE,UAAU,EACnB,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACL,KAAK,aAGjB,cAAK,SAAS,EAAC,8BAA8B,GAAG,EAGhD,eACE,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC,EACZ,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,SAAS,EAAE,OAAO,CAChB,wGAAwG,EACxG,SAAS,CACV,aAGD,eAAK,SAAS,EAAC,sEAAsE,aAClF,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,sDAAsD,YACjE,KAAK,GACH,CACN,EACD,iBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,wHAAwH,gBACvH,OAAO,YAElB,cAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,YAC/F,eAAM,CAAC,EAAC,sBAAsB,GAAG,GAC7B,GACC,IACL,EAGN,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,IACvC,IACF,CACP,CAAC;AACJ,CAAC"}
|
package/dist/components/Nav.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { EditableNodeAttributes, NavLink as NavLinkType } from "../types";
|
|
2
|
+
import { type StudioImageSource } from "./StudioImage";
|
|
2
3
|
interface NavProps extends EditableNodeAttributes {
|
|
3
|
-
logo?:
|
|
4
|
+
logo?: StudioImageSource;
|
|
4
5
|
siteName?: string;
|
|
5
6
|
links?: NavLinkType[];
|
|
6
7
|
sticky?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Nav.d.ts","sourceRoot":"","sources":["../../src/components/Nav.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Nav.d.ts","sourceRoot":"","sources":["../../src/components/Nav.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEpE,UAAU,QAAS,SAAQ,sBAAsB;IAC/C,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAU,EAAE,MAAc,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,QAAQ,2CA4HlH"}
|
package/dist/components/Nav.js
CHANGED
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { twMerge } from "tailwind-merge";
|
|
4
4
|
import { useNavigate, usePathname } from "../router";
|
|
5
|
+
import { StudioImage } from "./StudioImage";
|
|
5
6
|
export function Nav({ logo, siteName, links = [], sticky = false, className, "data-node-id": dataNodeId }) {
|
|
6
7
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
7
8
|
const navigate = useNavigate();
|
|
@@ -36,10 +37,10 @@ export function Nav({ logo, siteName, links = [], sticky = false, className, "da
|
|
|
36
37
|
}
|
|
37
38
|
setMenuOpen(false);
|
|
38
39
|
};
|
|
39
|
-
return (_jsxs("nav", { "data-node-id": dataNodeId, className: twMerge("w-full bg-white border-b border-gray-100 z-40", sticky && "sticky top-0 shadow-sm", className), children: [_jsxs("div", { className: "max-w-6xl mx-auto flex items-center justify-between px-4 py-3", children: [_jsx("a", { href: "/", onClick: (e) => {
|
|
40
|
+
return (_jsxs("nav", { "data-node-id": dataNodeId, className: twMerge("w-full bg-white border-b border-gray-100 z-40", sticky && "sticky top-0 shadow-sm", className), children: [_jsxs("div", { className: "max-w-6xl mx-auto flex items-center justify-between px-4 py-3", children: [_jsx("a", { href: "/", "aria-label": siteName ? `${siteName} home` : "Home", onClick: (e) => {
|
|
40
41
|
e.preventDefault();
|
|
41
42
|
handleNav("/");
|
|
42
|
-
}, className: "flex items-center gap-2 cursor-pointer", children: logo ? (_jsx(
|
|
43
|
+
}, className: "flex items-center gap-2 cursor-pointer", children: logo ? (_jsx(StudioImage, { src: logo, decorative: true, sizes: "160px", className: "h-8 w-auto" })) : siteName ? (_jsx("span", { className: "text-lg font-bold text-[var(--color-foreground)]", children: siteName })) : null }), _jsx("div", { className: "hidden md:flex items-center gap-6", children: links.map((link) => (_jsx("a", { href: link.to, onClick: (e) => {
|
|
43
44
|
e.preventDefault();
|
|
44
45
|
handleNav(link.to);
|
|
45
46
|
}, className: twMerge("text-sm font-medium transition-colors cursor-pointer", pathname === link.to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Nav.js","sourceRoot":"","sources":["../../src/components/Nav.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Nav.js","sourceRoot":"","sources":["../../src/components/Nav.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PublicProperty } from "../hooks/useProperties";
|
|
2
2
|
import type { EditableNodeAttributes } from "../types";
|
|
3
3
|
interface PropertyCardProps extends EditableNodeAttributes {
|
|
4
|
-
property
|
|
4
|
+
property?: PublicProperty | null;
|
|
5
5
|
/**
|
|
6
6
|
* Link target template. Placeholders: {id}, {name}, {city}, {state}.
|
|
7
7
|
* Use an absolute URL (https://…) to link to a property's own website.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyCard.d.ts","sourceRoot":"","sources":["../../src/components/PropertyCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"PropertyCard.d.ts","sourceRoot":"","sources":["../../src/components/PropertyCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAIvD,UAAU,iBAAkB,SAAQ,sBAAsB;IACxD,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAMnF;AAYD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAgC,EAChC,SAAS,EACT,cAAc,EAAE,UAAU,GAC3B,EAAE,iBAAiB,2CA2DnB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { twMerge } from "tailwind-merge";
|
|
3
3
|
import { useNavigate } from "../router";
|
|
4
|
+
import { StudioEditPlaceholder } from "./StudioEditPlaceholder";
|
|
5
|
+
import { StudioImage } from "./StudioImage";
|
|
4
6
|
export function buildPropertyHref(pattern, property) {
|
|
5
7
|
return pattern
|
|
6
8
|
.replace(/\{id\}/g, String(property.id))
|
|
@@ -14,8 +16,14 @@ function primaryImageUrl(property) {
|
|
|
14
16
|
const sorted = [...property.media].sort((a, b) => (a.rank ?? 999) - (b.rank ?? 999));
|
|
15
17
|
return sorted[0]?.url ?? null;
|
|
16
18
|
}
|
|
19
|
+
function isUsableProperty(value) {
|
|
20
|
+
return Boolean(value && typeof value === "object" && (value.id != null || value.name));
|
|
21
|
+
}
|
|
17
22
|
export function PropertyCard({ property, hrefPattern = "/properties/{id}", className, "data-node-id": dataNodeId, }) {
|
|
18
23
|
const navigate = useNavigate();
|
|
24
|
+
if (!isUsableProperty(property)) {
|
|
25
|
+
return (_jsx(StudioEditPlaceholder, { "data-node-id": dataNodeId, label: "Configure property card", hint: "Property cards are usually rendered by Property Grid", className: className }));
|
|
26
|
+
}
|
|
19
27
|
const href = buildPropertyHref(hrefPattern, property);
|
|
20
28
|
const isExternal = /^https?:\/\//i.test(href);
|
|
21
29
|
const image = primaryImageUrl(property);
|
|
@@ -26,6 +34,6 @@ export function PropertyCard({ property, hrefPattern = "/properties/{id}", class
|
|
|
26
34
|
e.preventDefault();
|
|
27
35
|
navigate(href);
|
|
28
36
|
};
|
|
29
|
-
return (_jsxs("a", { "data-node-id": dataNodeId, href: href, onClick: handleClick, target: isExternal ? "_blank" : undefined, rel: isExternal ? "noopener noreferrer" : undefined, className: twMerge("group flex flex-col overflow-hidden rounded-[var(--radius)] bg-white shadow-[var(--shadow)] transition-shadow hover:shadow-[var(--shadow-hover)] cursor-pointer", className), children: [_jsx("div", { className: "aspect-[4/3] w-full overflow-hidden bg-[var(--color-muted)]/10", children: image && (_jsx(
|
|
37
|
+
return (_jsxs("a", { "data-node-id": dataNodeId, href: href, onClick: handleClick, target: isExternal ? "_blank" : undefined, rel: isExternal ? "noopener noreferrer" : undefined, className: twMerge("group flex flex-col overflow-hidden rounded-[var(--radius)] bg-white shadow-[var(--shadow)] transition-shadow hover:shadow-[var(--shadow-hover)] cursor-pointer", className), children: [_jsx("div", { className: "aspect-[4/3] w-full overflow-hidden bg-[var(--color-muted)]/10", children: image && (_jsx(StudioImage, { src: image, alt: property.name ?? "Property", sizes: "(min-width: 1024px) 33vw, (min-width: 640px) 50vw, 100vw", allowCrop: false, loading: "lazy", className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105" })) }), _jsxs("div", { className: "flex flex-col gap-1 p-4", children: [_jsx("span", { className: "text-base font-semibold text-[var(--color-foreground)]", children: property.name ?? "Community" }), location && (_jsx("span", { className: "text-sm text-[var(--color-secondary)]", children: location }))] })] }));
|
|
30
38
|
}
|
|
31
39
|
//# sourceMappingURL=PropertyCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyCard.js","sourceRoot":"","sources":["../../src/components/PropertyCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"PropertyCard.js","sourceRoot":"","sources":["../../src/components/PropertyCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAY5C,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAwB;IACzE,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACvC,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SAC7D,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SAC7D,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CAAC,QAAwB;IAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwC;IAChE,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,GAAG,kBAAkB,EAChC,SAAS,EACT,cAAc,EAAE,UAAU,GACR;IAClB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CACL,KAAC,qBAAqB,oBACN,UAAU,EACxB,KAAK,EAAC,yBAAyB,EAC/B,IAAI,EAAC,sDAAsD,EAC3D,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,CAAC,CAAsC,EAAE,EAAE;QAC7D,IAAI,UAAU;YAAE,OAAO,CAAC,6CAA6C;QACrE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,CACL,6BACgB,UAAU,EACxB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACzC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,EACnD,SAAS,EAAE,OAAO,CAChB,iKAAiK,EACjK,SAAS,CACV,aAED,cAAK,SAAS,EAAC,gEAAgE,YAC5E,KAAK,IAAI,CACR,KAAC,WAAW,IACV,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,UAAU,EAChC,KAAK,EAAC,0DAA0D,EAChE,SAAS,EAAE,KAAK,EAChB,OAAO,EAAC,MAAM,EACd,SAAS,EAAC,oFAAoF,GAC9F,CACH,GACG,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,wDAAwD,YACrE,QAAQ,CAAC,IAAI,IAAI,WAAW,GACxB,EACN,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,uCAAuC,YAAE,QAAQ,GAAQ,CAC1E,IACG,IACJ,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EditableNodeAttributes } from "../types";
|
|
2
|
+
interface StudioEditPlaceholderProps extends EditableNodeAttributes {
|
|
3
|
+
label: string;
|
|
4
|
+
hint?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function StudioEditPlaceholder({ label, hint, className, "data-node-id": dataNodeId, }: StudioEditPlaceholderProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=StudioEditPlaceholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioEditPlaceholder.d.ts","sourceRoot":"","sources":["../../src/components/StudioEditPlaceholder.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,IAAI,EACJ,SAAS,EACT,cAAc,EAAE,UAAU,GAC3B,EAAE,0BAA0B,kDAe5B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
export function StudioEditPlaceholder({ label, hint, className, "data-node-id": dataNodeId, }) {
|
|
4
|
+
if (!dataNodeId)
|
|
5
|
+
return null;
|
|
6
|
+
return (_jsxs("div", { "data-node-id": dataNodeId, "data-studio-runtime-placeholder": "true", "data-studio-empty-kind": "component", "data-studio-empty-label": label, className: twMerge("studio-edit-placeholder", className), children: [_jsx("span", { children: label }), hint && _jsx("small", { children: hint })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=StudioEditPlaceholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioEditPlaceholder.js","sourceRoot":"","sources":["../../src/components/StudioEditPlaceholder.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AASzC,MAAM,UAAU,qBAAqB,CAAC,EACpC,KAAK,EACL,IAAI,EACJ,SAAS,EACT,cAAc,EAAE,UAAU,GACC;IAC3B,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO,CACL,+BACgB,UAAU,qCACQ,MAAM,4BACf,WAAW,6BACT,KAAK,EAC9B,SAAS,EAAE,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC,aAExD,yBAAO,KAAK,GAAQ,EACnB,IAAI,IAAI,0BAAQ,IAAI,GAAS,IAC1B,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ImageResizeOptions } from "../utils/imageUrl";
|
|
2
|
+
import type { ResolvedImage } from "../utils/resolveConfig";
|
|
3
|
+
export type StudioImageSource = ResolvedImage | string | null | undefined;
|
|
4
|
+
interface StudioImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, "alt" | "sizes" | "src" | "srcSet"> {
|
|
5
|
+
src: StudioImageSource;
|
|
6
|
+
sizes: string;
|
|
7
|
+
alt?: string;
|
|
8
|
+
fallbackAlt?: string;
|
|
9
|
+
decorative?: boolean;
|
|
10
|
+
allowCrop?: boolean;
|
|
11
|
+
quality?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function studioImageUrl(source: StudioImageSource, opts?: ImageResizeOptions & {
|
|
14
|
+
allowCrop?: boolean;
|
|
15
|
+
}): string;
|
|
16
|
+
export declare function StudioImage({ src, sizes, alt, fallbackAlt, decorative, allowCrop, quality, loading, className, style, ...imgProps }: StudioImageProps): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=StudioImage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioImage.d.ts","sourceRoot":"","sources":["../../src/components/StudioImage.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAE1E,UAAU,gBACR,SAAQ,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3F,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoDD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EACzB,IAAI,CAAC,EAAE,kBAAkB,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAClD,MAAM,CAKR;AAED,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,KAAK,EACL,GAAG,EACH,WAAW,EACX,UAAkB,EAClB,SAAgB,EAChB,OAAY,EACZ,OAAgB,EAChB,SAAS,EACT,KAAK,EACL,GAAG,QAAQ,EACZ,EAAE,gBAAgB,kDAkDlB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
import { canResizeImageUrl, imageUrl, RESIZE_WIDTHS, } from "../utils/imageUrl";
|
|
4
|
+
function isResolvedImage(value) {
|
|
5
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function sourceUrl(source) {
|
|
8
|
+
if (!source)
|
|
9
|
+
return "";
|
|
10
|
+
return isResolvedImage(source) ? source.src : source;
|
|
11
|
+
}
|
|
12
|
+
function resizeOptionsForSource(source, opts, allowCrop) {
|
|
13
|
+
if (!isResolvedImage(source))
|
|
14
|
+
return opts;
|
|
15
|
+
return {
|
|
16
|
+
...opts,
|
|
17
|
+
fp: opts.fp ?? source.focalPoint,
|
|
18
|
+
crop: opts.crop ?? (allowCrop ? source.crop : undefined),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function defaultWidth(source) {
|
|
22
|
+
const width = isResolvedImage(source) ? source.width : undefined;
|
|
23
|
+
if (!width)
|
|
24
|
+
return 1200;
|
|
25
|
+
return [...RESIZE_WIDTHS].reverse().find((candidate) => candidate <= width) ?? RESIZE_WIDTHS[0];
|
|
26
|
+
}
|
|
27
|
+
function dimensions(source, allowCrop) {
|
|
28
|
+
if (!isResolvedImage(source))
|
|
29
|
+
return {};
|
|
30
|
+
if (allowCrop && source.crop?.aspect && source.width) {
|
|
31
|
+
return { width: source.width, height: Math.round(source.width / source.crop.aspect) };
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
...(source.width != null ? { width: source.width } : {}),
|
|
35
|
+
...(source.height != null ? { height: source.height } : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function altText(source, explicitAlt, fallbackAlt, decorative) {
|
|
39
|
+
if (decorative)
|
|
40
|
+
return "";
|
|
41
|
+
if (!isResolvedImage(source))
|
|
42
|
+
return explicitAlt ?? fallbackAlt ?? "";
|
|
43
|
+
return source.placementAlt ?? explicitAlt ?? source.assetAlt ?? source.alt ?? fallbackAlt ?? "";
|
|
44
|
+
}
|
|
45
|
+
export function studioImageUrl(source, opts) {
|
|
46
|
+
const url = sourceUrl(source);
|
|
47
|
+
if (!url)
|
|
48
|
+
return "";
|
|
49
|
+
const { allowCrop = true, ...resizeOpts } = opts ?? {};
|
|
50
|
+
return imageUrl(url, resizeOptionsForSource(source, resizeOpts, allowCrop));
|
|
51
|
+
}
|
|
52
|
+
export function StudioImage({ src, sizes, alt, fallbackAlt, decorative = false, allowCrop = true, quality = 80, loading = "lazy", className, style, ...imgProps }) {
|
|
53
|
+
if (isResolvedImage(src) && src.unresolved) {
|
|
54
|
+
if (src.quietUnresolved)
|
|
55
|
+
return null;
|
|
56
|
+
return (_jsx("div", { role: "img", "aria-label": altText(src, alt, fallbackAlt, decorative), className: twMerge("flex min-h-24 items-center justify-center bg-gray-100 text-xs text-gray-500", className), children: "Image unavailable" }));
|
|
57
|
+
}
|
|
58
|
+
const baseUrl = sourceUrl(src);
|
|
59
|
+
if (!baseUrl)
|
|
60
|
+
return null;
|
|
61
|
+
const canResize = canResizeImageUrl(baseUrl);
|
|
62
|
+
const crop = isResolvedImage(src) && allowCrop ? src.crop : undefined;
|
|
63
|
+
const hasServerCrop = Boolean(crop?.aspect);
|
|
64
|
+
const focalPoint = isResolvedImage(src) ? src.focalPoint : undefined;
|
|
65
|
+
const resizeBase = resizeOptionsForSource(src, { q: quality }, allowCrop);
|
|
66
|
+
const displaySrc = canResize
|
|
67
|
+
? imageUrl(baseUrl, { ...resizeBase, w: defaultWidth(src) })
|
|
68
|
+
: baseUrl;
|
|
69
|
+
const srcSet = canResize
|
|
70
|
+
? RESIZE_WIDTHS.map((width) => `${imageUrl(baseUrl, { ...resizeBase, w: width })} ${width}w`).join(", ")
|
|
71
|
+
: undefined;
|
|
72
|
+
const objectPosition = focalPoint && !hasServerCrop ? `${focalPoint.x * 100}% ${focalPoint.y * 100}%` : undefined;
|
|
73
|
+
const intrinsic = dimensions(src, allowCrop);
|
|
74
|
+
return (_jsx("img", { ...imgProps, src: displaySrc, srcSet: srcSet, sizes: srcSet ? sizes : undefined, alt: altText(src, alt, fallbackAlt, decorative), loading: loading, decoding: imgProps.decoding ?? "async", className: className, style: { ...style, ...(objectPosition ? { objectPosition } : {}) }, width: intrinsic.width, height: intrinsic.height }));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=StudioImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioImage.js","sourceRoot":"","sources":["../../src/components/StudioImage.tsx"],"names":[],"mappings":"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"}
|