@fluid-app/portal-sdk 0.1.106 → 0.1.107

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 (133) hide show
  1. package/dist/{AppDownloadScreen-BBpvNeFO.mjs → AppDownloadScreen-BvcyEKCk.mjs} +2 -2
  2. package/dist/{AppDownloadScreen-BBpvNeFO.mjs.map → AppDownloadScreen-BvcyEKCk.mjs.map} +1 -1
  3. package/dist/{AppDownloadScreen-Da79ffTK.cjs → AppDownloadScreen-DzFc_CDn.cjs} +2 -2
  4. package/dist/{AppDownloadScreen-Da79ffTK.cjs.map → AppDownloadScreen-DzFc_CDn.cjs.map} +1 -1
  5. package/dist/{AppDownloadScreen-R3rcFWzL.cjs → AppDownloadScreen-Uc9N7K_K.cjs} +2 -2
  6. package/dist/{ContactsScreen-CGyCNeZy.mjs → ContactsScreen-BNqIi0XS.mjs} +5 -5
  7. package/dist/{ContactsScreen-CGyCNeZy.mjs.map → ContactsScreen-BNqIi0XS.mjs.map} +1 -1
  8. package/dist/{ContactsScreen-CFC32ATZ.cjs → ContactsScreen-C6cCTl51.cjs} +5 -5
  9. package/dist/{ContactsScreen-CFC32ATZ.cjs.map → ContactsScreen-C6cCTl51.cjs.map} +1 -1
  10. package/dist/{ContactsScreen-D81raD2s.cjs → ContactsScreen-D2DYk3A-.cjs} +6 -6
  11. package/dist/{FluidProvider-DbYLBGGg.cjs → FluidProvider-NnE6s3O0.cjs} +6 -458
  12. package/dist/FluidProvider-NnE6s3O0.cjs.map +1 -0
  13. package/dist/{FluidProvider-B59bzF__.mjs → FluidProvider-dTwaHRzI.mjs} +7 -483
  14. package/dist/FluidProvider-dTwaHRzI.mjs.map +1 -0
  15. package/dist/{MessagingScreen-Bg-7zNye.mjs → MessagingScreen-BA6fMOmD.mjs} +5 -4
  16. package/dist/{MessagingScreen-TCOhXTPN.cjs → MessagingScreen-C_tCav2Y.cjs} +4 -4
  17. package/dist/{MessagingScreen-DsH-L7vB.cjs → MessagingScreen-DH0YxaOG.cjs} +8 -10
  18. package/dist/{MessagingScreen-DsH-L7vB.cjs.map → MessagingScreen-DH0YxaOG.cjs.map} +1 -1
  19. package/dist/{MessagingScreen-6SfuZqDC.mjs → MessagingScreen-Dv8HVEt-.mjs} +8 -10
  20. package/dist/MessagingScreen-Dv8HVEt-.mjs.map +1 -0
  21. package/dist/{MySiteScreen-DDX4xcMv.cjs → MySiteScreen-Bda8FzQ9.cjs} +3 -3
  22. package/dist/{MySiteScreen-BHiMCIZ_.cjs → MySiteScreen-DydtAGvt.cjs} +3 -3
  23. package/dist/{MySiteScreen-BHiMCIZ_.cjs.map → MySiteScreen-DydtAGvt.cjs.map} +1 -1
  24. package/dist/{MySiteScreen-BI089vJc.mjs → MySiteScreen-t89PLodk.mjs} +3 -3
  25. package/dist/{MySiteScreen-BI089vJc.mjs.map → MySiteScreen-t89PLodk.mjs.map} +1 -1
  26. package/dist/{OrdersScreen-BQVbdyrZ.cjs → OrdersScreen-BhJkW3TG.cjs} +4 -4
  27. package/dist/{OrdersScreen-BQVbdyrZ.cjs.map → OrdersScreen-BhJkW3TG.cjs.map} +1 -1
  28. package/dist/{OrdersScreen-CaESWLWt.mjs → OrdersScreen-DP1WdqVT.mjs} +4 -4
  29. package/dist/{OrdersScreen-CaESWLWt.mjs.map → OrdersScreen-DP1WdqVT.mjs.map} +1 -1
  30. package/dist/{OrdersScreen-BsPW-2wm.cjs → OrdersScreen-DvaV61fj.cjs} +3 -3
  31. package/dist/{ProductsScreen-BFnsUrY1.cjs → ProductsScreen-CI9G5UJh.cjs} +7 -7
  32. package/dist/{ProductsScreen-Bp_XLYgP.mjs → ProductsScreen-DYECF3gJ.mjs} +10 -7
  33. package/dist/{ProductsScreen-ClC1fTWG.mjs → ProductsScreen-sEcByLGy.mjs} +5 -5
  34. package/dist/{ProductsScreen-ClC1fTWG.mjs.map → ProductsScreen-sEcByLGy.mjs.map} +1 -1
  35. package/dist/{ProductsScreen-D-mnWuJW.cjs → ProductsScreen-ssonMzdl.cjs} +5 -5
  36. package/dist/{ProductsScreen-D-mnWuJW.cjs.map → ProductsScreen-ssonMzdl.cjs.map} +1 -1
  37. package/dist/{ProfileScreen-COpbffE9.cjs → ProfileScreen-BPvudlCM.cjs} +10 -9
  38. package/dist/{ProfileScreen-COpbffE9.cjs.map → ProfileScreen-BPvudlCM.cjs.map} +1 -1
  39. package/dist/{ProfileScreen-B1zSJuVE.mjs → ProfileScreen-BWiBC4y3.mjs} +10 -9
  40. package/dist/{ProfileScreen-B1zSJuVE.mjs.map → ProfileScreen-BWiBC4y3.mjs.map} +1 -1
  41. package/dist/{ProfileScreen-p9Zqln4n.cjs → ProfileScreen-Bc4znBmb.cjs} +2 -2
  42. package/dist/{ShareablesScreen-BSOBA2bP.cjs → ShareablesScreen-BvBfPJ69.cjs} +7 -7
  43. package/dist/{ShareablesScreen-BOwl9-B0.mjs → ShareablesScreen-CIrWSh5q.mjs} +8 -7
  44. package/dist/{ShareablesScreen-BOwl9-B0.mjs.map → ShareablesScreen-CIrWSh5q.mjs.map} +1 -1
  45. package/dist/{ShareablesScreen-9toTptRT.cjs → ShareablesScreen-D3JVKFVA.cjs} +9 -8
  46. package/dist/{ShareablesScreen-9toTptRT.cjs.map → ShareablesScreen-D3JVKFVA.cjs.map} +1 -1
  47. package/dist/{ShareablesScreen-Bmghdz71.mjs → ShareablesScreen-TEWnxGs0.mjs} +11 -7
  48. package/dist/{ShopScreen-Cbv-zrHK.cjs → ShopScreen-BTTKNmtT.cjs} +6 -7
  49. package/dist/ShopScreen-BTTKNmtT.cjs.map +1 -0
  50. package/dist/{ShopScreen-BwNZxqnT.mjs → ShopScreen-CDscN4-a.mjs} +6 -7
  51. package/dist/{ShopScreen-BwNZxqnT.mjs.map → ShopScreen-CDscN4-a.mjs.map} +1 -1
  52. package/dist/{ShopScreen-M2hCxrwQ.cjs → ShopScreen-TWpb8sxs.cjs} +2 -2
  53. package/dist/{SubscriptionsScreen-CJwOjaBY.cjs → SubscriptionsScreen-B0drtNfN.cjs} +4 -4
  54. package/dist/{SubscriptionsScreen-CJwOjaBY.cjs.map → SubscriptionsScreen-B0drtNfN.cjs.map} +1 -1
  55. package/dist/{SubscriptionsScreen-YsIehRb5.mjs → SubscriptionsScreen-D-BXah4H.mjs} +4 -4
  56. package/dist/{SubscriptionsScreen-YsIehRb5.mjs.map → SubscriptionsScreen-D-BXah4H.mjs.map} +1 -1
  57. package/dist/{SubscriptionsScreen-Bfu-mgGS.cjs → SubscriptionsScreen-WtnN9Ka0.cjs} +4 -4
  58. package/dist/{UpgradeScreen-DI7DK6qt.cjs → UpgradeScreen-C-aIQL-y.cjs} +1 -1
  59. package/dist/{UpgradeScreen-DI7DK6qt.cjs.map → UpgradeScreen-C-aIQL-y.cjs.map} +1 -1
  60. package/dist/{UpgradeScreen-DfDZG52l.cjs → UpgradeScreen-CWgcMBwb.cjs} +1 -1
  61. package/dist/{UpgradeScreen-CTXUueQY.mjs → UpgradeScreen-GTOZCURK.mjs} +1 -1
  62. package/dist/{UpgradeScreen-CTXUueQY.mjs.map → UpgradeScreen-GTOZCURK.mjs.map} +1 -1
  63. package/dist/{dist-oYNtEpKP.mjs → dist-B1HwSrso.mjs} +2 -2
  64. package/dist/{dist-oYNtEpKP.mjs.map → dist-B1HwSrso.mjs.map} +1 -1
  65. package/dist/{dist-BSbac3uh.cjs → dist-BF_4vk1z.cjs} +1 -1
  66. package/dist/{dist-BSbac3uh.cjs.map → dist-BF_4vk1z.cjs.map} +1 -1
  67. package/dist/{dist-DRVtlgQ1.cjs → dist-BbS_7TvS.cjs} +1 -1
  68. package/dist/{dist-DRVtlgQ1.cjs.map → dist-BbS_7TvS.cjs.map} +1 -1
  69. package/dist/{dist-NMbUD0qE.mjs → dist-CMGXkSgZ.mjs} +1 -1
  70. package/dist/{dist-NMbUD0qE.mjs.map → dist-CMGXkSgZ.mjs.map} +1 -1
  71. package/dist/{dist-Ck9MGRmE.cjs → dist-DkYXiQQ1.cjs} +2 -2
  72. package/dist/{dist-Ck9MGRmE.cjs.map → dist-DkYXiQQ1.cjs.map} +1 -1
  73. package/dist/{es-BCKjXBqj.mjs → es-B84KtbcD.mjs} +1 -1
  74. package/dist/{es-BCKjXBqj.mjs.map → es-B84KtbcD.mjs.map} +1 -1
  75. package/dist/{es-DlWO6buB.cjs → es-BSkb3AZk.cjs} +1 -1
  76. package/dist/{es-DlWO6buB.cjs.map → es-BSkb3AZk.cjs.map} +1 -1
  77. package/dist/index.cjs +54 -75
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +70 -185
  80. package/dist/index.d.cts.map +1 -1
  81. package/dist/index.d.mts +70 -185
  82. package/dist/index.d.mts.map +1 -1
  83. package/dist/index.mjs +53 -59
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/{order-detail-CtTwAXfP.mjs → order-detail-B8jb-YB6.mjs} +1 -1
  86. package/dist/{order-detail-CtTwAXfP.mjs.map → order-detail-B8jb-YB6.mjs.map} +1 -1
  87. package/dist/{order-detail-CksE8d5w.cjs → order-detail-Bq7_UZ75.cjs} +1 -1
  88. package/dist/{order-detail-CksE8d5w.cjs.map → order-detail-Bq7_UZ75.cjs.map} +1 -1
  89. package/dist/{products-BAtIML76.cjs → products-3BKfOxrs.cjs} +1 -1
  90. package/dist/{products-BAtIML76.cjs.map → products-3BKfOxrs.cjs.map} +1 -1
  91. package/dist/{products-StJIeia3.mjs → products-DtutnMu9.mjs} +1 -1
  92. package/dist/{products-StJIeia3.mjs.map → products-DtutnMu9.mjs.map} +1 -1
  93. package/dist/{sortable.esm-DSrWP4x9.mjs → sortable.esm-Cz-CP2N8.mjs} +1 -1
  94. package/dist/{sortable.esm-DSrWP4x9.mjs.map → sortable.esm-Cz-CP2N8.mjs.map} +1 -1
  95. package/dist/{src-DryOJTBW.mjs → src-CN7diUEw.mjs} +1 -1
  96. package/dist/{src-DryOJTBW.mjs.map → src-CN7diUEw.mjs.map} +1 -1
  97. package/dist/{src-xEfkv04t.cjs → src-D5RNExKx.cjs} +6 -6
  98. package/dist/{src-xEfkv04t.cjs.map → src-D5RNExKx.cjs.map} +1 -1
  99. package/dist/{src-DjlwUaws.mjs → src-Dhvv96Yt.mjs} +6 -6
  100. package/dist/{src-DjlwUaws.mjs.map → src-Dhvv96Yt.mjs.map} +1 -1
  101. package/dist/{src-CMByt6YP.cjs → src-Zv3-NSUf.cjs} +1 -1
  102. package/dist/{src-CMByt6YP.cjs.map → src-Zv3-NSUf.cjs.map} +1 -1
  103. package/dist/{use-account-clients-CFM5q2J-.cjs → use-account-clients-CDTUFb6O.cjs} +5 -70
  104. package/dist/use-account-clients-CDTUFb6O.cjs.map +1 -0
  105. package/dist/{use-account-clients-BVe69HZV.mjs → use-account-clients-vDDhNW8x.mjs} +6 -65
  106. package/dist/use-account-clients-vDDhNW8x.mjs.map +1 -0
  107. package/dist/{use-current-user-CrHH290V.cjs → use-current-user-C7O5SJ_L.cjs} +3 -3
  108. package/dist/{use-current-user-CrHH290V.cjs.map → use-current-user-C7O5SJ_L.cjs.map} +1 -1
  109. package/dist/{use-current-user-SmbdS--3.mjs → use-current-user-Czzb9Zc4.mjs} +3 -3
  110. package/dist/{use-current-user-SmbdS--3.mjs.map → use-current-user-Czzb9Zc4.mjs.map} +1 -1
  111. package/dist/{use-customer-account-C1ypS2wX.mjs → use-customer-account-DHZ8wLs9.mjs} +6 -7
  112. package/dist/use-customer-account-DHZ8wLs9.mjs.map +1 -0
  113. package/dist/{use-customer-account-_IaCM92S.cjs → use-customer-account-zgiEdZ89.cjs} +6 -7
  114. package/dist/use-customer-account-zgiEdZ89.cjs.map +1 -0
  115. package/dist/{use-fluid-api-f1PKU6dS.mjs → use-fluid-api-D0kldm0L.mjs} +2 -2
  116. package/dist/{use-fluid-api-f1PKU6dS.mjs.map → use-fluid-api-D0kldm0L.mjs.map} +1 -1
  117. package/dist/{use-fluid-api-C2evcv_D.cjs → use-fluid-api-Wjw57-uD.cjs} +2 -2
  118. package/dist/{use-fluid-api-C2evcv_D.cjs.map → use-fluid-api-Wjw57-uD.cjs.map} +1 -1
  119. package/dist/use-fluid-auth-BPwsWZNu.cjs +50 -0
  120. package/dist/use-fluid-auth-BPwsWZNu.cjs.map +1 -0
  121. package/dist/use-fluid-auth-Dy5K7BQ9.mjs +45 -0
  122. package/dist/use-fluid-auth-Dy5K7BQ9.mjs.map +1 -0
  123. package/package.json +10 -10
  124. package/dist/FluidProvider-B59bzF__.mjs.map +0 -1
  125. package/dist/FluidProvider-DbYLBGGg.cjs.map +0 -1
  126. package/dist/MessagingScreen-6SfuZqDC.mjs.map +0 -1
  127. package/dist/ShopScreen-Cbv-zrHK.cjs.map +0 -1
  128. package/dist/use-account-clients-BVe69HZV.mjs.map +0 -1
  129. package/dist/use-account-clients-CFM5q2J-.cjs.map +0 -1
  130. package/dist/use-customer-account-C1ypS2wX.mjs.map +0 -1
  131. package/dist/use-customer-account-_IaCM92S.cjs.map +0 -1
  132. /package/dist/{src-BakNjVTk.mjs → src-B7j_mfeS.mjs} +0 -0
  133. /package/dist/{src-C_kOrGdZ.cjs → src-Bp-dRR29.cjs} +0 -0
@@ -1,5 +1,5 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
- require("./FluidProvider-DbYLBGGg.cjs");
2
+ require("./FluidProvider-NnE6s3O0.cjs");
3
3
  require("./PointsWidget-DG0QQHqL.cjs");
4
4
  require("./error-state-Bpq2CYvz.cjs");
5
5
  require("./ScreenRenderer-DFcTR685.cjs");
@@ -34,6 +34,6 @@ require("./TableWidget-DiqQBV7-.cjs");
34
34
  require("./ToDoWidget-DZUvDwnJ.cjs");
35
35
  require("./VideoWidget-BmVIIfvM.cjs");
36
36
  require("./ScreenHeaderContext-DpVOhFzT.cjs");
37
- const require_ProfileScreen = require("./ProfileScreen-COpbffE9.cjs");
37
+ const require_ProfileScreen = require("./ProfileScreen-BPvudlCM.cjs");
38
38
  exports.ProfileScreen = require_ProfileScreen.ProfileScreen;
39
39
  exports.profileScreenPropertySchema = require_ProfileScreen.profileScreenPropertySchema;
@@ -1,5 +1,5 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
- require("./FluidProvider-DbYLBGGg.cjs");
2
+ require("./FluidProvider-NnE6s3O0.cjs");
3
3
  require("./PointsWidget-DG0QQHqL.cjs");
4
4
  require("./error-state-Bpq2CYvz.cjs");
5
5
  require("./ScreenRenderer-DFcTR685.cjs");
@@ -34,11 +34,11 @@ require("./TableWidget-DiqQBV7-.cjs");
34
34
  require("./ToDoWidget-DZUvDwnJ.cjs");
35
35
  require("./VideoWidget-BmVIIfvM.cjs");
36
36
  require("./ScreenHeaderContext-DpVOhFzT.cjs");
37
- const require_ShareablesScreen = require("./ShareablesScreen-9toTptRT.cjs");
38
- require("./dist-DRVtlgQ1.cjs");
39
- require("./es-DlWO6buB.cjs");
40
- require("./dist-Ck9MGRmE.cjs");
41
- require("./src-xEfkv04t.cjs");
42
- require("./dist-BSbac3uh.cjs");
37
+ const require_ShareablesScreen = require("./ShareablesScreen-D3JVKFVA.cjs");
38
+ require("./dist-BbS_7TvS.cjs");
39
+ require("./es-BSkb3AZk.cjs");
40
+ require("./dist-DkYXiQQ1.cjs");
41
+ require("./src-D5RNExKx.cjs");
42
+ require("./dist-BF_4vk1z.cjs");
43
43
  exports.ShareablesScreen = require_ShareablesScreen.ShareablesScreen;
44
44
  exports.shareablesScreenPropertySchema = require_ShareablesScreen.shareablesScreenPropertySchema;
@@ -1,9 +1,10 @@
1
- import { mt as USER_TYPES } from "./FluidProvider-B59bzF__.mjs";
2
- import { a as useFluidAuth, r as useSdkClient } from "./use-account-clients-BVe69HZV.mjs";
3
- import { n as useCurrentUser } from "./use-current-user-SmbdS--3.mjs";
1
+ import { $ as USER_TYPES } from "./FluidProvider-dTwaHRzI.mjs";
2
+ import { t as useFluidAuth } from "./use-fluid-auth-Dy5K7BQ9.mjs";
3
+ import { n as useCurrentUser } from "./use-current-user-Czzb9Zc4.mjs";
4
4
  import { n as useAppNavigation } from "./AppNavigationContext-Du3Qq0yc.mjs";
5
- import { a as ShareablesApiProvider, i as ShareablesUIProvider, n as ShareablesApp, o as ShareablesCoreProvider, r as getFileMimeType } from "./src-DjlwUaws.mjs";
6
- import { n as createShareablesApiAdapter } from "./src-DryOJTBW.mjs";
5
+ import { r as useSdkClient } from "./use-account-clients-vDDhNW8x.mjs";
6
+ import { a as ShareablesApiProvider, i as ShareablesUIProvider, n as ShareablesApp, o as ShareablesCoreProvider, r as getFileMimeType } from "./src-Dhvv96Yt.mjs";
7
+ import { n as createShareablesApiAdapter } from "./src-CN7diUEw.mjs";
7
8
  import { useCallback, useMemo } from "react";
8
9
  import { jsx } from "react/jsx-runtime";
9
10
  import { z } from "zod";
@@ -331,7 +332,7 @@ function ShareablesScreen({ background, textColor, accentColor, padding, borderR
331
332
  });
332
333
  },
333
334
  onDeletePlaylist: isCustomer ? void 0 : async (playlistId) => {
334
- const { playlists: playlistsApi } = await import("./src-DryOJTBW.mjs").then((n) => n.t);
335
+ const { playlists: playlistsApi } = await import("./src-CN7diUEw.mjs").then((n) => n.t);
335
336
  await playlistsApi.deletePlaylist(domainClient, playlistId);
336
337
  },
337
338
  readOnly: isCustomer
@@ -377,4 +378,4 @@ const shareablesScreenPropertySchema = {
377
378
  //#endregion
378
379
  export { shareablesScreenPropertySchema as n, useUserType as r, ShareablesScreen as t };
379
380
 
380
- //# sourceMappingURL=ShareablesScreen-BOwl9-B0.mjs.map
381
+ //# sourceMappingURL=ShareablesScreen-CIrWSh5q.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShareablesScreen-BOwl9-B0.mjs","names":[],"sources":["../src/hooks/use-user-type.ts","../../../file-picker/core/src/schemas/dam.ts","../../../file-picker/api-client/src/client.ts","../../../file-picker/api-client/src/api/dam-assets.ts","../../../file-picker/api-client/src/api/dam-query.ts","../../../file-picker/api-client/src/api/unsplash.ts","../../../file-picker/api-client/src/api/url-proxy.ts","../../../file-picker/api-client/src/create-file-picker-api.ts","../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useFluidAuth } from \"./use-fluid-auth\";\nimport { USER_TYPES, type UserType } from \"../auth/types\";\n\nexport interface UseUserTypeResult {\n userType: UserType | null;\n isCustomer: boolean;\n isRep: boolean;\n isAdmin: boolean;\n}\n\n/**\n * Convenience hook for user-type checks in the portal SDK.\n */\nexport function useUserType(): UseUserTypeResult {\n const { user } = useFluidAuth();\n\n return useMemo(() => {\n const userType = user?.user_type ?? null;\n return {\n userType,\n isCustomer: userType === USER_TYPES.customer,\n isRep: userType === USER_TYPES.rep,\n isAdmin:\n userType === USER_TYPES.admin || userType === USER_TYPES.root_admin,\n };\n }, [user?.user_type]);\n}\n","import { z } from \"zod\";\n\ntype DamVariantApi = {\n id: string;\n url: string | null;\n file_name: string;\n mime_type: string;\n content: any;\n created_at: string;\n updated_at: string;\n default: boolean;\n is_original: boolean;\n is_text: boolean;\n media_type: string;\n processing_status: string;\n tags: string[];\n};\n\nexport const damVariantSchema: z.ZodType<DamVariantApi> = z.object({\n id: z.string(),\n url: z.string().nullable(),\n file_name: z.string(),\n mime_type: z.string(),\n content: z.any().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n default: z.boolean(),\n is_original: z.boolean(),\n is_text: z.boolean(),\n media_type: z.string(),\n processing_status: z.string(),\n tags: z.array(z.string()),\n});\n\ntype DamAssetApi = {\n id: number;\n canonical_path: string;\n category: string;\n code: string;\n company: string;\n created_at: string;\n default_variant_id: string;\n default_variant_url?: string;\n description: string;\n name: string;\n updated_at: string;\n variants?: DamVariantApi[];\n};\n\nexport const damAssetSchema: z.ZodType<DamAssetApi> = z.object({\n id: z.number(),\n canonical_path: z.string(),\n category: z.string(),\n code: z.string(),\n company: z.string(),\n created_at: z.string(),\n default_variant_id: z.string(),\n default_variant_url: z.string().optional(),\n description: z.string(),\n name: z.string(),\n updated_at: z.string(),\n variants: z.array(damVariantSchema).optional(),\n});\n\ntype DamTreeFolderNode = {\n asset_code?: string | Record<string, unknown>;\n name?: string | Record<string, unknown>;\n category?: string | Record<string, unknown>;\n variants?: unknown[] | Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport const damTreeFolderNodeSchema: z.ZodType<DamTreeFolderNode> = z\n .object({\n asset_code: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n name: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n category: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n variants: z\n .union([z.array(z.unknown()), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough();\n\nexport const damTreeSchema: z.ZodType<Record<string, any>> = z.record(\n z.string(),\n z.union([\n z.lazy(() => damTreeSchema),\n damAssetSchema,\n damTreeFolderNodeSchema,\n ]),\n);\n\ntype DamQueryResponse = {\n path: string;\n tree: Record<string, any>;\n meta?: { next_cursor?: string };\n};\n\nexport const damQueryResponseSchema: z.ZodType<DamQueryResponse> = z.object({\n path: z.string(),\n tree: damTreeSchema,\n meta: z\n .object({\n next_cursor: z.string().optional(),\n })\n .optional(),\n});\n\ntype DamAssetCreateRequest = {\n asset: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n};\n\nexport const damAssetCreateRequestSchema: z.ZodType<DamAssetCreateRequest> =\n z.object({\n asset: z.object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n }),\n });\n\ntype DamAssetCreateResponse = {\n asset: DamAssetApi;\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetCreateResponseSchema: z.ZodType<DamAssetCreateResponse> =\n z.object({\n asset: damAssetSchema,\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\n// Schema for creating asset with placeholder (for ImageKit direct upload)\ntype DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetCreateWithPlaceholderRequestSchema: z.ZodType<DamAssetCreateWithPlaceholderRequest> =\n z.object({\n placeholder_asset: z.object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n skip_autotagging: z.boolean().optional(),\n });\n\n// Schema for creating asset path without file upload (legacy)\ntype DamAssetPathCreateRequest = {\n asset?: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n text_asset?: {\n file_name: string;\n mime_type: string;\n text: string;\n name?: string;\n description?: string;\n tags?: string;\n };\n placeholder_asset?: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetPathCreateRequestSchema: z.ZodType<DamAssetPathCreateRequest> =\n z.object({\n asset: z\n .object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n text_asset: z\n .object({\n file_name: z.string(),\n mime_type: z.string(),\n text: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n placeholder_asset: z\n .object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n skip_autotagging: z.boolean().optional(),\n });\n\ntype DamAssetPathCreateResponse = {\n asset: { id: number; canonical_path: string; name: string };\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetPathCreateResponseSchema: z.ZodType<DamAssetPathCreateResponse> =\n z.object({\n asset: z.object({\n id: z.number(),\n canonical_path: z.string(),\n name: z.string(),\n }),\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\nexport type { DamVariantApi, DamAssetApi };\nexport type DamTreeApi = z.infer<typeof damTreeSchema>;\nexport type { DamQueryResponse };\nexport type { DamAssetCreateRequest };\nexport type { DamAssetCreateResponse };\nexport type { DamAssetCreateWithPlaceholderRequest };\nexport type { DamAssetPathCreateRequest };\nexport type { DamAssetPathCreateResponse };\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport type { DamAssetCreateResponse } from \"@fluid-app/file-picker-core\";\n\nexport interface DamUploadStrategy {\n uploadFile(params: {\n file: File;\n name: string;\n description?: string;\n tags?: string[];\n onProgress?: (progress: number) => void;\n companyId?: number;\n }): Promise<DamAssetCreateResponse>;\n}\n\nexport interface FilePickerClientConfig {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint?: string; // defaults to \"/api/proxy-url\"\n}\n\nexport interface FilePickerClient {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint: string;\n}\n\nexport function createFilePickerClient(\n config: FilePickerClientConfig,\n): FilePickerClient {\n return {\n fetchClient: config.fetchClient,\n uploadStrategy: config.uploadStrategy,\n unsplashAccessKey: config.unsplashAccessKey,\n proxyEndpoint: config.proxyEndpoint ?? \"/api/proxy-url\",\n };\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damAssetCreateResponseSchema,\n damAssetPathCreateResponseSchema,\n getFileMimeType,\n type CreateDamAssetParams,\n type CreateDamAssetPathForAssetsParams,\n type DamAssetCreateResponse,\n type DamAssetCreateWithPlaceholderRequest,\n type DamAssetPathCreateRequest,\n type DamAssetPathCreateResponse,\n} from \"@fluid-app/file-picker-core\";\nimport type { DamUploadStrategy } from \"../client\";\n\nexport type { CreateDamAssetParams };\n\nexport interface CreateDamAssetPathParams {\n name: string;\n description?: string;\n tags?: string[];\n companyId?: number;\n mimeType?: string;\n textContent?: string;\n fileName?: string;\n skipAutotagging?: boolean;\n}\n\n/**\n * Create a DAM asset. Text files use FormData upload; non-text files\n * delegate to the provided uploadStrategy (e.g. ImageKit).\n * If no uploadStrategy is provided, all files use FormData upload.\n */\nexport async function createDamAsset(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n uploadStrategy?: DamUploadStrategy,\n): Promise<DamAssetCreateResponse> {\n const mimeType = getFileMimeType(params.file);\n const isTextFile =\n mimeType.startsWith(\"text/\") ||\n mimeType === \"application/json\" ||\n mimeType === \"application/xml\" ||\n params.file.name.endsWith(\".txt\") ||\n params.file.name.endsWith(\".json\") ||\n params.file.name.endsWith(\".xml\") ||\n params.file.name.endsWith(\".csv\");\n\n // For text files, use traditional FormData upload\n if (isTextFile) {\n return createDamAssetViaFormData(fetchClient, params);\n }\n\n // For non-text files, use upload strategy if available\n if (uploadStrategy) {\n return uploadStrategy.uploadFile(params);\n }\n\n // Fallback to FormData upload\n return createDamAssetViaFormData(fetchClient, params);\n}\n\nasync function createDamAssetViaFormData(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n): Promise<DamAssetCreateResponse> {\n const formData = new FormData();\n formData.append(\"asset[file]\", params.file);\n formData.append(\"asset[name]\", params.name);\n\n if (params.description) {\n formData.append(\"asset[description]\", params.description);\n }\n\n if (params.tags && params.tags.length > 0) {\n formData.append(\"asset[tags]\", params.tags.join(\",\"));\n }\n\n const response = await fetchClient.requestWithFormData<unknown>(\n \"/dam/assets\",\n formData,\n { method: \"POST\" },\n );\n return damAssetCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset with placeholder for direct upload strategies\n */\nexport async function createDamAssetWithPlaceholder(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n if (!params.mimeType) {\n throw new Error(\"mimeType is required for createDamAssetWithPlaceholder\");\n }\n const requestData: DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n },\n };\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset path without file upload (legacy)\n */\nexport async function createDamAssetPath(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n const requestData: DamAssetPathCreateRequest = {};\n\n if (params.textContent && params.mimeType && params.fileName) {\n requestData.text_asset = {\n file_name: params.fileName,\n mime_type: params.mimeType,\n text: params.textContent,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n } else if (params.mimeType) {\n requestData.placeholder_asset = {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n };\n } else {\n requestData.asset = {\n file: null,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n }\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\nexport type { CreateDamAssetPathForAssetsParams } from \"@fluid-app/file-picker-core\";\n\nexport async function createDamAssetPathForAssets(\n fetchClient: FetchClientInstance,\n { asset_paths, code }: CreateDamAssetPathForAssetsParams,\n): Promise<DamAssetPathCreateResponse> {\n const response = await fetchClient.post<unknown>(\n `/dam/assets/${code}/asset_paths`,\n { asset_paths },\n );\n return damAssetPathCreateResponseSchema.parse(response);\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damQueryResponseSchema,\n type DamQueryParams,\n type DamQueryResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport async function queryDamAssets(\n fetchClient: FetchClientInstance,\n params: DamQueryParams,\n): Promise<DamQueryResponse> {\n const response = await fetchClient.post<unknown>(\"/dam/query\", params);\n return damQueryResponseSchema.parse(response);\n}\n\nexport async function deleteDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.delete(`/dam/assets/${code}`);\n}\n\nexport async function discardDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.patch(`/dam/assets/${code}/discard`);\n}\n","import { z } from \"zod\";\nimport type {\n UnsplashImage,\n UnsplashSearchResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport type { UnsplashImage, UnsplashSearchResponse };\n\nconst unsplashImageSchema: z.ZodType<UnsplashImage> = z.object({\n id: z.string(),\n urls: z.object({\n raw: z.string(),\n full: z.string(),\n regular: z.string(),\n small: z.string(),\n thumb: z.string(),\n }),\n alt_description: z.string().nullable(),\n description: z.string().nullable(),\n user: z.object({ name: z.string(), username: z.string() }),\n width: z.number(),\n height: z.number(),\n});\n\nconst unsplashSearchResponseSchema: z.ZodType<UnsplashSearchResponse> =\n z.object({\n results: z.array(unsplashImageSchema),\n total: z.number(),\n total_pages: z.number(),\n });\n\n/**\n * Search Unsplash for photos matching a query.\n */\nexport async function searchUnsplash(\n query: string,\n accessKey: string,\n page: number = 1,\n perPage: number = 20,\n): Promise<UnsplashSearchResponse> {\n const response = await fetch(\n `https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&page=${page}&per_page=${perPage}&client_id=${accessKey}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to search Unsplash\");\n }\n\n return unsplashSearchResponseSchema.parse(await response.json());\n}\n","import { z } from \"zod\";\nimport type { UrlProxyResponse } from \"@fluid-app/file-picker-core\";\n\nexport type { UrlProxyResponse };\n\nconst urlProxyResponseSchema: z.ZodType<UrlProxyResponse> = z.object({\n data: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Proxy a URL fetch through the backend to bypass CORS restrictions.\n * The backend fetches the file and returns it as base64-encoded data.\n *\n * @param url - The URL to fetch\n * @param proxyEndpoint - The proxy endpoint (defaults to \"/api/proxy-url\")\n */\nexport async function proxyUrlFetch(\n url: string,\n proxyEndpoint: string = \"/api/proxy-url\",\n): Promise<UrlProxyResponse> {\n const response = await fetch(proxyEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ url }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({\n error: \"Failed to proxy URL fetch\",\n }));\n throw new Error(\n (errorData as { error?: string }).error || `HTTP ${response.status}`,\n );\n }\n\n const data: unknown = await response.json();\n return urlProxyResponseSchema.parse(data);\n}\n","import type { FilePickerApi } from \"@fluid-app/file-picker-core\";\nimport type { FilePickerClient } from \"./client\";\nimport { createDamAsset, createDamAssetPathForAssets } from \"./api/dam-assets\";\nimport {\n queryDamAssets,\n deleteDamAsset,\n discardDamAsset,\n} from \"./api/dam-query\";\nimport { searchUnsplash } from \"./api/unsplash\";\nimport { proxyUrlFetch } from \"./api/url-proxy\";\n\n/**\n * Creates a FilePickerApi-compatible adapter backed by the real API client\n * functions. The returned object satisfies the FilePickerApi interface\n * from @fluid-app/file-picker-core via structural typing.\n */\nexport function createFilePickerApi(client: FilePickerClient): FilePickerApi {\n return {\n createDamAsset: (params: Parameters<typeof createDamAsset>[1]) =>\n createDamAsset(client.fetchClient, params, client.uploadStrategy),\n queryDamAssets: (params: Parameters<typeof queryDamAssets>[1]) =>\n queryDamAssets(client.fetchClient, params),\n searchUnsplash: (query: string, page?: number, perPage?: number) => {\n if (!client.unsplashAccessKey) {\n throw new Error(\"Unsplash access key not configured\");\n }\n return searchUnsplash(query, client.unsplashAccessKey, page, perPage);\n },\n deleteDamAsset: (code: string) => deleteDamAsset(client.fetchClient, code),\n discardDamAsset: (code: string) =>\n discardDamAsset(client.fetchClient, code),\n createDamAssetPathForAssets: (\n params: Parameters<typeof createDamAssetPathForAssets>[1],\n ) => createDamAssetPathForAssets(client.fetchClient, params),\n proxyUrlFetch: (url: string) => proxyUrlFetch(url, client.proxyEndpoint),\n };\n}\n","import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n type ShareablesApi,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { createShareablesApiAdapter } from \"@fluid-app/shareables-api-client\";\nimport {\n createFilePickerClient,\n createFilePickerApi,\n} from \"@fluid-app/file-picker-api-client\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { useUserType } from \"../hooks/use-user-type\";\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 const domainClient = useSdkClient();\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n const { isCustomer } = useUserType();\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 back to the listing for the current screen\n navigate(`share/${screen}`);\n } else {\n // Navigate to the default shareables screen\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const shareablesApi = useMemo<ShareablesApi>(\n () => createShareablesApiAdapter(domainClient, { repContext: true }),\n [domainClient],\n );\n\n const filePickerApi = useMemo(\n () =>\n createFilePickerApi(\n createFilePickerClient({ fetchClient: domainClient }),\n ),\n [domainClient],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n affiliateId:\n (userData as { affiliate_id?: number } | undefined)?.affiliate_id ??\n null,\n basePath: \"\",\n navigate: (path: string) => {\n // Strip leading slash — cards generate paths like \"/share/product/123\"\n const cleanPath = path.replace(/^\\//, \"\");\n // Ensure share/ prefix — screen components pass relative paths like \"media/new\"\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 }) => {\n console.warn(`[Shareables] ${opts.type}: ${opts.title}`);\n },\n filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const affiliateId = (userData as { affiliate_id?: number } | undefined)\n ?.affiliate_id;\n if (!affiliateId) throw new Error(\"No affiliate ID\");\n return domainClient.post<{ is_favorited: boolean }>(\n `/user_companies/${affiliateId}/favorites/toggle.json`,\n {\n favoriteable_id: params.favoriteableId,\n favoriteable_type: params.favoriteableType,\n },\n );\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n const { playlists: playlistsApi } =\n await import(\"@fluid-app/shareables-api-client\");\n await playlistsApi.deletePlaylist(domainClient, playlistId);\n },\n readOnly: isCustomer,\n }),\n [userData, navigate, filePickerApi, domainClient, isCustomer],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider api={shareablesApi}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={userData?.company?.logo_url}\n countryCode={userData?.country?.iso}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\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
+ {"version":3,"file":"ShareablesScreen-CIrWSh5q.mjs","names":[],"sources":["../src/hooks/use-user-type.ts","../../../file-picker/core/src/schemas/dam.ts","../../../file-picker/api-client/src/client.ts","../../../file-picker/api-client/src/api/dam-assets.ts","../../../file-picker/api-client/src/api/dam-query.ts","../../../file-picker/api-client/src/api/unsplash.ts","../../../file-picker/api-client/src/api/url-proxy.ts","../../../file-picker/api-client/src/create-file-picker-api.ts","../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useFluidAuth } from \"./use-fluid-auth\";\nimport { USER_TYPES, type UserType } from \"../auth/types\";\n\nexport interface UseUserTypeResult {\n userType: UserType | null;\n isCustomer: boolean;\n isRep: boolean;\n isAdmin: boolean;\n}\n\n/**\n * Convenience hook for user-type checks in the portal SDK.\n */\nexport function useUserType(): UseUserTypeResult {\n const { user } = useFluidAuth();\n\n return useMemo(() => {\n const userType = user?.user_type ?? null;\n return {\n userType,\n isCustomer: userType === USER_TYPES.customer,\n isRep: userType === USER_TYPES.rep,\n isAdmin:\n userType === USER_TYPES.admin || userType === USER_TYPES.root_admin,\n };\n }, [user?.user_type]);\n}\n","import { z } from \"zod\";\n\ntype DamVariantApi = {\n id: string;\n url: string | null;\n file_name: string;\n mime_type: string;\n content: any;\n created_at: string;\n updated_at: string;\n default: boolean;\n is_original: boolean;\n is_text: boolean;\n media_type: string;\n processing_status: string;\n tags: string[];\n};\n\nexport const damVariantSchema: z.ZodType<DamVariantApi> = z.object({\n id: z.string(),\n url: z.string().nullable(),\n file_name: z.string(),\n mime_type: z.string(),\n content: z.any().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n default: z.boolean(),\n is_original: z.boolean(),\n is_text: z.boolean(),\n media_type: z.string(),\n processing_status: z.string(),\n tags: z.array(z.string()),\n});\n\ntype DamAssetApi = {\n id: number;\n canonical_path: string;\n category: string;\n code: string;\n company: string;\n created_at: string;\n default_variant_id: string;\n default_variant_url?: string;\n description: string;\n name: string;\n updated_at: string;\n variants?: DamVariantApi[];\n};\n\nexport const damAssetSchema: z.ZodType<DamAssetApi> = z.object({\n id: z.number(),\n canonical_path: z.string(),\n category: z.string(),\n code: z.string(),\n company: z.string(),\n created_at: z.string(),\n default_variant_id: z.string(),\n default_variant_url: z.string().optional(),\n description: z.string(),\n name: z.string(),\n updated_at: z.string(),\n variants: z.array(damVariantSchema).optional(),\n});\n\ntype DamTreeFolderNode = {\n asset_code?: string | Record<string, unknown>;\n name?: string | Record<string, unknown>;\n category?: string | Record<string, unknown>;\n variants?: unknown[] | Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport const damTreeFolderNodeSchema: z.ZodType<DamTreeFolderNode> = z\n .object({\n asset_code: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n name: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n category: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n variants: z\n .union([z.array(z.unknown()), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough();\n\nexport const damTreeSchema: z.ZodType<Record<string, any>> = z.record(\n z.string(),\n z.union([\n z.lazy(() => damTreeSchema),\n damAssetSchema,\n damTreeFolderNodeSchema,\n ]),\n);\n\ntype DamQueryResponse = {\n path: string;\n tree: Record<string, any>;\n meta?: { next_cursor?: string };\n};\n\nexport const damQueryResponseSchema: z.ZodType<DamQueryResponse> = z.object({\n path: z.string(),\n tree: damTreeSchema,\n meta: z\n .object({\n next_cursor: z.string().optional(),\n })\n .optional(),\n});\n\ntype DamAssetCreateRequest = {\n asset: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n};\n\nexport const damAssetCreateRequestSchema: z.ZodType<DamAssetCreateRequest> =\n z.object({\n asset: z.object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n }),\n });\n\ntype DamAssetCreateResponse = {\n asset: DamAssetApi;\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetCreateResponseSchema: z.ZodType<DamAssetCreateResponse> =\n z.object({\n asset: damAssetSchema,\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\n// Schema for creating asset with placeholder (for ImageKit direct upload)\ntype DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetCreateWithPlaceholderRequestSchema: z.ZodType<DamAssetCreateWithPlaceholderRequest> =\n z.object({\n placeholder_asset: z.object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n skip_autotagging: z.boolean().optional(),\n });\n\n// Schema for creating asset path without file upload (legacy)\ntype DamAssetPathCreateRequest = {\n asset?: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n text_asset?: {\n file_name: string;\n mime_type: string;\n text: string;\n name?: string;\n description?: string;\n tags?: string;\n };\n placeholder_asset?: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetPathCreateRequestSchema: z.ZodType<DamAssetPathCreateRequest> =\n z.object({\n asset: z\n .object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n text_asset: z\n .object({\n file_name: z.string(),\n mime_type: z.string(),\n text: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n placeholder_asset: z\n .object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n skip_autotagging: z.boolean().optional(),\n });\n\ntype DamAssetPathCreateResponse = {\n asset: { id: number; canonical_path: string; name: string };\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetPathCreateResponseSchema: z.ZodType<DamAssetPathCreateResponse> =\n z.object({\n asset: z.object({\n id: z.number(),\n canonical_path: z.string(),\n name: z.string(),\n }),\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\nexport type { DamVariantApi, DamAssetApi };\nexport type DamTreeApi = z.infer<typeof damTreeSchema>;\nexport type { DamQueryResponse };\nexport type { DamAssetCreateRequest };\nexport type { DamAssetCreateResponse };\nexport type { DamAssetCreateWithPlaceholderRequest };\nexport type { DamAssetPathCreateRequest };\nexport type { DamAssetPathCreateResponse };\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport type { DamAssetCreateResponse } from \"@fluid-app/file-picker-core\";\n\nexport interface DamUploadStrategy {\n uploadFile(params: {\n file: File;\n name: string;\n description?: string;\n tags?: string[];\n onProgress?: (progress: number) => void;\n companyId?: number;\n }): Promise<DamAssetCreateResponse>;\n}\n\nexport interface FilePickerClientConfig {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint?: string; // defaults to \"/api/proxy-url\"\n}\n\nexport interface FilePickerClient {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint: string;\n}\n\nexport function createFilePickerClient(\n config: FilePickerClientConfig,\n): FilePickerClient {\n return {\n fetchClient: config.fetchClient,\n uploadStrategy: config.uploadStrategy,\n unsplashAccessKey: config.unsplashAccessKey,\n proxyEndpoint: config.proxyEndpoint ?? \"/api/proxy-url\",\n };\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damAssetCreateResponseSchema,\n damAssetPathCreateResponseSchema,\n getFileMimeType,\n type CreateDamAssetParams,\n type CreateDamAssetPathForAssetsParams,\n type DamAssetCreateResponse,\n type DamAssetCreateWithPlaceholderRequest,\n type DamAssetPathCreateRequest,\n type DamAssetPathCreateResponse,\n} from \"@fluid-app/file-picker-core\";\nimport type { DamUploadStrategy } from \"../client\";\n\nexport type { CreateDamAssetParams };\n\nexport interface CreateDamAssetPathParams {\n name: string;\n description?: string;\n tags?: string[];\n companyId?: number;\n mimeType?: string;\n textContent?: string;\n fileName?: string;\n skipAutotagging?: boolean;\n}\n\n/**\n * Create a DAM asset. Text files use FormData upload; non-text files\n * delegate to the provided uploadStrategy (e.g. ImageKit).\n * If no uploadStrategy is provided, all files use FormData upload.\n */\nexport async function createDamAsset(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n uploadStrategy?: DamUploadStrategy,\n): Promise<DamAssetCreateResponse> {\n const mimeType = getFileMimeType(params.file);\n const isTextFile =\n mimeType.startsWith(\"text/\") ||\n mimeType === \"application/json\" ||\n mimeType === \"application/xml\" ||\n params.file.name.endsWith(\".txt\") ||\n params.file.name.endsWith(\".json\") ||\n params.file.name.endsWith(\".xml\") ||\n params.file.name.endsWith(\".csv\");\n\n // For text files, use traditional FormData upload\n if (isTextFile) {\n return createDamAssetViaFormData(fetchClient, params);\n }\n\n // For non-text files, use upload strategy if available\n if (uploadStrategy) {\n return uploadStrategy.uploadFile(params);\n }\n\n // Fallback to FormData upload\n return createDamAssetViaFormData(fetchClient, params);\n}\n\nasync function createDamAssetViaFormData(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n): Promise<DamAssetCreateResponse> {\n const formData = new FormData();\n formData.append(\"asset[file]\", params.file);\n formData.append(\"asset[name]\", params.name);\n\n if (params.description) {\n formData.append(\"asset[description]\", params.description);\n }\n\n if (params.tags && params.tags.length > 0) {\n formData.append(\"asset[tags]\", params.tags.join(\",\"));\n }\n\n const response = await fetchClient.requestWithFormData<unknown>(\n \"/dam/assets\",\n formData,\n { method: \"POST\" },\n );\n return damAssetCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset with placeholder for direct upload strategies\n */\nexport async function createDamAssetWithPlaceholder(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n if (!params.mimeType) {\n throw new Error(\"mimeType is required for createDamAssetWithPlaceholder\");\n }\n const requestData: DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n },\n };\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset path without file upload (legacy)\n */\nexport async function createDamAssetPath(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n const requestData: DamAssetPathCreateRequest = {};\n\n if (params.textContent && params.mimeType && params.fileName) {\n requestData.text_asset = {\n file_name: params.fileName,\n mime_type: params.mimeType,\n text: params.textContent,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n } else if (params.mimeType) {\n requestData.placeholder_asset = {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n };\n } else {\n requestData.asset = {\n file: null,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n }\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\nexport type { CreateDamAssetPathForAssetsParams } from \"@fluid-app/file-picker-core\";\n\nexport async function createDamAssetPathForAssets(\n fetchClient: FetchClientInstance,\n { asset_paths, code }: CreateDamAssetPathForAssetsParams,\n): Promise<DamAssetPathCreateResponse> {\n const response = await fetchClient.post<unknown>(\n `/dam/assets/${code}/asset_paths`,\n { asset_paths },\n );\n return damAssetPathCreateResponseSchema.parse(response);\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damQueryResponseSchema,\n type DamQueryParams,\n type DamQueryResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport async function queryDamAssets(\n fetchClient: FetchClientInstance,\n params: DamQueryParams,\n): Promise<DamQueryResponse> {\n const response = await fetchClient.post<unknown>(\"/dam/query\", params);\n return damQueryResponseSchema.parse(response);\n}\n\nexport async function deleteDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.delete(`/dam/assets/${code}`);\n}\n\nexport async function discardDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.patch(`/dam/assets/${code}/discard`);\n}\n","import { z } from \"zod\";\nimport type {\n UnsplashImage,\n UnsplashSearchResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport type { UnsplashImage, UnsplashSearchResponse };\n\nconst unsplashImageSchema: z.ZodType<UnsplashImage> = z.object({\n id: z.string(),\n urls: z.object({\n raw: z.string(),\n full: z.string(),\n regular: z.string(),\n small: z.string(),\n thumb: z.string(),\n }),\n alt_description: z.string().nullable(),\n description: z.string().nullable(),\n user: z.object({ name: z.string(), username: z.string() }),\n width: z.number(),\n height: z.number(),\n});\n\nconst unsplashSearchResponseSchema: z.ZodType<UnsplashSearchResponse> =\n z.object({\n results: z.array(unsplashImageSchema),\n total: z.number(),\n total_pages: z.number(),\n });\n\n/**\n * Search Unsplash for photos matching a query.\n */\nexport async function searchUnsplash(\n query: string,\n accessKey: string,\n page: number = 1,\n perPage: number = 20,\n): Promise<UnsplashSearchResponse> {\n const response = await fetch(\n `https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&page=${page}&per_page=${perPage}&client_id=${accessKey}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to search Unsplash\");\n }\n\n return unsplashSearchResponseSchema.parse(await response.json());\n}\n","import { z } from \"zod\";\nimport type { UrlProxyResponse } from \"@fluid-app/file-picker-core\";\n\nexport type { UrlProxyResponse };\n\nconst urlProxyResponseSchema: z.ZodType<UrlProxyResponse> = z.object({\n data: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Proxy a URL fetch through the backend to bypass CORS restrictions.\n * The backend fetches the file and returns it as base64-encoded data.\n *\n * @param url - The URL to fetch\n * @param proxyEndpoint - The proxy endpoint (defaults to \"/api/proxy-url\")\n */\nexport async function proxyUrlFetch(\n url: string,\n proxyEndpoint: string = \"/api/proxy-url\",\n): Promise<UrlProxyResponse> {\n const response = await fetch(proxyEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ url }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({\n error: \"Failed to proxy URL fetch\",\n }));\n throw new Error(\n (errorData as { error?: string }).error || `HTTP ${response.status}`,\n );\n }\n\n const data: unknown = await response.json();\n return urlProxyResponseSchema.parse(data);\n}\n","import type { FilePickerApi } from \"@fluid-app/file-picker-core\";\nimport type { FilePickerClient } from \"./client\";\nimport { createDamAsset, createDamAssetPathForAssets } from \"./api/dam-assets\";\nimport {\n queryDamAssets,\n deleteDamAsset,\n discardDamAsset,\n} from \"./api/dam-query\";\nimport { searchUnsplash } from \"./api/unsplash\";\nimport { proxyUrlFetch } from \"./api/url-proxy\";\n\n/**\n * Creates a FilePickerApi-compatible adapter backed by the real API client\n * functions. The returned object satisfies the FilePickerApi interface\n * from @fluid-app/file-picker-core via structural typing.\n */\nexport function createFilePickerApi(client: FilePickerClient): FilePickerApi {\n return {\n createDamAsset: (params: Parameters<typeof createDamAsset>[1]) =>\n createDamAsset(client.fetchClient, params, client.uploadStrategy),\n queryDamAssets: (params: Parameters<typeof queryDamAssets>[1]) =>\n queryDamAssets(client.fetchClient, params),\n searchUnsplash: (query: string, page?: number, perPage?: number) => {\n if (!client.unsplashAccessKey) {\n throw new Error(\"Unsplash access key not configured\");\n }\n return searchUnsplash(query, client.unsplashAccessKey, page, perPage);\n },\n deleteDamAsset: (code: string) => deleteDamAsset(client.fetchClient, code),\n discardDamAsset: (code: string) =>\n discardDamAsset(client.fetchClient, code),\n createDamAssetPathForAssets: (\n params: Parameters<typeof createDamAssetPathForAssets>[1],\n ) => createDamAssetPathForAssets(client.fetchClient, params),\n proxyUrlFetch: (url: string) => proxyUrlFetch(url, client.proxyEndpoint),\n };\n}\n","import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n type ShareablesApi,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { createShareablesApiAdapter } from \"@fluid-app/shareables-api-client\";\nimport {\n createFilePickerClient,\n createFilePickerApi,\n} from \"@fluid-app/file-picker-api-client\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { useUserType } from \"../hooks/use-user-type\";\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 const domainClient = useSdkClient();\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n const { isCustomer } = useUserType();\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 back to the listing for the current screen\n navigate(`share/${screen}`);\n } else {\n // Navigate to the default shareables screen\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const shareablesApi = useMemo<ShareablesApi>(\n () => createShareablesApiAdapter(domainClient, { repContext: true }),\n [domainClient],\n );\n\n const filePickerApi = useMemo(\n () =>\n createFilePickerApi(\n createFilePickerClient({ fetchClient: domainClient }),\n ),\n [domainClient],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n affiliateId:\n (userData as { affiliate_id?: number } | undefined)?.affiliate_id ??\n null,\n basePath: \"\",\n navigate: (path: string) => {\n // Strip leading slash — cards generate paths like \"/share/product/123\"\n const cleanPath = path.replace(/^\\//, \"\");\n // Ensure share/ prefix — screen components pass relative paths like \"media/new\"\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 }) => {\n console.warn(`[Shareables] ${opts.type}: ${opts.title}`);\n },\n filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const affiliateId = (userData as { affiliate_id?: number } | undefined)\n ?.affiliate_id;\n if (!affiliateId) throw new Error(\"No affiliate ID\");\n return domainClient.post<{ is_favorited: boolean }>(\n `/user_companies/${affiliateId}/favorites/toggle.json`,\n {\n favoriteable_id: params.favoriteableId,\n favoriteable_type: params.favoriteableType,\n },\n );\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n const { playlists: playlistsApi } =\n await import(\"@fluid-app/shareables-api-client\");\n await playlistsApi.deletePlaylist(domainClient, playlistId);\n },\n readOnly: isCustomer,\n }),\n [userData, navigate, filePickerApi, domainClient, isCustomer],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider api={shareablesApi}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={userData?.company?.logo_url}\n countryCode={userData?.country?.iso}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\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,10 +1,11 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
- const require_FluidProvider = require("./FluidProvider-DbYLBGGg.cjs");
3
- const require_use_account_clients = require("./use-account-clients-CFM5q2J-.cjs");
4
- const require_use_current_user = require("./use-current-user-CrHH290V.cjs");
2
+ const require_FluidProvider = require("./FluidProvider-NnE6s3O0.cjs");
3
+ const require_use_fluid_auth = require("./use-fluid-auth-BPwsWZNu.cjs");
4
+ const require_use_current_user = require("./use-current-user-C7O5SJ_L.cjs");
5
5
  const require_AppNavigationContext = require("./AppNavigationContext-Agp0UkCQ.cjs");
6
- const require_src = require("./src-xEfkv04t.cjs");
7
- const require_src$1 = require("./src-CMByt6YP.cjs");
6
+ const require_use_account_clients = require("./use-account-clients-CDTUFb6O.cjs");
7
+ const require_src = require("./src-D5RNExKx.cjs");
8
+ const require_src$1 = require("./src-Zv3-NSUf.cjs");
8
9
  let react = require("react");
9
10
  let react_jsx_runtime = require("react/jsx-runtime");
10
11
  let zod = require("zod");
@@ -13,7 +14,7 @@ let zod = require("zod");
13
14
  * Convenience hook for user-type checks in the portal SDK.
14
15
  */
15
16
  function useUserType() {
16
- const { user } = require_use_account_clients.useFluidAuth();
17
+ const { user } = require_use_fluid_auth.useFluidAuth();
17
18
  return (0, react.useMemo)(() => {
18
19
  const userType = user?.user_type ?? null;
19
20
  return {
@@ -332,7 +333,7 @@ function ShareablesScreen({ background, textColor, accentColor, padding, borderR
332
333
  });
333
334
  },
334
335
  onDeletePlaylist: isCustomer ? void 0 : async (playlistId) => {
335
- const { playlists: playlistsApi } = await Promise.resolve().then(() => require("./src-CMByt6YP.cjs")).then((n) => n.src_exports);
336
+ const { playlists: playlistsApi } = await Promise.resolve().then(() => require("./src-Zv3-NSUf.cjs")).then((n) => n.src_exports);
336
337
  await playlistsApi.deletePlaylist(domainClient, playlistId);
337
338
  },
338
339
  readOnly: isCustomer
@@ -395,4 +396,4 @@ Object.defineProperty(exports, "useUserType", {
395
396
  }
396
397
  });
397
398
 
398
- //# sourceMappingURL=ShareablesScreen-9toTptRT.cjs.map
399
+ //# sourceMappingURL=ShareablesScreen-D3JVKFVA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShareablesScreen-9toTptRT.cjs","names":["useFluidAuth","USER_TYPES","z","getFileMimeType","z","z","useSdkClient","useCurrentUser","useAppNavigation","createShareablesApiAdapter","ShareablesCoreProvider","ShareablesApiProvider","ShareablesUIProvider","ShareablesApp"],"sources":["../src/hooks/use-user-type.ts","../../../file-picker/core/src/schemas/dam.ts","../../../file-picker/api-client/src/client.ts","../../../file-picker/api-client/src/api/dam-assets.ts","../../../file-picker/api-client/src/api/dam-query.ts","../../../file-picker/api-client/src/api/unsplash.ts","../../../file-picker/api-client/src/api/url-proxy.ts","../../../file-picker/api-client/src/create-file-picker-api.ts","../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useFluidAuth } from \"./use-fluid-auth\";\nimport { USER_TYPES, type UserType } from \"../auth/types\";\n\nexport interface UseUserTypeResult {\n userType: UserType | null;\n isCustomer: boolean;\n isRep: boolean;\n isAdmin: boolean;\n}\n\n/**\n * Convenience hook for user-type checks in the portal SDK.\n */\nexport function useUserType(): UseUserTypeResult {\n const { user } = useFluidAuth();\n\n return useMemo(() => {\n const userType = user?.user_type ?? null;\n return {\n userType,\n isCustomer: userType === USER_TYPES.customer,\n isRep: userType === USER_TYPES.rep,\n isAdmin:\n userType === USER_TYPES.admin || userType === USER_TYPES.root_admin,\n };\n }, [user?.user_type]);\n}\n","import { z } from \"zod\";\n\ntype DamVariantApi = {\n id: string;\n url: string | null;\n file_name: string;\n mime_type: string;\n content: any;\n created_at: string;\n updated_at: string;\n default: boolean;\n is_original: boolean;\n is_text: boolean;\n media_type: string;\n processing_status: string;\n tags: string[];\n};\n\nexport const damVariantSchema: z.ZodType<DamVariantApi> = z.object({\n id: z.string(),\n url: z.string().nullable(),\n file_name: z.string(),\n mime_type: z.string(),\n content: z.any().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n default: z.boolean(),\n is_original: z.boolean(),\n is_text: z.boolean(),\n media_type: z.string(),\n processing_status: z.string(),\n tags: z.array(z.string()),\n});\n\ntype DamAssetApi = {\n id: number;\n canonical_path: string;\n category: string;\n code: string;\n company: string;\n created_at: string;\n default_variant_id: string;\n default_variant_url?: string;\n description: string;\n name: string;\n updated_at: string;\n variants?: DamVariantApi[];\n};\n\nexport const damAssetSchema: z.ZodType<DamAssetApi> = z.object({\n id: z.number(),\n canonical_path: z.string(),\n category: z.string(),\n code: z.string(),\n company: z.string(),\n created_at: z.string(),\n default_variant_id: z.string(),\n default_variant_url: z.string().optional(),\n description: z.string(),\n name: z.string(),\n updated_at: z.string(),\n variants: z.array(damVariantSchema).optional(),\n});\n\ntype DamTreeFolderNode = {\n asset_code?: string | Record<string, unknown>;\n name?: string | Record<string, unknown>;\n category?: string | Record<string, unknown>;\n variants?: unknown[] | Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport const damTreeFolderNodeSchema: z.ZodType<DamTreeFolderNode> = z\n .object({\n asset_code: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n name: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n category: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n variants: z\n .union([z.array(z.unknown()), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough();\n\nexport const damTreeSchema: z.ZodType<Record<string, any>> = z.record(\n z.string(),\n z.union([\n z.lazy(() => damTreeSchema),\n damAssetSchema,\n damTreeFolderNodeSchema,\n ]),\n);\n\ntype DamQueryResponse = {\n path: string;\n tree: Record<string, any>;\n meta?: { next_cursor?: string };\n};\n\nexport const damQueryResponseSchema: z.ZodType<DamQueryResponse> = z.object({\n path: z.string(),\n tree: damTreeSchema,\n meta: z\n .object({\n next_cursor: z.string().optional(),\n })\n .optional(),\n});\n\ntype DamAssetCreateRequest = {\n asset: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n};\n\nexport const damAssetCreateRequestSchema: z.ZodType<DamAssetCreateRequest> =\n z.object({\n asset: z.object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n }),\n });\n\ntype DamAssetCreateResponse = {\n asset: DamAssetApi;\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetCreateResponseSchema: z.ZodType<DamAssetCreateResponse> =\n z.object({\n asset: damAssetSchema,\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\n// Schema for creating asset with placeholder (for ImageKit direct upload)\ntype DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetCreateWithPlaceholderRequestSchema: z.ZodType<DamAssetCreateWithPlaceholderRequest> =\n z.object({\n placeholder_asset: z.object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n skip_autotagging: z.boolean().optional(),\n });\n\n// Schema for creating asset path without file upload (legacy)\ntype DamAssetPathCreateRequest = {\n asset?: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n text_asset?: {\n file_name: string;\n mime_type: string;\n text: string;\n name?: string;\n description?: string;\n tags?: string;\n };\n placeholder_asset?: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetPathCreateRequestSchema: z.ZodType<DamAssetPathCreateRequest> =\n z.object({\n asset: z\n .object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n text_asset: z\n .object({\n file_name: z.string(),\n mime_type: z.string(),\n text: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n placeholder_asset: z\n .object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n skip_autotagging: z.boolean().optional(),\n });\n\ntype DamAssetPathCreateResponse = {\n asset: { id: number; canonical_path: string; name: string };\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetPathCreateResponseSchema: z.ZodType<DamAssetPathCreateResponse> =\n z.object({\n asset: z.object({\n id: z.number(),\n canonical_path: z.string(),\n name: z.string(),\n }),\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\nexport type { DamVariantApi, DamAssetApi };\nexport type DamTreeApi = z.infer<typeof damTreeSchema>;\nexport type { DamQueryResponse };\nexport type { DamAssetCreateRequest };\nexport type { DamAssetCreateResponse };\nexport type { DamAssetCreateWithPlaceholderRequest };\nexport type { DamAssetPathCreateRequest };\nexport type { DamAssetPathCreateResponse };\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport type { DamAssetCreateResponse } from \"@fluid-app/file-picker-core\";\n\nexport interface DamUploadStrategy {\n uploadFile(params: {\n file: File;\n name: string;\n description?: string;\n tags?: string[];\n onProgress?: (progress: number) => void;\n companyId?: number;\n }): Promise<DamAssetCreateResponse>;\n}\n\nexport interface FilePickerClientConfig {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint?: string; // defaults to \"/api/proxy-url\"\n}\n\nexport interface FilePickerClient {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint: string;\n}\n\nexport function createFilePickerClient(\n config: FilePickerClientConfig,\n): FilePickerClient {\n return {\n fetchClient: config.fetchClient,\n uploadStrategy: config.uploadStrategy,\n unsplashAccessKey: config.unsplashAccessKey,\n proxyEndpoint: config.proxyEndpoint ?? \"/api/proxy-url\",\n };\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damAssetCreateResponseSchema,\n damAssetPathCreateResponseSchema,\n getFileMimeType,\n type CreateDamAssetParams,\n type CreateDamAssetPathForAssetsParams,\n type DamAssetCreateResponse,\n type DamAssetCreateWithPlaceholderRequest,\n type DamAssetPathCreateRequest,\n type DamAssetPathCreateResponse,\n} from \"@fluid-app/file-picker-core\";\nimport type { DamUploadStrategy } from \"../client\";\n\nexport type { CreateDamAssetParams };\n\nexport interface CreateDamAssetPathParams {\n name: string;\n description?: string;\n tags?: string[];\n companyId?: number;\n mimeType?: string;\n textContent?: string;\n fileName?: string;\n skipAutotagging?: boolean;\n}\n\n/**\n * Create a DAM asset. Text files use FormData upload; non-text files\n * delegate to the provided uploadStrategy (e.g. ImageKit).\n * If no uploadStrategy is provided, all files use FormData upload.\n */\nexport async function createDamAsset(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n uploadStrategy?: DamUploadStrategy,\n): Promise<DamAssetCreateResponse> {\n const mimeType = getFileMimeType(params.file);\n const isTextFile =\n mimeType.startsWith(\"text/\") ||\n mimeType === \"application/json\" ||\n mimeType === \"application/xml\" ||\n params.file.name.endsWith(\".txt\") ||\n params.file.name.endsWith(\".json\") ||\n params.file.name.endsWith(\".xml\") ||\n params.file.name.endsWith(\".csv\");\n\n // For text files, use traditional FormData upload\n if (isTextFile) {\n return createDamAssetViaFormData(fetchClient, params);\n }\n\n // For non-text files, use upload strategy if available\n if (uploadStrategy) {\n return uploadStrategy.uploadFile(params);\n }\n\n // Fallback to FormData upload\n return createDamAssetViaFormData(fetchClient, params);\n}\n\nasync function createDamAssetViaFormData(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n): Promise<DamAssetCreateResponse> {\n const formData = new FormData();\n formData.append(\"asset[file]\", params.file);\n formData.append(\"asset[name]\", params.name);\n\n if (params.description) {\n formData.append(\"asset[description]\", params.description);\n }\n\n if (params.tags && params.tags.length > 0) {\n formData.append(\"asset[tags]\", params.tags.join(\",\"));\n }\n\n const response = await fetchClient.requestWithFormData<unknown>(\n \"/dam/assets\",\n formData,\n { method: \"POST\" },\n );\n return damAssetCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset with placeholder for direct upload strategies\n */\nexport async function createDamAssetWithPlaceholder(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n if (!params.mimeType) {\n throw new Error(\"mimeType is required for createDamAssetWithPlaceholder\");\n }\n const requestData: DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n },\n };\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset path without file upload (legacy)\n */\nexport async function createDamAssetPath(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n const requestData: DamAssetPathCreateRequest = {};\n\n if (params.textContent && params.mimeType && params.fileName) {\n requestData.text_asset = {\n file_name: params.fileName,\n mime_type: params.mimeType,\n text: params.textContent,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n } else if (params.mimeType) {\n requestData.placeholder_asset = {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n };\n } else {\n requestData.asset = {\n file: null,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n }\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\nexport type { CreateDamAssetPathForAssetsParams } from \"@fluid-app/file-picker-core\";\n\nexport async function createDamAssetPathForAssets(\n fetchClient: FetchClientInstance,\n { asset_paths, code }: CreateDamAssetPathForAssetsParams,\n): Promise<DamAssetPathCreateResponse> {\n const response = await fetchClient.post<unknown>(\n `/dam/assets/${code}/asset_paths`,\n { asset_paths },\n );\n return damAssetPathCreateResponseSchema.parse(response);\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damQueryResponseSchema,\n type DamQueryParams,\n type DamQueryResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport async function queryDamAssets(\n fetchClient: FetchClientInstance,\n params: DamQueryParams,\n): Promise<DamQueryResponse> {\n const response = await fetchClient.post<unknown>(\"/dam/query\", params);\n return damQueryResponseSchema.parse(response);\n}\n\nexport async function deleteDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.delete(`/dam/assets/${code}`);\n}\n\nexport async function discardDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.patch(`/dam/assets/${code}/discard`);\n}\n","import { z } from \"zod\";\nimport type {\n UnsplashImage,\n UnsplashSearchResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport type { UnsplashImage, UnsplashSearchResponse };\n\nconst unsplashImageSchema: z.ZodType<UnsplashImage> = z.object({\n id: z.string(),\n urls: z.object({\n raw: z.string(),\n full: z.string(),\n regular: z.string(),\n small: z.string(),\n thumb: z.string(),\n }),\n alt_description: z.string().nullable(),\n description: z.string().nullable(),\n user: z.object({ name: z.string(), username: z.string() }),\n width: z.number(),\n height: z.number(),\n});\n\nconst unsplashSearchResponseSchema: z.ZodType<UnsplashSearchResponse> =\n z.object({\n results: z.array(unsplashImageSchema),\n total: z.number(),\n total_pages: z.number(),\n });\n\n/**\n * Search Unsplash for photos matching a query.\n */\nexport async function searchUnsplash(\n query: string,\n accessKey: string,\n page: number = 1,\n perPage: number = 20,\n): Promise<UnsplashSearchResponse> {\n const response = await fetch(\n `https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&page=${page}&per_page=${perPage}&client_id=${accessKey}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to search Unsplash\");\n }\n\n return unsplashSearchResponseSchema.parse(await response.json());\n}\n","import { z } from \"zod\";\nimport type { UrlProxyResponse } from \"@fluid-app/file-picker-core\";\n\nexport type { UrlProxyResponse };\n\nconst urlProxyResponseSchema: z.ZodType<UrlProxyResponse> = z.object({\n data: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Proxy a URL fetch through the backend to bypass CORS restrictions.\n * The backend fetches the file and returns it as base64-encoded data.\n *\n * @param url - The URL to fetch\n * @param proxyEndpoint - The proxy endpoint (defaults to \"/api/proxy-url\")\n */\nexport async function proxyUrlFetch(\n url: string,\n proxyEndpoint: string = \"/api/proxy-url\",\n): Promise<UrlProxyResponse> {\n const response = await fetch(proxyEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ url }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({\n error: \"Failed to proxy URL fetch\",\n }));\n throw new Error(\n (errorData as { error?: string }).error || `HTTP ${response.status}`,\n );\n }\n\n const data: unknown = await response.json();\n return urlProxyResponseSchema.parse(data);\n}\n","import type { FilePickerApi } from \"@fluid-app/file-picker-core\";\nimport type { FilePickerClient } from \"./client\";\nimport { createDamAsset, createDamAssetPathForAssets } from \"./api/dam-assets\";\nimport {\n queryDamAssets,\n deleteDamAsset,\n discardDamAsset,\n} from \"./api/dam-query\";\nimport { searchUnsplash } from \"./api/unsplash\";\nimport { proxyUrlFetch } from \"./api/url-proxy\";\n\n/**\n * Creates a FilePickerApi-compatible adapter backed by the real API client\n * functions. The returned object satisfies the FilePickerApi interface\n * from @fluid-app/file-picker-core via structural typing.\n */\nexport function createFilePickerApi(client: FilePickerClient): FilePickerApi {\n return {\n createDamAsset: (params: Parameters<typeof createDamAsset>[1]) =>\n createDamAsset(client.fetchClient, params, client.uploadStrategy),\n queryDamAssets: (params: Parameters<typeof queryDamAssets>[1]) =>\n queryDamAssets(client.fetchClient, params),\n searchUnsplash: (query: string, page?: number, perPage?: number) => {\n if (!client.unsplashAccessKey) {\n throw new Error(\"Unsplash access key not configured\");\n }\n return searchUnsplash(query, client.unsplashAccessKey, page, perPage);\n },\n deleteDamAsset: (code: string) => deleteDamAsset(client.fetchClient, code),\n discardDamAsset: (code: string) =>\n discardDamAsset(client.fetchClient, code),\n createDamAssetPathForAssets: (\n params: Parameters<typeof createDamAssetPathForAssets>[1],\n ) => createDamAssetPathForAssets(client.fetchClient, params),\n proxyUrlFetch: (url: string) => proxyUrlFetch(url, client.proxyEndpoint),\n };\n}\n","import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n type ShareablesApi,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { createShareablesApiAdapter } from \"@fluid-app/shareables-api-client\";\nimport {\n createFilePickerClient,\n createFilePickerApi,\n} from \"@fluid-app/file-picker-api-client\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { useUserType } from \"../hooks/use-user-type\";\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 const domainClient = useSdkClient();\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n const { isCustomer } = useUserType();\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 back to the listing for the current screen\n navigate(`share/${screen}`);\n } else {\n // Navigate to the default shareables screen\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const shareablesApi = useMemo<ShareablesApi>(\n () => createShareablesApiAdapter(domainClient, { repContext: true }),\n [domainClient],\n );\n\n const filePickerApi = useMemo(\n () =>\n createFilePickerApi(\n createFilePickerClient({ fetchClient: domainClient }),\n ),\n [domainClient],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n affiliateId:\n (userData as { affiliate_id?: number } | undefined)?.affiliate_id ??\n null,\n basePath: \"\",\n navigate: (path: string) => {\n // Strip leading slash — cards generate paths like \"/share/product/123\"\n const cleanPath = path.replace(/^\\//, \"\");\n // Ensure share/ prefix — screen components pass relative paths like \"media/new\"\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 }) => {\n console.warn(`[Shareables] ${opts.type}: ${opts.title}`);\n },\n filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const affiliateId = (userData as { affiliate_id?: number } | undefined)\n ?.affiliate_id;\n if (!affiliateId) throw new Error(\"No affiliate ID\");\n return domainClient.post<{ is_favorited: boolean }>(\n `/user_companies/${affiliateId}/favorites/toggle.json`,\n {\n favoriteable_id: params.favoriteableId,\n favoriteable_type: params.favoriteableType,\n },\n );\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n const { playlists: playlistsApi } =\n await import(\"@fluid-app/shareables-api-client\");\n await playlistsApi.deletePlaylist(domainClient, playlistId);\n },\n readOnly: isCustomer,\n }),\n [userData, navigate, filePickerApi, domainClient, isCustomer],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider api={shareablesApi}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={userData?.company?.logo_url}\n countryCode={userData?.country?.iso}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\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
+ {"version":3,"file":"ShareablesScreen-D3JVKFVA.cjs","names":["useFluidAuth","USER_TYPES","z","getFileMimeType","z","z","useSdkClient","useCurrentUser","useAppNavigation","createShareablesApiAdapter","ShareablesCoreProvider","ShareablesApiProvider","ShareablesUIProvider","ShareablesApp"],"sources":["../src/hooks/use-user-type.ts","../../../file-picker/core/src/schemas/dam.ts","../../../file-picker/api-client/src/client.ts","../../../file-picker/api-client/src/api/dam-assets.ts","../../../file-picker/api-client/src/api/dam-query.ts","../../../file-picker/api-client/src/api/unsplash.ts","../../../file-picker/api-client/src/api/url-proxy.ts","../../../file-picker/api-client/src/create-file-picker-api.ts","../src/screens/ShareablesScreen.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useFluidAuth } from \"./use-fluid-auth\";\nimport { USER_TYPES, type UserType } from \"../auth/types\";\n\nexport interface UseUserTypeResult {\n userType: UserType | null;\n isCustomer: boolean;\n isRep: boolean;\n isAdmin: boolean;\n}\n\n/**\n * Convenience hook for user-type checks in the portal SDK.\n */\nexport function useUserType(): UseUserTypeResult {\n const { user } = useFluidAuth();\n\n return useMemo(() => {\n const userType = user?.user_type ?? null;\n return {\n userType,\n isCustomer: userType === USER_TYPES.customer,\n isRep: userType === USER_TYPES.rep,\n isAdmin:\n userType === USER_TYPES.admin || userType === USER_TYPES.root_admin,\n };\n }, [user?.user_type]);\n}\n","import { z } from \"zod\";\n\ntype DamVariantApi = {\n id: string;\n url: string | null;\n file_name: string;\n mime_type: string;\n content: any;\n created_at: string;\n updated_at: string;\n default: boolean;\n is_original: boolean;\n is_text: boolean;\n media_type: string;\n processing_status: string;\n tags: string[];\n};\n\nexport const damVariantSchema: z.ZodType<DamVariantApi> = z.object({\n id: z.string(),\n url: z.string().nullable(),\n file_name: z.string(),\n mime_type: z.string(),\n content: z.any().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n default: z.boolean(),\n is_original: z.boolean(),\n is_text: z.boolean(),\n media_type: z.string(),\n processing_status: z.string(),\n tags: z.array(z.string()),\n});\n\ntype DamAssetApi = {\n id: number;\n canonical_path: string;\n category: string;\n code: string;\n company: string;\n created_at: string;\n default_variant_id: string;\n default_variant_url?: string;\n description: string;\n name: string;\n updated_at: string;\n variants?: DamVariantApi[];\n};\n\nexport const damAssetSchema: z.ZodType<DamAssetApi> = z.object({\n id: z.number(),\n canonical_path: z.string(),\n category: z.string(),\n code: z.string(),\n company: z.string(),\n created_at: z.string(),\n default_variant_id: z.string(),\n default_variant_url: z.string().optional(),\n description: z.string(),\n name: z.string(),\n updated_at: z.string(),\n variants: z.array(damVariantSchema).optional(),\n});\n\ntype DamTreeFolderNode = {\n asset_code?: string | Record<string, unknown>;\n name?: string | Record<string, unknown>;\n category?: string | Record<string, unknown>;\n variants?: unknown[] | Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport const damTreeFolderNodeSchema: z.ZodType<DamTreeFolderNode> = z\n .object({\n asset_code: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n name: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n category: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n variants: z\n .union([z.array(z.unknown()), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough();\n\nexport const damTreeSchema: z.ZodType<Record<string, any>> = z.record(\n z.string(),\n z.union([\n z.lazy(() => damTreeSchema),\n damAssetSchema,\n damTreeFolderNodeSchema,\n ]),\n);\n\ntype DamQueryResponse = {\n path: string;\n tree: Record<string, any>;\n meta?: { next_cursor?: string };\n};\n\nexport const damQueryResponseSchema: z.ZodType<DamQueryResponse> = z.object({\n path: z.string(),\n tree: damTreeSchema,\n meta: z\n .object({\n next_cursor: z.string().optional(),\n })\n .optional(),\n});\n\ntype DamAssetCreateRequest = {\n asset: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n};\n\nexport const damAssetCreateRequestSchema: z.ZodType<DamAssetCreateRequest> =\n z.object({\n asset: z.object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n }),\n });\n\ntype DamAssetCreateResponse = {\n asset: DamAssetApi;\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetCreateResponseSchema: z.ZodType<DamAssetCreateResponse> =\n z.object({\n asset: damAssetSchema,\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\n// Schema for creating asset with placeholder (for ImageKit direct upload)\ntype DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetCreateWithPlaceholderRequestSchema: z.ZodType<DamAssetCreateWithPlaceholderRequest> =\n z.object({\n placeholder_asset: z.object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n }),\n skip_autotagging: z.boolean().optional(),\n });\n\n// Schema for creating asset path without file upload (legacy)\ntype DamAssetPathCreateRequest = {\n asset?: {\n file: any;\n name: string;\n description?: string;\n tags?: string;\n };\n text_asset?: {\n file_name: string;\n mime_type: string;\n text: string;\n name?: string;\n description?: string;\n tags?: string;\n };\n placeholder_asset?: {\n mime_type: string;\n name?: string;\n description?: string;\n };\n skip_autotagging?: boolean;\n};\n\nexport const damAssetPathCreateRequestSchema: z.ZodType<DamAssetPathCreateRequest> =\n z.object({\n asset: z\n .object({\n file: z.any(),\n name: z.string(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n text_asset: z\n .object({\n file_name: z.string(),\n mime_type: z.string(),\n text: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n tags: z.string().optional(),\n })\n .optional(),\n placeholder_asset: z\n .object({\n mime_type: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n skip_autotagging: z.boolean().optional(),\n });\n\ntype DamAssetPathCreateResponse = {\n asset: { id: number; canonical_path: string; name: string };\n meta: { request_id: string; timestamp: string };\n};\n\nexport const damAssetPathCreateResponseSchema: z.ZodType<DamAssetPathCreateResponse> =\n z.object({\n asset: z.object({\n id: z.number(),\n canonical_path: z.string(),\n name: z.string(),\n }),\n meta: z.object({\n request_id: z.string(),\n timestamp: z.string(),\n }),\n });\n\nexport type { DamVariantApi, DamAssetApi };\nexport type DamTreeApi = z.infer<typeof damTreeSchema>;\nexport type { DamQueryResponse };\nexport type { DamAssetCreateRequest };\nexport type { DamAssetCreateResponse };\nexport type { DamAssetCreateWithPlaceholderRequest };\nexport type { DamAssetPathCreateRequest };\nexport type { DamAssetPathCreateResponse };\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport type { DamAssetCreateResponse } from \"@fluid-app/file-picker-core\";\n\nexport interface DamUploadStrategy {\n uploadFile(params: {\n file: File;\n name: string;\n description?: string;\n tags?: string[];\n onProgress?: (progress: number) => void;\n companyId?: number;\n }): Promise<DamAssetCreateResponse>;\n}\n\nexport interface FilePickerClientConfig {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint?: string; // defaults to \"/api/proxy-url\"\n}\n\nexport interface FilePickerClient {\n fetchClient: FetchClientInstance;\n uploadStrategy?: DamUploadStrategy;\n unsplashAccessKey?: string;\n proxyEndpoint: string;\n}\n\nexport function createFilePickerClient(\n config: FilePickerClientConfig,\n): FilePickerClient {\n return {\n fetchClient: config.fetchClient,\n uploadStrategy: config.uploadStrategy,\n unsplashAccessKey: config.unsplashAccessKey,\n proxyEndpoint: config.proxyEndpoint ?? \"/api/proxy-url\",\n };\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damAssetCreateResponseSchema,\n damAssetPathCreateResponseSchema,\n getFileMimeType,\n type CreateDamAssetParams,\n type CreateDamAssetPathForAssetsParams,\n type DamAssetCreateResponse,\n type DamAssetCreateWithPlaceholderRequest,\n type DamAssetPathCreateRequest,\n type DamAssetPathCreateResponse,\n} from \"@fluid-app/file-picker-core\";\nimport type { DamUploadStrategy } from \"../client\";\n\nexport type { CreateDamAssetParams };\n\nexport interface CreateDamAssetPathParams {\n name: string;\n description?: string;\n tags?: string[];\n companyId?: number;\n mimeType?: string;\n textContent?: string;\n fileName?: string;\n skipAutotagging?: boolean;\n}\n\n/**\n * Create a DAM asset. Text files use FormData upload; non-text files\n * delegate to the provided uploadStrategy (e.g. ImageKit).\n * If no uploadStrategy is provided, all files use FormData upload.\n */\nexport async function createDamAsset(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n uploadStrategy?: DamUploadStrategy,\n): Promise<DamAssetCreateResponse> {\n const mimeType = getFileMimeType(params.file);\n const isTextFile =\n mimeType.startsWith(\"text/\") ||\n mimeType === \"application/json\" ||\n mimeType === \"application/xml\" ||\n params.file.name.endsWith(\".txt\") ||\n params.file.name.endsWith(\".json\") ||\n params.file.name.endsWith(\".xml\") ||\n params.file.name.endsWith(\".csv\");\n\n // For text files, use traditional FormData upload\n if (isTextFile) {\n return createDamAssetViaFormData(fetchClient, params);\n }\n\n // For non-text files, use upload strategy if available\n if (uploadStrategy) {\n return uploadStrategy.uploadFile(params);\n }\n\n // Fallback to FormData upload\n return createDamAssetViaFormData(fetchClient, params);\n}\n\nasync function createDamAssetViaFormData(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetParams,\n): Promise<DamAssetCreateResponse> {\n const formData = new FormData();\n formData.append(\"asset[file]\", params.file);\n formData.append(\"asset[name]\", params.name);\n\n if (params.description) {\n formData.append(\"asset[description]\", params.description);\n }\n\n if (params.tags && params.tags.length > 0) {\n formData.append(\"asset[tags]\", params.tags.join(\",\"));\n }\n\n const response = await fetchClient.requestWithFormData<unknown>(\n \"/dam/assets\",\n formData,\n { method: \"POST\" },\n );\n return damAssetCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset with placeholder for direct upload strategies\n */\nexport async function createDamAssetWithPlaceholder(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n if (!params.mimeType) {\n throw new Error(\"mimeType is required for createDamAssetWithPlaceholder\");\n }\n const requestData: DamAssetCreateWithPlaceholderRequest = {\n placeholder_asset: {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n },\n };\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\n/**\n * Create DAM asset path without file upload (legacy)\n */\nexport async function createDamAssetPath(\n fetchClient: FetchClientInstance,\n params: CreateDamAssetPathParams,\n): Promise<DamAssetPathCreateResponse> {\n const requestData: DamAssetPathCreateRequest = {};\n\n if (params.textContent && params.mimeType && params.fileName) {\n requestData.text_asset = {\n file_name: params.fileName,\n mime_type: params.mimeType,\n text: params.textContent,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n } else if (params.mimeType) {\n requestData.placeholder_asset = {\n mime_type: params.mimeType,\n name: params.name,\n description: params.description,\n };\n } else {\n requestData.asset = {\n file: null,\n name: params.name,\n description: params.description,\n tags: params.tags?.join(\",\"),\n };\n }\n\n if (params.skipAutotagging !== undefined) {\n requestData.skip_autotagging = params.skipAutotagging;\n }\n\n const response = await fetchClient.post<unknown>(\"/dam/assets\", requestData);\n return damAssetPathCreateResponseSchema.parse(response);\n}\n\nexport type { CreateDamAssetPathForAssetsParams } from \"@fluid-app/file-picker-core\";\n\nexport async function createDamAssetPathForAssets(\n fetchClient: FetchClientInstance,\n { asset_paths, code }: CreateDamAssetPathForAssetsParams,\n): Promise<DamAssetPathCreateResponse> {\n const response = await fetchClient.post<unknown>(\n `/dam/assets/${code}/asset_paths`,\n { asset_paths },\n );\n return damAssetPathCreateResponseSchema.parse(response);\n}\n","import type { FetchClientInstance } from \"@fluid-app/api-client-core\";\nimport {\n damQueryResponseSchema,\n type DamQueryParams,\n type DamQueryResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport async function queryDamAssets(\n fetchClient: FetchClientInstance,\n params: DamQueryParams,\n): Promise<DamQueryResponse> {\n const response = await fetchClient.post<unknown>(\"/dam/query\", params);\n return damQueryResponseSchema.parse(response);\n}\n\nexport async function deleteDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.delete(`/dam/assets/${code}`);\n}\n\nexport async function discardDamAsset(\n fetchClient: FetchClientInstance,\n code: string,\n): Promise<unknown> {\n return fetchClient.patch(`/dam/assets/${code}/discard`);\n}\n","import { z } from \"zod\";\nimport type {\n UnsplashImage,\n UnsplashSearchResponse,\n} from \"@fluid-app/file-picker-core\";\n\nexport type { UnsplashImage, UnsplashSearchResponse };\n\nconst unsplashImageSchema: z.ZodType<UnsplashImage> = z.object({\n id: z.string(),\n urls: z.object({\n raw: z.string(),\n full: z.string(),\n regular: z.string(),\n small: z.string(),\n thumb: z.string(),\n }),\n alt_description: z.string().nullable(),\n description: z.string().nullable(),\n user: z.object({ name: z.string(), username: z.string() }),\n width: z.number(),\n height: z.number(),\n});\n\nconst unsplashSearchResponseSchema: z.ZodType<UnsplashSearchResponse> =\n z.object({\n results: z.array(unsplashImageSchema),\n total: z.number(),\n total_pages: z.number(),\n });\n\n/**\n * Search Unsplash for photos matching a query.\n */\nexport async function searchUnsplash(\n query: string,\n accessKey: string,\n page: number = 1,\n perPage: number = 20,\n): Promise<UnsplashSearchResponse> {\n const response = await fetch(\n `https://api.unsplash.com/search/photos?query=${encodeURIComponent(query)}&page=${page}&per_page=${perPage}&client_id=${accessKey}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to search Unsplash\");\n }\n\n return unsplashSearchResponseSchema.parse(await response.json());\n}\n","import { z } from \"zod\";\nimport type { UrlProxyResponse } from \"@fluid-app/file-picker-core\";\n\nexport type { UrlProxyResponse };\n\nconst urlProxyResponseSchema: z.ZodType<UrlProxyResponse> = z.object({\n data: z.string(),\n contentType: z.string(),\n size: z.number(),\n});\n\n/**\n * Proxy a URL fetch through the backend to bypass CORS restrictions.\n * The backend fetches the file and returns it as base64-encoded data.\n *\n * @param url - The URL to fetch\n * @param proxyEndpoint - The proxy endpoint (defaults to \"/api/proxy-url\")\n */\nexport async function proxyUrlFetch(\n url: string,\n proxyEndpoint: string = \"/api/proxy-url\",\n): Promise<UrlProxyResponse> {\n const response = await fetch(proxyEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ url }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({\n error: \"Failed to proxy URL fetch\",\n }));\n throw new Error(\n (errorData as { error?: string }).error || `HTTP ${response.status}`,\n );\n }\n\n const data: unknown = await response.json();\n return urlProxyResponseSchema.parse(data);\n}\n","import type { FilePickerApi } from \"@fluid-app/file-picker-core\";\nimport type { FilePickerClient } from \"./client\";\nimport { createDamAsset, createDamAssetPathForAssets } from \"./api/dam-assets\";\nimport {\n queryDamAssets,\n deleteDamAsset,\n discardDamAsset,\n} from \"./api/dam-query\";\nimport { searchUnsplash } from \"./api/unsplash\";\nimport { proxyUrlFetch } from \"./api/url-proxy\";\n\n/**\n * Creates a FilePickerApi-compatible adapter backed by the real API client\n * functions. The returned object satisfies the FilePickerApi interface\n * from @fluid-app/file-picker-core via structural typing.\n */\nexport function createFilePickerApi(client: FilePickerClient): FilePickerApi {\n return {\n createDamAsset: (params: Parameters<typeof createDamAsset>[1]) =>\n createDamAsset(client.fetchClient, params, client.uploadStrategy),\n queryDamAssets: (params: Parameters<typeof queryDamAssets>[1]) =>\n queryDamAssets(client.fetchClient, params),\n searchUnsplash: (query: string, page?: number, perPage?: number) => {\n if (!client.unsplashAccessKey) {\n throw new Error(\"Unsplash access key not configured\");\n }\n return searchUnsplash(query, client.unsplashAccessKey, page, perPage);\n },\n deleteDamAsset: (code: string) => deleteDamAsset(client.fetchClient, code),\n discardDamAsset: (code: string) =>\n discardDamAsset(client.fetchClient, code),\n createDamAssetPathForAssets: (\n params: Parameters<typeof createDamAssetPathForAssets>[1],\n ) => createDamAssetPathForAssets(client.fetchClient, params),\n proxyUrlFetch: (url: string) => proxyUrlFetch(url, client.proxyEndpoint),\n };\n}\n","import { useCallback, useMemo, type ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport {\n ShareablesCoreProvider,\n ShareablesApiProvider,\n type ShareablesApi,\n} from \"@fluid-app/shareables-core\";\nimport { ShareablesUIProvider, ShareablesApp } from \"@fluid-app/shareables-ui\";\nimport { createShareablesApiAdapter } from \"@fluid-app/shareables-api-client\";\nimport {\n createFilePickerClient,\n createFilePickerApi,\n} from \"@fluid-app/file-picker-api-client\";\nimport { useCurrentUser } from \"../hooks/use-current-user\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useSdkClient } from \"../account/use-account-clients\";\nimport { useUserType } from \"../hooks/use-user-type\";\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 const domainClient = useSdkClient();\n const { data: userData } = useCurrentUser();\n const { currentSlug, navigate } = useAppNavigation();\n const { isCustomer } = useUserType();\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 back to the listing for the current screen\n navigate(`share/${screen}`);\n } else {\n // Navigate to the default shareables screen\n navigate(\"share/products\");\n }\n }, [navigate, detailId, screen]);\n\n const coreConfig = useMemo(\n () => ({\n client: domainClient,\n user: userData ? { id: userData.id } : null,\n repContext: true,\n }),\n [domainClient, userData],\n );\n\n const shareablesApi = useMemo<ShareablesApi>(\n () => createShareablesApiAdapter(domainClient, { repContext: true }),\n [domainClient],\n );\n\n const filePickerApi = useMemo(\n () =>\n createFilePickerApi(\n createFilePickerClient({ fetchClient: domainClient }),\n ),\n [domainClient],\n );\n\n const uiConfig = useMemo(\n () => ({\n user: userData\n ? {\n id: userData.id,\n company: userData.company\n ? { logo_url: userData.company.logo_url }\n : null,\n }\n : undefined,\n affiliateId:\n (userData as { affiliate_id?: number } | undefined)?.affiliate_id ??\n null,\n basePath: \"\",\n navigate: (path: string) => {\n // Strip leading slash — cards generate paths like \"/share/product/123\"\n const cleanPath = path.replace(/^\\//, \"\");\n // Ensure share/ prefix — screen components pass relative paths like \"media/new\"\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 }) => {\n console.warn(`[Shareables] ${opts.type}: ${opts.title}`);\n },\n filePickerApi,\n onToggleFavorite: async (params: {\n favoriteableId: number;\n favoriteableType: string;\n }) => {\n const affiliateId = (userData as { affiliate_id?: number } | undefined)\n ?.affiliate_id;\n if (!affiliateId) throw new Error(\"No affiliate ID\");\n return domainClient.post<{ is_favorited: boolean }>(\n `/user_companies/${affiliateId}/favorites/toggle.json`,\n {\n favoriteable_id: params.favoriteableId,\n favoriteable_type: params.favoriteableType,\n },\n );\n },\n onDeletePlaylist: isCustomer\n ? undefined\n : async (playlistId: number) => {\n const { playlists: playlistsApi } =\n await import(\"@fluid-app/shareables-api-client\");\n await playlistsApi.deletePlaylist(domainClient, playlistId);\n },\n readOnly: isCustomer,\n }),\n [userData, navigate, filePickerApi, domainClient, isCustomer],\n );\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <ShareablesCoreProvider config={coreConfig}>\n <ShareablesApiProvider api={shareablesApi}>\n <ShareablesUIProvider config={uiConfig}>\n <ShareablesApp\n screen={screen}\n detailId={detailId}\n action={action}\n companyLogoUrl={userData?.company?.logo_url}\n countryCode={userData?.country?.iso}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n </ShareablesUIProvider>\n </ShareablesApiProvider>\n </ShareablesCoreProvider>\n </div>\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,4 +1,4 @@
1
- import "./FluidProvider-B59bzF__.mjs";
1
+ import "./FluidProvider-dTwaHRzI.mjs";
2
2
  import "./PointsWidget-DgLGU995.mjs";
3
3
  import "./error-state-BGEvTYIh.mjs";
4
4
  import "./ScreenRenderer-DM-G72GL.mjs";
@@ -32,11 +32,15 @@ import "./SpacerWidget-B3zkEePP.mjs";
32
32
  import "./TableWidget-CC4XnRF2.mjs";
33
33
  import "./ToDoWidget-qyFLHU_o.mjs";
34
34
  import "./VideoWidget-CpUPsOI7.mjs";
35
+ import "./use-fluid-auth-Dy5K7BQ9.mjs";
35
36
  import "./ScreenHeaderContext-CrdfLGKk.mjs";
36
- import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-BOwl9-B0.mjs";
37
- import "./dist-NMbUD0qE.mjs";
38
- import "./es-BCKjXBqj.mjs";
39
- import "./dist-oYNtEpKP.mjs";
40
- import "./src-DjlwUaws.mjs";
41
- import "./sortable.esm-DSrWP4x9.mjs";
37
+ import "./use-fluid-api-D0kldm0L.mjs";
38
+ import "./use-current-user-Czzb9Zc4.mjs";
39
+ import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-CIrWSh5q.mjs";
40
+ import "./AppNavigationContext-Du3Qq0yc.mjs";
41
+ import "./dist-CMGXkSgZ.mjs";
42
+ import "./es-B84KtbcD.mjs";
43
+ import "./dist-B1HwSrso.mjs";
44
+ import "./src-Dhvv96Yt.mjs";
45
+ import "./sortable.esm-Cz-CP2N8.mjs";
42
46
  export { ShareablesScreen, shareablesScreenPropertySchema };
@@ -1,11 +1,11 @@
1
1
  const require_chunk = require("./chunk-9hOWP6kD.cjs");
2
- const require_FluidProvider = require("./FluidProvider-DbYLBGGg.cjs");
2
+ const require_FluidProvider = require("./FluidProvider-NnE6s3O0.cjs");
3
3
  const require_src = require("./src-51z4j_HI.cjs");
4
- const require_use_account_clients = require("./use-account-clients-CFM5q2J-.cjs");
5
4
  const require_ScreenHeaderContext = require("./ScreenHeaderContext-DpVOhFzT.cjs");
6
- const require_use_current_user = require("./use-current-user-CrHH290V.cjs");
5
+ const require_use_current_user = require("./use-current-user-C7O5SJ_L.cjs");
7
6
  const require_AppNavigationContext = require("./AppNavigationContext-Agp0UkCQ.cjs");
8
- const require_products = require("./products-BAtIML76.cjs");
7
+ const require_use_account_clients = require("./use-account-clients-CDTUFb6O.cjs");
8
+ const require_products = require("./products-3BKfOxrs.cjs");
9
9
  let react = require("react");
10
10
  react = require_chunk.__toESM(react);
11
11
  let _tanstack_react_query = require("@tanstack/react-query");
@@ -1740,7 +1740,6 @@ function ShopScreen({ background, textColor, accentColor, padding, borderRadius,
1740
1740
  const { config } = require_FluidProvider.useFluidContext();
1741
1741
  const domainClient = require_use_account_clients.useSdkClient();
1742
1742
  const productsApi = (0, react.useMemo)(() => createProductsApi(domainClient), [domainClient]);
1743
- const { token } = require_use_account_clients.useFluidAuth();
1744
1743
  const { data: userData } = require_use_current_user.useCurrentUser();
1745
1744
  const { currentSlug, navigate } = require_AppNavigationContext.useAppNavigation();
1746
1745
  const countryCode = config.countryIso ?? userData?.country?.iso ?? "US";
@@ -1780,7 +1779,7 @@ function ShopScreen({ background, textColor, accentColor, padding, borderRadius,
1780
1779
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShopContainer, {
1781
1780
  cartScript: subdomain ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CartScript, {
1782
1781
  subdomain,
1783
- authJwt: token ?? void 0
1782
+ authJwt: void 0
1784
1783
  }) : null,
1785
1784
  cartWidget: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CartWidget, {}),
1786
1785
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProductsCoreProvider, {
@@ -1820,4 +1819,4 @@ Object.defineProperty(exports, "shopScreenPropertySchema", {
1820
1819
  }
1821
1820
  });
1822
1821
 
1823
- //# sourceMappingURL=ShopScreen-Cbv-zrHK.cjs.map
1822
+ //# sourceMappingURL=ShopScreen-BTTKNmtT.cjs.map