@fluid-app/portal-sdk 0.1.248 → 0.1.249

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 (235) hide show
  1. package/dist/{fluid-pay-api-adapter-CJ7-I8k-.mjs → AddressAutocompleteInput-B0qLrCHN.mjs} +153 -3
  2. package/dist/AddressAutocompleteInput-B0qLrCHN.mjs.map +1 -0
  3. package/dist/{fluid-pay-api-adapter-D63KLi5c.cjs → AddressAutocompleteInput-CbpNjpwB.cjs} +157 -1
  4. package/dist/AddressAutocompleteInput-CbpNjpwB.cjs.map +1 -0
  5. package/dist/{AlertWidget-CbhrQa9Z.mjs → AlertWidget-CcIBGBik.mjs} +3 -3
  6. package/dist/{AlertWidget-CbhrQa9Z.mjs.map → AlertWidget-CcIBGBik.mjs.map} +1 -1
  7. package/dist/{AppDownloadScreen-DPnbWP5G.mjs → AppDownloadScreen-ZxlnSAZ6.mjs} +3 -3
  8. package/dist/{AppDownloadScreen-DPnbWP5G.mjs.map → AppDownloadScreen-ZxlnSAZ6.mjs.map} +1 -1
  9. package/dist/{AppNavigationContext-DNod9mf6.mjs → AppNavigationContext-BcZZMtV6.mjs} +1 -1
  10. package/dist/{AppNavigationContext-DNod9mf6.mjs.map → AppNavigationContext-BcZZMtV6.mjs.map} +1 -1
  11. package/dist/{BulletListWidget-qvZIZ_B-.mjs → BulletListWidget-mRwUgtzN.mjs} +3 -3
  12. package/dist/{BulletListWidget-qvZIZ_B-.mjs.map → BulletListWidget-mRwUgtzN.mjs.map} +1 -1
  13. package/dist/{CalendarWidget-C03VcDLQ.mjs → CalendarWidget-Cn3Ngl8_.mjs} +5 -5
  14. package/dist/{CalendarWidget-C03VcDLQ.mjs.map → CalendarWidget-Cn3Ngl8_.mjs.map} +1 -1
  15. package/dist/{CardWidget-2wcjCf2M.mjs → CardWidget-DHTqvQPa.mjs} +4 -4
  16. package/dist/{CardWidget-2wcjCf2M.mjs.map → CardWidget-DHTqvQPa.mjs.map} +1 -1
  17. package/dist/{CarouselWidget-Cn5P4FVN.mjs → CarouselWidget-C0X-nFyW.mjs} +5 -5
  18. package/dist/{CarouselWidget-Cn5P4FVN.mjs.map → CarouselWidget-C0X-nFyW.mjs.map} +1 -1
  19. package/dist/{CatchUpWidget-B9CI7lq0.mjs → CatchUpWidget-BkeZR91e.mjs} +5 -5
  20. package/dist/{CatchUpWidget-B9CI7lq0.mjs.map → CatchUpWidget-BkeZR91e.mjs.map} +1 -1
  21. package/dist/{ChartWidget-obje-Xj9.mjs → ChartWidget-Ci4Q0Ig-.mjs} +4 -4
  22. package/dist/{ChartWidget-obje-Xj9.mjs.map → ChartWidget-Ci4Q0Ig-.mjs.map} +1 -1
  23. package/dist/{ContactsScreen-DuhDzRtI.mjs → ContactsScreen-Bq8zrA8k.mjs} +11 -11
  24. package/dist/{ContactsScreen-DuhDzRtI.mjs.map → ContactsScreen-Bq8zrA8k.mjs.map} +1 -1
  25. package/dist/{ContainerWidget-DNenbORS.mjs → ContainerWidget-cbX_KEOQ.mjs} +4 -4
  26. package/dist/{ContainerWidget-DNenbORS.mjs.map → ContainerWidget-cbX_KEOQ.mjs.map} +1 -1
  27. package/dist/{CustomersScreen-BJOBG5f5.mjs → CustomersScreen-0uI1R9lm.mjs} +2 -2
  28. package/dist/{CustomersScreen-BJOBG5f5.mjs.map → CustomersScreen-0uI1R9lm.mjs.map} +1 -1
  29. package/dist/{EmbedWidget-LYnd3TZD.mjs → EmbedWidget-BwR9mICd.mjs} +3 -3
  30. package/dist/{EmbedWidget-LYnd3TZD.mjs.map → EmbedWidget-BwR9mICd.mjs.map} +1 -1
  31. package/dist/FluidProvider-DGxCCmVB.cjs +17240 -0
  32. package/dist/FluidProvider-DGxCCmVB.cjs.map +1 -0
  33. package/dist/FluidProvider-DS1QKy5j.mjs +6371 -0
  34. package/dist/FluidProvider-DS1QKy5j.mjs.map +1 -0
  35. package/dist/{ImageWidget-vNWT_O1E.mjs → ImageWidget-DmaAQZBK.mjs} +4 -4
  36. package/dist/{ImageWidget-vNWT_O1E.mjs.map → ImageWidget-DmaAQZBK.mjs.map} +1 -1
  37. package/dist/{InfiniteScrollSentinel-D0XRJi51.mjs → InfiniteScrollSentinel-BHIgNtHI.mjs} +2 -2
  38. package/dist/{InfiniteScrollSentinel-D0XRJi51.mjs.map → InfiniteScrollSentinel-BHIgNtHI.mjs.map} +1 -1
  39. package/dist/{LayoutWidget-UI5fbsx4.mjs → LayoutWidget-CxaMx1nd.mjs} +4 -4
  40. package/dist/{LayoutWidget-UI5fbsx4.mjs.map → LayoutWidget-CxaMx1nd.mjs.map} +1 -1
  41. package/dist/{LinkWidget-CO-Cxf7Z.mjs → LinkWidget-utkZrvAV.mjs} +5 -5
  42. package/dist/{LinkWidget-CO-Cxf7Z.mjs.map → LinkWidget-utkZrvAV.mjs.map} +1 -1
  43. package/dist/{ListWidget-f88QhcGI.mjs → ListWidget-CNAxW_3c.mjs} +6 -6
  44. package/dist/{ListWidget-f88QhcGI.mjs.map → ListWidget-CNAxW_3c.mjs.map} +1 -1
  45. package/dist/{MediaRenderer-DMdb_5xw.mjs → MediaRenderer-13Jlf38P.mjs} +1 -1
  46. package/dist/{MediaRenderer-DMdb_5xw.mjs.map → MediaRenderer-13Jlf38P.mjs.map} +1 -1
  47. package/dist/{MessagingScreen-DGhqsVXi.mjs → MessagingScreen-CJ_9yIHK.mjs} +9 -12
  48. package/dist/{MessagingScreen-DGhqsVXi.mjs.map → MessagingScreen-CJ_9yIHK.mjs.map} +1 -1
  49. package/dist/{MessagingScreen-CDiLGmMi.cjs → MessagingScreen-DeYSVcMd.cjs} +2 -2
  50. package/dist/{MessagingScreen-CDiLGmMi.cjs.map → MessagingScreen-DeYSVcMd.cjs.map} +1 -1
  51. package/dist/{MessagingScreen-BKb4mWGa.cjs → MessagingScreen-FHwytr8B.cjs} +3 -3
  52. package/dist/MessagingScreen-s7CL9vPN.mjs +47 -0
  53. package/dist/{MySiteScreen-CK84vXa9.mjs → MySiteScreen-DX8tBz8Z.mjs} +7 -7
  54. package/dist/{MySiteScreen-CK84vXa9.mjs.map → MySiteScreen-DX8tBz8Z.mjs.map} +1 -1
  55. package/dist/{MySiteWidget-CQNASVaF.mjs → MySiteWidget-C0n9cSw7.mjs} +5 -5
  56. package/dist/{MySiteWidget-CQNASVaF.mjs.map → MySiteWidget-C0n9cSw7.mjs.map} +1 -1
  57. package/dist/{NestedWidget-RuyrOrFn.mjs → NestedWidget-BMKtDP_4.mjs} +6 -6
  58. package/dist/{NestedWidget-RuyrOrFn.mjs.map → NestedWidget-BMKtDP_4.mjs.map} +1 -1
  59. package/dist/{OrdersScreen-b-ZC4_NI.mjs → OrdersScreen-B3vtWt8_.mjs} +7 -7
  60. package/dist/{OrdersScreen-b-ZC4_NI.mjs.map → OrdersScreen-B3vtWt8_.mjs.map} +1 -1
  61. package/dist/{PointsWidget-BwA6aGVZ.mjs → PointsWidget-CaWklfIH.mjs} +5 -5
  62. package/dist/{PointsWidget-BwA6aGVZ.mjs.map → PointsWidget-CaWklfIH.mjs.map} +1 -1
  63. package/dist/{PortalProductsApiProvider-BFdHFvog.mjs → PortalProductsApiProvider-CNAu2pAb.mjs} +2 -2
  64. package/dist/{PortalProductsApiProvider-BFdHFvog.mjs.map → PortalProductsApiProvider-CNAu2pAb.mjs.map} +1 -1
  65. package/dist/{PortalTenantClientProvider-CjJzBCTL.mjs → PortalTenantClientProvider-Bni6J3KS.mjs} +1 -1
  66. package/dist/{PortalTenantClientProvider-CjJzBCTL.mjs.map → PortalTenantClientProvider-Bni6J3KS.mjs.map} +1 -1
  67. package/dist/{ProfileScreen-DHv2Cjpz.cjs → ProfileScreen-BJzW-gC_.cjs} +4 -4
  68. package/dist/{ProfileScreen-BDLJgcXg.cjs → ProfileScreen-DucZeLWI.cjs} +40 -20
  69. package/dist/ProfileScreen-DucZeLWI.cjs.map +1 -0
  70. package/dist/{ProfileScreen-CmQDKNaP.mjs → ProfileScreen-IPuXlf9V.mjs} +33 -18
  71. package/dist/ProfileScreen-IPuXlf9V.mjs.map +1 -0
  72. package/dist/ProfileScreen-m3fTsHyw.mjs +48 -0
  73. package/dist/{QuickLinksWidget-CJqwiBJ7.mjs → QuickLinksWidget-D0b33oyn.mjs} +3 -3
  74. package/dist/{QuickLinksWidget-CJqwiBJ7.mjs.map → QuickLinksWidget-D0b33oyn.mjs.map} +1 -1
  75. package/dist/{QuickShareWidget-DKE7Tba2.mjs → QuickShareWidget-DJ0Y71om.mjs} +3 -3
  76. package/dist/{QuickShareWidget-DKE7Tba2.mjs.map → QuickShareWidget-DJ0Y71om.mjs.map} +1 -1
  77. package/dist/{RecentActivityWidget-D1AlZgfV.mjs → RecentActivityWidget-Rpj33TiN.mjs} +5 -5
  78. package/dist/{RecentActivityWidget-D1AlZgfV.mjs.map → RecentActivityWidget-Rpj33TiN.mjs.map} +1 -1
  79. package/dist/{ScreenHeaderContext-Cemdo7bM.mjs → ScreenHeaderContext-4WYXIqQ5.mjs} +1 -1
  80. package/dist/{ScreenHeaderContext-Cemdo7bM.mjs.map → ScreenHeaderContext-4WYXIqQ5.mjs.map} +1 -1
  81. package/dist/{ScreenRenderer-Cl2aAJ7D.mjs → ScreenRenderer-BQal-fnZ.mjs} +2 -2
  82. package/dist/{ScreenRenderer-Cl2aAJ7D.mjs.map → ScreenRenderer-BQal-fnZ.mjs.map} +1 -1
  83. package/dist/{SearchSort-CokMCrhy.mjs → SearchSort-B5Jrk5lW.mjs} +2 -2
  84. package/dist/{SearchSort-CokMCrhy.mjs.map → SearchSort-B5Jrk5lW.mjs.map} +1 -1
  85. package/dist/{SeparatorWidget-gVlyr1MV.mjs → SeparatorWidget-Bgzsloji.mjs} +3 -3
  86. package/dist/{SeparatorWidget-gVlyr1MV.mjs.map → SeparatorWidget-Bgzsloji.mjs.map} +1 -1
  87. package/dist/ShareablesScreen-Cd8chxk4.mjs +13 -0
  88. package/dist/{ShareablesScreen-BZZ-RT71.mjs → ShareablesScreen-NMoZH9ed.mjs} +14 -18
  89. package/dist/{ShareablesScreen-BZZ-RT71.mjs.map → ShareablesScreen-NMoZH9ed.mjs.map} +1 -1
  90. package/dist/ShopScreen-BvSiWgsJ.mjs +47 -0
  91. package/dist/{ShopScreen---dB03HI.cjs → ShopScreen-CM3DDvLt.cjs} +2 -2
  92. package/dist/{ShopScreen---dB03HI.cjs.map → ShopScreen-CM3DDvLt.cjs.map} +1 -1
  93. package/dist/{ShopScreen-B6ygTHDB.cjs → ShopScreen-Cz0dbkhp.cjs} +3 -3
  94. package/dist/{ShopScreen-kiVwC38W.mjs → ShopScreen-DJANOOka.mjs} +29 -34
  95. package/dist/{ShopScreen-kiVwC38W.mjs.map → ShopScreen-DJANOOka.mjs.map} +1 -1
  96. package/dist/{SpacerWidget-BY7ywGP4.mjs → SpacerWidget-C1byII28.mjs} +2 -2
  97. package/dist/{SpacerWidget-BY7ywGP4.mjs.map → SpacerWidget-C1byII28.mjs.map} +1 -1
  98. package/dist/{SubscriptionsScreen-dhnfYn4L.cjs → SubscriptionsScreen-BgKpfzi0.cjs} +3 -3
  99. package/dist/{SubscriptionsScreen-B88_dLfE.cjs → SubscriptionsScreen-DCUwHrdm.cjs} +22 -32
  100. package/dist/SubscriptionsScreen-DCUwHrdm.cjs.map +1 -0
  101. package/dist/{SubscriptionsScreen-DK9-h3Cz.mjs → SubscriptionsScreen-rZxqb0eR.mjs} +21 -31
  102. package/dist/{SubscriptionsScreen-DK9-h3Cz.mjs.map → SubscriptionsScreen-rZxqb0eR.mjs.map} +1 -1
  103. package/dist/{TableWidget-dfUvhH0S.mjs → TableWidget-CNCHDRrR.mjs} +6 -6
  104. package/dist/{TableWidget-dfUvhH0S.mjs.map → TableWidget-CNCHDRrR.mjs.map} +1 -1
  105. package/dist/{TextWidget-BteaMIsX.mjs → TextWidget-CfLUQr6V.mjs} +3 -3
  106. package/dist/{TextWidget-BteaMIsX.mjs.map → TextWidget-CfLUQr6V.mjs.map} +1 -1
  107. package/dist/{ToDoWidget-BciI_D70.mjs → ToDoWidget-C3lh-3SB.mjs} +7 -7
  108. package/dist/{ToDoWidget-BciI_D70.mjs.map → ToDoWidget-C3lh-3SB.mjs.map} +1 -1
  109. package/dist/{UpgradeScreen-X6j0_625.mjs → UpgradeScreen-D_CM1n1M.mjs} +3 -3
  110. package/dist/{UpgradeScreen-X6j0_625.mjs.map → UpgradeScreen-D_CM1n1M.mjs.map} +1 -1
  111. package/dist/{VideoWidget-Dj9wue7j.mjs → VideoWidget-DKhqN_Rx.mjs} +4 -4
  112. package/dist/{VideoWidget-Dj9wue7j.mjs.map → VideoWidget-DKhqN_Rx.mjs.map} +1 -1
  113. package/dist/{WidgetInteractionContext-B1mELhQ_.mjs → WidgetInteractionContext-pLGNr8_2.mjs} +1 -1
  114. package/dist/{WidgetInteractionContext-B1mELhQ_.mjs.map → WidgetInteractionContext-pLGNr8_2.mjs.map} +1 -1
  115. package/dist/api-context-3GmfqvIB.mjs +22 -0
  116. package/dist/api-context-3GmfqvIB.mjs.map +1 -0
  117. package/dist/api-context-BkBvyFVK.cjs +46 -0
  118. package/dist/api-context-BkBvyFVK.cjs.map +1 -0
  119. package/dist/{components-CjgEvBYG.mjs → components-D2h9u3tH.mjs} +3 -3
  120. package/dist/{components-CjgEvBYG.mjs.map → components-D2h9u3tH.mjs.map} +1 -1
  121. package/dist/{de-DWONEOZS.mjs → de-CH__cDep.mjs} +1 -1
  122. package/dist/de-CH__cDep.mjs.map +1 -0
  123. package/dist/{dist-CTLDCXCc.mjs → dist-Di1hciu4.mjs} +1 -1
  124. package/dist/{dist-CTLDCXCc.mjs.map → dist-Di1hciu4.mjs.map} +1 -1
  125. package/dist/{el-De7Ne7it.mjs → el-De9QZiqh.mjs} +1 -1
  126. package/dist/el-De9QZiqh.mjs.map +1 -0
  127. package/dist/{error-state-DYzHx8tt.mjs → error-state--Z2OlDFr.mjs} +1 -1
  128. package/dist/{error-state-DYzHx8tt.mjs.map → error-state--Z2OlDFr.mjs.map} +1 -1
  129. package/dist/{es-BXxGlAp6.mjs → es-C5dhBJ9E.mjs} +4 -39
  130. package/dist/{es-BXxGlAp6.mjs.map → es-C5dhBJ9E.mjs.map} +1 -1
  131. package/dist/{es-B5_ItPIn.mjs → es-CZLh7tET.mjs} +1 -1
  132. package/dist/es-CZLh7tET.mjs.map +1 -0
  133. package/dist/{fr-jgEDP2og.mjs → fr-CIfM_0kG.mjs} +1 -1
  134. package/dist/fr-CIfM_0kG.mjs.map +1 -0
  135. package/dist/{he-DLQdVr_g.mjs → he-BTK1iEJE.mjs} +1 -1
  136. package/dist/he-BTK1iEJE.mjs.map +1 -0
  137. package/dist/{hu-CC4QdkPb.mjs → hu-CrZGIbz9.mjs} +1 -1
  138. package/dist/hu-CrZGIbz9.mjs.map +1 -0
  139. package/dist/{id-CwGC2v1d.mjs → id-B-LeCfHj.mjs} +1 -1
  140. package/dist/id-B-LeCfHj.mjs.map +1 -0
  141. package/dist/index.cjs +16 -15
  142. package/dist/index.cjs.map +1 -1
  143. package/dist/index.d.cts +7 -0
  144. package/dist/index.d.cts.map +1 -1
  145. package/dist/index.d.mts +7 -0
  146. package/dist/index.d.mts.map +1 -1
  147. package/dist/index.mjs +86 -85
  148. package/dist/index.mjs.map +1 -1
  149. package/dist/{it-jUZZ5sjO.mjs → it-rIkFmAF3.mjs} +1 -1
  150. package/dist/it-rIkFmAF3.mjs.map +1 -0
  151. package/dist/{ja-QVQymwAE.mjs → ja--J_bhk3I.mjs} +1 -1
  152. package/dist/ja--J_bhk3I.mjs.map +1 -0
  153. package/dist/{ko-DfzzTwZI.mjs → ko-B2fghWQ9.mjs} +1 -1
  154. package/dist/ko-B2fghWQ9.mjs.map +1 -0
  155. package/dist/{nl-Dys3mUo2.mjs → nl-KgHmrRKy.mjs} +1 -1
  156. package/dist/nl-KgHmrRKy.mjs.map +1 -0
  157. package/dist/{order-status-badge-xuJ732eH.mjs → order-status-badge-CjX7Qxdk.mjs} +4 -4
  158. package/dist/{order-status-badge-xuJ732eH.mjs.map → order-status-badge-CjX7Qxdk.mjs.map} +1 -1
  159. package/dist/{parse-task-body-DEmYvdNM.mjs → parse-task-body-BK1v2806.mjs} +1 -1
  160. package/dist/{parse-task-body-DEmYvdNM.mjs.map → parse-task-body-BK1v2806.mjs.map} +1 -1
  161. package/dist/{pl-CBwEisEK.mjs → pl-BJvDPvs3.mjs} +1 -1
  162. package/dist/pl-BJvDPvs3.mjs.map +1 -0
  163. package/dist/{portal_tenant_content-CQQfNOTc.mjs → portal_tenant_content-DPLnrtOG.mjs} +38 -2
  164. package/dist/{portal_tenant_content-CQQfNOTc.mjs.map → portal_tenant_content-DPLnrtOG.mjs.map} +1 -1
  165. package/dist/{pt-D5al7xw3.mjs → pt-CmZpxftX.mjs} +1 -1
  166. package/dist/pt-CmZpxftX.mjs.map +1 -0
  167. package/dist/{purify.es-DzInNL5X.mjs → purify.es-Ba5Ug4-y.mjs} +1 -1
  168. package/dist/{purify.es-DzInNL5X.mjs.map → purify.es-Ba5Ug4-y.mjs.map} +1 -1
  169. package/dist/{query-keys-8SVs82aF.mjs → query-keys-DXle2tm8.mjs} +1 -1
  170. package/dist/{query-keys-8SVs82aF.mjs.map → query-keys-DXle2tm8.mjs.map} +1 -1
  171. package/dist/{registries-Ct8o2YRe.mjs → registries-kvRRUHcO.mjs} +1 -1
  172. package/dist/{registries-Ct8o2YRe.mjs.map → registries-kvRRUHcO.mjs.map} +1 -1
  173. package/dist/{registry-context-CTHUCfEc.mjs → registry-context-Bc-2fQnr.mjs} +1 -1
  174. package/dist/{registry-context-CTHUCfEc.mjs.map → registry-context-Bc-2fQnr.mjs.map} +1 -1
  175. package/dist/{ro-B43SoGdE.mjs → ro-C_4rHVWp.mjs} +1 -1
  176. package/dist/ro-C_4rHVWp.mjs.map +1 -0
  177. package/dist/{ru-ChwnncDc.mjs → ru-B0lzoBye.mjs} +1 -1
  178. package/dist/ru-B0lzoBye.mjs.map +1 -0
  179. package/dist/{scroll-arrows-CqDxJ0Pe.mjs → scroll-arrows-D90Miaz_.mjs} +1 -1
  180. package/dist/{scroll-arrows-CqDxJ0Pe.mjs.map → scroll-arrows-D90Miaz_.mjs.map} +1 -1
  181. package/dist/{sortable.esm-C8riJ_zv.mjs → sortable.esm-NmKxJoc7.mjs} +1 -1
  182. package/dist/{sortable.esm-C8riJ_zv.mjs.map → sortable.esm-NmKxJoc7.mjs.map} +1 -1
  183. package/dist/{src-C9vtVoJs.mjs → src-CSFJnkfN.mjs} +1 -1
  184. package/dist/{src-C9vtVoJs.mjs.map → src-CSFJnkfN.mjs.map} +1 -1
  185. package/dist/{src-pgBBOcJa.mjs → src-KINQ78Nj.mjs} +1 -1
  186. package/dist/{src-pgBBOcJa.mjs.map → src-KINQ78Nj.mjs.map} +1 -1
  187. package/dist/{th-C9S_8Tv6.mjs → th-QhoPGZ6C.mjs} +1 -1
  188. package/dist/th-QhoPGZ6C.mjs.map +1 -0
  189. package/dist/{tl-CiPbx_5F.mjs → tl-Dsfp243U.mjs} +1 -1
  190. package/dist/tl-Dsfp243U.mjs.map +1 -0
  191. package/dist/{tr-CUd4dp2u.mjs → tr-BiolaqkO.mjs} +1 -1
  192. package/dist/tr-BiolaqkO.mjs.map +1 -0
  193. package/dist/{use-account-DsTz5BlS.mjs → use-account-CGaDP8xd.mjs} +2 -2
  194. package/dist/{use-account-DsTz5BlS.mjs.map → use-account-CGaDP8xd.mjs.map} +1 -1
  195. package/dist/{use-store-C2KBIS41.mjs → use-store-BVCCB9kx.mjs} +1 -1
  196. package/dist/{use-store-C2KBIS41.mjs.map → use-store-BVCCB9kx.mjs.map} +1 -1
  197. package/dist/{zh_CN-D46-GUTP.mjs → zh_CN-DcGf3QsR.mjs} +1 -1
  198. package/dist/zh_CN-DcGf3QsR.mjs.map +1 -0
  199. package/dist/{zh_TW-XqA7UKxt.mjs → zh_TW-DFw2O0OX.mjs} +1 -1
  200. package/dist/zh_TW-DFw2O0OX.mjs.map +1 -0
  201. package/package.json +14 -13
  202. package/dist/FluidProvider-Bwg1cGSY.mjs +0 -2409
  203. package/dist/FluidProvider-Bwg1cGSY.mjs.map +0 -1
  204. package/dist/FluidProvider-DprqXNu4.cjs +0 -2520
  205. package/dist/FluidProvider-DprqXNu4.cjs.map +0 -1
  206. package/dist/ProfileScreen-BDLJgcXg.cjs.map +0 -1
  207. package/dist/ProfileScreen-CmQDKNaP.mjs.map +0 -1
  208. package/dist/SubscriptionsScreen-B88_dLfE.cjs.map +0 -1
  209. package/dist/de-DWONEOZS.mjs.map +0 -1
  210. package/dist/el-De7Ne7it.mjs.map +0 -1
  211. package/dist/es-B5_ItPIn.mjs.map +0 -1
  212. package/dist/fluid-pay-api-adapter-CJ7-I8k-.mjs.map +0 -1
  213. package/dist/fluid-pay-api-adapter-D63KLi5c.cjs.map +0 -1
  214. package/dist/fr-jgEDP2og.mjs.map +0 -1
  215. package/dist/he-DLQdVr_g.mjs.map +0 -1
  216. package/dist/hu-CC4QdkPb.mjs.map +0 -1
  217. package/dist/id-CwGC2v1d.mjs.map +0 -1
  218. package/dist/it-jUZZ5sjO.mjs.map +0 -1
  219. package/dist/ja-QVQymwAE.mjs.map +0 -1
  220. package/dist/ko-DfzzTwZI.mjs.map +0 -1
  221. package/dist/nl-Dys3mUo2.mjs.map +0 -1
  222. package/dist/pay-api-context-CqKGSXnP.mjs +0 -13
  223. package/dist/pay-api-context-CqKGSXnP.mjs.map +0 -1
  224. package/dist/pay-api-context-_o5ZEXYt.cjs +0 -25
  225. package/dist/pay-api-context-_o5ZEXYt.cjs.map +0 -1
  226. package/dist/pl-CBwEisEK.mjs.map +0 -1
  227. package/dist/pt-D5al7xw3.mjs.map +0 -1
  228. package/dist/ro-B43SoGdE.mjs.map +0 -1
  229. package/dist/ru-ChwnncDc.mjs.map +0 -1
  230. package/dist/th-C9S_8Tv6.mjs.map +0 -1
  231. package/dist/tl-CiPbx_5F.mjs.map +0 -1
  232. package/dist/tr-CUd4dp2u.mjs.map +0 -1
  233. package/dist/zh_CN-D46-GUTP.mjs.map +0 -1
  234. package/dist/zh_TW-XqA7UKxt.mjs.map +0 -1
  235. /package/dist/{fields-B_iAnFXl.mjs → fields-FTgjMOdh.mjs} +0 -0
@@ -1,9 +1,9 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
- require("./FluidProvider-DprqXNu4.cjs");
2
+ require("./FluidProvider-DGxCCmVB.cjs");
3
3
  require("./ScreenRenderer-xH01YkEQ.cjs");
4
4
  require("./account-api-context-DZP9IiGg.cjs");
5
5
  require("./store-api-context-D1gZn22Z.cjs");
6
- require("./pay-api-context-_o5ZEXYt.cjs");
6
+ require("./api-context-BkBvyFVK.cjs");
7
7
  require("./mysite-api-context-Dz4lI5Xd.cjs");
8
8
  require("./countries-api-context-C0C0K9gJ.cjs");
9
9
  require("./src-DiFCBegK.cjs");
@@ -42,7 +42,7 @@ require("./TableWidget-BIn1oRiJ.cjs");
42
42
  require("./ToDoWidget-OxT9z59F.cjs");
43
43
  require("./VideoWidget-CDcV0J5W.cjs");
44
44
  require("./ScreenHeaderContext-oIu5Bvhs.cjs");
45
- const require_MessagingScreen = require("./MessagingScreen-CDiLGmMi.cjs");
45
+ const require_MessagingScreen = require("./MessagingScreen-DeYSVcMd.cjs");
46
46
  require("./dist-D_3_ZuC5.cjs");
47
47
  require("./es-B5heQ57j.cjs");
48
48
  exports.MessagingScreen = require_MessagingScreen.MessagingScreen;
@@ -0,0 +1,47 @@
1
+ import "./FluidProvider-DS1QKy5j.mjs";
2
+ import "./ScreenRenderer-BQal-fnZ.mjs";
3
+ import "./account-api-context-BIZ_aibJ.mjs";
4
+ import "./store-api-context-C1lXT_3d.mjs";
5
+ import "./api-context-3GmfqvIB.mjs";
6
+ import "./mysite-api-context-5-qpKHWA.mjs";
7
+ import "./countries-api-context-CMh13cfX.mjs";
8
+ import "./src-CSFJnkfN.mjs";
9
+ import "./registry-context-Bc-2fQnr.mjs";
10
+ import "./WidgetInteractionContext-pLGNr8_2.mjs";
11
+ import "./EmbedWidget-BwR9mICd.mjs";
12
+ import "./error-state--Z2OlDFr.mjs";
13
+ import "./LayoutWidget-CxaMx1nd.mjs";
14
+ import "./registries-kvRRUHcO.mjs";
15
+ import "./fields-FTgjMOdh.mjs";
16
+ import "./TextWidget-CfLUQr6V.mjs";
17
+ import "./AlertWidget-CcIBGBik.mjs";
18
+ import "./BulletListWidget-mRwUgtzN.mjs";
19
+ import "./CalendarWidget-Cn3Ngl8_.mjs";
20
+ import "./CardWidget-DHTqvQPa.mjs";
21
+ import "./purify.es-Ba5Ug4-y.mjs";
22
+ import "./MediaRenderer-13Jlf38P.mjs";
23
+ import "./CarouselWidget-C0X-nFyW.mjs";
24
+ import "./CatchUpWidget-BkeZR91e.mjs";
25
+ import "./src-KINQ78Nj.mjs";
26
+ import { n as messagingScreenPropertySchema, t as MessagingScreen } from "./MessagingScreen-CJ_9yIHK.mjs";
27
+ import "./ChartWidget-Ci4Q0Ig-.mjs";
28
+ import "./ContainerWidget-cbX_KEOQ.mjs";
29
+ import "./ImageWidget-DmaAQZBK.mjs";
30
+ import "./LinkWidget-utkZrvAV.mjs";
31
+ import "./ListWidget-CNAxW_3c.mjs";
32
+ import "./MySiteWidget-C0n9cSw7.mjs";
33
+ import "./scroll-arrows-D90Miaz_.mjs";
34
+ import "./NestedWidget-BMKtDP_4.mjs";
35
+ import "./PointsWidget-CaWklfIH.mjs";
36
+ import "./QuickLinksWidget-D0b33oyn.mjs";
37
+ import "./QuickShareWidget-DJ0Y71om.mjs";
38
+ import "./RecentActivityWidget-Rpj33TiN.mjs";
39
+ import "./SeparatorWidget-Bgzsloji.mjs";
40
+ import "./SpacerWidget-C1byII28.mjs";
41
+ import "./TableWidget-CNCHDRrR.mjs";
42
+ import "./ToDoWidget-C3lh-3SB.mjs";
43
+ import "./VideoWidget-DKhqN_Rx.mjs";
44
+ import "./ScreenHeaderContext-4WYXIqQ5.mjs";
45
+ import "./dist-BstXVe25.mjs";
46
+ import "./es-C5dhBJ9E.mjs";
47
+ export { MessagingScreen, messagingScreenPropertySchema };
@@ -1,9 +1,9 @@
1
- import { r as __exportAll } from "./es-BXxGlAp6.mjs";
2
- import { b as fluidToast, dn as BreadcrumbLink, fn as BreadcrumbList, ln as Breadcrumb, mn as BreadcrumbSeparator, pn as BreadcrumbPage, un as BreadcrumbItem } from "./src-pgBBOcJa.mjs";
3
- import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-Cemdo7bM.mjs";
4
- import { n as useAppNavigation } from "./AppNavigationContext-DNod9mf6.mjs";
5
- import { b as usePortalMySiteThemes, w as usePortalUpdateSettings, y as usePortalMySiteProfile } from "./sortable.esm-C8riJ_zv.mjs";
6
- import { a as MySiteLinkCard, c as getPreviewClassName, i as MySitePhonePreview, n as PortalButtonsEditor, o as MySiteVisitorDetailsCard, r as MySiteThemeEditor, s as getContentClassName, t as PortalFavoritesEditor } from "./components-CjgEvBYG.mjs";
1
+ import { I as __exportAll } from "./portal_tenant_content-DPLnrtOG.mjs";
2
+ import { b as fluidToast, dn as BreadcrumbLink, fn as BreadcrumbList, ln as Breadcrumb, mn as BreadcrumbSeparator, pn as BreadcrumbPage, un as BreadcrumbItem } from "./src-KINQ78Nj.mjs";
3
+ import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-4WYXIqQ5.mjs";
4
+ import { n as useAppNavigation } from "./AppNavigationContext-BcZZMtV6.mjs";
5
+ import { b as usePortalMySiteThemes, w as usePortalUpdateSettings, y as usePortalMySiteProfile } from "./sortable.esm-NmKxJoc7.mjs";
6
+ import { a as MySiteLinkCard, c as getPreviewClassName, i as MySitePhonePreview, n as PortalButtonsEditor, o as MySiteVisitorDetailsCard, r as MySiteThemeEditor, s as getContentClassName, t as PortalFavoritesEditor } from "./components-D2h9u3tH.mjs";
7
7
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
8
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
9
  import { ChevronRight, LayoutGrid, Link2, Palette, User } from "lucide-react";
@@ -298,4 +298,4 @@ const mySiteScreenPropertySchema = {
298
298
  //#endregion
299
299
  export { MySiteScreen_exports as n, mySiteScreenPropertySchema as r, MySiteScreen as t };
300
300
 
301
- //# sourceMappingURL=MySiteScreen-CK84vXa9.mjs.map
301
+ //# sourceMappingURL=MySiteScreen-DX8tBz8Z.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MySiteScreen-CK84vXa9.mjs","names":[],"sources":["../src/screens/MySiteScreen/MySiteMainView.tsx","../src/screens/MySiteScreen/use-mysite-editing-section.ts","../src/screens/MySiteScreen/index.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport {\n usePortalMySiteProfile,\n usePortalMySiteThemes,\n usePortalUpdateSettings,\n} from \"@fluid-app/mysite-ui/portal/hooks/use-mysite-portal\";\nimport type { MySiteTheme } from \"@fluid-app/mysite-core/mysite-api-types\";\nimport {\n type AnimPhase,\n type EditingSection,\n getContentClassName,\n getPreviewClassName,\n MySiteVisitorDetailsCard,\n MySitePhonePreview,\n MySiteLinkCard,\n MySiteThemeEditor,\n PortalButtonsEditor,\n PortalFavoritesEditor,\n} from \"@fluid-app/mysite-ui/portal/components\";\nimport { ChevronRight, User, Link2, Palette, LayoutGrid } from \"lucide-react\";\nimport { fluidToast } from \"@fluid-app/ui-primitives\";\nimport { useAppNavigation } from \"../../shell/AppNavigationContext\";\n\ntype NavActionItem = {\n label: string;\n key: Exclude<EditingSection, null>;\n icon: typeof User;\n};\ntype NavLinkItem = {\n label: string;\n slug: string;\n icon: typeof User;\n};\ntype NavItem = NavActionItem | NavLinkItem;\n\nconst navigationItems: NavItem[] = [\n { label: \"Profile\", slug: \"profile\", icon: User },\n { label: \"Theme\", key: \"theme\", icon: Palette },\n { label: \"MySite Content\", key: \"content\", icon: LayoutGrid },\n { label: \"Buttons\", key: \"buttons\", icon: Link2 },\n];\n\nfunction defaultToast(message: string, type: \"success\" | \"error\") {\n fluidToast({ title: message, type });\n}\n\nexport interface MySiteMainViewProps {\n editingSection: EditingSection;\n animPhase: AnimPhase;\n showEditContent: boolean;\n onEditSection: (section: EditingSection) => void;\n onBackClick: () => void;\n}\n\nexport function MySiteMainView({\n editingSection,\n animPhase,\n showEditContent,\n onEditSection,\n onBackClick,\n}: MySiteMainViewProps): React.JSX.Element {\n const { navigate } = useAppNavigation();\n const { data: profile, isLoading: isProfileLoading } =\n usePortalMySiteProfile();\n const { data: themes = [] } = usePortalMySiteThemes();\n const updateSettingsMutation = usePortalUpdateSettings();\n\n const [previewKey, setPreviewKey] = useState(0);\n const refreshPreview = useCallback(() => setPreviewKey((k) => k + 1), []);\n\n const [selectedThemeId, setSelectedThemeId] = useState<number | null>(null);\n\n const resolvedThemeId =\n selectedThemeId ??\n profile?.theme_id ??\n themes.find((t) => t.name === \"Default\")?.id ??\n themes[0]?.id ??\n null;\n\n const currentTheme = themes.find((t) => t.id === resolvedThemeId);\n const themeName = currentTheme?.name ?? \"Default\";\n\n const mysiteUrl = profile?.mysite_url ?? \"\";\n const displayUrl = mysiteUrl ? mysiteUrl.replace(/^https?:\\/\\//, \"\") : \"\";\n const views = profile?.mysite_views ?? 0;\n const leads = profile?.mysite_leads ?? 0;\n\n const handleSelectTheme = useCallback(\n (theme: MySiteTheme) => {\n if (theme.id === resolvedThemeId) return;\n const previousThemeId = selectedThemeId;\n setSelectedThemeId(theme.id);\n updateSettingsMutation.mutate(\n { theme_id: theme.id },\n {\n onSuccess: () => {\n defaultToast(`Theme changed to \"${theme.name}\"`, \"success\");\n refreshPreview();\n },\n onError: () => {\n setSelectedThemeId(previousThemeId);\n defaultToast(\"Failed to update theme\", \"error\");\n },\n },\n );\n },\n [resolvedThemeId, selectedThemeId, updateSettingsMutation, refreshPreview],\n );\n\n const handleUpdateSlug = useCallback(\n async (slug: string) => {\n await new Promise<void>((resolve, reject) => {\n updateSettingsMutation.mutate(\n { slug },\n {\n onSuccess: () => resolve(),\n onError: () => reject(new Error(\"Failed\")),\n },\n );\n });\n },\n [updateSettingsMutation],\n );\n\n const handlePreview = useCallback(() => {\n if (mysiteUrl) window.open(`${mysiteUrl}?preview=true`, \"_blank\");\n }, [mysiteUrl]);\n\n const sectionLabel = useMemo(() => {\n if (editingSection === \"theme\") return \"Theme\";\n if (editingSection === \"buttons\") return \"Buttons\";\n if (editingSection === \"content\") return \"MySite Content\";\n return \"\";\n }, [editingSection]);\n\n if (isProfileLoading) {\n return (\n <div className=\"flex h-full flex-col overflow-y-auto px-2 py-6 2xl:flex-row 2xl:overflow-hidden\">\n <div className=\"w-full px-4 2xl:w-2/3 2xl:shrink-0\">\n <div className=\"flex flex-col gap-5\">\n <div className=\"bg-muted h-7 w-32 animate-pulse rounded-md\" />\n <div className=\"bg-muted h-20 w-full animate-pulse rounded-lg\" />\n <div className=\"bg-muted h-16 w-full animate-pulse rounded-lg\" />\n <div className=\"bg-muted h-40 w-full animate-pulse rounded-lg\" />\n </div>\n </div>\n <div className=\"w-full shrink-0 overflow-y-hidden px-4 pt-5 2xl:w-1/3 2xl:pt-0\">\n <div className=\"bg-muted flex h-full flex-col items-center gap-4 rounded-xl p-5\">\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"space-y-1\">\n <div className=\"bg-background/50 h-3 w-24 animate-pulse rounded\" />\n <div className=\"bg-background/50 h-4 w-28 animate-pulse rounded\" />\n </div>\n <div className=\"bg-background/50 h-8 w-20 animate-pulse rounded-md\" />\n </div>\n <div className=\"bg-background/50 h-[490px] w-[260px] animate-pulse rounded-[36px] sm:h-[600px] sm:w-[320px]\" />\n </div>\n </div>\n </div>\n );\n }\n\n const contentAnimClassName = getContentClassName(animPhase);\n const previewAnimClassName = getPreviewClassName(animPhase);\n\n return (\n <div className=\"flex h-full flex-col overflow-y-auto px-2 py-6 2xl:flex-row 2xl:overflow-hidden\">\n {/* Content column */}\n <div\n className={`w-full px-4 2xl:w-2/3 2xl:shrink-0 ${contentAnimClassName}`}\n >\n <div className=\"flex min-w-0 flex-col gap-5 2xl:h-full 2xl:overflow-y-auto\">\n {showEditContent && editingSection === \"theme\" ? (\n <MySiteThemeEditor\n themes={themes}\n selectedThemeId={resolvedThemeId}\n onSelectTheme={handleSelectTheme}\n isPending={updateSettingsMutation.isPending}\n onBack={onBackClick}\n />\n ) : showEditContent && editingSection === \"buttons\" ? (\n <PortalButtonsEditor\n onBack={onBackClick}\n onRefreshPreview={refreshPreview}\n onToast={defaultToast}\n />\n ) : showEditContent && editingSection === \"content\" ? (\n <PortalFavoritesEditor\n onBack={onBackClick}\n onRefreshPreview={refreshPreview}\n onToast={defaultToast}\n />\n ) : (\n <>\n {/* Header with optional back-to-section label */}\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-foreground text-xl font-bold\">MySite</h1>\n {animPhase !== \"idle\" && sectionLabel && (\n <>\n <ChevronRight className=\"text-muted-foreground h-4 w-4\" />\n <span className=\"text-foreground text-xl font-bold\">\n {sectionLabel}\n </span>\n </>\n )}\n </div>\n\n <MySiteVisitorDetailsCard views={views} leads={leads} />\n\n <MySiteLinkCard\n mysiteUrl={mysiteUrl}\n displayUrl={displayUrl}\n onUpdateSlug={handleUpdateSlug}\n onToast={defaultToast}\n />\n\n <div className=\"border-border bg-card divide-border divide-y overflow-hidden rounded-lg border\">\n {navigationItems.map((item) => {\n const Icon = item.icon;\n const rowClassName =\n \"group hover:bg-muted flex w-full items-center gap-2.5 px-3 py-2.5 transition-colors text-left cursor-pointer\";\n const onClick =\n \"slug\" in item\n ? () => navigate(item.slug)\n : () => onEditSection(item.key);\n\n return (\n <button\n key={item.label}\n type=\"button\"\n onClick={onClick}\n className={rowClassName}\n >\n <div className=\"bg-muted text-foreground flex h-7 w-7 shrink-0 items-center justify-center rounded-full\">\n <Icon className=\"h-3.5 w-3.5\" />\n </div>\n <span className=\"text-foreground flex-1 text-sm font-medium\">\n {item.label}\n </span>\n <ChevronRight className=\"text-muted-foreground h-3 w-3 shrink-0 transition-transform group-hover:translate-x-0.5\" />\n </button>\n );\n })}\n </div>\n </>\n )}\n </div>\n </div>\n\n {/* Preview column */}\n <div\n className={`w-full shrink-0 overflow-y-hidden px-4 pt-5 2xl:w-1/3 2xl:pt-0 ${previewAnimClassName}`}\n >\n <MySitePhonePreview\n mysiteUrl={mysiteUrl}\n themeName={themeName}\n previewKey={previewKey}\n isUpdating={updateSettingsMutation.isPending}\n onPreview={handlePreview}\n />\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n type AnimPhase,\n type EditingSection,\n FADE_MS,\n SLIDE_MS,\n} from \"@fluid-app/mysite-ui/portal/components\";\n\nexport interface MySiteEditingSectionState {\n editingSection: EditingSection;\n animPhase: AnimPhase;\n showEditContent: boolean;\n handleEditSection: (section: EditingSection) => void;\n handleBackClick: () => void;\n}\n\nexport function useMySiteEditingSection(): MySiteEditingSectionState {\n const [animPhase, setAnimPhase] = useState<AnimPhase>(\"idle\");\n const [editingSection, setEditingSection] = useState<EditingSection>(null);\n const timeoutsRef = useRef<ReturnType<typeof setTimeout>[]>([]);\n\n useEffect(() => {\n const ref = timeoutsRef;\n return () => ref.current.forEach(clearTimeout);\n }, []);\n\n const cancelScheduled = useCallback(() => {\n timeoutsRef.current.forEach(clearTimeout);\n timeoutsRef.current = [];\n }, []);\n\n const schedule = useCallback((phase: AnimPhase, delay: number) => {\n const id = setTimeout(() => setAnimPhase(phase), delay);\n timeoutsRef.current.push(id);\n }, []);\n\n const showEditContent = [\n \"slide\",\n \"fade-in\",\n \"editing\",\n \"exit-fade-out\",\n \"exit-slide\",\n ].includes(animPhase);\n\n const handleEditSection = useCallback(\n (section: EditingSection) => {\n cancelScheduled();\n setEditingSection(section);\n setAnimPhase(\"fade-out\");\n schedule(\"slide\", FADE_MS);\n schedule(\"fade-in\", FADE_MS + SLIDE_MS);\n schedule(\"editing\", FADE_MS + SLIDE_MS + FADE_MS);\n },\n [cancelScheduled, schedule],\n );\n\n const handleBackClick = useCallback(() => {\n cancelScheduled();\n setAnimPhase(\"exit-fade-out\");\n schedule(\"exit-slide\", FADE_MS);\n schedule(\"exit-fade-in\", FADE_MS + SLIDE_MS);\n const id = setTimeout(\n () => {\n setAnimPhase(\"idle\");\n setEditingSection(null);\n },\n FADE_MS + SLIDE_MS + FADE_MS,\n );\n timeoutsRef.current.push(id);\n }, [cancelScheduled, schedule]);\n\n return {\n editingSection,\n animPhase,\n showEditContent,\n handleEditSection,\n handleBackClick,\n };\n}\n","import React, { useCallback, useMemo } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport type { WidgetPropertySchema } from \"../../registries/property-schema-types\";\nimport { MySiteMainView } from \"./MySiteMainView\";\nimport { useMySiteEditingSection } from \"./use-mysite-editing-section\";\nimport type { MySiteScreenProps } from \"./types\";\n\nexport type { MySiteScreenProps } from \"./types\";\nexport type { MeProfile } from \"./types\";\n\nexport function MySiteScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: MySiteScreenProps): React.JSX.Element {\n const {\n editingSection,\n animPhase,\n showEditContent,\n handleEditSection,\n handleBackClick,\n } = useMySiteEditingSection();\n\n const sectionLabel = useMemo(() => {\n if (editingSection === \"theme\") return \"Theme\";\n if (editingSection === \"buttons\") return \"Buttons\";\n if (editingSection === \"content\") return \"MySite Content\";\n return null;\n }, [editingSection]);\n\n const handleRootCrumbClick = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (editingSection !== null) handleBackClick();\n },\n [editingSection, handleBackClick],\n );\n\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n {sectionLabel ? (\n <BreadcrumbLink href=\"#\" onClick={handleRootCrumbClick}>\n My Site\n </BreadcrumbLink>\n ) : (\n <BreadcrumbPage className=\"font-semibold\">My Site</BreadcrumbPage>\n )}\n </BreadcrumbItem>\n {sectionLabel && (\n <>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n {sectionLabel}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </>\n )}\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [sectionLabel, handleRootCrumbClick],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <MySiteMainView\n editingSection={editingSection}\n animPhase={animPhase}\n showEditContent={showEditContent}\n onEditSection={handleEditSection}\n onBackClick={handleBackClick}\n />\n </div>\n );\n}\n\nexport const mySiteScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"MySiteScreen\",\n displayName: \"My Site Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MySiteScreen-DX8tBz8Z.mjs","names":[],"sources":["../src/screens/MySiteScreen/MySiteMainView.tsx","../src/screens/MySiteScreen/use-mysite-editing-section.ts","../src/screens/MySiteScreen/index.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport {\n usePortalMySiteProfile,\n usePortalMySiteThemes,\n usePortalUpdateSettings,\n} from \"@fluid-app/mysite-ui/portal/hooks/use-mysite-portal\";\nimport type { MySiteTheme } from \"@fluid-app/mysite-core/mysite-api-types\";\nimport {\n type AnimPhase,\n type EditingSection,\n getContentClassName,\n getPreviewClassName,\n MySiteVisitorDetailsCard,\n MySitePhonePreview,\n MySiteLinkCard,\n MySiteThemeEditor,\n PortalButtonsEditor,\n PortalFavoritesEditor,\n} from \"@fluid-app/mysite-ui/portal/components\";\nimport { ChevronRight, User, Link2, Palette, LayoutGrid } from \"lucide-react\";\nimport { fluidToast } from \"@fluid-app/ui-primitives\";\nimport { useAppNavigation } from \"../../shell/AppNavigationContext\";\n\ntype NavActionItem = {\n label: string;\n key: Exclude<EditingSection, null>;\n icon: typeof User;\n};\ntype NavLinkItem = {\n label: string;\n slug: string;\n icon: typeof User;\n};\ntype NavItem = NavActionItem | NavLinkItem;\n\nconst navigationItems: NavItem[] = [\n { label: \"Profile\", slug: \"profile\", icon: User },\n { label: \"Theme\", key: \"theme\", icon: Palette },\n { label: \"MySite Content\", key: \"content\", icon: LayoutGrid },\n { label: \"Buttons\", key: \"buttons\", icon: Link2 },\n];\n\nfunction defaultToast(message: string, type: \"success\" | \"error\") {\n fluidToast({ title: message, type });\n}\n\nexport interface MySiteMainViewProps {\n editingSection: EditingSection;\n animPhase: AnimPhase;\n showEditContent: boolean;\n onEditSection: (section: EditingSection) => void;\n onBackClick: () => void;\n}\n\nexport function MySiteMainView({\n editingSection,\n animPhase,\n showEditContent,\n onEditSection,\n onBackClick,\n}: MySiteMainViewProps): React.JSX.Element {\n const { navigate } = useAppNavigation();\n const { data: profile, isLoading: isProfileLoading } =\n usePortalMySiteProfile();\n const { data: themes = [] } = usePortalMySiteThemes();\n const updateSettingsMutation = usePortalUpdateSettings();\n\n const [previewKey, setPreviewKey] = useState(0);\n const refreshPreview = useCallback(() => setPreviewKey((k) => k + 1), []);\n\n const [selectedThemeId, setSelectedThemeId] = useState<number | null>(null);\n\n const resolvedThemeId =\n selectedThemeId ??\n profile?.theme_id ??\n themes.find((t) => t.name === \"Default\")?.id ??\n themes[0]?.id ??\n null;\n\n const currentTheme = themes.find((t) => t.id === resolvedThemeId);\n const themeName = currentTheme?.name ?? \"Default\";\n\n const mysiteUrl = profile?.mysite_url ?? \"\";\n const displayUrl = mysiteUrl ? mysiteUrl.replace(/^https?:\\/\\//, \"\") : \"\";\n const views = profile?.mysite_views ?? 0;\n const leads = profile?.mysite_leads ?? 0;\n\n const handleSelectTheme = useCallback(\n (theme: MySiteTheme) => {\n if (theme.id === resolvedThemeId) return;\n const previousThemeId = selectedThemeId;\n setSelectedThemeId(theme.id);\n updateSettingsMutation.mutate(\n { theme_id: theme.id },\n {\n onSuccess: () => {\n defaultToast(`Theme changed to \"${theme.name}\"`, \"success\");\n refreshPreview();\n },\n onError: () => {\n setSelectedThemeId(previousThemeId);\n defaultToast(\"Failed to update theme\", \"error\");\n },\n },\n );\n },\n [resolvedThemeId, selectedThemeId, updateSettingsMutation, refreshPreview],\n );\n\n const handleUpdateSlug = useCallback(\n async (slug: string) => {\n await new Promise<void>((resolve, reject) => {\n updateSettingsMutation.mutate(\n { slug },\n {\n onSuccess: () => resolve(),\n onError: () => reject(new Error(\"Failed\")),\n },\n );\n });\n },\n [updateSettingsMutation],\n );\n\n const handlePreview = useCallback(() => {\n if (mysiteUrl) window.open(`${mysiteUrl}?preview=true`, \"_blank\");\n }, [mysiteUrl]);\n\n const sectionLabel = useMemo(() => {\n if (editingSection === \"theme\") return \"Theme\";\n if (editingSection === \"buttons\") return \"Buttons\";\n if (editingSection === \"content\") return \"MySite Content\";\n return \"\";\n }, [editingSection]);\n\n if (isProfileLoading) {\n return (\n <div className=\"flex h-full flex-col overflow-y-auto px-2 py-6 2xl:flex-row 2xl:overflow-hidden\">\n <div className=\"w-full px-4 2xl:w-2/3 2xl:shrink-0\">\n <div className=\"flex flex-col gap-5\">\n <div className=\"bg-muted h-7 w-32 animate-pulse rounded-md\" />\n <div className=\"bg-muted h-20 w-full animate-pulse rounded-lg\" />\n <div className=\"bg-muted h-16 w-full animate-pulse rounded-lg\" />\n <div className=\"bg-muted h-40 w-full animate-pulse rounded-lg\" />\n </div>\n </div>\n <div className=\"w-full shrink-0 overflow-y-hidden px-4 pt-5 2xl:w-1/3 2xl:pt-0\">\n <div className=\"bg-muted flex h-full flex-col items-center gap-4 rounded-xl p-5\">\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"space-y-1\">\n <div className=\"bg-background/50 h-3 w-24 animate-pulse rounded\" />\n <div className=\"bg-background/50 h-4 w-28 animate-pulse rounded\" />\n </div>\n <div className=\"bg-background/50 h-8 w-20 animate-pulse rounded-md\" />\n </div>\n <div className=\"bg-background/50 h-[490px] w-[260px] animate-pulse rounded-[36px] sm:h-[600px] sm:w-[320px]\" />\n </div>\n </div>\n </div>\n );\n }\n\n const contentAnimClassName = getContentClassName(animPhase);\n const previewAnimClassName = getPreviewClassName(animPhase);\n\n return (\n <div className=\"flex h-full flex-col overflow-y-auto px-2 py-6 2xl:flex-row 2xl:overflow-hidden\">\n {/* Content column */}\n <div\n className={`w-full px-4 2xl:w-2/3 2xl:shrink-0 ${contentAnimClassName}`}\n >\n <div className=\"flex min-w-0 flex-col gap-5 2xl:h-full 2xl:overflow-y-auto\">\n {showEditContent && editingSection === \"theme\" ? (\n <MySiteThemeEditor\n themes={themes}\n selectedThemeId={resolvedThemeId}\n onSelectTheme={handleSelectTheme}\n isPending={updateSettingsMutation.isPending}\n onBack={onBackClick}\n />\n ) : showEditContent && editingSection === \"buttons\" ? (\n <PortalButtonsEditor\n onBack={onBackClick}\n onRefreshPreview={refreshPreview}\n onToast={defaultToast}\n />\n ) : showEditContent && editingSection === \"content\" ? (\n <PortalFavoritesEditor\n onBack={onBackClick}\n onRefreshPreview={refreshPreview}\n onToast={defaultToast}\n />\n ) : (\n <>\n {/* Header with optional back-to-section label */}\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-foreground text-xl font-bold\">MySite</h1>\n {animPhase !== \"idle\" && sectionLabel && (\n <>\n <ChevronRight className=\"text-muted-foreground h-4 w-4\" />\n <span className=\"text-foreground text-xl font-bold\">\n {sectionLabel}\n </span>\n </>\n )}\n </div>\n\n <MySiteVisitorDetailsCard views={views} leads={leads} />\n\n <MySiteLinkCard\n mysiteUrl={mysiteUrl}\n displayUrl={displayUrl}\n onUpdateSlug={handleUpdateSlug}\n onToast={defaultToast}\n />\n\n <div className=\"border-border bg-card divide-border divide-y overflow-hidden rounded-lg border\">\n {navigationItems.map((item) => {\n const Icon = item.icon;\n const rowClassName =\n \"group hover:bg-muted flex w-full items-center gap-2.5 px-3 py-2.5 transition-colors text-left cursor-pointer\";\n const onClick =\n \"slug\" in item\n ? () => navigate(item.slug)\n : () => onEditSection(item.key);\n\n return (\n <button\n key={item.label}\n type=\"button\"\n onClick={onClick}\n className={rowClassName}\n >\n <div className=\"bg-muted text-foreground flex h-7 w-7 shrink-0 items-center justify-center rounded-full\">\n <Icon className=\"h-3.5 w-3.5\" />\n </div>\n <span className=\"text-foreground flex-1 text-sm font-medium\">\n {item.label}\n </span>\n <ChevronRight className=\"text-muted-foreground h-3 w-3 shrink-0 transition-transform group-hover:translate-x-0.5\" />\n </button>\n );\n })}\n </div>\n </>\n )}\n </div>\n </div>\n\n {/* Preview column */}\n <div\n className={`w-full shrink-0 overflow-y-hidden px-4 pt-5 2xl:w-1/3 2xl:pt-0 ${previewAnimClassName}`}\n >\n <MySitePhonePreview\n mysiteUrl={mysiteUrl}\n themeName={themeName}\n previewKey={previewKey}\n isUpdating={updateSettingsMutation.isPending}\n onPreview={handlePreview}\n />\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n type AnimPhase,\n type EditingSection,\n FADE_MS,\n SLIDE_MS,\n} from \"@fluid-app/mysite-ui/portal/components\";\n\nexport interface MySiteEditingSectionState {\n editingSection: EditingSection;\n animPhase: AnimPhase;\n showEditContent: boolean;\n handleEditSection: (section: EditingSection) => void;\n handleBackClick: () => void;\n}\n\nexport function useMySiteEditingSection(): MySiteEditingSectionState {\n const [animPhase, setAnimPhase] = useState<AnimPhase>(\"idle\");\n const [editingSection, setEditingSection] = useState<EditingSection>(null);\n const timeoutsRef = useRef<ReturnType<typeof setTimeout>[]>([]);\n\n useEffect(() => {\n const ref = timeoutsRef;\n return () => ref.current.forEach(clearTimeout);\n }, []);\n\n const cancelScheduled = useCallback(() => {\n timeoutsRef.current.forEach(clearTimeout);\n timeoutsRef.current = [];\n }, []);\n\n const schedule = useCallback((phase: AnimPhase, delay: number) => {\n const id = setTimeout(() => setAnimPhase(phase), delay);\n timeoutsRef.current.push(id);\n }, []);\n\n const showEditContent = [\n \"slide\",\n \"fade-in\",\n \"editing\",\n \"exit-fade-out\",\n \"exit-slide\",\n ].includes(animPhase);\n\n const handleEditSection = useCallback(\n (section: EditingSection) => {\n cancelScheduled();\n setEditingSection(section);\n setAnimPhase(\"fade-out\");\n schedule(\"slide\", FADE_MS);\n schedule(\"fade-in\", FADE_MS + SLIDE_MS);\n schedule(\"editing\", FADE_MS + SLIDE_MS + FADE_MS);\n },\n [cancelScheduled, schedule],\n );\n\n const handleBackClick = useCallback(() => {\n cancelScheduled();\n setAnimPhase(\"exit-fade-out\");\n schedule(\"exit-slide\", FADE_MS);\n schedule(\"exit-fade-in\", FADE_MS + SLIDE_MS);\n const id = setTimeout(\n () => {\n setAnimPhase(\"idle\");\n setEditingSection(null);\n },\n FADE_MS + SLIDE_MS + FADE_MS,\n );\n timeoutsRef.current.push(id);\n }, [cancelScheduled, schedule]);\n\n return {\n editingSection,\n animPhase,\n showEditContent,\n handleEditSection,\n handleBackClick,\n };\n}\n","import React, { useCallback, useMemo } from \"react\";\nimport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { useScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport type { WidgetPropertySchema } from \"../../registries/property-schema-types\";\nimport { MySiteMainView } from \"./MySiteMainView\";\nimport { useMySiteEditingSection } from \"./use-mysite-editing-section\";\nimport type { MySiteScreenProps } from \"./types\";\n\nexport type { MySiteScreenProps } from \"./types\";\nexport type { MeProfile } from \"./types\";\n\nexport function MySiteScreen({\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: MySiteScreenProps): React.JSX.Element {\n const {\n editingSection,\n animPhase,\n showEditContent,\n handleEditSection,\n handleBackClick,\n } = useMySiteEditingSection();\n\n const sectionLabel = useMemo(() => {\n if (editingSection === \"theme\") return \"Theme\";\n if (editingSection === \"buttons\") return \"Buttons\";\n if (editingSection === \"content\") return \"MySite Content\";\n return null;\n }, [editingSection]);\n\n const handleRootCrumbClick = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (editingSection !== null) handleBackClick();\n },\n [editingSection, handleBackClick],\n );\n\n const headerBreadcrumbs = useMemo(\n () => (\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n {sectionLabel ? (\n <BreadcrumbLink href=\"#\" onClick={handleRootCrumbClick}>\n My Site\n </BreadcrumbLink>\n ) : (\n <BreadcrumbPage className=\"font-semibold\">My Site</BreadcrumbPage>\n )}\n </BreadcrumbItem>\n {sectionLabel && (\n <>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n {sectionLabel}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </>\n )}\n </BreadcrumbList>\n </Breadcrumb>\n ),\n [sectionLabel, handleRootCrumbClick],\n );\n useScreenHeaderBreadcrumbs(headerBreadcrumbs);\n\n return (\n <div {...divProps} className={`h-full ${divProps.className ?? \"\"}`}>\n <MySiteMainView\n editingSection={editingSection}\n animPhase={animPhase}\n showEditContent={showEditContent}\n onEditSection={handleEditSection}\n onBackClick={handleBackClick}\n />\n </div>\n );\n}\n\nexport const mySiteScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"MySiteScreen\",\n displayName: \"My Site Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { r as __exportAll } from "./es-BXxGlAp6.mjs";
2
- import { n as useDataSourceRegistryConfig } from "./registry-context-CTHUCfEc.mjs";
3
- import { i as useWidgetsApi, n as useWidgetPreviewContext, t as ErrorState } from "./error-state-DYzHx8tt.mjs";
4
- import { l as getColorField, o as getBorderRadiusField } from "./registries-Ct8o2YRe.mjs";
1
+ import { I as __exportAll } from "./portal_tenant_content-DPLnrtOG.mjs";
2
+ import { n as useDataSourceRegistryConfig } from "./registry-context-Bc-2fQnr.mjs";
3
+ import { i as useWidgetsApi, n as useWidgetPreviewContext, t as ErrorState } from "./error-state--Z2OlDFr.mjs";
4
+ import { l as getColorField, o as getBorderRadiusField } from "./registries-kvRRUHcO.mjs";
5
5
  import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
6
6
  import { useQuery } from "@tanstack/react-query";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -557,4 +557,4 @@ const mySiteWidgetPropertySchema = {
557
557
  //#endregion
558
558
  export { MySiteWidget_exports as n, mySiteWidgetPropertySchema as r, MySiteWidget as t };
559
559
 
560
- //# sourceMappingURL=MySiteWidget-CQNASVaF.mjs.map
560
+ //# sourceMappingURL=MySiteWidget-C0n9cSw7.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MySiteWidget-CQNASVaF.mjs","names":[],"sources":["../../widgets/src/hooks/use-mysite.preview.ts","../../widgets/src/hooks/use-mysite.ts","../../widgets/src/widgets/MySiteWidget.tsx"],"sourcesContent":["import type { MySiteData } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport const PREVIEW_DATA: MySiteData = {\n url: \"https://mysite.example.com\",\n views: 1248,\n leads: 43,\n userName: \"Jane\",\n};\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useWidgetsApi } from \"@fluid-app/portal-core/widgets-api-context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { useDataSourceRegistryConfig } from \"@fluid-app/portal-react/data-sources/registry-context\";\nimport { PREVIEW_DATA } from \"./use-mysite.preview\";\nimport type { MySiteData } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { MySiteData } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useMySite(): UseQueryResult<MySiteData, Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"mysite\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchMySite(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type CSSProperties,\n} from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { getBorderRadiusField, getColorField } from \"../core/fields\";\nimport { useMySite, type MySiteData } from \"../hooks/use-mysite\";\nimport { ErrorState } from \"../components/error-state\";\nimport { QRCodeSVG } from \"qrcode.react\";\nimport { ArrowUpRight, Check, Copy, Globe } from \"lucide-react\";\n\ntype MySiteWidgetProps = ComponentProps<\"div\"> & {\n // Design\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Display toggles\n showPreview?: boolean;\n showAnalytics?: boolean;\n showLiveBadge?: boolean;\n showQR?: boolean;\n};\n\nconst formatCompactNumber = (n: number | undefined): string => {\n const value = n ?? 0;\n if (value < 1000) return value.toLocaleString();\n if (value < 10_000) return `${(value / 1000).toFixed(1)}k`;\n if (value < 1_000_000) return `${Math.round(value / 1000)}k`;\n return `${(value / 1_000_000).toFixed(1)}m`;\n};\n\nconst splitUrl = (url: string): { prefix: string; path: string } => {\n try {\n const parsed = new URL(url);\n return {\n prefix: `${parsed.protocol}//${parsed.host}`,\n path:\n `${parsed.pathname}${parsed.search}${parsed.hash}`.replace(\n /^\\/$/,\n \"\",\n ) || \"\",\n };\n } catch {\n return { prefix: \"\", path: url };\n }\n};\n\nexport function MySiteWidget({\n background = { type: \"solid\", color: \"background\" },\n textColor = \"foreground\",\n accentColor = \"primary\",\n borderRadius = \"xl\",\n\n showPreview = true,\n showAnalytics = true,\n showLiveBadge = true,\n showQR = true,\n\n className,\n ...props\n}: MySiteWidgetProps): React.JSX.Element | null {\n const { copyState, markCopied } = useTimedCopyState(1600);\n const { rootRef: widgetRootRef, isWide } = useIsContainerWide(720);\n const {\n frameRef: previewFrameRef,\n scale,\n iframeHeight,\n } = useScaledIframePreview({\n viewportWidth: 1280,\n minIframeHeight: 500,\n });\n\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n const { data: mySite, isLoading, isError } = useMySite();\n const { isPreview } = useWidgetPreviewContext();\n const realMySite = useRealMySiteData(mySite, isPreview);\n const { hasRealSite, url, views, leads } = realMySite;\n const { previewUrl, hostLabel, urlPrefix, urlPath } =\n useMySiteDisplayUrls(url);\n const showDashboardLayout = isWide && hasRealSite;\n const showStats = showAnalytics && hasRealSite;\n const showFooter = hasRealSite;\n\n const handleCopy = async () => {\n if (!url) return;\n try {\n await navigator.clipboard.writeText(url);\n markCopied();\n } catch (error) {\n console.error(\"Failed to copy MySite URL:\", error);\n }\n };\n\n if (!isLoading && !isError && !isPreview && !hasRealSite) {\n return null;\n }\n\n // Hairline divider color — subtle, theme-aware\n const divider: CSSProperties = {\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n };\n\n return (\n <div\n ref={widgetRootRef}\n className={`@container relative overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} ${className ?? \"\"}`}\n style={{\n backgroundImage,\n boxShadow: `0 1px 2px rgba(15,23,42,0.04), 0 20px 40px -24px rgba(15,23,42,0.16), inset 0 0 0 1px color-mix(in oklch, var(--color-${textColor}) 7%, transparent)`,\n }}\n {...props}\n >\n {isLoading ? (\n <MySiteSkeleton\n textColor={textColor}\n accentColor={accentColor}\n borderRadius={borderRadius}\n />\n ) : isError ? (\n <div className=\"p-6\">\n <ErrorState />\n </div>\n ) : showDashboardLayout ? (\n <div className=\"flex items-stretch\">\n {/* Left: site preview */}\n {showPreview && (\n <div\n className=\"relative isolate shrink-0 bg-white\"\n style={{\n width: \"45%\",\n borderRight: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n }}\n >\n <div\n ref={previewFrameRef}\n className=\"relative h-full w-full overflow-hidden bg-white\"\n >\n <iframe\n className=\"pointer-events-none absolute top-0 left-0 origin-top-left bg-white\"\n src={previewUrl}\n title={`${hostLabel} preview`}\n loading=\"lazy\"\n style={{\n width: \"1280px\",\n height: `${iframeHeight}px`,\n transform: `scale(${scale})`,\n }}\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-px\"\n style={{\n background:\n \"linear-gradient(to right, transparent, rgba(255,255,255,0.7), transparent)\",\n }}\n />\n </div>\n\n {showLiveBadge && (\n <div className=\"absolute top-4 left-4\">\n <span\n className={`inline-flex items-center gap-1.5 rounded-${borderRadius} bg-white px-2.5 py-1 text-[10px] font-bold tracking-[0.18em] text-slate-700 uppercase`}\n style={{\n boxShadow:\n \"0 2px 8px rgba(15,23,42,0.08), inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n >\n <span\n aria-hidden=\"true\"\n className={`bg-${accentColor} size-1.5 rounded-full`}\n />\n Live\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Right: dashboard column */}\n <div className=\"flex min-w-0 flex-1 flex-col gap-3.5 p-5 sm:p-6\">\n <div>\n <span\n className={`text-[10px] font-bold tracking-[0.2em] uppercase text-${textColor}/55`}\n >\n Your Storefront\n </span>\n <h2\n className={`mt-1 text-[22px] leading-[1.1] font-bold tracking-[-0.02em] text-${textColor}`}\n >\n You&rsquo;re live\n </h2>\n </div>\n\n {hasRealSite && (\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={\n copyState === \"copied\"\n ? \"Copied to clipboard\"\n : \"Copy site link\"\n }\n className={`group/copy flex items-center gap-2.5 rounded-${borderRadius} px-3 py-2 text-[13px] transition-all duration-300 focus:outline-none focus-visible:ring-2 focus-visible:ring-${accentColor}/40 ${copyState === \"copied\" ? `bg-${accentColor}/10` : `bg-${textColor}/5 hover:bg-${textColor}/10`}`}\n style={{\n boxShadow: `inset 0 0 0 1px color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n }}\n >\n <Globe className={`size-3.5 shrink-0 text-${textColor}/55`} />\n <span\n className={`min-w-0 flex-1 truncate text-left font-semibold tabular-nums text-${textColor}`}\n >\n {hostLabel}\n {urlPath}\n </span>\n <span\n className={`flex size-7 shrink-0 items-center justify-center rounded-full transition-all duration-300 ${copyState === \"copied\" ? `bg-${accentColor} text-${accentColor}-foreground` : `bg-${textColor} text-${backgroundColor}`}`}\n >\n {copyState === \"copied\" ? (\n <Check className=\"size-3\" />\n ) : (\n <Copy className=\"size-3\" />\n )}\n </span>\n </button>\n )}\n\n {showStats && (\n <>\n <div\n style={{\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n }}\n />\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <div\n className={`text-[10px] font-bold tracking-[0.18em] uppercase text-${textColor}/55`}\n >\n Visitors\n </div>\n <div\n className={`mt-1 text-[32px] leading-none font-bold tracking-[-0.02em] tabular-nums text-${textColor}`}\n >\n {formatCompactNumber(views)}\n </div>\n </div>\n <div>\n <div\n className={`text-[10px] font-bold tracking-[0.18em] uppercase text-${textColor}/55`}\n >\n Leads\n </div>\n <div\n className={`mt-1 text-[32px] leading-none font-bold tracking-[-0.02em] tabular-nums text-${textColor}`}\n >\n {formatCompactNumber(leads)}\n </div>\n </div>\n </div>\n </>\n )}\n\n {hasRealSite && (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`group/visit mt-auto inline-flex items-center justify-between gap-2 rounded-${borderRadius} bg-${accentColor} px-4 py-3 text-[13px] font-bold text-${accentColor}-foreground transition-all duration-300 hover:shadow-[0_12px_28px_-8px_color-mix(in_oklch,var(--color-${accentColor})_60%,transparent)]`}\n >\n <span>Open the live site</span>\n <ArrowUpRight className=\"size-3.5 transition-transform duration-300 group-hover/visit:translate-x-0.5 group-hover/visit:-translate-y-0.5\" />\n </a>\n )}\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col\">\n {/* Card body: site preview — flush to the top of the card */}\n {showPreview && (hasRealSite || isPreview) && (\n <div className=\"relative isolate bg-white\">\n <div\n ref={previewFrameRef}\n className=\"relative aspect-[16/10] w-full overflow-hidden bg-white\"\n >\n {isPreview || !hasRealSite ? (\n <MySitePreviewPlaceholder hostLabel={hostLabel} />\n ) : (\n <iframe\n className=\"pointer-events-none absolute top-0 left-0 origin-top-left bg-white\"\n src={previewUrl}\n title={`${hostLabel} preview`}\n loading=\"lazy\"\n style={{\n width: \"1280px\",\n height: `${iframeHeight}px`,\n transform: `scale(${scale})`,\n }}\n />\n )}\n {/* Very subtle top-edge sheen for polish */}\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-px\"\n style={{\n background:\n \"linear-gradient(to right, transparent, rgba(255,255,255,0.7), transparent)\",\n }}\n />\n </div>\n\n {/* LIVE badge — quiet, not blinking */}\n {showLiveBadge && hasRealSite && (\n <div className=\"absolute top-3 right-3\">\n <span\n className={`inline-flex items-center gap-1.5 rounded-${borderRadius} bg-white px-2 py-1 text-[9px] font-bold tracking-[0.18em] text-slate-700 uppercase`}\n style={{\n boxShadow:\n \"0 2px 8px rgba(15,23,42,0.08), inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n >\n <span\n aria-hidden=\"true\"\n className={`bg-${accentColor} size-1.5 rounded-full`}\n />\n Live\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Card footer — distinct tinted surface, QR column + right column */}\n {showFooter && (\n <div\n className=\"flex items-stretch\"\n style={{\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n background: `color-mix(in oklch, var(--color-${textColor}) 3%, transparent)`,\n }}\n >\n {/* QR column — spans the full footer height */}\n {showQR && hasRealSite && (\n <div\n className=\"flex shrink-0 items-center justify-center p-4\"\n style={{\n borderRight: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n >\n <div\n className={`flex flex-col items-center gap-1.5 rounded-${borderRadius} bg-white p-2.5`}\n style={{\n boxShadow:\n \"0 2px 8px rgba(15,23,42,0.05), inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n role=\"img\"\n aria-label=\"QR code for your site\"\n >\n <QRCodeSVG\n value={url}\n size={64}\n level=\"H\"\n bgColor=\"#ffffff\"\n fgColor=\"#0f172a\"\n />\n </div>\n </div>\n )}\n\n {/* Right column */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* Stats row */}\n {showStats && (\n <div className=\"grid grid-cols-2\">\n <StatCell\n label=\"Visitors\"\n value={formatCompactNumber(views)}\n textColor={textColor}\n />\n <StatCell\n label=\"Leads\"\n value={formatCompactNumber(leads)}\n textColor={textColor}\n leftDivider\n />\n </div>\n )}\n\n {/* Action row */}\n {hasRealSite && (\n <div\n className=\"flex items-center gap-2 px-4 py-3\"\n style={showStats ? divider : undefined}\n >\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={\n copyState === \"copied\"\n ? \"Copied to clipboard\"\n : \"Copy site link\"\n }\n className={`group/copy flex min-w-0 flex-1 items-center justify-between gap-2 rounded-${borderRadius} px-3 py-2 text-left text-[12px] transition-all duration-300 focus:outline-none focus-visible:ring-2 focus-visible:ring-${accentColor}/40 ${copyState === \"copied\" ? `bg-${accentColor}/10` : `bg-${textColor}/5 hover:bg-${textColor}/10`}`}\n style={{\n boxShadow: `inset 0 0 0 1px color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n >\n <span\n className={`min-w-0 flex-1 truncate font-medium text-${textColor}`}\n >\n {urlPrefix && (\n <span className={`text-${textColor}/45`}>\n {urlPrefix}\n </span>\n )}\n <span className=\"font-semibold\">{urlPath || \"/\"}</span>\n </span>\n <span\n className={`flex size-6 shrink-0 items-center justify-center rounded-full transition-all duration-300 ${copyState === \"copied\" ? `scale-105 bg-${accentColor} text-${accentColor}-foreground` : `bg-${textColor}/10 text-${textColor} group-hover/copy:bg-${textColor}/20`}`}\n >\n {copyState === \"copied\" ? (\n <Check className=\"size-3\" />\n ) : (\n <Copy className=\"size-3\" />\n )}\n </span>\n </button>\n\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Visit site\"\n className={`group/visit inline-flex size-9 shrink-0 items-center justify-center rounded-${borderRadius} bg-${accentColor} text-${accentColor}-foreground transition-all duration-300 hover:shadow-[0_10px_24px_-8px_color-mix(in_oklch,var(--color-${accentColor})_60%,transparent)]`}\n >\n <ArrowUpRight className=\"size-3.5 transition-transform duration-300 group-hover/visit:translate-x-0.5 group-hover/visit:-translate-y-0.5\" />\n </a>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\ntype MySitePreviewPlaceholderProps = {\n hostLabel: string;\n};\n\n// Static placeholder shown in builder/preview contexts. Preview mode keeps\n// placeholder API values out of visible widget content.\nfunction MySitePreviewPlaceholder({\n hostLabel,\n}: MySitePreviewPlaceholderProps): React.JSX.Element {\n return (\n <div className=\"bg-muted/30 absolute inset-0 flex flex-col items-center justify-center gap-3 p-4 text-center\">\n <div className=\"bg-muted flex h-10 w-10 items-center justify-center rounded-full\">\n <Globe className=\"text-muted-foreground h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-foreground text-sm font-medium\">My Site</p>\n {hostLabel && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{hostLabel}</p>\n )}\n </div>\n </div>\n );\n}\n\ntype StatCellProps = {\n label: string;\n value: string;\n textColor: ColorOptions;\n leftDivider?: boolean;\n};\n\nfunction StatCell({ label, value, textColor, leftDivider }: StatCellProps) {\n const leftDividerStyle: CSSProperties | undefined = leftDivider\n ? {\n borderLeft: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }\n : undefined;\n\n return (\n <div className=\"flex flex-col gap-1.5 px-5 py-4\" style={leftDividerStyle}>\n <span\n className={`text-[10px] font-bold tracking-[0.16em] uppercase text-${textColor}/55`}\n >\n {label}\n </span>\n <span\n className={`text-[22px] leading-none font-bold tracking-[-0.02em] tabular-nums text-${textColor}`}\n >\n {value}\n </span>\n </div>\n );\n}\n\ntype MySiteSkeletonProps = {\n textColor: ColorOptions;\n accentColor: ColorOptions;\n borderRadius: BorderRadiusOptions;\n};\n\nfunction MySiteSkeleton({\n textColor,\n accentColor,\n borderRadius,\n}: MySiteSkeletonProps) {\n const divider: CSSProperties = {\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n };\n\n return (\n <div className=\"flex animate-pulse flex-col\" aria-busy=\"true\">\n <div\n className={`relative aspect-[16/10] w-full overflow-hidden bg-${textColor}/5`}\n />\n\n <div\n className=\"flex items-stretch\"\n style={{\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n background: `color-mix(in oklch, var(--color-${textColor}) 3%, transparent)`,\n }}\n >\n {/* QR placeholder column */}\n <div\n className=\"flex shrink-0 items-center justify-center p-4\"\n style={{\n borderRight: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n >\n <div\n className={`size-[84px] rounded-${borderRadius} bg-${textColor}/10`}\n />\n </div>\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"grid grid-cols-2\">\n {[0, 1].map((i) => (\n <div\n key={i}\n className=\"flex flex-col gap-2 px-5 py-4\"\n style={\n i > 0\n ? {\n borderLeft: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }\n : undefined\n }\n >\n <div className={`h-2 w-14 rounded-full bg-${textColor}/10`} />\n <div className={`h-5 w-16 rounded-full bg-${textColor}/15`} />\n </div>\n ))}\n </div>\n\n <div className=\"flex items-center gap-2 px-4 py-3\" style={divider}>\n <div\n className={`h-8 flex-1 rounded-${borderRadius} bg-${textColor}/10`}\n />\n <div\n className={`size-9 shrink-0 rounded-${borderRadius} bg-${accentColor}/30`}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// ----- Hooks -----\n\ntype CopyState = \"idle\" | \"copied\";\n\nfunction useRealMySiteData(mySite: MySiteData | undefined, isPreview: boolean) {\n return useMemo(() => {\n if (isPreview || !mySite?.url) {\n return {\n hasRealSite: false,\n url: \"\",\n views: 0,\n leads: 0,\n userName: \"\",\n };\n }\n\n return {\n hasRealSite: true,\n url: mySite.url,\n views: mySite.views,\n leads: mySite.leads,\n userName: mySite.userName,\n };\n }, [isPreview, mySite]);\n}\n\nfunction useMySiteDisplayUrls(url: string) {\n const previewUrl = useMemo(() => {\n if (!url) return \"\";\n try {\n const urlObj = new URL(url);\n urlObj.searchParams.set(\"preview\", \"true\");\n return urlObj.toString();\n } catch {\n return url;\n }\n }, [url]);\n\n const hostLabel = useMemo(() => {\n if (!url) return \"\";\n try {\n return new URL(url).host;\n } catch {\n return url.replace(/^https?:\\/\\//, \"\");\n }\n }, [url]);\n\n const { prefix: urlPrefix, path: urlPath } = useMemo(\n () => (url ? splitUrl(url) : { prefix: \"\", path: \"\" }),\n [url],\n );\n\n return { previewUrl, hostLabel, urlPrefix, urlPath };\n}\n\nfunction useTimedCopyState(timeoutMs: number) {\n const [copyState, setCopyState] = useState<CopyState>(\"idle\");\n\n useEffect(() => {\n if (copyState !== \"copied\") return;\n const id = window.setTimeout(() => setCopyState(\"idle\"), timeoutMs);\n return () => window.clearTimeout(id);\n }, [copyState, timeoutMs]);\n\n const markCopied = useCallback(() => {\n setCopyState(\"copied\");\n }, []);\n\n return { copyState, markCopied };\n}\n\n// useLayoutEffect warns on the server. Widgets are client-rendered, but guard\n// for parity with the rest of the codebase.\nconst useIsoLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// Switches to a \"wide\" layout once the container reaches `threshold` px.\n// Uses useLayoutEffect so the initial measurement and state-flip land\n// synchronously before paint, avoiding a narrow→wide flash on mount.\nfunction useIsContainerWide(threshold: number) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [isWide, setIsWide] = useState(false);\n\n useIsoLayoutEffect(() => {\n const el = rootRef.current;\n if (!el) return;\n const update = () => setIsWide(el.clientWidth >= threshold);\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [threshold]);\n\n return { rootRef, isWide };\n}\n\ntype ScaledIframePreviewOptions = {\n viewportWidth: number;\n minIframeHeight: number;\n};\n\n// Renders the iframe at a real desktop viewport (`viewportWidth`) and scales\n// it to fit the actual container. The iframe's rendered height is computed\n// dynamically so it fills the container in both aspect-locked compact mode\n// AND the height-driven wide mode (no whitespace gap below the preview).\nfunction useScaledIframePreview({\n viewportWidth,\n minIframeHeight,\n}: ScaledIframePreviewOptions) {\n const [metrics, setMetrics] = useState({\n scale: 0.5,\n iframeHeight: minIframeHeight,\n });\n\n const frameRef = useCallback(\n (el: HTMLDivElement | null) => {\n if (!el) return;\n const update = () => {\n const w = el.clientWidth;\n const h = el.clientHeight;\n if (w > 0 && h > 0) {\n const scale = w / viewportWidth;\n const iframeHeight = Math.max(minIframeHeight, h / scale);\n setMetrics((prev) =>\n prev.scale === scale && prev.iframeHeight === iframeHeight\n ? prev\n : { scale, iframeHeight },\n );\n }\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n },\n [viewportWidth, minIframeHeight],\n );\n\n return { frameRef, scale: metrics.scale, iframeHeight: metrics.iframeHeight };\n}\n\nexport const mySiteWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"MySiteWidget\",\n displayName: \"MySite Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Display group\n {\n key: \"showPreview\",\n label: \"Show Site Preview\",\n type: \"boolean\",\n description: \"Show the live iframe preview of the storefront\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showAnalytics\",\n label: \"Show Stats\",\n type: \"boolean\",\n description: \"Visitors and Leads grid in the footer\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showLiveBadge\",\n label: \"Show LIVE Badge\",\n type: \"boolean\",\n description: \"Small 'Live' chip in the preview corner\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showQR\",\n label: \"Show QR Code\",\n type: \"boolean\",\n description: \"Show a scannable QR code in the card footer\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n\n // Design group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the widget container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Primary text, hairline, and neutral chip color\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Drives the Live dot, conversion ring, and Visit CTA\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Corner radius for the widget and inner chips\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MySiteWidget-C0n9cSw7.mjs","names":[],"sources":["../../widgets/src/hooks/use-mysite.preview.ts","../../widgets/src/hooks/use-mysite.ts","../../widgets/src/widgets/MySiteWidget.tsx"],"sourcesContent":["import type { MySiteData } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport const PREVIEW_DATA: MySiteData = {\n url: \"https://mysite.example.com\",\n views: 1248,\n leads: 43,\n userName: \"Jane\",\n};\n","import { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useWidgetsApi } from \"@fluid-app/portal-core/widgets-api-context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { useDataSourceRegistryConfig } from \"@fluid-app/portal-react/data-sources/registry-context\";\nimport { PREVIEW_DATA } from \"./use-mysite.preview\";\nimport type { MySiteData } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { MySiteData } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useMySite(): UseQueryResult<MySiteData, Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"mysite\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchMySite(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type CSSProperties,\n} from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { useWidgetPreviewContext } from \"@fluid-app/portal-react/data-sources/preview-context\";\nimport { getBorderRadiusField, getColorField } from \"../core/fields\";\nimport { useMySite, type MySiteData } from \"../hooks/use-mysite\";\nimport { ErrorState } from \"../components/error-state\";\nimport { QRCodeSVG } from \"qrcode.react\";\nimport { ArrowUpRight, Check, Copy, Globe } from \"lucide-react\";\n\ntype MySiteWidgetProps = ComponentProps<\"div\"> & {\n // Design\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Display toggles\n showPreview?: boolean;\n showAnalytics?: boolean;\n showLiveBadge?: boolean;\n showQR?: boolean;\n};\n\nconst formatCompactNumber = (n: number | undefined): string => {\n const value = n ?? 0;\n if (value < 1000) return value.toLocaleString();\n if (value < 10_000) return `${(value / 1000).toFixed(1)}k`;\n if (value < 1_000_000) return `${Math.round(value / 1000)}k`;\n return `${(value / 1_000_000).toFixed(1)}m`;\n};\n\nconst splitUrl = (url: string): { prefix: string; path: string } => {\n try {\n const parsed = new URL(url);\n return {\n prefix: `${parsed.protocol}//${parsed.host}`,\n path:\n `${parsed.pathname}${parsed.search}${parsed.hash}`.replace(\n /^\\/$/,\n \"\",\n ) || \"\",\n };\n } catch {\n return { prefix: \"\", path: url };\n }\n};\n\nexport function MySiteWidget({\n background = { type: \"solid\", color: \"background\" },\n textColor = \"foreground\",\n accentColor = \"primary\",\n borderRadius = \"xl\",\n\n showPreview = true,\n showAnalytics = true,\n showLiveBadge = true,\n showQR = true,\n\n className,\n ...props\n}: MySiteWidgetProps): React.JSX.Element | null {\n const { copyState, markCopied } = useTimedCopyState(1600);\n const { rootRef: widgetRootRef, isWide } = useIsContainerWide(720);\n const {\n frameRef: previewFrameRef,\n scale,\n iframeHeight,\n } = useScaledIframePreview({\n viewportWidth: 1280,\n minIframeHeight: 500,\n });\n\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n const { data: mySite, isLoading, isError } = useMySite();\n const { isPreview } = useWidgetPreviewContext();\n const realMySite = useRealMySiteData(mySite, isPreview);\n const { hasRealSite, url, views, leads } = realMySite;\n const { previewUrl, hostLabel, urlPrefix, urlPath } =\n useMySiteDisplayUrls(url);\n const showDashboardLayout = isWide && hasRealSite;\n const showStats = showAnalytics && hasRealSite;\n const showFooter = hasRealSite;\n\n const handleCopy = async () => {\n if (!url) return;\n try {\n await navigator.clipboard.writeText(url);\n markCopied();\n } catch (error) {\n console.error(\"Failed to copy MySite URL:\", error);\n }\n };\n\n if (!isLoading && !isError && !isPreview && !hasRealSite) {\n return null;\n }\n\n // Hairline divider color — subtle, theme-aware\n const divider: CSSProperties = {\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n };\n\n return (\n <div\n ref={widgetRootRef}\n className={`@container relative overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} ${className ?? \"\"}`}\n style={{\n backgroundImage,\n boxShadow: `0 1px 2px rgba(15,23,42,0.04), 0 20px 40px -24px rgba(15,23,42,0.16), inset 0 0 0 1px color-mix(in oklch, var(--color-${textColor}) 7%, transparent)`,\n }}\n {...props}\n >\n {isLoading ? (\n <MySiteSkeleton\n textColor={textColor}\n accentColor={accentColor}\n borderRadius={borderRadius}\n />\n ) : isError ? (\n <div className=\"p-6\">\n <ErrorState />\n </div>\n ) : showDashboardLayout ? (\n <div className=\"flex items-stretch\">\n {/* Left: site preview */}\n {showPreview && (\n <div\n className=\"relative isolate shrink-0 bg-white\"\n style={{\n width: \"45%\",\n borderRight: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n }}\n >\n <div\n ref={previewFrameRef}\n className=\"relative h-full w-full overflow-hidden bg-white\"\n >\n <iframe\n className=\"pointer-events-none absolute top-0 left-0 origin-top-left bg-white\"\n src={previewUrl}\n title={`${hostLabel} preview`}\n loading=\"lazy\"\n style={{\n width: \"1280px\",\n height: `${iframeHeight}px`,\n transform: `scale(${scale})`,\n }}\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-px\"\n style={{\n background:\n \"linear-gradient(to right, transparent, rgba(255,255,255,0.7), transparent)\",\n }}\n />\n </div>\n\n {showLiveBadge && (\n <div className=\"absolute top-4 left-4\">\n <span\n className={`inline-flex items-center gap-1.5 rounded-${borderRadius} bg-white px-2.5 py-1 text-[10px] font-bold tracking-[0.18em] text-slate-700 uppercase`}\n style={{\n boxShadow:\n \"0 2px 8px rgba(15,23,42,0.08), inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n >\n <span\n aria-hidden=\"true\"\n className={`bg-${accentColor} size-1.5 rounded-full`}\n />\n Live\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Right: dashboard column */}\n <div className=\"flex min-w-0 flex-1 flex-col gap-3.5 p-5 sm:p-6\">\n <div>\n <span\n className={`text-[10px] font-bold tracking-[0.2em] uppercase text-${textColor}/55`}\n >\n Your Storefront\n </span>\n <h2\n className={`mt-1 text-[22px] leading-[1.1] font-bold tracking-[-0.02em] text-${textColor}`}\n >\n You&rsquo;re live\n </h2>\n </div>\n\n {hasRealSite && (\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={\n copyState === \"copied\"\n ? \"Copied to clipboard\"\n : \"Copy site link\"\n }\n className={`group/copy flex items-center gap-2.5 rounded-${borderRadius} px-3 py-2 text-[13px] transition-all duration-300 focus:outline-none focus-visible:ring-2 focus-visible:ring-${accentColor}/40 ${copyState === \"copied\" ? `bg-${accentColor}/10` : `bg-${textColor}/5 hover:bg-${textColor}/10`}`}\n style={{\n boxShadow: `inset 0 0 0 1px color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n }}\n >\n <Globe className={`size-3.5 shrink-0 text-${textColor}/55`} />\n <span\n className={`min-w-0 flex-1 truncate text-left font-semibold tabular-nums text-${textColor}`}\n >\n {hostLabel}\n {urlPath}\n </span>\n <span\n className={`flex size-7 shrink-0 items-center justify-center rounded-full transition-all duration-300 ${copyState === \"copied\" ? `bg-${accentColor} text-${accentColor}-foreground` : `bg-${textColor} text-${backgroundColor}`}`}\n >\n {copyState === \"copied\" ? (\n <Check className=\"size-3\" />\n ) : (\n <Copy className=\"size-3\" />\n )}\n </span>\n </button>\n )}\n\n {showStats && (\n <>\n <div\n style={{\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n }}\n />\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <div\n className={`text-[10px] font-bold tracking-[0.18em] uppercase text-${textColor}/55`}\n >\n Visitors\n </div>\n <div\n className={`mt-1 text-[32px] leading-none font-bold tracking-[-0.02em] tabular-nums text-${textColor}`}\n >\n {formatCompactNumber(views)}\n </div>\n </div>\n <div>\n <div\n className={`text-[10px] font-bold tracking-[0.18em] uppercase text-${textColor}/55`}\n >\n Leads\n </div>\n <div\n className={`mt-1 text-[32px] leading-none font-bold tracking-[-0.02em] tabular-nums text-${textColor}`}\n >\n {formatCompactNumber(leads)}\n </div>\n </div>\n </div>\n </>\n )}\n\n {hasRealSite && (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`group/visit mt-auto inline-flex items-center justify-between gap-2 rounded-${borderRadius} bg-${accentColor} px-4 py-3 text-[13px] font-bold text-${accentColor}-foreground transition-all duration-300 hover:shadow-[0_12px_28px_-8px_color-mix(in_oklch,var(--color-${accentColor})_60%,transparent)]`}\n >\n <span>Open the live site</span>\n <ArrowUpRight className=\"size-3.5 transition-transform duration-300 group-hover/visit:translate-x-0.5 group-hover/visit:-translate-y-0.5\" />\n </a>\n )}\n </div>\n </div>\n ) : (\n <div className=\"flex flex-col\">\n {/* Card body: site preview — flush to the top of the card */}\n {showPreview && (hasRealSite || isPreview) && (\n <div className=\"relative isolate bg-white\">\n <div\n ref={previewFrameRef}\n className=\"relative aspect-[16/10] w-full overflow-hidden bg-white\"\n >\n {isPreview || !hasRealSite ? (\n <MySitePreviewPlaceholder hostLabel={hostLabel} />\n ) : (\n <iframe\n className=\"pointer-events-none absolute top-0 left-0 origin-top-left bg-white\"\n src={previewUrl}\n title={`${hostLabel} preview`}\n loading=\"lazy\"\n style={{\n width: \"1280px\",\n height: `${iframeHeight}px`,\n transform: `scale(${scale})`,\n }}\n />\n )}\n {/* Very subtle top-edge sheen for polish */}\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-px\"\n style={{\n background:\n \"linear-gradient(to right, transparent, rgba(255,255,255,0.7), transparent)\",\n }}\n />\n </div>\n\n {/* LIVE badge — quiet, not blinking */}\n {showLiveBadge && hasRealSite && (\n <div className=\"absolute top-3 right-3\">\n <span\n className={`inline-flex items-center gap-1.5 rounded-${borderRadius} bg-white px-2 py-1 text-[9px] font-bold tracking-[0.18em] text-slate-700 uppercase`}\n style={{\n boxShadow:\n \"0 2px 8px rgba(15,23,42,0.08), inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n >\n <span\n aria-hidden=\"true\"\n className={`bg-${accentColor} size-1.5 rounded-full`}\n />\n Live\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Card footer — distinct tinted surface, QR column + right column */}\n {showFooter && (\n <div\n className=\"flex items-stretch\"\n style={{\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n background: `color-mix(in oklch, var(--color-${textColor}) 3%, transparent)`,\n }}\n >\n {/* QR column — spans the full footer height */}\n {showQR && hasRealSite && (\n <div\n className=\"flex shrink-0 items-center justify-center p-4\"\n style={{\n borderRight: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n >\n <div\n className={`flex flex-col items-center gap-1.5 rounded-${borderRadius} bg-white p-2.5`}\n style={{\n boxShadow:\n \"0 2px 8px rgba(15,23,42,0.05), inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n role=\"img\"\n aria-label=\"QR code for your site\"\n >\n <QRCodeSVG\n value={url}\n size={64}\n level=\"H\"\n bgColor=\"#ffffff\"\n fgColor=\"#0f172a\"\n />\n </div>\n </div>\n )}\n\n {/* Right column */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* Stats row */}\n {showStats && (\n <div className=\"grid grid-cols-2\">\n <StatCell\n label=\"Visitors\"\n value={formatCompactNumber(views)}\n textColor={textColor}\n />\n <StatCell\n label=\"Leads\"\n value={formatCompactNumber(leads)}\n textColor={textColor}\n leftDivider\n />\n </div>\n )}\n\n {/* Action row */}\n {hasRealSite && (\n <div\n className=\"flex items-center gap-2 px-4 py-3\"\n style={showStats ? divider : undefined}\n >\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={\n copyState === \"copied\"\n ? \"Copied to clipboard\"\n : \"Copy site link\"\n }\n className={`group/copy flex min-w-0 flex-1 items-center justify-between gap-2 rounded-${borderRadius} px-3 py-2 text-left text-[12px] transition-all duration-300 focus:outline-none focus-visible:ring-2 focus-visible:ring-${accentColor}/40 ${copyState === \"copied\" ? `bg-${accentColor}/10` : `bg-${textColor}/5 hover:bg-${textColor}/10`}`}\n style={{\n boxShadow: `inset 0 0 0 1px color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n >\n <span\n className={`min-w-0 flex-1 truncate font-medium text-${textColor}`}\n >\n {urlPrefix && (\n <span className={`text-${textColor}/45`}>\n {urlPrefix}\n </span>\n )}\n <span className=\"font-semibold\">{urlPath || \"/\"}</span>\n </span>\n <span\n className={`flex size-6 shrink-0 items-center justify-center rounded-full transition-all duration-300 ${copyState === \"copied\" ? `scale-105 bg-${accentColor} text-${accentColor}-foreground` : `bg-${textColor}/10 text-${textColor} group-hover/copy:bg-${textColor}/20`}`}\n >\n {copyState === \"copied\" ? (\n <Check className=\"size-3\" />\n ) : (\n <Copy className=\"size-3\" />\n )}\n </span>\n </button>\n\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Visit site\"\n className={`group/visit inline-flex size-9 shrink-0 items-center justify-center rounded-${borderRadius} bg-${accentColor} text-${accentColor}-foreground transition-all duration-300 hover:shadow-[0_10px_24px_-8px_color-mix(in_oklch,var(--color-${accentColor})_60%,transparent)]`}\n >\n <ArrowUpRight className=\"size-3.5 transition-transform duration-300 group-hover/visit:translate-x-0.5 group-hover/visit:-translate-y-0.5\" />\n </a>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\ntype MySitePreviewPlaceholderProps = {\n hostLabel: string;\n};\n\n// Static placeholder shown in builder/preview contexts. Preview mode keeps\n// placeholder API values out of visible widget content.\nfunction MySitePreviewPlaceholder({\n hostLabel,\n}: MySitePreviewPlaceholderProps): React.JSX.Element {\n return (\n <div className=\"bg-muted/30 absolute inset-0 flex flex-col items-center justify-center gap-3 p-4 text-center\">\n <div className=\"bg-muted flex h-10 w-10 items-center justify-center rounded-full\">\n <Globe className=\"text-muted-foreground h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-foreground text-sm font-medium\">My Site</p>\n {hostLabel && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{hostLabel}</p>\n )}\n </div>\n </div>\n );\n}\n\ntype StatCellProps = {\n label: string;\n value: string;\n textColor: ColorOptions;\n leftDivider?: boolean;\n};\n\nfunction StatCell({ label, value, textColor, leftDivider }: StatCellProps) {\n const leftDividerStyle: CSSProperties | undefined = leftDivider\n ? {\n borderLeft: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }\n : undefined;\n\n return (\n <div className=\"flex flex-col gap-1.5 px-5 py-4\" style={leftDividerStyle}>\n <span\n className={`text-[10px] font-bold tracking-[0.16em] uppercase text-${textColor}/55`}\n >\n {label}\n </span>\n <span\n className={`text-[22px] leading-none font-bold tracking-[-0.02em] tabular-nums text-${textColor}`}\n >\n {value}\n </span>\n </div>\n );\n}\n\ntype MySiteSkeletonProps = {\n textColor: ColorOptions;\n accentColor: ColorOptions;\n borderRadius: BorderRadiusOptions;\n};\n\nfunction MySiteSkeleton({\n textColor,\n accentColor,\n borderRadius,\n}: MySiteSkeletonProps) {\n const divider: CSSProperties = {\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n };\n\n return (\n <div className=\"flex animate-pulse flex-col\" aria-busy=\"true\">\n <div\n className={`relative aspect-[16/10] w-full overflow-hidden bg-${textColor}/5`}\n />\n\n <div\n className=\"flex items-stretch\"\n style={{\n borderTop: `1px solid color-mix(in oklch, var(--color-${textColor}) 10%, transparent)`,\n background: `color-mix(in oklch, var(--color-${textColor}) 3%, transparent)`,\n }}\n >\n {/* QR placeholder column */}\n <div\n className=\"flex shrink-0 items-center justify-center p-4\"\n style={{\n borderRight: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n >\n <div\n className={`size-[84px] rounded-${borderRadius} bg-${textColor}/10`}\n />\n </div>\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"grid grid-cols-2\">\n {[0, 1].map((i) => (\n <div\n key={i}\n className=\"flex flex-col gap-2 px-5 py-4\"\n style={\n i > 0\n ? {\n borderLeft: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }\n : undefined\n }\n >\n <div className={`h-2 w-14 rounded-full bg-${textColor}/10`} />\n <div className={`h-5 w-16 rounded-full bg-${textColor}/15`} />\n </div>\n ))}\n </div>\n\n <div className=\"flex items-center gap-2 px-4 py-3\" style={divider}>\n <div\n className={`h-8 flex-1 rounded-${borderRadius} bg-${textColor}/10`}\n />\n <div\n className={`size-9 shrink-0 rounded-${borderRadius} bg-${accentColor}/30`}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// ----- Hooks -----\n\ntype CopyState = \"idle\" | \"copied\";\n\nfunction useRealMySiteData(mySite: MySiteData | undefined, isPreview: boolean) {\n return useMemo(() => {\n if (isPreview || !mySite?.url) {\n return {\n hasRealSite: false,\n url: \"\",\n views: 0,\n leads: 0,\n userName: \"\",\n };\n }\n\n return {\n hasRealSite: true,\n url: mySite.url,\n views: mySite.views,\n leads: mySite.leads,\n userName: mySite.userName,\n };\n }, [isPreview, mySite]);\n}\n\nfunction useMySiteDisplayUrls(url: string) {\n const previewUrl = useMemo(() => {\n if (!url) return \"\";\n try {\n const urlObj = new URL(url);\n urlObj.searchParams.set(\"preview\", \"true\");\n return urlObj.toString();\n } catch {\n return url;\n }\n }, [url]);\n\n const hostLabel = useMemo(() => {\n if (!url) return \"\";\n try {\n return new URL(url).host;\n } catch {\n return url.replace(/^https?:\\/\\//, \"\");\n }\n }, [url]);\n\n const { prefix: urlPrefix, path: urlPath } = useMemo(\n () => (url ? splitUrl(url) : { prefix: \"\", path: \"\" }),\n [url],\n );\n\n return { previewUrl, hostLabel, urlPrefix, urlPath };\n}\n\nfunction useTimedCopyState(timeoutMs: number) {\n const [copyState, setCopyState] = useState<CopyState>(\"idle\");\n\n useEffect(() => {\n if (copyState !== \"copied\") return;\n const id = window.setTimeout(() => setCopyState(\"idle\"), timeoutMs);\n return () => window.clearTimeout(id);\n }, [copyState, timeoutMs]);\n\n const markCopied = useCallback(() => {\n setCopyState(\"copied\");\n }, []);\n\n return { copyState, markCopied };\n}\n\n// useLayoutEffect warns on the server. Widgets are client-rendered, but guard\n// for parity with the rest of the codebase.\nconst useIsoLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// Switches to a \"wide\" layout once the container reaches `threshold` px.\n// Uses useLayoutEffect so the initial measurement and state-flip land\n// synchronously before paint, avoiding a narrow→wide flash on mount.\nfunction useIsContainerWide(threshold: number) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [isWide, setIsWide] = useState(false);\n\n useIsoLayoutEffect(() => {\n const el = rootRef.current;\n if (!el) return;\n const update = () => setIsWide(el.clientWidth >= threshold);\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [threshold]);\n\n return { rootRef, isWide };\n}\n\ntype ScaledIframePreviewOptions = {\n viewportWidth: number;\n minIframeHeight: number;\n};\n\n// Renders the iframe at a real desktop viewport (`viewportWidth`) and scales\n// it to fit the actual container. The iframe's rendered height is computed\n// dynamically so it fills the container in both aspect-locked compact mode\n// AND the height-driven wide mode (no whitespace gap below the preview).\nfunction useScaledIframePreview({\n viewportWidth,\n minIframeHeight,\n}: ScaledIframePreviewOptions) {\n const [metrics, setMetrics] = useState({\n scale: 0.5,\n iframeHeight: minIframeHeight,\n });\n\n const frameRef = useCallback(\n (el: HTMLDivElement | null) => {\n if (!el) return;\n const update = () => {\n const w = el.clientWidth;\n const h = el.clientHeight;\n if (w > 0 && h > 0) {\n const scale = w / viewportWidth;\n const iframeHeight = Math.max(minIframeHeight, h / scale);\n setMetrics((prev) =>\n prev.scale === scale && prev.iframeHeight === iframeHeight\n ? prev\n : { scale, iframeHeight },\n );\n }\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n },\n [viewportWidth, minIframeHeight],\n );\n\n return { frameRef, scale: metrics.scale, iframeHeight: metrics.iframeHeight };\n}\n\nexport const mySiteWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"MySiteWidget\",\n displayName: \"MySite Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Display group\n {\n key: \"showPreview\",\n label: \"Show Site Preview\",\n type: \"boolean\",\n description: \"Show the live iframe preview of the storefront\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showAnalytics\",\n label: \"Show Stats\",\n type: \"boolean\",\n description: \"Visitors and Leads grid in the footer\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showLiveBadge\",\n label: \"Show LIVE Badge\",\n type: \"boolean\",\n description: \"Small 'Live' chip in the preview corner\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n {\n key: \"showQR\",\n label: \"Show QR Code\",\n type: \"boolean\",\n description: \"Show a scannable QR code in the card footer\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Display\",\n },\n\n // Design group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the widget container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Primary text, hairline, and neutral chip color\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Drives the Live dot, conversion ring, and Visit CTA\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Corner radius for the widget and inner chips\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;;;;;AAEA,MAAa,eAA2B;CACtC,KAAK;CACL,OAAO;CACP,OAAO;CACP,UAAU;CACX;;;ACED,SAAgB,YAA+C;CAC7D,MAAM,aAAa,eAAe;CAClC,MAAM,EAAE,cAAc,yBAAyB;CAC/C,MAAM,EAAE,YAAY,6BAA6B;AAEjD,QAAO,SAAS;EACd,UAAU;GACR;GACA;GACA,YAAY,YAAY;GACzB;EACD,UAAU,EAAE,aAAa,WAAW,YAAY,OAAO;EACvD,SAAS,CAAC;EACV,GAAI,aAAa,EAAE,iBAAiB,cAAc;EACnD,CAAC;;;;;;;;ACeJ,MAAM,uBAAuB,MAAkC;CAC7D,MAAM,QAAQ,KAAK;AACnB,KAAI,QAAQ,IAAM,QAAO,MAAM,gBAAgB;AAC/C,KAAI,QAAQ,IAAQ,QAAO,IAAI,QAAQ,KAAM,QAAQ,EAAE,CAAC;AACxD,KAAI,QAAQ,IAAW,QAAO,GAAG,KAAK,MAAM,QAAQ,IAAK,CAAC;AAC1D,QAAO,IAAI,QAAQ,KAAW,QAAQ,EAAE,CAAC;;AAG3C,MAAM,YAAY,QAAkD;AAClE,KAAI;EACF,MAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,SAAO;GACL,QAAQ,GAAG,OAAO,SAAS,IAAI,OAAO;GACtC,MACE,GAAG,OAAO,WAAW,OAAO,SAAS,OAAO,OAAO,QACjD,QACA,GACD,IAAI;GACR;SACK;AACN,SAAO;GAAE,QAAQ;GAAI,MAAM;GAAK;;;AAIpC,SAAgB,aAAa,EAC3B,aAAa;CAAE,MAAM;CAAS,OAAO;CAAc,EACnD,YAAY,cACZ,cAAc,WACd,eAAe,MAEf,cAAc,MACd,gBAAgB,MAChB,gBAAgB,MAChB,SAAS,MAET,WACA,GAAG,SAC2C;CAC9C,MAAM,EAAE,WAAW,eAAe,kBAAkB,KAAK;CACzD,MAAM,EAAE,SAAS,eAAe,WAAW,mBAAmB,IAAI;CAClE,MAAM,EACJ,UAAU,iBACV,OACA,iBACE,uBAAuB;EACzB,eAAe;EACf,iBAAiB;EAClB,CAAC;CAEF,MAAM,kBAAkB,WAAW,SAAS;CAC5C,MAAM,mBACH,WAAW,UAAU,aAAa,WAAW,UAAU,aACxD,WAAW,SAAS,UAChB,OAAO,WAAW,SAAS,aAAa,WAAW,SAAS,SAAS,KACrE;CAEN,MAAM,EAAE,MAAM,QAAQ,WAAW,YAAY,WAAW;CACxD,MAAM,EAAE,cAAc,yBAAyB;CAE/C,MAAM,EAAE,aAAa,KAAK,OAAO,UADd,kBAAkB,QAAQ,UAAU;CAEvD,MAAM,EAAE,YAAY,WAAW,WAAW,YACxC,qBAAqB,IAAI;CAC3B,MAAM,sBAAsB,UAAU;CACtC,MAAM,YAAY,iBAAiB;CACnC,MAAM,aAAa;CAEnB,MAAM,aAAa,YAAY;AAC7B,MAAI,CAAC,IAAK;AACV,MAAI;AACF,SAAM,UAAU,UAAU,UAAU,IAAI;AACxC,eAAY;WACL,OAAO;AACd,WAAQ,MAAM,8BAA8B,MAAM;;;AAItD,KAAI,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,YAC3C,QAAO;CAIT,MAAM,UAAyB,EAC7B,WAAW,6CAA6C,UAAU,qBACnE;AAED,QACE,oBAAC,OAAD;EACE,KAAK;EACL,WAAW,+CAA+C,aAAa,MAAM,gBAAgB,QAAQ,UAAU,GAAG,aAAa;EAC/H,OAAO;GACL;GACA,WAAW,yHAAyH,UAAU;GAC/I;EACD,GAAI;YAEH,YACC,oBAAC,gBAAD;GACa;GACE;GACC;GACd,CAAA,GACA,UACF,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,YAAD,EAAc,CAAA;GACV,CAAA,GACJ,sBACF,qBAAC,OAAD;GAAK,WAAU;aAAf,CAEG,eACC,qBAAC,OAAD;IACE,WAAU;IACV,OAAO;KACL,OAAO;KACP,aAAa,6CAA6C,UAAU;KACrE;cALH,CAOE,qBAAC,OAAD;KACE,KAAK;KACL,WAAU;eAFZ,CAIE,oBAAC,UAAD;MACE,WAAU;MACV,KAAK;MACL,OAAO,GAAG,UAAU;MACpB,SAAQ;MACR,OAAO;OACL,OAAO;OACP,QAAQ,GAAG,aAAa;OACxB,WAAW,SAAS,MAAM;OAC3B;MACD,CAAA,EACF,oBAAC,OAAD;MACE,eAAY;MACZ,WAAU;MACV,OAAO,EACL,YACE,8EACH;MACD,CAAA,CACE;QAEL,iBACC,oBAAC,OAAD;KAAK,WAAU;eACb,qBAAC,QAAD;MACE,WAAW,4CAA4C,aAAa;MACpE,OAAO,EACL,WACE,sEACH;gBALH,CAOE,oBAAC,QAAD;OACE,eAAY;OACZ,WAAW,MAAM,YAAY;OAC7B,CAAA,EAAA,OAEG;;KACH,CAAA,CAEJ;OAIR,qBAAC,OAAD;IAAK,WAAU;cAAf;KACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,QAAD;MACE,WAAW,yDAAyD,UAAU;gBAC/E;MAEM,CAAA,EACP,oBAAC,MAAD;MACE,WAAW,oEAAoE;gBAChF;MAEI,CAAA,CACD,EAAA,CAAA;KAEL,eACC,qBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,cACE,cAAc,WACV,wBACA;MAEN,WAAW,gDAAgD,aAAa,gHAAgH,YAAY,MAAM,cAAc,WAAW,MAAM,YAAY,OAAO,MAAM,UAAU,cAAc,UAAU;MACpS,OAAO,EACL,WAAW,mDAAmD,UAAU,sBACzE;gBAXH;OAaE,oBAAC,OAAD,EAAO,WAAW,0BAA0B,UAAU,MAAQ,CAAA;OAC9D,qBAAC,QAAD;QACE,WAAW,qEAAqE;kBADlF,CAGG,WACA,QACI;;OACP,oBAAC,QAAD;QACE,WAAW,6FAA6F,cAAc,WAAW,MAAM,YAAY,QAAQ,YAAY,eAAe,MAAM,UAAU,QAAQ;kBAE7M,cAAc,WACb,oBAAC,OAAD,EAAO,WAAU,UAAW,CAAA,GAE5B,oBAAC,MAAD,EAAM,WAAU,UAAW,CAAA;QAExB,CAAA;OACA;;KAGV,aACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,OAAD,EACE,OAAO,EACL,WAAW,6CAA6C,UAAU,sBACnE,EACD,CAAA,EACF,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,OAAD;OACE,WAAW,0DAA0D,UAAU;iBAChF;OAEK,CAAA,EACN,oBAAC,OAAD;OACE,WAAW,gFAAgF;iBAE1F,oBAAoB,MAAM;OACvB,CAAA,CACF,EAAA,CAAA,EACN,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,OAAD;OACE,WAAW,0DAA0D,UAAU;iBAChF;OAEK,CAAA,EACN,oBAAC,OAAD;OACE,WAAW,gFAAgF;iBAE1F,oBAAoB,MAAM;OACvB,CAAA,CACF,EAAA,CAAA,CACF;QACL,EAAA,CAAA;KAGJ,eACC,qBAAC,KAAD;MACE,MAAM;MACN,QAAO;MACP,KAAI;MACJ,WAAW,8EAA8E,aAAa,MAAM,YAAY,wCAAwC,YAAY,wGAAwG,YAAY;gBAJlS,CAME,oBAAC,QAAD,EAAA,UAAM,sBAAyB,CAAA,EAC/B,oBAAC,cAAD,EAAc,WAAU,mHAAoH,CAAA,CAC1I;;KAEF;MACF;OAEN,qBAAC,OAAD;GAAK,WAAU;aAAf,CAEG,gBAAgB,eAAe,cAC9B,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,OAAD;KACE,KAAK;KACL,WAAU;eAFZ,CAIG,aAAa,CAAC,cACb,oBAAC,0BAAD,EAAqC,WAAa,CAAA,GAElD,oBAAC,UAAD;MACE,WAAU;MACV,KAAK;MACL,OAAO,GAAG,UAAU;MACpB,SAAQ;MACR,OAAO;OACL,OAAO;OACP,QAAQ,GAAG,aAAa;OACxB,WAAW,SAAS,MAAM;OAC3B;MACD,CAAA,EAGJ,oBAAC,OAAD;MACE,eAAY;MACZ,WAAU;MACV,OAAO,EACL,YACE,8EACH;MACD,CAAA,CACE;QAGL,iBAAiB,eAChB,oBAAC,OAAD;KAAK,WAAU;eACb,qBAAC,QAAD;MACE,WAAW,4CAA4C,aAAa;MACpE,OAAO,EACL,WACE,sEACH;gBALH,CAOE,oBAAC,QAAD;OACE,eAAY;OACZ,WAAW,MAAM,YAAY;OAC7B,CAAA,EAAA,OAEG;;KACH,CAAA,CAEJ;OAIP,cACC,qBAAC,OAAD;IACE,WAAU;IACV,OAAO;KACL,WAAW,6CAA6C,UAAU;KAClE,YAAY,mCAAmC,UAAU;KAC1D;cALH,CAQG,UAAU,eACT,oBAAC,OAAD;KACE,WAAU;KACV,OAAO,EACL,aAAa,6CAA6C,UAAU,qBACrE;eAED,oBAAC,OAAD;MACE,WAAW,8CAA8C,aAAa;MACtE,OAAO,EACL,WACE,sEACH;MACD,MAAK;MACL,cAAW;gBAEX,oBAAC,WAAD;OACE,OAAO;OACP,MAAM;OACN,OAAM;OACN,SAAQ;OACR,SAAQ;OACR,CAAA;MACE,CAAA;KACF,CAAA,EAIR,qBAAC,OAAD;KAAK,WAAU;eAAf,CAEG,aACC,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,oBAAC,UAAD;OACE,OAAM;OACN,OAAO,oBAAoB,MAAM;OACtB;OACX,CAAA,EACF,oBAAC,UAAD;OACE,OAAM;OACN,OAAO,oBAAoB,MAAM;OACtB;OACX,aAAA;OACA,CAAA,CACE;SAIP,eACC,qBAAC,OAAD;MACE,WAAU;MACV,OAAO,YAAY,UAAU,KAAA;gBAF/B,CAIE,qBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,cACE,cAAc,WACV,wBACA;OAEN,WAAW,6EAA6E,aAAa,0HAA0H,YAAY,MAAM,cAAc,WAAW,MAAM,YAAY,OAAO,MAAM,UAAU,cAAc,UAAU;OAC3U,OAAO,EACL,WAAW,mDAAmD,UAAU,qBACzE;iBAXH,CAaE,qBAAC,QAAD;QACE,WAAW,4CAA4C;kBADzD,CAGG,aACC,oBAAC,QAAD;SAAM,WAAW,QAAQ,UAAU;mBAChC;SACI,CAAA,EAET,oBAAC,QAAD;SAAM,WAAU;mBAAiB,WAAW;SAAW,CAAA,CAClD;WACP,oBAAC,QAAD;QACE,WAAW,6FAA6F,cAAc,WAAW,gBAAgB,YAAY,QAAQ,YAAY,eAAe,MAAM,UAAU,WAAW,UAAU,uBAAuB,UAAU;kBAErQ,cAAc,WACb,oBAAC,OAAD,EAAO,WAAU,UAAW,CAAA,GAE5B,oBAAC,MAAD,EAAM,WAAU,UAAW,CAAA;QAExB,CAAA,CACA;UAET,oBAAC,KAAD;OACE,MAAM;OACN,QAAO;OACP,KAAI;OACJ,cAAW;OACX,WAAW,+EAA+E,aAAa,MAAM,YAAY,QAAQ,YAAY,wGAAwG,YAAY;iBAEjQ,oBAAC,cAAD,EAAc,WAAU,mHAAoH,CAAA;OAC1I,CAAA,CACA;QAEJ;OACF;MAEJ;;EAEJ,CAAA;;AAUV,SAAS,yBAAyB,EAChC,aACmD;AACnD,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,OAAD,EAAO,WAAU,iCAAkC,CAAA;GAC/C,CAAA,EACN,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,KAAD;GAAG,WAAU;aAAsC;GAAW,CAAA,EAC7D,aACC,oBAAC,KAAD;GAAG,WAAU;aAAwC;GAAc,CAAA,CAEjE,EAAA,CAAA,CACF;;;AAWV,SAAS,SAAS,EAAE,OAAO,OAAO,WAAW,eAA8B;AAOzE,QACE,qBAAC,OAAD;EAAK,WAAU;EAAkC,OAPC,cAChD,EACE,YAAY,6CAA6C,UAAU,qBACpE,GACD,KAAA;YAGF,CACE,oBAAC,QAAD;GACE,WAAW,0DAA0D,UAAU;aAE9E;GACI,CAAA,EACP,oBAAC,QAAD;GACE,WAAW,2EAA2E;aAErF;GACI,CAAA,CACH;;;AAUV,SAAS,eAAe,EACtB,WACA,aACA,gBACsB;CACtB,MAAM,UAAyB,EAC7B,WAAW,6CAA6C,UAAU,qBACnE;AAED,QACE,qBAAC,OAAD;EAAK,WAAU;EAA8B,aAAU;YAAvD,CACE,oBAAC,OAAD,EACE,WAAW,qDAAqD,UAAU,KAC1E,CAAA,EAEF,qBAAC,OAAD;GACE,WAAU;GACV,OAAO;IACL,WAAW,6CAA6C,UAAU;IAClE,YAAY,mCAAmC,UAAU;IAC1D;aALH,CAQE,oBAAC,OAAD;IACE,WAAU;IACV,OAAO,EACL,aAAa,6CAA6C,UAAU,qBACrE;cAED,oBAAC,OAAD,EACE,WAAW,uBAAuB,aAAa,MAAM,UAAU,MAC/D,CAAA;IACE,CAAA,EAEN,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,OAAD;KAAK,WAAU;eACZ,CAAC,GAAG,EAAE,CAAC,KAAK,MACX,qBAAC,OAAD;MAEE,WAAU;MACV,OACE,IAAI,IACA,EACE,YAAY,6CAA6C,UAAU,qBACpE,GACD,KAAA;gBARR,CAWE,oBAAC,OAAD,EAAK,WAAW,4BAA4B,UAAU,MAAQ,CAAA,EAC9D,oBAAC,OAAD,EAAK,WAAW,4BAA4B,UAAU,MAAQ,CAAA,CAC1D;QAZC,EAYD,CACN;KACE,CAAA,EAEN,qBAAC,OAAD;KAAK,WAAU;KAAoC,OAAO;eAA1D,CACE,oBAAC,OAAD,EACE,WAAW,sBAAsB,aAAa,MAAM,UAAU,MAC9D,CAAA,EACF,oBAAC,OAAD,EACE,WAAW,2BAA2B,aAAa,MAAM,YAAY,MACrE,CAAA,CACE;OACF;MACF;KACF;;;AAQV,SAAS,kBAAkB,QAAgC,WAAoB;AAC7E,QAAO,cAAc;AACnB,MAAI,aAAa,CAAC,QAAQ,IACxB,QAAO;GACL,aAAa;GACb,KAAK;GACL,OAAO;GACP,OAAO;GACP,UAAU;GACX;AAGH,SAAO;GACL,aAAa;GACb,KAAK,OAAO;GACZ,OAAO,OAAO;GACd,OAAO,OAAO;GACd,UAAU,OAAO;GAClB;IACA,CAAC,WAAW,OAAO,CAAC;;AAGzB,SAAS,qBAAqB,KAAa;CACzC,MAAM,aAAa,cAAc;AAC/B,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;GACF,MAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,UAAO,aAAa,IAAI,WAAW,OAAO;AAC1C,UAAO,OAAO,UAAU;UAClB;AACN,UAAO;;IAER,CAAC,IAAI,CAAC;CAET,MAAM,YAAY,cAAc;AAC9B,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,UAAO,IAAI,IAAI,IAAI,CAAC;UACd;AACN,UAAO,IAAI,QAAQ,gBAAgB,GAAG;;IAEvC,CAAC,IAAI,CAAC;CAET,MAAM,EAAE,QAAQ,WAAW,MAAM,YAAY,cACpC,MAAM,SAAS,IAAI,GAAG;EAAE,QAAQ;EAAI,MAAM;EAAI,EACrD,CAAC,IAAI,CACN;AAED,QAAO;EAAE;EAAY;EAAW;EAAW;EAAS;;AAGtD,SAAS,kBAAkB,WAAmB;CAC5C,MAAM,CAAC,WAAW,gBAAgB,SAAoB,OAAO;AAE7D,iBAAgB;AACd,MAAI,cAAc,SAAU;EAC5B,MAAM,KAAK,OAAO,iBAAiB,aAAa,OAAO,EAAE,UAAU;AACnE,eAAa,OAAO,aAAa,GAAG;IACnC,CAAC,WAAW,UAAU,CAAC;AAM1B,QAAO;EAAE;EAAW,YAJD,kBAAkB;AACnC,gBAAa,SAAS;KACrB,EAAE,CAAC;EAE0B;;AAKlC,MAAM,qBACJ,OAAO,WAAW,cAAc,kBAAkB;AAKpD,SAAS,mBAAmB,WAAmB;CAC7C,MAAM,UAAU,OAA8B,KAAK;CACnD,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;AAE3C,0BAAyB;EACvB,MAAM,KAAK,QAAQ;AACnB,MAAI,CAAC,GAAI;EACT,MAAM,eAAe,UAAU,GAAG,eAAe,UAAU;AAC3D,UAAQ;EACR,MAAM,KAAK,IAAI,eAAe,OAAO;AACrC,KAAG,QAAQ,GAAG;AACd,eAAa,GAAG,YAAY;IAC3B,CAAC,UAAU,CAAC;AAEf,QAAO;EAAE;EAAS;EAAQ;;AAY5B,SAAS,uBAAuB,EAC9B,eACA,mBAC6B;CAC7B,MAAM,CAAC,SAAS,cAAc,SAAS;EACrC,OAAO;EACP,cAAc;EACf,CAAC;AA0BF,QAAO;EAAE,UAxBQ,aACd,OAA8B;AAC7B,OAAI,CAAC,GAAI;GACT,MAAM,eAAe;IACnB,MAAM,IAAI,GAAG;IACb,MAAM,IAAI,GAAG;AACb,QAAI,IAAI,KAAK,IAAI,GAAG;KAClB,MAAM,QAAQ,IAAI;KAClB,MAAM,eAAe,KAAK,IAAI,iBAAiB,IAAI,MAAM;AACzD,iBAAY,SACV,KAAK,UAAU,SAAS,KAAK,iBAAiB,eAC1C,OACA;MAAE;MAAO;MAAc,CAC5B;;;AAGL,WAAQ;GACR,MAAM,KAAK,IAAI,eAAe,OAAO;AACrC,MAAG,QAAQ,GAAG;AACd,gBAAa,GAAG,YAAY;KAE9B,CAAC,eAAe,gBAAgB,CACjC;EAEkB,OAAO,QAAQ;EAAO,cAAc,QAAQ;EAAc;;AAG/E,MAAa,6BAAmD;CAC9D,YAAY;CACZ,aAAa;CACb,YAAY,CAAC;EAAE,IAAI;EAAW,OAAO;EAAW,CAAC;CACjD,QAAQ;EAEN;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EAGD;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACH;CACF"}
@@ -1,8 +1,8 @@
1
- import { r as __exportAll } from "./es-BXxGlAp6.mjs";
2
- import { n as useWidgetInteraction } from "./WidgetInteractionContext-B1mELhQ_.mjs";
3
- import { f as getGapField, i as getBorderColorField, l as getColorField, m as getPaddingField, n as borderWidthClasses, o as getBorderRadiusField, p as getHeightField, r as gapValues, s as getBorderWidthField, t as borderColorClasses, u as getFontSizeField } from "./registries-Ct8o2YRe.mjs";
4
- import { n as getMediaPropsFromShareable, t as MediaRenderer } from "./MediaRenderer-DMdb_5xw.mjs";
5
- import { t as ScrollArrows } from "./scroll-arrows-CqDxJ0Pe.mjs";
1
+ import { I as __exportAll } from "./portal_tenant_content-DPLnrtOG.mjs";
2
+ import { n as useWidgetInteraction } from "./WidgetInteractionContext-pLGNr8_2.mjs";
3
+ import { f as getGapField, i as getBorderColorField, l as getColorField, m as getPaddingField, n as borderWidthClasses, o as getBorderRadiusField, p as getHeightField, r as gapValues, s as getBorderWidthField, t as borderColorClasses, u as getFontSizeField } from "./registries-kvRRUHcO.mjs";
4
+ import { n as getMediaPropsFromShareable, t as MediaRenderer } from "./MediaRenderer-13Jlf38P.mjs";
5
+ import { t as ScrollArrows } from "./scroll-arrows-D90Miaz_.mjs";
6
6
  import { useRef } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region ../widgets/src/widgets/NestedWidget.tsx
@@ -352,4 +352,4 @@ const nestedWidgetPropertySchema = {
352
352
  //#endregion
353
353
  export { NestedWidget_exports as n, nestedWidgetPropertySchema as r, NestedWidget as t };
354
354
 
355
- //# sourceMappingURL=NestedWidget-RuyrOrFn.mjs.map
355
+ //# sourceMappingURL=NestedWidget-BMKtDP_4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NestedWidget-RuyrOrFn.mjs","names":[],"sources":["../../widgets/src/widgets/NestedWidget.tsx"],"sourcesContent":["import { useRef, type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport {\n MediaRenderer,\n getMediaPropsFromShareable,\n} from \"../components/MediaRenderer\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n AlignOptions,\n GapOptions,\n BackgroundValue,\n} from \"@fluid-app/portal-core/types\";\nimport {\n getHeightField,\n type WidgetPropertySchema,\n} from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n} from \"../core/fields\";\nimport { ScrollArrows } from \"../ui/scroll-arrows\";\nimport { type ShareableItem } from \"@fluid-app/portal-core/types\";\nimport { useWidgetInteraction } from \"../contexts/WidgetInteractionContext\";\n\nconst DEFAULT_SHAREABLES: ShareableItem[] = [];\n\ntype NestedWidgetProps = ComponentProps<\"div\"> & {\n // Content\n resource?: ShareableItem;\n titleEnabled?: boolean;\n titleText?: string;\n shareables?: ShareableItem[];\n\n // Layout\n gap?: GapOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n primaryMediaHeight?: string;\n\n // Title styling\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n titleAlignment?: AlignOptions;\n\n // Nested media styling\n nestedTextColor?: ColorOptions;\n background?: BackgroundValue;\n\n // Overlay\n overlayEnabled?: boolean;\n overlayType?: \"solid\" | \"gradient\";\n overlayIntensity?: number;\n};\n\nexport function NestedWidget({\n resource,\n titleEnabled = true,\n titleText = \"Featured Collection\",\n shareables = DEFAULT_SHAREABLES,\n gap = \"md\",\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n primaryMediaHeight = \"400px\",\n titleFontSize = \"xl\",\n titleColor = \"background\",\n titleAlignment = { horizontal: \"left\", vertical: \"bottom\" },\n nestedTextColor = \"foreground\",\n background = {\n type: \"solid\",\n color: \"background\",\n },\n overlayEnabled = true,\n overlayType = \"gradient\",\n overlayIntensity = 50,\n className,\n ...props\n}: NestedWidgetProps): React.JSX.Element {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const scrollByAmount = (direction: \"prev\" | \"next\") => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const computedGap = parseFloat(getComputedStyle(container).gap) || 0;\n const firstItem = container.firstElementChild as HTMLElement | null;\n const itemWidth = firstItem?.offsetWidth ?? 0;\n const scrollAmount = itemWidth + computedGap;\n\n container.scrollTo({\n left:\n container.scrollLeft +\n (direction === \"next\" ? scrollAmount : -scrollAmount),\n behavior: \"smooth\",\n });\n };\n\n // Cap border radius for the primary media container: \"full\" creates a circle that clips\n // the absolutely-positioned title overlay to the narrow bottom of the circle.\n const primaryMediaRadius = borderRadius === \"full\" ? \"2xl\" : borderRadius;\n\n const { onItemClick } = useWidgetInteraction();\n\n const hasNestedMedia = shareables.length > 0;\n\n const titleAlignmentClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n return (\n <div\n className={`@container flex w-full overflow-hidden p-${padding} rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} bg-${backgroundColor} ${className}`}\n {...props}\n style={{\n maxHeight: primaryMediaHeight,\n backgroundImage: backgroundImage,\n }}\n >\n {/* Primary Media Container - Full width on mobile, fixed on desktop */}\n <div\n className={`relative @md:flex-none`}\n style={{\n width: primaryMediaHeight,\n }}\n >\n {/* Media + overlay clipped to rounded shape — title is a sibling so it isn't clipped */}\n <div\n className={`overflow-hidden rounded-${primaryMediaRadius} absolute inset-0`}\n >\n <MediaRenderer\n {...(resource ? getMediaPropsFromShareable(resource) : {})}\n autoplay\n loop\n muted\n />\n\n {/* Overlay */}\n {overlayEnabled && (\n <div\n className={`pointer-events-none absolute inset-0 z-10 ${\n overlayType === \"gradient\"\n ? \"bg-gradient-to-t from-black to-transparent\"\n : \"bg-black\"\n }`}\n style={{\n opacity:\n (Number(String(overlayIntensity).replace(\"%\", \"\")) || 50) /\n 100,\n }}\n />\n )}\n </div>\n\n {/* Title and Mobile Nested Media — outside the overflow-hidden clip */}\n {((titleEnabled && titleText) || hasNestedMedia) && (\n <div\n className={`absolute z-20 w-full ${titleAlignmentClasses[titleAlignment?.horizontal ?? \"left\"]} p-${padding} ${\n titleAlignment.vertical === \"top\"\n ? `top-0 pt-${padding}`\n : titleAlignment.vertical === \"center\"\n ? \"top-1/2 -translate-y-1/2\"\n : `bottom-0 pb-${padding}`\n }`}\n >\n {titleEnabled && titleText && (\n <h2\n className={`font-header leading-tight font-bold text-${titleColor} text-${titleFontSize === \"md\" ? \"base\" : titleFontSize}`}\n >\n {titleText}\n </h2>\n )}\n\n {/* Mobile: Products overlay inside primary media */}\n {hasNestedMedia && (\n <div className={`pt-${padding} @md:hidden`}>\n <div\n className={`flex overflow-x-auto gap-${gapValues[gap]} bg-transparent`}\n >\n {shareables.map((shareable) => (\n <div\n key={shareable.id}\n className={`flex shrink-0 flex-col items-center ${onItemClick ? \"cursor-pointer\" : \"\"}`}\n {...(onItemClick\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onItemClick(shareable),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onItemClick(shareable);\n }\n },\n }\n : {})}\n >\n <div\n className={`aspect-3/4 h-40 overflow-hidden rounded-${borderRadius}`}\n >\n <MediaRenderer\n {...getMediaPropsFromShareable(shareable)}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Desktop: Products Container - Single row beside primary media */}\n {hasNestedMedia && (\n <div\n className={`relative hidden min-w-0 self-stretch @md:flex @md:flex-1 px-${padding}`}\n >\n <div\n ref={scrollContainerRef}\n className={`flex h-full flex-row overflow-x-auto gap-${gapValues[gap]}`}\n style={{ scrollSnapType: \"x mandatory\" }}\n >\n {shareables.map((shareable) => (\n <div\n key={shareable.id}\n className={`flex shrink-0 flex-col gap-1 ${onItemClick ? \"cursor-pointer\" : \"\"}`}\n style={{\n width: `calc(${primaryMediaHeight} * 0.75)`,\n scrollSnapAlign: \"start\",\n }}\n {...(onItemClick\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onItemClick(shareable),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onItemClick(shareable);\n }\n },\n }\n : {})}\n >\n <div\n className={`aspect-3/4 h-full rounded-${borderRadius} overflow-hidden`}\n >\n <MediaRenderer {...getMediaPropsFromShareable(shareable)} />\n </div>\n <span className={`flex-none text-sm text-${nestedTextColor}`}>\n <p className=\"truncate\">{shareable.title || \"\"}</p>\n <p className=\"truncate\">\n {((shareable.display_price as string) ?? shareable.price) ||\n \"\"}\n </p>\n </span>\n </div>\n ))}\n </div>\n\n {/* Navigation arrows */}\n <div\n className={`absolute inset-x-0 top-1/2 flex w-full -translate-y-1/2 items-center justify-between px-8`}\n >\n <ScrollArrows\n onPrevious={() => scrollByAmount(\"prev\")}\n onNext={() => scrollByAmount(\"next\")}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const nestedWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"NestedWidget\",\n displayName: \"Nested Widget\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"data\", label: \"Data\" },\n ],\n dataSourceTargetProps: [\"shareables\"],\n fields: [\n // Content tab - Resource group\n {\n key: \"resource\",\n label: \"Primary Media\",\n type: \"resource\",\n description: \"Select the primary media displayed in the large panel\",\n allowedTypes: [\"Medium\"],\n tab: \"styling\",\n group: \"Content\",\n },\n // Content tab - Title group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed over the primary media\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Main title displayed over the primary media\",\n defaultValue: \"Featured Collection\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n label: \"Title Font Size\",\n defaultValue: \"xl\",\n key: \"titleFontSize\",\n description: \"Font size for the widget title\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n defaultValue: \"background\",\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n // Styling tab - Design group\n getHeightField({\n key: \"primaryMediaHeight\",\n label: \"Primary Media Height\",\n description: \"Height of the primary media container\",\n defaultValue: \"400px\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"titleAlignment\",\n label: \"Content Alignment\",\n type: \"alignment\",\n description: \"Alignment of the content inside the primary media\",\n defaultValue: { horizontal: \"left\", vertical: \"bottom\" },\n options: {\n horizontalEnabled: true,\n verticalEnabled: true,\n },\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"separator2\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n defaultValue: 4,\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding used throughout the widget\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n defaultValue: \"md\",\n label: \"Border Radius\",\n key: \"borderRadius\",\n description: \"Rounded corners for the widget\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"overlayEnabled\",\n label: \"Enable Overlay\",\n type: \"boolean\",\n description:\n \"Add a dark overlay to the primary media for better text readability\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"overlayType\",\n label: \"Overlay Type\",\n type: \"buttonGroup\",\n description: \"Type of overlay effect\",\n defaultValue: \"gradient\",\n options: [\n { label: \"Solid\", value: \"solid\" },\n { label: \"Gradient\", value: \"gradient\" },\n ],\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n {\n key: \"overlayIntensity\",\n label: \"Overlay Intensity\",\n type: \"slider\",\n description: \"Opacity of the overlay (0-100)\",\n min: 0,\n max: 100,\n step: 5,\n defaultValue: 50,\n unit: \"%\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n // Styling tab - Nested Media Styling group\n getGapField({\n label: \"Gap\",\n defaultValue: \"md\",\n key: \"gap\",\n description: \"Gap between nested media items\",\n tab: \"styling\",\n group: \"Nested Design\",\n }),\n getColorField({\n defaultValue: \"foreground\",\n key: \"nestedTextColor\",\n label: \"Nested Text Color\",\n description: \"Color for nested media labels\",\n tab: \"styling\",\n group: \"Nested Design\",\n }),\n {\n type: \"background\",\n defaultValue: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background color for nested media container\",\n tab: \"styling\",\n group: \"Nested Design\",\n },\n // Data tab\n {\n key: \"dataSource\",\n label: \"Data Source\",\n type: \"dataSource\",\n description: \"Configure dynamic data fetching from an API\",\n tab: \"data\",\n group: \"Data Configuration\",\n },\n ],\n // Per-item configuration schema for custom data sources\n itemConfigSchema: {\n description: \"Configure settings for this item\",\n fields: [\n {\n key: \"title\",\n label: \"Custom Title\",\n type: \"text\",\n description: \"Override the item's title for this widget\",\n },\n ],\n },\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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ACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;IAAE,YAAY;IAAQ,UAAU;IAAU;GACxD,SAAS;IACP,mBAAmB;IACnB,iBAAiB;IAClB;GACD,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD,gBAAgB;GACd,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF,qBAAqB;GACnB,cAAc;GACd,OAAO;GACP,KAAK;GACL,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,SAAS,CACP;IAAE,OAAO;IAAS,OAAO;IAAS,EAClC;IAAE,OAAO;IAAY,OAAO;IAAY,CACzC;GACD,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,KAAK;GACL,KAAK;GACL,MAAM;GACN,cAAc;GACd,MAAM;GACN,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EAED,YAAY;GACV,OAAO;GACP,cAAc;GACd,KAAK;GACL,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF,cAAc;GACZ,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,MAAM;GACN,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACR;EAED;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,KAAK;GACL,OAAO;GACR;EACF;CAED,kBAAkB;EAChB,aAAa;EACb,QAAQ,CACN;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACd,CACF;EACF;CACF"}
1
+ {"version":3,"file":"NestedWidget-BMKtDP_4.mjs","names":[],"sources":["../../widgets/src/widgets/NestedWidget.tsx"],"sourcesContent":["import { useRef, type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport {\n MediaRenderer,\n getMediaPropsFromShareable,\n} from \"../components/MediaRenderer\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n AlignOptions,\n GapOptions,\n BackgroundValue,\n} from \"@fluid-app/portal-core/types\";\nimport {\n getHeightField,\n type WidgetPropertySchema,\n} from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n} from \"../core/fields\";\nimport { ScrollArrows } from \"../ui/scroll-arrows\";\nimport { type ShareableItem } from \"@fluid-app/portal-core/types\";\nimport { useWidgetInteraction } from \"../contexts/WidgetInteractionContext\";\n\nconst DEFAULT_SHAREABLES: ShareableItem[] = [];\n\ntype NestedWidgetProps = ComponentProps<\"div\"> & {\n // Content\n resource?: ShareableItem;\n titleEnabled?: boolean;\n titleText?: string;\n shareables?: ShareableItem[];\n\n // Layout\n gap?: GapOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n primaryMediaHeight?: string;\n\n // Title styling\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n titleAlignment?: AlignOptions;\n\n // Nested media styling\n nestedTextColor?: ColorOptions;\n background?: BackgroundValue;\n\n // Overlay\n overlayEnabled?: boolean;\n overlayType?: \"solid\" | \"gradient\";\n overlayIntensity?: number;\n};\n\nexport function NestedWidget({\n resource,\n titleEnabled = true,\n titleText = \"Featured Collection\",\n shareables = DEFAULT_SHAREABLES,\n gap = \"md\",\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n primaryMediaHeight = \"400px\",\n titleFontSize = \"xl\",\n titleColor = \"background\",\n titleAlignment = { horizontal: \"left\", vertical: \"bottom\" },\n nestedTextColor = \"foreground\",\n background = {\n type: \"solid\",\n color: \"background\",\n },\n overlayEnabled = true,\n overlayType = \"gradient\",\n overlayIntensity = 50,\n className,\n ...props\n}: NestedWidgetProps): React.JSX.Element {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const scrollByAmount = (direction: \"prev\" | \"next\") => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const computedGap = parseFloat(getComputedStyle(container).gap) || 0;\n const firstItem = container.firstElementChild as HTMLElement | null;\n const itemWidth = firstItem?.offsetWidth ?? 0;\n const scrollAmount = itemWidth + computedGap;\n\n container.scrollTo({\n left:\n container.scrollLeft +\n (direction === \"next\" ? scrollAmount : -scrollAmount),\n behavior: \"smooth\",\n });\n };\n\n // Cap border radius for the primary media container: \"full\" creates a circle that clips\n // the absolutely-positioned title overlay to the narrow bottom of the circle.\n const primaryMediaRadius = borderRadius === \"full\" ? \"2xl\" : borderRadius;\n\n const { onItemClick } = useWidgetInteraction();\n\n const hasNestedMedia = shareables.length > 0;\n\n const titleAlignmentClasses = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n };\n\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n return (\n <div\n className={`@container flex w-full overflow-hidden p-${padding} rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} bg-${backgroundColor} ${className}`}\n {...props}\n style={{\n maxHeight: primaryMediaHeight,\n backgroundImage: backgroundImage,\n }}\n >\n {/* Primary Media Container - Full width on mobile, fixed on desktop */}\n <div\n className={`relative @md:flex-none`}\n style={{\n width: primaryMediaHeight,\n }}\n >\n {/* Media + overlay clipped to rounded shape — title is a sibling so it isn't clipped */}\n <div\n className={`overflow-hidden rounded-${primaryMediaRadius} absolute inset-0`}\n >\n <MediaRenderer\n {...(resource ? getMediaPropsFromShareable(resource) : {})}\n autoplay\n loop\n muted\n />\n\n {/* Overlay */}\n {overlayEnabled && (\n <div\n className={`pointer-events-none absolute inset-0 z-10 ${\n overlayType === \"gradient\"\n ? \"bg-gradient-to-t from-black to-transparent\"\n : \"bg-black\"\n }`}\n style={{\n opacity:\n (Number(String(overlayIntensity).replace(\"%\", \"\")) || 50) /\n 100,\n }}\n />\n )}\n </div>\n\n {/* Title and Mobile Nested Media — outside the overflow-hidden clip */}\n {((titleEnabled && titleText) || hasNestedMedia) && (\n <div\n className={`absolute z-20 w-full ${titleAlignmentClasses[titleAlignment?.horizontal ?? \"left\"]} p-${padding} ${\n titleAlignment.vertical === \"top\"\n ? `top-0 pt-${padding}`\n : titleAlignment.vertical === \"center\"\n ? \"top-1/2 -translate-y-1/2\"\n : `bottom-0 pb-${padding}`\n }`}\n >\n {titleEnabled && titleText && (\n <h2\n className={`font-header leading-tight font-bold text-${titleColor} text-${titleFontSize === \"md\" ? \"base\" : titleFontSize}`}\n >\n {titleText}\n </h2>\n )}\n\n {/* Mobile: Products overlay inside primary media */}\n {hasNestedMedia && (\n <div className={`pt-${padding} @md:hidden`}>\n <div\n className={`flex overflow-x-auto gap-${gapValues[gap]} bg-transparent`}\n >\n {shareables.map((shareable) => (\n <div\n key={shareable.id}\n className={`flex shrink-0 flex-col items-center ${onItemClick ? \"cursor-pointer\" : \"\"}`}\n {...(onItemClick\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onItemClick(shareable),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onItemClick(shareable);\n }\n },\n }\n : {})}\n >\n <div\n className={`aspect-3/4 h-40 overflow-hidden rounded-${borderRadius}`}\n >\n <MediaRenderer\n {...getMediaPropsFromShareable(shareable)}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Desktop: Products Container - Single row beside primary media */}\n {hasNestedMedia && (\n <div\n className={`relative hidden min-w-0 self-stretch @md:flex @md:flex-1 px-${padding}`}\n >\n <div\n ref={scrollContainerRef}\n className={`flex h-full flex-row overflow-x-auto gap-${gapValues[gap]}`}\n style={{ scrollSnapType: \"x mandatory\" }}\n >\n {shareables.map((shareable) => (\n <div\n key={shareable.id}\n className={`flex shrink-0 flex-col gap-1 ${onItemClick ? \"cursor-pointer\" : \"\"}`}\n style={{\n width: `calc(${primaryMediaHeight} * 0.75)`,\n scrollSnapAlign: \"start\",\n }}\n {...(onItemClick\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onItemClick(shareable),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onItemClick(shareable);\n }\n },\n }\n : {})}\n >\n <div\n className={`aspect-3/4 h-full rounded-${borderRadius} overflow-hidden`}\n >\n <MediaRenderer {...getMediaPropsFromShareable(shareable)} />\n </div>\n <span className={`flex-none text-sm text-${nestedTextColor}`}>\n <p className=\"truncate\">{shareable.title || \"\"}</p>\n <p className=\"truncate\">\n {((shareable.display_price as string) ?? shareable.price) ||\n \"\"}\n </p>\n </span>\n </div>\n ))}\n </div>\n\n {/* Navigation arrows */}\n <div\n className={`absolute inset-x-0 top-1/2 flex w-full -translate-y-1/2 items-center justify-between px-8`}\n >\n <ScrollArrows\n onPrevious={() => scrollByAmount(\"prev\")}\n onNext={() => scrollByAmount(\"next\")}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const nestedWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"NestedWidget\",\n displayName: \"Nested Widget\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"data\", label: \"Data\" },\n ],\n dataSourceTargetProps: [\"shareables\"],\n fields: [\n // Content tab - Resource group\n {\n key: \"resource\",\n label: \"Primary Media\",\n type: \"resource\",\n description: \"Select the primary media displayed in the large panel\",\n allowedTypes: [\"Medium\"],\n tab: \"styling\",\n group: \"Content\",\n },\n // Content tab - Title group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed over the primary media\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Main title displayed over the primary media\",\n defaultValue: \"Featured Collection\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n label: \"Title Font Size\",\n defaultValue: \"xl\",\n key: \"titleFontSize\",\n description: \"Font size for the widget title\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n defaultValue: \"background\",\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n // Styling tab - Design group\n getHeightField({\n key: \"primaryMediaHeight\",\n label: \"Primary Media Height\",\n description: \"Height of the primary media container\",\n defaultValue: \"400px\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"titleAlignment\",\n label: \"Content Alignment\",\n type: \"alignment\",\n description: \"Alignment of the content inside the primary media\",\n defaultValue: { horizontal: \"left\", vertical: \"bottom\" },\n options: {\n horizontalEnabled: true,\n verticalEnabled: true,\n },\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"separator2\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n defaultValue: 4,\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding used throughout the widget\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n defaultValue: \"md\",\n label: \"Border Radius\",\n key: \"borderRadius\",\n description: \"Rounded corners for the widget\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"overlayEnabled\",\n label: \"Enable Overlay\",\n type: \"boolean\",\n description:\n \"Add a dark overlay to the primary media for better text readability\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"overlayType\",\n label: \"Overlay Type\",\n type: \"buttonGroup\",\n description: \"Type of overlay effect\",\n defaultValue: \"gradient\",\n options: [\n { label: \"Solid\", value: \"solid\" },\n { label: \"Gradient\", value: \"gradient\" },\n ],\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n {\n key: \"overlayIntensity\",\n label: \"Overlay Intensity\",\n type: \"slider\",\n description: \"Opacity of the overlay (0-100)\",\n min: 0,\n max: 100,\n step: 5,\n defaultValue: 50,\n unit: \"%\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyToBeTrue: \"overlayEnabled\",\n },\n // Styling tab - Nested Media Styling group\n getGapField({\n label: \"Gap\",\n defaultValue: \"md\",\n key: \"gap\",\n description: \"Gap between nested media items\",\n tab: \"styling\",\n group: \"Nested Design\",\n }),\n getColorField({\n defaultValue: \"foreground\",\n key: \"nestedTextColor\",\n label: \"Nested Text Color\",\n description: \"Color for nested media labels\",\n tab: \"styling\",\n group: \"Nested Design\",\n }),\n {\n type: \"background\",\n defaultValue: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background color for nested media container\",\n tab: \"styling\",\n group: \"Nested Design\",\n },\n // Data tab\n {\n key: \"dataSource\",\n label: \"Data Source\",\n type: \"dataSource\",\n description: \"Configure dynamic data fetching from an API\",\n tab: \"data\",\n group: \"Data Configuration\",\n },\n ],\n // Per-item configuration schema for custom data sources\n itemConfigSchema: {\n description: \"Configure settings for this item\",\n fields: [\n {\n key: \"title\",\n label: \"Custom Title\",\n type: \"text\",\n description: \"Override the item's title for this widget\",\n },\n ],\n },\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;;;;;;;AAoCA,MAAM,qBAAsC,EAAE;AAgC9C,SAAgB,aAAa,EAC3B,UACA,eAAe,MACf,YAAY,uBACZ,aAAa,oBACb,MAAM,MACN,UAAU,GACV,eAAe,MACf,cAAc,QACd,cAAc,SACd,qBAAqB,SACrB,gBAAgB,MAChB,aAAa,cACb,iBAAiB;CAAE,YAAY;CAAQ,UAAU;CAAU,EAC3D,kBAAkB,cAClB,aAAa;CACX,MAAM;CACN,OAAO;CACR,EACD,iBAAiB,MACjB,cAAc,YACd,mBAAmB,IACnB,WACA,GAAG,SACoC;CACvC,MAAM,qBAAqB,OAAuB,KAAK;CAEvD,MAAM,kBAAkB,cAA+B;EACrD,MAAM,YAAY,mBAAmB;AACrC,MAAI,CAAC,UAAW;EAEhB,MAAM,cAAc,WAAW,iBAAiB,UAAU,CAAC,IAAI,IAAI;EAGnE,MAAM,gBAFY,UAAU,mBACC,eAAe,KACX;AAEjC,YAAU,SAAS;GACjB,MACE,UAAU,cACT,cAAc,SAAS,eAAe,CAAC;GAC1C,UAAU;GACX,CAAC;;CAKJ,MAAM,qBAAqB,iBAAiB,SAAS,QAAQ;CAE7D,MAAM,EAAE,gBAAgB,sBAAsB;CAE9C,MAAM,iBAAiB,WAAW,SAAS;CAE3C,MAAM,wBAAwB;EAC5B,MAAM;EACN,QAAQ;EACR,OAAO;EACR;CAED,MAAM,kBAAkB,WAAW,SAAS;CAC5C,MAAM,mBACH,WAAW,UAAU,aAAa,WAAW,UAAU,aACxD,WAAW,SAAS,UAChB,OAAO,WAAW,SAAS,aAAa,WAAW,SAAS,SAAS,KACrE;AAEN,QACE,qBAAC,OAAD;EACE,WAAW,4CAA4C,QAAQ,WAAW,aAAa,GAAG,mBAAmB,aAAa,GAAG,gBAAgB,SAAS,mBAAmB,eAAe,GAAG,MAAM,gBAAgB,GAAG;EACpN,GAAI;EACJ,OAAO;GACL,WAAW;GACM;GAClB;YANH,CASE,qBAAC,OAAD;GACE,WAAW;GACX,OAAO,EACL,OAAO,oBACR;aAJH,CAOE,qBAAC,OAAD;IACE,WAAW,2BAA2B,mBAAmB;cAD3D,CAGE,oBAAC,eAAD;KACE,GAAK,WAAW,2BAA2B,SAAS,GAAG,EAAE;KACzD,UAAA;KACA,MAAA;KACA,OAAA;KACA,CAAA,EAGD,kBACC,oBAAC,OAAD;KACE,WAAW,6CACT,gBAAgB,aACZ,+CACA;KAEN,OAAO,EACL,UACG,OAAO,OAAO,iBAAiB,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,MACtD,KACH;KACD,CAAA,CAEA;QAGH,gBAAgB,aAAc,mBAC/B,qBAAC,OAAD;IACE,WAAW,wBAAwB,sBAAsB,gBAAgB,cAAc,QAAQ,KAAK,QAAQ,GAC1G,eAAe,aAAa,QACxB,YAAY,YACZ,eAAe,aAAa,WAC1B,6BACA,eAAe;cANzB,CASG,gBAAgB,aACf,oBAAC,MAAD;KACE,WAAW,4CAA4C,WAAW,QAAQ,kBAAkB,OAAO,SAAS;eAE3G;KACE,CAAA,EAIN,kBACC,oBAAC,OAAD;KAAK,WAAW,MAAM,QAAQ;eAC5B,oBAAC,OAAD;MACE,WAAW,4BAA4B,UAAU,KAAK;gBAErD,WAAW,KAAK,cACf,oBAAC,OAAD;OAEE,WAAW,uCAAuC,cAAc,mBAAmB;OACnF,GAAK,cACD;QACE,MAAM;QACN,UAAU;QACV,eAAe,YAAY,UAAU;QACrC,YAAY,MAA2B;AACrC,aAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,YAAE,gBAAgB;AAClB,sBAAY,UAAU;;;QAG3B,GACD,EAAE;iBAEN,oBAAC,OAAD;QACE,WAAW,2CAA2C;kBAEtD,oBAAC,eAAD,EACE,GAAI,2BAA2B,UAAU,EACzC,CAAA;QACE,CAAA;OACF,EAvBC,UAAU,GAuBX,CACN;MACE,CAAA;KACF,CAAA,CAEJ;MAEJ;MAGL,kBACC,qBAAC,OAAD;GACE,WAAW,+DAA+D;aAD5E,CAGE,oBAAC,OAAD;IACE,KAAK;IACL,WAAW,4CAA4C,UAAU;IACjE,OAAO,EAAE,gBAAgB,eAAe;cAEvC,WAAW,KAAK,cACf,qBAAC,OAAD;KAEE,WAAW,gCAAgC,cAAc,mBAAmB;KAC5E,OAAO;MACL,OAAO,QAAQ,mBAAmB;MAClC,iBAAiB;MAClB;KACD,GAAK,cACD;MACE,MAAM;MACN,UAAU;MACV,eAAe,YAAY,UAAU;MACrC,YAAY,MAA2B;AACrC,WAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,UAAE,gBAAgB;AAClB,oBAAY,UAAU;;;MAG3B,GACD,EAAE;eAnBR,CAqBE,oBAAC,OAAD;MACE,WAAW,6BAA6B,aAAa;gBAErD,oBAAC,eAAD,EAAe,GAAI,2BAA2B,UAAU,EAAI,CAAA;MACxD,CAAA,EACN,qBAAC,QAAD;MAAM,WAAW,0BAA0B;gBAA3C,CACE,oBAAC,KAAD;OAAG,WAAU;iBAAY,UAAU,SAAS;OAAO,CAAA,EACnD,oBAAC,KAAD;OAAG,WAAU;kBACR,UAAU,iBAA4B,UAAU,UACjD;OACA,CAAA,CACC;QACH;OAhCC,UAAU,GAgCX,CACN;IACE,CAAA,EAGN,oBAAC,OAAD;IACE,WAAW;cAEX,oBAAC,cAAD;KACE,kBAAkB,eAAe,OAAO;KACxC,cAAc,eAAe,OAAO;KACpC,CAAA;IACE,CAAA,CACF;KAEJ;;;AAIV,MAAa,6BAAmD;CAC9D,YAAY;CACZ,aAAa;CACb,YAAY,CACV;EAAE,IAAI;EAAW,OAAO;EAAW,EACnC;EAAE,IAAI;EAAQ,OAAO;EAAQ,CAC9B;CACD,uBAAuB,CAAC,aAAa;CACrC,QAAQ;EAEN;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc,CAAC,SAAS;GACxB,KAAK;GACL,OAAO;GACR;EAED;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EACD,iBAAiB;GACf,OAAO;GACP,cAAc;GACd,KAAK;GACL,aAAa;GACb,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EACF,cAAc;GACZ,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EAEF,eAAe;GACb,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;IAAE,YAAY;IAAQ,UAAU;IAAU;GACxD,SAAS;IACP,mBAAmB;IACnB,iBAAiB;IAClB;GACD,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACD,gBAAgB;GACd,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF,qBAAqB;GACnB,cAAc;GACd,OAAO;GACP,KAAK;GACL,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF,oBAAoB;GAClB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,cAAc;GACd,SAAS,CACP;IAAE,OAAO;IAAS,OAAO;IAAS,EAClC;IAAE,OAAO;IAAY,OAAO;IAAY,CACzC;GACD,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,KAAK;GACL,KAAK;GACL,MAAM;GACN,cAAc;GACd,MAAM;GACN,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB;EAED,YAAY;GACV,OAAO;GACP,cAAc;GACd,KAAK;GACL,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF,cAAc;GACZ,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,MAAM;GACN,cAAc;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,KAAK;GACL,OAAO;GACR;EAED;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,KAAK;GACL,OAAO;GACR;EACF;CAED,kBAAkB;EAChB,aAAa;EACb,QAAQ,CACN;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACd,CACF;EACF;CACF"}
@@ -1,10 +1,10 @@
1
- import { r as __exportAll } from "./es-BXxGlAp6.mjs";
1
+ import { I as __exportAll } from "./portal_tenant_content-DPLnrtOG.mjs";
2
2
  import { d as orders_list, f as orders_show } from "./portal_tenant-Q3x7ALaZ.mjs";
3
- import { n as usePortalTenantClient } from "./PortalTenantClientProvider-CjJzBCTL.mjs";
4
- import { C as Skeleton, b as fluidToast, dn as BreadcrumbLink, fn as BreadcrumbList, ln as Breadcrumb, mn as BreadcrumbSeparator, pn as BreadcrumbPage, un as BreadcrumbItem } from "./src-pgBBOcJa.mjs";
5
- import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-Cemdo7bM.mjs";
6
- import { n as useAppNavigation } from "./AppNavigationContext-DNod9mf6.mjs";
7
- import { a as OrdersCoreProvider, i as usePortalTenantOrder, n as OrdersList, t as OrderStatusBadge } from "./order-status-badge-xuJ732eH.mjs";
3
+ import { n as usePortalTenantClient } from "./PortalTenantClientProvider-Bni6J3KS.mjs";
4
+ import { C as Skeleton, b as fluidToast, dn as BreadcrumbLink, fn as BreadcrumbList, ln as Breadcrumb, mn as BreadcrumbSeparator, pn as BreadcrumbPage, un as BreadcrumbItem } from "./src-KINQ78Nj.mjs";
5
+ import { r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-4WYXIqQ5.mjs";
6
+ import { n as useAppNavigation } from "./AppNavigationContext-BcZZMtV6.mjs";
7
+ import { a as OrdersCoreProvider, i as usePortalTenantOrder, n as OrdersList, t as OrderStatusBadge } from "./order-status-badge-CjX7Qxdk.mjs";
8
8
  import { useEffect, useMemo, useState } from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  //#region src/adapters/orders-api-adapter.ts
@@ -715,4 +715,4 @@ const ordersScreenPropertySchema = {
715
715
  //#endregion
716
716
  export { OrdersScreen_exports as n, ordersScreenPropertySchema as r, OrdersScreen as t };
717
717
 
718
- //# sourceMappingURL=OrdersScreen-b-ZC4_NI.mjs.map
718
+ //# sourceMappingURL=OrdersScreen-B3vtWt8_.mjs.map