fontdue-js 2.22.0 → 2.22.1

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 (370) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/components/ConfigContext.d.ts +3 -0
  3. package/dist/components/ConfigContext.js +2 -1
  4. package/dist/components/FontdueProvider/FontdueProviderClientComponent.js +2 -0
  5. package/dist/corsError.d.ts +1 -0
  6. package/dist/corsError.js +16 -9
  7. package/dist/global-shim.d.ts +1 -0
  8. package/dist/global-shim.js +8 -0
  9. package/dist/relay/environment.js +51 -42
  10. package/dist-cjs/__generated__/AddToCartBannerQuery.graphql.js +194 -0
  11. package/dist-cjs/__generated__/AddToCartBanner_item.graphql.js +107 -0
  12. package/dist-cjs/__generated__/AddToCartBanner_order.graphql.js +131 -0
  13. package/dist-cjs/__generated__/AddressFieldsRefetchQuery.graphql.js +170 -0
  14. package/dist-cjs/__generated__/AddressFields_viewer.graphql.js +125 -0
  15. package/dist-cjs/__generated__/BuyButtonIDQuery.graphql.js +121 -0
  16. package/dist-cjs/__generated__/BuyButtonSlugQuery.graphql.js +146 -0
  17. package/dist-cjs/__generated__/BuyButton_collection.graphql.js +56 -0
  18. package/dist-cjs/__generated__/CartButtonQuery.graphql.js +139 -0
  19. package/dist-cjs/__generated__/CartButton_order.graphql.js +71 -0
  20. package/dist-cjs/__generated__/CartItemAdditionalLicenses_licenses.graphql.js +42 -0
  21. package/dist-cjs/__generated__/CartItemAdditionalLicenses_orderItem.graphql.js +52 -0
  22. package/dist-cjs/__generated__/CartItemLicense_selection.graphql.js +80 -0
  23. package/dist-cjs/__generated__/CartItemProduct_product.graphql.js +113 -0
  24. package/dist-cjs/__generated__/CartItemVariable_selection.graphql.js +107 -0
  25. package/dist-cjs/__generated__/CartItemVariable_variable.graphql.js +58 -0
  26. package/dist-cjs/__generated__/CartItem_node.graphql.js +166 -0
  27. package/dist-cjs/__generated__/CartOrderCompleteOrderMutation.graphql.js +783 -0
  28. package/dist-cjs/__generated__/CartOrderRemoveDiscountMutation.graphql.js +760 -0
  29. package/dist-cjs/__generated__/CartOrderUpdateMutation.graphql.js +795 -0
  30. package/dist-cjs/__generated__/CartOrder_UpdateErrors.graphql.js +43 -0
  31. package/dist-cjs/__generated__/CartOrder_order.graphql.js +264 -0
  32. package/dist-cjs/__generated__/CartOrder_viewer.graphql.js +51 -0
  33. package/dist-cjs/__generated__/CartQuery.graphql.js +887 -0
  34. package/dist-cjs/__generated__/CartStateRemoveDiscountMutation.graphql.js +422 -0
  35. package/dist-cjs/__generated__/CartStateUpdateMutation.graphql.js +790 -0
  36. package/dist-cjs/__generated__/CartState_order.graphql.js +122 -0
  37. package/dist-cjs/__generated__/CartTotals_order.graphql.js +140 -0
  38. package/dist-cjs/__generated__/CharacterViewerIDQuery.graphql.js +332 -0
  39. package/dist-cjs/__generated__/CharacterViewerSlugQuery.graphql.js +362 -0
  40. package/dist-cjs/__generated__/CharacterViewerStyleRefetchQuery.graphql.js +226 -0
  41. package/dist-cjs/__generated__/CharacterViewer_collection.graphql.js +197 -0
  42. package/dist-cjs/__generated__/CharacterViewer_family.graphql.js +101 -0
  43. package/dist-cjs/__generated__/CharacterViewer_style.graphql.js +161 -0
  44. package/dist-cjs/__generated__/CheckoutUpdateCustomerMutation.graphql.js +770 -0
  45. package/dist-cjs/__generated__/CheckoutUpdateOrderMutation.graphql.js +811 -0
  46. package/dist-cjs/__generated__/Checkout_UpdateOrderErrors.graphql.js +97 -0
  47. package/dist-cjs/__generated__/Checkout_identity.graphql.js +94 -0
  48. package/dist-cjs/__generated__/Checkout_order.graphql.js +144 -0
  49. package/dist-cjs/__generated__/Checkout_viewer.graphql.js +74 -0
  50. package/dist-cjs/__generated__/CollectionAa_Query.graphql.js +192 -0
  51. package/dist-cjs/__generated__/CollectionAa_product.graphql.js +69 -0
  52. package/dist-cjs/__generated__/CouponCodeInputApplyCouponMutation.graphql.js +432 -0
  53. package/dist-cjs/__generated__/CouponText_coupon.graphql.js +73 -0
  54. package/dist-cjs/__generated__/CustomerLoginFormLoginMutation.graphql.js +72 -0
  55. package/dist-cjs/__generated__/CustomerLoginFormQuery.graphql.js +91 -0
  56. package/dist-cjs/__generated__/DownloadRefetchQuery.graphql.js +124 -0
  57. package/dist-cjs/__generated__/Download_order.graphql.js +61 -0
  58. package/dist-cjs/__generated__/FamilyList_node.graphql.js +96 -0
  59. package/dist-cjs/__generated__/Family_node.graphql.js +160 -0
  60. package/dist-cjs/__generated__/FontFamiliesQuery.graphql.js +368 -0
  61. package/dist-cjs/__generated__/FontStyle_fontStyle.graphql.js +32 -0
  62. package/dist-cjs/__generated__/IdentityBox_identity.graphql.js +52 -0
  63. package/dist-cjs/__generated__/License_node.graphql.js +97 -0
  64. package/dist-cjs/__generated__/NewsletterSignupQuery.graphql.js +110 -0
  65. package/dist-cjs/__generated__/NewsletterSignupUpdateCustomerMutation.graphql.js +81 -0
  66. package/dist-cjs/__generated__/NodePasswordFormAccessNodeMutation.graphql.js +72 -0
  67. package/dist-cjs/__generated__/NodePasswordFormIDQuery.graphql.js +93 -0
  68. package/dist-cjs/__generated__/NodePasswordFormSlugQuery.graphql.js +115 -0
  69. package/dist-cjs/__generated__/OrderVariableSelectionReduxRefetchQuery.graphql.js +154 -0
  70. package/dist-cjs/__generated__/OrderVariableSelectionRedux_viewer.graphql.js +75 -0
  71. package/dist-cjs/__generated__/OrderVariableSelection_variables.graphql.js +107 -0
  72. package/dist-cjs/__generated__/PrecartAddToCartMutation.graphql.js +793 -0
  73. package/dist-cjs/__generated__/PrecartClearCartMutation.graphql.js +81 -0
  74. package/dist-cjs/__generated__/PrecartQuery.graphql.js +308 -0
  75. package/dist-cjs/__generated__/Precart_collection.graphql.js +81 -0
  76. package/dist-cjs/__generated__/Precart_license.graphql.js +67 -0
  77. package/dist-cjs/__generated__/Precart_viewer.graphql.js +161 -0
  78. package/dist-cjs/__generated__/PriceBarSectionRefetchQuery.graphql.js +184 -0
  79. package/dist-cjs/__generated__/PriceBarSection_node.graphql.js +121 -0
  80. package/dist-cjs/__generated__/PriceBar_node.graphql.js +60 -0
  81. package/dist-cjs/__generated__/Price_price.graphql.js +40 -0
  82. package/dist-cjs/__generated__/SKUPrice_sku.graphql.js +69 -0
  83. package/dist-cjs/__generated__/SelectButton_sku.graphql.js +54 -0
  84. package/{dist-bundle/chunks/index-o29NNufd.js → dist-cjs/__generated__/ServerConfigProviderQuery.graphql.js} +7 -30
  85. package/dist-cjs/__generated__/ShareCartCreateSnapshotMutation.graphql.js +84 -0
  86. package/dist-cjs/__generated__/SpecimenLinkQuery.graphql.js +120 -0
  87. package/dist-cjs/__generated__/StoreModalBundleButton_bundle.graphql.js +85 -0
  88. package/dist-cjs/__generated__/StoreModalCartQuery.graphql.js +1017 -0
  89. package/dist-cjs/__generated__/StoreModalCheckoutQuery.graphql.js +194 -0
  90. package/dist-cjs/__generated__/StoreModalContainerQuery.graphql.js +228 -0
  91. package/dist-cjs/__generated__/StoreModalDownloadRefetchQuery.graphql.js +102 -0
  92. package/dist-cjs/__generated__/StoreModalDownload_order.graphql.js +40 -0
  93. package/dist-cjs/__generated__/StoreModalFamilyButton_collection.graphql.js +135 -0
  94. package/dist-cjs/__generated__/StoreModalFamily_collection.graphql.js +130 -0
  95. package/dist-cjs/__generated__/StoreModalIndexItem_fontCollection.graphql.js +98 -0
  96. package/dist-cjs/__generated__/StoreModalIndexQuery.graphql.js +263 -0
  97. package/dist-cjs/__generated__/StoreModalOrderVariableSelection_order.graphql.js +98 -0
  98. package/dist-cjs/__generated__/StoreModalOrderVariableSelection_viewer.graphql.js +66 -0
  99. package/dist-cjs/__generated__/StoreModalProductContent_collection.graphql.js +92 -0
  100. package/dist-cjs/__generated__/StoreModalProductLicenseSelection_collection.graphql.js +47 -0
  101. package/dist-cjs/__generated__/StoreModalProductLicense_license.graphql.js +104 -0
  102. package/dist-cjs/__generated__/StoreModalProductQuery.graphql.js +702 -0
  103. package/dist-cjs/__generated__/StoreModalProductRefetchQuery.graphql.js +433 -0
  104. package/dist-cjs/__generated__/StoreModalProductSummaryAddToCartMutation.graphql.js +149 -0
  105. package/dist-cjs/__generated__/StoreModalProductSummaryClearCartMutation.graphql.js +81 -0
  106. package/dist-cjs/__generated__/StoreModalProductSummaryRefetchQuery.graphql.js +281 -0
  107. package/dist-cjs/__generated__/StoreModalProductSummary_viewer.graphql.js +243 -0
  108. package/dist-cjs/__generated__/StoreModalReviewIdentity_identity.graphql.js +52 -0
  109. package/dist-cjs/__generated__/StoreModalStyleButton_fontStyle.graphql.js +113 -0
  110. package/dist-cjs/__generated__/StoreModalUnifiedCheckoutCompleteOrderMutation.graphql.js +302 -0
  111. package/dist-cjs/__generated__/StoreModalUnifiedCheckoutUpdateCustomerMutation.graphql.js +323 -0
  112. package/dist-cjs/__generated__/StoreModalUnifiedCheckoutUpdateOrderMutation.graphql.js +473 -0
  113. package/dist-cjs/__generated__/StoreModalUnifiedCheckout_order.graphql.js +237 -0
  114. package/dist-cjs/__generated__/StoreModalUnifiedCheckout_viewer.graphql.js +117 -0
  115. package/dist-cjs/__generated__/StripeProviderCreateCheckoutSessionMutation.graphql.js +105 -0
  116. package/dist-cjs/__generated__/StripeProvider_viewer.graphql.js +139 -0
  117. package/dist-cjs/__generated__/TestFontsFormUpdateCustomerMutation.graphql.js +770 -0
  118. package/dist-cjs/__generated__/TestFontsForm_Query.graphql.js +126 -0
  119. package/dist-cjs/__generated__/TestModeBannerQuery.graphql.js +87 -0
  120. package/dist-cjs/__generated__/ThemeConfigQuery.graphql.js +87 -0
  121. package/dist-cjs/__generated__/TypeTesterFeaturesButton_fontStyle.graphql.js +32 -0
  122. package/dist-cjs/__generated__/TypeTesterFeatures_fontStyle.graphql.js +36 -0
  123. package/dist-cjs/__generated__/TypeTesterFloatingToolbar_testers.graphql.js +53 -0
  124. package/dist-cjs/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.js +347 -0
  125. package/dist-cjs/__generated__/TypeTesterStandaloneQuery.graphql.js +450 -0
  126. package/dist-cjs/__generated__/TypeTesterStyleSelectData_fontStyle.graphql.js +106 -0
  127. package/dist-cjs/__generated__/TypeTesterStyleSelectData_fontStyleData.graphql.js +88 -0
  128. package/dist-cjs/__generated__/TypeTesterStyleSelectData_viewer.graphql.js +166 -0
  129. package/dist-cjs/__generated__/TypeTesterToolbar_fontStyle.graphql.js +36 -0
  130. package/dist-cjs/__generated__/TypeTesterVariableAxes_fontStyle.graphql.js +61 -0
  131. package/dist-cjs/__generated__/TypeTester_fontStyle.graphql.js +106 -0
  132. package/dist-cjs/__generated__/TypeTester_viewer.graphql.js +40 -0
  133. package/dist-cjs/__generated__/TypeTestersChangedStylesQuery.graphql.js +347 -0
  134. package/dist-cjs/__generated__/TypeTestersIDQuery.graphql.js +637 -0
  135. package/dist-cjs/__generated__/TypeTestersRefetchQuery.graphql.js +554 -0
  136. package/dist-cjs/__generated__/TypeTestersSlugQuery.graphql.js +644 -0
  137. package/dist-cjs/__generated__/TypeTesters_collection.graphql.js +258 -0
  138. package/dist-cjs/__generated__/TypeTesters_viewer.graphql.js +40 -0
  139. package/dist-cjs/__generated__/VariableTableAmounts_option.graphql.js +34 -0
  140. package/dist-cjs/__generated__/VariableTableAmounts_variable.graphql.js +34 -0
  141. package/dist-cjs/__generated__/productState_Query.graphql.js +184 -0
  142. package/dist-cjs/__generated__/productState_bundle.graphql.js +79 -0
  143. package/dist-cjs/__generated__/productState_collection.graphql.js +90 -0
  144. package/dist-cjs/__generated__/productState_collectionBundle.graphql.js +88 -0
  145. package/dist-cjs/__generated__/productState_node.graphql.js +122 -0
  146. package/dist-cjs/__generated__/productState_sku.graphql.js +51 -0
  147. package/dist-cjs/__generated__/useFeaturesData_fontStyle.graphql.js +64 -0
  148. package/dist-cjs/__generated__/useFontStyle_fontStyle.graphql.js +94 -0
  149. package/dist-cjs/__generated__/useTotalStyles_fontCollection.graphql.js +57 -0
  150. package/dist-cjs/__tests__/collectionBundleSelection.test.js +1630 -0
  151. package/dist-cjs/components/AddToCartBanner/index.js +75 -0
  152. package/dist-cjs/components/BuyButton/index.js +124 -0
  153. package/dist-cjs/components/BuyButton/index.server.js +36 -0
  154. package/dist-cjs/components/BuyingOptions/index.js +23 -0
  155. package/dist-cjs/components/Cart/AddressFields.js +162 -0
  156. package/dist-cjs/components/Cart/CartItem/CartItemAdditionalLicenses.js +33 -0
  157. package/dist-cjs/components/Cart/CartItem/CartItemLicense.js +66 -0
  158. package/dist-cjs/components/Cart/CartItem/CartItemProduct.js +36 -0
  159. package/dist-cjs/components/Cart/CartItem/CartItemVariable.js +66 -0
  160. package/dist-cjs/components/Cart/CartItem/VariableTextInput.js +79 -0
  161. package/dist-cjs/components/Cart/CartItem/index.js +95 -0
  162. package/dist-cjs/components/Cart/CartOrder.js +314 -0
  163. package/dist-cjs/components/Cart/CartState.js +93 -0
  164. package/dist-cjs/components/Cart/CartTotals.js +97 -0
  165. package/dist-cjs/components/Cart/Checkout.js +473 -0
  166. package/dist-cjs/components/Cart/CheckoutSteps.js +15 -0
  167. package/dist-cjs/components/Cart/CouponCodeInput.js +90 -0
  168. package/dist-cjs/components/Cart/CustomerFields.js +80 -0
  169. package/dist-cjs/components/Cart/Download.js +62 -0
  170. package/dist-cjs/components/Cart/EmptyCart.js +42 -0
  171. package/dist-cjs/components/Cart/IdentityBox.js +37 -0
  172. package/dist-cjs/components/Cart/ShareCart.js +87 -0
  173. package/dist-cjs/components/Cart/index.js +36 -0
  174. package/dist-cjs/components/Cart/injectRelayEnvironment.js +21 -0
  175. package/dist-cjs/components/Cart/types.js +5 -0
  176. package/dist-cjs/components/Cart/utils.js +8 -0
  177. package/dist-cjs/components/CartButton/index.js +127 -0
  178. package/dist-cjs/components/CartButton/index.server.js +18 -0
  179. package/dist-cjs/components/CharacterViewer/StyleSelect.js +60 -0
  180. package/dist-cjs/components/CharacterViewer/index.js +441 -0
  181. package/dist-cjs/components/CharacterViewer/index.server.js +36 -0
  182. package/dist-cjs/components/Checkbox/index.js +27 -0
  183. package/dist-cjs/components/CollectionAa/index.js +38 -0
  184. package/dist-cjs/components/ComponentsContext.js +12 -0
  185. package/dist-cjs/components/ConfigContext.js +86 -0
  186. package/{dist-bundle/chunks/consent-DMvR5rEh.js → dist-cjs/components/ConsentBanner/consent.js} +12 -4
  187. package/dist-cjs/components/ConsentBanner/index.js +84 -0
  188. package/dist-cjs/components/CookieNotification/index.js +83 -0
  189. package/{dist-bundle/chunks/CorsErrorModal-C1g_-3Re.js → dist-cjs/components/CorsErrorModal.js} +19 -16
  190. package/dist-cjs/components/CouponText/index.js +38 -0
  191. package/dist-cjs/components/CustomerLoginForm/index.js +88 -0
  192. package/dist-cjs/components/Family/FamilyList.js +43 -0
  193. package/dist-cjs/components/Family/index.js +77 -0
  194. package/dist-cjs/components/FontFamilies/index.js +53 -0
  195. package/dist-cjs/components/FontStyle/index.js +37 -0
  196. package/dist-cjs/components/FontdueProvider/FontdueProviderClientComponent.js +74 -0
  197. package/dist-cjs/components/FontdueProvider/index.js +43 -0
  198. package/dist-cjs/components/FontdueProvider/index.server.js +35 -0
  199. package/dist-cjs/components/FontdueProvider/useAuxUIOwner.js +32 -0
  200. package/dist-cjs/components/Icons/Align.js +58 -0
  201. package/dist-cjs/components/Icons/ArrowDownRight.js +19 -0
  202. package/dist-cjs/components/Icons/ArrowLeft.js +22 -0
  203. package/dist-cjs/components/Icons/ArrowRight.js +19 -0
  204. package/dist-cjs/components/Icons/CarrotDown.js +19 -0
  205. package/dist-cjs/components/Icons/CarrotUp.js +19 -0
  206. package/dist-cjs/components/Icons/Cart.js +23 -0
  207. package/dist-cjs/components/Icons/CartNew.js +33 -0
  208. package/dist-cjs/components/Icons/Check.js +19 -0
  209. package/dist-cjs/components/Icons/Checkbox.js +24 -0
  210. package/dist-cjs/components/Icons/CheckboxChecked.js +24 -0
  211. package/dist-cjs/components/Icons/CheckboxCrossed.js +26 -0
  212. package/dist-cjs/components/Icons/CircledCheck.js +21 -0
  213. package/dist-cjs/components/Icons/CircledInfo.js +21 -0
  214. package/dist-cjs/components/Icons/CircledMinus.js +21 -0
  215. package/dist-cjs/components/Icons/ColorPicker.js +19 -0
  216. package/dist-cjs/components/Icons/CreditCard.js +21 -0
  217. package/dist-cjs/components/Icons/DownArrow.js +24 -0
  218. package/dist-cjs/components/Icons/DownloadFonts.js +25 -0
  219. package/dist-cjs/components/Icons/FrowningFace.js +25 -0
  220. package/dist-cjs/components/Icons/License.js +19 -0
  221. package/dist-cjs/components/Icons/Receipt.js +34 -0
  222. package/dist-cjs/components/Icons/User.js +19 -0
  223. package/dist-cjs/components/Icons/X.js +19 -0
  224. package/dist-cjs/components/Icons/index.js +167 -0
  225. package/dist-cjs/components/NewsletterSignup/NewsletterSignupElement.js +15 -0
  226. package/dist-cjs/components/NewsletterSignup/index.js +192 -0
  227. package/dist-cjs/components/NewsletterSignup/index.server.js +18 -0
  228. package/dist-cjs/components/NodePasswordForm/index.js +114 -0
  229. package/dist-cjs/components/OrderVariableSelection/OrderVariableSelectionRedux.js +66 -0
  230. package/dist-cjs/components/OrderVariableSelection/index.js +199 -0
  231. package/dist-cjs/components/Precart/License.js +70 -0
  232. package/dist-cjs/components/Precart/index.js +331 -0
  233. package/dist-cjs/components/Price/index.js +111 -0
  234. package/dist-cjs/components/PriceBar/PriceBarSection.js +61 -0
  235. package/dist-cjs/components/PriceBar/index.js +49 -0
  236. package/dist-cjs/components/Root/index.js +208 -0
  237. package/dist-cjs/components/Root/productState.js +143 -0
  238. package/dist-cjs/components/SKUPrice/index.js +46 -0
  239. package/dist-cjs/components/Select/index.js +36 -0
  240. package/dist-cjs/components/SelectButton/index.js +79 -0
  241. package/dist-cjs/components/ServerConfigProvider/index.js +39 -0
  242. package/dist-cjs/components/SpecimenLink/index.js +37 -0
  243. package/dist-cjs/components/StickyNav/index.js +80 -0
  244. package/dist-cjs/components/StoreModal/StoreModalBundleButton.js +47 -0
  245. package/dist-cjs/components/StoreModal/StoreModalCart.js +79 -0
  246. package/dist-cjs/components/StoreModal/StoreModalCheckout.js +24 -0
  247. package/dist-cjs/components/StoreModal/StoreModalCheckoutContext.js +14 -0
  248. package/dist-cjs/components/StoreModal/StoreModalContainer.js +117 -0
  249. package/dist-cjs/components/StoreModal/StoreModalDownload.js +38 -0
  250. package/dist-cjs/components/StoreModal/StoreModalFamily.js +58 -0
  251. package/dist-cjs/components/StoreModal/StoreModalFamilyButton.js +69 -0
  252. package/dist-cjs/components/StoreModal/StoreModalIndex.js +27 -0
  253. package/dist-cjs/components/StoreModal/StoreModalIndexItem.js +63 -0
  254. package/dist-cjs/components/StoreModal/StoreModalLicenseeIsBillingSelection.js +30 -0
  255. package/dist-cjs/components/StoreModal/StoreModalLoader.js +22 -0
  256. package/dist-cjs/components/StoreModal/StoreModalOrderVariableSelection.js +89 -0
  257. package/dist-cjs/components/StoreModal/StoreModalProduct.js +154 -0
  258. package/dist-cjs/components/StoreModal/StoreModalReviewIdentity.js +18 -0
  259. package/dist-cjs/components/StoreModal/StoreModalRouter.js +28 -0
  260. package/dist-cjs/components/StoreModal/StoreModalStyleButton.js +52 -0
  261. package/dist-cjs/components/StoreModal/index.js +39 -0
  262. package/dist-cjs/components/StoreModal/routes.js +51 -0
  263. package/dist-cjs/components/StoreModal/types.js +5 -0
  264. package/dist-cjs/components/StoreModalProductLicenseSelection/LicenseElement.js +46 -0
  265. package/dist-cjs/components/StoreModalProductLicenseSelection/LicenseVariableElement.js +35 -0
  266. package/dist-cjs/components/StoreModalProductLicenseSelection/LicenseVariableRadioElement.js +47 -0
  267. package/dist-cjs/components/StoreModalProductLicenseSelection/StoreModalProductLicense.js +133 -0
  268. package/dist-cjs/components/StoreModalProductLicenseSelection/index.js +31 -0
  269. package/dist-cjs/components/StoreModalProductSummary/index.js +219 -0
  270. package/dist-cjs/components/StripeLogo.js +17 -0
  271. package/dist-cjs/components/StripeProvider/index.js +172 -0
  272. package/dist-cjs/components/Switch/index.js +7 -0
  273. package/dist-cjs/components/TestFontsForm/TestFontsFormElement.js +15 -0
  274. package/dist-cjs/components/TestFontsForm/index.js +208 -0
  275. package/dist-cjs/components/TestFontsForm/index.server.js +18 -0
  276. package/dist-cjs/components/TestModeBanner/index.js +34 -0
  277. package/dist-cjs/components/TextField/index.js +42 -0
  278. package/dist-cjs/components/ThemeConfig/index.js +41 -0
  279. package/dist-cjs/components/ThemeConfig/index.server.js +17 -0
  280. package/{dist-bundle/chunks/index-DsvF5W13.js → dist-cjs/components/Tracking/index.js} +19 -14
  281. package/dist-cjs/components/TypeTester/TypeTesterAlignButtons.js +34 -0
  282. package/dist-cjs/components/TypeTester/TypeTesterBullet.js +23 -0
  283. package/dist-cjs/components/TypeTester/TypeTesterContent.js +58 -0
  284. package/dist-cjs/components/TypeTester/TypeTesterContext.js +166 -0
  285. package/dist-cjs/components/TypeTester/TypeTesterEditAll.js +36 -0
  286. package/dist-cjs/components/TypeTester/TypeTesterFeatures.js +133 -0
  287. package/dist-cjs/components/TypeTester/TypeTesterFeaturesButton.js +82 -0
  288. package/dist-cjs/components/TypeTester/TypeTesterFitter.js +21 -0
  289. package/dist-cjs/components/TypeTester/TypeTesterFloatingToolbar.js +79 -0
  290. package/dist-cjs/components/TypeTester/TypeTesterInput.js +72 -0
  291. package/dist-cjs/components/TypeTester/TypeTesterSlider.js +76 -0
  292. package/dist-cjs/components/TypeTester/TypeTesterStandalone.js +137 -0
  293. package/dist-cjs/components/TypeTester/TypeTesterStandalone.preload.js +27 -0
  294. package/dist-cjs/components/TypeTester/TypeTesterStandalone.server.js +26 -0
  295. package/dist-cjs/components/TypeTester/TypeTesterStandaloneElement.js +65 -0
  296. package/dist-cjs/components/TypeTester/TypeTesterState.js +133 -0
  297. package/dist-cjs/components/TypeTester/TypeTesterStyleSelect.js +101 -0
  298. package/dist-cjs/components/TypeTester/TypeTesterStyleSelectData.js +102 -0
  299. package/dist-cjs/components/TypeTester/TypeTesterToolbar.js +94 -0
  300. package/dist-cjs/components/TypeTester/TypeTesterVariableAxes.js +65 -0
  301. package/dist-cjs/components/TypeTester/features.js +150 -0
  302. package/dist-cjs/components/TypeTester/index.js +169 -0
  303. package/dist-cjs/components/TypeTester/types.js +14 -0
  304. package/dist-cjs/components/TypeTester/useFeaturesData.js +36 -0
  305. package/dist-cjs/components/TypeTester/useTypeTesterStyler.js +83 -0
  306. package/dist-cjs/components/TypeTesters/TypeTestersElement.js +33 -0
  307. package/dist-cjs/components/TypeTesters/index.js +271 -0
  308. package/dist-cjs/components/TypeTesters/index.server.js +44 -0
  309. package/dist-cjs/components/UrlContext.js +16 -0
  310. package/dist-cjs/components/VariableTableAmounts/index.js +28 -0
  311. package/dist-cjs/components/elements/Button/index.js +21 -0
  312. package/dist-cjs/components/elements/EmptyCart/index.js +30 -0
  313. package/dist-cjs/components/elements/StoreModalCartLayout/index.js +38 -0
  314. package/dist-cjs/components/elements/StoreModalContainer/StoreModalContainerContext.js +11 -0
  315. package/dist-cjs/components/elements/StoreModalContainer/index.js +77 -0
  316. package/dist-cjs/components/elements/StoreModalDownloadLayout/index.js +25 -0
  317. package/dist-cjs/components/elements/StoreModalFamily/index.js +31 -0
  318. package/dist-cjs/components/elements/StoreModalFamilyButton/index.js +45 -0
  319. package/dist-cjs/components/elements/StoreModalIndexItem/index.js +35 -0
  320. package/dist-cjs/components/elements/StoreModalLicenseeIsBillingIdentityElement.js +59 -0
  321. package/dist-cjs/components/elements/StoreModalLoadingScreen/index.js +14 -0
  322. package/dist-cjs/components/elements/StoreModalPageContainer/index.js +22 -0
  323. package/dist-cjs/components/elements/StoreModalStyleButton/index.js +37 -0
  324. package/dist-cjs/components/elements/StoreModalUnifiedCheckout.js +753 -0
  325. package/dist-cjs/components/useConsent.js +26 -0
  326. package/dist-cjs/components/useFont.js +76 -0
  327. package/dist-cjs/components/useFontStyle.js +58 -0
  328. package/dist-cjs/components/useInterval.js +28 -0
  329. package/dist-cjs/components/useTotalStyles.js +26 -0
  330. package/{dist-bundle/index.js → dist-cjs/config.js} +8 -4
  331. package/dist-cjs/corsError.js +89 -0
  332. package/dist-cjs/data/unicodeData.js +1 -0
  333. package/dist-cjs/fontLoader.js +55 -0
  334. package/dist-cjs/global-shim.js +12 -0
  335. package/dist-cjs/hooks/useAutofit.js +114 -0
  336. package/dist-cjs/hooks/useLicenseAndOrderVariables.js +25 -0
  337. package/dist-cjs/hooks/useRefetchOnLicenseChanges.js +60 -0
  338. package/dist-cjs/hooks.js +18 -0
  339. package/dist-cjs/index.js +18 -0
  340. package/dist-cjs/package.json +1 -0
  341. package/dist-cjs/react-ranger.d.js +1 -0
  342. package/dist-cjs/react-ranger.js +301 -0
  343. package/dist-cjs/reducer.js +291 -0
  344. package/dist-cjs/relay/environment.js +148 -0
  345. package/{dist-bundle/TypeTester.preload.js → dist-cjs/relay/loadSerializableQuery.js} +8 -26
  346. package/dist-cjs/relay/useSerializablePreloadedQuery.js +52 -0
  347. package/dist-cjs/retryImport.js +24 -0
  348. package/dist-cjs/scripts/updateUnicodeData.js +49 -0
  349. package/dist-cjs/utils.js +107 -0
  350. package/dist-cjs/vanilla/FontStyle.js +58 -0
  351. package/dist-cjs/vanilla/TruncatedMarkdown.js +28 -0
  352. package/package.json +1 -1
  353. package/dist-bundle/FontdueProvider.js +0 -6
  354. package/dist-bundle/FontdueProvider.js.map +0 -1
  355. package/dist-bundle/TypeTester.js +0 -7
  356. package/dist-bundle/TypeTester.js.map +0 -1
  357. package/dist-bundle/TypeTester.preload.js.map +0 -1
  358. package/dist-bundle/chunks/ComponentsContext-CmkN9J4X.js +0 -20843
  359. package/dist-bundle/chunks/ComponentsContext-CmkN9J4X.js.map +0 -1
  360. package/dist-bundle/chunks/CorsErrorModal-C1g_-3Re.js.map +0 -1
  361. package/dist-bundle/chunks/TypeTesterStandalone-BMWuv8Ca.js +0 -27486
  362. package/dist-bundle/chunks/TypeTesterStandalone-BMWuv8Ca.js.map +0 -1
  363. package/dist-bundle/chunks/consent-DMvR5rEh.js.map +0 -1
  364. package/dist-bundle/chunks/index-BNSbxp7B.js +0 -78
  365. package/dist-bundle/chunks/index-BNSbxp7B.js.map +0 -1
  366. package/dist-bundle/chunks/index-C4ak9qTL.js +0 -423
  367. package/dist-bundle/chunks/index-C4ak9qTL.js.map +0 -1
  368. package/dist-bundle/chunks/index-DsvF5W13.js.map +0 -1
  369. package/dist-bundle/chunks/index-o29NNufd.js.map +0 -1
  370. package/dist-bundle/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"consent-DMvR5rEh.js","sources":["../../src/components/ConsentBanner/consent.ts"],"sourcesContent":["const CONSENT_COOKIE = '_fontdue_cc';\nconst CONSENT_EVENT = 'fontdue:consent';\nconst MAX_AGE = 60 * 60 * 24 * 365; // 1 year\n\n/** Store the client-generated anonymous_id so it can be sent with consent events. */\nlet clientAnonymousId: string | undefined;\n\nexport function setClientAnonymousId(id: string): void {\n clientAnonymousId = id;\n}\n\nexport function getClientAnonymousId(): string | undefined {\n return clientAnonymousId;\n}\n\n/** Parse the _fontdue_cc cookie and check if it contains the given category. */\nexport function hasConsent(category: string): boolean {\n const match = document.cookie.match(\n new RegExp('(?:^|;\\\\s*)' + CONSENT_COOKIE + '=([^;]*)'),\n );\n if (!match) return false;\n return match[1].split(',').includes(category);\n}\n\n/** Set the _fontdue_cc cookie with the given categories. */\nexport function setConsent(categories: string[]): void {\n document.cookie =\n CONSENT_COOKIE +\n '=' +\n categories.join(',') +\n ';path=/;max-age=' +\n MAX_AGE +\n ';SameSite=Lax;Secure';\n\n window.dispatchEvent(new CustomEvent(CONSENT_EVENT, { detail: { categories } }));\n}\n\n/**\n * Call callback when the given consent category is granted.\n * If already granted, calls immediately. Otherwise polls (500ms) and\n * listens for the fontdue:consent event. Returns a cleanup function.\n */\nexport function onConsent(\n category: string,\n callback: () => void,\n): () => void {\n if (hasConsent(category)) {\n callback();\n return () => {};\n }\n\n let called = false;\n const check = () => {\n if (!called && hasConsent(category)) {\n called = true;\n callback();\n cleanup();\n }\n };\n\n const interval = setInterval(check, 500);\n window.addEventListener(CONSENT_EVENT, check);\n\n const cleanup = () => {\n clearInterval(interval);\n window.removeEventListener(CONSENT_EVENT, check);\n };\n\n return cleanup;\n}\n\n/**\n * Activate blocked scripts for the given consent category.\n * Finds all <script type=\"text/plain\" data-consent-category=\"<category>\">\n * elements and replaces them with executable copies.\n */\nexport function activateScripts(category: string): void {\n const scripts = document.querySelectorAll<HTMLScriptElement>(\n `script[type=\"text/plain\"][data-consent-category=\"${category}\"]`,\n );\n\n scripts.forEach((blocked) => {\n const script = document.createElement('script');\n\n // Copy all attributes except type and data-consent-category\n for (const attr of Array.from(blocked.attributes)) {\n if (attr.name !== 'type' && attr.name !== 'data-consent-category') {\n script.setAttribute(attr.name, attr.value);\n }\n }\n\n // Copy inline content\n if (blocked.textContent) {\n script.textContent = blocked.textContent;\n }\n\n blocked.parentNode?.replaceChild(script, blocked);\n });\n}\n"],"names":["CONSENT_COOKIE","CONSENT_EVENT","MAX_AGE","clientAnonymousId","setClientAnonymousId","id","getClientAnonymousId","hasConsent","category","match","document","cookie","RegExp","split","includes","setConsent","categories","join","window","dispatchEvent","CustomEvent","detail","onConsent","callback","called","check","cleanup","interval","setInterval","addEventListener","clearInterval","removeEventListener","activateScripts","scripts","querySelectorAll","forEach","blocked","script","createElement","attr","Array","from","attributes","name","setAttribute","value","textContent","parentNode","replaceChild"],"mappings":"AAAA,MAAMA,cAAc,GAAG,aAAa;AACpC,MAAMC,aAAa,GAAG,iBAAiB;AACvC,MAAMC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;;AAEnC;AACA,IAAIC,iBAAqC;AAElC,SAASC,oBAAoBA,CAACC,EAAU,EAAQ;AACrDF,EAAAA,iBAAiB,GAAGE,EAAE;AACxB;AAEO,SAASC,oBAAoBA,GAAuB;AACzD,EAAA,OAAOH,iBAAiB;AAC1B;;AAEA;AACO,SAASI,UAAUA,CAACC,QAAgB,EAAW;AACpD,EAAA,MAAMC,KAAK,GAAGC,QAAQ,CAACC,MAAM,CAACF,KAAK,CACjC,IAAIG,MAAM,CAAC,aAAa,GAAGZ,cAAc,GAAG,UAAU,CACxD,CAAC;AACD,EAAA,IAAI,CAACS,KAAK,EAAE,OAAO,KAAK;AACxB,EAAA,OAAOA,KAAK,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC,GAAG,CAAC,CAACC,QAAQ,CAACN,QAAQ,CAAC;AAC/C;;AAEA;AACO,SAASO,UAAUA,CAACC,UAAoB,EAAQ;AACrDN,EAAAA,QAAQ,CAACC,MAAM,GACbX,cAAc,GACd,GAAG,GACHgB,UAAU,CAACC,IAAI,CAAC,GAAG,CAAC,GACpB,kBAAkB,GAClBf,OAAO,GACP,sBAAsB;AAExBgB,EAAAA,MAAM,CAACC,aAAa,CAAC,IAAIC,WAAW,CAACnB,aAAa,EAAE;AAAEoB,IAAAA,MAAM,EAAE;AAAEL,MAAAA;AAAW;AAAE,GAAC,CAAC,CAAC;AAClF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASM,SAASA,CACvBd,QAAgB,EAChBe,QAAoB,EACR;AACZ,EAAA,IAAIhB,UAAU,CAACC,QAAQ,CAAC,EAAE;AACxBe,IAAAA,QAAQ,EAAE;IACV,OAAO,MAAM,CAAC,CAAC;AACjB,EAAA;EAEA,IAAIC,MAAM,GAAG,KAAK;EAClB,MAAMC,KAAK,GAAGA,MAAM;AAClB,IAAA,IAAI,CAACD,MAAM,IAAIjB,UAAU,CAACC,QAAQ,CAAC,EAAE;AACnCgB,MAAAA,MAAM,GAAG,IAAI;AACbD,MAAAA,QAAQ,EAAE;AACVG,MAAAA,OAAO,EAAE;AACX,IAAA;EACF,CAAC;AAED,EAAA,MAAMC,QAAQ,GAAGC,WAAW,CAACH,KAAK,EAAE,GAAG,CAAC;AACxCP,EAAAA,MAAM,CAACW,gBAAgB,CAAC5B,aAAa,EAAEwB,KAAK,CAAC;EAE7C,MAAMC,OAAO,GAAGA,MAAM;IACpBI,aAAa,CAACH,QAAQ,CAAC;AACvBT,IAAAA,MAAM,CAACa,mBAAmB,CAAC9B,aAAa,EAAEwB,KAAK,CAAC;EAClD,CAAC;AAED,EAAA,OAAOC,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASM,eAAeA,CAACxB,QAAgB,EAAQ;EACtD,MAAMyB,OAAO,GAAGvB,QAAQ,CAACwB,gBAAgB,CACvC,CAAA,iDAAA,EAAoD1B,QAAQ,CAAA,EAAA,CAC9D,CAAC;AAEDyB,EAAAA,OAAO,CAACE,OAAO,CAAEC,OAAO,IAAK;AAC3B,IAAA,MAAMC,MAAM,GAAG3B,QAAQ,CAAC4B,aAAa,CAAC,QAAQ,CAAC;;AAE/C;IACA,KAAK,MAAMC,IAAI,IAAIC,KAAK,CAACC,IAAI,CAACL,OAAO,CAACM,UAAU,CAAC,EAAE;MACjD,IAAIH,IAAI,CAACI,IAAI,KAAK,MAAM,IAAIJ,IAAI,CAACI,IAAI,KAAK,uBAAuB,EAAE;QACjEN,MAAM,CAACO,YAAY,CAACL,IAAI,CAACI,IAAI,EAAEJ,IAAI,CAACM,KAAK,CAAC;AAC5C,MAAA;AACF,IAAA;;AAEA;IACA,IAAIT,OAAO,CAACU,WAAW,EAAE;AACvBT,MAAAA,MAAM,CAACS,WAAW,GAAGV,OAAO,CAACU,WAAW;AAC1C,IAAA;IAEAV,OAAO,CAACW,UAAU,EAAEC,YAAY,CAACX,MAAM,EAAED,OAAO,CAAC;AACnD,EAAA,CAAC,CAAC;AACJ;;;;"}
@@ -1,78 +0,0 @@
1
- import React__default, { useContext, useState, useEffect } from 'react';
2
- import { C as ConfigContext } from './ComponentsContext-CmkN9J4X.js';
3
- import { u as useFontdueUrl } from './index-C4ak9qTL.js';
4
- import { s as setConsent, a as activateScripts, g as getClientAnonymousId } from './consent-DMvR5rEh.js';
5
- import '../index.js';
6
-
7
- const DEFAULT_MESSAGE = 'We use cookies to analyze site usage and improve your\u00A0experience.';
8
- const ConsentBanner = () => {
9
- const config = useContext(ConfigContext);
10
- const url = useFontdueUrl();
11
-
12
- // Start dismissed to avoid hydration mismatch (server has no document.cookie).
13
- // Check on the client in useEffect.
14
- const [dismissed, setDismissed] = useState(true);
15
- useEffect(() => {
16
- if (!config.tracking.consentRequired) return;
17
- if (!document.cookie.includes('_fontdue_cc=')) {
18
- setDismissed(false);
19
- }
20
- }, [config.tracking.consentRequired]);
21
- if (dismissed) return null;
22
- const message = config.tracking.consentMessage || DEFAULT_MESSAGE;
23
- const sendConsentEvent = categories => {
24
- // Fire a tracking event so the server sets the _fontdue_state cookie
25
- // on this response (rather than waiting for the next page load).
26
- // Include the client anonymous_id so it gets synced to the cookie.
27
- const body = {
28
- event: 'Consent Granted',
29
- properties: {
30
- categories: categories.join(',')
31
- }
32
- };
33
- const anonId = getClientAnonymousId();
34
- if (anonId) body.anonymous_id = anonId;
35
- fetch(`${url}/api/track`, {
36
- method: 'POST',
37
- headers: {
38
- 'Content-Type': 'application/json'
39
- },
40
- credentials: 'include',
41
- body: JSON.stringify(body)
42
- }).catch(() => {});
43
- };
44
- const handleAcceptAll = () => {
45
- setConsent(['necessary', 'analytics']);
46
- activateScripts('analytics');
47
- if (config.tracking.enabled) {
48
- sendConsentEvent(['necessary', 'analytics']);
49
- }
50
- setDismissed(true);
51
- };
52
- const handleReject = () => {
53
- setConsent(['necessary']);
54
- setDismissed(true);
55
- };
56
- return /*#__PURE__*/React__default.createElement("div", {
57
- className: "fontdue-consent-banner",
58
- role: "region",
59
- "aria-label": "Cookie consent"
60
- }, /*#__PURE__*/React__default.createElement("div", {
61
- className: "fontdue-consent-banner__container"
62
- }, /*#__PURE__*/React__default.createElement("p", {
63
- className: "fontdue-consent-banner__message"
64
- }, message), /*#__PURE__*/React__default.createElement("div", {
65
- className: "fontdue-consent-banner__actions"
66
- }, /*#__PURE__*/React__default.createElement("button", {
67
- type: "button",
68
- className: "fontdue-consent-banner__button fontdue-consent-banner__button--secondary",
69
- onClick: handleReject
70
- }, "Necessary only"), /*#__PURE__*/React__default.createElement("button", {
71
- type: "button",
72
- className: "fontdue-consent-banner__button fontdue-consent-banner__button--primary",
73
- onClick: handleAcceptAll
74
- }, "Accept all"))));
75
- };
76
-
77
- export { ConsentBanner as default };
78
- //# sourceMappingURL=index-BNSbxp7B.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BNSbxp7B.js","sources":["../../src/components/ConsentBanner/index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useState } from 'react';\nimport ConfigContext from '../ConfigContext';\nimport { useFontdueUrl } from '../UrlContext';\nimport { setConsent, activateScripts, getClientAnonymousId } from './consent';\n\nconst DEFAULT_MESSAGE =\n 'We use cookies to analyze site usage and improve your\\u00A0experience.';\n\nconst ConsentBanner = () => {\n const config = useContext(ConfigContext);\n const url = useFontdueUrl();\n\n // Start dismissed to avoid hydration mismatch (server has no document.cookie).\n // Check on the client in useEffect.\n const [dismissed, setDismissed] = useState(true);\n\n useEffect(() => {\n if (!config.tracking.consentRequired) return;\n if (!document.cookie.includes('_fontdue_cc=')) {\n setDismissed(false);\n }\n }, [config.tracking.consentRequired]);\n\n if (dismissed) return null;\n\n const message = config.tracking.consentMessage || DEFAULT_MESSAGE;\n\n const sendConsentEvent = (categories: string[]) => {\n // Fire a tracking event so the server sets the _fontdue_state cookie\n // on this response (rather than waiting for the next page load).\n // Include the client anonymous_id so it gets synced to the cookie.\n const body: Record<string, unknown> = {\n event: 'Consent Granted',\n properties: { categories: categories.join(',') },\n };\n const anonId = getClientAnonymousId();\n if (anonId) body.anonymous_id = anonId;\n\n fetch(`${url}/api/track`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(body),\n }).catch(() => {});\n };\n\n const handleAcceptAll = () => {\n setConsent(['necessary', 'analytics']);\n activateScripts('analytics');\n if (config.tracking.enabled) {\n sendConsentEvent(['necessary', 'analytics']);\n }\n setDismissed(true);\n };\n\n const handleReject = () => {\n setConsent(['necessary']);\n setDismissed(true);\n };\n\n return (\n <div className=\"fontdue-consent-banner\" role=\"region\" aria-label=\"Cookie consent\">\n <div className=\"fontdue-consent-banner__container\">\n <p className=\"fontdue-consent-banner__message\">{message}</p>\n <div className=\"fontdue-consent-banner__actions\">\n <button\n type=\"button\"\n className=\"fontdue-consent-banner__button fontdue-consent-banner__button--secondary\"\n onClick={handleReject}\n >\n Necessary only\n </button>\n <button\n type=\"button\"\n className=\"fontdue-consent-banner__button fontdue-consent-banner__button--primary\"\n onClick={handleAcceptAll}\n >\n Accept all\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ConsentBanner;\n"],"names":["DEFAULT_MESSAGE","ConsentBanner","config","useContext","ConfigContext","url","useFontdueUrl","dismissed","setDismissed","useState","useEffect","tracking","consentRequired","document","cookie","includes","message","consentMessage","sendConsentEvent","categories","body","event","properties","join","anonId","getClientAnonymousId","anonymous_id","fetch","method","headers","credentials","JSON","stringify","catch","handleAcceptAll","setConsent","activateScripts","enabled","handleReject","React","createElement","className","role","type","onClick"],"mappings":"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"}
@@ -1,423 +0,0 @@
1
- import { r as reactRelayExports, u as useCurrentEnvironment, m as makeConfig, P as Provider_default, C as ConfigContext, a as ComponentsContext, b as createDefaultStore, d as retryImport, _ as _extends } from './ComponentsContext-CmkN9J4X.js';
2
- import React__default, { Component, createElement, createContext, useContext, Suspense, useRef, lazy, useState, useEffect } from 'react';
3
-
4
- const ErrorBoundaryContext = createContext(null);
5
-
6
- const initialState = {
7
- didCatch: false,
8
- error: null
9
- };
10
- class ErrorBoundary extends Component {
11
- constructor(props) {
12
- super(props);
13
- this.resetErrorBoundary = this.resetErrorBoundary.bind(this);
14
- this.state = initialState;
15
- }
16
- static getDerivedStateFromError(error) {
17
- return {
18
- didCatch: true,
19
- error
20
- };
21
- }
22
- resetErrorBoundary() {
23
- const {
24
- error
25
- } = this.state;
26
- if (error !== null) {
27
- var _this$props$onReset, _this$props;
28
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
29
- args[_key] = arguments[_key];
30
- }
31
- (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {
32
- args,
33
- reason: "imperative-api"
34
- });
35
- this.setState(initialState);
36
- }
37
- }
38
- componentDidCatch(error, info) {
39
- var _this$props$onError, _this$props2;
40
- (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);
41
- }
42
- componentDidUpdate(prevProps, prevState) {
43
- const {
44
- didCatch
45
- } = this.state;
46
- const {
47
- resetKeys
48
- } = this.props;
49
-
50
- // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,
51
- // we'd end up resetting the error boundary immediately.
52
- // This would likely trigger a second error to be thrown.
53
- // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.
54
-
55
- if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {
56
- var _this$props$onReset2, _this$props3;
57
- (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {
58
- next: resetKeys,
59
- prev: prevProps.resetKeys,
60
- reason: "keys"
61
- });
62
- this.setState(initialState);
63
- }
64
- }
65
- render() {
66
- const {
67
- children,
68
- fallbackRender,
69
- FallbackComponent,
70
- fallback
71
- } = this.props;
72
- const {
73
- didCatch,
74
- error
75
- } = this.state;
76
- let childToRender = children;
77
- if (didCatch) {
78
- const props = {
79
- error,
80
- resetErrorBoundary: this.resetErrorBoundary
81
- };
82
- if (typeof fallbackRender === "function") {
83
- childToRender = fallbackRender(props);
84
- } else if (FallbackComponent) {
85
- childToRender = createElement(FallbackComponent, props);
86
- } else if (fallback !== undefined) {
87
- childToRender = fallback;
88
- } else {
89
- throw error;
90
- }
91
- }
92
- return createElement(ErrorBoundaryContext.Provider, {
93
- value: {
94
- didCatch,
95
- error,
96
- resetErrorBoundary: this.resetErrorBoundary
97
- }
98
- }, childToRender);
99
- }
100
- }
101
- function hasArrayChanged() {
102
- let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
103
- let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
104
- return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));
105
- }
106
-
107
- /**
108
- * @generated SignedSource<<e395904ea5bda751df1ca67f9c74ac55>>
109
- * @lightSyntaxTransform
110
- * @nogrep
111
- */
112
-
113
- /* tslint:disable */
114
- /* eslint-disable */
115
- // @ts-nocheck
116
-
117
- const node$1 = function () {
118
- var v0 = {
119
- "alias": null,
120
- "args": null,
121
- "concreteType": "TestMode",
122
- "kind": "LinkedField",
123
- "name": "testMode",
124
- "plural": false,
125
- "selections": [{
126
- "alias": null,
127
- "args": null,
128
- "kind": "ScalarField",
129
- "name": "isActive",
130
- "storageKey": null
131
- }],
132
- "storageKey": null
133
- };
134
- return {
135
- "fragment": {
136
- "argumentDefinitions": [],
137
- "kind": "Fragment",
138
- "metadata": null,
139
- "name": "TestModeBannerQuery",
140
- "selections": [{
141
- "alias": null,
142
- "args": null,
143
- "concreteType": "Viewer",
144
- "kind": "LinkedField",
145
- "name": "viewer",
146
- "plural": false,
147
- "selections": [v0 /*: any*/],
148
- "storageKey": null
149
- }],
150
- "type": "RootQueryType",
151
- "abstractKey": null
152
- },
153
- "kind": "Request",
154
- "operation": {
155
- "argumentDefinitions": [],
156
- "kind": "Operation",
157
- "name": "TestModeBannerQuery",
158
- "selections": [{
159
- "alias": null,
160
- "args": null,
161
- "concreteType": "Viewer",
162
- "kind": "LinkedField",
163
- "name": "viewer",
164
- "plural": false,
165
- "selections": [v0 /*: any*/, {
166
- "alias": null,
167
- "args": null,
168
- "kind": "ScalarField",
169
- "name": "id",
170
- "storageKey": null
171
- }],
172
- "storageKey": null
173
- }]
174
- },
175
- "params": {
176
- "cacheID": "2cb9255aeee9b1b3edd823ee2f62d8cc",
177
- "id": null,
178
- "metadata": {},
179
- "name": "TestModeBannerQuery",
180
- "operationKind": "query",
181
- "text": "query TestModeBannerQuery {\n viewer {\n testMode {\n isActive\n }\n id\n }\n}\n"
182
- }
183
- };
184
- }();
185
- node$1.hash = "60ad67ee88ec6b74dd04bdf5572e7faf";
186
-
187
- function TestModeBannerComponent({
188
- data
189
- }) {
190
- const isActive = data?.viewer?.testMode?.isActive;
191
-
192
- // hide the banner completely if we're in live mode
193
- if (!isActive) return null;
194
- return /*#__PURE__*/React__default.createElement("div", {
195
- className: "test-mode-banner__banner",
196
- "data-test-mode": isActive
197
- }, /*#__PURE__*/React__default.createElement("div", {
198
- className: "test-mode-banner__content"
199
- }, /*#__PURE__*/React__default.createElement("div", {
200
- className: "test-mode-banner__title"
201
- }, "Viewing test data")));
202
- }
203
- const query$1 = (node$1.hash && node$1.hash !== "60ad67ee88ec6b74dd04bdf5572e7faf" && console.error("The definition of 'TestModeBannerQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), node$1);
204
- function TestModeBanner() {
205
- const data = reactRelayExports.useLazyLoadQuery(query$1, {});
206
- return /*#__PURE__*/React__default.createElement(TestModeBannerComponent, {
207
- data: data
208
- });
209
- }
210
-
211
- /**
212
- * @generated SignedSource<<b292c0ac6583f7d2d7cd8979e5696b21>>
213
- * @lightSyntaxTransform
214
- * @nogrep
215
- */
216
-
217
- /* tslint:disable */
218
- /* eslint-disable */
219
- // @ts-nocheck
220
-
221
- const node = function () {
222
- var v0 = {
223
- "alias": null,
224
- "args": null,
225
- "concreteType": "ThemeConfig",
226
- "kind": "LinkedField",
227
- "name": "themeConfig",
228
- "plural": false,
229
- "selections": [{
230
- "alias": null,
231
- "args": null,
232
- "kind": "ScalarField",
233
- "name": "customProperties",
234
- "storageKey": null
235
- }],
236
- "storageKey": null
237
- };
238
- return {
239
- "fragment": {
240
- "argumentDefinitions": [],
241
- "kind": "Fragment",
242
- "metadata": null,
243
- "name": "ThemeConfigQuery",
244
- "selections": [{
245
- "alias": null,
246
- "args": null,
247
- "concreteType": "Viewer",
248
- "kind": "LinkedField",
249
- "name": "viewer",
250
- "plural": false,
251
- "selections": [v0 /*: any*/],
252
- "storageKey": null
253
- }],
254
- "type": "RootQueryType",
255
- "abstractKey": null
256
- },
257
- "kind": "Request",
258
- "operation": {
259
- "argumentDefinitions": [],
260
- "kind": "Operation",
261
- "name": "ThemeConfigQuery",
262
- "selections": [{
263
- "alias": null,
264
- "args": null,
265
- "concreteType": "Viewer",
266
- "kind": "LinkedField",
267
- "name": "viewer",
268
- "plural": false,
269
- "selections": [v0 /*: any*/, {
270
- "alias": null,
271
- "args": null,
272
- "kind": "ScalarField",
273
- "name": "id",
274
- "storageKey": null
275
- }],
276
- "storageKey": null
277
- }]
278
- },
279
- "params": {
280
- "cacheID": "d1f54ccc72720516df3faf57461c20e1",
281
- "id": null,
282
- "metadata": {},
283
- "name": "ThemeConfigQuery",
284
- "operationKind": "query",
285
- "text": "query ThemeConfigQuery {\n viewer {\n themeConfig {\n customProperties\n }\n id\n }\n}\n"
286
- }
287
- };
288
- }();
289
- node.hash = "c259bee038c4d2ea14c758fba3381f57";
290
-
291
- // gets the custom properties entered by users in the admin panel,
292
- // which also includes default values. we put the defaults there instead of
293
- // every call to var() so that we have defaults all in one place
294
-
295
- function ThemeConfigComponent({
296
- data
297
- }) {
298
- const props = data.viewer.themeConfig?.customProperties ?? [];
299
- return /*#__PURE__*/React__default.createElement("style", {
300
- type: "text/css"
301
- }, `:root { ${props.join(';')} }`);
302
- }
303
- const query = (node.hash && node.hash !== "c259bee038c4d2ea14c758fba3381f57" && console.error("The definition of 'ThemeConfigQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), node);
304
- function ThemeConfig() {
305
- const data = reactRelayExports.useLazyLoadQuery(query, {});
306
- return /*#__PURE__*/React__default.createElement(ThemeConfigComponent, {
307
- data: data
308
- });
309
- }
310
-
311
- const FONTDUE_URL = typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_FONTDUE_URL : undefined;
312
- const UrlContext = /*#__PURE__*/createContext(FONTDUE_URL ?? '');
313
- function useFontdueUrl() {
314
- return useContext(UrlContext);
315
- }
316
-
317
- const IS_SERVER = typeof window === typeof undefined;
318
-
319
- // Client-side Redux store is a module-level singleton so multiple
320
- // FontdueProviders on a page (e.g. one per Astro island) share cart state,
321
- // user state, etc. Server-side stays per-render.
322
- let clientStore = null;
323
- function useSharedStore(providedStore, config) {
324
- const ref = useRef(null);
325
- if (providedStore) return providedStore;
326
- if (IS_SERVER) {
327
- if (ref.current == null) ref.current = createDefaultStore(config);
328
- return ref.current;
329
- }
330
- if (clientStore == null) clientStore = createDefaultStore(config);
331
- return clientStore;
332
- }
333
- const ConsentBanner = /*#__PURE__*/lazy(() => retryImport(() => import('./index-BNSbxp7B.js')));
334
- const Tracking = /*#__PURE__*/lazy(() => retryImport(() => import('./index-DsvF5W13.js')));
335
- const ServerConfigProvider = /*#__PURE__*/lazy(() => retryImport(() => import('./index-o29NNufd.js')));
336
- function FontdueProviderClientComponent({
337
- children,
338
- url,
339
- stripeIntegration,
340
- config,
341
- components,
342
- store,
343
- renderAuxUI
344
- }) {
345
- const environment = useCurrentEnvironment({
346
- url,
347
- stripeIntegration
348
- });
349
- const configValue = makeConfig(config);
350
- const sharedStore = useSharedStore(store, config);
351
- return /*#__PURE__*/React__default.createElement(reactRelayExports.RelayEnvironmentProvider, {
352
- environment: environment
353
- }, /*#__PURE__*/React__default.createElement(Provider_default, {
354
- store: sharedStore
355
- }, /*#__PURE__*/React__default.createElement(Suspense, {
356
- fallback: null
357
- }, /*#__PURE__*/React__default.createElement(ConfigContext.Provider, {
358
- value: configValue
359
- }, /*#__PURE__*/React__default.createElement(UrlContext.Provider, {
360
- value: url ?? (typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_FONTDUE_URL : undefined) ?? ''
361
- }, /*#__PURE__*/React__default.createElement(ComponentsContext.Provider, {
362
- value: components ?? {}
363
- }, children, renderAuxUI && /*#__PURE__*/React__default.createElement(ErrorBoundary, {
364
- fallback: null
365
- }, /*#__PURE__*/React__default.createElement(Suspense, {
366
- fallback: null
367
- }, /*#__PURE__*/React__default.createElement(ServerConfigProvider, {
368
- codeConfig: config
369
- }, /*#__PURE__*/React__default.createElement(ConsentBanner, null), /*#__PURE__*/React__default.createElement(Tracking, null))))))))));
370
- }
371
-
372
- // Module-level claim: only one FontdueProvider on a page renders
373
- // auxiliary UI (TestModeBanner, ThemeConfig, Tracking, ConsentBanner,
374
- // ServerConfigProvider). Starts false on both server and client to avoid
375
- // hydration mismatch; the first provider to run `useEffect` wins and flips
376
- // its own state to true. Relinquishes the claim on unmount so HMR and
377
- // route changes don't leak.
378
-
379
- let ownerId = null;
380
- function useAuxUIOwner() {
381
- const [isOwner, setIsOwner] = useState(false);
382
- useEffect(() => {
383
- const myId = {};
384
- if (ownerId == null) {
385
- ownerId = myId;
386
- setIsOwner(true);
387
- }
388
- return () => {
389
- if (ownerId === myId) {
390
- ownerId = null;
391
- }
392
- };
393
- }, []);
394
- return isOwner;
395
- }
396
-
397
- // Wrap each aux UI component in its own Suspense + ErrorBoundary so that its
398
- // query suspending (useLazyLoadQuery fetches on first client render) or
399
- // failing (CORS / offline / etc.) can't blank out the consumer's rendered
400
- // children. Without this, TestModeBanner's TestModeBannerQuery suspends the
401
- // whole provider subtree on hydration and the user sees a visible
402
- // unmount/remount flash on the TypeTester.
403
- function IsolatedAuxUI({
404
- children
405
- }) {
406
- return /*#__PURE__*/React__default.createElement(ErrorBoundary, {
407
- fallback: null
408
- }, /*#__PURE__*/React__default.createElement(Suspense, {
409
- fallback: null
410
- }, children));
411
- }
412
- const FontdueProvider = ({
413
- children,
414
- ...rest
415
- }) => {
416
- const isAuxOwner = useAuxUIOwner();
417
- return /*#__PURE__*/React__default.createElement(FontdueProviderClientComponent, _extends({}, rest, {
418
- renderAuxUI: isAuxOwner
419
- }), isAuxOwner && /*#__PURE__*/React__default.createElement(IsolatedAuxUI, null, /*#__PURE__*/React__default.createElement(TestModeBanner, null)), isAuxOwner && /*#__PURE__*/React__default.createElement(IsolatedAuxUI, null, /*#__PURE__*/React__default.createElement(ThemeConfig, null)), children);
420
- };
421
-
422
- export { FontdueProvider as F, useFontdueUrl as u };
423
- //# sourceMappingURL=index-C4ak9qTL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-C4ak9qTL.js","sources":["../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../../src/__generated__/TestModeBannerQuery.graphql.ts","../../src/components/TestModeBanner/index.tsx","../../src/__generated__/ThemeConfigQuery.graphql.ts","../../src/components/ThemeConfig/index.tsx","../../src/components/UrlContext.ts","../../src/components/FontdueProvider/FontdueProviderClientComponent.tsx","../../src/components/FontdueProvider/useAuxUIOwner.ts","../../src/components/FontdueProvider/index.tsx"],"sourcesContent":["'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","/**\n * @generated SignedSource<<e395904ea5bda751df1ca67f9c74ac55>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest } from 'relay-runtime';\nexport type TestModeBannerQuery$variables = Record<PropertyKey, never>;\nexport type TestModeBannerQuery$data = {\n readonly viewer: {\n readonly testMode: {\n readonly isActive: boolean;\n };\n };\n};\nexport type TestModeBannerQuery = {\n response: TestModeBannerQuery$data;\n variables: TestModeBannerQuery$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"TestMode\",\n \"kind\": \"LinkedField\",\n \"name\": \"testMode\",\n \"plural\": false,\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"isActive\",\n \"storageKey\": null\n }\n ],\n \"storageKey\": null\n};\nreturn {\n \"fragment\": {\n \"argumentDefinitions\": [],\n \"kind\": \"Fragment\",\n \"metadata\": null,\n \"name\": \"TestModeBannerQuery\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"Viewer\",\n \"kind\": \"LinkedField\",\n \"name\": \"viewer\",\n \"plural\": false,\n \"selections\": [\n (v0/*: any*/)\n ],\n \"storageKey\": null\n }\n ],\n \"type\": \"RootQueryType\",\n \"abstractKey\": null\n },\n \"kind\": \"Request\",\n \"operation\": {\n \"argumentDefinitions\": [],\n \"kind\": \"Operation\",\n \"name\": \"TestModeBannerQuery\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"Viewer\",\n \"kind\": \"LinkedField\",\n \"name\": \"viewer\",\n \"plural\": false,\n \"selections\": [\n (v0/*: any*/),\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"id\",\n \"storageKey\": null\n }\n ],\n \"storageKey\": null\n }\n ]\n },\n \"params\": {\n \"cacheID\": \"2cb9255aeee9b1b3edd823ee2f62d8cc\",\n \"id\": null,\n \"metadata\": {},\n \"name\": \"TestModeBannerQuery\",\n \"operationKind\": \"query\",\n \"text\": \"query TestModeBannerQuery {\\n viewer {\\n testMode {\\n isActive\\n }\\n id\\n }\\n}\\n\"\n }\n};\n})();\n\n(node as any).hash = \"60ad67ee88ec6b74dd04bdf5572e7faf\";\n\nexport default node;\n","'use client';\nimport React from 'react';\nimport { graphql, useLazyLoadQuery } from 'react-relay';\nimport {\n TestModeBannerQuery,\n TestModeBannerQuery$data,\n} from '../../__generated__/TestModeBannerQuery.graphql';\n\ninterface TestModeBannerComponent_props {\n data: TestModeBannerQuery$data;\n}\n\nfunction TestModeBannerComponent({ data }: TestModeBannerComponent_props) {\n const isActive = data?.viewer?.testMode?.isActive;\n\n // hide the banner completely if we're in live mode\n if (!isActive) return null;\n\n return (\n <div className=\"test-mode-banner__banner\" data-test-mode={isActive}>\n <div className=\"test-mode-banner__content\">\n <div className=\"test-mode-banner__title\">Viewing test data</div>\n </div>\n </div>\n );\n}\n\nconst query = graphql`\n query TestModeBannerQuery {\n viewer {\n testMode {\n isActive\n }\n }\n }\n`;\n\nexport default function TestModeBanner() {\n const data = useLazyLoadQuery<TestModeBannerQuery>(query, {});\n\n return <TestModeBannerComponent data={data} />;\n}\n","/**\n * @generated SignedSource<<b292c0ac6583f7d2d7cd8979e5696b21>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest } from 'relay-runtime';\nexport type ThemeConfigQuery$variables = Record<PropertyKey, never>;\nexport type ThemeConfigQuery$data = {\n readonly viewer: {\n readonly themeConfig: {\n readonly customProperties: ReadonlyArray<string> | null;\n } | null;\n };\n};\nexport type ThemeConfigQuery = {\n response: ThemeConfigQuery$data;\n variables: ThemeConfigQuery$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"ThemeConfig\",\n \"kind\": \"LinkedField\",\n \"name\": \"themeConfig\",\n \"plural\": false,\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"customProperties\",\n \"storageKey\": null\n }\n ],\n \"storageKey\": null\n};\nreturn {\n \"fragment\": {\n \"argumentDefinitions\": [],\n \"kind\": \"Fragment\",\n \"metadata\": null,\n \"name\": \"ThemeConfigQuery\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"Viewer\",\n \"kind\": \"LinkedField\",\n \"name\": \"viewer\",\n \"plural\": false,\n \"selections\": [\n (v0/*: any*/)\n ],\n \"storageKey\": null\n }\n ],\n \"type\": \"RootQueryType\",\n \"abstractKey\": null\n },\n \"kind\": \"Request\",\n \"operation\": {\n \"argumentDefinitions\": [],\n \"kind\": \"Operation\",\n \"name\": \"ThemeConfigQuery\",\n \"selections\": [\n {\n \"alias\": null,\n \"args\": null,\n \"concreteType\": \"Viewer\",\n \"kind\": \"LinkedField\",\n \"name\": \"viewer\",\n \"plural\": false,\n \"selections\": [\n (v0/*: any*/),\n {\n \"alias\": null,\n \"args\": null,\n \"kind\": \"ScalarField\",\n \"name\": \"id\",\n \"storageKey\": null\n }\n ],\n \"storageKey\": null\n }\n ]\n },\n \"params\": {\n \"cacheID\": \"d1f54ccc72720516df3faf57461c20e1\",\n \"id\": null,\n \"metadata\": {},\n \"name\": \"ThemeConfigQuery\",\n \"operationKind\": \"query\",\n \"text\": \"query ThemeConfigQuery {\\n viewer {\\n themeConfig {\\n customProperties\\n }\\n id\\n }\\n}\\n\"\n }\n};\n})();\n\n(node as any).hash = \"c259bee038c4d2ea14c758fba3381f57\";\n\nexport default node;\n","'use client';\nimport React from 'react';\nimport { graphql, useLazyLoadQuery, usePreloadedQuery } from 'react-relay';\nimport {\n ThemeConfigQuery,\n ThemeConfigQuery$data,\n} from '../../__generated__/ThemeConfigQuery.graphql';\nimport { SerializablePreloadedQuery } from '../../relay/loadSerializableQuery';\nimport useSerializablePreloadedQuery from '../../relay/useSerializablePreloadedQuery';\n\n// gets the custom properties entered by users in the admin panel,\n// which also includes default values. we put the defaults there instead of\n// every call to var() so that we have defaults all in one place\n\nfunction ThemeConfigComponent({ data }: { data: ThemeConfigQuery$data }) {\n const props = data.viewer.themeConfig?.customProperties ?? [];\n return <style type=\"text/css\">{`:root { ${props.join(';')} }`}</style>;\n}\n\nconst query = graphql`\n query ThemeConfigQuery {\n viewer {\n themeConfig {\n customProperties\n }\n }\n }\n`;\n\nexport function ThemeConfigPreloadedQueryRenderer({\n preloadedQuery,\n}: {\n preloadedQuery: SerializablePreloadedQuery<ThemeConfigQuery>;\n}) {\n const queryRef = useSerializablePreloadedQuery(preloadedQuery);\n const data = usePreloadedQuery(query, queryRef);\n return <ThemeConfigComponent data={data} />;\n}\n\nexport default function ThemeConfig() {\n const data = useLazyLoadQuery<ThemeConfigQuery>(query, {});\n return <ThemeConfigComponent data={data} />;\n}\n","import { createContext, useContext } from 'react';\n\nconst FONTDUE_URL =\n typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_FONTDUE_URL : undefined;\n\nconst UrlContext = createContext<string>(FONTDUE_URL ?? '');\n\nexport function useFontdueUrl(): string {\n return useContext(UrlContext);\n}\n\nexport default UrlContext;\n","'use client';\nimport React, { Suspense, lazy, useRef } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { Provider } from 'react-redux';\nimport { Store } from 'redux';\nimport { RelayEnvironmentProvider } from 'react-relay';\nimport { useCurrentEnvironment } from '../../relay/environment';\nimport ConfigContext, { Config, makeConfig } from '../ConfigContext';\nimport { FontdueAction, FontdueState, createDefaultStore } from '../../reducer';\nimport ComponentsContext, { Components } from '../ComponentsContext';\nimport UrlContext from '../UrlContext';\nimport retryImport from '../../retryImport';\n\nconst IS_SERVER = typeof window === typeof undefined;\n\n// Client-side Redux store is a module-level singleton so multiple\n// FontdueProviders on a page (e.g. one per Astro island) share cart state,\n// user state, etc. Server-side stays per-render.\nlet clientStore: Store<FontdueState, FontdueAction> | null = null;\n\nfunction useSharedStore(\n providedStore: Store<FontdueState, FontdueAction> | undefined,\n config: Config | undefined,\n): Store<FontdueState, FontdueAction> {\n const ref = useRef<Store<FontdueState, FontdueAction> | null>(null);\n if (providedStore) return providedStore;\n if (IS_SERVER) {\n if (ref.current == null) ref.current = createDefaultStore(config);\n return ref.current;\n }\n if (clientStore == null) clientStore = createDefaultStore(config);\n return clientStore;\n}\n\nconst ConsentBanner = lazy(() => retryImport(() => import('../ConsentBanner')));\nconst Tracking = lazy(() => retryImport(() => import('../Tracking')));\nconst ServerConfigProvider = lazy(() => retryImport(() => import('../ServerConfigProvider')));\n\nexport interface FontdueProvider_props {\n children?: React.ReactNode;\n url?: string;\n stripeIntegration?: 'card-element' | 'dynamic';\n config?: Config;\n components?: Components;\n store?: Store<FontdueState, FontdueAction>;\n}\n\nexport default function FontdueProviderClientComponent({\n children,\n url,\n stripeIntegration,\n config,\n components,\n store,\n renderAuxUI,\n}: FontdueProvider_props & { renderAuxUI?: boolean }) {\n const environment = useCurrentEnvironment({ url, stripeIntegration });\n\n const configValue = makeConfig(config);\n\n const sharedStore = useSharedStore(store, config);\n\n return (\n <RelayEnvironmentProvider environment={environment}>\n <Provider store={sharedStore}>\n <Suspense fallback={null}>\n <ConfigContext.Provider value={configValue}>\n <UrlContext.Provider value={url ?? (typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_FONTDUE_URL : undefined) ?? ''}>\n <ComponentsContext.Provider value={components ?? {}}>\n {children}\n {renderAuxUI && (\n <ErrorBoundary fallback={null}>\n <Suspense fallback={null}>\n <ServerConfigProvider codeConfig={config}>\n <ConsentBanner />\n <Tracking />\n </ServerConfigProvider>\n </Suspense>\n </ErrorBoundary>\n )}\n </ComponentsContext.Provider>\n </UrlContext.Provider>\n </ConfigContext.Provider>\n </Suspense>\n </Provider>\n </RelayEnvironmentProvider>\n );\n}\n","'use client';\nimport { useEffect, useState } from 'react';\n\n// Module-level claim: only one FontdueProvider on a page renders\n// auxiliary UI (TestModeBanner, ThemeConfig, Tracking, ConsentBanner,\n// ServerConfigProvider). Starts false on both server and client to avoid\n// hydration mismatch; the first provider to run `useEffect` wins and flips\n// its own state to true. Relinquishes the claim on unmount so HMR and\n// route changes don't leak.\n\nlet ownerId: object | null = null;\n\nexport default function useAuxUIOwner(): boolean {\n const [isOwner, setIsOwner] = useState(false);\n\n useEffect(() => {\n const myId = {};\n if (ownerId == null) {\n ownerId = myId;\n setIsOwner(true);\n }\n return () => {\n if (ownerId === myId) {\n ownerId = null;\n }\n };\n }, []);\n\n return isOwner;\n}\n","'use client';\nimport React, { Suspense } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport TestModeBanner from '../TestModeBanner';\nimport ThemeConfig from '../ThemeConfig';\nimport FontdueProviderClientComponent from './FontdueProviderClientComponent';\nimport type { FontdueProvider_props } from './FontdueProviderClientComponent';\nimport useAuxUIOwner from './useAuxUIOwner';\n\n// Wrap each aux UI component in its own Suspense + ErrorBoundary so that its\n// query suspending (useLazyLoadQuery fetches on first client render) or\n// failing (CORS / offline / etc.) can't blank out the consumer's rendered\n// children. Without this, TestModeBanner's TestModeBannerQuery suspends the\n// whole provider subtree on hydration and the user sees a visible\n// unmount/remount flash on the TypeTester.\nfunction IsolatedAuxUI({ children }: { children: React.ReactNode }) {\n return (\n <ErrorBoundary fallback={null}>\n <Suspense fallback={null}>{children}</Suspense>\n </ErrorBoundary>\n );\n}\n\nconst FontdueProvider = ({ children, ...rest }: FontdueProvider_props) => {\n const isAuxOwner = useAuxUIOwner();\n return (\n <FontdueProviderClientComponent {...rest} renderAuxUI={isAuxOwner}>\n {isAuxOwner && (\n <IsolatedAuxUI>\n <TestModeBanner />\n </IsolatedAuxUI>\n )}\n {isAuxOwner && (\n <IsolatedAuxUI>\n <ThemeConfig />\n </IsolatedAuxUI>\n )}\n {children}\n </FontdueProviderClientComponent>\n );\n};\n\nexport type { FontdueProvider_props };\n\nexport default FontdueProvider;\n"],"names":["node","v0","hash","TestModeBannerComponent","data","isActive","viewer","testMode","React","createElement","className","query","_TestModeBannerQuery","console","error","TestModeBanner","useLazyLoadQuery","ThemeConfigComponent","props","themeConfig","customProperties","type","join","_ThemeConfigQuery","ThemeConfig","FONTDUE_URL","process","env","NEXT_PUBLIC_FONTDUE_URL","undefined","UrlContext","createContext","useFontdueUrl","useContext","IS_SERVER","window","clientStore","useSharedStore","providedStore","config","ref","useRef","current","createDefaultStore","ConsentBanner","lazy","retryImport","Tracking","ServerConfigProvider","FontdueProviderClientComponent","children","url","stripeIntegration","components","store","renderAuxUI","environment","useCurrentEnvironment","configValue","makeConfig","sharedStore","RelayEnvironmentProvider","Provider","Suspense","fallback","ConfigContext","value","ComponentsContext","ErrorBoundary","codeConfig","ownerId","useAuxUIOwner","isOwner","setIsOwner","useState","useEffect","myId","IsolatedAuxUI","FontdueProvider","rest","isAuxOwner","_extends"],"mappings":";;;AAGA,MAAM,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAAC;;AAEhD,MAAM,YAAY,GAAG;AACrB,EAAE,QAAQ,EAAE,KAAK;AACjB,EAAE,KAAK,EAAE;AACT,CAAC;AACD,MAAM,aAAa,SAAS,SAAS,CAAC;AACtC,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,KAAK,CAAC;AAChB,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChE,IAAI,IAAI,CAAC,KAAK,GAAG,YAAY;AAC7B,EAAE;AACF,EAAE,OAAO,wBAAwB,CAAC,KAAK,EAAE;AACzC,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM;AACN,KAAK;AACL,EAAE;AACF,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM;AACV,MAAM;AACN,KAAK,GAAG,IAAI,CAAC,KAAK;AAClB,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;AACxB,MAAM,IAAI,mBAAmB,EAAE,WAAW;AAC1C,MAAM,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;AAC/F,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;AACpC,MAAM;AACN,MAAM,CAAC,mBAAmB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,MAAM,IAAI,IAAI,mBAAmB,KAAK,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE;AAC7J,QAAQ,IAAI;AACZ,QAAQ,MAAM,EAAE;AAChB,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACjC,IAAI;AACJ,EAAE;AACF,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE;AACjC,IAAI,IAAI,mBAAmB,EAAE,YAAY;AACzC,IAAI,CAAC,mBAAmB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,MAAM,IAAI,IAAI,mBAAmB,KAAK,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC;AACzK,EAAE;AACF,EAAE,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE;AAC3C,IAAI,MAAM;AACV,MAAM;AACN,KAAK,GAAG,IAAI,CAAC,KAAK;AAClB,IAAI,MAAM;AACV,MAAM;AACN,KAAK,GAAG,IAAI,CAAC,KAAK;;AAElB;AACA;AACA;AACA;;AAEA,IAAI,IAAI,QAAQ,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;AACjG,MAAM,IAAI,oBAAoB,EAAE,YAAY;AAC5C,MAAM,CAAC,oBAAoB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,MAAM,IAAI,IAAI,oBAAoB,KAAK,MAAM,GAAG,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE;AAClK,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,IAAI,EAAE,SAAS,CAAC,SAAS;AACjC,QAAQ,MAAM,EAAE;AAChB,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACjC,IAAI;AACJ,EAAE;AACF,EAAE,MAAM,GAAG;AACX,IAAI,MAAM;AACV,MAAM,QAAQ;AACd,MAAM,cAAc;AACpB,MAAM,iBAAiB;AACvB,MAAM;AACN,KAAK,GAAG,IAAI,CAAC,KAAK;AAClB,IAAI,MAAM;AACV,MAAM,QAAQ;AACd,MAAM;AACN,KAAK,GAAG,IAAI,CAAC,KAAK;AAClB,IAAI,IAAI,aAAa,GAAG,QAAQ;AAChC,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,KAAK,GAAG;AACpB,QAAQ,KAAK;AACb,QAAQ,kBAAkB,EAAE,IAAI,CAAC;AACjC,OAAO;AACP,MAAM,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;AAChD,QAAQ,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,IAAI,iBAAiB,EAAE;AACpC,QAAQ,aAAa,GAAG,aAAa,CAAC,iBAAiB,EAAE,KAAK,CAAC;AAC/D,MAAM,CAAC,MAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;AACzC,QAAQ,aAAa,GAAG,QAAQ;AAChC,MAAM,CAAC,MAAM;AACb,QAAQ,MAAM,KAAK;AACnB,MAAM;AACN,IAAI;AACJ,IAAI,OAAO,aAAa,CAAC,oBAAoB,CAAC,QAAQ,EAAE;AACxD,MAAM,KAAK,EAAE;AACb,QAAQ,QAAQ;AAChB,QAAQ,KAAK;AACb,QAAQ,kBAAkB,EAAE,IAAI,CAAC;AACjC;AACA,KAAK,EAAE,aAAa,CAAC;AACrB,EAAE;AACF;AACA,SAAS,eAAe,GAAG;AAC3B,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AAChF,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;AAChF,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrF;;ACxGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAgBA,MAAMA,MAAqB,GAAI,YAAU;AACzC,EAAA,IAAIC,EAAE,GAAG;AACP,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,cAAc,EAAE,UAAU;AAC1B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,YAAY,EAAE,CACZ;AACE,MAAA,OAAO,EAAE,IAAI;AACb,MAAA,MAAM,EAAE,IAAI;AACZ,MAAA,MAAM,EAAE,aAAa;AACrB,MAAA,MAAM,EAAE,UAAU;AAClB,MAAA,YAAY,EAAE;AAChB,KAAC,CACF;AACD,IAAA,YAAY,EAAE;GACf;EACD,OAAO;AACL,IAAA,UAAU,EAAE;AACV,MAAA,qBAAqB,EAAE,EAAE;AACzB,MAAA,MAAM,EAAE,UAAU;AAClB,MAAA,UAAU,EAAE,IAAI;AAChB,MAAA,MAAM,EAAE,qBAAqB;AAC7B,MAAA,YAAY,EAAE,CACZ;AACE,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,CACXA,EAAE,WACJ;AACD,QAAA,YAAY,EAAE;AAChB,OAAC,CACF;AACD,MAAA,MAAM,EAAE,eAAe;AACvB,MAAA,aAAa,EAAE;KAChB;AACD,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,WAAW,EAAE;AACX,MAAA,qBAAqB,EAAE,EAAE;AACzB,MAAA,MAAM,EAAE,WAAW;AACnB,MAAA,MAAM,EAAE,qBAAqB;AAC7B,MAAA,YAAY,EAAE,CACZ;AACE,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,CACXA,EAAE,YACH;AACE,UAAA,OAAO,EAAE,IAAI;AACb,UAAA,MAAM,EAAE,IAAI;AACZ,UAAA,MAAM,EAAE,aAAa;AACrB,UAAA,MAAM,EAAE,IAAI;AACZ,UAAA,YAAY,EAAE;AAChB,SAAC,CACF;AACD,QAAA,YAAY,EAAE;OACf;KAEJ;AACD,IAAA,QAAQ,EAAE;AACR,MAAA,SAAS,EAAE,kCAAkC;AAC7C,MAAA,IAAI,EAAE,IAAI;MACV,UAAU,EAAE,EAAE;AACd,MAAA,MAAM,EAAE,qBAAqB;AAC7B,MAAA,eAAe,EAAE,OAAO;AACxB,MAAA,MAAM,EAAE;AACV;GACD;AACD,CAAC,EAAG;AAEHD,MAAI,CAASE,IAAI,GAAG,kCAAkC;;AC5FvD,SAASC,uBAAuBA,CAAC;AAAEC,EAAAA;AAAoC,CAAC,EAAE;EACxE,MAAMC,QAAQ,GAAGD,IAAI,EAAEE,MAAM,EAAEC,QAAQ,EAAEF,QAAQ;;AAEjD;AACA,EAAA,IAAI,CAACA,QAAQ,EAAE,OAAO,IAAI;EAE1B,oBACEG,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,0BAA0B;IAAC,gBAAA,EAAgBL;GAAS,eACjEG,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC;GAA2B,eACxCF,cAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC;GAAyB,EAAC,mBAAsB,CAC5D,CACF,CAAC;AAEV;AAEA,MAAMC,OAAK,IAAAC,MAAA,CAAAV,IAAA,IAAAU,MAAA,CAAAV,IAAA,2CAAAW,OAAA,CAAAC,KAAA,CAAA,mJAAA,CAAA,EAAAF,MAAA,CAQV;AAEc,SAASG,cAAcA,GAAG;EACvC,MAAMX,IAAI,GAAGY,kCAAgB,CAAsBL,OAAK,EAAE,EAAE,CAAC;AAE7D,EAAA,oBAAOH,cAAA,CAAAC,aAAA,CAACN,uBAAuB,EAAA;AAACC,IAAAA,IAAI,EAAEA;AAAK,GAAE,CAAC;AAChD;;ACzCA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAgBA,MAAMJ,IAAqB,GAAI,YAAU;AACzC,EAAA,IAAIC,EAAE,GAAG;AACP,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,YAAY,EAAE,CACZ;AACE,MAAA,OAAO,EAAE,IAAI;AACb,MAAA,MAAM,EAAE,IAAI;AACZ,MAAA,MAAM,EAAE,aAAa;AACrB,MAAA,MAAM,EAAE,kBAAkB;AAC1B,MAAA,YAAY,EAAE;AAChB,KAAC,CACF;AACD,IAAA,YAAY,EAAE;GACf;EACD,OAAO;AACL,IAAA,UAAU,EAAE;AACV,MAAA,qBAAqB,EAAE,EAAE;AACzB,MAAA,MAAM,EAAE,UAAU;AAClB,MAAA,UAAU,EAAE,IAAI;AAChB,MAAA,MAAM,EAAE,kBAAkB;AAC1B,MAAA,YAAY,EAAE,CACZ;AACE,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,CACXA,EAAE,WACJ;AACD,QAAA,YAAY,EAAE;AAChB,OAAC,CACF;AACD,MAAA,MAAM,EAAE,eAAe;AACvB,MAAA,aAAa,EAAE;KAChB;AACD,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,WAAW,EAAE;AACX,MAAA,qBAAqB,EAAE,EAAE;AACzB,MAAA,MAAM,EAAE,WAAW;AACnB,MAAA,MAAM,EAAE,kBAAkB;AAC1B,MAAA,YAAY,EAAE,CACZ;AACE,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,CACXA,EAAE,YACH;AACE,UAAA,OAAO,EAAE,IAAI;AACb,UAAA,MAAM,EAAE,IAAI;AACZ,UAAA,MAAM,EAAE,aAAa;AACrB,UAAA,MAAM,EAAE,IAAI;AACZ,UAAA,YAAY,EAAE;AAChB,SAAC,CACF;AACD,QAAA,YAAY,EAAE;OACf;KAEJ;AACD,IAAA,QAAQ,EAAE;AACR,MAAA,SAAS,EAAE,kCAAkC;AAC7C,MAAA,IAAI,EAAE,IAAI;MACV,UAAU,EAAE,EAAE;AACd,MAAA,MAAM,EAAE,kBAAkB;AAC1B,MAAA,eAAe,EAAE,OAAO;AACxB,MAAA,MAAM,EAAE;AACV;GACD;AACD,CAAC,EAAG;AAEHD,IAAI,CAASE,IAAI,GAAG,kCAAkC;;AC9FvD;AACA;AACA;;AAEA,SAASe,oBAAoBA,CAAC;AAAEb,EAAAA;AAAsC,CAAC,EAAE;EACvE,MAAMc,KAAK,GAAGd,IAAI,CAACE,MAAM,CAACa,WAAW,EAAEC,gBAAgB,IAAI,EAAE;EAC7D,oBAAOZ,cAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AAAOY,IAAAA,IAAI,EAAC;GAAU,EAAE,CAAA,QAAA,EAAWH,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC,IAAY,CAAC;AACxE;AAEA,MAAMX,KAAK,IAAAY,IAAA,CAAArB,IAAA,IAAAqB,IAAA,CAAArB,IAAA,2CAAAW,OAAA,CAAAC,KAAA,CAAA,gJAAA,CAAA,EAAAS,IAAA,CAQV;AAYc,SAASC,WAAWA,GAAG;EACpC,MAAMpB,IAAI,GAAGY,kCAAgB,CAAmBL,KAAK,EAAE,EAAE,CAAC;AAC1D,EAAA,oBAAOH,cAAA,CAAAC,aAAA,CAACQ,oBAAoB,EAAA;AAACb,IAAAA,IAAI,EAAEA;AAAK,GAAE,CAAC;AAC7C;;ACxCA,MAAMqB,WAAW,GACf,OAAOC,OAAO,KAAK,WAAW,GAAGA,OAAO,CAACC,GAAG,CAACC,uBAAuB,GAAGC,SAAS;AAElF,MAAMC,UAAU,gBAAGC,aAAa,CAASN,WAAW,IAAI,EAAE,CAAC;AAEpD,SAASO,aAAaA,GAAW;EACtC,OAAOC,UAAU,CAACH,UAAU,CAAC;AAC/B;;ACIA,MAAMI,SAAS,GAAG,OAAOC,MAAM,KAAK,OAAON,SAAS;;AAEpD;AACA;AACA;AACA,IAAIO,WAAsD,GAAG,IAAI;AAEjE,SAASC,cAAcA,CACrBC,aAA6D,EAC7DC,MAA0B,EACU;AACpC,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAA4C,IAAI,CAAC;EACnE,IAAIH,aAAa,EAAE,OAAOA,aAAa;AACvC,EAAA,IAAIJ,SAAS,EAAE;AACb,IAAA,IAAIM,GAAG,CAACE,OAAO,IAAI,IAAI,EAAEF,GAAG,CAACE,OAAO,GAAGC,kBAAkB,CAACJ,MAAM,CAAC;IACjE,OAAOC,GAAG,CAACE,OAAO;AACpB,EAAA;EACA,IAAIN,WAAW,IAAI,IAAI,EAAEA,WAAW,GAAGO,kBAAkB,CAACJ,MAAM,CAAC;AACjE,EAAA,OAAOH,WAAW;AACpB;AAEA,MAAMQ,aAAa,gBAAGC,IAAI,CAAC,MAAMC,WAAW,CAAC,MAAM,OAAO,qBAAkB,CAAC,CAAC,CAAC;AAC/E,MAAMC,QAAQ,gBAAGF,IAAI,CAAC,MAAMC,WAAW,CAAC,MAAM,OAAO,qBAAa,CAAC,CAAC,CAAC;AACrE,MAAME,oBAAoB,gBAAGH,IAAI,CAAC,MAAMC,WAAW,CAAC,MAAM,OAAO,qBAAyB,CAAC,CAAC,CAAC;AAW9E,SAASG,8BAA8BA,CAAC;EACrDC,QAAQ;EACRC,GAAG;EACHC,iBAAiB;EACjBb,MAAM;EACNc,UAAU;EACVC,KAAK;AACLC,EAAAA;AACiD,CAAC,EAAE;EACpD,MAAMC,WAAW,GAAGC,qBAAqB,CAAC;IAAEN,GAAG;AAAEC,IAAAA;AAAkB,GAAC,CAAC;AAErE,EAAA,MAAMM,WAAW,GAAGC,UAAU,CAACpB,MAAM,CAAC;AAEtC,EAAA,MAAMqB,WAAW,GAAGvB,cAAc,CAACiB,KAAK,EAAEf,MAAM,CAAC;AAEjD,EAAA,oBACE/B,cAAA,CAAAC,aAAA,CAACoD,0CAAwB,EAAA;AAACL,IAAAA,WAAW,EAAEA;AAAY,GAAA,eACjDhD,cAAA,CAAAC,aAAA,CAACqD,gBAAQ,EAAA;AAACR,IAAAA,KAAK,EAAEM;AAAY,GAAA,eAC3BpD,cAAA,CAAAC,aAAA,CAACsD,QAAQ,EAAA;AAACC,IAAAA,QAAQ,EAAE;AAAK,GAAA,eACvBxD,cAAA,CAAAC,aAAA,CAACwD,aAAa,CAACH,QAAQ,EAAA;AAACI,IAAAA,KAAK,EAAER;AAAY,GAAA,eACzClD,cAAA,CAAAC,aAAA,CAACqB,UAAU,CAACgC,QAAQ,EAAA;AAACI,IAAAA,KAAK,EAAEf,GAAG,KAAK,OAAOzB,OAAO,KAAK,WAAW,GAAGA,OAAO,CAACC,GAAG,CAACC,uBAAuB,GAAGC,SAAS,CAAC,IAAI;AAAG,GAAA,eAC1HrB,cAAA,CAAAC,aAAA,CAAC0D,iBAAiB,CAACL,QAAQ,EAAA;IAACI,KAAK,EAAEb,UAAU,IAAI;GAAG,EACjDH,QAAQ,EACRK,WAAW,iBACV/C,cAAA,CAAAC,aAAA,CAAC2D,aAAa,EAAA;AAACJ,IAAAA,QAAQ,EAAE;AAAK,GAAA,eAC5BxD,cAAA,CAAAC,aAAA,CAACsD,QAAQ,EAAA;AAACC,IAAAA,QAAQ,EAAE;AAAK,GAAA,eACvBxD,cAAA,CAAAC,aAAA,CAACuC,oBAAoB,EAAA;AAACqB,IAAAA,UAAU,EAAE9B;GAAO,eACvC/B,cAAA,CAAAC,aAAA,CAACmC,aAAa,EAAA,IAAE,CAAC,eACjBpC,cAAA,CAAAC,aAAA,CAACsC,QAAQ,EAAA,IAAE,CACS,CACd,CACG,CAES,CACT,CACC,CAChB,CACF,CACc,CAAC;AAE/B;;ACpFA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIuB,OAAsB,GAAG,IAAI;AAElB,SAASC,aAAaA,GAAY;EAC/C,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;AAE7CC,EAAAA,SAAS,CAAC,MAAM;IACd,MAAMC,IAAI,GAAG,EAAE;IACf,IAAIN,OAAO,IAAI,IAAI,EAAE;AACnBA,MAAAA,OAAO,GAAGM,IAAI;MACdH,UAAU,CAAC,IAAI,CAAC;AAClB,IAAA;AACA,IAAA,OAAO,MAAM;MACX,IAAIH,OAAO,KAAKM,IAAI,EAAE;AACpBN,QAAAA,OAAO,GAAG,IAAI;AAChB,MAAA;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AAEN,EAAA,OAAOE,OAAO;AAChB;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA,SAASK,aAAaA,CAAC;AAAE3B,EAAAA;AAAwC,CAAC,EAAE;AAClE,EAAA,oBACE1C,cAAA,CAAAC,aAAA,CAAC2D,aAAa,EAAA;AAACJ,IAAAA,QAAQ,EAAE;AAAK,GAAA,eAC5BxD,cAAA,CAAAC,aAAA,CAACsD,QAAQ,EAAA;AAACC,IAAAA,QAAQ,EAAE;GAAK,EAAEd,QAAmB,CACjC,CAAC;AAEpB;AAEA,MAAM4B,eAAe,GAAGA,CAAC;EAAE5B,QAAQ;EAAE,GAAG6B;AAA4B,CAAC,KAAK;AACxE,EAAA,MAAMC,UAAU,GAAGT,aAAa,EAAE;EAClC,oBACE/D,cAAA,CAAAC,aAAA,CAACwC,8BAA8B,EAAAgC,QAAA,KAAKF,IAAI,EAAA;AAAExB,IAAAA,WAAW,EAAEyB;AAAW,GAAA,CAAA,EAC/DA,UAAU,iBACTxE,cAAA,CAAAC,aAAA,CAACoE,aAAa,EAAA,IAAA,eACZrE,cAAA,CAAAC,aAAA,CAACM,cAAc,EAAA,IAAE,CACJ,CAChB,EACAiE,UAAU,iBACTxE,cAAA,CAAAC,aAAA,CAACoE,aAAa,qBACZrE,cAAA,CAAAC,aAAA,CAACe,WAAW,EAAA,IAAE,CACD,CAChB,EACA0B,QAC6B,CAAC;AAErC;;;;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DsvF5W13.js","sources":["../../src/components/Tracking/index.tsx"],"sourcesContent":["'use client';\nimport { useContext, useEffect } from 'react';\nimport ConfigContext from '../ConfigContext';\nimport { useFontdueUrl } from '../UrlContext';\nimport { hasConsent, onConsent, setClientAnonymousId } from '../ConsentBanner/consent';\n\nfunction getCampaignDataFromUrl() {\n const urlParams = new URLSearchParams(window.location.search);\n const campaign: Record<string, string> = {};\n const properties: Record<string, string> = {};\n let hasCampaign = false;\n let hasProperties = false;\n\n const utmMapping: Record<string, string> = {\n utm_source: 'source',\n utm_medium: 'medium',\n utm_campaign: 'name',\n utm_term: 'term',\n utm_content: 'content',\n };\n\n for (const [urlParam, campaignKey] of Object.entries(utmMapping)) {\n const value = urlParams.get(urlParam);\n if (value) {\n campaign[campaignKey] = value;\n hasCampaign = true;\n }\n }\n\n const clickIds = ['gclid', 'fbclid'];\n for (const param of clickIds) {\n const value = urlParams.get(param);\n if (value) {\n properties[param] = value;\n hasProperties = true;\n }\n }\n\n return {\n campaign: hasCampaign ? campaign : null,\n properties: hasProperties ? properties : null,\n };\n}\n\nasync function sendPageView(\n baseUrl: string,\n anonymousId?: string,\n): Promise<string | null> {\n try {\n const { campaign, properties: clickIdProperties } = getCampaignDataFromUrl();\n\n const properties: Record<string, unknown> = {\n url: window.location.href,\n path: window.location.pathname,\n referrer: document.referrer,\n title: document.title,\n search: window.location.search,\n ...clickIdProperties,\n };\n\n const context: Record<string, unknown> = {\n userAgent: navigator.userAgent,\n };\n\n if (campaign) {\n context.campaign = campaign;\n }\n\n const body: Record<string, unknown> = { properties, context };\n\n if (anonymousId) {\n body.anonymous_id = anonymousId;\n }\n\n const response = await fetch(`${baseUrl}/api/track/page`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify(body),\n });\n\n const data = await response.json();\n return data.anonymous_id || null;\n } catch (error) {\n console.debug('Tracking error:', error);\n return null;\n }\n}\n\nconst Tracking = () => {\n const config = useContext(ConfigContext);\n const url = useFontdueUrl();\n\n useEffect(() => {\n if (!config.tracking.enabled) return;\n\n // Generate client-side anonymous ID for cookieless tracking when consent is required\n const clientAnonymousId = config.tracking.consentRequired\n ? crypto.randomUUID()\n : undefined;\n\n if (clientAnonymousId) {\n setClientAnonymousId(clientAnonymousId);\n }\n\n // Only send the client ID when in cookieless mode (consent required but not yet granted)\n const analyticsConsent = hasConsent('analytics');\n const effectiveAnonymousId =\n clientAnonymousId && config.tracking.consentRequired && !analyticsConsent\n ? clientAnonymousId\n : undefined;\n\n // Send initial page view\n const pageViewPromise = sendPageView(url, effectiveAnonymousId);\n\n // Segment SDK for device-mode integrations (e.g. Google Tag Manager)\n // The analytics factory is provided by the entry point — it calls AnalyticsBrowser.load()\n // when invoked. We defer calling it until after consent when consentRequired is true.\n const loadAnalytics = config.tracking.segment?.analytics;\n const integrations = config.tracking.segment?.integrations || {\n All: false,\n 'Google Tag Manager': true,\n };\n\n let consentCleanup: (() => void) | undefined;\n\n if (loadAnalytics) {\n const fireSegmentPage = async () => {\n try {\n const analytics = loadAnalytics();\n const anonymousId = await pageViewPromise;\n if (anonymousId) {\n await analytics.setAnonymousId(anonymousId);\n }\n await analytics.page(undefined, undefined, undefined, { integrations });\n } catch (error) {\n console.debug('Segment SDK error:', error);\n }\n };\n\n if (config.tracking.consentRequired) {\n consentCleanup = onConsent('analytics', fireSegmentPage);\n } else {\n fireSegmentPage();\n }\n }\n\n // Track client-side route changes\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n const handleRouteChange = () => {\n // Defer slightly to let document.title update\n setTimeout(() => sendPageView(url), 0);\n };\n\n history.pushState = function (...args: Parameters<typeof history.pushState>) {\n originalPushState(...args);\n handleRouteChange();\n };\n\n history.replaceState = function (...args: Parameters<typeof history.replaceState>) {\n originalReplaceState(...args);\n handleRouteChange();\n };\n\n window.addEventListener('popstate', handleRouteChange);\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener('popstate', handleRouteChange);\n consentCleanup?.();\n };\n }, []);\n\n return null;\n};\n\nexport default Tracking;\n"],"names":["getCampaignDataFromUrl","urlParams","URLSearchParams","window","location","search","campaign","properties","hasCampaign","hasProperties","utmMapping","utm_source","utm_medium","utm_campaign","utm_term","utm_content","urlParam","campaignKey","Object","entries","value","get","clickIds","param","sendPageView","baseUrl","anonymousId","clickIdProperties","url","href","path","pathname","referrer","document","title","context","userAgent","navigator","body","anonymous_id","response","fetch","method","headers","credentials","JSON","stringify","data","json","error","console","debug","Tracking","config","useContext","ConfigContext","useFontdueUrl","useEffect","tracking","enabled","clientAnonymousId","consentRequired","crypto","randomUUID","undefined","setClientAnonymousId","analyticsConsent","hasConsent","effectiveAnonymousId","pageViewPromise","loadAnalytics","segment","analytics","integrations","All","consentCleanup","fireSegmentPage","setAnonymousId","page","onConsent","originalPushState","history","pushState","bind","originalReplaceState","replaceState","handleRouteChange","setTimeout","args","addEventListener","removeEventListener"],"mappings":"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"}