@mmailaender/convex-creem 0.1.0

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 (383) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1176 -0
  3. package/dist/client/helpers.d.ts +17 -0
  4. package/dist/client/helpers.d.ts.map +1 -0
  5. package/dist/client/helpers.js +43 -0
  6. package/dist/client/helpers.js.map +1 -0
  7. package/dist/client/index.d.ts +1041 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +1068 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/parsers.d.ts +45 -0
  12. package/dist/client/parsers.d.ts.map +1 -0
  13. package/dist/client/parsers.js +138 -0
  14. package/dist/client/parsers.js.map +1 -0
  15. package/dist/client/polyfill.d.ts +2 -0
  16. package/dist/client/polyfill.d.ts.map +1 -0
  17. package/dist/client/polyfill.js +3 -0
  18. package/dist/client/polyfill.js.map +1 -0
  19. package/dist/component/_generated/api.d.ts +36 -0
  20. package/dist/component/_generated/api.d.ts.map +1 -0
  21. package/dist/component/_generated/api.js +31 -0
  22. package/dist/component/_generated/api.js.map +1 -0
  23. package/dist/component/_generated/component.d.ts +542 -0
  24. package/dist/component/_generated/component.d.ts.map +1 -0
  25. package/dist/component/_generated/component.js +11 -0
  26. package/dist/component/_generated/component.js.map +1 -0
  27. package/dist/component/_generated/dataModel.d.ts +46 -0
  28. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  29. package/dist/component/_generated/dataModel.js +11 -0
  30. package/dist/component/_generated/dataModel.js.map +1 -0
  31. package/dist/component/_generated/server.d.ts +121 -0
  32. package/dist/component/_generated/server.d.ts.map +1 -0
  33. package/dist/component/_generated/server.js +78 -0
  34. package/dist/component/_generated/server.js.map +1 -0
  35. package/dist/component/convex.config.d.ts +3 -0
  36. package/dist/component/convex.config.d.ts.map +1 -0
  37. package/dist/component/convex.config.js +3 -0
  38. package/dist/component/convex.config.js.map +1 -0
  39. package/dist/component/lib.d.ts +1005 -0
  40. package/dist/component/lib.d.ts.map +1 -0
  41. package/dist/component/lib.js +647 -0
  42. package/dist/component/lib.js.map +1 -0
  43. package/dist/component/schema.d.ts +191 -0
  44. package/dist/component/schema.d.ts.map +1 -0
  45. package/dist/component/schema.js +104 -0
  46. package/dist/component/schema.js.map +1 -0
  47. package/dist/component/util.d.ts +61 -0
  48. package/dist/component/util.d.ts.map +1 -0
  49. package/dist/component/util.js +142 -0
  50. package/dist/component/util.js.map +1 -0
  51. package/dist/core/catalog.d.ts +18 -0
  52. package/dist/core/catalog.d.ts.map +1 -0
  53. package/dist/core/catalog.js +82 -0
  54. package/dist/core/catalog.js.map +1 -0
  55. package/dist/core/index.d.ts +9 -0
  56. package/dist/core/index.d.ts.map +1 -0
  57. package/dist/core/index.js +9 -0
  58. package/dist/core/index.js.map +1 -0
  59. package/dist/core/markdown.d.ts +12 -0
  60. package/dist/core/markdown.d.ts.map +1 -0
  61. package/dist/core/markdown.js +26 -0
  62. package/dist/core/markdown.js.map +1 -0
  63. package/dist/core/payments.d.ts +11 -0
  64. package/dist/core/payments.d.ts.map +1 -0
  65. package/dist/core/payments.js +27 -0
  66. package/dist/core/payments.js.map +1 -0
  67. package/dist/core/pendingCheckout.d.ts +15 -0
  68. package/dist/core/pendingCheckout.d.ts.map +1 -0
  69. package/dist/core/pendingCheckout.js +40 -0
  70. package/dist/core/pendingCheckout.js.map +1 -0
  71. package/dist/core/resolver.d.ts +11 -0
  72. package/dist/core/resolver.d.ts.map +1 -0
  73. package/dist/core/resolver.js +106 -0
  74. package/dist/core/resolver.js.map +1 -0
  75. package/dist/core/selectors.d.ts +12 -0
  76. package/dist/core/selectors.d.ts.map +1 -0
  77. package/dist/core/selectors.js +18 -0
  78. package/dist/core/selectors.js.map +1 -0
  79. package/dist/core/subscriptionUpdate.d.ts +20 -0
  80. package/dist/core/subscriptionUpdate.d.ts.map +1 -0
  81. package/dist/core/subscriptionUpdate.js +64 -0
  82. package/dist/core/subscriptionUpdate.js.map +1 -0
  83. package/dist/core/types.d.ts +170 -0
  84. package/dist/core/types.d.ts.map +1 -0
  85. package/dist/core/types.js +15 -0
  86. package/dist/core/types.js.map +1 -0
  87. package/dist/design-system/colors/color-utils.d.ts +10 -0
  88. package/dist/design-system/colors/color-utils.d.ts.map +1 -0
  89. package/dist/design-system/colors/color-utils.js +91 -0
  90. package/dist/design-system/colors/color-utils.js.map +1 -0
  91. package/dist/design-system/colors/config.d.ts +33 -0
  92. package/dist/design-system/colors/config.d.ts.map +1 -0
  93. package/dist/design-system/colors/config.js +224 -0
  94. package/dist/design-system/colors/config.js.map +1 -0
  95. package/dist/design-system/colors/index.d.ts +3 -0
  96. package/dist/design-system/colors/index.d.ts.map +1 -0
  97. package/dist/design-system/colors/index.js +3 -0
  98. package/dist/design-system/colors/index.js.map +1 -0
  99. package/dist/design-system/rounded/config.d.ts +31 -0
  100. package/dist/design-system/rounded/config.d.ts.map +1 -0
  101. package/dist/design-system/rounded/config.js +76 -0
  102. package/dist/design-system/rounded/config.js.map +1 -0
  103. package/dist/design-system/rounded/index.d.ts +2 -0
  104. package/dist/design-system/rounded/index.d.ts.map +1 -0
  105. package/dist/design-system/rounded/index.js +2 -0
  106. package/dist/design-system/rounded/index.js.map +1 -0
  107. package/dist/design-system/typography/config.d.ts +55 -0
  108. package/dist/design-system/typography/config.d.ts.map +1 -0
  109. package/dist/design-system/typography/config.js +308 -0
  110. package/dist/design-system/typography/config.js.map +1 -0
  111. package/dist/design-system/typography/index.d.ts +3 -0
  112. package/dist/design-system/typography/index.d.ts.map +1 -0
  113. package/dist/design-system/typography/index.js +3 -0
  114. package/dist/design-system/typography/index.js.map +1 -0
  115. package/dist/design-system/typography/tokens.d.ts +23 -0
  116. package/dist/design-system/typography/tokens.d.ts.map +1 -0
  117. package/dist/design-system/typography/tokens.js +99 -0
  118. package/dist/design-system/typography/tokens.js.map +1 -0
  119. package/dist/react/hooks/useCheckoutSuccessParams.d.ts +2 -0
  120. package/dist/react/hooks/useCheckoutSuccessParams.d.ts.map +1 -0
  121. package/dist/react/hooks/useCheckoutSuccessParams.js +5 -0
  122. package/dist/react/hooks/useCheckoutSuccessParams.js.map +1 -0
  123. package/dist/react/index.d.ts +25 -0
  124. package/dist/react/index.d.ts.map +1 -0
  125. package/dist/react/index.js +22 -0
  126. package/dist/react/index.js.map +1 -0
  127. package/dist/react/primitives/BillingGate.d.ts +8 -0
  128. package/dist/react/primitives/BillingGate.d.ts.map +1 -0
  129. package/dist/react/primitives/BillingGate.js +13 -0
  130. package/dist/react/primitives/BillingGate.js.map +1 -0
  131. package/dist/react/primitives/BillingToggle.d.ts +8 -0
  132. package/dist/react/primitives/BillingToggle.d.ts.map +1 -0
  133. package/dist/react/primitives/BillingToggle.js +12 -0
  134. package/dist/react/primitives/BillingToggle.js.map +1 -0
  135. package/dist/react/primitives/CheckoutButton.d.ts +11 -0
  136. package/dist/react/primitives/CheckoutButton.d.ts.map +1 -0
  137. package/dist/react/primitives/CheckoutButton.js +21 -0
  138. package/dist/react/primitives/CheckoutButton.js.map +1 -0
  139. package/dist/react/primitives/CheckoutSuccessSummary.d.ts +7 -0
  140. package/dist/react/primitives/CheckoutSuccessSummary.d.ts.map +1 -0
  141. package/dist/react/primitives/CheckoutSuccessSummary.js +11 -0
  142. package/dist/react/primitives/CheckoutSuccessSummary.js.map +1 -0
  143. package/dist/react/primitives/CustomerPortalButton.d.ts +8 -0
  144. package/dist/react/primitives/CustomerPortalButton.d.ts.map +1 -0
  145. package/dist/react/primitives/CustomerPortalButton.js +21 -0
  146. package/dist/react/primitives/CustomerPortalButton.js.map +1 -0
  147. package/dist/react/primitives/NumberInput.d.ts +11 -0
  148. package/dist/react/primitives/NumberInput.d.ts.map +1 -0
  149. package/dist/react/primitives/NumberInput.js +18 -0
  150. package/dist/react/primitives/NumberInput.js.map +1 -0
  151. package/dist/react/primitives/OneTimeCheckoutButton.d.ts +11 -0
  152. package/dist/react/primitives/OneTimeCheckoutButton.d.ts.map +1 -0
  153. package/dist/react/primitives/OneTimeCheckoutButton.js +4 -0
  154. package/dist/react/primitives/OneTimeCheckoutButton.js.map +1 -0
  155. package/dist/react/primitives/OneTimePaymentStatusBadge.d.ts +6 -0
  156. package/dist/react/primitives/OneTimePaymentStatusBadge.d.ts.map +1 -0
  157. package/dist/react/primitives/OneTimePaymentStatusBadge.js +11 -0
  158. package/dist/react/primitives/OneTimePaymentStatusBadge.js.map +1 -0
  159. package/dist/react/primitives/PaymentWarningBanner.d.ts +7 -0
  160. package/dist/react/primitives/PaymentWarningBanner.d.ts.map +1 -0
  161. package/dist/react/primitives/PaymentWarningBanner.js +18 -0
  162. package/dist/react/primitives/PaymentWarningBanner.js.map +1 -0
  163. package/dist/react/primitives/PricingCard.d.ts +37 -0
  164. package/dist/react/primitives/PricingCard.d.ts.map +1 -0
  165. package/dist/react/primitives/PricingCard.js +125 -0
  166. package/dist/react/primitives/PricingCard.js.map +1 -0
  167. package/dist/react/primitives/PricingSection.d.ts +39 -0
  168. package/dist/react/primitives/PricingSection.d.ts.map +1 -0
  169. package/dist/react/primitives/PricingSection.js +24 -0
  170. package/dist/react/primitives/PricingSection.js.map +1 -0
  171. package/dist/react/primitives/ScheduledChangeBanner.d.ts +8 -0
  172. package/dist/react/primitives/ScheduledChangeBanner.d.ts.map +1 -0
  173. package/dist/react/primitives/ScheduledChangeBanner.js +13 -0
  174. package/dist/react/primitives/ScheduledChangeBanner.js.map +1 -0
  175. package/dist/react/primitives/SegmentControl.d.ts +11 -0
  176. package/dist/react/primitives/SegmentControl.d.ts.map +1 -0
  177. package/dist/react/primitives/SegmentControl.js +8 -0
  178. package/dist/react/primitives/SegmentControl.js.map +1 -0
  179. package/dist/react/primitives/SegmentGroup.d.ts +14 -0
  180. package/dist/react/primitives/SegmentGroup.d.ts.map +1 -0
  181. package/dist/react/primitives/SegmentGroup.js +11 -0
  182. package/dist/react/primitives/SegmentGroup.js.map +1 -0
  183. package/dist/react/primitives/TrialLimitBanner.d.ts +7 -0
  184. package/dist/react/primitives/TrialLimitBanner.d.ts.map +1 -0
  185. package/dist/react/primitives/TrialLimitBanner.js +14 -0
  186. package/dist/react/primitives/TrialLimitBanner.js.map +1 -0
  187. package/dist/react/shared.d.ts +28 -0
  188. package/dist/react/shared.d.ts.map +1 -0
  189. package/dist/react/shared.js +109 -0
  190. package/dist/react/shared.js.map +1 -0
  191. package/dist/react/widgets/BillingPortal.d.ts +9 -0
  192. package/dist/react/widgets/BillingPortal.d.ts.map +1 -0
  193. package/dist/react/widgets/BillingPortal.js +30 -0
  194. package/dist/react/widgets/BillingPortal.js.map +1 -0
  195. package/dist/react/widgets/ProductItem.d.ts +8 -0
  196. package/dist/react/widgets/ProductItem.d.ts.map +1 -0
  197. package/dist/react/widgets/ProductItem.js +14 -0
  198. package/dist/react/widgets/ProductItem.js.map +1 -0
  199. package/dist/react/widgets/ProductRoot.d.ts +16 -0
  200. package/dist/react/widgets/ProductRoot.d.ts.map +1 -0
  201. package/dist/react/widgets/ProductRoot.js +171 -0
  202. package/dist/react/widgets/ProductRoot.js.map +1 -0
  203. package/dist/react/widgets/SubscriptionItem.d.ts +27 -0
  204. package/dist/react/widgets/SubscriptionItem.d.ts.map +1 -0
  205. package/dist/react/widgets/SubscriptionItem.js +32 -0
  206. package/dist/react/widgets/SubscriptionItem.js.map +1 -0
  207. package/dist/react/widgets/SubscriptionRoot.d.ts +16 -0
  208. package/dist/react/widgets/SubscriptionRoot.d.ts.map +1 -0
  209. package/dist/react/widgets/SubscriptionRoot.js +405 -0
  210. package/dist/react/widgets/SubscriptionRoot.js.map +1 -0
  211. package/dist/react/widgets/index.d.ts +19 -0
  212. package/dist/react/widgets/index.d.ts.map +1 -0
  213. package/dist/react/widgets/index.js +16 -0
  214. package/dist/react/widgets/index.js.map +1 -0
  215. package/dist/react/widgets/productGroupContext.d.ts +6 -0
  216. package/dist/react/widgets/productGroupContext.d.ts.map +1 -0
  217. package/dist/react/widgets/productGroupContext.js +3 -0
  218. package/dist/react/widgets/productGroupContext.js.map +1 -0
  219. package/dist/react/widgets/subscriptionContext.d.ts +6 -0
  220. package/dist/react/widgets/subscriptionContext.d.ts.map +1 -0
  221. package/dist/react/widgets/subscriptionContext.js +3 -0
  222. package/dist/react/widgets/subscriptionContext.js.map +1 -0
  223. package/dist/react/widgets/types.d.ts +171 -0
  224. package/dist/react/widgets/types.d.ts.map +1 -0
  225. package/dist/react/widgets/types.js +2 -0
  226. package/dist/react/widgets/types.js.map +1 -0
  227. package/dist/svelte/index.d.ts +22 -0
  228. package/dist/svelte/index.d.ts.map +1 -0
  229. package/dist/svelte/index.js +20 -0
  230. package/dist/svelte/index.js.map +1 -0
  231. package/dist/svelte/primitives/BillingGate.svelte +28 -0
  232. package/dist/svelte/primitives/BillingToggle.svelte +27 -0
  233. package/dist/svelte/primitives/CheckoutButton.svelte +60 -0
  234. package/dist/svelte/primitives/CheckoutSuccessSummary.svelte +34 -0
  235. package/dist/svelte/primitives/CustomerPortalButton.svelte +60 -0
  236. package/dist/svelte/primitives/NumberInput.svelte +71 -0
  237. package/dist/svelte/primitives/OneTimeCheckoutButton.svelte +37 -0
  238. package/dist/svelte/primitives/OneTimePaymentStatusBadge.svelte +20 -0
  239. package/dist/svelte/primitives/PaymentWarningBanner.svelte +30 -0
  240. package/dist/svelte/primitives/PricingCard.svelte +356 -0
  241. package/dist/svelte/primitives/PricingSection.svelte +121 -0
  242. package/dist/svelte/primitives/ScheduledChangeBanner.svelte +46 -0
  243. package/dist/svelte/primitives/SegmentControl.svelte +38 -0
  244. package/dist/svelte/primitives/SegmentGroup.svelte +52 -0
  245. package/dist/svelte/primitives/TrialLimitBanner.svelte +32 -0
  246. package/dist/svelte/primitives/shared.d.ts +13 -0
  247. package/dist/svelte/primitives/shared.d.ts.map +1 -0
  248. package/dist/svelte/primitives/shared.js +87 -0
  249. package/dist/svelte/primitives/shared.js.map +1 -0
  250. package/dist/svelte/widgets/BillingPortal.svelte +55 -0
  251. package/dist/svelte/widgets/Product.svelte +35 -0
  252. package/dist/svelte/widgets/ProductRoot.svelte +428 -0
  253. package/dist/svelte/widgets/Subscription.svelte +52 -0
  254. package/dist/svelte/widgets/SubscriptionRoot.svelte +690 -0
  255. package/dist/svelte/widgets/index.d.ts +19 -0
  256. package/dist/svelte/widgets/index.d.ts.map +1 -0
  257. package/dist/svelte/widgets/index.js +16 -0
  258. package/dist/svelte/widgets/index.js.map +1 -0
  259. package/dist/svelte/widgets/productGroupContext.d.ts +6 -0
  260. package/dist/svelte/widgets/productGroupContext.d.ts.map +1 -0
  261. package/dist/svelte/widgets/productGroupContext.js +2 -0
  262. package/dist/svelte/widgets/productGroupContext.js.map +1 -0
  263. package/dist/svelte/widgets/subscriptionContext.d.ts +6 -0
  264. package/dist/svelte/widgets/subscriptionContext.d.ts.map +1 -0
  265. package/dist/svelte/widgets/subscriptionContext.js +2 -0
  266. package/dist/svelte/widgets/subscriptionContext.js.map +1 -0
  267. package/dist/svelte/widgets/types.d.ts +171 -0
  268. package/dist/svelte/widgets/types.d.ts.map +1 -0
  269. package/dist/svelte/widgets/types.js +2 -0
  270. package/dist/svelte/widgets/types.js.map +1 -0
  271. package/package.json +182 -0
  272. package/src/client/helpers.test.ts +139 -0
  273. package/src/client/helpers.ts +51 -0
  274. package/src/client/index.test.ts +1554 -0
  275. package/src/client/index.ts +1504 -0
  276. package/src/client/parsers.test.ts +1017 -0
  277. package/src/client/parsers.ts +182 -0
  278. package/src/client/polyfill.ts +2 -0
  279. package/src/component/_generated/api.ts +52 -0
  280. package/src/component/_generated/component.ts +619 -0
  281. package/src/component/_generated/dataModel.ts +60 -0
  282. package/src/component/_generated/server.ts +156 -0
  283. package/src/component/convex.config.ts +3 -0
  284. package/src/component/lib.test.ts +1359 -0
  285. package/src/component/lib.ts +726 -0
  286. package/src/component/schema.ts +112 -0
  287. package/src/component/util.test.ts +281 -0
  288. package/src/component/util.ts +228 -0
  289. package/src/core/catalog.test.ts +212 -0
  290. package/src/core/catalog.ts +119 -0
  291. package/src/core/index.ts +8 -0
  292. package/src/core/markdown.test.ts +43 -0
  293. package/src/core/markdown.ts +26 -0
  294. package/src/core/payments.test.ts +69 -0
  295. package/src/core/payments.ts +33 -0
  296. package/src/core/pendingCheckout.test.ts +44 -0
  297. package/src/core/pendingCheckout.ts +40 -0
  298. package/src/core/resolver.test.ts +283 -0
  299. package/src/core/resolver.ts +160 -0
  300. package/src/core/selectors.test.ts +119 -0
  301. package/src/core/selectors.ts +35 -0
  302. package/src/core/subscriptionUpdate.test.ts +164 -0
  303. package/src/core/subscriptionUpdate.ts +102 -0
  304. package/src/core/types.ts +220 -0
  305. package/src/design-system/README.md +40 -0
  306. package/src/design-system/base.css +27 -0
  307. package/src/design-system/colors/color-utils.ts +110 -0
  308. package/src/design-system/colors/config.ts +282 -0
  309. package/src/design-system/colors/index.ts +2 -0
  310. package/src/design-system/colors/utilities.css +2328 -0
  311. package/src/design-system/components/badges.css +65 -0
  312. package/src/design-system/components/buttons.css +256 -0
  313. package/src/design-system/components/dialog.css +218 -0
  314. package/src/design-system/components/icon-buttons.css +115 -0
  315. package/src/design-system/components/inputs.css +94 -0
  316. package/src/design-system/components/links.css +53 -0
  317. package/src/design-system/components/prose.css +67 -0
  318. package/src/design-system/components/segment-control.css +303 -0
  319. package/src/design-system/index.css +21 -0
  320. package/src/design-system/rounded/config.ts +91 -0
  321. package/src/design-system/rounded/index.ts +1 -0
  322. package/src/design-system/rounded/utilities.css +37 -0
  323. package/src/design-system/typography/config.ts +340 -0
  324. package/src/design-system/typography/index.ts +2 -0
  325. package/src/design-system/typography/tokens.ts +148 -0
  326. package/src/design-system/typography/utilities.css +728 -0
  327. package/src/library.css +20 -0
  328. package/src/react/hooks/useCheckoutSuccessParams.ts +7 -0
  329. package/src/react/index.tsx +47 -0
  330. package/src/react/primitives/BillingGate.tsx +26 -0
  331. package/src/react/primitives/BillingToggle.tsx +29 -0
  332. package/src/react/primitives/CheckoutButton.tsx +47 -0
  333. package/src/react/primitives/CheckoutSuccessSummary.tsx +36 -0
  334. package/src/react/primitives/CustomerPortalButton.tsx +50 -0
  335. package/src/react/primitives/NumberInput.tsx +83 -0
  336. package/src/react/primitives/OneTimeCheckoutButton.tsx +27 -0
  337. package/src/react/primitives/OneTimePaymentStatusBadge.tsx +18 -0
  338. package/src/react/primitives/PaymentWarningBanner.tsx +33 -0
  339. package/src/react/primitives/PricingCard.tsx +421 -0
  340. package/src/react/primitives/PricingSection.tsx +129 -0
  341. package/src/react/primitives/ScheduledChangeBanner.tsx +52 -0
  342. package/src/react/primitives/SegmentControl.tsx +32 -0
  343. package/src/react/primitives/SegmentGroup.tsx +53 -0
  344. package/src/react/primitives/TrialLimitBanner.tsx +32 -0
  345. package/src/react/shared.ts +138 -0
  346. package/src/react/widgets/BillingPortal.tsx +56 -0
  347. package/src/react/widgets/ProductItem.tsx +26 -0
  348. package/src/react/widgets/ProductRoot.tsx +441 -0
  349. package/src/react/widgets/SubscriptionItem.tsx +71 -0
  350. package/src/react/widgets/SubscriptionRoot.tsx +759 -0
  351. package/src/react/widgets/index.ts +36 -0
  352. package/src/react/widgets/productGroupContext.ts +10 -0
  353. package/src/react/widgets/subscriptionContext.ts +10 -0
  354. package/src/react/widgets/types.ts +179 -0
  355. package/src/svelte/index.ts +43 -0
  356. package/src/svelte/primitives/BillingGate.svelte +28 -0
  357. package/src/svelte/primitives/BillingToggle.svelte +27 -0
  358. package/src/svelte/primitives/CheckoutButton.svelte +60 -0
  359. package/src/svelte/primitives/CheckoutSuccessSummary.svelte +34 -0
  360. package/src/svelte/primitives/CustomerPortalButton.svelte +60 -0
  361. package/src/svelte/primitives/NumberInput.svelte +71 -0
  362. package/src/svelte/primitives/OneTimeCheckoutButton.svelte +37 -0
  363. package/src/svelte/primitives/OneTimePaymentStatusBadge.svelte +20 -0
  364. package/src/svelte/primitives/PaymentWarningBanner.svelte +30 -0
  365. package/src/svelte/primitives/PricingCard.svelte +356 -0
  366. package/src/svelte/primitives/PricingSection.svelte +121 -0
  367. package/src/svelte/primitives/ScheduledChangeBanner.svelte +46 -0
  368. package/src/svelte/primitives/SegmentControl.svelte +38 -0
  369. package/src/svelte/primitives/SegmentGroup.svelte +52 -0
  370. package/src/svelte/primitives/TrialLimitBanner.svelte +32 -0
  371. package/src/svelte/primitives/shared.ts +113 -0
  372. package/src/svelte/svelte.d.ts +6 -0
  373. package/src/svelte/widgets/BillingPortal.svelte +55 -0
  374. package/src/svelte/widgets/Product.svelte +35 -0
  375. package/src/svelte/widgets/ProductRoot.svelte +428 -0
  376. package/src/svelte/widgets/Subscription.svelte +52 -0
  377. package/src/svelte/widgets/SubscriptionRoot.svelte +690 -0
  378. package/src/svelte/widgets/index.ts +36 -0
  379. package/src/svelte/widgets/productGroupContext.ts +7 -0
  380. package/src/svelte/widgets/subscriptionContext.ts +7 -0
  381. package/src/svelte/widgets/types.ts +179 -0
  382. package/src/tailwind.css +6 -0
  383. package/src/test.ts +18 -0
@@ -0,0 +1,82 @@
1
+ /** All billing cycles supported by the Creem API, in display order. */
2
+ export const SUPPORTED_RECURRING_CYCLES = [
3
+ "every-month",
4
+ "every-three-months",
5
+ "every-six-months",
6
+ "every-year",
7
+ ];
8
+ const PLAN_CATEGORIES = [
9
+ "free",
10
+ "trial",
11
+ "paid",
12
+ "enterprise",
13
+ "custom",
14
+ ];
15
+ const BILLING_TYPES = ["recurring", "onetime", "custom"];
16
+ const PLAN_CATEGORY_SET = new Set(PLAN_CATEGORIES);
17
+ const BILLING_TYPE_SET = new Set(BILLING_TYPES);
18
+ const RECURRING_CYCLE_SET = new Set(SUPPORTED_RECURRING_CYCLES);
19
+ /** Type guard: check if a string is a supported Creem billing cycle. */
20
+ export const isSupportedRecurringCycle = (value) => RECURRING_CYCLE_SET.has(value);
21
+ /** Normalize a billing cycle string to a `RecurringCycle`. Returns `"custom"` for unrecognized values, `undefined` for nullish. */
22
+ export const normalizeRecurringCycle = (value) => {
23
+ if (!value) {
24
+ return undefined;
25
+ }
26
+ if (isSupportedRecurringCycle(value)) {
27
+ return value;
28
+ }
29
+ return "custom";
30
+ };
31
+ /** Normalize a plan category string. Returns `"custom"` for unrecognized or nullish values. */
32
+ export const normalizePlanCategory = (value) => {
33
+ if (!value) {
34
+ return "custom";
35
+ }
36
+ if (PLAN_CATEGORY_SET.has(value)) {
37
+ return value;
38
+ }
39
+ return "custom";
40
+ };
41
+ /** Normalize a billing type string. Returns `"custom"` for unrecognized or nullish values. */
42
+ export const normalizeBillingType = (value) => {
43
+ if (!value) {
44
+ return "custom";
45
+ }
46
+ if (BILLING_TYPE_SET.has(value)) {
47
+ return value;
48
+ }
49
+ return "custom";
50
+ };
51
+ /** Normalize all entries in a plan catalog (categories, billing types, cycles). Returns `undefined` for nullish input. */
52
+ export const normalizePlanCatalog = (catalog) => {
53
+ if (!catalog) {
54
+ return undefined;
55
+ }
56
+ return {
57
+ ...catalog,
58
+ plans: catalog.plans.map((plan) => ({
59
+ ...plan,
60
+ category: normalizePlanCategory(plan.category),
61
+ billingType: normalizeBillingType(plan.billingType),
62
+ billingCycles: (plan.billingCycles ?? [])
63
+ .map((cycle) => normalizeRecurringCycle(cycle))
64
+ .flatMap((cycle) => (cycle ? [cycle] : [])),
65
+ })),
66
+ };
67
+ };
68
+ /** Find a plan in the catalog by its `planId`. */
69
+ export const findPlanById = (catalog, planId) => {
70
+ if (!catalog) {
71
+ return undefined;
72
+ }
73
+ return catalog.plans.find((plan) => plan.planId === planId);
74
+ };
75
+ /** Find a plan in the catalog that contains the given Creem product ID in its `creemProductIds`. */
76
+ export const findPlanByProductId = (catalog, productId) => {
77
+ if (!catalog || !productId) {
78
+ return undefined;
79
+ }
80
+ return catalog.plans.find((plan) => Object.values(plan.creemProductIds ?? {}).includes(productId));
81
+ };
82
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export * from "./types.js";
2
+ export * from "./catalog.js";
3
+ export * from "./resolver.js";
4
+ export * from "./selectors.js";
5
+ export * from "./payments.js";
6
+ export * from "./markdown.js";
7
+ export { pendingCheckout } from "./pendingCheckout.js";
8
+ export * from "./subscriptionUpdate.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from "./types.js";
2
+ export * from "./catalog.js";
3
+ export * from "./resolver.js";
4
+ export * from "./selectors.js";
5
+ export * from "./payments.js";
6
+ export * from "./markdown.js";
7
+ export { pendingCheckout } from "./pendingCheckout.js";
8
+ export * from "./subscriptionUpdate.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Render a markdown string to HTML.
3
+ * Intended for short product/plan descriptions synced from Creem.
4
+ * Returns an empty string for nullish input.
5
+ */
6
+ export declare function renderMarkdown(md: string | undefined | null): string;
7
+ /**
8
+ * Render a markdown string to inline HTML (no wrapping `<p>` tags).
9
+ * Useful for single-line titles or short labels.
10
+ */
11
+ export declare function renderMarkdownInline(md: string | undefined | null): string;
12
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAGpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAG1E"}
@@ -0,0 +1,26 @@
1
+ import { Marked } from "marked";
2
+ const marked = new Marked({
3
+ async: false,
4
+ gfm: true,
5
+ breaks: true,
6
+ });
7
+ /**
8
+ * Render a markdown string to HTML.
9
+ * Intended for short product/plan descriptions synced from Creem.
10
+ * Returns an empty string for nullish input.
11
+ */
12
+ export function renderMarkdown(md) {
13
+ if (!md)
14
+ return "";
15
+ return marked.parse(md);
16
+ }
17
+ /**
18
+ * Render a markdown string to inline HTML (no wrapping `<p>` tags).
19
+ * Useful for single-line titles or short labels.
20
+ */
21
+ export function renderMarkdownInline(md) {
22
+ if (!md)
23
+ return "";
24
+ return marked.parseInline(md);
25
+ }
26
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;IACxB,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAA6B;IAC1D,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAW,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAA6B;IAChE,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAW,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { CheckoutSuccessParams } from "./types.js";
2
+ /**
3
+ * Parse Creem checkout success query parameters from a URL search string.
4
+ * Call on your success page to extract checkout/order/customer/product IDs.
5
+ *
6
+ * @param search - URL search string (e.g. `window.location.search`) or `URLSearchParams` instance
7
+ */
8
+ export declare const parseCheckoutSuccessParams: (search: string | URLSearchParams) => CheckoutSuccessParams;
9
+ /** Check if the parsed params contain the minimum required fields for a valid checkout success (checkoutId + orderId). */
10
+ export declare const hasCheckoutSuccessParams: (params: CheckoutSuccessParams) => boolean;
11
+ //# sourceMappingURL=payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/core/payments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAUxD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GACrC,QAAQ,MAAM,GAAG,eAAe,KAC/B,qBAUF,CAAC;AAEF,0HAA0H;AAC1H,eAAO,MAAM,wBAAwB,GAAI,QAAQ,qBAAqB,YACxB,CAAC"}
@@ -0,0 +1,27 @@
1
+ const getSearchParams = (search) => {
2
+ if (search instanceof URLSearchParams) {
3
+ return search;
4
+ }
5
+ const raw = search.startsWith("?") ? search.slice(1) : search;
6
+ return new URLSearchParams(raw);
7
+ };
8
+ /**
9
+ * Parse Creem checkout success query parameters from a URL search string.
10
+ * Call on your success page to extract checkout/order/customer/product IDs.
11
+ *
12
+ * @param search - URL search string (e.g. `window.location.search`) or `URLSearchParams` instance
13
+ */
14
+ export const parseCheckoutSuccessParams = (search) => {
15
+ const params = getSearchParams(search);
16
+ return {
17
+ checkoutId: params.get("checkout_id") ?? undefined,
18
+ orderId: params.get("order_id") ?? undefined,
19
+ customerId: params.get("customer_id") ?? undefined,
20
+ productId: params.get("product_id") ?? undefined,
21
+ requestId: params.get("request_id") ?? undefined,
22
+ signature: params.get("signature") ?? undefined,
23
+ };
24
+ };
25
+ /** Check if the parsed params contain the minimum required fields for a valid checkout success (checkoutId + orderId). */
26
+ export const hasCheckoutSuccessParams = (params) => Boolean(params.checkoutId && params.orderId);
27
+ //# sourceMappingURL=payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/core/payments.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,CAAC,MAAgC,EAAmB,EAAE;IAC5E,IAAI,MAAM,YAAY,eAAe,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,MAAgC,EACT,EAAE;IACzB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,SAAS;QAClD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS;QAC5C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,SAAS;QAClD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS;QAChD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS;QAChD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,SAAS;KAChD,CAAC;AACJ,CAAC,CAAC;AAEF,0HAA0H;AAC1H,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAA6B,EAAE,EAAE,CACxE,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { CheckoutIntent } from "./types.js";
2
+ /**
3
+ * Tiny sessionStorage-based helper for the "save intent → sign in → resume" pattern.
4
+ *
5
+ * Usage:
6
+ * 1. In `onBeforeCheckout`, call `pendingCheckout.save(intent)` then open sign-in
7
+ * 2. After auth completes, call `pendingCheckout.load()` — returns the intent and auto-clears
8
+ * 3. Resume checkout with the loaded intent (e.g. call `checkouts.create` manually)
9
+ */
10
+ export declare const pendingCheckout: {
11
+ save(intent: CheckoutIntent): void;
12
+ load(): CheckoutIntent | null;
13
+ clear(): void;
14
+ };
15
+ //# sourceMappingURL=pendingCheckout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingCheckout.d.ts","sourceRoot":"","sources":["../../src/core/pendingCheckout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;iBACb,cAAc,GAAG,IAAI;YAQ1B,cAAc,GAAG,IAAI;aAWpB,IAAI;CAOd,CAAC"}
@@ -0,0 +1,40 @@
1
+ const STORAGE_KEY = "creem:pending-checkout";
2
+ /**
3
+ * Tiny sessionStorage-based helper for the "save intent → sign in → resume" pattern.
4
+ *
5
+ * Usage:
6
+ * 1. In `onBeforeCheckout`, call `pendingCheckout.save(intent)` then open sign-in
7
+ * 2. After auth completes, call `pendingCheckout.load()` — returns the intent and auto-clears
8
+ * 3. Resume checkout with the loaded intent (e.g. call `checkouts.create` manually)
9
+ */
10
+ export const pendingCheckout = {
11
+ save(intent) {
12
+ try {
13
+ sessionStorage.setItem(STORAGE_KEY, JSON.stringify(intent));
14
+ }
15
+ catch {
16
+ // sessionStorage unavailable (SSR, private browsing quota) — silently ignore
17
+ }
18
+ },
19
+ load() {
20
+ try {
21
+ const raw = sessionStorage.getItem(STORAGE_KEY);
22
+ if (!raw)
23
+ return null;
24
+ sessionStorage.removeItem(STORAGE_KEY);
25
+ return JSON.parse(raw);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ },
31
+ clear() {
32
+ try {
33
+ sessionStorage.removeItem(STORAGE_KEY);
34
+ }
35
+ catch {
36
+ // silently ignore
37
+ }
38
+ },
39
+ };
40
+ //# sourceMappingURL=pendingCheckout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingCheckout.js","sourceRoot":"","sources":["../../src/core/pendingCheckout.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,CAAC,MAAsB;QACzB,IAAI,CAAC;YACH,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,6EAA6E;QAC/E,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YACH,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { BillingResolverInput, BillingSnapshot } from "./types.js";
2
+ /**
3
+ * Resolve a `BillingSnapshot` from subscription, catalog, and payment data.
4
+ * This is the core billing state resolver — determines the active plan, category,
5
+ * available actions, and metadata based on the current subscription state.
6
+ *
7
+ * Used internally by `creem.getBillingSnapshot()`. Can also be called directly
8
+ * for custom billing UIs that don't use the Creem class.
9
+ */
10
+ export declare const resolveBillingSnapshot: (input: BillingResolverInput) => BillingSnapshot;
11
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,oBAAoB,EACpB,eAAe,EAKhB,MAAM,YAAY,CAAC;AA0FpB;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,oBAAoB,KAC1B,eA6CF,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { findPlanById, findPlanByProductId, normalizePlanCatalog, normalizeRecurringCycle, } from "./catalog.js";
2
+ const toCategoryFromSubscription = (subscription) => {
3
+ const status = subscription?.status;
4
+ if (status === "trialing") {
5
+ return "trial";
6
+ }
7
+ if (status === "active" ||
8
+ status === "scheduled_cancel" ||
9
+ status === "past_due" ||
10
+ status === "canceled") {
11
+ return "paid";
12
+ }
13
+ return "custom";
14
+ };
15
+ const toBillingType = (plan, input) => {
16
+ if (plan?.billingType) {
17
+ return plan.billingType;
18
+ }
19
+ if (input.payment) {
20
+ return "onetime";
21
+ }
22
+ if (input.currentSubscription) {
23
+ return "recurring";
24
+ }
25
+ return "custom";
26
+ };
27
+ const buildActions = (input, plan, billingType) => {
28
+ const actions = new Set();
29
+ const subscription = input.currentSubscription;
30
+ if (plan?.category === "enterprise") {
31
+ actions.add("contact_sales");
32
+ return Array.from(actions);
33
+ }
34
+ if (billingType === "onetime") {
35
+ actions.add("checkout");
36
+ return Array.from(actions);
37
+ }
38
+ if (!subscription) {
39
+ actions.add("checkout");
40
+ return Array.from(actions);
41
+ }
42
+ actions.add("portal");
43
+ if (subscription.status === "active" ||
44
+ subscription.status === "trialing" ||
45
+ subscription.status === "scheduled_cancel") {
46
+ actions.add("cancel");
47
+ }
48
+ if (subscription.status === "canceled" ||
49
+ subscription.status === "scheduled_cancel") {
50
+ actions.add("reactivate");
51
+ }
52
+ if ((plan?.billingCycles?.length ?? 0) > 1) {
53
+ actions.add("switch_interval");
54
+ }
55
+ if ((plan?.pricingModel === "seat" || subscription.seats != null) &&
56
+ billingType === "recurring") {
57
+ actions.add("update_seats");
58
+ }
59
+ return Array.from(actions);
60
+ };
61
+ /**
62
+ * Resolve a `BillingSnapshot` from subscription, catalog, and payment data.
63
+ * This is the core billing state resolver — determines the active plan, category,
64
+ * available actions, and metadata based on the current subscription state.
65
+ *
66
+ * Used internally by `creem.getBillingSnapshot()`. Can also be called directly
67
+ * for custom billing UIs that don't use the Creem class.
68
+ */
69
+ export const resolveBillingSnapshot = (input) => {
70
+ const catalog = normalizePlanCatalog(input.catalog);
71
+ const subscription = input.currentSubscription ?? null;
72
+ const planFromSubscription = findPlanByProductId(catalog, subscription?.productId);
73
+ const fallbackPlan = catalog?.defaultPlanId
74
+ ? findPlanById(catalog, catalog.defaultPlanId)
75
+ : undefined;
76
+ const activePlan = planFromSubscription ?? fallbackPlan;
77
+ const billingType = toBillingType(activePlan, input);
78
+ const recurringCycle = normalizeRecurringCycle(subscription?.recurringInterval);
79
+ const availableBillingCycles = activePlan?.billingCycles && activePlan.billingCycles.length > 0
80
+ ? activePlan.billingCycles
81
+ : recurringCycle
82
+ ? [recurringCycle]
83
+ : [];
84
+ return {
85
+ resolvedAt: input.now ?? new Date().toISOString(),
86
+ catalogVersion: catalog?.version,
87
+ activePlanId: activePlan?.planId ?? null,
88
+ activeCategory: subscription?.status === "trialing"
89
+ ? "trial"
90
+ : (activePlan?.category ?? toCategoryFromSubscription(subscription)),
91
+ billingType,
92
+ recurringCycle,
93
+ availableBillingCycles,
94
+ subscriptionState: subscription?.status,
95
+ seats: subscription?.seats ?? undefined,
96
+ payment: input.payment ?? null,
97
+ availableActions: buildActions(input, activePlan, billingType),
98
+ metadata: {
99
+ cancelAtPeriodEnd: subscription?.cancelAtPeriodEnd ?? false,
100
+ currentPeriodEnd: subscription?.currentPeriodEnd ?? null,
101
+ trialEnd: subscription?.trialEnd ?? null,
102
+ userContext: input.userContext ?? {},
103
+ },
104
+ };
105
+ };
106
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AvailableAction, BillingSnapshot, OneTimePaymentStatus } from "./types.js";
2
+ /** Check whether a specific action is available in the given billing snapshot. */
3
+ export declare const hasBillingAction: (snapshot: BillingSnapshot, action: AvailableAction) => boolean;
4
+ /** Check whether the billing snapshot represents a one-time purchase (not a subscription). */
5
+ export declare const isOneTimeBilling: (snapshot: BillingSnapshot) => boolean;
6
+ /** Check whether the billing snapshot represents an enterprise plan. */
7
+ export declare const isEnterpriseBilling: (snapshot: BillingSnapshot) => boolean;
8
+ /** Whether the billing cycle toggle (e.g. Monthly/Yearly) should be shown in the UI. */
9
+ export declare const shouldShowBillingCycleToggle: (snapshot: BillingSnapshot) => boolean;
10
+ /** Whether the payment status is terminal (paid, refunded, or partially refunded). */
11
+ export declare const isTerminalPaymentStatus: (status: OneTimePaymentStatus) => boolean;
12
+ //# sourceMappingURL=selectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/core/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAQpB,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,eAAe,EACzB,QAAQ,eAAe,YACsB,CAAC;AAEhD,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB,GAAI,UAAU,eAAe,YACtB,CAAC;AAErC,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,GAAI,UAAU,eAAe,YACnB,CAAC;AAE3C,wFAAwF;AACxF,eAAO,MAAM,4BAA4B,GAAI,UAAU,eAAe,YAGvB,CAAC;AAEhD,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,oBAAoB,YAC7B,CAAC"}
@@ -0,0 +1,18 @@
1
+ const TERMINAL_PAYMENT_STATUSES = new Set([
2
+ "paid",
3
+ "refunded",
4
+ "partially_refunded",
5
+ ]);
6
+ /** Check whether a specific action is available in the given billing snapshot. */
7
+ export const hasBillingAction = (snapshot, action) => snapshot.availableActions.includes(action);
8
+ /** Check whether the billing snapshot represents a one-time purchase (not a subscription). */
9
+ export const isOneTimeBilling = (snapshot) => snapshot.billingType === "onetime";
10
+ /** Check whether the billing snapshot represents an enterprise plan. */
11
+ export const isEnterpriseBilling = (snapshot) => snapshot.activeCategory === "enterprise";
12
+ /** Whether the billing cycle toggle (e.g. Monthly/Yearly) should be shown in the UI. */
13
+ export const shouldShowBillingCycleToggle = (snapshot) => snapshot.billingType === "recurring" &&
14
+ snapshot.availableBillingCycles.length > 1 &&
15
+ hasBillingAction(snapshot, "switch_interval");
16
+ /** Whether the payment status is terminal (paid, refunded, or partially refunded). */
17
+ export const isTerminalPaymentStatus = (status) => TERMINAL_PAYMENT_STATUSES.has(status);
18
+ //# sourceMappingURL=selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/core/selectors.ts"],"names":[],"mappings":"AAMA,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAuB;IAC9D,MAAM;IACN,UAAU;IACV,oBAAoB;CACrB,CAAC,CAAC;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAAyB,EACzB,MAAuB,EACvB,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEhD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAyB,EAAE,EAAE,CAC5D,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC;AAErC,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAyB,EAAE,EAAE,CAC/D,QAAQ,CAAC,cAAc,KAAK,YAAY,CAAC;AAE3C,wFAAwF;AACxF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAyB,EAAE,EAAE,CACxE,QAAQ,CAAC,WAAW,KAAK,WAAW;IACpC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC;IAC1C,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAEhD,sFAAsF;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAA4B,EAAE,EAAE,CACtE,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { UpdateBehavior } from "./types.js";
2
+ export type UpdateSummaryInput = {
3
+ kind: "plan-switch" | "seat-update";
4
+ updateBehavior: UpdateBehavior;
5
+ currentLabel: string;
6
+ newLabel: string;
7
+ currentPeriodEnd?: string | null;
8
+ isTrialing?: boolean;
9
+ trialEnd?: string | null;
10
+ };
11
+ export type UpdateSummary = {
12
+ title: string;
13
+ description: string;
14
+ currentLabel: string;
15
+ newLabel: string;
16
+ dateNote: string | null;
17
+ confirmLabel: string;
18
+ };
19
+ export declare const buildUpdateSummary: (input: UpdateSummaryInput) => UpdateSummary;
20
+ //# sourceMappingURL=subscriptionUpdate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionUpdate.d.ts","sourceRoot":"","sources":["../../src/core/subscriptionUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AA4CF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,kBAAkB,KACxB,aAoCF,CAAC"}
@@ -0,0 +1,64 @@
1
+ const getBehaviorDescription = (updateBehavior) => {
2
+ switch (updateBehavior) {
3
+ case "proration-charge-immediately":
4
+ return "The price difference will be prorated and charged immediately.";
5
+ case "proration-charge":
6
+ return "The price difference will be prorated and applied to your next invoice.";
7
+ case "proration-none":
8
+ return "The new price will take effect at your next billing cycle.";
9
+ }
10
+ };
11
+ const formatPeriodEnd = (iso, updateBehavior) => {
12
+ const date = new Date(iso);
13
+ if (isNaN(date.getTime()))
14
+ return null;
15
+ const formatted = date.toLocaleDateString(undefined, {
16
+ month: "short",
17
+ day: "numeric",
18
+ year: "numeric",
19
+ });
20
+ if (updateBehavior === "proration-charge") {
21
+ return `Your next invoice is on ${formatted}.`;
22
+ }
23
+ if (updateBehavior === "proration-none") {
24
+ return `Your next billing cycle starts on ${formatted}.`;
25
+ }
26
+ return null;
27
+ };
28
+ const formatTrialEnd = (iso) => {
29
+ const date = new Date(iso);
30
+ if (isNaN(date.getTime()))
31
+ return null;
32
+ const formatted = date.toLocaleDateString(undefined, {
33
+ month: "short",
34
+ day: "numeric",
35
+ year: "numeric",
36
+ });
37
+ return `Your trial continues until ${formatted}. The new price will apply once the trial ends.`;
38
+ };
39
+ export const buildUpdateSummary = (input) => {
40
+ const { kind, updateBehavior, currentLabel, newLabel, currentPeriodEnd, isTrialing, trialEnd, } = input;
41
+ if (isTrialing) {
42
+ const trialNote = trialEnd ? formatTrialEnd(trialEnd) : null;
43
+ return {
44
+ title: kind === "plan-switch" ? "Switch plan?" : "Update seats?",
45
+ description: trialNote ??
46
+ "Your free trial will continue. The new price will take effect once the trial ends.",
47
+ currentLabel,
48
+ newLabel,
49
+ dateNote: null,
50
+ confirmLabel: kind === "plan-switch" ? "Confirm switch" : "Confirm update",
51
+ };
52
+ }
53
+ return {
54
+ title: kind === "plan-switch" ? "Switch plan?" : "Update seats?",
55
+ description: getBehaviorDescription(updateBehavior),
56
+ currentLabel,
57
+ newLabel,
58
+ dateNote: currentPeriodEnd
59
+ ? formatPeriodEnd(currentPeriodEnd, updateBehavior)
60
+ : null,
61
+ confirmLabel: kind === "plan-switch" ? "Confirm switch" : "Confirm update",
62
+ };
63
+ };
64
+ //# sourceMappingURL=subscriptionUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionUpdate.js","sourceRoot":"","sources":["../../src/core/subscriptionUpdate.ts"],"names":[],"mappings":"AAqBA,MAAM,sBAAsB,GAAG,CAAC,cAA8B,EAAU,EAAE;IACxE,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,8BAA8B;YACjC,OAAO,gEAAgE,CAAC;QAC1E,KAAK,kBAAkB;YACrB,OAAO,yEAAyE,CAAC;QACnF,KAAK,gBAAgB;YACnB,OAAO,4DAA4D,CAAC;IACxE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,GAAW,EACX,cAA8B,EACf,EAAE;IACjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;QACnD,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IACH,IAAI,cAAc,KAAK,kBAAkB,EAAE,CAAC;QAC1C,OAAO,2BAA2B,SAAS,GAAG,CAAC;IACjD,CAAC;IACD,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;QACxC,OAAO,qCAAqC,SAAS,GAAG,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,GAAW,EAAiB,EAAE;IACpD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;QACnD,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IACH,OAAO,8BAA8B,SAAS,iDAAiD,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAyB,EACV,EAAE;IACjB,MAAM,EACJ,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe;YAChE,WAAW,EACT,SAAS;gBACT,oFAAoF;YACtF,YAAY;YACZ,QAAQ;YACR,QAAQ,EAAE,IAAI;YACd,YAAY,EACV,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe;QAChE,WAAW,EAAE,sBAAsB,CAAC,cAAc,CAAC;QACnD,YAAY;QACZ,QAAQ;QACR,QAAQ,EAAE,gBAAgB;YACxB,CAAC,CAAC,eAAe,CAAC,gBAAgB,EAAE,cAAc,CAAC;YACnD,CAAC,CAAC,IAAI;QACR,YAAY,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;KAC3E,CAAC;AACJ,CAAC,CAAC"}