@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 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-activities.ts","../src/widgets/RecentActivityWidget.tsx"],"names":[],"mappings":"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","file":"chunk-HBRGW3CJ.js","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// Query key factory\nexport const activityKeys = {\n all: [\"activities\"] as const,\n list: () => [...activityKeys.all, \"list\"] as const,\n};\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: activityKeys.list(),\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 {\n Bell,\n Calendar,\n CheckSquare,\n Eye,\n MessageSquare,\n Play,\n ShoppingCart,\n Star,\n Trophy,\n User,\n UserPlus,\n} from \"lucide-react\";\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, typeof User> = {\n // Orders/Cart\n order_placed: ShoppingCart,\n abandoned_cart: ShoppingCart,\n cart_items_added: ShoppingCart,\n new_cart_items_added: ShoppingCart,\n // Messages\n direct_message: MessageSquare,\n comment_reply: MessageSquare,\n message_received: MessageSquare,\n message_sent: MessageSquare,\n // Video\n video: Play,\n video_complete: Play,\n video_contact: Play,\n video_complete_contact: Play,\n // Leads\n new_lead: UserPlus,\n page_views_contact: UserPlus,\n smart_link_clicked: UserPlus,\n // Page Views\n page_views: Eye,\n // Events\n upcoming_event: Calendar,\n // Reviews\n review_left: Star,\n // Tasks\n tasks: CheckSquare,\n // Announcements\n announcements: Bell,\n // Fantasy\n fantasy_point: Trophy,\n};\n\nconst getActivityIcon = (slug: ActivitySlug) => ACTIVITY_ICON_MAP[slug] ?? User;\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-black/[0.08]\" />\n </div>\n ) : (\n <div\n className={`flex size-8 items-center justify-center rounded-full bg-muted`}\n >\n <Icon className={`size-3.5 text-${textColor} opacity-60`} />\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 <User className={`size-12 text-${textColor} opacity-30`} />\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/widgets/QuickShareWidget.tsx"],"names":[],"mappings":"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","file":"chunk-IU657MP5.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 { Copy, ShoppingCart, ImageIcon } from \"lucide-react\";\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 <ImageIcon 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 <Copy 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 <ShoppingCart 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 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-todos.ts","../src/widgets/ToDoWidget.tsx"],"names":["useDataSourceConfig","useQuery","jsxs","jsx","ListChecks","ErrorState","Fragment","Plus","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-JRBJXVXL.cjs","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// Query key factory\nexport const todoKeys = {\n all: [\"todos\"] as const,\n list: () => [...todoKeys.all, \"list\"] as const,\n};\n\n// API types matching the Fluid API response\nexport type TodoContact = {\n id: number;\n first_name: string;\n last_name: string;\n};\n\nexport type ApiTodo = {\n id: number;\n body: string;\n due_at: string | null;\n completed_at: string | null;\n created_at: string;\n contact: TodoContact | null;\n};\n\n// Transformed todo for display\nexport type Todo = {\n id: number;\n body: string;\n dueAt: string | null;\n completedAt: string | null;\n createdAt: string;\n contactName: string | null;\n};\n\nexport function useTodos() {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n\n return useQuery({\n queryKey: todoKeys.list(),\n queryFn: async ({ signal }): Promise<Todo[]> => {\n const url = baseUrl ? `${baseUrl}/tasks` : \"/tasks\";\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 todos: ${response.status}`);\n }\n\n const data: ApiTodo[] = await response.json();\n return transformTodos(data);\n },\n });\n}\n\nfunction transformTodos(rawData: ApiTodo[]): Todo[] {\n return rawData.map((todo) => ({\n id: todo.id,\n body: todo.body,\n dueAt: todo.due_at,\n completedAt: todo.completed_at,\n createdAt: todo.created_at,\n contactName: todo.contact\n ? `${todo.contact.first_name} ${todo.contact.last_name}`\n : null,\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 { ListChecks, Plus } from \"lucide-react\";\nimport { useTodos } from \"../hooks/use-todos\";\nimport { ErrorState } from \"../components/error-state\";\n\ntype ToDoWidgetProps = 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 // Content\n maxItems?: number;\n};\n\nexport function ToDoWidget({\n // Title defaults\n titleEnabled = true,\n titleText = \"To-Do\",\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 // Content defaults\n maxItems = 5,\n\n className,\n ...props\n}: ToDoWidgetProps) {\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: todos = [], isLoading, isError } = useTodos();\n\n // Use API data if available, otherwise fall back to demo data\n const displayTodos = todos.length > 0 ? todos : [];\n\n // Filter out completed tasks\n const activeTodos = displayTodos.filter((todo) => !todo.completedAt);\n const todosToShow = activeTodos.slice(0, maxItems);\n const remainingCount = activeTodos.length - todosToShow.length;\n const isEmpty = activeTodos.length === 0;\n\n return (\n <div\n className={`overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} p-${padding} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Header */}\n <div className=\"mb-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {titleEnabled && titleText && (\n <h2\n className={`text-${titleFontSize} font-bold text-${titleColor}`}\n >\n {titleText}\n </h2>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {!isEmpty && !isLoading && (\n <span className={`text-2xl font-bold text-${accentColor}`}>\n {activeTodos.length}\n </span>\n )}\n <div\n className={`flex h-10 w-10 shrink-0 items-center justify-center`}\n >\n <ListChecks className={`h-5 w-5 text-${accentColor}-foreground`} />\n </div>\n </div>\n </div>\n\n {/* Loading state */}\n {isLoading ? (\n <div className=\"flex min-h-[120px] items-center justify-center\">\n <div className=\"h-6 w-6 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n ) : isError ? (\n /* Error state */\n <ErrorState />\n ) : isEmpty ? (\n /* Empty state */\n <div className=\"flex flex-col items-center justify-center py-8\">\n <p className={`text-center text-${textColor}/60`}>\n You&apos;ve got nothing else To-Do!\n </p>\n </div>\n ) : (\n /* Todo List */\n <>\n <div className=\"flex flex-col\">\n {todosToShow.map((todo, index) => (\n <div\n key={todo.id}\n className={`flex items-center gap-3 py-2.5 ${\n index !== todosToShow.length - 1\n ? `border-b border-${textColor}/10`\n : \"\"\n }`}\n >\n <input\n type=\"checkbox\"\n className={`h-5 w-5 rounded-full border-2 border-${textColor}/30 bg-transparent`}\n checked={!!todo.completedAt}\n readOnly\n />\n <span className=\"line-clamp-1 flex-1 text-sm\">{todo.body}</span>\n </div>\n ))}\n </div>\n\n {/* Footer */}\n <div className=\"mt-2 flex items-center justify-between\">\n {remainingCount > 0 && (\n <span className={`text-sm text-${textColor}/50 underline`}>\n {remainingCount} more task{remainingCount > 1 ? \"s\" : \"\"}\n </span>\n )}\n <div className=\"ml-auto\">\n <Plus className={`h-5 w-5 text-${textColor}/50`} />\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n\nexport const toDoWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ToDoWidget\",\n displayName: \"To-Do 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 todo list\",\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 todo list\",\n defaultValue: \"To-Do\",\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 todo 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 badge and icon\",\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 todo items to display\",\n min: 1,\n max: 20,\n step: 1,\n defaultValue: 5,\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} as const satisfies WidgetPropertySchema;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/MediaRenderer.tsx"],"names":["VideoIcon","ImageIcon","jsxs","jsx","result"],"mappings":"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","file":"chunk-MKUJOEAC.cjs","sourcesContent":["import { Image as ImageIcon } from \"lucide-react\";\nimport { Video as VideoIcon } from \"lucide-react\";\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\" ? VideoIcon : ImageIcon;\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 <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 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-catchups.ts","../src/widgets/CatchUpWidget.tsx"],"names":["useDataSourceConfig","useQuery","jsxs","jsx","Loader2","ErrorState","Sparkles","Fragment","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":";;;;;;;;;AAIO,IAAM,WAAA,GAAc;AAAA,EACzB,GAAA,EAAK,CAAC,UAAU,CAAA;AAAA,EAChB,MAAM,MAAM,CAAC,GAAG,WAAA,CAAY,KAAK,MAAM;AACzC,CAAA;AAQO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAc,GAAIA,2BAAA,EAAoB;AAEvD,EAAA,OAAOC,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,YAAY,IAAA,EAAK;AAAA,IAC3B,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;ACnBA,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,uBACEC,eAAA;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,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,YAAA,oBACCC,cAAA;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,oBACvCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,EACpD,eAAK,MAAA,EACR;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGC,SAAA,mBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,kBAAAA,cAAA,CAACC,mBAAA,EAAA,EAAQ,SAAA,EAAW,CAAA,0BAAA,EAA6B,WAAW,CAAA,CAAA,EAAI,CAAA,EAClE,CAAA,GACE,OAAA;AAAA;AAAA,yCAEDC,4BAAA,EAAA,EAAW;AAAA,YACV,KAAK,MAAA,KAAW,CAAA;AAAA;AAAA,0BAElBH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAACG,oBAAA,EAAA,EAAS,SAAA,EAAW,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,EAAI,CAAA;AAAA,4BACpDH,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAAA,EAA4B,QAAA,EAAA,uBAAA,EAEzC,CAAA;AAAA,4BACAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,oBAAA,EAAkB;AAAA,WAAA,EACtD;AAAA;AAAA;AAAA,0BAGAD,eAAA,CAAAK,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAJ,cAAA,CAAC,SAAI,SAAA,EAAU,aAAA,EACZ,yBAAe,GAAA,CAAI,CAAC,SAAS,KAAA,qBAC5BA,cAAA;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,kBAAAA,cAAA,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,oBACdD,eAAA,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,IACAM,kCAAA,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,IACDC,+BAAA,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,IACAA,+BAAA,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,IACDA,+BAAA,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,IACAC,iCAAA,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,IACDC,sCAAA,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-MNRHGJDQ.cjs","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// Query key factory\nexport const catchUpKeys = {\n all: [\"catchups\"] as const,\n list: () => [...catchUpKeys.all, \"list\"] as const,\n};\n\n// API types\nexport type CatchUp = {\n id: number;\n suggestion_title: string;\n};\n\nexport function useCatchUps() {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n\n return useQuery({\n queryKey: catchUpKeys.list(),\n queryFn: async ({ signal }): Promise<CatchUp[]> => {\n const url = baseUrl\n ? `${baseUrl}/affiliate_catch_up_actions.json`\n : \"/affiliate_catch_up_actions.json\";\n const response = await fetch(url, {\n headers: {\n \"content-type\": \"application/json\",\n ...getApiHeaders?.(),\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch catch ups: ${response.status}`);\n }\n\n return response.json();\n },\n });\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/rep-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { useCatchUps } from \"../hooks/use-catchups\";\nimport { Loader2, Sparkles } from \"lucide-react\";\nimport { ErrorState } from \"../components/error-state\";\n\n// Font size mapping for title\nconst fontSizeClasses: Record<FontSizeOptions, string> = {\n \"2xl\": \"text-2xl\",\n xl: \"text-xl\",\n lg: \"text-lg\",\n md: \"text-base\",\n sm: \"text-sm\",\n xs: \"text-xs\",\n};\n\ntype CatchUpWidgetProps = ComponentProps<\"div\"> & {\n // Title settings\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n // Design settings\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n // Display settings\n maxItems?: number;\n};\n\nexport function CatchUpWidget({\n // Title settings with defaults\n titleEnabled = true,\n titleText = \"Catch Ups\",\n titleFontSize = \"xl\",\n titleColor = \"foreground\",\n // Design settings with defaults\n background = {\n type: \"solid\",\n color: \"background\",\n },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n // Display settings with defaults\n maxItems = 5,\n className,\n ...props\n}: CatchUpWidgetProps) {\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n const { data = [], isLoading, isError } = useCatchUps();\n\n const catchUpsToShow = data.slice(0, maxItems);\n const moreCatchUps = data.length - catchUpsToShow.length;\n\n return (\n <div\n className={`flex flex-col rounded-${borderRadius} bg-${backgroundColor} p-${padding} text-${textColor} ${className || \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {titleEnabled && (\n <h3\n className={`${fontSizeClasses[titleFontSize]} font-semibold text-${titleColor}`}\n >\n {titleText}\n </h3>\n )}\n {!isLoading && !isError && data.length > 0 && (\n <span className={`text-3xl font-bold text-${accentColor}`}>\n {data.length}\n </span>\n )}\n </div>\n\n {/* Loading state */}\n {isLoading ? (\n <div className=\"flex min-h-[150px] flex-1 items-center justify-center\">\n <Loader2 className={`h-8 w-8 animate-spin text-${accentColor}`} />\n </div>\n ) : isError ? (\n /* Error state */\n <ErrorState />\n ) : data.length === 0 ? (\n /* Empty state */\n <div className=\"flex min-h-[150px] flex-1 flex-col items-center justify-center gap-2\">\n <Sparkles className={`h-8 w-8 text-${accentColor}`} />\n <p className=\"text-center font-semibold\">\n You&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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-activities.ts","../src/widgets/RecentActivityWidget.tsx"],"names":["useDataSourceConfig","useQuery","ShoppingCart","MessageSquare","Play","UserPlus","Eye","Calendar","Star","CheckSquare","Bell","Trophy","User","jsxs","jsx","useMemo","ErrorState","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-NCQQI2T2.cjs","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// Query key factory\nexport const activityKeys = {\n all: [\"activities\"] as const,\n list: () => [...activityKeys.all, \"list\"] as const,\n};\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: activityKeys.list(),\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 {\n Bell,\n Calendar,\n CheckSquare,\n Eye,\n MessageSquare,\n Play,\n ShoppingCart,\n Star,\n Trophy,\n User,\n UserPlus,\n} from \"lucide-react\";\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, typeof User> = {\n // Orders/Cart\n order_placed: ShoppingCart,\n abandoned_cart: ShoppingCart,\n cart_items_added: ShoppingCart,\n new_cart_items_added: ShoppingCart,\n // Messages\n direct_message: MessageSquare,\n comment_reply: MessageSquare,\n message_received: MessageSquare,\n message_sent: MessageSquare,\n // Video\n video: Play,\n video_complete: Play,\n video_contact: Play,\n video_complete_contact: Play,\n // Leads\n new_lead: UserPlus,\n page_views_contact: UserPlus,\n smart_link_clicked: UserPlus,\n // Page Views\n page_views: Eye,\n // Events\n upcoming_event: Calendar,\n // Reviews\n review_left: Star,\n // Tasks\n tasks: CheckSquare,\n // Announcements\n announcements: Bell,\n // Fantasy\n fantasy_point: Trophy,\n};\n\nconst getActivityIcon = (slug: ActivitySlug) => ACTIVITY_ICON_MAP[slug] ?? User;\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-black/[0.08]\" />\n </div>\n ) : (\n <div\n className={`flex size-8 items-center justify-center rounded-full bg-muted`}\n >\n <Icon className={`size-3.5 text-${textColor} opacity-60`} />\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 <User className={`size-12 text-${textColor} opacity-30`} />\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/widgets/CarouselWidget.tsx"],"names":[],"mappings":";;;;;;;AAwEO,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAS,EAAC;AAAA,EACV,kBAAA,GAAqB,GAAA;AAAA,EACrB,gBAAA,GAAmB,KAAA;AAAA,EACnB,cAAA,GAAiB,GAAA;AAAA,EACjB,KAAA,GAAQ,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,MAAA,EAAO;AAAA,EACjD,gBAAA,GAAmB,EAAA;AAAA,EACnB,YAAA,GAAe,MAAA;AAAA,EACf,OAAA,GAAU,CAAA;AAAA,EACV,SAAA,GAAY,MAAA;AAAA,EACZ,UAAA,GAAa,IAAA;AAAA,EACb,WAAA,GAAc,YAAA;AAAA,EACd,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY,YAAA;AAAA,EACZ,UAAA,GAAa,IAAA;AAAA,EACb,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,SAAA;AAAA,EACb,cAAA,GAAiB,IAAA;AAAA,EACjB,WAAA,GAAc,OAAA;AAAA,EACd,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,CAAC,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAY,OAAO,MAAA,GAAS,CAAA;AAClC,EAAA,MAAM,cAAc,MAAA,CAAO,MAAA;AAE3B,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,eAAA,CAAgB,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,IAAA,KAAS,cAAc,CAAA,EAAG;AAC5B,QAAA,OAAO,CAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA,GAAO,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,SAAA,EAAW,WAAW,CAAC,CAAA;AAE3B,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,eAAA,CAAgB,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAO,WAAA,GAAc,CAAA;AAAA,MACvB;AACA,MAAA,OAAO,IAAA,GAAO,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,SAAA,EAAW,WAAW,CAAC,CAAA;AAE3B,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,KAAA,KAAkB;AACjB,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,WAAA,EAAa;AACrC,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAW,WAAW;AAAA,GACzB;AAGA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAA,IAAoB,CAAC,SAAA,IAAa,SAAA,EAAW;AAElD,IAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,QAAA,EAAS;AAAA,IACX,GAAG,kBAAkB,CAAA;AAErB,IAAA,OAAO,MAAM,cAAc,UAAU,CAAA;AAAA,EACvC,GAAG,CAAC,gBAAA,EAAkB,oBAAoB,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAC,CAAA;AAGzE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,IAAgB,WAAA,IAAe,WAAA,GAAc,CAAA,EAAG;AAClD,MAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,YAAY,CAAC,CAAA;AAE9B,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,QAAA,EAAW,YAAY,CAAA,CAAA,EAAI,SAAS,CAAA,uBAAA,CAAA;AAAA,QAC/C,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA,EAAK;AAAA,QACzC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,yDAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA,EAAK;AAAA,YAE1C,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,QAAA,EAAA,WAAA,EAAE,CAAA;AAAA,8BAC5B,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,8BACtC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,iCAAA,EAEhD;AAAA,aAAA,EACF;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,wCAAA,EAA2C,YAAY,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MAC/E,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA,EAAK;AAAA,MAC1C,YAAA,EAAc,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MACrC,YAAA,EAAc,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MACrC,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,wBAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA,EAAK;AAAA,YAE1C,QAAA,kBAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,2DAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,SAAA,EAAW,CAAA,YAAA,EAAe,YAAA,GAAe,GAAG,CAAA,EAAA;AAAA,iBAC9C;AAAA,gBAEC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACX,IAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAU,sCAAA;AAAA,oBACV,OAAO,EAAE,QAAA,EAAU,QAAQ,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA,EAAK;AAAA,oBAG5D,QAAA,EAAA;AAAA,sCAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACb,QAAA,kBAAA,GAAA;AAAA,wBAAC,aAAA;AAAA,wBAAA;AAAA,0BACE,GAAG,6BAAA,CAA8B,KAAA,CAAM,OAAO;AAAA;AAAA,uBACjD,EACF,CAAA;AAAA,sBAGC,cAAA,oBACC,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,CAAA,qBAAA,EACT,WAAA,KAAgB,UAAA,GACZ,+CACA,UACN,CAAA,CAAA;AAAA,0BACA,KAAA,EAAO;AAAA,4BACL,OAAA,EAAA,CACG,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,CAAE,QAAQ,GAAA,EAAK,EAAE,CAAC,CAAA,IAC/C,EAAA,IAAM;AAAA;AACZ;AAAA,uBACF;AAAA,sCAIF,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,qCACT,KAAA,CAAM,UAAA,KAAe,SACjB,eAAA,GACA,KAAA,CAAM,eAAe,QAAA,GACnB,gBAAA,GACA,aACR,CAAA,CAAA,EACE,KAAA,CAAM,aAAa,KAAA,GACf,aAAA,GACA,MAAM,QAAA,KAAa,QAAA,GACjB,6BACA,gBACR,CAAA,CAAA;AAAA,0BAEA,QAAA,kBAAA,IAAA;AAAA,4BAAC,KAAA;AAAA,4BAAA;AAAA,8BACC,SAAA,EAAW,KAAK,OAAO,CAAA,oBAAA,CAAA;AAAA,8BACvB,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAU;AAAA,8BAG7B,QAAA,EAAA;AAAA,gDAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,mBAAA,EAAsB,KAAA,CAAM,UAAU,CAAA,CAAA,EACnD,QAAA,EAAA;AAAA,kCAAA,KAAA,CAAM,KAAA,oBACL,GAAA;AAAA,oCAAC,IAAA;AAAA,oCAAA;AAAA,sCACC,WAAW,CAAA,kCAAA,EAAqC,WAAW,SAAS,UAAA,KAAe,IAAA,GAAO,SAAS,UAAU,CAAA,CAAA;AAAA,sCAE5G,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,mCACT;AAAA,kCAED,MAAM,WAAA,oBACL,GAAA;AAAA,oCAAC,GAAA;AAAA,oCAAA;AAAA,sCACC,WAAW,CAAA,oBAAA,EAAuB,SAAS,SAAS,QAAA,KAAa,IAAA,GAAO,SAAS,QAAQ,CAAA,CAAA;AAAA,sCAExF,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,iCAAA,EAEJ,CAAA;AAAA,gCAGC,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,aAAA,IAAiB,UAAA,oBAC1C,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,KAAA,EAAQ,KAAA,CAAM,UAAU,CAAA,CAAA,EACtC,QAAA,kBAAA,GAAA;AAAA,kCAAC,MAAA;AAAA,kCAAA;AAAA,oCACC,IAAA,EAAM,UAAA;AAAA,oCACN,WAAW,CAAA,iCAAA,EAAoC,WAAW,CAAA,MAAA,EAAS,WAAW,wBAAwB,WAAW,CAAA,GAAA,CAAA;AAAA,oCACjH,OAAA,EAAO,IAAA;AAAA,oCAEP,8BAAC,GAAA,EAAA,EAAE,IAAA,EAAM,KAAA,CAAM,UAAA,EAAa,gBAAM,UAAA,EAAW;AAAA;AAAA,iCAC/C,EACF;AAAA;AAAA;AAAA;AAEJ;AAAA;AACF;AAAA,mBAAA;AAAA,kBA9EK,KAAA,CAAM;AAAA,iBAgFd;AAAA;AAAA;AACH;AAAA,SACF;AAAA,QAEC,cAAc,CAAA,oBACb,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,KAAK,OAAO,CAAA,iEAAA,EAAoE,MAAM,UAAA,KAAe,QAAA,GAAW,WAAW,EAAE,CAAA,CAAA;AAAA,YAGxI,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,qBACT,KAAA,CAAM,UAAA,KAAe,WACjB,CAAA,EAAA,EAAK,OAAO,gDACZ,EACN,CAAA,CAAA;AAAA,kBAEA,QAAA,kBAAA,GAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,WAAW,CAAA,wBAAA,EACT,KAAA,CAAM,UAAA,KAAe,QAAA,GAAW,mBAAmB,EACrD,CAAA,CAAA;AAAA,sBAEC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,qBACd,GAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAW,CAAA,+CAAA,EACT,KAAA,KAAU,YAAA,GACN,aACA,+BACN,CAAA,CAAA;AAAA,0BACA,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,0BAC9B,YAAA,EAAY,CAAA,YAAA,EAAe,KAAA,GAAQ,CAAC,CAAA,CAAA;AAAA,0BACpC,cAAA,EAAc,KAAA,KAAU,YAAA,GAAe,MAAA,GAAS;AAAA,yBAAA;AAAA,wBAR3C,OAAO,KAAK,CAAA;AAAA,uBAUpB;AAAA;AAAA;AACH;AAAA,eACF;AAAA,8BAGA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,gCACT,KAAA,CAAM,UAAA,KAAe,WACjB,CAAA,8CAAA,EAAiD,OAAO,KACxD,EACN,CAAA,CAAA;AAAA,kBAEA,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,UAAA,EAAY,YAAA,EAAc,QAAQ,QAAA,EAAU;AAAA;AAAA;AAC5D;AAAA;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;AAEO,IAAM,4BAAA,GAAqD;AAAA,EAChE,UAAA,EAAY,gBAAA;AAAA,EACZ,WAAA,EAAa,UAAA;AAAA,EACb,UAAA,EAAY;AAAA,IACV,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,IAClC,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,IACpC,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,MAAA;AAAO,GAC9B;AAAA,EACA,qBAAA,EAAuB,CAAC,QAAQ,CAAA;AAAA,EAChC,MAAA,EAAQ;AAAA;AAAA,IAEN,gBAAA,CAAiB;AAAA,MACf,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,kBAAA;AAAA,MACP,WAAA,EAAa,gCAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,aAAA,CAAc;AAAA,MACZ,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,oCAAA;AAAA,MACb,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,gBAAA,CAAiB;AAAA,MACf,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,gBAAA;AAAA,MACP,WAAA,EAAa,8BAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,aAAA,CAAc;AAAA,MACZ,YAAA,EAAc,YAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,YAAA;AAAA,MACP,WAAA,EAAa,kCAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA;AAAA,IAED;AAAA,MACE,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,WAAA;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,WAAA,EAAa,mCAAA;AAAA,MACb,YAAA,EAAc,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,MAAA,EAAO;AAAA,MACvD,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,IAAA;AAAA,QACjB,iBAAA,EAAmB;AAAA,OACrB;AAAA,MACA,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAa,0DAAA;AAAA,MACb,YAAA,EAAc,MAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAEA;AAAA,MACE,GAAA,EAAK,gBAAA;AAAA,MACL,KAAA,EAAO,sBAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,kCAAA;AAAA,MACb,GAAA,EAAK,GAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,EAAA;AAAA,MACN,YAAA,EAAc,GAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,YAAA;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA,oBAAA,CAAqB;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,cAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,WAAA,EAAa,kCAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,eAAA,CAAgB;AAAA,MACd,YAAA,EAAc,CAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,0BAAA;AAAA,MACb,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,yCAAA;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,6CAAA;AAAA,MACb,YAAA,EAAc,UAAA;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,YAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,qCAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA,aAAA,CAAc;AAAA,MACZ,YAAA,EAAc,SAAA;AAAA,MACd,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,oCAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA,IACD,kBAAA,CAAmB;AAAA,MACjB,YAAA,EAAc,SAAA;AAAA,MACd,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,WAAA,EAAa,0BAAA;AAAA,MACb,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA;AAAA,IAED;AAAA,MACE,GAAA,EAAK,kBAAA;AAAA,MACL,KAAA,EAAO,oBAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa,yCAAA;AAAA,MACb,YAAA,EAAc,KAAA;AAAA,MACd,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,GAAA,EAAK,oBAAA;AAAA,MACL,KAAA,EAAO,2BAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,0DAAA;AAAA,MACb,GAAA,EAAK,GAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,GAAA;AAAA,MACN,YAAA,EAAc,GAAA;AAAA,MACd,GAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,mBAAA,EAAqB;AAAA,KACvB;AAAA;AAAA,IAEA;AAAA,MACE,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAa,EAAA;AAAA,MACb,GAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO;AAAA;AACT,GACF;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,WAAA,EAAa,mCAAA;AAAA,IACb,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,GAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAO,cAAA;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,GAAA,EAAK,aAAA;AAAA,QACL,KAAA,EAAO,oBAAA;AAAA,QACP,IAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAa,gDAAA;AAAA,QACb,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,GAAA,EAAK,eAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,8BAAA;AAAA,QACb,YAAA,EAAc;AAAA,OAChB;AAAA,MACA;AAAA,QACE,GAAA,EAAK,YAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,qCAAA;AAAA,QACb,mBAAA,EAAqB;AAAA,OACvB;AAAA,MACA;AAAA,QACE,GAAA,EAAK,YAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAa,0BAAA;AAAA,QACb,mBAAA,EAAqB;AAAA;AACvB;AACF;AAEJ","file":"chunk-NGYR4RQF.js","sourcesContent":["import { Button } from \"../ui/button\";\nimport { ScrollArrows } from \"../ui/scroll-arrows\";\nimport type { ComponentProps } from \"react\";\nimport { useEffect, useState, useCallback } from \"react\";\nimport {\n MediaRenderer,\n getMediaPropsFromWidgetSchema,\n} from \"../components/MediaRenderer\";\nimport type {\n WidgetSchema,\n BorderRadiusOptions,\n ColorOptions,\n AlignOptions,\n FontSizeOptions,\n PaddingOptions,\n ButtonSizeOptions,\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 getButtonSizeField,\n} from \"../core/fields\";\n\ntype CarouselSlide = {\n id: string;\n content: WidgetSchema;\n title?: string;\n description?: string;\n buttonEnabled?: boolean;\n buttonText?: string;\n buttonVariant?:\n | \"default\"\n | \"secondary\"\n | \"outline\"\n | \"destructive\"\n | \"ghost\"\n | \"link\";\n buttonLink?: string;\n};\n\ntype CarouselWidgetProps = ComponentProps<\"div\"> & {\n slides?: CarouselSlide[];\n autoScrollInterval?: number;\n enableAutoScroll?: boolean;\n\n // Layout\n align?: AlignOptions;\n carouselHeight?: number;\n borderRadius?: BorderRadiusOptions;\n padding?: PaddingOptions;\n\n // Text Styling\n headerSize?: FontSizeOptions;\n headerColor?: ColorOptions;\n textSize?: FontSizeOptions;\n textColor?: ColorOptions;\n textWidth?: string;\n\n // Button\n showButton?: boolean;\n buttonColor?: ColorOptions;\n buttonSize?: ButtonSizeOptions;\n\n // Overlay\n overlayEnabled?: boolean;\n overlayType?: \"solid\" | \"gradient\";\n overlayIntensity?: number;\n};\n\nexport function CarouselWidget({\n slides = [],\n autoScrollInterval = 3000,\n enableAutoScroll = false,\n carouselHeight = 400,\n align = { vertical: \"bottom\", horizontal: \"left\" },\n overlayIntensity = 40,\n borderRadius = \"none\",\n padding = 0,\n textWidth = \"100%\",\n headerSize = \"lg\",\n headerColor = \"background\",\n textSize = \"md\",\n textColor = \"background\",\n showButton = true,\n buttonColor = \"background\",\n buttonSize = \"default\",\n overlayEnabled = true,\n overlayType = \"solid\",\n className,\n ...props\n}: CarouselWidgetProps) {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isHovered, setIsHovered] = useState(false);\n\n const hasSlides = slides.length > 0;\n const totalSlides = slides.length;\n\n const goToNext = useCallback(() => {\n if (!hasSlides) return;\n setCurrentIndex((prev) => {\n if (prev === totalSlides - 1) {\n return 0;\n }\n return prev + 1;\n });\n }, [hasSlides, totalSlides]);\n\n const goToPrevious = useCallback(() => {\n if (!hasSlides) return;\n setCurrentIndex((prev) => {\n if (prev === 0) {\n return totalSlides - 1;\n }\n return prev - 1;\n });\n }, [hasSlides, totalSlides]);\n\n const goToSlide = useCallback(\n (index: number) => {\n if (!hasSlides) return;\n if (index >= 0 && index < totalSlides) {\n setCurrentIndex(index);\n }\n },\n [hasSlides, totalSlides],\n );\n\n // Auto-scroll effect\n useEffect(() => {\n if (!enableAutoScroll || !hasSlides || isHovered) return;\n\n const intervalId = setInterval(() => {\n goToNext();\n }, autoScrollInterval);\n\n return () => clearInterval(intervalId);\n }, [enableAutoScroll, autoScrollInterval, hasSlides, isHovered, goToNext]);\n\n // Reset to first slide if slides change\n useEffect(() => {\n if (currentIndex >= totalSlides && totalSlides > 0) {\n setCurrentIndex(0);\n }\n }, [totalSlides, currentIndex]);\n\n if (!hasSlides) {\n return (\n <div\n className={`rounded-${borderRadius} ${className} w-full overflow-hidden`}\n style={{ minHeight: `${carouselHeight}px` }}\n {...props}\n >\n <div\n className=\"flex h-full w-full items-center justify-center bg-muted\"\n style={{ minHeight: `${carouselHeight}px` }}\n >\n <div className=\"flex flex-col items-center gap-2 text-muted-foreground\">\n <div className=\"text-4xl\">🎠</div>\n <p className=\"text-sm\">No slides added</p>\n <p className=\"text-xs text-muted-foreground/70\">\n Add slides to create a carousel\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={`relative w-full overflow-hidden rounded-${borderRadius} ${className}`}\n style={{ minHeight: `${carouselHeight}px` }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n {/* Slides Container */}\n <div\n className=\"relative h-full w-full\"\n style={{ minHeight: `${carouselHeight}px` }}\n >\n <div\n className=\"flex h-full transition-transform duration-500 ease-in-out\"\n style={{\n transform: `translateX(-${currentIndex * 100}%)`,\n }}\n >\n {slides.map((slide) => (\n <div\n key={slide.id}\n className=\"relative h-full w-full flex-shrink-0\"\n style={{ minWidth: \"100%\", minHeight: `${carouselHeight}px` }}\n >\n {/* Background image/content layer */}\n <div className=\"absolute inset-0 h-full w-full\">\n <MediaRenderer\n {...getMediaPropsFromWidgetSchema(slide.content)}\n />\n </div>\n\n {/* Dark overlay for text readability */}\n {overlayEnabled && (\n <div\n className={`absolute inset-0 z-9 ${\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(\"%\", \"\")) ||\n 40) / 100,\n }}\n />\n )}\n\n {/* Content box */}\n <div\n className={`absolute inset-x-0 z-10 flex px-3 ${\n align.horizontal === \"left\"\n ? \"justify-start\"\n : align.horizontal === \"center\"\n ? \"justify-center\"\n : \"justify-end\"\n } ${\n align.vertical === \"top\"\n ? \"top-0 pt-13\"\n : align.vertical === \"center\"\n ? \"top-1/2 -translate-y-1/2\"\n : \"bottom-0 pb-13\"\n }`}\n >\n <div\n className={`p-${padding} flex flex-col gap-3`}\n style={{ maxWidth: textWidth }}\n >\n {/* Heading and text */}\n <div className={`flex flex-col text-${align.horizontal}`}>\n {slide.title && (\n <h2\n className={`mb-2 leading-tight font-bold text-${headerColor} text-${headerSize === \"md\" ? \"base\" : headerSize}`}\n >\n {slide.title}\n </h2>\n )}\n {slide.description && (\n <p\n className={`leading-[13px] text-${textColor} text-${textSize === \"md\" ? \"base\" : textSize}`}\n >\n {slide.description}\n </p>\n )}\n </div>\n\n {/* Button */}\n {slide.buttonText && slide.buttonEnabled && showButton && (\n <div className={`text-${align.horizontal}`}>\n <Button\n size={buttonSize}\n className={`rounded-md py-1 font-semibold bg-${buttonColor} text-${buttonColor}-foreground hover:bg-${buttonColor}/90`}\n asChild\n >\n <a href={slide.buttonLink}>{slide.buttonText}</a>\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n {/* Dots and Navigation */}\n {totalSlides > 1 && (\n <div\n className={`p-${padding} absolute bottom-0 z-10 flex w-full items-center justify-between ${align.horizontal === \"center\" ? \"h-full\" : \"\"}`}\n >\n {/* Pagination dots - always at bottom */}\n <div\n className={`flex items-center ${\n align.horizontal === \"center\"\n ? `p-${padding} absolute inset-x-0 bottom-3 justify-center`\n : \"\"\n }`}\n >\n <div\n className={`flex items-center gap-2 ${\n align.horizontal === \"center\" ? \"justify-center\" : \"\"\n }`}\n >\n {slides.map((_, index) => (\n <button\n key={`dot-${index}`}\n className={`h-[6px] w-[6px] rounded-full transition-colors ${\n index === currentIndex\n ? \"bg-white\"\n : \"bg-white/40 hover:bg-white/60\"\n }`}\n onClick={() => goToSlide(index)}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={index === currentIndex ? \"true\" : \"false\"}\n />\n ))}\n </div>\n </div>\n\n {/* Navigation arrows - position changes based on alignment */}\n <div\n className={`flex items-center gap-[10px] ${\n align.horizontal === \"center\"\n ? `absolute inset-x-0 top-1/2 justify-between px-${padding}`\n : \"\"\n }`}\n >\n <ScrollArrows onPrevious={goToPrevious} onNext={goToNext} />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const carouselWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CarouselWidget\",\n displayName: \"Carousel\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"behavior\", label: \"Behavior\" },\n { id: \"data\", label: \"Data\" },\n ],\n dataSourceTargetProps: [\"slides\"],\n fields: [\n // Styling tab - Text Styling group\n getFontSizeField({\n defaultValue: \"lg\",\n key: \"headerSize\",\n label: \"Header Font Size\",\n description: \"Font size for the slide header\",\n tab: \"styling\",\n group: \"Text Styling\",\n }),\n getColorField({\n defaultValue: \"background\",\n key: \"headerColor\",\n label: \"Header Color\",\n description: \"Color variant for the slide header\",\n tab: \"styling\",\n group: \"Text Styling\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Text Styling\",\n },\n getFontSizeField({\n defaultValue: \"md\",\n key: \"textSize\",\n label: \"Text Font Size\",\n description: \"Font size for the slide text\",\n tab: \"styling\",\n group: \"Text Styling\",\n }),\n getColorField({\n defaultValue: \"background\",\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Color variant for the slide text\",\n tab: \"styling\",\n group: \"Text Styling\",\n }),\n // Styling tab - Layout group\n {\n key: \"align\",\n label: \"Alignment\",\n type: \"alignment\",\n description: \"Alignment of the carousel content\",\n defaultValue: { vertical: \"bottom\", horizontal: \"left\" },\n options: {\n verticalEnabled: true,\n horizontalEnabled: true,\n },\n tab: \"styling\",\n group: \"Layout\",\n },\n {\n key: \"textWidth\",\n label: \"Content Width\",\n type: \"text\",\n description: \"Maximum width for slide content (e.g., 100%, 50%, 600px)\",\n defaultValue: \"100%\",\n tab: \"styling\",\n group: \"Layout\",\n },\n // Styling tab - Design group\n {\n key: \"carouselHeight\",\n label: \"Carousel Height (px)\",\n type: \"number\",\n description: \"Height of the carousel in pixels\",\n min: 100,\n max: 1000,\n step: 10,\n defaultValue: 400,\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"separator2\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getBorderRadiusField({\n defaultValue: \"md\",\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Rounded corners for the carousel\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getPaddingField({\n defaultValue: 4,\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding for the carousel\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"overlayEnabled\",\n label: \"Enable Overlay\",\n type: \"boolean\",\n description: \"Add background overlay to slide content\",\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 slide content\",\n defaultValue: \"gradient\",\n options: [\n { label: \"Solid\", value: \"solid\" },\n { label: \"Gradient\", value: \"gradient\" },\n ],\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n {\n key: \"overlayIntensity\",\n label: \"Overlay Intensity\",\n type: \"slider\",\n description: \"Opacity of the overlay 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: \"showButton\",\n label: \"Show Button\",\n type: \"boolean\",\n description: \"Display the button in slide content\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n defaultValue: \"primary\",\n key: \"buttonColor\",\n label: \"Button Color\",\n description: \"Color variant for the slide button\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"showButton\",\n }),\n getButtonSizeField({\n defaultValue: \"default\",\n key: \"buttonSize\",\n label: \"Button Size\",\n description: \"Size of the slide button\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"showButton\",\n }),\n // Behavior tab - Auto-Scroll group\n {\n key: \"enableAutoScroll\",\n label: \"Enable Auto-Scroll\",\n type: \"boolean\",\n description: \"Automatically advance to the next slide\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Auto-Scroll\",\n },\n {\n key: \"autoScrollInterval\",\n label: \"Auto-Scroll Interval (ms)\",\n type: \"number\",\n description: \"Time in milliseconds between automatic slide transitions\",\n min: 1000,\n max: 10000,\n step: 500,\n defaultValue: 3000,\n tab: \"behavior\",\n group: \"Auto-Scroll\",\n requiresKeyToBeTrue: \"enableAutoScroll\",\n },\n // Data tab - Data Configuration group\n {\n key: \"dataSource\",\n label: \"Data Source\",\n type: \"dataSource\",\n description: \"\",\n tab: \"data\",\n group: \"Data Configuration\",\n },\n ],\n // Per-item configuration schema for custom data sources\n itemConfigSchema: {\n description: \"Configure settings for this slide\",\n fields: [\n {\n key: \"title\",\n label: \"Custom Title\",\n type: \"text\",\n description: \"Override the item's title for this slide\",\n },\n {\n key: \"description\",\n label: \"Custom Description\",\n type: \"textarea\",\n description: \"Override the item's description for this slide\",\n rows: 3,\n },\n {\n key: \"buttonEnabled\",\n label: \"Show Button\",\n type: \"boolean\",\n description: \"Show the button in the slide\",\n defaultValue: false,\n },\n {\n key: \"buttonText\",\n label: \"Button Text\",\n type: \"text\",\n description: \"Text to display on the slide button\",\n requiresKeyToBeTrue: \"buttonEnabled\",\n },\n {\n key: \"buttonLink\",\n label: \"Button Link\",\n type: \"text\",\n description: \"URL for the slide button\",\n requiresKeyToBeTrue: \"buttonEnabled\",\n },\n ],\n },\n} as const satisfies WidgetPropertySchema;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/widgets/EmbedWidget.tsx"],"names":["jsx","jsxs","Globe","getBorderRadiusField"],"mappings":"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","file":"chunk-NXAZEYLC.cjs","sourcesContent":["import { Globe } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport {\n getBorderRadiusField,\n type WidgetPropertySchema,\n} from \"@fluid-app/rep-core/registries\";\nimport type { BorderRadiusOptions } from \"@fluid-app/rep-core/types\";\n\ntype EmbedWidgetProps = ComponentProps<\"div\"> & {\n url?: string;\n title?: string;\n height?: number;\n fullScreen?: boolean;\n allowFullscreen?: boolean;\n loading?: \"eager\" | \"lazy\";\n borderRadius?: BorderRadiusOptions;\n};\n\nexport function EmbedWidget({\n url = \"\",\n title = \"Embedded Content\",\n height,\n fullScreen = false,\n allowFullscreen = true,\n loading = \"lazy\",\n borderRadius = \"md\",\n className,\n ...props\n}: EmbedWidgetProps) {\n const isFullScreen = fullScreen;\n\n // Show placeholder if no URL is provided\n if (!url) {\n return (\n <div\n className={`flex items-center justify-center rounded-${borderRadius} border-2 border-dashed border-border bg-muted text-muted-foreground ${isFullScreen ? \"h-full\" : \"\"} ${className}`}\n style={isFullScreen ? undefined : { height: `${height}px` }}\n {...props}\n >\n <div className=\"flex flex-col items-center gap-2 p-6 text-center\">\n <Globe className=\"h-12 w-12 opacity-50\" />\n <p className=\"text-sm font-medium\">\n Enter a URL to embed external content\n </p>\n <p className=\"text-xs opacity-75\">\n Configure the URL in the properties panel\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={`w-full ${isFullScreen ? \"h-full\" : \"\"} ${className}`}\n {...props}\n >\n <iframe\n src={url}\n title={title}\n width=\"100%\"\n height={isFullScreen ? \"100%\" : height}\n loading={loading}\n allowFullScreen={allowFullscreen}\n className={`rounded-${borderRadius} border border-border`}\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox\"\n />\n </div>\n );\n}\n\nexport const embedWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"EmbedWidget\",\n displayName: \"Embed\",\n fields: [\n // Content\n {\n key: \"url\",\n label: \"URL\",\n type: \"text\",\n description: \"The URL of the external site to embed\",\n placeholder: \"https://example.com\",\n defaultValue: \"\",\n group: \"Content\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Accessibility title for the embedded content\",\n defaultValue: \"Embedded Content\",\n group: \"Content\",\n },\n\n // Design\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the embed container\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n {\n key: \"fullScreen\",\n label: \"Full Screen\",\n type: \"boolean\",\n description: \"When enabled, the embed fills the available space\",\n defaultValue: false,\n group: \"Design\",\n },\n {\n key: \"height\",\n label: \"Height (px)\",\n type: \"number\",\n description: \"Height of the embedded iframe in pixels\",\n min: 100,\n max: 1200,\n step: 50,\n defaultValue: 400,\n group: \"Design\",\n requiresKeyValue: {\n key: \"fullScreen\",\n value: false,\n },\n },\n\n // Settings\n {\n key: \"allowFullscreen\",\n label: \"Allow Fullscreen\",\n type: \"boolean\",\n description: \"Allow the embedded content to use fullscreen mode\",\n defaultValue: true,\n group: \"Settings\",\n },\n {\n key: \"loading\",\n label: \"Loading\",\n type: \"select\",\n description: \"When to load the embedded content\",\n options: [\n { label: \"Lazy (on scroll)\", value: \"lazy\" },\n { label: \"Eager (immediately)\", value: \"eager\" },\n ],\n defaultValue: \"lazy\",\n group: \"Settings\",\n },\n ],\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/widgets/SpacerWidget.tsx"],"names":[],"mappings":";;;AAUO,SAAS,YAAA,CAAa;AAAA,EAC3B,YAAA,GAAe,EAAA;AAAA,EACf,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACE,GAAA;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;AAAA;AAAA,GACN;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-SBHL3GFW.js","sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\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\nexport function SpacerWidget({\n customHeight = 32,\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 );\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-calendar-events.ts","../src/widgets/CalendarWidget.tsx"],"names":["useDataSourceConfig","useQuery","jsxs","jsx","useState","useMemo","ErrorState","ChevronLeft","ChevronRight","ChevronsDown","ChevronsUp","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-TFJQ4525.cjs","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\n\n// Query key factory\nexport const calendarEventKeys = {\n all: [\"calendar-events\"] as const,\n list: () => [...calendarEventKeys.all, \"list\"] as const,\n};\n\n// API types\nexport type CalendarEvent = {\n id: number;\n title: string;\n description?: {\n id?: number | null;\n name?: string | null;\n body?: string | null;\n record_type?: string | null;\n record_id?: number | null;\n created_at?: string | null;\n updated_at?: string | null;\n locale?: string | null;\n } | null;\n color?: string | null;\n url?: string | null;\n start: string;\n end: string;\n active?: boolean | null;\n time_zone?: string | null;\n status?: string | null;\n image_url?: string | null;\n images?: unknown[] | null;\n venue?: string | null;\n countries?: string[] | null;\n hasTomorrow?: boolean | null;\n hasYesterday?: boolean | null;\n isAllDay?: boolean | null;\n};\n\nexport function useCalendarEvents() {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n\n return useQuery({\n queryKey: calendarEventKeys.list(),\n queryFn: async ({ signal }): Promise<CalendarEvent[]> => {\n const url = baseUrl\n ? `${baseUrl}/company/events?status=active`\n : \"/company/events?status=active\";\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 calendar events: ${response.status}`);\n }\n\n return response.json();\n },\n });\n}\n","import { useState, 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 useCalendarEvents,\n type CalendarEvent,\n} from \"../hooks/use-calendar-events\";\nimport { ErrorState } from \"../components/error-state\";\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsDown,\n ChevronsUp,\n} from \"lucide-react\";\n\n// Utility to get days in a month\nconst getDaysInMonth = (year: number, month: number) => {\n return new Date(year, month + 1, 0).getDate();\n};\n\n// Utility to get the first day of month (0 = Sunday, 1 = Monday, etc.)\nconst getFirstDayOfMonth = (year: number, month: number) => {\n return new Date(year, month, 1).getDay();\n};\n\n// Generate calendar grid for a month\nconst generateMonthGrid = (year: number, month: number) => {\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const today = new Date();\n\n const days: Array<{\n date: Date | null;\n isToday: boolean;\n isCurrentMonth: boolean;\n }> = [];\n\n // Add empty slots for days before the 1st\n for (let i = 0; i < firstDay; i++) {\n days.push({ date: null, isToday: false, isCurrentMonth: false });\n }\n\n // Add days of the month\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n const isToday =\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear();\n days.push({ date, isToday, isCurrentMonth: true });\n }\n\n return days;\n};\n\n// Generate week grid for current week\nconst generateWeekGrid = () => {\n const today = new Date();\n const currentDay = today.getDay();\n const days: Array<{\n date: Date;\n isToday: boolean;\n }> = [];\n\n for (let i = 0; i < 7; i++) {\n const date = new Date(today);\n date.setDate(today.getDate() - currentDay + i);\n days.push({\n date,\n isToday: date.toDateString() === today.toDateString(),\n });\n }\n\n return days;\n};\n\n// Get events for a specific date\nconst getEventsForDate = (date: Date, events: CalendarEvent[]) => {\n const dayStart = new Date(date);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(date);\n dayEnd.setHours(23, 59, 59, 999);\n\n return events.filter((event) => {\n const eventStart = new Date(event.start);\n const eventEnd = new Date(event.end);\n return eventStart <= dayEnd && eventEnd >= dayStart;\n });\n};\n\n// Check if a date has events\nconst hasEventsOnDate = (date: Date | null, events: CalendarEvent[]) => {\n if (!date) return false;\n return getEventsForDate(date, events).length > 0;\n};\n\n// Event item component\nconst EventItem = ({\n title,\n start,\n end,\n color,\n isAllDay,\n accentColor,\n}: CalendarEvent & { accentColor?: string }) => {\n const startTime = new Date(start).toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n const endTime = new Date(end).toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n\n return (\n <div className=\"flex gap-x-2\">\n <div\n className=\"w-0.5 shrink-0 rounded-full\"\n style={{ backgroundColor: color || accentColor }}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium\">{title}</div>\n <div className=\"text-xs opacity-60\">\n {isAllDay ? \"All day\" : `${startTime} - ${endTime}`}\n </div>\n </div>\n </div>\n );\n};\n\nconst dayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\ntype DayButtonProps = {\n date: Date;\n isToday: boolean;\n isSelected: boolean;\n hasEvents: boolean;\n accentColor: string;\n onClick: () => void;\n extraClassName?: string;\n};\n\nfunction DayButton({\n date,\n isToday,\n isSelected,\n hasEvents,\n accentColor,\n onClick,\n extraClassName = \"\",\n}: DayButtonProps) {\n return (\n <button\n onClick={onClick}\n className={`relative flex aspect-square items-center justify-center rounded-full text-sm transition-colors ${\n isSelected\n ? `bg-${accentColor} text-${accentColor}-foreground`\n : isToday\n ? `bg-${accentColor}/30 text-${accentColor}-foreground hover:bg-${accentColor}/50`\n : `hover:bg-${accentColor}/50 hover:text-${accentColor}-foreground`\n } ${extraClassName}`}\n >\n {date.getDate()}\n {hasEvents && (\n <div\n className={`absolute bottom-1 h-1 w-1 rounded-full bg-${accentColor}`}\n />\n )}\n </button>\n );\n}\n\ntype CalendarWidgetProps = 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\nexport function CalendarWidget({\n // Title defaults\n titleEnabled = true,\n titleText = \"Calendar\",\n titleFontSize = \"xl\",\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 className,\n ...props\n}: CalendarWidgetProps) {\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 today = new Date();\n const [currentMonth, setCurrentMonth] = useState(today.getMonth());\n const [currentYear, setCurrentYear] = useState(today.getFullYear());\n const [isCollapsed, setIsCollapsed] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date | null>(today);\n\n const { data: events = [], isLoading, isError } = useCalendarEvents();\n\n // Generate calendar grids\n const monthGrid = useMemo(\n () => generateMonthGrid(currentYear, currentMonth),\n [currentYear, currentMonth],\n );\n const weekGrid = useMemo(() => generateWeekGrid(), []);\n\n // Get events for selected date\n const selectedDateEvents = useMemo(() => {\n if (!selectedDate) return [];\n return getEventsForDate(selectedDate, events);\n }, [selectedDate, events]);\n\n // Navigation handlers\n const goToPrevMonth = () => {\n if (currentMonth === 0) {\n setCurrentMonth(11);\n setCurrentYear(currentYear - 1);\n } else {\n setCurrentMonth(currentMonth - 1);\n }\n };\n\n const goToNextMonth = () => {\n if (currentMonth === 11) {\n setCurrentMonth(0);\n setCurrentYear(currentYear + 1);\n } else {\n setCurrentMonth(currentMonth + 1);\n }\n };\n\n const monthYearLabel = new Date(currentYear, currentMonth).toLocaleString(\n \"en-US\",\n {\n month: \"long\",\n year: \"numeric\",\n },\n );\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} ${className}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Title */}\n {titleEnabled && titleText && (\n <div className={`p-${padding} pb-0`}>\n <h2 className={`text-${titleFontSize} font-bold text-${titleColor}`}>\n {titleText}\n </h2>\n </div>\n )}\n\n {/* Loading state */}\n {isLoading ? (\n <div\n className={`flex min-h-[300px] items-center justify-center p-${padding}`}\n >\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 ) : (\n <div className={`p-${padding}`}>\n {/* Desktop: Side by side layout */}\n <div className=\"@md:flex @md:gap-6\">\n {/* Calendar Section */}\n <div className=\"@md:flex-none\">\n {/* Month/Year Header with Navigation */}\n <div className=\"mb-4 flex items-center justify-between\">\n <button\n onClick={goToPrevMonth}\n className=\"rounded-full p-1 hover:bg-foreground/10\"\n aria-label=\"Previous month\"\n >\n <ChevronLeft />\n </button>\n\n <span className=\"text-base font-semibold\">\n {monthYearLabel}\n </span>\n\n <button\n onClick={goToNextMonth}\n className=\"rounded-full p-1 hover:bg-foreground/10\"\n aria-label=\"Next month\"\n >\n <ChevronRight />\n </button>\n </div>\n\n {/* Day Headers */}\n <div className=\"mb-2 grid grid-cols-7 gap-1 text-center\">\n {dayNames.map((day, idx) => (\n <div\n key={idx}\n className=\"text-xs font-medium uppercase opacity-60\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar Grid - Week view on mobile when collapsed */}\n {isCollapsed && (\n <div className=\"grid grid-cols-7 gap-1 @md:hidden\">\n {weekGrid.map(({ date, isToday }, idx) => (\n <DayButton\n key={idx}\n date={date}\n isToday={isToday}\n isSelected={\n selectedDate?.toDateString() === date.toDateString()\n }\n hasEvents={hasEventsOnDate(date, events)}\n accentColor={accentColor}\n onClick={() => setSelectedDate(date)}\n />\n ))}\n </div>\n )}\n\n {/* Month view (always on desktop, when not collapsed on mobile) */}\n <div\n className={`grid grid-cols-7 gap-1 ${isCollapsed ? \"hidden @md:grid\" : \"grid\"}`}\n >\n {monthGrid.map((day, idx) => {\n if (!day.date) {\n return <div key={idx} className=\"aspect-square\" />;\n }\n\n return (\n <DayButton\n key={idx}\n date={day.date}\n isToday={day.isToday}\n isSelected={\n selectedDate?.toDateString() === day.date.toDateString()\n }\n hasEvents={hasEventsOnDate(day.date, events)}\n accentColor={accentColor}\n onClick={() => setSelectedDate(day.date)}\n extraClassName=\"p-2 @md:m-3\"\n />\n );\n })}\n </div>\n\n {/* Mobile collapse toggle */}\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className={`ml-2 flex w-full items-center justify-center gap-3 rounded-full p-1 text-${textColor}/50 @md:hidden`}\n aria-label={\n isCollapsed ? \"Expand calendar\" : \"Collapse calendar\"\n }\n >\n <div className={`h-1 w-1/2 bg-${textColor}/50`} />\n {isCollapsed ? <ChevronsDown /> : <ChevronsUp />}\n <div className={`h-1 w-1/2 bg-${textColor}/50`} />\n </button>\n </div>\n\n {/* Events Panel */}\n <div className=\"mt-4 border-muted pt-4 @md:mt-0 @md:w-56 @md:border-l @md:pt-0 @md:pl-6\">\n <div className=\"mb-2 text-sm font-medium opacity-60\">\n {selectedDate\n ? selectedDate.toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n month: \"short\",\n day: \"numeric\",\n })\n : \"Select a date\"}\n </div>\n\n {selectedDateEvents.length > 0 ? (\n <div className=\"flex flex-col gap-3\">\n {selectedDateEvents.map((event, idx) => (\n <EventItem\n key={`${event.id}-${idx}`}\n {...event}\n accentColor={`var(--${accentColor})`}\n />\n ))}\n </div>\n ) : (\n <div className=\"text-sm opacity-50\">No events</div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const calendarWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CalendarWidget\",\n displayName: \"Calendar 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 calendar\",\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 calendar\",\n defaultValue: \"Calendar\",\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 calendar 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 calendar 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 today highlight and event indicators\",\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 calendar 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 calendar container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/widgets/QuickShareWidget.tsx"],"names":["jsxs","jsx","ImageIcon","QRCodeSVG","Copy","ShoppingCart","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-VBJ5FT4C.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 { Copy, ShoppingCart, ImageIcon } from \"lucide-react\";\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 <ImageIcon 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 <Copy 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 <ShoppingCart 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"]}