@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,225 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk3CUVGQQI_cjs = require('./chunk-3CUVGQQI.cjs');
|
|
4
|
+
var chunkCM7D7WGL_cjs = require('./chunk-CM7D7WGL.cjs');
|
|
5
|
+
var reactQuery = require('@tanstack/react-query');
|
|
6
|
+
var context = require('@fluid-app/rep-core/data-sources/context');
|
|
7
|
+
var lucideReact = require('lucide-react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
var catchUpKeys = {
|
|
11
|
+
all: ["catchups"],
|
|
12
|
+
list: () => [...catchUpKeys.all, "list"]
|
|
13
|
+
};
|
|
14
|
+
function useCatchUps() {
|
|
15
|
+
const { baseUrl, getApiHeaders } = context.useDataSourceConfig();
|
|
16
|
+
return reactQuery.useQuery({
|
|
17
|
+
queryKey: catchUpKeys.list(),
|
|
18
|
+
queryFn: async ({ signal }) => {
|
|
19
|
+
const url = baseUrl ? `${baseUrl}/affiliate_catch_up_actions.json` : "/affiliate_catch_up_actions.json";
|
|
20
|
+
const response = await fetch(url, {
|
|
21
|
+
headers: {
|
|
22
|
+
"content-type": "application/json",
|
|
23
|
+
...getApiHeaders?.()
|
|
24
|
+
},
|
|
25
|
+
signal
|
|
26
|
+
});
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`Failed to fetch catch ups: ${response.status}`);
|
|
29
|
+
}
|
|
30
|
+
return response.json();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
var fontSizeClasses = {
|
|
35
|
+
"2xl": "text-2xl",
|
|
36
|
+
xl: "text-xl",
|
|
37
|
+
lg: "text-lg",
|
|
38
|
+
md: "text-base",
|
|
39
|
+
sm: "text-sm",
|
|
40
|
+
xs: "text-xs"
|
|
41
|
+
};
|
|
42
|
+
function CatchUpWidget({
|
|
43
|
+
// Title settings with defaults
|
|
44
|
+
titleEnabled = true,
|
|
45
|
+
titleText = "Catch Ups",
|
|
46
|
+
titleFontSize = "xl",
|
|
47
|
+
titleColor = "foreground",
|
|
48
|
+
// Design settings with defaults
|
|
49
|
+
background = {
|
|
50
|
+
type: "solid",
|
|
51
|
+
color: "background"
|
|
52
|
+
},
|
|
53
|
+
textColor = "foreground",
|
|
54
|
+
accentColor = "primary",
|
|
55
|
+
padding = 4,
|
|
56
|
+
borderRadius = "md",
|
|
57
|
+
// Display settings with defaults
|
|
58
|
+
maxItems = 5,
|
|
59
|
+
className,
|
|
60
|
+
...props
|
|
61
|
+
}) {
|
|
62
|
+
const backgroundColor = background.color || "background";
|
|
63
|
+
const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
|
|
64
|
+
const { data = [], isLoading, isError } = useCatchUps();
|
|
65
|
+
const catchUpsToShow = data.slice(0, maxItems);
|
|
66
|
+
const moreCatchUps = data.length - catchUpsToShow.length;
|
|
67
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
className: `flex flex-col rounded-${borderRadius} bg-${backgroundColor} p-${padding} text-${textColor} ${className || ""}`,
|
|
71
|
+
style: { backgroundImage },
|
|
72
|
+
...props,
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
75
|
+
titleEnabled && /* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
"h3",
|
|
77
|
+
{
|
|
78
|
+
className: `${fontSizeClasses[titleFontSize]} font-semibold text-${titleColor}`,
|
|
79
|
+
children: titleText
|
|
80
|
+
}
|
|
81
|
+
),
|
|
82
|
+
!isLoading && !isError && data.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-3xl font-bold text-${accentColor}`, children: data.length })
|
|
83
|
+
] }),
|
|
84
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-[150px] flex-1 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: `h-8 w-8 animate-spin text-${accentColor}` }) }) : isError ? (
|
|
85
|
+
/* Error state */
|
|
86
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk3CUVGQQI_cjs.ErrorState, {})
|
|
87
|
+
) : data.length === 0 ? (
|
|
88
|
+
/* Empty state */
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-[150px] flex-1 flex-col items-center justify-center gap-2", children: [
|
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: `h-8 w-8 text-${accentColor}` }),
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center font-semibold", children: "You're all caught up." }),
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm opacity-60", children: "See you next time!" })
|
|
93
|
+
] })
|
|
94
|
+
) : (
|
|
95
|
+
/* Default state with catch ups */
|
|
96
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
97
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 flex-1", children: catchUpsToShow.map((catchUp, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
98
|
+
"div",
|
|
99
|
+
{
|
|
100
|
+
className: `py-2 ${index !== catchUpsToShow.length - 1 ? "border-b border-current/10" : ""}`,
|
|
101
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "line-clamp-1 text-sm", children: catchUp.suggestion_title })
|
|
102
|
+
},
|
|
103
|
+
catchUp.id || index
|
|
104
|
+
)) }),
|
|
105
|
+
moreCatchUps > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-2 text-sm opacity-60", children: [
|
|
106
|
+
moreCatchUps,
|
|
107
|
+
" more catch up",
|
|
108
|
+
moreCatchUps > 1 ? "s" : ""
|
|
109
|
+
] })
|
|
110
|
+
] })
|
|
111
|
+
)
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
var catchUpWidgetPropertySchema = {
|
|
117
|
+
widgetType: "CatchUpWidget",
|
|
118
|
+
displayName: "Catch Up Widget",
|
|
119
|
+
tabsConfig: [{ id: "styling", label: "Styling" }],
|
|
120
|
+
fields: [
|
|
121
|
+
// Styling Tab - Title Group
|
|
122
|
+
{
|
|
123
|
+
key: "titleEnabled",
|
|
124
|
+
label: "Widget Title",
|
|
125
|
+
type: "boolean",
|
|
126
|
+
description: "Enable the title displayed above the catch ups",
|
|
127
|
+
defaultValue: true,
|
|
128
|
+
tab: "styling",
|
|
129
|
+
group: "Title"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
key: "titleText",
|
|
133
|
+
label: "Title",
|
|
134
|
+
type: "text",
|
|
135
|
+
description: "Title text displayed above the catch ups",
|
|
136
|
+
defaultValue: "Catch Ups",
|
|
137
|
+
tab: "styling",
|
|
138
|
+
group: "Title",
|
|
139
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
140
|
+
},
|
|
141
|
+
chunkCM7D7WGL_cjs.getFontSizeField({
|
|
142
|
+
key: "titleFontSize",
|
|
143
|
+
label: "Title Font Size",
|
|
144
|
+
description: "Font size for the widget title",
|
|
145
|
+
defaultValue: "xl",
|
|
146
|
+
tab: "styling",
|
|
147
|
+
group: "Title",
|
|
148
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
149
|
+
}),
|
|
150
|
+
chunkCM7D7WGL_cjs.getColorField({
|
|
151
|
+
key: "titleColor",
|
|
152
|
+
label: "Title Color",
|
|
153
|
+
description: "Color for the widget title",
|
|
154
|
+
defaultValue: "foreground",
|
|
155
|
+
tab: "styling",
|
|
156
|
+
group: "Title",
|
|
157
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
158
|
+
}),
|
|
159
|
+
// Styling Tab - Design Group
|
|
160
|
+
{
|
|
161
|
+
type: "background",
|
|
162
|
+
key: "background",
|
|
163
|
+
label: "Background",
|
|
164
|
+
description: "Background for the container",
|
|
165
|
+
defaultValue: "background",
|
|
166
|
+
tab: "styling",
|
|
167
|
+
group: "Design"
|
|
168
|
+
},
|
|
169
|
+
chunkCM7D7WGL_cjs.getColorField({
|
|
170
|
+
key: "textColor",
|
|
171
|
+
label: "Text Color",
|
|
172
|
+
description: "Default text color for catch up items",
|
|
173
|
+
defaultValue: "foreground",
|
|
174
|
+
tab: "styling",
|
|
175
|
+
group: "Design"
|
|
176
|
+
}),
|
|
177
|
+
chunkCM7D7WGL_cjs.getColorField({
|
|
178
|
+
key: "accentColor",
|
|
179
|
+
label: "Accent Color",
|
|
180
|
+
description: "Color used for count display and icons",
|
|
181
|
+
defaultValue: "primary",
|
|
182
|
+
tab: "styling",
|
|
183
|
+
group: "Design"
|
|
184
|
+
}),
|
|
185
|
+
{
|
|
186
|
+
key: "separator",
|
|
187
|
+
type: "separator",
|
|
188
|
+
label: "Separator",
|
|
189
|
+
tab: "styling",
|
|
190
|
+
group: "Design"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
key: "maxItems",
|
|
194
|
+
label: "Max Items",
|
|
195
|
+
type: "number",
|
|
196
|
+
description: "Maximum number of catch ups to display",
|
|
197
|
+
defaultValue: 5,
|
|
198
|
+
min: 1,
|
|
199
|
+
max: 10,
|
|
200
|
+
tab: "styling",
|
|
201
|
+
group: "Design"
|
|
202
|
+
},
|
|
203
|
+
chunkCM7D7WGL_cjs.getPaddingField({
|
|
204
|
+
key: "padding",
|
|
205
|
+
label: "Padding",
|
|
206
|
+
description: "Padding around the container",
|
|
207
|
+
defaultValue: 4,
|
|
208
|
+
tab: "styling",
|
|
209
|
+
group: "Design"
|
|
210
|
+
}),
|
|
211
|
+
chunkCM7D7WGL_cjs.getBorderRadiusField({
|
|
212
|
+
key: "borderRadius",
|
|
213
|
+
label: "Border Radius",
|
|
214
|
+
description: "Border radius for the container",
|
|
215
|
+
defaultValue: "md",
|
|
216
|
+
tab: "styling",
|
|
217
|
+
group: "Design"
|
|
218
|
+
})
|
|
219
|
+
]
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
exports.CatchUpWidget = CatchUpWidget;
|
|
223
|
+
exports.catchUpWidgetPropertySchema = catchUpWidgetPropertySchema;
|
|
224
|
+
//# sourceMappingURL=chunk-MNRHGJDQ.cjs.map
|
|
225
|
+
//# sourceMappingURL=chunk-MNRHGJDQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-catchups.ts","../src/widgets/CatchUpWidget.tsx"],"names":["useDataSourceConfig","useQuery","jsxs","jsx","Loader2","ErrorState","Sparkles","Fragment","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-MNRHGJDQ.cjs","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// Query key factory\nexport const catchUpKeys = {\n all: [\"catchups\"] as const,\n list: () => [...catchUpKeys.all, \"list\"] as const,\n};\n\n// API types\nexport type CatchUp = {\n id: number;\n suggestion_title: string;\n};\n\nexport function useCatchUps() {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n\n return useQuery({\n queryKey: catchUpKeys.list(),\n queryFn: async ({ signal }): Promise<CatchUp[]> => {\n const url = baseUrl\n ? `${baseUrl}/affiliate_catch_up_actions.json`\n : \"/affiliate_catch_up_actions.json\";\n const response = await fetch(url, {\n headers: {\n \"content-type\": \"application/json\",\n ...getApiHeaders?.(),\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch catch ups: ${response.status}`);\n }\n\n return response.json();\n },\n });\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/rep-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { useCatchUps } from \"../hooks/use-catchups\";\nimport { Loader2, Sparkles } from \"lucide-react\";\nimport { ErrorState } from \"../components/error-state\";\n\n// Font size mapping for title\nconst fontSizeClasses: Record<FontSizeOptions, string> = {\n \"2xl\": \"text-2xl\",\n xl: \"text-xl\",\n lg: \"text-lg\",\n md: \"text-base\",\n sm: \"text-sm\",\n xs: \"text-xs\",\n};\n\ntype CatchUpWidgetProps = ComponentProps<\"div\"> & {\n // Title settings\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n // Design settings\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n // Display settings\n maxItems?: number;\n};\n\nexport function CatchUpWidget({\n // Title settings with defaults\n titleEnabled = true,\n titleText = \"Catch Ups\",\n titleFontSize = \"xl\",\n titleColor = \"foreground\",\n // Design settings with defaults\n background = {\n type: \"solid\",\n color: \"background\",\n },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n // Display settings with defaults\n maxItems = 5,\n className,\n ...props\n}: CatchUpWidgetProps) {\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 const { data = [], isLoading, isError } = useCatchUps();\n\n const catchUpsToShow = data.slice(0, maxItems);\n const moreCatchUps = data.length - catchUpsToShow.length;\n\n return (\n <div\n className={`flex flex-col rounded-${borderRadius} bg-${backgroundColor} p-${padding} text-${textColor} ${className || \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {titleEnabled && (\n <h3\n className={`${fontSizeClasses[titleFontSize]} font-semibold text-${titleColor}`}\n >\n {titleText}\n </h3>\n )}\n {!isLoading && !isError && data.length > 0 && (\n <span className={`text-3xl font-bold text-${accentColor}`}>\n {data.length}\n </span>\n )}\n </div>\n\n {/* Loading state */}\n {isLoading ? (\n <div className=\"flex min-h-[150px] flex-1 items-center justify-center\">\n <Loader2 className={`h-8 w-8 animate-spin text-${accentColor}`} />\n </div>\n ) : isError ? (\n /* Error state */\n <ErrorState />\n ) : data.length === 0 ? (\n /* Empty state */\n <div className=\"flex min-h-[150px] flex-1 flex-col items-center justify-center gap-2\">\n <Sparkles className={`h-8 w-8 text-${accentColor}`} />\n <p className=\"text-center font-semibold\">\n You're all caught up.\n </p>\n <p className=\"text-sm opacity-60\">See you next time!</p>\n </div>\n ) : (\n /* Default state with catch ups */\n <>\n <div className=\"mt-3 flex-1\">\n {catchUpsToShow.map((catchUp, index: number) => (\n <div\n key={catchUp.id || index}\n className={`py-2 ${index !== catchUpsToShow.length - 1 ? \"border-b border-current/10\" : \"\"}`}\n >\n <p className=\"line-clamp-1 text-sm\">\n {catchUp.suggestion_title}\n </p>\n </div>\n ))}\n </div>\n\n {/* More indicator */}\n {moreCatchUps > 0 && (\n <p className=\"mt-2 text-sm opacity-60\">\n {moreCatchUps} more catch up{moreCatchUps > 1 ? \"s\" : \"\"}\n </p>\n )}\n </>\n )}\n </div>\n );\n}\n\n// Property schema for the widget editor\nexport const catchUpWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CatchUpWidget\",\n displayName: \"Catch Up Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Styling Tab - Title Group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the catch ups\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Title text displayed above the catch ups\",\n defaultValue: \"Catch Ups\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling Tab - Design Group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for catch up items\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color used for count display and icons\",\n defaultValue: \"primary\",\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: \"maxItems\",\n label: \"Max Items\",\n type: \"number\",\n description: \"Maximum number of catch ups to display\",\n defaultValue: 5,\n min: 1,\n max: 10,\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { textWidgetPropertySchema, TextWidget } from './chunk-J2FIIZSN.js';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
function AlertWidget(props) {
|
|
5
|
+
return /* @__PURE__ */ jsx(TextWidget, { ...props });
|
|
6
|
+
}
|
|
7
|
+
var alertWidgetPropertySchema = {
|
|
8
|
+
...textWidgetPropertySchema,
|
|
9
|
+
widgetType: "AlertWidget"
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { AlertWidget, alertWidgetPropertySchema };
|
|
13
|
+
//# sourceMappingURL=chunk-MNWWZGL2.js.map
|
|
14
|
+
//# sourceMappingURL=chunk-MNWWZGL2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/widgets/AlertWidget.tsx"],"names":[],"mappings":";;;AAOO,SAAS,YAAY,KAAA,EAA0C;AACpE,EAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAY,GAAG,KAAA,EAAO,CAAA;AAChC;AAEO,IAAM,yBAAA,GAAkD;AAAA,EAC7D,GAAG,wBAAA;AAAA,EACH,UAAA,EAAY;AACd","file":"chunk-MNWWZGL2.js","sourcesContent":["import { TextWidget, textWidgetPropertySchema } from \"./TextWidget\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport type { ComponentProps } from \"react\";\n\n/**\n * AlertWidget - Wrapper for TextWidget (for backwards compatibility)\n */\nexport function AlertWidget(props: ComponentProps<typeof TextWidget>) {\n return <TextWidget {...props} />;\n}\n\nexport const alertWidgetPropertySchema: WidgetPropertySchema = {\n ...textWidgetPropertySchema,\n widgetType: \"AlertWidget\",\n};\n"]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ScreenRenderer } from './chunk-RKDOQV4T.js';
|
|
2
|
+
import { useScreenRenderer } from './chunk-ZWFK5UUU.js';
|
|
3
|
+
import { useRegistry } from './chunk-6GF46P3S.js';
|
|
4
|
+
import { getGapField, getPaddingField, getBorderRadiusField, gapValues } from './chunk-ZS7C474P.js';
|
|
5
|
+
import { sectionLayoutConfig } from '@fluid-app/rep-core/types';
|
|
6
|
+
import { groupChildrenByColumn } from '@fluid-app/rep-core/widget-utils';
|
|
7
|
+
import { jsx } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var LayoutWidget = ({
|
|
10
|
+
sectionLayout = "single-column",
|
|
11
|
+
gap = 4,
|
|
12
|
+
gapSize,
|
|
13
|
+
background = {
|
|
14
|
+
type: "solid",
|
|
15
|
+
color: "background"
|
|
16
|
+
},
|
|
17
|
+
padding = 0,
|
|
18
|
+
borderRadius = "md",
|
|
19
|
+
children = [],
|
|
20
|
+
registry,
|
|
21
|
+
className = "",
|
|
22
|
+
minHeight
|
|
23
|
+
}) => {
|
|
24
|
+
const contextRegistry = useRegistry();
|
|
25
|
+
const effectiveRegistry = registry || contextRegistry;
|
|
26
|
+
const ContextScreenRenderer = useScreenRenderer();
|
|
27
|
+
const ScreenRenderer2 = ContextScreenRenderer ?? ScreenRenderer;
|
|
28
|
+
const backgroundColor = background.color || "background";
|
|
29
|
+
const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
|
|
30
|
+
const layoutConfig = sectionLayoutConfig[sectionLayout];
|
|
31
|
+
const columnCount = layoutConfig.columns;
|
|
32
|
+
const gapSizeValue = gapSize ? gapValues[gapSize] : gap;
|
|
33
|
+
const layoutClasses = [
|
|
34
|
+
"grid",
|
|
35
|
+
"grid-cols-1",
|
|
36
|
+
// Mobile: single column
|
|
37
|
+
layoutConfig.gridClasses,
|
|
38
|
+
// Desktop (@md+): configured columns
|
|
39
|
+
`bg-${backgroundColor} p-${padding} rounded-${borderRadius}`,
|
|
40
|
+
`gap-${gapSizeValue}`,
|
|
41
|
+
className
|
|
42
|
+
].filter(Boolean).join(" ");
|
|
43
|
+
const containerStyle = {
|
|
44
|
+
...minHeight ? { minHeight: `${minHeight}px` } : {},
|
|
45
|
+
alignItems: "start",
|
|
46
|
+
// Masonry-style: columns don't stretch to match height
|
|
47
|
+
backgroundImage
|
|
48
|
+
};
|
|
49
|
+
if (!effectiveRegistry) {
|
|
50
|
+
console.warn("Layout widget: No registry provided, cannot render children");
|
|
51
|
+
return /* @__PURE__ */ jsx("div", { className: layoutClasses, style: containerStyle });
|
|
52
|
+
}
|
|
53
|
+
const columnGroups = groupChildrenByColumn(
|
|
54
|
+
children,
|
|
55
|
+
columnCount
|
|
56
|
+
);
|
|
57
|
+
return /* @__PURE__ */ jsx("div", { className: "@container", children: /* @__PURE__ */ jsx("div", { className: layoutClasses, style: containerStyle, children: columnGroups.map((columnChildren, colIndex) => /* @__PURE__ */ jsx(
|
|
58
|
+
ScreenRenderer2,
|
|
59
|
+
{
|
|
60
|
+
screen: columnChildren,
|
|
61
|
+
registry: effectiveRegistry,
|
|
62
|
+
className: `flex flex-col gap-${gapSizeValue}`
|
|
63
|
+
},
|
|
64
|
+
colIndex
|
|
65
|
+
)) }) });
|
|
66
|
+
};
|
|
67
|
+
var layoutWidgetPropertySchema = {
|
|
68
|
+
widgetType: "LayoutWidget",
|
|
69
|
+
displayName: "Layout",
|
|
70
|
+
fields: [
|
|
71
|
+
// Layout Configuration - Visual selector matching Figma design
|
|
72
|
+
{
|
|
73
|
+
key: "sectionLayout",
|
|
74
|
+
label: "Layout Type",
|
|
75
|
+
type: "sectionLayoutSelect",
|
|
76
|
+
description: "Column layout configuration",
|
|
77
|
+
defaultValue: "single-column",
|
|
78
|
+
group: "Layout"
|
|
79
|
+
},
|
|
80
|
+
// Design
|
|
81
|
+
getGapField({
|
|
82
|
+
key: "gapSize",
|
|
83
|
+
label: "Gap",
|
|
84
|
+
description: "Gap between columns and widgets",
|
|
85
|
+
defaultValue: "md",
|
|
86
|
+
group: "Design"
|
|
87
|
+
}),
|
|
88
|
+
{
|
|
89
|
+
type: "background",
|
|
90
|
+
key: "background",
|
|
91
|
+
label: "Background",
|
|
92
|
+
description: "Background for the layout container",
|
|
93
|
+
defaultValue: "background",
|
|
94
|
+
group: "Design"
|
|
95
|
+
},
|
|
96
|
+
getPaddingField({
|
|
97
|
+
key: "padding",
|
|
98
|
+
label: "Padding",
|
|
99
|
+
description: "Padding for the layout container",
|
|
100
|
+
defaultValue: 4,
|
|
101
|
+
group: "Design"
|
|
102
|
+
}),
|
|
103
|
+
getBorderRadiusField({
|
|
104
|
+
key: "borderRadius",
|
|
105
|
+
label: "Border Radius",
|
|
106
|
+
description: "Border radius for the layout container",
|
|
107
|
+
defaultValue: "md",
|
|
108
|
+
group: "Design"
|
|
109
|
+
})
|
|
110
|
+
]
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export { LayoutWidget, layoutWidgetPropertySchema };
|
|
114
|
+
//# sourceMappingURL=chunk-MWED53XR.js.map
|
|
115
|
+
//# sourceMappingURL=chunk-MWED53XR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/widgets/LayoutWidget.tsx"],"names":["ScreenRenderer"],"mappings":"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","file":"chunk-MWED53XR.js","sourcesContent":["import { ScreenRenderer as DefaultScreenRenderer } from \"../core/ScreenRenderer\";\nimport { useRegistry } from \"../contexts/RegistryContext\";\nimport { useScreenRenderer } from \"../contexts/ScreenRendererContext\";\nimport type {\n TypedWidgetSchema,\n WidgetSchema,\n BorderRadiusOptions,\n PaddingOptions,\n GapOptions,\n SectionLayoutType,\n BackgroundValue,\n} from \"@fluid-app/rep-core/types\";\nimport { sectionLayoutConfig } from \"@fluid-app/rep-core/types\";\nimport type { ComponentType } from \"react\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport {\n getBorderRadiusField,\n getGapField,\n getPaddingField,\n gapValues,\n} from \"../core/fields\";\nimport { groupChildrenByColumn } from \"@fluid-app/rep-core/widget-utils\";\n\ntype LayoutProps<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, ComponentType<any>> = Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ComponentType<any>\n >,\n> = {\n // Section layout type (masonry-style column configuration)\n sectionLayout?: SectionLayoutType;\n\n // Legacy props (deprecated, kept for backward compatibility)\n type?: \"flex\" | \"grid\";\n columns?: number;\n rows?: number;\n direction?: string;\n justify?: string;\n align?: string;\n wrap?: boolean;\n\n // Spacing\n gap?: number; // deprecated, use gapSize instead\n gapSize?: GapOptions;\n\n // Design\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Content - widgets with columnIndex property for masonry layout\n children: (TypedWidgetSchema<T> | null)[] | (WidgetSchema | null)[];\n\n // Widget registry (passed down from parent renderer)\n registry?: T;\n\n // Styling\n className?: string;\n minHeight?: number;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const LayoutWidget = <T extends Record<string, ComponentType<any>>>({\n sectionLayout = \"single-column\",\n gap = 4,\n gapSize,\n background = {\n type: \"solid\",\n color: \"background\",\n },\n padding = 0,\n borderRadius = \"md\",\n children = [],\n registry,\n className = \"\",\n minHeight,\n}: LayoutProps<T>) => {\n // Get registry from context if not provided as prop\n const contextRegistry = useRegistry();\n const effectiveRegistry = registry || contextRegistry;\n\n // Use ScreenRenderer from context (e.g. rep-builder's), fall back to local\n const ContextScreenRenderer = useScreenRenderer();\n const ScreenRenderer = ContextScreenRenderer ?? DefaultScreenRenderer;\n\n // Extract background values\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 // Get layout configuration\n const layoutConfig = sectionLayoutConfig[sectionLayout];\n const columnCount = layoutConfig.columns;\n\n // Calculate gap size\n const gapSizeValue = gapSize ? gapValues[gapSize] : gap;\n\n // Build CSS classes for masonry layout with responsive columns\n const layoutClasses = [\n \"grid\",\n \"grid-cols-1\", // Mobile: single column\n layoutConfig.gridClasses, // Desktop (@md+): configured columns\n `bg-${backgroundColor} p-${padding} rounded-${borderRadius}`,\n `gap-${gapSizeValue}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Container style\n const containerStyle: React.CSSProperties = {\n ...(minHeight ? { minHeight: `${minHeight}px` } : {}),\n alignItems: \"start\", // Masonry-style: columns don't stretch to match height\n backgroundImage,\n };\n\n // If no registry is available, we can't render the children\n if (!effectiveRegistry) {\n console.warn(\"Layout widget: No registry provided, cannot render children\");\n return <div className={layoutClasses} style={containerStyle} />;\n }\n\n // Group children by column\n const columnGroups = groupChildrenByColumn(\n children as WidgetSchema[],\n columnCount,\n );\n\n // Regular render mode - render each column as a flex column\n return (\n <div className=\"@container\">\n <div className={layoutClasses} style={containerStyle}>\n {columnGroups.map((columnChildren, colIndex) => (\n <ScreenRenderer\n key={colIndex}\n screen={columnChildren}\n registry={effectiveRegistry}\n className={`flex flex-col gap-${gapSizeValue}`}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const layoutWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"LayoutWidget\",\n displayName: \"Layout\",\n fields: [\n // Layout Configuration - Visual selector matching Figma design\n {\n key: \"sectionLayout\",\n label: \"Layout Type\",\n type: \"sectionLayoutSelect\",\n description: \"Column layout configuration\",\n defaultValue: \"single-column\",\n group: \"Layout\",\n },\n\n // Design\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between columns and widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the layout container\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding for the layout container\",\n defaultValue: 4,\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the layout container\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n ],\n};\n"]}
|