@fluid-app/portal-sdk 0.1.350 → 0.1.351

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 (276) hide show
  1. package/dist/{AddressAutocompleteInput-JBXGT1iL.cjs → AddressAutocompleteInput-C2Wx9yrV.cjs} +9 -9
  2. package/dist/AddressAutocompleteInput-C2Wx9yrV.cjs.map +1 -0
  3. package/dist/{AddressAutocompleteInput-BANMgwzR.mjs → AddressAutocompleteInput-CgOFJKwF.mjs} +9 -9
  4. package/dist/AddressAutocompleteInput-CgOFJKwF.mjs.map +1 -0
  5. package/dist/{AlertWidget-BmOGoxTA.mjs → AlertWidget-DMwOt9u8.mjs} +3 -3
  6. package/dist/{AlertWidget-BmOGoxTA.mjs.map → AlertWidget-DMwOt9u8.mjs.map} +1 -1
  7. package/dist/{AppDownloadScreen-C78ggXk3.mjs → AppDownloadScreen-CBg2shvo.mjs} +5 -5
  8. package/dist/{AppDownloadScreen-C78ggXk3.mjs.map → AppDownloadScreen-CBg2shvo.mjs.map} +1 -1
  9. package/dist/{AppDownloadScreen-DIcwvAZ4.cjs → AppDownloadScreen-CMR1y4kP.cjs} +4 -4
  10. package/dist/{AppDownloadScreen-DIcwvAZ4.cjs.map → AppDownloadScreen-CMR1y4kP.cjs.map} +1 -1
  11. package/dist/{AppNavigationContext-BCj6iFxr.mjs → AppNavigationContext-B-wToUBG.mjs} +3 -3
  12. package/dist/AppNavigationContext-B-wToUBG.mjs.map +1 -0
  13. package/dist/{AppNavigationContext-CoNtdUrr.cjs → AppNavigationContext-CLOwdlpx.cjs} +2 -2
  14. package/dist/AppNavigationContext-CLOwdlpx.cjs.map +1 -0
  15. package/dist/{BulletListWidget-AIIf29RP.mjs → BulletListWidget-D--Mmasw.mjs} +2 -2
  16. package/dist/{BulletListWidget-AIIf29RP.mjs.map → BulletListWidget-D--Mmasw.mjs.map} +1 -1
  17. package/dist/{CalendarWidget-DW5wz5ke.cjs → CalendarWidget-Aa7H9M7f.cjs} +4 -4
  18. package/dist/{CalendarWidget-DW5wz5ke.cjs.map → CalendarWidget-Aa7H9M7f.cjs.map} +1 -1
  19. package/dist/{CalendarWidget-Dn55musX.mjs → CalendarWidget-Cx6KvkaG.mjs} +5 -5
  20. package/dist/{CalendarWidget-Dn55musX.mjs.map → CalendarWidget-Cx6KvkaG.mjs.map} +1 -1
  21. package/dist/{CardWidget-DsfLoyup.cjs → CardWidget-Caytu8qs.cjs} +3 -3
  22. package/dist/{CardWidget--S5FBquC.cjs → CardWidget-CqewqU5a.cjs} +2 -2
  23. package/dist/{CardWidget--S5FBquC.cjs.map → CardWidget-CqewqU5a.cjs.map} +1 -1
  24. package/dist/{CardWidget-ChfurL_z.mjs → CardWidget-DARqLSwy.mjs} +3 -3
  25. package/dist/{CardWidget-ChfurL_z.mjs.map → CardWidget-DARqLSwy.mjs.map} +1 -1
  26. package/dist/{CarouselWidget-SrCl4cSn.mjs → CarouselWidget-Bnl_iggA.mjs} +2 -2
  27. package/dist/{CarouselWidget-SrCl4cSn.mjs.map → CarouselWidget-Bnl_iggA.mjs.map} +1 -1
  28. package/dist/{CatchUpWidget-B_in7Bjq.mjs → CatchUpWidget-Bplozt8D.mjs} +5 -5
  29. package/dist/{CatchUpWidget-B_in7Bjq.mjs.map → CatchUpWidget-Bplozt8D.mjs.map} +1 -1
  30. package/dist/{CatchUpWidget-_ErrC-e8.cjs → CatchUpWidget-DEyXTEFj.cjs} +4 -4
  31. package/dist/{CatchUpWidget-_ErrC-e8.cjs.map → CatchUpWidget-DEyXTEFj.cjs.map} +1 -1
  32. package/dist/{ChartWidget-CIr3v8x6.mjs → ChartWidget-BPOZNKI_.mjs} +2 -2
  33. package/dist/{ChartWidget-CIr3v8x6.mjs.map → ChartWidget-BPOZNKI_.mjs.map} +1 -1
  34. package/dist/{ContactsScreen-f3dXV198.cjs → ContactsScreen-BFbWTMu9.cjs} +4 -4
  35. package/dist/{ContactsScreen-f3dXV198.cjs.map → ContactsScreen-BFbWTMu9.cjs.map} +1 -1
  36. package/dist/{ContactsScreen-DJ8O35Pl.mjs → ContactsScreen-CnLSICv5.mjs} +5 -5
  37. package/dist/{ContactsScreen-DJ8O35Pl.mjs.map → ContactsScreen-CnLSICv5.mjs.map} +1 -1
  38. package/dist/{ContactsScreen-CVmYvRZi.cjs → ContactsScreen-DQjdfcAV.cjs} +5 -5
  39. package/dist/{ContainerWidget-BHWPtBmF.mjs → ContainerWidget-Bv0f8-TC.mjs} +3 -3
  40. package/dist/{ContainerWidget-BHWPtBmF.mjs.map → ContainerWidget-Bv0f8-TC.mjs.map} +1 -1
  41. package/dist/{ContainerWidget-Cf_D4TAi.cjs → ContainerWidget-CF6VDxd8.cjs} +2 -2
  42. package/dist/{ContainerWidget-Cf_D4TAi.cjs.map → ContainerWidget-CF6VDxd8.cjs.map} +1 -1
  43. package/dist/ContainerWidget-D3JoA0IP.cjs +8 -0
  44. package/dist/{CustomersScreen-DGBwaZrt.mjs → CustomersScreen-BHqlHdHZ.mjs} +3 -3
  45. package/dist/{CustomersScreen-DGBwaZrt.mjs.map → CustomersScreen-BHqlHdHZ.mjs.map} +1 -1
  46. package/dist/{CustomersScreen-BXvWK7Y1.cjs → CustomersScreen-C8b3P79M.cjs} +2 -2
  47. package/dist/{CustomersScreen-BXvWK7Y1.cjs.map → CustomersScreen-C8b3P79M.cjs.map} +1 -1
  48. package/dist/{EmbedWidget-D5kFw9HS.mjs → EmbedWidget-DRfjHvRs.mjs} +2 -2
  49. package/dist/{EmbedWidget-D5kFw9HS.mjs.map → EmbedWidget-DRfjHvRs.mjs.map} +1 -1
  50. package/dist/{FluidProvider-CYBXFElI.mjs → FluidProvider-B4Za_Bnw.mjs} +69 -69
  51. package/dist/FluidProvider-B4Za_Bnw.mjs.map +1 -0
  52. package/dist/{FluidProvider-BVJmIM13.cjs → FluidProvider-DvHJZkGi.cjs} +36 -36
  53. package/dist/FluidProvider-DvHJZkGi.cjs.map +1 -0
  54. package/dist/{ImageWidget-B3ZTuy4v.mjs → ImageWidget-C7nfRJ6p.mjs} +2 -2
  55. package/dist/{ImageWidget-B3ZTuy4v.mjs.map → ImageWidget-C7nfRJ6p.mjs.map} +1 -1
  56. package/dist/{LayoutWidget-3G-w-YLz.cjs → LayoutWidget-6_Huueb4.cjs} +3 -3
  57. package/dist/{LayoutWidget-CrZG6Ipw.mjs → LayoutWidget-CSFWeXYY.mjs} +3 -3
  58. package/dist/{LayoutWidget-CrZG6Ipw.mjs.map → LayoutWidget-CSFWeXYY.mjs.map} +1 -1
  59. package/dist/{LayoutWidget-CG-dWz_c.cjs → LayoutWidget-DD1ZqWXg.cjs} +2 -2
  60. package/dist/{LayoutWidget-CG-dWz_c.cjs.map → LayoutWidget-DD1ZqWXg.cjs.map} +1 -1
  61. package/dist/{LinkWidget-fPowKN73.mjs → LinkWidget-DI2Uod5O.mjs} +2 -2
  62. package/dist/{LinkWidget-fPowKN73.mjs.map → LinkWidget-DI2Uod5O.mjs.map} +1 -1
  63. package/dist/{ListWidget-CQuNRg_g.mjs → ListWidget-BdUhs2fo.mjs} +2 -2
  64. package/dist/{ListWidget-CQuNRg_g.mjs.map → ListWidget-BdUhs2fo.mjs.map} +1 -1
  65. package/dist/MessagingScreen-B3LmRgr4.mjs +50 -0
  66. package/dist/{MessagingScreen-Db6wQydU.cjs → MessagingScreen-B6kMcx8v.cjs} +25 -25
  67. package/dist/{MessagingScreen-3o_Qb6u_.mjs → MessagingScreen-CCVF9paI.mjs} +10 -10
  68. package/dist/MessagingScreen-CCVF9paI.mjs.map +1 -0
  69. package/dist/{MessagingScreen-C4SUSPy3.cjs → MessagingScreen-DQYJZhz6.cjs} +8 -8
  70. package/dist/MessagingScreen-DQYJZhz6.cjs.map +1 -0
  71. package/dist/{MySiteScreen-D3rkI2UJ.cjs → MySiteScreen-BZnLxHAq.cjs} +6 -6
  72. package/dist/{MySiteScreen-D3rkI2UJ.cjs.map → MySiteScreen-BZnLxHAq.cjs.map} +1 -1
  73. package/dist/MySiteScreen-CYGVxzCE.cjs +11 -0
  74. package/dist/{MySiteScreen-BC_K8gIq.mjs → MySiteScreen-tKgO4G0B.mjs} +7 -7
  75. package/dist/{MySiteScreen-BC_K8gIq.mjs.map → MySiteScreen-tKgO4G0B.mjs.map} +1 -1
  76. package/dist/{MySiteWidget-D6QyWuzN.cjs → MySiteWidget-CabBtq5C.cjs} +4 -4
  77. package/dist/{MySiteWidget-D6QyWuzN.cjs.map → MySiteWidget-CabBtq5C.cjs.map} +1 -1
  78. package/dist/{MySiteWidget-BLALS8Ve.mjs → MySiteWidget-ivytLi6H.mjs} +5 -5
  79. package/dist/{MySiteWidget-BLALS8Ve.mjs.map → MySiteWidget-ivytLi6H.mjs.map} +1 -1
  80. package/dist/{NestedWidget-DuNuNaeT.mjs → NestedWidget-gqdWZS9Q.mjs} +2 -2
  81. package/dist/{NestedWidget-DuNuNaeT.mjs.map → NestedWidget-gqdWZS9Q.mjs.map} +1 -1
  82. package/dist/{OrdersScreen-CJzegrYb.cjs → OrdersScreen-BY3EQX7P.cjs} +11 -11
  83. package/dist/OrdersScreen-BY3EQX7P.cjs.map +1 -0
  84. package/dist/{OrdersScreen-FaoTq71a.mjs → OrdersScreen-D9ztzvIZ.mjs} +12 -12
  85. package/dist/OrdersScreen-D9ztzvIZ.mjs.map +1 -0
  86. package/dist/OrdersScreen-DCbX1m9M.cjs +50 -0
  87. package/dist/OrdersScreen-ze31P1y2.mjs +48 -0
  88. package/dist/{PointsWidget-BvGANrJq.mjs → PointsWidget-BJlOIK6o.mjs} +5 -5
  89. package/dist/{PointsWidget-BvGANrJq.mjs.map → PointsWidget-BJlOIK6o.mjs.map} +1 -1
  90. package/dist/{PointsWidget-Byd2-eEi.cjs → PointsWidget-Him7U2k2.cjs} +4 -4
  91. package/dist/{PointsWidget-Byd2-eEi.cjs.map → PointsWidget-Him7U2k2.cjs.map} +1 -1
  92. package/dist/{PortalTenantClientProvider-Bpm-CZq1.cjs → PortalTenantClientProvider-C0eJp8MN.cjs} +3 -3
  93. package/dist/PortalTenantClientProvider-C0eJp8MN.cjs.map +1 -0
  94. package/dist/{PortalTenantClientProvider-BmRtQAbi.mjs → PortalTenantClientProvider-DVClpfbi.mjs} +4 -4
  95. package/dist/PortalTenantClientProvider-DVClpfbi.mjs.map +1 -0
  96. package/dist/ProfileScreen-BDVGVcuz.cjs +53 -0
  97. package/dist/{ProfileScreen-CU4Y3sBq.mjs → ProfileScreen-BKAjNpTa.mjs} +8 -8
  98. package/dist/{ProfileScreen-CU4Y3sBq.mjs.map → ProfileScreen-BKAjNpTa.mjs.map} +1 -1
  99. package/dist/{ProfileScreen-DxjLSL0A.cjs → ProfileScreen-C8oqPt_i.cjs} +8 -8
  100. package/dist/{ProfileScreen-DxjLSL0A.cjs.map → ProfileScreen-C8oqPt_i.cjs.map} +1 -1
  101. package/dist/ProfileScreen-DYQklavp.mjs +51 -0
  102. package/dist/{QuickLinksWidget-D8LqZkUS.mjs → QuickLinksWidget-DJUI7r5_.mjs} +2 -2
  103. package/dist/{QuickLinksWidget-D8LqZkUS.mjs.map → QuickLinksWidget-DJUI7r5_.mjs.map} +1 -1
  104. package/dist/{QuickShareWidget-BJpqzZp0.mjs → QuickShareWidget-B7DhQOyt.mjs} +2 -2
  105. package/dist/{QuickShareWidget-BJpqzZp0.mjs.map → QuickShareWidget-B7DhQOyt.mjs.map} +1 -1
  106. package/dist/{RecentActivityWidget-ClgOlTXl.mjs → RecentActivityWidget-BMGeLSUa.mjs} +5 -5
  107. package/dist/{RecentActivityWidget-ClgOlTXl.mjs.map → RecentActivityWidget-BMGeLSUa.mjs.map} +1 -1
  108. package/dist/{RecentActivityWidget-BYzAzBI-.cjs → RecentActivityWidget-DvrmBGsD.cjs} +4 -4
  109. package/dist/{RecentActivityWidget-BYzAzBI-.cjs.map → RecentActivityWidget-DvrmBGsD.cjs.map} +1 -1
  110. package/dist/{ScreenHeaderContext-BiGgRqjY.cjs → ScreenHeaderContext-VOp8pVHr.cjs} +4 -4
  111. package/dist/ScreenHeaderContext-VOp8pVHr.cjs.map +1 -0
  112. package/dist/{ScreenHeaderContext-BjpQOCck.mjs → ScreenHeaderContext-cuVMk00X.mjs} +5 -5
  113. package/dist/ScreenHeaderContext-cuVMk00X.mjs.map +1 -0
  114. package/dist/{ScreenRenderer-TobkTBMC.mjs → ScreenRenderer-D3zNFSr3.mjs} +4 -4
  115. package/dist/ScreenRenderer-D3zNFSr3.mjs.map +1 -0
  116. package/dist/{ScreenRenderer-CLDJUinO.cjs → ScreenRenderer-IMkMMnUJ.cjs} +3 -3
  117. package/dist/ScreenRenderer-IMkMMnUJ.cjs.map +1 -0
  118. package/dist/{SearchSort-B5hq2j-l.cjs → SearchSort-BjjBpuEi.cjs} +2 -2
  119. package/dist/SearchSort-BjjBpuEi.cjs.map +1 -0
  120. package/dist/{SearchSort-CMUL0qt3.mjs → SearchSort-C6RV6d9g.mjs} +3 -3
  121. package/dist/SearchSort-C6RV6d9g.mjs.map +1 -0
  122. package/dist/{SeparatorWidget-CDvDjL-k.mjs → SeparatorWidget-CGFzy35l.mjs} +2 -2
  123. package/dist/{SeparatorWidget-CDvDjL-k.mjs.map → SeparatorWidget-CGFzy35l.mjs.map} +1 -1
  124. package/dist/{ShareablesScreen-COg_WpdP.cjs → ShareablesScreen-B0vxU7i6.cjs} +20 -20
  125. package/dist/ShareablesScreen-B0vxU7i6.cjs.map +1 -0
  126. package/dist/{ShareablesScreen-C9EmRZJW.mjs → ShareablesScreen-CefIC5H8.mjs} +22 -22
  127. package/dist/ShareablesScreen-CefIC5H8.mjs.map +1 -0
  128. package/dist/ShareablesScreen-Cs8iC1qk.mjs +15 -0
  129. package/dist/ShareablesScreen-igzq70Xz.cjs +17 -0
  130. package/dist/{ShopScreen-Bgx6548O.cjs → ShopScreen-BO1eOqyu.cjs} +10 -10
  131. package/dist/ShopScreen-BO1eOqyu.cjs.map +1 -0
  132. package/dist/ShopScreen-DY10zu6I.mjs +48 -0
  133. package/dist/{ShopScreen-DTL5xiPY.mjs → ShopScreen-IJalLKdV.mjs} +10 -10
  134. package/dist/ShopScreen-IJalLKdV.mjs.map +1 -0
  135. package/dist/ShopScreen-PMwvVuff.cjs +50 -0
  136. package/dist/{ShopWidget-Cmx4Pb6Q.cjs → ShopWidget-BWURiWyx.cjs} +4 -4
  137. package/dist/{ShopWidget-Cmx4Pb6Q.cjs.map → ShopWidget-BWURiWyx.cjs.map} +1 -1
  138. package/dist/{ShopWidget-C76SSZwW.cjs → ShopWidget-C4jeRRut.cjs} +4 -4
  139. package/dist/{ShopWidget-BzAuvfyC.mjs → ShopWidget-Cqnwq0AG.mjs} +5 -5
  140. package/dist/{ShopWidget-BzAuvfyC.mjs.map → ShopWidget-Cqnwq0AG.mjs.map} +1 -1
  141. package/dist/{SpacerWidget-B0l19UqF.mjs → SpacerWidget-BhxIaqYF.mjs} +2 -2
  142. package/dist/{SpacerWidget-B0l19UqF.mjs.map → SpacerWidget-BhxIaqYF.mjs.map} +1 -1
  143. package/dist/SubscriptionsScreen-BbUhL-zf.mjs +50 -0
  144. package/dist/{SubscriptionsScreen-D8bjSX3s.cjs → SubscriptionsScreen-CihWk-dF.cjs} +26 -26
  145. package/dist/SubscriptionsScreen-CihWk-dF.cjs.map +1 -0
  146. package/dist/{SubscriptionsScreen-DGE3efWd.cjs → SubscriptionsScreen-DBbYVWWt.cjs} +26 -26
  147. package/dist/{SubscriptionsScreen-qKJoibtI.mjs → SubscriptionsScreen-d527tZfc.mjs} +27 -27
  148. package/dist/SubscriptionsScreen-d527tZfc.mjs.map +1 -0
  149. package/dist/{TableWidget-CpHI9CGQ.mjs → TableWidget-Dwud4Fif.mjs} +2 -2
  150. package/dist/{TableWidget-CpHI9CGQ.mjs.map → TableWidget-Dwud4Fif.mjs.map} +1 -1
  151. package/dist/{TextWidget-Jy-Ktqje.mjs → TextWidget-B5ZtQMX-.mjs} +2 -2
  152. package/dist/{TextWidget-Jy-Ktqje.mjs.map → TextWidget-B5ZtQMX-.mjs.map} +1 -1
  153. package/dist/ToDoWidget-BJ2Ip97m.cjs +11 -0
  154. package/dist/{ToDoWidget-BaWksZpJ.mjs → ToDoWidget-Bnml3xLS.mjs} +6 -6
  155. package/dist/{ToDoWidget-BaWksZpJ.mjs.map → ToDoWidget-Bnml3xLS.mjs.map} +1 -1
  156. package/dist/{ToDoWidget-CZh5a5-z.cjs → ToDoWidget-C3Ob2TP2.cjs} +5 -5
  157. package/dist/{ToDoWidget-CZh5a5-z.cjs.map → ToDoWidget-C3Ob2TP2.cjs.map} +1 -1
  158. package/dist/{UpgradeScreen-VpfRqKdO.cjs → UpgradeScreen-B40dCeub.cjs} +3 -3
  159. package/dist/{UpgradeScreen-VpfRqKdO.cjs.map → UpgradeScreen-B40dCeub.cjs.map} +1 -1
  160. package/dist/{UpgradeScreen-C55rEuCN.cjs → UpgradeScreen-CbdTRnIj.cjs} +3 -3
  161. package/dist/{UpgradeScreen-x9TdC5aR.mjs → UpgradeScreen-GzkZOOR4.mjs} +4 -4
  162. package/dist/{UpgradeScreen-x9TdC5aR.mjs.map → UpgradeScreen-GzkZOOR4.mjs.map} +1 -1
  163. package/dist/{VideoWidget-DP-VHt2s.mjs → VideoWidget-Cm3UQ3-Z.mjs} +2 -2
  164. package/dist/{VideoWidget-DP-VHt2s.mjs.map → VideoWidget-Cm3UQ3-Z.mjs.map} +1 -1
  165. package/dist/{countries-api-context-G-NW4BoH.cjs → countries-api-context-16PZpF7O.cjs} +2 -2
  166. package/dist/countries-api-context-16PZpF7O.cjs.map +1 -0
  167. package/dist/{countries-api-context-DScC_39w.mjs → countries-api-context-Donus2X5.mjs} +3 -3
  168. package/dist/countries-api-context-Donus2X5.mjs.map +1 -0
  169. package/dist/{error-state-DvzIn9Tz.mjs → error-state-BUe589mD.mjs} +3 -3
  170. package/dist/error-state-BUe589mD.mjs.map +1 -0
  171. package/dist/{error-state-DJq7C-23.cjs → error-state-CU87JUpz.cjs} +2 -2
  172. package/dist/error-state-CU87JUpz.cjs.map +1 -0
  173. package/dist/{es-jA6aVeLD.mjs → es-C19weaa-.mjs} +2 -2
  174. package/dist/{es-jA6aVeLD.mjs.map → es-C19weaa-.mjs.map} +1 -1
  175. package/dist/index.cjs +65 -65
  176. package/dist/index.cjs.map +1 -1
  177. package/dist/index.mjs +83 -83
  178. package/dist/index.mjs.map +1 -1
  179. package/dist/{mysite-api-context-kUTM3GNG.mjs → mysite-api-context-CoLr9vIf.mjs} +3 -3
  180. package/dist/mysite-api-context-CoLr9vIf.mjs.map +1 -0
  181. package/dist/{mysite-api-context-CilZcDS4.cjs → mysite-api-context-DtEXblIV.cjs} +2 -2
  182. package/dist/mysite-api-context-DtEXblIV.cjs.map +1 -0
  183. package/dist/{preview-context-D9ZzEfWh.mjs → preview-context-BXEGWx9T.mjs} +3 -3
  184. package/dist/preview-context-BXEGWx9T.mjs.map +1 -0
  185. package/dist/{preview-context-BWCl-xyj.cjs → preview-context-DrXkIImI.cjs} +2 -2
  186. package/dist/preview-context-DrXkIImI.cjs.map +1 -0
  187. package/dist/{registry-context-BKvTiuXB.mjs → registry-context-CcoVxCii.mjs} +3 -3
  188. package/dist/{registry-context-BKvTiuXB.mjs.map → registry-context-CcoVxCii.mjs.map} +1 -1
  189. package/dist/{registry-context-DJ5xiVnt.cjs → registry-context-Q_1Iq2Ea.cjs} +2 -2
  190. package/dist/{registry-context-DJ5xiVnt.cjs.map → registry-context-Q_1Iq2Ea.cjs.map} +1 -1
  191. package/dist/{static-dict-adapter-JAau5LHb.cjs → static-dict-adapter-BLq4QzCI.cjs} +2 -2
  192. package/dist/static-dict-adapter-BLq4QzCI.cjs.map +1 -0
  193. package/dist/{static-dict-adapter-DjCpubZc.mjs → static-dict-adapter-DRBq3ndO.mjs} +3 -3
  194. package/dist/static-dict-adapter-DRBq3ndO.mjs.map +1 -0
  195. package/dist/{store-api-context-DViwxyG4.mjs → store-api-context-B_vtKkXO.mjs} +3 -3
  196. package/dist/store-api-context-B_vtKkXO.mjs.map +1 -0
  197. package/dist/{store-api-context-D1gZn22Z.cjs → store-api-context-CGH3YsZB.cjs} +2 -2
  198. package/dist/store-api-context-CGH3YsZB.cjs.map +1 -0
  199. package/dist/{task-composer-form-D_Pbl6qk.mjs → task-composer-form-CZgRqbIc.mjs} +4 -4
  200. package/dist/task-composer-form-CZgRqbIc.mjs.map +1 -0
  201. package/dist/{task-composer-form-BEZGTBBZ.cjs → task-composer-form-Cz8hpMTT.cjs} +3 -3
  202. package/dist/task-composer-form-Cz8hpMTT.cjs.map +1 -0
  203. package/dist/{translation-api-context-factory-BSRK6Z50.cjs → translation-api-context-factory-CjRDqIhF.cjs} +2 -2
  204. package/dist/translation-api-context-factory-CjRDqIhF.cjs.map +1 -0
  205. package/dist/{translation-api-context-factory-CJrVq_EB.mjs → translation-api-context-factory-DFr9yJ6Q.mjs} +3 -3
  206. package/dist/translation-api-context-factory-DFr9yJ6Q.mjs.map +1 -0
  207. package/dist/{use-account-CQ-mhA3W.cjs → use-account-DltRHEwC.cjs} +2 -2
  208. package/dist/{use-account-CQ-mhA3W.cjs.map → use-account-DltRHEwC.cjs.map} +1 -1
  209. package/dist/{use-account-CwGoFpwg.mjs → use-account-Dm6Svko1.mjs} +2 -2
  210. package/dist/{use-account-CwGoFpwg.mjs.map → use-account-Dm6Svko1.mjs.map} +1 -1
  211. package/dist/{use-mysite-portal-ChDJ4z34.mjs → use-mysite-portal-3Tn3bFoE.mjs} +2 -2
  212. package/dist/{use-mysite-portal-ChDJ4z34.mjs.map → use-mysite-portal-3Tn3bFoE.mjs.map} +1 -1
  213. package/dist/{use-mysite-portal-CH9ZQROw.cjs → use-mysite-portal-D3X51_Ax.cjs} +2 -2
  214. package/dist/{use-mysite-portal-CH9ZQROw.cjs.map → use-mysite-portal-D3X51_Ax.cjs.map} +1 -1
  215. package/dist/{use-navigation-parent-DvHbbMB0.mjs → use-navigation-parent-GjQMvU4i.mjs} +2 -2
  216. package/dist/{use-navigation-parent-DvHbbMB0.mjs.map → use-navigation-parent-GjQMvU4i.mjs.map} +1 -1
  217. package/dist/{use-navigation-parent-DQ8CiN9L.cjs → use-navigation-parent-q-la1wD2.cjs} +2 -2
  218. package/dist/{use-navigation-parent-DQ8CiN9L.cjs.map → use-navigation-parent-q-la1wD2.cjs.map} +1 -1
  219. package/dist/{use-store-cwcCLxl_.mjs → use-store-C6KYHvRw.mjs} +2 -2
  220. package/dist/{use-store-cwcCLxl_.mjs.map → use-store-C6KYHvRw.mjs.map} +1 -1
  221. package/dist/{use-store-lOOUcpRT.cjs → use-store-j_6I4DU4.cjs} +2 -2
  222. package/dist/{use-store-lOOUcpRT.cjs.map → use-store-j_6I4DU4.cjs.map} +1 -1
  223. package/package.json +18 -18
  224. package/dist/AddressAutocompleteInput-BANMgwzR.mjs.map +0 -1
  225. package/dist/AddressAutocompleteInput-JBXGT1iL.cjs.map +0 -1
  226. package/dist/AppNavigationContext-BCj6iFxr.mjs.map +0 -1
  227. package/dist/AppNavigationContext-CoNtdUrr.cjs.map +0 -1
  228. package/dist/ContainerWidget-CyDVJu83.cjs +0 -8
  229. package/dist/FluidProvider-BVJmIM13.cjs.map +0 -1
  230. package/dist/FluidProvider-CYBXFElI.mjs.map +0 -1
  231. package/dist/MessagingScreen-3o_Qb6u_.mjs.map +0 -1
  232. package/dist/MessagingScreen-C4SUSPy3.cjs.map +0 -1
  233. package/dist/MessagingScreen-D-wunIkf.mjs +0 -50
  234. package/dist/MySiteScreen-DiCU6P9d.cjs +0 -11
  235. package/dist/OrdersScreen-BL5Ta3Tt.cjs +0 -50
  236. package/dist/OrdersScreen-B_JxQTW8.mjs +0 -48
  237. package/dist/OrdersScreen-CJzegrYb.cjs.map +0 -1
  238. package/dist/OrdersScreen-FaoTq71a.mjs.map +0 -1
  239. package/dist/PortalTenantClientProvider-BmRtQAbi.mjs.map +0 -1
  240. package/dist/PortalTenantClientProvider-Bpm-CZq1.cjs.map +0 -1
  241. package/dist/ProfileScreen-DMDKlk20.cjs +0 -53
  242. package/dist/ProfileScreen-Dcjp4wNO.mjs +0 -51
  243. package/dist/ScreenHeaderContext-BiGgRqjY.cjs.map +0 -1
  244. package/dist/ScreenHeaderContext-BjpQOCck.mjs.map +0 -1
  245. package/dist/ScreenRenderer-CLDJUinO.cjs.map +0 -1
  246. package/dist/ScreenRenderer-TobkTBMC.mjs.map +0 -1
  247. package/dist/SearchSort-B5hq2j-l.cjs.map +0 -1
  248. package/dist/SearchSort-CMUL0qt3.mjs.map +0 -1
  249. package/dist/ShareablesScreen-BQd1-Og8.mjs +0 -15
  250. package/dist/ShareablesScreen-C9EmRZJW.mjs.map +0 -1
  251. package/dist/ShareablesScreen-COg_WpdP.cjs.map +0 -1
  252. package/dist/ShareablesScreen-CoFM63kh.cjs +0 -17
  253. package/dist/ShopScreen-Bgx6548O.cjs.map +0 -1
  254. package/dist/ShopScreen-Bm2RlZas.cjs +0 -50
  255. package/dist/ShopScreen-Cz7aMt4z.mjs +0 -48
  256. package/dist/ShopScreen-DTL5xiPY.mjs.map +0 -1
  257. package/dist/SubscriptionsScreen-CF6AuW3I.mjs +0 -50
  258. package/dist/SubscriptionsScreen-D8bjSX3s.cjs.map +0 -1
  259. package/dist/SubscriptionsScreen-qKJoibtI.mjs.map +0 -1
  260. package/dist/ToDoWidget-1wI1ntdD.cjs +0 -11
  261. package/dist/countries-api-context-DScC_39w.mjs.map +0 -1
  262. package/dist/countries-api-context-G-NW4BoH.cjs.map +0 -1
  263. package/dist/error-state-DJq7C-23.cjs.map +0 -1
  264. package/dist/error-state-DvzIn9Tz.mjs.map +0 -1
  265. package/dist/mysite-api-context-CilZcDS4.cjs.map +0 -1
  266. package/dist/mysite-api-context-kUTM3GNG.mjs.map +0 -1
  267. package/dist/preview-context-BWCl-xyj.cjs.map +0 -1
  268. package/dist/preview-context-D9ZzEfWh.mjs.map +0 -1
  269. package/dist/static-dict-adapter-DjCpubZc.mjs.map +0 -1
  270. package/dist/static-dict-adapter-JAau5LHb.cjs.map +0 -1
  271. package/dist/store-api-context-D1gZn22Z.cjs.map +0 -1
  272. package/dist/store-api-context-DViwxyG4.mjs.map +0 -1
  273. package/dist/task-composer-form-BEZGTBBZ.cjs.map +0 -1
  274. package/dist/task-composer-form-D_Pbl6qk.mjs.map +0 -1
  275. package/dist/translation-api-context-factory-BSRK6Z50.cjs.map +0 -1
  276. package/dist/translation-api-context-factory-CJrVq_EB.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AppDownloadScreen-DIcwvAZ4.cjs","names":["createTranslationContext","ExternalLink","AppDownloadScreen","createDomainTranslations","createStaticDictAdapter","useActiveLocale","useDomainDict","useStore","AppDownloadScreenUI"],"sources":["../../app-download-ui/src/translation-api-context.ts","../../app-download-ui/src/components/AppStoreButtons.tsx","../../app-download-ui/src/components/QrCodeSection.tsx","../../app-download-ui/src/components/ImageSection.tsx","../../app-download-ui/src/lib/cn.ts","../../app-download-ui/src/components/AppDownloadScreen.tsx","../../app-download-ui/src/translation-dictionary.ts","../../app-download-ui/src/translation-adapter.ts","../src/providers/AppDownloadTranslationBridge.tsx","../src/screens/AppDownloadScreen.tsx"],"sourcesContent":["import { createTranslationContext } from \"@fluid-app/i18n/translation-api-context-factory\";\nimport type { AppDownloadDict } from \"./translation-dictionary\";\n\nconst { Provider, useTranslation } =\n createTranslationContext<AppDownloadDict>(\"AppDownload\");\n\nexport const AppDownloadTranslationProvider = Provider;\nexport const useAppDownloadTranslation = useTranslation;\n","import { ExternalLink } from \"lucide-react\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface AppStoreButtonsProps {\n appstoreUrl: string;\n playstoreUrl?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-62.1 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\" />\n </svg>\n );\n}\n\nfunction GooglePlayIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\" />\n </svg>\n );\n}\n\nexport function AppStoreButtons({\n appstoreUrl,\n playstoreUrl,\n}: AppStoreButtonsProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div\n className={`grid gap-4 ${playstoreUrl ? \"grid-cols-1 sm:grid-cols-2\" : \"grid-cols-1\"}`}\n >\n <a\n href={appstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <AppleIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_app_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n\n {playstoreUrl && (\n <a\n href={playstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <GooglePlayIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_play_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n )}\n </div>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface QrCodeSectionProps {\n companyId: number;\n}\n\nexport function QrCodeSection({ companyId }: QrCodeSectionProps) {\n const { t } = useAppDownloadTranslation();\n const redirectUrl = `https://api.fluid.app/mobile_app_download/${companyId}`;\n const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(redirectUrl)}`;\n\n return (\n <a\n href={redirectUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex items-end justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"scan_to_download\")}\n </div>\n </div>\n <div className=\"flex\">\n <img\n src={qrCodeUrl}\n alt={t(\"qr_code_alt\")}\n className=\"size-16\"\n loading=\"lazy\"\n />\n </div>\n </div>\n </a>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_IMAGE =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/iphone_product.png\";\n\nconst DEFAULT_LOGO =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png\";\n\nexport interface ImageSectionProps {\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n}\n\nexport function ImageSection({\n logoUrl,\n screenshotUrl,\n appName,\n}: ImageSectionProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div className=\"flex flex-col overflow-hidden\">\n <div className=\"-mb-px flex flex-1 flex-col\">\n <div className=\"flex h-20 px-3 pt-8\">\n <img\n src={logoUrl || DEFAULT_LOGO}\n alt={appName ?? t(\"default_app_name\")}\n width={150}\n height={150}\n className=\"object-contain\"\n />\n </div>\n <div\n className={\n screenshotUrl\n ? \"mt-8 flex flex-1 items-end justify-start\"\n : \"-ml-20 flex flex-1 items-end justify-start\"\n }\n >\n <img\n src={screenshotUrl || DEFAULT_IMAGE}\n alt={t(\"mobile_app_screenshot_alt\")}\n width={480}\n height={500}\n className=\"h-full w-auto object-cover\"\n />\n </div>\n </div>\n </div>\n );\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { AppStoreButtons } from \"./AppStoreButtons\";\nimport { QrCodeSection } from \"./QrCodeSection\";\nimport { ImageSection } from \"./ImageSection\";\nimport { cn } from \"../lib/cn\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_APPSTORE_URL =\n \"https://apps.apple.com/app/wecommerce/id1564463740\";\nconst DEFAULT_PLAYSTORE_URL =\n \"https://play.google.com/store/apps/details?id=com.fluid.crm\";\n\nexport interface AppDownloadScreenProps {\n companyId: number;\n appstoreUrl?: string | null;\n playstoreUrl?: string | null;\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n className?: string;\n}\n\nexport function AppDownloadScreen({\n companyId,\n appstoreUrl,\n playstoreUrl,\n logoUrl,\n screenshotUrl,\n appName,\n className,\n}: AppDownloadScreenProps) {\n const { t } = useAppDownloadTranslation();\n const resolvedAppstoreUrl = appstoreUrl?.trim() || DEFAULT_APPSTORE_URL;\n const resolvedPlaystoreUrl = playstoreUrl?.trim() || DEFAULT_PLAYSTORE_URL;\n\n return (\n <div\n className={cn(\"flex h-full items-center justify-center p-4\", className)}\n >\n <div className=\"bg-muted relative mx-4 w-full max-w-6xl overflow-hidden rounded-xl px-6 shadow-xl\">\n <div className=\"grid h-150 w-full grid-cols-1 lg:grid-cols-2\">\n {/* Left side - Images */}\n <ImageSection\n logoUrl={logoUrl}\n screenshotUrl={screenshotUrl}\n appName={appName}\n />\n\n {/* Right side - Content */}\n <div className=\"space-y-2 pt-8 pb-8\">\n <h1 className=\"mt-12 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_1\")}\n </h1>\n <h1 className=\"-mt-2 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_2\")}\n </h1>\n <p className=\"-mt-1 text-left text-[14px] leading-relaxed text-gray-600\">\n {t(\"description\")}\n </p>\n\n <h3 className=\"mt-16 text-left text-[12px] font-bold text-gray-900\">\n {t(\"download_the_app\")}\n </h3>\n\n <AppStoreButtons\n appstoreUrl={resolvedAppstoreUrl}\n playstoreUrl={resolvedPlaystoreUrl}\n />\n\n <QrCodeSection companyId={companyId} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export const appDownloadEn = {\n heading_line_1: \"EVERYTHING YOU NEED\",\n heading_line_2: \"AT YOUR FINGERTIPS\",\n description:\n \"Everything you need at your fingertips. Run your business from one place while on the go. Share, message, sell, and manage from the mobile app.\",\n download_the_app: \"Download the App\",\n open_app_store: \"Open App Store\",\n open_play_store: \"Open Play Store\",\n scan_to_download: \"Scan to Download\",\n qr_code_alt: \"QR code for mobile app download\",\n mobile_app_screenshot_alt: \"Mobile app interface\",\n default_app_name: \"App\",\n} as const satisfies Record<string, string>;\n\nexport type AppDownloadDict = typeof appDownloadEn;\n","import {\n createDomainTranslations,\n type DomainTranslations,\n} from \"@fluid-app/i18n/translations\";\nimport { createStaticDictAdapter } from \"@fluid-app/i18n/static-dict-adapter\";\nimport type { TranslationApi } from \"@fluid-app/i18n/translation-api\";\nimport { appDownloadEn, type AppDownloadDict } from \"./translation-dictionary\";\n\nexport const appDownloadDomain: DomainTranslations<AppDownloadDict> =\n createDomainTranslations<AppDownloadDict>({\n fallback: appDownloadEn,\n loaders: {\n de: () =>\n import(\"./locale/de.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n el: () =>\n import(\"./locale/el.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n es: () =>\n import(\"./locale/es.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n fr: () =>\n import(\"./locale/fr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n he: () =>\n import(\"./locale/he.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n hu: () =>\n import(\"./locale/hu.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n id: () =>\n import(\"./locale/id.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n it: () =>\n import(\"./locale/it.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ja: () =>\n import(\"./locale/ja.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ko: () =>\n import(\"./locale/ko.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n nl: () =>\n import(\"./locale/nl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pl: () =>\n import(\"./locale/pl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pt: () =>\n import(\"./locale/pt.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ro: () =>\n import(\"./locale/ro.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ru: () =>\n import(\"./locale/ru.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n th: () =>\n import(\"./locale/th.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tl: () =>\n import(\"./locale/tl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tr: () =>\n import(\"./locale/tr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_CN: () =>\n import(\"./locale/zh_CN.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_TW: () =>\n import(\"./locale/zh_TW.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n },\n });\n\nexport function createAppDownloadTranslationAdapter(\n locale: string,\n dict: AppDownloadDict,\n): TranslationApi<AppDownloadDict> {\n return createStaticDictAdapter(locale, dict);\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport { useActiveLocale } from \"@fluid-app/i18n/locale-context\";\nimport { useDomainDict } from \"@fluid-app/i18n/use-domain-dict\";\nimport {\n appDownloadDomain,\n createAppDownloadTranslationAdapter,\n} from \"@fluid-app/portal-app-download-ui/translation-adapter\";\nimport { AppDownloadTranslationProvider } from \"@fluid-app/portal-app-download-ui/translation-api-context\";\n\nexport function AppDownloadTranslationBridge({\n children,\n}: {\n children: ReactNode;\n}): React.JSX.Element {\n const { locale } = useActiveLocale();\n const dict = useDomainDict(appDownloadDomain, locale);\n const api = useMemo(\n () => createAppDownloadTranslationAdapter(locale, dict),\n [locale, dict],\n );\n return (\n <AppDownloadTranslationProvider value={api}>\n {children}\n </AppDownloadTranslationProvider>\n );\n}\n","import type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { AppDownloadScreen as AppDownloadScreenUI } from \"@fluid-app/portal-app-download-ui\";\nimport { useStore } from \"../hooks/use-store\";\nimport { AppDownloadTranslationBridge } from \"../providers/AppDownloadTranslationBridge\";\n\nexport const appDownloadScreenPropertySchema = {\n widgetType: \"AppDownloadScreen\",\n displayName: \"App Download Screen\",\n fields: [],\n} as const satisfies WidgetPropertySchema;\n\nexport function AppDownloadScreen(): React.JSX.Element {\n const { data: store } = useStore();\n\n return (\n <AppDownloadTranslationBridge>\n <AppDownloadScreenUI\n companyId={store?.id ?? 0}\n appstoreUrl={store?.appstore_url ?? undefined}\n playstoreUrl={store?.playstore_url ?? undefined}\n logoUrl={store?.logo_url ?? undefined}\n />\n </AppDownloadTranslationBridge>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AppDownloadScreen-CMR1y4kP.cjs","names":["createTranslationContext","ExternalLink","AppDownloadScreen","createDomainTranslations","createStaticDictAdapter","useActiveLocale","useDomainDict","useStore","AppDownloadScreenUI"],"sources":["../../app-download-ui/src/translation-api-context.ts","../../app-download-ui/src/components/AppStoreButtons.tsx","../../app-download-ui/src/components/QrCodeSection.tsx","../../app-download-ui/src/components/ImageSection.tsx","../../app-download-ui/src/lib/cn.ts","../../app-download-ui/src/components/AppDownloadScreen.tsx","../../app-download-ui/src/translation-dictionary.ts","../../app-download-ui/src/translation-adapter.ts","../src/providers/AppDownloadTranslationBridge.tsx","../src/screens/AppDownloadScreen.tsx"],"sourcesContent":["import { createTranslationContext } from \"@fluid-app/i18n/translation-api-context-factory\";\nimport type { AppDownloadDict } from \"./translation-dictionary\";\n\nconst { Provider, useTranslation } =\n createTranslationContext<AppDownloadDict>(\"AppDownload\");\n\nexport const AppDownloadTranslationProvider = Provider;\nexport const useAppDownloadTranslation = useTranslation;\n","import { ExternalLink } from \"lucide-react\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface AppStoreButtonsProps {\n appstoreUrl: string;\n playstoreUrl?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-62.1 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\" />\n </svg>\n );\n}\n\nfunction GooglePlayIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\" />\n </svg>\n );\n}\n\nexport function AppStoreButtons({\n appstoreUrl,\n playstoreUrl,\n}: AppStoreButtonsProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div\n className={`grid gap-4 ${playstoreUrl ? \"grid-cols-1 sm:grid-cols-2\" : \"grid-cols-1\"}`}\n >\n <a\n href={appstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <AppleIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_app_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n\n {playstoreUrl && (\n <a\n href={playstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <GooglePlayIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_play_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n )}\n </div>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface QrCodeSectionProps {\n companyId: number;\n}\n\nexport function QrCodeSection({ companyId }: QrCodeSectionProps) {\n const { t } = useAppDownloadTranslation();\n const redirectUrl = `https://api.fluid.app/mobile_app_download/${companyId}`;\n const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(redirectUrl)}`;\n\n return (\n <a\n href={redirectUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex items-end justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"scan_to_download\")}\n </div>\n </div>\n <div className=\"flex\">\n <img\n src={qrCodeUrl}\n alt={t(\"qr_code_alt\")}\n className=\"size-16\"\n loading=\"lazy\"\n />\n </div>\n </div>\n </a>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_IMAGE =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/iphone_product.png\";\n\nconst DEFAULT_LOGO =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png\";\n\nexport interface ImageSectionProps {\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n}\n\nexport function ImageSection({\n logoUrl,\n screenshotUrl,\n appName,\n}: ImageSectionProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div className=\"flex flex-col overflow-hidden\">\n <div className=\"-mb-px flex flex-1 flex-col\">\n <div className=\"flex h-20 px-3 pt-8\">\n <img\n src={logoUrl || DEFAULT_LOGO}\n alt={appName ?? t(\"default_app_name\")}\n width={150}\n height={150}\n className=\"object-contain\"\n />\n </div>\n <div\n className={\n screenshotUrl\n ? \"mt-8 flex flex-1 items-end justify-start\"\n : \"-ml-20 flex flex-1 items-end justify-start\"\n }\n >\n <img\n src={screenshotUrl || DEFAULT_IMAGE}\n alt={t(\"mobile_app_screenshot_alt\")}\n width={480}\n height={500}\n className=\"h-full w-auto object-cover\"\n />\n </div>\n </div>\n </div>\n );\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { AppStoreButtons } from \"./AppStoreButtons\";\nimport { QrCodeSection } from \"./QrCodeSection\";\nimport { ImageSection } from \"./ImageSection\";\nimport { cn } from \"../lib/cn\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_APPSTORE_URL =\n \"https://apps.apple.com/app/wecommerce/id1564463740\";\nconst DEFAULT_PLAYSTORE_URL =\n \"https://play.google.com/store/apps/details?id=com.fluid.crm\";\n\nexport interface AppDownloadScreenProps {\n companyId: number;\n appstoreUrl?: string | null;\n playstoreUrl?: string | null;\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n className?: string;\n}\n\nexport function AppDownloadScreen({\n companyId,\n appstoreUrl,\n playstoreUrl,\n logoUrl,\n screenshotUrl,\n appName,\n className,\n}: AppDownloadScreenProps) {\n const { t } = useAppDownloadTranslation();\n const resolvedAppstoreUrl = appstoreUrl?.trim() || DEFAULT_APPSTORE_URL;\n const resolvedPlaystoreUrl = playstoreUrl?.trim() || DEFAULT_PLAYSTORE_URL;\n\n return (\n <div\n className={cn(\"flex h-full items-center justify-center p-4\", className)}\n >\n <div className=\"bg-muted relative mx-4 w-full max-w-6xl overflow-hidden rounded-xl px-6 shadow-xl\">\n <div className=\"grid h-150 w-full grid-cols-1 lg:grid-cols-2\">\n {/* Left side - Images */}\n <ImageSection\n logoUrl={logoUrl}\n screenshotUrl={screenshotUrl}\n appName={appName}\n />\n\n {/* Right side - Content */}\n <div className=\"space-y-2 pt-8 pb-8\">\n <h1 className=\"mt-12 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_1\")}\n </h1>\n <h1 className=\"-mt-2 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_2\")}\n </h1>\n <p className=\"-mt-1 text-left text-[14px] leading-relaxed text-gray-600\">\n {t(\"description\")}\n </p>\n\n <h3 className=\"mt-16 text-left text-[12px] font-bold text-gray-900\">\n {t(\"download_the_app\")}\n </h3>\n\n <AppStoreButtons\n appstoreUrl={resolvedAppstoreUrl}\n playstoreUrl={resolvedPlaystoreUrl}\n />\n\n <QrCodeSection companyId={companyId} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export const appDownloadEn = {\n heading_line_1: \"EVERYTHING YOU NEED\",\n heading_line_2: \"AT YOUR FINGERTIPS\",\n description:\n \"Everything you need at your fingertips. Run your business from one place while on the go. Share, message, sell, and manage from the mobile app.\",\n download_the_app: \"Download the App\",\n open_app_store: \"Open App Store\",\n open_play_store: \"Open Play Store\",\n scan_to_download: \"Scan to Download\",\n qr_code_alt: \"QR code for mobile app download\",\n mobile_app_screenshot_alt: \"Mobile app interface\",\n default_app_name: \"App\",\n} as const satisfies Record<string, string>;\n\nexport type AppDownloadDict = typeof appDownloadEn;\n","import {\n createDomainTranslations,\n type DomainTranslations,\n} from \"@fluid-app/i18n/translations\";\nimport { createStaticDictAdapter } from \"@fluid-app/i18n/static-dict-adapter\";\nimport type { TranslationApi } from \"@fluid-app/i18n/translation-api\";\nimport { appDownloadEn, type AppDownloadDict } from \"./translation-dictionary\";\n\nexport const appDownloadDomain: DomainTranslations<AppDownloadDict> =\n createDomainTranslations<AppDownloadDict>({\n fallback: appDownloadEn,\n loaders: {\n de: () =>\n import(\"./locale/de.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n el: () =>\n import(\"./locale/el.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n es: () =>\n import(\"./locale/es.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n fr: () =>\n import(\"./locale/fr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n he: () =>\n import(\"./locale/he.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n hu: () =>\n import(\"./locale/hu.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n id: () =>\n import(\"./locale/id.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n it: () =>\n import(\"./locale/it.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ja: () =>\n import(\"./locale/ja.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ko: () =>\n import(\"./locale/ko.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n nl: () =>\n import(\"./locale/nl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pl: () =>\n import(\"./locale/pl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pt: () =>\n import(\"./locale/pt.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ro: () =>\n import(\"./locale/ro.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ru: () =>\n import(\"./locale/ru.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n th: () =>\n import(\"./locale/th.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tl: () =>\n import(\"./locale/tl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tr: () =>\n import(\"./locale/tr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_CN: () =>\n import(\"./locale/zh_CN.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_TW: () =>\n import(\"./locale/zh_TW.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n },\n });\n\nexport function createAppDownloadTranslationAdapter(\n locale: string,\n dict: AppDownloadDict,\n): TranslationApi<AppDownloadDict> {\n return createStaticDictAdapter(locale, dict);\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport { useActiveLocale } from \"@fluid-app/i18n/locale-context\";\nimport { useDomainDict } from \"@fluid-app/i18n/use-domain-dict\";\nimport {\n appDownloadDomain,\n createAppDownloadTranslationAdapter,\n} from \"@fluid-app/portal-app-download-ui/translation-adapter\";\nimport { AppDownloadTranslationProvider } from \"@fluid-app/portal-app-download-ui/translation-api-context\";\n\nexport function AppDownloadTranslationBridge({\n children,\n}: {\n children: ReactNode;\n}): React.JSX.Element {\n const { locale } = useActiveLocale();\n const dict = useDomainDict(appDownloadDomain, locale);\n const api = useMemo(\n () => createAppDownloadTranslationAdapter(locale, dict),\n [locale, dict],\n );\n return (\n <AppDownloadTranslationProvider value={api}>\n {children}\n </AppDownloadTranslationProvider>\n );\n}\n","import type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { AppDownloadScreen as AppDownloadScreenUI } from \"@fluid-app/portal-app-download-ui\";\nimport { useStore } from \"../hooks/use-store\";\nimport { AppDownloadTranslationBridge } from \"../providers/AppDownloadTranslationBridge\";\n\nexport const appDownloadScreenPropertySchema = {\n widgetType: \"AppDownloadScreen\",\n displayName: \"App Download Screen\",\n fields: [],\n} as const satisfies WidgetPropertySchema;\n\nexport function AppDownloadScreen(): React.JSX.Element {\n const { data: store } = useStore();\n\n return (\n <AppDownloadTranslationBridge>\n <AppDownloadScreenUI\n companyId={store?.id ?? 0}\n appstoreUrl={store?.appstore_url ?? undefined}\n playstoreUrl={store?.playstore_url ?? undefined}\n logoUrl={store?.logo_url ?? undefined}\n />\n </AppDownloadTranslationBridge>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { createContext, useContext, useMemo } from "react";
1
+ import { createContext, use, useMemo } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/shell/AppNavigationContext.tsx
4
4
  const AppNavigationContext = createContext(null);
@@ -30,11 +30,11 @@ function AppNavigationProvider({ currentSlug, previousSlug, navItems, basePath,
30
30
  });
31
31
  }
32
32
  function useAppNavigation() {
33
- const ctx = useContext(AppNavigationContext);
33
+ const ctx = use(AppNavigationContext);
34
34
  if (!ctx) throw new Error("useAppNavigation must be used within an <AppShell> or <AppNavigationProvider>");
35
35
  return ctx;
36
36
  }
37
37
  //#endregion
38
38
  export { useAppNavigation as n, AppNavigationProvider as t };
39
39
 
40
- //# sourceMappingURL=AppNavigationContext-BCj6iFxr.mjs.map
40
+ //# sourceMappingURL=AppNavigationContext-B-wToUBG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppNavigationContext-B-wToUBG.mjs","names":[],"sources":["../src/shell/AppNavigationContext.tsx"],"sourcesContent":["import { createContext, type ReactNode, use, useMemo } from \"react\";\nimport type { NavigationItem } from \"../types/navigation\";\n\nexport interface AppNavigationContextValue {\n /** Current active slug (e.g. \"contacts/123\") */\n currentSlug: string;\n /**\n * In-memory referrer. Cleared on popstate and page reload — breadcrumbs\n * after browser back/forward fall back to the structural parent.\n */\n previousSlug: string | null;\n /** Resolved navigation items (post role-filter, same as what the shell renders) */\n navItems: NavigationItem[];\n /** Base path for subpath deployments (e.g. \"/portal\"). Default: \"/\" */\n basePath: string;\n /** Navigate to a slug programmatically */\n navigate: (slug: string) => void;\n /** Build a full href for a slug (for use in <a> tags) */\n buildHref: (slug: string) => string;\n}\n\nconst AppNavigationContext = createContext<AppNavigationContextValue | null>(\n null,\n);\n\nexport interface AppNavigationProviderProps {\n currentSlug: string;\n previousSlug: string | null;\n navItems: NavigationItem[];\n basePath: string;\n navigate: (slug: string) => void;\n children: ReactNode;\n}\n\nexport function AppNavigationProvider({\n currentSlug,\n previousSlug,\n navItems,\n basePath,\n navigate,\n children,\n}: AppNavigationProviderProps): React.JSX.Element {\n const buildHref = useMemo(() => {\n return (slug: string) => {\n if (basePath === \"/\") return `/${slug}`;\n return `${basePath}/${slug}`;\n };\n }, [basePath]);\n\n const value = useMemo(\n () => ({\n currentSlug,\n previousSlug,\n navItems,\n basePath,\n navigate,\n buildHref,\n }),\n [currentSlug, previousSlug, navItems, basePath, navigate, buildHref],\n );\n\n return (\n <AppNavigationContext.Provider value={value}>\n {children}\n </AppNavigationContext.Provider>\n );\n}\n\nexport function useAppNavigation(): AppNavigationContextValue {\n const ctx = use(AppNavigationContext);\n if (!ctx) {\n throw new Error(\n \"useAppNavigation must be used within an <AppShell> or <AppNavigationProvider>\",\n );\n }\n return ctx;\n}\n"],"mappings":";;;AAqBA,MAAM,uBAAuB,cAC3B,KACD;AAWD,SAAgB,sBAAsB,EACpC,aACA,cACA,UACA,UACA,UACA,YACgD;CAChD,MAAM,YAAY,cAAc;AAC9B,UAAQ,SAAiB;AACvB,OAAI,aAAa,IAAK,QAAO,IAAI;AACjC,UAAO,GAAG,SAAS,GAAG;;IAEvB,CAAC,SAAS,CAAC;CAEd,MAAM,QAAQ,eACL;EACL;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EAAC;EAAa;EAAc;EAAU;EAAU;EAAU;EAAU,CACrE;AAED,QACE,oBAAC,qBAAqB,UAAtB;EAAsC;EACnC;EAC6B,CAAA;;AAIpC,SAAgB,mBAA8C;CAC5D,MAAM,MAAM,IAAI,qBAAqB;AACrC,KAAI,CAAC,IACH,OAAM,IAAI,MACR,gFACD;AAEH,QAAO"}
@@ -31,7 +31,7 @@ function AppNavigationProvider({ currentSlug, previousSlug, navItems, basePath,
31
31
  });
32
32
  }
33
33
  function useAppNavigation() {
34
- const ctx = (0, react.useContext)(AppNavigationContext);
34
+ const ctx = (0, react.use)(AppNavigationContext);
35
35
  if (!ctx) throw new Error("useAppNavigation must be used within an <AppShell> or <AppNavigationProvider>");
36
36
  return ctx;
37
37
  }
@@ -49,4 +49,4 @@ Object.defineProperty(exports, "useAppNavigation", {
49
49
  }
50
50
  });
51
51
 
52
- //# sourceMappingURL=AppNavigationContext-CoNtdUrr.cjs.map
52
+ //# sourceMappingURL=AppNavigationContext-CLOwdlpx.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppNavigationContext-CLOwdlpx.cjs","names":[],"sources":["../src/shell/AppNavigationContext.tsx"],"sourcesContent":["import { createContext, type ReactNode, use, useMemo } from \"react\";\nimport type { NavigationItem } from \"../types/navigation\";\n\nexport interface AppNavigationContextValue {\n /** Current active slug (e.g. \"contacts/123\") */\n currentSlug: string;\n /**\n * In-memory referrer. Cleared on popstate and page reload — breadcrumbs\n * after browser back/forward fall back to the structural parent.\n */\n previousSlug: string | null;\n /** Resolved navigation items (post role-filter, same as what the shell renders) */\n navItems: NavigationItem[];\n /** Base path for subpath deployments (e.g. \"/portal\"). Default: \"/\" */\n basePath: string;\n /** Navigate to a slug programmatically */\n navigate: (slug: string) => void;\n /** Build a full href for a slug (for use in <a> tags) */\n buildHref: (slug: string) => string;\n}\n\nconst AppNavigationContext = createContext<AppNavigationContextValue | null>(\n null,\n);\n\nexport interface AppNavigationProviderProps {\n currentSlug: string;\n previousSlug: string | null;\n navItems: NavigationItem[];\n basePath: string;\n navigate: (slug: string) => void;\n children: ReactNode;\n}\n\nexport function AppNavigationProvider({\n currentSlug,\n previousSlug,\n navItems,\n basePath,\n navigate,\n children,\n}: AppNavigationProviderProps): React.JSX.Element {\n const buildHref = useMemo(() => {\n return (slug: string) => {\n if (basePath === \"/\") return `/${slug}`;\n return `${basePath}/${slug}`;\n };\n }, [basePath]);\n\n const value = useMemo(\n () => ({\n currentSlug,\n previousSlug,\n navItems,\n basePath,\n navigate,\n buildHref,\n }),\n [currentSlug, previousSlug, navItems, basePath, navigate, buildHref],\n );\n\n return (\n <AppNavigationContext.Provider value={value}>\n {children}\n </AppNavigationContext.Provider>\n );\n}\n\nexport function useAppNavigation(): AppNavigationContextValue {\n const ctx = use(AppNavigationContext);\n if (!ctx) {\n throw new Error(\n \"useAppNavigation must be used within an <AppShell> or <AppNavigationProvider>\",\n );\n }\n return ctx;\n}\n"],"mappings":";;;;AAqBA,MAAM,wBAAA,GAAA,MAAA,eACJ,KACD;AAWD,SAAgB,sBAAsB,EACpC,aACA,cACA,UACA,UACA,UACA,YACgD;CAChD,MAAM,aAAA,GAAA,MAAA,eAA0B;AAC9B,UAAQ,SAAiB;AACvB,OAAI,aAAa,IAAK,QAAO,IAAI;AACjC,UAAO,GAAG,SAAS,GAAG;;IAEvB,CAAC,SAAS,CAAC;CAEd,MAAM,SAAA,GAAA,MAAA,gBACG;EACL;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EAAC;EAAa;EAAc;EAAU;EAAU;EAAU;EAAU,CACrE;AAED,QACE,iBAAA,GAAA,kBAAA,KAAC,qBAAqB,UAAtB;EAAsC;EACnC;EAC6B,CAAA;;AAIpC,SAAgB,mBAA8C;CAC5D,MAAM,OAAA,GAAA,MAAA,KAAU,qBAAqB;AACrC,KAAI,CAAC,IACH,OAAM,IAAI,MACR,gFACD;AAEH,QAAO"}
@@ -1,4 +1,4 @@
1
- import { vt as __exportAll } from "./PortalTenantClientProvider-BmRtQAbi.mjs";
1
+ import { vt as __exportAll } from "./PortalTenantClientProvider-DVClpfbi.mjs";
2
2
  import { f as getGapField, i as getBorderColorField, l as getColorField, m as getPaddingField, n as borderWidthClasses, o as getBorderRadiusField, r as gapValues, s as getBorderWidthField, t as borderColorClasses, u as getFontSizeField } from "./registries-59Barbhg.mjs";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region ../widgets/src/widgets/BulletListWidget.tsx
@@ -163,4 +163,4 @@ const bulletListWidgetPropertySchema = {
163
163
  //#endregion
164
164
  export { BulletListWidget_exports as n, bulletListWidgetPropertySchema as r, BulletListWidget as t };
165
165
 
166
- //# sourceMappingURL=BulletListWidget-AIIf29RP.mjs.map
166
+ //# sourceMappingURL=BulletListWidget-D--Mmasw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"BulletListWidget-AIIf29RP.mjs","names":[],"sources":["../../widgets/src/widgets/BulletListWidget.tsx"],"sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\n gapValues,\n} from \"../core/fields\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n GapOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\n\ntype BulletListWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // List\n listType?: \"ordered\" | \"unordered\";\n items?: string[] | string;\n itemFontSize?: FontSizeOptions;\n itemColor?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n gapSize?: GapOptions;\n};\n\nexport function BulletListWidget({\n titleEnabled = true,\n title = \"List\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n listType = \"unordered\",\n items = [\"Item 1\", \"Item 2\", \"Item 3\"],\n itemFontSize = \"md\",\n itemColor = \"foreground\",\n background = { type: \"solid\", color: \"background\" },\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n gapSize = \"sm\",\n className,\n ...props\n}: BulletListWidgetProps): React.JSX.Element {\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 listItems =\n typeof items === \"string\"\n ? items.split(\"\\n\").filter(Boolean)\n : (items ?? []);\n\n const ListTag = listType === \"ordered\" ? \"ol\" : \"ul\";\n const listStyleClass = listType === \"ordered\" ? \"list-decimal\" : \"list-disc\";\n const gap = gapValues[gapSize] ?? gapValues.sm;\n\n return (\n <div\n className={`bg-${backgroundColor} p-${padding} rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {titleEnabled && (\n <h2\n className={`text-${titleFontSize} text-${titleColor} font-header mb-2 font-bold`}\n >\n {title}\n </h2>\n )}\n <ListTag\n className={`${listStyleClass} pl-5 text-${itemFontSize} text-${itemColor}`}\n style={{ display: \"flex\", flexDirection: \"column\", gap }}\n >\n {listItems.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ListTag>\n </div>\n );\n}\n\nexport const bulletListWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"BulletListWidget\",\n displayName: \"Bullet List\",\n fields: [\n // Title Group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the list\",\n defaultValue: true,\n group: \"Title\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"The title\",\n defaultValue: \"List\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the title\",\n defaultValue: \"lg\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"The color of the title\",\n defaultValue: \"foreground\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n // List Group\n {\n key: \"listType\",\n label: \"List Type\",\n type: \"select\",\n description: \"Ordered (numbered) or unordered (bullets)\",\n options: [\n { label: \"Bullets\", value: \"unordered\" },\n { label: \"Numbered\", value: \"ordered\" },\n ],\n defaultValue: \"unordered\",\n group: \"List\",\n },\n {\n key: \"items\",\n label: \"List Items\",\n type: \"stringArray\",\n description: \"Add or remove list items\",\n defaultValue: [\"Item 1\", \"Item 2\", \"Item 3\"],\n group: \"List\",\n },\n getFontSizeField({\n key: \"itemFontSize\",\n label: \"Item Font Size\",\n description: \"Font size for list items\",\n defaultValue: \"md\",\n group: \"List\",\n }),\n getColorField({\n key: \"itemColor\",\n label: \"Item Color\",\n description: \"The color of list items\",\n defaultValue: \"foreground\",\n group: \"List\",\n }),\n // Style Group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the list container\",\n defaultValue: \"background\",\n group: \"Style\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"The padding of the list container\",\n defaultValue: 4,\n group: \"Style\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"The border radius of the list container\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gapSize\",\n label: \"Item Gap\",\n description: \"Gap between list items\",\n defaultValue: \"sm\",\n group: \"Style\",\n }),\n ],\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"BulletListWidget-D--Mmasw.mjs","names":[],"sources":["../../widgets/src/widgets/BulletListWidget.tsx"],"sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\n gapValues,\n} from \"../core/fields\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n GapOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\n\ntype BulletListWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // List\n listType?: \"ordered\" | \"unordered\";\n items?: string[] | string;\n itemFontSize?: FontSizeOptions;\n itemColor?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n gapSize?: GapOptions;\n};\n\nexport function BulletListWidget({\n titleEnabled = true,\n title = \"List\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n listType = \"unordered\",\n items = [\"Item 1\", \"Item 2\", \"Item 3\"],\n itemFontSize = \"md\",\n itemColor = \"foreground\",\n background = { type: \"solid\", color: \"background\" },\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n gapSize = \"sm\",\n className,\n ...props\n}: BulletListWidgetProps): React.JSX.Element {\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 listItems =\n typeof items === \"string\"\n ? items.split(\"\\n\").filter(Boolean)\n : (items ?? []);\n\n const ListTag = listType === \"ordered\" ? \"ol\" : \"ul\";\n const listStyleClass = listType === \"ordered\" ? \"list-decimal\" : \"list-disc\";\n const gap = gapValues[gapSize] ?? gapValues.sm;\n\n return (\n <div\n className={`bg-${backgroundColor} p-${padding} rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {titleEnabled && (\n <h2\n className={`text-${titleFontSize} text-${titleColor} font-header mb-2 font-bold`}\n >\n {title}\n </h2>\n )}\n <ListTag\n className={`${listStyleClass} pl-5 text-${itemFontSize} text-${itemColor}`}\n style={{ display: \"flex\", flexDirection: \"column\", gap }}\n >\n {listItems.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ListTag>\n </div>\n );\n}\n\nexport const bulletListWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"BulletListWidget\",\n displayName: \"Bullet List\",\n fields: [\n // Title Group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the list\",\n defaultValue: true,\n group: \"Title\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"The title\",\n defaultValue: \"List\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the title\",\n defaultValue: \"lg\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"The color of the title\",\n defaultValue: \"foreground\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n // List Group\n {\n key: \"listType\",\n label: \"List Type\",\n type: \"select\",\n description: \"Ordered (numbered) or unordered (bullets)\",\n options: [\n { label: \"Bullets\", value: \"unordered\" },\n { label: \"Numbered\", value: \"ordered\" },\n ],\n defaultValue: \"unordered\",\n group: \"List\",\n },\n {\n key: \"items\",\n label: \"List Items\",\n type: \"stringArray\",\n description: \"Add or remove list items\",\n defaultValue: [\"Item 1\", \"Item 2\", \"Item 3\"],\n group: \"List\",\n },\n getFontSizeField({\n key: \"itemFontSize\",\n label: \"Item Font Size\",\n description: \"Font size for list items\",\n defaultValue: \"md\",\n group: \"List\",\n }),\n getColorField({\n key: \"itemColor\",\n label: \"Item Color\",\n description: \"The color of list items\",\n defaultValue: \"foreground\",\n group: \"List\",\n }),\n // Style Group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the list container\",\n defaultValue: \"background\",\n group: \"Style\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"The padding of the list container\",\n defaultValue: 4,\n group: \"Style\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"The border radius of the list container\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gapSize\",\n label: \"Item Gap\",\n description: \"Gap between list items\",\n defaultValue: \"sm\",\n group: \"Style\",\n }),\n ],\n};\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  const require_chunk = require("./chunk-9hOWP6kD.cjs");
2
- const require_registry_context = require("./registry-context-DJ5xiVnt.cjs");
3
- const require_error_state = require("./error-state-DJq7C-23.cjs");
2
+ const require_registry_context = require("./registry-context-Q_1Iq2Ea.cjs");
3
+ const require_error_state = require("./error-state-CU87JUpz.cjs");
4
4
  const require_registries = require("./registries-CpUM406S.cjs");
5
- const require_preview_context = require("./preview-context-BWCl-xyj.cjs");
5
+ const require_preview_context = require("./preview-context-DrXkIImI.cjs");
6
6
  let react = require("react");
7
7
  let _tanstack_react_query = require("@tanstack/react-query");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -768,4 +768,4 @@ Object.defineProperty(exports, "calendarWidgetPropertySchema", {
768
768
  }
769
769
  });
770
770
 
771
- //# sourceMappingURL=CalendarWidget-DW5wz5ke.cjs.map
771
+ //# sourceMappingURL=CalendarWidget-Aa7H9M7f.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarWidget-DW5wz5ke.cjs","names":["useWidgetsApi","useWidgetPreviewContext","useDataSourceRegistryConfig","Calendar","Link2","MapPin","ErrorState","CalendarCheck","ChevronLeft","ChevronRight","ChevronsDown","ChevronsUp","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"sources":["../../widgets/src/hooks/use-calendar-events.preview.ts","../../widgets/src/hooks/use-calendar-events.ts","../../widgets/src/widgets/CalendarWidget.tsx"],"sourcesContent":["import type { CalendarEvent } from \"@fluid-app/portal-core/widgets-api-types\";\n\nconst today = new Date();\nconst inTwoDays = new Date(today);\ninTwoDays.setDate(inTwoDays.getDate() + 2);\n\nfunction toISO(date: Date, hours: number, minutes = 0): string {\n const d = new Date(date);\n d.setHours(hours, minutes, 0, 0);\n return d.toISOString();\n}\n\nfunction toDateString(date: Date): string {\n return date.toISOString().split(\"T\")[0]!;\n}\n\nexport const PREVIEW_DATA: CalendarEvent[] = [\n {\n id: 1,\n title: \"Team Strategy Call\",\n start: toISO(today, 9, 0),\n end: toISO(today, 10, 0),\n status: \"active\",\n color: \"#4f46e5\",\n },\n {\n id: 2,\n title: \"Product Launch Webinar\",\n start: toISO(today, 14, 0),\n end: toISO(today, 15, 30),\n status: \"active\",\n color: \"#0891b2\",\n venue: \"Zoom\",\n },\n {\n id: 3,\n title: \"Annual Leadership Summit\",\n start: `${toDateString(inTwoDays)}T00:00:00.000Z`,\n end: `${toDateString(inTwoDays)}T23:59:59.000Z`,\n status: \"active\",\n color: \"#059669\",\n isAllDay: true,\n venue: \"Convention Center\",\n },\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-calendar-events.preview\";\nimport type { CalendarEvent } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { CalendarEvent } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useCalendarEvents(): UseQueryResult<CalendarEvent[], Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"calendar-events\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchCalendarEvents(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import {\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n type ComponentProps,\n} from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport {\n useCalendarEvents,\n type CalendarEvent,\n} from \"../hooks/use-calendar-events\";\nimport { ErrorState } from \"../components/error-state\";\nimport {\n Calendar,\n CalendarCheck,\n ChevronLeft,\n ChevronRight,\n ChevronsDown,\n ChevronsUp,\n Link2,\n MapPin,\n type LucideIcon,\n} from \"lucide-react\";\n\nconst DAY_NAMES = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"] as const;\n\nconst getDaysInMonth = (year: number, month: number): number =>\n new Date(year, month + 1, 0).getDate();\n\nconst getFirstDayOfMonth = (year: number, month: number): number =>\n new Date(year, month, 1).getDay();\n\nconst isSameDay = (a: Date, b: Date): boolean =>\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nconst startOfDay = (d: Date): Date => {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n};\n\nconst addDays = (d: Date, n: number): Date => {\n const x = new Date(d);\n x.setDate(x.getDate() + n);\n return x;\n};\n\nconst diffDays = (a: Date, b: Date): number => {\n const ms = startOfDay(a).getTime() - startOfDay(b).getTime();\n return Math.round(ms / 86400000);\n};\n\ntype DayCell = {\n date: Date | null;\n isToday: boolean;\n isCurrentMonth: boolean;\n};\n\nconst generateMonthGrid = (year: number, month: number): DayCell[] => {\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const today = new Date();\n const cells: DayCell[] = [];\n\n for (let i = 0; i < firstDay; i++) {\n cells.push({ date: null, isToday: false, isCurrentMonth: false });\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n cells.push({\n date,\n isToday: isSameDay(date, today),\n isCurrentMonth: true,\n });\n }\n\n return cells;\n};\n\nconst generateWeekGrid = (): Array<{ date: Date; isToday: boolean }> => {\n const today = new Date();\n const weekday = today.getDay();\n return Array.from({ length: 7 }, (_, i) => {\n const date = addDays(today, -weekday + i);\n return { date, isToday: isSameDay(date, today) };\n });\n};\n\nconst formatContextualDate = (\n date: Date,\n): { lead: string | null; detail: string } => {\n const today = new Date();\n const d = diffDays(date, today);\n const weekday = date.toLocaleDateString(\"en-US\", { weekday: \"short\" });\n const monthDay = date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n });\n if (d === 0) return { lead: \"Today\", detail: `${weekday}, ${monthDay}` };\n if (d === 1) return { lead: \"Tomorrow\", detail: `${weekday}, ${monthDay}` };\n if (d === -1) return { lead: \"Yesterday\", detail: `${weekday}, ${monthDay}` };\n return { lead: null, detail: `${weekday}, ${monthDay}` };\n};\n\ntype DayCellButtonProps = {\n date: Date;\n isToday: boolean;\n isSelected: boolean;\n eventCount: number;\n accentColor: ColorOptions;\n textColor: ColorOptions;\n showEventDensity: boolean;\n onClick: () => void;\n};\n\nfunction DayCellButton({\n date,\n isToday,\n isSelected,\n eventCount,\n accentColor,\n textColor,\n showEventDensity,\n onClick,\n}: DayCellButtonProps) {\n const dotCount = showEventDensity\n ? Math.min(eventCount, 3)\n : eventCount > 0\n ? 1\n : 0;\n\n const baseClasses =\n \"group relative flex aspect-square w-full flex-col items-center justify-center rounded-lg text-sm tabular-nums transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0\";\n\n const stateClasses = isSelected\n ? `bg-${accentColor} text-${accentColor}-foreground focus-visible:ring-${accentColor}/40`\n : isToday\n ? `bg-${accentColor}/10 text-${accentColor} font-semibold hover:bg-${accentColor}/20 focus-visible:ring-${accentColor}/40`\n : `text-${textColor} hover:bg-${accentColor}/10 focus-visible:ring-${accentColor}/40`;\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={date.toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n })}\n aria-current={isToday ? \"date\" : undefined}\n aria-pressed={isSelected}\n className={`${baseClasses} ${stateClasses}`}\n >\n <span className=\"leading-none\">{date.getDate()}</span>\n {dotCount > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"absolute bottom-0.5 flex items-center gap-[2px]\"\n >\n {Array.from({ length: dotCount }).map((_, i) => (\n <span\n key={i}\n className={`size-1 rounded-full ${\n isSelected\n ? `bg-${accentColor}-foreground/70`\n : `bg-${accentColor}`\n }`}\n />\n ))}\n </span>\n )}\n </button>\n );\n}\n\ntype EventCardProps = {\n event: CalendarEvent;\n accentColor: ColorOptions;\n textColor: ColorOptions;\n};\n\nconst safeTimeZone = (tz: string | null | undefined): string | undefined => {\n if (!tz) return undefined;\n try {\n new Intl.DateTimeFormat(undefined, { timeZone: tz });\n return tz;\n } catch {\n return undefined;\n }\n};\n\nconst formatLongDateTime = (iso: string, timeZone: string | null): string => {\n const d = new Date(iso);\n const tz = safeTimeZone(timeZone);\n const datePart = d.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: tz,\n });\n const timePart = d.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZoneName: \"short\",\n timeZone: tz,\n });\n return `${datePart} at ${timePart}`;\n};\n\nconst formatLongDate = (iso: string, timeZone: string | null): string => {\n return new Date(iso).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: safeTimeZone(timeZone),\n });\n};\n\nconst isSafeHttpUrl = (url: string): boolean => {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\nconst deriveEventStatus = (\n event: CalendarEvent,\n): { label: string; tone: \"upcoming\" | \"live\" | \"past\" } => {\n const rawStatus = event.status?.trim();\n const normalized = rawStatus?.toLowerCase();\n if (rawStatus && normalized !== \"active\" && normalized !== \"confirmed\") {\n const label =\n rawStatus.charAt(0).toUpperCase() + rawStatus.slice(1).toLowerCase();\n return { label, tone: \"past\" };\n }\n const startMs = new Date(event.start).getTime();\n const endMs = new Date(event.end).getTime();\n const now = Date.now();\n if (now < startMs) return { label: \"Upcoming\", tone: \"upcoming\" };\n if (now <= endMs) return { label: \"Live\", tone: \"live\" };\n return { label: \"Past\", tone: \"past\" };\n};\n\nfunction EventCard({ event, accentColor, textColor }: EventCardProps) {\n const accentVar = `var(--color-${accentColor})`;\n const barColor = event.color || accentVar;\n const startDate = new Date(event.start);\n const eventTz = safeTimeZone(event.timeZone);\n const weekday = startDate.toLocaleDateString(\"en-US\", {\n weekday: \"short\",\n timeZone: eventTz,\n });\n const monthDay = startDate.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n timeZone: eventTz,\n });\n const status = deriveEventStatus(event);\n const description = event.description?.body;\n\n const startDisplay = event.isAllDay\n ? formatLongDate(event.start, event.timeZone ?? null)\n : formatLongDateTime(event.start, event.timeZone ?? null);\n const endDisplay = event.isAllDay\n ? formatLongDate(event.end, event.timeZone ?? null)\n : formatLongDateTime(event.end, event.timeZone ?? null);\n\n const statusToneClasses =\n status.tone === \"live\"\n ? `bg-${accentColor}/15 text-${accentColor}`\n : status.tone === \"upcoming\"\n ? `bg-${accentColor}/10 text-${accentColor}`\n : `bg-${textColor}/10 text-${textColor}/60`;\n\n return (\n <article\n className={`relative overflow-hidden rounded-lg border border-${textColor}/10`}\n >\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-[3px]\"\n style={{ backgroundColor: barColor }}\n />\n\n {event.imageUrl && (\n <img\n src={event.imageUrl}\n alt=\"\"\n className=\"aspect-[16/7] w-full object-cover\"\n />\n )}\n\n <div className=\"flex flex-col gap-4 p-4 pl-5\">\n <div className=\"flex items-start gap-4\">\n <div\n className={`shrink-0 text-${textColor} leading-tight tabular-nums`}\n >\n <div className={`text-xs font-semibold text-${textColor}/55`}>\n {weekday}\n </div>\n <div className=\"text-2xl font-bold tracking-[-0.015em]\">\n {monthDay}\n </div>\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <h4\n className={`text-base font-bold text-${textColor} leading-tight tracking-[-0.01em]`}\n >\n {event.title}\n </h4>\n {description && (\n <p\n className={`mt-1 text-sm leading-snug whitespace-pre-wrap text-${textColor}/65`}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2.5\">\n <div className=\"flex items-start gap-2\">\n <Calendar\n className={`mt-0.5 size-4 shrink-0 text-${textColor}/55`}\n />\n <div\n className={`text-sm leading-snug text-${textColor}/80 tabular-nums`}\n >\n <div>\n <span className=\"font-semibold\">Start</span> {startDisplay}\n </div>\n <div>\n <span className=\"font-semibold\">End</span> {endDisplay}\n </div>\n </div>\n </div>\n\n <div>\n <span\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold ${statusToneClasses}`}\n >\n {status.label}\n </span>\n </div>\n\n {event.url && isSafeHttpUrl(event.url) && (\n <a\n href={event.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`flex items-center gap-2 text-sm text-${accentColor} break-all hover:underline`}\n >\n <Link2 className={`size-4 shrink-0 text-${textColor}/55`} />\n <span>{event.url}</span>\n </a>\n )}\n\n {event.venue && (\n <a\n href={`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(event.venue)}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`flex items-start gap-2 text-sm text-${accentColor} hover:underline`}\n >\n <MapPin\n className={`mt-0.5 size-4 shrink-0 text-${textColor}/55`}\n />\n <span>{event.venue}</span>\n </a>\n )}\n </div>\n </div>\n </article>\n );\n}\n\ntype NavButtonProps = {\n icon: LucideIcon;\n label: string;\n variant: \"ghost\" | \"accent\";\n accentColor: ColorOptions;\n textColor: ColorOptions;\n onClick: () => void;\n};\n\nfunction NavButton({\n icon: Icon,\n label,\n variant,\n accentColor,\n textColor,\n onClick,\n}: NavButtonProps) {\n const classes =\n variant === \"accent\"\n ? `bg-${accentColor} text-${accentColor}-foreground hover:bg-${accentColor}/90 focus-visible:ring-${accentColor}/40`\n : `bg-${textColor}/5 text-${textColor} hover:bg-${textColor}/10 focus-visible:ring-${textColor}/20`;\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n className={`flex size-8 items-center justify-center rounded-full text-[12px] transition-colors focus:outline-none focus-visible:ring-2 ${classes}`}\n >\n <Icon className=\"size-4\" />\n </button>\n );\n}\n\ntype CalendarView = {\n month: number;\n year: number;\n};\n\nconst getInitialCalendarView = (): CalendarView => {\n const now = new Date();\n return { month: now.getMonth(), year: now.getFullYear() };\n};\n\nfunction useCalendarNavigation(\n setSelectedDate: React.Dispatch<React.SetStateAction<Date | null>>,\n) {\n const [view, setView] = useState(getInitialCalendarView);\n const [gridTransitioning, setGridTransitioning] = useState(false);\n const transitionTimeoutRef = useRef<number | null>(null);\n\n useEffect(\n () => () => {\n if (transitionTimeoutRef.current !== null) {\n window.clearTimeout(transitionTimeoutRef.current);\n }\n },\n [],\n );\n\n const clearPendingTransition = useCallback(() => {\n if (transitionTimeoutRef.current !== null) {\n window.clearTimeout(transitionTimeoutRef.current);\n transitionTimeoutRef.current = null;\n }\n }, []);\n\n const navigate = useCallback(\n (direction: -1 | 1) => {\n clearPendingTransition();\n setGridTransitioning(true);\n transitionTimeoutRef.current = window.setTimeout(() => {\n setView((prev) => {\n const next = prev.month + direction;\n if (next < 0) return { month: 11, year: prev.year - 1 };\n if (next > 11) return { month: 0, year: prev.year + 1 };\n return { month: next, year: prev.year };\n });\n setGridTransitioning(false);\n transitionTimeoutRef.current = null;\n }, 120);\n },\n [clearPendingTransition],\n );\n\n const goToToday = useCallback(() => {\n clearPendingTransition();\n const now = new Date();\n setGridTransitioning(true);\n transitionTimeoutRef.current = window.setTimeout(() => {\n setView({ month: now.getMonth(), year: now.getFullYear() });\n setSelectedDate(now);\n setGridTransitioning(false);\n transitionTimeoutRef.current = null;\n }, 80);\n }, [clearPendingTransition, setSelectedDate]);\n\n return { view, gridTransitioning, navigate, goToToday };\n}\n\nfunction useCalendarEventIndex(\n events: CalendarEvent[],\n selectedDate: Date | null,\n) {\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n for (const event of events) {\n const start = startOfDay(new Date(event.start));\n const end = startOfDay(new Date(event.end));\n for (let cur = start; cur <= end; cur = addDays(cur, 1)) {\n const key = `${cur.getFullYear()}-${cur.getMonth()}-${cur.getDate()}`;\n const list = map.get(key);\n if (list) {\n list.push(event);\n } else {\n map.set(key, [event]);\n }\n }\n }\n return map;\n }, [events]);\n\n const lookupEventsForDate = useCallback(\n (date: Date): CalendarEvent[] => {\n const key = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\n return eventsByDate.get(key) ?? [];\n },\n [eventsByDate],\n );\n\n const selectedDateEvents = useMemo(() => {\n if (!selectedDate) return [];\n return lookupEventsForDate(selectedDate);\n }, [selectedDate, lookupEventsForDate]);\n\n return { lookupEventsForDate, selectedDateEvents };\n}\n\ntype CalendarWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Premium polish (new, additive)\n showEventDensity?: boolean;\n showTodayButton?: boolean;\n weekendDim?: boolean;\n showYearEyebrow?: boolean;\n};\n\nexport function CalendarWidget({\n titleEnabled = true,\n titleText = \"Calendar\",\n titleFontSize = \"xl\",\n titleColor = \"foreground\",\n\n background = { type: \"solid\", color: \"background\" },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n\n showEventDensity = true,\n showTodayButton = true,\n weekendDim = true,\n showYearEyebrow = true,\n\n className,\n ...props\n}: CalendarWidgetProps): React.JSX.Element {\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 [isCollapsed, setIsCollapsed] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n () => new Date(),\n );\n const { view, gridTransitioning, navigate, goToToday } =\n useCalendarNavigation(setSelectedDate);\n const currentMonth = view.month;\n const currentYear = view.year;\n\n const { data: events = [], isLoading, isError } = useCalendarEvents();\n\n const monthGrid = useMemo(\n () => generateMonthGrid(currentYear, currentMonth),\n [currentYear, currentMonth],\n );\n const weekGrid = generateWeekGrid();\n const { lookupEventsForDate, selectedDateEvents } = useCalendarEventIndex(\n events,\n selectedDate,\n );\n\n const now = new Date();\n const viewingCurrentMonth =\n currentMonth === now.getMonth() && currentYear === now.getFullYear();\n\n const monthLabel = new Date(currentYear, currentMonth).toLocaleString(\n \"en-US\",\n { month: \"long\" },\n );\n const yearLabel = String(currentYear);\n\n const contextualDate = selectedDate\n ? formatContextualDate(selectedDate)\n : null;\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {titleEnabled && titleText && (\n <div className={`p-${padding} pb-0`}>\n <h2\n className={`text-${titleFontSize} text-${titleColor} font-bold tracking-[-0.012em]`}\n >\n {titleText}\n </h2>\n </div>\n )}\n\n {isLoading ? (\n <div\n className={`flex min-h-[300px] items-center justify-center p-${padding}`}\n >\n <div className={`text-${accentColor}`}>\n <div className=\"size-8 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n </div>\n ) : isError ? (\n <ErrorState />\n ) : (\n <div className={`p-${padding}`}>\n <div className=\"@md:flex @md:gap-6\">\n <div className=\"@md:flex-none\">\n {/* Header row: year eyebrow + month + asymmetric nav + Today pill */}\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 flex-col\">\n {showYearEyebrow && (\n <span\n className={`text-[10px] font-bold tracking-[0.16em] uppercase text-${textColor}/55`}\n >\n {yearLabel}\n </span>\n )}\n <span\n className={`text-xl leading-tight font-bold tracking-[-0.015em] text-${textColor}`}\n >\n {monthLabel}\n </span>\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {showTodayButton && !viewingCurrentMonth && (\n <button\n type=\"button\"\n onClick={goToToday}\n className={`flex items-center gap-1 rounded-full bg-${accentColor}/10 px-2.5 py-1 text-[11px] font-semibold text-${accentColor} transition-colors hover:bg-${accentColor}/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-${accentColor}/40`}\n >\n <CalendarCheck className=\"size-3\" />\n Today\n </button>\n )}\n <NavButton\n icon={ChevronLeft}\n label=\"Previous month\"\n variant=\"ghost\"\n accentColor={accentColor}\n textColor={textColor}\n onClick={() => navigate(-1)}\n />\n <NavButton\n icon={ChevronRight}\n label=\"Next month\"\n variant=\"accent\"\n accentColor={accentColor}\n textColor={textColor}\n onClick={() => navigate(1)}\n />\n </div>\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"mb-2 grid grid-cols-7 gap-1 text-center\">\n {DAY_NAMES.map((day, idx) => {\n const isWeekend = idx === 0 || idx === 6;\n const dimmed = weekendDim && isWeekend;\n return (\n <div\n key={day}\n className={`text-[10px] font-semibold tracking-[0.12em] uppercase text-${textColor}/${dimmed ? \"40\" : \"55\"}`}\n >\n {day}\n </div>\n );\n })}\n </div>\n\n {/* Grid wrapper (opacity transitions on month navigate) */}\n <div\n className=\"transition-opacity duration-150 ease-out\"\n style={{ opacity: gridTransitioning ? 0.3 : 1 }}\n >\n {/* Collapsed week view on mobile */}\n {isCollapsed && (\n <div className=\"grid grid-cols-7 gap-1 @md:hidden\">\n {weekGrid.map(({ date, isToday }) => (\n <DayCellButton\n key={date.toISOString()}\n date={date}\n isToday={isToday}\n isSelected={\n !!selectedDate && isSameDay(selectedDate, date)\n }\n eventCount={lookupEventsForDate(date).length}\n accentColor={accentColor}\n textColor={textColor}\n showEventDensity={showEventDensity}\n onClick={() => setSelectedDate(date)}\n />\n ))}\n </div>\n )}\n\n {/* Month grid */}\n <div\n className={`grid grid-cols-7 gap-1 ${isCollapsed ? \"hidden @md:grid\" : \"grid\"}`}\n >\n {monthGrid.map((cell, idx) => {\n if (!cell.date) {\n return (\n <div key={`empty-${idx}`} className=\"aspect-square\" />\n );\n }\n const eventCount = lookupEventsForDate(cell.date).length;\n return (\n <DayCellButton\n key={cell.date.toISOString()}\n date={cell.date}\n isToday={cell.isToday}\n isSelected={\n !!selectedDate && isSameDay(selectedDate, cell.date)\n }\n eventCount={eventCount}\n accentColor={accentColor}\n textColor={textColor}\n showEventDensity={showEventDensity}\n onClick={() => setSelectedDate(cell.date)}\n />\n );\n })}\n </div>\n </div>\n\n {/* Mobile collapse toggle */}\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(!isCollapsed)}\n className={`mt-2 flex w-full items-center justify-center gap-3 rounded-full p-1 text-${textColor}/40 transition-colors hover:text-${textColor}/60 @md:hidden`}\n aria-label={\n isCollapsed ? \"Expand calendar\" : \"Collapse calendar\"\n }\n >\n <div className={`h-px w-1/2 bg-${textColor}/20`} />\n {isCollapsed ? (\n <ChevronsDown className=\"size-3\" />\n ) : (\n <ChevronsUp className=\"size-3\" />\n )}\n <div className={`h-px w-1/2 bg-${textColor}/20`} />\n </button>\n </div>\n\n {/* Events rail */}\n <div\n className={`mt-4 min-w-0 border-${textColor}/10 @md:relative @md:mt-0 @md:flex-1 @md:border-l`}\n >\n <div className=\"@md:absolute @md:inset-0 @md:overflow-y-auto @md:pr-1 @md:pl-6\">\n {/* Context header */}\n {contextualDate && (\n <div className=\"mb-3\">\n {contextualDate.lead && (\n <div\n className={`text-[10px] font-bold tracking-[0.16em] uppercase text-${accentColor}`}\n >\n {contextualDate.lead}\n </div>\n )}\n <div\n className={`text-sm font-semibold text-${textColor} tabular-nums`}\n >\n {contextualDate.detail}\n </div>\n </div>\n )}\n\n {/* Events list with soft fade-in keyed by selected date */}\n <div\n key={selectedDate?.toISOString() ?? \"none\"}\n className=\"animate-in fade-in slide-in-from-bottom-2 flex flex-col gap-3 duration-200 ease-out\"\n >\n {selectedDateEvents.length > 0 ? (\n selectedDateEvents.map((event, idx) => (\n <EventCard\n key={`${event.id}-${idx}`}\n event={event}\n accentColor={accentColor}\n textColor={textColor}\n />\n ))\n ) : (\n <div\n className={`flex flex-col items-start gap-1 rounded-md border border-dashed border-${textColor}/15 px-3 py-3`}\n >\n <div className=\"flex items-center gap-1.5\">\n <CalendarCheck\n className={`size-3 text-${textColor}/40`}\n />\n <span\n className={`text-[11px] font-semibold text-${textColor}/60`}\n >\n Nothing scheduled\n </span>\n </div>\n <span className={`text-[11px] text-${textColor}/45`}>\n Enjoy the breather.\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const calendarWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CalendarWidget\",\n displayName: \"Calendar Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Title group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the calendar\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Title text displayed above the calendar\",\n defaultValue: \"Calendar\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Design group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the calendar container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for calendar content\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description:\n \"Drives today highlight, event dots, Today pill, and selected day\",\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 getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the calendar container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the calendar container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n\n // Polish group (new)\n {\n key: \"showYearEyebrow\",\n label: \"Year Eyebrow\",\n type: \"boolean\",\n description:\n \"Small uppercase year label above the month (e.g. '2026 / November').\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n {\n key: \"showTodayButton\",\n label: \"Today Button\",\n type: \"boolean\",\n description: \"Show a 'Today' pill when viewing a different month.\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n {\n key: \"showEventDensity\",\n label: \"Event Density Dots\",\n type: \"boolean\",\n description:\n \"Show 1–3 dots per day based on event count (off = single dot).\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n {\n key: \"weekendDim\",\n label: \"Dim Weekends\",\n type: \"boolean\",\n description:\n \"Subtly dim the Sun/Sat day-of-week headers for visual rhythm.\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":";;;;;;;;;;AAEA,MAAM,wBAAQ,IAAI,MAAM;AACxB,MAAM,YAAY,IAAI,KAAK,MAAM;AACjC,UAAU,QAAQ,UAAU,SAAS,GAAG,EAAE;AAE1C,SAAS,MAAM,MAAY,OAAe,UAAU,GAAW;CAC7D,MAAM,IAAI,IAAI,KAAK,KAAK;AACxB,GAAE,SAAS,OAAO,SAAS,GAAG,EAAE;AAChC,QAAO,EAAE,aAAa;;AAGxB,SAAS,aAAa,MAAoB;AACxC,QAAO,KAAK,aAAa,CAAC,MAAM,IAAI,CAAC;;AAGvC,MAAa,eAAgC;CAC3C;EACE,IAAI;EACJ,OAAO;EACP,OAAO,MAAM,OAAO,GAAG,EAAE;EACzB,KAAK,MAAM,OAAO,IAAI,EAAE;EACxB,QAAQ;EACR,OAAO;EACR;CACD;EACE,IAAI;EACJ,OAAO;EACP,OAAO,MAAM,OAAO,IAAI,EAAE;EAC1B,KAAK,MAAM,OAAO,IAAI,GAAG;EACzB,QAAQ;EACR,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,OAAO;EACP,OAAO,GAAG,aAAa,UAAU,CAAC;EAClC,KAAK,GAAG,aAAa,UAAU,CAAC;EAChC,QAAQ;EACR,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACF;;;ACnCD,SAAgB,oBAA4D;CAC1E,MAAM,aAAaA,oBAAAA,eAAe;CAClC,MAAM,EAAE,cAAcC,wBAAAA,yBAAyB;CAC/C,MAAM,EAAE,YAAYC,yBAAAA,6BAA6B;AAEjD,SAAA,GAAA,sBAAA,UAAgB;EACd,UAAU;GACR;GACA;GACA,YAAY,YAAY;GACzB;EACD,UAAU,EAAE,aAAa,WAAW,oBAAoB,OAAO;EAC/D,SAAS,CAAC;EACV,GAAI,aAAa,EAAE,iBAAiB,cAAc;EACnD,CAAC;;;;;;;;ACiBJ,MAAM,YAAY;CAAC;CAAO;CAAO;CAAO;CAAO;CAAO;CAAO;CAAM;AAEnE,MAAM,kBAAkB,MAAc,UACpC,IAAI,KAAK,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS;AAExC,MAAM,sBAAsB,MAAc,UACxC,IAAI,KAAK,MAAM,OAAO,EAAE,CAAC,QAAQ;AAEnC,MAAM,aAAa,GAAS,MAC1B,EAAE,aAAa,KAAK,EAAE,aAAa,IACnC,EAAE,UAAU,KAAK,EAAE,UAAU,IAC7B,EAAE,SAAS,KAAK,EAAE,SAAS;AAE7B,MAAM,cAAc,MAAkB;CACpC,MAAM,IAAI,IAAI,KAAK,EAAE;AACrB,GAAE,SAAS,GAAG,GAAG,GAAG,EAAE;AACtB,QAAO;;AAGT,MAAM,WAAW,GAAS,MAAoB;CAC5C,MAAM,IAAI,IAAI,KAAK,EAAE;AACrB,GAAE,QAAQ,EAAE,SAAS,GAAG,EAAE;AAC1B,QAAO;;AAGT,MAAM,YAAY,GAAS,MAAoB;CAC7C,MAAM,KAAK,WAAW,EAAE,CAAC,SAAS,GAAG,WAAW,EAAE,CAAC,SAAS;AAC5D,QAAO,KAAK,MAAM,KAAK,MAAS;;AASlC,MAAM,qBAAqB,MAAc,UAA6B;CACpE,MAAM,cAAc,eAAe,MAAM,MAAM;CAC/C,MAAM,WAAW,mBAAmB,MAAM,MAAM;CAChD,MAAM,wBAAQ,IAAI,MAAM;CACxB,MAAM,QAAmB,EAAE;AAE3B,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,IAC5B,OAAM,KAAK;EAAE,MAAM;EAAM,SAAS;EAAO,gBAAgB;EAAO,CAAC;AAGnE,MAAK,IAAI,MAAM,GAAG,OAAO,aAAa,OAAO;EAC3C,MAAM,OAAO,IAAI,KAAK,MAAM,OAAO,IAAI;AACvC,QAAM,KAAK;GACT;GACA,SAAS,UAAU,MAAM,MAAM;GAC/B,gBAAgB;GACjB,CAAC;;AAGJ,QAAO;;AAGT,MAAM,yBAAkE;CACtE,MAAM,wBAAQ,IAAI,MAAM;CACxB,MAAM,UAAU,MAAM,QAAQ;AAC9B,QAAO,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,MAAM;EACzC,MAAM,OAAO,QAAQ,OAAO,CAAC,UAAU,EAAE;AACzC,SAAO;GAAE;GAAM,SAAS,UAAU,MAAM,MAAM;GAAE;GAChD;;AAGJ,MAAM,wBACJ,SAC4C;CAE5C,MAAM,IAAI,SAAS,sBADL,IAAI,MAAM,CACO;CAC/B,MAAM,UAAU,KAAK,mBAAmB,SAAS,EAAE,SAAS,SAAS,CAAC;CACtE,MAAM,WAAW,KAAK,mBAAmB,SAAS;EAChD,OAAO;EACP,KAAK;EACN,CAAC;AACF,KAAI,MAAM,EAAG,QAAO;EAAE,MAAM;EAAS,QAAQ,GAAG,QAAQ,IAAI;EAAY;AACxE,KAAI,MAAM,EAAG,QAAO;EAAE,MAAM;EAAY,QAAQ,GAAG,QAAQ,IAAI;EAAY;AAC3E,KAAI,MAAM,GAAI,QAAO;EAAE,MAAM;EAAa,QAAQ,GAAG,QAAQ,IAAI;EAAY;AAC7E,QAAO;EAAE,MAAM;EAAM,QAAQ,GAAG,QAAQ,IAAI;EAAY;;AAc1D,SAAS,cAAc,EACrB,MACA,SACA,YACA,YACA,aACA,WACA,kBACA,WACqB;CACrB,MAAM,WAAW,mBACb,KAAK,IAAI,YAAY,EAAE,GACvB,aAAa,IACX,IACA;CAEN,MAAM,cACJ;CAEF,MAAM,eAAe,aACjB,MAAM,YAAY,QAAQ,YAAY,iCAAiC,YAAY,OACnF,UACE,MAAM,YAAY,WAAW,YAAY,0BAA0B,YAAY,yBAAyB,YAAY,OACpH,QAAQ,UAAU,YAAY,YAAY,yBAAyB,YAAY;AAErF,QACE,iBAAA,GAAA,kBAAA,MAAC,UAAD;EACE,MAAK;EACI;EACT,cAAY,KAAK,mBAAmB,SAAS;GAC3C,SAAS;GACT,OAAO;GACP,KAAK;GACN,CAAC;EACF,gBAAc,UAAU,SAAS,KAAA;EACjC,gBAAc;EACd,WAAW,GAAG,YAAY,GAAG;YAV/B,CAYE,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aAAgB,KAAK,SAAS;GAAQ,CAAA,EACrD,WAAW,KACV,iBAAA,GAAA,kBAAA,KAAC,QAAD;GACE,eAAY;GACZ,WAAU;aAET,MAAM,KAAK,EAAE,QAAQ,UAAU,CAAC,CAAC,KAAK,GAAG,MACxC,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAEE,WAAW,uBACT,aACI,MAAM,YAAY,kBAClB,MAAM,iBAEZ,EANK,EAML,CACF;GACG,CAAA,CAEF;;;AAUb,MAAM,gBAAgB,OAAsD;AAC1E,KAAI,CAAC,GAAI,QAAO,KAAA;AAChB,KAAI;AACF,MAAI,KAAK,eAAe,KAAA,GAAW,EAAE,UAAU,IAAI,CAAC;AACpD,SAAO;SACD;AACN;;;AAIJ,MAAM,sBAAsB,KAAa,aAAoC;CAC3E,MAAM,IAAI,IAAI,KAAK,IAAI;CACvB,MAAM,KAAK,aAAa,SAAS;AAajC,QAAO,GAZU,EAAE,mBAAmB,SAAS;EAC7C,OAAO;EACP,KAAK;EACL,MAAM;EACN,UAAU;EACX,CAAC,CAOiB,MANF,EAAE,mBAAmB,SAAS;EAC7C,MAAM;EACN,QAAQ;EACR,cAAc;EACd,UAAU;EACX,CAAC;;AAIJ,MAAM,kBAAkB,KAAa,aAAoC;AACvE,QAAO,IAAI,KAAK,IAAI,CAAC,mBAAmB,SAAS;EAC/C,OAAO;EACP,KAAK;EACL,MAAM;EACN,UAAU,aAAa,SAAS;EACjC,CAAC;;AAGJ,MAAM,iBAAiB,QAAyB;AAC9C,KAAI;EACF,MAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,SAAO,OAAO,aAAa,WAAW,OAAO,aAAa;SACpD;AACN,SAAO;;;AAIX,MAAM,qBACJ,UAC0D;CAC1D,MAAM,YAAY,MAAM,QAAQ,MAAM;CACtC,MAAM,aAAa,WAAW,aAAa;AAC3C,KAAI,aAAa,eAAe,YAAY,eAAe,YAGzD,QAAO;EAAE,OADP,UAAU,OAAO,EAAE,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC,aAAa;EACtD,MAAM;EAAQ;CAEhC,MAAM,UAAU,IAAI,KAAK,MAAM,MAAM,CAAC,SAAS;CAC/C,MAAM,QAAQ,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS;CAC3C,MAAM,MAAM,KAAK,KAAK;AACtB,KAAI,MAAM,QAAS,QAAO;EAAE,OAAO;EAAY,MAAM;EAAY;AACjE,KAAI,OAAO,MAAO,QAAO;EAAE,OAAO;EAAQ,MAAM;EAAQ;AACxD,QAAO;EAAE,OAAO;EAAQ,MAAM;EAAQ;;AAGxC,SAAS,UAAU,EAAE,OAAO,aAAa,aAA6B;CACpE,MAAM,YAAY,eAAe,YAAY;CAC7C,MAAM,WAAW,MAAM,SAAS;CAChC,MAAM,YAAY,IAAI,KAAK,MAAM,MAAM;CACvC,MAAM,UAAU,aAAa,MAAM,SAAS;CAC5C,MAAM,UAAU,UAAU,mBAAmB,SAAS;EACpD,SAAS;EACT,UAAU;EACX,CAAC;CACF,MAAM,WAAW,UAAU,mBAAmB,SAAS;EACrD,OAAO;EACP,KAAK;EACL,UAAU;EACX,CAAC;CACF,MAAM,SAAS,kBAAkB,MAAM;CACvC,MAAM,cAAc,MAAM,aAAa;CAEvC,MAAM,eAAe,MAAM,WACvB,eAAe,MAAM,OAAO,MAAM,YAAY,KAAK,GACnD,mBAAmB,MAAM,OAAO,MAAM,YAAY,KAAK;CAC3D,MAAM,aAAa,MAAM,WACrB,eAAe,MAAM,KAAK,MAAM,YAAY,KAAK,GACjD,mBAAmB,MAAM,KAAK,MAAM,YAAY,KAAK;CAEzD,MAAM,oBACJ,OAAO,SAAS,SACZ,MAAM,YAAY,WAAW,gBAC7B,OAAO,SAAS,aACd,MAAM,YAAY,WAAW,gBAC7B,MAAM,UAAU,WAAW,UAAU;AAE7C,QACE,iBAAA,GAAA,kBAAA,MAAC,WAAD;EACE,WAAW,qDAAqD,UAAU;YAD5E;GAGE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,eAAY;IACZ,WAAU;IACV,OAAO,EAAE,iBAAiB,UAAU;IACpC,CAAA;GAED,MAAM,YACL,iBAAA,GAAA,kBAAA,KAAC,OAAD;IACE,KAAK,MAAM;IACX,KAAI;IACJ,WAAU;IACV,CAAA;GAGJ,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;MACE,WAAW,iBAAiB,UAAU;gBADxC,CAGE,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAW,8BAA8B,UAAU;iBACrD;OACG,CAAA,EACN,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBACZ;OACG,CAAA,CACF;SAEN,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;OACE,WAAW,4BAA4B,UAAU;iBAEhD,MAAM;OACJ,CAAA,EACJ,eACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;OACE,WAAW,sDAAsD,UAAU;iBAE1E;OACC,CAAA,CAEF;QACF;QAEN,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf;MACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,UAAD,EACE,WAAW,+BAA+B,UAAU,MACpD,CAAA,EACF,iBAAA,GAAA,kBAAA,MAAC,OAAD;QACE,WAAW,6BAA6B,UAAU;kBADpD,CAGE,iBAAA,GAAA,kBAAA,MAAC,OAAD,EAAA,UAAA;SACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;UAAM,WAAU;oBAAgB;UAAY,CAAA;;SAAE;SAC1C,EAAA,CAAA,EACN,iBAAA,GAAA,kBAAA,MAAC,OAAD,EAAA,UAAA;SACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;UAAM,WAAU;oBAAgB;UAAU,CAAA;;SAAE;SACxC,EAAA,CAAA,CACF;UACF;;MAEN,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;OACE,WAAW,6EAA6E;iBAEvF,OAAO;OACH,CAAA,EACH,CAAA;MAEL,MAAM,OAAO,cAAc,MAAM,IAAI,IACpC,iBAAA,GAAA,kBAAA,MAAC,KAAD;OACE,MAAM,MAAM;OACZ,QAAO;OACP,KAAI;OACJ,WAAW,wCAAwC,YAAY;iBAJjE,CAME,iBAAA,GAAA,kBAAA,KAACC,aAAAA,OAAD,EAAO,WAAW,wBAAwB,UAAU,MAAQ,CAAA,EAC5D,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAA,UAAO,MAAM,KAAW,CAAA,CACtB;;MAGL,MAAM,SACL,iBAAA,GAAA,kBAAA,MAAC,KAAD;OACE,MAAM,mDAAmD,mBAAmB,MAAM,MAAM;OACxF,QAAO;OACP,KAAI;OACJ,WAAW,uCAAuC,YAAY;iBAJhE,CAME,iBAAA,GAAA,kBAAA,KAACC,aAAAA,QAAD,EACE,WAAW,+BAA+B,UAAU,MACpD,CAAA,EACF,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAA,UAAO,MAAM,OAAa,CAAA,CACxB;;MAEF;OACF;;GACE;;;AAad,SAAS,UAAU,EACjB,MAAM,MACN,OACA,SACA,aACA,WACA,WACiB;CACjB,MAAM,UACJ,YAAY,WACR,MAAM,YAAY,QAAQ,YAAY,uBAAuB,YAAY,yBAAyB,YAAY,OAC9G,MAAM,UAAU,UAAU,UAAU,YAAY,UAAU,yBAAyB,UAAU;AAEnG,QACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACE,MAAK;EACI;EACT,cAAY;EACZ,WAAW,8HAA8H;YAEzI,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAM,WAAU,UAAW,CAAA;EACpB,CAAA;;AASb,MAAM,+BAA6C;CACjD,MAAM,sBAAM,IAAI,MAAM;AACtB,QAAO;EAAE,OAAO,IAAI,UAAU;EAAE,MAAM,IAAI,aAAa;EAAE;;AAG3D,SAAS,sBACP,iBACA;CACA,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,UAAoB,uBAAuB;CACxD,MAAM,CAAC,mBAAmB,yBAAA,GAAA,MAAA,UAAiC,MAAM;CACjE,MAAM,wBAAA,GAAA,MAAA,QAA6C,KAAK;AAExD,EAAA,GAAA,MAAA,uBACc;AACV,MAAI,qBAAqB,YAAY,KACnC,QAAO,aAAa,qBAAqB,QAAQ;IAGrD,EAAE,CACH;CAED,MAAM,0BAAA,GAAA,MAAA,mBAA2C;AAC/C,MAAI,qBAAqB,YAAY,MAAM;AACzC,UAAO,aAAa,qBAAqB,QAAQ;AACjD,wBAAqB,UAAU;;IAEhC,EAAE,CAAC;AAgCN,QAAO;EAAE;EAAM;EAAmB,WAAA,GAAA,MAAA,cA7B/B,cAAsB;AACrB,2BAAwB;AACxB,wBAAqB,KAAK;AAC1B,wBAAqB,UAAU,OAAO,iBAAiB;AACrD,aAAS,SAAS;KAChB,MAAM,OAAO,KAAK,QAAQ;AAC1B,SAAI,OAAO,EAAG,QAAO;MAAE,OAAO;MAAI,MAAM,KAAK,OAAO;MAAG;AACvD,SAAI,OAAO,GAAI,QAAO;MAAE,OAAO;MAAG,MAAM,KAAK,OAAO;MAAG;AACvD,YAAO;MAAE,OAAO;MAAM,MAAM,KAAK;MAAM;MACvC;AACF,yBAAqB,MAAM;AAC3B,yBAAqB,UAAU;MAC9B,IAAI;KAET,CAAC,uBAAuB,CACzB;EAc2C,YAAA,GAAA,MAAA,mBAZR;AAClC,2BAAwB;GACxB,MAAM,sBAAM,IAAI,MAAM;AACtB,wBAAqB,KAAK;AAC1B,wBAAqB,UAAU,OAAO,iBAAiB;AACrD,YAAQ;KAAE,OAAO,IAAI,UAAU;KAAE,MAAM,IAAI,aAAa;KAAE,CAAC;AAC3D,oBAAgB,IAAI;AACpB,yBAAqB,MAAM;AAC3B,yBAAqB,UAAU;MAC9B,GAAG;KACL,CAAC,wBAAwB,gBAAgB,CAAC;EAEU;;AAGzD,SAAS,sBACP,QACA,cACA;CACA,MAAM,gBAAA,GAAA,MAAA,eAA6B;EACjC,MAAM,sBAAM,IAAI,KAA8B;AAC9C,OAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,QAAQ,WAAW,IAAI,KAAK,MAAM,MAAM,CAAC;GAC/C,MAAM,MAAM,WAAW,IAAI,KAAK,MAAM,IAAI,CAAC;AAC3C,QAAK,IAAI,MAAM,OAAO,OAAO,KAAK,MAAM,QAAQ,KAAK,EAAE,EAAE;IACvD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,IAAI,SAAS;IACnE,MAAM,OAAO,IAAI,IAAI,IAAI;AACzB,QAAI,KACF,MAAK,KAAK,MAAM;QAEhB,KAAI,IAAI,KAAK,CAAC,MAAM,CAAC;;;AAI3B,SAAO;IACN,CAAC,OAAO,CAAC;CAEZ,MAAM,uBAAA,GAAA,MAAA,cACH,SAAgC;EAC/B,MAAM,MAAM,GAAG,KAAK,aAAa,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,KAAK,SAAS;AACtE,SAAO,aAAa,IAAI,IAAI,IAAI,EAAE;IAEpC,CAAC,aAAa,CACf;AAOD,QAAO;EAAE;EAAqB,qBAAA,GAAA,MAAA,eALW;AACvC,OAAI,CAAC,aAAc,QAAO,EAAE;AAC5B,UAAO,oBAAoB,aAAa;KACvC,CAAC,cAAc,oBAAoB,CAAC;EAEW;;AAwBpD,SAAgB,eAAe,EAC7B,eAAe,MACf,YAAY,YACZ,gBAAgB,MAChB,aAAa,cAEb,aAAa;CAAE,MAAM;CAAS,OAAO;CAAc,EACnD,YAAY,cACZ,cAAc,WACd,UAAU,GACV,eAAe,MAEf,mBAAmB,MACnB,kBAAkB,MAClB,aAAa,MACb,kBAAkB,MAElB,WACA,GAAG,SACsC;CACzC,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,CAAC,aAAa,mBAAA,GAAA,MAAA,UAA2B,MAAM;CACrD,MAAM,CAAC,cAAc,oBAAA,GAAA,MAAA,gCACb,IAAI,MAAM,CACjB;CACD,MAAM,EAAE,MAAM,mBAAmB,UAAU,cACzC,sBAAsB,gBAAgB;CACxC,MAAM,eAAe,KAAK;CAC1B,MAAM,cAAc,KAAK;CAEzB,MAAM,EAAE,MAAM,SAAS,EAAE,EAAE,WAAW,YAAY,mBAAmB;CAErE,MAAM,aAAA,GAAA,MAAA,eACE,kBAAkB,aAAa,aAAa,EAClD,CAAC,aAAa,aAAa,CAC5B;CACD,MAAM,WAAW,kBAAkB;CACnC,MAAM,EAAE,qBAAqB,uBAAuB,sBAClD,QACA,aACD;CAED,MAAM,sBAAM,IAAI,MAAM;CACtB,MAAM,sBACJ,iBAAiB,IAAI,UAAU,IAAI,gBAAgB,IAAI,aAAa;CAEtE,MAAM,aAAa,IAAI,KAAK,aAAa,aAAa,CAAC,eACrD,SACA,EAAE,OAAO,QAAQ,CAClB;CACD,MAAM,YAAY,OAAO,YAAY;CAErC,MAAM,iBAAiB,eACnB,qBAAqB,aAAa,GAClC;AAEJ,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,WAAW,sCAAsC,aAAa,MAAM,gBAAgB,QAAQ,UAAU,GAAG,aAAa;EACtH,OAAO,EAAE,iBAAiB;EAC1B,GAAI;YAHN,CAKG,gBAAgB,aACf,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAW,KAAK,QAAQ;aAC3B,iBAAA,GAAA,kBAAA,KAAC,MAAD;IACE,WAAW,QAAQ,cAAc,QAAQ,WAAW;cAEnD;IACE,CAAA;GACD,CAAA,EAGP,YACC,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAW,oDAAoD;aAE/D,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAW,QAAQ;cACtB,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,iFAAkF,CAAA;IAC7F,CAAA;GACF,CAAA,GACJ,UACF,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,YAAD,EAAc,CAAA,GAEd,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAW,KAAK;aACnB,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf;MAEE,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;QAAK,WAAU;kBAAf,CACG,mBACC,iBAAA,GAAA,kBAAA,KAAC,QAAD;SACE,WAAW,0DAA0D,UAAU;mBAE9E;SACI,CAAA,EAET,iBAAA,GAAA,kBAAA,KAAC,QAAD;SACE,WAAW,4DAA4D;mBAEtE;SACI,CAAA,CACH;WAEN,iBAAA,GAAA,kBAAA,MAAC,OAAD;QAAK,WAAU;kBAAf;SACG,mBAAmB,CAAC,uBACnB,iBAAA,GAAA,kBAAA,MAAC,UAAD;UACE,MAAK;UACL,SAAS;UACT,WAAW,2CAA2C,YAAY,iDAAiD,YAAY,8BAA8B,YAAY,iEAAiE,YAAY;oBAHxP,CAKE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,eAAD,EAAe,WAAU,UAAW,CAAA,EAAA,QAE7B;;SAEX,iBAAA,GAAA,kBAAA,KAAC,WAAD;UACE,MAAMC,aAAAA;UACN,OAAM;UACN,SAAQ;UACK;UACF;UACX,eAAe,SAAS,GAAG;UAC3B,CAAA;SACF,iBAAA,GAAA,kBAAA,KAAC,WAAD;UACE,MAAMC,aAAAA;UACN,OAAM;UACN,SAAQ;UACK;UACF;UACX,eAAe,SAAS,EAAE;UAC1B,CAAA;SACE;UACF;;MAGN,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBACZ,UAAU,KAAK,KAAK,QAAQ;AAG3B,eACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;SAEE,WAAW,8DAA8D,UAAU,GAJxE,eADG,QAAQ,KAAK,QAAQ,KAK4D,OAAO;mBAErG;SACG,EAJC,IAID;SAER;OACE,CAAA;MAGN,iBAAA,GAAA,kBAAA,MAAC,OAAD;OACE,WAAU;OACV,OAAO,EAAE,SAAS,oBAAoB,KAAM,GAAG;iBAFjD,CAKG,eACC,iBAAA,GAAA,kBAAA,KAAC,OAAD;QAAK,WAAU;kBACZ,SAAS,KAAK,EAAE,MAAM,cACrB,iBAAA,GAAA,kBAAA,KAAC,eAAD;SAEQ;SACG;SACT,YACE,CAAC,CAAC,gBAAgB,UAAU,cAAc,KAAK;SAEjD,YAAY,oBAAoB,KAAK,CAAC;SACzB;SACF;SACO;SAClB,eAAe,gBAAgB,KAAK;SACpC,EAXK,KAAK,aAAa,CAWvB,CACF;QACE,CAAA,EAIR,iBAAA,GAAA,kBAAA,KAAC,OAAD;QACE,WAAW,0BAA0B,cAAc,oBAAoB;kBAEtE,UAAU,KAAK,MAAM,QAAQ;AAC5B,aAAI,CAAC,KAAK,KACR,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAA0B,WAAU,iBAAkB,EAA5C,SAAS,MAAmC;SAG1D,MAAM,aAAa,oBAAoB,KAAK,KAAK,CAAC;AAClD,gBACE,iBAAA,GAAA,kBAAA,KAAC,eAAD;UAEE,MAAM,KAAK;UACX,SAAS,KAAK;UACd,YACE,CAAC,CAAC,gBAAgB,UAAU,cAAc,KAAK,KAAK;UAE1C;UACC;UACF;UACO;UAClB,eAAe,gBAAgB,KAAK,KAAK;UACzC,EAXK,KAAK,KAAK,aAAa,CAW5B;UAEJ;QACE,CAAA,CACF;;MAGN,iBAAA,GAAA,kBAAA,MAAC,UAAD;OACE,MAAK;OACL,eAAe,eAAe,CAAC,YAAY;OAC3C,WAAW,4EAA4E,UAAU,mCAAmC,UAAU;OAC9I,cACE,cAAc,oBAAoB;iBALtC;QAQE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAW,iBAAiB,UAAU,MAAQ,CAAA;QAClD,cACC,iBAAA,GAAA,kBAAA,KAACC,aAAAA,cAAD,EAAc,WAAU,UAAW,CAAA,GAEnC,iBAAA,GAAA,kBAAA,KAACC,aAAAA,YAAD,EAAY,WAAU,UAAW,CAAA;QAEnC,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAW,iBAAiB,UAAU,MAAQ,CAAA;QAC5C;;MACL;QAGN,iBAAA,GAAA,kBAAA,KAAC,OAAD;KACE,WAAW,uBAAuB,UAAU;eAE5C,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAK,WAAU;gBAAf,CAEG,kBACC,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACG,eAAe,QACd,iBAAA,GAAA,kBAAA,KAAC,OAAD;QACE,WAAW,0DAA0D;kBAEpE,eAAe;QACZ,CAAA,EAER,iBAAA,GAAA,kBAAA,KAAC,OAAD;QACE,WAAW,8BAA8B,UAAU;kBAElD,eAAe;QACZ,CAAA,CACF;UAIR,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAEE,WAAU;iBAET,mBAAmB,SAAS,IAC3B,mBAAmB,KAAK,OAAO,QAC7B,iBAAA,GAAA,kBAAA,KAAC,WAAD;QAES;QACM;QACF;QACX,EAJK,GAAG,MAAM,GAAG,GAAG,MAIpB,CACF,GAEF,iBAAA,GAAA,kBAAA,MAAC,OAAD;QACE,WAAW,0EAA0E,UAAU;kBADjG,CAGE,iBAAA,GAAA,kBAAA,MAAC,OAAD;SAAK,WAAU;mBAAf,CACE,iBAAA,GAAA,kBAAA,KAACJ,aAAAA,eAAD,EACE,WAAW,eAAe,UAAU,MACpC,CAAA,EACF,iBAAA,GAAA,kBAAA,KAAC,QAAD;UACE,WAAW,kCAAkC,UAAU;oBACxD;UAEM,CAAA,CACH;YACN,iBAAA,GAAA,kBAAA,KAAC,QAAD;SAAM,WAAW,oBAAoB,UAAU;mBAAM;SAE9C,CAAA,CACH;;OAEJ,EA/BC,cAAc,aAAa,IAAI,OA+BhC,CACF;;KACF,CAAA,CACF;;GACF,CAAA,CAEJ;;;AAIV,MAAa,+BAAqD;CAChE,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;GACP,qBAAqB;GACtB;EACDK,mBAAAA,iBAAiB;GACf,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EACFC,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACP,qBAAqB;GACtB,CAAC;EAGF;GACE,MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACDA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACDC,mBAAAA,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EAGF;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,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACF;CACF"}
1
+ {"version":3,"file":"CalendarWidget-Aa7H9M7f.cjs","names":["useWidgetsApi","useWidgetPreviewContext","useDataSourceRegistryConfig","Calendar","Link2","MapPin","ErrorState","CalendarCheck","ChevronLeft","ChevronRight","ChevronsDown","ChevronsUp","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"sources":["../../widgets/src/hooks/use-calendar-events.preview.ts","../../widgets/src/hooks/use-calendar-events.ts","../../widgets/src/widgets/CalendarWidget.tsx"],"sourcesContent":["import type { CalendarEvent } from \"@fluid-app/portal-core/widgets-api-types\";\n\nconst today = new Date();\nconst inTwoDays = new Date(today);\ninTwoDays.setDate(inTwoDays.getDate() + 2);\n\nfunction toISO(date: Date, hours: number, minutes = 0): string {\n const d = new Date(date);\n d.setHours(hours, minutes, 0, 0);\n return d.toISOString();\n}\n\nfunction toDateString(date: Date): string {\n return date.toISOString().split(\"T\")[0]!;\n}\n\nexport const PREVIEW_DATA: CalendarEvent[] = [\n {\n id: 1,\n title: \"Team Strategy Call\",\n start: toISO(today, 9, 0),\n end: toISO(today, 10, 0),\n status: \"active\",\n color: \"#4f46e5\",\n },\n {\n id: 2,\n title: \"Product Launch Webinar\",\n start: toISO(today, 14, 0),\n end: toISO(today, 15, 30),\n status: \"active\",\n color: \"#0891b2\",\n venue: \"Zoom\",\n },\n {\n id: 3,\n title: \"Annual Leadership Summit\",\n start: `${toDateString(inTwoDays)}T00:00:00.000Z`,\n end: `${toDateString(inTwoDays)}T23:59:59.000Z`,\n status: \"active\",\n color: \"#059669\",\n isAllDay: true,\n venue: \"Convention Center\",\n },\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-calendar-events.preview\";\nimport type { CalendarEvent } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport type { CalendarEvent } from \"@fluid-app/portal-core/widgets-api-types\";\n\nexport function useCalendarEvents(): UseQueryResult<CalendarEvent[], Error> {\n const widgetsApi = useWidgetsApi();\n const { isPreview } = useWidgetPreviewContext();\n const { baseUrl } = useDataSourceRegistryConfig();\n\n return useQuery({\n queryKey: [\n \"portal-widget-use\",\n \"calendar-events\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: ({ signal }) => widgetsApi.fetchCalendarEvents(signal),\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n","import {\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n type ComponentProps,\n} from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport {\n useCalendarEvents,\n type CalendarEvent,\n} from \"../hooks/use-calendar-events\";\nimport { ErrorState } from \"../components/error-state\";\nimport {\n Calendar,\n CalendarCheck,\n ChevronLeft,\n ChevronRight,\n ChevronsDown,\n ChevronsUp,\n Link2,\n MapPin,\n type LucideIcon,\n} from \"lucide-react\";\n\nconst DAY_NAMES = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"] as const;\n\nconst getDaysInMonth = (year: number, month: number): number =>\n new Date(year, month + 1, 0).getDate();\n\nconst getFirstDayOfMonth = (year: number, month: number): number =>\n new Date(year, month, 1).getDay();\n\nconst isSameDay = (a: Date, b: Date): boolean =>\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nconst startOfDay = (d: Date): Date => {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n};\n\nconst addDays = (d: Date, n: number): Date => {\n const x = new Date(d);\n x.setDate(x.getDate() + n);\n return x;\n};\n\nconst diffDays = (a: Date, b: Date): number => {\n const ms = startOfDay(a).getTime() - startOfDay(b).getTime();\n return Math.round(ms / 86400000);\n};\n\ntype DayCell = {\n date: Date | null;\n isToday: boolean;\n isCurrentMonth: boolean;\n};\n\nconst generateMonthGrid = (year: number, month: number): DayCell[] => {\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const today = new Date();\n const cells: DayCell[] = [];\n\n for (let i = 0; i < firstDay; i++) {\n cells.push({ date: null, isToday: false, isCurrentMonth: false });\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n cells.push({\n date,\n isToday: isSameDay(date, today),\n isCurrentMonth: true,\n });\n }\n\n return cells;\n};\n\nconst generateWeekGrid = (): Array<{ date: Date; isToday: boolean }> => {\n const today = new Date();\n const weekday = today.getDay();\n return Array.from({ length: 7 }, (_, i) => {\n const date = addDays(today, -weekday + i);\n return { date, isToday: isSameDay(date, today) };\n });\n};\n\nconst formatContextualDate = (\n date: Date,\n): { lead: string | null; detail: string } => {\n const today = new Date();\n const d = diffDays(date, today);\n const weekday = date.toLocaleDateString(\"en-US\", { weekday: \"short\" });\n const monthDay = date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n });\n if (d === 0) return { lead: \"Today\", detail: `${weekday}, ${monthDay}` };\n if (d === 1) return { lead: \"Tomorrow\", detail: `${weekday}, ${monthDay}` };\n if (d === -1) return { lead: \"Yesterday\", detail: `${weekday}, ${monthDay}` };\n return { lead: null, detail: `${weekday}, ${monthDay}` };\n};\n\ntype DayCellButtonProps = {\n date: Date;\n isToday: boolean;\n isSelected: boolean;\n eventCount: number;\n accentColor: ColorOptions;\n textColor: ColorOptions;\n showEventDensity: boolean;\n onClick: () => void;\n};\n\nfunction DayCellButton({\n date,\n isToday,\n isSelected,\n eventCount,\n accentColor,\n textColor,\n showEventDensity,\n onClick,\n}: DayCellButtonProps) {\n const dotCount = showEventDensity\n ? Math.min(eventCount, 3)\n : eventCount > 0\n ? 1\n : 0;\n\n const baseClasses =\n \"group relative flex aspect-square w-full flex-col items-center justify-center rounded-lg text-sm tabular-nums transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0\";\n\n const stateClasses = isSelected\n ? `bg-${accentColor} text-${accentColor}-foreground focus-visible:ring-${accentColor}/40`\n : isToday\n ? `bg-${accentColor}/10 text-${accentColor} font-semibold hover:bg-${accentColor}/20 focus-visible:ring-${accentColor}/40`\n : `text-${textColor} hover:bg-${accentColor}/10 focus-visible:ring-${accentColor}/40`;\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={date.toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n })}\n aria-current={isToday ? \"date\" : undefined}\n aria-pressed={isSelected}\n className={`${baseClasses} ${stateClasses}`}\n >\n <span className=\"leading-none\">{date.getDate()}</span>\n {dotCount > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"absolute bottom-0.5 flex items-center gap-[2px]\"\n >\n {Array.from({ length: dotCount }).map((_, i) => (\n <span\n key={i}\n className={`size-1 rounded-full ${\n isSelected\n ? `bg-${accentColor}-foreground/70`\n : `bg-${accentColor}`\n }`}\n />\n ))}\n </span>\n )}\n </button>\n );\n}\n\ntype EventCardProps = {\n event: CalendarEvent;\n accentColor: ColorOptions;\n textColor: ColorOptions;\n};\n\nconst safeTimeZone = (tz: string | null | undefined): string | undefined => {\n if (!tz) return undefined;\n try {\n new Intl.DateTimeFormat(undefined, { timeZone: tz });\n return tz;\n } catch {\n return undefined;\n }\n};\n\nconst formatLongDateTime = (iso: string, timeZone: string | null): string => {\n const d = new Date(iso);\n const tz = safeTimeZone(timeZone);\n const datePart = d.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: tz,\n });\n const timePart = d.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZoneName: \"short\",\n timeZone: tz,\n });\n return `${datePart} at ${timePart}`;\n};\n\nconst formatLongDate = (iso: string, timeZone: string | null): string => {\n return new Date(iso).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: safeTimeZone(timeZone),\n });\n};\n\nconst isSafeHttpUrl = (url: string): boolean => {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\nconst deriveEventStatus = (\n event: CalendarEvent,\n): { label: string; tone: \"upcoming\" | \"live\" | \"past\" } => {\n const rawStatus = event.status?.trim();\n const normalized = rawStatus?.toLowerCase();\n if (rawStatus && normalized !== \"active\" && normalized !== \"confirmed\") {\n const label =\n rawStatus.charAt(0).toUpperCase() + rawStatus.slice(1).toLowerCase();\n return { label, tone: \"past\" };\n }\n const startMs = new Date(event.start).getTime();\n const endMs = new Date(event.end).getTime();\n const now = Date.now();\n if (now < startMs) return { label: \"Upcoming\", tone: \"upcoming\" };\n if (now <= endMs) return { label: \"Live\", tone: \"live\" };\n return { label: \"Past\", tone: \"past\" };\n};\n\nfunction EventCard({ event, accentColor, textColor }: EventCardProps) {\n const accentVar = `var(--color-${accentColor})`;\n const barColor = event.color || accentVar;\n const startDate = new Date(event.start);\n const eventTz = safeTimeZone(event.timeZone);\n const weekday = startDate.toLocaleDateString(\"en-US\", {\n weekday: \"short\",\n timeZone: eventTz,\n });\n const monthDay = startDate.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n timeZone: eventTz,\n });\n const status = deriveEventStatus(event);\n const description = event.description?.body;\n\n const startDisplay = event.isAllDay\n ? formatLongDate(event.start, event.timeZone ?? null)\n : formatLongDateTime(event.start, event.timeZone ?? null);\n const endDisplay = event.isAllDay\n ? formatLongDate(event.end, event.timeZone ?? null)\n : formatLongDateTime(event.end, event.timeZone ?? null);\n\n const statusToneClasses =\n status.tone === \"live\"\n ? `bg-${accentColor}/15 text-${accentColor}`\n : status.tone === \"upcoming\"\n ? `bg-${accentColor}/10 text-${accentColor}`\n : `bg-${textColor}/10 text-${textColor}/60`;\n\n return (\n <article\n className={`relative overflow-hidden rounded-lg border border-${textColor}/10`}\n >\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-[3px]\"\n style={{ backgroundColor: barColor }}\n />\n\n {event.imageUrl && (\n <img\n src={event.imageUrl}\n alt=\"\"\n className=\"aspect-[16/7] w-full object-cover\"\n />\n )}\n\n <div className=\"flex flex-col gap-4 p-4 pl-5\">\n <div className=\"flex items-start gap-4\">\n <div\n className={`shrink-0 text-${textColor} leading-tight tabular-nums`}\n >\n <div className={`text-xs font-semibold text-${textColor}/55`}>\n {weekday}\n </div>\n <div className=\"text-2xl font-bold tracking-[-0.015em]\">\n {monthDay}\n </div>\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <h4\n className={`text-base font-bold text-${textColor} leading-tight tracking-[-0.01em]`}\n >\n {event.title}\n </h4>\n {description && (\n <p\n className={`mt-1 text-sm leading-snug whitespace-pre-wrap text-${textColor}/65`}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2.5\">\n <div className=\"flex items-start gap-2\">\n <Calendar\n className={`mt-0.5 size-4 shrink-0 text-${textColor}/55`}\n />\n <div\n className={`text-sm leading-snug text-${textColor}/80 tabular-nums`}\n >\n <div>\n <span className=\"font-semibold\">Start</span> {startDisplay}\n </div>\n <div>\n <span className=\"font-semibold\">End</span> {endDisplay}\n </div>\n </div>\n </div>\n\n <div>\n <span\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold ${statusToneClasses}`}\n >\n {status.label}\n </span>\n </div>\n\n {event.url && isSafeHttpUrl(event.url) && (\n <a\n href={event.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`flex items-center gap-2 text-sm text-${accentColor} break-all hover:underline`}\n >\n <Link2 className={`size-4 shrink-0 text-${textColor}/55`} />\n <span>{event.url}</span>\n </a>\n )}\n\n {event.venue && (\n <a\n href={`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(event.venue)}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`flex items-start gap-2 text-sm text-${accentColor} hover:underline`}\n >\n <MapPin\n className={`mt-0.5 size-4 shrink-0 text-${textColor}/55`}\n />\n <span>{event.venue}</span>\n </a>\n )}\n </div>\n </div>\n </article>\n );\n}\n\ntype NavButtonProps = {\n icon: LucideIcon;\n label: string;\n variant: \"ghost\" | \"accent\";\n accentColor: ColorOptions;\n textColor: ColorOptions;\n onClick: () => void;\n};\n\nfunction NavButton({\n icon: Icon,\n label,\n variant,\n accentColor,\n textColor,\n onClick,\n}: NavButtonProps) {\n const classes =\n variant === \"accent\"\n ? `bg-${accentColor} text-${accentColor}-foreground hover:bg-${accentColor}/90 focus-visible:ring-${accentColor}/40`\n : `bg-${textColor}/5 text-${textColor} hover:bg-${textColor}/10 focus-visible:ring-${textColor}/20`;\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n className={`flex size-8 items-center justify-center rounded-full text-[12px] transition-colors focus:outline-none focus-visible:ring-2 ${classes}`}\n >\n <Icon className=\"size-4\" />\n </button>\n );\n}\n\ntype CalendarView = {\n month: number;\n year: number;\n};\n\nconst getInitialCalendarView = (): CalendarView => {\n const now = new Date();\n return { month: now.getMonth(), year: now.getFullYear() };\n};\n\nfunction useCalendarNavigation(\n setSelectedDate: React.Dispatch<React.SetStateAction<Date | null>>,\n) {\n const [view, setView] = useState(getInitialCalendarView);\n const [gridTransitioning, setGridTransitioning] = useState(false);\n const transitionTimeoutRef = useRef<number | null>(null);\n\n useEffect(\n () => () => {\n if (transitionTimeoutRef.current !== null) {\n window.clearTimeout(transitionTimeoutRef.current);\n }\n },\n [],\n );\n\n const clearPendingTransition = useCallback(() => {\n if (transitionTimeoutRef.current !== null) {\n window.clearTimeout(transitionTimeoutRef.current);\n transitionTimeoutRef.current = null;\n }\n }, []);\n\n const navigate = useCallback(\n (direction: -1 | 1) => {\n clearPendingTransition();\n setGridTransitioning(true);\n transitionTimeoutRef.current = window.setTimeout(() => {\n setView((prev) => {\n const next = prev.month + direction;\n if (next < 0) return { month: 11, year: prev.year - 1 };\n if (next > 11) return { month: 0, year: prev.year + 1 };\n return { month: next, year: prev.year };\n });\n setGridTransitioning(false);\n transitionTimeoutRef.current = null;\n }, 120);\n },\n [clearPendingTransition],\n );\n\n const goToToday = useCallback(() => {\n clearPendingTransition();\n const now = new Date();\n setGridTransitioning(true);\n transitionTimeoutRef.current = window.setTimeout(() => {\n setView({ month: now.getMonth(), year: now.getFullYear() });\n setSelectedDate(now);\n setGridTransitioning(false);\n transitionTimeoutRef.current = null;\n }, 80);\n }, [clearPendingTransition, setSelectedDate]);\n\n return { view, gridTransitioning, navigate, goToToday };\n}\n\nfunction useCalendarEventIndex(\n events: CalendarEvent[],\n selectedDate: Date | null,\n) {\n const eventsByDate = useMemo(() => {\n const map = new Map<string, CalendarEvent[]>();\n for (const event of events) {\n const start = startOfDay(new Date(event.start));\n const end = startOfDay(new Date(event.end));\n for (let cur = start; cur <= end; cur = addDays(cur, 1)) {\n const key = `${cur.getFullYear()}-${cur.getMonth()}-${cur.getDate()}`;\n const list = map.get(key);\n if (list) {\n list.push(event);\n } else {\n map.set(key, [event]);\n }\n }\n }\n return map;\n }, [events]);\n\n const lookupEventsForDate = useCallback(\n (date: Date): CalendarEvent[] => {\n const key = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\n return eventsByDate.get(key) ?? [];\n },\n [eventsByDate],\n );\n\n const selectedDateEvents = useMemo(() => {\n if (!selectedDate) return [];\n return lookupEventsForDate(selectedDate);\n }, [selectedDate, lookupEventsForDate]);\n\n return { lookupEventsForDate, selectedDateEvents };\n}\n\ntype CalendarWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Premium polish (new, additive)\n showEventDensity?: boolean;\n showTodayButton?: boolean;\n weekendDim?: boolean;\n showYearEyebrow?: boolean;\n};\n\nexport function CalendarWidget({\n titleEnabled = true,\n titleText = \"Calendar\",\n titleFontSize = \"xl\",\n titleColor = \"foreground\",\n\n background = { type: \"solid\", color: \"background\" },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n\n showEventDensity = true,\n showTodayButton = true,\n weekendDim = true,\n showYearEyebrow = true,\n\n className,\n ...props\n}: CalendarWidgetProps): React.JSX.Element {\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 [isCollapsed, setIsCollapsed] = useState(false);\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n () => new Date(),\n );\n const { view, gridTransitioning, navigate, goToToday } =\n useCalendarNavigation(setSelectedDate);\n const currentMonth = view.month;\n const currentYear = view.year;\n\n const { data: events = [], isLoading, isError } = useCalendarEvents();\n\n const monthGrid = useMemo(\n () => generateMonthGrid(currentYear, currentMonth),\n [currentYear, currentMonth],\n );\n const weekGrid = generateWeekGrid();\n const { lookupEventsForDate, selectedDateEvents } = useCalendarEventIndex(\n events,\n selectedDate,\n );\n\n const now = new Date();\n const viewingCurrentMonth =\n currentMonth === now.getMonth() && currentYear === now.getFullYear();\n\n const monthLabel = new Date(currentYear, currentMonth).toLocaleString(\n \"en-US\",\n { month: \"long\" },\n );\n const yearLabel = String(currentYear);\n\n const contextualDate = selectedDate\n ? formatContextualDate(selectedDate)\n : null;\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {titleEnabled && titleText && (\n <div className={`p-${padding} pb-0`}>\n <h2\n className={`text-${titleFontSize} text-${titleColor} font-bold tracking-[-0.012em]`}\n >\n {titleText}\n </h2>\n </div>\n )}\n\n {isLoading ? (\n <div\n className={`flex min-h-[300px] items-center justify-center p-${padding}`}\n >\n <div className={`text-${accentColor}`}>\n <div className=\"size-8 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n </div>\n ) : isError ? (\n <ErrorState />\n ) : (\n <div className={`p-${padding}`}>\n <div className=\"@md:flex @md:gap-6\">\n <div className=\"@md:flex-none\">\n {/* Header row: year eyebrow + month + asymmetric nav + Today pill */}\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"flex min-w-0 flex-col\">\n {showYearEyebrow && (\n <span\n className={`text-[10px] font-bold tracking-[0.16em] uppercase text-${textColor}/55`}\n >\n {yearLabel}\n </span>\n )}\n <span\n className={`text-xl leading-tight font-bold tracking-[-0.015em] text-${textColor}`}\n >\n {monthLabel}\n </span>\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {showTodayButton && !viewingCurrentMonth && (\n <button\n type=\"button\"\n onClick={goToToday}\n className={`flex items-center gap-1 rounded-full bg-${accentColor}/10 px-2.5 py-1 text-[11px] font-semibold text-${accentColor} transition-colors hover:bg-${accentColor}/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-${accentColor}/40`}\n >\n <CalendarCheck className=\"size-3\" />\n Today\n </button>\n )}\n <NavButton\n icon={ChevronLeft}\n label=\"Previous month\"\n variant=\"ghost\"\n accentColor={accentColor}\n textColor={textColor}\n onClick={() => navigate(-1)}\n />\n <NavButton\n icon={ChevronRight}\n label=\"Next month\"\n variant=\"accent\"\n accentColor={accentColor}\n textColor={textColor}\n onClick={() => navigate(1)}\n />\n </div>\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"mb-2 grid grid-cols-7 gap-1 text-center\">\n {DAY_NAMES.map((day, idx) => {\n const isWeekend = idx === 0 || idx === 6;\n const dimmed = weekendDim && isWeekend;\n return (\n <div\n key={day}\n className={`text-[10px] font-semibold tracking-[0.12em] uppercase text-${textColor}/${dimmed ? \"40\" : \"55\"}`}\n >\n {day}\n </div>\n );\n })}\n </div>\n\n {/* Grid wrapper (opacity transitions on month navigate) */}\n <div\n className=\"transition-opacity duration-150 ease-out\"\n style={{ opacity: gridTransitioning ? 0.3 : 1 }}\n >\n {/* Collapsed week view on mobile */}\n {isCollapsed && (\n <div className=\"grid grid-cols-7 gap-1 @md:hidden\">\n {weekGrid.map(({ date, isToday }) => (\n <DayCellButton\n key={date.toISOString()}\n date={date}\n isToday={isToday}\n isSelected={\n !!selectedDate && isSameDay(selectedDate, date)\n }\n eventCount={lookupEventsForDate(date).length}\n accentColor={accentColor}\n textColor={textColor}\n showEventDensity={showEventDensity}\n onClick={() => setSelectedDate(date)}\n />\n ))}\n </div>\n )}\n\n {/* Month grid */}\n <div\n className={`grid grid-cols-7 gap-1 ${isCollapsed ? \"hidden @md:grid\" : \"grid\"}`}\n >\n {monthGrid.map((cell, idx) => {\n if (!cell.date) {\n return (\n <div key={`empty-${idx}`} className=\"aspect-square\" />\n );\n }\n const eventCount = lookupEventsForDate(cell.date).length;\n return (\n <DayCellButton\n key={cell.date.toISOString()}\n date={cell.date}\n isToday={cell.isToday}\n isSelected={\n !!selectedDate && isSameDay(selectedDate, cell.date)\n }\n eventCount={eventCount}\n accentColor={accentColor}\n textColor={textColor}\n showEventDensity={showEventDensity}\n onClick={() => setSelectedDate(cell.date)}\n />\n );\n })}\n </div>\n </div>\n\n {/* Mobile collapse toggle */}\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(!isCollapsed)}\n className={`mt-2 flex w-full items-center justify-center gap-3 rounded-full p-1 text-${textColor}/40 transition-colors hover:text-${textColor}/60 @md:hidden`}\n aria-label={\n isCollapsed ? \"Expand calendar\" : \"Collapse calendar\"\n }\n >\n <div className={`h-px w-1/2 bg-${textColor}/20`} />\n {isCollapsed ? (\n <ChevronsDown className=\"size-3\" />\n ) : (\n <ChevronsUp className=\"size-3\" />\n )}\n <div className={`h-px w-1/2 bg-${textColor}/20`} />\n </button>\n </div>\n\n {/* Events rail */}\n <div\n className={`mt-4 min-w-0 border-${textColor}/10 @md:relative @md:mt-0 @md:flex-1 @md:border-l`}\n >\n <div className=\"@md:absolute @md:inset-0 @md:overflow-y-auto @md:pr-1 @md:pl-6\">\n {/* Context header */}\n {contextualDate && (\n <div className=\"mb-3\">\n {contextualDate.lead && (\n <div\n className={`text-[10px] font-bold tracking-[0.16em] uppercase text-${accentColor}`}\n >\n {contextualDate.lead}\n </div>\n )}\n <div\n className={`text-sm font-semibold text-${textColor} tabular-nums`}\n >\n {contextualDate.detail}\n </div>\n </div>\n )}\n\n {/* Events list with soft fade-in keyed by selected date */}\n <div\n key={selectedDate?.toISOString() ?? \"none\"}\n className=\"animate-in fade-in slide-in-from-bottom-2 flex flex-col gap-3 duration-200 ease-out\"\n >\n {selectedDateEvents.length > 0 ? (\n selectedDateEvents.map((event, idx) => (\n <EventCard\n key={`${event.id}-${idx}`}\n event={event}\n accentColor={accentColor}\n textColor={textColor}\n />\n ))\n ) : (\n <div\n className={`flex flex-col items-start gap-1 rounded-md border border-dashed border-${textColor}/15 px-3 py-3`}\n >\n <div className=\"flex items-center gap-1.5\">\n <CalendarCheck\n className={`size-3 text-${textColor}/40`}\n />\n <span\n className={`text-[11px] font-semibold text-${textColor}/60`}\n >\n Nothing scheduled\n </span>\n </div>\n <span className={`text-[11px] text-${textColor}/45`}>\n Enjoy the breather.\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport const calendarWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CalendarWidget\",\n displayName: \"Calendar Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Title group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the calendar\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Title text displayed above the calendar\",\n defaultValue: \"Calendar\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Design group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the calendar container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for calendar content\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description:\n \"Drives today highlight, event dots, Today pill, and selected day\",\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 getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the calendar container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the calendar container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n\n // Polish group (new)\n {\n key: \"showYearEyebrow\",\n label: \"Year Eyebrow\",\n type: \"boolean\",\n description:\n \"Small uppercase year label above the month (e.g. '2026 / November').\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n {\n key: \"showTodayButton\",\n label: \"Today Button\",\n type: \"boolean\",\n description: \"Show a 'Today' pill when viewing a different month.\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n {\n key: \"showEventDensity\",\n label: \"Event Density Dots\",\n type: \"boolean\",\n description:\n \"Show 1–3 dots per day based on event count (off = single dot).\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n {\n key: \"weekendDim\",\n label: \"Dim Weekends\",\n type: \"boolean\",\n description:\n \"Subtly dim the Sun/Sat day-of-week headers for visual rhythm.\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Polish\",\n },\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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MAAM;GACN,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACDA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFA,mBAAAA,cAAc;GACZ,KAAK;GACL,OAAO;GACP,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACF;GACE,KAAK;GACL,MAAM;GACN,OAAO;GACP,KAAK;GACL,OAAO;GACR;EACDC,mBAAAA,gBAAgB;GACd,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EACFC,mBAAAA,qBAAqB;GACnB,KAAK;GACL,OAAO;GACP,aAAa;GACb,cAAc;GACd,KAAK;GACL,OAAO;GACR,CAAC;EAGF;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,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACD;GACE,KAAK;GACL,OAAO;GACP,MAAM;GACN,aACE;GACF,cAAc;GACd,KAAK;GACL,OAAO;GACR;EACF;CACF"}
@@ -1,8 +1,8 @@
1
- import { vt as __exportAll } from "./PortalTenantClientProvider-BmRtQAbi.mjs";
2
- import { n as useDataSourceRegistryConfig } from "./registry-context-BKvTiuXB.mjs";
3
- import { r as useWidgetsApi, t as ErrorState } from "./error-state-DvzIn9Tz.mjs";
1
+ import { vt as __exportAll } from "./PortalTenantClientProvider-DVClpfbi.mjs";
2
+ import { n as useDataSourceRegistryConfig } from "./registry-context-CcoVxCii.mjs";
3
+ import { r as useWidgetsApi, t as ErrorState } from "./error-state-BUe589mD.mjs";
4
4
  import { l as getColorField, m as getPaddingField, o as getBorderRadiusField, u as getFontSizeField } from "./registries-59Barbhg.mjs";
5
- import { t as useWidgetPreviewContext } from "./preview-context-D9ZzEfWh.mjs";
5
+ import { t as useWidgetPreviewContext } from "./preview-context-BXEGWx9T.mjs";
6
6
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
7
7
  import { useQuery } from "@tanstack/react-query";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -751,4 +751,4 @@ const calendarWidgetPropertySchema = {
751
751
  //#endregion
752
752
  export { CalendarWidget_exports as n, calendarWidgetPropertySchema as r, CalendarWidget as t };
753
753
 
754
- //# sourceMappingURL=CalendarWidget-Dn55musX.mjs.map
754
+ //# sourceMappingURL=CalendarWidget-Cx6KvkaG.mjs.map