@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.
Files changed (228) hide show
  1. package/dist/AlertWidget-2JHMNYIY.js +5 -0
  2. package/dist/AlertWidget-2JHMNYIY.js.map +1 -0
  3. package/dist/AlertWidget-VHXWOKM4.cjs +18 -0
  4. package/dist/AlertWidget-VHXWOKM4.cjs.map +1 -0
  5. package/dist/CalendarWidget-AQ7PVNSI.cjs +18 -0
  6. package/dist/CalendarWidget-AQ7PVNSI.cjs.map +1 -0
  7. package/dist/CalendarWidget-E54LNKCG.js +5 -0
  8. package/dist/CalendarWidget-E54LNKCG.js.map +1 -0
  9. package/dist/CarouselWidget-IPPFSXDZ.js +8 -0
  10. package/dist/CarouselWidget-IPPFSXDZ.js.map +1 -0
  11. package/dist/CarouselWidget-ZG6LJJXG.cjs +21 -0
  12. package/dist/CarouselWidget-ZG6LJJXG.cjs.map +1 -0
  13. package/dist/CatchUpWidget-CSSQMPPA.cjs +18 -0
  14. package/dist/CatchUpWidget-CSSQMPPA.cjs.map +1 -0
  15. package/dist/CatchUpWidget-HYJRKFN3.js +5 -0
  16. package/dist/CatchUpWidget-HYJRKFN3.js.map +1 -0
  17. package/dist/ChartWidget-MBLGRSJQ.cjs +19 -0
  18. package/dist/ChartWidget-MBLGRSJQ.cjs.map +1 -0
  19. package/dist/ChartWidget-OL5DRMGA.js +6 -0
  20. package/dist/ChartWidget-OL5DRMGA.js.map +1 -0
  21. package/dist/ContainerWidget-DETCLP52.js +8 -0
  22. package/dist/ContainerWidget-DETCLP52.js.map +1 -0
  23. package/dist/ContainerWidget-XQDJSJXO.cjs +21 -0
  24. package/dist/ContainerWidget-XQDJSJXO.cjs.map +1 -0
  25. package/dist/EmbedWidget-HTR2MJ25.cjs +16 -0
  26. package/dist/EmbedWidget-HTR2MJ25.cjs.map +1 -0
  27. package/dist/EmbedWidget-O2XFGDJS.js +3 -0
  28. package/dist/EmbedWidget-O2XFGDJS.js.map +1 -0
  29. package/dist/ImageWidget-L2MIYWTE.cjs +17 -0
  30. package/dist/ImageWidget-L2MIYWTE.cjs.map +1 -0
  31. package/dist/ImageWidget-RF6XKPPV.js +4 -0
  32. package/dist/ImageWidget-RF6XKPPV.js.map +1 -0
  33. package/dist/LayoutWidget-4XISA6RO.cjs +20 -0
  34. package/dist/LayoutWidget-4XISA6RO.cjs.map +1 -0
  35. package/dist/LayoutWidget-WZSMZLLM.js +7 -0
  36. package/dist/LayoutWidget-WZSMZLLM.js.map +1 -0
  37. package/dist/ListWidget-XY5C3P3C.cjs +19 -0
  38. package/dist/ListWidget-XY5C3P3C.cjs.map +1 -0
  39. package/dist/ListWidget-ZFRV6DKI.js +6 -0
  40. package/dist/ListWidget-ZFRV6DKI.js.map +1 -0
  41. package/dist/MySiteWidget-75NJUIWV.js +5 -0
  42. package/dist/MySiteWidget-75NJUIWV.js.map +1 -0
  43. package/dist/MySiteWidget-CBDKQT35.cjs +18 -0
  44. package/dist/MySiteWidget-CBDKQT35.cjs.map +1 -0
  45. package/dist/NestedWidget-N4I7LOVX.js +6 -0
  46. package/dist/NestedWidget-N4I7LOVX.js.map +1 -0
  47. package/dist/NestedWidget-VO3YYOOH.cjs +19 -0
  48. package/dist/NestedWidget-VO3YYOOH.cjs.map +1 -0
  49. package/dist/QuickShareWidget-3VGSFY4J.js +4 -0
  50. package/dist/QuickShareWidget-3VGSFY4J.js.map +1 -0
  51. package/dist/QuickShareWidget-VHDB5SYT.cjs +17 -0
  52. package/dist/QuickShareWidget-VHDB5SYT.cjs.map +1 -0
  53. package/dist/RecentActivityWidget-3KAR64SB.js +5 -0
  54. package/dist/RecentActivityWidget-3KAR64SB.js.map +1 -0
  55. package/dist/RecentActivityWidget-X5UABJHL.cjs +18 -0
  56. package/dist/RecentActivityWidget-X5UABJHL.cjs.map +1 -0
  57. package/dist/SpacerWidget-K7CXVECO.cjs +16 -0
  58. package/dist/SpacerWidget-K7CXVECO.cjs.map +1 -0
  59. package/dist/SpacerWidget-ODKNZAND.js +3 -0
  60. package/dist/SpacerWidget-ODKNZAND.js.map +1 -0
  61. package/dist/TableWidget-MDEBHVIA.cjs +20 -0
  62. package/dist/TableWidget-MDEBHVIA.cjs.map +1 -0
  63. package/dist/TableWidget-W6LL5FLE.js +7 -0
  64. package/dist/TableWidget-W6LL5FLE.js.map +1 -0
  65. package/dist/TextWidget-D72TL53O.js +4 -0
  66. package/dist/TextWidget-D72TL53O.js.map +1 -0
  67. package/dist/TextWidget-DYINWJGB.cjs +17 -0
  68. package/dist/TextWidget-DYINWJGB.cjs.map +1 -0
  69. package/dist/ToDoWidget-DH544SJH.cjs +18 -0
  70. package/dist/ToDoWidget-DH544SJH.cjs.map +1 -0
  71. package/dist/ToDoWidget-LCAYWRVH.js +5 -0
  72. package/dist/ToDoWidget-LCAYWRVH.js.map +1 -0
  73. package/dist/VideoWidget-VHAZTNLI.js +4 -0
  74. package/dist/VideoWidget-VHAZTNLI.js.map +1 -0
  75. package/dist/VideoWidget-YLRKZ27S.cjs +17 -0
  76. package/dist/VideoWidget-YLRKZ27S.cjs.map +1 -0
  77. package/dist/chunk-2KQFMF6L.js +413 -0
  78. package/dist/chunk-2KQFMF6L.js.map +1 -0
  79. package/dist/chunk-3CUVGQQI.cjs +15 -0
  80. package/dist/chunk-3CUVGQQI.cjs.map +1 -0
  81. package/dist/chunk-3RV7AYQZ.js +149 -0
  82. package/dist/chunk-3RV7AYQZ.js.map +1 -0
  83. package/dist/chunk-4M2A5W2D.cjs +42 -0
  84. package/dist/chunk-4M2A5W2D.cjs.map +1 -0
  85. package/dist/chunk-4XJCU4HY.js +248 -0
  86. package/dist/chunk-4XJCU4HY.js.map +1 -0
  87. package/dist/chunk-5HHN5MRZ.js +11 -0
  88. package/dist/chunk-5HHN5MRZ.js.map +1 -0
  89. package/dist/chunk-6GF46P3S.js +33 -0
  90. package/dist/chunk-6GF46P3S.js.map +1 -0
  91. package/dist/chunk-7JIRJTGY.js +32 -0
  92. package/dist/chunk-7JIRJTGY.js.map +1 -0
  93. package/dist/chunk-7XWMJDFE.js +443 -0
  94. package/dist/chunk-7XWMJDFE.js.map +1 -0
  95. package/dist/chunk-C7A3OMIF.cjs +446 -0
  96. package/dist/chunk-C7A3OMIF.cjs.map +1 -0
  97. package/dist/chunk-CEZOXMO6.js +377 -0
  98. package/dist/chunk-CEZOXMO6.js.map +1 -0
  99. package/dist/chunk-CM7D7WGL.cjs +36 -0
  100. package/dist/chunk-CM7D7WGL.cjs.map +1 -0
  101. package/dist/chunk-D4ULCQ42.cjs +353 -0
  102. package/dist/chunk-D4ULCQ42.cjs.map +1 -0
  103. package/dist/chunk-DKGP3DTX.cjs +389 -0
  104. package/dist/chunk-DKGP3DTX.cjs.map +1 -0
  105. package/dist/chunk-DM2JDG3D.js +318 -0
  106. package/dist/chunk-DM2JDG3D.js.map +1 -0
  107. package/dist/chunk-DW6V4ZCT.cjs +140 -0
  108. package/dist/chunk-DW6V4ZCT.cjs.map +1 -0
  109. package/dist/chunk-E4MY6TUE.cjs +255 -0
  110. package/dist/chunk-E4MY6TUE.cjs.map +1 -0
  111. package/dist/chunk-EHSWARYY.js +39 -0
  112. package/dist/chunk-EHSWARYY.js.map +1 -0
  113. package/dist/chunk-EUOP3MWJ.cjs +118 -0
  114. package/dist/chunk-EUOP3MWJ.cjs.map +1 -0
  115. package/dist/chunk-F3SFIX7U.cjs +58 -0
  116. package/dist/chunk-F3SFIX7U.cjs.map +1 -0
  117. package/dist/chunk-F63VY23B.js +174 -0
  118. package/dist/chunk-F63VY23B.js.map +1 -0
  119. package/dist/chunk-FSLUSFJ2.cjs +75 -0
  120. package/dist/chunk-FSLUSFJ2.cjs.map +1 -0
  121. package/dist/chunk-GA52TZC4.js +133 -0
  122. package/dist/chunk-GA52TZC4.js.map +1 -0
  123. package/dist/chunk-GRFCSQ2M.js +13 -0
  124. package/dist/chunk-GRFCSQ2M.js.map +1 -0
  125. package/dist/chunk-HBRGW3CJ.js +383 -0
  126. package/dist/chunk-HBRGW3CJ.js.map +1 -0
  127. package/dist/chunk-HDA2ZOV2.cjs +13 -0
  128. package/dist/chunk-HDA2ZOV2.cjs.map +1 -0
  129. package/dist/chunk-HQVTEFSO.js +386 -0
  130. package/dist/chunk-HQVTEFSO.js.map +1 -0
  131. package/dist/chunk-IU657MP5.js +270 -0
  132. package/dist/chunk-IU657MP5.js.map +1 -0
  133. package/dist/chunk-IY3BNQ5Y.js +24 -0
  134. package/dist/chunk-IY3BNQ5Y.js.map +1 -0
  135. package/dist/chunk-J2FIIZSN.js +137 -0
  136. package/dist/chunk-J2FIIZSN.js.map +1 -0
  137. package/dist/chunk-JRBJXVXL.cjs +251 -0
  138. package/dist/chunk-JRBJXVXL.cjs.map +1 -0
  139. package/dist/chunk-JYWKXNUO.cjs +37 -0
  140. package/dist/chunk-JYWKXNUO.cjs.map +1 -0
  141. package/dist/chunk-KE27RJ3X.cjs +954 -0
  142. package/dist/chunk-KE27RJ3X.cjs.map +1 -0
  143. package/dist/chunk-M4J3OZJF.cjs +152 -0
  144. package/dist/chunk-M4J3OZJF.cjs.map +1 -0
  145. package/dist/chunk-MKUJOEAC.cjs +178 -0
  146. package/dist/chunk-MKUJOEAC.cjs.map +1 -0
  147. package/dist/chunk-MNRHGJDQ.cjs +225 -0
  148. package/dist/chunk-MNRHGJDQ.cjs.map +1 -0
  149. package/dist/chunk-MNWWZGL2.js +14 -0
  150. package/dist/chunk-MNWWZGL2.js.map +1 -0
  151. package/dist/chunk-MWED53XR.js +115 -0
  152. package/dist/chunk-MWED53XR.js.map +1 -0
  153. package/dist/chunk-NCQQI2T2.cjs +386 -0
  154. package/dist/chunk-NCQQI2T2.cjs.map +1 -0
  155. package/dist/chunk-NGYR4RQF.js +476 -0
  156. package/dist/chunk-NGYR4RQF.js.map +1 -0
  157. package/dist/chunk-NNJDJNSY.cjs +197 -0
  158. package/dist/chunk-NNJDJNSY.cjs.map +1 -0
  159. package/dist/chunk-NOZVVD6G.cjs +26 -0
  160. package/dist/chunk-NOZVVD6G.cjs.map +1 -0
  161. package/dist/chunk-NUG3DWF7.js +55 -0
  162. package/dist/chunk-NUG3DWF7.js.map +1 -0
  163. package/dist/chunk-NXAZEYLC.cjs +136 -0
  164. package/dist/chunk-NXAZEYLC.cjs.map +1 -0
  165. package/dist/chunk-PNVBMN27.cjs +380 -0
  166. package/dist/chunk-PNVBMN27.cjs.map +1 -0
  167. package/dist/chunk-RKDOQV4T.js +73 -0
  168. package/dist/chunk-RKDOQV4T.js.map +1 -0
  169. package/dist/chunk-RMZFC7HF.cjs +17 -0
  170. package/dist/chunk-RMZFC7HF.cjs.map +1 -0
  171. package/dist/chunk-SBHL3GFW.js +40 -0
  172. package/dist/chunk-SBHL3GFW.js.map +1 -0
  173. package/dist/chunk-TFJQ4525.cjs +416 -0
  174. package/dist/chunk-TFJQ4525.cjs.map +1 -0
  175. package/dist/chunk-VBJ5FT4C.cjs +273 -0
  176. package/dist/chunk-VBJ5FT4C.cjs.map +1 -0
  177. package/dist/chunk-VZFL5BZM.js +222 -0
  178. package/dist/chunk-VZFL5BZM.js.map +1 -0
  179. package/dist/chunk-W7VPL5I4.js +252 -0
  180. package/dist/chunk-W7VPL5I4.js.map +1 -0
  181. package/dist/chunk-XALQ3ANE.cjs +34 -0
  182. package/dist/chunk-XALQ3ANE.cjs.map +1 -0
  183. package/dist/chunk-YCYKV5KF.cjs +43 -0
  184. package/dist/chunk-YCYKV5KF.cjs.map +1 -0
  185. package/dist/chunk-YJZGIS4L.cjs +479 -0
  186. package/dist/chunk-YJZGIS4L.cjs.map +1 -0
  187. package/dist/chunk-YU5DAILW.cjs +14 -0
  188. package/dist/chunk-YU5DAILW.cjs.map +1 -0
  189. package/dist/chunk-YY5WLV63.js +951 -0
  190. package/dist/chunk-YY5WLV63.js.map +1 -0
  191. package/dist/chunk-ZS7C474P.js +3 -0
  192. package/dist/chunk-ZS7C474P.js.map +1 -0
  193. package/dist/chunk-ZSUGXJWD.js +194 -0
  194. package/dist/chunk-ZSUGXJWD.js.map +1 -0
  195. package/dist/chunk-ZWFK5UUU.js +11 -0
  196. package/dist/chunk-ZWFK5UUU.js.map +1 -0
  197. package/dist/components/index.cjs +17 -0
  198. package/dist/components/index.cjs.map +1 -0
  199. package/dist/components/index.d.cts +8 -0
  200. package/dist/components/index.d.ts +8 -0
  201. package/dist/components/index.js +4 -0
  202. package/dist/components/index.js.map +1 -0
  203. package/dist/contexts/index.cjs +29 -0
  204. package/dist/contexts/index.cjs.map +1 -0
  205. package/dist/contexts/index.d.cts +73 -0
  206. package/dist/contexts/index.d.ts +73 -0
  207. package/dist/contexts/index.js +4 -0
  208. package/dist/contexts/index.js.map +1 -0
  209. package/dist/core/index.cjs +55 -0
  210. package/dist/core/index.cjs.map +1 -0
  211. package/dist/core/index.d.cts +64 -0
  212. package/dist/core/index.d.ts +64 -0
  213. package/dist/core/index.js +6 -0
  214. package/dist/core/index.js.map +1 -0
  215. package/dist/ui/index.cjs +80 -0
  216. package/dist/ui/index.cjs.map +1 -0
  217. package/dist/ui/index.d.cts +69 -0
  218. package/dist/ui/index.d.ts +69 -0
  219. package/dist/ui/index.js +7 -0
  220. package/dist/ui/index.js.map +1 -0
  221. package/dist/widgets/index.cjs +217 -0
  222. package/dist/widgets/index.cjs.map +1 -0
  223. package/dist/widgets/index.d.cts +397 -0
  224. package/dist/widgets/index.d.ts +397 -0
  225. package/dist/widgets/index.js +59 -0
  226. package/dist/widgets/index.js.map +1 -0
  227. package/package.json +99 -0
  228. package/styles/globals.css +20 -0
@@ -0,0 +1,951 @@
1
+ import { MediaRenderer } 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 { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var SCROLL_ITEM_WIDTH = 300;
8
+ var getImageUrl = (item) => {
9
+ return item.imageUrl || item.image;
10
+ };
11
+ function getFeaturedAssetUrl(value) {
12
+ if (!value) return void 0;
13
+ if (typeof value === "string") {
14
+ const isVideo = /\.(mp4|webm|ogg|mov)$/i.test(value);
15
+ return { url: value, isVideo };
16
+ }
17
+ if (typeof value === "object") {
18
+ const videoUrl = value.videoUrl || value.video_url || value.url;
19
+ if (videoUrl && /\.(mp4|webm|ogg|mov)$/i.test(videoUrl)) {
20
+ return { url: videoUrl, isVideo: true };
21
+ }
22
+ const imageUrl = value.imageUrl || value.image_url || value.url;
23
+ if (imageUrl) {
24
+ return { url: imageUrl, isVideo: false };
25
+ }
26
+ }
27
+ return void 0;
28
+ }
29
+ function getTextContent(value) {
30
+ if (!value) return "";
31
+ if (typeof value === "string") return value;
32
+ if (typeof value === "object" && value !== null && "body" in value) {
33
+ const body = value.body;
34
+ return typeof body === "string" ? body : "";
35
+ }
36
+ if (typeof value === "object") return "";
37
+ return String(value);
38
+ }
39
+ function getStringValue(value) {
40
+ if (!value) return "";
41
+ if (typeof value === "string") return value;
42
+ if (typeof value === "number") return String(value);
43
+ if (typeof value === "object" && value !== null) {
44
+ if ("body" in value) {
45
+ const body = value.body;
46
+ if (typeof body === "string") return body;
47
+ }
48
+ if ("text" in value) {
49
+ const text = value.text;
50
+ if (typeof text === "string") return text;
51
+ }
52
+ if ("value" in value) {
53
+ const val = value.value;
54
+ if (typeof val === "string") return val;
55
+ if (typeof val === "number") return String(val);
56
+ }
57
+ }
58
+ return "";
59
+ }
60
+ var getAspectRatioClass = (ratio) => {
61
+ const ratios = {
62
+ square: "aspect-square",
63
+ landscape: "aspect-video",
64
+ portrait: "aspect-[3/4]"
65
+ };
66
+ return ratios[ratio];
67
+ };
68
+ var getResponsiveGridClass = (columns) => {
69
+ const responsiveClasses = {
70
+ 1: "grid-cols-2 @lg:grid-cols-1",
71
+ 2: "grid-cols-2 @lg:grid-cols-2",
72
+ 3: "grid-cols-2 @lg:grid-cols-3",
73
+ 4: "grid-cols-2 @lg:grid-cols-4",
74
+ 5: "grid-cols-2 @lg:grid-cols-5",
75
+ 6: "grid-cols-2 @lg:grid-cols-6"
76
+ };
77
+ return responsiveClasses[columns] || "grid-cols-2 @lg:grid-cols-3";
78
+ };
79
+ function ListWidget({
80
+ listType = "unordered",
81
+ scrollAxis = "horizontal",
82
+ titleEnabled = true,
83
+ title,
84
+ items = [],
85
+ titleColor = "foreground",
86
+ titleSize = "lg",
87
+ itemTitleColor = "foreground",
88
+ itemTitleSize = "sm",
89
+ descriptionColor = "muted",
90
+ descriptionSize = "sm",
91
+ priceColor = "foreground",
92
+ priceSize = "md",
93
+ originalPriceColor = "muted",
94
+ metaTextColor = "muted",
95
+ metaTextSize = "xs",
96
+ numberColor = "primary",
97
+ numberSize = "2xl",
98
+ borderRadius = "md",
99
+ padding = 4,
100
+ gap = "md",
101
+ columns = 3,
102
+ imageAspectRatio = "square",
103
+ background = { type: "solid", color: "background" },
104
+ showBadge = true,
105
+ showFavorite = true,
106
+ showMetaText = true,
107
+ maxItems = 12,
108
+ showFeaturedSection = false,
109
+ featuredAsset,
110
+ featuredTitle,
111
+ featuredSubtitle,
112
+ featuredButtonText,
113
+ featuredButtonUrl,
114
+ featuredSubtitleColor = "background",
115
+ featuredSubtitleSize = "md",
116
+ className,
117
+ ...props
118
+ }) {
119
+ const scrollContainerRef = useRef(null);
120
+ const displayItems = maxItems ? items.slice(0, maxItems) : items;
121
+ const hasItems = displayItems.length > 0;
122
+ const largeNumberSizes = {
123
+ xs: "8rem",
124
+ sm: "10rem",
125
+ md: "12rem",
126
+ lg: "14rem",
127
+ xl: "16rem",
128
+ "2xl": "20rem"
129
+ };
130
+ const scrollByAmount = (direction) => {
131
+ const container = scrollContainerRef.current;
132
+ if (!container) return;
133
+ const computedGap = parseFloat(getComputedStyle(container).gap) || 0;
134
+ const scrollAmount = SCROLL_ITEM_WIDTH + computedGap;
135
+ container.scrollTo({
136
+ left: container.scrollLeft + (direction === "next" ? scrollAmount : -scrollAmount),
137
+ behavior: "smooth"
138
+ });
139
+ };
140
+ const renderFeaturedSection = () => {
141
+ if (!showFeaturedSection) return null;
142
+ const asset = getFeaturedAssetUrl(featuredAsset);
143
+ if (!asset) return null;
144
+ return /* @__PURE__ */ jsxs(
145
+ "div",
146
+ {
147
+ className: `relative h-full min-h-[300px] w-full overflow-hidden rounded-${borderRadius}`,
148
+ children: [
149
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 h-full w-full", children: /* @__PURE__ */ jsx(
150
+ MediaRenderer,
151
+ {
152
+ src: asset.url,
153
+ mediaType: asset.isVideo ? "video" : "image",
154
+ alt: featuredTitle || "Featured",
155
+ objectFit: "cover",
156
+ autoplay: asset.isVideo,
157
+ loop: asset.isVideo,
158
+ muted: asset.isVideo,
159
+ controls: false
160
+ }
161
+ ) }),
162
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black/40" }),
163
+ /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 flex flex-col items-start justify-end p-8", children: [
164
+ featuredTitle && /* @__PURE__ */ jsx(
165
+ "h3",
166
+ {
167
+ className: `mb-2 font-bold text-white text-${titleSize === "md" ? "base" : titleSize}`,
168
+ children: featuredTitle
169
+ }
170
+ ),
171
+ featuredSubtitle && /* @__PURE__ */ jsx(
172
+ "p",
173
+ {
174
+ className: `mb-4 text-${featuredSubtitleColor} text-${featuredSubtitleSize === "md" ? "base" : featuredSubtitleSize}`,
175
+ children: featuredSubtitle
176
+ }
177
+ ),
178
+ featuredButtonText && /* @__PURE__ */ jsx(
179
+ "a",
180
+ {
181
+ href: featuredButtonUrl || "#",
182
+ className: `bg-white px-6 py-2 font-medium text-foreground transition-opacity hover:opacity-90 rounded-${borderRadius}`,
183
+ children: featuredButtonText
184
+ }
185
+ )
186
+ ] })
187
+ ]
188
+ }
189
+ );
190
+ };
191
+ const renderUnorderedList = () => {
192
+ const gridClass = getResponsiveGridClass(columns);
193
+ return /* @__PURE__ */ jsx("div", { className: `grid ${gridClass} gap-${gapValues[gap]}`, children: displayItems.map((item) => {
194
+ const imageUrl = getImageUrl(item);
195
+ const aspectRatioClass = getAspectRatioClass(imageAspectRatio);
196
+ return /* @__PURE__ */ jsxs(
197
+ "div",
198
+ {
199
+ className: `relative rounded-${borderRadius} overflow-hidden bg-white shadow-sm transition-shadow hover:shadow-md`,
200
+ children: [
201
+ showBadge && item.discount && /* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2 z-10 rounded-md bg-red-500 px-2 py-1 text-xs font-bold text-white", children: getStringValue(item.discount) }),
202
+ showFavorite && /* @__PURE__ */ jsx("button", { className: "absolute top-2 left-2 z-10 rounded-full bg-white/80 p-2 backdrop-blur-sm transition-colors hover:bg-white", children: /* @__PURE__ */ jsx(
203
+ "svg",
204
+ {
205
+ className: "h-5 w-5 text-gray-600",
206
+ fill: "none",
207
+ stroke: "currentColor",
208
+ viewBox: "0 0 24 24",
209
+ children: /* @__PURE__ */ jsx(
210
+ "path",
211
+ {
212
+ strokeLinecap: "round",
213
+ strokeLinejoin: "round",
214
+ strokeWidth: 2,
215
+ d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
216
+ }
217
+ )
218
+ }
219
+ ) }),
220
+ imageUrl && /* @__PURE__ */ jsx("div", { className: `w-full ${aspectRatioClass} overflow-hidden`, children: /* @__PURE__ */ jsx(
221
+ "img",
222
+ {
223
+ src: imageUrl,
224
+ alt: item.title || "Product",
225
+ className: "h-full w-full object-cover"
226
+ }
227
+ ) }),
228
+ /* @__PURE__ */ jsxs("div", { className: `p-${padding}`, children: [
229
+ item.title && /* @__PURE__ */ jsx(
230
+ "h3",
231
+ {
232
+ className: `text-${itemTitleColor} text-${itemTitleSize === "md" ? "base" : itemTitleSize} mb-1 font-semibold`,
233
+ children: getTextContent(item.title)
234
+ }
235
+ ),
236
+ item.description && /* @__PURE__ */ jsx(
237
+ "p",
238
+ {
239
+ className: `text-${descriptionColor} text-${descriptionSize === "md" ? "base" : descriptionSize} mb-2`,
240
+ children: getTextContent(item.description)
241
+ }
242
+ ),
243
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
244
+ item.price && /* @__PURE__ */ jsx(
245
+ "span",
246
+ {
247
+ className: `text-${priceColor} text-${priceSize === "md" ? "base" : priceSize} font-bold`,
248
+ children: getStringValue(item.price)
249
+ }
250
+ ),
251
+ item.originalPrice && /* @__PURE__ */ jsx(
252
+ "span",
253
+ {
254
+ className: `text-${originalPriceColor} text-${descriptionSize === "md" ? "base" : descriptionSize} line-through`,
255
+ children: getStringValue(item.originalPrice)
256
+ }
257
+ )
258
+ ] }),
259
+ showMetaText && (item.qv || item.cv) && /* @__PURE__ */ jsxs(
260
+ "div",
261
+ {
262
+ className: `mt-2 flex gap-3 text-${metaTextColor} text-${metaTextSize === "md" ? "base" : metaTextSize}`,
263
+ children: [
264
+ item.qv && /* @__PURE__ */ jsxs("span", { children: [
265
+ "QV: ",
266
+ getStringValue(item.qv)
267
+ ] }),
268
+ item.cv && /* @__PURE__ */ jsxs("span", { children: [
269
+ "CV: ",
270
+ getStringValue(item.cv)
271
+ ] })
272
+ ]
273
+ }
274
+ )
275
+ ] })
276
+ ]
277
+ },
278
+ item.id
279
+ );
280
+ }) });
281
+ };
282
+ const renderOrderedList = () => {
283
+ const isHorizontal = scrollAxis === "horizontal";
284
+ const isVertical = scrollAxis === "vertical";
285
+ if (isHorizontal) {
286
+ return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
287
+ /* @__PURE__ */ jsx(
288
+ "div",
289
+ {
290
+ ref: scrollContainerRef,
291
+ className: `flex gap-${gapValues[gap]} scrollbar-hide overflow-x-auto scroll-smooth`,
292
+ children: displayItems.map((item, index) => {
293
+ const imageUrl = getImageUrl(item);
294
+ const aspectRatioClass = getAspectRatioClass(imageAspectRatio);
295
+ return /* @__PURE__ */ jsxs(
296
+ "div",
297
+ {
298
+ className: `relative w-[300px] flex-shrink-0`,
299
+ children: [
300
+ /* @__PURE__ */ jsx(
301
+ "div",
302
+ {
303
+ className: `absolute top-0 left-0 text-${numberColor} z-0 leading-none font-bold opacity-20`,
304
+ style: { fontSize: largeNumberSizes[numberSize] },
305
+ children: index + 1
306
+ }
307
+ ),
308
+ /* @__PURE__ */ jsxs(
309
+ "div",
310
+ {
311
+ className: `relative z-10 ml-20 rounded-${borderRadius} overflow-hidden bg-white shadow-sm transition-shadow hover:shadow-md`,
312
+ children: [
313
+ showBadge && item.discount && /* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2 z-10 rounded-md bg-red-500 px-2 py-1 text-xs font-bold text-white", children: getStringValue(item.discount) }),
314
+ showFavorite && /* @__PURE__ */ jsx("button", { className: "absolute top-2 left-2 z-10 rounded-full bg-white/80 p-2 backdrop-blur-sm transition-colors hover:bg-white", children: /* @__PURE__ */ jsx(
315
+ "svg",
316
+ {
317
+ className: "h-5 w-5 text-gray-600",
318
+ fill: "none",
319
+ stroke: "currentColor",
320
+ viewBox: "0 0 24 24",
321
+ children: /* @__PURE__ */ jsx(
322
+ "path",
323
+ {
324
+ strokeLinecap: "round",
325
+ strokeLinejoin: "round",
326
+ strokeWidth: 2,
327
+ d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
328
+ }
329
+ )
330
+ }
331
+ ) }),
332
+ imageUrl && /* @__PURE__ */ jsx(
333
+ "div",
334
+ {
335
+ className: `w-full ${aspectRatioClass} overflow-hidden`,
336
+ children: /* @__PURE__ */ jsx(
337
+ "img",
338
+ {
339
+ src: imageUrl,
340
+ alt: item.title || "Product",
341
+ className: "h-full w-full object-cover"
342
+ }
343
+ )
344
+ }
345
+ ),
346
+ /* @__PURE__ */ jsxs("div", { className: `p-${padding}`, children: [
347
+ item.title && /* @__PURE__ */ jsx(
348
+ "h3",
349
+ {
350
+ className: `text-${itemTitleColor} text-${itemTitleSize === "md" ? "base" : itemTitleSize} mb-1 font-semibold`,
351
+ children: getTextContent(item.title)
352
+ }
353
+ ),
354
+ item.description && /* @__PURE__ */ jsx(
355
+ "p",
356
+ {
357
+ className: `text-${descriptionColor} text-${descriptionSize === "md" ? "base" : descriptionSize} mb-2`,
358
+ children: getTextContent(item.description)
359
+ }
360
+ ),
361
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
362
+ item.price && /* @__PURE__ */ jsx(
363
+ "span",
364
+ {
365
+ className: `text-${priceColor} text-${priceSize === "md" ? "base" : priceSize} font-bold`,
366
+ children: getStringValue(item.price)
367
+ }
368
+ ),
369
+ item.originalPrice && /* @__PURE__ */ jsx(
370
+ "span",
371
+ {
372
+ className: `text-${originalPriceColor} text-${descriptionSize === "md" ? "base" : descriptionSize} line-through`,
373
+ children: getStringValue(item.originalPrice)
374
+ }
375
+ )
376
+ ] }),
377
+ showMetaText && (item.qv || item.cv) && /* @__PURE__ */ jsxs(
378
+ "div",
379
+ {
380
+ className: `mt-2 flex gap-3 text-${metaTextColor} text-${metaTextSize === "md" ? "base" : metaTextSize}`,
381
+ children: [
382
+ item.qv && /* @__PURE__ */ jsxs("span", { children: [
383
+ "QV: ",
384
+ getStringValue(item.qv)
385
+ ] }),
386
+ item.cv && /* @__PURE__ */ jsxs("span", { children: [
387
+ "CV: ",
388
+ getStringValue(item.cv)
389
+ ] })
390
+ ]
391
+ }
392
+ )
393
+ ] })
394
+ ]
395
+ }
396
+ )
397
+ ]
398
+ },
399
+ item.id
400
+ );
401
+ })
402
+ }
403
+ ),
404
+ /* @__PURE__ */ jsx(
405
+ "div",
406
+ {
407
+ className: `absolute inset-x-0 top-1/2 z-20 flex w-full -translate-y-1/2 items-center justify-between px-8`,
408
+ children: /* @__PURE__ */ jsx(
409
+ ScrollArrows,
410
+ {
411
+ onPrevious: () => scrollByAmount("prev"),
412
+ onNext: () => scrollByAmount("next")
413
+ }
414
+ )
415
+ }
416
+ )
417
+ ] });
418
+ }
419
+ if (isVertical) {
420
+ return /* @__PURE__ */ jsx("div", { className: `flex flex-col gap-${gapValues[gap]}`, children: displayItems.map((item, index) => {
421
+ const imageUrl = getImageUrl(item);
422
+ return /* @__PURE__ */ jsxs(
423
+ "div",
424
+ {
425
+ className: `relative flex gap-${gapValues[gap]} rounded-${borderRadius} overflow-hidden bg-white shadow-sm transition-shadow hover:shadow-md ${`p-${padding}`}`,
426
+ children: [
427
+ /* @__PURE__ */ jsx(
428
+ "div",
429
+ {
430
+ className: `flex-shrink-0 text-${numberColor} text-${numberSize === "md" ? "base" : numberSize} flex w-16 items-center justify-center font-bold`,
431
+ children: index + 1
432
+ }
433
+ ),
434
+ imageUrl && /* @__PURE__ */ jsx("div", { className: "h-24 w-24 flex-shrink-0 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx(
435
+ "img",
436
+ {
437
+ src: imageUrl,
438
+ alt: item.title || "Product",
439
+ className: "h-full w-full object-cover"
440
+ }
441
+ ) }),
442
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
443
+ item.title && /* @__PURE__ */ jsx(
444
+ "h3",
445
+ {
446
+ className: `text-${itemTitleColor} text-${itemTitleSize === "md" ? "base" : itemTitleSize} mb-1 font-semibold`,
447
+ children: getTextContent(item.title)
448
+ }
449
+ ),
450
+ item.description && /* @__PURE__ */ jsx(
451
+ "p",
452
+ {
453
+ className: `text-${descriptionColor} text-${descriptionSize === "md" ? "base" : descriptionSize} mb-2`,
454
+ children: getTextContent(item.description)
455
+ }
456
+ ),
457
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
458
+ item.price && /* @__PURE__ */ jsx(
459
+ "span",
460
+ {
461
+ className: `text-${priceColor} text-${priceSize === "md" ? "base" : priceSize} font-bold`,
462
+ children: getStringValue(item.price)
463
+ }
464
+ ),
465
+ item.originalPrice && /* @__PURE__ */ jsx(
466
+ "span",
467
+ {
468
+ className: `text-${originalPriceColor} text-${descriptionSize === "md" ? "base" : descriptionSize} line-through`,
469
+ children: getStringValue(item.originalPrice)
470
+ }
471
+ )
472
+ ] }),
473
+ showMetaText && (item.qv || item.cv) && /* @__PURE__ */ jsxs(
474
+ "div",
475
+ {
476
+ className: `mt-2 flex gap-3 text-${metaTextColor} text-${metaTextSize === "md" ? "base" : metaTextSize}`,
477
+ children: [
478
+ item.qv && /* @__PURE__ */ jsxs("span", { children: [
479
+ "QV: ",
480
+ getStringValue(item.qv)
481
+ ] }),
482
+ item.cv && /* @__PURE__ */ jsxs("span", { children: [
483
+ "CV: ",
484
+ getStringValue(item.cv)
485
+ ] })
486
+ ]
487
+ }
488
+ )
489
+ ] }),
490
+ showBadge && item.discount && /* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2 rounded-md bg-red-500 px-2 py-1 text-xs font-bold text-white", children: getStringValue(item.discount) }),
491
+ showFavorite && /* @__PURE__ */ jsx("button", { className: "absolute top-2 right-12 rounded-full bg-white/80 p-2 backdrop-blur-sm transition-colors hover:bg-white", children: /* @__PURE__ */ jsx(
492
+ "svg",
493
+ {
494
+ className: "h-5 w-5 text-gray-600",
495
+ fill: "none",
496
+ stroke: "currentColor",
497
+ viewBox: "0 0 24 24",
498
+ children: /* @__PURE__ */ jsx(
499
+ "path",
500
+ {
501
+ strokeLinecap: "round",
502
+ strokeLinejoin: "round",
503
+ strokeWidth: 2,
504
+ d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
505
+ }
506
+ )
507
+ }
508
+ ) })
509
+ ]
510
+ },
511
+ item.id
512
+ );
513
+ }) });
514
+ }
515
+ return null;
516
+ };
517
+ const hasFeaturedAsset = getFeaturedAssetUrl(featuredAsset);
518
+ const shouldShowFeaturedSection = showFeaturedSection && hasFeaturedAsset;
519
+ const backgroundColor = background.color || "background";
520
+ const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
521
+ return /* @__PURE__ */ jsxs(
522
+ "div",
523
+ {
524
+ className: `@container bg-${backgroundColor} ${className}`,
525
+ style: { backgroundImage },
526
+ ...props,
527
+ children: [
528
+ titleEnabled && title && /* @__PURE__ */ jsx(
529
+ "h2",
530
+ {
531
+ className: `text-${titleColor} text-${titleSize === "md" ? "base" : titleSize} mb-6 font-bold`,
532
+ children: title
533
+ }
534
+ ),
535
+ !hasItems ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center rounded-md border-2 border-dashed border-gray-300 bg-gray-50 py-12 text-center", children: /* @__PURE__ */ jsx("p", { className: "text-muted", children: "No items to display" }) }) : shouldShowFeaturedSection ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 @lg:flex-row @lg:gap-6", children: [
536
+ /* @__PURE__ */ jsx("div", { className: "w-full @lg:w-[45%]", children: renderFeaturedSection() }),
537
+ /* @__PURE__ */ jsx("div", { className: "w-full @lg:w-[55%]", children: listType === "unordered" ? renderUnorderedList() : renderOrderedList() })
538
+ ] }) : listType === "unordered" ? renderUnorderedList() : renderOrderedList()
539
+ ]
540
+ }
541
+ );
542
+ }
543
+ var listWidgetPropertySchema = {
544
+ widgetType: "ListWidget",
545
+ displayName: "List",
546
+ tabsConfig: [
547
+ { id: "styling", label: "Styling" },
548
+ { id: "data", label: "Data" }
549
+ ],
550
+ dataSourceTargetProps: ["items"],
551
+ fields: [
552
+ // Styling tab - Title group
553
+ {
554
+ key: "titleEnabled",
555
+ label: "Widget Title",
556
+ type: "boolean",
557
+ description: "Enable the title displayed above the list",
558
+ defaultValue: true,
559
+ tab: "styling",
560
+ group: "Title"
561
+ },
562
+ {
563
+ key: "title",
564
+ label: "Title",
565
+ type: "text",
566
+ description: "Header text for the list",
567
+ defaultValue: "List",
568
+ tab: "styling",
569
+ group: "Title",
570
+ requiresKeyToBeTrue: "titleEnabled"
571
+ },
572
+ getFontSizeField({
573
+ key: "titleSize",
574
+ label: "Title Font Size",
575
+ description: "Size of the list title",
576
+ defaultValue: "xl",
577
+ tab: "styling",
578
+ group: "Title",
579
+ requiresKeyToBeTrue: "titleEnabled"
580
+ }),
581
+ getColorField({
582
+ key: "titleColor",
583
+ label: "Title Color",
584
+ description: "Color for the list title",
585
+ defaultValue: "foreground",
586
+ tab: "styling",
587
+ group: "Title",
588
+ requiresKeyToBeTrue: "titleEnabled"
589
+ }),
590
+ // Styling tab - Design group
591
+ getPaddingField({
592
+ key: "padding",
593
+ label: "Padding",
594
+ description: "Padding inside the container",
595
+ defaultValue: 4,
596
+ tab: "styling",
597
+ group: "Design"
598
+ }),
599
+ getBorderRadiusField({
600
+ key: "borderRadius",
601
+ label: "Border Radius",
602
+ description: "Rounded corners for the container and images",
603
+ defaultValue: "md",
604
+ tab: "styling",
605
+ group: "Design"
606
+ }),
607
+ getGapField({
608
+ key: "gap",
609
+ label: "Gap",
610
+ description: "Spacing between items",
611
+ defaultValue: "md",
612
+ tab: "styling",
613
+ group: "Design"
614
+ }),
615
+ {
616
+ type: "background",
617
+ defaultValue: "background",
618
+ key: "background",
619
+ label: "Background",
620
+ description: "Background color or image for the widget",
621
+ tab: "styling",
622
+ group: "Design"
623
+ },
624
+ // Styling tab - List Configuration group
625
+ {
626
+ key: "listType",
627
+ label: "List Type",
628
+ type: "select",
629
+ description: "Type of list layout",
630
+ defaultValue: "unordered",
631
+ options: [
632
+ { label: "Unordered (Grid)", value: "unordered" },
633
+ { label: "Ordered (Numbered)", value: "ordered" }
634
+ ],
635
+ tab: "styling",
636
+ group: "List Configuration"
637
+ },
638
+ {
639
+ key: "maxItems",
640
+ label: "Max Items",
641
+ type: "number",
642
+ description: "Maximum number of items to display",
643
+ min: 1,
644
+ max: 100,
645
+ step: 1,
646
+ defaultValue: 12,
647
+ tab: "styling",
648
+ group: "List Configuration"
649
+ },
650
+ {
651
+ key: "imageAspectRatio",
652
+ label: "Image Aspect Ratio",
653
+ type: "buttonGroup",
654
+ description: "Aspect ratio for item images",
655
+ defaultValue: "square",
656
+ options: [
657
+ { label: "Square", value: "square" },
658
+ { label: "Landscape", value: "landscape" },
659
+ { label: "Portrait", value: "portrait" }
660
+ ],
661
+ tab: "styling",
662
+ group: "List Configuration"
663
+ },
664
+ {
665
+ key: "showBadge",
666
+ label: "Show Discount Badge",
667
+ type: "boolean",
668
+ description: "Display discount badge on images",
669
+ defaultValue: true,
670
+ tab: "styling",
671
+ group: "List Configuration"
672
+ },
673
+ {
674
+ key: "showFavorite",
675
+ label: "Show Favorite Icon",
676
+ type: "boolean",
677
+ description: "Display favorite/heart icon on images",
678
+ defaultValue: true,
679
+ tab: "styling",
680
+ group: "List Configuration"
681
+ },
682
+ {
683
+ key: "showMetaText",
684
+ label: "Show QV/CV Text",
685
+ type: "boolean",
686
+ description: "Display QV and CV values",
687
+ defaultValue: true,
688
+ tab: "styling",
689
+ group: "List Configuration"
690
+ },
691
+ // Styling tab - Unordered List Configuration
692
+ {
693
+ key: "columns",
694
+ label: "Grid Columns",
695
+ type: "number",
696
+ description: "Number of columns in the grid (unordered list only)",
697
+ min: 1,
698
+ max: 6,
699
+ step: 1,
700
+ defaultValue: 3,
701
+ tab: "styling",
702
+ group: "Unordered List Configuration",
703
+ requiresKeyValue: { key: "listType", value: "unordered" }
704
+ },
705
+ // Styling tab - Ordered List Configuration
706
+ {
707
+ key: "scrollAxis",
708
+ label: "Scroll Direction",
709
+ type: "select",
710
+ description: "Direction for ordered list scrolling",
711
+ defaultValue: "horizontal",
712
+ options: [
713
+ { label: "Horizontal", value: "horizontal" },
714
+ { label: "Vertical", value: "vertical" }
715
+ ],
716
+ tab: "styling",
717
+ group: "Ordered List Configuration",
718
+ requiresKeyValue: { key: "listType", value: "ordered" }
719
+ },
720
+ getColorField({
721
+ key: "numberColor",
722
+ label: "Number Color",
723
+ description: "Color for ordered list numbers",
724
+ defaultValue: "primary",
725
+ tab: "styling",
726
+ group: "Ordered List Configuration",
727
+ requiresKeyValue: { key: "listType", value: "ordered" }
728
+ }),
729
+ getFontSizeField({
730
+ key: "numberSize",
731
+ label: "Number Font Size",
732
+ description: "Size of ordered list numbers",
733
+ defaultValue: "2xl",
734
+ tab: "styling",
735
+ group: "Ordered List Configuration",
736
+ requiresKeyValue: { key: "listType", value: "ordered" }
737
+ }),
738
+ // Styling tab - Item Styling group
739
+ getColorField({
740
+ key: "itemTitleColor",
741
+ label: "Item Title Color",
742
+ description: "Color for item titles",
743
+ defaultValue: "foreground",
744
+ tab: "styling",
745
+ group: "Item Styling"
746
+ }),
747
+ getFontSizeField({
748
+ key: "itemTitleSize",
749
+ label: "Item Title Font Size",
750
+ description: "Size of item titles",
751
+ defaultValue: "sm",
752
+ tab: "styling",
753
+ group: "Item Styling"
754
+ }),
755
+ {
756
+ key: "separator2",
757
+ type: "separator",
758
+ label: "Separator",
759
+ tab: "styling",
760
+ group: "Item Styling"
761
+ },
762
+ getColorField({
763
+ key: "priceColor",
764
+ label: "Price Color",
765
+ description: "Color for prices",
766
+ defaultValue: "foreground",
767
+ tab: "styling",
768
+ group: "Item Styling"
769
+ }),
770
+ getFontSizeField({
771
+ key: "priceSize",
772
+ label: "Price Font Size",
773
+ description: "Size of prices",
774
+ defaultValue: "md",
775
+ tab: "styling",
776
+ group: "Item Styling"
777
+ }),
778
+ getColorField({
779
+ key: "originalPriceColor",
780
+ label: "Original Price Color",
781
+ description: "Color for crossed-out original prices",
782
+ defaultValue: "foreground",
783
+ tab: "styling",
784
+ group: "Item Styling"
785
+ }),
786
+ {
787
+ key: "separator3",
788
+ type: "separator",
789
+ label: "Separator",
790
+ tab: "styling",
791
+ group: "Item Styling"
792
+ },
793
+ getColorField({
794
+ key: "metaTextColor",
795
+ label: "Meta Text Color",
796
+ description: "Color for QV/CV text",
797
+ defaultValue: "foreground",
798
+ tab: "styling",
799
+ group: "Item Styling"
800
+ }),
801
+ getFontSizeField({
802
+ key: "metaTextSize",
803
+ label: "Meta Text Font Size",
804
+ description: "Size of QV/CV text",
805
+ defaultValue: "xs",
806
+ tab: "styling",
807
+ group: "Item Styling"
808
+ }),
809
+ // Styling tab - Featured Section group
810
+ {
811
+ key: "showFeaturedSection",
812
+ label: "Show Featured Section",
813
+ type: "boolean",
814
+ description: "Display a featured content section",
815
+ defaultValue: false,
816
+ tab: "styling",
817
+ group: "Featured Section"
818
+ },
819
+ {
820
+ key: "featuredAsset",
821
+ label: "Featured Asset",
822
+ type: "resource",
823
+ description: "Select a single image or video resource for the featured section",
824
+ tab: "styling",
825
+ group: "Featured Section",
826
+ allowedTypes: ["Medium"],
827
+ requiresKeyToBeTrue: "showFeaturedSection"
828
+ },
829
+ {
830
+ key: "featuredTitle",
831
+ label: "Featured Title",
832
+ type: "text",
833
+ description: "Title for featured section",
834
+ tab: "styling",
835
+ group: "Featured Section",
836
+ requiresKeyToBeTrue: "showFeaturedSection"
837
+ },
838
+ {
839
+ key: "featuredSubtitle",
840
+ label: "Featured Subtitle",
841
+ type: "text",
842
+ description: "Subtitle for featured section",
843
+ tab: "styling",
844
+ group: "Featured Section",
845
+ requiresKeyToBeTrue: "showFeaturedSection"
846
+ },
847
+ {
848
+ key: "featuredButtonText",
849
+ label: "Featured Button Text",
850
+ type: "text",
851
+ description: "Text for featured section button",
852
+ tab: "styling",
853
+ group: "Featured Section",
854
+ requiresKeyToBeTrue: "showFeaturedSection"
855
+ },
856
+ {
857
+ key: "featuredButtonUrl",
858
+ label: "Featured Button URL",
859
+ type: "text",
860
+ description: "URL for featured section button",
861
+ tab: "styling",
862
+ group: "Featured Section",
863
+ requiresKeyToBeTrue: "showFeaturedSection"
864
+ },
865
+ getColorField({
866
+ key: "featuredSubtitleColor",
867
+ label: "Featured Subtitle Color",
868
+ description: "Color for featured subtitle",
869
+ defaultValue: "background",
870
+ tab: "styling",
871
+ group: "Featured Section",
872
+ requiresKeyToBeTrue: "showFeaturedSection"
873
+ }),
874
+ getFontSizeField({
875
+ key: "featuredSubtitleSize",
876
+ label: "Featured Subtitle Font Size",
877
+ description: "Size of featured subtitle",
878
+ defaultValue: "md",
879
+ tab: "styling",
880
+ group: "Featured Section",
881
+ requiresKeyToBeTrue: "showFeaturedSection"
882
+ }),
883
+ // Data tab - Data Configuration
884
+ {
885
+ key: "dataSource",
886
+ label: "Data Source",
887
+ type: "dataSource",
888
+ description: "",
889
+ tab: "data",
890
+ group: "Data Configuration"
891
+ }
892
+ ],
893
+ itemConfigSchema: {
894
+ description: "Configure settings for this list item",
895
+ fields: [
896
+ {
897
+ key: "title",
898
+ label: "Custom Title",
899
+ type: "text",
900
+ description: "Override the item's title"
901
+ },
902
+ {
903
+ key: "description",
904
+ label: "Custom Description",
905
+ type: "textarea",
906
+ description: "Override the item's description",
907
+ rows: 3
908
+ },
909
+ {
910
+ key: "price",
911
+ label: "Price",
912
+ type: "text",
913
+ description: "Current price"
914
+ },
915
+ {
916
+ key: "originalPrice",
917
+ label: "Original Price",
918
+ type: "text",
919
+ description: "Original price (will be crossed out)"
920
+ },
921
+ {
922
+ key: "discount",
923
+ label: "Discount Badge",
924
+ type: "text",
925
+ description: "Discount text (e.g., '40% Off')"
926
+ },
927
+ {
928
+ key: "qv",
929
+ label: "QV Value",
930
+ type: "text",
931
+ description: "Qualifying Volume value"
932
+ },
933
+ {
934
+ key: "cv",
935
+ label: "CV Value",
936
+ type: "text",
937
+ description: "Commission Volume value"
938
+ },
939
+ {
940
+ key: "image",
941
+ label: "Image URL",
942
+ type: "text",
943
+ description: "Custom image URL for this item"
944
+ }
945
+ ]
946
+ }
947
+ };
948
+
949
+ export { ListWidget, listWidgetPropertySchema };
950
+ //# sourceMappingURL=chunk-YY5WLV63.js.map
951
+ //# sourceMappingURL=chunk-YY5WLV63.js.map