@fluid-app/rep-widgets 0.1.0 → 0.1.2

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 (184) hide show
  1. package/dist/CalendarWidget-3QAGQHSO.cjs +18 -0
  2. package/dist/{CalendarWidget-AQ7PVNSI.cjs.map → CalendarWidget-3QAGQHSO.cjs.map} +1 -1
  3. package/dist/{CalendarWidget-E54LNKCG.js → CalendarWidget-ZSAZG2NA.js} +3 -3
  4. package/dist/{CalendarWidget-E54LNKCG.js.map → CalendarWidget-ZSAZG2NA.js.map} +1 -1
  5. package/dist/CarouselWidget-F2PDTYUR.js +8 -0
  6. package/dist/{CarouselWidget-IPPFSXDZ.js.map → CarouselWidget-F2PDTYUR.js.map} +1 -1
  7. package/dist/CarouselWidget-IAWPKZRZ.cjs +21 -0
  8. package/dist/{CarouselWidget-ZG6LJJXG.cjs.map → CarouselWidget-IAWPKZRZ.cjs.map} +1 -1
  9. package/dist/CatchUpWidget-3BMRWSA7.cjs +18 -0
  10. package/dist/{CatchUpWidget-CSSQMPPA.cjs.map → CatchUpWidget-3BMRWSA7.cjs.map} +1 -1
  11. package/dist/{CatchUpWidget-HYJRKFN3.js → CatchUpWidget-YKKUJT4H.js} +3 -3
  12. package/dist/{CatchUpWidget-HYJRKFN3.js.map → CatchUpWidget-YKKUJT4H.js.map} +1 -1
  13. package/dist/EmbedWidget-B3JEXJWZ.js +3 -0
  14. package/dist/{EmbedWidget-O2XFGDJS.js.map → EmbedWidget-B3JEXJWZ.js.map} +1 -1
  15. package/dist/EmbedWidget-CWK3I5G5.cjs +16 -0
  16. package/dist/{EmbedWidget-HTR2MJ25.cjs.map → EmbedWidget-CWK3I5G5.cjs.map} +1 -1
  17. package/dist/ImageWidget-A5DBWFUT.js +4 -0
  18. package/dist/{ImageWidget-RF6XKPPV.js.map → ImageWidget-A5DBWFUT.js.map} +1 -1
  19. package/dist/ImageWidget-RSBFNR5J.cjs +17 -0
  20. package/dist/{ImageWidget-L2MIYWTE.cjs.map → ImageWidget-RSBFNR5J.cjs.map} +1 -1
  21. package/dist/ListWidget-CAPL5VLR.cjs +19 -0
  22. package/dist/{ListWidget-XY5C3P3C.cjs.map → ListWidget-CAPL5VLR.cjs.map} +1 -1
  23. package/dist/ListWidget-N7H3L2N5.js +6 -0
  24. package/dist/{ListWidget-ZFRV6DKI.js.map → ListWidget-N7H3L2N5.js.map} +1 -1
  25. package/dist/MySiteWidget-JP2NWOOI.cjs +18 -0
  26. package/dist/{MySiteWidget-CBDKQT35.cjs.map → MySiteWidget-JP2NWOOI.cjs.map} +1 -1
  27. package/dist/{MySiteWidget-75NJUIWV.js → MySiteWidget-RPIPPRRN.js} +3 -3
  28. package/dist/{MySiteWidget-75NJUIWV.js.map → MySiteWidget-RPIPPRRN.js.map} +1 -1
  29. package/dist/NestedWidget-NJSEZS26.cjs +19 -0
  30. package/dist/{NestedWidget-VO3YYOOH.cjs.map → NestedWidget-NJSEZS26.cjs.map} +1 -1
  31. package/dist/NestedWidget-WGQMOT6E.js +6 -0
  32. package/dist/{NestedWidget-N4I7LOVX.js.map → NestedWidget-WGQMOT6E.js.map} +1 -1
  33. package/dist/QuickShareWidget-47OABEXI.cjs +17 -0
  34. package/dist/{QuickShareWidget-VHDB5SYT.cjs.map → QuickShareWidget-47OABEXI.cjs.map} +1 -1
  35. package/dist/QuickShareWidget-S2LJDLLJ.js +4 -0
  36. package/dist/{QuickShareWidget-3VGSFY4J.js.map → QuickShareWidget-S2LJDLLJ.js.map} +1 -1
  37. package/dist/RecentActivityWidget-CFYQ32LN.cjs +18 -0
  38. package/dist/{RecentActivityWidget-X5UABJHL.cjs.map → RecentActivityWidget-CFYQ32LN.cjs.map} +1 -1
  39. package/dist/RecentActivityWidget-FI72KYRL.js +5 -0
  40. package/dist/{RecentActivityWidget-3KAR64SB.js.map → RecentActivityWidget-FI72KYRL.js.map} +1 -1
  41. package/dist/SpacerWidget-OUFZRSIN.cjs +16 -0
  42. package/dist/{SpacerWidget-K7CXVECO.cjs.map → SpacerWidget-OUFZRSIN.cjs.map} +1 -1
  43. package/dist/SpacerWidget-ZEHGXKOH.js +3 -0
  44. package/dist/{SpacerWidget-ODKNZAND.js.map → SpacerWidget-ZEHGXKOH.js.map} +1 -1
  45. package/dist/{TableWidget-W6LL5FLE.js → TableWidget-2NNEN6GI.js} +4 -4
  46. package/dist/{TableWidget-W6LL5FLE.js.map → TableWidget-2NNEN6GI.js.map} +1 -1
  47. package/dist/TableWidget-PXS656YV.cjs +20 -0
  48. package/dist/{TableWidget-MDEBHVIA.cjs.map → TableWidget-PXS656YV.cjs.map} +1 -1
  49. package/dist/ToDoWidget-XQPQBDZE.js +5 -0
  50. package/dist/{ToDoWidget-LCAYWRVH.js.map → ToDoWidget-XQPQBDZE.js.map} +1 -1
  51. package/dist/ToDoWidget-Y7W6TFL7.cjs +18 -0
  52. package/dist/{ToDoWidget-DH544SJH.cjs.map → ToDoWidget-Y7W6TFL7.cjs.map} +1 -1
  53. package/dist/VideoWidget-OMF2XWAI.js +4 -0
  54. package/dist/{VideoWidget-VHAZTNLI.js.map → VideoWidget-OMF2XWAI.js.map} +1 -1
  55. package/dist/VideoWidget-R6WKIZFN.cjs +17 -0
  56. package/dist/{VideoWidget-YLRKZ27S.cjs.map → VideoWidget-R6WKIZFN.cjs.map} +1 -1
  57. package/dist/{chunk-YJZGIS4L.cjs → chunk-2TCCLGVT.cjs} +10 -10
  58. package/dist/chunk-2TCCLGVT.cjs.map +1 -0
  59. package/dist/{chunk-GA52TZC4.js → chunk-3NB2PJR5.js} +5 -4
  60. package/dist/chunk-3NB2PJR5.js.map +1 -0
  61. package/dist/{chunk-KE27RJ3X.cjs → chunk-4JLNVCLR.cjs} +19 -19
  62. package/dist/{chunk-KE27RJ3X.cjs.map → chunk-4JLNVCLR.cjs.map} +1 -1
  63. package/dist/{chunk-NGYR4RQF.js → chunk-5SAU52ED.js} +6 -6
  64. package/dist/chunk-5SAU52ED.js.map +1 -0
  65. package/dist/{chunk-NUG3DWF7.js → chunk-6U2FEES5.js} +3 -3
  66. package/dist/{chunk-NUG3DWF7.js.map → chunk-6U2FEES5.js.map} +1 -1
  67. package/dist/{chunk-4XJCU4HY.js → chunk-AJ2ZDCQU.js} +19 -10
  68. package/dist/chunk-AJ2ZDCQU.js.map +1 -0
  69. package/dist/{chunk-7XWMJDFE.js → chunk-AZTVUUKX.js} +4 -4
  70. package/dist/chunk-AZTVUUKX.js.map +1 -0
  71. package/dist/{chunk-HQVTEFSO.js → chunk-DXBA2NME.js} +4 -4
  72. package/dist/{chunk-HQVTEFSO.js.map → chunk-DXBA2NME.js.map} +1 -1
  73. package/dist/{chunk-NXAZEYLC.cjs → chunk-ER6NFOID.cjs} +5 -4
  74. package/dist/chunk-ER6NFOID.cjs.map +1 -0
  75. package/dist/{chunk-7JIRJTGY.js → chunk-FKDPFJHH.js} +6 -5
  76. package/dist/chunk-FKDPFJHH.js.map +1 -0
  77. package/dist/{chunk-2KQFMF6L.js → chunk-GAYZNBS4.js} +8 -11
  78. package/dist/chunk-GAYZNBS4.js.map +1 -0
  79. package/dist/{chunk-3RV7AYQZ.js → chunk-HLXL56YT.js} +3 -3
  80. package/dist/{chunk-3RV7AYQZ.js.map → chunk-HLXL56YT.js.map} +1 -1
  81. package/dist/{chunk-JRBJXVXL.cjs → chunk-IC66PSKF.cjs} +19 -10
  82. package/dist/chunk-IC66PSKF.cjs.map +1 -0
  83. package/dist/{chunk-F3SFIX7U.cjs → chunk-IJHUIM34.cjs} +3 -3
  84. package/dist/{chunk-F3SFIX7U.cjs.map → chunk-IJHUIM34.cjs.map} +1 -1
  85. package/dist/{chunk-SBHL3GFW.js → chunk-IM3VCKTO.js} +11 -4
  86. package/dist/chunk-IM3VCKTO.js.map +1 -0
  87. package/dist/{chunk-NCQQI2T2.cjs → chunk-K4T2XGCW.cjs} +43 -34
  88. package/dist/chunk-K4T2XGCW.cjs.map +1 -0
  89. package/dist/{chunk-IU657MP5.js → chunk-KVGWMJZB.js} +7 -6
  90. package/dist/chunk-KVGWMJZB.js.map +1 -0
  91. package/dist/{chunk-VBJ5FT4C.cjs → chunk-LFYELLIM.cjs} +7 -6
  92. package/dist/chunk-LFYELLIM.cjs.map +1 -0
  93. package/dist/{chunk-MKUJOEAC.cjs → chunk-LOXFR6XC.cjs} +6 -5
  94. package/dist/chunk-LOXFR6XC.cjs.map +1 -0
  95. package/dist/{chunk-YCYKV5KF.cjs → chunk-M3DV7TXA.cjs} +10 -3
  96. package/dist/chunk-M3DV7TXA.cjs.map +1 -0
  97. package/dist/{chunk-VZFL5BZM.js → chunk-OFRCK7WR.js} +20 -10
  98. package/dist/chunk-OFRCK7WR.js.map +1 -0
  99. package/dist/{chunk-HBRGW3CJ.js → chunk-PXWG3SDJ.js} +43 -34
  100. package/dist/chunk-PXWG3SDJ.js.map +1 -0
  101. package/dist/{chunk-MNRHGJDQ.cjs → chunk-QSMGUAYP.cjs} +20 -10
  102. package/dist/chunk-QSMGUAYP.cjs.map +1 -0
  103. package/dist/{chunk-XALQ3ANE.cjs → chunk-QV3OAAEQ.cjs} +6 -5
  104. package/dist/chunk-QV3OAAEQ.cjs.map +1 -0
  105. package/dist/{chunk-YY5WLV63.js → chunk-REH6UJCF.js} +17 -17
  106. package/dist/{chunk-YY5WLV63.js.map → chunk-REH6UJCF.js.map} +1 -1
  107. package/dist/{chunk-ZSUGXJWD.js → chunk-SB2EVEDN.js} +3 -3
  108. package/dist/{chunk-ZSUGXJWD.js.map → chunk-SB2EVEDN.js.map} +1 -1
  109. package/dist/{chunk-M4J3OZJF.cjs → chunk-SDTP4TVD.cjs} +4 -4
  110. package/dist/{chunk-M4J3OZJF.cjs.map → chunk-SDTP4TVD.cjs.map} +1 -1
  111. package/dist/{chunk-F63VY23B.js → chunk-T6BC5TUS.js} +6 -5
  112. package/dist/chunk-T6BC5TUS.js.map +1 -0
  113. package/dist/{chunk-TFJQ4525.cjs → chunk-W2U27MK2.cjs} +8 -11
  114. package/dist/chunk-W2U27MK2.cjs.map +1 -0
  115. package/dist/{chunk-W7VPL5I4.js → chunk-WGQS7RB4.js} +9 -13
  116. package/dist/chunk-WGQS7RB4.js.map +1 -0
  117. package/dist/{chunk-E4MY6TUE.cjs → chunk-Y6OP3XEQ.cjs} +9 -13
  118. package/dist/chunk-Y6OP3XEQ.cjs.map +1 -0
  119. package/dist/{chunk-NNJDJNSY.cjs → chunk-YBTY4OMP.cjs} +4 -4
  120. package/dist/{chunk-NNJDJNSY.cjs.map → chunk-YBTY4OMP.cjs.map} +1 -1
  121. package/dist/{chunk-C7A3OMIF.cjs → chunk-Z4P5QJ3N.cjs} +5 -5
  122. package/dist/chunk-Z4P5QJ3N.cjs.map +1 -0
  123. package/dist/{chunk-DKGP3DTX.cjs → chunk-ZV3W3LUO.cjs} +10 -10
  124. package/dist/{chunk-DKGP3DTX.cjs.map → chunk-ZV3W3LUO.cjs.map} +1 -1
  125. package/dist/core/index.cjs +4 -4
  126. package/dist/core/index.js +1 -1
  127. package/dist/ui/index.cjs +5 -5
  128. package/dist/ui/index.d.cts +1 -1
  129. package/dist/ui/index.d.ts +1 -1
  130. package/dist/ui/index.js +2 -2
  131. package/dist/widgets/index.cjs +59 -59
  132. package/dist/widgets/index.d.cts +5 -1
  133. package/dist/widgets/index.d.ts +5 -1
  134. package/dist/widgets/index.js +31 -31
  135. package/package.json +11 -6
  136. package/tailwind.config.ts +67 -0
  137. package/dist/CalendarWidget-AQ7PVNSI.cjs +0 -18
  138. package/dist/CarouselWidget-IPPFSXDZ.js +0 -8
  139. package/dist/CarouselWidget-ZG6LJJXG.cjs +0 -21
  140. package/dist/CatchUpWidget-CSSQMPPA.cjs +0 -18
  141. package/dist/EmbedWidget-HTR2MJ25.cjs +0 -16
  142. package/dist/EmbedWidget-O2XFGDJS.js +0 -3
  143. package/dist/ImageWidget-L2MIYWTE.cjs +0 -17
  144. package/dist/ImageWidget-RF6XKPPV.js +0 -4
  145. package/dist/ListWidget-XY5C3P3C.cjs +0 -19
  146. package/dist/ListWidget-ZFRV6DKI.js +0 -6
  147. package/dist/MySiteWidget-CBDKQT35.cjs +0 -18
  148. package/dist/NestedWidget-N4I7LOVX.js +0 -6
  149. package/dist/NestedWidget-VO3YYOOH.cjs +0 -19
  150. package/dist/QuickShareWidget-3VGSFY4J.js +0 -4
  151. package/dist/QuickShareWidget-VHDB5SYT.cjs +0 -17
  152. package/dist/RecentActivityWidget-3KAR64SB.js +0 -5
  153. package/dist/RecentActivityWidget-X5UABJHL.cjs +0 -18
  154. package/dist/SpacerWidget-K7CXVECO.cjs +0 -16
  155. package/dist/SpacerWidget-ODKNZAND.js +0 -3
  156. package/dist/TableWidget-MDEBHVIA.cjs +0 -20
  157. package/dist/ToDoWidget-DH544SJH.cjs +0 -18
  158. package/dist/ToDoWidget-LCAYWRVH.js +0 -5
  159. package/dist/VideoWidget-VHAZTNLI.js +0 -4
  160. package/dist/VideoWidget-YLRKZ27S.cjs +0 -17
  161. package/dist/chunk-2KQFMF6L.js.map +0 -1
  162. package/dist/chunk-4XJCU4HY.js.map +0 -1
  163. package/dist/chunk-7JIRJTGY.js.map +0 -1
  164. package/dist/chunk-7XWMJDFE.js.map +0 -1
  165. package/dist/chunk-C7A3OMIF.cjs.map +0 -1
  166. package/dist/chunk-E4MY6TUE.cjs.map +0 -1
  167. package/dist/chunk-F63VY23B.js.map +0 -1
  168. package/dist/chunk-GA52TZC4.js.map +0 -1
  169. package/dist/chunk-HBRGW3CJ.js.map +0 -1
  170. package/dist/chunk-IU657MP5.js.map +0 -1
  171. package/dist/chunk-JRBJXVXL.cjs.map +0 -1
  172. package/dist/chunk-MKUJOEAC.cjs.map +0 -1
  173. package/dist/chunk-MNRHGJDQ.cjs.map +0 -1
  174. package/dist/chunk-NCQQI2T2.cjs.map +0 -1
  175. package/dist/chunk-NGYR4RQF.js.map +0 -1
  176. package/dist/chunk-NXAZEYLC.cjs.map +0 -1
  177. package/dist/chunk-SBHL3GFW.js.map +0 -1
  178. package/dist/chunk-TFJQ4525.cjs.map +0 -1
  179. package/dist/chunk-VBJ5FT4C.cjs.map +0 -1
  180. package/dist/chunk-VZFL5BZM.js.map +0 -1
  181. package/dist/chunk-W7VPL5I4.js.map +0 -1
  182. package/dist/chunk-XALQ3ANE.cjs.map +0 -1
  183. package/dist/chunk-YCYKV5KF.cjs.map +0 -1
  184. package/dist/chunk-YJZGIS4L.cjs.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { getFontSizeField, getColorField, getPaddingField, getBorderRadiusField } from './chunk-ZS7C474P.js';
2
2
  import { QRCodeSVG } from 'qrcode.react';
3
- import { ImageIcon, Copy, ShoppingCart } from 'lucide-react';
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
+ import { faImage, faCopy, faCartShopping } from '@fortawesome/pro-regular-svg-icons';
4
5
  import { jsxs, jsx } from 'react/jsx-runtime';
5
6
 
6
7
  function QuickShareWidget({
@@ -67,7 +68,7 @@ function QuickShareWidget({
67
68
  "div",
68
69
  {
69
70
  className: `absolute inset-0 flex items-center justify-center bg-muted`,
70
- children: /* @__PURE__ */ jsx(ImageIcon, { className: "h-16 w-16 opacity-20" })
71
+ children: /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faImage, className: "h-16 w-16 opacity-20" })
71
72
  }
72
73
  ),
73
74
  /* @__PURE__ */ jsxs("div", { className: `relative flex min-h-[400px] flex-col p-${padding}`, children: [
@@ -99,7 +100,7 @@ function QuickShareWidget({
99
100
  onClick: handleCopyToClipboard,
100
101
  className: `ml-2 shrink-0 rounded p-1 transition-colors hover:bg-${accentColor}/20`,
101
102
  "aria-label": "Copy link",
102
- children: /* @__PURE__ */ jsx(Copy, { className: "h-4 w-4" })
103
+ children: /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faCopy, className: "h-4 w-4" })
103
104
  }
104
105
  )
105
106
  ] })
@@ -111,7 +112,7 @@ function QuickShareWidget({
111
112
  type: "button",
112
113
  className: `flex w-full items-center justify-center gap-2 rounded-lg bg-${accentColor} p-3 font-medium text-${accentColor}-foreground transition-all hover:bg-${accentColor}-500`,
113
114
  children: [
114
- /* @__PURE__ */ jsx(ShoppingCart, { className: "h-4 w-4" }),
115
+ /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faCartShopping, className: "h-4 w-4" }),
115
116
  /* @__PURE__ */ jsx("span", { children: "Buy" })
116
117
  ]
117
118
  }
@@ -266,5 +267,5 @@ var quickShareWidgetPropertySchema = {
266
267
  };
267
268
 
268
269
  export { QuickShareWidget, quickShareWidgetPropertySchema };
269
- //# sourceMappingURL=chunk-IU657MP5.js.map
270
- //# sourceMappingURL=chunk-IU657MP5.js.map
270
+ //# sourceMappingURL=chunk-KVGWMJZB.js.map
271
+ //# sourceMappingURL=chunk-KVGWMJZB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/widgets/QuickShareWidget.tsx"],"names":[],"mappings":";;;;;;AAgDO,SAAS,gBAAA,CAAiB;AAAA;AAAA,EAE/B,iBAAA;AAAA;AAAA,EAGA,YAAA,GAAe,IAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ,aAAA,GAAgB,KAAA;AAAA,EAChB,UAAA,GAAa,YAAA;AAAA,EAEb,SAAA,GAAY,YAAA;AAAA,EACZ,WAAA,GAAc,SAAA;AAAA,EACd,OAAA,GAAU,CAAA;AAAA,EACV,YAAA,GAAe,IAAA;AAAA;AAAA,EAGf,cAAA,GAAiB,IAAA;AAAA,EACjB,WAAA,GAAc,OAAA;AAAA,EACd,gBAAA,GAAmB,EAAA;AAAA;AAAA,EAGnB,aAAA,GAAgB,KAAA;AAAA,EAEhB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0B;AAExB,EAAA,MAAM,kBAAA,GACJ,iBAAA,EAAmB,SAAA,IAAa,iBAAA,EAAmB,QAAA;AAGrD,EAAA,MAAM,SAAA,GAAY,mBAAmB,UAAA,IAAc,EAAA;AACnD,EAAA,MAAM,aAAa,SAAA,IAAa,oCAAA;AAGhC,EAAA,MAAM,YAAA,GACJ,SAAA,IAAa,iBAAA,EAAmB,KAAA,IAAS,+BAAA;AAG3C,EAAA,MAAM,SAAA,GACJ,iBAAA,EAAmB,IAAA,KAAS,SAAA,IAC5B,mBAAmB,aAAA,KAAkB,SAAA;AACvC,EAAA,MAAM,sBAAsB,aAAA,IAAiB,SAAA;AAG7C,EAAA,MAAM,wBAAwB,YAAY;AACxC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,SAAS,CAAA;AAAA,MAC/C,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AAAA,MACrD;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,CAAA,iCAAA,EAAoC,YAAY,kBAAkB,SAAS,CAAA,CAAA,EAAI,aAAa,EAAE,CAAA,CAAA;AAAA,MACxG,GAAG,KAAA;AAAA,MAGH,QAAA,EAAA;AAAA,QAAA,kBAAA,mBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,kBAAA;AAAA,cACL,GAAA,EAAI,EAAA;AAAA,cACJ,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UACC,cAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,iBAAA,EACT,WAAA,KAAgB,UAAA,GACZ,+CACA,UACN,CAAA,CAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACL,OAAA,EAAA,CACG,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,CAAE,QAAQ,GAAA,EAAK,EAAE,CAAC,CAAA,IAAK,EAAA,IACtD;AAAA;AACJ;AAAA;AACF,SAAA,EAEJ,CAAA,mBAEA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,0DAAA,CAAA;AAAA,YAEX,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAM,OAAA,EAAS,WAAU,sBAAA,EAAuB;AAAA;AAAA,SACnE;AAAA,wBAIF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,uCAAA,EAA0C,OAAO,CAAA,CAAA,EAE9D,QAAA,EAAA;AAAA,UAAA,YAAA,IAAgB,YAAA,oBACf,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,kBAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,iBAAA,EAAoB,aAAa,CAAA,oBAAA,EAAuB,UAAU,CAAA,eAAA,CAAA;AAAA,cAE5E,QAAA,EAAA;AAAA;AAAA,WACH,EACF,CAAA;AAAA,0BAIF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EAEb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,kBAAA,GAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,SAAA,IAAa,qBAAA;AAAA,kBACpB,IAAA,EAAM,GAAA;AAAA,kBACN,KAAA,EAAM;AAAA;AAAA,eACR,EACF,CAAA;AAAA,8BAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sDAAA,EAAuD,QAAA,EAAA,oBAAA,EAEpE,CAAA;AAAA,gCACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sHAAA,EACb,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,kCACvC,GAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,qBAAA;AAAA,sBACT,SAAA,EAAW,wDAAwD,WAAW,CAAA,GAAA,CAAA;AAAA,sBAC9E,YAAA,EAAW,WAAA;AAAA,sBAEX,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAM,MAAA,EAAQ,WAAU,SAAA,EAAU;AAAA;AAAA;AACrD,iBAAA,EACF;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,YAIC,mBAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,kBAAA,IAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,WAAW,CAAA,4DAAA,EAA+D,WAAW,CAAA,sBAAA,EAAyB,WAAW,uCAAuC,WAAW,CAAA,IAAA,CAAA;AAAA,gBAE3K,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAM,cAAA,EAAgB,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,kCAC3D,GAAA,CAAC,UAAK,QAAA,EAAA,KAAA,EAAG;AAAA;AAAA;AAAA,aACX,EACF;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,IAAM,8BAAA,GAAuD;AAAA,EAClE,UAAA,EAAY,kBAAA;AAAA,EACZ,WAAA,EAAa,oBAAA;AAAA,EACb,YAAY,CAAC,EAAE,IAAI,SAAA,EAAW,KAAA,EAAO,WAAW,CAAA;AAAA,EAChD,MAAA,EAAQ;AAAA;AAAA,IAEN;AAAA,MACE,GAAA,EAAK,mBAAA;AAAA,MACL,KAAA,EAAO,mBAAA;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,WAAA,EAAa,iDAAA;AAAA,MACb,cAAc,CAAC,SAAA,EAAW,MAAA,EAAQ,gBAAA,EAAkB,UAAU,SAAS,CAAA;AAAA,MACvE,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAGA;AAAA,MACE,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,YAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,uCAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAa,yDAAA;AAAA,MACb,YAAA,EAAc,EAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,WAAA,EAAa,8BAAA;AAAA,MACb,YAAA,EAAc,KAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA,IACD,aAAA,CAAc;AAAA,MACZ,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,WAAA,EAAa,0BAAA;AAAA,MACb,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcD,aAAA,CAAc;AAAA,MACZ,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,YAAA;AAAA,MACP,WAAA,EAAa,mCAAA;AAAA,MACb,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,aAAA,CAAc;AAAA,MACZ,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,0CAAA;AAAA,MACb,YAAA,EAAc,SAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD;AAAA,MACE,GAAA,EAAK,gBAAA;AAAA,MACL,KAAA,EAAO,gBAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,6CAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,cAAA;AAAA,MACP,IAAA,EAAM,aAAA;AAAA,MACN,WAAA,EAAa,0CAAA;AAAA,MACb,YAAA,EAAc,OAAA;AAAA,MACd,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,QACjC,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA;AAAW,OACzC;AAAA,MACA,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA;AAAA,MACE,GAAA,EAAK,kBAAA;AAAA,MACL,KAAA,EAAO,mBAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,2CAAA;AAAA,MACb,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,YAAA,EAAc,EAAA;AAAA,MACd,IAAA,EAAM,GAAA;AAAA,MACN,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA,eAAA,CAAgB;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,mCAAA;AAAA,MACb,YAAA,EAAc,CAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,oBAAA,CAAqB;AAAA,MACnB,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,WAAA,EAAa,wCAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR;AAAA;AAEL","file":"chunk-KVGWMJZB.js","sourcesContent":["import type { ComponentProps } from \"react\";\nimport type {\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 type { ShareableItem } from \"@fluid-app/rep-core/types\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { QRCodeSVG } from \"qrcode.react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faCopy,\n faCartShopping,\n faImage,\n} from \"@fortawesome/pro-regular-svg-icons\";\n\ntype QuickShareWidgetProps = ComponentProps<\"div\"> & {\n // Resource\n shareableResource?: ShareableItem;\n\n // Title\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Styling\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Overlay\n overlayEnabled?: boolean;\n overlayType?: \"solid\" | \"gradient\";\n overlayIntensity?: number;\n\n // Actions\n showBuyButton?: boolean;\n};\n\nexport function QuickShareWidget({\n // Resource\n shareableResource,\n\n // Title defaults\n titleEnabled = true,\n titleText = \"\",\n titleFontSize = \"2xl\",\n titleColor = \"foreground\",\n\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n\n // Overlay defaults\n overlayEnabled = true,\n overlayType = \"solid\",\n overlayIntensity = 50,\n\n // Actions defaults\n showBuyButton = false,\n\n className,\n ...props\n}: QuickShareWidgetProps) {\n // Determine background styling\n const backgroundImageUrl =\n shareableResource?.image_url || shareableResource?.imageUrl;\n\n // Get share link from resource\n const shareLink = shareableResource?.share_link || \"\";\n const displayUrl = shareLink || \"Select a resource to generate link\";\n\n // Determine title - use provided title or fall back to resource title\n const displayTitle =\n titleText || shareableResource?.title || \"Select a resource to display!\";\n\n // Check if resource is a Product for buy button visibility\n const isProduct =\n shareableResource?.type === \"Product\" ||\n shareableResource?.shareableType === \"Product\";\n const shouldShowBuyButton = showBuyButton && isProduct;\n\n // Copy to clipboard handler\n const handleCopyToClipboard = async () => {\n if (shareLink) {\n try {\n await navigator.clipboard.writeText(shareLink);\n } catch (error) {\n console.error(\"Failed to copy to clipboard:\", error);\n }\n }\n };\n\n return (\n <div\n className={`relative overflow-hidden rounded-${borderRadius} bg-muted text-${textColor} ${className ?? \"\"}`}\n {...props}\n >\n {/* Background Image with Overlay */}\n {backgroundImageUrl ? (\n <div className=\"absolute inset-0\">\n <img\n src={backgroundImageUrl}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n {overlayEnabled && (\n <div\n className={`absolute inset-0 ${\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 </div>\n ) : (\n <div\n className={`absolute inset-0 flex items-center justify-center bg-muted`}\n >\n <FontAwesomeIcon icon={faImage} className=\"h-16 w-16 opacity-20\" />\n </div>\n )}\n\n {/* Content Container */}\n <div className={`relative flex min-h-[400px] flex-col p-${padding}`}>\n {/* Title Overlay */}\n {titleEnabled && displayTitle && (\n <div className=\"flex flex-1 items-center justify-center\">\n <h2\n className={`text-center text-${titleFontSize} font-semibold text-${titleColor} drop-shadow-lg`}\n >\n {displayTitle}\n </h2>\n </div>\n )}\n\n {/* Bottom Section - QR Code, URL, and Buttons */}\n <div className=\"mt-auto flex flex-col gap-4\">\n <div className=\"flex items-end justify-between gap-4\">\n {/* QR Code */}\n <div className=\"shrink-0 rounded-lg bg-white p-2\">\n <QRCodeSVG\n value={shareLink || \"https://example.com\"}\n size={100}\n level=\"H\"\n />\n </div>\n\n {/* URL Display */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"mb-2 text-sm font-semibold tracking-wide drop-shadow\">\n Your Shareable URL\n </p>\n <div className=\"flex items-center justify-between rounded-md border border-white/20 bg-black/50 p-2 text-sm text-white backdrop-blur\">\n <span className=\"truncate\">{displayUrl}</span>\n <button\n type=\"button\"\n onClick={handleCopyToClipboard}\n className={`ml-2 shrink-0 rounded p-1 transition-colors hover:bg-${accentColor}/20`}\n aria-label=\"Copy link\"\n >\n <FontAwesomeIcon icon={faCopy} className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n\n {/* Action Buttons */}\n {/* TODO: Needs button link implmented, once it is uncomment the config for showBuyButton */}\n {shouldShowBuyButton && (\n <div className=\"flex\">\n <button\n type=\"button\"\n className={`flex w-full items-center justify-center gap-2 rounded-lg bg-${accentColor} p-3 font-medium text-${accentColor}-foreground transition-all hover:bg-${accentColor}-500`}\n >\n <FontAwesomeIcon icon={faCartShopping} className=\"h-4 w-4\" />\n <span>Buy</span>\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport const quickShareWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"QuickShareWidget\",\n displayName: \"Quick Share Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Styling Tab - Resource\n {\n key: \"shareableResource\",\n label: \"Shareable Content\",\n type: \"resource\",\n description: \"Select the content to generate a share link for\",\n allowedTypes: [\"Product\", \"Page\", \"EnrollmentPack\", \"Medium\", \"Library\"],\n tab: \"styling\",\n group: \"Content\",\n },\n\n // Styling Tab - Title Group\n {\n key: \"titleEnabled\",\n label: \"Show Title\",\n type: \"boolean\",\n description: \"Display a title overlay on the widget\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Custom title text (defaults to resource title if empty)\",\n defaultValue: \"\",\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 title text\",\n defaultValue: \"2xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the title text\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling Tab - Actions Group\n // {\n // key: \"showBuyButton\",\n // label: \"Show Buy Button\",\n // type: \"boolean\",\n // description: \"Display the buy button (only visible for Product type)\",\n // defaultValue: false,\n // tab: \"styling\",\n // group: \"Actions\",\n // },\n\n // Styling Tab - Design Group\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for the widget\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color for accent elements and buy button\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"overlayEnabled\",\n label: \"Enable Overlay\",\n type: \"boolean\",\n description: \"Add background overlay for 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 to add to the background\",\n defaultValue: \"solid\",\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 background (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 {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget content\",\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 widget container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"]}
@@ -2,7 +2,8 @@
2
2
 
3
3
  var chunkCM7D7WGL_cjs = require('./chunk-CM7D7WGL.cjs');
4
4
  var qrcode_react = require('qrcode.react');
5
- var lucideReact = require('lucide-react');
5
+ var reactFontawesome = require('@fortawesome/react-fontawesome');
6
+ var proRegularSvgIcons = require('@fortawesome/pro-regular-svg-icons');
6
7
  var jsxRuntime = require('react/jsx-runtime');
7
8
 
8
9
  function QuickShareWidget({
@@ -69,7 +70,7 @@ function QuickShareWidget({
69
70
  "div",
70
71
  {
71
72
  className: `absolute inset-0 flex items-center justify-center bg-muted`,
72
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ImageIcon, { className: "h-16 w-16 opacity-20" })
73
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon: proRegularSvgIcons.faImage, className: "h-16 w-16 opacity-20" })
73
74
  }
74
75
  ),
75
76
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `relative flex min-h-[400px] flex-col p-${padding}`, children: [
@@ -101,7 +102,7 @@ function QuickShareWidget({
101
102
  onClick: handleCopyToClipboard,
102
103
  className: `ml-2 shrink-0 rounded p-1 transition-colors hover:bg-${accentColor}/20`,
103
104
  "aria-label": "Copy link",
104
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-4 w-4" })
105
+ children: /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon: proRegularSvgIcons.faCopy, className: "h-4 w-4" })
105
106
  }
106
107
  )
107
108
  ] })
@@ -113,7 +114,7 @@ function QuickShareWidget({
113
114
  type: "button",
114
115
  className: `flex w-full items-center justify-center gap-2 rounded-lg bg-${accentColor} p-3 font-medium text-${accentColor}-foreground transition-all hover:bg-${accentColor}-500`,
115
116
  children: [
116
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShoppingCart, { className: "h-4 w-4" }),
117
+ /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon: proRegularSvgIcons.faCartShopping, className: "h-4 w-4" }),
117
118
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Buy" })
118
119
  ]
119
120
  }
@@ -269,5 +270,5 @@ var quickShareWidgetPropertySchema = {
269
270
 
270
271
  exports.QuickShareWidget = QuickShareWidget;
271
272
  exports.quickShareWidgetPropertySchema = quickShareWidgetPropertySchema;
272
- //# sourceMappingURL=chunk-VBJ5FT4C.cjs.map
273
- //# sourceMappingURL=chunk-VBJ5FT4C.cjs.map
273
+ //# sourceMappingURL=chunk-LFYELLIM.cjs.map
274
+ //# sourceMappingURL=chunk-LFYELLIM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/widgets/QuickShareWidget.tsx"],"names":["jsxs","jsx","FontAwesomeIcon","faImage","QRCodeSVG","faCopy","faCartShopping","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-LFYELLIM.cjs","sourcesContent":["import type { ComponentProps } from \"react\";\nimport type {\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 type { ShareableItem } from \"@fluid-app/rep-core/types\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { QRCodeSVG } from \"qrcode.react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faCopy,\n faCartShopping,\n faImage,\n} from \"@fortawesome/pro-regular-svg-icons\";\n\ntype QuickShareWidgetProps = ComponentProps<\"div\"> & {\n // Resource\n shareableResource?: ShareableItem;\n\n // Title\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Styling\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Overlay\n overlayEnabled?: boolean;\n overlayType?: \"solid\" | \"gradient\";\n overlayIntensity?: number;\n\n // Actions\n showBuyButton?: boolean;\n};\n\nexport function QuickShareWidget({\n // Resource\n shareableResource,\n\n // Title defaults\n titleEnabled = true,\n titleText = \"\",\n titleFontSize = \"2xl\",\n titleColor = \"foreground\",\n\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n\n // Overlay defaults\n overlayEnabled = true,\n overlayType = \"solid\",\n overlayIntensity = 50,\n\n // Actions defaults\n showBuyButton = false,\n\n className,\n ...props\n}: QuickShareWidgetProps) {\n // Determine background styling\n const backgroundImageUrl =\n shareableResource?.image_url || shareableResource?.imageUrl;\n\n // Get share link from resource\n const shareLink = shareableResource?.share_link || \"\";\n const displayUrl = shareLink || \"Select a resource to generate link\";\n\n // Determine title - use provided title or fall back to resource title\n const displayTitle =\n titleText || shareableResource?.title || \"Select a resource to display!\";\n\n // Check if resource is a Product for buy button visibility\n const isProduct =\n shareableResource?.type === \"Product\" ||\n shareableResource?.shareableType === \"Product\";\n const shouldShowBuyButton = showBuyButton && isProduct;\n\n // Copy to clipboard handler\n const handleCopyToClipboard = async () => {\n if (shareLink) {\n try {\n await navigator.clipboard.writeText(shareLink);\n } catch (error) {\n console.error(\"Failed to copy to clipboard:\", error);\n }\n }\n };\n\n return (\n <div\n className={`relative overflow-hidden rounded-${borderRadius} bg-muted text-${textColor} ${className ?? \"\"}`}\n {...props}\n >\n {/* Background Image with Overlay */}\n {backgroundImageUrl ? (\n <div className=\"absolute inset-0\">\n <img\n src={backgroundImageUrl}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n {overlayEnabled && (\n <div\n className={`absolute inset-0 ${\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 </div>\n ) : (\n <div\n className={`absolute inset-0 flex items-center justify-center bg-muted`}\n >\n <FontAwesomeIcon icon={faImage} className=\"h-16 w-16 opacity-20\" />\n </div>\n )}\n\n {/* Content Container */}\n <div className={`relative flex min-h-[400px] flex-col p-${padding}`}>\n {/* Title Overlay */}\n {titleEnabled && displayTitle && (\n <div className=\"flex flex-1 items-center justify-center\">\n <h2\n className={`text-center text-${titleFontSize} font-semibold text-${titleColor} drop-shadow-lg`}\n >\n {displayTitle}\n </h2>\n </div>\n )}\n\n {/* Bottom Section - QR Code, URL, and Buttons */}\n <div className=\"mt-auto flex flex-col gap-4\">\n <div className=\"flex items-end justify-between gap-4\">\n {/* QR Code */}\n <div className=\"shrink-0 rounded-lg bg-white p-2\">\n <QRCodeSVG\n value={shareLink || \"https://example.com\"}\n size={100}\n level=\"H\"\n />\n </div>\n\n {/* URL Display */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"mb-2 text-sm font-semibold tracking-wide drop-shadow\">\n Your Shareable URL\n </p>\n <div className=\"flex items-center justify-between rounded-md border border-white/20 bg-black/50 p-2 text-sm text-white backdrop-blur\">\n <span className=\"truncate\">{displayUrl}</span>\n <button\n type=\"button\"\n onClick={handleCopyToClipboard}\n className={`ml-2 shrink-0 rounded p-1 transition-colors hover:bg-${accentColor}/20`}\n aria-label=\"Copy link\"\n >\n <FontAwesomeIcon icon={faCopy} className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n\n {/* Action Buttons */}\n {/* TODO: Needs button link implmented, once it is uncomment the config for showBuyButton */}\n {shouldShowBuyButton && (\n <div className=\"flex\">\n <button\n type=\"button\"\n className={`flex w-full items-center justify-center gap-2 rounded-lg bg-${accentColor} p-3 font-medium text-${accentColor}-foreground transition-all hover:bg-${accentColor}-500`}\n >\n <FontAwesomeIcon icon={faCartShopping} className=\"h-4 w-4\" />\n <span>Buy</span>\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport const quickShareWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"QuickShareWidget\",\n displayName: \"Quick Share Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Styling Tab - Resource\n {\n key: \"shareableResource\",\n label: \"Shareable Content\",\n type: \"resource\",\n description: \"Select the content to generate a share link for\",\n allowedTypes: [\"Product\", \"Page\", \"EnrollmentPack\", \"Medium\", \"Library\"],\n tab: \"styling\",\n group: \"Content\",\n },\n\n // Styling Tab - Title Group\n {\n key: \"titleEnabled\",\n label: \"Show Title\",\n type: \"boolean\",\n description: \"Display a title overlay on the widget\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Custom title text (defaults to resource title if empty)\",\n defaultValue: \"\",\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 title text\",\n defaultValue: \"2xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the title text\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling Tab - Actions Group\n // {\n // key: \"showBuyButton\",\n // label: \"Show Buy Button\",\n // type: \"boolean\",\n // description: \"Display the buy button (only visible for Product type)\",\n // defaultValue: false,\n // tab: \"styling\",\n // group: \"Actions\",\n // },\n\n // Styling Tab - Design Group\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for the widget\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color for accent elements and buy button\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"overlayEnabled\",\n label: \"Enable Overlay\",\n type: \"boolean\",\n description: \"Add background overlay for 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 to add to the background\",\n defaultValue: \"solid\",\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 background (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 {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget content\",\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 widget container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"]}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var lucideReact = require('lucide-react');
3
+ var reactFontawesome = require('@fortawesome/react-fontawesome');
4
+ var proRegularSvgIcons = require('@fortawesome/pro-regular-svg-icons');
4
5
  var jsxRuntime = require('react/jsx-runtime');
5
6
 
6
7
  // src/components/MediaRenderer.tsx
@@ -19,10 +20,10 @@ function MediaRenderer({
19
20
  const hasValidSrc = src && src.trim() !== "";
20
21
  const objectPosition = focusPoint?.replace("-", " ");
21
22
  if (!hasValidSrc) {
22
- const Icon = mediaType === "video" ? lucideReact.Video : lucideReact.Image;
23
+ const icon = mediaType === "video" ? proRegularSvgIcons.faVideo : proRegularSvgIcons.faImage;
23
24
  const label = mediaType === "video" ? "No video selected" : "No image selected";
24
25
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full min-h-[200px] w-full items-center justify-center bg-muted", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2 text-muted-foreground", children: [
25
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-12 w-12" }),
26
+ /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon, className: "h-12 w-12" }),
26
27
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: label })
27
28
  ] }) });
28
29
  }
@@ -174,5 +175,5 @@ function getMediaPropsFromWidgetSchema(schema) {
174
175
  exports.MediaRenderer = MediaRenderer;
175
176
  exports.getMediaPropsFromShareable = getMediaPropsFromShareable;
176
177
  exports.getMediaPropsFromWidgetSchema = getMediaPropsFromWidgetSchema;
177
- //# sourceMappingURL=chunk-MKUJOEAC.cjs.map
178
- //# sourceMappingURL=chunk-MKUJOEAC.cjs.map
178
+ //# sourceMappingURL=chunk-LOXFR6XC.cjs.map
179
+ //# sourceMappingURL=chunk-LOXFR6XC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/MediaRenderer.tsx"],"names":["faVideo","faImage","jsxs","jsx","FontAwesomeIcon","result"],"mappings":"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","file":"chunk-LOXFR6XC.cjs","sourcesContent":["import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faImage, faVideo } from \"@fortawesome/pro-regular-svg-icons\";\nimport type { ShareableItem, WidgetSchema } from \"@fluid-app/rep-core/types\";\n\nexport type MediaRendererProps = {\n src?: string | undefined;\n alt?: string | undefined;\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | undefined;\n focusPoint?: string | undefined;\n mediaType?: \"image\" | \"video\" | undefined;\n poster?: string | undefined;\n autoplay?: boolean | undefined;\n loop?: boolean | undefined;\n muted?: boolean | undefined;\n controls?: boolean | undefined;\n};\n\nexport function MediaRenderer({\n src,\n alt = \"Media\",\n objectFit = \"cover\",\n focusPoint,\n mediaType = \"image\",\n poster,\n autoplay = false,\n loop = false,\n muted = false,\n controls = true,\n}: MediaRendererProps) {\n const hasValidSrc = src && src.trim() !== \"\";\n const objectPosition = focusPoint?.replace(\"-\", \" \");\n\n if (!hasValidSrc) {\n const icon = mediaType === \"video\" ? faVideo : faImage;\n const label =\n mediaType === \"video\" ? \"No video selected\" : \"No image selected\";\n return (\n <div className=\"flex h-full min-h-[200px] w-full items-center justify-center bg-muted\">\n <div className=\"flex flex-col items-center gap-2 text-muted-foreground\">\n <FontAwesomeIcon icon={icon} className=\"h-12 w-12\" />\n <p className=\"text-sm\">{label}</p>\n </div>\n </div>\n );\n }\n\n const isContainMode = objectFit === \"contain\";\n const blurSrc = isContainMode ? `${src}?tr=bl-50` : undefined;\n\n if (mediaType === \"video\") {\n const blurredBgSrc = isContainMode\n ? poster\n ? `${poster}?tr=bl-50`\n : blurSrc\n : undefined;\n\n if (isContainMode && blurredBgSrc) {\n return (\n <div className=\"relative h-full w-full overflow-hidden\">\n <img\n src={blurredBgSrc}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n aria-hidden=\"true\"\n />\n <div className=\"absolute inset-0 bg-black/30\" aria-hidden=\"true\" />\n <video\n src={src}\n poster={poster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n className={`relative z-10 h-full w-full object-contain ${!controls ? \"pointer-events-none\" : \"\"}`}\n >\n Your browser does not support the video tag.\n </video>\n </div>\n );\n }\n\n return (\n <video\n src={src}\n poster={poster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n className={`h-full w-full object-${objectFit} ${!controls ? \"pointer-events-none\" : \"\"}`}\n style={objectPosition ? { objectPosition } : undefined}\n >\n Your browser does not support the video tag.\n </video>\n );\n }\n\n if (isContainMode) {\n return (\n <div className=\"relative h-full w-full overflow-hidden\">\n <img\n src={blurSrc}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n aria-hidden=\"true\"\n />\n <div className=\"absolute inset-0 bg-black/30\" aria-hidden=\"true\" />\n <img\n src={src}\n alt={alt}\n className=\"relative z-10 h-full w-full object-contain\"\n />\n </div>\n );\n }\n\n return (\n <img\n src={src}\n alt={alt}\n className={`h-full w-full object-${objectFit}`}\n style={objectPosition ? { objectPosition } : undefined}\n />\n );\n}\n\n/**\n * Converts a ShareableItem to MediaRenderer props.\n * Replaces the createWidgetFromShareable → ScreenRenderer pattern.\n */\nexport function getMediaPropsFromShareable(\n item: ShareableItem,\n): MediaRendererProps {\n const isVideo = item.kind === \"video\" || !!item.videoUrl;\n\n if (isVideo && item.videoUrl) {\n const result: MediaRendererProps = {\n mediaType: \"video\",\n src: item.videoUrl,\n alt: item.title ?? \"Video\",\n };\n if (item.imageUrl != null) result.poster = item.imageUrl;\n return result;\n }\n\n const result: MediaRendererProps = {\n mediaType: \"image\",\n alt: item.title || \"Image\",\n objectFit: \"cover\",\n };\n if (item.imageUrl != null) result.src = item.imageUrl;\n return result;\n}\n\n/**\n * Extracts media props from an ImageWidget/VideoWidget schema.\n * Used by CarouselWidget for slide.content rendering.\n */\nexport function getMediaPropsFromWidgetSchema(\n schema: WidgetSchema,\n): MediaRendererProps {\n const props = schema.props;\n\n const resource = props.resource as ShareableItem | undefined;\n const useCustomUrl = props.useCustomUrl as boolean | undefined;\n const focusPoint = props.focusPoint as string | undefined;\n const displayFit = props.displayFit as\n | MediaRendererProps[\"objectFit\"]\n | undefined;\n\n if (schema.type === \"VideoWidget\") {\n const result: MediaRendererProps = {\n mediaType: \"video\",\n autoplay: (props.autoplay as boolean | undefined) ?? false,\n loop: (props.loop as boolean | undefined) ?? false,\n muted: (props.muted as boolean | undefined) ?? false,\n controls: (props.controls as boolean | undefined) ?? true,\n objectFit: displayFit ?? \"cover\",\n focusPoint,\n };\n if (useCustomUrl) {\n if (typeof props.src === \"string\") result.src = props.src;\n if (typeof props.poster === \"string\") result.poster = props.poster;\n } else if (resource) {\n if (resource.videoUrl) result.src = resource.videoUrl;\n else if (typeof props.src === \"string\") result.src = props.src;\n if (resource.imageUrl) result.poster = resource.imageUrl;\n else if (typeof props.poster === \"string\") result.poster = props.poster;\n } else {\n if (typeof props.src === \"string\") result.src = props.src;\n if (typeof props.poster === \"string\") result.poster = props.poster;\n }\n return result;\n }\n\n const result: MediaRendererProps = {\n mediaType: \"image\",\n alt: (props.alt as string | undefined) ?? \"Image\",\n objectFit: displayFit ?? \"cover\",\n focusPoint,\n };\n if (useCustomUrl) {\n if (typeof props.src === \"string\") result.src = props.src;\n } else if (resource) {\n if (resource.imageUrl) result.src = resource.imageUrl;\n else if (typeof props.src === \"string\") result.src = props.src;\n if (resource.title) result.alt = resource.title;\n } else {\n if (typeof props.src === \"string\") result.src = props.src;\n }\n return result;\n}\n"]}
@@ -1,10 +1,13 @@
1
1
  'use strict';
2
2
 
3
+ var proRegularSvgIcons = require('@fortawesome/pro-regular-svg-icons');
4
+ var reactFontawesome = require('@fortawesome/react-fontawesome');
3
5
  var jsxRuntime = require('react/jsx-runtime');
4
6
 
5
7
  // src/widgets/SpacerWidget.tsx
6
8
  function SpacerWidget({
7
9
  customHeight = 32,
10
+ previewMode = false,
8
11
  className,
9
12
  style,
10
13
  ...props
@@ -15,7 +18,11 @@ function SpacerWidget({
15
18
  className: `w-full ${className ?? ""}`,
16
19
  style: { height: `calc(var(--spacing) * ${customHeight})`, ...style },
17
20
  "aria-hidden": "true",
18
- ...props
21
+ ...props,
22
+ children: previewMode && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full w-full items-center justify-center gap-1 border border-dashed border-muted-400 bg-muted text-muted-foreground", children: [
23
+ /* @__PURE__ */ jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, { icon: proRegularSvgIcons.faArrowsUpDown }),
24
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "SPACER" })
25
+ ] })
19
26
  }
20
27
  );
21
28
  }
@@ -39,5 +46,5 @@ var spacerWidgetPropertySchema = {
39
46
 
40
47
  exports.SpacerWidget = SpacerWidget;
41
48
  exports.spacerWidgetPropertySchema = spacerWidgetPropertySchema;
42
- //# sourceMappingURL=chunk-YCYKV5KF.cjs.map
43
- //# sourceMappingURL=chunk-YCYKV5KF.cjs.map
49
+ //# sourceMappingURL=chunk-M3DV7TXA.cjs.map
50
+ //# sourceMappingURL=chunk-M3DV7TXA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/widgets/SpacerWidget.tsx"],"names":["jsx","jsxs","FontAwesomeIcon","faArrowsUpDown"],"mappings":";;;;;;;AAgBO,SAAS,YAAA,CAAa;AAAA,EAC3B,YAAA,GAAe,EAAA;AAAA,EACf,WAAA,GAAc,KAAA;AAAA,EACd,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,OAAA,EAAU,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACpC,OAAO,EAAE,MAAA,EAAQ,yBAAyB,YAAY,CAAA,CAAA,CAAA,EAAK,GAAG,KAAA,EAAM;AAAA,MACpE,aAAA,EAAY,MAAA;AAAA,MACX,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,WAAA,oBACCC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2HAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAACE,gCAAA,EAAA,EAAgB,MAAMC,iCAAA,EAAgB,CAAA;AAAA,wBACvCH,cAAA,CAAC,UAAK,QAAA,EAAA,QAAA,EAAM;AAAA,OAAA,EACd;AAAA;AAAA,GAEJ;AAEJ;AAEO,IAAM,0BAAA,GAAmD;AAAA,EAC9D,UAAA,EAAY,cAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN;AAAA,MACE,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,oDAAA;AAAA,MACb,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,YAAA,EAAc,EAAA;AAAA,MACd,KAAA,EAAO;AAAA;AACT;AAEJ","file":"chunk-M3DV7TXA.cjs","sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport { faArrowsUpDown } from \"@fortawesome/pro-regular-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport type { ComponentProps } from \"react\";\n\ntype SpacerWidgetProps = ComponentProps<\"div\"> & {\n /**\n * Custom height in pixels (only used when size is \"custom\")\n */\n customHeight?: number;\n /**\n * Not customizable, determines if we should show a preview image in the container\n */\n previewMode?: boolean;\n};\n\nexport function SpacerWidget({\n customHeight = 32,\n previewMode = false,\n className,\n style,\n ...props\n}: SpacerWidgetProps) {\n return (\n <div\n className={`w-full ${className ?? \"\"}`}\n style={{ height: `calc(var(--spacing) * ${customHeight})`, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {previewMode && (\n <div className=\"flex h-full w-full items-center justify-center gap-1 border border-dashed border-muted-400 bg-muted text-muted-foreground\">\n <FontAwesomeIcon icon={faArrowsUpDown} />\n <span>SPACER</span>\n </div>\n )}\n </div>\n );\n}\n\nexport const spacerWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"SpacerWidget\",\n displayName: \"Spacer\",\n fields: [\n {\n key: \"customHeight\",\n label: \"Height\",\n type: \"number\",\n description: \"Height in pixels (only used when size is 'custom')\",\n min: 1,\n max: 500,\n step: 1,\n defaultValue: 32,\n group: \"Spacing\",\n },\n ],\n};\n"]}
@@ -2,17 +2,14 @@ import { ErrorState } from './chunk-GRFCSQ2M.js';
2
2
  import { getFontSizeField, getColorField, getPaddingField, getBorderRadiusField } from './chunk-ZS7C474P.js';
3
3
  import { useQuery } from '@tanstack/react-query';
4
4
  import { useDataSourceConfig } from '@fluid-app/rep-core/data-sources/context';
5
- import { Loader2, Sparkles } from 'lucide-react';
5
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
+ import { faSpinnerThird, faSparkles } from '@fortawesome/pro-regular-svg-icons';
6
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
8
 
8
- var catchUpKeys = {
9
- all: ["catchups"],
10
- list: () => [...catchUpKeys.all, "list"]
11
- };
12
9
  function useCatchUps() {
13
10
  const { baseUrl, getApiHeaders } = useDataSourceConfig();
14
11
  return useQuery({
15
- queryKey: catchUpKeys.list(),
12
+ queryKey: ["rep-widget-use", "catchups", baseUrl],
16
13
  queryFn: async ({ signal }) => {
17
14
  const url = baseUrl ? `${baseUrl}/affiliate_catch_up_actions.json` : "/affiliate_catch_up_actions.json";
18
15
  const response = await fetch(url, {
@@ -79,13 +76,26 @@ function CatchUpWidget({
79
76
  ),
80
77
  !isLoading && !isError && data.length > 0 && /* @__PURE__ */ jsx("span", { className: `text-3xl font-bold text-${accentColor}`, children: data.length })
81
78
  ] }),
82
- isLoading ? /* @__PURE__ */ jsx("div", { className: "flex min-h-[150px] flex-1 items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: `h-8 w-8 animate-spin text-${accentColor}` }) }) : isError ? (
79
+ isLoading ? /* @__PURE__ */ jsx("div", { className: "flex min-h-[150px] flex-1 items-center justify-center", children: /* @__PURE__ */ jsx(
80
+ FontAwesomeIcon,
81
+ {
82
+ icon: faSpinnerThird,
83
+ spin: true,
84
+ className: `h-8 w-8 text-${accentColor}`
85
+ }
86
+ ) }) : isError ? (
83
87
  /* Error state */
84
88
  /* @__PURE__ */ jsx(ErrorState, {})
85
89
  ) : data.length === 0 ? (
86
90
  /* Empty state */
87
91
  /* @__PURE__ */ jsxs("div", { className: "flex min-h-[150px] flex-1 flex-col items-center justify-center gap-2", children: [
88
- /* @__PURE__ */ jsx(Sparkles, { className: `h-8 w-8 text-${accentColor}` }),
92
+ /* @__PURE__ */ jsx(
93
+ FontAwesomeIcon,
94
+ {
95
+ icon: faSparkles,
96
+ className: `h-8 w-8 text-${accentColor}`
97
+ }
98
+ ),
89
99
  /* @__PURE__ */ jsx("p", { className: "text-center font-semibold", children: "You're all caught up." }),
90
100
  /* @__PURE__ */ jsx("p", { className: "text-sm opacity-60", children: "See you next time!" })
91
101
  ] })
@@ -218,5 +228,5 @@ var catchUpWidgetPropertySchema = {
218
228
  };
219
229
 
220
230
  export { CatchUpWidget, catchUpWidgetPropertySchema };
221
- //# sourceMappingURL=chunk-VZFL5BZM.js.map
222
- //# sourceMappingURL=chunk-VZFL5BZM.js.map
231
+ //# sourceMappingURL=chunk-OFRCK7WR.js.map
232
+ //# sourceMappingURL=chunk-OFRCK7WR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-catchups.ts","../src/widgets/CatchUpWidget.tsx"],"names":[],"mappings":";;;;;;;;AASO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAc,GAAI,mBAAA,EAAoB;AAEvD,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,gBAAA,EAAkB,UAAA,EAAY,OAAO,CAAA;AAAA,IAChD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAA0B;AACjD,MAAA,MAAM,GAAA,GAAM,OAAA,GACR,CAAA,EAAG,OAAO,CAAA,gCAAA,CAAA,GACV,kCAAA;AACJ,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAChC,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,GAAG,aAAA;AAAgB,SACrB;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MACjE;AAEA,MAAA,OAAO,SAAS,IAAA,EAAK;AAAA,IACvB;AAAA,GACD,CAAA;AACH;ACZA,IAAM,eAAA,GAAmD;AAAA,EACvD,KAAA,EAAO,UAAA;AAAA,EACP,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAkBO,SAAS,aAAA,CAAc;AAAA;AAAA,EAE5B,YAAA,GAAe,IAAA;AAAA,EACf,SAAA,GAAY,WAAA;AAAA,EACZ,aAAA,GAAgB,IAAA;AAAA,EAChB,UAAA,GAAa,YAAA;AAAA;AAAA,EAEb,UAAA,GAAa;AAAA,IACX,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,GAAY,YAAA;AAAA,EACZ,WAAA,GAAc,SAAA;AAAA,EACd,OAAA,GAAU,CAAA;AAAA,EACV,YAAA,GAAe,IAAA;AAAA;AAAA,EAEf,QAAA,GAAW,CAAA;AAAA,EACX,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,MAAM,eAAA,GAAkB,WAAW,KAAA,IAAS,YAAA;AAC5C,EAAA,MAAM,mBACH,UAAA,CAAW,QAAA,EAAU,SAAA,IAAa,UAAA,CAAW,UAAU,QAAA,KACxD,UAAA,CAAW,IAAA,KAAS,OAAA,GAChB,OAAO,UAAA,CAAW,QAAA,CAAS,aAAa,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,CAAA,CAAA,GACpE,MAAA;AACN,EAAA,MAAM,EAAE,IAAA,GAAO,IAAI,SAAA,EAAW,OAAA,KAAY,WAAA,EAAY;AAEtD,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAC7C,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,GAAS,cAAA,CAAe,MAAA;AAElD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,sBAAA,EAAyB,YAAY,CAAA,IAAA,EAAO,eAAe,CAAA,GAAA,EAAM,OAAO,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA,EAAI,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACxH,KAAA,EAAO,EAAE,eAAA,EAAgB;AAAA,MACxB,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,YAAA,oBACC,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,WAAW,CAAA,EAAG,eAAA,CAAgB,aAAa,CAAC,uBAAuB,UAAU,CAAA,CAAA;AAAA,cAE5E,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAED,CAAC,SAAA,IAAa,CAAC,OAAA,IAAW,KAAK,MAAA,GAAS,CAAA,oBACvC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,EACpD,eAAK,MAAA,EACR;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGC,SAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,cAAA;AAAA,YACN,IAAA,EAAI,IAAA;AAAA,YACJ,SAAA,EAAW,gBAAgB,WAAW,CAAA;AAAA;AAAA,WAE1C,CAAA,GACE,OAAA;AAAA;AAAA,8BAED,UAAA,EAAA,EAAW;AAAA,YACV,KAAK,MAAA,KAAW,CAAA;AAAA;AAAA,0BAElB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAM,UAAA;AAAA,gBACN,SAAA,EAAW,gBAAgB,WAAW,CAAA;AAAA;AAAA,aACxC;AAAA,4BACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAAA,EAA4B,QAAA,EAAA,uBAAA,EAEzC,CAAA;AAAA,4BACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,oBAAA,EAAkB;AAAA,WAAA,EACtD;AAAA;AAAA;AAAA,0BAGA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,SAAI,SAAA,EAAU,aAAA,EACZ,yBAAe,GAAA,CAAI,CAAC,SAAS,KAAA,qBAC5B,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,WAAW,CAAA,KAAA,EAAQ,KAAA,KAAU,eAAe,MAAA,GAAS,CAAA,GAAI,+BAA+B,EAAE,CAAA,CAAA;AAAA,gBAE1F,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBAAA,EACV,kBAAQ,gBAAA,EACX;AAAA,eAAA;AAAA,cALK,QAAQ,EAAA,IAAM;AAAA,aAOtB,CAAA,EACH,CAAA;AAAA,YAGC,YAAA,GAAe,CAAA,oBACd,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,yBAAA,EACV,QAAA,EAAA;AAAA,cAAA,YAAA;AAAA,cAAa,gBAAA;AAAA,cAAe,YAAA,GAAe,IAAI,GAAA,GAAM;AAAA,aAAA,EACxD;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAGO,IAAM,2BAAA,GAAoD;AAAA,EAC/D,UAAA,EAAY,eAAA;AAAA,EACZ,WAAA,EAAa,iBAAA;AAAA,EACb,YAAY,CAAC,EAAE,IAAI,SAAA,EAAW,KAAA,EAAO,WAAW,CAAA;AAAA,EAChD,MAAA,EAAQ;AAAA;AAAA,IAEN;AAAA,MACE,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,cAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,gDAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAa,0CAAA;AAAA,MACb,YAAA,EAAc,WAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,WAAA,EAAa,gCAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA,IACD,aAAA,CAAc;AAAA,MACZ,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,WAAA,EAAa,4BAAA;AAAA,MACb,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA;AAAA,IAGD;AAAA,MACE,IAAA,EAAM,YAAA;AAAA,MACN,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,YAAA;AAAA,MACP,WAAA,EAAa,8BAAA;AAAA,MACb,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA,aAAA,CAAc;AAAA,MACZ,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,YAAA;AAAA,MACP,WAAA,EAAa,uCAAA;AAAA,MACb,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,aAAA,CAAc;AAAA,MACZ,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,wCAAA;AAAA,MACb,YAAA,EAAc,SAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,WAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,wCAAA;AAAA,MACb,YAAA,EAAc,CAAA;AAAA,MACd,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA,eAAA,CAAgB;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,8BAAA;AAAA,MACb,YAAA,EAAc,CAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,oBAAA,CAAqB;AAAA,MACnB,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,WAAA,EAAa,iCAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR;AAAA;AAEL","file":"chunk-OFRCK7WR.js","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\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: [\"rep-widget-use\", \"catchups\", baseUrl] as const,\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 { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faSpinnerThird, faSparkles } from \"@fortawesome/pro-regular-svg-icons\";\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 <FontAwesomeIcon\n icon={faSpinnerThird}\n spin\n className={`h-8 w-8 text-${accentColor}`}\n />\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 <FontAwesomeIcon\n icon={faSparkles}\n className={`h-8 w-8 text-${accentColor}`}\n />\n <p className=\"text-center font-semibold\">\n You&apos;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"]}
@@ -3,17 +3,14 @@ import { getFontSizeField, getColorField, getPaddingField, getBorderRadiusField
3
3
  import { useMemo } from 'react';
4
4
  import { useQuery } from '@tanstack/react-query';
5
5
  import { useDataSourceConfig } from '@fluid-app/rep-core/data-sources/context';
6
- import { User, Trophy, Bell, CheckSquare, Star, Calendar, Eye, UserPlus, Play, MessageSquare, ShoppingCart } from 'lucide-react';
6
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
+ import { faUser, faTrophy, faBell, faSquareCheck, faStar, faCalendar, faEye, faUserPlus, faPlay, faComment, faCartShopping } from '@fortawesome/pro-regular-svg-icons';
7
8
  import { jsx, jsxs } from 'react/jsx-runtime';
8
9
 
9
- var activityKeys = {
10
- all: ["activities"],
11
- list: () => [...activityKeys.all, "list"]
12
- };
13
10
  function useActivities() {
14
11
  const { baseUrl, getApiHeaders } = useDataSourceConfig();
15
12
  return useQuery({
16
- queryKey: activityKeys.list(),
13
+ queryKey: ["rep-widget-use", "activities", baseUrl],
17
14
  queryFn: async ({ signal }) => {
18
15
  const url = baseUrl ? `${baseUrl}/v2/activities.json` : "/v2/activities.json";
19
16
  const response = await fetch(url, {
@@ -95,44 +92,44 @@ var groupActivitiesByDate = (activities) => {
95
92
  };
96
93
  var ACTIVITY_ICON_MAP = {
97
94
  // Orders/Cart
98
- order_placed: ShoppingCart,
99
- abandoned_cart: ShoppingCart,
100
- cart_items_added: ShoppingCart,
101
- new_cart_items_added: ShoppingCart,
95
+ order_placed: faCartShopping,
96
+ abandoned_cart: faCartShopping,
97
+ cart_items_added: faCartShopping,
98
+ new_cart_items_added: faCartShopping,
102
99
  // Messages
103
- direct_message: MessageSquare,
104
- comment_reply: MessageSquare,
105
- message_received: MessageSquare,
106
- message_sent: MessageSquare,
100
+ direct_message: faComment,
101
+ comment_reply: faComment,
102
+ message_received: faComment,
103
+ message_sent: faComment,
107
104
  // Video
108
- video: Play,
109
- video_complete: Play,
110
- video_contact: Play,
111
- video_complete_contact: Play,
105
+ video: faPlay,
106
+ video_complete: faPlay,
107
+ video_contact: faPlay,
108
+ video_complete_contact: faPlay,
112
109
  // Leads
113
- new_lead: UserPlus,
114
- page_views_contact: UserPlus,
115
- smart_link_clicked: UserPlus,
110
+ new_lead: faUserPlus,
111
+ page_views_contact: faUserPlus,
112
+ smart_link_clicked: faUserPlus,
116
113
  // Page Views
117
- page_views: Eye,
114
+ page_views: faEye,
118
115
  // Events
119
- upcoming_event: Calendar,
116
+ upcoming_event: faCalendar,
120
117
  // Reviews
121
- review_left: Star,
118
+ review_left: faStar,
122
119
  // Tasks
123
- tasks: CheckSquare,
120
+ tasks: faSquareCheck,
124
121
  // Announcements
125
- announcements: Bell,
122
+ announcements: faBell,
126
123
  // Fantasy
127
- fantasy_point: Trophy
124
+ fantasy_point: faTrophy
128
125
  };
129
- var getActivityIcon = (slug) => ACTIVITY_ICON_MAP[slug] ?? User;
126
+ var getActivityIcon = (slug) => ACTIVITY_ICON_MAP[slug] ?? faUser;
130
127
  function ActivityFeedItem({
131
128
  activity,
132
129
  accentColor,
133
130
  textColor
134
131
  }) {
135
- const Icon = getActivityIcon(activity.slug);
132
+ const icon = getActivityIcon(activity.slug);
136
133
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full items-start gap-1.5", children: [
137
134
  /* @__PURE__ */ jsx("div", { className: "shrink-0", children: activity.avatarUrl ? /* @__PURE__ */ jsxs("div", { className: "relative size-8 overflow-hidden rounded-full", children: [
138
135
  /* @__PURE__ */ jsx(
@@ -143,12 +140,18 @@ function ActivityFeedItem({
143
140
  className: "size-full object-cover"
144
141
  }
145
142
  ),
146
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 rounded-full border border-black/[0.08]" })
143
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 rounded-full border border-foreground/[0.08]" })
147
144
  ] }) : /* @__PURE__ */ jsx(
148
145
  "div",
149
146
  {
150
147
  className: `flex size-8 items-center justify-center rounded-full bg-muted`,
151
- children: /* @__PURE__ */ jsx(Icon, { className: `size-3.5 text-${textColor} opacity-60` })
148
+ children: /* @__PURE__ */ jsx(
149
+ FontAwesomeIcon,
150
+ {
151
+ icon,
152
+ className: `size-3.5 text-${textColor} opacity-60`
153
+ }
154
+ )
152
155
  }
153
156
  ) }),
154
157
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
@@ -244,7 +247,13 @@ function RecentActivityWidget({
244
247
  ) : activities.length === 0 ? (
245
248
  /* Empty state */
246
249
  /* @__PURE__ */ jsxs("div", { className: "flex min-h-[200px] flex-col items-center justify-center gap-2", children: [
247
- /* @__PURE__ */ jsx(User, { className: `size-12 text-${textColor} opacity-30` }),
250
+ /* @__PURE__ */ jsx(
251
+ FontAwesomeIcon,
252
+ {
253
+ icon: faUser,
254
+ className: `size-12 text-${textColor} opacity-30`
255
+ }
256
+ ),
248
257
  /* @__PURE__ */ jsx(
249
258
  "p",
250
259
  {
@@ -379,5 +388,5 @@ var recentActivityWidgetPropertySchema = {
379
388
  };
380
389
 
381
390
  export { RecentActivityWidget, recentActivityWidgetPropertySchema };
382
- //# sourceMappingURL=chunk-HBRGW3CJ.js.map
383
- //# sourceMappingURL=chunk-HBRGW3CJ.js.map
391
+ //# sourceMappingURL=chunk-PXWG3SDJ.js.map
392
+ //# sourceMappingURL=chunk-PXWG3SDJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-activities.ts","../src/widgets/RecentActivityWidget.tsx"],"names":[],"mappings":"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","file":"chunk-PXWG3SDJ.js","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// API types\nexport type ActivityContact = {\n id: number;\n token: string | null;\n first_name: string | null;\n last_name: string | null;\n avatar_url: string | null;\n full_name: string | null;\n email: string | null;\n phone: string | null;\n city: string | null;\n state: string | null;\n};\n\nexport type ActivityVisitor = {\n id: number;\n ip_address: string | null;\n city: string | null;\n state: string | null;\n country: string | null;\n utm_source: string | null;\n utm_campaign: string | null;\n};\n\nexport type ActivitySlug =\n | \"abandoned_cart\"\n | \"announcements\"\n | \"cart_items_added\"\n | \"comment_reply\"\n | \"direct_message\"\n | \"fantasy_point\"\n | \"new_lead\"\n | \"order_placed\"\n | \"page_views\"\n | \"page_views_contact\"\n | \"tasks\"\n | \"upcoming_event\"\n | \"video\"\n | \"video_complete\"\n | \"video_complete_contact\"\n | \"video_contact\"\n | \"message_received\"\n | \"message_sent\"\n | \"new_cart_items_added\"\n | \"smart_link_clicked\"\n | \"review_left\";\n\nexport type ApiActivity = {\n id: number;\n user_id: number;\n title: string;\n description: string | null;\n read_at: string | null;\n created_at: string;\n relation_type: string;\n company_id: number;\n state: \"new\" | \"earlier\";\n slug: ActivitySlug;\n relation: Record<string, unknown>;\n contact: ActivityContact | null;\n visitor: ActivityVisitor | null;\n};\n\ntype PaginationInfo = {\n current: number;\n previous: number | null;\n next: number | null;\n per_page: number;\n pages: number;\n count: number;\n};\n\ntype ApiResponse = [{ pagination: PaginationInfo }, { items: ApiActivity[] }];\n\n// Transformed activity for display\nexport type Activity = {\n id: number;\n userName: string;\n avatarUrl: string | null;\n activityType: string;\n targetName: string;\n timestamp: string;\n slug: ActivitySlug;\n};\n\nexport function useActivities() {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n\n return useQuery({\n queryKey: [\"rep-widget-use\", \"activities\", baseUrl] as const,\n queryFn: async ({ signal }): Promise<Activity[]> => {\n const url = baseUrl\n ? `${baseUrl}/v2/activities.json`\n : \"/v2/activities.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 activities: ${response.status}`);\n }\n\n const data: ApiResponse = await response.json();\n return transformActivities(data);\n },\n });\n}\n\n// Transform and format helpers\nfunction getUserName(\n contact: ActivityContact | null,\n visitor: ActivityVisitor | null,\n): string {\n if (contact?.full_name) {\n return contact.full_name;\n }\n if (contact?.first_name && contact?.last_name) {\n return `${contact.first_name} ${contact.last_name}`;\n }\n if (visitor?.city && visitor?.state) {\n return `Visitor from ${visitor.city}, ${visitor.state}`;\n }\n return \"Unknown Visitor\";\n}\n\nfunction transformActivities(rawData: ApiResponse): Activity[] {\n const itemsObj = rawData[1];\n if (!itemsObj?.items) return [];\n\n return itemsObj.items\n .map((activity) => ({\n id: activity.id,\n userName: getUserName(activity.contact, activity.visitor),\n avatarUrl: activity.contact?.avatar_url ?? null,\n activityType: formatActivityType(activity.slug),\n targetName: activity.description || activity.title,\n timestamp: activity.created_at,\n slug: activity.slug,\n }))\n .sort(\n (a, b) =>\n new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),\n );\n}\n\nfunction formatActivityType(slug: string): string {\n return slug\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n","import { useMemo, 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 {\n useActivities,\n type Activity,\n type ActivitySlug,\n} from \"../hooks/use-activities\";\nimport { ErrorState } from \"../components/error-state\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport type { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faBell,\n faCalendar,\n faSquareCheck,\n faEye,\n faComment,\n faPlay,\n faCartShopping,\n faStar,\n faTrophy,\n faUser,\n faUserPlus,\n} from \"@fortawesome/pro-regular-svg-icons\";\n\n// Format timestamp to time string\nconst formatTimestamp = (timestamp: string): string => {\n const date = new Date(timestamp);\n return date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n });\n};\n\n// Format date for grouping header\nconst formatDateHeader = (timestamp: string): string => {\n const date = new Date(timestamp);\n return date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n });\n};\n\n// Get date string for grouping (without time)\nconst getDateKey = (timestamp: string): string => {\n const date = new Date(timestamp);\n return date.toISOString().split(\"T\")[0] ?? timestamp;\n};\n\n// Group activities by date\nconst groupActivitiesByDate = (\n activities: Activity[],\n): Map<string, Activity[]> => {\n const grouped = new Map<string, Activity[]>();\n\n for (const activity of activities) {\n const dateKey = getDateKey(activity.timestamp);\n const existing = grouped.get(dateKey);\n if (existing) {\n existing.push(activity);\n } else {\n grouped.set(dateKey, [activity]);\n }\n }\n\n return grouped;\n};\n\n// Activity slug to icon mapping\nconst ACTIVITY_ICON_MAP: Record<ActivitySlug, IconDefinition> = {\n // Orders/Cart\n order_placed: faCartShopping,\n abandoned_cart: faCartShopping,\n cart_items_added: faCartShopping,\n new_cart_items_added: faCartShopping,\n // Messages\n direct_message: faComment,\n comment_reply: faComment,\n message_received: faComment,\n message_sent: faComment,\n // Video\n video: faPlay,\n video_complete: faPlay,\n video_contact: faPlay,\n video_complete_contact: faPlay,\n // Leads\n new_lead: faUserPlus,\n page_views_contact: faUserPlus,\n smart_link_clicked: faUserPlus,\n // Page Views\n page_views: faEye,\n // Events\n upcoming_event: faCalendar,\n // Reviews\n review_left: faStar,\n // Tasks\n tasks: faSquareCheck,\n // Announcements\n announcements: faBell,\n // Fantasy\n fantasy_point: faTrophy,\n};\n\nconst getActivityIcon = (slug: ActivitySlug) =>\n ACTIVITY_ICON_MAP[slug] ?? faUser;\n\n// Activity feed item component\ntype ActivityFeedItemProps = {\n activity: Activity;\n accentColor: ColorOptions;\n textColor: ColorOptions;\n};\n\nfunction ActivityFeedItem({\n activity,\n accentColor,\n textColor,\n}: ActivityFeedItemProps) {\n const icon = getActivityIcon(activity.slug);\n\n return (\n <div className=\"flex w-full items-start gap-1.5\">\n {/* Avatar */}\n <div className=\"shrink-0\">\n {activity.avatarUrl ? (\n <div className=\"relative size-8 overflow-hidden rounded-full\">\n <img\n src={activity.avatarUrl}\n alt={activity.userName}\n className=\"size-full object-cover\"\n />\n <div className=\"absolute inset-0 rounded-full border border-foreground/[0.08]\" />\n </div>\n ) : (\n <div\n className={`flex size-8 items-center justify-center rounded-full bg-muted`}\n >\n <FontAwesomeIcon\n icon={icon}\n className={`size-3.5 text-${textColor} opacity-60`}\n />\n </div>\n )}\n </div>\n\n {/* Content */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex w-full items-center gap-1.5\">\n <p\n className={`flex-1 text-base font-semibold text-${textColor} truncate`}\n >\n {activity.activityType}\n </p>\n <p className={`text-xs text-${textColor} shrink-0 opacity-50`}>\n {formatTimestamp(activity.timestamp)}\n </p>\n </div>\n <p className={`text-sm text-${textColor} opacity-80`}>\n <span className={`font-medium text-${accentColor}`}>\n {activity.userName}\n </span>{\" \"}\n {activity.targetName}\n </p>\n </div>\n </div>\n );\n}\n\ntype RecentActivityWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Activity settings\n maxItemsToShow?: number;\n};\n\nexport function RecentActivityWidget({\n // Title defaults\n titleEnabled = true,\n titleText = \"Recent Activity\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n\n // Styling defaults\n background = {\n type: \"solid\",\n color: \"background\",\n },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n\n // Activity defaults\n maxItemsToShow = 5,\n\n className,\n ...props\n}: RecentActivityWidgetProps) {\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: activities = [], isLoading, isError } = useActivities();\n\n const groupedActivities = useMemo(\n () => groupActivitiesByDate(activities),\n [activities],\n );\n\n const totalCount = Math.min(activities.length, maxItemsToShow);\n\n // Get activities to display (limited by maxItemsToShow)\n const activitiesToShow = useMemo(() => {\n const result: { date: string; items: Activity[] }[] = [];\n let count = 0;\n\n for (const [dateKey, items] of groupedActivities) {\n if (count >= maxItemsToShow) break;\n\n const remainingSlots = maxItemsToShow - count;\n const itemsToAdd = items.slice(0, remainingSlots);\n\n if (itemsToAdd.length > 0) {\n result.push({\n date: formatDateHeader(items[0]?.timestamp ?? dateKey),\n items: itemsToAdd,\n });\n count += itemsToAdd.length;\n }\n }\n\n return result;\n }, [groupedActivities, maxItemsToShow]);\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} border border-muted ${className}`}\n style={{ backgroundImage }}\n {...props}\n >\n <div className={`p-${padding} flex flex-col gap-2`}>\n {/* Header */}\n {titleEnabled && titleText && (\n <div className=\"flex w-full items-start gap-2\">\n <h2\n className={`flex-1 text-${titleFontSize} font-bold text-${titleColor}`}\n >\n {titleText}\n </h2>\n {!isLoading && (\n <span\n className={`text-4xl font-bold text-${textColor} leading-none`}\n >\n {totalCount.toString().padStart(2, \"0\")}\n </span>\n )}\n </div>\n )}\n\n {/* Loading state */}\n {isLoading ? (\n <div className=\"flex min-h-[200px] items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n ) : isError ? (\n /* Error state */\n <ErrorState />\n ) : activities.length === 0 ? (\n /* Empty state */\n <div className=\"flex min-h-[200px] flex-col items-center justify-center gap-2\">\n <FontAwesomeIcon\n icon={faUser}\n className={`size-12 text-${textColor} opacity-30`}\n />\n <p\n className={`text-base font-semibold text-${textColor} opacity-50`}\n >\n No Activity To Report\n </p>\n <p className={`text-sm text-${textColor} opacity-40`}>\n You&apos;ll Do Great!\n </p>\n </div>\n ) : (\n /* Activity list */\n <div className=\"flex flex-col gap-4\">\n {activitiesToShow.map((group, groupIndex) => (\n <div key={groupIndex} className=\"flex flex-col gap-4\">\n {/* Date header */}\n <p className={`text-base font-semibold text-${textColor}`}>\n {group.date}\n </p>\n\n {/* Activity items */}\n <div className=\"flex flex-col gap-4\">\n {group.items.map((activity) => (\n <ActivityFeedItem\n key={activity.id}\n activity={activity}\n accentColor={accentColor}\n textColor={textColor}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport const recentActivityWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"RecentActivityWidget\",\n displayName: \"Recent Activity 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 activity feed\",\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 activity feed\",\n defaultValue: \"Recent Activity\",\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 widget 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 activity content\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color used for links and highlights\",\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 getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget 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 widget container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n\n // Styling Tab - Display Group\n {\n key: \"maxItemsToShow\",\n label: \"Max Items\",\n type: \"number\",\n description: \"Maximum number of activity items to display\",\n defaultValue: 5,\n tab: \"styling\",\n group: \"Display\",\n },\n ],\n} as const satisfies WidgetPropertySchema;\n"]}