@fluid-app/portal-sdk 0.1.173 → 0.1.175

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 (56) hide show
  1. package/dist/{MessagingScreen-CK6vqsQI.mjs → MessagingScreen-BDp1yqcC.mjs} +6 -3
  2. package/dist/{MessagingScreen-CK6vqsQI.mjs.map → MessagingScreen-BDp1yqcC.mjs.map} +1 -1
  3. package/dist/{MessagingScreen-mKNu6iHk.cjs → MessagingScreen-DVpyX0RH.cjs} +5 -2
  4. package/dist/{MessagingScreen-mKNu6iHk.cjs.map → MessagingScreen-DVpyX0RH.cjs.map} +1 -1
  5. package/dist/{MessagingScreen-DenN7Doe.cjs → MessagingScreen-DsduPj7E.cjs} +1 -1
  6. package/dist/{MySiteScreen-ZLvvJhoy.mjs → MySiteScreen-BsePIEvg.mjs} +6 -4
  7. package/dist/{MySiteScreen-ZLvvJhoy.mjs.map → MySiteScreen-BsePIEvg.mjs.map} +1 -1
  8. package/dist/{MySiteScreen-CxhmVSdK.cjs → MySiteScreen-C_D3tfA8.cjs} +1 -1
  9. package/dist/{MySiteScreen-BM3EuPZ4.cjs → MySiteScreen-rYmC05jG.cjs} +5 -3
  10. package/dist/{MySiteScreen-BM3EuPZ4.cjs.map → MySiteScreen-rYmC05jG.cjs.map} +1 -1
  11. package/dist/{OrdersScreen-CgndBekB.cjs → OrdersScreen-BFeY4w9X.cjs} +1 -1
  12. package/dist/{OrdersScreen-Bb0Ir9UQ.mjs → OrdersScreen-Br-KImu9.mjs} +6 -4
  13. package/dist/{OrdersScreen-Bb0Ir9UQ.mjs.map → OrdersScreen-Br-KImu9.mjs.map} +1 -1
  14. package/dist/{OrdersScreen-Ci3bLi5R.cjs → OrdersScreen-CJDd-LdN.cjs} +5 -3
  15. package/dist/{OrdersScreen-Ci3bLi5R.cjs.map → OrdersScreen-CJDd-LdN.cjs.map} +1 -1
  16. package/dist/{PortalContentApiProvider-DNZj3MTz.cjs → PortalContentApiProvider-CqfumtyH.cjs} +4 -4
  17. package/dist/PortalContentApiProvider-CqfumtyH.cjs.map +1 -0
  18. package/dist/{PortalContentApiProvider-D0xhS3Ge.mjs → PortalContentApiProvider-CvYJD4mj.mjs} +4 -4
  19. package/dist/PortalContentApiProvider-CvYJD4mj.mjs.map +1 -0
  20. package/dist/{ProductsScreen-BA9KYBz7.cjs → ProductsScreen-BGFL7B9Y.cjs} +4 -3
  21. package/dist/ProductsScreen-BGFL7B9Y.cjs.map +1 -0
  22. package/dist/{ProductsScreen-uoTQR9PU.mjs → ProductsScreen-BUCzY4c8.mjs} +2 -2
  23. package/dist/{ProductsScreen-5aaLW_mi.mjs → ProductsScreen-CJWgYPY9.mjs} +4 -3
  24. package/dist/ProductsScreen-CJWgYPY9.mjs.map +1 -0
  25. package/dist/{ProductsScreen-CgNQv9T1.cjs → ProductsScreen-CyOr92nO.cjs} +2 -2
  26. package/dist/{ProfileScreen-BZA9PaER.cjs → ProfileScreen-BSWf_Rb-.cjs} +5 -3
  27. package/dist/{ProfileScreen-BZA9PaER.cjs.map → ProfileScreen-BSWf_Rb-.cjs.map} +1 -1
  28. package/dist/{ProfileScreen-0-xeqjHj.mjs → ProfileScreen-DQ7Mjq_K.mjs} +5 -3
  29. package/dist/{ProfileScreen-0-xeqjHj.mjs.map → ProfileScreen-DQ7Mjq_K.mjs.map} +1 -1
  30. package/dist/{ProfileScreen-_m0nqiDQ.cjs → ProfileScreen-Nric2qx3.cjs} +1 -1
  31. package/dist/{ShareablesScreen-C51d1euJ.cjs → ShareablesScreen-BYySYuY1.cjs} +4 -4
  32. package/dist/ShareablesScreen-BYySYuY1.cjs.map +1 -0
  33. package/dist/{ShareablesScreen-0iGOTfNW.mjs → ShareablesScreen-Ca0VOB6e.mjs} +6 -6
  34. package/dist/ShareablesScreen-Ca0VOB6e.mjs.map +1 -0
  35. package/dist/{ShareablesScreen-BdAGblEo.mjs → ShareablesScreen-Cr-WyfrQ.mjs} +2 -2
  36. package/dist/{ShareablesScreen-DNWdru1i.cjs → ShareablesScreen-PPfy8gtj.cjs} +2 -2
  37. package/dist/{SubscriptionsScreen-_iUOr_D1.cjs → SubscriptionsScreen-BuxFW2sw.cjs} +5 -3
  38. package/dist/{SubscriptionsScreen-_iUOr_D1.cjs.map → SubscriptionsScreen-BuxFW2sw.cjs.map} +1 -1
  39. package/dist/{SubscriptionsScreen-DzCRMlX5.cjs → SubscriptionsScreen-Bz6FVnmk.cjs} +1 -1
  40. package/dist/{SubscriptionsScreen-Gig1ciN_.mjs → SubscriptionsScreen-DBUELjIY.mjs} +6 -4
  41. package/dist/{SubscriptionsScreen-Gig1ciN_.mjs.map → SubscriptionsScreen-DBUELjIY.mjs.map} +1 -1
  42. package/dist/index.cjs +26 -27
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.d.cts +1 -2
  45. package/dist/index.d.cts.map +1 -1
  46. package/dist/index.d.mts +1 -2
  47. package/dist/index.d.mts.map +1 -1
  48. package/dist/index.mjs +27 -28
  49. package/dist/index.mjs.map +1 -1
  50. package/package.json +12 -15
  51. package/dist/PortalContentApiProvider-D0xhS3Ge.mjs.map +0 -1
  52. package/dist/PortalContentApiProvider-DNZj3MTz.cjs.map +0 -1
  53. package/dist/ProductsScreen-5aaLW_mi.mjs.map +0 -1
  54. package/dist/ProductsScreen-BA9KYBz7.cjs.map +0 -1
  55. package/dist/ShareablesScreen-0iGOTfNW.mjs.map +0 -1
  56. package/dist/ShareablesScreen-C51d1euJ.cjs.map +0 -1
@@ -38,6 +38,6 @@ require("./TableWidget-C0ZCnkJh.cjs");
38
38
  require("./ToDoWidget-CnO1TQ4L.cjs");
39
39
  require("./VideoWidget-CqFrRQpB.cjs");
40
40
  require("./ScreenHeaderContext-DA8cEfP-.cjs");
41
- const require_ProfileScreen = require("./ProfileScreen-BZA9PaER.cjs");
41
+ const require_ProfileScreen = require("./ProfileScreen-BSWf_Rb-.cjs");
42
42
  exports.ProfileScreen = require_ProfileScreen.ProfileScreen;
43
43
  exports.profileScreenPropertySchema = require_ProfileScreen.profileScreenPropertySchema;
@@ -4,7 +4,7 @@ const require_src = require("./src-B0AAcRhB.cjs");
4
4
  const require_use_account = require("./use-account-g6kmUHQb.cjs");
5
5
  const require_use_store = require("./use-store-Cj1IB61b.cjs");
6
6
  const require_AppNavigationContext = require("./AppNavigationContext-N5oUbgNL.cjs");
7
- const require_PortalContentApiProvider = require("./PortalContentApiProvider-DNZj3MTz.cjs");
7
+ const require_PortalContentApiProvider = require("./PortalContentApiProvider-CqfumtyH.cjs");
8
8
  const require_PortalProductsApiProvider = require("./PortalProductsApiProvider-DJbSPAs3.cjs");
9
9
  const require_use_mysite_portal = require("./use-mysite-portal-BkEi6LG-.cjs");
10
10
  let react = require("react");
@@ -40,10 +40,10 @@ function parseShareablesRoute(currentSlug) {
40
40
  };
41
41
  }
42
42
  function ShareablesScreen({ background, textColor, accentColor, padding, borderRadius, ...divProps }) {
43
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
43
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
44
  ...divProps,
45
45
  className: `h-full ${divProps.className ?? ""}`,
46
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PortalProductsApiProvider.PortalProductsApiProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PortalContentApiProvider.PortalContentApiProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareablesScreenContent, {}) }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Toaster, {})]
46
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PortalProductsApiProvider.PortalProductsApiProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_PortalContentApiProvider.PortalContentApiProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShareablesScreenContent, {}) }) })
47
47
  });
48
48
  }
49
49
  /** Inner component rendered inside providers so hooks can access context. */
@@ -164,4 +164,4 @@ Object.defineProperty(exports, "shareablesScreenPropertySchema", {
164
164
  }
165
165
  });
166
166
 
167
- //# sourceMappingURL=ShareablesScreen-C51d1euJ.cjs.map
167
+ //# sourceMappingURL=ShareablesScreen-BYySYuY1.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareablesScreen-BYySYuY1.cjs","names":["PortalProductsApiProvider","PortalContentApiProvider","usePortalContentContext","useAccount","useStore","useAppNavigation","usePortalTenantClient","ShareablesCoreProvider","ShareablesUIProvider","toggleFavorite","PORTAL_MYSITE_KEYS","ShareablesApp"],"sources":["../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { fluidToast } from \"@fluid-app/ui-primitives\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { ShareablesCoreProvider } from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useAccount } from \"../hooks/use-account\";\nimport { useStore } from \"../hooks/use-store\";\nimport { PortalProductsApiProvider } from \"../products/PortalProductsApiProvider\";\nimport {\n PortalContentApiProvider,\n usePortalContentContext,\n} from \"../content/PortalContentApiProvider\";\nimport { toggleFavorite } from \"../adapters/content-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { PORTAL_MYSITE_KEYS } from \"@fluid-app/mysite-ui/portal/hooks/use-mysite-portal\";\n\ntype ShareablesScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n};\n\n/**\n * Parse the current shareables sub-route from the full slug.\n *\n * System nav slugs are \"share/products\", \"share/media\", \"share/playlists\".\n * Detail pages append an ID: \"share/products/123\", \"share/media/456\".\n *\n * \"share/products\" → screen=\"products\", detailId=null\n * \"share/products/123\" → screen=\"products\", detailId=\"123\"\n * \"share/media/456\" → screen=\"media\", detailId=\"456\"\n * \"share/playlists\" → screen=\"playlists\", detailId=null\n * \"share/playlists/789\" → screen=\"playlists\", detailId=\"789\"\n * \"share/files\" → screen=\"files\", detailId=null\n * \"share\" → screen=null (default to products)\n */\nfunction parseShareablesRoute(currentSlug: string): {\n screen: string | null;\n detailId: string | null;\n action: string | null;\n} {\n // Strip the \"share\" prefix\n const slugWithoutPrefix = currentSlug.replace(/^share\\/?/, \"\");\n if (!slugWithoutPrefix) {\n return { screen: null, detailId: null, action: null };\n }\n\n const parts = slugWithoutPrefix.split(\"/\");\n const screen = parts[0] || null;\n const detailId = parts[1] || null;\n const action = parts[2] || null;\n return { screen, detailId, action };\n}\n\nexport function ShareablesScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: ShareablesScreenProps): React.JSX.Element {\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <PortalProductsApiProvider>\n <PortalContentApiProvider>\n <ShareablesScreenContent />\n </PortalContentApiProvider>\n </PortalProductsApiProvider>\n </div>\n );\n}\n\n/** Inner component rendered inside providers so hooks can access context. */\nfunction ShareablesScreenContent(): React.JSX.Element {\n const shareablesCtx = usePortalContentContext();\n const { productsApi: portalProductsApi } = shareablesCtx;\n const { data: account } = useAccount();\n const { data: store } = useStore();\n const { currentSlug, navigate } = useAppNavigation();\n const isCustomer = account?.member_type === \"customer\";\n const portalTenantClient = usePortalTenantClient();\n const queryClient = useQueryClient();\n\n const fetchProducts = useCallback(\n async (search: string, cursor?: string, limit?: number) => {\n if (search) {\n return portalProductsApi.searchProducts(search, { cursor, limit });\n }\n return portalProductsApi.listProducts({ cursor, limit });\n },\n [portalProductsApi],\n );\n\n const fetchProduct = useCallback(\n async (id: string | number) => portalProductsApi.getProduct(id),\n [portalProductsApi],\n );\n\n const { screen, detailId, action } = parseShareablesRoute(currentSlug);\n\n const handleNavigate = useCallback(\n (subScreen: string, id?: string) => {\n const path = id ? `share/${subScreen}/${id}` : `share/${subScreen}`;\n navigate(path);\n },\n [navigate],\n );\n\n const handleBack = useCallback(() => {\n if (detailId && screen) {\n navigate(`share/${screen}`);\n } else {\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n user: account ? { id: account.id } : null,\n repContext: true,\n }),\n [account],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: account\n ? {\n id: account.id,\n company: { logo_url: store?.logo_url ?? null },\n }\n : undefined,\n basePath: \"\",\n navigate: (path: string) => {\n const cleanPath = path.replace(/^\\//, \"\");\n const prefixed = cleanPath.startsWith(\"share/\")\n ? cleanPath\n : `share/${cleanPath}`;\n navigate(prefixed);\n },\n showToast: (opts: {\n title: string;\n type: \"success\" | \"error\" | \"warning\";\n error?: unknown;\n }) => {\n fluidToast({ title: opts.title, type: opts.type });\n if (opts.error) console.error(\"[Shareables]\", opts.error);\n },\n filePickerApi: shareablesCtx.filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const result = await toggleFavorite(\n portalTenantClient,\n params.favoriteableId,\n params.favoriteableType,\n );\n queryClient.invalidateQueries({\n queryKey: PORTAL_MYSITE_KEYS.favorites(),\n });\n return result;\n },\n onMySiteShare: async (params: {\n shareLink: string;\n relateable_id: number;\n relateable_type: string;\n }) => {\n const result = await toggleFavorite(\n portalTenantClient,\n params.relateable_id,\n params.relateable_type,\n );\n queryClient.invalidateQueries({\n queryKey: PORTAL_MYSITE_KEYS.favorites(),\n });\n return result;\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n await shareablesCtx.playlistsAdapter.deletePlaylist(playlistId);\n },\n readOnly: isCustomer,\n }),\n [\n account,\n store,\n navigate,\n shareablesCtx.filePickerApi,\n isCustomer,\n shareablesCtx.playlistsAdapter,\n portalTenantClient,\n queryClient,\n ],\n );\n\n return (\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={store?.logo_url ?? undefined}\n countryCode={undefined}\n fetchProducts={fetchProducts}\n fetchProduct={fetchProduct}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesCoreProvider>\n );\n}\n\nexport const shareablesScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"ShareablesScreen\",\n displayName: \"Shareables Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { n as usePortalTenantClient } from "./PortalTenantClientProvider-BF-1Fy27.mjs";
2
- import { _ as fluidToast, v as Toaster } from "./src-BYkS71q3.mjs";
2
+ import { _ as fluidToast } from "./src-BYkS71q3.mjs";
3
3
  import { t as useAccount } from "./use-account-DnIECysc.mjs";
4
4
  import { t as useStore } from "./use-store-46y6EX4R.mjs";
5
5
  import { n as useAppNavigation } from "./AppNavigationContext-qFKCN8FO.mjs";
6
- import { a as ShareablesApp, n as usePortalContentContext, o as ShareablesUIProvider, r as toggleFavorite, s as ShareablesCoreProvider, t as PortalContentApiProvider } from "./PortalContentApiProvider-D0xhS3Ge.mjs";
6
+ import { a as ShareablesApp, n as usePortalContentContext, o as ShareablesUIProvider, r as toggleFavorite, s as ShareablesCoreProvider, t as PortalContentApiProvider } from "./PortalContentApiProvider-CvYJD4mj.mjs";
7
7
  import { t as PortalProductsApiProvider } from "./PortalProductsApiProvider-BWtB6rV2.mjs";
8
8
  import { t as PORTAL_MYSITE_KEYS } from "./use-mysite-portal-CtU6iAbx.mjs";
9
9
  import { useCallback, useMemo } from "react";
10
10
  import { useQueryClient } from "@tanstack/react-query";
11
- import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { jsx } from "react/jsx-runtime";
12
12
  //#region src/screens/ShareablesScreen.tsx
13
13
  /**
14
14
  * Parse the current shareables sub-route from the full slug.
@@ -39,10 +39,10 @@ function parseShareablesRoute(currentSlug) {
39
39
  };
40
40
  }
41
41
  function ShareablesScreen({ background, textColor, accentColor, padding, borderRadius, ...divProps }) {
42
- return /* @__PURE__ */ jsxs("div", {
42
+ return /* @__PURE__ */ jsx("div", {
43
43
  ...divProps,
44
44
  className: `h-full ${divProps.className ?? ""}`,
45
- children: [/* @__PURE__ */ jsx(PortalProductsApiProvider, { children: /* @__PURE__ */ jsx(PortalContentApiProvider, { children: /* @__PURE__ */ jsx(ShareablesScreenContent, {}) }) }), /* @__PURE__ */ jsx(Toaster, {})]
45
+ children: /* @__PURE__ */ jsx(PortalProductsApiProvider, { children: /* @__PURE__ */ jsx(PortalContentApiProvider, { children: /* @__PURE__ */ jsx(ShareablesScreenContent, {}) }) })
46
46
  });
47
47
  }
48
48
  /** Inner component rendered inside providers so hooks can access context. */
@@ -152,4 +152,4 @@ const shareablesScreenPropertySchema = {
152
152
  //#endregion
153
153
  export { shareablesScreenPropertySchema as n, ShareablesScreen as t };
154
154
 
155
- //# sourceMappingURL=ShareablesScreen-0iGOTfNW.mjs.map
155
+ //# sourceMappingURL=ShareablesScreen-Ca0VOB6e.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareablesScreen-Ca0VOB6e.mjs","names":[],"sources":["../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { fluidToast } from \"@fluid-app/ui-primitives\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { ShareablesCoreProvider } from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useAccount } from \"../hooks/use-account\";\nimport { useStore } from \"../hooks/use-store\";\nimport { PortalProductsApiProvider } from \"../products/PortalProductsApiProvider\";\nimport {\n PortalContentApiProvider,\n usePortalContentContext,\n} from \"../content/PortalContentApiProvider\";\nimport { toggleFavorite } from \"../adapters/content-api-adapter\";\nimport { usePortalTenantClient } from \"../providers/PortalTenantClientProvider\";\nimport { PORTAL_MYSITE_KEYS } from \"@fluid-app/mysite-ui/portal/hooks/use-mysite-portal\";\n\ntype ShareablesScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n};\n\n/**\n * Parse the current shareables sub-route from the full slug.\n *\n * System nav slugs are \"share/products\", \"share/media\", \"share/playlists\".\n * Detail pages append an ID: \"share/products/123\", \"share/media/456\".\n *\n * \"share/products\" → screen=\"products\", detailId=null\n * \"share/products/123\" → screen=\"products\", detailId=\"123\"\n * \"share/media/456\" → screen=\"media\", detailId=\"456\"\n * \"share/playlists\" → screen=\"playlists\", detailId=null\n * \"share/playlists/789\" → screen=\"playlists\", detailId=\"789\"\n * \"share/files\" → screen=\"files\", detailId=null\n * \"share\" → screen=null (default to products)\n */\nfunction parseShareablesRoute(currentSlug: string): {\n screen: string | null;\n detailId: string | null;\n action: string | null;\n} {\n // Strip the \"share\" prefix\n const slugWithoutPrefix = currentSlug.replace(/^share\\/?/, \"\");\n if (!slugWithoutPrefix) {\n return { screen: null, detailId: null, action: null };\n }\n\n const parts = slugWithoutPrefix.split(\"/\");\n const screen = parts[0] || null;\n const detailId = parts[1] || null;\n const action = parts[2] || null;\n return { screen, detailId, action };\n}\n\nexport function ShareablesScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: ShareablesScreenProps): React.JSX.Element {\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <PortalProductsApiProvider>\n <PortalContentApiProvider>\n <ShareablesScreenContent />\n </PortalContentApiProvider>\n </PortalProductsApiProvider>\n </div>\n );\n}\n\n/** Inner component rendered inside providers so hooks can access context. */\nfunction ShareablesScreenContent(): React.JSX.Element {\n const shareablesCtx = usePortalContentContext();\n const { productsApi: portalProductsApi } = shareablesCtx;\n const { data: account } = useAccount();\n const { data: store } = useStore();\n const { currentSlug, navigate } = useAppNavigation();\n const isCustomer = account?.member_type === \"customer\";\n const portalTenantClient = usePortalTenantClient();\n const queryClient = useQueryClient();\n\n const fetchProducts = useCallback(\n async (search: string, cursor?: string, limit?: number) => {\n if (search) {\n return portalProductsApi.searchProducts(search, { cursor, limit });\n }\n return portalProductsApi.listProducts({ cursor, limit });\n },\n [portalProductsApi],\n );\n\n const fetchProduct = useCallback(\n async (id: string | number) => portalProductsApi.getProduct(id),\n [portalProductsApi],\n );\n\n const { screen, detailId, action } = parseShareablesRoute(currentSlug);\n\n const handleNavigate = useCallback(\n (subScreen: string, id?: string) => {\n const path = id ? `share/${subScreen}/${id}` : `share/${subScreen}`;\n navigate(path);\n },\n [navigate],\n );\n\n const handleBack = useCallback(() => {\n if (detailId && screen) {\n navigate(`share/${screen}`);\n } else {\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n user: account ? { id: account.id } : null,\n repContext: true,\n }),\n [account],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: account\n ? {\n id: account.id,\n company: { logo_url: store?.logo_url ?? null },\n }\n : undefined,\n basePath: \"\",\n navigate: (path: string) => {\n const cleanPath = path.replace(/^\\//, \"\");\n const prefixed = cleanPath.startsWith(\"share/\")\n ? cleanPath\n : `share/${cleanPath}`;\n navigate(prefixed);\n },\n showToast: (opts: {\n title: string;\n type: \"success\" | \"error\" | \"warning\";\n error?: unknown;\n }) => {\n fluidToast({ title: opts.title, type: opts.type });\n if (opts.error) console.error(\"[Shareables]\", opts.error);\n },\n filePickerApi: shareablesCtx.filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const result = await toggleFavorite(\n portalTenantClient,\n params.favoriteableId,\n params.favoriteableType,\n );\n queryClient.invalidateQueries({\n queryKey: PORTAL_MYSITE_KEYS.favorites(),\n });\n return result;\n },\n onMySiteShare: async (params: {\n shareLink: string;\n relateable_id: number;\n relateable_type: string;\n }) => {\n const result = await toggleFavorite(\n portalTenantClient,\n params.relateable_id,\n params.relateable_type,\n );\n queryClient.invalidateQueries({\n queryKey: PORTAL_MYSITE_KEYS.favorites(),\n });\n return result;\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n await shareablesCtx.playlistsAdapter.deletePlaylist(playlistId);\n },\n readOnly: isCustomer,\n }),\n [\n account,\n store,\n navigate,\n shareablesCtx.filePickerApi,\n isCustomer,\n shareablesCtx.playlistsAdapter,\n portalTenantClient,\n queryClient,\n ],\n );\n\n return (\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={store?.logo_url ?? undefined}\n countryCode={undefined}\n fetchProducts={fetchProducts}\n fetchProduct={fetchProduct}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesCoreProvider>\n );\n}\n\nexport const shareablesScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"ShareablesScreen\",\n displayName: \"Shareables Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAS,qBAAqB,aAI5B;CAEA,MAAM,oBAAoB,YAAY,QAAQ,aAAa,GAAG;AAC9D,KAAI,CAAC,kBACH,QAAO;EAAE,QAAQ;EAAM,UAAU;EAAM,QAAQ;EAAM;CAGvD,MAAM,QAAQ,kBAAkB,MAAM,IAAI;AAI1C,QAAO;EAAE,QAHM,MAAM,MAAM;EAGV,UAFA,MAAM,MAAM;EAEF,QADZ,MAAM,MAAM;EACQ;;AAGrC,SAAgB,iBAAiB,EAE/B,YACA,WACA,aACA,SACA,cAEA,GAAG,YACwC;AAC3C,QACE,oBAAC,OAAD;EAAK,GAAI;EAAU,WAAW,UAAU,SAAS,aAAa;YAC5D,oBAAC,2BAAD,EAAA,UACE,oBAAC,0BAAD,EAAA,UACE,oBAAC,yBAAD,EAA2B,CAAA,EACF,CAAA,EACD,CAAA;EACxB,CAAA;;;AAKV,SAAS,0BAA6C;CACpD,MAAM,gBAAgB,yBAAyB;CAC/C,MAAM,EAAE,aAAa,sBAAsB;CAC3C,MAAM,EAAE,MAAM,YAAY,YAAY;CACtC,MAAM,EAAE,MAAM,UAAU,UAAU;CAClC,MAAM,EAAE,aAAa,aAAa,kBAAkB;CACpD,MAAM,aAAa,SAAS,gBAAgB;CAC5C,MAAM,qBAAqB,uBAAuB;CAClD,MAAM,cAAc,gBAAgB;CAEpC,MAAM,gBAAgB,YACpB,OAAO,QAAgB,QAAiB,UAAmB;AACzD,MAAI,OACF,QAAO,kBAAkB,eAAe,QAAQ;GAAE;GAAQ;GAAO,CAAC;AAEpE,SAAO,kBAAkB,aAAa;GAAE;GAAQ;GAAO,CAAC;IAE1D,CAAC,kBAAkB,CACpB;CAED,MAAM,eAAe,YACnB,OAAO,OAAwB,kBAAkB,WAAW,GAAG,EAC/D,CAAC,kBAAkB,CACpB;CAED,MAAM,EAAE,QAAQ,UAAU,WAAW,qBAAqB,YAAY;CAEtE,MAAM,iBAAiB,aACpB,WAAmB,OAAgB;AAElC,WADa,KAAK,SAAS,UAAU,GAAG,OAAO,SAAS,YAC1C;IAEhB,CAAC,SAAS,CACX;CAED,MAAM,aAAa,kBAAkB;AACnC,MAAI,YAAY,OACd,UAAS,SAAS,SAAS;MAE3B,UAAS,iBAAiB;IAE3B;EAAC;EAAU;EAAU;EAAO,CAAC;AAmFhC,QACE,oBAAC,wBAAD;EAAwB,QAlFP,eACV;GACL,MAAM,UAAU,EAAE,IAAI,QAAQ,IAAI,GAAG;GACrC,YAAY;GACb,GACD,CAAC,QAAQ,CACV;YA6EG,oBAAC,sBAAD;GAAsB,QA3ET,eACR;IACL,MAAM,UACF;KACE,IAAI,QAAQ;KACZ,SAAS,EAAE,UAAU,OAAO,YAAY,MAAM;KAC/C,GACD,KAAA;IACJ,UAAU;IACV,WAAW,SAAiB;KAC1B,MAAM,YAAY,KAAK,QAAQ,OAAO,GAAG;AAIzC,cAHiB,UAAU,WAAW,SAAS,GAC3C,YACA,SAAS,YACK;;IAEpB,YAAY,SAIN;AACJ,gBAAW;MAAE,OAAO,KAAK;MAAO,MAAM,KAAK;MAAM,CAAC;AAClD,SAAI,KAAK,MAAO,SAAQ,MAAM,gBAAgB,KAAK,MAAM;;IAE3D,eAAe,cAAc;IAC7B,kBAAkB,OAAO,WAGnB;KACJ,MAAM,SAAS,MAAM,eACnB,oBACA,OAAO,gBACP,OAAO,iBACR;AACD,iBAAY,kBAAkB,EAC5B,UAAU,mBAAmB,WAAW,EACzC,CAAC;AACF,YAAO;;IAET,eAAe,OAAO,WAIhB;KACJ,MAAM,SAAS,MAAM,eACnB,oBACA,OAAO,eACP,OAAO,gBACR;AACD,iBAAY,kBAAkB,EAC5B,UAAU,mBAAmB,WAAW,EACzC,CAAC;AACF,YAAO;;IAET,kBAAkB,aACd,KAAA,IACA,OAAO,eAAuB;AAC5B,WAAM,cAAc,iBAAiB,eAAe,WAAW;;IAErE,UAAU;IACX,GACD;IACE;IACA;IACA;IACA,cAAc;IACd;IACA,cAAc;IACd;IACA;IACD,CACF;aAKK,oBAAC,eAAD;IACU;IACE;IACF;IACR,gBAAgB,OAAO,YAAY,KAAA;IACnC,aAAa,KAAA;IACE;IACD;IACd,YAAY;IACZ,QAAQ;IACR,CAAA;GACmB,CAAA;EACA,CAAA;;AAI7B,MAAa,iCAAuD;CAClE,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ,EAAE;CACX"}
@@ -7,9 +7,9 @@ import "./ScreenHeaderContext-DhC-5Y4x.mjs";
7
7
  import "./dist-BJl_h8oY.mjs";
8
8
  import "./SearchSort-C2bgQmpq.mjs";
9
9
  import "./dist-_FHV_-LH.mjs";
10
- import "./PortalContentApiProvider-D0xhS3Ge.mjs";
10
+ import "./PortalContentApiProvider-CvYJD4mj.mjs";
11
11
  import "./sortable.esm-CzzU6kIR.mjs";
12
12
  import "./PortalProductsApiProvider-BWtB6rV2.mjs";
13
13
  import "./use-mysite-portal-CtU6iAbx.mjs";
14
- import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-0iGOTfNW.mjs";
14
+ import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-Ca0VOB6e.mjs";
15
15
  export { ShareablesScreen, shareablesScreenPropertySchema };
@@ -8,10 +8,10 @@ require("./dist-RSRllN0L.cjs");
8
8
  require("./es-Bd1u7pBf.cjs");
9
9
  require("./SearchSort-C0Yb_KwG.cjs");
10
10
  require("./dist-BbgJz6D2.cjs");
11
- require("./PortalContentApiProvider-DNZj3MTz.cjs");
11
+ require("./PortalContentApiProvider-CqfumtyH.cjs");
12
12
  require("./dist-Mf7Sx86H.cjs");
13
13
  require("./PortalProductsApiProvider-DJbSPAs3.cjs");
14
14
  require("./use-mysite-portal-BkEi6LG-.cjs");
15
- const require_ShareablesScreen = require("./ShareablesScreen-C51d1euJ.cjs");
15
+ const require_ShareablesScreen = require("./ShareablesScreen-BYySYuY1.cjs");
16
16
  exports.ShareablesScreen = require_ShareablesScreen.ShareablesScreen;
17
17
  exports.shareablesScreenPropertySchema = require_ShareablesScreen.shareablesScreenPropertySchema;
@@ -1491,8 +1491,10 @@ function SubscriptionDetailScreen({ token, onToast }) {
1491
1491
  //#endregion
1492
1492
  //#region src/screens/SubscriptionsScreen.tsx
1493
1493
  function defaultToast(message, type) {
1494
- if (type === "error" || type === "warning") console.warn("[Subscriptions]", message);
1495
- else console.info("[Subscriptions]", message);
1494
+ require_src.fluidToast({
1495
+ title: message,
1496
+ type
1497
+ });
1496
1498
  }
1497
1499
  function SubscriptionsScreen({ onToast, background, textColor, accentColor, padding, borderRadius, ...divProps }) {
1498
1500
  const { currentSlug } = require_AppNavigationContext.useAppNavigation();
@@ -1540,4 +1542,4 @@ Object.defineProperty(exports, "subscriptionsScreenPropertySchema", {
1540
1542
  }
1541
1543
  });
1542
1544
 
1543
- //# sourceMappingURL=SubscriptionsScreen-_iUOr_D1.cjs.map
1545
+ //# sourceMappingURL=SubscriptionsScreen-BuxFW2sw.cjs.map