@fluid-app/portal-sdk 0.1.238 → 0.1.239

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 (125) hide show
  1. package/dist/{CalendarWidget-BaGML5Xh.mjs → CalendarWidget-BXxNxHDV.mjs} +2 -2
  2. package/dist/{CalendarWidget-BaGML5Xh.mjs.map → CalendarWidget-BXxNxHDV.mjs.map} +1 -1
  3. package/dist/{CalendarWidget-oGK122s9.cjs → CalendarWidget-VjQXZW8B.cjs} +2 -2
  4. package/dist/{CalendarWidget-oGK122s9.cjs.map → CalendarWidget-VjQXZW8B.cjs.map} +1 -1
  5. package/dist/{CardWidget-CqYjGkq-.mjs → CardWidget-BNkMlxQ3.mjs} +2 -2
  6. package/dist/{CardWidget-CqYjGkq-.mjs.map → CardWidget-BNkMlxQ3.mjs.map} +1 -1
  7. package/dist/{CardWidget-CSLSlKM6.cjs → CardWidget-C3I9OwgS.cjs} +2 -2
  8. package/dist/{CardWidget-CSLSlKM6.cjs.map → CardWidget-C3I9OwgS.cjs.map} +1 -1
  9. package/dist/{CardWidget-DjhK0yr-.cjs → CardWidget-CraWMttj.cjs} +3 -3
  10. package/dist/{CarouselWidget-DlxYQB5j.cjs → CarouselWidget-CiKlooUF.cjs} +2 -2
  11. package/dist/{CarouselWidget-DlxYQB5j.cjs.map → CarouselWidget-CiKlooUF.cjs.map} +1 -1
  12. package/dist/{CarouselWidget-CdQhlRrW.mjs → CarouselWidget-p8Z6L-G5.mjs} +2 -2
  13. package/dist/{CarouselWidget-CdQhlRrW.mjs.map → CarouselWidget-p8Z6L-G5.mjs.map} +1 -1
  14. package/dist/{CatchUpWidget-BQjtjcGR.mjs → CatchUpWidget-B9DQlzd_.mjs} +2 -2
  15. package/dist/{CatchUpWidget-BQjtjcGR.mjs.map → CatchUpWidget-B9DQlzd_.mjs.map} +1 -1
  16. package/dist/{CatchUpWidget-B1Muaurg.cjs → CatchUpWidget-SY7hOHk6.cjs} +2 -2
  17. package/dist/{CatchUpWidget-B1Muaurg.cjs.map → CatchUpWidget-SY7hOHk6.cjs.map} +1 -1
  18. package/dist/{ContainerWidget-Cjwrq2MS.cjs → ContainerWidget-BXpdj06u.cjs} +2 -2
  19. package/dist/{ContainerWidget-Cjwrq2MS.cjs.map → ContainerWidget-BXpdj06u.cjs.map} +1 -1
  20. package/dist/{ContainerWidget-DYThUtiZ.mjs → ContainerWidget-CpwvcxFm.mjs} +2 -2
  21. package/dist/{ContainerWidget-DYThUtiZ.mjs.map → ContainerWidget-CpwvcxFm.mjs.map} +1 -1
  22. package/dist/ContainerWidget-CyfPYEAv.cjs +8 -0
  23. package/dist/{FluidProvider-B3DjYoUW.mjs → FluidProvider-DL5rChtj.mjs} +67 -84
  24. package/dist/FluidProvider-DL5rChtj.mjs.map +1 -0
  25. package/dist/{FluidProvider-DcpUKHrn.cjs → FluidProvider-D_PHVlUU.cjs} +67 -84
  26. package/dist/FluidProvider-D_PHVlUU.cjs.map +1 -0
  27. package/dist/{ImageWidget-xcE0sFf-.cjs → ImageWidget-CbQVxMe3.cjs} +2 -2
  28. package/dist/{ImageWidget-xcE0sFf-.cjs.map → ImageWidget-CbQVxMe3.cjs.map} +1 -1
  29. package/dist/{ImageWidget-CFTpbu8X.mjs → ImageWidget-vNWT_O1E.mjs} +2 -2
  30. package/dist/{ImageWidget-CFTpbu8X.mjs.map → ImageWidget-vNWT_O1E.mjs.map} +1 -1
  31. package/dist/{LayoutWidget-CK-SvFQL.cjs → LayoutWidget-BIfNHlVE.cjs} +2 -2
  32. package/dist/{LayoutWidget-CK-SvFQL.cjs.map → LayoutWidget-BIfNHlVE.cjs.map} +1 -1
  33. package/dist/{LayoutWidget-Cx5ZyXSU.mjs → LayoutWidget-CC3oK78H.mjs} +2 -2
  34. package/dist/{LayoutWidget-Cx5ZyXSU.mjs.map → LayoutWidget-CC3oK78H.mjs.map} +1 -1
  35. package/dist/{LayoutWidget-DuueFNAS.cjs → LayoutWidget-LdF_cKrB.cjs} +3 -3
  36. package/dist/{LinkWidget-B14FTQP7.cjs → LinkWidget-BoR7nVbH.cjs} +2 -2
  37. package/dist/{LinkWidget-B14FTQP7.cjs.map → LinkWidget-BoR7nVbH.cjs.map} +1 -1
  38. package/dist/{LinkWidget-CQHmKO-O.mjs → LinkWidget-CO-Cxf7Z.mjs} +2 -2
  39. package/dist/{LinkWidget-CQHmKO-O.mjs.map → LinkWidget-CO-Cxf7Z.mjs.map} +1 -1
  40. package/dist/{LinkWidget-CPmE8gpd.cjs → LinkWidget-M9YzMJT8.cjs} +2 -2
  41. package/dist/{ListWidget-YvCp7XDq.cjs → ListWidget-CuSjvwEw.cjs} +3 -3
  42. package/dist/{ListWidget-wBDnXWxa.cjs → ListWidget-CzljZ1LA.cjs} +3 -3
  43. package/dist/{ListWidget-wBDnXWxa.cjs.map → ListWidget-CzljZ1LA.cjs.map} +1 -1
  44. package/dist/{ListWidget-BnyD2Hpc.mjs → ListWidget-f88QhcGI.mjs} +3 -3
  45. package/dist/{ListWidget-BnyD2Hpc.mjs.map → ListWidget-f88QhcGI.mjs.map} +1 -1
  46. package/dist/{MediaRenderer-CfgWd0cC.cjs → MediaRenderer-CvN8Ku0i.cjs} +4 -4
  47. package/dist/MediaRenderer-CvN8Ku0i.cjs.map +1 -0
  48. package/dist/{MediaRenderer-CqUpv3St.mjs → MediaRenderer-DMdb_5xw.mjs} +4 -4
  49. package/dist/MediaRenderer-DMdb_5xw.mjs.map +1 -0
  50. package/dist/{MessagingScreen-BzWV22JZ.cjs → MessagingScreen-Dkh3Dsp7.cjs} +2 -2
  51. package/dist/{MessagingScreen-BzWV22JZ.cjs.map → MessagingScreen-Dkh3Dsp7.cjs.map} +1 -1
  52. package/dist/{MessagingScreen-CPBUg-32.cjs → MessagingScreen-Dxy2VQbO.cjs} +22 -22
  53. package/dist/{MessagingScreen-BBqwXPZB.mjs → MessagingScreen-mt1u3Bs1.mjs} +2 -2
  54. package/dist/{MessagingScreen-BBqwXPZB.mjs.map → MessagingScreen-mt1u3Bs1.mjs.map} +1 -1
  55. package/dist/{MySiteWidget-COj7yYQF.mjs → MySiteWidget-BnjPrQxE.mjs} +2 -2
  56. package/dist/{MySiteWidget-COj7yYQF.mjs.map → MySiteWidget-BnjPrQxE.mjs.map} +1 -1
  57. package/dist/{MySiteWidget-DRH4q_YV.cjs → MySiteWidget-C8eFWHOT.cjs} +2 -2
  58. package/dist/{MySiteWidget-DRH4q_YV.cjs.map → MySiteWidget-C8eFWHOT.cjs.map} +1 -1
  59. package/dist/{NestedWidget-C_2XwnW0.cjs → NestedWidget-CEoAO2sp.cjs} +3 -3
  60. package/dist/{NestedWidget-C_2XwnW0.cjs.map → NestedWidget-CEoAO2sp.cjs.map} +1 -1
  61. package/dist/{NestedWidget-CXIvsJdD.cjs → NestedWidget-CMCZjV6t.cjs} +3 -3
  62. package/dist/{NestedWidget-WJoWOFda.mjs → NestedWidget-RuyrOrFn.mjs} +3 -3
  63. package/dist/{NestedWidget-WJoWOFda.mjs.map → NestedWidget-RuyrOrFn.mjs.map} +1 -1
  64. package/dist/{PointsWidget-DoUljaNY.mjs → PointsWidget-C2KB4k48.mjs} +2 -2
  65. package/dist/{PointsWidget-DoUljaNY.mjs.map → PointsWidget-C2KB4k48.mjs.map} +1 -1
  66. package/dist/{PointsWidget-CLUWrFjZ.cjs → PointsWidget-DLp-PYus.cjs} +2 -2
  67. package/dist/{PointsWidget-CLUWrFjZ.cjs.map → PointsWidget-DLp-PYus.cjs.map} +1 -1
  68. package/dist/{ProfileScreen-C0nmvuW1.cjs → ProfileScreen-BMe-dQi7.cjs} +2 -2
  69. package/dist/{ProfileScreen-C0nmvuW1.cjs.map → ProfileScreen-BMe-dQi7.cjs.map} +1 -1
  70. package/dist/{ProfileScreen-MCfnv8eT.cjs → ProfileScreen-ChCZZ91o.cjs} +22 -22
  71. package/dist/{ProfileScreen-CwQr_Km7.mjs → ProfileScreen-_1GlBr7z.mjs} +2 -2
  72. package/dist/{ProfileScreen-CwQr_Km7.mjs.map → ProfileScreen-_1GlBr7z.mjs.map} +1 -1
  73. package/dist/{RecentActivityWidget-C6RwlUUw.cjs → RecentActivityWidget-BNW9aFT4.cjs} +2 -2
  74. package/dist/{RecentActivityWidget-C6RwlUUw.cjs.map → RecentActivityWidget-BNW9aFT4.cjs.map} +1 -1
  75. package/dist/{RecentActivityWidget-zQxtUECm.mjs → RecentActivityWidget-DelPdiwR.mjs} +2 -2
  76. package/dist/{RecentActivityWidget-zQxtUECm.mjs.map → RecentActivityWidget-DelPdiwR.mjs.map} +1 -1
  77. package/dist/{ScreenRenderer-Bk23YOtN.mjs → ScreenRenderer-ClYgfQf_.mjs} +2 -2
  78. package/dist/{ScreenRenderer-Bk23YOtN.mjs.map → ScreenRenderer-ClYgfQf_.mjs.map} +1 -1
  79. package/dist/{ScreenRenderer-aYfgv6mR.cjs → ScreenRenderer-Ct1w4PNu.cjs} +2 -2
  80. package/dist/{ScreenRenderer-aYfgv6mR.cjs.map → ScreenRenderer-Ct1w4PNu.cjs.map} +1 -1
  81. package/dist/{ShopScreen-D39WpS6j.mjs → ShopScreen-BBfOte5o.mjs} +2 -2
  82. package/dist/{ShopScreen-D39WpS6j.mjs.map → ShopScreen-BBfOte5o.mjs.map} +1 -1
  83. package/dist/{ShopScreen-Brw7gNMu.cjs → ShopScreen-CZ_290EP.cjs} +22 -22
  84. package/dist/{ShopScreen-CiGozvW4.cjs → ShopScreen-DWLGH2gt.cjs} +2 -2
  85. package/dist/{ShopScreen-CiGozvW4.cjs.map → ShopScreen-DWLGH2gt.cjs.map} +1 -1
  86. package/dist/{TableWidget-D4jQN-to.cjs → TableWidget-BIn1oRiJ.cjs} +4 -4
  87. package/dist/TableWidget-BIn1oRiJ.cjs.map +1 -0
  88. package/dist/{TableWidget-DWAYgQcl.cjs → TableWidget-C--8TSX7.cjs} +3 -3
  89. package/dist/{TableWidget-B0CRdzNf.mjs → TableWidget-dfUvhH0S.mjs} +4 -4
  90. package/dist/TableWidget-dfUvhH0S.mjs.map +1 -0
  91. package/dist/{ToDoWidget-BbeXt99H.cjs → ToDoWidget-Bjoan2Rm.cjs} +2 -2
  92. package/dist/{ToDoWidget-BbeXt99H.cjs.map → ToDoWidget-Bjoan2Rm.cjs.map} +1 -1
  93. package/dist/{ToDoWidget-VSaNmtWH.mjs → ToDoWidget-CYDsZA0Z.mjs} +2 -2
  94. package/dist/{ToDoWidget-VSaNmtWH.mjs.map → ToDoWidget-CYDsZA0Z.mjs.map} +1 -1
  95. package/dist/{ToDoWidget-YHmoDbVU.cjs → ToDoWidget-C_CvWdLi.cjs} +2 -2
  96. package/dist/{VideoWidget-Bc6ZAAaA.cjs → VideoWidget-CDcV0J5W.cjs} +2 -2
  97. package/dist/{VideoWidget-Bc6ZAAaA.cjs.map → VideoWidget-CDcV0J5W.cjs.map} +1 -1
  98. package/dist/{VideoWidget-DcWm239R.mjs → VideoWidget-Dj9wue7j.mjs} +2 -2
  99. package/dist/{VideoWidget-DcWm239R.mjs.map → VideoWidget-Dj9wue7j.mjs.map} +1 -1
  100. package/dist/WidgetInteractionContext-B1mELhQ_.mjs +28 -0
  101. package/dist/{WidgetInteractionContext-D0TJv70C.mjs.map → WidgetInteractionContext-B1mELhQ_.mjs.map} +1 -1
  102. package/dist/WidgetInteractionContext-DvPmzGqB.cjs +41 -0
  103. package/dist/{WidgetInteractionContext-Bs3LkFFH.cjs.map → WidgetInteractionContext-DvPmzGqB.cjs.map} +1 -1
  104. package/dist/index.cjs +81 -52
  105. package/dist/index.cjs.map +1 -1
  106. package/dist/index.d.cts.map +1 -1
  107. package/dist/index.d.mts.map +1 -1
  108. package/dist/index.mjs +81 -52
  109. package/dist/index.mjs.map +1 -1
  110. package/dist/{registry-context-BDH0vNHR.mjs → registry-context-BahYMRqn.mjs} +12 -20
  111. package/dist/registry-context-BahYMRqn.mjs.map +1 -0
  112. package/dist/{registry-context-C7-RLxVt.cjs → registry-context-bf52ZIJX.cjs} +12 -20
  113. package/dist/registry-context-bf52ZIJX.cjs.map +1 -0
  114. package/package.json +11 -11
  115. package/dist/ContainerWidget-NFBqSeRV.cjs +0 -8
  116. package/dist/FluidProvider-B3DjYoUW.mjs.map +0 -1
  117. package/dist/FluidProvider-DcpUKHrn.cjs.map +0 -1
  118. package/dist/MediaRenderer-CfgWd0cC.cjs.map +0 -1
  119. package/dist/MediaRenderer-CqUpv3St.mjs.map +0 -1
  120. package/dist/TableWidget-B0CRdzNf.mjs.map +0 -1
  121. package/dist/TableWidget-D4jQN-to.cjs.map +0 -1
  122. package/dist/WidgetInteractionContext-Bs3LkFFH.cjs +0 -18
  123. package/dist/WidgetInteractionContext-D0TJv70C.mjs +0 -11
  124. package/dist/registry-context-BDH0vNHR.mjs.map +0 -1
  125. package/dist/registry-context-C7-RLxVt.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CatchUpWidget-BQjtjcGR.mjs","names":[],"sources":["../../widgets/src/hooks/use-catchups.preview.ts","../../widgets/src/hooks/use-catchups.ts","../../widgets/src/widgets/CatchUpWidget.tsx"],"sourcesContent":["import type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport const PREVIEW_DATA: CatchUp[] = [\n { id: 1, suggestionTitle: \"Check in with Sarah about her recent order\" },\n { id: 2, suggestionTitle: \"Follow up with Mike on product samples\" },\n { id: 3, suggestionTitle: \"Reconnect with Lisa — last contact 30 days ago\" },\n { id: 4, suggestionTitle: \"Thank Alex for their referral last week\" },\n { id: 5, suggestionTitle: \"Share new catalog with Jordan\" },\n];\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useWidgetsApi } from \"@fluid-app/portal-core/widgets-api-context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { useDataSourceRegistryConfig } from \"@fluid-app/portal-react/data-sources/registry-context\";\nimport { PREVIEW_DATA } from \"./use-catchups.preview\";\nimport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useCatchUps(): UseQueryResult<CatchUp[], Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"catchups\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchCatchUps(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\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 borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\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 borderWidth = \"none\",\n borderColor = \"muted\",\n // Display settings with defaults\n maxItems = 5,\n className,\n ...props\n}: CatchUpWidgetProps): React.JSX.Element {\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} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} 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-header 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.suggestionTitle}\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 getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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qBAAqB;GACtB,CAAC;EAGF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;GACR;EACD,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACH;CACF"}
1
+ {"version":3,"file":"CatchUpWidget-B9DQlzd_.mjs","names":[],"sources":["../../widgets/src/hooks/use-catchups.preview.ts","../../widgets/src/hooks/use-catchups.ts","../../widgets/src/widgets/CatchUpWidget.tsx"],"sourcesContent":["import type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport const PREVIEW_DATA: CatchUp[] = [\n { id: 1, suggestionTitle: \"Check in with Sarah about her recent order\" },\n { id: 2, suggestionTitle: \"Follow up with Mike on product samples\" },\n { id: 3, suggestionTitle: \"Reconnect with Lisa — last contact 30 days ago\" },\n { id: 4, suggestionTitle: \"Thank Alex for their referral last week\" },\n { id: 5, suggestionTitle: \"Share new catalog with Jordan\" },\n];\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useWidgetsApi } from \"@fluid-app/portal-core/widgets-api-context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { useDataSourceRegistryConfig } from \"@fluid-app/portal-react/data-sources/registry-context\";\nimport { PREVIEW_DATA } from \"./use-catchups.preview\";\nimport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useCatchUps(): UseQueryResult<CatchUp[], Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"catchups\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchCatchUps(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\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 borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\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 borderWidth = \"none\",\n borderColor = \"muted\",\n // Display settings with defaults\n maxItems = 5,\n className,\n ...props\n}: CatchUpWidgetProps): React.JSX.Element {\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} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} 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-header 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.suggestionTitle}\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 getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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qBAAqB;GACtB,CAAC;EAGF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;GACR;EACD,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACH;CACF"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-9hOWP6kD.cjs");
2
- const require_registry_context = require("./registry-context-C7-RLxVt.cjs");
2
+ const require_registry_context = require("./registry-context-bf52ZIJX.cjs");
3
3
  const require_error_state = require("./error-state-BDhSltIa.cjs");
4
4
  const require_registries = require("./registries-DBb6VjAX.cjs");
5
5
  let _tanstack_react_query = require("@tanstack/react-query");
@@ -258,4 +258,4 @@ Object.defineProperty(exports, "catchUpWidgetPropertySchema", {
258
258
  }
259
259
  });
260
260
 
261
- //# sourceMappingURL=CatchUpWidget-B1Muaurg.cjs.map
261
+ //# sourceMappingURL=CatchUpWidget-SY7hOHk6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatchUpWidget-B1Muaurg.cjs","names":["useWidgetsApi","useWidgetPreviewContext","useDataSourceRegistryConfig","borderWidthClasses","borderColorClasses","Loader2","ErrorState","Sparkles","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField","getBorderWidthField","getBorderColorField"],"sources":["../../widgets/src/hooks/use-catchups.preview.ts","../../widgets/src/hooks/use-catchups.ts","../../widgets/src/widgets/CatchUpWidget.tsx"],"sourcesContent":["import type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport const PREVIEW_DATA: CatchUp[] = [\n { id: 1, suggestionTitle: \"Check in with Sarah about her recent order\" },\n { id: 2, suggestionTitle: \"Follow up with Mike on product samples\" },\n { id: 3, suggestionTitle: \"Reconnect with Lisa — last contact 30 days ago\" },\n { id: 4, suggestionTitle: \"Thank Alex for their referral last week\" },\n { id: 5, suggestionTitle: \"Share new catalog with Jordan\" },\n];\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useWidgetsApi } from \"@fluid-app/portal-core/widgets-api-context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { useDataSourceRegistryConfig } from \"@fluid-app/portal-react/data-sources/registry-context\";\nimport { PREVIEW_DATA } from \"./use-catchups.preview\";\nimport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useCatchUps(): UseQueryResult<CatchUp[], Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"catchups\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchCatchUps(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\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 borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\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 borderWidth = \"none\",\n borderColor = \"muted\",\n // Display settings with defaults\n maxItems = 5,\n className,\n ...props\n}: CatchUpWidgetProps): React.JSX.Element {\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} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} 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-header 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.suggestionTitle}\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 getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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CE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EACDC,mBAAAA,iBAAiB;GACf,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EACFC,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EAGF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACDA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;GACR;EACDC,mBAAAA,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACH;CACF"}
1
+ {"version":3,"file":"CatchUpWidget-SY7hOHk6.cjs","names":["useWidgetsApi","useWidgetPreviewContext","useDataSourceRegistryConfig","borderWidthClasses","borderColorClasses","Loader2","ErrorState","Sparkles","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField","getBorderWidthField","getBorderColorField"],"sources":["../../widgets/src/hooks/use-catchups.preview.ts","../../widgets/src/hooks/use-catchups.ts","../../widgets/src/widgets/CatchUpWidget.tsx"],"sourcesContent":["import type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport const PREVIEW_DATA: CatchUp[] = [\n { id: 1, suggestionTitle: \"Check in with Sarah about her recent order\" },\n { id: 2, suggestionTitle: \"Follow up with Mike on product samples\" },\n { id: 3, suggestionTitle: \"Reconnect with Lisa — last contact 30 days ago\" },\n { id: 4, suggestionTitle: \"Thank Alex for their referral last week\" },\n { id: 5, suggestionTitle: \"Share new catalog with Jordan\" },\n];\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useWidgetsApi } from \"@fluid-app/portal-core/widgets-api-context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { useDataSourceRegistryConfig } from \"@fluid-app/portal-react/data-sources/registry-context\";\nimport { PREVIEW_DATA } from \"./use-catchups.preview\";\nimport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { CatchUp } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useCatchUps(): UseQueryResult<CatchUp[], Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"catchups\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchCatchUps(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\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 borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\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 borderWidth = \"none\",\n borderColor = \"muted\",\n // Display settings with defaults\n maxItems = 5,\n className,\n ...props\n}: CatchUpWidgetProps): React.JSX.Element {\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} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} 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-header 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.suggestionTitle}\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 getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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CE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EACDC,mBAAAA,iBAAiB;GACf,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EACFC,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EAGF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACDA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;GACR;EACDC,mBAAAA,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACH;CACF"}
@@ -1,5 +1,5 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
- const require_LayoutWidget = require("./LayoutWidget-CK-SvFQL.cjs");
2
+ const require_LayoutWidget = require("./LayoutWidget-BIfNHlVE.cjs");
3
3
  const require_registries = require("./registries-DBb6VjAX.cjs");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region ../widgets/src/widgets/ContainerWidget.tsx
@@ -48,4 +48,4 @@ Object.defineProperty(exports, "containerWidgetPropertySchema", {
48
48
  }
49
49
  });
50
50
 
51
- //# sourceMappingURL=ContainerWidget-Cjwrq2MS.cjs.map
51
+ //# sourceMappingURL=ContainerWidget-BXpdj06u.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerWidget-Cjwrq2MS.cjs","names":["LayoutWidget","getGapField","getPaddingField"],"sources":["../../widgets/src/widgets/ContainerWidget.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { LayoutWidget } from \"./LayoutWidget\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { getGapField, getPaddingField } from \"../core/fields\";\n\n/**\n * ContainerWidget - Root container widget for screens\n *\n * This widget wraps LayoutWidget and serves as the foundational container\n * for every screen. It cannot be added, deleted, moved, or copied by users.\n *\n * Only exposes limited settings: gap, padding, and backgroundColor\n */\n\ntype ContainerWidgetProps = ComponentProps<typeof LayoutWidget>;\n\nexport function ContainerWidget(\n props: ContainerWidgetProps,\n): React.JSX.Element {\n // Pass all props through to LayoutWidget\n return <LayoutWidget {...props} />;\n}\n\nexport const containerWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ContainerWidget\",\n displayName: \"Canvas Settings\",\n fields: [\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding for the container\",\n defaultValue: 4,\n group: \"Design\",\n }),\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the container\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n ],\n};\n"],"mappings":";;;;;AAiBA,SAAgB,gBACd,OACmB;AAEnB,QAAO,iBAAA,GAAA,kBAAA,KAACA,qBAAAA,cAAD,EAAc,GAAI,OAAS,CAAA;;AAGpC,MAAa,gCAAsD;CACjE,YAAY;CACZ,aAAa;CACb,QAAQ;EACNC,mBAAAA,YAAY;GACV,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACFC,mBAAAA,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR;EACF;CACF"}
1
+ {"version":3,"file":"ContainerWidget-BXpdj06u.cjs","names":["LayoutWidget","getGapField","getPaddingField"],"sources":["../../widgets/src/widgets/ContainerWidget.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { LayoutWidget } from \"./LayoutWidget\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { getGapField, getPaddingField } from \"../core/fields\";\n\n/**\n * ContainerWidget - Root container widget for screens\n *\n * This widget wraps LayoutWidget and serves as the foundational container\n * for every screen. It cannot be added, deleted, moved, or copied by users.\n *\n * Only exposes limited settings: gap, padding, and backgroundColor\n */\n\ntype ContainerWidgetProps = ComponentProps<typeof LayoutWidget>;\n\nexport function ContainerWidget(\n props: ContainerWidgetProps,\n): React.JSX.Element {\n // Pass all props through to LayoutWidget\n return <LayoutWidget {...props} />;\n}\n\nexport const containerWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ContainerWidget\",\n displayName: \"Canvas Settings\",\n fields: [\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding for the container\",\n defaultValue: 4,\n group: \"Design\",\n }),\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the container\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n ],\n};\n"],"mappings":";;;;;AAiBA,SAAgB,gBACd,OACmB;AAEnB,QAAO,iBAAA,GAAA,kBAAA,KAACA,qBAAAA,cAAD,EAAc,GAAI,OAAS,CAAA;;AAGpC,MAAa,gCAAsD;CACjE,YAAY;CACZ,aAAa;CACb,QAAQ;EACNC,mBAAAA,YAAY;GACV,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACFC,mBAAAA,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR;EACF;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { r as __exportAll } from "./es-BXxGlAp6.mjs";
2
- import { t as LayoutWidget } from "./LayoutWidget-Cx5ZyXSU.mjs";
2
+ import { t as LayoutWidget } from "./LayoutWidget-CC3oK78H.mjs";
3
3
  import { f as getGapField, m as getPaddingField } from "./registries-Ct8o2YRe.mjs";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region ../widgets/src/widgets/ContainerWidget.tsx
@@ -41,4 +41,4 @@ const containerWidgetPropertySchema = {
41
41
  //#endregion
42
42
  export { ContainerWidget_exports as n, containerWidgetPropertySchema as r, ContainerWidget as t };
43
43
 
44
- //# sourceMappingURL=ContainerWidget-DYThUtiZ.mjs.map
44
+ //# sourceMappingURL=ContainerWidget-CpwvcxFm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerWidget-DYThUtiZ.mjs","names":[],"sources":["../../widgets/src/widgets/ContainerWidget.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { LayoutWidget } from \"./LayoutWidget\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { getGapField, getPaddingField } from \"../core/fields\";\n\n/**\n * ContainerWidget - Root container widget for screens\n *\n * This widget wraps LayoutWidget and serves as the foundational container\n * for every screen. It cannot be added, deleted, moved, or copied by users.\n *\n * Only exposes limited settings: gap, padding, and backgroundColor\n */\n\ntype ContainerWidgetProps = ComponentProps<typeof LayoutWidget>;\n\nexport function ContainerWidget(\n props: ContainerWidgetProps,\n): React.JSX.Element {\n // Pass all props through to LayoutWidget\n return <LayoutWidget {...props} />;\n}\n\nexport const containerWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ContainerWidget\",\n displayName: \"Canvas Settings\",\n fields: [\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding for the container\",\n defaultValue: 4,\n group: \"Design\",\n }),\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the container\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n ],\n};\n"],"mappings":";;;;;;;;;AAiBA,SAAgB,gBACd,OACmB;AAEnB,QAAO,oBAAC,cAAD,EAAc,GAAI,OAAS,CAAA;;AAGpC,MAAa,gCAAsD;CACjE,YAAY;CACZ,aAAa;CACb,QAAQ;EACN,YAAY;GACV,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACF,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR;EACF;CACF"}
1
+ {"version":3,"file":"ContainerWidget-CpwvcxFm.mjs","names":[],"sources":["../../widgets/src/widgets/ContainerWidget.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { LayoutWidget } from \"./LayoutWidget\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { getGapField, getPaddingField } from \"../core/fields\";\n\n/**\n * ContainerWidget - Root container widget for screens\n *\n * This widget wraps LayoutWidget and serves as the foundational container\n * for every screen. It cannot be added, deleted, moved, or copied by users.\n *\n * Only exposes limited settings: gap, padding, and backgroundColor\n */\n\ntype ContainerWidgetProps = ComponentProps<typeof LayoutWidget>;\n\nexport function ContainerWidget(\n props: ContainerWidgetProps,\n): React.JSX.Element {\n // Pass all props through to LayoutWidget\n return <LayoutWidget {...props} />;\n}\n\nexport const containerWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ContainerWidget\",\n displayName: \"Canvas Settings\",\n fields: [\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding for the container\",\n defaultValue: 4,\n group: \"Design\",\n }),\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the container\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n ],\n};\n"],"mappings":";;;;;;;;;AAiBA,SAAgB,gBACd,OACmB;AAEnB,QAAO,oBAAC,cAAD,EAAc,GAAI,OAAS,CAAA;;AAGpC,MAAa,gCAAsD;CACjE,YAAY;CACZ,aAAa;CACb,QAAQ;EACN,YAAY;GACV,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACF,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR,CAAC;EACF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,OAAO;GACR;EACF;CACF"}
@@ -0,0 +1,8 @@
1
+ require("./chunk-9hOWP6kD.cjs");
2
+ require("./ScreenRenderer-Ct1w4PNu.cjs");
3
+ require("./registry-context-bf52ZIJX.cjs");
4
+ require("./LayoutWidget-BIfNHlVE.cjs");
5
+ require("./registries-DBb6VjAX.cjs");
6
+ require("./fields-COJ84ouS.cjs");
7
+ const require_ContainerWidget = require("./ContainerWidget-BXpdj06u.cjs");
8
+ exports.containerWidgetPropertySchema = require_ContainerWidget.containerWidgetPropertySchema;
@@ -1,4 +1,4 @@
1
- import { d as DataSourceApiProvider, l as RegistryProvider } from "./ScreenRenderer-Bk23YOtN.mjs";
1
+ import { d as DataSourceApiProvider, l as RegistryProvider } from "./ScreenRenderer-ClYgfQf_.mjs";
2
2
  import { t as AccountApiProvider } from "./account-api-context-BIZ_aibJ.mjs";
3
3
  import { t as StoreApiProvider } from "./store-api-context-C1lXT_3d.mjs";
4
4
  import { t as PayApiProvider } from "./pay-api-context-CqKGSXnP.mjs";
@@ -8,33 +8,33 @@ import { O as todos_list, a as calendar_events_list, c as enrollment_pack_by_vis
8
8
  import { C as pages_show, a as content_playlists_by_shares, b as media_show, i as content_pages_by_visits, j as playlists_show, n as content_media_by_visits, o as content_playlists_by_visits, r as content_pages_by_shares, t as content_media_by_shares } from "./portal_tenant_content-CQQfNOTc.mjs";
9
9
  import { C as resolveTheme, r as removeTheme, t as applyTheme } from "./src-C9vtVoJs.mjs";
10
10
  import { n as usePortalTenantClient, t as PortalTenantClientProvider } from "./PortalTenantClientProvider-CjJzBCTL.mjs";
11
- import { t as DataSourceRegistryProvider } from "./registry-context-BDH0vNHR.mjs";
11
+ import { t as DataSourceRegistryProvider } from "./registry-context-BahYMRqn.mjs";
12
12
  import { t as EmbedWidget } from "./EmbedWidget-Cj6VgQJC.mjs";
13
13
  import { r as WidgetsApiProvider } from "./error-state-DYzHx8tt.mjs";
14
- import { t as LayoutWidget } from "./LayoutWidget-Cx5ZyXSU.mjs";
14
+ import { t as LayoutWidget } from "./LayoutWidget-CC3oK78H.mjs";
15
15
  import { t as TextWidget } from "./TextWidget-BteaMIsX.mjs";
16
16
  import { t as AlertWidget } from "./AlertWidget-CbhrQa9Z.mjs";
17
17
  import { t as BulletListWidget } from "./BulletListWidget-qvZIZ_B-.mjs";
18
- import { t as CalendarWidget } from "./CalendarWidget-BaGML5Xh.mjs";
19
- import { t as CardWidget } from "./CardWidget-CqYjGkq-.mjs";
20
- import { t as CarouselWidget } from "./CarouselWidget-CdQhlRrW.mjs";
21
- import { t as CatchUpWidget } from "./CatchUpWidget-BQjtjcGR.mjs";
18
+ import { t as CalendarWidget } from "./CalendarWidget-BXxNxHDV.mjs";
19
+ import { t as CardWidget } from "./CardWidget-BNkMlxQ3.mjs";
20
+ import { t as CarouselWidget } from "./CarouselWidget-p8Z6L-G5.mjs";
21
+ import { t as CatchUpWidget } from "./CatchUpWidget-B9DQlzd_.mjs";
22
22
  import { t as ChartWidget } from "./ChartWidget-obje-Xj9.mjs";
23
- import { t as ContainerWidget } from "./ContainerWidget-DYThUtiZ.mjs";
24
- import { t as ImageWidget } from "./ImageWidget-CFTpbu8X.mjs";
25
- import { t as LinkWidget } from "./LinkWidget-CQHmKO-O.mjs";
26
- import { t as ListWidget } from "./ListWidget-BnyD2Hpc.mjs";
27
- import { t as MySiteWidget } from "./MySiteWidget-COj7yYQF.mjs";
28
- import { t as NestedWidget } from "./NestedWidget-WJoWOFda.mjs";
29
- import { t as PointsWidget } from "./PointsWidget-DoUljaNY.mjs";
23
+ import { t as ContainerWidget } from "./ContainerWidget-CpwvcxFm.mjs";
24
+ import { t as ImageWidget } from "./ImageWidget-vNWT_O1E.mjs";
25
+ import { t as LinkWidget } from "./LinkWidget-CO-Cxf7Z.mjs";
26
+ import { t as ListWidget } from "./ListWidget-f88QhcGI.mjs";
27
+ import { t as MySiteWidget } from "./MySiteWidget-BnjPrQxE.mjs";
28
+ import { t as NestedWidget } from "./NestedWidget-RuyrOrFn.mjs";
29
+ import { t as PointsWidget } from "./PointsWidget-C2KB4k48.mjs";
30
30
  import { t as QuickLinksWidget } from "./QuickLinksWidget-CJqwiBJ7.mjs";
31
31
  import { t as QuickShareWidget } from "./QuickShareWidget-DKE7Tba2.mjs";
32
- import { t as RecentActivityWidget } from "./RecentActivityWidget-zQxtUECm.mjs";
32
+ import { t as RecentActivityWidget } from "./RecentActivityWidget-DelPdiwR.mjs";
33
33
  import { t as SeparatorWidget } from "./SeparatorWidget-gVlyr1MV.mjs";
34
34
  import { t as SpacerWidget } from "./SpacerWidget-BY7ywGP4.mjs";
35
- import { t as TableWidget } from "./TableWidget-B0CRdzNf.mjs";
36
- import { t as ToDoWidget } from "./ToDoWidget-VSaNmtWH.mjs";
37
- import { t as VideoWidget } from "./VideoWidget-DcWm239R.mjs";
35
+ import { t as TableWidget } from "./TableWidget-dfUvhH0S.mjs";
36
+ import { t as ToDoWidget } from "./ToDoWidget-CYDsZA0Z.mjs";
37
+ import { t as VideoWidget } from "./VideoWidget-Dj9wue7j.mjs";
38
38
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
39
39
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
40
40
  import { jsx } from "react/jsx-runtime";
@@ -696,53 +696,39 @@ function narrowPeriod(value) {
696
696
  if (value === "7d" || value === "30d" || value === "90d" || value === "1y" || value === "all") return value;
697
697
  if (value !== void 0 && !isProduction()) console.warn(`[portal-sdk] narrowPeriod: unknown value "${value}" dropped`);
698
698
  }
699
+ const SHAREABLE_TYPE_DISCRIMINATOR = {
700
+ products: "Product",
701
+ media: "Medium",
702
+ libraries: "Playlist",
703
+ pages: "Page",
704
+ enrollment_packs: "EnrollmentPack",
705
+ promotions: "Promotion"
706
+ };
707
+ function withShareableType(resources, type) {
708
+ const discriminator = SHAREABLE_TYPE_DISCRIMINATOR[type];
709
+ return (resources ?? []).map((r) => ({
710
+ ...r,
711
+ id: r.id ?? 0,
712
+ shareable_type: discriminator
713
+ }));
714
+ }
699
715
  async function fetchShareVisited(shareableType, client, contentClient, query) {
700
716
  switch (shareableType) {
701
- case "products": return ((await product_by_shares(client, query)).resources ?? []).map((r) => ({
702
- ...r,
703
- id: r.id ?? 0
704
- }));
705
- case "media": return ((await content_media_by_shares(contentClient, query)).resources ?? []).map((r) => ({
706
- ...r,
707
- id: r.id ?? 0
708
- }));
709
- case "libraries": return ((await content_playlists_by_shares(contentClient, query)).resources ?? []).map((r) => ({
710
- ...r,
711
- id: r.id ?? 0
712
- }));
713
- case "pages": return ((await content_pages_by_shares(contentClient, query)).resources ?? []).map((r) => ({
714
- ...r,
715
- id: r.id ?? 0
716
- }));
717
- case "enrollment_packs": return ((await enrollment_pack_by_shares(client, query)).resources ?? []).map((r) => ({
718
- ...r,
719
- id: r.id ?? 0
720
- }));
717
+ case "products": return withShareableType((await product_by_shares(client, query)).resources, shareableType);
718
+ case "media": return withShareableType((await content_media_by_shares(contentClient, query)).resources, shareableType);
719
+ case "libraries": return withShareableType((await content_playlists_by_shares(contentClient, query)).resources, shareableType);
720
+ case "pages": return withShareableType((await content_pages_by_shares(contentClient, query)).resources, shareableType);
721
+ case "enrollment_packs": return withShareableType((await enrollment_pack_by_shares(client, query)).resources, shareableType);
721
722
  case "promotions": bffNotSupported(`fetchMostShared(${shareableType})`);
722
723
  }
723
724
  }
724
725
  async function fetchVisited(shareableType, client, contentClient, query) {
725
726
  switch (shareableType) {
726
- case "products": return ((await product_by_visits(client, query)).resources ?? []).map((r) => ({
727
- ...r,
728
- id: r.id ?? 0
729
- }));
730
- case "media": return ((await content_media_by_visits(contentClient, query)).resources ?? []).map((r) => ({
731
- ...r,
732
- id: r.id ?? 0
733
- }));
734
- case "libraries": return ((await content_playlists_by_visits(contentClient, query)).resources ?? []).map((r) => ({
735
- ...r,
736
- id: r.id ?? 0
737
- }));
738
- case "pages": return ((await content_pages_by_visits(contentClient, query)).resources ?? []).map((r) => ({
739
- ...r,
740
- id: r.id ?? 0
741
- }));
742
- case "enrollment_packs": return ((await enrollment_pack_by_visits(client, query)).resources ?? []).map((r) => ({
743
- ...r,
744
- id: r.id ?? 0
745
- }));
727
+ case "products": return withShareableType((await product_by_visits(client, query)).resources, shareableType);
728
+ case "media": return withShareableType((await content_media_by_visits(contentClient, query)).resources, shareableType);
729
+ case "libraries": return withShareableType((await content_playlists_by_visits(contentClient, query)).resources, shareableType);
730
+ case "pages": return withShareableType((await content_pages_by_visits(contentClient, query)).resources, shareableType);
731
+ case "enrollment_packs": return withShareableType((await enrollment_pack_by_visits(client, query)).resources, shareableType);
746
732
  case "promotions": bffNotSupported(`fetchMostViewed(${shareableType})`);
747
733
  }
748
734
  }
@@ -759,22 +745,22 @@ function toMetricsQuery(options) {
759
745
  * so schema drift surfaces at compile time rather than producing silent
760
746
  * `undefined`s in the consumer transformer.
761
747
  *
762
- * Field mapping: BFF `token` → `order_number` (user-facing identifier),
763
- * `total` → `amount`/`total_display_amount` (legacy shape had both),
764
- * `line_items[0]` → `first_item` (first product in the order).
748
+ * Field mapping: BFF `id` → `order_number` (numeric identifier displayed in
749
+ * lists, matches portal-builder behaviour), `total` → `amount`/`total_display_amount`,
750
+ * `line_items[0]` → `first_item` (first product, including its image_url).
765
751
  */
766
752
  function toNormalizedOrder(raw) {
767
753
  const firstLineItem = raw.line_items?.[0];
768
754
  return {
769
755
  id: raw.id ?? 0,
770
- order_number: raw.token ?? void 0,
756
+ order_number: raw.id != null ? String(raw.id) : void 0,
771
757
  amount: raw.total ?? void 0,
772
758
  total_display_amount: raw.total ?? void 0,
773
759
  status: raw.status ?? void 0,
774
760
  created_at: raw.created_at ?? void 0,
775
761
  first_item: firstLineItem ? {
776
762
  title: firstLineItem.product_name ?? void 0,
777
- image_url: void 0
763
+ image_url: firstLineItem.image_url ?? void 0
778
764
  } : void 0,
779
765
  token: raw.token ?? void 0
780
766
  };
@@ -903,10 +889,7 @@ function createDataSourceApiAdapter(client, contentClient) {
903
889
  if (filterType === "tags") throw new Error("Tags data source is not yet supported.");
904
890
  const response = await products_list(client, filterType === "collections" ? { collection_id: Number(filterId) } : { category_id: Number(filterId) });
905
891
  throwIfAborted(signal);
906
- return (response.products ?? []).map((p) => ({
907
- ...p,
908
- id: p.id ?? 0
909
- }));
892
+ return withShareableType(response.products, "products");
910
893
  }
911
894
  };
912
895
  }
@@ -2052,29 +2035,29 @@ function createWidgetFromShareable(item) {
2052
2035
  const widgetPropertySchemas = {
2053
2036
  AlertWidget: () => import("./AlertWidget-CbhrQa9Z.mjs").then((n) => n.n).then((m) => m.alertWidgetPropertySchema),
2054
2037
  BulletListWidget: () => import("./BulletListWidget-qvZIZ_B-.mjs").then((n) => n.n).then((m) => m.bulletListWidgetPropertySchema),
2055
- CalendarWidget: () => import("./CalendarWidget-BaGML5Xh.mjs").then((n) => n.n).then((m) => m.calendarWidgetPropertySchema),
2056
- CardWidget: () => import("./CardWidget-CqYjGkq-.mjs").then((n) => n.n).then((m) => m.cardWidgetPropertySchema),
2057
- CarouselWidget: () => import("./CarouselWidget-CdQhlRrW.mjs").then((n) => n.n).then((m) => m.carouselWidgetPropertySchema),
2058
- CatchUpWidget: () => import("./CatchUpWidget-BQjtjcGR.mjs").then((n) => n.n).then((m) => m.catchUpWidgetPropertySchema),
2038
+ CalendarWidget: () => import("./CalendarWidget-BXxNxHDV.mjs").then((n) => n.n).then((m) => m.calendarWidgetPropertySchema),
2039
+ CardWidget: () => import("./CardWidget-BNkMlxQ3.mjs").then((n) => n.n).then((m) => m.cardWidgetPropertySchema),
2040
+ CarouselWidget: () => import("./CarouselWidget-p8Z6L-G5.mjs").then((n) => n.n).then((m) => m.carouselWidgetPropertySchema),
2041
+ CatchUpWidget: () => import("./CatchUpWidget-B9DQlzd_.mjs").then((n) => n.n).then((m) => m.catchUpWidgetPropertySchema),
2059
2042
  ChartWidget: () => import("./ChartWidget-obje-Xj9.mjs").then((n) => n.n).then((m) => m.chartWidgetPropertySchema),
2060
- ContainerWidget: () => import("./ContainerWidget-DYThUtiZ.mjs").then((n) => n.n).then((m) => m.containerWidgetPropertySchema),
2043
+ ContainerWidget: () => import("./ContainerWidget-CpwvcxFm.mjs").then((n) => n.n).then((m) => m.containerWidgetPropertySchema),
2061
2044
  EmbedWidget: () => import("./EmbedWidget-Cj6VgQJC.mjs").then((n) => n.n).then((m) => m.embedWidgetPropertySchema),
2062
- ImageWidget: () => import("./ImageWidget-CFTpbu8X.mjs").then((n) => n.n).then((m) => m.imageWidgetPropertySchema),
2063
- LayoutWidget: () => import("./LayoutWidget-Cx5ZyXSU.mjs").then((n) => n.n).then((m) => m.layoutWidgetPropertySchema),
2064
- LinkWidget: () => import("./LinkWidget-CQHmKO-O.mjs").then((n) => n.n).then((m) => m.linkWidgetPropertySchema),
2065
- ListWidget: () => import("./ListWidget-BnyD2Hpc.mjs").then((n) => n.n).then((m) => m.listWidgetPropertySchema),
2066
- MySiteWidget: () => import("./MySiteWidget-COj7yYQF.mjs").then((n) => n.n).then((m) => m.mySiteWidgetPropertySchema),
2067
- NestedWidget: () => import("./NestedWidget-WJoWOFda.mjs").then((n) => n.n).then((m) => m.nestedWidgetPropertySchema),
2068
- PointsWidget: () => import("./PointsWidget-DoUljaNY.mjs").then((n) => n.n).then((m) => m.pointsWidgetPropertySchema),
2045
+ ImageWidget: () => import("./ImageWidget-vNWT_O1E.mjs").then((n) => n.n).then((m) => m.imageWidgetPropertySchema),
2046
+ LayoutWidget: () => import("./LayoutWidget-CC3oK78H.mjs").then((n) => n.n).then((m) => m.layoutWidgetPropertySchema),
2047
+ LinkWidget: () => import("./LinkWidget-CO-Cxf7Z.mjs").then((n) => n.n).then((m) => m.linkWidgetPropertySchema),
2048
+ ListWidget: () => import("./ListWidget-f88QhcGI.mjs").then((n) => n.n).then((m) => m.listWidgetPropertySchema),
2049
+ MySiteWidget: () => import("./MySiteWidget-BnjPrQxE.mjs").then((n) => n.n).then((m) => m.mySiteWidgetPropertySchema),
2050
+ NestedWidget: () => import("./NestedWidget-RuyrOrFn.mjs").then((n) => n.n).then((m) => m.nestedWidgetPropertySchema),
2051
+ PointsWidget: () => import("./PointsWidget-C2KB4k48.mjs").then((n) => n.n).then((m) => m.pointsWidgetPropertySchema),
2069
2052
  QuickLinksWidget: () => import("./QuickLinksWidget-CJqwiBJ7.mjs").then((n) => n.n).then((m) => m.quickLinksWidgetPropertySchema),
2070
2053
  QuickShareWidget: () => import("./QuickShareWidget-DKE7Tba2.mjs").then((n) => n.n).then((m) => m.quickShareWidgetPropertySchema),
2071
- RecentActivityWidget: () => import("./RecentActivityWidget-zQxtUECm.mjs").then((n) => n.n).then((m) => m.recentActivityWidgetPropertySchema),
2054
+ RecentActivityWidget: () => import("./RecentActivityWidget-DelPdiwR.mjs").then((n) => n.n).then((m) => m.recentActivityWidgetPropertySchema),
2072
2055
  SeparatorWidget: () => import("./SeparatorWidget-gVlyr1MV.mjs").then((n) => n.n).then((m) => m.separatorWidgetPropertySchema),
2073
2056
  SpacerWidget: () => import("./SpacerWidget-BY7ywGP4.mjs").then((n) => n.n).then((m) => m.spacerWidgetPropertySchema),
2074
- TableWidget: () => import("./TableWidget-B0CRdzNf.mjs").then((n) => n.n).then((m) => m.tableWidgetPropertySchema),
2057
+ TableWidget: () => import("./TableWidget-dfUvhH0S.mjs").then((n) => n.n).then((m) => m.tableWidgetPropertySchema),
2075
2058
  TextWidget: () => import("./TextWidget-BteaMIsX.mjs").then((n) => n.n).then((m) => m.textWidgetPropertySchema),
2076
- ToDoWidget: () => import("./ToDoWidget-VSaNmtWH.mjs").then((n) => n.n).then((m) => m.toDoWidgetPropertySchema),
2077
- VideoWidget: () => import("./VideoWidget-DcWm239R.mjs").then((n) => n.n).then((m) => m.videoWidgetPropertySchema)
2059
+ ToDoWidget: () => import("./ToDoWidget-CYDsZA0Z.mjs").then((n) => n.n).then((m) => m.toDoWidgetPropertySchema),
2060
+ VideoWidget: () => import("./VideoWidget-Dj9wue7j.mjs").then((n) => n.n).then((m) => m.videoWidgetPropertySchema)
2078
2061
  };
2079
2062
  //#endregion
2080
2063
  //#region src/core/default-widget-registry.ts
@@ -2251,4 +2234,4 @@ function useFluidContext() {
2251
2234
  //#endregion
2252
2235
  export { createScreen as a, FluidThemeProvider as c, useLanguagesApi as d, useAppDefinitionApi as f, widgetPropertySchemas as i, useThemeContext as l, deleteDatabase as m, useFluidContext as n, createWidgetFromShareable as o, createPersister as p, DEFAULT_SDK_WIDGET_REGISTRY as r, createWidgetRegistry as s, FluidProvider as t, ApiError as u };
2253
2236
 
2254
- //# sourceMappingURL=FluidProvider-B3DjYoUW.mjs.map
2237
+ //# sourceMappingURL=FluidProvider-DL5rChtj.mjs.map