@fluid-app/portal-sdk 0.1.357 → 0.1.359

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 (90) hide show
  1. package/dist/{AddressAutocompleteInput-M2F-m-Nh.cjs → AddressAutocompleteInput-DV1DS05i.cjs} +2 -2
  2. package/dist/{AddressAutocompleteInput-M2F-m-Nh.cjs.map → AddressAutocompleteInput-DV1DS05i.cjs.map} +1 -1
  3. package/dist/{AddressAutocompleteInput-DmrGdv0d.mjs → AddressAutocompleteInput-Z80mEIXZ.mjs} +2 -2
  4. package/dist/{AddressAutocompleteInput-DmrGdv0d.mjs.map → AddressAutocompleteInput-Z80mEIXZ.mjs.map} +1 -1
  5. package/dist/{CalendarWidget-CbS9AsMH.mjs → CalendarWidget-CQJfz8Jn.mjs} +2 -2
  6. package/dist/{CalendarWidget-CbS9AsMH.mjs.map → CalendarWidget-CQJfz8Jn.mjs.map} +1 -1
  7. package/dist/{CalendarWidget-B8ZIA_pe.cjs → CalendarWidget-z0It6f_7.cjs} +2 -2
  8. package/dist/{CalendarWidget-B8ZIA_pe.cjs.map → CalendarWidget-z0It6f_7.cjs.map} +1 -1
  9. package/dist/{CardWidget-B4LEZKbB.mjs → CardWidget-BpzZMsvX.mjs} +2 -2
  10. package/dist/{CardWidget-B4LEZKbB.mjs.map → CardWidget-BpzZMsvX.mjs.map} +1 -1
  11. package/dist/{CardWidget-BNW0Yqgd.cjs → CardWidget-Ccmmph6S.cjs} +2 -2
  12. package/dist/{CardWidget-BNW0Yqgd.cjs.map → CardWidget-Ccmmph6S.cjs.map} +1 -1
  13. package/dist/{CardWidget-CyNXwk60.cjs → CardWidget-D_3rdNrP.cjs} +3 -3
  14. package/dist/{CatchUpWidget-Cj10cTha.mjs → CatchUpWidget-BCe8hmdk.mjs} +2 -2
  15. package/dist/{CatchUpWidget-Cj10cTha.mjs.map → CatchUpWidget-BCe8hmdk.mjs.map} +1 -1
  16. package/dist/{CatchUpWidget-CiVhawuh.cjs → CatchUpWidget-DCDoIckB.cjs} +2 -2
  17. package/dist/{CatchUpWidget-CiVhawuh.cjs.map → CatchUpWidget-DCDoIckB.cjs.map} +1 -1
  18. package/dist/ContainerWidget-B8Ckbqiq.cjs +8 -0
  19. package/dist/{ContainerWidget-Dpt2viZ0.cjs → ContainerWidget-BEHBqh0a.cjs} +2 -2
  20. package/dist/{ContainerWidget-Dpt2viZ0.cjs.map → ContainerWidget-BEHBqh0a.cjs.map} +1 -1
  21. package/dist/{ContainerWidget-DSQ151lW.mjs → ContainerWidget-Bdq6CaDc.mjs} +2 -2
  22. package/dist/{ContainerWidget-DSQ151lW.mjs.map → ContainerWidget-Bdq6CaDc.mjs.map} +1 -1
  23. package/dist/{FluidProvider-BGn3iZIK.mjs → FluidProvider-DV227FL2.mjs} +20 -20
  24. package/dist/{FluidProvider-BGn3iZIK.mjs.map → FluidProvider-DV227FL2.mjs.map} +1 -1
  25. package/dist/{FluidProvider-BYP7L-lk.cjs → FluidProvider-Dgy4onF4.cjs} +20 -20
  26. package/dist/{FluidProvider-BYP7L-lk.cjs.map → FluidProvider-Dgy4onF4.cjs.map} +1 -1
  27. package/dist/{LayoutWidget-DCHpM0WT.cjs → LayoutWidget-DDviSQKj.cjs} +3 -3
  28. package/dist/{LayoutWidget-D8oT-Xnt.cjs → LayoutWidget-DOz-WOsy.cjs} +2 -2
  29. package/dist/{LayoutWidget-D8oT-Xnt.cjs.map → LayoutWidget-DOz-WOsy.cjs.map} +1 -1
  30. package/dist/{LayoutWidget-Byp1iMxL.mjs → LayoutWidget-DsXDBXSO.mjs} +2 -2
  31. package/dist/{LayoutWidget-Byp1iMxL.mjs.map → LayoutWidget-DsXDBXSO.mjs.map} +1 -1
  32. package/dist/{MessagingScreen-DyckzPKi.cjs → MessagingScreen-C69BJ8Fz.cjs} +2 -2
  33. package/dist/{MessagingScreen-DyckzPKi.cjs.map → MessagingScreen-C69BJ8Fz.cjs.map} +1 -1
  34. package/dist/{MessagingScreen-BvtYIaz1.mjs → MessagingScreen-CCb05_Wj.mjs} +2 -2
  35. package/dist/{MessagingScreen-BvtYIaz1.mjs.map → MessagingScreen-CCb05_Wj.mjs.map} +1 -1
  36. package/dist/{MessagingScreen-CVMKVllz.cjs → MessagingScreen-DiaV8xau.cjs} +13 -13
  37. package/dist/{MessagingScreen-B-HQlj-7.mjs → MessagingScreen-r732O1LD.mjs} +13 -13
  38. package/dist/{MySiteWidget-C_qQJaPH.mjs → MySiteWidget-BvFHv9me.mjs} +2 -2
  39. package/dist/{MySiteWidget-C_qQJaPH.mjs.map → MySiteWidget-BvFHv9me.mjs.map} +1 -1
  40. package/dist/{MySiteWidget-CGWlrGMu.cjs → MySiteWidget-BwmprXJj.cjs} +2 -2
  41. package/dist/{MySiteWidget-CGWlrGMu.cjs.map → MySiteWidget-BwmprXJj.cjs.map} +1 -1
  42. package/dist/{OrdersScreen-90pl5JDi.cjs → OrdersScreen-BlP4uKE8.cjs} +2 -2
  43. package/dist/{OrdersScreen-90pl5JDi.cjs.map → OrdersScreen-BlP4uKE8.cjs.map} +1 -1
  44. package/dist/{OrdersScreen-DVdSKNXt.mjs → OrdersScreen-CZEhg3LN.mjs} +13 -13
  45. package/dist/{OrdersScreen-B9MdErRH.cjs → OrdersScreen-DYyG4PZG.cjs} +13 -13
  46. package/dist/{OrdersScreen-Cv-FDSUM.mjs → OrdersScreen-S4YnUuzD.mjs} +2 -2
  47. package/dist/{OrdersScreen-Cv-FDSUM.mjs.map → OrdersScreen-S4YnUuzD.mjs.map} +1 -1
  48. package/dist/{PointsWidget-D_wPrx7u.mjs → PointsWidget-BvLIjvRG.mjs} +2 -2
  49. package/dist/{PointsWidget-D_wPrx7u.mjs.map → PointsWidget-BvLIjvRG.mjs.map} +1 -1
  50. package/dist/{PointsWidget-Cj3Vlk8M.cjs → PointsWidget-Q3s6gojq.cjs} +2 -2
  51. package/dist/{PointsWidget-Cj3Vlk8M.cjs.map → PointsWidget-Q3s6gojq.cjs.map} +1 -1
  52. package/dist/{ProfileScreen-dmneGRbC.mjs → ProfileScreen-BJUYFJ_D.mjs} +3 -3
  53. package/dist/{ProfileScreen-dmneGRbC.mjs.map → ProfileScreen-BJUYFJ_D.mjs.map} +1 -1
  54. package/dist/{ProfileScreen-hadK4_ku.mjs → ProfileScreen-CmqHo3UG.mjs} +14 -14
  55. package/dist/{ProfileScreen-BSN9JbnZ.cjs → ProfileScreen-DFiM2Iv_.cjs} +14 -14
  56. package/dist/{ProfileScreen-DmjL6T2t.cjs → ProfileScreen-Dta2L4BA.cjs} +3 -3
  57. package/dist/{ProfileScreen-DmjL6T2t.cjs.map → ProfileScreen-Dta2L4BA.cjs.map} +1 -1
  58. package/dist/{RecentActivityWidget-BwRBJmUU.cjs → RecentActivityWidget-NkdK9KfL.cjs} +2 -2
  59. package/dist/{RecentActivityWidget-BwRBJmUU.cjs.map → RecentActivityWidget-NkdK9KfL.cjs.map} +1 -1
  60. package/dist/{RecentActivityWidget-YZNGdnXV.mjs → RecentActivityWidget-ziAimCYB.mjs} +2 -2
  61. package/dist/{RecentActivityWidget-YZNGdnXV.mjs.map → RecentActivityWidget-ziAimCYB.mjs.map} +1 -1
  62. package/dist/{ScreenRenderer-CWjMFFLJ.mjs → ScreenRenderer-BTSp4KZp.mjs} +2 -2
  63. package/dist/{ScreenRenderer-CWjMFFLJ.mjs.map → ScreenRenderer-BTSp4KZp.mjs.map} +1 -1
  64. package/dist/{ScreenRenderer-V_7y2I2L.cjs → ScreenRenderer-DowNn61T.cjs} +2 -2
  65. package/dist/{ScreenRenderer-V_7y2I2L.cjs.map → ScreenRenderer-DowNn61T.cjs.map} +1 -1
  66. package/dist/{ShopScreen-DFnN5NbE.cjs → ShopScreen-Bqup6l0o.cjs} +2 -2
  67. package/dist/{ShopScreen-DFnN5NbE.cjs.map → ShopScreen-Bqup6l0o.cjs.map} +1 -1
  68. package/dist/{ShopScreen-DL6UTc0q.mjs → ShopScreen-CC0t8ZDI.mjs} +13 -13
  69. package/dist/{ShopScreen--lr0_Etl.mjs → ShopScreen-CzYB_rpN.mjs} +2 -2
  70. package/dist/{ShopScreen--lr0_Etl.mjs.map → ShopScreen-CzYB_rpN.mjs.map} +1 -1
  71. package/dist/{ShopScreen-Cvt6SX-5.cjs → ShopScreen-D3Celpra.cjs} +13 -13
  72. package/dist/{SubscriptionsScreen-CRRnyUHm.cjs → SubscriptionsScreen-BJ8Qsjec.cjs} +14 -14
  73. package/dist/{SubscriptionsScreen-DRKv5sy7.cjs → SubscriptionsScreen-BMVXwFoz.cjs} +3 -3
  74. package/dist/{SubscriptionsScreen-DRKv5sy7.cjs.map → SubscriptionsScreen-BMVXwFoz.cjs.map} +1 -1
  75. package/dist/{SubscriptionsScreen-DpU1lqP5.mjs → SubscriptionsScreen-DRRbvg51.mjs} +3 -3
  76. package/dist/{SubscriptionsScreen-DpU1lqP5.mjs.map → SubscriptionsScreen-DRRbvg51.mjs.map} +1 -1
  77. package/dist/{SubscriptionsScreen-DulSZ0V7.mjs → SubscriptionsScreen-DRcs0JF5.mjs} +14 -14
  78. package/dist/{ToDoWidget-DWegq3Rs.mjs → ToDoWidget-C6Kk46b7.mjs} +2 -2
  79. package/dist/{ToDoWidget-DWegq3Rs.mjs.map → ToDoWidget-C6Kk46b7.mjs.map} +1 -1
  80. package/dist/{ToDoWidget-BZi0xnAv.cjs → ToDoWidget-Szg7F0yS.cjs} +2 -2
  81. package/dist/{ToDoWidget-BZi0xnAv.cjs.map → ToDoWidget-Szg7F0yS.cjs.map} +1 -1
  82. package/dist/{ToDoWidget-BDOZr5av.cjs → ToDoWidget-YlUL-lNO.cjs} +2 -2
  83. package/dist/index.cjs +28 -28
  84. package/dist/index.mjs +28 -28
  85. package/dist/{registry-context-BISkmKM2.cjs → registry-context-BliPhkUQ.cjs} +7 -3
  86. package/dist/{registry-context-DWAhoLQA.mjs.map → registry-context-BliPhkUQ.cjs.map} +1 -1
  87. package/dist/{registry-context-DWAhoLQA.mjs → registry-context-CSsT6Rtk.mjs} +7 -3
  88. package/dist/{registry-context-BISkmKM2.cjs.map → registry-context-CSsT6Rtk.mjs.map} +1 -1
  89. package/package.json +13 -13
  90. package/dist/ContainerWidget-CEZnuIbT.cjs +0 -8
package/dist/index.cjs CHANGED
@@ -1,49 +1,49 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-9hOWP6kD.cjs");
3
- const require_FluidProvider = require("./FluidProvider-BYP7L-lk.cjs");
4
- const require_ScreenRenderer = require("./ScreenRenderer-V_7y2I2L.cjs");
3
+ const require_FluidProvider = require("./FluidProvider-Dgy4onF4.cjs");
4
+ const require_ScreenRenderer = require("./ScreenRenderer-DowNn61T.cjs");
5
5
  const require_portal_tenant_content = require("./portal_tenant_content-CANF5gtR.cjs");
6
6
  require("./store-api-context-CGH3YsZB.cjs");
7
7
  require("./mysite-api-context-DtEXblIV.cjs");
8
8
  require("./ContactsTranslationBridge-B0Rc8Jpp.cjs");
9
9
  require("./task-composer-form-D92cy98_.cjs");
10
10
  const require_PortalTenantClientProvider = require("./PortalTenantClientProvider-DyW6MBcp.cjs");
11
- require("./registry-context-BISkmKM2.cjs");
11
+ require("./registry-context-BliPhkUQ.cjs");
12
12
  const require_WidgetInteractionContext = require("./WidgetInteractionContext-BiQvdkPb.cjs");
13
13
  const require_EmbedWidget = require("./EmbedWidget-BusVq382.cjs");
14
14
  const require_QuickLinksWidget = require("./QuickLinksWidget-C-a4_y9n.cjs");
15
15
  const require_static_dict_adapter = require("./static-dict-adapter-QLzEPfRH.cjs");
16
16
  require("./error-state-CBV4TJ60.cjs");
17
17
  require("./translation-api-context-factory-CJeHUmqs.cjs");
18
- const require_LayoutWidget = require("./LayoutWidget-D8oT-Xnt.cjs");
18
+ const require_LayoutWidget = require("./LayoutWidget-DOz-WOsy.cjs");
19
19
  const require_registries = require("./registries-BWdQbKof.cjs");
20
20
  require("./fields-FNJHtlvv.cjs");
21
21
  const require_TextWidget = require("./TextWidget-DfHZd2YN.cjs");
22
22
  const require_AlertWidget = require("./AlertWidget-Cmu0S0Bg.cjs");
23
23
  const require_BulletListWidget = require("./BulletListWidget-Dz5bIui9.cjs");
24
24
  require("./preview-context-BVJqoAhR.cjs");
25
- const require_CalendarWidget = require("./CalendarWidget-B8ZIA_pe.cjs");
26
- const require_CardWidget = require("./CardWidget-BNW0Yqgd.cjs");
25
+ const require_CalendarWidget = require("./CalendarWidget-z0It6f_7.cjs");
26
+ const require_CardWidget = require("./CardWidget-Ccmmph6S.cjs");
27
27
  require("./purify.es-CxBw_WJp.cjs");
28
28
  require("./MediaRenderer-CvN8Ku0i.cjs");
29
29
  const require_CarouselWidget = require("./CarouselWidget-BCeXWzOQ.cjs");
30
- const require_CatchUpWidget = require("./CatchUpWidget-CiVhawuh.cjs");
30
+ const require_CatchUpWidget = require("./CatchUpWidget-DCDoIckB.cjs");
31
31
  const require_src = require("./src-nR94uL1G.cjs");
32
32
  const require_ContactsScreen = require("./ContactsScreen-ChjT5RUV.cjs");
33
33
  const require_ChartWidget = require("./ChartWidget-Cb9xEB30.cjs");
34
- const require_ContainerWidget = require("./ContainerWidget-Dpt2viZ0.cjs");
34
+ const require_ContainerWidget = require("./ContainerWidget-BEHBqh0a.cjs");
35
35
  const require_ImageWidget = require("./ImageWidget-Cz1W-CaS.cjs");
36
36
  const require_LinkWidget = require("./LinkWidget-BqhMVZkg.cjs");
37
37
  const require_ListWidget = require("./ListWidget-IxrLNslF.cjs");
38
- const require_MySiteWidget = require("./MySiteWidget-CGWlrGMu.cjs");
38
+ const require_MySiteWidget = require("./MySiteWidget-BwmprXJj.cjs");
39
39
  const require_NestedWidget = require("./NestedWidget-Bg6vB_A6.cjs");
40
- const require_PointsWidget = require("./PointsWidget-Cj3Vlk8M.cjs");
40
+ const require_PointsWidget = require("./PointsWidget-Q3s6gojq.cjs");
41
41
  const require_QuickShareWidget = require("./QuickShareWidget-BioLZ09K.cjs");
42
- const require_RecentActivityWidget = require("./RecentActivityWidget-BwRBJmUU.cjs");
42
+ const require_RecentActivityWidget = require("./RecentActivityWidget-NkdK9KfL.cjs");
43
43
  const require_SeparatorWidget = require("./SeparatorWidget-DzyqXaQI.cjs");
44
44
  const require_SpacerWidget = require("./SpacerWidget-BYhS_mUb.cjs");
45
45
  const require_TableWidget = require("./TableWidget-h3po0Yqt.cjs");
46
- const require_ToDoWidget = require("./ToDoWidget-BZi0xnAv.cjs");
46
+ const require_ToDoWidget = require("./ToDoWidget-Szg7F0yS.cjs");
47
47
  const require_VideoWidget = require("./VideoWidget-CTByie5N.cjs");
48
48
  const require_SearchSort = require("./SearchSort-CFbtRKAq.cjs");
49
49
  const require_ShopWidget = require("./ShopWidget-CX5rhU-c.cjs");
@@ -54,20 +54,20 @@ const require_query_keys = require("./query-keys-qP4SU2jn.cjs");
54
54
  const require_use_store = require("./use-store-D40DFtSP.cjs");
55
55
  const require_use_account = require("./use-account-DZpvMPEI.cjs");
56
56
  const require_AppNavigationContext = require("./AppNavigationContext-BOa6u5Ma.cjs");
57
- const require_MessagingScreen = require("./MessagingScreen-DyckzPKi.cjs");
58
- require("./AddressAutocompleteInput-M2F-m-Nh.cjs");
57
+ const require_MessagingScreen = require("./MessagingScreen-C69BJ8Fz.cjs");
58
+ require("./AddressAutocompleteInput-DV1DS05i.cjs");
59
59
  require("./Combobox-9b5BcJfZ.cjs");
60
60
  require("./use-mysite-portal-B4ZWp81Z.cjs");
61
- const require_ProfileScreen = require("./ProfileScreen-DmjL6T2t.cjs");
62
- const require_SubscriptionsScreen = require("./SubscriptionsScreen-DRKv5sy7.cjs");
61
+ const require_ProfileScreen = require("./ProfileScreen-Dta2L4BA.cjs");
62
+ const require_SubscriptionsScreen = require("./SubscriptionsScreen-BMVXwFoz.cjs");
63
63
  require("./dist-Bmqh-ms_.cjs");
64
64
  require("./es-B4gpRmZU.cjs");
65
65
  require("./dist-BX50Kamn.cjs");
66
- const require_OrdersScreen = require("./OrdersScreen-90pl5JDi.cjs");
66
+ const require_OrdersScreen = require("./OrdersScreen-BlP4uKE8.cjs");
67
67
  const require_MySiteScreen = require("./MySiteScreen-AIARGpfV.cjs");
68
68
  require("./dist-WcgB5PhZ.cjs");
69
69
  const require_ShareablesScreen = require("./ShareablesScreen-DZTuzjbM.cjs");
70
- const require_ShopScreen = require("./ShopScreen-DFnN5NbE.cjs");
70
+ const require_ShopScreen = require("./ShopScreen-Bqup6l0o.cjs");
71
71
  require("./UpgradeScreen-Dzgjmscw.cjs");
72
72
  require("./AppDownloadScreen-D64qArsy.cjs");
73
73
  let react = require("react");
@@ -1979,12 +1979,12 @@ function BuilderScreenViewImpl({ screen, className }) {
1979
1979
  const BuilderScreenView = (0, react.memo)(BuilderScreenViewImpl);
1980
1980
  //#endregion
1981
1981
  //#region src/shell/system-screen-map.ts
1982
- const ProfileScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ProfileScreen-BSN9JbnZ.cjs")).then((m) => ({ default: m.ProfileScreen })));
1983
- const OrdersScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./OrdersScreen-B9MdErRH.cjs")).then((m) => ({ default: m.OrdersScreen })));
1984
- const SubscriptionsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./SubscriptionsScreen-CRRnyUHm.cjs")).then((m) => ({ default: m.SubscriptionsScreen })));
1985
- const MessagingScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./MessagingScreen-CVMKVllz.cjs")).then((m) => ({ default: m.MessagingScreen })));
1982
+ const ProfileScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ProfileScreen-DFiM2Iv_.cjs")).then((m) => ({ default: m.ProfileScreen })));
1983
+ const OrdersScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./OrdersScreen-DYyG4PZG.cjs")).then((m) => ({ default: m.OrdersScreen })));
1984
+ const SubscriptionsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./SubscriptionsScreen-BJ8Qsjec.cjs")).then((m) => ({ default: m.SubscriptionsScreen })));
1985
+ const MessagingScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./MessagingScreen-DiaV8xau.cjs")).then((m) => ({ default: m.MessagingScreen })));
1986
1986
  const ContactsScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ContactsScreen-CBG3nRQa.cjs")).then((m) => ({ default: m.ContactsScreen })));
1987
- const ShopScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ShopScreen-Cvt6SX-5.cjs")).then((m) => ({ default: m.ShopScreen })));
1987
+ const ShopScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ShopScreen-D3Celpra.cjs")).then((m) => ({ default: m.ShopScreen })));
1988
1988
  const CustomersScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./CustomersScreen-H49ryapD.cjs")).then((n) => n.CustomersScreen_exports).then((m) => ({ default: m.CustomersScreen })));
1989
1989
  const ShareablesScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./ShareablesScreen-DteX49Sr.cjs")).then((m) => ({ default: m.ShareablesScreen })));
1990
1990
  const MySiteScreen$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("./MySiteScreen-V-rohBm4.cjs")).then((m) => ({ default: m.MySiteScreen })));
@@ -3900,15 +3900,15 @@ zod.z.object({
3900
3900
  //#endregion
3901
3901
  //#region src/screens/index.ts
3902
3902
  const screenPropertySchemas = {
3903
- ProfileScreen: () => Promise.resolve().then(() => require("./ProfileScreen-BSN9JbnZ.cjs")).then((m) => m.profileScreenPropertySchema),
3904
- MessagingScreen: () => Promise.resolve().then(() => require("./MessagingScreen-CVMKVllz.cjs")).then((m) => m.messagingScreenPropertySchema),
3903
+ ProfileScreen: () => Promise.resolve().then(() => require("./ProfileScreen-DFiM2Iv_.cjs")).then((m) => m.profileScreenPropertySchema),
3904
+ MessagingScreen: () => Promise.resolve().then(() => require("./MessagingScreen-DiaV8xau.cjs")).then((m) => m.messagingScreenPropertySchema),
3905
3905
  ContactsScreen: () => Promise.resolve().then(() => require("./ContactsScreen-CBG3nRQa.cjs")).then((m) => m.contactsScreenPropertySchema),
3906
- OrdersScreen: () => Promise.resolve().then(() => require("./OrdersScreen-B9MdErRH.cjs")).then((m) => m.ordersScreenPropertySchema),
3907
- SubscriptionsScreen: () => Promise.resolve().then(() => require("./SubscriptionsScreen-CRRnyUHm.cjs")).then((m) => m.subscriptionsScreenPropertySchema),
3906
+ OrdersScreen: () => Promise.resolve().then(() => require("./OrdersScreen-DYyG4PZG.cjs")).then((m) => m.ordersScreenPropertySchema),
3907
+ SubscriptionsScreen: () => Promise.resolve().then(() => require("./SubscriptionsScreen-BJ8Qsjec.cjs")).then((m) => m.subscriptionsScreenPropertySchema),
3908
3908
  CustomersScreen: () => Promise.resolve().then(() => require("./CustomersScreen-H49ryapD.cjs")).then((n) => n.CustomersScreen_exports).then((m) => m.customersScreenPropertySchema),
3909
3909
  MySiteScreen: () => Promise.resolve().then(() => require("./MySiteScreen-V-rohBm4.cjs")).then((m) => m.mySiteScreenPropertySchema),
3910
3910
  ShareablesScreen: () => Promise.resolve().then(() => require("./ShareablesScreen-DteX49Sr.cjs")).then((m) => m.shareablesScreenPropertySchema),
3911
- ShopScreen: () => Promise.resolve().then(() => require("./ShopScreen-Cvt6SX-5.cjs")).then((m) => m.shopScreenPropertySchema),
3911
+ ShopScreen: () => Promise.resolve().then(() => require("./ShopScreen-D3Celpra.cjs")).then((m) => m.shopScreenPropertySchema),
3912
3912
  UpgradeScreen: () => Promise.resolve().then(() => require("./UpgradeScreen-CoB2gRO8.cjs")).then((m) => m.upgradeScreenPropertySchema),
3913
3913
  AppDownloadScreen: () => Promise.resolve().then(() => require("./AppDownloadScreen-D64qArsy.cjs")).then((n) => n.AppDownloadScreen_exports).then((m) => m.appDownloadScreenPropertySchema)
3914
3914
  };
package/dist/index.mjs CHANGED
@@ -1,48 +1,48 @@
1
1
  import { J as product_by_visits, Q as products_show, X as products_media_list, Y as products_list, Z as products_search, q as product_by_shares } from "./portal_tenant_content-XFmQhJPT.mjs";
2
- import { A as mergeDarkOverrides, C as DEFAULT_SPACING, D as generateThemeCSS, E as getDefaultThemeDefinition, F as RADIUS_KEYS, G as deleteDatabase, I as SEMANTIC_COLOR_NAMES, M as resolveTheme, N as FONT_FAMILY_KEYS, O as deriveDarkVariant, P as FONT_SIZE_KEYS, S as DEFAULT_RADII, T as DEFAULT_THEME_NAME, U as useAppDefinitionApi, V as useLanguagesApi, W as createPersister, _ as deserialiseTheme, a as widgetPropertySchemas, b as DEFAULT_FONT_FAMILIES, c as createWidgetRegistry, d as applyTheme, f as removeAllThemes, g as transformThemes, h as getActiveThemeId, i as DEFAULT_SDK_WIDGET_REGISTRY, j as parseColor, k as getForegroundColor, l as FluidThemeProvider, m as buildThemeDefinition, n as useFluidContext, o as createScreen, p as removeTheme, r as SUPPORTED_LANGUAGES, s as createWidgetFromShareable, t as FluidProvider, u as useThemeContext, v as serialiseTheme, w as DEFAULT_THEME_ID, x as DEFAULT_FONT_SIZES, y as DEFAULT_COLORS } from "./FluidProvider-BGn3iZIK.mjs";
3
- import { a as assertNever, i as assertDefined, n as DataAwareWidget, o as isWidgetType, r as WIDGET_TYPE_NAMES, s as isWidgetTypeName, u as useRegistry } from "./ScreenRenderer-CWjMFFLJ.mjs";
2
+ import { A as mergeDarkOverrides, C as DEFAULT_SPACING, D as generateThemeCSS, E as getDefaultThemeDefinition, F as RADIUS_KEYS, G as deleteDatabase, I as SEMANTIC_COLOR_NAMES, M as resolveTheme, N as FONT_FAMILY_KEYS, O as deriveDarkVariant, P as FONT_SIZE_KEYS, S as DEFAULT_RADII, T as DEFAULT_THEME_NAME, U as useAppDefinitionApi, V as useLanguagesApi, W as createPersister, _ as deserialiseTheme, a as widgetPropertySchemas, b as DEFAULT_FONT_FAMILIES, c as createWidgetRegistry, d as applyTheme, f as removeAllThemes, g as transformThemes, h as getActiveThemeId, i as DEFAULT_SDK_WIDGET_REGISTRY, j as parseColor, k as getForegroundColor, l as FluidThemeProvider, m as buildThemeDefinition, n as useFluidContext, o as createScreen, p as removeTheme, r as SUPPORTED_LANGUAGES, s as createWidgetFromShareable, t as FluidProvider, u as useThemeContext, v as serialiseTheme, w as DEFAULT_THEME_ID, x as DEFAULT_FONT_SIZES, y as DEFAULT_COLORS } from "./FluidProvider-DV227FL2.mjs";
3
+ import { a as assertNever, i as assertDefined, n as DataAwareWidget, o as isWidgetType, r as WIDGET_TYPE_NAMES, s as isWidgetTypeName, u as useRegistry } from "./ScreenRenderer-BTSp4KZp.mjs";
4
4
  import "./store-api-context-B_vtKkXO.mjs";
5
5
  import "./mysite-api-context-CoLr9vIf.mjs";
6
6
  import "./ContactsTranslationBridge-nXi8boqu.mjs";
7
7
  import "./task-composer-form-Cb8v-cYd.mjs";
8
8
  import { n as usePortalTenantClient } from "./PortalTenantClientProvider-RJI-iE2U.mjs";
9
- import "./registry-context-DWAhoLQA.mjs";
9
+ import "./registry-context-CSsT6Rtk.mjs";
10
10
  import { t as WidgetInteractionProvider } from "./WidgetInteractionContext-CDHSzzws.mjs";
11
11
  import { a as useRepUser, i as RepUserProvider, r as embedWidgetPropertySchema, t as EmbedWidget } from "./EmbedWidget-af3A0m7X.mjs";
12
12
  import { r as quickLinksWidgetPropertySchema, t as QuickLinksWidget } from "./QuickLinksWidget-j2lahwOn.mjs";
13
13
  import { a as useActiveLocale, n as createDomainTranslations, r as useDomainDict, t as createStaticDictAdapter } from "./static-dict-adapter-DpHMB055.mjs";
14
14
  import "./error-state-OMcqVS6p.mjs";
15
15
  import "./translation-api-context-factory-BzDLj3i0.mjs";
16
- import { a as sectionLayoutConfig, i as groupChildrenByColumn, r as layoutWidgetPropertySchema, t as LayoutWidget } from "./LayoutWidget-Byp1iMxL.mjs";
16
+ import { a as sectionLayoutConfig, i as groupChildrenByColumn, r as layoutWidgetPropertySchema, t as LayoutWidget } from "./LayoutWidget-DsXDBXSO.mjs";
17
17
  import { g as isPropertyFieldType, h as PROPERTY_FIELD_TYPES, r as gapValues } from "./registries-DT36l-bR.mjs";
18
18
  import "./fields-BW20NYWO.mjs";
19
19
  import { r as textWidgetPropertySchema, t as TextWidget } from "./TextWidget-ixTOUtQZ.mjs";
20
20
  import { r as alertWidgetPropertySchema, t as AlertWidget } from "./AlertWidget-7LGQBwFk.mjs";
21
21
  import { r as bulletListWidgetPropertySchema, t as BulletListWidget } from "./BulletListWidget-C6TkGiVY.mjs";
22
22
  import "./preview-context-j3EmQgS4.mjs";
23
- import { r as calendarWidgetPropertySchema, t as CalendarWidget } from "./CalendarWidget-CbS9AsMH.mjs";
24
- import { r as cardWidgetPropertySchema, t as CardWidget } from "./CardWidget-B4LEZKbB.mjs";
23
+ import { r as calendarWidgetPropertySchema, t as CalendarWidget } from "./CalendarWidget-CQJfz8Jn.mjs";
24
+ import { r as cardWidgetPropertySchema, t as CardWidget } from "./CardWidget-BpzZMsvX.mjs";
25
25
  import "./purify.es-Ba5Ug4-y.mjs";
26
26
  import "./MediaRenderer-13Jlf38P.mjs";
27
27
  import { r as carouselWidgetPropertySchema, t as CarouselWidget } from "./CarouselWidget-CuXoSlOs.mjs";
28
- import { r as catchUpWidgetPropertySchema, t as CatchUpWidget } from "./CatchUpWidget-Cj10cTha.mjs";
28
+ import { r as catchUpWidgetPropertySchema, t as CatchUpWidget } from "./CatchUpWidget-BCe8hmdk.mjs";
29
29
  import { At as CardTitle, Dt as CardDescription, En as Button, Ot as CardFooter, Vn as cn$1, _t as CollapsibleContent, g as Skeleton$1, gt as Collapsible, kt as CardHeader, lt as PopoverContent, m as Toaster, st as Popover, ut as PopoverTrigger, vt as CollapsibleTrigger, wt as Card } from "./src-Cn1_6Nn3.mjs";
30
- import { a as useMessagingAuth, i as useMessagingConfig, n as messagingScreenPropertySchema, r as createFluidFileUploader, t as MessagingScreen } from "./MessagingScreen-BvtYIaz1.mjs";
31
- import { n as subscriptionsScreenPropertySchema, t as SubscriptionsScreen } from "./SubscriptionsScreen-DpU1lqP5.mjs";
30
+ import { a as useMessagingAuth, i as useMessagingConfig, n as messagingScreenPropertySchema, r as createFluidFileUploader, t as MessagingScreen } from "./MessagingScreen-CCb05_Wj.mjs";
31
+ import { n as subscriptionsScreenPropertySchema, t as SubscriptionsScreen } from "./SubscriptionsScreen-DRRbvg51.mjs";
32
32
  import { r as chartWidgetPropertySchema, t as ChartWidget } from "./ChartWidget-BiKW7lEN.mjs";
33
- import { r as containerWidgetPropertySchema, t as ContainerWidget } from "./ContainerWidget-DSQ151lW.mjs";
33
+ import { r as containerWidgetPropertySchema, t as ContainerWidget } from "./ContainerWidget-Bdq6CaDc.mjs";
34
34
  import { r as imageWidgetPropertySchema, t as ImageWidget } from "./ImageWidget-B6DESmDt.mjs";
35
35
  import { r as linkWidgetPropertySchema, t as LinkWidget } from "./LinkWidget-B6wehYgt.mjs";
36
36
  import { r as listWidgetPropertySchema, t as ListWidget } from "./ListWidget-CRsc53kj.mjs";
37
- import { r as mySiteWidgetPropertySchema, t as MySiteWidget } from "./MySiteWidget-C_qQJaPH.mjs";
37
+ import { r as mySiteWidgetPropertySchema, t as MySiteWidget } from "./MySiteWidget-BvFHv9me.mjs";
38
38
  import { r as nestedWidgetPropertySchema, t as NestedWidget } from "./NestedWidget-BPTo7RQZ.mjs";
39
- import { r as pointsWidgetPropertySchema, t as PointsWidget } from "./PointsWidget-D_wPrx7u.mjs";
39
+ import { r as pointsWidgetPropertySchema, t as PointsWidget } from "./PointsWidget-BvLIjvRG.mjs";
40
40
  import { r as quickShareWidgetPropertySchema, t as QuickShareWidget } from "./QuickShareWidget-BGTVy4BT.mjs";
41
- import { r as recentActivityWidgetPropertySchema, t as RecentActivityWidget } from "./RecentActivityWidget-YZNGdnXV.mjs";
41
+ import { r as recentActivityWidgetPropertySchema, t as RecentActivityWidget } from "./RecentActivityWidget-ziAimCYB.mjs";
42
42
  import { r as separatorWidgetPropertySchema, t as SeparatorWidget } from "./SeparatorWidget-DBtsfh6S.mjs";
43
43
  import { r as spacerWidgetPropertySchema, t as SpacerWidget } from "./SpacerWidget-BpV1WYuj.mjs";
44
44
  import { r as tableWidgetPropertySchema, t as TableWidget } from "./TableWidget-DeZe6uuy.mjs";
45
- import { r as toDoWidgetPropertySchema, t as ToDoWidget } from "./ToDoWidget-DWegq3Rs.mjs";
45
+ import { r as toDoWidgetPropertySchema, t as ToDoWidget } from "./ToDoWidget-C6Kk46b7.mjs";
46
46
  import { r as videoWidgetPropertySchema, t as VideoWidget } from "./VideoWidget-DEG652tg.mjs";
47
47
  import { o as PortalProductsCoreProvider } from "./SearchSort-BvSVfOgh.mjs";
48
48
  import { o as ShopTranslationProvider } from "./ShopWidget-C7L8Z0dp.mjs";
@@ -53,19 +53,19 @@ import { r as storeKeys } from "./query-keys-xJy_fapN.mjs";
53
53
  import { t as useStore } from "./use-store-CfKYYLnj.mjs";
54
54
  import { t as useAccount } from "./use-account-DEj6E1PK.mjs";
55
55
  import { n as useAppNavigation, t as AppNavigationProvider } from "./AppNavigationContext-lkEJQu3Y.mjs";
56
- import "./AddressAutocompleteInput-DmrGdv0d.mjs";
56
+ import "./AddressAutocompleteInput-Z80mEIXZ.mjs";
57
57
  import "./Combobox-DusCsueR.mjs";
58
58
  import "./use-mysite-portal-DOUSRysS.mjs";
59
- import { n as profileScreenPropertySchema, t as ProfileScreen } from "./ProfileScreen-dmneGRbC.mjs";
59
+ import { n as profileScreenPropertySchema, t as ProfileScreen } from "./ProfileScreen-BJUYFJ_D.mjs";
60
60
  import "./dist-D7_77Mei.mjs";
61
61
  import "./es-Cqc_xegn.mjs";
62
62
  import { r as contactsScreenPropertySchema, t as ContactsScreen } from "./ContactsScreen-Co6JOwmr.mjs";
63
63
  import "./dist-xbW6G60Y.mjs";
64
- import { n as ordersScreenPropertySchema, t as OrdersScreen } from "./OrdersScreen-Cv-FDSUM.mjs";
64
+ import { n as ordersScreenPropertySchema, t as OrdersScreen } from "./OrdersScreen-S4YnUuzD.mjs";
65
65
  import { r as mySiteScreenPropertySchema, t as MySiteScreen } from "./MySiteScreen-B_EkUsf3.mjs";
66
66
  import "./sortable.esm-buJuQqW4.mjs";
67
67
  import { n as shareablesScreenPropertySchema, t as ShareablesScreen } from "./ShareablesScreen-NPWkQkoM.mjs";
68
- import { n as shopScreenPropertySchema, t as ShopScreen } from "./ShopScreen--lr0_Etl.mjs";
68
+ import { n as shopScreenPropertySchema, t as ShopScreen } from "./ShopScreen-CzYB_rpN.mjs";
69
69
  import "./UpgradeScreen-qiXlAydW.mjs";
70
70
  import "./AppDownloadScreen-3xiLZXHs.mjs";
71
71
  import * as React$1 from "react";
@@ -1977,12 +1977,12 @@ function BuilderScreenViewImpl({ screen, className }) {
1977
1977
  const BuilderScreenView = memo(BuilderScreenViewImpl);
1978
1978
  //#endregion
1979
1979
  //#region src/shell/system-screen-map.ts
1980
- const ProfileScreen$1 = lazy(() => import("./ProfileScreen-hadK4_ku.mjs").then((m) => ({ default: m.ProfileScreen })));
1981
- const OrdersScreen$1 = lazy(() => import("./OrdersScreen-DVdSKNXt.mjs").then((m) => ({ default: m.OrdersScreen })));
1982
- const SubscriptionsScreen$1 = lazy(() => import("./SubscriptionsScreen-DulSZ0V7.mjs").then((m) => ({ default: m.SubscriptionsScreen })));
1983
- const MessagingScreen$1 = lazy(() => import("./MessagingScreen-B-HQlj-7.mjs").then((m) => ({ default: m.MessagingScreen })));
1980
+ const ProfileScreen$1 = lazy(() => import("./ProfileScreen-CmqHo3UG.mjs").then((m) => ({ default: m.ProfileScreen })));
1981
+ const OrdersScreen$1 = lazy(() => import("./OrdersScreen-CZEhg3LN.mjs").then((m) => ({ default: m.OrdersScreen })));
1982
+ const SubscriptionsScreen$1 = lazy(() => import("./SubscriptionsScreen-DRcs0JF5.mjs").then((m) => ({ default: m.SubscriptionsScreen })));
1983
+ const MessagingScreen$1 = lazy(() => import("./MessagingScreen-r732O1LD.mjs").then((m) => ({ default: m.MessagingScreen })));
1984
1984
  const ContactsScreen$1 = lazy(() => import("./ContactsScreen-Co6JOwmr.mjs").then((n) => n.n).then((m) => ({ default: m.ContactsScreen })));
1985
- const ShopScreen$1 = lazy(() => import("./ShopScreen-DL6UTc0q.mjs").then((m) => ({ default: m.ShopScreen })));
1985
+ const ShopScreen$1 = lazy(() => import("./ShopScreen-CC0t8ZDI.mjs").then((m) => ({ default: m.ShopScreen })));
1986
1986
  const CustomersScreen$1 = lazy(() => import("./CustomersScreen-Bn9TBAXn.mjs").then((n) => n.n).then((m) => ({ default: m.CustomersScreen })));
1987
1987
  const ShareablesScreen$1 = lazy(() => import("./ShareablesScreen-CaVbAkb1.mjs").then((m) => ({ default: m.ShareablesScreen })));
1988
1988
  const MySiteScreen$1 = lazy(() => import("./MySiteScreen-B_EkUsf3.mjs").then((n) => n.n).then((m) => ({ default: m.MySiteScreen })));
@@ -3898,15 +3898,15 @@ z.object({
3898
3898
  //#endregion
3899
3899
  //#region src/screens/index.ts
3900
3900
  const screenPropertySchemas = {
3901
- ProfileScreen: () => import("./ProfileScreen-hadK4_ku.mjs").then((m) => m.profileScreenPropertySchema),
3902
- MessagingScreen: () => import("./MessagingScreen-B-HQlj-7.mjs").then((m) => m.messagingScreenPropertySchema),
3901
+ ProfileScreen: () => import("./ProfileScreen-CmqHo3UG.mjs").then((m) => m.profileScreenPropertySchema),
3902
+ MessagingScreen: () => import("./MessagingScreen-r732O1LD.mjs").then((m) => m.messagingScreenPropertySchema),
3903
3903
  ContactsScreen: () => import("./ContactsScreen-Co6JOwmr.mjs").then((n) => n.n).then((m) => m.contactsScreenPropertySchema),
3904
- OrdersScreen: () => import("./OrdersScreen-DVdSKNXt.mjs").then((m) => m.ordersScreenPropertySchema),
3905
- SubscriptionsScreen: () => import("./SubscriptionsScreen-DulSZ0V7.mjs").then((m) => m.subscriptionsScreenPropertySchema),
3904
+ OrdersScreen: () => import("./OrdersScreen-CZEhg3LN.mjs").then((m) => m.ordersScreenPropertySchema),
3905
+ SubscriptionsScreen: () => import("./SubscriptionsScreen-DRcs0JF5.mjs").then((m) => m.subscriptionsScreenPropertySchema),
3906
3906
  CustomersScreen: () => import("./CustomersScreen-Bn9TBAXn.mjs").then((n) => n.n).then((m) => m.customersScreenPropertySchema),
3907
3907
  MySiteScreen: () => import("./MySiteScreen-B_EkUsf3.mjs").then((n) => n.n).then((m) => m.mySiteScreenPropertySchema),
3908
3908
  ShareablesScreen: () => import("./ShareablesScreen-CaVbAkb1.mjs").then((m) => m.shareablesScreenPropertySchema),
3909
- ShopScreen: () => import("./ShopScreen-DL6UTc0q.mjs").then((m) => m.shopScreenPropertySchema),
3909
+ ShopScreen: () => import("./ShopScreen-CC0t8ZDI.mjs").then((m) => m.shopScreenPropertySchema),
3910
3910
  UpgradeScreen: () => import("./UpgradeScreen-qiXlAydW.mjs").then((n) => n.t).then((m) => m.upgradeScreenPropertySchema),
3911
3911
  AppDownloadScreen: () => import("./AppDownloadScreen-3xiLZXHs.mjs").then((n) => n.t).then((m) => m.appDownloadScreenPropertySchema)
3912
3912
  };
@@ -329,11 +329,15 @@ const toCarouselSlidesFromShareables = (data, source) => {
329
329
  objectFit: "cover"
330
330
  }
331
331
  };
332
- return {
332
+ const baseSlide = {
333
333
  id: String(d.id ?? `slide-${index}`),
334
334
  content,
335
335
  title,
336
- description: extractDescription(d),
336
+ description: extractDescription(d)
337
+ };
338
+ return {
339
+ ...d,
340
+ ...baseSlide,
337
341
  ...widgetConfig
338
342
  };
339
343
  });
@@ -535,4 +539,4 @@ Object.defineProperty(exports, "useDataSourceRegistryConfig", {
535
539
  }
536
540
  });
537
541
 
538
- //# sourceMappingURL=registry-context-BISkmKM2.cjs.map
542
+ //# sourceMappingURL=registry-context-BliPhkUQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-context-DWAhoLQA.mjs","names":[],"sources":["../../core/src/data-sources/fetchers/api.ts","../../core/src/data-sources/fetchers/custom.ts","../../core/src/data-sources/fetchers/static.ts","../../core/src/data-sources/transformers.ts","../../core/src/data-sources/registry.ts","../../react/src/data-sources/context.tsx","../../react/src/data-sources/registry-context.tsx"],"sourcesContent":["import type { DataSourceShareableType } from \"../../data-source-api-types\";\nimport type { ApiDataSource, DataSourceContext } from \"../types\";\n\n/**\n * Delegates a preset API source to the injected DataSourceApi adapter.\n * Returns undefined for unknown presets (caller falls through to raw fetch).\n */\nasync function fetchViaAdapter(\n source: ApiDataSource,\n context: DataSourceContext,\n): Promise<unknown> {\n const api = context.api!;\n const vars = { ...context.variables, ...source.variables };\n\n switch (source.presetId) {\n case \"rep-most-shared\": {\n return api.fetchMostShared(vars?.rep_id ?? \"\", {\n shareableType:\n (vars?.shareable_type as DataSourceShareableType) ?? \"products\",\n limit: vars?.limit ? Number(vars.limit) : undefined,\n period: vars?.period,\n languageIso: vars?.language_iso,\n signal: context.signal,\n });\n }\n case \"rep-most-viewed\": {\n return api.fetchMostViewed(vars?.rep_id ?? \"\", {\n shareableType:\n (vars?.shareable_type as DataSourceShareableType) ?? \"products\",\n limit: vars?.limit ? Number(vars.limit) : undefined,\n period: vars?.period,\n languageIso: vars?.language_iso,\n signal: context.signal,\n });\n }\n case \"customer-orders\": {\n // BFF scopes by session — customer_id is informational/optional.\n return api.fetchOrders(vars?.customer_id ?? \"\", {\n limit: vars?.limit ? Number(vars.limit) : undefined,\n status: vars?.status,\n signal: context.signal,\n });\n }\n case \"customer-subscriptions\": {\n // BFF scopes by session — customer_id is informational/optional.\n return api.fetchSubscriptions(vars?.customer_id ?? \"\", {\n limit: vars?.limit ? Number(vars.limit) : undefined,\n status: vars?.status,\n signal: context.signal,\n });\n }\n default:\n return undefined;\n }\n}\n\n/**\n * Extracts a value from an object using dot notation path\n * e.g., getByPath({ data: { items: [1,2,3] } }, 'data.items') => [1,2,3]\n */\nfunction getByPath(obj: unknown, path: string): unknown {\n return path.split(\".\").reduce((current, key) => {\n if (current && typeof current === \"object\" && key in current) {\n return (current as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * Replaces {variable} placeholders in an endpoint path with values from the\n * variables map. E.g., \"/reps/{rep_id}/most_shared\" with { rep_id: \"42\" }\n * becomes \"/reps/42/most_shared\".\n */\nfunction interpolateVariables(\n endpoint: string,\n variables?: Record<string, string>,\n): string {\n if (!variables) return endpoint;\n const resolved = endpoint.replace(\n /\\{(\\w+)\\}/g,\n (match, key: string) => variables[key] ?? match,\n );\n const unresolved = resolved.match(/\\{(\\w+)\\}/g);\n if (unresolved) {\n console.warn(\n `[DataSource] Unresolved variable placeholders in endpoint: ${unresolved.join(\", \")}. ` +\n `Endpoint: \"${endpoint}\". Available variables: ${Object.keys(variables).join(\", \") || \"(none)\"}`,\n );\n }\n return stripAllQueryParams(resolved);\n}\n\n/**\n * Removes query parameters whose value is \"all\" from a URL.\n *\n * Convention: \"all\" is a reserved no-op value for data source preset\n * config fields. Preset authors should use \"all\" as the default option\n * for \"show everything\" filters. This function strips those params so\n * APIs that don't recognise \"all\" fall back to their default (return\n * everything) behaviour. Do not use \"all\" as a meaningful filter value\n * in preset endpoints.\n */\nfunction stripAllQueryParams(url: string): string {\n const qIndex = url.indexOf(\"?\");\n if (qIndex === -1) return url;\n\n const base = url.slice(0, qIndex);\n const query = url.slice(qIndex + 1);\n const kept = query\n .split(\"&\")\n .filter((pair) => {\n const eqIndex = pair.indexOf(\"=\");\n if (eqIndex === -1) return true;\n return pair.slice(eqIndex + 1) !== \"all\";\n })\n .join(\"&\");\n\n return kept ? `${base}?${kept}` : base;\n}\n\n/**\n * Resolves the full URL for an endpoint.\n * - Substitutes {variable} placeholders from context variables\n * - Absolute URLs (starting with http:// or https://) are used as-is\n * - Relative paths are prefixed with the context's baseUrl\n */\nfunction resolveEndpointUrl(\n endpoint: string,\n baseUrl?: string,\n variables?: Record<string, string>,\n): string {\n const resolved = interpolateVariables(endpoint, variables);\n\n // If endpoint is already absolute, use it directly\n if (resolved.startsWith(\"http://\") || resolved.startsWith(\"https://\")) {\n return resolved;\n }\n\n // If we have a baseUrl, prepend it to the relative endpoint\n if (baseUrl) {\n // Ensure proper joining (no double slashes)\n const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const path = resolved.startsWith(\"/\") ? resolved : `/${resolved}`;\n return `${base}${path}`;\n }\n\n // No baseUrl provided, return endpoint as-is (will likely fail for relative paths)\n return resolved;\n}\n\n/**\n * Default API fetcher implementation\n */\nexport async function apiFetcher(\n source: ApiDataSource,\n context: DataSourceContext,\n): Promise<unknown> {\n // Delegate to adapter if available for preset-backed sources\n if (context.api && source.presetId) {\n const result = await fetchViaAdapter(source, context);\n if (result !== undefined) return result;\n // Fall through to legacy fetch for unknown presets\n }\n\n const { endpoint, method = \"GET\", headers = {}, body, resultPath } = source;\n\n // Merge context variables with per-source variables (source overrides context)\n const mergedVariables = { ...context.variables, ...source.variables };\n\n // Resolve the full URL, substituting variables and using baseUrl for relative endpoints\n const url = resolveEndpointUrl(endpoint, context.baseUrl, mergedVariables);\n\n // Skip the fetch if the URL still contains unresolved {variable} placeholders\n // (e.g. rep_id not yet loaded). Return null — TanStack Query treats undefined\n // as a missing return and throws, so use null for the no-op case.\n if (/\\{\\w+\\}/.test(url)) {\n return null;\n }\n\n const fetchOptions: RequestInit = {\n method,\n headers: {\n \"content-type\": \"application/json\",\n ...context.getApiHeaders?.(),\n ...headers,\n },\n signal: context.signal,\n };\n\n if (body && (method === \"POST\" || method === \"PUT\")) {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, fetchOptions);\n\n if (!response.ok) {\n throw new Error(\n `API request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n\n // Extract data at resultPath if specified\n if (resultPath) {\n return getByPath(data, resultPath);\n }\n\n return data;\n}\n","import type { ResourceType } from \"../../data-source-api-types\";\nimport type {\n CustomDataSource,\n DataSourceContext,\n SelectedItem,\n} from \"../types\";\n\nexport const SHAREABLE_TO_RESOURCE_TYPE: Record<string, ResourceType> = {\n Medium: \"Medium\",\n Page: \"Page\",\n Library: \"Library\",\n Product: \"Product\",\n EnrollmentPack: \"EnrollmentPack\",\n};\n\nasync function fetchItemsViaAdapter(\n items: SelectedItem[],\n context: DataSourceContext,\n): Promise<unknown[]> {\n const api = context.api!;\n\n // Use Promise.allSettled so individual failures don't blow up the whole\n // batch, but *do* surface the aggregate failure for visibility — a rep who\n // hand-picked 5 items shouldn't silently see 3 without knowing why.\n const settled = await Promise.allSettled(\n items.map(async (item) => {\n const resourceType = SHAREABLE_TO_RESOURCE_TYPE[item.shareableType];\n if (!resourceType) {\n throw new Error(\n `Unknown shareable type: ${item.shareableType} for item #${item.id}`,\n );\n }\n return api.fetchResource(resourceType, item.id, context.signal);\n }),\n );\n\n const successful: unknown[] = [];\n const failures: { item: SelectedItem; reason: unknown }[] = [];\n\n settled.forEach((result, index) => {\n const item = items[index];\n if (!item) return;\n if (result.status === \"fulfilled\") {\n successful.push(result.value);\n } else {\n failures.push({ item, reason: result.reason });\n }\n });\n\n if (failures.length > 0) {\n // Log once with aggregate context so Sentry/logs show the full picture\n // rather than N scattered warnings that are hard to correlate.\n console.error(\n `[CustomFetcher] ${failures.length}/${items.length} items failed to fetch:`,\n failures.map((f) => ({\n shareableType: f.item.shareableType,\n id: f.item.id,\n error: f.reason instanceof Error ? f.reason.message : f.reason,\n })),\n );\n }\n\n if (successful.length === 0 && items.length > 0) {\n const firstErr = failures[0]?.reason;\n throw new Error(\n `Failed to fetch all ${items.length} item(s)${firstErr instanceof Error ? `: ${firstErr.message}` : \"\"}`,\n );\n }\n\n return successful;\n}\n\n/**\n * Custom fetcher that fetches selected items via the injected DataSourceApi adapter.\n *\n * Fetches all items in parallel for performance.\n * Returns an array of successfully fetched items, preserving order.\n * Logs warnings for failed fetches but doesn't throw unless all items fail.\n */\nexport async function customFetcher(\n source: CustomDataSource,\n context: DataSourceContext,\n): Promise<unknown[]> {\n const { selectedItems } = source;\n if (!selectedItems || selectedItems.length === 0) {\n return [];\n }\n\n if (!context.api) {\n throw new Error(\n \"customFetcher requires context.api — ensure a DataSourceApiProvider wraps this tree.\",\n );\n }\n\n return fetchItemsViaAdapter(selectedItems, context);\n}\n","import type {\n StaticDataSource,\n DataSourceContext,\n StaticSourceType,\n} from \"../types\";\n\n/**\n * Static data source fetcher.\n *\n * Delegates to the injected DataSourceApi adapter to fetch products filtered\n * by collection, category, or tag.\n */\nexport async function staticFetcher(\n source: StaticDataSource,\n context: DataSourceContext,\n): Promise<unknown[]> {\n const { staticType, selectedId } = source;\n\n if (!context.api) {\n throw new Error(\n \"staticFetcher requires context.api — ensure a DataSourceApiProvider wraps this tree.\",\n );\n }\n\n // Validate filterId once at the shared delegation point so BFF and legacy\n // adapters behave identically. Tags are a known-unsupported type the\n // adapters throw for separately.\n if (staticType !== \"tags\" && Number.isNaN(Number(selectedId))) {\n throw new Error(\n `staticFetcher: selectedId must be numeric, got \"${selectedId}\"`,\n );\n }\n\n return context.api.fetchProductsByFilter(\n staticType,\n selectedId,\n context.signal,\n );\n}\n\n/**\n * Endpoints for listing static source items (collections, categories, tags).\n * Used by the portal builder UI for populating selection dropdowns.\n */\nexport const LIST_ENDPOINTS: Record<\n StaticSourceType,\n { endpoint: string; resultKey: string }\n> = {\n collections: {\n endpoint: \"/company/v1/collections\",\n resultKey: \"collections\",\n },\n categories: { endpoint: \"/company/v1/categories\", resultKey: \"categories\" },\n tags: { endpoint: \"/company/v1/tags\", resultKey: \"tags\" },\n};\n","/**\n * Widget Transformers\n *\n * Transform functions that map API response data to widget-specific prop shapes.\n * Each widget has one transformer that handles all data structure variants:\n * - Standard: Direct field name match\n * - Legacy: Different field names that need mapping\n * - Minimal: Bare minimum fields that need defaults\n *\n * Usage:\n * 1. Transformers are registered in the DataSourceRegistry\n * 2. Reference by name in ApiDataSource.transform\n * 3. Applied after resultPath extraction, before targetProps assignment\n */\n\nimport type { DataTransformer, DataSource } from \"./types\";\n\n/**\n * Helper to extract image URL from various API response structures.\n * Handles:\n * - Flat fields (Medium, Page, Product): image_url, imageUrl, thumbnail_url, src\n * - Nested images array (EnrollmentPack): images[0].image_url\n * - Nested library_items (Library): library_items[0].relateable.image_url\n */\nfunction extractImageUrl(d: Record<string, unknown>): string {\n // Try flat fields first (Medium, Page, Product)\n if (d.image_url) return d.image_url as string;\n if (d.imageUrl) return d.imageUrl as string;\n if (d.thumbnail_url) return d.thumbnail_url as string;\n if (d.src) return d.src as string;\n\n // Try nested images array (EnrollmentPack)\n const images = d.images as Array<Record<string, unknown>> | undefined;\n if (images && images.length > 0) {\n const firstImage = images[0];\n if (firstImage?.image_url) return firstImage.image_url as string;\n if (firstImage?.url) return firstImage.url as string;\n }\n\n // Try nested library_items (Library/Playlist)\n const libraryItems = d.library_items as\n | Array<Record<string, unknown>>\n | undefined;\n if (libraryItems && libraryItems.length > 0) {\n const firstItem = libraryItems[0];\n const relateable = firstItem?.relateable as\n | Record<string, unknown>\n | undefined;\n if (relateable?.image_url) return relateable.image_url as string;\n if (relateable?.imageUrl) return relateable.imageUrl as string;\n if (relateable?.thumbnail_url) return relateable.thumbnail_url as string;\n }\n\n return \"\";\n}\n\n/**\n * Helper to extract description from various API response structures.\n * Handles different field names across endpoints.\n */\nfunction extractDescription(d: Record<string, unknown>): string {\n // Try various description field names\n const desc =\n d.description ?? d.stripped ?? d.stripped_description ?? d.body ?? \"\";\n\n // Handle nested description object (some APIs return { body: \"...\" })\n if (typeof desc === \"object\" && desc !== null && \"body\" in desc) {\n return ((desc as Record<string, unknown>).body as string) ?? \"\";\n }\n\n return desc as string;\n}\n\n/**\n * Helper to extract custom widget config from a selected item.\n */\nfunction extractCustomWidgetConfig(\n d: Record<string, unknown>,\n source: DataSource | undefined,\n): Record<string, unknown> {\n if (source === undefined || source.type !== \"custom\") return {};\n\n const selectedItem = source.selectedItems.find(\n (s) => String(s.id) === String(d.id),\n );\n return selectedItem?.widgetConfig ?? {};\n}\n\n/**\n * ImageWidget transformer from shareable data\n */\nconst toImagePropsFromShareable: DataTransformer = (data) => {\n const item = Array.isArray(data) ? data[0] : data;\n if (!item || typeof item !== \"object\") {\n return { src: \"\", alt: \"Image\", objectFit: \"cover\" };\n }\n\n const d = item as Record<string, unknown>;\n return {\n src: extractImageUrl(d),\n alt: (d.title ?? d.name ?? d.alt ?? \"Image\") as string,\n objectFit: \"cover\" as const,\n };\n};\n\n/**\n * VideoWidget transformer from shareable data\n */\nconst toVideoPropsFromShareable: DataTransformer = (data) => {\n const item = Array.isArray(data) ? data[0] : data;\n if (!item || typeof item !== \"object\") {\n return { src: \"\", poster: \"\", caption: \"\" };\n }\n\n const d = item as Record<string, unknown>;\n return {\n src: ((d.video_url ?? d.videoUrl ?? d.src) as string) || \"\",\n poster: extractImageUrl(d),\n caption: (d.title ?? d.name ?? d.caption ?? \"\") as string,\n };\n};\n\n/**\n * Shareable content transformer\n * Normalizes shareable API responses to a consistent format\n */\nconst toShareableProps: DataTransformer = (data, source) => {\n if (!Array.isArray(data)) return [];\n\n // Derive a fallback shareable type from the data source configuration.\n // API presets pass shareable_type in their variables (e.g., \"products\").\n // Custom sources store it per-item (handled below).\n const sourceTypeHint =\n source?.type === \"api\" ? source.variables?.shareable_type : undefined;\n\n return data.map((item: unknown) => {\n const d = item as Record<string, unknown>;\n\n const widgetConfig = extractCustomWidgetConfig(d, source);\n\n // Resolve shareable type from the item itself, then fall back to source hint\n const shareableType = (d.type ??\n d.relateable_type ??\n d.shareable_type ??\n d.shareableType ??\n sourceTypeHint ??\n \"\") as string;\n\n return {\n ...d,\n id: d.id,\n title: (d.title ?? d.name ?? \"\") as string,\n description: extractDescription(d),\n imageUrl: extractImageUrl(d),\n videoUrl: ((d.video_url ?? d.videoUrl) as string) || null,\n shareableType,\n kind: (d.kind ?? \"image\") as string,\n status: (d.status ?? \"active\") as string,\n wholesalePrice: d.display_wholesale_price ?? d.wholesale_price ?? null,\n subscriptionPrice: d.subscription_price ?? null,\n outOfStock: d.out_of_stock ?? false,\n lowInStock: d.low_in_stock ?? false,\n ...widgetConfig,\n };\n });\n};\n\n/**\n * Carousel slides from shareables transformer\n */\nconst toCarouselSlidesFromShareables: DataTransformer = (data, source) => {\n if (!Array.isArray(data)) return [];\n\n return data.map((item: unknown, index: number) => {\n const d = item as Record<string, unknown>;\n\n const widgetConfig = extractCustomWidgetConfig(d, source);\n\n const imageUrl = extractImageUrl(d);\n const isVideo =\n d.kind === \"video\" ||\n d.content_format === \"video\" ||\n d.videoUrl ||\n d.video_url;\n const videoSrc =\n ((d.videoUrl ?? d.video_url) as string) ||\n (isVideo ? (d.url as string) || \"\" : \"\");\n const title = (d.title ?? d.name ?? \"\") as string;\n\n const content = isVideo\n ? {\n type: \"VideoWidget\",\n props: {\n src: videoSrc,\n poster: imageUrl,\n caption: title,\n autoplay: false,\n loop: false,\n muted: true,\n controls: true,\n },\n }\n : {\n type: \"ImageWidget\",\n props: {\n src: imageUrl,\n alt: title || \"Slide image\",\n objectFit: \"cover\",\n },\n };\n\n const baseSlide = {\n id: String(d.id ?? `slide-${index}`),\n content,\n title,\n description: extractDescription(d),\n };\n\n return {\n ...baseSlide,\n ...widgetConfig,\n };\n });\n};\n\n/**\n * Orders table transformer\n * Normalizes order list data into ShareableItem rows + column definitions.\n * Returns { data, columns } so multi-targetProp mapping sends each to the widget.\n */\nconst toOrderTableProps: DataTransformer = (data) => {\n const orders = Array.isArray(data) ? data : [];\n\n const columns = [\n { key: \"imageUrl\", label: \"Image\", sortable: false },\n { key: \"order_number\", label: \"Order #\", sortable: true },\n { key: \"price\", label: \"Total\", sortable: true },\n { key: \"status\", label: \"Status\", sortable: true },\n ];\n\n const rows = orders.map((item: unknown) => {\n const d = item as Record<string, unknown>;\n const firstItem = d.first_item as Record<string, unknown> | undefined;\n const amount = parseFloat(String(d.amount ?? \"0\")) || 0;\n\n return {\n ...d,\n id: d.id ?? d.token,\n shareableType: \"Order\",\n imageUrl: (firstItem?.image_url as string) || \"\",\n title: (firstItem?.title as string) || \"\",\n order_number: d.order_number ?? \"\",\n price: amount,\n display_price: (d.total_display_amount as string) ?? d.amount ?? \"\",\n status: (d.status as string) ?? \"unknown\",\n created_at: d.created_at,\n };\n });\n\n return { data: rows, columns };\n};\n\n/**\n * Subscriptions table transformer\n * Normalizes subscription list data into ShareableItem rows + column definitions.\n */\nconst toSubscriptionTableProps: DataTransformer = (data) => {\n const subscriptions = Array.isArray(data) ? data : [];\n\n const columns = [\n { key: \"imageUrl\", label: \"Image\", sortable: false },\n { key: \"title\", label: \"Product\", sortable: true },\n { key: \"price\", label: \"Price\", sortable: true },\n { key: \"status\", label: \"Status\", sortable: true },\n ];\n\n const rows = subscriptions.map((item: unknown) => {\n const d = item as Record<string, unknown>;\n const variant = d.variant as Record<string, unknown> | undefined;\n const product = variant?.product as Record<string, unknown> | undefined;\n\n return {\n ...d,\n id: d.id ?? d.subscription_token,\n shareableType: \"Subscription\",\n imageUrl: (product?.image_url as string) || \"\",\n title: (product?.title as string) || \"\",\n price: parseFloat(String(d.price ?? \"0\")) || 0,\n display_price:\n (product?.price_in_currency as string) ?? String(d.price ?? \"\"),\n status: (d.status as string) ?? \"unknown\",\n next_bill_date: d.next_bill_date,\n };\n });\n\n return { data: rows, columns };\n};\n\n/**\n * All widget transformers bundled for registration\n */\nexport const WIDGET_TRANSFORMERS: Record<string, DataTransformer> = {\n toShareableProps,\n toCarouselSlidesFromShareables,\n toImagePropsFromShareable,\n toVideoPropsFromShareable,\n toOrderTableProps,\n toSubscriptionTableProps,\n};\n","import type {\n DataSourceRegistry,\n DataFetcher,\n DataTransformer,\n DataSourceType,\n} from \"./types\";\nimport { apiFetcher } from \"./fetchers/api\";\nimport { customFetcher } from \"./fetchers/custom\";\nimport { staticFetcher } from \"./fetchers/static\";\nimport { WIDGET_TRANSFORMERS } from \"./transformers\";\n\nexport interface CreateDataSourceRegistryOptions {\n /** Custom fetchers to add or override */\n fetchers?: Partial<Record<DataSourceType, DataFetcher>>;\n /** Custom transform functions */\n transformers?: Record<string, DataTransformer>;\n}\n\n/**\n * Creates a data source registry with default fetchers.\n * Users can extend this with custom fetchers and transformers.\n */\nexport function createDataSourceRegistry(\n options?: CreateDataSourceRegistryOptions,\n): DataSourceRegistry {\n return {\n fetchers: {\n api: apiFetcher,\n custom: customFetcher,\n static: staticFetcher,\n ...options?.fetchers,\n } as Record<DataSourceType, DataFetcher>,\n transformers: {\n ...WIDGET_TRANSFORMERS,\n ...options?.transformers,\n },\n };\n}\n\n/** Default registry instance */\nexport const DEFAULT_DATA_SOURCE_REGISTRY: DataSourceRegistry =\n createDataSourceRegistry();\n","import type React from \"react\";\nimport { createContext, type ReactNode, use, useMemo } from \"react\";\n\nexport interface DataSourceContextValue {\n baseUrl?: string | undefined;\n getApiHeaders?: (() => Record<string, string>) | undefined;\n}\n\nconst DataSourceContext = createContext<DataSourceContextValue>({});\n\nexport interface DataSourceProviderProps {\n baseUrl?: string | undefined;\n getApiHeaders?: (() => Record<string, string>) | undefined;\n children: ReactNode;\n}\n\nexport function DataSourceProvider({\n baseUrl,\n getApiHeaders,\n children,\n}: DataSourceProviderProps): React.JSX.Element {\n const value = useMemo(\n () => ({ baseUrl, getApiHeaders }),\n [baseUrl, getApiHeaders],\n );\n\n return (\n <DataSourceContext.Provider value={value}>\n {children}\n </DataSourceContext.Provider>\n );\n}\n\nexport function useDataSourceConfig(): DataSourceContextValue {\n return use(DataSourceContext);\n}\n","import type React from \"react\";\nimport { createContext, type ReactNode, use, useMemo } from \"react\";\nimport type { DataSourceRegistry } from \"@fluid-app/portal-core/data-sources/types\";\nimport { DEFAULT_DATA_SOURCE_REGISTRY } from \"@fluid-app/portal-core/data-sources/registry\";\nimport { DataSourceProvider } from \"./context\";\n\ninterface DataSourceRegistryContextValue {\n registry: DataSourceRegistry;\n baseUrl?: string | undefined;\n /** Get API headers function */\n getApiHeaders?: (() => Record<string, string>) | undefined;\n /** Dynamic variables for endpoint path substitution (e.g., { rep_id: \"123\" }) */\n variables?: Record<string, string> | undefined;\n}\n\nconst DataSourceRegistryContext = createContext<DataSourceRegistryContextValue>(\n {\n registry: DEFAULT_DATA_SOURCE_REGISTRY,\n },\n);\n\nexport interface DataSourceRegistryProviderProps {\n registry?: DataSourceRegistry | undefined;\n /** Base URL for API calls (e.g., \"https://api.fluid.app/api\") */\n baseUrl?: string | undefined;\n /**\n * Get API headers function\n */\n getApiHeaders?: (() => Record<string, string>) | undefined;\n /** Dynamic variables for endpoint path substitution (e.g., { rep_id: \"123\" }) */\n variables?: Record<string, string> | undefined;\n children: ReactNode;\n}\n\n/**\n * Provides data source registry and configuration to all descendants.\n * If no registry is provided, uses the default.\n * Also provides the shared DataSourceProvider from portal-core so that\n * portal-widgets hooks can access baseUrl and getApiHeaders.\n *\n * The DataSourceApi adapter is provided separately via DataSourceApiProvider.\n */\nexport function DataSourceRegistryProvider({\n registry,\n baseUrl,\n getApiHeaders,\n variables,\n children,\n}: DataSourceRegistryProviderProps): React.JSX.Element {\n const value = useMemo(\n () => ({\n registry: registry ?? DEFAULT_DATA_SOURCE_REGISTRY,\n baseUrl,\n getApiHeaders,\n variables,\n }),\n [registry, baseUrl, getApiHeaders, variables],\n );\n\n return (\n <DataSourceRegistryContext.Provider value={value}>\n <DataSourceProvider baseUrl={baseUrl} getApiHeaders={getApiHeaders}>\n {children}\n </DataSourceProvider>\n </DataSourceRegistryContext.Provider>\n );\n}\n\n/**\n * Hook to access the data source registry.\n */\nexport function useDataSourceRegistry(): DataSourceRegistry {\n return use(DataSourceRegistryContext).registry;\n}\n\n/**\n * Hook to access the full data source registry context (registry + config).\n */\nexport function useDataSourceRegistryConfig(): DataSourceRegistryContextValue {\n return use(DataSourceRegistryContext);\n}\n"],"mappings":";;;;;;;AAOA,eAAe,gBACb,QACA,SACkB;CAClB,MAAM,MAAM,QAAQ;CACpB,MAAM,OAAO;EAAE,GAAG,QAAQ;EAAW,GAAG,OAAO;EAAW;AAE1D,SAAQ,OAAO,UAAf;EACE,KAAK,kBACH,QAAO,IAAI,gBAAgB,MAAM,UAAU,IAAI;GAC7C,eACG,MAAM,kBAA8C;GACvD,OAAO,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG,KAAA;GAC1C,QAAQ,MAAM;GACd,aAAa,MAAM;GACnB,QAAQ,QAAQ;GACjB,CAAC;EAEJ,KAAK,kBACH,QAAO,IAAI,gBAAgB,MAAM,UAAU,IAAI;GAC7C,eACG,MAAM,kBAA8C;GACvD,OAAO,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG,KAAA;GAC1C,QAAQ,MAAM;GACd,aAAa,MAAM;GACnB,QAAQ,QAAQ;GACjB,CAAC;EAEJ,KAAK,kBAEH,QAAO,IAAI,YAAY,MAAM,eAAe,IAAI;GAC9C,OAAO,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG,KAAA;GAC1C,QAAQ,MAAM;GACd,QAAQ,QAAQ;GACjB,CAAC;EAEJ,KAAK,yBAEH,QAAO,IAAI,mBAAmB,MAAM,eAAe,IAAI;GACrD,OAAO,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG,KAAA;GAC1C,QAAQ,MAAM;GACd,QAAQ,QAAQ;GACjB,CAAC;EAEJ,QACE;;;;;;;AAQN,SAAS,UAAU,KAAc,MAAuB;AACtD,QAAO,KAAK,MAAM,IAAI,CAAC,QAAQ,SAAS,QAAQ;AAC9C,MAAI,WAAW,OAAO,YAAY,YAAY,OAAO,QACnD,QAAQ,QAAoC;IAG7C,IAAI;;;;;;;AAQT,SAAS,qBACP,UACA,WACQ;AACR,KAAI,CAAC,UAAW,QAAO;CACvB,MAAM,WAAW,SAAS,QACxB,eACC,OAAO,QAAgB,UAAU,QAAQ,MAC3C;CACD,MAAM,aAAa,SAAS,MAAM,aAAa;AAC/C,KAAI,WACF,SAAQ,KACN,8DAA8D,WAAW,KAAK,KAAK,CAAC,eACpE,SAAS,0BAA0B,OAAO,KAAK,UAAU,CAAC,KAAK,KAAK,IAAI,WACzF;AAEH,QAAO,oBAAoB,SAAS;;;;;;;;;;;;AAatC,SAAS,oBAAoB,KAAqB;CAChD,MAAM,SAAS,IAAI,QAAQ,IAAI;AAC/B,KAAI,WAAW,GAAI,QAAO;CAE1B,MAAM,OAAO,IAAI,MAAM,GAAG,OAAO;CAEjC,MAAM,OADQ,IAAI,MAAM,SAAS,EAAE,CAEhC,MAAM,IAAI,CACV,QAAQ,SAAS;EAChB,MAAM,UAAU,KAAK,QAAQ,IAAI;AACjC,MAAI,YAAY,GAAI,QAAO;AAC3B,SAAO,KAAK,MAAM,UAAU,EAAE,KAAK;GACnC,CACD,KAAK,IAAI;AAEZ,QAAO,OAAO,GAAG,KAAK,GAAG,SAAS;;;;;;;;AASpC,SAAS,mBACP,UACA,SACA,WACQ;CACR,MAAM,WAAW,qBAAqB,UAAU,UAAU;AAG1D,KAAI,SAAS,WAAW,UAAU,IAAI,SAAS,WAAW,WAAW,CACnE,QAAO;AAIT,KAAI,QAIF,QAAO,GAFM,QAAQ,SAAS,IAAI,GAAG,QAAQ,MAAM,GAAG,GAAG,GAAG,UAC/C,SAAS,WAAW,IAAI,GAAG,WAAW,IAAI;AAKzD,QAAO;;;;;AAMT,eAAsB,WACpB,QACA,SACkB;AAElB,KAAI,QAAQ,OAAO,OAAO,UAAU;EAClC,MAAM,SAAS,MAAM,gBAAgB,QAAQ,QAAQ;AACrD,MAAI,WAAW,KAAA,EAAW,QAAO;;CAInC,MAAM,EAAE,UAAU,SAAS,OAAO,UAAU,EAAE,EAAE,MAAM,eAAe;CAGrE,MAAM,kBAAkB;EAAE,GAAG,QAAQ;EAAW,GAAG,OAAO;EAAW;CAGrE,MAAM,MAAM,mBAAmB,UAAU,QAAQ,SAAS,gBAAgB;AAK1E,KAAI,UAAU,KAAK,IAAI,CACrB,QAAO;CAGT,MAAM,eAA4B;EAChC;EACA,SAAS;GACP,gBAAgB;GAChB,GAAG,QAAQ,iBAAiB;GAC5B,GAAG;GACJ;EACD,QAAQ,QAAQ;EACjB;AAED,KAAI,SAAS,WAAW,UAAU,WAAW,OAC3C,cAAa,OAAO,KAAK,UAAU,KAAK;CAG1C,MAAM,WAAW,MAAM,MAAM,KAAK,aAAa;AAE/C,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,uBAAuB,SAAS,OAAO,GAAG,SAAS,aACpD;CAGH,MAAM,OAAO,MAAM,SAAS,MAAM;AAGlC,KAAI,WACF,QAAO,UAAU,MAAM,WAAW;AAGpC,QAAO;;;;AC1MT,MAAa,6BAA2D;CACtE,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;CACT,gBAAgB;CACjB;AAED,eAAe,qBACb,OACA,SACoB;CACpB,MAAM,MAAM,QAAQ;CAKpB,MAAM,UAAU,MAAM,QAAQ,WAC5B,MAAM,IAAI,OAAO,SAAS;EACxB,MAAM,eAAe,2BAA2B,KAAK;AACrD,MAAI,CAAC,aACH,OAAM,IAAI,MACR,2BAA2B,KAAK,cAAc,aAAa,KAAK,KACjE;AAEH,SAAO,IAAI,cAAc,cAAc,KAAK,IAAI,QAAQ,OAAO;GAC/D,CACH;CAED,MAAM,aAAwB,EAAE;CAChC,MAAM,WAAsD,EAAE;AAE9D,SAAQ,SAAS,QAAQ,UAAU;EACjC,MAAM,OAAO,MAAM;AACnB,MAAI,CAAC,KAAM;AACX,MAAI,OAAO,WAAW,YACpB,YAAW,KAAK,OAAO,MAAM;MAE7B,UAAS,KAAK;GAAE;GAAM,QAAQ,OAAO;GAAQ,CAAC;GAEhD;AAEF,KAAI,SAAS,SAAS,EAGpB,SAAQ,MACN,mBAAmB,SAAS,OAAO,GAAG,MAAM,OAAO,0BACnD,SAAS,KAAK,OAAO;EACnB,eAAe,EAAE,KAAK;EACtB,IAAI,EAAE,KAAK;EACX,OAAO,EAAE,kBAAkB,QAAQ,EAAE,OAAO,UAAU,EAAE;EACzD,EAAE,CACJ;AAGH,KAAI,WAAW,WAAW,KAAK,MAAM,SAAS,GAAG;EAC/C,MAAM,WAAW,SAAS,IAAI;AAC9B,QAAM,IAAI,MACR,uBAAuB,MAAM,OAAO,UAAU,oBAAoB,QAAQ,KAAK,SAAS,YAAY,KACrG;;AAGH,QAAO;;;;;;;;;AAUT,eAAsB,cACpB,QACA,SACoB;CACpB,MAAM,EAAE,kBAAkB;AAC1B,KAAI,CAAC,iBAAiB,cAAc,WAAW,EAC7C,QAAO,EAAE;AAGX,KAAI,CAAC,QAAQ,IACX,OAAM,IAAI,MACR,uFACD;AAGH,QAAO,qBAAqB,eAAe,QAAQ;;;;;;;;;;AClFrD,eAAsB,cACpB,QACA,SACoB;CACpB,MAAM,EAAE,YAAY,eAAe;AAEnC,KAAI,CAAC,QAAQ,IACX,OAAM,IAAI,MACR,uFACD;AAMH,KAAI,eAAe,UAAU,OAAO,MAAM,OAAO,WAAW,CAAC,CAC3D,OAAM,IAAI,MACR,mDAAmD,WAAW,GAC/D;AAGH,QAAO,QAAQ,IAAI,sBACjB,YACA,YACA,QAAQ,OACT;;;;;;;;;;;ACbH,SAAS,gBAAgB,GAAoC;AAE3D,KAAI,EAAE,UAAW,QAAO,EAAE;AAC1B,KAAI,EAAE,SAAU,QAAO,EAAE;AACzB,KAAI,EAAE,cAAe,QAAO,EAAE;AAC9B,KAAI,EAAE,IAAK,QAAO,EAAE;CAGpB,MAAM,SAAS,EAAE;AACjB,KAAI,UAAU,OAAO,SAAS,GAAG;EAC/B,MAAM,aAAa,OAAO;AAC1B,MAAI,YAAY,UAAW,QAAO,WAAW;AAC7C,MAAI,YAAY,IAAK,QAAO,WAAW;;CAIzC,MAAM,eAAe,EAAE;AAGvB,KAAI,gBAAgB,aAAa,SAAS,GAAG;EAE3C,MAAM,aADY,aAAa,IACD;AAG9B,MAAI,YAAY,UAAW,QAAO,WAAW;AAC7C,MAAI,YAAY,SAAU,QAAO,WAAW;AAC5C,MAAI,YAAY,cAAe,QAAO,WAAW;;AAGnD,QAAO;;;;;;AAOT,SAAS,mBAAmB,GAAoC;CAE9D,MAAM,OACJ,EAAE,eAAe,EAAE,YAAY,EAAE,wBAAwB,EAAE,QAAQ;AAGrE,KAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,KACzD,QAAS,KAAiC,QAAmB;AAG/D,QAAO;;;;;AAMT,SAAS,0BACP,GACA,QACyB;AACzB,KAAI,WAAW,KAAA,KAAa,OAAO,SAAS,SAAU,QAAO,EAAE;AAK/D,QAHqB,OAAO,cAAc,MACvC,MAAM,OAAO,EAAE,GAAG,KAAK,OAAO,EAAE,GAAG,CACrC,EACoB,gBAAgB,EAAE;;;;;AAMzC,MAAM,6BAA8C,SAAS;CAC3D,MAAM,OAAO,MAAM,QAAQ,KAAK,GAAG,KAAK,KAAK;AAC7C,KAAI,CAAC,QAAQ,OAAO,SAAS,SAC3B,QAAO;EAAE,KAAK;EAAI,KAAK;EAAS,WAAW;EAAS;CAGtD,MAAM,IAAI;AACV,QAAO;EACL,KAAK,gBAAgB,EAAE;EACvB,KAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;EACpC,WAAW;EACZ;;;;;AAMH,MAAM,6BAA8C,SAAS;CAC3D,MAAM,OAAO,MAAM,QAAQ,KAAK,GAAG,KAAK,KAAK;AAC7C,KAAI,CAAC,QAAQ,OAAO,SAAS,SAC3B,QAAO;EAAE,KAAK;EAAI,QAAQ;EAAI,SAAS;EAAI;CAG7C,MAAM,IAAI;AACV,QAAO;EACL,MAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAmB;EACzD,QAAQ,gBAAgB,EAAE;EAC1B,SAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;EAC7C;;;;;;AAOH,MAAM,oBAAqC,MAAM,WAAW;AAC1D,KAAI,CAAC,MAAM,QAAQ,KAAK,CAAE,QAAO,EAAE;CAKnC,MAAM,iBACJ,QAAQ,SAAS,QAAQ,OAAO,WAAW,iBAAiB,KAAA;AAE9D,QAAO,KAAK,KAAK,SAAkB;EACjC,MAAM,IAAI;EAEV,MAAM,eAAe,0BAA0B,GAAG,OAAO;EAGzD,MAAM,gBAAiB,EAAE,QACvB,EAAE,mBACF,EAAE,kBACF,EAAE,iBACF,kBACA;AAEF,SAAO;GACL,GAAG;GACH,IAAI,EAAE;GACN,OAAQ,EAAE,SAAS,EAAE,QAAQ;GAC7B,aAAa,mBAAmB,EAAE;GAClC,UAAU,gBAAgB,EAAE;GAC5B,WAAY,EAAE,aAAa,EAAE,aAAwB;GACrD;GACA,MAAO,EAAE,QAAQ;GACjB,QAAS,EAAE,UAAU;GACrB,gBAAgB,EAAE,2BAA2B,EAAE,mBAAmB;GAClE,mBAAmB,EAAE,sBAAsB;GAC3C,YAAY,EAAE,gBAAgB;GAC9B,YAAY,EAAE,gBAAgB;GAC9B,GAAG;GACJ;GACD;;;;;AAMJ,MAAM,kCAAmD,MAAM,WAAW;AACxE,KAAI,CAAC,MAAM,QAAQ,KAAK,CAAE,QAAO,EAAE;AAEnC,QAAO,KAAK,KAAK,MAAe,UAAkB;EAChD,MAAM,IAAI;EAEV,MAAM,eAAe,0BAA0B,GAAG,OAAO;EAEzD,MAAM,WAAW,gBAAgB,EAAE;EACnC,MAAM,UACJ,EAAE,SAAS,WACX,EAAE,mBAAmB,WACrB,EAAE,YACF,EAAE;EACJ,MAAM,YACF,EAAE,YAAY,EAAE,eACjB,UAAW,EAAE,OAAkB,KAAK;EACvC,MAAM,QAAS,EAAE,SAAS,EAAE,QAAQ;EAEpC,MAAM,UAAU,UACZ;GACE,MAAM;GACN,OAAO;IACL,KAAK;IACL,QAAQ;IACR,SAAS;IACT,UAAU;IACV,MAAM;IACN,OAAO;IACP,UAAU;IACX;GACF,GACD;GACE,MAAM;GACN,OAAO;IACL,KAAK;IACL,KAAK,SAAS;IACd,WAAW;IACZ;GACF;AASL,SAAO;GANL,IAAI,OAAO,EAAE,MAAM,SAAS,QAAQ;GACpC;GACA;GACA,aAAa,mBAAmB,EAAE;GAKlC,GAAG;GACJ;GACD;;;;;;;AAQJ,MAAM,qBAAsC,SAAS;AA6BnD,QAAO;EAAE,OA5BM,MAAM,QAAQ,KAAK,GAAG,OAAO,EAAE,EAS1B,KAAK,SAAkB;GACzC,MAAM,IAAI;GACV,MAAM,YAAY,EAAE;GACpB,MAAM,SAAS,WAAW,OAAO,EAAE,UAAU,IAAI,CAAC,IAAI;AAEtD,UAAO;IACL,GAAG;IACH,IAAI,EAAE,MAAM,EAAE;IACd,eAAe;IACf,UAAW,WAAW,aAAwB;IAC9C,OAAQ,WAAW,SAAoB;IACvC,cAAc,EAAE,gBAAgB;IAChC,OAAO;IACP,eAAgB,EAAE,wBAAmC,EAAE,UAAU;IACjE,QAAS,EAAE,UAAqB;IAChC,YAAY,EAAE;IACf;IACD;EAEmB,SA1BL;GACd;IAAE,KAAK;IAAY,OAAO;IAAS,UAAU;IAAO;GACpD;IAAE,KAAK;IAAgB,OAAO;IAAW,UAAU;IAAM;GACzD;IAAE,KAAK;IAAS,OAAO;IAAS,UAAU;IAAM;GAChD;IAAE,KAAK;IAAU,OAAO;IAAU,UAAU;IAAM;GACnD;EAqB6B;;;;;;AAOhC,MAAM,4BAA6C,SAAS;AA6B1D,QAAO;EAAE,OA5Ba,MAAM,QAAQ,KAAK,GAAG,OAAO,EAAE,EAS1B,KAAK,SAAkB;GAChD,MAAM,IAAI;GAEV,MAAM,UADU,EAAE,SACO;AAEzB,UAAO;IACL,GAAG;IACH,IAAI,EAAE,MAAM,EAAE;IACd,eAAe;IACf,UAAW,SAAS,aAAwB;IAC5C,OAAQ,SAAS,SAAoB;IACrC,OAAO,WAAW,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI;IAC7C,eACG,SAAS,qBAAgC,OAAO,EAAE,SAAS,GAAG;IACjE,QAAS,EAAE,UAAqB;IAChC,gBAAgB,EAAE;IACnB;IACD;EAEmB,SA1BL;GACd;IAAE,KAAK;IAAY,OAAO;IAAS,UAAU;IAAO;GACpD;IAAE,KAAK;IAAS,OAAO;IAAW,UAAU;IAAM;GAClD;IAAE,KAAK;IAAS,OAAO;IAAS,UAAU;IAAM;GAChD;IAAE,KAAK;IAAU,OAAO;IAAU,UAAU;IAAM;GACnD;EAqB6B;;;;;AAMhC,MAAa,sBAAuD;CAClE;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;AC9RD,SAAgB,yBACd,SACoB;AACpB,QAAO;EACL,UAAU;GACR,KAAK;GACL,QAAQ;GACR,QAAQ;GACR,GAAG,SAAS;GACb;EACD,cAAc;GACZ,GAAG;GACH,GAAG,SAAS;GACb;EACF;;;AAIH,MAAa,+BACX,0BAA0B;;;ACjC5B,MAAM,oBAAoB,cAAsC,EAAE,CAAC;AAQnE,SAAgB,mBAAmB,EACjC,SACA,eACA,YAC6C;CAC7C,MAAM,QAAQ,eACL;EAAE;EAAS;EAAe,GACjC,CAAC,SAAS,cAAc,CACzB;AAED,QACE,oBAAC,kBAAkB,UAAnB;EAAmC;EAChC;EAC0B,CAAA;;;;ACdjC,MAAM,4BAA4B,cAChC,EACE,UAAU,8BACX,CACF;;;;;;;;;AAuBD,SAAgB,2BAA2B,EACzC,UACA,SACA,eACA,WACA,YACqD;CACrD,MAAM,QAAQ,eACL;EACL,UAAU,YAAY;EACtB;EACA;EACA;EACD,GACD;EAAC;EAAU;EAAS;EAAe;EAAU,CAC9C;AAED,QACE,oBAAC,0BAA0B,UAA3B;EAA2C;YACzC,oBAAC,oBAAD;GAA6B;GAAwB;GAClD;GACkB,CAAA;EACc,CAAA;;;;;AAczC,SAAgB,8BAA8D;AAC5E,QAAO,IAAI,0BAA0B"}
1
+ {"version":3,"file":"registry-context-BliPhkUQ.cjs","names":[],"sources":["../../core/src/data-sources/fetchers/api.ts","../../core/src/data-sources/fetchers/custom.ts","../../core/src/data-sources/fetchers/static.ts","../../core/src/data-sources/transformers.ts","../../core/src/data-sources/registry.ts","../../react/src/data-sources/context.tsx","../../react/src/data-sources/registry-context.tsx"],"sourcesContent":["import type { DataSourceShareableType } from \"../../data-source-api-types\";\nimport type { ApiDataSource, DataSourceContext } from \"../types\";\n\n/**\n * Delegates a preset API source to the injected DataSourceApi adapter.\n * Returns undefined for unknown presets (caller falls through to raw fetch).\n */\nasync function fetchViaAdapter(\n source: ApiDataSource,\n context: DataSourceContext,\n): Promise<unknown> {\n const api = context.api!;\n const vars = { ...context.variables, ...source.variables };\n\n switch (source.presetId) {\n case \"rep-most-shared\": {\n return api.fetchMostShared(vars?.rep_id ?? \"\", {\n shareableType:\n (vars?.shareable_type as DataSourceShareableType) ?? \"products\",\n limit: vars?.limit ? Number(vars.limit) : undefined,\n period: vars?.period,\n languageIso: vars?.language_iso,\n signal: context.signal,\n });\n }\n case \"rep-most-viewed\": {\n return api.fetchMostViewed(vars?.rep_id ?? \"\", {\n shareableType:\n (vars?.shareable_type as DataSourceShareableType) ?? \"products\",\n limit: vars?.limit ? Number(vars.limit) : undefined,\n period: vars?.period,\n languageIso: vars?.language_iso,\n signal: context.signal,\n });\n }\n case \"customer-orders\": {\n // BFF scopes by session — customer_id is informational/optional.\n return api.fetchOrders(vars?.customer_id ?? \"\", {\n limit: vars?.limit ? Number(vars.limit) : undefined,\n status: vars?.status,\n signal: context.signal,\n });\n }\n case \"customer-subscriptions\": {\n // BFF scopes by session — customer_id is informational/optional.\n return api.fetchSubscriptions(vars?.customer_id ?? \"\", {\n limit: vars?.limit ? Number(vars.limit) : undefined,\n status: vars?.status,\n signal: context.signal,\n });\n }\n default:\n return undefined;\n }\n}\n\n/**\n * Extracts a value from an object using dot notation path\n * e.g., getByPath({ data: { items: [1,2,3] } }, 'data.items') => [1,2,3]\n */\nfunction getByPath(obj: unknown, path: string): unknown {\n return path.split(\".\").reduce((current, key) => {\n if (current && typeof current === \"object\" && key in current) {\n return (current as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n}\n\n/**\n * Replaces {variable} placeholders in an endpoint path with values from the\n * variables map. E.g., \"/reps/{rep_id}/most_shared\" with { rep_id: \"42\" }\n * becomes \"/reps/42/most_shared\".\n */\nfunction interpolateVariables(\n endpoint: string,\n variables?: Record<string, string>,\n): string {\n if (!variables) return endpoint;\n const resolved = endpoint.replace(\n /\\{(\\w+)\\}/g,\n (match, key: string) => variables[key] ?? match,\n );\n const unresolved = resolved.match(/\\{(\\w+)\\}/g);\n if (unresolved) {\n console.warn(\n `[DataSource] Unresolved variable placeholders in endpoint: ${unresolved.join(\", \")}. ` +\n `Endpoint: \"${endpoint}\". Available variables: ${Object.keys(variables).join(\", \") || \"(none)\"}`,\n );\n }\n return stripAllQueryParams(resolved);\n}\n\n/**\n * Removes query parameters whose value is \"all\" from a URL.\n *\n * Convention: \"all\" is a reserved no-op value for data source preset\n * config fields. Preset authors should use \"all\" as the default option\n * for \"show everything\" filters. This function strips those params so\n * APIs that don't recognise \"all\" fall back to their default (return\n * everything) behaviour. Do not use \"all\" as a meaningful filter value\n * in preset endpoints.\n */\nfunction stripAllQueryParams(url: string): string {\n const qIndex = url.indexOf(\"?\");\n if (qIndex === -1) return url;\n\n const base = url.slice(0, qIndex);\n const query = url.slice(qIndex + 1);\n const kept = query\n .split(\"&\")\n .filter((pair) => {\n const eqIndex = pair.indexOf(\"=\");\n if (eqIndex === -1) return true;\n return pair.slice(eqIndex + 1) !== \"all\";\n })\n .join(\"&\");\n\n return kept ? `${base}?${kept}` : base;\n}\n\n/**\n * Resolves the full URL for an endpoint.\n * - Substitutes {variable} placeholders from context variables\n * - Absolute URLs (starting with http:// or https://) are used as-is\n * - Relative paths are prefixed with the context's baseUrl\n */\nfunction resolveEndpointUrl(\n endpoint: string,\n baseUrl?: string,\n variables?: Record<string, string>,\n): string {\n const resolved = interpolateVariables(endpoint, variables);\n\n // If endpoint is already absolute, use it directly\n if (resolved.startsWith(\"http://\") || resolved.startsWith(\"https://\")) {\n return resolved;\n }\n\n // If we have a baseUrl, prepend it to the relative endpoint\n if (baseUrl) {\n // Ensure proper joining (no double slashes)\n const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const path = resolved.startsWith(\"/\") ? resolved : `/${resolved}`;\n return `${base}${path}`;\n }\n\n // No baseUrl provided, return endpoint as-is (will likely fail for relative paths)\n return resolved;\n}\n\n/**\n * Default API fetcher implementation\n */\nexport async function apiFetcher(\n source: ApiDataSource,\n context: DataSourceContext,\n): Promise<unknown> {\n // Delegate to adapter if available for preset-backed sources\n if (context.api && source.presetId) {\n const result = await fetchViaAdapter(source, context);\n if (result !== undefined) return result;\n // Fall through to legacy fetch for unknown presets\n }\n\n const { endpoint, method = \"GET\", headers = {}, body, resultPath } = source;\n\n // Merge context variables with per-source variables (source overrides context)\n const mergedVariables = { ...context.variables, ...source.variables };\n\n // Resolve the full URL, substituting variables and using baseUrl for relative endpoints\n const url = resolveEndpointUrl(endpoint, context.baseUrl, mergedVariables);\n\n // Skip the fetch if the URL still contains unresolved {variable} placeholders\n // (e.g. rep_id not yet loaded). Return null — TanStack Query treats undefined\n // as a missing return and throws, so use null for the no-op case.\n if (/\\{\\w+\\}/.test(url)) {\n return null;\n }\n\n const fetchOptions: RequestInit = {\n method,\n headers: {\n \"content-type\": \"application/json\",\n ...context.getApiHeaders?.(),\n ...headers,\n },\n signal: context.signal,\n };\n\n if (body && (method === \"POST\" || method === \"PUT\")) {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, fetchOptions);\n\n if (!response.ok) {\n throw new Error(\n `API request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = await response.json();\n\n // Extract data at resultPath if specified\n if (resultPath) {\n return getByPath(data, resultPath);\n }\n\n return data;\n}\n","import type { ResourceType } from \"../../data-source-api-types\";\nimport type {\n CustomDataSource,\n DataSourceContext,\n SelectedItem,\n} from \"../types\";\n\nexport const SHAREABLE_TO_RESOURCE_TYPE: Record<string, ResourceType> = {\n Medium: \"Medium\",\n Page: \"Page\",\n Library: \"Library\",\n Product: \"Product\",\n EnrollmentPack: \"EnrollmentPack\",\n};\n\nasync function fetchItemsViaAdapter(\n items: SelectedItem[],\n context: DataSourceContext,\n): Promise<unknown[]> {\n const api = context.api!;\n\n // Use Promise.allSettled so individual failures don't blow up the whole\n // batch, but *do* surface the aggregate failure for visibility — a rep who\n // hand-picked 5 items shouldn't silently see 3 without knowing why.\n const settled = await Promise.allSettled(\n items.map(async (item) => {\n const resourceType = SHAREABLE_TO_RESOURCE_TYPE[item.shareableType];\n if (!resourceType) {\n throw new Error(\n `Unknown shareable type: ${item.shareableType} for item #${item.id}`,\n );\n }\n return api.fetchResource(resourceType, item.id, context.signal);\n }),\n );\n\n const successful: unknown[] = [];\n const failures: { item: SelectedItem; reason: unknown }[] = [];\n\n settled.forEach((result, index) => {\n const item = items[index];\n if (!item) return;\n if (result.status === \"fulfilled\") {\n successful.push(result.value);\n } else {\n failures.push({ item, reason: result.reason });\n }\n });\n\n if (failures.length > 0) {\n // Log once with aggregate context so Sentry/logs show the full picture\n // rather than N scattered warnings that are hard to correlate.\n console.error(\n `[CustomFetcher] ${failures.length}/${items.length} items failed to fetch:`,\n failures.map((f) => ({\n shareableType: f.item.shareableType,\n id: f.item.id,\n error: f.reason instanceof Error ? f.reason.message : f.reason,\n })),\n );\n }\n\n if (successful.length === 0 && items.length > 0) {\n const firstErr = failures[0]?.reason;\n throw new Error(\n `Failed to fetch all ${items.length} item(s)${firstErr instanceof Error ? `: ${firstErr.message}` : \"\"}`,\n );\n }\n\n return successful;\n}\n\n/**\n * Custom fetcher that fetches selected items via the injected DataSourceApi adapter.\n *\n * Fetches all items in parallel for performance.\n * Returns an array of successfully fetched items, preserving order.\n * Logs warnings for failed fetches but doesn't throw unless all items fail.\n */\nexport async function customFetcher(\n source: CustomDataSource,\n context: DataSourceContext,\n): Promise<unknown[]> {\n const { selectedItems } = source;\n if (!selectedItems || selectedItems.length === 0) {\n return [];\n }\n\n if (!context.api) {\n throw new Error(\n \"customFetcher requires context.api — ensure a DataSourceApiProvider wraps this tree.\",\n );\n }\n\n return fetchItemsViaAdapter(selectedItems, context);\n}\n","import type {\n StaticDataSource,\n DataSourceContext,\n StaticSourceType,\n} from \"../types\";\n\n/**\n * Static data source fetcher.\n *\n * Delegates to the injected DataSourceApi adapter to fetch products filtered\n * by collection, category, or tag.\n */\nexport async function staticFetcher(\n source: StaticDataSource,\n context: DataSourceContext,\n): Promise<unknown[]> {\n const { staticType, selectedId } = source;\n\n if (!context.api) {\n throw new Error(\n \"staticFetcher requires context.api — ensure a DataSourceApiProvider wraps this tree.\",\n );\n }\n\n // Validate filterId once at the shared delegation point so BFF and legacy\n // adapters behave identically. Tags are a known-unsupported type the\n // adapters throw for separately.\n if (staticType !== \"tags\" && Number.isNaN(Number(selectedId))) {\n throw new Error(\n `staticFetcher: selectedId must be numeric, got \"${selectedId}\"`,\n );\n }\n\n return context.api.fetchProductsByFilter(\n staticType,\n selectedId,\n context.signal,\n );\n}\n\n/**\n * Endpoints for listing static source items (collections, categories, tags).\n * Used by the portal builder UI for populating selection dropdowns.\n */\nexport const LIST_ENDPOINTS: Record<\n StaticSourceType,\n { endpoint: string; resultKey: string }\n> = {\n collections: {\n endpoint: \"/company/v1/collections\",\n resultKey: \"collections\",\n },\n categories: { endpoint: \"/company/v1/categories\", resultKey: \"categories\" },\n tags: { endpoint: \"/company/v1/tags\", resultKey: \"tags\" },\n};\n","/**\n * Widget Transformers\n *\n * Transform functions that map API response data to widget-specific prop shapes.\n * Each widget has one transformer that handles all data structure variants:\n * - Standard: Direct field name match\n * - Legacy: Different field names that need mapping\n * - Minimal: Bare minimum fields that need defaults\n *\n * Usage:\n * 1. Transformers are registered in the DataSourceRegistry\n * 2. Reference by name in ApiDataSource.transform\n * 3. Applied after resultPath extraction, before targetProps assignment\n */\n\nimport type { DataTransformer, DataSource } from \"./types\";\n\n/**\n * Helper to extract image URL from various API response structures.\n * Handles:\n * - Flat fields (Medium, Page, Product): image_url, imageUrl, thumbnail_url, src\n * - Nested images array (EnrollmentPack): images[0].image_url\n * - Nested library_items (Library): library_items[0].relateable.image_url\n */\nfunction extractImageUrl(d: Record<string, unknown>): string {\n // Try flat fields first (Medium, Page, Product)\n if (d.image_url) return d.image_url as string;\n if (d.imageUrl) return d.imageUrl as string;\n if (d.thumbnail_url) return d.thumbnail_url as string;\n if (d.src) return d.src as string;\n\n // Try nested images array (EnrollmentPack)\n const images = d.images as Array<Record<string, unknown>> | undefined;\n if (images && images.length > 0) {\n const firstImage = images[0];\n if (firstImage?.image_url) return firstImage.image_url as string;\n if (firstImage?.url) return firstImage.url as string;\n }\n\n // Try nested library_items (Library/Playlist)\n const libraryItems = d.library_items as\n | Array<Record<string, unknown>>\n | undefined;\n if (libraryItems && libraryItems.length > 0) {\n const firstItem = libraryItems[0];\n const relateable = firstItem?.relateable as\n | Record<string, unknown>\n | undefined;\n if (relateable?.image_url) return relateable.image_url as string;\n if (relateable?.imageUrl) return relateable.imageUrl as string;\n if (relateable?.thumbnail_url) return relateable.thumbnail_url as string;\n }\n\n return \"\";\n}\n\n/**\n * Helper to extract description from various API response structures.\n * Handles different field names across endpoints.\n */\nfunction extractDescription(d: Record<string, unknown>): string {\n // Try various description field names\n const desc =\n d.description ?? d.stripped ?? d.stripped_description ?? d.body ?? \"\";\n\n // Handle nested description object (some APIs return { body: \"...\" })\n if (typeof desc === \"object\" && desc !== null && \"body\" in desc) {\n return ((desc as Record<string, unknown>).body as string) ?? \"\";\n }\n\n return desc as string;\n}\n\n/**\n * Helper to extract custom widget config from a selected item.\n */\nfunction extractCustomWidgetConfig(\n d: Record<string, unknown>,\n source: DataSource | undefined,\n): Record<string, unknown> {\n if (source === undefined || source.type !== \"custom\") return {};\n\n const selectedItem = source.selectedItems.find(\n (s) => String(s.id) === String(d.id),\n );\n return selectedItem?.widgetConfig ?? {};\n}\n\n/**\n * ImageWidget transformer from shareable data\n */\nconst toImagePropsFromShareable: DataTransformer = (data) => {\n const item = Array.isArray(data) ? data[0] : data;\n if (!item || typeof item !== \"object\") {\n return { src: \"\", alt: \"Image\", objectFit: \"cover\" };\n }\n\n const d = item as Record<string, unknown>;\n return {\n src: extractImageUrl(d),\n alt: (d.title ?? d.name ?? d.alt ?? \"Image\") as string,\n objectFit: \"cover\" as const,\n };\n};\n\n/**\n * VideoWidget transformer from shareable data\n */\nconst toVideoPropsFromShareable: DataTransformer = (data) => {\n const item = Array.isArray(data) ? data[0] : data;\n if (!item || typeof item !== \"object\") {\n return { src: \"\", poster: \"\", caption: \"\" };\n }\n\n const d = item as Record<string, unknown>;\n return {\n src: ((d.video_url ?? d.videoUrl ?? d.src) as string) || \"\",\n poster: extractImageUrl(d),\n caption: (d.title ?? d.name ?? d.caption ?? \"\") as string,\n };\n};\n\n/**\n * Shareable content transformer\n * Normalizes shareable API responses to a consistent format\n */\nconst toShareableProps: DataTransformer = (data, source) => {\n if (!Array.isArray(data)) return [];\n\n // Derive a fallback shareable type from the data source configuration.\n // API presets pass shareable_type in their variables (e.g., \"products\").\n // Custom sources store it per-item (handled below).\n const sourceTypeHint =\n source?.type === \"api\" ? source.variables?.shareable_type : undefined;\n\n return data.map((item: unknown) => {\n const d = item as Record<string, unknown>;\n\n const widgetConfig = extractCustomWidgetConfig(d, source);\n\n // Resolve shareable type from the item itself, then fall back to source hint\n const shareableType = (d.type ??\n d.relateable_type ??\n d.shareable_type ??\n d.shareableType ??\n sourceTypeHint ??\n \"\") as string;\n\n return {\n ...d,\n id: d.id,\n title: (d.title ?? d.name ?? \"\") as string,\n description: extractDescription(d),\n imageUrl: extractImageUrl(d),\n videoUrl: ((d.video_url ?? d.videoUrl) as string) || null,\n shareableType,\n kind: (d.kind ?? \"image\") as string,\n status: (d.status ?? \"active\") as string,\n wholesalePrice: d.display_wholesale_price ?? d.wholesale_price ?? null,\n subscriptionPrice: d.subscription_price ?? null,\n outOfStock: d.out_of_stock ?? false,\n lowInStock: d.low_in_stock ?? false,\n ...widgetConfig,\n };\n });\n};\n\n/**\n * Carousel slides from shareables transformer\n */\nconst toCarouselSlidesFromShareables: DataTransformer = (data, source) => {\n if (!Array.isArray(data)) return [];\n\n return data.map((item: unknown, index: number) => {\n const d = item as Record<string, unknown>;\n\n const widgetConfig = extractCustomWidgetConfig(d, source);\n\n const imageUrl = extractImageUrl(d);\n const isVideo =\n d.kind === \"video\" ||\n d.content_format === \"video\" ||\n d.videoUrl ||\n d.video_url;\n const videoSrc =\n ((d.videoUrl ?? d.video_url) as string) ||\n (isVideo ? (d.url as string) || \"\" : \"\");\n const title = (d.title ?? d.name ?? \"\") as string;\n\n const content = isVideo\n ? {\n type: \"VideoWidget\",\n props: {\n src: videoSrc,\n poster: imageUrl,\n caption: title,\n autoplay: false,\n loop: false,\n muted: true,\n controls: true,\n },\n }\n : {\n type: \"ImageWidget\",\n props: {\n src: imageUrl,\n alt: title || \"Slide image\",\n objectFit: \"cover\",\n },\n };\n\n const baseSlide = {\n id: String(d.id ?? `slide-${index}`),\n content,\n title,\n description: extractDescription(d),\n };\n\n // Spread the raw shareable first so routing fields\n // (shareable_type, subscription_token, token, canonical_url, ...)\n // pass through to onItemClick in AppShell. Normalized baseSlide\n // overrides id/content/title/description; widgetConfig wins last.\n return {\n ...d,\n ...baseSlide,\n ...widgetConfig,\n };\n });\n};\n\n/**\n * Orders table transformer\n * Normalizes order list data into ShareableItem rows + column definitions.\n * Returns { data, columns } so multi-targetProp mapping sends each to the widget.\n */\nconst toOrderTableProps: DataTransformer = (data) => {\n const orders = Array.isArray(data) ? data : [];\n\n const columns = [\n { key: \"imageUrl\", label: \"Image\", sortable: false },\n { key: \"order_number\", label: \"Order #\", sortable: true },\n { key: \"price\", label: \"Total\", sortable: true },\n { key: \"status\", label: \"Status\", sortable: true },\n ];\n\n const rows = orders.map((item: unknown) => {\n const d = item as Record<string, unknown>;\n const firstItem = d.first_item as Record<string, unknown> | undefined;\n const amount = parseFloat(String(d.amount ?? \"0\")) || 0;\n\n return {\n ...d,\n id: d.id ?? d.token,\n shareableType: \"Order\",\n imageUrl: (firstItem?.image_url as string) || \"\",\n title: (firstItem?.title as string) || \"\",\n order_number: d.order_number ?? \"\",\n price: amount,\n display_price: (d.total_display_amount as string) ?? d.amount ?? \"\",\n status: (d.status as string) ?? \"unknown\",\n created_at: d.created_at,\n };\n });\n\n return { data: rows, columns };\n};\n\n/**\n * Subscriptions table transformer\n * Normalizes subscription list data into ShareableItem rows + column definitions.\n */\nconst toSubscriptionTableProps: DataTransformer = (data) => {\n const subscriptions = Array.isArray(data) ? data : [];\n\n const columns = [\n { key: \"imageUrl\", label: \"Image\", sortable: false },\n { key: \"title\", label: \"Product\", sortable: true },\n { key: \"price\", label: \"Price\", sortable: true },\n { key: \"status\", label: \"Status\", sortable: true },\n ];\n\n const rows = subscriptions.map((item: unknown) => {\n const d = item as Record<string, unknown>;\n const variant = d.variant as Record<string, unknown> | undefined;\n const product = variant?.product as Record<string, unknown> | undefined;\n\n return {\n ...d,\n id: d.id ?? d.subscription_token,\n shareableType: \"Subscription\",\n imageUrl: (product?.image_url as string) || \"\",\n title: (product?.title as string) || \"\",\n price: parseFloat(String(d.price ?? \"0\")) || 0,\n display_price:\n (product?.price_in_currency as string) ?? String(d.price ?? \"\"),\n status: (d.status as string) ?? \"unknown\",\n next_bill_date: d.next_bill_date,\n };\n });\n\n return { data: rows, columns };\n};\n\n/**\n * All widget transformers bundled for registration\n */\nexport const WIDGET_TRANSFORMERS: Record<string, DataTransformer> = {\n toShareableProps,\n toCarouselSlidesFromShareables,\n toImagePropsFromShareable,\n toVideoPropsFromShareable,\n toOrderTableProps,\n toSubscriptionTableProps,\n};\n","import type {\n DataSourceRegistry,\n DataFetcher,\n DataTransformer,\n DataSourceType,\n} from \"./types\";\nimport { apiFetcher } from \"./fetchers/api\";\nimport { customFetcher } from \"./fetchers/custom\";\nimport { staticFetcher } from \"./fetchers/static\";\nimport { WIDGET_TRANSFORMERS } from \"./transformers\";\n\nexport interface CreateDataSourceRegistryOptions {\n /** Custom fetchers to add or override */\n fetchers?: Partial<Record<DataSourceType, DataFetcher>>;\n /** Custom transform functions */\n transformers?: Record<string, DataTransformer>;\n}\n\n/**\n * Creates a data source registry with default fetchers.\n * Users can extend this with custom fetchers and transformers.\n */\nexport function createDataSourceRegistry(\n options?: CreateDataSourceRegistryOptions,\n): DataSourceRegistry {\n return {\n fetchers: {\n api: apiFetcher,\n custom: customFetcher,\n static: staticFetcher,\n ...options?.fetchers,\n } as Record<DataSourceType, DataFetcher>,\n transformers: {\n ...WIDGET_TRANSFORMERS,\n ...options?.transformers,\n },\n };\n}\n\n/** Default registry instance */\nexport const DEFAULT_DATA_SOURCE_REGISTRY: DataSourceRegistry =\n createDataSourceRegistry();\n","import type React from \"react\";\nimport { createContext, type ReactNode, use, useMemo } from \"react\";\n\nexport interface DataSourceContextValue {\n baseUrl?: string | undefined;\n getApiHeaders?: (() => Record<string, string>) | undefined;\n}\n\nconst DataSourceContext = createContext<DataSourceContextValue>({});\n\nexport interface DataSourceProviderProps {\n baseUrl?: string | undefined;\n getApiHeaders?: (() => Record<string, string>) | undefined;\n children: ReactNode;\n}\n\nexport function DataSourceProvider({\n baseUrl,\n getApiHeaders,\n children,\n}: DataSourceProviderProps): React.JSX.Element {\n const value = useMemo(\n () => ({ baseUrl, getApiHeaders }),\n [baseUrl, getApiHeaders],\n );\n\n return (\n <DataSourceContext.Provider value={value}>\n {children}\n </DataSourceContext.Provider>\n );\n}\n\nexport function useDataSourceConfig(): DataSourceContextValue {\n return use(DataSourceContext);\n}\n","import type React from \"react\";\nimport { createContext, type ReactNode, use, useMemo } from \"react\";\nimport type { DataSourceRegistry } from \"@fluid-app/portal-core/data-sources/types\";\nimport { DEFAULT_DATA_SOURCE_REGISTRY } from \"@fluid-app/portal-core/data-sources/registry\";\nimport { DataSourceProvider } from \"./context\";\n\ninterface DataSourceRegistryContextValue {\n registry: DataSourceRegistry;\n baseUrl?: string | undefined;\n /** Get API headers function */\n getApiHeaders?: (() => Record<string, string>) | undefined;\n /** Dynamic variables for endpoint path substitution (e.g., { rep_id: \"123\" }) */\n variables?: Record<string, string> | undefined;\n}\n\nconst DataSourceRegistryContext = createContext<DataSourceRegistryContextValue>(\n {\n registry: DEFAULT_DATA_SOURCE_REGISTRY,\n },\n);\n\nexport interface DataSourceRegistryProviderProps {\n registry?: DataSourceRegistry | undefined;\n /** Base URL for API calls (e.g., \"https://api.fluid.app/api\") */\n baseUrl?: string | undefined;\n /**\n * Get API headers function\n */\n getApiHeaders?: (() => Record<string, string>) | undefined;\n /** Dynamic variables for endpoint path substitution (e.g., { rep_id: \"123\" }) */\n variables?: Record<string, string> | undefined;\n children: ReactNode;\n}\n\n/**\n * Provides data source registry and configuration to all descendants.\n * If no registry is provided, uses the default.\n * Also provides the shared DataSourceProvider from portal-core so that\n * portal-widgets hooks can access baseUrl and getApiHeaders.\n *\n * The DataSourceApi adapter is provided separately via DataSourceApiProvider.\n */\nexport function DataSourceRegistryProvider({\n registry,\n baseUrl,\n getApiHeaders,\n variables,\n children,\n}: DataSourceRegistryProviderProps): React.JSX.Element {\n const value = useMemo(\n () => ({\n registry: registry ?? DEFAULT_DATA_SOURCE_REGISTRY,\n baseUrl,\n getApiHeaders,\n variables,\n }),\n [registry, baseUrl, getApiHeaders, variables],\n );\n\n return (\n <DataSourceRegistryContext.Provider value={value}>\n <DataSourceProvider baseUrl={baseUrl} getApiHeaders={getApiHeaders}>\n {children}\n </DataSourceProvider>\n </DataSourceRegistryContext.Provider>\n );\n}\n\n/**\n * Hook to access the data source registry.\n */\nexport function useDataSourceRegistry(): DataSourceRegistry {\n return use(DataSourceRegistryContext).registry;\n}\n\n/**\n * Hook to access the full data source registry context (registry + config).\n */\nexport function useDataSourceRegistryConfig(): DataSourceRegistryContextValue {\n return use(DataSourceRegistryContext);\n}\n"],"mappings":"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"}
@@ -328,11 +328,15 @@ const toCarouselSlidesFromShareables = (data, source) => {
328
328
  objectFit: "cover"
329
329
  }
330
330
  };
331
- return {
331
+ const baseSlide = {
332
332
  id: String(d.id ?? `slide-${index}`),
333
333
  content,
334
334
  title,
335
- description: extractDescription(d),
335
+ description: extractDescription(d)
336
+ };
337
+ return {
338
+ ...d,
339
+ ...baseSlide,
336
340
  ...widgetConfig
337
341
  };
338
342
  });
@@ -517,4 +521,4 @@ function useDataSourceRegistryConfig() {
517
521
  //#endregion
518
522
  export { useDataSourceRegistryConfig as n, SHAREABLE_TO_RESOURCE_TYPE as r, DataSourceRegistryProvider as t };
519
523
 
520
- //# sourceMappingURL=registry-context-DWAhoLQA.mjs.map
524
+ //# sourceMappingURL=registry-context-CSsT6Rtk.mjs.map