@fluid-app/rep-widgets 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertWidget-2JHMNYIY.js +5 -0
- package/dist/AlertWidget-2JHMNYIY.js.map +1 -0
- package/dist/AlertWidget-VHXWOKM4.cjs +18 -0
- package/dist/AlertWidget-VHXWOKM4.cjs.map +1 -0
- package/dist/CalendarWidget-AQ7PVNSI.cjs +18 -0
- package/dist/CalendarWidget-AQ7PVNSI.cjs.map +1 -0
- package/dist/CalendarWidget-E54LNKCG.js +5 -0
- package/dist/CalendarWidget-E54LNKCG.js.map +1 -0
- package/dist/CarouselWidget-IPPFSXDZ.js +8 -0
- package/dist/CarouselWidget-IPPFSXDZ.js.map +1 -0
- package/dist/CarouselWidget-ZG6LJJXG.cjs +21 -0
- package/dist/CarouselWidget-ZG6LJJXG.cjs.map +1 -0
- package/dist/CatchUpWidget-CSSQMPPA.cjs +18 -0
- package/dist/CatchUpWidget-CSSQMPPA.cjs.map +1 -0
- package/dist/CatchUpWidget-HYJRKFN3.js +5 -0
- package/dist/CatchUpWidget-HYJRKFN3.js.map +1 -0
- package/dist/ChartWidget-MBLGRSJQ.cjs +19 -0
- package/dist/ChartWidget-MBLGRSJQ.cjs.map +1 -0
- package/dist/ChartWidget-OL5DRMGA.js +6 -0
- package/dist/ChartWidget-OL5DRMGA.js.map +1 -0
- package/dist/ContainerWidget-DETCLP52.js +8 -0
- package/dist/ContainerWidget-DETCLP52.js.map +1 -0
- package/dist/ContainerWidget-XQDJSJXO.cjs +21 -0
- package/dist/ContainerWidget-XQDJSJXO.cjs.map +1 -0
- package/dist/EmbedWidget-HTR2MJ25.cjs +16 -0
- package/dist/EmbedWidget-HTR2MJ25.cjs.map +1 -0
- package/dist/EmbedWidget-O2XFGDJS.js +3 -0
- package/dist/EmbedWidget-O2XFGDJS.js.map +1 -0
- package/dist/ImageWidget-L2MIYWTE.cjs +17 -0
- package/dist/ImageWidget-L2MIYWTE.cjs.map +1 -0
- package/dist/ImageWidget-RF6XKPPV.js +4 -0
- package/dist/ImageWidget-RF6XKPPV.js.map +1 -0
- package/dist/LayoutWidget-4XISA6RO.cjs +20 -0
- package/dist/LayoutWidget-4XISA6RO.cjs.map +1 -0
- package/dist/LayoutWidget-WZSMZLLM.js +7 -0
- package/dist/LayoutWidget-WZSMZLLM.js.map +1 -0
- package/dist/ListWidget-XY5C3P3C.cjs +19 -0
- package/dist/ListWidget-XY5C3P3C.cjs.map +1 -0
- package/dist/ListWidget-ZFRV6DKI.js +6 -0
- package/dist/ListWidget-ZFRV6DKI.js.map +1 -0
- package/dist/MySiteWidget-75NJUIWV.js +5 -0
- package/dist/MySiteWidget-75NJUIWV.js.map +1 -0
- package/dist/MySiteWidget-CBDKQT35.cjs +18 -0
- package/dist/MySiteWidget-CBDKQT35.cjs.map +1 -0
- package/dist/NestedWidget-N4I7LOVX.js +6 -0
- package/dist/NestedWidget-N4I7LOVX.js.map +1 -0
- package/dist/NestedWidget-VO3YYOOH.cjs +19 -0
- package/dist/NestedWidget-VO3YYOOH.cjs.map +1 -0
- package/dist/QuickShareWidget-3VGSFY4J.js +4 -0
- package/dist/QuickShareWidget-3VGSFY4J.js.map +1 -0
- package/dist/QuickShareWidget-VHDB5SYT.cjs +17 -0
- package/dist/QuickShareWidget-VHDB5SYT.cjs.map +1 -0
- package/dist/RecentActivityWidget-3KAR64SB.js +5 -0
- package/dist/RecentActivityWidget-3KAR64SB.js.map +1 -0
- package/dist/RecentActivityWidget-X5UABJHL.cjs +18 -0
- package/dist/RecentActivityWidget-X5UABJHL.cjs.map +1 -0
- package/dist/SpacerWidget-K7CXVECO.cjs +16 -0
- package/dist/SpacerWidget-K7CXVECO.cjs.map +1 -0
- package/dist/SpacerWidget-ODKNZAND.js +3 -0
- package/dist/SpacerWidget-ODKNZAND.js.map +1 -0
- package/dist/TableWidget-MDEBHVIA.cjs +20 -0
- package/dist/TableWidget-MDEBHVIA.cjs.map +1 -0
- package/dist/TableWidget-W6LL5FLE.js +7 -0
- package/dist/TableWidget-W6LL5FLE.js.map +1 -0
- package/dist/TextWidget-D72TL53O.js +4 -0
- package/dist/TextWidget-D72TL53O.js.map +1 -0
- package/dist/TextWidget-DYINWJGB.cjs +17 -0
- package/dist/TextWidget-DYINWJGB.cjs.map +1 -0
- package/dist/ToDoWidget-DH544SJH.cjs +18 -0
- package/dist/ToDoWidget-DH544SJH.cjs.map +1 -0
- package/dist/ToDoWidget-LCAYWRVH.js +5 -0
- package/dist/ToDoWidget-LCAYWRVH.js.map +1 -0
- package/dist/VideoWidget-VHAZTNLI.js +4 -0
- package/dist/VideoWidget-VHAZTNLI.js.map +1 -0
- package/dist/VideoWidget-YLRKZ27S.cjs +17 -0
- package/dist/VideoWidget-YLRKZ27S.cjs.map +1 -0
- package/dist/chunk-2KQFMF6L.js +413 -0
- package/dist/chunk-2KQFMF6L.js.map +1 -0
- package/dist/chunk-3CUVGQQI.cjs +15 -0
- package/dist/chunk-3CUVGQQI.cjs.map +1 -0
- package/dist/chunk-3RV7AYQZ.js +149 -0
- package/dist/chunk-3RV7AYQZ.js.map +1 -0
- package/dist/chunk-4M2A5W2D.cjs +42 -0
- package/dist/chunk-4M2A5W2D.cjs.map +1 -0
- package/dist/chunk-4XJCU4HY.js +248 -0
- package/dist/chunk-4XJCU4HY.js.map +1 -0
- package/dist/chunk-5HHN5MRZ.js +11 -0
- package/dist/chunk-5HHN5MRZ.js.map +1 -0
- package/dist/chunk-6GF46P3S.js +33 -0
- package/dist/chunk-6GF46P3S.js.map +1 -0
- package/dist/chunk-7JIRJTGY.js +32 -0
- package/dist/chunk-7JIRJTGY.js.map +1 -0
- package/dist/chunk-7XWMJDFE.js +443 -0
- package/dist/chunk-7XWMJDFE.js.map +1 -0
- package/dist/chunk-C7A3OMIF.cjs +446 -0
- package/dist/chunk-C7A3OMIF.cjs.map +1 -0
- package/dist/chunk-CEZOXMO6.js +377 -0
- package/dist/chunk-CEZOXMO6.js.map +1 -0
- package/dist/chunk-CM7D7WGL.cjs +36 -0
- package/dist/chunk-CM7D7WGL.cjs.map +1 -0
- package/dist/chunk-D4ULCQ42.cjs +353 -0
- package/dist/chunk-D4ULCQ42.cjs.map +1 -0
- package/dist/chunk-DKGP3DTX.cjs +389 -0
- package/dist/chunk-DKGP3DTX.cjs.map +1 -0
- package/dist/chunk-DM2JDG3D.js +318 -0
- package/dist/chunk-DM2JDG3D.js.map +1 -0
- package/dist/chunk-DW6V4ZCT.cjs +140 -0
- package/dist/chunk-DW6V4ZCT.cjs.map +1 -0
- package/dist/chunk-E4MY6TUE.cjs +255 -0
- package/dist/chunk-E4MY6TUE.cjs.map +1 -0
- package/dist/chunk-EHSWARYY.js +39 -0
- package/dist/chunk-EHSWARYY.js.map +1 -0
- package/dist/chunk-EUOP3MWJ.cjs +118 -0
- package/dist/chunk-EUOP3MWJ.cjs.map +1 -0
- package/dist/chunk-F3SFIX7U.cjs +58 -0
- package/dist/chunk-F3SFIX7U.cjs.map +1 -0
- package/dist/chunk-F63VY23B.js +174 -0
- package/dist/chunk-F63VY23B.js.map +1 -0
- package/dist/chunk-FSLUSFJ2.cjs +75 -0
- package/dist/chunk-FSLUSFJ2.cjs.map +1 -0
- package/dist/chunk-GA52TZC4.js +133 -0
- package/dist/chunk-GA52TZC4.js.map +1 -0
- package/dist/chunk-GRFCSQ2M.js +13 -0
- package/dist/chunk-GRFCSQ2M.js.map +1 -0
- package/dist/chunk-HBRGW3CJ.js +383 -0
- package/dist/chunk-HBRGW3CJ.js.map +1 -0
- package/dist/chunk-HDA2ZOV2.cjs +13 -0
- package/dist/chunk-HDA2ZOV2.cjs.map +1 -0
- package/dist/chunk-HQVTEFSO.js +386 -0
- package/dist/chunk-HQVTEFSO.js.map +1 -0
- package/dist/chunk-IU657MP5.js +270 -0
- package/dist/chunk-IU657MP5.js.map +1 -0
- package/dist/chunk-IY3BNQ5Y.js +24 -0
- package/dist/chunk-IY3BNQ5Y.js.map +1 -0
- package/dist/chunk-J2FIIZSN.js +137 -0
- package/dist/chunk-J2FIIZSN.js.map +1 -0
- package/dist/chunk-JRBJXVXL.cjs +251 -0
- package/dist/chunk-JRBJXVXL.cjs.map +1 -0
- package/dist/chunk-JYWKXNUO.cjs +37 -0
- package/dist/chunk-JYWKXNUO.cjs.map +1 -0
- package/dist/chunk-KE27RJ3X.cjs +954 -0
- package/dist/chunk-KE27RJ3X.cjs.map +1 -0
- package/dist/chunk-M4J3OZJF.cjs +152 -0
- package/dist/chunk-M4J3OZJF.cjs.map +1 -0
- package/dist/chunk-MKUJOEAC.cjs +178 -0
- package/dist/chunk-MKUJOEAC.cjs.map +1 -0
- package/dist/chunk-MNRHGJDQ.cjs +225 -0
- package/dist/chunk-MNRHGJDQ.cjs.map +1 -0
- package/dist/chunk-MNWWZGL2.js +14 -0
- package/dist/chunk-MNWWZGL2.js.map +1 -0
- package/dist/chunk-MWED53XR.js +115 -0
- package/dist/chunk-MWED53XR.js.map +1 -0
- package/dist/chunk-NCQQI2T2.cjs +386 -0
- package/dist/chunk-NCQQI2T2.cjs.map +1 -0
- package/dist/chunk-NGYR4RQF.js +476 -0
- package/dist/chunk-NGYR4RQF.js.map +1 -0
- package/dist/chunk-NNJDJNSY.cjs +197 -0
- package/dist/chunk-NNJDJNSY.cjs.map +1 -0
- package/dist/chunk-NOZVVD6G.cjs +26 -0
- package/dist/chunk-NOZVVD6G.cjs.map +1 -0
- package/dist/chunk-NUG3DWF7.js +55 -0
- package/dist/chunk-NUG3DWF7.js.map +1 -0
- package/dist/chunk-NXAZEYLC.cjs +136 -0
- package/dist/chunk-NXAZEYLC.cjs.map +1 -0
- package/dist/chunk-PNVBMN27.cjs +380 -0
- package/dist/chunk-PNVBMN27.cjs.map +1 -0
- package/dist/chunk-RKDOQV4T.js +73 -0
- package/dist/chunk-RKDOQV4T.js.map +1 -0
- package/dist/chunk-RMZFC7HF.cjs +17 -0
- package/dist/chunk-RMZFC7HF.cjs.map +1 -0
- package/dist/chunk-SBHL3GFW.js +40 -0
- package/dist/chunk-SBHL3GFW.js.map +1 -0
- package/dist/chunk-TFJQ4525.cjs +416 -0
- package/dist/chunk-TFJQ4525.cjs.map +1 -0
- package/dist/chunk-VBJ5FT4C.cjs +273 -0
- package/dist/chunk-VBJ5FT4C.cjs.map +1 -0
- package/dist/chunk-VZFL5BZM.js +222 -0
- package/dist/chunk-VZFL5BZM.js.map +1 -0
- package/dist/chunk-W7VPL5I4.js +252 -0
- package/dist/chunk-W7VPL5I4.js.map +1 -0
- package/dist/chunk-XALQ3ANE.cjs +34 -0
- package/dist/chunk-XALQ3ANE.cjs.map +1 -0
- package/dist/chunk-YCYKV5KF.cjs +43 -0
- package/dist/chunk-YCYKV5KF.cjs.map +1 -0
- package/dist/chunk-YJZGIS4L.cjs +479 -0
- package/dist/chunk-YJZGIS4L.cjs.map +1 -0
- package/dist/chunk-YU5DAILW.cjs +14 -0
- package/dist/chunk-YU5DAILW.cjs.map +1 -0
- package/dist/chunk-YY5WLV63.js +951 -0
- package/dist/chunk-YY5WLV63.js.map +1 -0
- package/dist/chunk-ZS7C474P.js +3 -0
- package/dist/chunk-ZS7C474P.js.map +1 -0
- package/dist/chunk-ZSUGXJWD.js +194 -0
- package/dist/chunk-ZSUGXJWD.js.map +1 -0
- package/dist/chunk-ZWFK5UUU.js +11 -0
- package/dist/chunk-ZWFK5UUU.js.map +1 -0
- package/dist/components/index.cjs +17 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.cts +8 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -0
- package/dist/contexts/index.cjs +29 -0
- package/dist/contexts/index.cjs.map +1 -0
- package/dist/contexts/index.d.cts +73 -0
- package/dist/contexts/index.d.ts +73 -0
- package/dist/contexts/index.js +4 -0
- package/dist/contexts/index.js.map +1 -0
- package/dist/core/index.cjs +55 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +64 -0
- package/dist/core/index.d.ts +64 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/ui/index.cjs +80 -0
- package/dist/ui/index.cjs.map +1 -0
- package/dist/ui/index.d.cts +69 -0
- package/dist/ui/index.d.ts +69 -0
- package/dist/ui/index.js +7 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/widgets/index.cjs +217 -0
- package/dist/widgets/index.cjs.map +1 -0
- package/dist/widgets/index.d.cts +397 -0
- package/dist/widgets/index.d.ts +397 -0
- package/dist/widgets/index.js +59 -0
- package/dist/widgets/index.js.map +1 -0
- package/package.json +99 -0
- package/styles/globals.css +20 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { MediaRenderer, getMediaPropsFromShareable } from './chunk-F63VY23B.js';
|
|
2
|
+
import { ScrollArrows } from './chunk-7JIRJTGY.js';
|
|
3
|
+
import { getFontSizeField, getColorField, getPaddingField, getBorderRadiusField, getGapField, gapValues } from './chunk-ZS7C474P.js';
|
|
4
|
+
import { useRef } from 'react';
|
|
5
|
+
import '@fluid-app/rep-core/types';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function NestedWidget({
|
|
9
|
+
resource,
|
|
10
|
+
titleEnabled = true,
|
|
11
|
+
titleText = "Featured Collection",
|
|
12
|
+
shareables = [],
|
|
13
|
+
gap = "md",
|
|
14
|
+
padding = 4,
|
|
15
|
+
borderRadius = "md",
|
|
16
|
+
primaryMediaHeight = 400,
|
|
17
|
+
titleFontSize = "xl",
|
|
18
|
+
titleColor = "background",
|
|
19
|
+
titleAlignment = { horizontal: "left", vertical: "bottom" },
|
|
20
|
+
nestedTextColor = "foreground",
|
|
21
|
+
background = {
|
|
22
|
+
type: "solid",
|
|
23
|
+
color: "background"
|
|
24
|
+
},
|
|
25
|
+
overlayEnabled = true,
|
|
26
|
+
overlayType = "gradient",
|
|
27
|
+
overlayIntensity = 50,
|
|
28
|
+
className,
|
|
29
|
+
...props
|
|
30
|
+
}) {
|
|
31
|
+
const scrollContainerRef = useRef(null);
|
|
32
|
+
const scrollByAmount = (direction) => {
|
|
33
|
+
const container = scrollContainerRef.current;
|
|
34
|
+
if (!container) return;
|
|
35
|
+
const computedGap = parseFloat(getComputedStyle(container).gap) || 0;
|
|
36
|
+
const itemWidth = primaryMediaHeight * 0.75;
|
|
37
|
+
const scrollAmount = itemWidth + computedGap;
|
|
38
|
+
container.scrollTo({
|
|
39
|
+
left: container.scrollLeft + (direction === "next" ? scrollAmount : -scrollAmount),
|
|
40
|
+
behavior: "smooth"
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const hasNestedMedia = shareables.length > 0;
|
|
44
|
+
const titleAlignmentClasses = {
|
|
45
|
+
left: "text-left",
|
|
46
|
+
center: "text-center",
|
|
47
|
+
right: "text-right"
|
|
48
|
+
};
|
|
49
|
+
const backgroundColor = background.color || "background";
|
|
50
|
+
const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
|
|
51
|
+
return /* @__PURE__ */ jsxs(
|
|
52
|
+
"div",
|
|
53
|
+
{
|
|
54
|
+
className: `@container flex w-full p-${padding} rounded-${borderRadius} bg-${backgroundColor} ${className}`,
|
|
55
|
+
...props,
|
|
56
|
+
style: {
|
|
57
|
+
maxHeight: `${primaryMediaHeight}px`,
|
|
58
|
+
backgroundImage
|
|
59
|
+
},
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ jsx(
|
|
62
|
+
"div",
|
|
63
|
+
{
|
|
64
|
+
className: `overflow-hidden @md:flex-none rounded-${borderRadius}`,
|
|
65
|
+
style: {
|
|
66
|
+
width: `${primaryMediaHeight}px`
|
|
67
|
+
},
|
|
68
|
+
children: /* @__PURE__ */ jsxs("div", { className: "relative h-full w-full", children: [
|
|
69
|
+
/* @__PURE__ */ jsx(
|
|
70
|
+
MediaRenderer,
|
|
71
|
+
{
|
|
72
|
+
...resource ? getMediaPropsFromShareable(resource) : {}
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
overlayEnabled && /* @__PURE__ */ jsx(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
className: `pointer-events-none absolute inset-0 z-10 ${overlayType === "gradient" ? "bg-gradient-to-t from-black to-transparent" : "bg-black"}`,
|
|
79
|
+
style: {
|
|
80
|
+
opacity: (Number(String(overlayIntensity).replace("%", "")) || 50) / 100
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
(titleEnabled && titleText || hasNestedMedia) && /* @__PURE__ */ jsxs(
|
|
85
|
+
"div",
|
|
86
|
+
{
|
|
87
|
+
className: `absolute z-20 w-full ${titleAlignmentClasses[titleAlignment?.horizontal ?? "left"]} p-${padding} ${titleAlignment.vertical === "top" ? `top-0 pt-${padding}` : titleAlignment.vertical === "center" ? "top-1/2 -translate-y-1/2" : `bottom-0 pb-${padding}`}`,
|
|
88
|
+
children: [
|
|
89
|
+
titleEnabled && titleText && /* @__PURE__ */ jsx(
|
|
90
|
+
"h2",
|
|
91
|
+
{
|
|
92
|
+
className: `leading-tight font-bold text-${titleColor} text-${titleFontSize === "md" ? "base" : titleFontSize}`,
|
|
93
|
+
children: titleText
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
hasNestedMedia && /* @__PURE__ */ jsx("div", { className: `pt-${padding} @md:hidden`, children: /* @__PURE__ */ jsx(
|
|
97
|
+
"div",
|
|
98
|
+
{
|
|
99
|
+
className: `flex overflow-x-auto gap-${gapValues[gap]} bg-transparent`,
|
|
100
|
+
children: shareables.map((shareable) => /* @__PURE__ */ jsx(
|
|
101
|
+
"div",
|
|
102
|
+
{
|
|
103
|
+
className: "flex shrink-0 flex-col items-center",
|
|
104
|
+
children: /* @__PURE__ */ jsx(
|
|
105
|
+
"div",
|
|
106
|
+
{
|
|
107
|
+
className: `aspect-3/4 h-40 overflow-hidden rounded-${borderRadius}`,
|
|
108
|
+
children: /* @__PURE__ */ jsx(
|
|
109
|
+
MediaRenderer,
|
|
110
|
+
{
|
|
111
|
+
...getMediaPropsFromShareable(shareable)
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
)
|
|
116
|
+
},
|
|
117
|
+
shareable.id
|
|
118
|
+
))
|
|
119
|
+
}
|
|
120
|
+
) })
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
] })
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
hasNestedMedia && /* @__PURE__ */ jsxs(
|
|
128
|
+
"div",
|
|
129
|
+
{
|
|
130
|
+
className: `relative hidden min-w-0 self-stretch @md:flex @md:flex-1 px-${padding}`,
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsx(
|
|
133
|
+
"div",
|
|
134
|
+
{
|
|
135
|
+
ref: scrollContainerRef,
|
|
136
|
+
className: `flex h-full flex-row overflow-x-auto gap-${gapValues[gap]}`,
|
|
137
|
+
style: { scrollSnapType: "x mandatory" },
|
|
138
|
+
children: shareables.map((shareable) => /* @__PURE__ */ jsxs(
|
|
139
|
+
"div",
|
|
140
|
+
{
|
|
141
|
+
className: "flex flex-col gap-1",
|
|
142
|
+
style: {
|
|
143
|
+
width: `${primaryMediaHeight * 0.75}px`,
|
|
144
|
+
scrollSnapAlign: "start"
|
|
145
|
+
},
|
|
146
|
+
children: [
|
|
147
|
+
/* @__PURE__ */ jsx(
|
|
148
|
+
"div",
|
|
149
|
+
{
|
|
150
|
+
className: `aspect-3/4 h-full rounded-${borderRadius} overflow-hidden`,
|
|
151
|
+
children: /* @__PURE__ */ jsx(MediaRenderer, { ...getMediaPropsFromShareable(shareable) })
|
|
152
|
+
}
|
|
153
|
+
),
|
|
154
|
+
/* @__PURE__ */ jsxs("span", { className: `flex-none text-sm text-${nestedTextColor}`, children: [
|
|
155
|
+
/* @__PURE__ */ jsx("p", { className: "truncate", children: shareable.title || "" }),
|
|
156
|
+
/* @__PURE__ */ jsx("p", { className: "truncate", children: (shareable.display_price ?? shareable.price) || "" })
|
|
157
|
+
] })
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
shareable.id
|
|
161
|
+
))
|
|
162
|
+
}
|
|
163
|
+
),
|
|
164
|
+
/* @__PURE__ */ jsx(
|
|
165
|
+
"div",
|
|
166
|
+
{
|
|
167
|
+
className: `absolute inset-x-0 top-1/2 flex w-full -translate-y-1/2 items-center justify-between px-8`,
|
|
168
|
+
children: /* @__PURE__ */ jsx(
|
|
169
|
+
ScrollArrows,
|
|
170
|
+
{
|
|
171
|
+
onPrevious: () => scrollByAmount("prev"),
|
|
172
|
+
onNext: () => scrollByAmount("next")
|
|
173
|
+
}
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
)
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
var nestedWidgetPropertySchema = {
|
|
185
|
+
widgetType: "NestedWidget",
|
|
186
|
+
displayName: "Nested Widget",
|
|
187
|
+
tabsConfig: [
|
|
188
|
+
{ id: "styling", label: "Styling" },
|
|
189
|
+
{ id: "data", label: "Data" }
|
|
190
|
+
],
|
|
191
|
+
dataSourceTargetProps: ["shareables"],
|
|
192
|
+
fields: [
|
|
193
|
+
// Content tab - Resource group
|
|
194
|
+
{
|
|
195
|
+
key: "resource",
|
|
196
|
+
label: "Primary Media",
|
|
197
|
+
type: "resource",
|
|
198
|
+
description: "Select the primary media displayed in the large panel",
|
|
199
|
+
allowedTypes: ["Medium"],
|
|
200
|
+
tab: "styling",
|
|
201
|
+
group: "Content"
|
|
202
|
+
},
|
|
203
|
+
// Content tab - Title group
|
|
204
|
+
{
|
|
205
|
+
key: "titleEnabled",
|
|
206
|
+
label: "Widget Title",
|
|
207
|
+
type: "boolean",
|
|
208
|
+
description: "Enable the title displayed over the primary media",
|
|
209
|
+
defaultValue: true,
|
|
210
|
+
tab: "styling",
|
|
211
|
+
group: "Title"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
key: "titleText",
|
|
215
|
+
label: "Title",
|
|
216
|
+
type: "text",
|
|
217
|
+
description: "Main title displayed over the primary media",
|
|
218
|
+
defaultValue: "Featured Collection",
|
|
219
|
+
tab: "styling",
|
|
220
|
+
group: "Title",
|
|
221
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
222
|
+
},
|
|
223
|
+
getFontSizeField({
|
|
224
|
+
label: "Title Font Size",
|
|
225
|
+
defaultValue: "xl",
|
|
226
|
+
key: "titleFontSize",
|
|
227
|
+
description: "Font size for the widget title",
|
|
228
|
+
tab: "styling",
|
|
229
|
+
group: "Title",
|
|
230
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
231
|
+
}),
|
|
232
|
+
getColorField({
|
|
233
|
+
defaultValue: "background",
|
|
234
|
+
key: "titleColor",
|
|
235
|
+
label: "Title Color",
|
|
236
|
+
description: "Color for the widget title",
|
|
237
|
+
tab: "styling",
|
|
238
|
+
group: "Title",
|
|
239
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
240
|
+
}),
|
|
241
|
+
// Styling tab - Design group
|
|
242
|
+
{
|
|
243
|
+
key: "primaryMediaHeight",
|
|
244
|
+
label: "Primary Media Height (px)",
|
|
245
|
+
type: "number",
|
|
246
|
+
description: "Height of the primary media container in pixels",
|
|
247
|
+
min: 200,
|
|
248
|
+
max: 800,
|
|
249
|
+
step: 10,
|
|
250
|
+
defaultValue: 400,
|
|
251
|
+
tab: "styling",
|
|
252
|
+
group: "Design"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
key: "separator",
|
|
256
|
+
type: "separator",
|
|
257
|
+
label: "Separator",
|
|
258
|
+
tab: "styling",
|
|
259
|
+
group: "Design"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
key: "titleAlignment",
|
|
263
|
+
label: "Content Alignment",
|
|
264
|
+
type: "alignment",
|
|
265
|
+
description: "Alignment of the content inside the primary media",
|
|
266
|
+
defaultValue: { horizontal: "left", vertical: "bottom" },
|
|
267
|
+
options: {
|
|
268
|
+
horizontalEnabled: true,
|
|
269
|
+
verticalEnabled: true
|
|
270
|
+
},
|
|
271
|
+
tab: "styling",
|
|
272
|
+
group: "Design"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
key: "separator2",
|
|
276
|
+
type: "separator",
|
|
277
|
+
label: "Separator",
|
|
278
|
+
tab: "styling",
|
|
279
|
+
group: "Design"
|
|
280
|
+
},
|
|
281
|
+
getPaddingField({
|
|
282
|
+
defaultValue: 4,
|
|
283
|
+
key: "padding",
|
|
284
|
+
label: "Padding",
|
|
285
|
+
description: "Padding used throughout the widget",
|
|
286
|
+
tab: "styling",
|
|
287
|
+
group: "Design"
|
|
288
|
+
}),
|
|
289
|
+
getBorderRadiusField({
|
|
290
|
+
defaultValue: "md",
|
|
291
|
+
label: "Border Radius",
|
|
292
|
+
key: "borderRadius",
|
|
293
|
+
description: "Rounded corners for the widget",
|
|
294
|
+
tab: "styling",
|
|
295
|
+
group: "Design"
|
|
296
|
+
}),
|
|
297
|
+
{
|
|
298
|
+
key: "overlayEnabled",
|
|
299
|
+
label: "Enable Overlay",
|
|
300
|
+
type: "boolean",
|
|
301
|
+
description: "Add a dark overlay to the primary media for better text readability",
|
|
302
|
+
defaultValue: true,
|
|
303
|
+
tab: "styling",
|
|
304
|
+
group: "Design"
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
key: "overlayType",
|
|
308
|
+
label: "Overlay Type",
|
|
309
|
+
type: "buttonGroup",
|
|
310
|
+
description: "Type of overlay effect",
|
|
311
|
+
defaultValue: "gradient",
|
|
312
|
+
options: [
|
|
313
|
+
{ label: "Solid", value: "solid" },
|
|
314
|
+
{ label: "Gradient", value: "gradient" }
|
|
315
|
+
],
|
|
316
|
+
tab: "styling",
|
|
317
|
+
group: "Design",
|
|
318
|
+
requiresKeyToBeTrue: "overlayEnabled"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
key: "overlayIntensity",
|
|
322
|
+
label: "Overlay Intensity",
|
|
323
|
+
type: "slider",
|
|
324
|
+
description: "Opacity of the overlay (0-100)",
|
|
325
|
+
min: 0,
|
|
326
|
+
max: 100,
|
|
327
|
+
step: 5,
|
|
328
|
+
defaultValue: 50,
|
|
329
|
+
unit: "%",
|
|
330
|
+
tab: "styling",
|
|
331
|
+
group: "Design",
|
|
332
|
+
requiresKeyToBeTrue: "overlayEnabled"
|
|
333
|
+
},
|
|
334
|
+
// Styling tab - Nested Media Styling group
|
|
335
|
+
getGapField({
|
|
336
|
+
label: "Gap",
|
|
337
|
+
defaultValue: "md",
|
|
338
|
+
key: "gap",
|
|
339
|
+
description: "Gap between nested media items",
|
|
340
|
+
tab: "styling",
|
|
341
|
+
group: "Nested Design"
|
|
342
|
+
}),
|
|
343
|
+
getColorField({
|
|
344
|
+
defaultValue: "foreground",
|
|
345
|
+
key: "nestedTextColor",
|
|
346
|
+
label: "Nested Text Color",
|
|
347
|
+
description: "Color for nested media labels",
|
|
348
|
+
tab: "styling",
|
|
349
|
+
group: "Nested Design"
|
|
350
|
+
}),
|
|
351
|
+
{
|
|
352
|
+
type: "background",
|
|
353
|
+
defaultValue: "background",
|
|
354
|
+
key: "background",
|
|
355
|
+
label: "Background",
|
|
356
|
+
description: "Background color for nested media container",
|
|
357
|
+
tab: "styling",
|
|
358
|
+
group: "Nested Design"
|
|
359
|
+
},
|
|
360
|
+
// Data tab
|
|
361
|
+
{
|
|
362
|
+
key: "dataSource",
|
|
363
|
+
label: "Data Source",
|
|
364
|
+
type: "dataSource",
|
|
365
|
+
description: "Configure dynamic data fetching from an API",
|
|
366
|
+
tab: "data",
|
|
367
|
+
group: "Data Configuration"
|
|
368
|
+
}
|
|
369
|
+
],
|
|
370
|
+
// Per-item configuration schema for custom data sources
|
|
371
|
+
itemConfigSchema: {
|
|
372
|
+
description: "Configure settings for this item",
|
|
373
|
+
fields: [
|
|
374
|
+
{
|
|
375
|
+
key: "title",
|
|
376
|
+
label: "Custom Title",
|
|
377
|
+
type: "text",
|
|
378
|
+
description: "Override the item's title for this widget"
|
|
379
|
+
}
|
|
380
|
+
]
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
export { NestedWidget, nestedWidgetPropertySchema };
|
|
385
|
+
//# sourceMappingURL=chunk-HQVTEFSO.js.map
|
|
386
|
+
//# sourceMappingURL=chunk-HQVTEFSO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/widgets/NestedWidget.tsx"],"names":[],"mappings":"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","file":"chunk-HQVTEFSO.js","sourcesContent":["import { useRef, type ComponentProps } from \"react\";\nimport {\n MediaRenderer,\n getMediaPropsFromShareable,\n} from \"../components/MediaRenderer\";\nimport type {\n BorderRadiusOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n AlignOptions,\n GapOptions,\n BackgroundValue,\n} from \"@fluid-app/rep-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n} from \"../core/fields\";\nimport { ScrollArrows } from \"../ui/scroll-arrows\";\nimport { type ShareableItem } from \"@fluid-app/rep-core/types\";\n\ntype NestedWidgetProps = ComponentProps<\"div\"> & {\n // Content\n resource?: ShareableItem;\n titleEnabled?: boolean;\n titleText?: string;\n shareables?: ShareableItem[];\n\n // Layout\n gap?: GapOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n primaryMediaHeight?: number;\n\n // Title styling\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n titleAlignment?: AlignOptions;\n\n // Nested media styling\n nestedTextColor?: ColorOptions;\n background?: BackgroundValue;\n\n // Overlay\n overlayEnabled?: boolean;\n overlayType?: \"solid\" | \"gradient\";\n overlayIntensity?: number;\n};\n\nexport function NestedWidget({\n resource,\n titleEnabled = true,\n titleText = \"Featured Collection\",\n shareables = [],\n gap = \"md\",\n padding = 4,\n borderRadius = \"md\",\n primaryMediaHeight = 400,\n titleFontSize = \"xl\",\n titleColor = \"background\",\n titleAlignment = { horizontal: \"left\", vertical: \"bottom\" },\n nestedTextColor = \"foreground\",\n background = {\n type: \"solid\",\n color: \"background\",\n },\n overlayEnabled = true,\n overlayType = \"gradient\",\n overlayIntensity = 50,\n className,\n ...props\n}: NestedWidgetProps) {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const scrollByAmount = (direction: \"prev\" | \"next\") => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n // Get the actual gap from computed styles (supports theme variations)\n const computedGap = parseFloat(getComputedStyle(container).gap) || 0;\n const itemWidth = primaryMediaHeight * 0.75;\n const scrollAmount = itemWidth + computedGap;\n\n container.scrollTo({\n left:\n container.scrollLeft +\n (direction === \"next\" ? scrollAmount : -scrollAmount),\n behavior: \"smooth\",\n });\n };\n\n const hasNestedMedia = shareables.length > 0;\n\n const titleAlignmentClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n return (\n <div\n className={`@container flex w-full p-${padding} rounded-${borderRadius} bg-${backgroundColor} ${className}`}\n {...props}\n style={{\n maxHeight: `${primaryMediaHeight}px`,\n backgroundImage: backgroundImage,\n }}\n >\n {/* Primary Media Container - Full width on mobile, fixed on desktop */}\n <div\n className={`overflow-hidden @md:flex-none rounded-${borderRadius}`}\n style={{\n width: `${primaryMediaHeight}px`,\n }}\n >\n {/* Primary Media */}\n <div className=\"relative h-full w-full\">\n <MediaRenderer\n {...(resource ? getMediaPropsFromShareable(resource) : {})}\n />\n\n {/* Overlay */}\n {overlayEnabled && (\n <div\n className={`pointer-events-none absolute inset-0 z-10 ${\n overlayType === \"gradient\"\n ? \"bg-gradient-to-t from-black to-transparent\"\n : \"bg-black\"\n }`}\n style={{\n opacity:\n (Number(String(overlayIntensity).replace(\"%\", \"\")) || 50) /\n 100,\n }}\n />\n )}\n\n {/* Title and Mobile Nested Media */}\n {((titleEnabled && titleText) || hasNestedMedia) && (\n <div\n className={`absolute z-20 w-full ${titleAlignmentClasses[titleAlignment?.horizontal ?? \"left\"]} p-${padding} ${\n titleAlignment.vertical === \"top\"\n ? `top-0 pt-${padding}`\n : titleAlignment.vertical === \"center\"\n ? \"top-1/2 -translate-y-1/2\"\n : `bottom-0 pb-${padding}`\n }`}\n >\n {titleEnabled && titleText && (\n <h2\n className={`leading-tight font-bold text-${titleColor} text-${titleFontSize === \"md\" ? \"base\" : titleFontSize}`}\n >\n {titleText}\n </h2>\n )}\n\n {/* Mobile: Products overlay inside primary media */}\n {hasNestedMedia && (\n <div className={`pt-${padding} @md:hidden`}>\n <div\n className={`flex overflow-x-auto gap-${gapValues[gap]} bg-transparent`}\n >\n {shareables.map((shareable) => (\n <div\n key={shareable.id}\n className=\"flex shrink-0 flex-col items-center\"\n >\n <div\n className={`aspect-3/4 h-40 overflow-hidden rounded-${borderRadius}`}\n >\n <MediaRenderer\n {...getMediaPropsFromShareable(shareable)}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Desktop: Products Container - Single row beside primary media */}\n {hasNestedMedia && (\n <div\n className={`relative hidden min-w-0 self-stretch @md:flex @md:flex-1 px-${padding}`}\n >\n <div\n ref={scrollContainerRef}\n className={`flex h-full flex-row overflow-x-auto gap-${gapValues[gap]}`}\n style={{ scrollSnapType: \"x mandatory\" }}\n >\n {shareables.map((shareable) => (\n <div\n key={shareable.id}\n className=\"flex flex-col gap-1\"\n style={{\n width: `${primaryMediaHeight * 0.75}px`,\n scrollSnapAlign: \"start\",\n }}\n >\n <div\n className={`aspect-3/4 h-full rounded-${borderRadius} overflow-hidden`}\n >\n <MediaRenderer {...getMediaPropsFromShareable(shareable)} />\n </div>\n <span className={`flex-none text-sm text-${nestedTextColor}`}>\n <p className=\"truncate\">{shareable.title || \"\"}</p>\n <p className=\"truncate\">\n {((shareable.display_price as string) ?? shareable.price) ||\n \"\"}\n </p>\n </span>\n </div>\n ))}\n </div>\n\n {/* Navigation arrows */}\n <div\n className={`absolute inset-x-0 top-1/2 flex w-full -translate-y-1/2 items-center justify-between px-8`}\n >\n <ScrollArrows\n onPrevious={() => scrollByAmount(\"prev\")}\n onNext={() => scrollByAmount(\"next\")}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const nestedWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"NestedWidget\",\n displayName: \"Nested Widget\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"data\", label: \"Data\" },\n ],\n dataSourceTargetProps: [\"shareables\"],\n fields: [\n // Content tab - Resource group\n {\n key: \"resource\",\n label: \"Primary Media\",\n type: \"resource\",\n description: \"Select the primary media displayed in the large panel\",\n allowedTypes: [\"Medium\"],\n tab: \"styling\",\n group: \"Content\",\n },\n // Content tab - Title group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed over the primary media\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Main title displayed over the primary media\",\n defaultValue: \"Featured Collection\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n label: \"Title Font Size\",\n defaultValue: \"xl\",\n key: \"titleFontSize\",\n description: \"Font size for the widget title\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n defaultValue: \"background\",\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n // Styling tab - Design group\n {\n key: \"primaryMediaHeight\",\n label: \"Primary Media Height (px)\",\n type: \"number\",\n description: \"Height of the primary media container in pixels\",\n min: 200,\n max: 800,\n step: 10,\n defaultValue: 400,\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"titleAlignment\",\n label: \"Content Alignment\",\n type: \"alignment\",\n description: \"Alignment of the content inside the primary media\",\n defaultValue: { horizontal: \"left\", vertical: \"bottom\" },\n options: {\n horizontalEnabled: true,\n verticalEnabled: true,\n },\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"separator2\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n defaultValue: 4,\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding used throughout the widget\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n defaultValue: \"md\",\n label: \"Border Radius\",\n key: \"borderRadius\",\n description: \"Rounded corners for the widget\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"overlayEnabled\",\n label: \"Enable Overlay\",\n type: \"boolean\",\n description:\n \"Add a dark overlay to the primary media for better text readability\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"overlayType\",\n label: \"Overlay Type\",\n type: \"buttonGroup\",\n description: \"Type of overlay effect\",\n defaultValue: \"gradient\",\n options: [\n { label: \"Solid\", value: \"solid\" },\n { label: \"Gradient\", value: \"gradient\" },\n ],\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n {\n key: \"overlayIntensity\",\n label: \"Overlay Intensity\",\n type: \"slider\",\n description: \"Opacity of the overlay (0-100)\",\n min: 0,\n max: 100,\n step: 5,\n defaultValue: 50,\n unit: \"%\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n // Styling tab - Nested Media Styling group\n getGapField({\n label: \"Gap\",\n defaultValue: \"md\",\n key: \"gap\",\n description: \"Gap between nested media items\",\n tab: \"styling\",\n group: \"Nested Design\",\n }),\n getColorField({\n defaultValue: \"foreground\",\n key: \"nestedTextColor\",\n label: \"Nested Text Color\",\n description: \"Color for nested media labels\",\n tab: \"styling\",\n group: \"Nested Design\",\n }),\n {\n type: \"background\",\n defaultValue: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background color for nested media container\",\n tab: \"styling\",\n group: \"Nested Design\",\n },\n // Data tab\n {\n key: \"dataSource\",\n label: \"Data Source\",\n type: \"dataSource\",\n description: \"Configure dynamic data fetching from an API\",\n tab: \"data\",\n group: \"Data Configuration\",\n },\n ],\n // Per-item configuration schema for custom data sources\n itemConfigSchema: {\n description: \"Configure settings for this item\",\n fields: [\n {\n key: \"title\",\n label: \"Custom Title\",\n type: \"text\",\n description: \"Override the item's title for this widget\",\n },\n ],\n },\n} as const satisfies WidgetPropertySchema;\n"]}
|