@fluid-app/portal-sdk 0.1.237 → 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.
- package/dist/{CalendarWidget-BaGML5Xh.mjs → CalendarWidget-BXxNxHDV.mjs} +2 -2
- package/dist/{CalendarWidget-BaGML5Xh.mjs.map → CalendarWidget-BXxNxHDV.mjs.map} +1 -1
- package/dist/{CalendarWidget-oGK122s9.cjs → CalendarWidget-VjQXZW8B.cjs} +2 -2
- package/dist/{CalendarWidget-oGK122s9.cjs.map → CalendarWidget-VjQXZW8B.cjs.map} +1 -1
- package/dist/{CardWidget-CqYjGkq-.mjs → CardWidget-BNkMlxQ3.mjs} +2 -2
- package/dist/{CardWidget-CqYjGkq-.mjs.map → CardWidget-BNkMlxQ3.mjs.map} +1 -1
- package/dist/{CardWidget-CSLSlKM6.cjs → CardWidget-C3I9OwgS.cjs} +2 -2
- package/dist/{CardWidget-CSLSlKM6.cjs.map → CardWidget-C3I9OwgS.cjs.map} +1 -1
- package/dist/{CardWidget-DjhK0yr-.cjs → CardWidget-CraWMttj.cjs} +3 -3
- package/dist/{CarouselWidget-DlxYQB5j.cjs → CarouselWidget-CiKlooUF.cjs} +2 -2
- package/dist/{CarouselWidget-DlxYQB5j.cjs.map → CarouselWidget-CiKlooUF.cjs.map} +1 -1
- package/dist/{CarouselWidget-CdQhlRrW.mjs → CarouselWidget-p8Z6L-G5.mjs} +2 -2
- package/dist/{CarouselWidget-CdQhlRrW.mjs.map → CarouselWidget-p8Z6L-G5.mjs.map} +1 -1
- package/dist/{CatchUpWidget-BQjtjcGR.mjs → CatchUpWidget-B9DQlzd_.mjs} +2 -2
- package/dist/{CatchUpWidget-BQjtjcGR.mjs.map → CatchUpWidget-B9DQlzd_.mjs.map} +1 -1
- package/dist/{CatchUpWidget-B1Muaurg.cjs → CatchUpWidget-SY7hOHk6.cjs} +2 -2
- package/dist/{CatchUpWidget-B1Muaurg.cjs.map → CatchUpWidget-SY7hOHk6.cjs.map} +1 -1
- package/dist/{ContainerWidget-Cjwrq2MS.cjs → ContainerWidget-BXpdj06u.cjs} +2 -2
- package/dist/{ContainerWidget-Cjwrq2MS.cjs.map → ContainerWidget-BXpdj06u.cjs.map} +1 -1
- package/dist/{ContainerWidget-DYThUtiZ.mjs → ContainerWidget-CpwvcxFm.mjs} +2 -2
- package/dist/{ContainerWidget-DYThUtiZ.mjs.map → ContainerWidget-CpwvcxFm.mjs.map} +1 -1
- package/dist/ContainerWidget-CyfPYEAv.cjs +8 -0
- package/dist/{FluidProvider-BazvsIwu.mjs → FluidProvider-DL5rChtj.mjs} +67 -84
- package/dist/FluidProvider-DL5rChtj.mjs.map +1 -0
- package/dist/{FluidProvider-Dxn7Ehiz.cjs → FluidProvider-D_PHVlUU.cjs} +67 -84
- package/dist/FluidProvider-D_PHVlUU.cjs.map +1 -0
- package/dist/{ImageWidget-xcE0sFf-.cjs → ImageWidget-CbQVxMe3.cjs} +2 -2
- package/dist/{ImageWidget-xcE0sFf-.cjs.map → ImageWidget-CbQVxMe3.cjs.map} +1 -1
- package/dist/{ImageWidget-CFTpbu8X.mjs → ImageWidget-vNWT_O1E.mjs} +2 -2
- package/dist/{ImageWidget-CFTpbu8X.mjs.map → ImageWidget-vNWT_O1E.mjs.map} +1 -1
- package/dist/{LayoutWidget-CK-SvFQL.cjs → LayoutWidget-BIfNHlVE.cjs} +2 -2
- package/dist/{LayoutWidget-CK-SvFQL.cjs.map → LayoutWidget-BIfNHlVE.cjs.map} +1 -1
- package/dist/{LayoutWidget-Cx5ZyXSU.mjs → LayoutWidget-CC3oK78H.mjs} +2 -2
- package/dist/{LayoutWidget-Cx5ZyXSU.mjs.map → LayoutWidget-CC3oK78H.mjs.map} +1 -1
- package/dist/{LayoutWidget-DuueFNAS.cjs → LayoutWidget-LdF_cKrB.cjs} +3 -3
- package/dist/{LinkWidget-B14FTQP7.cjs → LinkWidget-BoR7nVbH.cjs} +2 -2
- package/dist/{LinkWidget-B14FTQP7.cjs.map → LinkWidget-BoR7nVbH.cjs.map} +1 -1
- package/dist/{LinkWidget-CQHmKO-O.mjs → LinkWidget-CO-Cxf7Z.mjs} +2 -2
- package/dist/{LinkWidget-CQHmKO-O.mjs.map → LinkWidget-CO-Cxf7Z.mjs.map} +1 -1
- package/dist/{LinkWidget-CPmE8gpd.cjs → LinkWidget-M9YzMJT8.cjs} +2 -2
- package/dist/{ListWidget-YvCp7XDq.cjs → ListWidget-CuSjvwEw.cjs} +3 -3
- package/dist/{ListWidget-wBDnXWxa.cjs → ListWidget-CzljZ1LA.cjs} +3 -3
- package/dist/{ListWidget-wBDnXWxa.cjs.map → ListWidget-CzljZ1LA.cjs.map} +1 -1
- package/dist/{ListWidget-BnyD2Hpc.mjs → ListWidget-f88QhcGI.mjs} +3 -3
- package/dist/{ListWidget-BnyD2Hpc.mjs.map → ListWidget-f88QhcGI.mjs.map} +1 -1
- package/dist/{MediaRenderer-CfgWd0cC.cjs → MediaRenderer-CvN8Ku0i.cjs} +4 -4
- package/dist/MediaRenderer-CvN8Ku0i.cjs.map +1 -0
- package/dist/{MediaRenderer-CqUpv3St.mjs → MediaRenderer-DMdb_5xw.mjs} +4 -4
- package/dist/MediaRenderer-DMdb_5xw.mjs.map +1 -0
- package/dist/{MessagingScreen-40YCQbX9.cjs → MessagingScreen-Dkh3Dsp7.cjs} +2 -2
- package/dist/{MessagingScreen-40YCQbX9.cjs.map → MessagingScreen-Dkh3Dsp7.cjs.map} +1 -1
- package/dist/{MessagingScreen-CrdiB4M3.cjs → MessagingScreen-Dxy2VQbO.cjs} +22 -22
- package/dist/{MessagingScreen-RItZgONw.mjs → MessagingScreen-mt1u3Bs1.mjs} +2 -2
- package/dist/{MessagingScreen-RItZgONw.mjs.map → MessagingScreen-mt1u3Bs1.mjs.map} +1 -1
- package/dist/{MySiteWidget-B0dc_7Dc.mjs → MySiteWidget-BnjPrQxE.mjs} +23 -30
- package/dist/MySiteWidget-BnjPrQxE.mjs.map +1 -0
- package/dist/{MySiteWidget-BkqAS0aY.cjs → MySiteWidget-C8eFWHOT.cjs} +23 -30
- package/dist/MySiteWidget-C8eFWHOT.cjs.map +1 -0
- package/dist/{NestedWidget-C_2XwnW0.cjs → NestedWidget-CEoAO2sp.cjs} +3 -3
- package/dist/{NestedWidget-C_2XwnW0.cjs.map → NestedWidget-CEoAO2sp.cjs.map} +1 -1
- package/dist/{NestedWidget-CXIvsJdD.cjs → NestedWidget-CMCZjV6t.cjs} +3 -3
- package/dist/{NestedWidget-WJoWOFda.mjs → NestedWidget-RuyrOrFn.mjs} +3 -3
- package/dist/{NestedWidget-WJoWOFda.mjs.map → NestedWidget-RuyrOrFn.mjs.map} +1 -1
- package/dist/{PointsWidget-DoUljaNY.mjs → PointsWidget-C2KB4k48.mjs} +2 -2
- package/dist/{PointsWidget-DoUljaNY.mjs.map → PointsWidget-C2KB4k48.mjs.map} +1 -1
- package/dist/{PointsWidget-CLUWrFjZ.cjs → PointsWidget-DLp-PYus.cjs} +2 -2
- package/dist/{PointsWidget-CLUWrFjZ.cjs.map → PointsWidget-DLp-PYus.cjs.map} +1 -1
- package/dist/{ProfileScreen-CEKbhSRz.cjs → ProfileScreen-BMe-dQi7.cjs} +2 -2
- package/dist/{ProfileScreen-CEKbhSRz.cjs.map → ProfileScreen-BMe-dQi7.cjs.map} +1 -1
- package/dist/{ProfileScreen-Dex8VHSB.cjs → ProfileScreen-ChCZZ91o.cjs} +22 -22
- package/dist/{ProfileScreen-CeD1jq89.mjs → ProfileScreen-_1GlBr7z.mjs} +2 -2
- package/dist/{ProfileScreen-CeD1jq89.mjs.map → ProfileScreen-_1GlBr7z.mjs.map} +1 -1
- package/dist/{RecentActivityWidget-C6RwlUUw.cjs → RecentActivityWidget-BNW9aFT4.cjs} +2 -2
- package/dist/{RecentActivityWidget-C6RwlUUw.cjs.map → RecentActivityWidget-BNW9aFT4.cjs.map} +1 -1
- package/dist/{RecentActivityWidget-zQxtUECm.mjs → RecentActivityWidget-DelPdiwR.mjs} +2 -2
- package/dist/{RecentActivityWidget-zQxtUECm.mjs.map → RecentActivityWidget-DelPdiwR.mjs.map} +1 -1
- package/dist/{ScreenRenderer-Bk23YOtN.mjs → ScreenRenderer-ClYgfQf_.mjs} +2 -2
- package/dist/{ScreenRenderer-Bk23YOtN.mjs.map → ScreenRenderer-ClYgfQf_.mjs.map} +1 -1
- package/dist/{ScreenRenderer-aYfgv6mR.cjs → ScreenRenderer-Ct1w4PNu.cjs} +2 -2
- package/dist/{ScreenRenderer-aYfgv6mR.cjs.map → ScreenRenderer-Ct1w4PNu.cjs.map} +1 -1
- package/dist/{ShareablesScreen-Bt0E1aya.cjs → ShareablesScreen-A69L0Nok.cjs} +136 -108
- package/dist/ShareablesScreen-A69L0Nok.cjs.map +1 -0
- package/dist/{ShareablesScreen-LSyiDa6q.cjs → ShareablesScreen-BUYG-mjj.cjs} +1 -1
- package/dist/{ShareablesScreen-D3Hfqg9-.mjs → ShareablesScreen-sieWBlAl.mjs} +136 -108
- package/dist/ShareablesScreen-sieWBlAl.mjs.map +1 -0
- package/dist/{ShopScreen-dAe71cdL.mjs → ShopScreen-BBfOte5o.mjs} +2 -2
- package/dist/{ShopScreen-dAe71cdL.mjs.map → ShopScreen-BBfOte5o.mjs.map} +1 -1
- package/dist/{ShopScreen-Cgro0M1d.cjs → ShopScreen-CZ_290EP.cjs} +22 -22
- package/dist/{ShopScreen-BiqZPyiB.cjs → ShopScreen-DWLGH2gt.cjs} +2 -2
- package/dist/{ShopScreen-BiqZPyiB.cjs.map → ShopScreen-DWLGH2gt.cjs.map} +1 -1
- package/dist/{TableWidget-D4jQN-to.cjs → TableWidget-BIn1oRiJ.cjs} +4 -4
- package/dist/TableWidget-BIn1oRiJ.cjs.map +1 -0
- package/dist/{TableWidget-DWAYgQcl.cjs → TableWidget-C--8TSX7.cjs} +3 -3
- package/dist/{TableWidget-B0CRdzNf.mjs → TableWidget-dfUvhH0S.mjs} +4 -4
- package/dist/TableWidget-dfUvhH0S.mjs.map +1 -0
- package/dist/{ToDoWidget-BbeXt99H.cjs → ToDoWidget-Bjoan2Rm.cjs} +2 -2
- package/dist/{ToDoWidget-BbeXt99H.cjs.map → ToDoWidget-Bjoan2Rm.cjs.map} +1 -1
- package/dist/{ToDoWidget-VSaNmtWH.mjs → ToDoWidget-CYDsZA0Z.mjs} +2 -2
- package/dist/{ToDoWidget-VSaNmtWH.mjs.map → ToDoWidget-CYDsZA0Z.mjs.map} +1 -1
- package/dist/{ToDoWidget-YHmoDbVU.cjs → ToDoWidget-C_CvWdLi.cjs} +2 -2
- package/dist/{VideoWidget-Bc6ZAAaA.cjs → VideoWidget-CDcV0J5W.cjs} +2 -2
- package/dist/{VideoWidget-Bc6ZAAaA.cjs.map → VideoWidget-CDcV0J5W.cjs.map} +1 -1
- package/dist/{VideoWidget-DcWm239R.mjs → VideoWidget-Dj9wue7j.mjs} +2 -2
- package/dist/{VideoWidget-DcWm239R.mjs.map → VideoWidget-Dj9wue7j.mjs.map} +1 -1
- package/dist/WidgetInteractionContext-B1mELhQ_.mjs +28 -0
- package/dist/{WidgetInteractionContext-D0TJv70C.mjs.map → WidgetInteractionContext-B1mELhQ_.mjs.map} +1 -1
- package/dist/WidgetInteractionContext-DvPmzGqB.cjs +41 -0
- package/dist/{WidgetInteractionContext-Bs3LkFFH.cjs.map → WidgetInteractionContext-DvPmzGqB.cjs.map} +1 -1
- package/dist/index.cjs +84 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +84 -55
- package/dist/index.mjs.map +1 -1
- package/dist/{registry-context-BDH0vNHR.mjs → registry-context-BahYMRqn.mjs} +12 -20
- package/dist/registry-context-BahYMRqn.mjs.map +1 -0
- package/dist/{registry-context-C7-RLxVt.cjs → registry-context-bf52ZIJX.cjs} +12 -20
- package/dist/registry-context-bf52ZIJX.cjs.map +1 -0
- package/package.json +12 -12
- package/dist/ContainerWidget-NFBqSeRV.cjs +0 -8
- package/dist/FluidProvider-BazvsIwu.mjs.map +0 -1
- package/dist/FluidProvider-Dxn7Ehiz.cjs.map +0 -1
- package/dist/MediaRenderer-CfgWd0cC.cjs.map +0 -1
- package/dist/MediaRenderer-CqUpv3St.mjs.map +0 -1
- package/dist/MySiteWidget-B0dc_7Dc.mjs.map +0 -1
- package/dist/MySiteWidget-BkqAS0aY.cjs.map +0 -1
- package/dist/ShareablesScreen-Bt0E1aya.cjs.map +0 -1
- package/dist/ShareablesScreen-D3Hfqg9-.mjs.map +0 -1
- package/dist/TableWidget-B0CRdzNf.mjs.map +0 -1
- package/dist/TableWidget-D4jQN-to.cjs.map +0 -1
- package/dist/WidgetInteractionContext-Bs3LkFFH.cjs +0 -18
- package/dist/WidgetInteractionContext-D0TJv70C.mjs +0 -11
- package/dist/registry-context-BDH0vNHR.mjs.map +0 -1
- 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'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'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-
|
|
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-
|
|
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'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'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-
|
|
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-
|
|
51
|
+
//# sourceMappingURL=ContainerWidget-BXpdj06u.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContainerWidget-
|
|
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-
|
|
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-
|
|
44
|
+
//# sourceMappingURL=ContainerWidget-CpwvcxFm.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContainerWidget-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
19
|
-
import { t as CardWidget } from "./CardWidget-
|
|
20
|
-
import { t as CarouselWidget } from "./CarouselWidget-
|
|
21
|
-
import { t as CatchUpWidget } from "./CatchUpWidget-
|
|
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-
|
|
24
|
-
import { t as ImageWidget } from "./ImageWidget-
|
|
25
|
-
import { t as LinkWidget } from "./LinkWidget-
|
|
26
|
-
import { t as ListWidget } from "./ListWidget-
|
|
27
|
-
import { t as MySiteWidget } from "./MySiteWidget-
|
|
28
|
-
import { t as NestedWidget } from "./NestedWidget-
|
|
29
|
-
import { t as PointsWidget } from "./PointsWidget-
|
|
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-
|
|
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-
|
|
36
|
-
import { t as ToDoWidget } from "./ToDoWidget-
|
|
37
|
-
import { t as VideoWidget } from "./VideoWidget-
|
|
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
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
case "
|
|
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
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
case "
|
|
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 `
|
|
763
|
-
* `total` → `amount`/`total_display_amount
|
|
764
|
-
* `line_items[0]` → `first_item` (first product
|
|
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.
|
|
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
|
|
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-
|
|
2056
|
-
CardWidget: () => import("./CardWidget-
|
|
2057
|
-
CarouselWidget: () => import("./CarouselWidget-
|
|
2058
|
-
CatchUpWidget: () => import("./CatchUpWidget-
|
|
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-
|
|
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-
|
|
2063
|
-
LayoutWidget: () => import("./LayoutWidget-
|
|
2064
|
-
LinkWidget: () => import("./LinkWidget-
|
|
2065
|
-
ListWidget: () => import("./ListWidget-
|
|
2066
|
-
MySiteWidget: () => import("./MySiteWidget-
|
|
2067
|
-
NestedWidget: () => import("./NestedWidget-
|
|
2068
|
-
PointsWidget: () => import("./PointsWidget-
|
|
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-
|
|
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-
|
|
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-
|
|
2077
|
-
VideoWidget: () => import("./VideoWidget-
|
|
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-
|
|
2237
|
+
//# sourceMappingURL=FluidProvider-DL5rChtj.mjs.map
|