@fluid-app/portal-sdk 0.1.297 → 0.1.299

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 (204) hide show
  1. package/dist/{CalendarWidget-DW7jTZf3.mjs → CalendarWidget-BQP9CfCI.mjs} +2 -2
  2. package/dist/{CalendarWidget-DW7jTZf3.mjs.map → CalendarWidget-BQP9CfCI.mjs.map} +1 -1
  3. package/dist/{CalendarWidget-C0F4Tn6V.cjs → CalendarWidget-D-ccEA_l.cjs} +2 -2
  4. package/dist/{CalendarWidget-C0F4Tn6V.cjs.map → CalendarWidget-D-ccEA_l.cjs.map} +1 -1
  5. package/dist/{CardWidget-DHH4OIIs.cjs → CardWidget-CYhmSVgN.cjs} +3 -3
  6. package/dist/{CardWidget-D6CDrYMH.cjs → CardWidget-Ck84gmPU.cjs} +2 -2
  7. package/dist/{CardWidget-D6CDrYMH.cjs.map → CardWidget-Ck84gmPU.cjs.map} +1 -1
  8. package/dist/{CardWidget-B6W_LADC.mjs → CardWidget-DfY3Lrm_.mjs} +2 -2
  9. package/dist/{CardWidget-B6W_LADC.mjs.map → CardWidget-DfY3Lrm_.mjs.map} +1 -1
  10. package/dist/{CatchUpWidget-z6QHlvp8.mjs → CatchUpWidget-BtEH9EHQ.mjs} +2 -2
  11. package/dist/{CatchUpWidget-z6QHlvp8.mjs.map → CatchUpWidget-BtEH9EHQ.mjs.map} +1 -1
  12. package/dist/{CatchUpWidget-CjemRhbH.cjs → CatchUpWidget-DrYyYWHQ.cjs} +2 -2
  13. package/dist/{CatchUpWidget-CjemRhbH.cjs.map → CatchUpWidget-DrYyYWHQ.cjs.map} +1 -1
  14. package/dist/{ContainerWidget-CDwBQfHU.cjs → ContainerWidget-BEHhDggR.cjs} +2 -2
  15. package/dist/{ContainerWidget-CDwBQfHU.cjs.map → ContainerWidget-BEHhDggR.cjs.map} +1 -1
  16. package/dist/ContainerWidget-CPZH6TiA.cjs +8 -0
  17. package/dist/{ContainerWidget-DjhBudsq.mjs → ContainerWidget-DBRBSg15.mjs} +2 -2
  18. package/dist/{ContainerWidget-DjhBudsq.mjs.map → ContainerWidget-DBRBSg15.mjs.map} +1 -1
  19. package/dist/{FluidProvider-DTDhVSLQ.mjs → FluidProvider-BBxURUBq.mjs} +21 -21
  20. package/dist/{FluidProvider-DTDhVSLQ.mjs.map → FluidProvider-BBxURUBq.mjs.map} +1 -1
  21. package/dist/{FluidProvider-0sOzJmJn.cjs → FluidProvider-CBuTpv9I.cjs} +21 -21
  22. package/dist/{FluidProvider-0sOzJmJn.cjs.map → FluidProvider-CBuTpv9I.cjs.map} +1 -1
  23. package/dist/{LayoutWidget-DTgEFTTC.mjs → LayoutWidget-DYekGAi3.mjs} +2 -2
  24. package/dist/{LayoutWidget-DTgEFTTC.mjs.map → LayoutWidget-DYekGAi3.mjs.map} +1 -1
  25. package/dist/{LayoutWidget-CkBCBeVz.cjs → LayoutWidget-LfbpniWh.cjs} +3 -3
  26. package/dist/{LayoutWidget-DvhG2-qb.cjs → LayoutWidget-XlOfo8WQ.cjs} +2 -2
  27. package/dist/{LayoutWidget-DvhG2-qb.cjs.map → LayoutWidget-XlOfo8WQ.cjs.map} +1 -1
  28. package/dist/{MessagingScreen-HRUVbuPI.cjs → MessagingScreen-BD8ERG5Y.cjs} +2 -2
  29. package/dist/{MessagingScreen-HRUVbuPI.cjs.map → MessagingScreen-BD8ERG5Y.cjs.map} +1 -1
  30. package/dist/{MessagingScreen-C_A5ue9W.mjs → MessagingScreen-BcV-HK8F.mjs} +13 -13
  31. package/dist/{MessagingScreen-D6kpqIC2.cjs → MessagingScreen-DoeAiV25.cjs} +13 -13
  32. package/dist/{MessagingScreen-Ja-iZNt3.mjs → MessagingScreen-ZvDwEc5y.mjs} +2 -2
  33. package/dist/{MessagingScreen-Ja-iZNt3.mjs.map → MessagingScreen-ZvDwEc5y.mjs.map} +1 -1
  34. package/dist/{MySiteWidget-B7sG9bQJ.mjs → MySiteWidget-D8UtttYC.mjs} +2 -2
  35. package/dist/{MySiteWidget-B7sG9bQJ.mjs.map → MySiteWidget-D8UtttYC.mjs.map} +1 -1
  36. package/dist/{MySiteWidget-DnHHWYX3.cjs → MySiteWidget-Pw7jVaF7.cjs} +2 -2
  37. package/dist/{MySiteWidget-DnHHWYX3.cjs.map → MySiteWidget-Pw7jVaF7.cjs.map} +1 -1
  38. package/dist/{OrdersScreen-BXUHSjbo.mjs → OrdersScreen-CFfrQG4i.mjs} +22 -22
  39. package/dist/{OrdersScreen-BXUHSjbo.mjs.map → OrdersScreen-CFfrQG4i.mjs.map} +1 -1
  40. package/dist/{OrdersScreen-DLcCvJE9.cjs → OrdersScreen-CS1xA9q5.cjs} +22 -22
  41. package/dist/{OrdersScreen-DLcCvJE9.cjs.map → OrdersScreen-CS1xA9q5.cjs.map} +1 -1
  42. package/dist/{OrdersScreen-m4lUKact.mjs → OrdersScreen-DoopejMR.mjs} +13 -13
  43. package/dist/{OrdersScreen-UvG6Q5NK.cjs → OrdersScreen-sLr0z213.cjs} +13 -13
  44. package/dist/{PointsWidget-DGLpUoZw.mjs → PointsWidget-4tTrD6UA.mjs} +2 -2
  45. package/dist/{PointsWidget-DGLpUoZw.mjs.map → PointsWidget-4tTrD6UA.mjs.map} +1 -1
  46. package/dist/{PointsWidget-COBlvYry.cjs → PointsWidget-BeiXr9cO.cjs} +2 -2
  47. package/dist/{PointsWidget-COBlvYry.cjs.map → PointsWidget-BeiXr9cO.cjs.map} +1 -1
  48. package/dist/{ProfileScreen-CHWtLOmi.cjs → ProfileScreen-BCR3FU5g.cjs} +2 -2
  49. package/dist/{ProfileScreen-CHWtLOmi.cjs.map → ProfileScreen-BCR3FU5g.cjs.map} +1 -1
  50. package/dist/{ProfileScreen-BEDzcVzD.mjs → ProfileScreen-CefqZr-Q.mjs} +2 -2
  51. package/dist/{ProfileScreen-BEDzcVzD.mjs.map → ProfileScreen-CefqZr-Q.mjs.map} +1 -1
  52. package/dist/{ProfileScreen-Dzgilark.cjs → ProfileScreen-CwP66ls2.cjs} +13 -13
  53. package/dist/{ProfileScreen-BkQl6-ED.mjs → ProfileScreen-wj0KTaQF.mjs} +13 -13
  54. package/dist/{RecentActivityWidget-C47O-9dM.mjs → RecentActivityWidget-C9fWPsVD.mjs} +2 -2
  55. package/dist/{RecentActivityWidget-C47O-9dM.mjs.map → RecentActivityWidget-C9fWPsVD.mjs.map} +1 -1
  56. package/dist/{RecentActivityWidget-BS9oXu_h.cjs → RecentActivityWidget-CsZPHcY4.cjs} +2 -2
  57. package/dist/{RecentActivityWidget-BS9oXu_h.cjs.map → RecentActivityWidget-CsZPHcY4.cjs.map} +1 -1
  58. package/dist/{ScreenRenderer-6qtnq9PQ.cjs → ScreenRenderer-BQZygrNq.cjs} +141 -33
  59. package/dist/ScreenRenderer-BQZygrNq.cjs.map +1 -0
  60. package/dist/{ScreenRenderer-CuaL4ulD.mjs → ScreenRenderer-wC15Ys7_.mjs} +141 -33
  61. package/dist/ScreenRenderer-wC15Ys7_.mjs.map +1 -0
  62. package/dist/{ShopScreen-CigQWMVH.mjs → ShopScreen-BKMR1rdM.mjs} +13 -13
  63. package/dist/{ShopScreen-FAgW632j.cjs → ShopScreen-CZdXE7dM.cjs} +2 -2
  64. package/dist/{ShopScreen-FAgW632j.cjs.map → ShopScreen-CZdXE7dM.cjs.map} +1 -1
  65. package/dist/{ShopScreen-BmP7vkuc.mjs → ShopScreen-DdAmK5yn.mjs} +2 -2
  66. package/dist/{ShopScreen-BmP7vkuc.mjs.map → ShopScreen-DdAmK5yn.mjs.map} +1 -1
  67. package/dist/{ShopScreen-DGMPFzcV.cjs → ShopScreen-xfPTLG5b.cjs} +13 -13
  68. package/dist/{ToDoWidget-DJiV9a3T.cjs → ToDoWidget-B_E2o_7m.cjs} +2 -2
  69. package/dist/{ToDoWidget-IKwBkpj3.mjs → ToDoWidget-CXhlO0BY.mjs} +2 -2
  70. package/dist/{ToDoWidget-IKwBkpj3.mjs.map → ToDoWidget-CXhlO0BY.mjs.map} +1 -1
  71. package/dist/{ToDoWidget-boT2GH5o.cjs → ToDoWidget-D6sXCE2R.cjs} +2 -2
  72. package/dist/{ToDoWidget-boT2GH5o.cjs.map → ToDoWidget-D6sXCE2R.cjs.map} +1 -1
  73. package/dist/{de-QlGOEZGy.cjs → de-ClkzhQyk.cjs} +30 -2
  74. package/dist/de-ClkzhQyk.cjs.map +1 -0
  75. package/dist/{de-B-uwPmjj.mjs → de-Cz5nQc2P.mjs} +30 -2
  76. package/dist/de-Cz5nQc2P.mjs.map +1 -0
  77. package/dist/{el-MjrGkcHW.mjs → el-Cmtxpe1T.mjs} +30 -2
  78. package/dist/el-Cmtxpe1T.mjs.map +1 -0
  79. package/dist/{el-DAeIMpXz.cjs → el-xYUkcA0F.cjs} +30 -2
  80. package/dist/el-xYUkcA0F.cjs.map +1 -0
  81. package/dist/{es-B4UxEkx1.cjs → es--Ii1daQT.cjs} +30 -2
  82. package/dist/es--Ii1daQT.cjs.map +1 -0
  83. package/dist/{es-BIkKiyX7.mjs → es-USJBo7W-.mjs} +30 -2
  84. package/dist/es-USJBo7W-.mjs.map +1 -0
  85. package/dist/{fr-DXUMog75.cjs → fr-BE3ENoQp.cjs} +30 -2
  86. package/dist/fr-BE3ENoQp.cjs.map +1 -0
  87. package/dist/{fr-UcYQtYjY.mjs → fr-CfzusUUg.mjs} +30 -2
  88. package/dist/fr-CfzusUUg.mjs.map +1 -0
  89. package/dist/{he-C3_TRHIa.mjs → he-B7GRtzIC.mjs} +30 -2
  90. package/dist/he-B7GRtzIC.mjs.map +1 -0
  91. package/dist/{he-pLJ_5Kq6.cjs → he-BZHcKgVT.cjs} +30 -2
  92. package/dist/he-BZHcKgVT.cjs.map +1 -0
  93. package/dist/{hu-DjkUKlRo.cjs → hu-DCYGavXt.cjs} +30 -2
  94. package/dist/hu-DCYGavXt.cjs.map +1 -0
  95. package/dist/{hu-CVjzZEtD.mjs → hu-Y7jWm65Y.mjs} +30 -2
  96. package/dist/hu-Y7jWm65Y.mjs.map +1 -0
  97. package/dist/{id-DmdLoM6l.cjs → id-DKWxSAWh.cjs} +30 -2
  98. package/dist/id-DKWxSAWh.cjs.map +1 -0
  99. package/dist/{id-C-LnxphU.mjs → id-zyHygAyX.mjs} +30 -2
  100. package/dist/id-zyHygAyX.mjs.map +1 -0
  101. package/dist/index.cjs +24 -24
  102. package/dist/index.mjs +24 -24
  103. package/dist/{it-hDNg0xS5.cjs → it-BcuD4caS.cjs} +30 -2
  104. package/dist/it-BcuD4caS.cjs.map +1 -0
  105. package/dist/{it-DDagls35.mjs → it-DQhrs0B3.mjs} +30 -2
  106. package/dist/it-DQhrs0B3.mjs.map +1 -0
  107. package/dist/{ja-BQq0ZY84.mjs → ja-BSfT26uu.mjs} +30 -2
  108. package/dist/ja-BSfT26uu.mjs.map +1 -0
  109. package/dist/{ja-BNo2qopC.cjs → ja-Brf5Dnuo.cjs} +30 -2
  110. package/dist/ja-Brf5Dnuo.cjs.map +1 -0
  111. package/dist/{ko-DC1g8-tK.mjs → ko-BpmZXSAa.mjs} +30 -2
  112. package/dist/ko-BpmZXSAa.mjs.map +1 -0
  113. package/dist/{ko-byhvh0Lq.cjs → ko-C6R1Z59u.cjs} +30 -2
  114. package/dist/ko-C6R1Z59u.cjs.map +1 -0
  115. package/dist/{nl-CwVivpHd.cjs → nl-BxLbAFQQ.cjs} +30 -2
  116. package/dist/nl-BxLbAFQQ.cjs.map +1 -0
  117. package/dist/{nl-CX6_hYy1.mjs → nl-CaM-k9hR.mjs} +30 -2
  118. package/dist/nl-CaM-k9hR.mjs.map +1 -0
  119. package/dist/{pl-hAsYMW4Q.cjs → pl--nF173mM.cjs} +30 -2
  120. package/dist/pl--nF173mM.cjs.map +1 -0
  121. package/dist/{pl-CtB0f73D.mjs → pl-C7W0DNJl.mjs} +30 -2
  122. package/dist/pl-C7W0DNJl.mjs.map +1 -0
  123. package/dist/{pt-BYUAX2Nd.cjs → pt-ByFNEOUY.cjs} +30 -2
  124. package/dist/pt-ByFNEOUY.cjs.map +1 -0
  125. package/dist/{pt-BOe_ybjs.mjs → pt-DODtfN2-.mjs} +30 -2
  126. package/dist/pt-DODtfN2-.mjs.map +1 -0
  127. package/dist/{registry-context-DZOQLVi4.cjs → registry-context-D2pft0tu.cjs} +7 -1
  128. package/dist/registry-context-D2pft0tu.cjs.map +1 -0
  129. package/dist/{registry-context-DdfXs3K3.mjs → registry-context-gb8MAG9c.mjs} +2 -2
  130. package/dist/registry-context-gb8MAG9c.mjs.map +1 -0
  131. package/dist/{ro-CyFWlCId.mjs → ro-BkVFoghA.mjs} +30 -2
  132. package/dist/ro-BkVFoghA.mjs.map +1 -0
  133. package/dist/{ro-8HRVaQd8.cjs → ro-DSG7g_Eg.cjs} +30 -2
  134. package/dist/ro-DSG7g_Eg.cjs.map +1 -0
  135. package/dist/{ru-C4w5j7U8.cjs → ru-CEa6o4U6.cjs} +30 -2
  136. package/dist/ru-CEa6o4U6.cjs.map +1 -0
  137. package/dist/{ru-C2MhVmiO.mjs → ru-Ckjyb6C_.mjs} +30 -2
  138. package/dist/ru-Ckjyb6C_.mjs.map +1 -0
  139. package/dist/{th-3rUTfCET.cjs → th-B-B9DqNL.cjs} +30 -2
  140. package/dist/th-B-B9DqNL.cjs.map +1 -0
  141. package/dist/{th-4OsCxFTA.mjs → th-BPEqNs_o.mjs} +30 -2
  142. package/dist/th-BPEqNs_o.mjs.map +1 -0
  143. package/dist/{tl-B1T8FGGj.mjs → tl-BKgFqe6p.mjs} +30 -2
  144. package/dist/tl-BKgFqe6p.mjs.map +1 -0
  145. package/dist/{tl-D7mnvQzN.cjs → tl-DWc6uDBH.cjs} +30 -2
  146. package/dist/tl-DWc6uDBH.cjs.map +1 -0
  147. package/dist/{tr-BE8Jk9TC.cjs → tr-Babw-nAu.cjs} +30 -2
  148. package/dist/tr-Babw-nAu.cjs.map +1 -0
  149. package/dist/{tr-4pTW71VA.mjs → tr-DYQVMuDz.mjs} +30 -2
  150. package/dist/tr-DYQVMuDz.mjs.map +1 -0
  151. package/dist/{zh_CN-4_WDYWR5.mjs → zh_CN-BVUR-5lS.mjs} +30 -2
  152. package/dist/zh_CN-BVUR-5lS.mjs.map +1 -0
  153. package/dist/{zh_CN-E93-XJzR.cjs → zh_CN-C7F-Klc8.cjs} +30 -2
  154. package/dist/zh_CN-C7F-Klc8.cjs.map +1 -0
  155. package/dist/{zh_TW-DQgMJMZA.mjs → zh_TW-3KZC2KaP.mjs} +30 -2
  156. package/dist/zh_TW-3KZC2KaP.mjs.map +1 -0
  157. package/dist/{zh_TW-CV1NLO2F.cjs → zh_TW-DMDvN-wL.cjs} +30 -2
  158. package/dist/zh_TW-DMDvN-wL.cjs.map +1 -0
  159. package/package.json +14 -14
  160. package/dist/ContainerWidget-CBksBaz3.cjs +0 -8
  161. package/dist/ScreenRenderer-6qtnq9PQ.cjs.map +0 -1
  162. package/dist/ScreenRenderer-CuaL4ulD.mjs.map +0 -1
  163. package/dist/de-B-uwPmjj.mjs.map +0 -1
  164. package/dist/de-QlGOEZGy.cjs.map +0 -1
  165. package/dist/el-DAeIMpXz.cjs.map +0 -1
  166. package/dist/el-MjrGkcHW.mjs.map +0 -1
  167. package/dist/es-B4UxEkx1.cjs.map +0 -1
  168. package/dist/es-BIkKiyX7.mjs.map +0 -1
  169. package/dist/fr-DXUMog75.cjs.map +0 -1
  170. package/dist/fr-UcYQtYjY.mjs.map +0 -1
  171. package/dist/he-C3_TRHIa.mjs.map +0 -1
  172. package/dist/he-pLJ_5Kq6.cjs.map +0 -1
  173. package/dist/hu-CVjzZEtD.mjs.map +0 -1
  174. package/dist/hu-DjkUKlRo.cjs.map +0 -1
  175. package/dist/id-C-LnxphU.mjs.map +0 -1
  176. package/dist/id-DmdLoM6l.cjs.map +0 -1
  177. package/dist/it-DDagls35.mjs.map +0 -1
  178. package/dist/it-hDNg0xS5.cjs.map +0 -1
  179. package/dist/ja-BNo2qopC.cjs.map +0 -1
  180. package/dist/ja-BQq0ZY84.mjs.map +0 -1
  181. package/dist/ko-DC1g8-tK.mjs.map +0 -1
  182. package/dist/ko-byhvh0Lq.cjs.map +0 -1
  183. package/dist/nl-CX6_hYy1.mjs.map +0 -1
  184. package/dist/nl-CwVivpHd.cjs.map +0 -1
  185. package/dist/pl-CtB0f73D.mjs.map +0 -1
  186. package/dist/pl-hAsYMW4Q.cjs.map +0 -1
  187. package/dist/pt-BOe_ybjs.mjs.map +0 -1
  188. package/dist/pt-BYUAX2Nd.cjs.map +0 -1
  189. package/dist/registry-context-DZOQLVi4.cjs.map +0 -1
  190. package/dist/registry-context-DdfXs3K3.mjs.map +0 -1
  191. package/dist/ro-8HRVaQd8.cjs.map +0 -1
  192. package/dist/ro-CyFWlCId.mjs.map +0 -1
  193. package/dist/ru-C2MhVmiO.mjs.map +0 -1
  194. package/dist/ru-C4w5j7U8.cjs.map +0 -1
  195. package/dist/th-3rUTfCET.cjs.map +0 -1
  196. package/dist/th-4OsCxFTA.mjs.map +0 -1
  197. package/dist/tl-B1T8FGGj.mjs.map +0 -1
  198. package/dist/tl-D7mnvQzN.cjs.map +0 -1
  199. package/dist/tr-4pTW71VA.mjs.map +0 -1
  200. package/dist/tr-BE8Jk9TC.cjs.map +0 -1
  201. package/dist/zh_CN-4_WDYWR5.mjs.map +0 -1
  202. package/dist/zh_CN-E93-XJzR.cjs.map +0 -1
  203. package/dist/zh_TW-CV1NLO2F.cjs.map +0 -1
  204. package/dist/zh_TW-DQgMJMZA.mjs.map +0 -1
@@ -5,25 +5,44 @@ var pl_default = {
5
5
  breadcrumb: "Zamówienia",
6
6
  breadcrumb_detail: "Zamówienie #{{id}}",
7
7
  card_ending_in: "{{brand}} kończąca się na {{last4}}",
8
+ card_fallback: "Karta",
8
9
  customer: "Klient",
9
10
  date: "Data",
10
11
  delivery_label: "Dostawa:",
11
12
  discount: "Rabat",
12
13
  email: "Email",
14
+ empty_hint: "Twoje zamówienia pojawią się tutaj po ich złożeniu.",
13
15
  error_generic: "Wystąpił błąd",
14
16
  error_loading_order: "Nie udało się załadować zamówienia: {{message}}",
15
17
  estimated_delivery: "Szacunkowa dostawa: {{estimate}}",
18
+ filter_all: "Wszystkie",
19
+ filter_delivered: "Dostarczone",
20
+ filter_preparing: "W przygotowaniu",
21
+ filter_subscription: "Subskrypcja",
22
+ from_subscription: "Z subskrypcji",
16
23
  fulfillment_label: "Realizacja:",
24
+ group_this_month: "W tym miesiącu",
25
+ group_this_week: "W tym tygodniu",
17
26
  items_count: "Przedmioty ({{count}})",
27
+ last_week: "Ubiegły tydzień",
28
+ load_failed_hint: "Coś poszło nie tak. Spróbuj ponownie.",
29
+ load_failed_title: "Nie udało się wczytać Twoich zamówień",
30
+ load_more: "Załaduj więcej",
31
+ loading: "Ładowanie...",
32
+ more_items: "+ {{n}} więcej",
33
+ n_days_ago: "{{n}} dni temu",
34
+ n_weeks_ago: "{{n}} tygodni temu",
18
35
  next: "Następna",
19
36
  no_image: "Brak obrazu",
20
37
  no_image_available: "Brak dostępnego obrazu",
21
38
  no_matching_orders: "Brak pasujących zamówień",
22
39
  no_orders_found: "Nie znaleziono zamówień",
40
+ no_orders_yet: "Brak zamówień",
23
41
  no_payment_method: "Brak sposobu płatności",
24
42
  no_shipping_address: "Brak dostępnego adresu dostawy",
25
43
  of: "z",
26
44
  order: "Zamówienie",
45
+ order_history: "Historia zamówień",
27
46
  order_info: "Informacje o zamówieniu",
28
47
  order_not_found: "Zamówienie nie znalezione",
29
48
  order_number: "Zamówienie #",
@@ -40,15 +59,21 @@ var pl_default = {
40
59
  previous: "Poprzednia",
41
60
  product: "Produkt",
42
61
  results: "wyniki",
62
+ search_hint: "Spróbuj innego terminu wyszukiwania.",
43
63
  search_orders: "Szukaj zamówień...",
44
64
  shipping: "Dostawa",
45
65
  shipping_address: "Adres dostawy",
66
+ shipping_address_map: "Mapa adresu dostawy",
46
67
  shipping_free: "Bezpłatnie",
47
68
  shipping_method: "Sposób dostawy",
48
69
  showing: "Wyświetlanie",
49
70
  sku_label: "SKU: {{sku}}",
50
71
  status: "Status",
72
+ status_delivered: "Dostarczone",
51
73
  status_label: "Status:",
74
+ status_preparing: "W przygotowaniu",
75
+ status_processing: "Przetwarzanie",
76
+ status_shipped: "Wysłane",
52
77
  subscription: "Subskrypcja",
53
78
  subscription_hash: "Subskrypcja #{{token}}",
54
79
  subtotal: "Subtotal",
@@ -56,8 +81,11 @@ var pl_default = {
56
81
  tax_included: "{{name}}, wliczony",
57
82
  this_product_no_longer_exists: "Ten produkt już nie istnieje",
58
83
  to: "do",
84
+ today: "Dzisiaj",
59
85
  total: "Razem",
60
- view_subscription: "Wyświetl subskrypcję"
86
+ try_again: "Spróbuj ponownie",
87
+ view_subscription: "Wyświetl subskrypcję",
88
+ yesterday: "Wczoraj"
61
89
  };
62
90
  //#endregion
63
91
  Object.defineProperty(exports, "default", {
@@ -67,4 +95,4 @@ Object.defineProperty(exports, "default", {
67
95
  }
68
96
  });
69
97
 
70
- //# sourceMappingURL=pl-hAsYMW4Q.cjs.map
98
+ //# sourceMappingURL=pl--nF173mM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pl--nF173mM.cjs","names":[],"sources":["../../../orders/core/src/locale/pl.json"],"sourcesContent":[""],"mappings":""}
@@ -4,25 +4,44 @@ var pl_default = {
4
4
  breadcrumb: "Zamówienia",
5
5
  breadcrumb_detail: "Zamówienie #{{id}}",
6
6
  card_ending_in: "{{brand}} kończąca się na {{last4}}",
7
+ card_fallback: "Karta",
7
8
  customer: "Klient",
8
9
  date: "Data",
9
10
  delivery_label: "Dostawa:",
10
11
  discount: "Rabat",
11
12
  email: "Email",
13
+ empty_hint: "Twoje zamówienia pojawią się tutaj po ich złożeniu.",
12
14
  error_generic: "Wystąpił błąd",
13
15
  error_loading_order: "Nie udało się załadować zamówienia: {{message}}",
14
16
  estimated_delivery: "Szacunkowa dostawa: {{estimate}}",
17
+ filter_all: "Wszystkie",
18
+ filter_delivered: "Dostarczone",
19
+ filter_preparing: "W przygotowaniu",
20
+ filter_subscription: "Subskrypcja",
21
+ from_subscription: "Z subskrypcji",
15
22
  fulfillment_label: "Realizacja:",
23
+ group_this_month: "W tym miesiącu",
24
+ group_this_week: "W tym tygodniu",
16
25
  items_count: "Przedmioty ({{count}})",
26
+ last_week: "Ubiegły tydzień",
27
+ load_failed_hint: "Coś poszło nie tak. Spróbuj ponownie.",
28
+ load_failed_title: "Nie udało się wczytać Twoich zamówień",
29
+ load_more: "Załaduj więcej",
30
+ loading: "Ładowanie...",
31
+ more_items: "+ {{n}} więcej",
32
+ n_days_ago: "{{n}} dni temu",
33
+ n_weeks_ago: "{{n}} tygodni temu",
17
34
  next: "Następna",
18
35
  no_image: "Brak obrazu",
19
36
  no_image_available: "Brak dostępnego obrazu",
20
37
  no_matching_orders: "Brak pasujących zamówień",
21
38
  no_orders_found: "Nie znaleziono zamówień",
39
+ no_orders_yet: "Brak zamówień",
22
40
  no_payment_method: "Brak sposobu płatności",
23
41
  no_shipping_address: "Brak dostępnego adresu dostawy",
24
42
  of: "z",
25
43
  order: "Zamówienie",
44
+ order_history: "Historia zamówień",
26
45
  order_info: "Informacje o zamówieniu",
27
46
  order_not_found: "Zamówienie nie znalezione",
28
47
  order_number: "Zamówienie #",
@@ -39,15 +58,21 @@ var pl_default = {
39
58
  previous: "Poprzednia",
40
59
  product: "Produkt",
41
60
  results: "wyniki",
61
+ search_hint: "Spróbuj innego terminu wyszukiwania.",
42
62
  search_orders: "Szukaj zamówień...",
43
63
  shipping: "Dostawa",
44
64
  shipping_address: "Adres dostawy",
65
+ shipping_address_map: "Mapa adresu dostawy",
45
66
  shipping_free: "Bezpłatnie",
46
67
  shipping_method: "Sposób dostawy",
47
68
  showing: "Wyświetlanie",
48
69
  sku_label: "SKU: {{sku}}",
49
70
  status: "Status",
71
+ status_delivered: "Dostarczone",
50
72
  status_label: "Status:",
73
+ status_preparing: "W przygotowaniu",
74
+ status_processing: "Przetwarzanie",
75
+ status_shipped: "Wysłane",
51
76
  subscription: "Subskrypcja",
52
77
  subscription_hash: "Subskrypcja #{{token}}",
53
78
  subtotal: "Subtotal",
@@ -55,10 +80,13 @@ var pl_default = {
55
80
  tax_included: "{{name}}, wliczony",
56
81
  this_product_no_longer_exists: "Ten produkt już nie istnieje",
57
82
  to: "do",
83
+ today: "Dzisiaj",
58
84
  total: "Razem",
59
- view_subscription: "Wyświetl subskrypcję"
85
+ try_again: "Spróbuj ponownie",
86
+ view_subscription: "Wyświetl subskrypcję",
87
+ yesterday: "Wczoraj"
60
88
  };
61
89
  //#endregion
62
90
  export { pl_default as default };
63
91
 
64
- //# sourceMappingURL=pl-CtB0f73D.mjs.map
92
+ //# sourceMappingURL=pl-C7W0DNJl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pl-C7W0DNJl.mjs","names":[],"sources":["../../../orders/core/src/locale/pl.json"],"sourcesContent":[""],"mappings":""}
@@ -5,25 +5,44 @@ var pt_default = {
5
5
  breadcrumb: "Pedidos",
6
6
  breadcrumb_detail: "Pedido #{{id}}",
7
7
  card_ending_in: "{{brand}} terminando em {{last4}}",
8
+ card_fallback: "Cartão",
8
9
  customer: "Cliente",
9
10
  date: "Data",
10
11
  delivery_label: "Entrega:",
11
12
  discount: "Desconto",
12
13
  email: "E-mail",
14
+ empty_hint: "Seus pedidos aparecerão aqui após você fazer um.",
13
15
  error_generic: "Ocorreu um erro",
14
16
  error_loading_order: "Falha ao carregar pedido: {{message}}",
15
17
  estimated_delivery: "Entrega Est. {{estimate}}",
18
+ filter_all: "Todos",
19
+ filter_delivered: "Entregue",
20
+ filter_preparing: "Preparando",
21
+ filter_subscription: "Assinatura",
22
+ from_subscription: "Da assinatura",
16
23
  fulfillment_label: "Processamento:",
24
+ group_this_month: "Este mês",
25
+ group_this_week: "Esta semana",
17
26
  items_count: "Itens ({{count}})",
27
+ last_week: "Semana passada",
28
+ load_failed_hint: "Algo deu errado da nossa parte. Tente novamente.",
29
+ load_failed_title: "Não foi possível carregar seus pedidos",
30
+ load_more: "Carregar mais",
31
+ loading: "Carregando...",
32
+ more_items: "+ {{n}} mais",
33
+ n_days_ago: "{{n}} dias atrás",
34
+ n_weeks_ago: "{{n}} semanas atrás",
18
35
  next: "Próximo",
19
36
  no_image: "Sem imagem",
20
37
  no_image_available: "Nenhuma imagem disponível",
21
38
  no_matching_orders: "Nenhum pedido correspondente",
22
39
  no_orders_found: "Nenhum pedido encontrado",
40
+ no_orders_yet: "Nenhum pedido ainda",
23
41
  no_payment_method: "Nenhum método de pagamento",
24
42
  no_shipping_address: "Nenhum endereço de entrega disponível",
25
43
  of: "de",
26
44
  order: "Pedido",
45
+ order_history: "Histórico de pedidos",
27
46
  order_info: "Informações do Pedido",
28
47
  order_not_found: "Pedido não encontrado",
29
48
  order_number: "Pedido #",
@@ -40,15 +59,21 @@ var pt_default = {
40
59
  previous: "Anterior",
41
60
  product: "Produto",
42
61
  results: "resultados",
62
+ search_hint: "Tente um termo de busca diferente.",
43
63
  search_orders: "Pesquisar pedidos...",
44
64
  shipping: "Frete",
45
65
  shipping_address: "Endereço de Entrega",
66
+ shipping_address_map: "Mapa do endereço de entrega",
46
67
  shipping_free: "Grátis",
47
68
  shipping_method: "Método de Entrega",
48
69
  showing: "Mostrando",
49
70
  sku_label: "SKU: {{sku}}",
50
71
  status: "Status",
72
+ status_delivered: "Entregue",
51
73
  status_label: "Status:",
74
+ status_preparing: "Preparando",
75
+ status_processing: "Processando",
76
+ status_shipped: "Enviado",
52
77
  subscription: "Assinatura",
53
78
  subscription_hash: "Assinatura #{{token}}",
54
79
  subtotal: "Subtotal",
@@ -56,8 +81,11 @@ var pt_default = {
56
81
  tax_included: "{{name}}, incluído",
57
82
  this_product_no_longer_exists: "Este produto não existe mais",
58
83
  to: "até",
84
+ today: "Hoje",
59
85
  total: "Total",
60
- view_subscription: "Visualizar Assinatura"
86
+ try_again: "Tente novamente",
87
+ view_subscription: "Visualizar Assinatura",
88
+ yesterday: "Ontem"
61
89
  };
62
90
  //#endregion
63
91
  Object.defineProperty(exports, "default", {
@@ -67,4 +95,4 @@ Object.defineProperty(exports, "default", {
67
95
  }
68
96
  });
69
97
 
70
- //# sourceMappingURL=pt-BYUAX2Nd.cjs.map
98
+ //# sourceMappingURL=pt-ByFNEOUY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pt-ByFNEOUY.cjs","names":[],"sources":["../../../orders/core/src/locale/pt.json"],"sourcesContent":[""],"mappings":""}
@@ -4,25 +4,44 @@ var pt_default = {
4
4
  breadcrumb: "Pedidos",
5
5
  breadcrumb_detail: "Pedido #{{id}}",
6
6
  card_ending_in: "{{brand}} terminando em {{last4}}",
7
+ card_fallback: "Cartão",
7
8
  customer: "Cliente",
8
9
  date: "Data",
9
10
  delivery_label: "Entrega:",
10
11
  discount: "Desconto",
11
12
  email: "E-mail",
13
+ empty_hint: "Seus pedidos aparecerão aqui após você fazer um.",
12
14
  error_generic: "Ocorreu um erro",
13
15
  error_loading_order: "Falha ao carregar pedido: {{message}}",
14
16
  estimated_delivery: "Entrega Est. {{estimate}}",
17
+ filter_all: "Todos",
18
+ filter_delivered: "Entregue",
19
+ filter_preparing: "Preparando",
20
+ filter_subscription: "Assinatura",
21
+ from_subscription: "Da assinatura",
15
22
  fulfillment_label: "Processamento:",
23
+ group_this_month: "Este mês",
24
+ group_this_week: "Esta semana",
16
25
  items_count: "Itens ({{count}})",
26
+ last_week: "Semana passada",
27
+ load_failed_hint: "Algo deu errado da nossa parte. Tente novamente.",
28
+ load_failed_title: "Não foi possível carregar seus pedidos",
29
+ load_more: "Carregar mais",
30
+ loading: "Carregando...",
31
+ more_items: "+ {{n}} mais",
32
+ n_days_ago: "{{n}} dias atrás",
33
+ n_weeks_ago: "{{n}} semanas atrás",
17
34
  next: "Próximo",
18
35
  no_image: "Sem imagem",
19
36
  no_image_available: "Nenhuma imagem disponível",
20
37
  no_matching_orders: "Nenhum pedido correspondente",
21
38
  no_orders_found: "Nenhum pedido encontrado",
39
+ no_orders_yet: "Nenhum pedido ainda",
22
40
  no_payment_method: "Nenhum método de pagamento",
23
41
  no_shipping_address: "Nenhum endereço de entrega disponível",
24
42
  of: "de",
25
43
  order: "Pedido",
44
+ order_history: "Histórico de pedidos",
26
45
  order_info: "Informações do Pedido",
27
46
  order_not_found: "Pedido não encontrado",
28
47
  order_number: "Pedido #",
@@ -39,15 +58,21 @@ var pt_default = {
39
58
  previous: "Anterior",
40
59
  product: "Produto",
41
60
  results: "resultados",
61
+ search_hint: "Tente um termo de busca diferente.",
42
62
  search_orders: "Pesquisar pedidos...",
43
63
  shipping: "Frete",
44
64
  shipping_address: "Endereço de Entrega",
65
+ shipping_address_map: "Mapa do endereço de entrega",
45
66
  shipping_free: "Grátis",
46
67
  shipping_method: "Método de Entrega",
47
68
  showing: "Mostrando",
48
69
  sku_label: "SKU: {{sku}}",
49
70
  status: "Status",
71
+ status_delivered: "Entregue",
50
72
  status_label: "Status:",
73
+ status_preparing: "Preparando",
74
+ status_processing: "Processando",
75
+ status_shipped: "Enviado",
51
76
  subscription: "Assinatura",
52
77
  subscription_hash: "Assinatura #{{token}}",
53
78
  subtotal: "Subtotal",
@@ -55,10 +80,13 @@ var pt_default = {
55
80
  tax_included: "{{name}}, incluído",
56
81
  this_product_no_longer_exists: "Este produto não existe mais",
57
82
  to: "até",
83
+ today: "Hoje",
58
84
  total: "Total",
59
- view_subscription: "Visualizar Assinatura"
85
+ try_again: "Tente novamente",
86
+ view_subscription: "Visualizar Assinatura",
87
+ yesterday: "Ontem"
60
88
  };
61
89
  //#endregion
62
90
  export { pt_default as default };
63
91
 
64
- //# sourceMappingURL=pt-BOe_ybjs.mjs.map
92
+ //# sourceMappingURL=pt-DODtfN2-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pt-DODtfN2-.mjs","names":[],"sources":["../../../orders/core/src/locale/pt.json"],"sourcesContent":[""],"mappings":""}
@@ -522,6 +522,12 @@ Object.defineProperty(exports, "DataSourceRegistryProvider", {
522
522
  return DataSourceRegistryProvider;
523
523
  }
524
524
  });
525
+ Object.defineProperty(exports, "SHAREABLE_TO_RESOURCE_TYPE", {
526
+ enumerable: true,
527
+ get: function() {
528
+ return SHAREABLE_TO_RESOURCE_TYPE;
529
+ }
530
+ });
525
531
  Object.defineProperty(exports, "useDataSourceRegistryConfig", {
526
532
  enumerable: true,
527
533
  get: function() {
@@ -529,4 +535,4 @@ Object.defineProperty(exports, "useDataSourceRegistryConfig", {
529
535
  }
530
536
  });
531
537
 
532
- //# sourceMappingURL=registry-context-DZOQLVi4.cjs.map
538
+ //# sourceMappingURL=registry-context-D2pft0tu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-context-D2pft0tu.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 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, useContext, useMemo, type ReactNode } 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 useContext(DataSourceContext);\n}\n","import type React from \"react\";\nimport { createContext, useContext, useMemo, type ReactNode } 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 useContext(DataSourceRegistryContext).registry;\n}\n\n/**\n * Hook to access the full data source registry context (registry + config).\n */\nexport function useDataSourceRegistryConfig(): DataSourceRegistryContextValue {\n return useContext(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,qBAAA,GAAA,MAAA,eAA0D,EAAE,CAAC;AAQnE,SAAgB,mBAAmB,EACjC,SACA,eACA,YAC6C;CAC7C,MAAM,SAAA,GAAA,MAAA,gBACG;EAAE;EAAS;EAAe,GACjC,CAAC,SAAS,cAAc,CACzB;AAED,QACE,iBAAA,GAAA,kBAAA,KAAC,kBAAkB,UAAnB;EAAmC;EAChC;EAC0B,CAAA;;;;ACdjC,MAAM,6BAAA,GAAA,MAAA,eACJ,EACE,UAAU,8BACX,CACF;;;;;;;;;AAuBD,SAAgB,2BAA2B,EACzC,UACA,SACA,eACA,WACA,YACqD;CACrD,MAAM,SAAA,GAAA,MAAA,gBACG;EACL,UAAU,YAAY;EACtB;EACA;EACA;EACD,GACD;EAAC;EAAU;EAAS;EAAe;EAAU,CAC9C;AAED,QACE,iBAAA,GAAA,kBAAA,KAAC,0BAA0B,UAA3B;EAA2C;YACzC,iBAAA,GAAA,kBAAA,KAAC,oBAAD;GAA6B;GAAwB;GAClD;GACkB,CAAA;EACc,CAAA;;;;;AAczC,SAAgB,8BAA8D;AAC5E,SAAA,GAAA,MAAA,YAAkB,0BAA0B"}
@@ -515,6 +515,6 @@ function useDataSourceRegistryConfig() {
515
515
  return useContext(DataSourceRegistryContext);
516
516
  }
517
517
  //#endregion
518
- export { useDataSourceRegistryConfig as n, DataSourceRegistryProvider as t };
518
+ export { useDataSourceRegistryConfig as n, SHAREABLE_TO_RESOURCE_TYPE as r, DataSourceRegistryProvider as t };
519
519
 
520
- //# sourceMappingURL=registry-context-DdfXs3K3.mjs.map
520
+ //# sourceMappingURL=registry-context-gb8MAG9c.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-context-gb8MAG9c.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, useContext, useMemo, type ReactNode } 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 useContext(DataSourceContext);\n}\n","import type React from \"react\";\nimport { createContext, useContext, useMemo, type ReactNode } 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 useContext(DataSourceRegistryContext).registry;\n}\n\n/**\n * Hook to access the full data source registry context (registry + config).\n */\nexport function useDataSourceRegistryConfig(): DataSourceRegistryContextValue {\n return useContext(DataSourceRegistryContext);\n}\n"],"mappings":"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"}
@@ -4,25 +4,44 @@ var ro_default = {
4
4
  breadcrumb: "Comenzi",
5
5
  breadcrumb_detail: "Comanda #{{id}}",
6
6
  card_ending_in: "{{brand}} terminând în {{last4}}",
7
+ card_fallback: "Carte",
7
8
  customer: "Client",
8
9
  date: "Data",
9
10
  delivery_label: "Livrare:",
10
11
  discount: "Reducere",
11
12
  email: "Email",
13
+ empty_hint: "Comenzile tale vor apărea aici după ce plasezi una.",
12
14
  error_generic: "A apărut o eroare",
13
15
  error_loading_order: "Încărcarea comenzii a eșuat: {{message}}",
14
16
  estimated_delivery: "Livrare estimată {{estimate}}",
17
+ filter_all: "Toate",
18
+ filter_delivered: "Livrate",
19
+ filter_preparing: "În pregătire",
20
+ filter_subscription: "Abonament",
21
+ from_subscription: "Din abonament",
15
22
  fulfillment_label: "Îndeplinire:",
23
+ group_this_month: "Luna aceasta",
24
+ group_this_week: "Săptămâna aceasta",
16
25
  items_count: "Articole ({{count}})",
26
+ last_week: "Săptămâna trecută",
27
+ load_failed_hint: "Ceva nu a funcționat din partea noastră. Te rugăm să încerci din nou.",
28
+ load_failed_title: "Nu am putut încărca comenzile tale",
29
+ load_more: "Încarcă mai mult",
30
+ loading: "Se încarcă...",
31
+ more_items: "+ {{n}} mai mult",
32
+ n_days_ago: "acum {{n}} zile",
33
+ n_weeks_ago: "acum {{n}} săptămâni",
17
34
  next: "Următor",
18
35
  no_image: "Nicio imagine",
19
36
  no_image_available: "Nicio imagine disponibilă",
20
37
  no_matching_orders: "Nu au fost găsite comenzi potrivite",
21
38
  no_orders_found: "Nu au fost găsite comenzi",
39
+ no_orders_yet: "Nicio comandă încă",
22
40
  no_payment_method: "Nicio metodă de plată",
23
41
  no_shipping_address: "Nicio adresă de livrare disponibilă",
24
42
  of: "din",
25
43
  order: "Comandă",
44
+ order_history: "Istoricul comenzilor",
26
45
  order_info: "Informații Comandă",
27
46
  order_not_found: "Comanda nu a fost găsită",
28
47
  order_number: "Comanda #",
@@ -39,15 +58,21 @@ var ro_default = {
39
58
  previous: "Anterior",
40
59
  product: "Produs",
41
60
  results: "rezultate",
61
+ search_hint: "Încearcă un alt termen de căutare.",
42
62
  search_orders: "Căutați comenzi...",
43
63
  shipping: "Livrare",
44
64
  shipping_address: "Adresă de livrare",
65
+ shipping_address_map: "Hartă adresă livrare",
45
66
  shipping_free: "Gratuit",
46
67
  shipping_method: "Metoda de livrare",
47
68
  showing: "Se afișează",
48
69
  sku_label: "SKU: {{sku}}",
49
70
  status: "Status",
71
+ status_delivered: "Livrat",
50
72
  status_label: "Status:",
73
+ status_preparing: "Se pregătește",
74
+ status_processing: "Se procesează",
75
+ status_shipped: "Expediat",
51
76
  subscription: "Abonament",
52
77
  subscription_hash: "Abonament #{{token}}",
53
78
  subtotal: "Subtotal",
@@ -55,10 +80,13 @@ var ro_default = {
55
80
  tax_included: "{{name}}, inclus",
56
81
  this_product_no_longer_exists: "Acest produs nu mai există",
57
82
  to: "la",
83
+ today: "Azi",
58
84
  total: "Total",
59
- view_subscription: "Vizualizați Abonamentul"
85
+ try_again: "Încearcă din nou",
86
+ view_subscription: "Vizualizați Abonamentul",
87
+ yesterday: "Ieri"
60
88
  };
61
89
  //#endregion
62
90
  export { ro_default as default };
63
91
 
64
- //# sourceMappingURL=ro-CyFWlCId.mjs.map
92
+ //# sourceMappingURL=ro-BkVFoghA.mjs.map