@bunnyapp/components 1.4.0 → 1.5.0-beta.2

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 (140) hide show
  1. package/dist/cjs/index.js +1458 -1007
  2. package/dist/cjs/src/components/BunnyProvider.d.ts +0 -1
  3. package/dist/cjs/src/components/Checkout/Checkout.d.ts +12 -6
  4. package/dist/cjs/src/components/Invoice/Invoice.d.ts +5 -2
  5. package/dist/cjs/src/components/PaymentForm/PaymentForm.d.ts +1 -2
  6. package/dist/cjs/src/components/PaymentForm/PaymentFormTypes.d.ts +1 -11
  7. package/dist/cjs/src/components/Quote/Quote.d.ts +1 -1
  8. package/dist/cjs/src/components/Quote/Quote.stories.d.ts +5 -0
  9. package/dist/cjs/src/components/QuoteProvider.d.ts +22 -0
  10. package/dist/cjs/src/components/Subscriptions/AddonIndentation.d.ts +8 -0
  11. package/dist/cjs/src/components/Subscriptions/AddonSubscriptionCards.d.ts +7 -0
  12. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/PriceListGrid.d.ts +4 -3
  13. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutBarInput.d.ts +3 -4
  14. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutBarSummarySection.d.ts +2 -3
  15. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutButton.d.ts +2 -1
  16. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/PlanPickerCheckoutBar.d.ts +5 -6
  17. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/EverythingPlanFeatures.d.ts +2 -1
  18. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/PlanAddonsCard.d.ts +11 -0
  19. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/PriceListCardDesktop.d.ts +5 -3
  20. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/PriceListGridDesktop.d.ts +4 -3
  21. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/planManagerUtils.d.ts +2 -2
  22. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerMobile/PriceListCardMobile.d.ts +3 -3
  23. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerMobile/PriceListGridMobile.d.ts +3 -3
  24. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCard.d.ts +4 -2
  25. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardButton.d.ts +2 -2
  26. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardPrice.d.ts +2 -1
  27. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardTitle.d.ts +1 -1
  28. package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/priceListCardUtils.d.ts +1 -2
  29. package/dist/{esm/src/components/Subscriptions/PlanManager/PlanPicker → cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListSelector}/PriceListSelector.d.ts +2 -4
  30. package/dist/cjs/src/components/Subscriptions/QuantityDrawerContainer.d.ts +14 -0
  31. package/dist/cjs/src/components/Subscriptions/quantityChangeDrawer/QuantityChangeGridRow.d.ts +4 -2
  32. package/dist/cjs/src/components/Subscriptions/quantityChangeDrawer/QuantityInput.d.ts +4 -2
  33. package/dist/cjs/src/components/Subscriptions/quantityChangeDrawer/quantityChangeDrawerDesktop/QuantityChangeDrawerDesktop.d.ts +3 -1
  34. package/dist/cjs/src/components/Subscriptions/subscriptionsList/ChangeQuantitiesButton.d.ts +2 -3
  35. package/dist/cjs/src/components/Subscriptions/subscriptionsList/SubscriptionCardActions.d.ts +4 -3
  36. package/dist/cjs/src/components/Subscriptions/subscriptionsList/SubscriptionCardHeader.d.ts +2 -3
  37. package/dist/cjs/src/components/Subscriptions/subscriptionsList/SubscriptionsList.d.ts +2 -3
  38. package/dist/cjs/src/components/Subscriptions/subscriptionsList/subscriptionCardDesktop/SubscriptionCardDesktop.d.ts +3 -3
  39. package/dist/cjs/src/components/Subscriptions/subscriptionsList/subscriptionUtils.d.ts +1 -1
  40. package/dist/cjs/src/components/Transactions/Transactions.d.ts +5 -3
  41. package/dist/cjs/src/components/Transactions/transactionsList/TransactionsListDesktop.d.ts +1 -1
  42. package/dist/cjs/src/components/Transactions/transactionsList/TransactionsListMobile.d.ts +1 -1
  43. package/dist/cjs/src/components/Transactions/transactionsList/utils.d.ts +1 -1
  44. package/dist/cjs/src/{components/Invoice → contexts}/InvoiceQuoteContext.d.ts +2 -2
  45. package/dist/{esm/src/components/Subscriptions → cjs/src/contexts}/SubscriptionsContext.d.ts +0 -4
  46. package/dist/{esm/src/components/Transactions → cjs/src/contexts}/TransactionsListContext.d.ts +3 -2
  47. package/dist/cjs/src/graphql/QuoteRequests.d.ts +17 -2
  48. package/dist/cjs/src/graphql/mutations/quoteAddonCreate.d.ts +7 -0
  49. package/dist/cjs/src/graphql/mutations/quoteChangeCreate.d.ts +8 -0
  50. package/dist/cjs/src/graphql/mutations/quoteChangeDelete.d.ts +6 -0
  51. package/dist/cjs/src/graphql/mutations/quoteChargeDelete.d.ts +2 -1
  52. package/dist/cjs/src/graphql/mutations/quoteChargeUpdate.d.ts +2 -1
  53. package/dist/cjs/src/graphql/mutations/quoteCompose.d.ts +0 -1
  54. package/dist/cjs/src/graphql/mutations/quoteCreate.d.ts +8 -0
  55. package/dist/cjs/src/graphql/mutations/quoteCreateWithDeal.d.ts +10 -0
  56. package/dist/cjs/src/graphql/queries/getAddonPlans.d.ts +7 -0
  57. package/dist/cjs/src/graphql/queries/getFormattedQuote.d.ts +2 -1
  58. package/dist/cjs/src/graphql/queries/getQuote.d.ts +3 -1
  59. package/dist/cjs/src/hooks/quotes/useQuoteCreate.d.ts +9 -0
  60. package/dist/cjs/src/hooks/quotes/useQuoteQuantities.d.ts +14 -0
  61. package/dist/cjs/src/hooks/quotes/useQuoteUpdateFeatureAddon.d.ts +2 -3
  62. package/dist/cjs/src/hooks/useCurrentUserData.d.ts +11 -8
  63. package/dist/cjs/src/hooks/usePaymentMethod.d.ts +2 -1
  64. package/dist/cjs/src/hooks/usePriceListChangeOptions.d.ts +6 -0
  65. package/dist/cjs/src/hooks/useToggleAddonQuoteChange.d.ts +7 -0
  66. package/dist/cjs/src/utils/addonPlanUtils.d.ts +6 -0
  67. package/dist/cjs/src/utils/chargeUtils.d.ts +2 -0
  68. package/dist/cjs/src/utils/featureAddonUtils.d.ts +5 -2
  69. package/dist/esm/index.js +1460 -1009
  70. package/dist/esm/src/components/BunnyProvider.d.ts +0 -1
  71. package/dist/esm/src/components/Checkout/Checkout.d.ts +12 -6
  72. package/dist/esm/src/components/Invoice/Invoice.d.ts +5 -2
  73. package/dist/esm/src/components/PaymentForm/PaymentForm.d.ts +1 -2
  74. package/dist/esm/src/components/PaymentForm/PaymentFormTypes.d.ts +1 -11
  75. package/dist/esm/src/components/Quote/Quote.d.ts +1 -1
  76. package/dist/esm/src/components/Quote/Quote.stories.d.ts +5 -0
  77. package/dist/esm/src/components/QuoteProvider.d.ts +22 -0
  78. package/dist/esm/src/components/Subscriptions/AddonIndentation.d.ts +8 -0
  79. package/dist/esm/src/components/Subscriptions/AddonSubscriptionCards.d.ts +7 -0
  80. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/PriceListGrid.d.ts +4 -3
  81. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutBarInput.d.ts +3 -4
  82. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutBarSummarySection.d.ts +2 -3
  83. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutButton.d.ts +2 -1
  84. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/PlanPickerCheckoutBar.d.ts +5 -6
  85. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/EverythingPlanFeatures.d.ts +2 -1
  86. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/PlanAddonsCard.d.ts +11 -0
  87. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/PriceListCardDesktop.d.ts +5 -3
  88. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/PriceListGridDesktop.d.ts +4 -3
  89. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/planManagerUtils.d.ts +2 -2
  90. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerMobile/PriceListCardMobile.d.ts +3 -3
  91. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerMobile/PriceListGridMobile.d.ts +3 -3
  92. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCard.d.ts +4 -2
  93. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardButton.d.ts +2 -2
  94. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardPrice.d.ts +2 -1
  95. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardTitle.d.ts +1 -1
  96. package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/priceListCardUtils.d.ts +1 -2
  97. package/dist/{cjs/src/components/Subscriptions/PlanManager/PlanPicker → esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListSelector}/PriceListSelector.d.ts +2 -4
  98. package/dist/esm/src/components/Subscriptions/QuantityDrawerContainer.d.ts +14 -0
  99. package/dist/esm/src/components/Subscriptions/quantityChangeDrawer/QuantityChangeGridRow.d.ts +4 -2
  100. package/dist/esm/src/components/Subscriptions/quantityChangeDrawer/QuantityInput.d.ts +4 -2
  101. package/dist/esm/src/components/Subscriptions/quantityChangeDrawer/quantityChangeDrawerDesktop/QuantityChangeDrawerDesktop.d.ts +3 -1
  102. package/dist/esm/src/components/Subscriptions/subscriptionsList/ChangeQuantitiesButton.d.ts +2 -3
  103. package/dist/esm/src/components/Subscriptions/subscriptionsList/SubscriptionCardActions.d.ts +4 -3
  104. package/dist/esm/src/components/Subscriptions/subscriptionsList/SubscriptionCardHeader.d.ts +2 -3
  105. package/dist/esm/src/components/Subscriptions/subscriptionsList/SubscriptionsList.d.ts +2 -3
  106. package/dist/esm/src/components/Subscriptions/subscriptionsList/subscriptionCardDesktop/SubscriptionCardDesktop.d.ts +3 -3
  107. package/dist/esm/src/components/Subscriptions/subscriptionsList/subscriptionUtils.d.ts +1 -1
  108. package/dist/esm/src/components/Transactions/Transactions.d.ts +5 -3
  109. package/dist/esm/src/components/Transactions/transactionsList/TransactionsListDesktop.d.ts +1 -1
  110. package/dist/esm/src/components/Transactions/transactionsList/TransactionsListMobile.d.ts +1 -1
  111. package/dist/esm/src/components/Transactions/transactionsList/utils.d.ts +1 -1
  112. package/dist/esm/src/{components/Invoice → contexts}/InvoiceQuoteContext.d.ts +2 -2
  113. package/dist/{cjs/src/components/Subscriptions → esm/src/contexts}/SubscriptionsContext.d.ts +0 -4
  114. package/dist/{cjs/src/components/Transactions → esm/src/contexts}/TransactionsListContext.d.ts +3 -2
  115. package/dist/esm/src/graphql/QuoteRequests.d.ts +17 -2
  116. package/dist/esm/src/graphql/mutations/quoteAddonCreate.d.ts +7 -0
  117. package/dist/esm/src/graphql/mutations/quoteChangeCreate.d.ts +8 -0
  118. package/dist/esm/src/graphql/mutations/quoteChangeDelete.d.ts +6 -0
  119. package/dist/esm/src/graphql/mutations/quoteChargeDelete.d.ts +2 -1
  120. package/dist/esm/src/graphql/mutations/quoteChargeUpdate.d.ts +2 -1
  121. package/dist/esm/src/graphql/mutations/quoteCompose.d.ts +0 -1
  122. package/dist/esm/src/graphql/mutations/quoteCreate.d.ts +8 -0
  123. package/dist/esm/src/graphql/mutations/quoteCreateWithDeal.d.ts +10 -0
  124. package/dist/esm/src/graphql/queries/getAddonPlans.d.ts +7 -0
  125. package/dist/esm/src/graphql/queries/getFormattedQuote.d.ts +2 -1
  126. package/dist/esm/src/graphql/queries/getQuote.d.ts +3 -1
  127. package/dist/esm/src/hooks/quotes/useQuoteCreate.d.ts +9 -0
  128. package/dist/esm/src/hooks/quotes/useQuoteQuantities.d.ts +14 -0
  129. package/dist/esm/src/hooks/quotes/useQuoteUpdateFeatureAddon.d.ts +2 -3
  130. package/dist/esm/src/hooks/useCurrentUserData.d.ts +11 -8
  131. package/dist/esm/src/hooks/usePaymentMethod.d.ts +2 -1
  132. package/dist/esm/src/hooks/usePriceListChangeOptions.d.ts +6 -0
  133. package/dist/esm/src/hooks/useToggleAddonQuoteChange.d.ts +7 -0
  134. package/dist/esm/src/utils/addonPlanUtils.d.ts +6 -0
  135. package/dist/esm/src/utils/chargeUtils.d.ts +2 -0
  136. package/dist/esm/src/utils/featureAddonUtils.d.ts +5 -2
  137. package/dist/index.d.ts +8 -4
  138. package/package.json +2 -2
  139. package/dist/cjs/src/components/QuotePreviewProvider.d.ts +0 -17
  140. package/dist/esm/src/components/QuotePreviewProvider.d.ts +0 -17
package/dist/cjs/index.js CHANGED
@@ -56,7 +56,7 @@ function styleInject(css, ref) {
56
56
  }
57
57
  }
58
58
 
59
- var css_248z = ":root {\n --row-background: #ffffff;\n --row-background-alternate: rgba(100, 116, 139, 0.04);\n --row-background-dark: #121212;\n --row-background-alternate-dark: #1e1e1e;\n --bunny-blue-500: #3b82f6;\n --bunny-blue-200: #bfdbfe;\n --bunny-green-600: #059669;\n --bunny-green-200: #a7f3d0;\n --bunny-red-500: #ef4444;\n --bunny-red-200: #fecaca;\n --bunny-orange-500: #f97316;\n --bunny-orange-200: #fed7aa;\n --bunny-yellow-500: #f59e0b;\n --bunny-yellow-200: #fde68a;\n --bunny-purple-500: #8b5cf6;\n --bunny-purple-200: #ddd6fe;\n --bunny-black: #000000;\n}\n.bunny-component-wrapper {\n box-sizing: border-box;\n}\n.bunny-component-wrapper * {\n box-sizing: border-box;\n}\n.hidden {\n display: none;\n}\n.bunny-show-on-hover {\n opacity: 0;\n}\n.bunny-show-on-hover-container:hover .bunny-show-on-hover {\n opacity: 1;\n}\n.has-tooltip:hover .tooltip {\n visibility: visible;\n z-index: 100;\n}\n.pdf-only {\n display: none !important;\n}\n.notes p {\n margin: 0;\n padding: 0;\n padding-bottom: 0.25rem;\n}\n.bunny-icon-path {\n transition: fill 0.3s;\n}\n.bunny-shadow-padding-x {\n padding-right: 1rem;\n padding-left: 1rem;\n}\n.bunny-shadow-padding-xb {\n padding-right: 1rem;\n padding-left: 1rem;\n padding-bottom: 0.5rem;\n}\n.content-container {\n width: 100%;\n margin: 0 auto;\n}\n@media (min-width: 1220px) {\n .content-container {\n width: 1220px !important;\n margin: 0 auto;\n }\n}\n@media (min-width: 768px) {\n .bunny-shadow-padding-x {\n padding-right: 2rem;\n padding-left: 2rem;\n }\n .bunny-shadow-padding-xb {\n padding-right: 2rem;\n padding-left: 2rem;\n padding-bottom: 0.5rem;\n }\n .sm\\:flex {\n display: flex !important;\n }\n .sm\\:hidden {\n display: none !important;\n }\n}\n.bunny-shadow,\n.bunny-shadow-md {\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n}\n.bunny-fixed {\n position: fixed;\n}\n.bunny-absolute {\n position: absolute;\n}\n.bunny-relative {\n position: relative;\n}\n.bunny-sticky {\n position: sticky;\n}\n.bunny-bottom-0 {\n bottom: 0px;\n}\n.bunny-bottom-4 {\n bottom: 1rem;\n}\n.bunny-left-0 {\n left: 0px;\n}\n.bunny-right-0 {\n right: 0px;\n}\n.bunny-top-0 {\n top: 0px;\n}\n.bunny-col-span-1 {\n grid-column: span 1 / span 1;\n}\n.bunny-col-span-full {\n grid-column: 1 / -1;\n}\n.bunny-m-0 {\n margin: 0px;\n}\n.bunny-mx-0 {\n margin-left: 0px;\n margin-right: 0px;\n}\n.bunny-mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.bunny-my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.bunny-my-24 {\n margin-top: 6rem;\n margin-bottom: 6rem;\n}\n.bunny-my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.bunny-mb-2 {\n margin-bottom: 0.5rem;\n}\n.bunny-mb-4 {\n margin-bottom: 1rem;\n}\n.bunny-mb-8 {\n margin-bottom: 2rem;\n}\n.bunny-mt-2 {\n margin-top: 0.5rem;\n}\n.bunny-mt-24 {\n margin-top: 6rem;\n}\n.bunny-mt-4 {\n margin-top: 1rem;\n}\n.bunny-flex {\n display: flex;\n}\n.bunny-grid {\n display: grid;\n}\n.bunny-contents {\n display: contents;\n}\n.bunny-h-1\\/2 {\n height: 50%;\n}\n.bunny-h-5 {\n height: 1.25rem;\n}\n.bunny-h-8 {\n height: 2rem;\n}\n.bunny-h-full {\n height: 100%;\n}\n.bunny-h-screen {\n height: 100vh;\n}\n.bunny-max-h-\\[calc\\(100vh-10rem\\)\\] {\n max-height: calc(100vh - 10rem);\n}\n.bunny-min-h-0 {\n min-height: 0px;\n}\n.bunny-w-1\\/2 {\n width: 50%;\n}\n.bunny-w-3\\/5 {\n width: 60%;\n}\n.bunny-w-full {\n width: 100%;\n}\n.bunny-w-screen {\n width: 100vw;\n}\n.bunny-flex-1 {\n flex: 1 1 0%;\n}\n.bunny-shrink {\n flex-shrink: 1;\n}\n.bunny-shrink-0 {\n flex-shrink: 0;\n}\n.bunny-grow {\n flex-grow: 1;\n}\n.bunny-cursor-pointer {\n cursor: pointer;\n}\n.bunny-grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.bunny-flex-row {\n flex-direction: row;\n}\n.bunny-flex-col {\n flex-direction: column;\n}\n.bunny-flex-wrap {\n flex-wrap: wrap;\n}\n.bunny-items-start {\n align-items: flex-start;\n}\n.bunny-items-end {\n align-items: flex-end;\n}\n.bunny-items-center {\n align-items: center;\n}\n.bunny-justify-end {\n justify-content: flex-end;\n}\n.bunny-justify-center {\n justify-content: center;\n}\n.bunny-justify-between {\n justify-content: space-between;\n}\n.bunny-gap-0 {\n gap: 0px;\n}\n.bunny-gap-1 {\n gap: 0.25rem;\n}\n.bunny-gap-2 {\n gap: 0.5rem;\n}\n.bunny-gap-3 {\n gap: 0.75rem;\n}\n.bunny-gap-4 {\n gap: 1rem;\n}\n.bunny-gap-6 {\n gap: 1.5rem;\n}\n.bunny-gap-8 {\n gap: 2rem;\n}\n.bunny-space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.bunny-space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.bunny-space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.bunny-overflow-auto {\n overflow: auto;\n}\n.bunny-overflow-hidden {\n overflow: hidden;\n}\n.bunny-overflow-visible {\n overflow: visible;\n}\n.bunny-overflow-y-auto {\n overflow-y: auto;\n}\n.bunny-whitespace-nowrap {\n white-space: nowrap;\n}\n.bunny-rounded {\n border-radius: 0.25rem;\n}\n.bunny-rounded-full {\n border-radius: 9999px;\n}\n.bunny-rounded-lg {\n border-radius: 0.5rem;\n}\n.bunny-rounded-md {\n border-radius: 0.375rem;\n}\n.bunny-border {\n border-width: 1px;\n}\n.bunny-border-2 {\n border-width: 2px;\n}\n.bunny-border-solid {\n border-style: solid;\n}\n.bunny-border-none {\n border-style: none;\n}\n.bunny-border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.bunny-bg-slate-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));\n}\n.bunny-bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bunny-p-0 {\n padding: 0px;\n}\n.bunny-p-1 {\n padding: 0.25rem;\n}\n.bunny-p-4 {\n padding: 1rem;\n}\n.bunny-px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.bunny-px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.bunny-px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.bunny-py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.bunny-py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.bunny-py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.bunny-pb-2 {\n padding-bottom: 0.5rem;\n}\n.bunny-pb-4 {\n padding-bottom: 1rem;\n}\n.bunny-pb-6 {\n padding-bottom: 1.5rem;\n}\n.bunny-pl-0 {\n padding-left: 0px;\n}\n.bunny-pl-12 {\n padding-left: 3rem;\n}\n.bunny-pl-4 {\n padding-left: 1rem;\n}\n.bunny-pr-4 {\n padding-right: 1rem;\n}\n.bunny-pt-1 {\n padding-top: 0.25rem;\n}\n.bunny-pt-12 {\n padding-top: 3rem;\n}\n.bunny-pt-2 {\n padding-top: 0.5rem;\n}\n.bunny-pt-4 {\n padding-top: 1rem;\n}\n.bunny-pt-5 {\n padding-top: 1.25rem;\n}\n.bunny-pt-6 {\n padding-top: 1.5rem;\n}\n.bunny-pt-\\[25vh\\] {\n padding-top: 25vh;\n}\n.bunny-text-left {\n text-align: left;\n}\n.bunny-text-center {\n text-align: center;\n}\n.bunny-text-right {\n text-align: right;\n}\n.bunny-text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.bunny-text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.bunny-text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.bunny-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.bunny-text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.bunny-text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.bunny-font-bold {\n font-weight: 700;\n}\n.bunny-font-medium {\n font-weight: 500;\n}\n.bunny-font-normal {\n font-weight: 400;\n}\n.bunny-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.bunny-text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.bunny-text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.bunny-text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.bunny-text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.bunny-text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.bunny-text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.bunny-text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.bunny-underline {\n text-decoration-line: underline;\n}\n.bunny-shadow {\n --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.bunny-shadow-md {\n --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.bunny-transition-\\[margin\\] {\n transition-property: margin;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.bunny-duration-300 {\n transition-duration: 300ms;\n}\n.rotate-45,\n.transform {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n}\n.shadow,\n.shadow-lg,\n.shadow-md,\n.shadow-none,\n.shadow-sm,\n.shadow-xl {\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.-top-0\\.5 {\n top: -0.125rem;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.z-50 {\n z-index: 50;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.col-span-3 {\n grid-column: span 3 / span 3;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-0 {\n margin: 0px;\n}\n.mx-0 {\n margin-left: 0px;\n margin-right: 0px;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.my-12 {\n margin-top: 3rem;\n margin-bottom: 3rem;\n}\n.my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.mr-8 {\n margin-right: 2rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.block {\n display: block;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.hidden {\n display: none;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-full {\n height: 100%;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-12 {\n width: 3rem;\n}\n.w-2\\/3 {\n width: 66.666667%;\n}\n.w-4 {\n width: 1rem;\n}\n.w-full {\n width: 100%;\n}\n.max-w-32 {\n max-width: 8rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.shrink {\n flex-shrink: 1;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-0 {\n gap: 0px;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.gap-8 {\n gap: 2rem;\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-visible {\n overflow: visible;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.text-nowrap {\n text-wrap: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-solid {\n border-style: solid;\n}\n.border-none {\n border-style: none;\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));\n}\n.border-gray-500 {\n --tw-border-opacity: 1;\n border-color: rgb(107 114 128 / var(--tw-border-opacity, 1));\n}\n.border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.border-slate-300 {\n --tw-border-opacity: 1;\n border-color: rgb(203 213 225 / var(--tw-border-opacity, 1));\n}\n.border-slate-700 {\n --tw-border-opacity: 1;\n border-color: rgb(51 65 85 / var(--tw-border-opacity, 1));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n.bg-green-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(187 247 208 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 215 170 / var(--tw-bg-opacity, 1));\n}\n.bg-red-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 240 138 / var(--tw-bg-opacity, 1));\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-6 {\n padding-bottom: 1.5rem;\n}\n.pb-8 {\n padding-bottom: 2rem;\n}\n.pl-0 {\n padding-left: 0px;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pl-4 {\n padding-left: 1rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-12 {\n padding-top: 3rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-5 {\n padding-top: 1.25rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-middle {\n vertical-align: middle;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.capitalize {\n text-transform: capitalize;\n}\n.text-emerald-600 {\n --tw-text-opacity: 1;\n color: rgb(5 150 105 / var(--tw-text-opacity, 1));\n}\n.text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-none {\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-\\[margin\\] {\n transition-property: margin;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.hover\\:bg-slate-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n.hover\\:bg-slate-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity, 1));\n}\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n@media (min-width: 768px) {\n .sm\\:flex {\n display: flex;\n }\n .sm\\:hidden {\n display: none;\n }\n}\n.hover\\:bunny-text-orange-400:hover {\n --tw-text-opacity: 1;\n color: rgb(251 146 60 / var(--tw-text-opacity, 1));\n}\n.bunny-components .ant-upload-select-picture-card {\n margin: 0 !important;\n}\n.bunny-components .ant-upload {\n border-radius: 0.5rem !important;\n}\n.bunny-components .ant-checkbox-inner {\n border-color: #cccccc;\n}\n.bunny-components .ant-row {\n margin-bottom: 0px;\n}\n.bunny-components .ant-select-disabled .ant-select-selector .ant-select-selection-item {\n color: rgba(0, 0, 0, 0.25) !important;\n}\n.bunny-components .ant-input-number,\n.bunny-components .ant-input,\n.bunny-components .ant-picker,\n.bunny-components .ant-input-affix-wrapper,\n.bunny-components .ant-select-selector {\n font-size: 0.875rem !important;\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n color: #232323 !important;\n}\n.bunny-components .ant-input-affix-wrapper {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n.bunny-components .ant-input-group-addon,\n.bunny-components .ant-input-number-group-addon {\n color: #475569 !important;\n}\n.bunny-components .ant-input-number-group-wrapper,\n.bunny-components .ant-input-number-affix-wrapper {\n width: 100%;\n}\n.bunny-components .ant-input-affix-wrapper input {\n border: none !important;\n}\n.bunny-components .ant-form-item {\n margin-bottom: 0;\n}\n.bunny-components .ant-form-item-label {\n text-transform: none !important;\n font-size: 0.75rem;\n padding-bottom: 2px !important;\n}\n.bunny-components .ant-form-item-label > label {\n width: 100%;\n color: #4b5563 !important;\n}\n.bunny-components .form .ant-form-item-label label {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n box-sizing: border-box;\n}\n.bunny-components .ant-form-item-explain,\n.bunny-components .ant-form-item-explain-error {\n font-size: 11px;\n min-height: 11px;\n line-height: 11px;\n padding-top: 2px;\n}\n.bunny-components .ant-timeline-item-content {\n font-size: smaller;\n}\n.bunny-components .ant-tree {\n font-size: 0.875rem;\n}\n.bunny-components .ant-tree-treenode {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-tree-draggable-icon {\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-tree-node-content-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-tree-switcher {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-page-header {\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n}\n.bunny-components .ant-tag {\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 14px;\n font-weight: 500;\n white-space: nowrap;\n padding-inline-start: 0.625rem;\n padding-inline-end: 0.625rem;\n margin: 0;\n}\n.bunny-components .ant-tag-blue {\n color: #3b82f6 !important;\n background: #bfdbfe !important;\n}\n.bunny-components .ant-tag-green {\n color: #059669 !important;\n background: #a7f3d0 !important;\n}\n.bunny-components .ant-tag-red {\n color: #ef4444 !important;\n background: #fecaca !important;\n}\n.bunny-components .ant-tag-orange {\n color: #f97316 !important;\n background: #fed7aa !important;\n}\n.bunny-components .ant-tag-yellow {\n color: #f59e0b !important;\n background: #fde68a !important;\n}\n.bunny-components .ant-tag-purple {\n color: #8b5cf6 !important;\n background: #ddd6fe !important;\n}\n.bunny-components .ant-tag-gray {\n color: #6b7280 !important;\n background: #e5e7eb !important;\n}\n.bunny-components .ant-tag-black {\n color: white !important;\n background: black !important;\n}\n.bunny-components .ant-picker {\n width: 100%;\n}\n.bunny-components .ant-input,\n.bunny-components .ant-select,\n.bunny-components .ant-picker {\n height: 32px !important;\n}\n.bunny-components .ant-slider-dot {\n border: 2px solid #f0f0f0;\n}\n.bunny-components .ant-slider-dot-active {\n border-color: #ff5833;\n}\n.bunny-components .ant-slider-mark :last-child {\n transform: translateX(-75%) !important;\n}\n.bunny-components .ant-drawer-content {\n background: #f3f3f9ff;\n}\n.bunny-components .ant-drawer-body,\n.bunny-components .ant-layout {\n background: #f8fafc;\n}\n.bunny-components .vista-link {\n color: #1890ff;\n}\n.bunny-components .vista-link:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n.bunny-components .ant-popover-inner-content {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n max-width: 300px;\n}\n.bunny-components .ant-popconfirm-message-text {\n width: 100% !important;\n}\n.bunny-components .ant-popconfirm-title {\n padding: 0;\n text-align: center;\n font-size: 0.875rem !important;\n width: 100% !important;\n}\n.bunny-components .ant-popconfirm-buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n}\n.bunny-components .ant-popconfirm-buttons button {\n margin-inline-start: 0 !important;\n}\n.bunny-components .ant-pagination-item {\n display: flex !important;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-btn-primary:disabled {\n background: #eef0f2 !important;\n color: rgba(0, 0, 0, 0.25) !important;\n border: none;\n}\n.bunny-components .ant-btn {\n box-shadow: none;\n text-shadow: none;\n outline: none !important;\n line-height: 1;\n font-weight: normal;\n}\n.bunny-components .ant-btn-default .ant-btn-icon {\n color: #94a3b8;\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.bunny-components .ant-btn-default:hover .ant-btn-icon {\n color: #ff7f5c;\n}\n.bunny-components .ant-btn-default:disabled {\n border-color: rgba(113, 125, 148, 0.2) !important;\n}\n.bunny-components .ant-btn-primary:disabled {\n background-color: rgba(113, 125, 148, 0.1) !important;\n border-color: rgba(113, 125, 148, 0.1) !important;\n}\n.bunny-components .ant-btn-primary:hover:disabled,\n.bunny-components .ant-btn-primary:disabled {\n background-clip: padding-box;\n}\n.bunny-components .ant-select-selection-item-content {\n display: flex !important;\n align-items: center;\n}\n.bunny-components .ant-select-item {\n font-size: 0.875rem;\n}\n.bunny-components .ant-select-item-option-content {\n display: flex;\n align-items: center;\n white-space: nowrap !important;\n overflow: visible !important;\n text-overflow: default !important;\n font-size: 0.875rem;\n}\n.bunny-components .ant-select-arrow .anticon:not(.ant-select-suffix) {\n pointer-events: none;\n}\n.bunny-components .select-dropdown-blue-gray .ant-select-item-option {\n background-color: #fff !important;\n}\n.bunny-components .select-dropdown-blue-gray .ant-select-item-option-active {\n color: #ff5833;\n}\n.bunny-components .ant-dropdown-menu-items {\n padding-left: 0 !important;\n}\n.bunny-components .ant-dropdown-menu-item-active {\n background-color: transparent !important;\n}\n.bunny-components .ant-input-affix-wrapper.searchfield {\n background: white !important;\n}\n.bunny-components .ant-input-affix-wrapper.searchfield input {\n background: white !important;\n}\n.bunny-components .ant-input-affix-wrapper-focused {\n background: white !important;\n}\n.bunny-components .panel .ant-input-affix-wrapper.searchfield {\n background: #f8f8f8 !important;\n}\n.bunny-components .panel .ant-input-affix-wrapper.searchfield input {\n background: #f8f8f8 !important;\n}\n.bunny-components .ant-input-steps-hidden .ant-input-number-handler-wrap {\n display: none;\n}\n.bunny-components .ant-layout-header {\n height: 48px;\n}\n.bunny-components .ant-layout-sider-children {\n width: inherit;\n position: fixed;\n}\n.bunny-components .ant-menu-item-group-list {\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n gap: 4px !important;\n}\n.bunny-components .group {\n display: flex;\n flex-direction: row;\n flex-flow: row wrap;\n box-sizing: border-box;\n}\n.bunny-components .select-datepicker {\n animation-duration: 0.35s !important;\n}\n.bunny-components .header-datepicker {\n top: 96px !important;\n animation-duration: 0s !important;\n}\n.bunny-components .ant-picker-header {\n border-bottom: none !important;\n}\n.bunny-components .ant-picker-content thead tr th {\n font-weight: 500;\n}\n.bunny-components .ant-picker-panel-container {\n border-radius: 0.375rem;\n}\n.bunny-components .ant-picker-cell-selected .custom-date-display {\n color: #ffffff;\n background-color: #ff5833;\n}\n.bunny-components .ant-picker-cell-today .custom-date-display {\n border: 1px solid #ff5833;\n}\n.bunny-components .ant-select:hover,\n.bunny-components * .cardElement:hover {\n border-color: #ff5833;\n}\n.bunny-components .ant-input-number {\n width: 100%;\n}\n.bunny-components .ant-input-number-focused {\n border-color: #ff5833 !important;\n background-color: #ffffff !important;\n}\n.bunny-components .ant-input-affix-wrapper-focused,\n.bunny-components .ant-input-number-focused,\n.bunny-components .ant-picker,\n.bunny-components .ant-input,\n.bunny-components .ant-select-focused .ant-select-selector,\n.bunny-components .ant-select-selector:focus,\n.bunny-components .ant-select-selector:active,\n.bunny-components .ant-select-open .ant-select-selector {\n box-shadow: none !important;\n}\n.bunny-components .ant-select-item-option-selected .ant-select-item-option-state {\n display: none !important;\n}\n.bunny-components .ant-form * input[type='text'].ant-input:not(:disabled),\n.bunny-components .ant-select-selection-item:not(:disabled) {\n color: #232323;\n}\n.bunny-components .ant-tabs-ink-bar {\n display: none !important;\n}\n.bunny-components .ant-tabs-tab.ant-tabs-tab-active {\n border-bottom: 2px solid #ff5833 !important;\n}\n.bunny-components .ant-tabs-tab {\n border-bottom: 2px solid transparent !important;\n padding-bottom: 14px !important;\n}\n.bunny-components .ant-upload-wrapper {\n display: flex;\n}\n.bunny-components .ant-form-item-label > label::after {\n display: none !important;\n}\n.bunny-components .ant-menu-item {\n display: flex !important;\n align-items: center !important;\n}\n.ant-notification {\n width: min-content;\n}\n.ant-notification-topRight {\n right: 0 !important;\n left: 0 !important;\n margin-left: auto !important;\n margin-right: auto !important;\n}\n.ant-notification-notice-wrapper {\n width: 350px !important;\n overflow: hidden !important;\n}\n.ant-notification-notice {\n padding: 16px !important;\n width: 350px !important;\n border-radius: 8px !important;\n display: flex !important;\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.08), 0px 1px 18px rgba(0, 0, 0, 0.08), 0px 3px 5px rgba(0, 0, 0, 0.16) !important;\n}\n.ant-notification-notice-description {\n padding: 0 14px 0 0 !important;\n font-size: 14px !important;\n overflow-wrap: break-word;\n}\n.ant-notification-notice-success {\n background-color: #edfffa !important;\n}\n.ant-notification-notice-error {\n background-color: #fff8f4 !important;\n}\n.ant-notification-notice-error .ant-notification-notice-message {\n color: #ff5833 !important;\n font-weight: 500 !important;\n}\n.ant-notification-notice-error .ant-notification-notice-icon {\n color: #ff5833;\n}\n.ant-notification-notice-success .ant-notification-notice-message {\n color: #00b76a !important;\n font-weight: 500 !important;\n}\n.ant-notification-notice-success .ant-notification-notice-icon {\n color: #00b76a !important;\n}\n.ant-notification-notice-message {\n margin-bottom: 0 !important;\n}\n.ant-notification-notice-close {\n top: 16px !important;\n right: 16px !important;\n}\n.bunny-invoice-container {\n padding: 0;\n box-sizing: border-box !important;\n line-height: 1.15;\n}\n@media only screen and (max-width: 768px) {\n select,\n textarea,\n input[type='text'],\n input[type='password'],\n input[type='datetime'],\n input[type='datetime-local'],\n input[type='date'],\n input[type='month'],\n input[type='time'],\n input[type='week'],\n input[type='number'],\n input[type='email'],\n input[type='url'],\n input[type='search'],\n input[type='tel'],\n input[type='color'] {\n font-size: 16px !important;\n }\n}\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n";
59
+ var css_248z = ":root {\n --row-background: #ffffff;\n --row-background-alternate: rgba(100, 116, 139, 0.04);\n --row-background-dark: #121212;\n --row-background-alternate-dark: #1e1e1e;\n --bunny-blue-500: #3b82f6;\n --bunny-blue-200: #bfdbfe;\n --bunny-green-600: #059669;\n --bunny-green-200: #a7f3d0;\n --bunny-red-500: #ef4444;\n --bunny-red-200: #fecaca;\n --bunny-orange-500: #f97316;\n --bunny-orange-200: #fed7aa;\n --bunny-yellow-500: #f59e0b;\n --bunny-yellow-200: #fde68a;\n --bunny-purple-500: #8b5cf6;\n --bunny-purple-200: #ddd6fe;\n --bunny-black: #000000;\n}\n.bunny-component-wrapper {\n box-sizing: border-box;\n}\n.bunny-component-wrapper * {\n box-sizing: border-box;\n}\n.hidden {\n display: none;\n}\n.bunny-show-on-hover {\n opacity: 0;\n}\n.bunny-show-on-hover-container:hover .bunny-show-on-hover {\n opacity: 1;\n}\n.has-tooltip:hover .tooltip {\n visibility: visible;\n z-index: 100;\n}\n.pdf-only {\n display: none !important;\n}\n.notes p {\n margin: 0;\n padding: 0;\n padding-bottom: 0.25rem;\n}\n.bunny-icon-path {\n transition: fill 0.3s;\n}\n.bunny-shadow-padding-x {\n padding-right: 1rem;\n padding-left: 1rem;\n}\n.bunny-shadow-padding-xb {\n padding-right: 1rem;\n padding-left: 1rem;\n padding-bottom: 0.5rem;\n}\n.content-container {\n width: 100%;\n margin: 0 auto;\n}\n@media (min-width: 1220px) {\n .content-container {\n width: 1220px !important;\n margin: 0 auto;\n }\n}\n@media (min-width: 768px) {\n .bunny-shadow-padding-x {\n padding-right: 2rem;\n padding-left: 2rem;\n }\n .bunny-shadow-padding-xb {\n padding-right: 2rem;\n padding-left: 2rem;\n padding-bottom: 0.5rem;\n }\n .sm\\:flex {\n display: flex !important;\n }\n .sm\\:hidden {\n display: none !important;\n }\n}\n.bunny-shadow,\n.bunny-shadow-md {\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n}\n.bunny-fixed {\n position: fixed;\n}\n.bunny-absolute {\n position: absolute;\n}\n.bunny-relative {\n position: relative;\n}\n.bunny-sticky {\n position: sticky;\n}\n.bunny-bottom-0 {\n bottom: 0px;\n}\n.bunny-bottom-4 {\n bottom: 1rem;\n}\n.bunny-left-0 {\n left: 0px;\n}\n.bunny-right-0 {\n right: 0px;\n}\n.bunny-top-0 {\n top: 0px;\n}\n.bunny-col-span-1 {\n grid-column: span 1 / span 1;\n}\n.bunny-col-span-full {\n grid-column: 1 / -1;\n}\n.bunny-m-0 {\n margin: 0px;\n}\n.bunny-mx-0 {\n margin-left: 0px;\n margin-right: 0px;\n}\n.bunny-mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.bunny-mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.bunny-my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.bunny-my-24 {\n margin-top: 6rem;\n margin-bottom: 6rem;\n}\n.bunny-my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.bunny-mb-2 {\n margin-bottom: 0.5rem;\n}\n.bunny-mb-4 {\n margin-bottom: 1rem;\n}\n.bunny-mb-8 {\n margin-bottom: 2rem;\n}\n.bunny-ml-auto {\n margin-left: auto;\n}\n.bunny-mt-2 {\n margin-top: 0.5rem;\n}\n.bunny-mt-24 {\n margin-top: 6rem;\n}\n.bunny-mt-4 {\n margin-top: 1rem;\n}\n.bunny-flex {\n display: flex;\n}\n.bunny-grid {\n display: grid;\n}\n.bunny-contents {\n display: contents;\n}\n.bunny-h-0\\.5 {\n height: 0.125rem;\n}\n.bunny-h-1\\/2 {\n height: 50%;\n}\n.bunny-h-5 {\n height: 1.25rem;\n}\n.bunny-h-8 {\n height: 2rem;\n}\n.bunny-h-full {\n height: 100%;\n}\n.bunny-h-screen {\n height: 100vh;\n}\n.bunny-max-h-\\[calc\\(100vh-10rem\\)\\] {\n max-height: calc(100vh - 10rem);\n}\n.bunny-min-h-0 {\n min-height: 0px;\n}\n.bunny-w-0\\.5 {\n width: 0.125rem;\n}\n.bunny-w-1\\/2 {\n width: 50%;\n}\n.bunny-w-3\\/5 {\n width: 60%;\n}\n.bunny-w-full {\n width: 100%;\n}\n.bunny-w-screen {\n width: 100vw;\n}\n.bunny-flex-1 {\n flex: 1 1 0%;\n}\n.bunny-shrink {\n flex-shrink: 1;\n}\n.bunny-shrink-0 {\n flex-shrink: 0;\n}\n.bunny-grow {\n flex-grow: 1;\n}\n.bunny-cursor-pointer {\n cursor: pointer;\n}\n.bunny-grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.bunny-flex-row {\n flex-direction: row;\n}\n.bunny-flex-col {\n flex-direction: column;\n}\n.bunny-flex-wrap {\n flex-wrap: wrap;\n}\n.bunny-items-start {\n align-items: flex-start;\n}\n.bunny-items-end {\n align-items: flex-end;\n}\n.bunny-items-center {\n align-items: center;\n}\n.bunny-justify-end {\n justify-content: flex-end;\n}\n.bunny-justify-center {\n justify-content: center;\n}\n.bunny-justify-between {\n justify-content: space-between;\n}\n.bunny-gap-0 {\n gap: 0px;\n}\n.bunny-gap-1 {\n gap: 0.25rem;\n}\n.bunny-gap-2 {\n gap: 0.5rem;\n}\n.bunny-gap-3 {\n gap: 0.75rem;\n}\n.bunny-gap-4 {\n gap: 1rem;\n}\n.bunny-gap-6 {\n gap: 1.5rem;\n}\n.bunny-gap-8 {\n gap: 2rem;\n}\n.bunny-space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.bunny-space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.bunny-space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.bunny-overflow-auto {\n overflow: auto;\n}\n.bunny-overflow-hidden {\n overflow: hidden;\n}\n.bunny-overflow-visible {\n overflow: visible;\n}\n.bunny-overflow-y-auto {\n overflow-y: auto;\n}\n.bunny-whitespace-nowrap {\n white-space: nowrap;\n}\n.bunny-rounded {\n border-radius: 0.25rem;\n}\n.bunny-rounded-full {\n border-radius: 9999px;\n}\n.bunny-rounded-lg {\n border-radius: 0.5rem;\n}\n.bunny-rounded-md {\n border-radius: 0.375rem;\n}\n.bunny-border {\n border-width: 1px;\n}\n.bunny-border-2 {\n border-width: 2px;\n}\n.bunny-border-solid {\n border-style: solid;\n}\n.bunny-border-none {\n border-style: none;\n}\n.bunny-border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.bunny-bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bunny-bg-slate-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));\n}\n.bunny-bg-transparent {\n background-color: transparent;\n}\n.bunny-bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bunny-p-0 {\n padding: 0px;\n}\n.bunny-p-1 {\n padding: 0.25rem;\n}\n.bunny-p-4 {\n padding: 1rem;\n}\n.bunny-px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.bunny-px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.bunny-px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.bunny-py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.bunny-py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.bunny-py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.bunny-pb-2 {\n padding-bottom: 0.5rem;\n}\n.bunny-pb-4 {\n padding-bottom: 1rem;\n}\n.bunny-pb-6 {\n padding-bottom: 1.5rem;\n}\n.bunny-pl-0 {\n padding-left: 0px;\n}\n.bunny-pl-12 {\n padding-left: 3rem;\n}\n.bunny-pl-4 {\n padding-left: 1rem;\n}\n.bunny-pr-4 {\n padding-right: 1rem;\n}\n.bunny-pt-1 {\n padding-top: 0.25rem;\n}\n.bunny-pt-12 {\n padding-top: 3rem;\n}\n.bunny-pt-2 {\n padding-top: 0.5rem;\n}\n.bunny-pt-4 {\n padding-top: 1rem;\n}\n.bunny-pt-5 {\n padding-top: 1.25rem;\n}\n.bunny-pt-6 {\n padding-top: 1.5rem;\n}\n.bunny-pt-\\[25vh\\] {\n padding-top: 25vh;\n}\n.bunny-text-left {\n text-align: left;\n}\n.bunny-text-center {\n text-align: center;\n}\n.bunny-text-right {\n text-align: right;\n}\n.bunny-text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.bunny-text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.bunny-text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.bunny-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.bunny-text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.bunny-text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.bunny-font-bold {\n font-weight: 700;\n}\n.bunny-font-medium {\n font-weight: 500;\n}\n.bunny-font-normal {\n font-weight: 400;\n}\n.bunny-text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n.bunny-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.bunny-text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.bunny-text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.bunny-text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.bunny-text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.bunny-text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.bunny-text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.bunny-text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.bunny-underline {\n text-decoration-line: underline;\n}\n.bunny-shadow {\n --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.bunny-shadow-md {\n --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.bunny-transition-\\[margin\\] {\n transition-property: margin;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.bunny-duration-300 {\n transition-duration: 300ms;\n}\n.rotate-45,\n.transform {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n}\n.shadow,\n.shadow-lg,\n.shadow-md,\n.shadow-none,\n.shadow-sm,\n.shadow-xl {\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n.visible {\n visibility: visible;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.-top-0\\.5 {\n top: -0.125rem;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.z-50 {\n z-index: 50;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.col-span-3 {\n grid-column: span 3 / span 3;\n}\n.col-span-full {\n grid-column: 1 / -1;\n}\n.m-0 {\n margin: 0px;\n}\n.mx-0 {\n margin-left: 0px;\n margin-right: 0px;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.my-12 {\n margin-top: 3rem;\n margin-bottom: 3rem;\n}\n.my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.my-4 {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.mr-8 {\n margin-right: 2rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.block {\n display: block;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.contents {\n display: contents;\n}\n.hidden {\n display: none;\n}\n.h-4 {\n height: 1rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-full {\n height: 100%;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-12 {\n width: 3rem;\n}\n.w-2\\/3 {\n width: 66.666667%;\n}\n.w-4 {\n width: 1rem;\n}\n.w-full {\n width: 100%;\n}\n.max-w-32 {\n max-width: 8rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.shrink {\n flex-shrink: 1;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-0 {\n gap: 0px;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.gap-8 {\n gap: 2rem;\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-visible {\n overflow: visible;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.text-nowrap {\n text-wrap: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-solid {\n border-style: solid;\n}\n.border-none {\n border-style: none;\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));\n}\n.border-gray-500 {\n --tw-border-opacity: 1;\n border-color: rgb(107 114 128 / var(--tw-border-opacity, 1));\n}\n.border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.border-slate-300 {\n --tw-border-opacity: 1;\n border-color: rgb(203 213 225 / var(--tw-border-opacity, 1));\n}\n.border-slate-700 {\n --tw-border-opacity: 1;\n border-color: rgb(51 65 85 / var(--tw-border-opacity, 1));\n}\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n.bg-green-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(187 247 208 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 215 170 / var(--tw-bg-opacity, 1));\n}\n.bg-red-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 240 138 / var(--tw-bg-opacity, 1));\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-6 {\n padding-bottom: 1.5rem;\n}\n.pb-8 {\n padding-bottom: 2rem;\n}\n.pl-0 {\n padding-left: 0px;\n}\n.pl-2 {\n padding-left: 0.5rem;\n}\n.pl-4 {\n padding-left: 1rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-12 {\n padding-top: 3rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-5 {\n padding-top: 1.25rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-middle {\n vertical-align: middle;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.capitalize {\n text-transform: capitalize;\n}\n.text-emerald-600 {\n --tw-text-opacity: 1;\n color: rgb(5 150 105 / var(--tw-text-opacity, 1));\n}\n.text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-none {\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-\\[margin\\] {\n transition-property: margin;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.hover\\:bg-slate-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n.hover\\:bg-slate-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity, 1));\n}\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n@media (min-width: 768px) {\n .sm\\:flex {\n display: flex;\n }\n .sm\\:hidden {\n display: none;\n }\n}\n.hover\\:bunny-text-orange-400:hover {\n --tw-text-opacity: 1;\n color: rgb(251 146 60 / var(--tw-text-opacity, 1));\n}\n.bunny-components .ant-upload-select-picture-card {\n margin: 0 !important;\n}\n.bunny-components .ant-upload {\n border-radius: 0.5rem !important;\n}\n.bunny-components .ant-checkbox-inner {\n border-color: #cccccc;\n}\n.bunny-components .ant-row {\n margin-bottom: 0px;\n}\n.bunny-components .ant-select-disabled .ant-select-selector .ant-select-selection-item {\n color: rgba(0, 0, 0, 0.25) !important;\n}\n.bunny-components .ant-input-number,\n.bunny-components .ant-input,\n.bunny-components .ant-picker,\n.bunny-components .ant-input-affix-wrapper,\n.bunny-components .ant-select-selector {\n font-size: 0.875rem !important;\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n color: #232323 !important;\n}\n.bunny-components .ant-input-affix-wrapper {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n.bunny-components .ant-input-group-addon,\n.bunny-components .ant-input-number-group-addon {\n color: #475569 !important;\n}\n.bunny-components .ant-input-number-group-wrapper,\n.bunny-components .ant-input-number-affix-wrapper {\n width: 100%;\n}\n.bunny-components .ant-input-affix-wrapper input {\n border: none !important;\n}\n.bunny-components .ant-form-item {\n margin-bottom: 0;\n}\n.bunny-components .ant-form-item-label {\n text-transform: none !important;\n font-size: 0.75rem;\n padding-bottom: 2px !important;\n}\n.bunny-components .ant-form-item-label > label {\n width: 100%;\n color: #4b5563 !important;\n}\n.bunny-components .form .ant-form-item-label label {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n box-sizing: border-box;\n}\n.bunny-components .ant-form-item-explain,\n.bunny-components .ant-form-item-explain-error {\n font-size: 11px;\n min-height: 11px;\n line-height: 11px;\n padding-top: 2px;\n}\n.bunny-components .ant-timeline-item-content {\n font-size: smaller;\n}\n.bunny-components .ant-tree {\n font-size: 0.875rem;\n}\n.bunny-components .ant-tree-treenode {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-tree-draggable-icon {\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-tree-node-content-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-tree-switcher {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-page-header {\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n}\n.bunny-components .ant-tag {\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: 14px;\n font-weight: 500;\n white-space: nowrap;\n padding-inline-start: 0.625rem;\n padding-inline-end: 0.625rem;\n margin: 0;\n}\n.bunny-components .ant-tag-blue {\n color: #3b82f6 !important;\n background: #bfdbfe !important;\n}\n.bunny-components .ant-tag-green {\n color: #059669 !important;\n background: #a7f3d0 !important;\n}\n.bunny-components .ant-tag-red {\n color: #ef4444 !important;\n background: #fecaca !important;\n}\n.bunny-components .ant-tag-orange {\n color: #f97316 !important;\n background: #fed7aa !important;\n}\n.bunny-components .ant-tag-yellow {\n color: #f59e0b !important;\n background: #fde68a !important;\n}\n.bunny-components .ant-tag-purple {\n color: #8b5cf6 !important;\n background: #ddd6fe !important;\n}\n.bunny-components .ant-tag-gray {\n color: #6b7280 !important;\n background: #e5e7eb !important;\n}\n.bunny-components .ant-tag-black {\n color: white !important;\n background: black !important;\n}\n.bunny-components .ant-picker {\n width: 100%;\n}\n.bunny-components .ant-input,\n.bunny-components .ant-select,\n.bunny-components .ant-picker {\n height: 32px !important;\n}\n.bunny-components .ant-slider-dot {\n border: 2px solid #f0f0f0;\n}\n.bunny-components .ant-slider-dot-active {\n border-color: #ff5833;\n}\n.bunny-components .ant-slider-mark :last-child {\n transform: translateX(-75%) !important;\n}\n.bunny-components .ant-drawer-content {\n background: #f3f3f9ff;\n}\n.bunny-components .ant-drawer-body,\n.bunny-components .ant-layout {\n background: #f8fafc;\n}\n.bunny-components .vista-link {\n color: #1890ff;\n}\n.bunny-components .vista-link:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n.bunny-components .ant-popover-inner-content {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n max-width: 300px;\n}\n.bunny-components .ant-popconfirm-message-text {\n width: 100% !important;\n}\n.bunny-components .ant-popconfirm-title {\n padding: 0;\n text-align: center;\n font-size: 0.875rem !important;\n width: 100% !important;\n}\n.bunny-components .ant-popconfirm-buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n}\n.bunny-components .ant-popconfirm-buttons button {\n margin-inline-start: 0 !important;\n}\n.bunny-components .ant-pagination-item {\n display: flex !important;\n align-items: center;\n justify-content: center;\n}\n.bunny-components .ant-btn-primary:disabled {\n background: #eef0f2 !important;\n color: rgba(0, 0, 0, 0.25) !important;\n border: none;\n}\n.bunny-components .ant-btn {\n box-shadow: none;\n text-shadow: none;\n outline: none !important;\n line-height: 1;\n font-weight: normal;\n}\n.bunny-components .ant-btn-default .ant-btn-icon {\n color: #94a3b8;\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.bunny-components .ant-btn-default:hover .ant-btn-icon {\n color: #ff7f5c;\n}\n.bunny-components .ant-btn-default:disabled {\n border-color: rgba(113, 125, 148, 0.2) !important;\n}\n.bunny-components .ant-btn-primary:disabled {\n background-color: rgba(113, 125, 148, 0.1) !important;\n border-color: rgba(113, 125, 148, 0.1) !important;\n}\n.bunny-components .ant-btn-primary:hover:disabled,\n.bunny-components .ant-btn-primary:disabled {\n background-clip: padding-box;\n}\n.bunny-components .ant-select-selection-item-content {\n display: flex !important;\n align-items: center;\n}\n.bunny-components .ant-select-item {\n font-size: 0.875rem;\n}\n.bunny-components .ant-select-item-option-content {\n display: flex;\n align-items: center;\n white-space: nowrap !important;\n overflow: visible !important;\n text-overflow: default !important;\n font-size: 0.875rem;\n}\n.bunny-components .ant-select-arrow .anticon:not(.ant-select-suffix) {\n pointer-events: none;\n}\n.bunny-components .select-dropdown-blue-gray .ant-select-item-option {\n background-color: #fff !important;\n}\n.bunny-components .select-dropdown-blue-gray .ant-select-item-option-active {\n color: #ff5833;\n}\n.bunny-components .ant-dropdown-menu-items {\n padding-left: 0 !important;\n}\n.bunny-components .ant-dropdown-menu-item-active {\n background-color: transparent !important;\n}\n.bunny-components .ant-input-affix-wrapper.searchfield {\n background: white !important;\n}\n.bunny-components .ant-input-affix-wrapper.searchfield input {\n background: white !important;\n}\n.bunny-components .ant-input-affix-wrapper-focused {\n background: white !important;\n}\n.bunny-components .panel .ant-input-affix-wrapper.searchfield {\n background: #f8f8f8 !important;\n}\n.bunny-components .panel .ant-input-affix-wrapper.searchfield input {\n background: #f8f8f8 !important;\n}\n.bunny-components .ant-input-steps-hidden .ant-input-number-handler-wrap {\n display: none;\n}\n.bunny-components .ant-layout-header {\n height: 48px;\n}\n.bunny-components .ant-layout-sider-children {\n width: inherit;\n position: fixed;\n}\n.bunny-components .ant-menu-item-group-list {\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n gap: 4px !important;\n}\n.bunny-components .group {\n display: flex;\n flex-direction: row;\n flex-flow: row wrap;\n box-sizing: border-box;\n}\n.bunny-components .select-datepicker {\n animation-duration: 0.35s !important;\n}\n.bunny-components .header-datepicker {\n top: 96px !important;\n animation-duration: 0s !important;\n}\n.bunny-components .ant-picker-header {\n border-bottom: none !important;\n}\n.bunny-components .ant-picker-content thead tr th {\n font-weight: 500;\n}\n.bunny-components .ant-picker-panel-container {\n border-radius: 0.375rem;\n}\n.bunny-components .ant-picker-cell-selected .custom-date-display {\n color: #ffffff;\n background-color: #ff5833;\n}\n.bunny-components .ant-picker-cell-today .custom-date-display {\n border: 1px solid #ff5833;\n}\n.bunny-components .ant-select:hover,\n.bunny-components * .cardElement:hover {\n border-color: #ff5833;\n}\n.bunny-components .ant-input-number {\n width: 100%;\n}\n.bunny-components .ant-input-number-focused {\n border-color: #ff5833 !important;\n background-color: #ffffff !important;\n}\n.bunny-components .ant-input-affix-wrapper-focused,\n.bunny-components .ant-input-number-focused,\n.bunny-components .ant-picker,\n.bunny-components .ant-input,\n.bunny-components .ant-select-focused .ant-select-selector,\n.bunny-components .ant-select-selector:focus,\n.bunny-components .ant-select-selector:active,\n.bunny-components .ant-select-open .ant-select-selector {\n box-shadow: none !important;\n}\n.bunny-components .ant-select-item-option-selected .ant-select-item-option-state {\n display: none !important;\n}\n.bunny-components .ant-form * input[type='text'].ant-input:not(:disabled),\n.bunny-components .ant-select-selection-item:not(:disabled) {\n color: #232323;\n}\n.bunny-components .ant-tabs-ink-bar {\n display: none !important;\n}\n.bunny-components .ant-tabs-tab.ant-tabs-tab-active {\n border-bottom: 2px solid #ff5833 !important;\n}\n.bunny-components .ant-tabs-tab {\n border-bottom: 2px solid transparent !important;\n padding-bottom: 14px !important;\n}\n.bunny-components .ant-upload-wrapper {\n display: flex;\n}\n.bunny-components .ant-form-item-label > label::after {\n display: none !important;\n}\n.bunny-components .ant-menu-item {\n display: flex !important;\n align-items: center !important;\n}\n.ant-notification {\n width: min-content;\n}\n.ant-notification-topRight {\n right: 0 !important;\n left: 0 !important;\n margin-left: auto !important;\n margin-right: auto !important;\n}\n.ant-notification-notice-wrapper {\n width: 350px !important;\n overflow: hidden !important;\n}\n.ant-notification-notice {\n padding: 16px !important;\n width: 350px !important;\n border-radius: 8px !important;\n display: flex !important;\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.08), 0px 1px 18px rgba(0, 0, 0, 0.08), 0px 3px 5px rgba(0, 0, 0, 0.16) !important;\n}\n.ant-notification-notice-description {\n padding: 0 14px 0 0 !important;\n font-size: 14px !important;\n overflow-wrap: break-word;\n}\n.ant-notification-notice-success {\n background-color: #edfffa !important;\n}\n.ant-notification-notice-error {\n background-color: #fff8f4 !important;\n}\n.ant-notification-notice-error .ant-notification-notice-message {\n color: #ff5833 !important;\n font-weight: 500 !important;\n}\n.ant-notification-notice-error .ant-notification-notice-icon {\n color: #ff5833;\n}\n.ant-notification-notice-success .ant-notification-notice-message {\n color: #00b76a !important;\n font-weight: 500 !important;\n}\n.ant-notification-notice-success .ant-notification-notice-icon {\n color: #00b76a !important;\n}\n.ant-notification-notice-message {\n margin-bottom: 0 !important;\n}\n.ant-notification-notice-close {\n top: 16px !important;\n right: 16px !important;\n}\n.bunny-invoice-container {\n padding: 0;\n box-sizing: border-box !important;\n line-height: 1.15;\n}\n@media only screen and (max-width: 768px) {\n select,\n textarea,\n input[type='text'],\n input[type='password'],\n input[type='datetime'],\n input[type='datetime-local'],\n input[type='date'],\n input[type='month'],\n input[type='time'],\n input[type='week'],\n input[type='number'],\n input[type='email'],\n input[type='url'],\n input[type='search'],\n input[type='tel'],\n input[type='color'] {\n font-size: 16px !important;\n }\n}\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n";
60
60
  styleInject(css_248z);
61
61
 
62
62
  /******************************************************************************
@@ -154,7 +154,7 @@ var BrandContext = react.createContext({
154
154
  });
155
155
 
156
156
  // This will be replaced at build time by rollup-plugin-replace
157
- var PACKAGE_VERSION = '1.4.0-beta.2';
157
+ var PACKAGE_VERSION = '1.5.0-beta.1';
158
158
  var createRequestHeaders = function (token) {
159
159
  var headers = common.createClientDevHeaders({ token: token });
160
160
  // Add the components version header
@@ -549,6 +549,46 @@ var checkout = function (_a) {
549
549
  });
550
550
  };
551
551
 
552
+ var CURRENT_USER_DATA_QUERY = "{\n company {\n name\n }\n currentUser {\n account {\n billingCountry\n currencyId\n }\n authObjectName\n payload {\n returnUrl\n }\n privacyUrl\n termsUrl\n entityId\n }\n }";
553
+ var getCurrentUserData = function (_a) {
554
+ var token = _a.token, apiHost = _a.apiHost;
555
+ return __awaiter(void 0, void 0, void 0, function () {
556
+ var response;
557
+ var _b, _c, _d, _e, _f, _g, _h, _j;
558
+ return __generator(this, function (_k) {
559
+ switch (_k.label) {
560
+ case 0: return [4 /*yield*/, common.gqlRequest({
561
+ query: CURRENT_USER_DATA_QUERY,
562
+ token: token,
563
+ apiHost: apiHost,
564
+ })];
565
+ case 1:
566
+ response = _k.sent();
567
+ return [2 /*return*/, {
568
+ authObjectName: (_b = response === null || response === void 0 ? void 0 : response.currentUser) === null || _b === void 0 ? void 0 : _b.authObjectName,
569
+ account: (_c = response === null || response === void 0 ? void 0 : response.currentUser) === null || _c === void 0 ? void 0 : _c.account,
570
+ companyName: (_d = response === null || response === void 0 ? void 0 : response.company) === null || _d === void 0 ? void 0 : _d.name,
571
+ returnUrl: (_f = (_e = response === null || response === void 0 ? void 0 : response.currentUser) === null || _e === void 0 ? void 0 : _e.payload) === null || _f === void 0 ? void 0 : _f.returnUrl,
572
+ privacyUrl: (_g = response === null || response === void 0 ? void 0 : response.currentUser) === null || _g === void 0 ? void 0 : _g.privacyUrl,
573
+ termsUrl: (_h = response === null || response === void 0 ? void 0 : response.currentUser) === null || _h === void 0 ? void 0 : _h.termsUrl,
574
+ entityId: (_j = response === null || response === void 0 ? void 0 : response.currentUser) === null || _j === void 0 ? void 0 : _j.entityId,
575
+ }];
576
+ }
577
+ });
578
+ });
579
+ };
580
+
581
+ var useCurrentUserData = function (token) {
582
+ var apiHost = react.useContext(BunnyContext).apiHost;
583
+ var _a = reactQuery.useQuery({
584
+ queryKey: common.QueryKeyFactory.default.currentUserKey(token),
585
+ queryFn: function () { return getCurrentUserData({ token: token, apiHost: apiHost }); },
586
+ enabled: Boolean(token),
587
+ }), currentUserData = _a.data, isCurrentUserDataLoading = _a.isLoading;
588
+ var currentUser = currentUserData || {};
589
+ return { currentUser: currentUser, isCurrentUserDataLoading: isCurrentUserDataLoading };
590
+ };
591
+
552
592
  var paymentMethodsQuery = function () { return "query PaymentMethods($accountId: ID) {\n paymentMethods (accountId: $accountId) {\n nodes {\n id\n pluginId\n accountId\n expirationDate\n plugin {\n guid\n id\n }\n state\n metadata {\n issuer\n identifier\n kind\n description\n icon\n type\n }\n isDefault\n }\n }\n}"; };
553
593
  var getPaymentMethods = function (_a) {
554
594
  var apiHost = _a.apiHost, token = _a.token, accountId = _a.accountId;
@@ -572,15 +612,16 @@ var getPaymentMethods = function (_a) {
572
612
  });
573
613
  };
574
614
  var usePaymentMethod = function (_a) {
575
- var accountId = _a.accountId, token = _a.token, apiHost = _a.apiHost;
576
- var _b = reactQuery.useQuery({
577
- queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
615
+ var accountId = _a.accountId, token = _a.token, apiHost = _a.apiHost, _b = _a.enabled, enabled = _b === void 0 ? true : _b;
616
+ var _c = reactQuery.useQuery({
617
+ queryKey: common.QueryKeyFactory.default.accountPaymentMethodsKey({
578
618
  accountId: accountId,
579
619
  token: token,
580
620
  }),
581
621
  queryFn: function () { return getPaymentMethods({ apiHost: apiHost, token: token, accountId: accountId }); },
582
- staleTime: 5 * 60 * 1000, // Consider data fresh for 5 minutes
583
- }), data = _b.data, isLoading = _b.isLoading;
622
+ staleTime: 5 * 60 * 1000,
623
+ enabled: enabled,
624
+ }), data = _c.data, isLoading = _c.isLoading;
584
625
  return {
585
626
  paymentMethods: data,
586
627
  defaultPaymentMethod: data === null || data === void 0 ? void 0 : data.find(function (paymentMethod) { return paymentMethod.isDefault; }),
@@ -931,7 +972,7 @@ function usePay(_a) {
931
972
  }
932
973
 
933
974
  var handleAllErrorFormats = common.useAllErrorFormats();
934
- var showErrorNotification$3 = common.useErrorNotification();
975
+ var showErrorNotification$5 = common.useErrorNotification();
935
976
  var ActualCheckoutFooter = function (_a) {
936
977
  var quote = _a.quote, invoice = _a.invoice, onPaymentSuccess = _a.onPaymentSuccess, onPaymentHoldSuccess = _a.onPaymentHoldSuccess, plugin = _a.plugin, paymentHoldOptions = _a.paymentHoldOptions;
937
978
  var isMobile = common.useIsMobile();
@@ -1020,7 +1061,7 @@ var ActualCheckoutFooter = function (_a) {
1020
1061
  _f.sent();
1021
1062
  return [3 /*break*/, 6];
1022
1063
  case 5:
1023
- showErrorNotification$3("Payment holds are not supported by ".concat((_e = (_d = plugin.components) === null || _d === void 0 ? void 0 : _d.frontend) === null || _e === void 0 ? void 0 : _e[0].name));
1064
+ showErrorNotification$5("Payment holds are not supported by ".concat((_e = (_d = plugin.components) === null || _d === void 0 ? void 0 : _d.frontend) === null || _e === void 0 ? void 0 : _e[0].name));
1024
1065
  return [3 /*break*/, 6];
1025
1066
  case 6: return [2 /*return*/];
1026
1067
  }
@@ -18405,7 +18446,7 @@ var Bancontact = function (_a) {
18405
18446
  return (jsxRuntime.jsxs("svg", __assign({ className: className, width: "70", height: "48", viewBox: "0 0 70 48", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: [jsxRuntime.jsx("rect", { x: "0.5", y: "0.5", width: "69", height: "47", rx: "5.5", fill: "white", stroke: "#D9D9D9" }), jsxRuntime.jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M18.2243 35.1715C18.2243 34.882 18.156 34.6314 18.0199 34.4199C17.8835 34.2083 17.7043 34.0468 17.4819 33.9355C17.7043 33.8242 17.8766 33.6597 17.9991 33.4426C18.1214 33.2255 18.1825 32.9806 18.1825 32.7078V32.5575C18.1825 32.2233 18.1186 31.9451 17.9908 31.7223C17.8628 31.4996 17.6833 31.3213 17.4526 31.1878C17.2219 31.0541 16.9451 30.9582 16.6227 30.8995C16.3 30.8411 15.9414 30.812 15.5465 30.812C15.4131 30.812 15.274 30.8147 15.1296 30.8203C14.9848 30.8258 14.8445 30.8328 14.7083 30.8411C14.572 30.8494 14.4468 30.8593 14.3329 30.8704C14.2188 30.8817 14.1256 30.8928 14.0534 30.9037C13.8921 30.9318 13.7781 30.9817 13.7114 31.0541C13.6448 31.1266 13.6113 31.2575 13.6113 31.4467V36.5245C13.6113 36.7139 13.646 36.8447 13.7156 36.917C13.7851 36.9895 13.9032 37.0394 14.0702 37.0673C14.1535 37.084 14.2536 37.0979 14.3704 37.1091C14.4871 37.1202 14.6136 37.1299 14.7499 37.1383C14.8862 37.1466 15.0265 37.1535 15.1711 37.1593C15.3158 37.1646 15.4575 37.1676 15.5966 37.1676C15.9581 37.1676 16.2986 37.1397 16.6185 37.084C16.9381 37.0285 17.2161 36.9295 17.4526 36.7874C17.689 36.6456 17.8766 36.4534 18.0157 36.2113C18.1546 35.969 18.2243 35.6642 18.2243 35.2967V35.1715ZM16.8063 32.7746C16.8063 32.8637 16.7924 32.9487 16.7645 33.0293C16.7366 33.11 16.6909 33.1795 16.627 33.2383C16.5629 33.2966 16.4768 33.3439 16.3684 33.38C16.2599 33.4162 16.1222 33.4343 15.9554 33.4343H15.0213V31.9895C15.049 31.9895 15.0921 31.9883 15.1505 31.9853C15.2089 31.9825 15.27 31.9812 15.3339 31.9812H15.6551C16.0833 31.9812 16.3822 32.0354 16.5518 32.144C16.7214 32.2526 16.8063 32.421 16.8063 32.6492V32.7746ZM16.5935 35.8062C16.7576 35.6782 16.8397 35.4971 16.8397 35.2634V35.1714C16.8397 34.971 16.7756 34.797 16.6478 34.6494C16.5198 34.502 16.289 34.4282 15.9554 34.4282H15.0213V35.9898H15.1671C15.231 35.9898 15.2977 35.9916 15.3673 35.9942C15.4368 35.9969 15.5035 35.9985 15.5676 35.9985H15.7051C16.1333 35.9985 16.4295 35.9343 16.5935 35.8062ZM22.7955 33.9438C22.7955 33.6377 22.7496 33.3772 22.6578 33.1629C22.5662 32.9487 22.4368 32.7732 22.27 32.6367C22.1032 32.5004 21.8988 32.4003 21.6568 32.3362C21.415 32.2722 21.1439 32.2401 20.8436 32.2401C20.5654 32.2401 20.2943 32.2597 20.0303 32.2987C19.766 32.3375 19.556 32.3766 19.4005 32.4154C19.2948 32.4435 19.242 32.5046 19.242 32.5991V33.2756C19.242 33.3314 19.2559 33.3705 19.2837 33.3925C19.3115 33.4149 19.3475 33.4261 19.3922 33.4261H19.4337C19.5006 33.4204 19.5839 33.4135 19.684 33.4051C19.7842 33.3968 19.8968 33.3901 20.022 33.3842C20.1471 33.3788 20.2777 33.3746 20.414 33.3717C20.5501 33.3689 20.6851 33.3675 20.8186 33.3675C21.0131 33.3675 21.1661 33.4038 21.2773 33.4761C21.3885 33.5486 21.4441 33.7045 21.4441 33.9438V34.2445H20.9937C20.2763 34.2445 19.7549 34.3572 19.4296 34.5827C19.1043 34.8081 18.9416 35.1659 18.9416 35.6558V35.7313C18.9416 36.0039 18.982 36.2321 19.0625 36.4158C19.1431 36.5996 19.2503 36.7472 19.3837 36.8587C19.5172 36.9699 19.6686 37.0493 19.8384 37.0964C20.008 37.1438 20.1846 37.1676 20.3681 37.1676C20.6184 37.1676 20.8339 37.1341 21.0145 37.0673C21.1952 37.0005 21.3662 36.9086 21.5276 36.7917V36.9253C21.5276 36.9699 21.5442 37.0089 21.5776 37.0422C21.6111 37.0756 21.6499 37.0923 21.6944 37.0923H22.6287C22.6731 37.0923 22.712 37.0756 22.7455 37.0422C22.7789 37.0089 22.7955 36.9699 22.7955 36.9253V33.9438ZM21.1481 36.0942C21.2619 36.0581 21.3691 36.015 21.4692 35.9648V35.0462H20.9937C20.8491 35.0462 20.7296 35.0587 20.635 35.0837C20.5404 35.1088 20.4653 35.1465 20.4098 35.1966C20.3542 35.2465 20.3152 35.3107 20.2931 35.3886C20.2707 35.4666 20.2596 35.5556 20.2596 35.6558V35.7312C20.2596 35.9092 20.3026 36.0233 20.3889 36.0734C20.4751 36.1235 20.6071 36.1485 20.7852 36.1485C20.913 36.1485 21.0339 36.1306 21.1481 36.0942ZM27.9007 36.917V34.1358C27.9007 33.8744 27.8799 33.6278 27.8381 33.3968C27.7964 33.166 27.7214 32.9653 27.6129 32.7954C27.5045 32.6256 27.3543 32.4905 27.1624 32.3904C26.9707 32.2902 26.7245 32.2401 26.4242 32.2401C26.1572 32.2401 25.9208 32.2723 25.7152 32.3369C25.5094 32.4014 25.2925 32.515 25.0646 32.6776V32.4752C25.0646 32.4305 25.0478 32.3911 25.0145 32.3575C24.9811 32.3238 24.9421 32.3068 24.8976 32.3068H23.9634C23.9187 32.3068 23.8799 32.3235 23.8467 32.357C23.8133 32.3904 23.7966 32.4295 23.7966 32.4739V36.917C23.7966 36.9615 23.8145 37.0019 23.8508 37.038C23.8869 37.0743 23.9272 37.0923 23.9717 37.0923H24.9811C25.0256 37.0923 25.0646 37.0743 25.0978 37.0382C25.1313 37.0021 25.1479 36.9619 25.1479 36.9173V33.6341C25.2925 33.5564 25.4287 33.4925 25.5567 33.4426C25.6845 33.3925 25.8096 33.3675 25.932 33.3675C26.0599 33.3675 26.1642 33.38 26.2449 33.4051C26.3254 33.4301 26.388 33.4731 26.4325 33.5345C26.477 33.5954 26.5076 33.6759 26.5243 33.7757C26.5409 33.8758 26.5494 33.9981 26.5494 34.1425V36.9173C26.5494 36.9619 26.566 37.0021 26.5994 37.0382C26.6327 37.0743 26.6715 37.0923 26.7162 37.0923H27.7255C27.7699 37.0923 27.8102 37.0743 27.8464 37.038C27.8826 37.0019 27.9007 36.9615 27.9007 36.917ZM32.0047 36.1071V36.8502C32.0047 36.9114 31.9907 36.9546 31.963 36.9796C31.9351 37.0047 31.8906 37.0255 31.8294 37.0422C31.7127 37.0701 31.5611 37.0978 31.3749 37.1259C31.1885 37.1535 30.9703 37.1676 30.72 37.1676C30.1305 37.1676 29.6592 36.9867 29.3062 36.6246C28.953 36.2628 28.7765 35.7394 28.7765 35.0546V34.3531C28.7765 33.6682 28.953 33.1448 29.3062 32.7831C29.6592 32.421 30.1305 32.2401 30.72 32.2401C30.9703 32.2401 31.1885 32.254 31.3749 32.2817C31.5611 32.3098 31.7127 32.3375 31.8294 32.3653C31.8906 32.3819 31.9351 32.4029 31.963 32.4279C31.9907 32.453 32.0047 32.4962 32.0047 32.5574V33.3007C32.0047 33.3453 31.9893 33.38 31.9588 33.4051C31.9281 33.4301 31.8906 33.4426 31.8462 33.4426H31.8294C31.6737 33.4261 31.5251 33.4121 31.3832 33.401C31.2413 33.3901 31.0508 33.3842 30.8118 33.3842C30.7172 33.3842 30.6283 33.3996 30.5448 33.4301C30.4613 33.4608 30.3891 33.5137 30.328 33.5888C30.2666 33.6641 30.2181 33.7641 30.1819 33.8895C30.1457 34.0147 30.1277 34.1692 30.1277 34.3531V35.0546C30.1277 35.2382 30.1457 35.3927 30.1819 35.5181C30.2181 35.6433 30.2666 35.7436 30.328 35.8187C30.3891 35.8939 30.4613 35.9468 30.5448 35.9774C30.6283 36.008 30.7172 36.0233 30.8118 36.0233C31.0508 36.0233 31.2413 36.0178 31.3832 36.0067C31.5251 35.9956 31.6737 35.9815 31.8294 35.9649H31.8462C31.8906 35.9649 31.9281 35.9774 31.9588 36.0025C31.9893 36.0276 32.0047 36.0623 32.0047 36.1071ZM36.6346 34.4115C36.6346 34.0773 36.5885 33.7768 36.4966 33.5095C36.4046 33.2423 36.2709 33.0155 36.0954 32.8289C35.9199 32.6424 35.7025 32.4976 35.4436 32.3946C35.1844 32.2918 34.8848 32.2401 34.5449 32.2401C34.2051 32.2401 33.9056 32.2918 33.6465 32.3946C33.3873 32.4976 33.1685 32.6424 32.9903 32.8289C32.8119 33.0155 32.6768 33.2423 32.585 33.5095C32.4928 33.7768 32.4469 34.0773 32.4469 34.4115V34.9961C32.4469 35.3301 32.4928 35.6309 32.585 35.8981C32.6768 36.1653 32.8119 36.3922 32.9903 36.5788C33.1685 36.7654 33.3873 36.91 33.6465 37.013C33.9056 37.1159 34.2051 37.1676 34.5449 37.1676C34.8848 37.1676 35.1844 37.1159 35.4436 37.013C35.7025 36.91 35.9199 36.7654 36.0954 36.5788C36.2709 36.3922 36.4046 36.1653 36.4966 35.8981C36.5885 35.6309 36.6346 35.3301 36.6346 34.9961V34.4115ZM34.5449 36.0233C35.037 36.0233 35.2832 35.6809 35.2832 34.9961V34.4115C35.2832 33.7322 35.037 33.3925 34.5449 33.3925C34.3016 33.3925 34.1164 33.4774 33.9893 33.6472C33.8619 33.8172 33.7984 34.0719 33.7984 34.4115V34.9961C33.7984 35.3357 33.8619 35.5918 33.9893 35.7644C34.1164 35.9371 34.3016 36.0233 34.5449 36.0233ZM41.5976 36.917V34.1358C41.5976 33.8744 41.5765 33.6278 41.5351 33.3968C41.4933 33.166 41.4181 32.9653 41.3095 32.7954C41.2011 32.6256 41.0511 32.4905 40.8593 32.3904C40.6674 32.2902 40.4213 32.2401 40.1211 32.2401C39.8542 32.2401 39.6177 32.2723 39.4119 32.3369C39.2062 32.4014 38.9893 32.515 38.7613 32.6776V32.4752C38.7613 32.4305 38.7447 32.3911 38.7111 32.3575C38.678 32.3238 38.6389 32.3068 38.5945 32.3068H37.6602C37.6157 32.3068 37.5769 32.3235 37.5434 32.357C37.5102 32.3904 37.4934 32.4295 37.4934 32.4739V36.917C37.4934 36.9615 37.5114 37.0019 37.5476 37.038C37.5838 37.0743 37.624 37.0923 37.6687 37.0923H38.678C38.7224 37.0923 38.7613 37.0743 38.7948 37.0382C38.828 37.0021 38.8448 36.9619 38.8448 36.9173V33.6341C38.9893 33.5564 39.1256 33.4925 39.2534 33.4426C39.3815 33.3925 39.5065 33.3675 39.629 33.3675C39.7568 33.3675 39.8611 33.38 39.9416 33.4051C40.0222 33.4301 40.0849 33.4731 40.1294 33.5345C40.1739 33.5954 40.2044 33.6759 40.2212 33.7757C40.2378 33.8758 40.2462 33.9981 40.2462 34.1425V36.9173C40.2462 36.9619 40.2628 37.0021 40.2962 37.0382C40.3296 37.0743 40.3684 37.0923 40.413 37.0923H41.4223C41.4668 37.0923 41.5072 37.0743 41.5434 37.038C41.5794 37.0019 41.5976 36.9615 41.5976 36.917ZM45.2348 36.2893V36.9357C45.2348 37.0295 45.182 37.0848 45.0763 37.1011C44.9483 37.1233 44.8371 37.1398 44.7427 37.1509C44.6481 37.162 44.5395 37.1675 44.4174 37.1675C44.1905 37.1675 43.9901 37.1493 43.816 37.1133C43.6419 37.077 43.4966 37.0061 43.3805 36.9003C43.2646 36.7945 43.1761 36.6483 43.1153 36.4617C43.0547 36.2753 43.0242 36.0347 43.0242 35.7394V33.3175L42.357 33.2088C42.3123 33.1977 42.2721 33.1769 42.2359 33.1462C42.1997 33.1157 42.1817 33.0781 42.1817 33.0335V32.4822C42.1817 32.4378 42.1997 32.3974 42.2359 32.3611C42.2721 32.325 42.3123 32.3068 42.357 32.3068H43.0242V31.622C43.0242 31.5774 43.0409 31.5414 43.0739 31.5134C43.1068 31.4857 43.1458 31.4663 43.1902 31.455L44.2016 31.2798H44.2263C44.2705 31.2798 44.3065 31.2921 44.3343 31.3171C44.3618 31.3423 44.3757 31.3771 44.3757 31.4215V32.3068H45.0597C45.104 32.3068 45.143 32.3237 45.1764 32.3573C45.2099 32.3909 45.2265 32.4305 45.2265 32.4752V33.1573C45.2265 33.2024 45.2099 33.2416 45.1764 33.2752C45.143 33.3089 45.104 33.3257 45.0597 33.3257H44.3757V35.7561C44.3757 35.9231 44.3895 36.0304 44.4174 36.0776C44.4451 36.1249 44.5229 36.1485 44.6507 36.1485H45.0597C45.1764 36.1485 45.2348 36.1955 45.2348 36.2893ZM49.6891 33.9438C49.6891 33.6377 49.6433 33.3772 49.5514 33.1629C49.4597 32.9487 49.3305 32.7732 49.1637 32.6367C48.9969 32.5004 48.7925 32.4003 48.5505 32.3362C48.3087 32.2722 48.0376 32.2401 47.7373 32.2401C47.4589 32.2401 47.188 32.2597 46.924 32.2987C46.6597 32.3375 46.4497 32.3766 46.2942 32.4154C46.1882 32.4435 46.1357 32.5046 46.1357 32.5991V33.2756C46.1357 33.3314 46.1494 33.3705 46.1773 33.3925C46.2052 33.4149 46.2412 33.4261 46.2857 33.4261H46.3274C46.3943 33.4204 46.4776 33.4135 46.5777 33.4051C46.6779 33.3968 46.7905 33.3901 46.9155 33.3842C47.0408 33.3788 47.1714 33.3746 47.3077 33.3717C47.4438 33.3689 47.5788 33.3675 47.7121 33.3675C47.9068 33.3675 48.0598 33.4038 48.171 33.4761C48.2822 33.5486 48.3378 33.7045 48.3378 33.9438V34.2445H47.8874C47.1698 34.2445 46.6486 34.3572 46.3233 34.5827C45.998 34.8081 45.8353 35.1659 45.8353 35.6558V35.7313C45.8353 36.0039 45.8755 36.2321 45.9562 36.4158C46.0366 36.5996 46.144 36.7472 46.2774 36.8587C46.4109 36.9699 46.5623 37.0493 46.7321 37.0964C46.9017 37.1438 47.0782 37.1676 47.2618 37.1676C47.5121 37.1676 47.7274 37.1341 47.9082 37.0673C48.0889 37.0005 48.2597 36.9086 48.4213 36.7917V36.9253C48.4213 36.9699 48.4379 37.0089 48.4713 37.0422C48.5046 37.0756 48.5436 37.0923 48.5881 37.0923H49.5224C49.5668 37.0923 49.6057 37.0756 49.6392 37.0422C49.6724 37.0089 49.6891 36.9699 49.6891 36.9253V33.9438ZM48.0418 36.0942C48.1556 36.0581 48.2628 36.015 48.3629 35.9648V35.0462H47.8874C47.7428 35.0462 47.6233 35.0587 47.5287 35.0837C47.4341 35.1088 47.359 35.1465 47.3035 35.1966C47.2477 35.2465 47.2088 35.3107 47.1868 35.3886C47.1644 35.4666 47.1533 35.5556 47.1533 35.6558V35.7312C47.1533 35.9092 47.1963 36.0233 47.2826 36.0734C47.3688 36.1235 47.5008 36.1485 47.6789 36.1485C47.8067 36.1485 47.9274 36.1306 48.0418 36.0942ZM53.7933 36.8502V36.1071C53.7933 36.0623 53.7779 36.0276 53.7474 36.0025C53.7167 35.9774 53.6793 35.9649 53.6348 35.9649H53.6181C53.4624 35.9815 53.3136 35.9956 53.1718 36.0067C53.0301 36.0178 52.8395 36.0233 52.6005 36.0233C52.5057 36.0233 52.4167 36.008 52.3336 35.9774C52.2501 35.9468 52.1777 35.8939 52.1165 35.8187C52.0554 35.7436 52.0067 35.6433 51.9707 35.5181C51.9343 35.3927 51.9165 35.2382 51.9165 35.0546V34.3531C51.9165 34.1692 51.9343 34.0147 51.9707 33.8895C52.0067 33.7641 52.0554 33.6641 52.1165 33.5888C52.1777 33.5137 52.2501 33.4608 52.3336 33.4301C52.4167 33.3996 52.5057 33.3842 52.6005 33.3842C52.8395 33.3842 53.0301 33.3901 53.1718 33.401C53.3136 33.4121 53.4624 33.4261 53.6181 33.4426H53.6348C53.6793 33.4426 53.7167 33.4301 53.7474 33.4051C53.7779 33.38 53.7933 33.3453 53.7933 33.3007V32.5574C53.7933 32.4962 53.7794 32.453 53.7515 32.4279C53.7235 32.4029 53.6793 32.3819 53.6181 32.3653C53.5014 32.3375 53.3497 32.3098 53.1635 32.2817C52.9771 32.254 52.759 32.2401 52.5087 32.2401C51.9189 32.2401 51.4479 32.421 51.0947 32.7831C50.7415 33.1448 50.565 33.6682 50.565 34.3531V35.0546C50.565 35.7394 50.7415 36.2628 51.0947 36.6246C51.4479 36.9867 51.9189 37.1676 52.5087 37.1676C52.759 37.1676 52.9771 37.1535 53.1635 37.1259C53.3497 37.0978 53.5014 37.0701 53.6181 37.0422C53.6793 37.0255 53.7235 37.0047 53.7515 36.9796C53.7794 36.9546 53.7933 36.9114 53.7933 36.8502ZM57.3884 36.2893V36.9357C57.3884 37.0295 57.3354 37.0848 57.2299 37.1011C57.1019 37.1233 56.9907 37.1398 56.8963 37.1509C56.8016 37.162 56.6931 37.1675 56.571 37.1675C56.3441 37.1675 56.1437 37.1493 55.9696 37.1133C55.7954 37.077 55.6502 37.0061 55.5343 36.9003C55.4183 36.7945 55.3298 36.6483 55.269 36.4617C55.2083 36.2753 55.1778 36.0347 55.1778 35.7394V33.3175L54.5106 33.2088C54.4659 33.1977 54.4257 33.1769 54.3895 33.1462C54.3533 33.1157 54.3353 33.0781 54.3353 33.0335V32.4822C54.3353 32.4378 54.3533 32.3974 54.3895 32.3611C54.4257 32.325 54.4659 32.3068 54.5106 32.3068H55.1778V31.622C55.1778 31.5774 55.1945 31.5414 55.2276 31.5134C55.2605 31.4857 55.2993 31.4663 55.3436 31.455L56.355 31.2798H56.38C56.4241 31.2798 56.4602 31.2921 56.4875 31.3171C56.5154 31.3423 56.5293 31.3771 56.5293 31.4215V32.3068H57.2133C57.2577 32.3068 57.2966 32.3237 57.3301 32.3573C57.3633 32.3909 57.3801 32.4305 57.3801 32.4752V33.1573C57.3801 33.2024 57.3633 33.2416 57.3301 33.2752C57.2966 33.3089 57.2577 33.3257 57.2133 33.3257H56.5293V35.7561C56.5293 35.9231 56.5431 36.0304 56.571 36.0776C56.5987 36.1249 56.6765 36.1485 56.8045 36.1485H57.2133C57.3301 36.1485 57.3884 36.1955 57.3884 36.2893Z", fill: "#005697" }), jsxRuntime.jsx("path", { d: "M52.6187 14.7398H39.0664L37.6881 16.2935L33.2155 21.3349V21.3351L31.8372 22.8886H18.464L19.821 21.3153L20.4633 20.5706L21.8202 18.9973H15.6582C14.5325 18.9973 13.6113 19.943 13.6113 21.0987V25.5326C13.6113 26.6885 14.5325 27.6342 15.6582 27.6342H39.2492C40.3749 27.6342 41.9127 26.9318 42.6665 26.0733L46.235 22.0097L52.6187 14.7398Z", fill: "#005697" }), jsxRuntime.jsx("path", { d: "M55.3418 10C56.4676 10 57.3887 10.9457 57.3887 12.1015V16.5353C57.3887 17.691 56.4676 18.6368 55.3418 18.6368H49.1999L50.5697 17.0753H50.5699L51.2491 16.3012L52.6189 14.7398H39.0667L31.8375 22.8945H18.3813L28.0314 11.9701L28.3966 11.5566C29.153 10.7005 30.6929 10 31.8186 10H55.3418V10Z", fill: "#FBD500" })] })));
18406
18447
  };
18407
18448
 
18408
- var Text$q = antd.Typography.Text;
18449
+ var Text$r = antd.Typography.Text;
18409
18450
  var MiniCreditCard = function (_a) {
18410
18451
  var className = _a.className, buttons = _a.buttons, _b = _a.hideDropdownMenu, hideDropdownMenu = _b === void 0 ? false : _b, _c = _a.hideDefaultTag, hideDefaultTag = _c === void 0 ? false : _c, onClickRemove = _a.onClickRemove, paymentMethodData = _a.paymentMethodData, onClickSetDefault = _a.onClickSetDefault, id = _a.id;
18411
18452
  var darkMode = react.useContext(BunnyContext).darkMode;
@@ -18416,7 +18457,7 @@ var MiniCreditCard = function (_a) {
18416
18457
  return darkMode ? 'var(--row-background-alternate)' : 'bg-slate-50';
18417
18458
  }, [darkMode]);
18418
18459
  var isDefault = paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.isDefault;
18419
- return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-row bunny-justify-between bunny-items-center bunny-p-1 bunny-px-3 bunny-border-solid ".concat(backgroundColor, " bunny-").concat(borderColor, " bunny-rounded-md bunny-border ").concat(className), id: id }, { children: paymentMethodData ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-4" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2 bunny-space-between bunny-w-full" }, { children: [jsxRuntime.jsx(CardImage, { paymentMethodData: paymentMethodData }), jsxRuntime.jsx(Issuer, { paymentMethodData: paymentMethodData }), jsxRuntime.jsx(Identifier, { paymentMethodData: paymentMethodData }), !hideDefaultTag && (jsxRuntime.jsx("div", { children: isDefault ? (jsxRuntime.jsx(antd.Tag, __assign({ bordered: false, color: "blue" }, { children: "Default" }))) : null }))] })) })), buttons ? (buttons) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !hideDropdownMenu && (jsxRuntime.jsx(DropdownMenu, { setDefault: onClickSetDefault, remove: onClickRemove, isDefault: isDefault !== null && isDefault !== void 0 ? isDefault : false, id: "credit-card-dropdown-".concat(paymentMethodData.id) })) }))] })) : (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-items-center justify-between w-full" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-2 bunny-items-center" }, { children: [jsxRuntime.jsx(icons.CreditCardOutlined, {}), jsxRuntime.jsx(Text$q, __assign({ className: "bunny-text-slate-400", style: { fontSize: '12px' } }, { children: "No payment methods" }))] })), jsxRuntime.jsx(antd.Button, { disabled: true, type: "link" }), buttons] }))) })));
18460
+ return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-row bunny-justify-between bunny-items-center bunny-p-1 bunny-px-3 bunny-border-solid ".concat(backgroundColor, " bunny-").concat(borderColor, " bunny-rounded-md bunny-border ").concat(className), id: id }, { children: paymentMethodData ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-4" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2 bunny-space-between bunny-w-full" }, { children: [jsxRuntime.jsx(CardImage, { paymentMethodData: paymentMethodData }), jsxRuntime.jsx(Issuer, { paymentMethodData: paymentMethodData }), jsxRuntime.jsx(Identifier, { paymentMethodData: paymentMethodData }), !hideDefaultTag && (jsxRuntime.jsx("div", { children: isDefault ? (jsxRuntime.jsx(antd.Tag, __assign({ bordered: false, color: "blue" }, { children: "Default" }))) : null }))] })) })), buttons ? (buttons) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !hideDropdownMenu && (jsxRuntime.jsx(DropdownMenu, { setDefault: onClickSetDefault, remove: onClickRemove, isDefault: isDefault !== null && isDefault !== void 0 ? isDefault : false, id: "credit-card-dropdown-".concat(paymentMethodData.id) })) }))] })) : (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-items-center justify-between w-full" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-2 bunny-items-center" }, { children: [jsxRuntime.jsx(icons.CreditCardOutlined, {}), jsxRuntime.jsx(Text$r, __assign({ className: "bunny-text-slate-400", style: { fontSize: '12px' } }, { children: "No payment methods" }))] })), jsxRuntime.jsx(antd.Button, { disabled: true, type: "link" }), buttons] }))) })));
18420
18461
  };
18421
18462
  var Identifier = function (_a) {
18422
18463
  var _b, _c, _d;
@@ -18425,9 +18466,9 @@ var Identifier = function (_a) {
18425
18466
  return null;
18426
18467
  }
18427
18468
  if (((_c = paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.metadata) === null || _c === void 0 ? void 0 : _c.type) === 'cashapp') {
18428
- return jsxRuntime.jsx(Text$q, { children: "Cashapp" });
18469
+ return jsxRuntime.jsx(Text$r, { children: "Cashapp" });
18429
18470
  }
18430
- return (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(Text$q, __assign({ className: "relative -top-0.5" }, { children: "****" })), jsxRuntime.jsx(Text$q, { children: (_d = paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.metadata) === null || _d === void 0 ? void 0 : _d.identifier })] }));
18471
+ return (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(Text$r, __assign({ className: "relative -top-0.5" }, { children: "****" })), jsxRuntime.jsx(Text$r, { children: (_d = paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.metadata) === null || _d === void 0 ? void 0 : _d.identifier })] }));
18431
18472
  };
18432
18473
  var Issuer = function (_a) {
18433
18474
  var _b;
@@ -18436,7 +18477,7 @@ var Issuer = function (_a) {
18436
18477
  var issuer = (_b = paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.metadata) === null || _b === void 0 ? void 0 : _b.issuer;
18437
18478
  if (issuer.length == 0 || list.includes(issuer.toLowerCase()))
18438
18479
  return null;
18439
- return jsxRuntime.jsx(Text$q, { children: lodashExports.capitalize(issuer) });
18480
+ return jsxRuntime.jsx(Text$r, { children: lodashExports.capitalize(issuer) });
18440
18481
  };
18441
18482
  var DropdownMenu = function (_a) {
18442
18483
  var setDefault = _a.setDefault, remove = _a.remove, isDefault = _a.isDefault, id = _a.id;
@@ -18515,7 +18556,7 @@ var useAutoSetDefaultPaymentMethod = function (_a) {
18515
18556
  }), storedPaymentMethods = _c.paymentMethods, defaultPaymentMethod = _c.defaultPaymentMethod;
18516
18557
  // Set the default payment method on the cache. Prevents 'handleSetDefault' from being called too many times.
18517
18558
  function setDefaultPaymentMethodOnCache(targetPaymentMethod) {
18518
- var cachedPaymentMethods = queryClient.getQueryData(common.QueryKeyFactory.default.accountPaymentMethodKey({
18559
+ var cachedPaymentMethods = queryClient.getQueryData(common.QueryKeyFactory.default.accountPaymentMethodsKey({
18519
18560
  accountId: accountId,
18520
18561
  token: token,
18521
18562
  }));
@@ -18524,7 +18565,7 @@ var useAutoSetDefaultPaymentMethod = function (_a) {
18524
18565
  var paymentMethod = _a[_i];
18525
18566
  paymentMethod.isDefault = paymentMethod.id === targetPaymentMethod.id;
18526
18567
  }
18527
- queryClient.setQueryData(common.QueryKeyFactory.default.accountPaymentMethodKey({
18568
+ queryClient.setQueryData(common.QueryKeyFactory.default.accountPaymentMethodsKey({
18528
18569
  accountId: accountId,
18529
18570
  token: token,
18530
18571
  }), cachedPaymentMethods);
@@ -18733,7 +18774,7 @@ function useSave$1(_a) {
18733
18774
  return { save: save, isSaving: isSaving };
18734
18775
  }
18735
18776
 
18736
- var Text$p = antd.Typography.Text;
18777
+ var Text$q = antd.Typography.Text;
18737
18778
  var TEST_CARD = '4242424242424242';
18738
18779
  var DemoPayForm = function (_a) {
18739
18780
  var onFail = _a.onFail, onSavePaymentMethod = _a.onSavePaymentMethod, plugin = _a.plugin;
@@ -18795,7 +18836,7 @@ var DemoPayForm = function (_a) {
18795
18836
  var onCardCvcChange = function (cvc) {
18796
18837
  setCardDetails(__assign(__assign({}, cardDetails), { cvc: cvc }));
18797
18838
  };
18798
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [jsxRuntime.jsxs(StyledInputs, __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2", darkMode: darkMode !== null && darkMode !== void 0 ? darkMode : false }, { children: [jsxRuntime.jsx(DemoPayCardNumber, { onChange: onCardNumberChange, value: cardDetails.number }), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-2" }, { children: [jsxRuntime.jsx(DemoPayExpiry, { onChange: onCardExpiryChange, value: cardDetails.expiry }), jsxRuntime.jsx(DemoPayCardCvc, { onChange: onCardCvcChange, value: cardDetails.cvc })] }))] })), jsxRuntime.jsx(Text$p, { children: "DemoPay is for testing only." }), jsxRuntime.jsx(SavePaymentMethodFooter, { isSaving: isSaving, onSave: onSave })] })));
18839
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [jsxRuntime.jsxs(StyledInputs, __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2", darkMode: darkMode !== null && darkMode !== void 0 ? darkMode : false }, { children: [jsxRuntime.jsx(DemoPayCardNumber, { onChange: onCardNumberChange, value: cardDetails.number }), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-2" }, { children: [jsxRuntime.jsx(DemoPayExpiry, { onChange: onCardExpiryChange, value: cardDetails.expiry }), jsxRuntime.jsx(DemoPayCardCvc, { onChange: onCardCvcChange, value: cardDetails.cvc })] }))] })), jsxRuntime.jsx(Text$q, { children: "DemoPay is for testing only." }), jsxRuntime.jsx(SavePaymentMethodFooter, { isSaving: isSaving, onSave: onSave })] })));
18799
18840
  };
18800
18841
  var StyledInputs = defaultStyled.div(templateObject_1$a || (templateObject_1$a = __makeTemplateObject(["\n .ant-input {\n background-color: ", " !important;\n }\n .ant-input:not(:focus) {\n border-color: ", " !important;\n }\n"], ["\n .ant-input {\n background-color: ", " !important;\n }\n .ant-input:not(:focus) {\n border-color: ", " !important;\n }\n"])), function (_a) {
18801
18842
  var darkMode = _a.darkMode;
@@ -18962,7 +19003,7 @@ var CardIcon = function (_a) {
18962
19003
  return (jsxRuntime.jsxs("svg", __assign({ className: className, width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: [jsxRuntime.jsx("path", { d: "M15 3.75H3C2.17157 3.75 1.5 4.42157 1.5 5.25V12.75C1.5 13.5784 2.17157 14.25 3 14.25H15C15.8284 14.25 16.5 13.5784 16.5 12.75V5.25C16.5 4.42157 15.8284 3.75 15 3.75Z", stroke: common.SLATE_400, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), jsxRuntime.jsx("path", { d: "M1.5 7.5H16.5", stroke: common.SLATE_400, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] })));
18963
19004
  };
18964
19005
 
18965
- var Text$o = antd.Typography.Text;
19006
+ var Text$p = antd.Typography.Text;
18966
19007
  var PaymentMethodSelector = function (_a) {
18967
19008
  var paymentMethodAllowedPlugins = _a.paymentMethodAllowedPlugins, onSelect = _a.onSelect, value = _a.value;
18968
19009
  return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: paymentMethodAllowedPlugins === null || paymentMethodAllowedPlugins === void 0 ? void 0 : paymentMethodAllowedPlugins.map(function (plugin, index) { return (jsxRuntime.jsx(PaymentOption, { name: plugin.name, onClick: onSelect, paymentPlugin: plugin, selected: (value === null || value === void 0 ? void 0 : value.id) === plugin.id }, index)); }) })));
@@ -18975,7 +19016,7 @@ var PaymentOption = function (_a) {
18975
19016
  var isCard = name === null || name === void 0 ? void 0 : name.toLowerCase().includes('card');
18976
19017
  return (jsxRuntime.jsxs(PaymentOptionContainer, __assign({ "$brandColor": brandColor, "$selected": selected, className: "bunny-flex bunny-justify-between bunny-items-center bunny-cursor-pointer bunny-py-2 bunny-rounded bunny-border-solid ".concat(darkMode
18977
19018
  ? "var(--row-background-dark) border-gray-500"
18978
- : 'bunny-bg-slate-50 bunny-border-slate-200', " bunny-border"), onClick: function () { return onClick(paymentPlugin); } }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-2 bunny-items-center bunny-pl-4" }, { children: [jsxRuntime.jsx(antd.Checkbox, { checked: selected, className: darkMode ? 'border-gray-400' : '' }), jsxRuntime.jsx(Text$o, { children: name })] })), isAch ? (jsxRuntime.jsx(icons.BankOutlined, { className: "bunny-pr-4" })) : isCard ? (jsxRuntime.jsx(CardIcon, { className: "bunny-pr-4" })) : (jsxRuntime.jsx(CardIcon, { className: "bunny-pr-4" }))] })));
19019
+ : 'bunny-bg-slate-50 bunny-border-slate-200', " bunny-border"), onClick: function () { return onClick(paymentPlugin); } }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-2 bunny-items-center bunny-pl-4" }, { children: [jsxRuntime.jsx(antd.Checkbox, { checked: selected, className: darkMode ? 'border-gray-400' : '' }), jsxRuntime.jsx(Text$p, { children: name })] })), isAch ? (jsxRuntime.jsx(icons.BankOutlined, { className: "bunny-pr-4" })) : isCard ? (jsxRuntime.jsx(CardIcon, { className: "bunny-pr-4" })) : (jsxRuntime.jsx(CardIcon, { className: "bunny-pr-4" }))] })));
18979
19020
  };
18980
19021
  var PaymentOptionContainer = defaultStyled.div(templateObject_1$9 || (templateObject_1$9 = __makeTemplateObject(["\n transition: border 0.3s ease;\n\n ", "\n\n &:hover {\n border-color: ", ";\n }\n"], ["\n transition: border 0.3s ease;\n\n ", "\n\n &:hover {\n border-color: ", ";\n }\n"])), function (_a) {
18981
19022
  var $brandColor = _a.$brandColor, $selected = _a.$selected;
@@ -19011,9 +19052,8 @@ function useRemovePaymentMethod(paymentPlugins, apiHost, token, accountId, onRem
19011
19052
  })
19012
19053
  .then(function () {
19013
19054
  showSuccessNotification('Payment method was removed', 'Success');
19014
- // TODO: rename accountPaymentMethodKey to accountPaymentMethodsKey (pluralized)
19015
19055
  queryClient.invalidateQueries({
19016
- queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
19056
+ queryKey: common.QueryKeyFactory.default.accountPaymentMethodsKey({
19017
19057
  token: token,
19018
19058
  accountId: accountId,
19019
19059
  }),
@@ -19064,9 +19104,8 @@ function useSetDefaultPaymentMethod(paymentPlugins, apiHost, token, accountId, o
19064
19104
  .then(function () {
19065
19105
  showSuccessNotification("Payment method ".concat(data.metadata.identifier, " was set as default"), 'Success');
19066
19106
  onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess();
19067
- // TODO: rename accountPaymentMethodKey to accountPaymentMethodsKey (pluralized)
19068
19107
  queryClient.invalidateQueries({
19069
- queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
19108
+ queryKey: common.QueryKeyFactory.default.accountPaymentMethodsKey({
19070
19109
  token: token,
19071
19110
  accountId: accountId,
19072
19111
  }),
@@ -19093,22 +19132,21 @@ function useSetDefaultPaymentMethod(paymentPlugins, apiHost, token, accountId, o
19093
19132
  return { setDefaultPaymentMethod: setDefaultPaymentMethod, loading: loading };
19094
19133
  }
19095
19134
 
19096
- var showErrorNotification$2 = common.useErrorNotification();
19135
+ var showErrorNotification$4 = common.useErrorNotification();
19097
19136
  var PaymentForm = function (_a) {
19098
- var _b;
19099
- var invoice = _a.invoice, onFail = _a.onFail, onPaymentSuccess = _a.onPaymentSuccess, onPaymentHoldSuccess = _a.onPaymentHoldSuccess, quote = _a.quote, accountId = _a.accountId, onSavePaymentMethod = _a.onSavePaymentMethod, onRemovePaymentMethod = _a.onRemovePaymentMethod, onSetDefaultPaymentMethod = _a.onSetDefaultPaymentMethod, overrideToken = _a.overrideToken, customCheckoutFunction = _a.customCheckoutFunction, currencyIdFromProps = _a.currencyId, paymentHoldOptions = _a.paymentHoldOptions;
19137
+ var invoice = _a.invoice, onFail = _a.onFail, onPaymentSuccess = _a.onPaymentSuccess, onPaymentHoldSuccess = _a.onPaymentHoldSuccess, quote = _a.quote, accountId = _a.accountId, onSavePaymentMethod = _a.onSavePaymentMethod, onRemovePaymentMethod = _a.onRemovePaymentMethod, onSetDefaultPaymentMethod = _a.onSetDefaultPaymentMethod, overrideToken = _a.overrideToken, customCheckoutFunction = _a.customCheckoutFunction, paymentHoldOptions = _a.paymentHoldOptions;
19100
19138
  // Local state
19101
- var _c = react.useState(false), showPaymentMethodForm = _c[0], setShowPaymentMethodForm = _c[1];
19139
+ var _b = react.useState(false), showPaymentMethodForm = _b[0], setShowPaymentMethodForm = _b[1];
19102
19140
  // Simple hooks
19103
19141
  var queryClient = reactQuery.useQueryClient();
19104
19142
  var apiHost = react.useContext(BunnyContext).apiHost;
19105
19143
  var tokenFromContexts = useToken();
19106
19144
  var token = overrideToken || tokenFromContexts;
19107
- var _d = usePaymentMethod({
19145
+ var _c = usePaymentMethod({
19108
19146
  accountId: accountId,
19109
19147
  token: token,
19110
19148
  apiHost: apiHost,
19111
- }), storedPaymentMethods = _d.paymentMethods, defaultPaymentMethod = _d.defaultPaymentMethod, isPaymentMethodLoading = _d.isLoading;
19149
+ }), storedPaymentMethods = _c.paymentMethods, defaultPaymentMethod = _c.defaultPaymentMethod, isPaymentMethodLoading = _c.isLoading;
19112
19150
  // Complex hooks
19113
19151
  var paymentPlugins = usePaymentPlugins({ apiHost: apiHost, token: token, accountId: accountId }).paymentPlugins;
19114
19152
  var selectedPaymentMethodPlugin = react.useMemo(function () {
@@ -19118,13 +19156,14 @@ var PaymentForm = function (_a) {
19118
19156
  // Derived state
19119
19157
  var defaultPaymentMethodPlugin = paymentPlugins === null || paymentPlugins === void 0 ? void 0 : paymentPlugins.find(function (plugin) { var _a, _b, _c; return ((_a = plugin.id) === null || _a === void 0 ? void 0 : _a.toString()) === ((_c = (_b = defaultPaymentMethod === null || defaultPaymentMethod === void 0 ? void 0 : defaultPaymentMethod.plugin) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.toString()); });
19120
19158
  var paying = Boolean(quote || invoice);
19121
- var currencyId = (_b = ((quote === null || quote === void 0 ? void 0 : quote.currencyId) ||
19122
- (invoice === null || invoice === void 0 ? void 0 : invoice.currencyId) ||
19123
- currencyIdFromProps)) === null || _b === void 0 ? void 0 : _b.toLowerCase();
19159
+ var _d = usePaymentFormCurrencyId({
19160
+ quote: quote,
19161
+ invoice: invoice,
19162
+ }), currencyId = _d.currencyId, isCurrencyIdLoading = _d.isCurrencyIdLoading;
19124
19163
  var paymentRequired = quote ? getQuoteAmountDue(quote) > 0 : true;
19125
19164
  // Custom hooks
19126
19165
  var _e = useSetDefaultPaymentMethod(paymentPlugins || [], apiHost, token, accountId, function (message) {
19127
- showErrorNotification$2(message, 'Error setting default payment method');
19166
+ showErrorNotification$4(message, 'Error setting default payment method');
19128
19167
  }, function () {
19129
19168
  onSetDefaultPaymentMethod === null || onSetDefaultPaymentMethod === void 0 ? void 0 : onSetDefaultPaymentMethod();
19130
19169
  }), handleSetDefault = _e.setDefaultPaymentMethod, setDefaultPaymentMethodLoading = _e.loading;
@@ -19161,7 +19200,7 @@ var PaymentForm = function (_a) {
19161
19200
  onError: onFail,
19162
19201
  }), checkoutNoPayment = _g.mutate, isCheckingOutNoPayment = _g.isPending;
19163
19202
  var onClickRemove = useRemovePaymentMethod(paymentPlugins || [], apiHost, token, accountId, onRemovePaymentMethod, function (message) {
19164
- showErrorNotification$2(message, 'Error removing payment method');
19203
+ showErrorNotification$4(message, 'Error removing payment method');
19165
19204
  });
19166
19205
  var handlePaymentSuccess = function () {
19167
19206
  // Hide payment method selector and form
@@ -19170,7 +19209,7 @@ var PaymentForm = function (_a) {
19170
19209
  };
19171
19210
  var handleSavePaymentMethod = function (response) {
19172
19211
  queryClient.invalidateQueries({
19173
- queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
19212
+ queryKey: common.QueryKeyFactory.default.accountPaymentMethodsKey({
19174
19213
  accountId: accountId,
19175
19214
  token: token,
19176
19215
  }),
@@ -19180,7 +19219,7 @@ var PaymentForm = function (_a) {
19180
19219
  };
19181
19220
  function handleClickAddPaymentMethod() {
19182
19221
  if ((paymentPlugins === null || paymentPlugins === void 0 ? void 0 : paymentPlugins.length) === 0) {
19183
- showErrorNotification$2('No payment plugins available', 'Error adding payment method');
19222
+ showErrorNotification$4('No payment plugins available', 'Error adding payment method');
19184
19223
  }
19185
19224
  else {
19186
19225
  setShowPaymentMethodForm(true);
@@ -19192,9 +19231,14 @@ var PaymentForm = function (_a) {
19192
19231
  setShowPaymentMethodForm(true);
19193
19232
  }
19194
19233
  }, [storedPaymentMethods]);
19195
- if (isPaymentMethodLoading) {
19234
+ if (isPaymentMethodLoading || isCurrencyIdLoading) {
19196
19235
  return jsxRuntime.jsx(antd.Skeleton, { active: true, className: "bunny-p-4" });
19197
19236
  }
19237
+ // Return early because it is a bug if PaymentForm is rendered without a currency ID.
19238
+ // For example, sepa / iDeal may not show for dutch customer if no currencyId
19239
+ if (!currencyId) {
19240
+ return jsxRuntime.jsx("div", { children: "PaymentForm error: No currency ID found from Quote or Invoice or props." });
19241
+ }
19198
19242
  return (jsxRuntime.jsx(PaymentContext.Provider, __assign({ value: {
19199
19243
  onClickCancel: function () { return setShowPaymentMethodForm(false); },
19200
19244
  accountId: accountId,
@@ -19216,9 +19260,18 @@ function StripeWrapper(_a) {
19216
19260
  var _b = useStripePlugin(plugin, apiHost, currencyId || 'usd', token, accountId), stripe = _b.stripe, options = _b.options;
19217
19261
  return (jsxRuntime.jsx(reactStripeJs.Elements, __assign({ options: options, stripe: stripe }, { children: children })));
19218
19262
  }
19263
+ function usePaymentFormCurrencyId(_a) {
19264
+ var quote = _a.quote, invoice = _a.invoice;
19265
+ var token = useToken();
19266
+ var _b = useCurrentUserData(token), currentUser = _b.currentUser, isCurrentUserDataLoading = _b.isCurrentUserDataLoading;
19267
+ var account = currentUser === null || currentUser === void 0 ? void 0 : currentUser.account;
19268
+ var accountCurrencyId = account === null || account === void 0 ? void 0 : account.currencyId;
19269
+ var currencyId = react.useMemo(function () { var _a; return (_a = (accountCurrencyId || (quote === null || quote === void 0 ? void 0 : quote.currencyId) || (invoice === null || invoice === void 0 ? void 0 : invoice.currencyId))) === null || _a === void 0 ? void 0 : _a.toLowerCase(); }, [accountCurrencyId, quote === null || quote === void 0 ? void 0 : quote.currencyId, invoice === null || invoice === void 0 ? void 0 : invoice.currencyId]);
19270
+ return { currencyId: currencyId, isCurrencyIdLoading: isCurrentUserDataLoading };
19271
+ }
19219
19272
 
19220
19273
  function Invoice(_a) {
19221
- var id = _a.id, invoiceQuoteViewComponent = _a.invoiceQuoteViewComponent, backButtonName = _a.backButtonName, onBackButtonClick = _a.onBackButtonClick, onInvoiceDownloadError = _a.onInvoiceDownloadError, onPaymentSuccess = _a.onPaymentSuccess, _b = _a.shadow, shadow = _b === void 0 ? 'shadow-md' : _b, className = _a.className, _c = _a.hideDownloadButton, hideDownloadButton = _c === void 0 ? false : _c, onInvoiceLoaded = _a.onInvoiceLoaded;
19274
+ var id = _a.id, invoiceQuoteViewComponent = _a.invoiceQuoteViewComponent, backButtonName = _a.backButtonName, onBackButtonClick = _a.onBackButtonClick, onInvoiceDownloadError = _a.onInvoiceDownloadError, onPaymentSuccess = _a.onPaymentSuccess, _b = _a.shadow, shadow = _b === void 0 ? 'shadow-md' : _b, className = _a.className, _c = _a.hideDownloadButton, hideDownloadButton = _c === void 0 ? false : _c, _d = _a.hidePaymentForm, hidePaymentForm = _d === void 0 ? false : _d, onInvoiceLoaded = _a.onInvoiceLoaded;
19222
19275
  return (jsxRuntime.jsx(InvoiceQuoteContext.Provider, __assign({ value: {
19223
19276
  id: id,
19224
19277
  invoiceQuoteViewComponent: invoiceQuoteViewComponent,
@@ -19230,14 +19283,15 @@ function Invoice(_a) {
19230
19283
  className: className,
19231
19284
  hideDownloadButton: hideDownloadButton,
19232
19285
  onInvoiceLoaded: onInvoiceLoaded,
19233
- } }, { children: jsxRuntime.jsx(ActualInvoice, {}) })));
19286
+ } }, { children: jsxRuntime.jsx(ActualInvoice, { hidePaymentForm: hidePaymentForm }) })));
19234
19287
  }
19235
- function ActualInvoice() {
19288
+ function ActualInvoice(_a) {
19289
+ var hidePaymentForm = _a.hidePaymentForm;
19236
19290
  // Context
19237
19291
  var queryClient = reactQuery.useQueryClient();
19238
- var _a = react.useContext(InvoiceQuoteContext), id = _a.id, invoiceQuoteViewComponent = _a.invoiceQuoteViewComponent, backButtonName = _a.backButtonName, onBackButtonClick = _a.onBackButtonClick, onPaymentSuccess = _a.onPaymentSuccess, className = _a.className;
19239
- var _b = react.useContext(BunnyContext), apiHost = _b.apiHost, onTokenExpired = _b.onTokenExpired;
19240
- var _c = react.useContext(InvoiceQuoteContext), hideDownloadButton = _c.hideDownloadButton, onInvoiceLoaded = _c.onInvoiceLoaded;
19292
+ var _b = react.useContext(InvoiceQuoteContext), id = _b.id, invoiceQuoteViewComponent = _b.invoiceQuoteViewComponent, backButtonName = _b.backButtonName, onBackButtonClick = _b.onBackButtonClick, onPaymentSuccess = _b.onPaymentSuccess, className = _b.className;
19293
+ var _c = react.useContext(BunnyContext), apiHost = _c.apiHost, onTokenExpired = _c.onTokenExpired;
19294
+ var _d = react.useContext(InvoiceQuoteContext), hideDownloadButton = _d.hideDownloadButton, onInvoiceLoaded = _d.onInvoiceLoaded;
19241
19295
  var token = useToken();
19242
19296
  // Hooks
19243
19297
  var showSuccessNotification = common.useSuccessNotification();
@@ -19274,12 +19328,12 @@ function ActualInvoice() {
19274
19328
  }, [formattedInvoice]);
19275
19329
  if (!formattedInvoice)
19276
19330
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
19277
- return (jsxRuntime.jsx("div", __assign({ className: "bunny-invoice-container" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-6 ".concat(isMobile ? 'bunny-flex-col bunny-w-full' : '', " ").concat(className) }, { children: [formattedInvoice.isLegacy ? (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-justify-center bunny-w-full" }, { children: jsxRuntime.jsx(LegacyDocument, { documentUuid: formattedInvoice.uuid, documentType: "invoice" }) }))) : (invoiceQuoteViewComponent || (jsxRuntime.jsx(InvoiceQuoteView, { html: formattedInvoice.html, formattedInvoice: formattedInvoice, backButtonName: backButtonName, onBackButtonClick: onBackButtonClick }))), isInvoicePayable && (jsxRuntime.jsx("div", __assign({ className: "bunny-w-full ".concat(hideDownloadButton || formattedInvoice.isLegacy ? '' : 'pt-12') }, { children: jsxRuntime.jsx(PaymentForm, { onPaymentSuccess: onSuccess, onFail: onFail, invoice: formattedInvoice }) })))] })) })));
19331
+ return (jsxRuntime.jsx("div", __assign({ className: "bunny-invoice-container" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-6 ".concat(isMobile ? 'bunny-flex-col bunny-w-full' : '', " ").concat(className) }, { children: [formattedInvoice.isLegacy ? (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-justify-center bunny-w-full" }, { children: jsxRuntime.jsx(LegacyDocument, { documentUuid: formattedInvoice.uuid, documentType: "invoice" }) }))) : (invoiceQuoteViewComponent || (jsxRuntime.jsx(InvoiceQuoteView, { html: formattedInvoice.html, formattedInvoice: formattedInvoice, backButtonName: backButtonName, onBackButtonClick: onBackButtonClick }))), isInvoicePayable && !hidePaymentForm && (jsxRuntime.jsx("div", __assign({ className: "bunny-w-full ".concat(hideDownloadButton || formattedInvoice.isLegacy ? '' : 'pt-12') }, { children: jsxRuntime.jsx(PaymentForm, { onPaymentSuccess: onSuccess, onFail: onFail, invoice: formattedInvoice }) })))] })) })));
19278
19332
  }
19279
19333
 
19280
19334
  var MUTATION$8 = function () { return "\n query formattedQuote ($id: ID) {\n formattedQuote (id: $id) {\n quote {\n documentTemplateId\n documents { id filename size date url }\n firstInvoice {\n id\n state\n }\n payableId\n id\n payToAccept\n currentPaymentHold {\n createdAt\n expiresAt\n id\n updatedAt\n paymentMethod {\n accountId\n createdAt\n expirationDate\n failureCode\n id\n isDefault\n lastSuccess\n paymentType\n pluginId\n state\n updatedAt\n metadata {\n description\n expiration\n icon\n identifier\n issuer\n kind\n }\n }\n }\n }\n payableId\n acceptedAt\n acceptedByName\n amount\n amountDue\n amountsByPeriod {\n id\n name\n amount\n }\n billingCity\n billingCountry\n billingState\n billingStreet\n billingZip\n contactName\n currency\n customerBillingCity\n customerBillingCountry\n customerBillingState\n customerBillingStreet\n customerBillingZip\n customerName\n discount\n discountValue\n duration\n endDate\n expiresAt\n html\n formattedLines {\n amount\n amountsByPeriod {\n quantity\n id\n name\n startDate\n endDate\n amount\n amountsByTier {\n id\n tier {\n starts\n ends\n price\n }\n quantity\n amount\n }\n prorationRate\n }\n billingPeriodEnd\n billingPeriodStart\n chargeType\n discount\n frequency\n isRamp\n periods\n planName\n position\n price\n priceDecimals\n priceListChargeId\n priceListChargeName\n priceListId\n priceListName\n priceTiers {\n price\n starts\n }\n pricingModel\n productName\n prorationRate\n quantity\n showProductNameOnLineItem\n taxCode\n trialEndDate\n trialStartDate\n unitOfMeasure\n vatCode\n }\n netPaymentDays\n notes\n number\n poNumberRequired\n salesContactEmail\n sharedAt\n startDate\n state\n subtotal\n taxAmount\n taxNumberLabel\n taxNumberRequired\n vendorName\n }\n }"; };
19281
19335
  var getFormattedQuote = function (_a) {
19282
- var token = _a.token, apiHost = _a.apiHost;
19336
+ var token = _a.token, apiHost = _a.apiHost, id = _a.id;
19283
19337
  return __awaiter(void 0, void 0, void 0, function () {
19284
19338
  var response;
19285
19339
  return __generator(this, function (_b) {
@@ -19288,6 +19342,7 @@ var getFormattedQuote = function (_a) {
19288
19342
  query: MUTATION$8(),
19289
19343
  token: token,
19290
19344
  apiHost: apiHost,
19345
+ vars: { id: id },
19291
19346
  })];
19292
19347
  case 1:
19293
19348
  response = _b.sent();
@@ -19387,7 +19442,6 @@ var quoteAccept = function (_a) {
19387
19442
  });
19388
19443
  });
19389
19444
  };
19390
- // export default quoteAccept;
19391
19445
  var useSendAcceptQuote = function (_a) {
19392
19446
  var quoteId = _a.quoteId, apiHost = _a.apiHost, token = _a.token;
19393
19447
  // Hooks
@@ -19605,14 +19659,14 @@ var PaymentHoldModal = function (_a) {
19605
19659
  showSuccessNotification$2("Approved payment hold for ".concat(common.formatCurrency(quote.amount, quote.currency)));
19606
19660
  queryClient.invalidateQueries({
19607
19661
  queryKey: common.QueryKeyFactory.default.createQuoteKey({
19608
- id: quote.id,
19662
+ id: quote.quote.id,
19609
19663
  token: token,
19610
19664
  }),
19611
19665
  });
19612
19666
  } }) }))] })));
19613
19667
  };
19614
19668
 
19615
- var Text$n = antd.Typography.Text;
19669
+ var Text$o = antd.Typography.Text;
19616
19670
  defaultStyled.div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n span {\n width: 100%;\n }\n"], ["\n span {\n width: 100%;\n }\n"])));
19617
19671
  function Quote(_a) {
19618
19672
  var id = _a.id, invoiceQuoteViewComponent = _a.invoiceQuoteViewComponent, onInvoiceDownloadError = _a.onInvoiceDownloadError, onPaymentSuccess = _a.onPaymentSuccess, _b = _a.shadow, shadow = _b === void 0 ? 'shadow-md' : _b, className = _a.className, _c = _a.hideDownloadButton, hideDownloadButton = _c === void 0 ? false : _c, onQuoteLoaded = _a.onQuoteLoaded;
@@ -19627,7 +19681,6 @@ function Quote(_a) {
19627
19681
  onQuoteLoaded: onQuoteLoaded,
19628
19682
  } }, { children: jsxRuntime.jsx(ActualQuote, {}) })));
19629
19683
  }
19630
- // TODO: dissolve this hook
19631
19684
  var useQuotePaymentHold = function (formattedQuote) {
19632
19685
  var _a, _b;
19633
19686
  var _c = react.useState(false), paymentHoldModalVisible = _c[0], setPaymentHoldModalVisible = _c[1];
@@ -19654,7 +19707,7 @@ function ActualQuote() {
19654
19707
  queryFn: function () { return __awaiter(_this, void 0, void 0, function () {
19655
19708
  return __generator(this, function (_a) {
19656
19709
  switch (_a.label) {
19657
- case 0: return [4 /*yield*/, getFormattedQuote({ token: token, apiHost: apiHost })];
19710
+ case 0: return [4 /*yield*/, getFormattedQuote({ token: token, apiHost: apiHost, id: id })];
19658
19711
  case 1: return [2 /*return*/, _a.sent()];
19659
19712
  }
19660
19713
  });
@@ -19694,11 +19747,10 @@ function ActualQuote() {
19694
19747
  if ((firstInvoice === null || firstInvoice === void 0 ? void 0 : firstInvoice.state) === 'PAID' && paymentHoldCompleted) {
19695
19748
  return jsxRuntime.jsx(Invoice, { id: firstInvoice.id });
19696
19749
  }
19697
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-4 bunny-grow ".concat(isMobile ? 'bunny-w-full bunny-overflow-hidden' : '', " ").concat(className) }, { children: [jsxRuntime.jsx(QuoteButtons, { isAccepted: isAccepted, formattedQuote: formattedQuote, isMobile: isMobile, hideDownloadButton: hideDownloadButton, id: id, isAccepting: isAccepting, handleClickAccept: handleClickAccept, setPaymentHoldModalVisible: setPaymentHoldModalVisible, shouldDoPaymentHold: shouldDoPaymentHold, paymentHoldCompleted: paymentHoldCompleted, paymentHold: paymentHold }), jsxRuntime.jsx(InvoiceQuoteView, __assign({ html: formattedQuote.html, targetUrl: ((_b = formattedQuote === null || formattedQuote === void 0 ? void 0 : formattedQuote.quote) === null || _b === void 0 ? void 0 : _b.documentTemplateId) ? "/pdf/quote" : undefined }, { children: ((_d = (_c = formattedQuote.quote) === null || _c === void 0 ? void 0 : _c.documents) === null || _d === void 0 ? void 0 : _d.length) > 0 ? (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-end" }, { children: formattedQuote.quote.documents.map(function (doc, index) {
19750
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-4 ".concat(isMobile ? 'bunny-w-full bunny-overflow-hidden' : '', " ").concat(className) }, { children: [jsxRuntime.jsx(QuoteButtons, { isAccepted: isAccepted, formattedQuote: formattedQuote, isMobile: isMobile, hideDownloadButton: hideDownloadButton, id: id, isAccepting: isAccepting, handleClickAccept: handleClickAccept, setPaymentHoldModalVisible: setPaymentHoldModalVisible, shouldDoPaymentHold: shouldDoPaymentHold, paymentHoldCompleted: paymentHoldCompleted, paymentHold: paymentHold }), jsxRuntime.jsx(InvoiceQuoteView, __assign({ html: formattedQuote.html, targetUrl: ((_b = formattedQuote === null || formattedQuote === void 0 ? void 0 : formattedQuote.quote) === null || _b === void 0 ? void 0 : _b.documentTemplateId) ? "/pdf/quote" : undefined }, { children: ((_d = (_c = formattedQuote.quote) === null || _c === void 0 ? void 0 : _c.documents) === null || _d === void 0 ? void 0 : _d.length) > 0 ? (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-end" }, { children: formattedQuote.quote.documents.map(function (doc, index) {
19698
19751
  return (jsxRuntime.jsx(antd.Button, __assign({ download: doc.filename, href: doc.url, type: "link" }, { children: doc.filename }), index));
19699
19752
  }) }))) : null }))] })), jsxRuntime.jsx(AcceptQuoteModal, { acceptBoxVisible: acceptBoxVisible, formattedQuote: formattedQuote, setAcceptBoxVisible: setAcceptBoxVisible, setIsAccepting: setIsAccepting, sendAccept: sendAccept, isSendAcceptPending: isSendAcceptPending }), jsxRuntime.jsx(PaymentHoldModal, { visible: paymentHoldModalVisible, setVisible: setPaymentHoldModalVisible, quote: formattedQuote }), jsxRuntime.jsx(PandadocPollingModal, { isVisible: pandadocPollingModalVisible, setVisible: setPandadocPollingModalVisible, id: id })] }));
19700
19753
  }
19701
- // TODO: clean up the logic here. Its quite confusing
19702
19754
  function QuoteButtons(_a) {
19703
19755
  var isAccepted = _a.isAccepted, formattedQuote = _a.formattedQuote, isMobile = _a.isMobile, hideDownloadButton = _a.hideDownloadButton, id = _a.id, isAccepting = _a.isAccepting, handleClickAccept = _a.handleClickAccept, setPaymentHoldModalVisible = _a.setPaymentHoldModalVisible, shouldDoPaymentHold = _a.shouldDoPaymentHold, paymentHoldCompleted = _a.paymentHoldCompleted, paymentHold = _a.paymentHold;
19704
19756
  var apiHost = react.useContext(BunnyContext).apiHost;
@@ -19709,7 +19761,7 @@ function QuoteButtons(_a) {
19709
19761
  var signingPlugins = useSigningPlugins({ apiHost: apiHost, token: token });
19710
19762
  return (jsxRuntime.jsxs("div", __assign({ className: "flex flex-row justify-end items-center gap-4", id: "acceptance", style: {
19711
19763
  color: entityBranding.secondaryColor,
19712
- } }, { children: [isAccepted && formattedQuote.acceptedAt ? (jsxRuntime.jsx(Text$n, { children: "Quote was accepted by ".concat(formattedQuote.acceptedByName, " on ").concat(common.formatDate(formattedQuote.acceptedAt)) })) : null, (!isMobile || !isAccepted) && (jsxRuntime.jsxs("div", __assign({ className: isMobile ? 'flex w-full justify-end gap-2' : 'flex items-center justify-end gap-2' }, { children: [paymentHold ? (jsxRuntime.jsx(PaymentHoldDisplay, { paymentHold: paymentHold, currency: formattedQuote.currency, amount: formattedQuote.amount })) : null, !isMobile && !hideDownloadButton ? (jsxRuntime.jsx(antd.Button, __assign({ icon: jsxRuntime.jsx(icons.DownloadOutlined, {}), onClick: function () { return downloadFile(apiHost + '/api/pdf/quote', token); } }, { children: "Download" }))) : null, shouldDoPaymentHold && !paymentHoldCompleted ? (jsxRuntime.jsx(antd.Button, __assign({ disabled: isExpired, onClick: function () { return setPaymentHoldModalVisible(true); }, type: "primary" }, { children: "Pay to accept" }))) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !isAccepted ? (jsxRuntime.jsx(antd.Button, __assign({ disabled: isExpired || isAccepting, onClick: handleClickAccept, type: "primary" }, { children: isExpired
19764
+ } }, { children: [isAccepted && formattedQuote.acceptedAt ? (jsxRuntime.jsx(Text$o, { children: "Quote was accepted by ".concat(formattedQuote.acceptedByName, " on ").concat(common.formatDate(formattedQuote.acceptedAt)) })) : null, (!isMobile || !isAccepted) && (jsxRuntime.jsxs("div", __assign({ className: isMobile ? 'flex w-full justify-end gap-2' : 'flex items-center justify-end gap-2' }, { children: [paymentHold ? (jsxRuntime.jsx(PaymentHoldDisplay, { paymentHold: paymentHold, currency: formattedQuote.currency, amount: formattedQuote.amount })) : null, !isMobile && !hideDownloadButton ? (jsxRuntime.jsx(antd.Button, __assign({ icon: jsxRuntime.jsx(icons.DownloadOutlined, {}), onClick: function () { return downloadFile(apiHost + '/api/pdf/quote', token); } }, { children: "Download" }))) : null, shouldDoPaymentHold && !paymentHoldCompleted ? (jsxRuntime.jsx(antd.Button, __assign({ disabled: isExpired, onClick: function () { return setPaymentHoldModalVisible(true); }, type: "primary" }, { children: "Pay to accept" }))) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: !isAccepted ? (jsxRuntime.jsx(antd.Button, __assign({ disabled: isExpired || isAccepting, onClick: handleClickAccept, type: "primary" }, { children: isExpired
19713
19765
  ? 'Quote is expired'
19714
19766
  : (signingPlugins === null || signingPlugins === void 0 ? void 0 : signingPlugins.length)
19715
19767
  ? 'Start signing'
@@ -19809,10 +19861,10 @@ var getColor = function (state) {
19809
19861
  }
19810
19862
  };
19811
19863
 
19812
- var Text$m = antd.Typography.Text;
19864
+ var Text$n = antd.Typography.Text;
19813
19865
  var TransactionDate = function (_a) {
19814
19866
  var date = _a.date;
19815
- return jsxRuntime.jsx(Text$m, __assign({ className: "bunny-text-sm" }, { children: common.formatDate(date) }));
19867
+ return jsxRuntime.jsx(Text$n, __assign({ className: "bunny-text-sm" }, { children: common.formatDate(date) }));
19816
19868
  };
19817
19869
 
19818
19870
  var ArrowDownToLine = function (_a) {
@@ -19849,13 +19901,13 @@ var TransactionGridCell = defaultStyled.div.withConfig({
19849
19901
  }, common.SLATE_600);
19850
19902
  var templateObject_1$6;
19851
19903
 
19852
- var Text$l = antd.Typography.Text;
19904
+ var Text$m = antd.Typography.Text;
19853
19905
  var TransactionsEmptyState = function () {
19854
19906
  var noTransactionsMessage = react.useContext(TransactionsListContext).noTransactionsMessage;
19855
- return (jsxRuntime.jsx(Text$l, __assign({ className: "bunny-flex bunny-justify-center bunny-p-4 bunny-text-base" }, { children: noTransactionsMessage || 'There are no transactions' })));
19907
+ return (jsxRuntime.jsx(Text$m, __assign({ className: "bunny-flex bunny-justify-center bunny-p-4 bunny-text-base" }, { children: noTransactionsMessage || 'There are no transactions' })));
19856
19908
  };
19857
19909
 
19858
- var Text$k = antd.Typography.Text;
19910
+ var Text$l = antd.Typography.Text;
19859
19911
  var isInvoice = function (transaction) {
19860
19912
  return transaction.kind === 'INVOICE';
19861
19913
  };
@@ -19864,7 +19916,7 @@ var TransactionRowTitle = function (_a) {
19864
19916
  if (!isInvoice(transaction)) {
19865
19917
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
19866
19918
  }
19867
- return (jsxRuntime.jsx(Text$k, __assign({ className: "bunny-text-slate-400", style: { fontSize: '11px' } }, { children: transaction.transactionable.number })));
19919
+ return (jsxRuntime.jsx(Text$l, __assign({ className: "bunny-text-slate-400", style: { fontSize: '11px' } }, { children: transaction.transactionable.number })));
19868
19920
  };
19869
19921
 
19870
19922
  function transactionDateToDisplay(transaction, transactionDateType) {
@@ -19882,7 +19934,7 @@ function transactionDateToDisplay(transaction, transactionDateType) {
19882
19934
  }
19883
19935
  }
19884
19936
 
19885
- var Text$j = antd.Typography.Text;
19937
+ var Text$k = antd.Typography.Text;
19886
19938
  var TransactionsListDesktop = function (_a) {
19887
19939
  var transactions = _a.transactions, onTransactionClick = _a.onTransactionClick;
19888
19940
  var _b = react.useContext(TransactionsListContext), columns = _b.columns, transactionDateType = _b.transactionDateType;
@@ -19911,11 +19963,11 @@ var TransactionsListDesktop = function (_a) {
19911
19963
  !showState &&
19912
19964
  !showAmount &&
19913
19965
  !showDownload &&
19914
- !showAccountName && (jsxRuntime.jsx(TransactionGridCell, { children: jsxRuntime.jsx(Text$j, { children: "No columns selected" }) })), showDate && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: false }, { children: jsxRuntime.jsx(TransactionDate, { date: transactionDateToDisplay(transaction, transactionDateType) }) }))), showTitle && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(TransactionGridCell, __assign({ right: false, className: "bunny-flex bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(Text$j, { children: lodashExports.capitalize(transaction.kind.toLowerCase()) }), jsxRuntime.jsx(TransactionRowTitle, { transaction: transaction })] })) })), showAccountName && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: false }, { children: jsxRuntime.jsx(Text$j, { children: (_a = transaction.account) === null || _a === void 0 ? void 0 : _a.name }) }))), !showDate && !showTitle && !showAccountName && jsxRuntime.jsx(TransactionGridCell, { right: false }), showDownload && (jsxRuntime.jsx(TransactionGridCell, { children: jsxRuntime.jsx(TransactionDownload, { transaction: transaction, token: token, apiHost: apiHost }) })), showState ? (jsxRuntime.jsx(TransactionGridCell, __assign({ right: true }, { children: jsxRuntime.jsx(StateTag, { state: transaction.state }) }))) : null, showAmount && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: true }, { children: jsxRuntime.jsx(Text$j, { children: common.formatCurrency(((_b = transaction === null || transaction === void 0 ? void 0 : transaction.transactionable) === null || _b === void 0 ? void 0 : _b.amount) || transaction.amount, transaction.currencyId) }) })))] }), index));
19966
+ !showAccountName && (jsxRuntime.jsx(TransactionGridCell, { children: jsxRuntime.jsx(Text$k, { children: "No columns selected" }) })), showDate && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: false }, { children: jsxRuntime.jsx(TransactionDate, { date: transactionDateToDisplay(transaction, transactionDateType) }) }))), showTitle && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(TransactionGridCell, __assign({ right: false, className: "bunny-flex bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(Text$k, { children: lodashExports.capitalize(transaction.kind.toLowerCase()) }), jsxRuntime.jsx(TransactionRowTitle, { transaction: transaction })] })) })), showAccountName && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: false }, { children: jsxRuntime.jsx(Text$k, { children: (_a = transaction.account) === null || _a === void 0 ? void 0 : _a.name }) }))), !showDate && !showTitle && !showAccountName && jsxRuntime.jsx(TransactionGridCell, { right: false }), showDownload && (jsxRuntime.jsx(TransactionGridCell, { children: jsxRuntime.jsx(TransactionDownload, { transaction: transaction, token: token, apiHost: apiHost }) })), showState ? (jsxRuntime.jsx(TransactionGridCell, __assign({ right: true }, { children: jsxRuntime.jsx(StateTag, { state: transaction.state }) }))) : null, showAmount && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: true }, { children: jsxRuntime.jsx(Text$k, { children: common.formatCurrency(((_b = transaction === null || transaction === void 0 ? void 0 : transaction.transactionable) === null || _b === void 0 ? void 0 : _b.amount) || transaction.amount, transaction.currencyId) }) })))] }), index));
19915
19967
  }) }));
19916
19968
  };
19917
19969
 
19918
- var Text$i = antd.Typography.Text;
19970
+ var Text$j = antd.Typography.Text;
19919
19971
  var TransactionsListMobile = function (_a) {
19920
19972
  var transactions = _a.transactions, onTransactionClick = _a.onTransactionClick;
19921
19973
  var _b = react.useContext(TransactionsListContext), columns = _b.columns, transactionDateType = _b.transactionDateType;
@@ -19938,11 +19990,11 @@ var TransactionsListMobile = function (_a) {
19938
19990
  backgroundColor: index % 2 === 0
19939
19991
  ? "var(--row-background".concat(darkMode ? '-dark' : '', ")")
19940
19992
  : "var(--row-background-alternate".concat(darkMode ? '-dark' : '', ")"),
19941
- } }, { children: [jsxRuntime.jsx(TransactionGridCell, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [(showTitle || showState) && (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2" }, { children: [showTitle && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Text$i, { children: lodashExports.capitalize(transaction.kind.toLowerCase()) }), jsxRuntime.jsx(TransactionRowTitle, { transaction: transaction })] })), showState && jsxRuntime.jsx(StateTag, { state: transaction.state })] }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2" }, { children: [showAccountName && jsxRuntime.jsx(Text$i, { children: (_a = transaction.account) === null || _a === void 0 ? void 0 : _a.name }), showAccountName && showDate && jsxRuntime.jsx(Text$i, { children: "\u00B7" }), showDate && (jsxRuntime.jsx(TransactionDate, { date: transactionDateToDisplay(transaction, transactionDateType) })), showDate && showAmount && jsxRuntime.jsx(Text$i, { children: "\u00B7" }), showAmount && (jsxRuntime.jsx(Text$i, { children: common.formatCurrency(transaction.transactionable.amount || transaction.amount, transaction.currencyId) }))] }))] })) }), showDownload && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: true }, { children: jsxRuntime.jsx(TransactionDownload, { transaction: transaction, token: token, apiHost: apiHost }) })))] }), index));
19993
+ } }, { children: [jsxRuntime.jsx(TransactionGridCell, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [(showTitle || showState) && (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2" }, { children: [showTitle && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Text$j, { children: lodashExports.capitalize(transaction.kind.toLowerCase()) }), jsxRuntime.jsx(TransactionRowTitle, { transaction: transaction })] })), showState && jsxRuntime.jsx(StateTag, { state: transaction.state })] }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2" }, { children: [showAccountName && jsxRuntime.jsx(Text$j, { children: (_a = transaction.account) === null || _a === void 0 ? void 0 : _a.name }), showAccountName && showDate && jsxRuntime.jsx(Text$j, { children: "\u00B7" }), showDate && (jsxRuntime.jsx(TransactionDate, { date: transactionDateToDisplay(transaction, transactionDateType) })), showDate && showAmount && jsxRuntime.jsx(Text$j, { children: "\u00B7" }), showAmount && (jsxRuntime.jsx(Text$j, { children: common.formatCurrency(transaction.transactionable.amount || transaction.amount, transaction.currencyId) }))] }))] })) }), showDownload && (jsxRuntime.jsx(TransactionGridCell, __assign({ right: true }, { children: jsxRuntime.jsx(TransactionDownload, { transaction: transaction, token: token, apiHost: apiHost }) })))] }), index));
19942
19994
  }) }));
19943
19995
  };
19944
19996
 
19945
- var Text$h = antd.Typography.Text;
19997
+ var Text$i = antd.Typography.Text;
19946
19998
  var DISPLAY_WIDTH = 1200;
19947
19999
  function Transactions(_a) {
19948
20000
  var transactionComponent = _a.transactionComponent, _b = _a.showSearchBar, showSearchBar = _b === void 0 ? true : _b, _c = _a.showTitle, showTitle = _c === void 0 ? true : _c, _d = _a.title, title = _d === void 0 ? 'Past transactions' : _d, _e = _a.columns, columns = _e === void 0 ? ['date', 'title', 'state', 'amount', 'download'] : _e, className = _a.className, _f = _a.shadow, shadow = _f === void 0 ? 'shadow-md' : _f, searchBarClassName = _a.searchBarClassName, _g = _a.useModal, useModal = _g === void 0 ? false : _g, onTransactionClick = _a.onTransactionClick, _h = _a.suppressTransactionDisplay, suppressTransactionDisplay = _h === void 0 ? false : _h, _j = _a.kindsToShow, kindsToShow = _j === void 0 ? [
@@ -19952,7 +20004,7 @@ function Transactions(_a) {
19952
20004
  common.TransactionKind.WRITE_OFF,
19953
20005
  ] : _j, style = _a.style, filter = _a.filter, noTransactionsMessage = _a.noTransactionsMessage, filterTransactions = _a.filterTransactions, _k = _a.sortTransactions, sortTransactions = _k === void 0 ? function (a, b) {
19954
20006
  return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
19955
- } : _k, _l = _a.transactionDateType, transactionDateType = _l === void 0 ? 'createdAt' : _l;
20007
+ } : _k, _l = _a.transactionDateType, transactionDateType = _l === void 0 ? 'createdAt' : _l, _m = _a.hidePaymentForm, hidePaymentForm = _m === void 0 ? false : _m;
19956
20008
  var contextValues = {
19957
20009
  showSearchBar: showSearchBar,
19958
20010
  showTitle: showTitle,
@@ -19972,24 +20024,25 @@ function Transactions(_a) {
19972
20024
  filterTransactions: filterTransactions,
19973
20025
  sortTransactions: sortTransactions,
19974
20026
  transactionDateType: transactionDateType,
20027
+ hidePaymentForm: hidePaymentForm,
19975
20028
  };
19976
20029
  var apiHost = react.useContext(BunnyContext).apiHost;
19977
20030
  var token = useToken();
19978
20031
  // Local state
19979
- var _m = react.useState(''), search = _m[0], setSearch = _m[1];
19980
- var filterValue = filter || (search ? "filter: \"transaction.transactionableId is ".concat(search, "\"") : '');
20032
+ var _o = react.useState(''), search = _o[0], setSearch = _o[1];
20033
+ var filterValue = filter || (search.length > 0 ? "filter: \"transaction.transactionableId is ".concat(search, "\"") : '');
19981
20034
  // Queries
19982
20035
  var data = reactQuery.useQuery({
19983
20036
  queryKey: ['transactions', token, filterValue],
19984
20037
  queryFn: function () { return getTransactions(filterValue, apiHost, token); },
19985
20038
  placeholderData: reactQuery.keepPreviousData,
19986
20039
  }).data;
19987
- return (jsxRuntime.jsx(TransactionsListContext.Provider, __assign({ value: contextValues }, { children: jsxRuntime.jsx(TransactionsDisplay, { transactions: data || [], onSearchValueChanged: setSearch, search: search }) })));
20040
+ return (jsxRuntime.jsx(TransactionsListContext.Provider, __assign({ value: contextValues }, { children: jsxRuntime.jsx(TransactionsDisplay, { transactions: data, onSearchValueChanged: setSearch, search: search }) })));
19988
20041
  }
19989
20042
  function TransactionsDisplay(_a) {
19990
20043
  var _b, _c;
19991
20044
  var transactions = _a.transactions, onSearchValueChanged = _a.onSearchValueChanged, search = _a.search;
19992
- var _d = react.useContext(TransactionsListContext), showSearchBar = _d.showSearchBar, showTitle = _d.showTitle, title = _d.title, transactionComponent = _d.transactionComponent, useModal = _d.useModal, suppressTransactionDisplay = _d.suppressTransactionDisplay, className = _d.className, shadow = _d.shadow, searchBarClassName = _d.searchBarClassName, style = _d.style, onTransactionClick = _d.onTransactionClick, onTransactionDisplayClose = _d.onTransactionDisplayClose, kindsToShow = _d.kindsToShow, filterTransactions = _d.filterTransactions, sortTransactions = _d.sortTransactions;
20045
+ var _d = react.useContext(TransactionsListContext), showSearchBar = _d.showSearchBar, showTitle = _d.showTitle, title = _d.title, transactionComponent = _d.transactionComponent, useModal = _d.useModal, suppressTransactionDisplay = _d.suppressTransactionDisplay, className = _d.className, shadow = _d.shadow, searchBarClassName = _d.searchBarClassName, style = _d.style, onTransactionClick = _d.onTransactionClick, onTransactionDisplayClose = _d.onTransactionDisplayClose, kindsToShow = _d.kindsToShow, filterTransactions = _d.filterTransactions, sortTransactions = _d.sortTransactions, hidePaymentForm = _d.hidePaymentForm;
19993
20046
  var columns = react.useContext(TransactionsListContext).columns;
19994
20047
  var darkMode = react.useContext(BunnyContext).darkMode;
19995
20048
  var secondaryColor = react.useContext(BrandContext).secondaryColor;
@@ -20053,18 +20106,18 @@ function TransactionsDisplay(_a) {
20053
20106
  onTransactionDisplayClose === null || onTransactionDisplayClose === void 0 ? void 0 : onTransactionDisplayClose(selectedTransaction);
20054
20107
  setDrawerOpen(false);
20055
20108
  }
20056
- return (jsxRuntime.jsxs("div", __assign({ style: style }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-full bunny-shadow-padding-xb bunny-gap-2 ".concat(isMobile ? 'bunny-overflow-hidden' : '', " ").concat(className) }, { children: [showTitle || showSearchBar ? (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'bunny-flex-col bunny-gap-1' : 'bunny-flex-row bunny-items-center', " bunny-justify-between") }, { children: [showTitle ? (jsxRuntime.jsx(Text$h, __assign({ className: "bunny-shrink-0 bunny-font-medium", style: { color: darkMode ? undefined : secondaryColor } }, { children: title }))) : (jsxRuntime.jsx("div", {}) // Empty div so justify-between works
20109
+ return (jsxRuntime.jsxs("div", __assign({ style: style }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-full bunny-shadow-padding-xb bunny-gap-2 ".concat(isMobile ? 'bunny-overflow-hidden' : '', " ").concat(className) }, { children: [showTitle || showSearchBar ? (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'bunny-flex-col bunny-gap-1' : 'bunny-flex-row bunny-items-center', " bunny-justify-between") }, { children: [showTitle ? (jsxRuntime.jsx(Text$i, __assign({ className: "bunny-shrink-0 bunny-font-medium", style: { color: darkMode ? undefined : secondaryColor } }, { children: title }))) : (jsxRuntime.jsx("div", {}) // Empty div so justify-between works
20057
20110
  ), showSearchBar && (jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile ? 'bunny-w-full' : '') }, { children: jsxRuntime.jsx(antd.Input, { className: searchBarClassName ? searchBarClassName : '', onChange: function (e) {
20058
20111
  if (isNaN(Number(e.target.value))) {
20059
20112
  return;
20060
20113
  }
20061
20114
  onSearchValueChanged(e.target.value);
20062
- }, prefix: !search && jsxRuntime.jsx(icons.SearchOutlined, {}), placeholder: "Search by id #", style: {
20115
+ }, prefix: jsxRuntime.jsx(icons.SearchOutlined, {}), placeholder: "Search by id #", style: {
20063
20116
  minWidth: '300px',
20064
20117
  }, value: search }) })))] }))) : null, jsxRuntime.jsx("div", __assign({ className: "bunny-grid bunny-w-full bunny-rounded-md bunny-overflow-auto ".concat(shadow), style: {
20065
20118
  gridTemplateColumns: gridTemplateColumns(),
20066
20119
  backgroundColor: "var(--row-background".concat(darkMode ? '-dark' : '', ")"),
20067
- } }, { children: isMobile ? (jsxRuntime.jsx(TransactionsListMobile, { transactions: updatedTransactions, onTransactionClick: handleTransactionClick })) : (jsxRuntime.jsx(TransactionsListDesktop, { transactions: updatedTransactions, onTransactionClick: handleTransactionClick })) }))] })), useModal ? (jsxRuntime.jsx(antd.Modal, __assign({ title: drawerTitle(), open: drawerOpen, onOk: handleDisplayClose, onCancel: handleDisplayClose, width: DISPLAY_WIDTH, footer: null }, { children: jsxRuntime.jsx(Invoice, { id: (selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.transactionableId) || '' }) }))) : (jsxRuntime.jsx(antd.Drawer, __assign({ title: drawerTitle(), onClose: handleDisplayClose, open: drawerOpen, width: DISPLAY_WIDTH }, { children: transactionComponent ? (transactionComponent) : (selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.kind) === 'INVOICE' ? (jsxRuntime.jsx(Invoice, { id: selectedTransaction.transactionableId })) : (jsxRuntime.jsxs(antd.Card, __assign({ className: "bunny-shadow-md" }, { children: [jsxRuntime.jsx(antd.Typography.Title, __assign({ level: 2, className: "bunny-mb-4" }, { children: "Transaction Details" })), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "Amount:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: common.formatCurrency((selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.amount) || 0, (selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.currencyId) || 'USD') })] }), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "Description:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.description })] }), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "Kind:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.kind })] }), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "State:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.state })] })] }))) })))] })));
20120
+ } }, { children: isMobile ? (jsxRuntime.jsx(TransactionsListMobile, { transactions: updatedTransactions, onTransactionClick: handleTransactionClick })) : (jsxRuntime.jsx(TransactionsListDesktop, { transactions: updatedTransactions, onTransactionClick: handleTransactionClick })) }))] })), useModal ? (jsxRuntime.jsx(antd.Modal, __assign({ title: drawerTitle(), open: drawerOpen, onOk: handleDisplayClose, onCancel: handleDisplayClose, width: DISPLAY_WIDTH, footer: null }, { children: jsxRuntime.jsx(Invoice, { id: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.transactionableId, hidePaymentForm: hidePaymentForm }) }))) : (jsxRuntime.jsx(antd.Drawer, __assign({ title: drawerTitle(), onClose: handleDisplayClose, open: drawerOpen, width: DISPLAY_WIDTH }, { children: transactionComponent ? (transactionComponent) : (selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.kind) === 'INVOICE' ? (jsxRuntime.jsx(Invoice, { id: selectedTransaction.transactionableId, hidePaymentForm: hidePaymentForm })) : (jsxRuntime.jsxs(antd.Card, __assign({ className: "bunny-shadow-md" }, { children: [jsxRuntime.jsx(antd.Typography.Title, __assign({ level: 2, className: "bunny-mb-4" }, { children: "Transaction Details" })), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "Amount:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: common.formatCurrency((selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.amount) || 0, (selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.currencyId) || 'USD') })] }), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "Description:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.description })] }), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "Kind:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.kind })] }), jsxRuntime.jsxs(antd.Typography.Paragraph, { children: [jsxRuntime.jsx("strong", { children: "State:" }), ' ', jsxRuntime.jsx(antd.Typography.Text, { children: selectedTransaction === null || selectedTransaction === void 0 ? void 0 : selectedTransaction.state })] })] }))) })))] })));
20068
20121
  }
20069
20122
 
20070
20123
  function Quotes(_a) {
@@ -20283,21 +20336,22 @@ var getPriceList = function (_a) {
20283
20336
  });
20284
20337
  };
20285
20338
 
20286
- var QUOTE_QUERY = function (id) { return "\n query quote {\n quote ".concat(id ? "(id: ".concat(id, ")") : '', " {\n accountId\n amount\n amountDue\n smallUnitAmountDue\n currencyId\n formattedQuote {\n html\n }\n id\n payableId\n periodAmount\n subtotal\n taxAmount\n startDate\n amountsByPeriod {\n amount\n startDate\n }\n kind\n quoteChanges {\n currencyId\n id\n kind\n charges {\n subtotal\n amountsByPeriod {\n amount\n startDate\n }\n amount\n billingPeriod\n currencyId\n feature {\n unitName\n }\n id\n name\n priceListCharge {\n id\n }\n priceList {\n id\n }\n coupon {\n couponCode\n }\n quantity\n kind\n }\n priceList {\n id\n plan {\n name\n }\n product {\n name\n }\n }\n\n }\n }\n }"); };
20339
+ var QUOTE_FIELDS = function (removeFormattedQuoteField) { return "\n fragment QuoteFields on Quote {\n accountId\n amount\n amountDue\n smallUnitAmountDue\n currencyId\n ".concat(removeFormattedQuoteField ? '' : "formattedQuote { html }", "\n id\n payableId\n periodAmount\n subtotal\n taxAmount\n startDate\n amountsByPeriod {\n amount\n startDate\n }\n kind\n quoteChanges {\n currencyId\n id\n kind\n charges {\n subtotal\n amountsByPeriod {\n amount\n startDate\n }\n amount\n billingPeriod\n currencyId\n feature {\n unitName\n }\n id\n name\n priceListCharge {\n id\n }\n priceList {\n id\n }\n coupon {\n couponCode\n }\n quantity\n kind\n }\n priceList {\n id\n plan {\n name\n }\n product {\n name\n }\n }\n }\n }\n"); };
20340
+ var QUOTE_QUERY = function (id, removeFormattedQuoteField) { return "\n".concat(QUOTE_FIELDS(removeFormattedQuoteField), "\n query quote {\n quote ").concat(id ? "(id: ".concat(id, ")") : '', " {\n ...QuoteFields\n }\n }"); };
20287
20341
  var getQuote = function (_a) {
20288
- var id = _a.id, token = _a.token, apiHost = _a.apiHost;
20342
+ var id = _a.id, token = _a.token, apiHost = _a.apiHost, _b = _a.removeFormattedQuoteField, removeFormattedQuoteField = _b === void 0 ? false : _b;
20289
20343
  return __awaiter(void 0, void 0, void 0, function () {
20290
20344
  var response;
20291
- return __generator(this, function (_b) {
20292
- switch (_b.label) {
20345
+ return __generator(this, function (_c) {
20346
+ switch (_c.label) {
20293
20347
  case 0: return [4 /*yield*/, gqlRequest({
20294
- query: QUOTE_QUERY(id),
20348
+ query: QUOTE_QUERY(id, removeFormattedQuoteField),
20295
20349
  token: token,
20296
20350
  vars: {},
20297
20351
  apiHost: apiHost,
20298
20352
  })];
20299
20353
  case 1:
20300
- response = _b.sent();
20354
+ response = _c.sent();
20301
20355
  return [2 /*return*/, response === null || response === void 0 ? void 0 : response.quote];
20302
20356
  }
20303
20357
  });
@@ -20379,7 +20433,7 @@ var getCoupons = function (_a) {
20379
20433
  });
20380
20434
  };
20381
20435
 
20382
- var showErrorNotification$1 = common.useErrorNotification();
20436
+ var showErrorNotification$3 = common.useErrorNotification();
20383
20437
  var useUpdateCoupons = function (_a) {
20384
20438
  var apiHost = _a.apiHost, token = _a.token, quoteChangeId = _a.quoteChangeId, onCouponAdded = _a.onCouponAdded, onCouponRemoved = _a.onCouponRemoved;
20385
20439
  var coupons = reactQuery.useQuery({
@@ -20406,7 +20460,7 @@ var useUpdateCoupons = function (_a) {
20406
20460
  },
20407
20461
  onError: function (error) {
20408
20462
  var _a, _b;
20409
- showErrorNotification$1((_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.errors[0]) === null || _b === void 0 ? void 0 : _b.message, 'Error adding coupon');
20463
+ showErrorNotification$3((_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.errors[0]) === null || _b === void 0 ? void 0 : _b.message, 'Error adding coupon');
20410
20464
  },
20411
20465
  }), addCoupon = _b.mutate, isAddingCoupon = _b.isPending;
20412
20466
  var _c = reactQuery.useMutation({
@@ -20426,7 +20480,7 @@ var useUpdateCoupons = function (_a) {
20426
20480
  },
20427
20481
  onError: function (error) {
20428
20482
  var _a, _b;
20429
- showErrorNotification$1((_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.errors[0]) === null || _b === void 0 ? void 0 : _b.message, 'Error removing coupon');
20483
+ showErrorNotification$3((_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.errors[0]) === null || _b === void 0 ? void 0 : _b.message, 'Error removing coupon');
20430
20484
  },
20431
20485
  }), removeCoupon = _c.mutate, isRemovingCoupon = _c.isPending;
20432
20486
  return {
@@ -20438,83 +20492,29 @@ var useUpdateCoupons = function (_a) {
20438
20492
  };
20439
20493
  };
20440
20494
 
20441
- var CURRENT_USER_DATA_QUERY = "{\n company {\n name\n }\n currentUser {\n account {\n billingCountry\n currencyId\n }\n authObjectName\n payload {\n returnUrl\n }\n privacyUrl\n termsUrl\n entityId\n }\n }";
20442
- var getCurrentUserData = function (_a) {
20443
- var token = _a.token, apiHost = _a.apiHost;
20444
- return __awaiter(void 0, void 0, void 0, function () {
20445
- var response;
20446
- var _b, _c, _d, _e, _f, _g, _h, _j;
20447
- return __generator(this, function (_k) {
20448
- switch (_k.label) {
20449
- case 0: return [4 /*yield*/, common.gqlRequest({
20450
- query: CURRENT_USER_DATA_QUERY,
20451
- token: token,
20452
- apiHost: apiHost,
20453
- })];
20454
- case 1:
20455
- response = _k.sent();
20456
- return [2 /*return*/, {
20457
- authObjectName: (_b = response === null || response === void 0 ? void 0 : response.currentUser) === null || _b === void 0 ? void 0 : _b.authObjectName,
20458
- account: (_c = response === null || response === void 0 ? void 0 : response.currentUser) === null || _c === void 0 ? void 0 : _c.account,
20459
- companyName: (_d = response === null || response === void 0 ? void 0 : response.company) === null || _d === void 0 ? void 0 : _d.name,
20460
- returnUrl: (_f = (_e = response === null || response === void 0 ? void 0 : response.currentUser) === null || _e === void 0 ? void 0 : _e.payload) === null || _f === void 0 ? void 0 : _f.returnUrl,
20461
- privacyUrl: (_g = response === null || response === void 0 ? void 0 : response.currentUser) === null || _g === void 0 ? void 0 : _g.privacyUrl,
20462
- termsUrl: (_h = response === null || response === void 0 ? void 0 : response.currentUser) === null || _h === void 0 ? void 0 : _h.termsUrl,
20463
- entityId: (_j = response === null || response === void 0 ? void 0 : response.currentUser) === null || _j === void 0 ? void 0 : _j.entityId,
20464
- }];
20465
- }
20466
- });
20467
- });
20468
- };
20469
-
20470
- var useCurrentUserData = function (token) {
20471
- var apiHost = react.useContext(BunnyContext).apiHost;
20472
- var currentUserData = reactQuery.useQuery({
20473
- queryKey: common.QueryKeyFactory.default.currentUserKey(token),
20474
- queryFn: function () { return getCurrentUserData({ token: token, apiHost: apiHost }); },
20475
- enabled: Boolean(token),
20476
- }).data;
20477
- return currentUserData || {};
20478
- };
20479
-
20480
20495
  var BunnyFooterIcon = function (_a) {
20481
20496
  var color = _a.color;
20482
20497
  return (jsxRuntime.jsxs("svg", __assign({ width: "45", height: "15", viewBox: "0 0 39 13", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: [jsxRuntime.jsxs("g", __assign({ clipPath: "url(#clip0_6_851)" }, { children: [jsxRuntime.jsx("path", { className: "bunny-icon-path", d: "M14.5898 7.19708C14.5898 9.35053 13.0926 10.325 11.2495 10.325C9.39955 10.325 7.90234 9.35001 7.90234 7.18967V3.26221H10.1125V7.00052C10.1125 7.87719 10.5855 8.27725 11.2495 8.27725C11.9061 8.27725 12.3865 7.87719 12.3865 7.00052V3.26221H14.5898V7.19708Z", fill: color }), jsxRuntime.jsx("path", { className: "bunny-icon-path", d: "M31.8943 12.9625H29.4793L31.8523 8.62816L28.9355 3.26221H31.4708L33.0457 6.35524L34.5924 3.26221H37.0075L31.8943 12.9625Z", fill: color }), jsxRuntime.jsx("path", { className: "bunny-icon-path", d: "M15.1602 5.96827C15.1602 3.8148 16.6574 2.84033 18.5005 2.84033C20.3504 2.84033 21.8476 3.81533 21.8476 5.97568V10.1473H19.6374V6.16483C19.6374 5.28815 19.1645 4.8881 18.5005 4.8881C17.8439 4.8881 17.3634 5.28815 17.3634 6.16483V10.1473H15.1602V5.96827Z", fill: color }), jsxRuntime.jsx("path", { className: "bunny-icon-path", d: "M22.4316 5.96827C22.4316 3.8148 23.9289 2.84033 25.7719 2.84033C27.6219 2.84033 29.1191 3.81533 29.1191 5.97568V10.1473H26.9089V6.16483C26.9089 5.28815 26.4359 4.8881 25.7719 4.8881C25.1154 4.8881 24.6349 5.28815 24.6349 6.16483V10.1473H22.4316V5.96827Z", fill: color }), jsxRuntime.jsx("path", { className: "bunny-icon-path", d: "M7.40511 6.68957C7.40511 8.7236 6.02815 10.3227 4.17816 10.3227C3.23907 10.3227 2.61071 9.94378 2.19358 9.40371V10.1404H0.0605469V0.0405273H2.26381V3.91939C2.68041 3.42158 3.28802 3.07069 4.17763 3.07069C6.02759 3.07069 7.40511 4.66981 7.40511 6.68957ZM2.17229 6.69642C2.17229 7.60802 2.77937 8.2744 3.64823 8.2744C4.53783 8.2744 5.13107 7.59372 5.13107 6.69642C5.13107 5.79912 4.53783 5.11844 3.64823 5.11844C2.77937 5.11844 2.17229 5.78482 2.17229 6.69642Z", fill: color }), jsxRuntime.jsx("path", { className: "bunny-icon-path", d: "M38.966 8.94801C38.966 9.76181 38.2668 10.4631 37.4618 10.4631C36.6499 10.4631 35.9434 9.76181 35.9434 8.94801C35.9434 8.14846 36.6494 7.46094 37.4618 7.46094C38.2668 7.46094 38.966 8.14846 38.966 8.94801Z", fill: color })] })), jsxRuntime.jsx("defs", { children: jsxRuntime.jsx("clipPath", __assign({ id: "clip0_6_851" }, { children: jsxRuntime.jsx("rect", { width: "39", height: "13", fill: "white" }) })) })] })));
20483
20498
  };
20484
20499
 
20485
- var Text$g = antd.Typography.Text;
20500
+ var Text$h = antd.Typography.Text;
20486
20501
  var Footer = function (_a) {
20487
20502
  var className = _a.className;
20488
20503
  var token = useToken();
20489
- var _b = useCurrentUserData(token), privacyUrl = _b.privacyUrl, termsUrl = _b.termsUrl;
20504
+ var currentUser = useCurrentUserData(token).currentUser;
20505
+ var privacyUrl = currentUser.privacyUrl, termsUrl = currentUser.termsUrl;
20490
20506
  var isMobile = common.useIsMobile();
20491
20507
  return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-justify-between bunny-shrink-0 ".concat(isMobile ? 'bunny-flex-col bunny-gap-2' : '', " ").concat(className) }, { children: [(termsUrl || privacyUrl) && (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-3" }, { children: [termsUrl && (jsxRuntime.jsx(StyedLink, __assign({ className: "bunny-text-xs bunny-text-slate-400", href: termsUrl, rel: "noopener noreferrer", target: "_blank", type: "text" }, { children: "Terms" }))), privacyUrl && (jsxRuntime.jsx(StyedLink, __assign({ className: "bunny-text-xs bunny-text-slate-400", href: privacyUrl, rel: "noopener noreferrer", target: "_blank", type: "text" }, { children: "Privacy" })))] }))), jsxRuntime.jsx(BunnyMarketingLink, {})] })));
20492
20508
  };
20493
20509
  var BunnyMarketingLink = function () {
20494
20510
  var _a = react.useState(false), isHovered = _a[0], setIsHovered = _a[1];
20495
20511
  var isMobile = common.useIsMobile();
20496
- return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-items-end bunny-justify-end ".concat(isMobile ? '' : 'grow') }, { children: jsxRuntime.jsx(StyledBunnyLink, __assign({ className: "bunny-flex bunny-items-end bunny-justify-end bunny-text-slate-400", href: "https://bunny.com/", rel: "noopener noreferrer", target: "_blank" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center", onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } }, { children: [jsxRuntime.jsx(Text$g, __assign({ className: "bunny-text-xs bunny-text-slate-400" }, { children: "Powered by\u00A0" })), jsxRuntime.jsx("div", __assign({ style: { paddingTop: '5px' } }, { children: jsxRuntime.jsx(BunnyFooterIcon, { color: isHovered ? common.PRIMARY_COLOR : common.SLATE_400 }) }))] })) })) })));
20512
+ return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-items-end bunny-justify-end ".concat(isMobile ? '' : 'grow') }, { children: jsxRuntime.jsx(StyledBunnyLink, __assign({ className: "bunny-flex bunny-items-end bunny-justify-end bunny-text-slate-400", href: "https://bunny.com/", rel: "noopener noreferrer", target: "_blank" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center", onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } }, { children: [jsxRuntime.jsx(Text$h, __assign({ className: "bunny-text-xs bunny-text-slate-400" }, { children: "Powered by\u00A0" })), jsxRuntime.jsx("div", __assign({ style: { paddingTop: '5px' } }, { children: jsxRuntime.jsx(BunnyFooterIcon, { color: isHovered ? common.PRIMARY_COLOR : common.SLATE_400 }) }))] })) })) })));
20497
20513
  };
20498
20514
  var StyedLink = styled__default["default"].a(templateObject_1$5 || (templateObject_1$5 = __makeTemplateObject(["\n color: ", ";\n transition: color 0.3s;\n &:hover {\n color: ", ";\n }\n text-decoration: none;\n"], ["\n color: ", ";\n transition: color 0.3s;\n &:hover {\n color: ", ";\n }\n text-decoration: none;\n"])), common.SLATE_400, common.SLATE_500);
20499
20515
  var StyledBunnyLink = styled__default["default"](StyedLink)(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n &:hover {\n color: ", " !important;\n }\n"], ["\n &:hover {\n color: ", " !important;\n }\n"])), common.PRIMARY_COLOR);
20500
20516
  var templateObject_1$5, templateObject_2$1;
20501
20517
 
20502
- function shouldShowCouponEditor(quote, activeCouponsExist, upgradingSubscription) {
20503
- var _a;
20504
- var upgradingFromTrial = ((_a = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.TRIAL;
20505
- function upgradingFromFree() {
20506
- var totalPrice = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.charges.reduce(function (acc, charge) { return acc + Number((charge === null || charge === void 0 ? void 0 : charge.discountedPrice) || 0); }, 0);
20507
- return totalPrice === 0;
20508
- }
20509
- if (quote.kind === common.QuoteChangeKind.SUBSCRIBE) {
20510
- return activeCouponsExist;
20511
- }
20512
- else if (quote.kind === common.QuoteChangeKind.ADJUSTMENT) {
20513
- return activeCouponsExist && (upgradingFromTrial || upgradingFromFree());
20514
- }
20515
- return false;
20516
- }
20517
-
20518
20518
  function CouponEditor(_a) {
20519
20519
  var className = _a.className, onAddCoupon = _a.onAddCoupon, isAddingCoupon = _a.isAddingCoupon, couponCode = _a.couponCode, setCouponCode = _a.setCouponCode;
20520
20520
  function handleAddCoupon() {
@@ -20528,17 +20528,14 @@ function CouponEditor(_a) {
20528
20528
  return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2 ".concat(className) }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-2" }, { children: [jsxRuntime.jsx(antd.Input, { value: couponCode, onChange: function (e) { return setCouponCode(e.target.value); }, placeholder: "Coupon code", disabled: isAddingCoupon, size: "small" }), jsxRuntime.jsx(antd.Button, __assign({ loading: isAddingCoupon, type: "primary", onClick: handleAddCoupon, disabled: couponCode.length === 0 }, { children: "Apply" }))] })) })));
20529
20529
  }
20530
20530
 
20531
- var SubscriptionsContext = react.createContext({});
20532
-
20533
- var Text$f = antd.Typography.Text;
20531
+ var Text$g = antd.Typography.Text;
20534
20532
  function CheckoutSummary(_a) {
20535
20533
  var quote = _a.quote, className = _a.className, onAddCoupon = _a.onAddCoupon, onRemoveCoupon = _a.onRemoveCoupon, isRemovingCoupon = _a.isRemovingCoupon, priceListData = _a.priceListData, isAddingCoupon = _a.isAddingCoupon, couponCode = _a.couponCode, setCouponCode = _a.setCouponCode, activeCouponsExist = _a.activeCouponsExist;
20536
- var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
20537
- return (jsxRuntime.jsxs("div", __assign({ className: "".concat(className, " bunny-space-y-4") }, { children: [jsxRuntime.jsxs(Text$f, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-text-lg bunny-font-medium bunny-mb-4" }, { children: ["Checkout summary - ", priceListData === null || priceListData === void 0 ? void 0 : priceListData.product.name, " ", priceListData === null || priceListData === void 0 ? void 0 : priceListData.name] })), jsxRuntime.jsx("div", __assign({ className: "bunny-space-y-4" }, { children: quote === null || quote === void 0 ? void 0 : quote.quoteChanges.map(function (quoteChange) {
20534
+ return (jsxRuntime.jsxs("div", __assign({ className: "".concat(className, " bunny-space-y-4") }, { children: [jsxRuntime.jsxs(Text$g, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-text-lg bunny-font-medium bunny-mb-4" }, { children: ["Checkout summary - ", priceListData === null || priceListData === void 0 ? void 0 : priceListData.product.name, " ", priceListData === null || priceListData === void 0 ? void 0 : priceListData.name] })), jsxRuntime.jsx("div", __assign({ className: "bunny-space-y-4" }, { children: quote === null || quote === void 0 ? void 0 : quote.quoteChanges.map(function (quoteChange) {
20538
20535
  return quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.map(function (charge) {
20539
20536
  var _a;
20540
20537
  var multiplier = charge.kind === 'COUPON' ? -1 : 1;
20541
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-grid-cols-3 bunny-gap-4 bunny-items-center" }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-col-span-1" }, { children: charge.name })), jsxRuntime.jsx("div", __assign({ className: "bunny-col-span-1 bunny-text-center" }, { children: ((_a = charge.coupon) === null || _a === void 0 ? void 0 : _a.couponCode) ? (jsxRuntime.jsx("div", __assign({ onClick: function () {
20538
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-grid-cols-3 bunny-gap-4 bunny-items-center" }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-col-span-1" }, { children: charge.name })), jsxRuntime.jsx("div", __assign({ className: "bunny-col-span-1 bunny-text-center" }, { children: ((_a = charge.coupon) === null || _a === void 0 ? void 0 : _a.couponCode) ? (jsxRuntime.jsx("button", __assign({ onClick: function () {
20542
20539
  var _a, _b;
20543
20540
  if (isRemovingCoupon) {
20544
20541
  return;
@@ -20547,10 +20544,9 @@ function CheckoutSummary(_a) {
20547
20544
  throw new Error('Coupon code not found');
20548
20545
  }
20549
20546
  onRemoveCoupon((_b = charge.coupon) === null || _b === void 0 ? void 0 : _b.couponCode);
20550
- }, className: "bunny-text-orange-500 hover:bunny-text-orange-400 bunny-cursor-pointer" }, { children: "Remove" }))) : (jsxRuntime.jsx("div", { children: charge.quantity })) })), jsxRuntime.jsx("div", __assign({ className: "bunny-col-span-1 bunny-text-right" }, { children: common.formatCurrency(multiplier * (charge.subtotal || 0), charge.currencyId) }))] }), charge.id));
20547
+ }, className: "bunny-text-orange-500 hover:bunny-text-orange-400 bunny-cursor-pointer bunny-bg-transparent bunny-border-none" }, { children: "Remove" }))) : (jsxRuntime.jsx("div", { children: charge.quantity })) })), jsxRuntime.jsx("div", __assign({ className: "bunny-col-span-1 bunny-text-right" }, { children: common.formatCurrency(multiplier * (charge.subtotal || 0), charge.currencyId) }))] }), charge.id));
20551
20548
  });
20552
- }) })), jsxRuntime.jsx(CheckoutSummaryDivider, {}), jsxRuntime.jsxs("div", __assign({ className: "bunny-space-y-4" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: "Subtotal" }), jsxRuntime.jsx("div", { children: common.formatCurrency(quote.subtotal, quote.currencyId) })] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: "Taxes" }), jsxRuntime.jsx("div", { children: common.formatCurrency(quote.taxAmount, quote.currencyId) })] }))] })), jsxRuntime.jsx(CheckoutSummaryDivider, {}), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: "Total" }), jsxRuntime.jsx("div", { children: common.formatCurrency(quote.amountDue, quote.currencyId) })] }))] }), upgradingSubscription &&
20553
- shouldShowCouponEditor(quote, activeCouponsExist, upgradingSubscription) && (jsxRuntime.jsx(CouponEditor, { className: "bunny-w-full", quote: quote, onAddCoupon: onAddCoupon, isAddingCoupon: isAddingCoupon, couponCode: couponCode, setCouponCode: setCouponCode }))] })));
20549
+ }) })), jsxRuntime.jsx(CheckoutSummaryDivider, {}), jsxRuntime.jsxs("div", __assign({ className: "bunny-space-y-4" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: "Subtotal" }), jsxRuntime.jsx("div", { children: common.formatCurrency(quote.subtotal, quote.currencyId) })] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: "Taxes" }), jsxRuntime.jsx("div", { children: common.formatCurrency(quote.taxAmount, quote.currencyId) })] }))] })), jsxRuntime.jsx(CheckoutSummaryDivider, {}), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: "Total" }), jsxRuntime.jsx("div", { children: common.formatCurrency(quote.amountDue, quote.currencyId) })] }))] }), activeCouponsExist && (jsxRuntime.jsx(CouponEditor, { className: "bunny-w-full", quote: quote, onAddCoupon: onAddCoupon, isAddingCoupon: isAddingCoupon, couponCode: couponCode, setCouponCode: setCouponCode }))] })));
20554
20550
  }
20555
20551
  var CheckoutSummaryDivider = function () {
20556
20552
  return (jsxRuntime.jsx("div", __assign({ className: "bunny-my-2" }, { children: jsxRuntime.jsx(antd.Divider, { className: "m-0" }) })));
@@ -20589,28 +20585,28 @@ function InitialSignupForm(_a) {
20589
20585
  return (jsxRuntime.jsx(antd.Form, __assign({ className: "bunny-flex bunny-flex-col bunny-h-full bunny-w-full ".concat(className), form: form, layout: "vertical", autoComplete: "off" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-space-y-2" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-4" }, { children: [jsxRuntime.jsx(antd.Form.Item, __assign({ name: "firstName", rules: [{ required: true, message: 'First name is required' }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "First name" }) })), jsxRuntime.jsx(antd.Form.Item, __assign({ name: "lastName", rules: [{ required: true, message: 'Last name is required' }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "Last name" }) }))] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-4" }, { children: [jsxRuntime.jsx(antd.Form.Item, __assign({ name: "email", rules: [
20590
20586
  { required: true, message: 'Email is required' },
20591
20587
  { type: 'email', message: 'Please enter a valid email' },
20592
- ], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "Email" }) })), jsxRuntime.jsx(antd.Form.Item, __assign({ name: "accountName", rules: [{ required: true, message: 'Company name is required' }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "Company name" }) }))] })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'bunny-flex-row bunny-pb-2' : 'bunny-flex-row', " bunny-gap-4") }, { children: jsxRuntime.jsx("div", __assign({ className: "flex-1 w-1/2" }, { children: jsxRuntime.jsx(antd.Form.Item, __assign({ name: "billingCountry", rules: [{ required: true, message: 'Country is required' }] }, { children: jsxRuntime.jsx(antd.Select, { className: "bunny-w-full", options: common.Lists.COUNTRY_LIST, placeholder: "Select a country", popupMatchSelectWidth: false, showSearch: true, filterOption: function (input, option) {
20588
+ ], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "Email" }) })), jsxRuntime.jsx(antd.Form.Item, __assign({ name: "accountName", rules: [{ required: true, message: 'Company name is required' }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "Company name" }) }))] })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'bunny-flex-row bunny-pb-2' : 'bunny-flex-row', " bunny-gap-4") }, { children: jsxRuntime.jsx("div", __assign({ className: "flex-1 w-1/2" }, { children: jsxRuntime.jsx(antd.Form.Item, __assign({ name: "billingCountry", rules: [{ required: true, message: 'Country is required' }] }, { children: jsxRuntime.jsx(antd.Select, { options: common.Lists.COUNTRY_LIST, placeholder: "Select a country", showSearch: true, filterOption: function (input, option) {
20593
20589
  var _a, _b;
20594
20590
  return ((_a = option === null || option === void 0 ? void 0 : option.label) !== null && _a !== void 0 ? _a : '').toLowerCase().includes(input.toLowerCase()) ||
20595
20591
  ((_b = option === null || option === void 0 ? void 0 : option.value) !== null && _b !== void 0 ? _b : '').toLowerCase().includes(input.toLowerCase());
20596
20592
  } }) })) })) })), jsxRuntime.jsx(antd.Form.Item, { children: jsxRuntime.jsx(antd.Button, __assign({ type: "primary", onClick: handleSubmit, loading: submitting, className: "bunny-w-full" }, { children: "Proceed to payment" })) })] })) })));
20597
20593
  }
20598
20594
 
20599
- var Title = antd.Typography.Title, Text$e = antd.Typography.Text;
20595
+ var Title = antd.Typography.Title, Text$f = antd.Typography.Text;
20600
20596
  function PaymentSuccessDisplay(_a) {
20601
20597
  var amountPaid = _a.amountPaid, className = _a.className, companyName = _a.companyName, returnUrl = _a.returnUrl, style = _a.style, currencyId = _a.currencyId;
20602
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-justify-center bunny-h-full ".concat(className), style: style }, { children: [jsxRuntime.jsx(icons.CheckCircleFilled, { style: { fontSize: "48px", color: "rgb(52 211 153)" } }), jsxRuntime.jsxs(Title, __assign({ level: 3, className: "bunny-mt-2 bunny-m-0" }, { children: ["Payment of ", common.formatCurrency(amountPaid, currencyId), " successful"] })), returnUrl && (jsxRuntime.jsxs(Text$e, __assign({ className: "bunny-text-slate-500 bunny-cursor-pointer bunny-underline", onClick: function () { return (window.location.href = returnUrl); } }, { children: ["Back to ", companyName] })))] })));
20598
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-justify-center bunny-h-full ".concat(className), style: style }, { children: [jsxRuntime.jsx(icons.CheckCircleFilled, { style: { fontSize: "48px", color: "rgb(52 211 153)" } }), jsxRuntime.jsxs(Title, __assign({ level: 3, className: "bunny-mt-2 bunny-m-0" }, { children: ["Payment of ", common.formatCurrency(amountPaid, currencyId), " successful"] })), returnUrl && (jsxRuntime.jsxs(Text$f, __assign({ className: "bunny-text-slate-500 bunny-cursor-pointer bunny-underline", onClick: function () { return (window.location.href = returnUrl); } }, { children: ["Back to ", companyName] })))] })));
20603
20599
  }
20604
20600
 
20605
- var Text$d = antd.Typography.Text;
20601
+ var Text$e = antd.Typography.Text;
20606
20602
  function PriceListDisplay(_a) {
20607
20603
  var priceListData = _a.priceListData;
20608
20604
  if (!priceListData)
20609
20605
  return null;
20610
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-space-y-8" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [jsxRuntime.jsxs(Text$d, __assign({ className: "bunny-text-slate-500 bunny-font-bold bunny-text-lg" }, { children: [priceListData.product.name, " ", priceListData.name] })), jsxRuntime.jsxs(Text$d, __assign({ className: "bunny-font-bold bunny-text-xl" }, { children: [common.formatCurrency(priceListData.basePrice, priceListData.currencyId), " / month"] }))] })), priceListData.trialAllowed ? (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col" }, { children: [jsxRuntime.jsxs(Text$d, __assign({ style: { fontSize: '16px' }, className: "bunny-text-slate-500" }, { children: [priceListData.trialLengthDays, " day trial"] })), jsxRuntime.jsx(Text$d, __assign({ className: "bunny-text-slate-500", style: { fontSize: '12px' } }, { children: "You will not be charged until the last day of the trial." }))] }))) : null] })));
20606
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-space-y-8" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [jsxRuntime.jsxs(Text$e, __assign({ className: "bunny-text-slate-500 bunny-font-bold bunny-text-lg" }, { children: [priceListData.product.name, " ", priceListData.name] })), jsxRuntime.jsxs(Text$e, __assign({ className: "bunny-font-bold bunny-text-xl" }, { children: [common.formatCurrency(priceListData.basePrice, priceListData.currencyId), " / month"] }))] })), priceListData.trialAllowed ? (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col" }, { children: [jsxRuntime.jsxs(Text$e, __assign({ style: { fontSize: '16px' }, className: "bunny-text-slate-500" }, { children: [priceListData.trialLengthDays, " day trial"] })), jsxRuntime.jsx(Text$e, __assign({ className: "bunny-text-slate-500", style: { fontSize: '12px' } }, { children: "You will not be charged until the last day of the trial." }))] }))) : null] })));
20611
20607
  }
20612
20608
 
20613
- var showErrorNotification = common.useErrorNotification();
20609
+ var showErrorNotification$2 = common.useErrorNotification();
20614
20610
  var showSuccessNotification$1 = common.useSuccessNotification();
20615
20611
  function Signup(_a) {
20616
20612
  var _b, _c, _d;
@@ -20620,6 +20616,14 @@ function Signup(_a) {
20620
20616
  var tokenFromContexts = useToken();
20621
20617
  var isMobile = common.useIsMobile();
20622
20618
  var topNavImageUrl = react.useContext(BrandContext).topNavImageUrl;
20619
+ var defaultValues = react.useMemo(function () { return ({
20620
+ firstName: defaultFirstName,
20621
+ lastName: defaultLastName,
20622
+ email: defaultEmail,
20623
+ accountName: defaultCompanyName,
20624
+ billingCountry: defaultBillingCountry,
20625
+ }); }, [defaultFirstName, defaultLastName, defaultEmail, defaultCompanyName, defaultBillingCountry]);
20626
+ var queryClient = reactQuery.useQueryClient();
20623
20627
  var _f = react.useState(undefined), initialQuote = _f[0], setInitialQuote = _f[1];
20624
20628
  var _g = react.useState(undefined), accountId = _g[0], setAccountId = _g[1];
20625
20629
  var _h = react.useState(undefined), portalSessionToken = _h[0], setPortalSessionToken = _h[1];
@@ -20631,8 +20635,8 @@ function Signup(_a) {
20631
20635
  accountId: accountId,
20632
20636
  token: token,
20633
20637
  apiHost: apiHost,
20638
+ enabled: Boolean(accountId),
20634
20639
  }).defaultPaymentMethod;
20635
- var queryClient = reactQuery.useQueryClient();
20636
20640
  var recalculateTaxes = reactQuery.useMutation({
20637
20641
  mutationFn: function () {
20638
20642
  if (!(quote === null || quote === void 0 ? void 0 : quote.id)) {
@@ -20642,7 +20646,7 @@ function Signup(_a) {
20642
20646
  },
20643
20647
  onError: function (error) {
20644
20648
  if (!error[0].message.includes('Ensure that you have a taxation plugin')) {
20645
- showErrorNotification(error.message);
20649
+ showErrorNotification$2(error.message);
20646
20650
  }
20647
20651
  },
20648
20652
  onSuccess: function (quote) {
@@ -20678,10 +20682,10 @@ function Signup(_a) {
20678
20682
  onSuccess: function (data) {
20679
20683
  setAccountId(data.account.id);
20680
20684
  setPortalSessionToken(data.portalSessionToken);
20681
- // We must invalidate the accountPaymentMethodKey query in order to clear payment methods from the provided api token,
20685
+ // We must invalidate the accountPaymentMethodsKey query in order to clear payment methods from the provided api token,
20682
20686
  // to instead use paymentMethods from portalSessionToken.
20683
20687
  queryClient.invalidateQueries({
20684
- queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
20688
+ queryKey: common.QueryKeyFactory.default.accountPaymentMethodsKey({
20685
20689
  accountId: accountId,
20686
20690
  token: token,
20687
20691
  }),
@@ -20691,10 +20695,10 @@ function Signup(_a) {
20691
20695
  onError: function (error) {
20692
20696
  var errorMessage = error.response.errors[0].message;
20693
20697
  if (errorMessage.includes("Address couldn't be validated")) {
20694
- showErrorNotification('Please enter a valid billing address');
20698
+ showErrorNotification$2('Please enter a valid billing address');
20695
20699
  }
20696
20700
  else {
20697
- showErrorNotification(errorMessage);
20701
+ showErrorNotification$2(errorMessage);
20698
20702
  }
20699
20703
  },
20700
20704
  }), quoteAccountSignupMutate = _l.mutate, isSigningUp = _l.isPending;
@@ -20791,7 +20795,7 @@ function Signup(_a) {
20791
20795
  }
20792
20796
  function handlePaymentFail(error) {
20793
20797
  var _a;
20794
- showErrorNotification((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.message);
20798
+ showErrorNotification$2((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.message);
20795
20799
  }
20796
20800
  react.useEffect(function () {
20797
20801
  if (initialQuote === null || initialQuote === void 0 ? void 0 : initialQuote.id) {
@@ -20803,28 +20807,42 @@ function Signup(_a) {
20803
20807
  }
20804
20808
  return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'bunny-flex-col' : 'bunny-flex-row', " bunny-h-screen bunny-w-screen bunny-absolute bunny-top-0 bunny-left-0 ").concat(shadow, " ").concat(className), style: style }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-items-center bunny-flex-col ".concat(isMobile ? 'bunny-w-full bunny-h-1/2' : 'bunny-w-1/2 bunny-h-full', " bunny-justify-center") }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-start bunny-justify-between bunny-w-3/5 bunny-h-full bunny-gap-4 bunny-my-24" }, { children: [jsxRuntime.jsx("div", { children: topNavImageUrl.length > 0 && (jsxRuntime.jsx(antd.Image, { width: 24, src: topNavImageUrl, alt: "Logo", preview: false })) }), data ? (jsxRuntime.jsx(CheckoutSummary, { quote: data, className: "bunny-h-full bunny-w-full", onAddCoupon: addCoupon, onRemoveCoupon: removeCoupon, isRemovingCoupon: isRemovingCoupon, priceListData: priceListData, isAddingCoupon: isAddingCoupon, couponCode: couponEditorCouponCode, setCouponCode: setCouponEditorCouponCode, activeCouponsExist: activeCouponsExist })) : (jsxRuntime.jsx("div", __assign({ className: "bunny-h-full" }, { children: isLoadingPriceList ? (jsxRuntime.jsx(antd.Skeleton, { active: true })) : (jsxRuntime.jsx(PriceListDisplay, { priceListData: priceListData })) }))), jsxRuntime.jsx(Footer, {})] })) })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col ".concat(isMobile ? 'bunny-w-full bunny-h-1/2 bunny-overflow-auto' : 'bunny-w-1/2 bunny-h-full', " bunny-items-center"), style: {
20805
20809
  boxShadow: '-5px 0 20px 0 rgba(0, 0, 0, 0.05)',
20806
- } }, { children: isLoadingPriceList ? (jsxRuntime.jsx(antd.Skeleton, { active: true, className: "bunny-flex bunny-flex-col bunny-w-3/5 bunny-mt-24" })) : (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-3/5 bunny-mt-24" }, { children: jsxRuntime.jsx(PaymentForms, { quote: quote, handlePaymentSuccess: handlePaymentSuccess, handlePaymentFail: handlePaymentFail, handleSubmit: handleSubmit, proceedingToPayment: isSigningUp || isLoadingQuote, accountId: accountId, overrideToken: portalSessionToken, customCheckoutFunction: accountSignupFunction, defaultValues: {
20807
- firstName: defaultFirstName,
20808
- lastName: defaultLastName,
20809
- email: defaultEmail,
20810
- accountName: defaultCompanyName,
20811
- billingCountry: defaultBillingCountry,
20812
- } }) }))) }))] })));
20810
+ } }, { children: isLoadingPriceList ? (jsxRuntime.jsx(antd.Skeleton, { active: true, className: "bunny-flex bunny-flex-col bunny-w-3/5 bunny-mt-24" })) : (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-3/5 bunny-mt-24" }, { children: jsxRuntime.jsx(PaymentForms, { quote: quote, handlePaymentSuccess: handlePaymentSuccess, handlePaymentFail: handlePaymentFail, handleSubmit: handleSubmit, proceedingToPayment: isSigningUp || isLoadingQuote, accountId: accountId, overrideToken: portalSessionToken, customCheckoutFunction: accountSignupFunction, defaultValues: defaultValues }) }))) }))] })));
20813
20811
  }
20814
20812
 
20815
- var useQuoteSubscriptionUpgrade = function () {
20816
- var graphQLRequest = useGraphQLRequest();
20817
- return function (subscriptionId, priceListId, apiHost, token) { return __awaiter(void 0, void 0, void 0, function () {
20818
- var data;
20819
- return __generator(this, function (_a) {
20820
- switch (_a.label) {
20821
- case 0: return [4 /*yield*/, graphQLRequest("\n mutation QuoteSubscriptionUpgrade($subscriptionId: ID!, $priceListId: ID!) {\n quoteSubscriptionUpgrade(\n subscriptionId: $subscriptionId\n priceListId: $priceListId\n ) {\n quote {\n id\n }\n }\n }\n ", apiHost, token, { subscriptionId: subscriptionId, priceListId: priceListId })];
20813
+ var SubscriptionsContext = react.createContext({});
20814
+
20815
+ var SUBSCRIPTIONS_QUERY = "\nquery subscriptions {\n subscriptions {\n nodes {\n addonSubscriptions {\n id\n plan { id }\n }\n cancellationDate\n currencyId\n endDate\n evergreen\n id\n period\n plan { id name selfServiceBuy selfServiceCancel selfServiceRenew }\n priceList {\n id\n periodMonths\n name\n plan {\n id\n addon\n addonPlans { id }\n }\n }\n product { id name showProductNameOnLineItem }\n startDate\n state\n trialEndDate\n trialPeriod\n trialStartDate\n account { id }\n daysLeftInTrial\n trialExpirationAction\n charges {\n priceListCharge {\n priceListChargeTiers {\n price\n starts\n }\n featureAddon\n id\n }\n amount\n billingPeriod\n chargeType\n discount\n discountedPrice\n endDate\n expired\n feature { name }\n id\n isAmendment\n isRamp\n kind\n name\n periodPrice\n price\n priceDecimals\n priceListChargeId\n priceTiers { starts price }\n pricingModel\n quantity\n selfServiceQuantity\n startDate\n trial\n }\n }\n }\n }";
20816
+ var getSubscriptions = function (_a) {
20817
+ var apiHost = _a.apiHost, isInPreviewMode = _a.isInPreviewMode, token = _a.token;
20818
+ return __awaiter(void 0, void 0, void 0, function () {
20819
+ var response, combinedSubscriptions;
20820
+ var _b, _c;
20821
+ return __generator(this, function (_d) {
20822
+ switch (_d.label) {
20823
+ case 0: return [4 /*yield*/, gqlRequest({
20824
+ isInPreviewMode: isInPreviewMode,
20825
+ query: SUBSCRIPTIONS_QUERY,
20826
+ token: token,
20827
+ apiHost: apiHost,
20828
+ })];
20822
20829
  case 1:
20823
- data = _a.sent();
20824
- return [2 /*return*/, data];
20830
+ response = _d.sent();
20831
+ combinedSubscriptions = (_c = (_b = response === null || response === void 0 ? void 0 : response.subscriptions) === null || _b === void 0 ? void 0 : _b.nodes) === null || _c === void 0 ? void 0 : _c.map(function (subscription) { return (__assign(__assign({}, subscription), { charges: common.sortSubscriptionCharges(subscription.charges) })); });
20832
+ return [2 /*return*/, combinedSubscriptions];
20825
20833
  }
20826
20834
  });
20827
- }); };
20835
+ });
20836
+ };
20837
+
20838
+ var quoteSubscriptionUpgrade = function (_a) {
20839
+ var subscriptionId = _a.subscriptionId, priceListId = _a.priceListId, apiHost = _a.apiHost, token = _a.token;
20840
+ return gqlRequest({
20841
+ query: "mutation QuoteSubscriptionUpgrade($subscriptionId: ID!, $priceListId: ID!) {\n quoteSubscriptionUpgrade(\n subscriptionId: $subscriptionId\n priceListId: $priceListId\n ) {\n quote {\n id\n }\n }\n }",
20842
+ vars: { subscriptionId: subscriptionId, priceListId: priceListId },
20843
+ apiHost: apiHost,
20844
+ token: token,
20845
+ });
20828
20846
  };
20829
20847
  var useCreateSubscriptionQuote = function () {
20830
20848
  var graphQLRequest = useGraphQLRequest();
@@ -20856,96 +20874,510 @@ var useQuoteChangeUpdate = function () {
20856
20874
  });
20857
20875
  }); };
20858
20876
  };
20859
- var useQuoteDelete = function () {
20860
- var graphQLRequest = useGraphQLRequest();
20861
- return function (quoteId, apiHost, token) { return __awaiter(void 0, void 0, void 0, function () {
20862
- var response;
20863
- return __generator(this, function (_a) {
20864
- switch (_a.label) {
20865
- case 0: return [4 /*yield*/, graphQLRequest("mutation QuoteDelete($id: ID!) {\n quoteDelete(id: $id) {\n errors\n }\n }", apiHost, token, { id: quoteId })];
20866
- case 1:
20867
- response = _a.sent();
20868
- return [2 /*return*/, response];
20869
- }
20870
- });
20871
- }); };
20872
- };
20873
- var useQuoteSubscriptionActivate = function () {
20874
- var graphQLRequest = useGraphQLRequest();
20875
- return function (subscriptionId, apiHost, token) { return __awaiter(void 0, void 0, void 0, function () {
20876
- var response;
20877
- return __generator(this, function (_a) {
20878
- switch (_a.label) {
20879
- case 0: return [4 /*yield*/, graphQLRequest("mutation QuoteSubscriptionActivate($subscriptionId: ID!) {\n quoteSubscriptionActivate(subscriptionId: $subscriptionId) {\n quote {\n id\n }\n }\n }", apiHost, token, { subscriptionId: subscriptionId })];
20880
- case 1:
20881
- response = _a.sent();
20882
- return [2 /*return*/, response];
20883
- }
20884
- });
20885
- }); };
20886
- };
20887
-
20888
- var SUBSCRIPTIONS_QUERY = "\nquery subscriptions {\n subscriptions {\n nodes {\n cancellationDate\n currencyId\n endDate\n evergreen\n id\n period\n plan { id name selfServiceBuy selfServiceCancel selfServiceRenew }\n priceList { id periodMonths }\n product { id name showProductNameOnLineItem }\n startDate\n state\n trialEndDate\n trialPeriod\n trialStartDate\n daysLeftInTrial\n trialExpirationAction\n charges {\n priceListCharge {\n priceListChargeTiers {\n price\n starts\n }\n featureAddon\n id\n }\n amount\n billingPeriod\n chargeType\n discount\n discountedPrice\n endDate\n expired\n feature { name }\n id\n isAmendment\n isRamp\n kind\n name\n periodPrice\n price\n priceDecimals\n priceListChargeId\n priceTiers { starts price }\n pricingModel\n quantity\n selfServiceQuantity\n startDate\n trial\n }\n }\n }\n }";
20889
- var getSubscriptions = function (_a) {
20890
- var apiHost = _a.apiHost, isInPreviewMode = _a.isInPreviewMode, token = _a.token;
20891
- return __awaiter(void 0, void 0, void 0, function () {
20892
- var response, combinedSubscriptions;
20893
- var _b, _c;
20894
- return __generator(this, function (_d) {
20895
- switch (_d.label) {
20896
- case 0: return [4 /*yield*/, gqlRequest({
20897
- isInPreviewMode: isInPreviewMode,
20898
- query: SUBSCRIPTIONS_QUERY,
20899
- token: token,
20900
- apiHost: apiHost,
20901
- })];
20902
- case 1:
20903
- response = _d.sent();
20904
- combinedSubscriptions = (_c = (_b = response === null || response === void 0 ? void 0 : response.subscriptions) === null || _b === void 0 ? void 0 : _b.nodes) === null || _c === void 0 ? void 0 : _c.map(function (subscription) { return (__assign(__assign({}, subscription), { charges: common.sortSubscriptionCharges(subscription.charges) })); });
20905
- return [2 /*return*/, combinedSubscriptions];
20906
- }
20907
- });
20908
- });
20909
- };
20910
-
20911
- var pageWrapperClassName = function (isMobile) {
20912
- return "flex flex-col grow pt-4 ".concat(isMobile ? 'pb-4 overflow-hidden' : 'pb-8', " ").concat('content-container');
20913
- };
20914
-
20915
- var MUTATION$2 = "{\n currentUser {\n taxationRequiredAccountFields\n }\n}";
20916
- var getTaxationRequiredAccountFields = function (_a) {
20917
- var apiHost = _a.apiHost, token = _a.token;
20918
- return __awaiter(void 0, void 0, void 0, function () {
20919
- var response;
20920
- var _b, _c;
20921
- return __generator(this, function (_d) {
20922
- switch (_d.label) {
20923
- case 0: return [4 /*yield*/, gqlRequest({
20924
- query: MUTATION$2,
20925
- token: token,
20926
- apiHost: apiHost,
20927
- })];
20928
- case 1:
20929
- response = _d.sent();
20930
- return [2 /*return*/, ((_c = (_b = response === null || response === void 0 ? void 0 : response.currentUser) === null || _b === void 0 ? void 0 : _b.taxationRequiredAccountFields) === null || _c === void 0 ? void 0 : _c.length) > 0
20931
- ? response.currentUser.taxationRequiredAccountFields
20932
- : null];
20933
- }
20934
- });
20877
+ var quoteSubscriptionAddon = function (_a) {
20878
+ var subscriptionId = _a.subscriptionId, priceListId = _a.priceListId, apiHost = _a.apiHost, token = _a.token;
20879
+ return gqlRequest({
20880
+ query: "mutation QuoteSubscriptionAddon($subscriptionId: ID!, $priceListId: ID) {\n quoteSubscriptionAddon(subscriptionId: $subscriptionId, priceListId: $priceListId) {\n errors\n quote {\n id\n }\n }\n }",
20881
+ vars: {
20882
+ subscriptionId: subscriptionId,
20883
+ priceListId: priceListId,
20884
+ },
20885
+ apiHost: apiHost,
20886
+ token: token,
20935
20887
  });
20936
20888
  };
20937
-
20938
- var useHasTaxPlugin = function (_a) {
20939
- var apiHost = _a.apiHost, token = _a.token;
20940
- var plugins = usePlugins({
20889
+ var quoteSubscriptionActivate = function (_a) {
20890
+ var subscriptionId = _a.subscriptionId, apiHost = _a.apiHost, token = _a.token;
20891
+ return gqlRequest({
20892
+ query: "mutation QuoteSubscriptionActivate($subscriptionId: ID!) {\n quoteSubscriptionActivate(subscriptionId: $subscriptionId) {\n quote {\n id\n }\n }\n }",
20893
+ vars: {
20894
+ subscriptionId: subscriptionId,
20895
+ },
20941
20896
  apiHost: apiHost,
20942
20897
  token: token,
20943
- }).data;
20944
- return Boolean(plugins === null || plugins === void 0 ? void 0 : plugins.some(function (plugin) { return plugin.type === "taxation"; }));
20898
+ });
20945
20899
  };
20946
20900
 
20947
- var MUTATION$1 = "\nmutation accountUpdate(\n $id: ID!,\n $attributes: AccountAttributes!) {\n accountUpdate(\n id: $id,\n attributes: $attributes\n ) {\n account {\n id\n billingCountry\n billingState\n billingStreet\n billingCity\n billingZip\n name\n }\n errors\n }\n }\n";
20948
- var accountUpdate = function (_a) {
20901
+ var useQuoteCreate = function (_a) {
20902
+ var upgradingSubscription = _a.upgradingSubscription, selectedPriceList = _a.selectedPriceList, token = _a.token;
20903
+ // Context
20904
+ var apiHost = react.useContext(BunnyContext).apiHost;
20905
+ // Local state
20906
+ var _b = react.useState(), quoteId = _b[0], setQuoteId = _b[1];
20907
+ // Queries
20908
+ var quote = reactQuery.useQuery({
20909
+ queryKey: common.QueryKeyFactory.default.createObjectKey({
20910
+ objectName: 'editingQuote',
20911
+ id: quoteId,
20912
+ token: token,
20913
+ }),
20914
+ queryFn: function () { return __awaiter(void 0, void 0, void 0, function () {
20915
+ var quote;
20916
+ return __generator(this, function (_a) {
20917
+ switch (_a.label) {
20918
+ case 0:
20919
+ if (!quoteId) {
20920
+ throw new Error('editingQuote is undefined');
20921
+ }
20922
+ return [4 /*yield*/, getQuote({
20923
+ id: quoteId,
20924
+ token: token,
20925
+ apiHost: apiHost,
20926
+ removeFormattedQuoteField: false,
20927
+ })];
20928
+ case 1:
20929
+ quote = _a.sent();
20930
+ return [2 /*return*/, quote];
20931
+ }
20932
+ });
20933
+ }); },
20934
+ enabled: Boolean(quoteId),
20935
+ }).data;
20936
+ var _c = reactQuery.useMutation({
20937
+ mutationFn: function (_a) {
20938
+ var subscriptionId = _a.subscriptionId, priceListId = _a.priceListId;
20939
+ return __awaiter(void 0, void 0, void 0, function () {
20940
+ return __generator(this, function (_b) {
20941
+ switch (_b.label) {
20942
+ case 0: return [4 /*yield*/, quoteSubscriptionUpgrade({ subscriptionId: subscriptionId, priceListId: priceListId, apiHost: apiHost, token: token })];
20943
+ case 1: return [2 /*return*/, _b.sent()];
20944
+ }
20945
+ });
20946
+ });
20947
+ },
20948
+ onSuccess: function (subscriptionUpdateData) {
20949
+ var _a;
20950
+ var quote = (_a = subscriptionUpdateData === null || subscriptionUpdateData === void 0 ? void 0 : subscriptionUpdateData.quoteSubscriptionUpgrade) === null || _a === void 0 ? void 0 : _a.quote;
20951
+ setQuoteId(quote.id);
20952
+ },
20953
+ }), createQuote = _c.mutate, isCreatingQuote = _c.isPending;
20954
+ var _d = reactQuery.useMutation({
20955
+ mutationFn: function (_a) {
20956
+ var subscriptionId = _a.subscriptionId;
20957
+ return __awaiter(void 0, void 0, void 0, function () {
20958
+ return __generator(this, function (_b) {
20959
+ switch (_b.label) {
20960
+ case 0: return [4 /*yield*/, quoteSubscriptionAddon({ subscriptionId: subscriptionId, apiHost: apiHost, token: token })];
20961
+ case 1: return [2 /*return*/, _b.sent()];
20962
+ }
20963
+ });
20964
+ });
20965
+ },
20966
+ onSuccess: function (subscriptionAddonUpdateData) {
20967
+ var _a;
20968
+ var quote = (_a = subscriptionAddonUpdateData === null || subscriptionAddonUpdateData === void 0 ? void 0 : subscriptionAddonUpdateData.quoteSubscriptionAddon) === null || _a === void 0 ? void 0 : _a.quote;
20969
+ setQuoteId(quote.id);
20970
+ },
20971
+ }), createEmptyQuote = _d.mutate, isCreatingEmptyQuote = _d.isPending;
20972
+ var subscriptionActivate = reactQuery.useMutation({
20973
+ mutationFn: quoteSubscriptionActivate,
20974
+ onSuccess: function (response) {
20975
+ var _a;
20976
+ var quote = (_a = response === null || response === void 0 ? void 0 : response.quoteSubscriptionActivate) === null || _a === void 0 ? void 0 : _a.quote;
20977
+ setQuoteId(quote.id);
20978
+ },
20979
+ }).mutate;
20980
+ react.useEffect(function () {
20981
+ var _a;
20982
+ if (!(upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id)) {
20983
+ return;
20984
+ }
20985
+ if (!(selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id)) {
20986
+ return;
20987
+ }
20988
+ var buyingAddonsForCurrentSubscription = (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id) === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id);
20989
+ var isActivatingTrialSubscription = ((_a = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.TRIAL &&
20990
+ upgradingSubscription.priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id);
20991
+ if (isActivatingTrialSubscription) {
20992
+ subscriptionActivate({
20993
+ subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
20994
+ apiHost: apiHost,
20995
+ token: token,
20996
+ });
20997
+ }
20998
+ else if (buyingAddonsForCurrentSubscription) {
20999
+ createEmptyQuote({
21000
+ subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
21001
+ });
21002
+ }
21003
+ else {
21004
+ createQuote({
21005
+ subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
21006
+ priceListId: selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id,
21007
+ });
21008
+ }
21009
+ }, [selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id, upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id, upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id]);
21010
+ return { quote: quote, isQuotePending: isCreatingQuote || isCreatingEmptyQuote };
21011
+ };
21012
+
21013
+ var calculateNewQuantity = function (priceListCharge, currentQuantity) {
21014
+ if (currentQuantity === void 0) { currentQuantity = 1; }
21015
+ var quantityMax = (priceListCharge === null || priceListCharge === void 0 ? void 0 : priceListCharge.quantityMax) || Number.POSITIVE_INFINITY;
21016
+ var quantityMin = (priceListCharge === null || priceListCharge === void 0 ? void 0 : priceListCharge.quantityMin) || Number.NEGATIVE_INFINITY;
21017
+ var selfServiceQuantity = priceListCharge === null || priceListCharge === void 0 ? void 0 : priceListCharge.selfServiceQuantity;
21018
+ if (selfServiceQuantity) {
21019
+ return lodashExports.clamp(currentQuantity, quantityMin, quantityMax);
21020
+ }
21021
+ // If self service quantity is disabled, return the min quantity
21022
+ return quantityMin;
21023
+ };
21024
+
21025
+ var QUOTE_CHARGE_UPDATE = "\n".concat(QUOTE_FIELDS(), "\n mutation QuoteChargeUpdate (\n $discount: Float,\n $endDate: ISO8601Date,\n $name: String,\n $price: Float,\n $quantity: Int,\n $quoteChargeId: ID!\n $startDate: ISO8601Date\n $subtotal: Float,\n ) {\n quoteChargeUpdate(\n discount: $discount\n endDate: $endDate\n name: $name\n price: $price\n quantity: $quantity\n quoteChargeId: $quoteChargeId\n startDate: $startDate\n subtotal: $subtotal\n ) {\n quoteCharge {\n quoteChange {\n id\n quoteId\n quote {\n ...QuoteFields\n }\n }\n id\n }\n }\n }\n");
21026
+ var quoteChargeUpdate = function (_a) {
21027
+ var discount = _a.discount, name = _a.name, price = _a.price, quantity = _a.quantity, quoteChargeId = _a.quoteChargeId, startDate = _a.startDate, subtotal = _a.subtotal, apiHost = _a.apiHost, token = _a.token;
21028
+ return __awaiter(void 0, void 0, void 0, function () {
21029
+ var response;
21030
+ return __generator(this, function (_b) {
21031
+ switch (_b.label) {
21032
+ case 0: return [4 /*yield*/, gqlRequest({
21033
+ query: QUOTE_CHARGE_UPDATE,
21034
+ vars: {
21035
+ subtotal: subtotal,
21036
+ discount: discount,
21037
+ name: name,
21038
+ price: price,
21039
+ quantity: quantity,
21040
+ quoteChargeId: quoteChargeId,
21041
+ startDate: startDate,
21042
+ },
21043
+ apiHost: apiHost,
21044
+ token: token,
21045
+ })];
21046
+ case 1:
21047
+ response = _b.sent();
21048
+ if (response.errors) {
21049
+ throw new Error(response.errors[0].message);
21050
+ }
21051
+ return [2 /*return*/, response.quoteChargeUpdate.quoteCharge];
21052
+ }
21053
+ });
21054
+ });
21055
+ };
21056
+
21057
+ function canEditChargeQuantity(charge) {
21058
+ if (charge.chargeType === common.ChargeType.USAGE)
21059
+ return false;
21060
+ if (charge.pricingModel === common.PricingModel.FLAT)
21061
+ return false;
21062
+ return true;
21063
+ }
21064
+
21065
+ // Functionality:
21066
+ // 1: keep track of quantities set for features based on feature.id
21067
+ // a. copy those quantities over to charges with same feature when initializing
21068
+ // ie: if set 5 for Users in Starter, then switching to Pro with Users, keep 5
21069
+ // 2. set initial quantities for features using the first feature quantity found
21070
+ // Limitations:
21071
+ // - When switching between price lists that share features (e.g. both have Users),
21072
+ // quantities will be adjusted to meet the new min/max requirements of the new price list.
21073
+ // The original quantity is not preserved when switching back to the previous price list.
21074
+ var showErrorNotification$1 = common.useErrorNotification();
21075
+ var useQuoteQuantities = function (_a) {
21076
+ var selectedPriceList = _a.selectedPriceList, quote = _a.quote;
21077
+ var queryClient = reactQuery.useQueryClient();
21078
+ var token = useToken();
21079
+ var apiHost = react.useContext(BunnyContext).apiHost;
21080
+ var _b = useFeatureQuantities(), getFeatureQuantity = _b.getFeatureQuantity, setFeatureQuantity = _b.setFeatureQuantity;
21081
+ var _c = reactQuery.useMutation({
21082
+ mutationFn: function (_a) {
21083
+ var quoteChargeId = _a.quoteChargeId, quantity = _a.quantity, apiHost = _a.apiHost, token = _a.token;
21084
+ return __awaiter(void 0, void 0, void 0, function () {
21085
+ var quoteCharge;
21086
+ return __generator(this, function (_b) {
21087
+ switch (_b.label) {
21088
+ case 0: return [4 /*yield*/, quoteChargeUpdate({
21089
+ quoteChargeId: quoteChargeId,
21090
+ quantity: quantity,
21091
+ apiHost: apiHost,
21092
+ token: token,
21093
+ })];
21094
+ case 1:
21095
+ quoteCharge = _b.sent();
21096
+ return [2 /*return*/, { quoteCharge: quoteCharge }];
21097
+ }
21098
+ });
21099
+ });
21100
+ },
21101
+ onSuccess: function (_a) {
21102
+ var quoteCharge = _a.quoteCharge;
21103
+ queryClient.setQueryData(common.QueryKeyFactory.default.createObjectKey({
21104
+ objectName: 'editingQuote',
21105
+ id: quote === null || quote === void 0 ? void 0 : quote.id,
21106
+ token: token,
21107
+ }), quoteCharge.quoteChange.quote);
21108
+ },
21109
+ }), updateCharge = _c.mutate, isUpdatingCharge = _c.isPending;
21110
+ var handleUpdateQuantity = react.useCallback(function (quantity, priceListChargeId, quote) {
21111
+ var quoteChange = quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id); });
21112
+ var quoteCharge = quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.find(function (charge) {
21113
+ var _a;
21114
+ return ((_a = charge === null || charge === void 0 ? void 0 : charge.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === priceListChargeId;
21115
+ });
21116
+ if (!token) {
21117
+ showErrorNotification$1('Token is undefined in onUpdateQuantity');
21118
+ return;
21119
+ }
21120
+ if (!quoteCharge) {
21121
+ showErrorNotification$1('Quote charge not found');
21122
+ return;
21123
+ }
21124
+ updateCharge({
21125
+ quoteChargeId: quoteCharge.id,
21126
+ quantity: quantity,
21127
+ apiHost: apiHost,
21128
+ token: token,
21129
+ });
21130
+ }, [apiHost, token, updateCharge, selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id, quote === null || quote === void 0 ? void 0 : quote.id]);
21131
+ // Helper function to get quantity from quote for a specific charge
21132
+ var getQuantityFromQuote = function (chargeId) {
21133
+ var _a, _b;
21134
+ if (!quote || !selectedPriceList)
21135
+ return undefined;
21136
+ return (_b = (_a = quote.quoteChanges
21137
+ .find(function (qc) { return qc.priceList.id === selectedPriceList.id; })) === null || _a === void 0 ? void 0 : _a.charges.find(function (c) { return c.priceListCharge.id === chargeId; })) === null || _b === void 0 ? void 0 : _b.quantity;
21138
+ };
21139
+ // Helper function to process a single charge
21140
+ var processCharge = function (charge) {
21141
+ var _a;
21142
+ if (!((_a = charge === null || charge === void 0 ? void 0 : charge.feature) === null || _a === void 0 ? void 0 : _a.id)) {
21143
+ showErrorNotification$1('Charge or feature is undefined', 'Client Error');
21144
+ return;
21145
+ }
21146
+ var storedQuantity = getFeatureQuantity(charge.feature.id);
21147
+ // Determine the quantity to use
21148
+ if (storedQuantity !== undefined) {
21149
+ // Store this quantity for this feature to ensure it's tracked
21150
+ setFeatureQuantity(charge.feature.id, storedQuantity);
21151
+ return storedQuantity;
21152
+ }
21153
+ else {
21154
+ var finalQuantity = calculateNewQuantity(charge, storedQuantity);
21155
+ setFeatureQuantity(charge.feature.id, finalQuantity);
21156
+ return finalQuantity;
21157
+ }
21158
+ };
21159
+ function handleChangeQuantity(priceListChargeId, quantity) {
21160
+ var _a;
21161
+ var charge = selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.charges.find(function (charge) { return charge.id === priceListChargeId; });
21162
+ var featureId = (_a = charge === null || charge === void 0 ? void 0 : charge.feature) === null || _a === void 0 ? void 0 : _a.id;
21163
+ if (!featureId) {
21164
+ showErrorNotification$1('featureId not found');
21165
+ return;
21166
+ }
21167
+ if (!quote) {
21168
+ showErrorNotification$1('quote not found');
21169
+ return;
21170
+ }
21171
+ setFeatureQuantity(featureId, quantity);
21172
+ handleUpdateQuantity(quantity, priceListChargeId, quote);
21173
+ }
21174
+ // Initialize quantities when price list changes
21175
+ react.useEffect(function () {
21176
+ if (!selectedPriceList)
21177
+ return;
21178
+ selectedPriceList.charges.forEach(function (charge) {
21179
+ if (canEditChargeQuantity(charge)) {
21180
+ processCharge(charge);
21181
+ }
21182
+ });
21183
+ }, [selectedPriceList]);
21184
+ // Update quantities when quote changes if local and quote quantities don't match
21185
+ react.useEffect(function () {
21186
+ if (!quote || !selectedPriceList)
21187
+ return;
21188
+ selectedPriceList.charges.forEach(function (charge) {
21189
+ if (!canEditChargeQuantity(charge))
21190
+ return;
21191
+ var finalQuantity = processCharge(charge);
21192
+ var quantityOnQuote = getQuantityFromQuote(charge.id);
21193
+ // Update quote if needed
21194
+ if (finalQuantity && quantityOnQuote && finalQuantity !== quantityOnQuote) {
21195
+ handleUpdateQuantity(finalQuantity, charge.id, quote);
21196
+ }
21197
+ });
21198
+ }, [quote === null || quote === void 0 ? void 0 : quote.id]);
21199
+ return {
21200
+ onChangeQuantity: handleChangeQuantity,
21201
+ getFeatureQuantity: getFeatureQuantity,
21202
+ isUpdatingCharges: isUpdatingCharge, // Might be multiple charges updating at once
21203
+ };
21204
+ };
21205
+ var useFeatureQuantities = function () {
21206
+ var _a = react.useState({}), featureQuantities = _a[0], setFeatureQuantities = _a[1];
21207
+ var getFeatureQuantity = function (featureId) {
21208
+ return featureQuantities[featureId];
21209
+ };
21210
+ var setFeatureQuantity = function (featureId, quantity) {
21211
+ setFeatureQuantities(function (prev) {
21212
+ var _a;
21213
+ return (__assign(__assign({}, prev), (_a = {}, _a[featureId] = quantity, _a)));
21214
+ });
21215
+ };
21216
+ return {
21217
+ getFeatureQuantity: getFeatureQuantity,
21218
+ setFeatureQuantity: setFeatureQuantity,
21219
+ };
21220
+ };
21221
+
21222
+ var QuoteContext = react.createContext({});
21223
+ function useFeatureAddonsPending() {
21224
+ var _a = react.useState([]), featureAddonsLoading = _a[0], setFeatureAddonsLoading = _a[1];
21225
+ var addFeatureAddonLoading = function (featureAddonId) {
21226
+ setFeatureAddonsLoading(__spreadArray(__spreadArray([], featureAddonsLoading, true), [featureAddonId], false));
21227
+ };
21228
+ var removeFeatureAddonLoading = function (featureAddonId) {
21229
+ setFeatureAddonsLoading(featureAddonsLoading.filter(function (id) { return id !== featureAddonId; }));
21230
+ };
21231
+ return {
21232
+ isFeatureAddonsLoading: featureAddonsLoading.length > 0,
21233
+ addFeatureAddonLoading: addFeatureAddonLoading,
21234
+ removeFeatureAddonLoading: removeFeatureAddonLoading,
21235
+ };
21236
+ }
21237
+ function QuoteProvider(_a) {
21238
+ var children = _a.children;
21239
+ // Contexts
21240
+ var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
21241
+ // Local state
21242
+ var _b = react.useState(), selectedPriceList = _b[0], setSelectedPriceList = _b[1];
21243
+ var _c = react.useState(false), isAddonPlanLoading = _c[0], setIsAddonPlanLoading = _c[1];
21244
+ // Hooks
21245
+ var token = useToken();
21246
+ var _d = useFeatureAddonsPending(), isFeatureAddonsLoading = _d.isFeatureAddonsLoading, addFeatureAddonLoading = _d.addFeatureAddonLoading, removeFeatureAddonLoading = _d.removeFeatureAddonLoading;
21247
+ var _e = useQuoteCreate({
21248
+ upgradingSubscription: upgradingSubscription,
21249
+ selectedPriceList: selectedPriceList,
21250
+ token: token,
21251
+ }), quote = _e.quote, isQuotePending = _e.isQuotePending;
21252
+ var _f = useQuoteQuantities({
21253
+ selectedPriceList: selectedPriceList,
21254
+ quote: quote,
21255
+ }), onChangeQuantity = _f.onChangeQuantity, getFeatureQuantity = _f.getFeatureQuantity, isUpdatingCharges = _f.isUpdatingCharges;
21256
+ // Handlers
21257
+ function handleClearQuote() {
21258
+ setSelectedPriceList(undefined);
21259
+ }
21260
+ function handleChangeSelectedPriceList(priceList) {
21261
+ setSelectedPriceList(priceList);
21262
+ }
21263
+ // Important that we keep track of all changes taking place so we can recalculate taxes after all changes are complete
21264
+ var isUpdatingQuote = isUpdatingCharges || isAddonPlanLoading || isFeatureAddonsLoading;
21265
+ return (jsxRuntime.jsx(QuoteContext.Provider, __assign({ value: {
21266
+ quote: quote,
21267
+ selectedPriceList: selectedPriceList,
21268
+ isQuotePending: isQuotePending,
21269
+ isUpdatingQuote: isUpdatingQuote,
21270
+ // Plan add-ons pending
21271
+ isAddonPlanLoading: isAddonPlanLoading,
21272
+ setIsAddonPlanLoading: setIsAddonPlanLoading,
21273
+ // Feature add-ons pending
21274
+ isFeatureAddonsLoading: isFeatureAddonsLoading,
21275
+ addFeatureAddonLoading: addFeatureAddonLoading,
21276
+ removeFeatureAddonLoading: removeFeatureAddonLoading,
21277
+ onClearQuote: handleClearQuote,
21278
+ onChangeSelectedPriceList: handleChangeSelectedPriceList,
21279
+ onChangeQuantity: onChangeQuantity,
21280
+ getFeatureQuantity: getFeatureQuantity,
21281
+ } }, { children: children })));
21282
+ }
21283
+
21284
+ var PageTitle = function (_a) {
21285
+ var onGoBack = _a.onGoBack, title = _a.title;
21286
+ var isMobile = common.useIsMobile();
21287
+ var secondaryColor = react.useContext(BrandContext).secondaryColor;
21288
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-3 bunny-font-medium", style: {
21289
+ fontSize: "28px",
21290
+ paddingBottom: isMobile ? "22px" : "56px",
21291
+ color: secondaryColor,
21292
+ } }, { children: [onGoBack && (jsxRuntime.jsx(icons.ArrowLeftOutlined, { onClick: onGoBack, style: {
21293
+ fontSize: "20px",
21294
+ cursor: "pointer",
21295
+ } })), title] })));
21296
+ };
21297
+
21298
+ function isAddonPurchased(featureAddon, currentSubscription) {
21299
+ var purchasedFeatureAddons = currentSubscription === null || currentSubscription === void 0 ? void 0 : currentSubscription.charges.filter(function (charge) { var _a; return (_a = charge.priceListCharge) === null || _a === void 0 ? void 0 : _a.featureAddon; });
21300
+ if (!purchasedFeatureAddons)
21301
+ return false;
21302
+ return purchasedFeatureAddons.some(function (addon) { var _a; return ((_a = addon.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === featureAddon.id; });
21303
+ }
21304
+ function hasUnpurchasedFeatureAddons(priceList, currentSubscription) {
21305
+ var featureAddons = priceList.charges.filter(function (charge) { return charge.featureAddon; });
21306
+ var purchasedFeatureAddons = currentSubscription === null || currentSubscription === void 0 ? void 0 : currentSubscription.charges.filter(function (charge) { var _a; return (_a = charge.priceListCharge) === null || _a === void 0 ? void 0 : _a.featureAddon; });
21307
+ var unpurchasedFeatureAddons = featureAddons.filter(function (charge) {
21308
+ return !(purchasedFeatureAddons === null || purchasedFeatureAddons === void 0 ? void 0 : purchasedFeatureAddons.some(function (purchasedCharge) { var _a; return ((_a = purchasedCharge.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === charge.id; }));
21309
+ });
21310
+ return unpurchasedFeatureAddons.length > 0;
21311
+ }
21312
+ function findQuoteChangeForFeatureAddon(quote) {
21313
+ return quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.kind === common.QuoteChangeKind.UPDATE || qc.kind === common.QuoteChangeKind.SUBSCRIBE; });
21314
+ }
21315
+ function featureAddonInQuote(selectedPriceList, priceListCharge, quote) {
21316
+ var quoteChange = quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.priceList.id === selectedPriceList.id; });
21317
+ if (!quoteChange)
21318
+ return false;
21319
+ return quoteChange.charges.some(function (c) { var _a; return ((_a = c.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === priceListCharge.id; });
21320
+ }
21321
+ // ID Cucumber will use to find the feature addon switch
21322
+ function featureAddonSwitchTestId(featureAddon) {
21323
+ var name = featureAddon.name.toLowerCase().replace(/ /g, '-');
21324
+ return "feature-addon-switch-".concat(name);
21325
+ }
21326
+
21327
+ var pageWrapperClassName = function (isMobile) {
21328
+ return "flex flex-col grow pt-4 ".concat(isMobile ? 'pb-4 overflow-hidden' : 'pb-8', " ").concat('content-container');
21329
+ };
21330
+
21331
+ var MUTATION$2 = "{\n currentUser {\n taxationRequiredAccountFields\n }\n}";
21332
+ var getTaxationRequiredAccountFields = function (_a) {
21333
+ var apiHost = _a.apiHost, token = _a.token;
21334
+ return __awaiter(void 0, void 0, void 0, function () {
21335
+ var response;
21336
+ var _b, _c;
21337
+ return __generator(this, function (_d) {
21338
+ switch (_d.label) {
21339
+ case 0: return [4 /*yield*/, gqlRequest({
21340
+ query: MUTATION$2,
21341
+ token: token,
21342
+ apiHost: apiHost,
21343
+ })];
21344
+ case 1:
21345
+ response = _d.sent();
21346
+ return [2 /*return*/, ((_c = (_b = response === null || response === void 0 ? void 0 : response.currentUser) === null || _b === void 0 ? void 0 : _b.taxationRequiredAccountFields) === null || _c === void 0 ? void 0 : _c.length) > 0
21347
+ ? response.currentUser.taxationRequiredAccountFields
21348
+ : null];
21349
+ }
21350
+ });
21351
+ });
21352
+ };
21353
+
21354
+ var useHasTaxPlugin = function (_a) {
21355
+ var apiHost = _a.apiHost, token = _a.token;
21356
+ var plugins = usePlugins({
21357
+ apiHost: apiHost,
21358
+ token: token,
21359
+ }).data;
21360
+ return Boolean(plugins === null || plugins === void 0 ? void 0 : plugins.some(function (plugin) { return plugin.type === "taxation"; }));
21361
+ };
21362
+
21363
+ function shouldShowCouponEditor(quote, activeCouponsExist, upgradingSubscription) {
21364
+ var _a;
21365
+ var upgradingFromTrial = ((_a = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.TRIAL;
21366
+ function upgradingFromFree() {
21367
+ var totalPrice = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.charges.reduce(function (acc, charge) { return acc + Number((charge === null || charge === void 0 ? void 0 : charge.discountedPrice) || 0); }, 0);
21368
+ return totalPrice === 0;
21369
+ }
21370
+ var quoteKindIsValid = quote.kind === common.QuoteChangeKind.SUBSCRIBE ||
21371
+ quote.kind === common.QuoteChangeKind.ADJUSTMENT ||
21372
+ quote.kind === common.QuoteChangeKind.ACTIVATE;
21373
+ if (quoteKindIsValid) {
21374
+ return activeCouponsExist && (upgradingFromTrial || upgradingFromFree());
21375
+ }
21376
+ return false;
21377
+ }
21378
+
21379
+ var MUTATION$1 = "\nmutation accountUpdate(\n $id: ID!,\n $attributes: AccountAttributes!) {\n accountUpdate(\n id: $id,\n attributes: $attributes\n ) {\n account {\n id\n billingCountry\n billingState\n billingStreet\n billingCity\n billingZip\n name\n }\n errors\n }\n }\n";
21380
+ var accountUpdate = function (_a) {
20949
21381
  var accountId = _a.accountId, attributes = _a.attributes, token = _a.token, apiHost = _a.apiHost;
20950
21382
  return __awaiter(void 0, void 0, void 0, function () {
20951
21383
  var vars, response, errors;
@@ -21111,7 +21543,7 @@ var PaymentFormWrapper = function (_a) {
21111
21543
  var queryKeyFactory = common.QueryKeyFactory.default;
21112
21544
  var Checkout = function (_a) {
21113
21545
  var _b, _c;
21114
- var onCancel = _a.onCancel, onSuccess = _a.onSuccess, onFail = _a.onFail, invoice = _a.invoice, open = _a.open, quote = _a.quote, selectedPriceList = _a.selectedPriceList;
21546
+ var onCancel = _a.onCancel, onSuccess = _a.onSuccess, onFail = _a.onFail, invoice = _a.invoice, open = _a.open, quote = _a.quote, isUpdatingQuote = _a.isUpdatingQuote;
21115
21547
  var apiHost = react.useContext(BunnyContext).apiHost;
21116
21548
  var isMobile = common.useIsMobile();
21117
21549
  var token = useToken();
@@ -21137,7 +21569,7 @@ var Checkout = function (_a) {
21137
21569
  }), account = _e.data, isLoadingAccount = _e.isLoading;
21138
21570
  function recalculateTaxes() {
21139
21571
  return __awaiter(this, void 0, void 0, function () {
21140
- var updatedQuote, quoteKey, calculatedPricesKey;
21572
+ var updatedQuote, quoteKey;
21141
21573
  return __generator(this, function (_a) {
21142
21574
  switch (_a.label) {
21143
21575
  case 0:
@@ -21155,13 +21587,7 @@ var Checkout = function (_a) {
21155
21587
  objectName: 'editingQuote',
21156
21588
  token: token,
21157
21589
  });
21158
- calculatedPricesKey = queryKeyFactory.calculatedPricesKey({
21159
- // quantity,
21160
- priceListId: selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id,
21161
- token: token,
21162
- });
21163
21590
  queryClient.setQueryData(quoteKey, updatedQuote);
21164
- queryClient.setQueryData(calculatedPricesKey, updatedQuote);
21165
21591
  }
21166
21592
  _a.label = 2;
21167
21593
  case 2: return [2 /*return*/, {}];
@@ -21173,7 +21599,8 @@ var Checkout = function (_a) {
21173
21599
  open &&
21174
21600
  hasTaxPlugin &&
21175
21601
  !taxationRequiredAccountFields &&
21176
- !isLoadingTaxationRequiredAccountFields;
21602
+ !isLoadingTaxationRequiredAccountFields &&
21603
+ !isUpdatingQuote;
21177
21604
  reactQuery.useQuery({
21178
21605
  queryKey: queryKeyFactory.createQuoteTaxCalculateKey({
21179
21606
  id: quote === null || quote === void 0 ? void 0 : quote.id,
@@ -21207,69 +21634,11 @@ var Checkout = function (_a) {
21207
21634
  }, onPaymentSuccess: onSuccess }))] })), jsxRuntime.jsx(Footer, { className: "bunny-pl-12" })] })) })));
21208
21635
  };
21209
21636
 
21210
- var QuotePreviewContext = react.createContext({});
21211
- function QuotePreviewProvider(_a) {
21212
- var children = _a.children;
21213
- var _b = react.useState(), quotePreviewData = _b[0], setQuotePreviewData = _b[1];
21214
- function handleSetEditingQuote(editingQuoteId) {
21215
- setQuotePreviewData(__assign(__assign({}, quotePreviewData), { editingQuoteId: editingQuoteId }));
21216
- }
21217
- return (jsxRuntime.jsx(QuotePreviewContext.Provider, __assign({ value: {
21218
- quotePreviewData: quotePreviewData,
21219
- setQuotePreviewData: setQuotePreviewData,
21220
- handleSetEditingQuote: handleSetEditingQuote,
21221
- } }, { children: children })));
21222
- }
21223
-
21224
- var PageTitle = function (_a) {
21225
- var onGoBack = _a.onGoBack, title = _a.title;
21226
- var isMobile = common.useIsMobile();
21227
- var secondaryColor = react.useContext(BrandContext).secondaryColor;
21228
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-3 bunny-font-medium", style: {
21229
- fontSize: "28px",
21230
- paddingBottom: isMobile ? "22px" : "56px",
21231
- color: secondaryColor,
21232
- } }, { children: [onGoBack && (jsxRuntime.jsx(icons.ArrowLeftOutlined, { onClick: onGoBack, style: {
21233
- fontSize: "20px",
21234
- cursor: "pointer",
21235
- } })), title] })));
21236
- };
21237
-
21238
- var QUOTE_CHARGE_UPDATE = "\n mutation QuoteChargeUpdate (\n $discount: Float,\n $endDate: ISO8601Date,\n $name: String,\n $price: Float,\n $quantity: Int,\n $quoteChargeId: ID!\n $startDate: ISO8601Date\n $subtotal: Float,\n ) {\n quoteChargeUpdate(\n discount: $discount\n endDate: $endDate\n name: $name\n price: $price\n quantity: $quantity\n quoteChargeId: $quoteChargeId\n startDate: $startDate\n subtotal: $subtotal\n ) {\n quoteCharge {\n id\n }\n }\n }\n";
21239
- var quoteChargeUpdate = function (_a) {
21240
- var discount = _a.discount, name = _a.name, price = _a.price, quantity = _a.quantity, quoteChargeId = _a.quoteChargeId, startDate = _a.startDate, subtotal = _a.subtotal, apiHost = _a.apiHost, token = _a.token;
21241
- return gqlRequest({
21242
- query: QUOTE_CHARGE_UPDATE,
21243
- vars: {
21244
- subtotal: subtotal,
21245
- discount: discount,
21246
- name: name,
21247
- price: price,
21248
- quantity: quantity,
21249
- quoteChargeId: quoteChargeId,
21250
- startDate: startDate,
21251
- },
21252
- apiHost: apiHost,
21253
- token: token,
21254
- });
21255
- };
21256
-
21257
21637
  var CheckoutBarInput = function (_a) {
21258
- var disabled = _a.disabled, charge = _a.charge, quantity = _a.quantity, selectedPriceList = _a.selectedPriceList, onQuantityChanged = _a.onQuantityChanged;
21259
- // State
21260
- var _b = react.useState(false), isTooltipOpen = _b[0], setIsTooltipOpen = _b[1];
21261
- var _c = react.useState(0), quantityLocal = _c[0], setQuantityLocal = _c[1];
21262
- // Hooks
21638
+ var _b;
21639
+ var disabled = _a.disabled, charge = _a.charge, quantity = _a.quantity, onQuantityChanged = _a.onQuantityChanged;
21640
+ var _c = react.useState(false), isTooltipOpen = _c[0], setIsTooltipOpen = _c[1];
21263
21641
  var isMobile = common.useIsMobile();
21264
- var quoteChangeDebounce = react.useCallback(lodashExports.debounce(function (newQuantity) { return __awaiter(void 0, void 0, void 0, function () {
21265
- return __generator(this, function (_a) {
21266
- onQuantityChanged(newQuantity);
21267
- return [2 /*return*/];
21268
- });
21269
- }); }, 1000), []);
21270
- react.useEffect(function () {
21271
- setQuantityLocal(quantity);
21272
- }, [quantity]);
21273
21642
  react.useEffect(function () {
21274
21643
  setTimeout(function () {
21275
21644
  setIsTooltipOpen(true);
@@ -21278,18 +21647,14 @@ var CheckoutBarInput = function (_a) {
21278
21647
  setIsTooltipOpen(false);
21279
21648
  }, 6000);
21280
21649
  }, []);
21281
- if (!(charge === null || charge === void 0 ? void 0 : charge.feature))
21282
- return null;
21283
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2 ".concat(isMobile ? "bunny-justify-between" : "") }, { children: [jsxRuntime.jsx(QuantityLabel, { activeCharge: charge }), jsxRuntime.jsx(antd.Tooltip, __assign({ onOpenChange: setIsTooltipOpen, open: isTooltipOpen, title: "Change quantity here", styles: {
21650
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-2 ".concat(isMobile ? 'bunny-justify-between' : '') }, { children: [jsxRuntime.jsx(QuantityLabel, { activeCharge: charge }), jsxRuntime.jsx(antd.Tooltip, __assign({ onOpenChange: setIsTooltipOpen, open: isTooltipOpen, title: "Change quantity here", styles: {
21284
21651
  body: {
21285
- paddingTop: "0.75rem",
21286
- paddingBottom: "0.75rem",
21652
+ paddingTop: '0.75rem',
21653
+ paddingBottom: '0.75rem',
21287
21654
  },
21288
- } }, { children: jsxRuntime.jsx(antd.Input, { className: isMobile ? "text-right" : "", disabled: disabled || !selectedPriceList || !charge.selfServiceQuantity, onChange: function (e) {
21289
- var quantity = Number(e.target.value);
21290
- setQuantityLocal(quantity);
21291
- quoteChangeDebounce(quantity);
21292
- }, min: charge === null || charge === void 0 ? void 0 : charge.quantityMin, max: charge === null || charge === void 0 ? void 0 : charge.quantityMax, style: { minWidth: "120px" }, type: "number", value: quantityLocal, required: true }) }))] })));
21655
+ } }, { children: jsxRuntime.jsx(antd.Input, { id: "".concat((_b = charge.name) === null || _b === void 0 ? void 0 : _b.toLowerCase().replace(/ /g, '-'), "-quantity-input"), className: isMobile ? 'text-right' : '', disabled: disabled, onChange: function (e) {
21656
+ onQuantityChanged(Number(e.target.value));
21657
+ }, min: charge === null || charge === void 0 ? void 0 : charge.quantityMin, max: charge === null || charge === void 0 ? void 0 : charge.quantityMax, style: { minWidth: '120px' }, type: "number", value: quantity, required: true }) }))] })));
21293
21658
  };
21294
21659
  var QuantityLabel = function (_a) {
21295
21660
  var _b;
@@ -21297,8 +21662,8 @@ var QuantityLabel = function (_a) {
21297
21662
  var featureName = (_b = activeCharge.feature) === null || _b === void 0 ? void 0 : _b.name;
21298
21663
  var pluralizedFeatureName = (common.StringUtils.isStringPluralized(featureName) || !featureName
21299
21664
  ? featureName
21300
- : common.StringUtils.pluralizeEntityName(featureName)) || "";
21301
- return (jsxRuntime.jsx("span", __assign({ className: "bunny-text-slate-500 bunny-font-medium", style: { fontSize: "11px" } }, { children: pluralizedFeatureName.toUpperCase() })));
21665
+ : common.StringUtils.pluralizeEntityName(featureName)) || '';
21666
+ return (jsxRuntime.jsx("span", __assign({ className: "bunny-text-slate-500 bunny-font-medium", style: { fontSize: '11px' } }, { children: pluralizedFeatureName.toUpperCase() })));
21302
21667
  };
21303
21668
 
21304
21669
  var periodMonthsConverter = function (period) {
@@ -21343,7 +21708,10 @@ var canShowQuantitiesInput = function (charge, subscription) {
21343
21708
  return shouldProcessCharge;
21344
21709
  };
21345
21710
  var createQuoteParams = function (quote, subscriptionQuantity, editedSubscription) {
21346
- var quoteChange = quote.quoteChanges.find(function (quoteChange) { return quoteChange.priceList.id === (editedSubscription === null || editedSubscription === void 0 ? void 0 : editedSubscription.subscription.priceList.id); });
21711
+ if (!editedSubscription || editedSubscription.quantity === undefined) {
21712
+ return { charges: [], quoteChange: undefined };
21713
+ }
21714
+ var quoteChange = quote.quoteChanges.find(function (quoteChange) { return quoteChange.priceList.id === editedSubscription.subscription.priceList.id; });
21347
21715
  var quoteChangeCharge = quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.find(function (charge) { return charge.priceListCharge.id === editedSubscription.chargeId; });
21348
21716
  var charges = [
21349
21717
  {
@@ -21428,6 +21796,38 @@ var getApplicablePriceTier = function (charge, currencyId, priceDecimals) {
21428
21796
  : "".concat(common.formatCurrency(selectedTier.price, currencyId, priceDecimals));
21429
21797
  };
21430
21798
 
21799
+ var ADDON_INDENTATION = 64;
21800
+ function findNonAddonSubscriptions(subscriptions) {
21801
+ return subscriptions.filter(function (subscription) {
21802
+ return (subscription.priceList.plan.addon === false || subscription.priceList.plan.addon === null) &&
21803
+ findParentSubscription(subscription, subscriptions) === undefined;
21804
+ });
21805
+ }
21806
+ function findAddonSubscriptions(parentSubscription, subscriptions) {
21807
+ var _a;
21808
+ var addonSubscriptionsIds = (_a = parentSubscription.addonSubscriptions) === null || _a === void 0 ? void 0 : _a.map(function (addonSubscription) { return addonSubscription.id; });
21809
+ return subscriptions.filter(function (subscription) { return addonSubscriptionsIds === null || addonSubscriptionsIds === void 0 ? void 0 : addonSubscriptionsIds.includes(subscription.id); });
21810
+ }
21811
+ function findParentSubscription(subscription, subscriptions) {
21812
+ return subscriptions.find(function (parentSubscription) {
21813
+ var _a;
21814
+ return (_a = parentSubscription.addonSubscriptions) === null || _a === void 0 ? void 0 : _a.some(function (addonSubscription) { return addonSubscription.id === subscription.id; });
21815
+ });
21816
+ }
21817
+ function hasUnpurchasedAddonPlans(priceList, currentSubscription) {
21818
+ var addonPlans = priceList.plan.addonPlans;
21819
+ var purchasedAddonPlans = currentSubscription === null || currentSubscription === void 0 ? void 0 : currentSubscription.addonSubscriptions;
21820
+ var unpurchasedAddonPlans = addonPlans === null || addonPlans === void 0 ? void 0 : addonPlans.filter(function (addonPlan) {
21821
+ return !(purchasedAddonPlans === null || purchasedAddonPlans === void 0 ? void 0 : purchasedAddonPlans.some(function (purchasedAddonPlan) { return purchasedAddonPlan.plan.id === addonPlan.id; }));
21822
+ });
21823
+ return unpurchasedAddonPlans && unpurchasedAddonPlans.length > 0;
21824
+ }
21825
+ // ID Cucumber will use to find the addon plan switch
21826
+ function addonPlanSwitchTestId(addonPlan) {
21827
+ var name = addonPlan.name.toLowerCase().replace(/ /g, '-');
21828
+ return "addon-plan-switch-".concat(name);
21829
+ }
21830
+
21431
21831
  var removeHTMLTagsRegex = /<br>(?=(?:\s*<[^>]*>)*$)|(<br>)|<[^>]*>/gi;
21432
21832
  // Description is a string that can contain HTML tags. We want to remove all HTML tags except <br> tags.
21433
21833
  var createPlanDescription = function (priceList) {
@@ -21473,7 +21873,9 @@ var getActivePlanPriceData = function (priceList, selectedPriceList) {
21473
21873
  };
21474
21874
  };
21475
21875
  var isPriceListDisabled = function (_a) {
21476
- var priceList = _a.priceList, upgradingSubscription = _a.upgradingSubscription, canPurchaseFeatureAddons = _a.canPurchaseFeatureAddons;
21876
+ var priceList = _a.priceList, upgradingSubscription = _a.upgradingSubscription;
21877
+ var canPurchaseFeatureAddons = hasUnpurchasedFeatureAddons(priceList, upgradingSubscription);
21878
+ var canPurchasePlanAddons = hasUnpurchasedAddonPlans(priceList, upgradingSubscription);
21477
21879
  var existingSubscriptionInTrial = upgradingSubscription && canSubscriptionUpgradeFromTrial(upgradingSubscription);
21478
21880
  var isUpgradingSubscriptionPriceList = (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id) === priceList.id;
21479
21881
  // When should priceList be disabled?
@@ -21483,15 +21885,22 @@ var isPriceListDisabled = function (_a) {
21483
21885
  // AND cannot purchase add-on plans
21484
21886
  // AND selfServiceBuy is false
21485
21887
  if (isUpgradingSubscriptionPriceList) {
21486
- return !existingSubscriptionInTrial && !canPurchaseFeatureAddons;
21888
+ return !existingSubscriptionInTrial && !canPurchaseFeatureAddons && !canPurchasePlanAddons;
21487
21889
  }
21488
21890
  return false;
21489
21891
  };
21490
21892
 
21491
21893
  var CheckoutButton = function (_a) {
21492
- var checkoutButtonDisabled = _a.checkoutButtonDisabled, onClickCheckout = _a.onClickCheckout, loading = _a.loading;
21894
+ var checkoutButtonDisabled = _a.checkoutButtonDisabled, onClickCheckout = _a.onClickCheckout, loading = _a.loading, tooltipText = _a.tooltipText;
21493
21895
  var isMobile = common.useIsMobile();
21494
- return (jsxRuntime.jsx(antd.Button, __assign({ className: isMobile ? "w-full" : "", disabled: checkoutButtonDisabled, onClick: onClickCheckout, size: isMobile ? "large" : "middle", type: "primary", loading: loading }, { children: "Proceed to checkout" })));
21896
+ var TooltipWrapper = function (_a) {
21897
+ var children = _a.children;
21898
+ if (tooltipText) {
21899
+ return jsxRuntime.jsx(antd.Tooltip, __assign({ title: tooltipText }, { children: children }));
21900
+ }
21901
+ return jsxRuntime.jsx("div", { children: children });
21902
+ };
21903
+ return (jsxRuntime.jsx(TooltipWrapper, { children: jsxRuntime.jsx(antd.Button, __assign({ className: isMobile ? 'w-full' : '', disabled: checkoutButtonDisabled, onClick: onClickCheckout, size: isMobile ? 'large' : 'middle', type: "primary", loading: loading }, { children: "Proceed to checkout" })) }));
21495
21904
  };
21496
21905
 
21497
21906
  var CheckoutPrice = function (_a) {
@@ -21508,10 +21917,10 @@ var CheckoutPrice = function (_a) {
21508
21917
 
21509
21918
  var CheckoutBarSummarySection = function (_a) {
21510
21919
  var _b;
21511
- var open = _a.open, quote = _a.quote, selectedPriceList = _a.selectedPriceList, onClickCheckout = _a.onClickCheckout, upgradingSubscription = _a.upgradingSubscription;
21920
+ var open = _a.open, selectedPriceList = _a.selectedPriceList, onClickCheckout = _a.onClickCheckout, upgradingSubscription = _a.upgradingSubscription;
21512
21921
  // Context
21513
21922
  var apiHost = react.useContext(BunnyContext).apiHost;
21514
- var quotePreviewData = react.useContext(QuotePreviewContext).quotePreviewData;
21923
+ var _c = react.useContext(QuoteContext), quote = _c.quote, isQuotePending = _c.isQuotePending, isUpdatingQuote = _c.isUpdatingQuote;
21515
21924
  var accountId = react.useContext(PaymentContext).accountId;
21516
21925
  // Hooks
21517
21926
  var token = useToken();
@@ -21529,178 +21938,30 @@ var CheckoutBarSummarySection = function (_a) {
21529
21938
  token: token,
21530
21939
  }),
21531
21940
  });
21532
- var isUpgradingCurrentSubscription = selectedPriceList.id === (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id);
21533
- var disableCheckoutButton = Boolean(!(quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.quantity) ||
21534
- !selectedPriceList ||
21535
- // quantityLocal !== quotePreviewData.quantity ||
21536
- isFetching ||
21537
- isUpgradingCurrentSubscription ||
21538
- open);
21941
+ // When should checkout button be disabled?
21942
+ var isUpgradingSubscription = selectedPriceList.id !== (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id);
21943
+ var disableCheckoutButton = Boolean(!selectedPriceList || isFetching || !isUpgradingSubscription || open);
21539
21944
  var checkoutButtonDisabled = (quote === null || quote === void 0 ? void 0 : quote.amountDue) && (quote === null || quote === void 0 ? void 0 : quote.amountDue) > 0 ? false : disableCheckoutButton;
21540
21945
  var activeCharge = (_b = getActivePlanPriceData(selectedPriceList, selectedPriceList)) === null || _b === void 0 ? void 0 : _b.activeCharge;
21541
21946
  var isUsage = (activeCharge === null || activeCharge === void 0 ? void 0 : activeCharge.chargeType) === common.ChargeType.USAGE;
21542
- var hasPaymentMethodsOrIsFree = Boolean(paymentPlugins === null || paymentPlugins === void 0 ? void 0 : paymentPlugins.length) || Boolean(quote && getQuoteAmountDue(quote) === 0);
21543
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-4 ".concat(isMobile ? 'bunny-flex-col' : '') }, { children: [quote && (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'items-center justify-between w-full' : 'flex-col') }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-text-slate-500 bunny-font-medium bunny-text-right", style: { fontSize: '11px' } }, { children: "TOTAL" })), jsxRuntime.jsx(CheckoutPrice, { isUsage: isUsage, quote: quote, selectedPriceList: selectedPriceList })] }))), hasPaymentMethodsOrIsFree && (jsxRuntime.jsx(CheckoutButton, { checkoutButtonDisabled: checkoutButtonDisabled, onClickCheckout: onClickCheckout, loading: !quote }))] })));
21947
+ var hasPaymentPlugins = Boolean(paymentPlugins === null || paymentPlugins === void 0 ? void 0 : paymentPlugins.length);
21948
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-4 ".concat(isMobile ? 'bunny-flex-col' : '') }, { children: [quote && (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex ".concat(isMobile ? 'items-center justify-between w-full' : 'flex-col') }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-text-slate-500 bunny-font-medium bunny-text-right", style: { fontSize: '11px' } }, { children: "TOTAL" })), jsxRuntime.jsx(CheckoutPrice, { isUsage: isUsage, quote: quote, selectedPriceList: selectedPriceList })] }))), jsxRuntime.jsx(CheckoutButton, { checkoutButtonDisabled: checkoutButtonDisabled || !hasPaymentPlugins, onClickCheckout: onClickCheckout, loading: isQuotePending || isUpdatingQuote, tooltipText: !hasPaymentPlugins
21949
+ ? 'Cannot checkout. No valid payment plugins found. Please contact your administrator.'
21950
+ : undefined })] })));
21544
21951
  };
21545
21952
 
21546
- var PlanPickerCheckoutBarWrapper = function (_a) {
21547
- var editingQuote = _a.editingQuote, setEditingQuoteData = _a.setEditingQuoteData, handlePortalErrors = _a.handlePortalErrors, onCheckoutSuccess = _a.onCheckoutSuccess;
21548
- // Context
21549
- var quotePreviewData = react.useContext(QuotePreviewContext).quotePreviewData;
21550
- var selectedPriceList = quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList;
21551
- if (!selectedPriceList)
21552
- return null;
21553
- return (jsxRuntime.jsx(PlanPickerCheckoutBar, { editingQuote: editingQuote, setEditingQuoteData: setEditingQuoteData, handlePortalErrors: handlePortalErrors, selectedPriceList: selectedPriceList, onCheckoutSuccess: onCheckoutSuccess }));
21554
- };
21555
21953
  var PlanPickerCheckoutBar = function (_a) {
21556
- var editingQuote = _a.editingQuote, setEditingQuoteData = _a.setEditingQuoteData, selectedPriceList = _a.selectedPriceList, handlePortalErrors = _a.handlePortalErrors, onCheckoutSuccess = _a.onCheckoutSuccess;
21954
+ var selectedPriceList = _a.selectedPriceList, handlePortalErrors = _a.handlePortalErrors, onCheckoutSuccess = _a.onCheckoutSuccess;
21557
21955
  // Context
21558
- var token = useToken();
21559
21956
  var _b = react.useContext(SubscriptionsContext), upgradingSubscription = _b.upgradingSubscription, shadow = _b.shadow;
21560
- var _c = react.useContext(QuotePreviewContext), quotePreviewData = _c.quotePreviewData, handleSetEditingQuote = _c.handleSetEditingQuote;
21561
- var apiHost = react.useContext(BunnyContext).apiHost;
21957
+ var _c = react.useContext(QuoteContext), quote = _c.quote, onChangeQuantity = _c.onChangeQuantity, getFeatureQuantity = _c.getFeatureQuantity, isFeatureAddonsLoading = _c.isFeatureAddonsLoading, isUpdatingQuote = _c.isUpdatingQuote;
21562
21958
  // Local state
21563
21959
  var _d = react.useState(false), payModalVisible = _d[0], setPayModalVisible = _d[1];
21564
21960
  // Hooks
21961
+ var token = useToken();
21565
21962
  var showSuccessNotification = common.useSuccessNotification();
21566
21963
  var queryClient = reactQuery.useQueryClient();
21567
21964
  var isMobile = common.useIsMobile();
21568
- var defaultPaymentMethod = usePaymentMethod({
21569
- token: token,
21570
- apiHost: apiHost,
21571
- }).defaultPaymentMethod;
21572
- var createSubscriptionUpgradeQuote = useQuoteSubscriptionUpgrade();
21573
- var createSubscriptionUpdateQuote = useCreateSubscriptionQuote();
21574
- var quoteSubscriptionActivate = useQuoteSubscriptionActivate();
21575
- // Mutations
21576
- var createQuote = reactQuery.useMutation({
21577
- mutationFn: function (_a) {
21578
- var subscriptionId = _a.subscriptionId, priceListId = _a.priceListId;
21579
- return createSubscriptionUpgradeQuote(subscriptionId, priceListId, apiHost, token);
21580
- },
21581
- onSuccess: function (response) {
21582
- var _a;
21583
- var quote = (_a = response === null || response === void 0 ? void 0 : response.quoteSubscriptionUpgrade) === null || _a === void 0 ? void 0 : _a.quote;
21584
- setEditingQuoteData === null || setEditingQuoteData === void 0 ? void 0 : setEditingQuoteData(quote.id);
21585
- handleSetEditingQuote(quote.id);
21586
- },
21587
- }).mutate;
21588
- var createEmptyQuote = reactQuery.useMutation({
21589
- mutationFn: function (_a) {
21590
- var subscriptionId = _a.subscriptionId;
21591
- return createSubscriptionUpdateQuote([subscriptionId], apiHost, token);
21592
- },
21593
- onSuccess: function (response) {
21594
- var _a;
21595
- var quote = (_a = response === null || response === void 0 ? void 0 : response.quoteSubscriptionUpdate) === null || _a === void 0 ? void 0 : _a.quote;
21596
- setEditingQuoteData === null || setEditingQuoteData === void 0 ? void 0 : setEditingQuoteData(quote.id);
21597
- handleSetEditingQuote(quote.id);
21598
- },
21599
- }).mutate;
21600
- var updateCharge = reactQuery.useMutation({
21601
- mutationFn: quoteChargeUpdate,
21602
- onSuccess: function () {
21603
- queryClient.invalidateQueries({
21604
- queryKey: common.QueryKeyFactory.default.createObjectKey({
21605
- objectName: 'editingQuote',
21606
- id: editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.id,
21607
- token: token,
21608
- }),
21609
- });
21610
- },
21611
- }).mutate;
21612
- var subscriptionActivate = reactQuery.useMutation({
21613
- mutationFn: function (_a) {
21614
- var subscriptionId = _a.subscriptionId;
21615
- return __awaiter(void 0, void 0, void 0, function () {
21616
- return __generator(this, function (_b) {
21617
- switch (_b.label) {
21618
- case 0: return [4 /*yield*/, quoteSubscriptionActivate(subscriptionId, apiHost, token)];
21619
- case 1: return [2 /*return*/, _b.sent()];
21620
- }
21621
- });
21622
- });
21623
- },
21624
- onSuccess: function (response) {
21625
- var _a;
21626
- var quote = (_a = response === null || response === void 0 ? void 0 : response.quoteSubscriptionActivate) === null || _a === void 0 ? void 0 : _a.quote;
21627
- setEditingQuoteData === null || setEditingQuoteData === void 0 ? void 0 : setEditingQuoteData(quote.id);
21628
- handleSetEditingQuote(quote.id);
21629
- queryClient.invalidateQueries({
21630
- queryKey: common.QueryKeyFactory.default.createObjectKey({
21631
- objectName: 'editingQuote',
21632
- id: editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.id,
21633
- token: token,
21634
- }),
21635
- });
21636
- },
21637
- }).mutate;
21638
- // Queries
21639
- var quote = reactQuery.useQuery({
21640
- queryKey: common.QueryKeyFactory.default.createObjectKey({
21641
- objectName: 'editingQuote',
21642
- id: editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.id,
21643
- token: token,
21644
- }),
21645
- queryFn: function () { return __awaiter(void 0, void 0, void 0, function () {
21646
- var quote;
21647
- return __generator(this, function (_a) {
21648
- switch (_a.label) {
21649
- case 0:
21650
- if (!(editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.id)) {
21651
- throw new Error('editingQuote is undefined');
21652
- }
21653
- return [4 /*yield*/, getQuote({
21654
- id: editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.id,
21655
- token: token,
21656
- apiHost: apiHost,
21657
- })];
21658
- case 1:
21659
- quote = _a.sent();
21660
- return [2 /*return*/, quote];
21661
- }
21662
- });
21663
- }); },
21664
- enabled: Boolean(editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.id),
21665
- }).data;
21666
- react.useEffect(function () {
21667
- var _a;
21668
- if (!(upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id)) {
21669
- console.error('upgradingSubscription is undefined');
21670
- return;
21671
- }
21672
- var upgradingCurrentSubscription = (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id) === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id);
21673
- if (upgradingCurrentSubscription) {
21674
- if (((_a = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.TRIAL) {
21675
- subscriptionActivate({
21676
- subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
21677
- });
21678
- }
21679
- else {
21680
- createEmptyQuote({
21681
- subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
21682
- });
21683
- }
21684
- }
21685
- else {
21686
- createQuote({
21687
- subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
21688
- priceListId: selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id,
21689
- });
21690
- }
21691
- }, [selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id, upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id]);
21692
- // Reset query key on unmount
21693
- react.useEffect(function () {
21694
- return function () {
21695
- queryClient.invalidateQueries({
21696
- queryKey: common.QueryKeyFactory.default.calculatedPricesKey({
21697
- priceListId: selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id,
21698
- quantity: (quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.quantity) || 0,
21699
- token: token,
21700
- }),
21701
- });
21702
- };
21703
- }, [queryClient, selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id, quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.quantity, token]);
21704
21965
  var handleCheckoutSuccess = function () {
21705
21966
  queryClient.invalidateQueries({
21706
21967
  queryKey: common.QueryKeyFactory.default.createTableKey({
@@ -21715,48 +21976,31 @@ var PlanPickerCheckoutBar = function (_a) {
21715
21976
  showSuccessNotification('Your subscription has been created', 'Checkout successful');
21716
21977
  onCheckoutSuccess();
21717
21978
  };
21718
- var onCheckoutFail = function (error) {
21719
- handlePortalErrors === null || handlePortalErrors === void 0 ? void 0 : handlePortalErrors(error);
21720
- };
21721
- function onChangeQuantity(chargeId, quantity) {
21722
- var quoteChange = quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id); });
21723
- var quoteCharge = quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.find(function (charge) {
21724
- var _a;
21725
- return ((_a = charge === null || charge === void 0 ? void 0 : charge.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === chargeId;
21726
- });
21727
- if (!token) {
21728
- console.error('token is undefined');
21729
- return;
21730
- }
21731
- if (!quoteCharge) {
21732
- console.error('quoteCharge not found');
21733
- return;
21734
- }
21735
- updateCharge({
21736
- quoteChargeId: quoteCharge.id,
21737
- quantity: quantity,
21738
- apiHost: apiHost,
21739
- token: token,
21740
- });
21741
- }
21742
21979
  return (jsxRuntime.jsxs("div", __assign({ className: "flex ".concat(isMobile ? 'bunny-flex-col bunny-gap-4' : 'bunny-flex-row', " my-2 p-4 justify-between bg-white rounded-md ").concat(shadow ? "shadow-".concat(shadow) : '') }, { children: [jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile ? 'bunny-flex bunny-flex-col' : 'bunny-flex', " bunny-gap-4") }, { children: selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.charges.map(function (charge, index) {
21743
- var _a;
21744
- var quoteChange = quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id); });
21745
- var chargeQuantity = (_a = quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.find(function (charge) { var _a; return ((_a = charge === null || charge === void 0 ? void 0 : charge.priceList) === null || _a === void 0 ? void 0 : _a.id) === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id); })) === null || _a === void 0 ? void 0 : _a.quantity;
21746
- if (charge.chargeType === common.ChargeType.USAGE)
21980
+ var _a, _b;
21981
+ if (!canEditChargeQuantity(charge))
21747
21982
  return null;
21748
- if (!quote)
21983
+ if (!((_a = charge.feature) === null || _a === void 0 ? void 0 : _a.id))
21984
+ throw new Error('Charge feature is undefined');
21985
+ var isFeatureAddon = charge.featureAddon;
21986
+ var quantity = getFeatureQuantity((_b = charge.feature) === null || _b === void 0 ? void 0 : _b.id, charge.id);
21987
+ var maybeIsChargeLoading = isFeatureAddon && isFeatureAddonsLoading;
21988
+ var showInput = quantity && selectedPriceList.id !== (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id);
21989
+ if (!showInput)
21749
21990
  return null;
21750
- if (!chargeQuantity)
21991
+ // if charge is a feature addon, and a corresponding quote charge is not found in quote, return null
21992
+ if (isFeatureAddon && !featureAddonInQuote(selectedPriceList, charge, quote)) {
21751
21993
  return null;
21752
- return (jsxRuntime.jsx(CheckoutBarInput, { disabled: !chargeQuantity, charge: charge, quantity: chargeQuantity !== null && chargeQuantity !== void 0 ? chargeQuantity : 0, selectedPriceList: selectedPriceList, onQuantityChanged: function (quantity) {
21994
+ }
21995
+ var isDisabled = !quote || maybeIsChargeLoading || !selectedPriceList || !charge.selfServiceQuantity;
21996
+ return (jsxRuntime.jsx(CheckoutBarInput, { disabled: isDisabled, charge: charge, quantity: quantity, onQuantityChanged: function (quantity) {
21753
21997
  onChangeQuantity(charge.id, quantity);
21754
21998
  } }, index));
21755
- }) })), jsxRuntime.jsx(CheckoutBarSummarySection, { onClickCheckout: function () { return setPayModalVisible(true); }, open: payModalVisible, quote: quote, selectedPriceList: selectedPriceList, upgradingSubscription: upgradingSubscription }), jsxRuntime.jsx(Checkout, { onCancel: function () { return setPayModalVisible(false); }, onFail: onCheckoutFail, onSuccess: handleCheckoutSuccess, open: payModalVisible, quote: quote, selectedPriceList: selectedPriceList, storedPaymentMethod: defaultPaymentMethod, token: token })] })));
21999
+ }) })), jsxRuntime.jsx(CheckoutBarSummarySection, { onClickCheckout: function () { return setPayModalVisible(true); }, open: payModalVisible, selectedPriceList: selectedPriceList, upgradingSubscription: upgradingSubscription }), jsxRuntime.jsx(Checkout, { onCancel: function () { return setPayModalVisible(false); }, onFail: function (error) { return handlePortalErrors === null || handlePortalErrors === void 0 ? void 0 : handlePortalErrors(error); }, onSuccess: handleCheckoutSuccess, open: payModalVisible, quote: quote, token: token, isUpdatingQuote: isUpdatingQuote })] })));
21756
22000
  };
21757
22001
 
21758
22002
  // WARNING: There is a preview button on APP that will need to be changed if this query is changed
21759
- var PRICE_LIST_CHANGE_OPTIONS_QUERY = "\n query priceListChangeOptions($subscriptionId: ID, $productId: ID) {\n priceListChangeOptions(subscriptionId: $subscriptionId, productId: $productId) {\n products {\n everythingInPlus\n id\n name\n plansToDisplay\n features(sort: \"position asc\") {\n description\n id\n isVisible\n kind\n name\n position\n }\n }\n priceLists {\n showPriceAsMonthly\n basePrice\n currencyId\n id\n monthlyBasePrice\n periodMonths\n plan {\n code\n contactUsLabel\n contactUsUrl\n description\n id\n name\n position\n pricingDescription\n pricingStyle\n planFeatures {\n featureId\n value\n feature {\n name\n }\n }\n }\n product {\n id\n }\n charges {\n featureAddon\n basePrice\n billingPeriod\n chargeType\n id\n name\n priceDecimals\n pricingModel\n quantityMax\n quantityMin\n selfServiceQuantity\n priceList {\n id\n }\n feature {\n name\n unitName\n }\n }\n }\n }\n }";
22003
+ var PRICE_LIST_CHANGE_OPTIONS_QUERY = "\n query priceListChangeOptions($subscriptionId: ID, $productId: ID) {\n priceListChangeOptions(subscriptionId: $subscriptionId, productId: $productId) {\n products {\n everythingInPlus\n id\n name\n plansToDisplay\n features(sort: \"position asc\") {\n description\n id\n isVisible\n kind\n name\n position\n }\n }\n priceLists {\n showPriceAsMonthly\n basePrice\n currencyId\n id\n monthlyBasePrice\n periodMonths\n plan {\n code\n contactUsLabel\n contactUsUrl\n description\n id\n name\n position\n pricingDescription\n pricingStyle\n addon\n planFeatures {\n featureId\n value\n feature {\n name\n }\n }\n }\n product {\n id\n }\n charges {\n featureAddon\n basePrice\n billingPeriod\n chargeType\n id\n name\n priceDecimals\n pricingModel\n quantityMax\n quantityMin\n selfServiceQuantity\n priceList {\n id\n }\n feature {\n name\n unitName\n id\n }\n }\n }\n }\n }";
21760
22004
  var getPriceListChangeOptions = function (_a) {
21761
22005
  var apiHost = _a.apiHost, isInPreviewMode = _a.isInPreviewMode, productId = _a.productId, token = _a.token, upgradingSubscription = _a.upgradingSubscription;
21762
22006
  return __awaiter(void 0, void 0, void 0, function () {
@@ -21782,60 +22026,15 @@ var getPriceListChangeOptions = function (_a) {
21782
22026
  return [2 /*return*/, priceListChangeOptions];
21783
22027
  }
21784
22028
  });
21785
- });
21786
- };
21787
-
21788
- var ErrorView = function (_a) {
21789
- var children = _a.children, message = _a.message;
21790
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-full", style: { marginTop: "80px" } }, { children: [jsxRuntime.jsx("div", __assign({ style: { fontSize: "32px" } }, { children: message })), children] })));
21791
- };
21792
-
21793
- var calculateNewQuantity = function (priceList, currentQuantity) {
21794
- if (currentQuantity === void 0) { currentQuantity = 1; }
21795
- var priceListRecurringCharge = priceList === null || priceList === void 0 ? void 0 : priceList.charges.find(function (priceListCharge) {
21796
- return priceListCharge.chargeType === "RECURRING" ||
21797
- priceListCharge.chargeType === "USAGE";
21798
- });
21799
- var quantityMax = (priceListRecurringCharge === null || priceListRecurringCharge === void 0 ? void 0 : priceListRecurringCharge.quantityMax) || Number.POSITIVE_INFINITY;
21800
- var quantityMin = (priceListRecurringCharge === null || priceListRecurringCharge === void 0 ? void 0 : priceListRecurringCharge.quantityMin) || Number.NEGATIVE_INFINITY;
21801
- var selfServiceQuantity = priceListRecurringCharge === null || priceListRecurringCharge === void 0 ? void 0 : priceListRecurringCharge.selfServiceQuantity;
21802
- // If self service quantity is disabled, return the min quantity
21803
- if (!selfServiceQuantity && quantityMin) {
21804
- return quantityMin;
21805
- }
21806
- // If the current quantity is greater than the max quantity, return the max quantity
21807
- else if (currentQuantity > quantityMax) {
21808
- return quantityMax;
21809
- }
21810
- // If the current quantity is less than the min quantity, return the min quantity
21811
- else if (currentQuantity < quantityMin) {
21812
- return quantityMin;
21813
- }
21814
- // If the current quantity is between the min and max quantity, return the current quantity
21815
- else if (currentQuantity <= quantityMax && currentQuantity >= quantityMin) {
21816
- return currentQuantity;
21817
- }
21818
- // If all else fails, return 1
21819
- else {
21820
- return 1;
21821
- }
21822
- };
21823
-
21824
- function isAddonPurchased(featureAddon, currentSubscription) {
21825
- var purchasedFeatureAddons = currentSubscription === null || currentSubscription === void 0 ? void 0 : currentSubscription.charges.filter(function (charge) { var _a; return (_a = charge.priceListCharge) === null || _a === void 0 ? void 0 : _a.featureAddon; });
21826
- if (!purchasedFeatureAddons)
21827
- return false;
21828
- return purchasedFeatureAddons.some(function (addon) { var _a; return ((_a = addon.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === featureAddon.id; });
21829
- }
21830
- function priceListHasUnpurchasedFeatureAddons(priceList, currentSubscription) {
21831
- var featureAddons = priceList.charges.filter(function (charge) { return charge.featureAddon; });
21832
- var purchasedFeatureAddons = currentSubscription === null || currentSubscription === void 0 ? void 0 : currentSubscription.charges.filter(function (charge) { var _a; return (_a = charge.priceListCharge) === null || _a === void 0 ? void 0 : _a.featureAddon; });
21833
- var unpurchasedFeatureAddons = featureAddons.filter(function (charge) {
21834
- return !(purchasedFeatureAddons === null || purchasedFeatureAddons === void 0 ? void 0 : purchasedFeatureAddons.some(function (purchasedCharge) { var _a; return ((_a = purchasedCharge.priceListCharge) === null || _a === void 0 ? void 0 : _a.id) === charge.id; }));
21835
- });
21836
- return unpurchasedFeatureAddons.length > 0;
21837
- }
22029
+ });
22030
+ };
22031
+
22032
+ var ErrorView = function (_a) {
22033
+ var children = _a.children, message = _a.message;
22034
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-full", style: { marginTop: "80px" } }, { children: [jsxRuntime.jsx("div", __assign({ style: { fontSize: "32px" } }, { children: message })), children] })));
22035
+ };
21838
22036
 
22037
+ var Text$d = antd.Typography.Text;
21839
22038
  var BillingPeriodSelector = function (_a) {
21840
22039
  var availableBillingPeriods = _a.availableBillingPeriods, onChangeBillingPeriod = _a.onChangeBillingPeriod, products = _a.products, selectedBillingPeriod = _a.selectedBillingPeriod, selectedProduct = _a.selectedProduct, onChangeProduct = _a.onChangeProduct;
21841
22040
  var _b = react.useContext(BrandContext), secondaryColor = _b.secondaryColor, brandColor = _b.brandColor;
@@ -21846,7 +22045,7 @@ var BillingPeriodSelector = function (_a) {
21846
22045
  color: secondaryColor,
21847
22046
  } }, { children: "Select product" })), jsxRuntime.jsx(ProductRadioStyled, __assign({ brandColor: brandColor }, { children: jsxRuntime.jsx(antd.Radio.Group, __assign({ onChange: function (e) {
21848
22047
  onChangeProduct(products === null || products === void 0 ? void 0 : products.find(function (product) { return product.id === e.target.value; }));
21849
- }, value: selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id, buttonStyle: "solid" }, { children: jsxRuntime.jsx(antd.Space, __assign({ className: "bunny-gap-2" }, { children: products === null || products === void 0 ? void 0 : products.map(function (product) { return (jsxRuntime.jsx(antd.Radio.Button, __assign({ value: product.id }, { children: product.name }), product.id)); }) })) })) }))] }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-full bunny-gap-2" }, { children: [!isMobile && (jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-xs", style: {
22048
+ }, value: selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id, buttonStyle: "solid" }, { children: jsxRuntime.jsx(antd.Space, __assign({ className: "bunny-gap-2" }, { children: products === null || products === void 0 ? void 0 : products.map(function (product) { return (jsxRuntime.jsx(antd.Radio.Button, __assign({ value: product.id }, { children: product.name }), product.id)); }) })) })) }))] }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-w-full bunny-gap-2" }, { children: [!isMobile && (jsxRuntime.jsx(Text$d, __assign({ className: "bunny-font-medium bunny-text-xs", style: {
21850
22049
  color: secondaryColor,
21851
22050
  } }, { children: "Subscription term" }))), jsxRuntime.jsx(StyledRadioGroup, __assign({ className: "bunny-w-full", "$isMobile": isMobile }, { children: jsxRuntime.jsx(antd.Radio.Group, __assign({ onChange: function (e) {
21852
22051
  onChangeBillingPeriod(e.target.value);
@@ -21887,6 +22086,8 @@ var NextPriceListButton = function (_a) {
21887
22086
  var getAvailablePlansAndPriceLists = function (_a) {
21888
22087
  var availablePriceLists = _a.availablePriceLists, priceListChangeOptions = _a.priceListChangeOptions, priceListStart = _a.priceListStart, plansToDisplay = _a.plansToDisplay;
21889
22088
  var displayPriceLists = availablePriceLists.slice(priceListStart, priceListStart + plansToDisplay);
22089
+ // displayPriceLists don't have enough data in them, so we're finding the same price list within
22090
+ // priceListChangeOptions which has more data in it.
21890
22091
  var availablePriceListsArray = displayPriceLists === null || displayPriceLists === void 0 ? void 0 : displayPriceLists.map(function (displayPriceList) {
21891
22092
  var _a;
21892
22093
  var foundPriceList = (_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _a === void 0 ? void 0 : _a.find(function (priceList) { return priceList.plan.id === displayPriceList.plan.id; });
@@ -21903,12 +22104,8 @@ var everythingInPlusString = function (_a) {
21903
22104
  };
21904
22105
 
21905
22106
  var PriceListCardButton = function (_a) {
21906
- var disableOnClick = _a.disableOnClick, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, isSelected = _a.isSelected, priceList = _a.priceList, subscriptionPlan = _a.subscriptionPlan;
21907
- // Context
22107
+ var disableSelectCurrentPlan = _a.disableSelectCurrentPlan, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, isSelected = _a.isSelected, priceList = _a.priceList, subscriptionPlan = _a.subscriptionPlan;
21908
22108
  var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
21909
- var showBuyAddonsButton = isPriceListCurrentSubscription &&
21910
- subscriptionPlan &&
21911
- priceListHasUnpurchasedFeatureAddons(priceList, upgradingSubscription);
21912
22109
  var isPriceListNonSubscribedCurrentPlan = (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.plan.id) === priceList.plan.id && !isPriceListCurrentSubscription;
21913
22110
  var canUpgradeFromTrial = upgradingSubscription && canSubscriptionUpgradeFromTrial(upgradingSubscription);
21914
22111
  var createButtonText = function () {
@@ -21924,11 +22121,9 @@ var PriceListCardButton = function (_a) {
21924
22121
  return priceList.plan.contactUsLabel;
21925
22122
  return 'Select';
21926
22123
  };
21927
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-grow bunny-w-full bunny-justify-end bunny-gap-3" }, { children: [showBuyAddonsButton && (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-justify-center bunny-w-full" }, { children: jsxRuntime.jsx(antd.Button, __assign({ className: "bunny-w-full", disabled: disableOnClick, style: {
21928
- maxWidth: '240px',
21929
- }, type: isSelected ? 'primary' : 'default' }, { children: "Buy addons" })) }))), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-justify-center bunny-w-full" }, { children: jsxRuntime.jsx(antd.Button, __assign({ className: "bunny-w-full", disabled: disableOnClick || showBuyAddonsButton, style: {
21930
- maxWidth: '240px',
21931
- }, type: isSelected ? 'primary' : 'default' }, { children: createButtonText() })) }))] })));
22124
+ return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-grow bunny-w-full bunny-justify-end bunny-gap-3" }, { children: jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-justify-center bunny-w-full" }, { children: jsxRuntime.jsx(antd.Button, __assign({ className: "bunny-w-full", disabled: disableSelectCurrentPlan, style: {
22125
+ maxWidth: '240px',
22126
+ }, type: isSelected ? 'primary' : 'default' }, { children: createButtonText() })) })) })));
21932
22127
  };
21933
22128
 
21934
22129
  var Text$c = antd.Typography.Text;
@@ -21957,9 +22152,9 @@ var calculatePriceDecimals = function (priceList) {
21957
22152
  return 0;
21958
22153
  };
21959
22154
  var PriceListCardPrice = function (_a) {
21960
- var priceList = _a.priceList;
22155
+ var priceList = _a.priceList, _b = _a.fontSize, fontSize = _b === void 0 ? '32px' : _b;
21961
22156
  var priceDecimals = calculatePriceDecimals(priceList);
21962
- return (jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-center bunny-text-gray-900", style: { fontSize: '32px' } }, { children: !priceList.plan.pricingStyle || priceList.plan.pricingStyle === common.PricingStyle.PRICED
22157
+ return (jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-center bunny-text-gray-900", style: { fontSize: fontSize } }, { children: !priceList.plan.pricingStyle || priceList.plan.pricingStyle === common.PricingStyle.PRICED
21963
22158
  ? common.formatCurrency(getPrice(priceList), priceList.currencyId, priceDecimals)
21964
22159
  : priceList.plan.pricingStyle === common.PricingStyle.CONTACT_US
21965
22160
  ? ''
@@ -22003,9 +22198,9 @@ function PriceDescriptionString(_a) {
22003
22198
  var PriceListCardTitle = function (_a) {
22004
22199
  var priceList = _a.priceList, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, trialRemainingDays = _a.trialRemainingDays;
22005
22200
  var isMobile = common.useIsMobile();
22006
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-4" }, { children: [Boolean(trialRemainingDays) && (jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-secondary", style: { height: "1rem" } }, { children: isPriceListCurrentSubscription
22007
- ? "Trial ends in ".concat(trialRemainingDays, " day").concat(trialRemainingDays === 1 ? "" : "s")
22008
- : " " }))), jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-center ".concat(isMobile ? "bunny-text-slate-500" : "bunny-text-orange-600"), style: { fontSize: "20px" } }, { children: priceList.plan.name }))] })));
22201
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-4" }, { children: [Boolean(trialRemainingDays) && (jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-secondary", style: { height: '1rem' } }, { children: isPriceListCurrentSubscription
22202
+ ? "Trial ends in ".concat(trialRemainingDays, " day").concat(trialRemainingDays === 1 ? '' : 's')
22203
+ : ' ' }))), jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-center ".concat(isMobile ? 'bunny-text-slate-500' : 'bunny-text-orange-600'), style: { fontSize: '20px' } }, { children: priceList.plan.name }))] })));
22009
22204
  };
22010
22205
 
22011
22206
  var PLAN_GRID_PADDING = 4;
@@ -22018,18 +22213,19 @@ var PlanPickerGridCell = function (_a) {
22018
22213
  };
22019
22214
 
22020
22215
  var PriceListCardDesktop = function (_a) {
22021
- var description = _a.description, disableOnClick = _a.disableOnClick, feature = _a.feature, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, isSelected = _a.isSelected, onClick = _a.onClick, priceList = _a.priceList, subscriptionPlan = _a.subscriptionPlan, trialRemainingDays = _a.trialRemainingDays;
22022
- return (jsxRuntime.jsx(PlanPickerGridCell, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-justify-between bunny-w-full bunny-rounded-md bunny-gap-4 bunny-pt-6 bunny-px-4 ".concat(disableOnClick ? '' : 'cursor-pointer'), onClick: function () {
22023
- if (!disableOnClick) {
22216
+ var hideButton = _a.hideButton, description = _a.description, disableSelectCurrentPlan = _a.disableSelectCurrentPlan, feature = _a.feature, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, isSelected = _a.isSelected, priceList = _a.priceList, subscriptionPlan = _a.subscriptionPlan, trialRemainingDays = _a.trialRemainingDays, noBorder = _a.noBorder, onClickPriceListCard = _a.onClickPriceListCard;
22217
+ return (jsxRuntime.jsx(PlanPickerGridCell, __assign({ noBorder: noBorder }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-justify-between bunny-w-full bunny-rounded-md bunny-gap-4 bunny-pt-6 bunny-px-4 ".concat(disableSelectCurrentPlan ? '' : 'cursor-pointer'), onClick: function () {
22218
+ if (!disableSelectCurrentPlan) {
22024
22219
  if (priceList.plan.pricingStyle === common.PricingStyle.CONTACT_US) {
22025
22220
  window.open(priceList.plan.contactUsUrl, '_blank');
22026
22221
  }
22027
- else
22028
- onClick(priceList);
22222
+ else {
22223
+ onClickPriceListCard === null || onClickPriceListCard === void 0 ? void 0 : onClickPriceListCard(priceList);
22224
+ }
22029
22225
  }
22030
22226
  }, style: {
22031
22227
  height: '100%',
22032
- } }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-3" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardTitle, { isPriceListCurrentSubscription: isPriceListCurrentSubscription, priceList: priceList, trialRemainingDays: trialRemainingDays }), jsxRuntime.jsx(PriceListCardDescription, { description: description })] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardPrice, { priceList: priceList }), jsxRuntime.jsx(PriceListCardPriceDescription, { feature: feature, priceList: priceList })] }))] })), jsxRuntime.jsx(PriceListCardButton, { disableOnClick: disableOnClick, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, priceList: priceList, subscriptionPlan: subscriptionPlan })] })) }));
22228
+ } }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-3" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardTitle, { isPriceListCurrentSubscription: isPriceListCurrentSubscription, priceList: priceList, trialRemainingDays: trialRemainingDays }), jsxRuntime.jsx(PriceListCardDescription, { description: description })] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardPrice, { priceList: priceList }), jsxRuntime.jsx(PriceListCardPriceDescription, { feature: feature, priceList: priceList })] }))] })), !hideButton && (jsxRuntime.jsx(PriceListCardButton, { disableSelectCurrentPlan: disableSelectCurrentPlan, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, priceList: priceList, subscriptionPlan: subscriptionPlan }))] })) })));
22033
22229
  };
22034
22230
 
22035
22231
  var CheckIcon = function (_a) {
@@ -22038,23 +22234,23 @@ var CheckIcon = function (_a) {
22038
22234
  };
22039
22235
 
22040
22236
  var PriceListCardMobile = function (_a) {
22041
- var description = _a.description, disableOnClick = _a.disableOnClick, feature = _a.feature, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, isSelected = _a.isSelected, onClick = _a.onClick, priceList = _a.priceList, subscriptionPlan = _a.subscriptionPlan, trialRemainingDays = _a.trialRemainingDays;
22237
+ var description = _a.description, feature = _a.feature, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, isSelected = _a.isSelected, priceList = _a.priceList, subscriptionPlan = _a.subscriptionPlan, trialRemainingDays = _a.trialRemainingDays, disableOnClickPriceListCard = _a.disableOnClickPriceListCard, onClickPriceListCard = _a.onClickPriceListCard;
22042
22238
  var brandColor = react.useContext(BrandContext).brandColor;
22043
22239
  return (jsxRuntime.jsxs("div", __assign({ className: "bunny-relative bunny-flex bunny-flex-col bunny-border-2 bunny-border-solid bunny-rounded-lg bunny-p-4", onClick: function () {
22044
- if (!disableOnClick)
22045
- onClick(priceList);
22240
+ if (!disableOnClickPriceListCard)
22241
+ onClickPriceListCard === null || onClickPriceListCard === void 0 ? void 0 : onClickPriceListCard(priceList);
22046
22242
  }, style: {
22047
22243
  minWidth: '220px',
22048
22244
  borderColor: isSelected ? brandColor : common.SLATE_200,
22049
22245
  } }, { children: [isSelected && (jsxRuntime.jsx("div", __assign({ className: "bunny-absolute", style: {
22050
22246
  top: '10px',
22051
22247
  right: '10px',
22052
- } }, { children: jsxRuntime.jsx(CheckIcon, { backgroundColor: brandColor, size: "20px" }) }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-grow bunny-gap-2" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardTitle, { isPriceListCurrentSubscription: isPriceListCurrentSubscription, priceList: priceList, trialRemainingDays: trialRemainingDays }), jsxRuntime.jsx(PriceListCardDescription, { description: description })] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardPrice, { priceList: priceList }), jsxRuntime.jsx(PriceListCardPriceDescription, { feature: feature, priceList: priceList })] })), jsxRuntime.jsx(PriceListCardButton, { disableOnClick: disableOnClick, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, priceList: priceList, subscriptionPlan: subscriptionPlan })] }))] })));
22248
+ } }, { children: jsxRuntime.jsx(CheckIcon, { backgroundColor: brandColor, size: "20px" }) }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-grow bunny-gap-2" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardTitle, { isPriceListCurrentSubscription: isPriceListCurrentSubscription, priceList: priceList, trialRemainingDays: trialRemainingDays }), jsxRuntime.jsx(PriceListCardDescription, { description: description })] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-gap-2" }, { children: [jsxRuntime.jsx(PriceListCardPrice, { priceList: priceList }), jsxRuntime.jsx(PriceListCardPriceDescription, { feature: feature, priceList: priceList })] })), jsxRuntime.jsx(PriceListCardButton, { disableSelectCurrentPlan: disableOnClickPriceListCard, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, priceList: priceList, subscriptionPlan: subscriptionPlan })] }))] })));
22053
22249
  };
22054
22250
 
22055
22251
  var PriceListCard = function (_a) {
22056
22252
  var _b;
22057
- var isSelected = _a.isSelected, onClick = _a.onClick, priceList = _a.priceList, subscriptions = _a.subscriptions, trialRemainingDays = _a.trialRemainingDays;
22253
+ var hideButton = _a.hideButton, isSelected = _a.isSelected, priceList = _a.priceList, subscriptions = _a.subscriptions, trialRemainingDays = _a.trialRemainingDays, noBorder = _a.noBorder, onClickPriceListCard = _a.onClickPriceListCard;
22058
22254
  // Context
22059
22255
  var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
22060
22256
  var isMobile = common.useIsMobile();
@@ -22064,11 +22260,9 @@ var PriceListCard = function (_a) {
22064
22260
  var activeCharge = (_b = getActivePlanPriceData(priceList, priceList)) === null || _b === void 0 ? void 0 : _b.activeCharge;
22065
22261
  // Is the price list the current price list for the upgradingSubscription
22066
22262
  var isPriceListCurrentSubscription = (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id) === priceList.id;
22067
- var canPurchaseFeatureAddons = priceListHasUnpurchasedFeatureAddons(priceList, upgradingSubscription);
22068
- var disableOnClick = isPriceListDisabled({
22263
+ var disableSelectCurrentPlan = isPriceListDisabled({
22069
22264
  priceList: priceList,
22070
22265
  upgradingSubscription: upgradingSubscription,
22071
- canPurchaseFeatureAddons: canPurchaseFeatureAddons,
22072
22266
  });
22073
22267
  var subscriptionPlan = subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.find(function (subscription) {
22074
22268
  var _a, _b;
@@ -22080,22 +22274,21 @@ var PriceListCard = function (_a) {
22080
22274
  return null;
22081
22275
  }
22082
22276
  var feature = activeCharge.feature;
22083
- return isMobile ? (jsxRuntime.jsx(PriceListCardMobile, { description: description, disableOnClick: disableOnClick, feature: feature, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, onClick: onClick, priceList: priceList, trialRemainingDays: trialRemainingDays, subscriptionPlan: subscriptionPlan })) : (jsxRuntime.jsx(PriceListCardDesktop, { description: description, disableOnClick: disableOnClick, feature: feature, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, onClick: onClick, priceList: priceList, trialRemainingDays: trialRemainingDays, subscriptionPlan: subscriptionPlan }));
22277
+ return isMobile ? (jsxRuntime.jsx(PriceListCardMobile, { description: description, feature: feature, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, priceList: priceList, trialRemainingDays: trialRemainingDays, subscriptionPlan: subscriptionPlan,
22278
+ // TODO: naming mismatch disableOnClickPriceListCard vs disableSelectCurrentPlan, maybe also functionality mismatch? (ignore for now, mobile won't ever show this currently)
22279
+ disableOnClickPriceListCard: disableSelectCurrentPlan, onClickPriceListCard: onClickPriceListCard })) : (jsxRuntime.jsx(PriceListCardDesktop, { hideButton: hideButton, description: description, disableSelectCurrentPlan: disableSelectCurrentPlan, feature: feature, isPriceListCurrentSubscription: isPriceListCurrentSubscription, isSelected: isSelected, priceList: priceList, trialRemainingDays: trialRemainingDays, subscriptionPlan: subscriptionPlan, noBorder: noBorder, onClickPriceListCard: onClickPriceListCard }));
22084
22280
  };
22085
22281
 
22086
- var QUOTE_CHARGE_CREATE$1 = "\nmutation QuoteChargeCreate ($quoteChangeId: ID!, $startDate: ISO8601Date!, $endDate: ISO8601Date, $priceListChargeId: ID, $subscriptionChargeId: ID, $price: Float, $quantity: Int) {\n quoteChargeCreate(\n endDate: $endDate\n price: $price\n priceListChargeId: $priceListChargeId\n quantity: $quantity\n quoteChangeId: $quoteChangeId\n startDate: $startDate\n subscriptionChargeId: $subscriptionChargeId\n ) {\n quoteCharge {\n quoteChange {\n id\n quoteId\n }\n id\n }\n }\n}\n\n";
22282
+ var QUOTE_CHARGE_CREATE = "\n".concat(QUOTE_FIELDS(), "\nmutation QuoteChargeCreate ($quoteChangeId: ID!, $startDate: ISO8601Date!, $endDate: ISO8601Date, $priceListChargeId: ID, $subscriptionChargeId: ID, $price: Float, $quantity: Int) {\n quoteChargeCreate(\n endDate: $endDate\n price: $price\n priceListChargeId: $priceListChargeId\n quantity: $quantity\n quoteChangeId: $quoteChangeId\n startDate: $startDate\n subscriptionChargeId: $subscriptionChargeId\n ) {\n quoteCharge {\n quoteChange {\n id\n quoteId\n quote {\n ...QuoteFields\n }\n }\n id\n }\n }\n}\n\n");
22087
22283
  var quoteChargeCreate = function (_a) {
22088
- var
22089
- // endDate,
22090
- price = _a.price, priceListChargeId = _a.priceListChargeId, quantity = _a.quantity, quoteChangeId = _a.quoteChangeId, startDate = _a.startDate, subscriptionChargeId = _a.subscriptionChargeId, token = _a.token, apiHost = _a.apiHost;
22284
+ var price = _a.price, priceListChargeId = _a.priceListChargeId, quantity = _a.quantity, quoteChangeId = _a.quoteChangeId, startDate = _a.startDate, subscriptionChargeId = _a.subscriptionChargeId, token = _a.token, apiHost = _a.apiHost;
22091
22285
  return __awaiter(void 0, void 0, void 0, function () {
22092
22286
  var response;
22093
22287
  return __generator(this, function (_b) {
22094
22288
  switch (_b.label) {
22095
22289
  case 0: return [4 /*yield*/, gqlRequest({
22096
- query: QUOTE_CHARGE_CREATE$1,
22290
+ query: QUOTE_CHARGE_CREATE,
22097
22291
  vars: {
22098
- // endDate,
22099
22292
  price: price,
22100
22293
  priceListChargeId: priceListChargeId,
22101
22294
  quantity: quantity,
@@ -22117,32 +22310,38 @@ var quoteChargeCreate = function (_a) {
22117
22310
  });
22118
22311
  };
22119
22312
 
22120
- var QUOTE_CHARGE_CREATE = "\nmutation QuoteChargeDelete ($quoteChargeId: ID!) {\n quoteChargeDelete(\n quoteChargeId: $quoteChargeId\n ) {\n errors\n quoteCharge {\n quoteChange {\n id\n quoteId\n }\n }\n }\n}\n\n";
22313
+ var QUOTE_CHARGE_DELETE = "\n".concat(QUOTE_FIELDS(), "\nmutation QuoteChargeDelete ($quoteChargeId: ID!) {\n quoteChargeDelete(\n quoteChargeId: $quoteChargeId\n ) {\n errors\n quoteCharge {\n quoteChange {\n id\n quoteId\n quote {\n ...QuoteFields\n }\n }\n }\n }\n}\n\n");
22121
22314
  var quoteChargeDelete = function (_a) {
22122
22315
  var quoteChargeId = _a.quoteChargeId, token = _a.token, apiHost = _a.apiHost;
22123
- return gqlRequest({
22124
- query: QUOTE_CHARGE_CREATE,
22125
- vars: {
22126
- quoteChargeId: quoteChargeId,
22127
- },
22128
- apiHost: apiHost,
22129
- token: token,
22316
+ return __awaiter(void 0, void 0, void 0, function () {
22317
+ var response;
22318
+ return __generator(this, function (_b) {
22319
+ switch (_b.label) {
22320
+ case 0: return [4 /*yield*/, gqlRequest({
22321
+ query: QUOTE_CHARGE_DELETE,
22322
+ vars: {
22323
+ quoteChargeId: quoteChargeId,
22324
+ },
22325
+ apiHost: apiHost,
22326
+ token: token,
22327
+ })];
22328
+ case 1:
22329
+ response = _b.sent();
22330
+ if (response.errors) {
22331
+ throw new Error(response.errors[0].message);
22332
+ }
22333
+ return [2 /*return*/, response.quoteChargeDelete.quoteCharge];
22334
+ }
22335
+ });
22130
22336
  });
22131
22337
  };
22132
22338
 
22133
- var useQuoteUpdateFeatureAddon = function (quoteId, featureAddon) {
22339
+ var useQuoteUpdateFeatureAddon = function (quote, featureAddon) {
22134
22340
  var apiHost = react.useContext(BunnyContext).apiHost;
22341
+ var _a = react.useContext(QuoteContext), addFeatureAddonLoading = _a.addFeatureAddonLoading, removeFeatureAddonLoading = _a.removeFeatureAddonLoading;
22135
22342
  var token = useToken();
22136
22343
  var queryClient = reactQuery.useQueryClient();
22137
22344
  var addedQuoteChargeId = react.useRef();
22138
- var editingQuote = reactQuery.useQuery({
22139
- queryKey: common.QueryKeyFactory.default.createObjectKey({
22140
- objectName: 'editingQuote',
22141
- id: quoteId,
22142
- }),
22143
- queryFn: function () { return (quoteId ? getQuote({ id: quoteId, token: token, apiHost: apiHost }) : undefined); },
22144
- enabled: Boolean(quoteId),
22145
- }).data;
22146
22345
  function handleAddFeatureAddon() {
22147
22346
  quoteChargeCreateMutation();
22148
22347
  }
@@ -22151,20 +22350,23 @@ var useQuoteUpdateFeatureAddon = function (quoteId, featureAddon) {
22151
22350
  return;
22152
22351
  quoteChargeDeleteMutation({ quoteChargeId: addedQuoteChargeId.current });
22153
22352
  }
22154
- var _a = reactQuery.useMutation({
22353
+ var _b = reactQuery.useMutation({
22155
22354
  mutationFn: function () { return __awaiter(void 0, void 0, void 0, function () {
22156
- var quoteCharge;
22355
+ var quoteChangeId, quoteCharge;
22157
22356
  return __generator(this, function (_a) {
22158
22357
  switch (_a.label) {
22159
22358
  case 0:
22160
22359
  if (!token)
22161
22360
  throw new Error('Token is required');
22162
- if (!editingQuote)
22361
+ if (!quote)
22163
22362
  throw new Error('Editing quote is required');
22363
+ quoteChangeId = findQuoteChangeForFeatureAddon(quote);
22364
+ if (!quoteChangeId)
22365
+ throw new Error('No available quote change for feature add-on');
22164
22366
  return [4 /*yield*/, quoteChargeCreate({
22165
- quoteChangeId: editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.quoteChanges[editingQuote.quoteChanges.length - 1].id,
22367
+ quoteChangeId: quoteChangeId.id,
22166
22368
  priceListChargeId: featureAddon.id,
22167
- startDate: editingQuote === null || editingQuote === void 0 ? void 0 : editingQuote.startDate,
22369
+ startDate: quote === null || quote === void 0 ? void 0 : quote.startDate,
22168
22370
  apiHost: apiHost,
22169
22371
  token: token,
22170
22372
  })];
@@ -22177,40 +22379,62 @@ var useQuoteUpdateFeatureAddon = function (quoteId, featureAddon) {
22177
22379
  onSuccess: function (_a) {
22178
22380
  var quoteCharge = _a.quoteCharge;
22179
22381
  addedQuoteChargeId.current = quoteCharge.id;
22180
- queryClient.invalidateQueries({
22181
- queryKey: common.QueryKeyFactory.default.createObjectKey({
22182
- objectName: 'editingQuote',
22183
- }),
22184
- });
22382
+ queryClient.setQueryData(common.QueryKeyFactory.default.createObjectKey({
22383
+ objectName: 'editingQuote',
22384
+ id: quote === null || quote === void 0 ? void 0 : quote.id,
22385
+ token: token,
22386
+ }), quoteCharge.quoteChange.quote);
22185
22387
  },
22186
- }), quoteChargeCreateMutation = _a.mutate, isCreatingFeatureAddon = _a.isPending;
22187
- var _b = reactQuery.useMutation({
22388
+ }), quoteChargeCreateMutation = _b.mutate, isCreatingFeatureAddon = _b.isPending;
22389
+ var _c = reactQuery.useMutation({
22188
22390
  mutationFn: function (_a) {
22189
22391
  var quoteChargeId = _a.quoteChargeId;
22190
- return quoteChargeDelete({ quoteChargeId: quoteChargeId, token: token, apiHost: apiHost });
22392
+ return __awaiter(void 0, void 0, void 0, function () {
22393
+ var response;
22394
+ return __generator(this, function (_b) {
22395
+ switch (_b.label) {
22396
+ case 0: return [4 /*yield*/, quoteChargeDelete({ quoteChargeId: quoteChargeId, token: token, apiHost: apiHost })];
22397
+ case 1:
22398
+ response = _b.sent();
22399
+ return [2 /*return*/, { quoteCharge: response }];
22400
+ }
22401
+ });
22402
+ });
22191
22403
  },
22192
- onSuccess: function () {
22404
+ onSuccess: function (_a) {
22405
+ var quoteCharge = _a.quoteCharge;
22193
22406
  addedQuoteChargeId.current = undefined;
22194
- queryClient.invalidateQueries({
22195
- queryKey: common.QueryKeyFactory.default.createObjectKey({
22196
- objectName: 'editingQuote',
22197
- }),
22198
- });
22407
+ queryClient.setQueryData(common.QueryKeyFactory.default.createObjectKey({
22408
+ objectName: 'editingQuote',
22409
+ id: quote === null || quote === void 0 ? void 0 : quote.id,
22410
+ token: token,
22411
+ }), quoteCharge.quoteChange.quote);
22199
22412
  },
22200
- }), quoteChargeDeleteMutation = _b.mutate, isDeletingFeatureAddon = _b.isPending;
22413
+ }), quoteChargeDeleteMutation = _c.mutate, isDeletingFeatureAddon = _c.isPending;
22414
+ var isPending = isCreatingFeatureAddon || isDeletingFeatureAddon;
22201
22415
  react.useEffect(function () {
22202
22416
  // If the quoteId changes, then its because we changed pricelists, so we need to reset the addedQuoteChargeId
22203
22417
  // so that isChecked becomes false
22204
22418
  addedQuoteChargeId.current = undefined;
22205
- }, [quoteId]);
22419
+ }, [quote === null || quote === void 0 ? void 0 : quote.id]);
22420
+ react.useEffect(function () {
22421
+ if (isPending) {
22422
+ addFeatureAddonLoading(featureAddon.id);
22423
+ }
22424
+ else {
22425
+ removeFeatureAddonLoading(featureAddon.id);
22426
+ }
22427
+ return function () {
22428
+ removeFeatureAddonLoading(featureAddon.id);
22429
+ };
22430
+ }, [isPending]);
22206
22431
  return {
22207
22432
  handleAddFeatureAddon: handleAddFeatureAddon,
22208
22433
  handleRemoveFeatureAddon: handleRemoveFeatureAddon,
22209
- isPending: isCreatingFeatureAddon || isDeletingFeatureAddon,
22434
+ isPending: isPending,
22210
22435
  isChecked: isDeletingFeatureAddon
22211
22436
  ? false
22212
22437
  : Boolean(addedQuoteChargeId.current || isCreatingFeatureAddon),
22213
- editingQuoteLoaded: editingQuote !== undefined,
22214
22438
  };
22215
22439
  };
22216
22440
 
@@ -22248,23 +22472,23 @@ function FeatureAddonsList(_a) {
22248
22472
  }) }));
22249
22473
  }
22250
22474
  function FeatureAddonRow(_a) {
22251
- var _b, _c;
22475
+ var _b;
22252
22476
  var featureAddon = _a.featureAddon, priceList = _a.priceList;
22253
- var quotePreviewData = react.useContext(QuotePreviewContext).quotePreviewData;
22254
22477
  var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
22255
- var _d = useQuoteUpdateFeatureAddon(quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.editingQuoteId, featureAddon), handleAddFeatureAddon = _d.handleAddFeatureAddon, handleRemoveFeatureAddon = _d.handleRemoveFeatureAddon, isPending = _d.isPending, isChecked = _d.isChecked, editingQuoteLoaded = _d.editingQuoteLoaded;
22478
+ var _c = react.useContext(QuoteContext), quote = _c.quote, selectedPriceList = _c.selectedPriceList;
22479
+ var _d = useQuoteUpdateFeatureAddon(quote, featureAddon), handleAddFeatureAddon = _d.handleAddFeatureAddon, handleRemoveFeatureAddon = _d.handleRemoveFeatureAddon, isPending = _d.isPending, isChecked = _d.isChecked;
22256
22480
  var brandColor = react.useContext(BrandContext).brandColor;
22257
- var isPriceListSelected = ((_b = quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList) === null || _b === void 0 ? void 0 : _b.id) === priceList.id;
22481
+ var isPriceListSelected = (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id) === priceList.id;
22258
22482
  var isPurchased = isAddonPurchased(featureAddon, upgradingSubscription);
22259
22483
  var isDisabled = !isPriceListSelected || isPurchased;
22260
22484
  var checked = isChecked || isPurchased;
22261
22485
  var tooltipContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { children: common.formatCurrency(featureAddon.basePrice, priceList.currencyId) }), featureAddon.chargeType === common.ChargeType.RECURRING && (jsxRuntime.jsx("div", { children: PriceDescriptionString({
22262
- unitName: (_c = featureAddon.feature) === null || _c === void 0 ? void 0 : _c.unitName,
22486
+ unitName: (_b = featureAddon.feature) === null || _b === void 0 ? void 0 : _b.unitName,
22263
22487
  showPriceAsMonthly: priceList.showPriceAsMonthly,
22264
22488
  periodMonths: priceList.periodMonths,
22265
22489
  doesPlanHaveFlatFeeCharges: false,
22266
22490
  }) }))] }));
22267
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-flex-wrap bunny-items-center bunny-justify-between bunny-gap-1" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-items-center bunny-gap-1" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-1 bunny-text-gray-600", style: { fontSize: '13px' } }, { children: [checked ? (jsxRuntime.jsx(CheckIcon, { backgroundColor: brandColor, size: "15px" })) : (jsxRuntime.jsx(CheckIcon, { backgroundColor: common.SLATE_200, size: "15px" })), featureAddon.name] })), jsxRuntime.jsx(antd.Tooltip, __assign({ title: tooltipContent }, { children: jsxRuntime.jsx(icons.InfoCircleOutlined, { className: "bunny-text-gray-500", size: 15 }) }))] })), jsxRuntime.jsx(antd.Switch, { size: "small", loading: isPending, disabled: isDisabled || !editingQuoteLoaded, checked: checked, onChange: function (checked) {
22491
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-flex-wrap bunny-items-center bunny-justify-between bunny-gap-1" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-items-center bunny-gap-1" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-1 bunny-text-gray-600", style: { fontSize: '13px' } }, { children: [checked ? (jsxRuntime.jsx(CheckIcon, { backgroundColor: brandColor, size: "15px" })) : (jsxRuntime.jsx(CheckIcon, { backgroundColor: common.SLATE_200, size: "15px" })), featureAddon.name] })), jsxRuntime.jsx(antd.Tooltip, __assign({ title: tooltipContent }, { children: jsxRuntime.jsx(icons.InfoCircleOutlined, { className: "bunny-text-gray-500", size: 15 }) }))] })), jsxRuntime.jsx(antd.Switch, { id: featureAddonSwitchTestId(featureAddon), size: "small", loading: isPending, disabled: isDisabled || !quote, checked: checked, onChange: function (checked) {
22268
22492
  if (checked) {
22269
22493
  handleAddFeatureAddon();
22270
22494
  }
@@ -22294,23 +22518,169 @@ var filterUniqueFeatures = function (_a) {
22294
22518
  return updatedPriceLists;
22295
22519
  };
22296
22520
  var EverythingPlanFeatures = function (_a) {
22297
- var displayPriceLists = _a.displayPriceLists, selectedProduct = _a.selectedProduct, plansToDisplay = _a.plansToDisplay;
22521
+ var displayPriceLists = _a.displayPriceLists, selectedProduct = _a.selectedProduct, plansToDisplay = _a.plansToDisplay, _b = _a.hideBorder, hideBorder = _b === void 0 ? false : _b;
22298
22522
  var brandColor = react.useContext(BrandContext).brandColor;
22299
22523
  var uniquePlanFeatures = filterUniqueFeatures({ availablePriceLists: displayPriceLists });
22300
22524
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: __spreadArray([], Array(plansToDisplay), true).map(function (_, planIndex) {
22301
22525
  var priceList = uniquePlanFeatures[planIndex];
22302
22526
  var prevPriceList = displayPriceLists[planIndex - 1];
22303
22527
  if (!priceList)
22304
- return (jsxRuntime.jsx("div", { style: prevPriceList ? { borderLeft: "1px solid ".concat(common.SLATE_200) } : {} }, planIndex));
22528
+ return (jsxRuntime.jsx("div", { style: prevPriceList && !hideBorder ? { borderLeft: "1px solid ".concat(common.SLATE_200) } : {} }, planIndex));
22305
22529
  if (!priceList.plan.planFeatures)
22306
22530
  return (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(FeatureAddonsList, { priceList: priceList }), ";"] }, planIndex));
22307
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-4 bunny-p-4", style: { borderLeft: "1px solid ".concat(common.SLATE_200) } }, { children: [priceList.plan.planFeatures.map(function (planFeature, planFeatureIndex) {
22531
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-4 bunny-p-4", style: !hideBorder ? { borderLeft: "1px solid ".concat(common.SLATE_200) } : {} }, { children: [priceList.plan.planFeatures.map(function (planFeature, planFeatureIndex) {
22308
22532
  var everythingInPlus = selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.everythingInPlus;
22309
22533
  return (jsxRuntime.jsxs("div", __assign({ className: "bunny-contents" }, { children: [prevPriceList && everythingInPlus && planIndex > 0 && planFeatureIndex === 0 && (jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium", style: { fontSize: '13px' } }, { children: everythingInPlusString({ priceList: prevPriceList }) }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-1 bunny-text-gray-600", style: { fontSize: '13px' } }, { children: [jsxRuntime.jsx(CheckIcon, { backgroundColor: brandColor, size: "15px" }), planFeature.feature.name] }))] }), planFeatureIndex));
22310
22534
  }), jsxRuntime.jsx(FeatureAddonsList, { priceList: priceList })] }), planIndex));
22311
22535
  }) }));
22312
22536
  };
22313
22537
 
22538
+ var QUOTE_CHANGE_DELETE = "\n".concat(QUOTE_FIELDS(), "\n mutation QuoteChangeDelete($id: ID!) {\n quoteChangeDelete(id: $id) {\n errors\n quoteChange {\n quote {\n ...QuoteFields\n }\n }\n }\n }\n");
22539
+ var quoteChangeDelete = function (_a) {
22540
+ var id = _a.id, apiHost = _a.apiHost, token = _a.token;
22541
+ return __awaiter(void 0, void 0, void 0, function () {
22542
+ var vars, response, errors;
22543
+ var _b;
22544
+ return __generator(this, function (_c) {
22545
+ switch (_c.label) {
22546
+ case 0:
22547
+ vars = {
22548
+ id: id,
22549
+ };
22550
+ return [4 /*yield*/, gqlRequest({
22551
+ query: QUOTE_CHANGE_DELETE,
22552
+ token: token,
22553
+ vars: vars,
22554
+ apiHost: apiHost,
22555
+ })];
22556
+ case 1:
22557
+ response = _c.sent();
22558
+ errors = (_b = response === null || response === void 0 ? void 0 : response.quoteChangeDelete) === null || _b === void 0 ? void 0 : _b.errors;
22559
+ if (errors)
22560
+ throw errors;
22561
+ return [2 /*return*/, response.quoteChangeDelete];
22562
+ }
22563
+ });
22564
+ });
22565
+ };
22566
+
22567
+ var QUOTE_CHANGE_CREATE = "\n".concat(QUOTE_FIELDS(), "\nmutation QuoteChangeCreate(\n $quoteId: ID!\n $priceListId: ID!\n $parentQuoteChangeId: ID!\n) {\n quoteChangeCreate(\n quoteId: $quoteId\n priceListId: $priceListId\n parentQuoteChangeId: $parentQuoteChangeId\n ) {\n errors\n quoteChange {\n id\n quote {\n ...QuoteFields\n }\n }\n }\n}\n");
22568
+ var quoteChangeCreate = function (_a) {
22569
+ var parentQuoteChangeId = _a.parentQuoteChangeId, priceListId = _a.priceListId, apiHost = _a.apiHost, token = _a.token, quoteId = _a.quoteId;
22570
+ return __awaiter(void 0, void 0, void 0, function () {
22571
+ var vars, response, errors;
22572
+ var _b;
22573
+ return __generator(this, function (_c) {
22574
+ switch (_c.label) {
22575
+ case 0:
22576
+ vars = {
22577
+ parentQuoteChangeId: parentQuoteChangeId,
22578
+ priceListId: priceListId,
22579
+ quoteId: quoteId,
22580
+ };
22581
+ return [4 /*yield*/, gqlRequest({
22582
+ query: QUOTE_CHANGE_CREATE,
22583
+ token: token,
22584
+ vars: vars,
22585
+ apiHost: apiHost,
22586
+ })];
22587
+ case 1:
22588
+ response = _c.sent();
22589
+ errors = (_b = response === null || response === void 0 ? void 0 : response.quoteChangeCreate) === null || _b === void 0 ? void 0 : _b.errors;
22590
+ if (errors)
22591
+ throw errors;
22592
+ return [2 /*return*/, response.quoteChangeCreate];
22593
+ }
22594
+ });
22595
+ });
22596
+ };
22597
+
22598
+ var useToggleAddonPlan = function (quote, plan, billingPeriod, selectedPriceList, setIsAddonPlanLoading) {
22599
+ var token = useToken();
22600
+ var isAdded = react.useRef(false);
22601
+ var queryClient = reactQuery.useQueryClient();
22602
+ var apiHost = react.useContext(BunnyContext).apiHost;
22603
+ var parentQuoteChange = react.useMemo(function () {
22604
+ return quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.priceList.id === selectedPriceList.id; });
22605
+ }, [quote, selectedPriceList]);
22606
+ var _a = reactQuery.useMutation({
22607
+ mutationFn: quoteChangeCreate,
22608
+ onSuccess: function (quoteChangeCreate) {
22609
+ isAdded.current = true;
22610
+ var updatedQuote = quoteChangeCreate.quoteChange.quote;
22611
+ queryClient.setQueryData(common.QueryKeyFactory.default.createObjectKey({
22612
+ objectName: 'editingQuote',
22613
+ id: quote === null || quote === void 0 ? void 0 : quote.id,
22614
+ token: token,
22615
+ }), updatedQuote);
22616
+ },
22617
+ }), addAddonQuoteChange = _a.mutate, isAddingAddonQuoteChange = _a.isPending;
22618
+ var _b = reactQuery.useMutation({
22619
+ mutationFn: quoteChangeDelete,
22620
+ onSuccess: function (quoteChangeDelete) {
22621
+ isAdded.current = false;
22622
+ var updatedQuote = quoteChangeDelete.quoteChange.quote;
22623
+ queryClient.setQueryData(common.QueryKeyFactory.default.createObjectKey({
22624
+ objectName: 'editingQuote',
22625
+ id: quote === null || quote === void 0 ? void 0 : quote.id,
22626
+ token: token,
22627
+ }), updatedQuote);
22628
+ },
22629
+ }), deleteQuoteChange = _b.mutate, isDeletingQuoteChange = _b.isPending;
22630
+ function handleAddAddonQuoteChange() {
22631
+ if (!parentQuoteChange) {
22632
+ throw new Error('Parent quote change not found');
22633
+ }
22634
+ var priceList = plan.priceLists.find(function (pl) { return pl.periodMonths === billingPeriod; });
22635
+ if (!priceList) {
22636
+ throw new Error('Price list not found');
22637
+ }
22638
+ if (!(quote === null || quote === void 0 ? void 0 : quote.id)) {
22639
+ throw new Error('Quote ID not found');
22640
+ }
22641
+ addAddonQuoteChange({
22642
+ parentQuoteChangeId: parentQuoteChange.id,
22643
+ priceListId: priceList.id,
22644
+ apiHost: apiHost,
22645
+ token: token,
22646
+ quoteId: quote === null || quote === void 0 ? void 0 : quote.id,
22647
+ });
22648
+ }
22649
+ function handleDeleteQuoteChange() {
22650
+ var priceList = plan.priceLists.find(function (pl) { return pl.periodMonths === billingPeriod; });
22651
+ if (!priceList) {
22652
+ throw new Error('Price list not found');
22653
+ }
22654
+ var quoteChange = quote === null || quote === void 0 ? void 0 : quote.quoteChanges.find(function (qc) { return qc.priceList.id === priceList.id; });
22655
+ if (!quoteChange) {
22656
+ throw new Error('Quote change not found');
22657
+ }
22658
+ deleteQuoteChange({
22659
+ id: quoteChange.id,
22660
+ apiHost: apiHost,
22661
+ token: token,
22662
+ });
22663
+ }
22664
+ react.useEffect(function () {
22665
+ if (isAddingAddonQuoteChange || isDeletingQuoteChange) {
22666
+ setIsAddonPlanLoading(true);
22667
+ }
22668
+ else {
22669
+ setIsAddonPlanLoading(false);
22670
+ }
22671
+ }, [isAddingAddonQuoteChange, isDeletingQuoteChange]);
22672
+ react.useEffect(function () {
22673
+ isAdded.current = false;
22674
+ setIsAddonPlanLoading(false);
22675
+ }, [selectedPriceList]);
22676
+ return {
22677
+ isPending: isAddingAddonQuoteChange || isDeletingQuoteChange || parentQuoteChange === undefined,
22678
+ addedQuoteChange: isAdded.current,
22679
+ deleteQuoteChange: handleDeleteQuoteChange,
22680
+ addAddonQuoteChange: handleAddAddonQuoteChange,
22681
+ };
22682
+ };
22683
+
22314
22684
  var Text$a = antd.Typography.Text;
22315
22685
  var PlanFeatures = function (_a) {
22316
22686
  var _b;
@@ -22361,8 +22731,97 @@ var FeatureTitle = function (_a) {
22361
22731
  return (jsxRuntime.jsx(Text$a, __assign({ className: " ".concat(isFeatureGroup ? 'bunny-text-slate-500 bunny-font-medium bunny-pt-4' : ''), style: __assign({}, (isFeatureGroup ? { fontSize: '11px' } : {})) }, { children: isFeatureGroup ? (_b = feature === null || feature === void 0 ? void 0 : feature.name) === null || _b === void 0 ? void 0 : _b.toUpperCase() : feature === null || feature === void 0 ? void 0 : feature.name })));
22362
22732
  };
22363
22733
 
22734
+ var showErrorNotification = common.useErrorNotification();
22735
+ var PlanAddonsCard = function (_a) {
22736
+ var selectedPriceList = _a.selectedPriceList, subscriptions = _a.subscriptions, addonPlans = _a.addonPlans, selectedProduct = _a.selectedProduct, priceListChangeOptions = _a.priceListChangeOptions, selectedBillingPeriod = _a.selectedBillingPeriod;
22737
+ var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
22738
+ var _b = react.useState(), selectedAddonPriceList = _b[0], setSelectedAddonPriceList = _b[1];
22739
+ function isAddonPlanPurchased(plan) {
22740
+ var isChangingPlans = selectedPriceList.plan.id !== (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.plan.id);
22741
+ if (isChangingPlans) {
22742
+ return false;
22743
+ }
22744
+ var currentSubscription = subscriptions.find(function (subscription) { return subscription.id === (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id); });
22745
+ var addonSubscriptionIds = currentSubscription === null || currentSubscription === void 0 ? void 0 : currentSubscription.addonSubscriptions;
22746
+ var addonSubscriptions = addonSubscriptionIds === null || addonSubscriptionIds === void 0 ? void 0 : addonSubscriptionIds.map(function (addonSubscription) {
22747
+ return subscriptions.find(function (subscription) { return subscription.id === addonSubscription.id; });
22748
+ });
22749
+ // filter out cancelled addons
22750
+ var activeAddonSubscriptions = addonSubscriptions === null || addonSubscriptions === void 0 ? void 0 : addonSubscriptions.filter(function (addonSubscription) { return (addonSubscription === null || addonSubscription === void 0 ? void 0 : addonSubscription.state) !== common.SubscriptionState.CANCELED; });
22751
+ return activeAddonSubscriptions === null || activeAddonSubscriptions === void 0 ? void 0 : activeAddonSubscriptions.some(function (addonSubscription) { return (addonSubscription === null || addonSubscription === void 0 ? void 0 : addonSubscription.plan.id) === plan.id; });
22752
+ }
22753
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-overflow-hidden" }, { children: [jsxRuntime.jsx(AddonPlanModal, { onClose: function () { return setSelectedAddonPriceList(undefined); }, selectedProduct: selectedProduct, priceList: selectedAddonPriceList }), addonPlans.length > 0 && (jsxRuntime.jsx("div", __assign({ className: "bunny-text-black bunny-pt-2 bunny-pb-4 bunny-font-bold" }, { children: "Add-on plans" }))), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col" }, { children: addonPlans.map(function (plan) {
22754
+ var isPurchased = isAddonPlanPurchased(plan);
22755
+ return (jsxRuntime.jsx(PlanAddonsCardRow, { plan: plan, selectedPriceList: selectedPriceList, setSelectedAddonPriceList: setSelectedAddonPriceList, isPurchased: isPurchased || false, selectedBillingPeriod: selectedBillingPeriod, priceListChangeOptions: priceListChangeOptions }));
22756
+ }) }))] })));
22757
+ };
22758
+ function PlanAddonsCardRow(_a) {
22759
+ var _b, _c;
22760
+ var plan = _a.plan, selectedPriceList = _a.selectedPriceList, setSelectedAddonPriceList = _a.setSelectedAddonPriceList, isPurchased = _a.isPurchased, selectedBillingPeriod = _a.selectedBillingPeriod, priceListChangeOptions = _a.priceListChangeOptions;
22761
+ var _d = react.useContext(QuoteContext), quote = _d.quote, setIsAddonPlanLoading = _d.setIsAddonPlanLoading;
22762
+ var _e = useToggleAddonPlan(quote, plan, billingPeriodConverter(selectedBillingPeriod), selectedPriceList, setIsAddonPlanLoading), isPending = _e.isPending, addedQuoteChange = _e.addedQuoteChange, addAddonQuoteChange = _e.addAddonQuoteChange, deleteQuoteChange = _e.deleteQuoteChange;
22763
+ var addonPriceListId = (_b = plan.priceLists.find(function (priceList) { return priceList.periodMonths === billingPeriodConverter(selectedBillingPeriod); })) === null || _b === void 0 ? void 0 : _b.id;
22764
+ var addonPriceList = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists.find(function (priceList) { return priceList.id === addonPriceListId; });
22765
+ var activeCharge = (_c = getActivePlanPriceData(addonPriceList, addonPriceList)) === null || _c === void 0 ? void 0 : _c.activeCharge;
22766
+ if (!addonPriceList) {
22767
+ showErrorNotification('Addon price list not found', 'Client Error');
22768
+ return null;
22769
+ }
22770
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-2 bunny-justify-between bunny-items-center bunny-w-full bunny-p-4 bunny-rounded-md bunny-border bunny-bg-white bunny-shadow bunny-mb-2" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row bunny-gap-2 bunny-items-center" }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-font-medium bunny-text-center bunny-text-orange-600", style: { fontSize: '16px' } }, { children: plan.name })), jsxRuntime.jsx(PriceListCardDescription, { description: plan.description }), jsxRuntime.jsx(PriceListCardPrice, { priceList: addonPriceList, fontSize: "16px" }), jsxRuntime.jsx(PriceListCardPriceDescription, { feature: activeCharge === null || activeCharge === void 0 ? void 0 : activeCharge.feature, priceList: addonPriceList }), jsxRuntime.jsx(antd.Button, __assign({ type: "link", onClick: function () { return setSelectedAddonPriceList(addonPriceList); } }, { children: jsxRuntime.jsx(icons.InfoCircleOutlined, {}) }))] })), jsxRuntime.jsx(antd.Switch, { id: addonPlanSwitchTestId(plan), loading: isPending, checked: addedQuoteChange || isPurchased, onChange: function (checked) {
22771
+ if (checked) {
22772
+ addAddonQuoteChange();
22773
+ }
22774
+ else {
22775
+ deleteQuoteChange();
22776
+ }
22777
+ }, disabled: isPurchased })] }), plan.id));
22778
+ }
22779
+ function AddonPlanModal(_a) {
22780
+ var onClose = _a.onClose, selectedProduct = _a.selectedProduct, priceList = _a.priceList;
22781
+ var displayPriceLists = priceList ? [priceList] : [];
22782
+ var plansToDisplay = 1;
22783
+ return (jsxRuntime.jsx(antd.Modal, __assign({ open: !!priceList, onCancel: onClose, footer: null }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-w-full", style: {
22784
+ gridTemplateColumns: "minmax(auto, 200px) repeat(".concat(plansToDisplay, ", minmax(200px, 1fr))"),
22785
+ } }, { children: [jsxRuntime.jsx(PlanPickerGridCell, { noBorder: true }), priceList && (jsxRuntime.jsx(PriceListCard, { isSelected: true, priceList: priceList, noBorder: true, hideButton: true })), (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.everythingInPlus) ? (jsxRuntime.jsx(EverythingPlanFeatures, { displayPriceLists: displayPriceLists, plansToDisplay: 1, selectedProduct: selectedProduct, hideBorder: true })) : (jsxRuntime.jsx(PlanFeatures, { displayPriceLists: displayPriceLists, plansToDisplay: 1, selectedProduct: selectedProduct }))] })) })));
22786
+ }
22787
+
22788
+ var ADDON_PLANS_QUERY = function () { return "\n query PriceList($id: ID!) {\n priceList (id: $id) {\n addonPlans {\n addon\n basePrice\n code\n contactUsLabel\n contactUsUrl\n description\n id\n isVisible\n name\n position\n pricingDescription\n pricingStyle\n productId\n selfServiceBuy\n selfServiceCancel\n selfServiceRenew\n priceLists {\n id\n periodMonths\n showPriceAsMonthly\n monthlyBasePrice\n basePrice\n currencyId\n plan {\n pricingStyle\n }\n }\n planFeatures {\n featureId\n value\n feature {\n name\n }\n }\n }\n }\n }\n"; };
22789
+ var getAddonPlans = function (_a) {
22790
+ var token = _a.token, id = _a.id, apiHost = _a.apiHost;
22791
+ return __awaiter(void 0, void 0, void 0, function () {
22792
+ var response;
22793
+ var _b;
22794
+ return __generator(this, function (_c) {
22795
+ switch (_c.label) {
22796
+ case 0: return [4 /*yield*/, gqlRequest({
22797
+ query: ADDON_PLANS_QUERY(),
22798
+ token: token,
22799
+ vars: { id: id },
22800
+ apiHost: apiHost,
22801
+ })];
22802
+ case 1:
22803
+ response = _c.sent();
22804
+ return [2 /*return*/, (_b = response === null || response === void 0 ? void 0 : response.priceList) === null || _b === void 0 ? void 0 : _b.addonPlans];
22805
+ }
22806
+ });
22807
+ });
22808
+ };
22809
+
22364
22810
  var PriceListGridDesktop = function (_a) {
22365
- var availablePriceLists = _a.availablePriceLists, onChangePriceList = _a.onChangePriceList, priceListChangeOptions = _a.priceListChangeOptions, priceListStart = _a.priceListStart, selectedPriceList = _a.selectedPriceList, selectedProduct = _a.selectedProduct, setPriceListStart = _a.setPriceListStart, subscriptions = _a.subscriptions, trialRemainingDays = _a.trialRemainingDays;
22811
+ var availablePriceLists = _a.availablePriceLists, priceListChangeOptions = _a.priceListChangeOptions, priceListStart = _a.priceListStart, selectedPriceList = _a.selectedPriceList, selectedProduct = _a.selectedProduct, setPriceListStart = _a.setPriceListStart, subscriptions = _a.subscriptions, trialRemainingDays = _a.trialRemainingDays, selectedBillingPeriod = _a.selectedBillingPeriod, onClickPriceListCard = _a.onClickPriceListCard;
22812
+ var token = useToken();
22813
+ var apiHost = react.useContext(BunnyContext).apiHost;
22814
+ var addonPlans = reactQuery.useQuery({
22815
+ queryKey: ['addonPlans', selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id],
22816
+ queryFn: function () {
22817
+ if (!(selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id)) {
22818
+ throw new Error('Selected price list ID is required');
22819
+ }
22820
+ var addonPlans = getAddonPlans({ id: selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id, token: token, apiHost: apiHost });
22821
+ return addonPlans;
22822
+ },
22823
+ enabled: !!(selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id),
22824
+ }).data;
22366
22825
  var displayPriceLists = react.useMemo(function () {
22367
22826
  return getAvailablePlansAndPriceLists({
22368
22827
  availablePriceLists: availablePriceLists,
@@ -22376,17 +22835,17 @@ var PriceListGridDesktop = function (_a) {
22376
22835
  var hasFeatureAddons = displayPriceLists.some(function (priceList) {
22377
22836
  return priceList.charges.some(function (charge) { return charge.featureAddon; });
22378
22837
  });
22379
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-relative bunny-flex bunny-flex-col bunny-rounded-md bunny-shadow bunny-overflow-hidden bunny-bg-white" }, { children: [jsxRuntime.jsx(NextPriceListButton, { availablePriceLists: availablePriceLists, numberOfPlansToDisplay: plansToDisplay, priceListStart: priceListStart, setPriceListStart: setPriceListStart }), jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-w-full", style: {
22380
- gridTemplateColumns: everythingInPlus
22381
- ? "repeat(".concat(plansToDisplay, ", minmax(120px, 1fr))")
22382
- : "minmax(auto, 400px) repeat(".concat(plansToDisplay, ", minmax(120px, 1fr))"),
22383
- } }, { children: [!everythingInPlus && jsxRuntime.jsx(PlanPickerGridCell, { noBorder: true }), __spreadArray([], Array(plansToDisplay), true).map(function (_, index) {
22384
- var priceList = displayPriceLists[index];
22385
- var doesPrevPriceListExist = displayPriceLists[index - 1];
22386
- if (!priceList)
22387
- return jsxRuntime.jsx(PlanPickerGridCell, { noBorder: !Boolean(doesPrevPriceListExist) }, index);
22388
- return (jsxRuntime.jsx(PriceListCard, { isSelected: priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id), onClick: onChangePriceList, priceList: priceList, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays }, index));
22389
- }), (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.everythingInPlus) ? (jsxRuntime.jsx(EverythingPlanFeatures, { displayPriceLists: displayPriceLists, plansToDisplay: plansToDisplay, selectedProduct: selectedProduct })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(PlanFeatures, { displayPriceLists: displayPriceLists, plansToDisplay: plansToDisplay, selectedProduct: selectedProduct }), hasFeatureAddons && (jsxRuntime.jsx(PlanFeatureAddons, { displayPriceLists: displayPriceLists, plansToDisplay: plansToDisplay }))] }))] }))] })));
22838
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-relative bunny-flex bunny-flex-col bunny-rounded-md bunny-shadow bunny-overflow-hidden bunny-bg-white" }, { children: [jsxRuntime.jsx(NextPriceListButton, { availablePriceLists: availablePriceLists, numberOfPlansToDisplay: plansToDisplay, priceListStart: priceListStart, setPriceListStart: setPriceListStart }), jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-w-full", style: {
22839
+ gridTemplateColumns: everythingInPlus
22840
+ ? "repeat(".concat(plansToDisplay, ", minmax(120px, 1fr))")
22841
+ : "minmax(auto, 400px) repeat(".concat(plansToDisplay, ", minmax(120px, 1fr))"),
22842
+ } }, { children: [!everythingInPlus && jsxRuntime.jsx(PlanPickerGridCell, { noBorder: true }), __spreadArray([], Array(plansToDisplay), true).map(function (_, index) {
22843
+ var priceList = displayPriceLists[index];
22844
+ var doesPrevPriceListExist = displayPriceLists[index - 1];
22845
+ if (!priceList)
22846
+ return jsxRuntime.jsx(PlanPickerGridCell, { noBorder: !Boolean(doesPrevPriceListExist) }, index);
22847
+ return (jsxRuntime.jsx(PriceListCard, { onClickPriceListCard: onClickPriceListCard, isSelected: priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id), priceList: priceList, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays }, index));
22848
+ }), (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.everythingInPlus) ? (jsxRuntime.jsx(EverythingPlanFeatures, { displayPriceLists: displayPriceLists, plansToDisplay: plansToDisplay, selectedProduct: selectedProduct })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(PlanFeatures, { displayPriceLists: displayPriceLists, plansToDisplay: plansToDisplay, selectedProduct: selectedProduct }), hasFeatureAddons && (jsxRuntime.jsx(PlanFeatureAddons, { displayPriceLists: displayPriceLists, plansToDisplay: plansToDisplay }))] }))] }))] })), selectedPriceList && addonPlans && selectedBillingPeriod ? (jsxRuntime.jsx(PlanAddonsCard, { selectedPriceList: selectedPriceList, subscriptions: subscriptions, addonPlans: addonPlans, selectedProduct: selectedProduct, priceListChangeOptions: priceListChangeOptions, selectedBillingPeriod: selectedBillingPeriod })) : null] })));
22390
22849
  };
22391
22850
 
22392
22851
  var Text$9 = antd.Typography.Text;
@@ -22400,42 +22859,46 @@ var PriceListCardFeature = function (_a) {
22400
22859
 
22401
22860
  var PriceListGridMobile = function (_a) {
22402
22861
  var _b, _c, _d, _e;
22403
- var availablePriceLists = _a.availablePriceLists, onChangePriceList = _a.onChangePriceList, priceListChangeOptions = _a.priceListChangeOptions, selectedPriceList = _a.selectedPriceList, selectedProduct = _a.selectedProduct, subscriptions = _a.subscriptions, trialRemainingDays = _a.trialRemainingDays;
22862
+ var availablePriceLists = _a.availablePriceLists, priceListChangeOptions = _a.priceListChangeOptions, selectedPriceList = _a.selectedPriceList, selectedProduct = _a.selectedProduct, subscriptions = _a.subscriptions, trialRemainingDays = _a.trialRemainingDays, onClickPriceListCard = _a.onClickPriceListCard;
22404
22863
  var everythingInPlus = selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.everythingInPlus;
22405
22864
  var prevPriceListIndex = availablePriceLists.findIndex(function (priceList) { return priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id); });
22406
22865
  var prevPriceListId = (_b = availablePriceLists[prevPriceListIndex - 1]) === null || _b === void 0 ? void 0 : _b.id;
22407
22866
  var prevPriceList = (_c = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _c === void 0 ? void 0 : _c.find(function (priceList) { return priceList.id === prevPriceListId; });
22408
22867
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-gap-4 bunny-overflow-auto bunny-shadow-padding-xb", style: { flexShrink: 0 } }, { children: availablePriceLists.map(function (priceList, index) {
22409
- return (jsxRuntime.jsx(PriceListCard, { isSelected: priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id), onClick: onChangePriceList, priceList: priceList, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays }, index));
22868
+ return (jsxRuntime.jsx(PriceListCard, { isSelected: priceList.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.id), priceList: priceList, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays, onClickPriceListCard: onClickPriceListCard }, index));
22410
22869
  }) })), jsxRuntime.jsx("div", __assign({ className: "bunny-text-slate-500 bunny-pt-5 bunny-pb-4 bunny-shadow-padding-x" }, { children: everythingInPlus && prevPriceList
22411
22870
  ? everythingInPlusString({ priceList: prevPriceList })
22412
- : "Features" })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-4 bunny-overflow-auto bunny-shadow-padding-x" }, { children: (_e = (_d = selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.plan) === null || _d === void 0 ? void 0 : _d.planFeatures) === null || _e === void 0 ? void 0 : _e.map(function (planFeature, index) { return (jsxRuntime.jsx(PriceListCardFeature, { planFeature: planFeature, index: index }, index)); }) }))] }));
22871
+ : 'Features' })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-4 bunny-overflow-auto bunny-shadow-padding-x" }, { children: (_e = (_d = selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.plan) === null || _d === void 0 ? void 0 : _d.planFeatures) === null || _e === void 0 ? void 0 : _e.map(function (planFeature, index) { return (jsxRuntime.jsx(PriceListCardFeature, { planFeature: planFeature, index: index }, index)); }) }))] }));
22413
22872
  };
22414
22873
 
22415
22874
  var PriceListGrid = function (_a) {
22416
22875
  var _b, _c;
22417
- var availablePriceLists = _a.availablePriceLists, onChangePriceList = _a.onChangePriceList, priceListChangeOptions = _a.priceListChangeOptions, priceListStart = _a.priceListStart, selectedPriceList = _a.selectedPriceList, selectedProduct = _a.selectedProduct, setPriceListStart = _a.setPriceListStart, subscriptions = _a.subscriptions, upgradingSubscriptionState = _a.upgradingSubscriptionState;
22876
+ var availablePriceLists = _a.availablePriceLists, priceListChangeOptions = _a.priceListChangeOptions, priceListStart = _a.priceListStart, selectedPriceList = _a.selectedPriceList, selectedProduct = _a.selectedProduct, setPriceListStart = _a.setPriceListStart, subscriptions = _a.subscriptions, upgradingSubscriptionState = _a.upgradingSubscriptionState, selectedBillingPeriod = _a.selectedBillingPeriod, onClickPriceListCard = _a.onClickPriceListCard;
22418
22877
  // Hooks
22419
22878
  var isMobile = common.useIsMobile();
22420
22879
  // Derived state
22421
22880
  var currentPriceList = (_b = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _b === void 0 ? void 0 : _b.find(function (priceList) { var _a; return priceList.id === ((_a = upgradingSubscriptionState === null || upgradingSubscriptionState === void 0 ? void 0 : upgradingSubscriptionState.plan) === null || _a === void 0 ? void 0 : _a.id); });
22422
22881
  var trialRemainingDays = dayjs((_c = currentPriceList === null || currentPriceList === void 0 ? void 0 : currentPriceList.plan) === null || _c === void 0 ? void 0 : _c.trialEndDate).diff(dayjs(), 'days');
22423
- return isMobile ? (jsxRuntime.jsx(PriceListGridMobile, { availablePriceLists: availablePriceLists, onChangePriceList: onChangePriceList, priceListChangeOptions: priceListChangeOptions, selectedPriceList: selectedPriceList, selectedProduct: selectedProduct, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays })) : (jsxRuntime.jsx(PriceListGridDesktop, { availablePriceLists: availablePriceLists, onChangePriceList: onChangePriceList, priceListChangeOptions: priceListChangeOptions, priceListStart: priceListStart, selectedPriceList: selectedPriceList, selectedProduct: selectedProduct, setPriceListStart: setPriceListStart, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays }));
22882
+ return isMobile ? (jsxRuntime.jsx(PriceListGridMobile, { availablePriceLists: availablePriceLists, priceListChangeOptions: priceListChangeOptions, selectedPriceList: selectedPriceList, selectedProduct: selectedProduct, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays,
22883
+ // TODO: add selectedBillingPeriod={selectedBillingPeriod} here too (ignore for now, mobile won't ever show this currently)
22884
+ onClickPriceListCard: onClickPriceListCard })) : (jsxRuntime.jsx(PriceListGridDesktop, { availablePriceLists: availablePriceLists, priceListChangeOptions: priceListChangeOptions, priceListStart: priceListStart, selectedPriceList: selectedPriceList, selectedProduct: selectedProduct, setPriceListStart: setPriceListStart, subscriptions: subscriptions, trialRemainingDays: trialRemainingDays, selectedBillingPeriod: selectedBillingPeriod, onClickPriceListCard: onClickPriceListCard }));
22424
22885
  };
22425
22886
 
22426
22887
  var createAvailableBillingPeriods = function (priceLists, selectedProduct) {
22427
22888
  return priceLists === null || priceLists === void 0 ? void 0 : priceLists.filter(function (priceList) { return priceList.product.id === (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id); }).map(function (priceList) { return priceList.periodMonths; }).sort(function (a, b) { return a - b; }).filter(function (currentValue, index, array) { return index === array.indexOf(currentValue); });
22428
22889
  };
22890
+ var showInfoNotification = common.useInfoNotification();
22429
22891
  var PriceListSelector = function (_a) {
22430
- var arePlanChangeOptionsLoading = _a.arePlanChangeOptionsLoading, areSubscriptionsLoading = _a.areSubscriptionsLoading, onChangePriceList = _a.onChangePriceList, priceListChangeOptions = _a.priceListChangeOptions, selectedPriceList = _a.selectedPriceList, subscriptions = _a.subscriptions;
22892
+ var _b;
22893
+ var arePlanChangeOptionsLoading = _a.arePlanChangeOptionsLoading, areSubscriptionsLoading = _a.areSubscriptionsLoading, priceListChangeOptions = _a.priceListChangeOptions, subscriptions = _a.subscriptions;
22431
22894
  // Context
22432
22895
  var isInPreviewMode = react.useContext(SubscriptionsContext).isInPreviewMode;
22433
- var _b = react.useContext(QuotePreviewContext), quotePreviewData = _b.quotePreviewData, setQuotePreviewData = _b.setQuotePreviewData;
22896
+ var _c = react.useContext(QuoteContext), selectedPriceList = _c.selectedPriceList, onChangeSelectedPriceList = _c.onChangeSelectedPriceList, onClearQuote = _c.onClearQuote;
22434
22897
  var upgradingSubscription = react.useContext(SubscriptionsContext).upgradingSubscription;
22435
22898
  // Local state
22436
- var _c = react.useState(), selectedProduct = _c[0], setSelectedProduct = _c[1];
22437
- var _d = react.useState(), selectedBillingPeriod = _d[0], setSelectedBillingPeriod = _d[1];
22438
- var _e = react.useState(0), priceListStart = _e[0], setPriceListStart = _e[1];
22899
+ var _d = react.useState(), selectedProduct = _d[0], setSelectedProduct = _d[1];
22900
+ var _e = react.useState(), selectedBillingPeriod = _e[0], setSelectedBillingPeriod = _e[1];
22901
+ var _f = react.useState(0), priceListStart = _f[0], setPriceListStart = _f[1];
22439
22902
  // Derived state
22440
22903
  var availableBillingPeriods = react.useMemo(function () { return createAvailableBillingPeriods(priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists, selectedProduct); }, [priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists, selectedProduct]);
22441
22904
  var availablePriceLists = react.useMemo(function () {
@@ -22443,40 +22906,36 @@ var PriceListSelector = function (_a) {
22443
22906
  return (((_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _a === void 0 ? void 0 : _a.filter(function (priceList) {
22444
22907
  return periodMonthsConverter(priceList.periodMonths) === selectedBillingPeriod &&
22445
22908
  priceList.product.id === (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id);
22446
- })) || []);
22909
+ }).filter(function (priceList) { return priceList.plan.addon !== true; })) || []);
22447
22910
  }, [priceListChangeOptions, selectedBillingPeriod, selectedProduct]);
22448
22911
  // Handlers
22449
22912
  var onChangeBillingPeriod = react.useCallback(function (billingPeriod) {
22450
- var _a, _b;
22913
+ var _a;
22451
22914
  setSelectedBillingPeriod(billingPeriod);
22452
22915
  setPriceListStart(0);
22453
- if ((quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList) &&
22454
- billingPeriod !== periodMonthsConverter((_a = quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList) === null || _a === void 0 ? void 0 : _a.periodMonths)) {
22455
- var availablePriceLists_1 = ((_b = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _b === void 0 ? void 0 : _b.filter(function (priceList) { return periodMonthsConverter(priceList.periodMonths) === billingPeriod; })) || [];
22916
+ if (selectedPriceList &&
22917
+ billingPeriod !== periodMonthsConverter(selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.periodMonths)) {
22918
+ var availablePriceLists_1 = ((_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _a === void 0 ? void 0 : _a.filter(function (priceList) { return periodMonthsConverter(priceList.periodMonths) === billingPeriod; })) || [];
22456
22919
  var newSelectedPriceList = availablePriceLists_1.find(function (priceList) {
22457
- var _a;
22458
22920
  return periodMonthsConverter(priceList.periodMonths) === billingPeriod &&
22459
- priceList.plan.id === ((_a = quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList) === null || _a === void 0 ? void 0 : _a.plan.id) &&
22921
+ priceList.plan.id === (selectedPriceList === null || selectedPriceList === void 0 ? void 0 : selectedPriceList.plan.id) &&
22460
22922
  !isPriceListDisabled({
22461
22923
  priceList: priceList,
22462
22924
  upgradingSubscription: upgradingSubscription,
22463
- canPurchaseFeatureAddons: priceListHasUnpurchasedFeatureAddons(quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList, upgradingSubscription),
22464
22925
  });
22465
22926
  });
22466
22927
  var isPriceListCurrentSubscription = newSelectedPriceList && (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList.id) === newSelectedPriceList.id;
22467
22928
  if (newSelectedPriceList && !isPriceListCurrentSubscription) {
22468
- setQuotePreviewData({
22469
- priceList: newSelectedPriceList,
22470
- quantity: calculateNewQuantity(newSelectedPriceList, quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.quantity),
22471
- });
22929
+ onChangeSelectedPriceList(newSelectedPriceList);
22472
22930
  }
22473
22931
  else if (isPriceListCurrentSubscription) {
22474
- setQuotePreviewData({
22475
- quantity: quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.quantity,
22476
- });
22932
+ onChangeSelectedPriceList(newSelectedPriceList);
22933
+ }
22934
+ else {
22935
+ onClearQuote();
22477
22936
  }
22478
22937
  }
22479
- }, [quotePreviewData, priceListChangeOptions, upgradingSubscription, setQuotePreviewData]);
22938
+ }, [selectedPriceList, priceListChangeOptions, upgradingSubscription]);
22480
22939
  var onChangeProduct = react.useCallback(function (product) {
22481
22940
  var newAvailableBillingPeriods = createAvailableBillingPeriods(priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists, product);
22482
22941
  if (!(newAvailableBillingPeriods === null || newAvailableBillingPeriods === void 0 ? void 0 : newAvailableBillingPeriods.includes(billingPeriodConverter(selectedBillingPeriod)))) {
@@ -22485,8 +22944,19 @@ var PriceListSelector = function (_a) {
22485
22944
  setSelectedProduct(product);
22486
22945
  }, [priceListChangeOptions, selectedBillingPeriod, onChangeBillingPeriod]);
22487
22946
  // Default settings
22947
+ var initialProduct = (_b = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.products) === null || _b === void 0 ? void 0 : _b[0];
22948
+ var initialBillingPeriod = react.useMemo(function () {
22949
+ var initialAvailableBillingPeriods = createAvailableBillingPeriods(priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists, initialProduct);
22950
+ if ((upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList) &&
22951
+ (initialAvailableBillingPeriods === null || initialAvailableBillingPeriods === void 0 ? void 0 : initialAvailableBillingPeriods.includes(billingPeriodConverter(periodMonthsConverter(upgradingSubscription.priceList.periodMonths))))) {
22952
+ return periodMonthsConverter(upgradingSubscription.priceList.periodMonths);
22953
+ }
22954
+ else {
22955
+ return periodMonthsConverter((initialAvailableBillingPeriods === null || initialAvailableBillingPeriods === void 0 ? void 0 : initialAvailableBillingPeriods[0]) || 1);
22956
+ }
22957
+ }, [upgradingSubscription]);
22958
+ // Set initial billing period and initial product
22488
22959
  react.useEffect(function () {
22489
- var _a, _b, _c, _d;
22490
22960
  if (arePlanChangeOptionsLoading ||
22491
22961
  areSubscriptionsLoading ||
22492
22962
  !priceListChangeOptions ||
@@ -22494,53 +22964,47 @@ var PriceListSelector = function (_a) {
22494
22964
  selectedProduct ||
22495
22965
  selectedPriceList)
22496
22966
  return;
22497
- var initialProduct = (_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.products) === null || _a === void 0 ? void 0 : _a[0];
22498
- var initialAvailableBillingPeriods = createAvailableBillingPeriods(priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists, initialProduct);
22499
- var initialBillingPeriod;
22500
- if ((upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList) &&
22501
- (initialAvailableBillingPeriods === null || initialAvailableBillingPeriods === void 0 ? void 0 : initialAvailableBillingPeriods.includes(billingPeriodConverter(periodMonthsConverter(upgradingSubscription.priceList.periodMonths))))) {
22502
- initialBillingPeriod = periodMonthsConverter(upgradingSubscription.priceList.periodMonths);
22503
- }
22504
- else {
22505
- initialBillingPeriod = periodMonthsConverter((initialAvailableBillingPeriods === null || initialAvailableBillingPeriods === void 0 ? void 0 : initialAvailableBillingPeriods[0]) || 1);
22506
- }
22507
- var initialAvailablePriceLists = ((_b = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _b === void 0 ? void 0 : _b.filter(function (priceList) {
22508
- return periodMonthsConverter(priceList.periodMonths) === initialBillingPeriod &&
22509
- priceList.product.id === (initialProduct === null || initialProduct === void 0 ? void 0 : initialProduct.id);
22510
- })) || [];
22511
- var initialPriceList;
22512
- var initialQuantity = (_d = (_c = upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.charges) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.quantity;
22513
- if (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList) {
22514
- initialPriceList = initialAvailablePriceLists.find(function (priceList) { return priceList.id === upgradingSubscription.priceList.id; });
22515
- }
22516
22967
  if (initialBillingPeriod)
22517
22968
  setSelectedBillingPeriod(initialBillingPeriod);
22518
22969
  if (initialProduct)
22519
22970
  setSelectedProduct(initialProduct);
22520
- if (initialPriceList &&
22521
- !isInPreviewMode &&
22522
- !isPriceListDisabled({
22523
- priceList: initialPriceList,
22524
- upgradingSubscription: upgradingSubscription,
22525
- canPurchaseFeatureAddons: priceListHasUnpurchasedFeatureAddons(initialPriceList, upgradingSubscription),
22526
- })) {
22527
- setQuotePreviewData({
22528
- priceList: initialPriceList,
22529
- quantity: calculateNewQuantity(initialPriceList, initialQuantity),
22530
- });
22531
- }
22532
22971
  }, [
22972
+ setSelectedBillingPeriod,
22973
+ setSelectedProduct,
22974
+ selectedBillingPeriod,
22533
22975
  arePlanChangeOptionsLoading,
22534
22976
  areSubscriptionsLoading,
22535
- isInPreviewMode,
22536
22977
  priceListChangeOptions,
22537
- selectedBillingPeriod,
22538
22978
  selectedPriceList,
22539
22979
  selectedProduct,
22540
- setQuotePreviewData,
22541
- upgradingSubscription,
22542
22980
  ]);
22543
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(BillingPeriodSelector, { availableBillingPeriods: availableBillingPeriods, onChangeBillingPeriod: onChangeBillingPeriod, products: priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.products, selectedBillingPeriod: selectedBillingPeriod, selectedProduct: selectedProduct, onChangeProduct: onChangeProduct }), jsxRuntime.jsx(PriceListGrid, { availablePriceLists: availablePriceLists, onChangePriceList: onChangePriceList, priceListChangeOptions: priceListChangeOptions, priceListStart: priceListStart, selectedPriceList: selectedPriceList, selectedProduct: selectedProduct, setPriceListStart: setPriceListStart, subscriptions: subscriptions, upgradingSubscriptionState: upgradingSubscription })] }));
22981
+ // Set initial price list and initial quantity in quote preview data
22982
+ // Will also set the initial price list and quantity if the billing period is changed
22983
+ react.useEffect(function () {
22984
+ var _a;
22985
+ var initialAvailablePriceLists = ((_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _a === void 0 ? void 0 : _a.filter(function (priceList) {
22986
+ return periodMonthsConverter(priceList.periodMonths) === initialBillingPeriod &&
22987
+ priceList.product.id === (initialProduct === null || initialProduct === void 0 ? void 0 : initialProduct.id);
22988
+ })) || [];
22989
+ var initialPriceList = (upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.priceList)
22990
+ ? initialAvailablePriceLists.find(function (priceList) { return priceList.id === upgradingSubscription.priceList.id; })
22991
+ : undefined;
22992
+ if (initialPriceList &&
22993
+ !isInPreviewMode &&
22994
+ !isPriceListDisabled({
22995
+ priceList: initialPriceList,
22996
+ upgradingSubscription: upgradingSubscription,
22997
+ }) &&
22998
+ !selectedPriceList) {
22999
+ onChangeSelectedPriceList(initialPriceList);
23000
+ }
23001
+ }, [isInPreviewMode, subscriptions, upgradingSubscription, selectedBillingPeriod]);
23002
+ var onClickPriceListCard = react.useCallback(function (selectedPriceList) {
23003
+ if (isInPreviewMode)
23004
+ return showInfoNotification('You are in preview mode');
23005
+ return onChangeSelectedPriceList(selectedPriceList);
23006
+ }, [isInPreviewMode, showInfoNotification, onChangeSelectedPriceList]);
23007
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(BillingPeriodSelector, { availableBillingPeriods: availableBillingPeriods, onChangeBillingPeriod: onChangeBillingPeriod, products: priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.products, selectedBillingPeriod: selectedBillingPeriod, selectedProduct: selectedProduct, onChangeProduct: onChangeProduct }), jsxRuntime.jsx(PriceListGrid, { availablePriceLists: availablePriceLists, priceListChangeOptions: priceListChangeOptions, priceListStart: priceListStart, selectedPriceList: selectedPriceList, selectedProduct: selectedProduct, setPriceListStart: setPriceListStart, subscriptions: subscriptions, upgradingSubscriptionState: upgradingSubscription, selectedBillingPeriod: selectedBillingPeriod, onClickPriceListCard: onClickPriceListCard })] }));
22544
23008
  };
22545
23009
 
22546
23010
  var PlanPicker = function () {
@@ -22549,18 +23013,15 @@ var PlanPicker = function () {
22549
23013
  var token = useToken();
22550
23014
  var apiHost = react.useContext(BunnyContext).apiHost;
22551
23015
  var _b = react.useContext(SubscriptionsContext), isInPreviewMode = _b.isInPreviewMode, productId = _b.productId, upgradingSubscription = _b.upgradingSubscription;
22552
- var _c = react.useContext(QuotePreviewContext), quotePreviewData = _c.quotePreviewData, setQuotePreviewData = _c.setQuotePreviewData;
22553
- // Hooks
22554
- var showInfoNotification = common.useInfoNotification();
22555
23016
  // Queries
22556
- var _d = reactQuery.useQuery({
23017
+ var _c = reactQuery.useQuery({
22557
23018
  queryKey: common.QueryKeyFactory.default.createTableKey({
22558
23019
  pluralType: 'subscriptions',
22559
23020
  token: token,
22560
23021
  }),
22561
23022
  queryFn: function () { return getSubscriptions({ isInPreviewMode: isInPreviewMode, token: token, apiHost: apiHost }); },
22562
- }), subscriptions = _d.data, areSubscriptionsLoading = _d.isLoading;
22563
- var _e = reactQuery.useQuery({
23023
+ }), subscriptions = _c.data, areSubscriptionsLoading = _c.isLoading;
23024
+ var _d = reactQuery.useQuery({
22564
23025
  queryKey: common.QueryKeyFactory.default.planChangeOptionsKey({
22565
23026
  subscriptionId: upgradingSubscription === null || upgradingSubscription === void 0 ? void 0 : upgradingSubscription.id,
22566
23027
  token: token,
@@ -22575,25 +23036,8 @@ var PlanPicker = function () {
22575
23036
  });
22576
23037
  },
22577
23038
  enabled: !areSubscriptionsLoading,
22578
- }), priceListChangeOptions = _e.data, arePlanChangeOptionsLoading = _e.isLoading;
22579
- // Handlers
22580
- var onChangePriceList = react.useCallback(function (selectedPriceList) {
22581
- if (isInPreviewMode)
22582
- return showInfoNotification('You are in preview mode');
22583
- return setQuotePreviewData({
22584
- priceList: selectedPriceList,
22585
- quantity: calculateNewQuantity(selectedPriceList, quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.quantity),
22586
- });
22587
- }, [isInPreviewMode, setQuotePreviewData, showInfoNotification]);
22588
- // Reset quote preview data when the plan picker is unmounted
22589
- react.useEffect(function () {
22590
- return function () {
22591
- setQuotePreviewData({});
22592
- };
22593
- }, [setQuotePreviewData]);
22594
- if (((_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _a === void 0 ? void 0 : _a.length) === 0)
22595
- return jsxRuntime.jsx(ErrorView, { message: "There are no plans available" });
22596
- return (jsxRuntime.jsx(PriceListSelector, { arePlanChangeOptionsLoading: arePlanChangeOptionsLoading, areSubscriptionsLoading: areSubscriptionsLoading, onChangePriceList: onChangePriceList, priceListChangeOptions: priceListChangeOptions, selectedPriceList: quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList, subscriptions: subscriptions }));
23039
+ }), priceListChangeOptions = _d.data, arePlanChangeOptionsLoading = _d.isLoading;
23040
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: ((_a = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _a === void 0 ? void 0 : _a.length) === 0 ? (jsxRuntime.jsx(ErrorView, { message: "There are no plans available" })) : (jsxRuntime.jsx(PriceListSelector, { arePlanChangeOptionsLoading: arePlanChangeOptionsLoading, areSubscriptionsLoading: areSubscriptionsLoading, priceListChangeOptions: priceListChangeOptions, subscriptions: subscriptions })) }));
22597
23041
  };
22598
23042
 
22599
23043
  var Text$8 = antd.Typography.Text;
@@ -22609,47 +23053,22 @@ var PlanManager = function (_a) {
22609
23053
  // Context
22610
23054
  var token = useToken();
22611
23055
  var apiHost = react.useContext(BunnyContext).apiHost;
22612
- var _b = react.useContext(SubscriptionsContext), isInPreviewMode = _b.isInPreviewMode, upgradingSubscription = _b.upgradingSubscription, setUpgradingSubscription = _b.setUpgradingSubscription, subscriptionUpgradeId = _b.subscriptionUpgradeId, className = _b.className;
22613
- var _c = react.useContext(QuotePreviewContext), quotePreviewData = _c.quotePreviewData, setQuotePreviewData = _c.setQuotePreviewData;
23056
+ var _b = react.useContext(SubscriptionsContext), isInPreviewMode = _b.isInPreviewMode, className = _b.className;
23057
+ var _c = react.useContext(QuoteContext), onClearQuote = _c.onClearQuote, selectedPriceList = _c.selectedPriceList;
22614
23058
  // Local state
22615
- var _d = react.useState(), editingQuoteData = _d[0], setEditingQuoteData = _d[1];
22616
- var _e = react.useState(false), payModalVisible = _e[0], setPayModalVisible = _e[1];
22617
- var _f = react.useState(false), isSticky = _f[0], setIsSticky = _f[1];
23059
+ var _d = react.useState(false), isSticky = _d[0], setIsSticky = _d[1];
22618
23060
  var stickyRef = react.useRef(null);
22619
23061
  // Hooks
22620
- var queryClient = reactQuery.useQueryClient();
22621
- var showSuccessNotification = common.useSuccessNotification();
22622
23062
  var showInfoNotification = common.useInfoNotification();
22623
- var defaultPaymentMethod = usePaymentMethod({
22624
- token: token,
22625
- apiHost: apiHost,
22626
- }).defaultPaymentMethod;
22627
23063
  // Queries
22628
- var _g = reactQuery.useQuery({
23064
+ var subscriptionsAreLoading = reactQuery.useQuery({
22629
23065
  queryKey: common.QueryKeyFactory.default.createTableKey({
22630
23066
  pluralType: 'subscriptions',
22631
23067
  token: token,
22632
23068
  }),
22633
23069
  queryFn: function () { return getSubscriptions({ isInPreviewMode: isInPreviewMode, token: token, apiHost: apiHost }); },
22634
23070
  enabled: false,
22635
- }), subscriptions = _g.data, subscriptionsAreLoading = _g.isLoading;
22636
- var quote = reactQuery.useQuery({
22637
- queryKey: common.QueryKeyFactory.default.createObjectKey({
22638
- id: editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id,
22639
- objectName: 'editingQuote',
22640
- token: token,
22641
- }),
22642
- queryFn: function () {
22643
- return (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id) ? getQuote({ token: token, id: editingQuoteData.id, apiHost: apiHost }) : undefined;
22644
- },
22645
- enabled: Boolean(editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id),
22646
- }).data;
22647
- react.useEffect(function () {
22648
- if (subscriptionUpgradeId && !upgradingSubscription) {
22649
- var subscription = subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.find(function (subscription) { return subscription.id === subscriptionUpgradeId; });
22650
- setUpgradingSubscription(subscription);
22651
- }
22652
- }, [setUpgradingSubscription, subscriptionUpgradeId, subscriptions, upgradingSubscription]);
23071
+ }).isLoading;
22653
23072
  react.useEffect(function () {
22654
23073
  var observer = new IntersectionObserver(function (_a) {
22655
23074
  var entry = _a[0];
@@ -22669,41 +23088,14 @@ var PlanManager = function (_a) {
22669
23088
  observer.unobserve(el);
22670
23089
  };
22671
23090
  }, []);
22672
- function handleSetEditingQuoteData(quoteId, isTrial) {
22673
- setEditingQuoteData({
22674
- id: quoteId || (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id) || '',
22675
- isTrial: isTrial || (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.isTrial) || false,
22676
- });
22677
- }
22678
- // Handlers
22679
- var onSuccess = function () {
22680
- setEditingQuoteData(undefined);
22681
- queryClient.invalidateQueries({
22682
- queryKey: common.QueryKeyFactory.default.transactionsKey({ token: token }),
22683
- });
22684
- queryClient.invalidateQueries({
22685
- queryKey: common.QueryKeyFactory.default.createTableKey({
22686
- pluralType: 'subscriptions',
22687
- token: token,
22688
- }),
22689
- });
22690
- showSuccessNotification('Your plan has been updated', 'Payment successful');
22691
- setPayModalVisible(false);
22692
- };
22693
- var onCancel = function () {
22694
- setPayModalVisible(false);
22695
- };
22696
- var onFail = function (error) {
22697
- handlePortalErrors === null || handlePortalErrors === void 0 ? void 0 : handlePortalErrors(error);
22698
- };
22699
23091
  if (subscriptionsAreLoading && !isInPreviewMode)
22700
23092
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
22701
23093
  return (jsxRuntime.jsxs("div", __assign({ className: "".concat(className) }, { children: [jsxRuntime.jsx(PreviewModeAdvisary, { isInPreviewMode: isInPreviewMode }), jsxRuntime.jsx(PageTitle, { onGoBack: function () {
22702
23094
  if (isInPreviewMode)
22703
23095
  return showInfoNotification('You are in preview mode');
22704
- setQuotePreviewData(undefined);
23096
+ onClearQuote();
22705
23097
  onChangePlanCancel();
22706
- }, title: "Change plan" }), jsxRuntime.jsx(PlanPicker, {}), jsxRuntime.jsx(Checkout, { onCancel: onCancel, onSuccess: onSuccess, onFail: onFail, open: payModalVisible, quote: quote, token: token, storedPaymentMethod: defaultPaymentMethod, selectedPriceList: quotePreviewData === null || quotePreviewData === void 0 ? void 0 : quotePreviewData.priceList }), jsxRuntime.jsx("div", { ref: stickyRef }), jsxRuntime.jsx("div", __assign({ className: "bunny-sticky bunny-bottom-4 bunny-transition-[margin] bunny-duration-300 ".concat(isSticky ? 'bunny-mx-4' : 'bunny-mx-0') }, { children: jsxRuntime.jsx(PlanPickerCheckoutBarWrapper, { editingQuote: editingQuoteData, setEditingQuoteData: handleSetEditingQuoteData, handlePortalErrors: handlePortalErrors, onCheckoutSuccess: function () { return onChangePlanCancel(); } }) }))] })));
23098
+ }, title: "Change plan" }), jsxRuntime.jsx(PlanPicker, {}), jsxRuntime.jsx("div", { ref: stickyRef }), jsxRuntime.jsx("div", __assign({ className: "bunny-sticky bunny-bottom-4 bunny-transition-[margin] bunny-duration-300 ".concat(isSticky ? 'bunny-mx-4' : 'bunny-mx-0') }, { children: selectedPriceList && (jsxRuntime.jsx(PlanPickerCheckoutBar, { selectedPriceList: selectedPriceList, handlePortalErrors: handlePortalErrors, onCheckoutSuccess: function () { return onChangePlanCancel(); } })) }))] })));
22707
23099
  };
22708
23100
 
22709
23101
  var useCancelSubscription = function () {
@@ -22722,6 +23114,11 @@ var useCancelSubscription = function () {
22722
23114
  }); };
22723
23115
  };
22724
23116
 
23117
+ var AddonIndentation = function (_a) {
23118
+ var isLast = _a.isLast, indentation = _a.indentation, verticalMargin = _a.verticalMargin;
23119
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-relative", style: { width: "".concat(indentation, "px") } }, { children: [jsxRuntime.jsx("div", { className: "bunny-flex-1 bunny-bg-gray-300 bunny-w-0.5 bunny-mx-auto", style: { marginTop: verticalMargin } }), jsxRuntime.jsx("div", { className: "bunny-bg-gray-300 bunny-h-0.5 bunny-w-1/2 bunny-ml-auto" }), isLast ? (jsxRuntime.jsx("div", { className: "bunny-flex-1" })) : (jsxRuntime.jsx("div", { className: "bunny-flex-1 bunny-bg-gray-300 bunny-w-0.5 bunny-mx-auto", style: { marginBottom: verticalMargin } }))] })));
23120
+ };
23121
+
22725
23122
  var SubscriptionState;
22726
23123
  (function (SubscriptionState) {
22727
23124
  SubscriptionState["ACTIVE"] = "ACTIVE";
@@ -22854,16 +23251,20 @@ var FeatureBarChart = function (_a) {
22854
23251
  var StyledBarChart = defaultStyled(recharts.BarChart)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n .recharts-surface {\n overflow: visible;\n }\n"], ["\n .recharts-surface {\n overflow: visible;\n }\n"])));
22855
23252
  var templateObject_1$2;
22856
23253
 
22857
- var SubscriptionCardActions = function (_a) {
22858
- var _b;
22859
- var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, priceListChangeOptions = _a.priceListChangeOptions, subscription = _a.subscription;
23254
+ var usePriceListChangeOptions = function (onChangePlanClick) {
22860
23255
  var apiHost = react.useContext(BunnyContext).apiHost;
22861
23256
  var token = useToken();
22862
- var isPaymentMethodLoading = usePaymentMethod({
22863
- accountId: subscription.accountId,
22864
- token: token,
22865
- apiHost: apiHost,
22866
- }).isLoading;
23257
+ var _a = reactQuery.useQuery({
23258
+ queryKey: common.QueryKeyFactory.default.planChangeOptionsKey({ token: token }),
23259
+ queryFn: function () { return getPriceListChangeOptions({ apiHost: apiHost, token: token }); },
23260
+ enabled: Boolean(onChangePlanClick),
23261
+ }), priceListChangeOptions = _a.data, arePriceListChangeOptionsLoading = _a.isLoading;
23262
+ return { priceListChangeOptions: priceListChangeOptions, arePriceListChangeOptionsLoading: arePriceListChangeOptionsLoading };
23263
+ };
23264
+
23265
+ var SubscriptionCardActions = function (_a) {
23266
+ var _b;
23267
+ var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, priceListChangeOptions = _a.priceListChangeOptions, subscription = _a.subscription, isPaymentMethodLoading = _a.isPaymentMethodLoading;
22867
23268
  // Derived state
22868
23269
  var isSelfServiceCancelable = subscription.plan.selfServiceCancel;
22869
23270
  var productPlans = (_b = priceListChangeOptions === null || priceListChangeOptions === void 0 ? void 0 : priceListChangeOptions.priceLists) === null || _b === void 0 ? void 0 : _b.filter(function (priceList) { return priceList.product.id === subscription.product.id; });
@@ -22872,18 +23273,29 @@ var SubscriptionCardActions = function (_a) {
22872
23273
  var isActiveOrPending = isSubscriptionActiveOrPending(subscription);
22873
23274
  if (isPaymentMethodLoading)
22874
23275
  return null;
22875
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isSelfServiceCancelable && (isInTrial || isActiveOrPending) && (jsxRuntime.jsx(antd.Popconfirm, __assign({ icon: null, onConfirm: function () { return onCancelSubscriptionClick === null || onCancelSubscriptionClick === void 0 ? void 0 : onCancelSubscriptionClick(subscription); }, title: "Cancel subscription" }, { children: jsxRuntime.jsx(antd.Button, __assign({ className: "bunny-p-0", type: "link" }, { children: "Cancel subscription" })) }))), arePlansAvailable && (isActiveOrPending || isInTrial) && (jsxRuntime.jsx(antd.Button, __assign({ onClick: function () { return onChangePlanClick(subscription); }, type: 'primary' }, { children: isInTrial ? 'Upgrade from trial' : 'Change plan' }))), !arePlansAvailable && isInTrial && jsxRuntime.jsx(antd.Tag, __assign({ color: "warning" }, { children: "Cannot upgrade" }))] }));
23276
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isSelfServiceCancelable && onCancelSubscriptionClick && (isInTrial || isActiveOrPending) && (jsxRuntime.jsx(antd.Popconfirm, __assign({ icon: null, onConfirm: function () { return onCancelSubscriptionClick(subscription); }, title: "Cancel subscription" }, { children: jsxRuntime.jsx(antd.Button, __assign({ className: "bunny-p-0", type: "link" }, { children: "Cancel subscription" })) }))), arePlansAvailable && onChangePlanClick && (isActiveOrPending || isInTrial) && (jsxRuntime.jsx(antd.Button, __assign({ onClick: function () { return onChangePlanClick(subscription); }, type: 'primary' }, { children: isInTrial ? 'Upgrade from trial' : 'Change plan' }))), !arePlansAvailable && isInTrial && jsxRuntime.jsx(antd.Tag, __assign({ color: "warning" }, { children: "Cannot upgrade" }))] }));
22876
23277
  };
22877
23278
 
22878
23279
  var Text$7 = antd.Typography.Text;
22879
23280
  var getSubscriptionStatusText = function (subscription) {
22880
- var _a;
22881
- var cancellationDate = subscription.cancellationDate, state = subscription.state, evergreen = subscription.evergreen, endDate = subscription.endDate, trialExpirationAction = subscription.trialExpirationAction;
22882
- var isTrial = ((_a = subscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.TRIAL;
22883
- if (cancellationDate &&
22884
- (state === null || state === void 0 ? void 0 : state.toUpperCase()) !== common.SubscriptionState.CANCELED &&
22885
- (state === null || state === void 0 ? void 0 : state.toUpperCase()) !== common.SubscriptionState.EXPIRED) {
23281
+ var cancellationDate = subscription.cancellationDate, state = subscription.state, evergreen = subscription.evergreen, endDate = subscription.endDate, trialEndDate = subscription.trialEndDate, trialStartDate = subscription.trialStartDate, startDate = subscription.startDate, trialExpirationAction = subscription.trialExpirationAction;
23282
+ var stateUpperCased = state === null || state === void 0 ? void 0 : state.toUpperCase();
23283
+ var isActive = stateUpperCased === common.SubscriptionState.ACTIVE;
23284
+ var isPending = stateUpperCased === common.SubscriptionState.PENDING;
23285
+ var isCanceled = stateUpperCased === common.SubscriptionState.CANCELED;
23286
+ var isExpired = stateUpperCased === common.SubscriptionState.EXPIRED;
23287
+ var isTrial = stateUpperCased === common.SubscriptionState.TRIAL;
23288
+ if (cancellationDate && (isActive || isPending || isTrial))
22886
23289
  return (jsxRuntime.jsxs(CustomizedTag, __assign({ color: "red" }, { children: ["Canceled - ends on ", common.formatDate(cancellationDate)] })));
23290
+ if (cancellationDate && isCanceled)
23291
+ return "Canceled on ".concat(common.formatDate(cancellationDate));
23292
+ if (isExpired)
23293
+ return "Ended on ".concat(common.formatDate(endDate || trialEndDate));
23294
+ if (isPending) {
23295
+ if (trialStartDate)
23296
+ return "Trial starts on ".concat(common.formatDate(trialStartDate));
23297
+ if (startDate)
23298
+ return "Activates on ".concat(common.formatDate(startDate));
22887
23299
  }
22888
23300
  if (isTrial) {
22889
23301
  switch (trialExpirationAction) {
@@ -22896,26 +23308,42 @@ var getSubscriptionStatusText = function (subscription) {
22896
23308
  if (evergreen) {
22897
23309
  return "Renews on ".concat(common.formatDate(endDate));
22898
23310
  }
22899
- if ((state === null || state === void 0 ? void 0 : state.toUpperCase()) === common.SubscriptionState.CANCELED ||
22900
- (state === null || state === void 0 ? void 0 : state.toUpperCase()) === common.SubscriptionState.EXPIRED) {
22901
- return "Ended on ".concat(common.formatDate(endDate));
22902
- }
22903
- return "Ends on ".concat(common.formatDate(endDate));
23311
+ return "Ends on ".concat(common.formatDate(endDate || trialEndDate));
22904
23312
  };
22905
23313
  var SubscriptionCardHeader = function (_a) {
22906
- var _b, _c, _d, _e, _f;
22907
- var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, priceListChangeOptions = _a.priceListChangeOptions, subscription = _a.subscription;
23314
+ var _b, _c, _d, _e;
23315
+ var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, subscription = _a.subscription;
23316
+ // Context
22908
23317
  var darkMode = react.useContext(BunnyContext).darkMode;
22909
23318
  var brandColor = react.useContext(BrandContext).brandColor;
22910
23319
  var subscriptionProductNameStyle = react.useContext(SubscriptionsContext).subscriptionProductNameStyle;
22911
- var isMobile = common.useIsMobile();
22912
23320
  // Derived state
22913
23321
  var trialDaysLeft = subscription === null || subscription === void 0 ? void 0 : subscription.daysLeftInTrial;
22914
- var isTrial = ((_b = subscription.state) === null || _b === void 0 ? void 0 : _b.toUpperCase()) === common.SubscriptionState.TRIAL;
23322
+ var isTrial = isSubscriptionTrial(subscription);
22915
23323
  return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-justify-between", style: {
22916
23324
  backgroundColor: darkMode ? 'var(--row-background-dark)' : '',
22917
- } }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [((_c = subscription === null || subscription === void 0 ? void 0 : subscription.product) === null || _c === void 0 ? void 0 : _c.name) && (jsxRuntime.jsx(Text$7, __assign({ style: __assign({ fontSize: '11px', fontWeight: 500, color: brandColor }, subscriptionProductNameStyle) }, { children: (_d = subscription.product.name) === null || _d === void 0 ? void 0 : _d.toUpperCase() }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-grow bunny-items-center bunny-gap-2" }, { children: [((_e = subscription === null || subscription === void 0 ? void 0 : subscription.plan) === null || _e === void 0 ? void 0 : _e.name) && (jsxRuntime.jsx(Text$7, __assign({ className: "bunny-text-lg" }, { children: subscription.plan.name }))), jsxRuntime.jsxs(CustomizedTag, __assign({ color: common.TAG_COLORS[(_f = subscription.state) === null || _f === void 0 ? void 0 : _f.toUpperCase()] }, { children: [lodashExports.capitalize(subscription.state.toLowerCase()), isTrial ? " (".concat(trialDaysLeft || 'N/A', " days left)") : ''] }))] }))] })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-6" }, { children: [jsxRuntime.jsx(Text$7, __assign({ className: "bunny-grow bunny-text-xs" }, { children: getSubscriptionStatusText(subscription) })), !isMobile && priceListChangeOptions && onChangePlanClick && onCancelSubscriptionClick && (jsxRuntime.jsx(SubscriptionCardActions, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, priceListChangeOptions: priceListChangeOptions, subscription: subscription }))] }))] })));
23325
+ } }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2" }, { children: [((_b = subscription === null || subscription === void 0 ? void 0 : subscription.product) === null || _b === void 0 ? void 0 : _b.name) && (jsxRuntime.jsx(Text$7, __assign({ style: __assign({ fontSize: '11px', fontWeight: 500, color: brandColor }, subscriptionProductNameStyle) }, { children: (_c = subscription.product.name) === null || _c === void 0 ? void 0 : _c.toUpperCase() }))), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-grow bunny-items-center bunny-gap-2" }, { children: [((_d = subscription === null || subscription === void 0 ? void 0 : subscription.plan) === null || _d === void 0 ? void 0 : _d.name) && (jsxRuntime.jsx(Text$7, __assign({ className: "bunny-text-lg" }, { children: subscription.plan.name }))), jsxRuntime.jsxs(CustomizedTag, __assign({ color: common.TAG_COLORS[(_e = subscription.state) === null || _e === void 0 ? void 0 : _e.toUpperCase()] }, { children: [lodashExports.capitalize(subscription.state.toLowerCase()), isTrial ? " (".concat(trialDaysLeft || 'N/A', " days left)") : ''] }))] }))] })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-6" }, { children: jsxRuntime.jsx(SubscriptionStatusAndActions, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, subscription: subscription }) }))] })));
22918
23326
  };
23327
+ function SubscriptionStatusAndActions(_a) {
23328
+ var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, subscription = _a.subscription;
23329
+ // Context
23330
+ var apiHost = react.useContext(BunnyContext).apiHost;
23331
+ // Hooks
23332
+ var token = useToken();
23333
+ var isMobile = common.useIsMobile();
23334
+ var _b = usePriceListChangeOptions(onChangePlanClick), priceListChangeOptions = _b.priceListChangeOptions, arePriceListChangeOptionsLoading = _b.arePriceListChangeOptionsLoading;
23335
+ var isPaymentMethodLoading = usePaymentMethod({
23336
+ accountId: subscription.accountId,
23337
+ token: token,
23338
+ apiHost: apiHost,
23339
+ }).isLoading;
23340
+ // Derived state
23341
+ var cardActionsVisible = !isMobile;
23342
+ var showStatusSkeleton = arePriceListChangeOptionsLoading && cardActionsVisible;
23343
+ var showActionsSkeleton = arePriceListChangeOptionsLoading && !priceListChangeOptions;
23344
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [showStatusSkeleton ? (jsxRuntime.jsx(antd.Skeleton.Input, { active: true, size: "small", style: { width: 180 } })) : (jsxRuntime.jsx(Text$7, __assign({ className: "bunny-grow bunny-text-xs" }, { children: getSubscriptionStatusText(subscription) }))), cardActionsVisible &&
23345
+ (showActionsSkeleton ? (jsxRuntime.jsx(antd.Skeleton.Button, { active: true, size: "default", style: { width: 100 } })) : (jsxRuntime.jsx(SubscriptionCardActions, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, priceListChangeOptions: priceListChangeOptions, subscription: subscription, isPaymentMethodLoading: isPaymentMethodLoading })))] }));
23346
+ }
22919
23347
 
22920
23348
  var SubscriptionChargeTotal = function (_a) {
22921
23349
  var charge = _a.charge, subscription = _a.subscription;
@@ -23003,7 +23431,7 @@ var SubscriptionsListCell = function (_a) {
23003
23431
  return (jsxRuntime.jsx(Text$5, __assign({ className: "bunny-flex bunny-items-center bunny-text-sm bunny-whitespace-nowrap ".concat(className), style: __assign({ gridColumn: gridColumn, textAlign: right ? "right" : "left", justifyContent: right ? "flex-end" : "flex-start" }, style) }, { children: children })));
23004
23432
  };
23005
23433
 
23006
- var CARD_COLUMNS = [
23434
+ var NON_ADDON_CARD_COLUMNS = [
23007
23435
  {
23008
23436
  title: 'CHARGE',
23009
23437
  width: 'minmax(min-content, 26%)',
@@ -23028,13 +23456,39 @@ var CARD_COLUMNS = [
23028
23456
  width: "minmax(min-content, 18%)",
23029
23457
  },
23030
23458
  ];
23459
+ var ADDON_CARD_COLUMNS = [
23460
+ {
23461
+ title: 'CHARGE',
23462
+ width: 'minmax(min-content, 21.6%)',
23463
+ },
23464
+ {
23465
+ title: 'PERIOD',
23466
+ width: 'minmax(min-content, 21.1%)',
23467
+ },
23468
+ {
23469
+ className: 'text-right',
23470
+ title: 'QUANTITY',
23471
+ width: "minmax(min-content, 19.1%)",
23472
+ },
23473
+ {
23474
+ className: 'text-right',
23475
+ title: 'UNIT PRICE',
23476
+ width: "minmax(min-content, 19.1%)",
23477
+ },
23478
+ {
23479
+ className: 'text-right',
23480
+ title: 'TOTAL',
23481
+ width: "minmax(min-content, 19.1%)",
23482
+ },
23483
+ ];
23031
23484
  var SubscriptionCardDesktop = function (_a) {
23032
23485
  var _b;
23033
- var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, priceListChangeOptions = _a.priceListChangeOptions, subscription = _a.subscription;
23486
+ var onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, subscription = _a.subscription, isAddon = _a.isAddon;
23034
23487
  var shadow = react.useContext(SubscriptionsContext).shadow;
23035
23488
  // Derived state
23036
23489
  var isTrial = ((_b = subscription.state) === null || _b === void 0 ? void 0 : _b.toUpperCase()) === SubscriptionState$1.TRIAL;
23037
- return (jsxRuntime.jsxs(Card, __assign({ className: "p-4 ".concat(shadow ? "shadow-".concat(shadow) : '') }, { children: [jsxRuntime.jsx(SubscriptionCardHeader, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, priceListChangeOptions: priceListChangeOptions, subscription: subscription }), jsxRuntime.jsx(antd.Divider, { className: "bunny-my-4", style: {
23490
+ var CARD_COLUMNS = isAddon ? ADDON_CARD_COLUMNS : NON_ADDON_CARD_COLUMNS;
23491
+ return (jsxRuntime.jsxs(Card, __assign({ className: "p-4 ".concat(shadow ? "shadow-".concat(shadow) : '') }, { children: [jsxRuntime.jsx(SubscriptionCardHeader, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, subscription: subscription }), jsxRuntime.jsx(antd.Divider, { className: "bunny-my-4", style: {
23038
23492
  gridColumn: '1 / 5',
23039
23493
  width: 'calc(100% + 32px)',
23040
23494
  transform: 'translateX(-16px)',
@@ -23086,6 +23540,20 @@ var SubscriptionCardDesktopRow = function (_a) {
23086
23540
  : (_c = charge.quantity) === null || _c === void 0 ? void 0 : _c.toLocaleString() })), jsxRuntime.jsx(SubscriptionsListCell, __assign({ right: true }, { children: jsxRuntime.jsx(SubscriptionChargeUnitPrice, { charge: charge, currencyId: subscription.currencyId }) })), jsxRuntime.jsx(SubscriptionsListCell, __assign({ right: true }, { children: jsxRuntime.jsx(SubscriptionChargeTotal, { charge: charge, subscription: subscription }) }))] })));
23087
23541
  };
23088
23542
 
23543
+ function AddonSubscriptionsCards(_a) {
23544
+ var onCancelSubscriptionClick = _a.onCancelSubscriptionClick, subscriptions = _a.subscriptions, subscription = _a.subscription, hideExpired = _a.hideExpired;
23545
+ var addonSubscriptions = findAddonSubscriptions(subscription, subscriptions);
23546
+ if (addonSubscriptions.length === 0) {
23547
+ return null;
23548
+ }
23549
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: addonSubscriptions.map(function (addonSubscription, addonSubscriptionIndex) {
23550
+ if (hideExpired && isSubscriptionNotActive(addonSubscription))
23551
+ return null;
23552
+ var isLast = addonSubscriptionIndex === addonSubscriptions.length - 1;
23553
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-row" }, { children: [jsxRuntime.jsx(AddonIndentation, { isLast: isLast, indentation: ADDON_INDENTATION, verticalMargin: "-1rem" }), jsxRuntime.jsx("div", __assign({ className: "bunny-flex-1" }, { children: jsxRuntime.jsx(SubscriptionCardDesktop, { onCancelSubscriptionClick: onCancelSubscriptionClick, subscription: addonSubscription, isAddon: true }) }))] })));
23554
+ }) }));
23555
+ }
23556
+
23089
23557
  var Text$4 = antd.Typography.Text;
23090
23558
  var SubscriptionCardCellMobile = function (_a) {
23091
23559
  var children = _a.children, className = _a.className, style = _a.style;
@@ -23135,36 +23603,54 @@ var SubscriptionCard = function (_a) {
23135
23603
  };
23136
23604
 
23137
23605
  var SubscriptionsList = function (_a) {
23138
- var hideExpired = _a.hideExpired, onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, priceListChangeOptions = _a.priceListChangeOptions, subscriptions = _a.subscriptions;
23606
+ var hideExpired = _a.hideExpired, onChangePlanClick = _a.onChangePlanClick, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, subscriptions = _a.subscriptions;
23139
23607
  var isMobile = common.useIsMobile();
23140
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.map(function (subscription, subscriptionIndex) {
23608
+ var nonAddonSubscriptions = findNonAddonSubscriptions(subscriptions);
23609
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: nonAddonSubscriptions === null || nonAddonSubscriptions === void 0 ? void 0 : nonAddonSubscriptions.map(function (subscription, subscriptionIndex) {
23141
23610
  if (hideExpired && isSubscriptionNotActive(subscription))
23142
23611
  return null;
23143
23612
  if (isMobile)
23144
- return jsxRuntime.jsx(SubscriptionCard, { subscription: subscription }, subscriptionIndex);
23145
- return (jsxRuntime.jsx(SubscriptionCardDesktop, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, priceListChangeOptions: priceListChangeOptions, subscription: subscription }, subscriptionIndex));
23613
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(SubscriptionCard, { subscription: subscription }, subscriptionIndex), jsxRuntime.jsx(AddonSubscriptionsCards, { onCancelSubscriptionClick: onCancelSubscriptionClick, subscription: subscription, subscriptions: subscriptions, hideExpired: hideExpired })] }));
23614
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(SubscriptionCardDesktop, { onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, subscription: subscription }, subscriptionIndex), jsxRuntime.jsx(AddonSubscriptionsCards, { onCancelSubscriptionClick: onCancelSubscriptionClick, subscription: subscription, subscriptions: subscriptions, hideExpired: hideExpired })] }));
23146
23615
  }) }));
23147
23616
  };
23148
23617
 
23149
- // Extra props to pass in
23150
- // - previewMode: boolean
23151
- // - productId: string
23152
23618
  var SubscriptionsListContainer = function (_a) {
23153
23619
  var companyName = _a.companyName, _b = _a.hideExpired, hideExpired = _b === void 0 ? false : _b, onCancelSubscriptionClick = _a.onCancelSubscriptionClick, onChangePlanClick = _a.onChangePlanClick, noSubscriptionsComponent = _a.noSubscriptionsComponent, subscriptions = _a.subscriptions, subscriptionsAreLoading = _a.subscriptionsAreLoading;
23154
23620
  // Context
23155
- var apiHost = react.useContext(BunnyContext).apiHost;
23156
23621
  var gap = react.useContext(SubscriptionsContext).gap;
23157
- var token = useToken();
23158
- // Queries
23159
- var _c = reactQuery.useQuery({
23160
- queryKey: common.QueryKeyFactory.default.planChangeOptionsKey({ token: token }),
23161
- queryFn: function () { return getPriceListChangeOptions({ apiHost: apiHost, token: token }); },
23162
- enabled: Boolean(onChangePlanClick),
23163
- }), priceListChangeOptions = _c.data, arePriceListChangeOptionsLoading = _c.isLoading;
23164
- if (subscriptionsAreLoading ||
23165
- (Boolean(onChangePlanClick) ? arePriceListChangeOptionsLoading : false))
23622
+ if (subscriptionsAreLoading)
23166
23623
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
23167
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: (subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.length) > 0 ? (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-".concat(gap, " bunny-shrink bunny-overflow-auto") }, { children: jsxRuntime.jsx(SubscriptionsList, { hideExpired: hideExpired, onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, priceListChangeOptions: priceListChangeOptions, subscriptions: subscriptions }) }))) : (noSubscriptionsComponent || (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-w-full" }, { children: jsxRuntime.jsx(ErrorView, { message: "You have no subscriptions with ".concat(companyName, " yet") }) })))) }));
23624
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: (subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.length) > 0 ? (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-".concat(gap, " bunny-shrink bunny-overflow-auto") }, { children: jsxRuntime.jsx(SubscriptionsList, { hideExpired: hideExpired, onChangePlanClick: onChangePlanClick, onCancelSubscriptionClick: onCancelSubscriptionClick, subscriptions: subscriptions }) }))) : (noSubscriptionsComponent || (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-center bunny-w-full" }, { children: jsxRuntime.jsx(ErrorView, { message: "You have no subscriptions with ".concat(companyName, " yet") }) })))) }));
23625
+ };
23626
+
23627
+ var HideExpiredToggle = function (_a) {
23628
+ var hideExpired = _a.hideExpired, setHideExpired = _a.setHideExpired;
23629
+ var isMobile = common.useIsMobile();
23630
+ var secondaryColor = react.useContext(BrandContext).secondaryColor;
23631
+ return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-4 bunny-pl-4" }, { children: [!isMobile && jsxRuntime.jsx(antd.Divider, { className: "bunny-h-5", type: "vertical" }), jsxRuntime.jsx(StyledCheckbox, { children: jsxRuntime.jsx(antd.Checkbox, __assign({ checked: hideExpired, onChange: function (e) { return setHideExpired(e.target.checked); }, style: {
23632
+ color: secondaryColor,
23633
+ } }, { children: isMobile ? 'Hide inactive' : 'Hide inactive subscriptions' })) })] })));
23634
+ };
23635
+ var StyledCheckbox = styled__default["default"].div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n .ant-checkbox-wrapper span {\n padding-inline-end: 0 !important;\n }\n"], ["\n .ant-checkbox-wrapper span {\n padding-inline-end: 0 !important;\n }\n"])));
23636
+ var templateObject_1;
23637
+
23638
+ var ChangeQuantitiesButton = function (_a) {
23639
+ var setQuantityDrawerOpen = _a.setQuantityDrawerOpen;
23640
+ return (jsxRuntime.jsx(antd.Button, __assign({ onClick: function () {
23641
+ setQuantityDrawerOpen(true);
23642
+ }, type: "default" }, { children: "Change quantities" })));
23643
+ };
23644
+
23645
+ var SubscriptionsNavigation = function (_a) {
23646
+ var expiredSwitchVisible = _a.expiredSwitchVisible, hideExpired = _a.hideExpired, setHideExpired = _a.setHideExpired, setQuantityDrawerOpen = _a.setQuantityDrawerOpen, subscriptions = _a.subscriptions;
23647
+ // Hooks
23648
+ var isMobile = common.useIsMobile();
23649
+ // Derived state
23650
+ var canShowChangeQuantitiesButton = canShowChangeQuantities({
23651
+ subscriptions: subscriptions,
23652
+ });
23653
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!isMobile && expiredSwitchVisible && (jsxRuntime.jsx(HideExpiredToggle, { hideExpired: hideExpired, setHideExpired: setHideExpired })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-grow bunny-gap-2 ".concat(isMobile ? 'bunny-flex-col' : 'bunny-justify-end') }, { children: canShowChangeQuantitiesButton && (jsxRuntime.jsx(ChangeQuantitiesButton, { setQuantityDrawerOpen: setQuantityDrawerOpen })) }))] }));
23168
23654
  };
23169
23655
 
23170
23656
  var Text$3 = antd.Typography.Text;
@@ -23179,13 +23665,12 @@ var formatDateForApi = function (date) {
23179
23665
  return date.format('YYYY-MM-DD');
23180
23666
  };
23181
23667
  var QuantityInput = function (_a) {
23182
- var charge = _a.charge, chargeIndex = _a.chargeIndex, editingQuote = _a.editingQuote, setEditingQuoteData = _a.setEditingQuoteData, subscription = _a.subscription, subscriptionIndex = _a.subscriptionIndex, subscriptions = _a.subscriptions;
23668
+ var charge = _a.charge, chargeIndex = _a.chargeIndex, editingQuote = _a.editingQuote, setEditingQuoteData = _a.setEditingQuoteData, subscription = _a.subscription, subscriptionIndex = _a.subscriptionIndex, subscriptions = _a.subscriptions, setUpdatingChargeQuantityId = _a.setUpdatingChargeQuantityId, updatingChargeQuantityId = _a.updatingChargeQuantityId;
23183
23669
  // Context
23184
23670
  var token = useToken();
23185
23671
  var apiHost = react.useContext(BunnyContext).apiHost;
23186
- var _b = react.useContext(SubscriptionsContext), updatingChargeQuantityId = _b.updatingChargeQuantityId, setUpdatingChargeQuantityId = _b.setUpdatingChargeQuantityId;
23187
23672
  // Local state
23188
- var _c = react.useState(), editedSubscription = _c[0], setEditedSubscription = _c[1];
23673
+ var _b = react.useState(), editedSubscription = _b[0], setEditedSubscription = _b[1];
23189
23674
  // Hooks
23190
23675
  var queryClient = reactQuery.useQueryClient();
23191
23676
  var createSubscriptionQuote = useCreateSubscriptionQuote();
@@ -23269,7 +23754,8 @@ var QuantityInput = function (_a) {
23269
23754
  return (editedSubscription === null || editedSubscription === void 0 ? void 0 : editedSubscription.quantity) !== undefined && editedSubscription.quantity <= quantity;
23270
23755
  };
23271
23756
  var onChangeQuantity = function (chargeIndex, value, priceListChargeId, subscription, subscriptionIndex) {
23272
- var quantity = isNaN(parseInt(value)) ? 0 : parseInt(value);
23757
+ // Handle empty string - don't convert to 0, keep it as undefined
23758
+ var quantity = value === '' ? undefined : isNaN(parseInt(value)) ? 0 : parseInt(value);
23273
23759
  setEditedSubscription({
23274
23760
  chargeIndex: chargeIndex,
23275
23761
  subscriptionIndex: subscriptionIndex,
@@ -23277,15 +23763,16 @@ var QuantityInput = function (_a) {
23277
23763
  quantity: quantity,
23278
23764
  subscription: subscription,
23279
23765
  });
23280
- if (quantity !== charge.quantity) {
23766
+ if (quantity !== undefined && quantity !== charge.quantity) {
23281
23767
  setUpdatingChargeQuantityId(charge.id);
23282
23768
  }
23283
23769
  else {
23284
23770
  setUpdatingChargeQuantityId(undefined);
23771
+ setEditingQuoteData(undefined);
23285
23772
  }
23286
23773
  };
23287
23774
  var handleSubscriptionUpdate = function (editedSubscription) {
23288
- if (!editedSubscription)
23775
+ if (!editedSubscription || editedSubscription.quantity === undefined)
23289
23776
  return;
23290
23777
  // If we are not editing a quote, we create a new one
23291
23778
  if (!editingQuote) {
@@ -23303,7 +23790,7 @@ var QuantityInput = function (_a) {
23303
23790
  else {
23304
23791
  // If we are editing a quote, we update the quote change
23305
23792
  var _a = createQuoteParams(editingQuote, charge.quantity, editedSubscription), charges = _a.charges, quoteChange = _a.quoteChange;
23306
- if (quoteChange && charges[0].quantity > 0) {
23793
+ if (quoteChange && charges.length > 0 && charges[0].quantity > 0) {
23307
23794
  updateQuote.mutate({
23308
23795
  charges: charges,
23309
23796
  quoteChangeId: quoteChange.id,
@@ -23356,10 +23843,11 @@ var QuantityInput = function (_a) {
23356
23843
  var Text$2 = antd.Typography.Text;
23357
23844
  var QuantityChangeGridRow = function (_a) {
23358
23845
  var _b;
23359
- var chargeIndex = _a.chargeIndex, editingQuote = _a.editingQuote, subscriptions = _a.subscriptions, subscriptionIndex = _a.subscriptionIndex, setEditingQuoteData = _a.setEditingQuoteData, subscription = _a.subscription, subscriptionCharge = _a.subscriptionCharge;
23846
+ var chargeIndex = _a.chargeIndex, editingQuote = _a.editingQuote, subscriptions = _a.subscriptions, subscriptionIndex = _a.subscriptionIndex, setEditingQuoteData = _a.setEditingQuoteData, subscription = _a.subscription, subscriptionCharge = _a.subscriptionCharge, setUpdatingChargeQuantityId = _a.setUpdatingChargeQuantityId, updatingChargeQuantityId = _a.updatingChargeQuantityId;
23360
23847
  if (!canShowQuantitiesInput(subscriptionCharge, subscription))
23361
23848
  return null;
23362
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Text$2, __assign({ className: "bunny-font-medium bunny-text-orange-600 bunny-col-span-full", style: { fontSize: "11px" } }, { children: subscription.plan.name })), jsxRuntime.jsx(Text$2, __assign({ className: "bunny-font-medium bunny-text-base bunny-text-gray-900" }, { children: (_b = subscriptionCharge.name) === null || _b === void 0 ? void 0 : _b.toUpperCase() })), jsxRuntime.jsx(Text$2, __assign({ className: "bunny-flex bunny-items-center bunny-justify-end bunny-font-medium bunny-text-base bunny-text-gray-900" }, { children: subscriptionCharge.quantity })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-end" }, { children: [jsxRuntime.jsx(QuantityInput, { charge: subscriptionCharge, chargeIndex: chargeIndex, editingQuote: editingQuote, setEditingQuoteData: setEditingQuoteData, subscription: subscription, subscriptionIndex: subscriptionIndex, subscriptions: subscriptions }), jsxRuntime.jsx("div", {})] })), jsxRuntime.jsx(antd.Divider, { className: "bunny-col-span-full bunny-my-2" })] }));
23849
+ var brandColor = react.useContext(BrandContext).brandColor;
23850
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Text$2, __assign({ className: "bunny-font-medium bunny-col-span-full", style: { fontSize: '11px', color: brandColor } }, { children: subscription.plan.name })), jsxRuntime.jsx(Text$2, __assign({ className: "bunny-font-medium bunny-text-base bunny-text-gray-900" }, { children: (_b = subscriptionCharge.name) === null || _b === void 0 ? void 0 : _b.toUpperCase() })), jsxRuntime.jsx(Text$2, __assign({ className: "bunny-flex bunny-items-center bunny-justify-end bunny-font-medium bunny-text-base bunny-text-gray-900" }, { children: subscriptionCharge.quantity })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-items-end" }, { children: [jsxRuntime.jsx(QuantityInput, { charge: subscriptionCharge, chargeIndex: chargeIndex, editingQuote: editingQuote, setEditingQuoteData: setEditingQuoteData, subscription: subscription, subscriptionIndex: subscriptionIndex, subscriptions: subscriptions, setUpdatingChargeQuantityId: setUpdatingChargeQuantityId, updatingChargeQuantityId: updatingChargeQuantityId }), jsxRuntime.jsx("div", {})] })), jsxRuntime.jsx(antd.Divider, { className: "bunny-col-span-full bunny-my-2" })] }));
23363
23851
  };
23364
23852
 
23365
23853
  var QuantityChangeGridTitle = function (_a) {
@@ -23389,7 +23877,7 @@ var QuoteChangeSummarySection = function (_a) {
23389
23877
  var QUANTITY_CHANGE_HEADER_TITLE = 'Update unit quantity';
23390
23878
  var QUANTITY_CHANGE_HEADER_DESCRIPTION = 'Adjust quantities below. The change will take effect immediately after checkout has been completed.';
23391
23879
  var QuantityChangeDrawerDesktop = function (_a) {
23392
- var editingQuote = _a.editingQuote, editingQuoteData = _a.editingQuoteData, onClose = _a.onClose, open = _a.open, openCheckout = _a.openCheckout, setEditingQuoteData = _a.setEditingQuoteData, subscriptions = _a.subscriptions;
23880
+ var editingQuote = _a.editingQuote, editingQuoteData = _a.editingQuoteData, onClose = _a.onClose, open = _a.open, openCheckout = _a.openCheckout, setEditingQuoteData = _a.setEditingQuoteData, subscriptions = _a.subscriptions, setUpdatingChargeQuantityId = _a.setUpdatingChargeQuantityId, updatingChargeQuantityId = _a.updatingChargeQuantityId;
23393
23881
  var _b = react.useState(open), openLocal = _b[0], setOpenLocal = _b[1];
23394
23882
  var isMobile = common.useIsMobile();
23395
23883
  react.useEffect(function () {
@@ -23421,11 +23909,11 @@ var QuantityChangeDrawerDesktop = function (_a) {
23421
23909
  wrapper: {
23422
23910
  minWidth: '600px',
23423
23911
  },
23424
- }, title: jsxRuntime.jsx(DrawerHeader, { description: QUANTITY_CHANGE_HEADER_DESCRIPTION, onClose: onClose, title: QUANTITY_CHANGE_HEADER_TITLE, closeButtonClassName: "ant-drawer-close" }) }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-pb-4", style: {
23912
+ }, title: jsxRuntime.jsx(DrawerHeader, { description: QUANTITY_CHANGE_HEADER_DESCRIPTION, onClose: onClose, title: QUANTITY_CHANGE_HEADER_TITLE, closeButtonClassName: "ant-drawer-close" }) }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-grid bunny-pb-2", style: {
23425
23913
  gridTemplateColumns: '2fr 1fr 1fr',
23426
- rowGap: '0.75rem',
23914
+ rowGap: '0.25rem',
23427
23915
  columnGap: '1rem',
23428
- } }, { children: [jsxRuntime.jsx(QuantityChangeGridTitle, { children: "ACTIVE SUBSCRIPTIONS" }), jsxRuntime.jsx(QuantityChangeGridTitle, __assign({ right: true }, { children: "CURRENT QUANTITY" })), jsxRuntime.jsx(QuantityChangeGridTitle, __assign({ right: true }, { children: "NEW QUANTITY" })), jsxRuntime.jsx(antd.Divider, { className: "bunny-col-span-full bunny-py-2" }), subscriptions.map(function (subscription, index) {
23916
+ } }, { children: [jsxRuntime.jsx(QuantityChangeGridTitle, { children: "ACTIVE SUBSCRIPTIONS" }), jsxRuntime.jsx(QuantityChangeGridTitle, __assign({ right: true }, { children: "CURRENT QUANTITY" })), jsxRuntime.jsx(QuantityChangeGridTitle, __assign({ right: true }, { children: "NEW QUANTITY" })), jsxRuntime.jsx(antd.Divider, { className: "bunny-col-span-full" }), subscriptions.map(function (subscription, index) {
23429
23917
  var _a;
23430
23918
  var isTrial = ((_a = subscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.TRIAL;
23431
23919
  return (jsxRuntime.jsx("div", __assign({ className: "bunny-contents" }, { children: subscription.charges.map(function (charge, chargeIndex) {
@@ -23434,40 +23922,67 @@ var QuantityChangeDrawerDesktop = function (_a) {
23434
23922
  (!isTrial && charge.trial) ||
23435
23923
  ((_a = charge.chargeType) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === 'USAGE')
23436
23924
  return null;
23437
- return (jsxRuntime.jsx(QuantityChangeGridRow, { chargeIndex: chargeIndex, editingQuote: editingQuote, setEditingQuoteData: setEditingQuoteData, subscription: subscription, subscriptionCharge: charge, subscriptionIndex: index, subscriptions: subscriptions }, chargeIndex));
23925
+ return (jsxRuntime.jsx(QuantityChangeGridRow, { chargeIndex: chargeIndex, editingQuote: editingQuote, setEditingQuoteData: setEditingQuoteData, subscription: subscription, subscriptionCharge: charge, subscriptionIndex: index, subscriptions: subscriptions, setUpdatingChargeQuantityId: setUpdatingChargeQuantityId, updatingChargeQuantityId: updatingChargeQuantityId }, chargeIndex));
23438
23926
  }) }), index));
23439
23927
  })] })), jsxRuntime.jsx(QuoteChangeSummarySection, { editingQuote: editingQuote, editingQuoteData: editingQuoteData, openCheckout: openCheckout, setEditingQuoteData: setEditingQuoteData })] })));
23440
23928
  };
23441
23929
 
23442
- var HideExpiredToggle = function (_a) {
23443
- var hideExpired = _a.hideExpired, setHideExpired = _a.setHideExpired;
23444
- var isMobile = common.useIsMobile();
23445
- var secondaryColor = react.useContext(BrandContext).secondaryColor;
23446
- return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-items-center bunny-gap-4 bunny-pl-4" }, { children: [!isMobile && jsxRuntime.jsx(antd.Divider, { className: "bunny-h-5", type: "vertical" }), jsxRuntime.jsx(StyledCheckbox, { children: jsxRuntime.jsx(antd.Checkbox, __assign({ checked: hideExpired, onChange: function (e) { return setHideExpired(e.target.checked); }, style: {
23447
- color: secondaryColor,
23448
- } }, { children: isMobile ? 'Hide inactive' : 'Hide inactive subscriptions' })) })] })));
23449
- };
23450
- var StyledCheckbox = styled__default["default"].div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n .ant-checkbox-wrapper span {\n padding-inline-end: 0 !important;\n }\n"], ["\n .ant-checkbox-wrapper span {\n padding-inline-end: 0 !important;\n }\n"])));
23451
- var templateObject_1;
23452
-
23453
- var ChangeQuantitiesButton = function (_a) {
23454
- var canShowChangeQuantitiesButton = _a.canShowChangeQuantitiesButton, setQuantityDrawerOpen = _a.setQuantityDrawerOpen;
23455
- if (!canShowChangeQuantitiesButton)
23456
- return null;
23457
- return (jsxRuntime.jsx(antd.Button, __assign({ onClick: function () {
23458
- setQuantityDrawerOpen(true);
23459
- }, type: "default" }, { children: "Change quantities" })));
23460
- };
23461
-
23462
- var SubscriptionsNavigation = function (_a) {
23463
- var expiredSwitchVisible = _a.expiredSwitchVisible, hideExpired = _a.hideExpired, setHideExpired = _a.setHideExpired, setQuantityDrawerOpen = _a.setQuantityDrawerOpen, subscriptions = _a.subscriptions;
23464
- // Hooks
23465
- var isMobile = common.useIsMobile();
23466
- // Derived state
23467
- var canShowChangeQuantitiesButton = canShowChangeQuantities({
23468
- subscriptions: subscriptions,
23469
- });
23470
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!isMobile && expiredSwitchVisible && (jsxRuntime.jsx(HideExpiredToggle, { hideExpired: hideExpired, setHideExpired: setHideExpired })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-grow bunny-gap-2 ".concat(isMobile ? 'bunny-flex-col' : 'bunny-justify-end') }, { children: canShowChangeQuantitiesButton && (jsxRuntime.jsx(ChangeQuantitiesButton, { canShowChangeQuantitiesButton: canShowChangeQuantitiesButton, setQuantityDrawerOpen: setQuantityDrawerOpen })) }))] }));
23930
+ var QuantityDrawerContainer = function (_a) {
23931
+ var subscriptions = _a.subscriptions, quantityDrawerOpen = _a.quantityDrawerOpen, setQuantityDrawerOpen = _a.setQuantityDrawerOpen, handlePortalErrors = _a.handlePortalErrors, setHideExpiredState = _a.setHideExpiredState;
23932
+ var apiHost = react.useContext(BunnyContext).apiHost;
23933
+ var token = useToken();
23934
+ var queryClient = reactQuery.useQueryClient();
23935
+ var showSuccessNotification = common.useSuccessNotification();
23936
+ // State management
23937
+ var _b = react.useState(), editingQuoteData = _b[0], setEditingQuoteData = _b[1];
23938
+ var _c = react.useState(false), payModalVisible = _c[0], setPayModalVisible = _c[1];
23939
+ var _d = react.useState(undefined), updatingChargeQuantityId = _d[0], setUpdatingChargeQuantityId = _d[1];
23940
+ // Quote query
23941
+ var quote = reactQuery.useQuery({
23942
+ queryKey: common.QueryKeyFactory.default.createObjectKey({
23943
+ id: editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id,
23944
+ objectName: 'editingQuote',
23945
+ token: token,
23946
+ }),
23947
+ queryFn: function () {
23948
+ return (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id) ? getQuote({ token: token, id: editingQuoteData.id, apiHost: apiHost }) : undefined;
23949
+ },
23950
+ enabled: Boolean(editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id),
23951
+ }).data;
23952
+ // Handlers
23953
+ var onSuccess = function () {
23954
+ setQuantityDrawerOpen(false);
23955
+ setEditingQuoteData(undefined);
23956
+ queryClient.invalidateQueries({
23957
+ queryKey: common.QueryKeyFactory.default.transactionsKey({ token: token }),
23958
+ });
23959
+ queryClient.invalidateQueries({
23960
+ queryKey: common.QueryKeyFactory.default.createTableKey({
23961
+ pluralType: 'subscriptions',
23962
+ token: token,
23963
+ }),
23964
+ });
23965
+ showSuccessNotification('Your plan has been updated', 'Payment successful');
23966
+ setPayModalVisible(false);
23967
+ setHideExpiredState(true);
23968
+ setUpdatingChargeQuantityId(undefined);
23969
+ };
23970
+ var onCancel = function () {
23971
+ setPayModalVisible(false);
23972
+ };
23973
+ var onFail = function (error) {
23974
+ handlePortalErrors === null || handlePortalErrors === void 0 ? void 0 : handlePortalErrors(error);
23975
+ };
23976
+ var handleDrawerClose = function () {
23977
+ if (updatingChargeQuantityId) {
23978
+ setUpdatingChargeQuantityId(undefined);
23979
+ }
23980
+ setQuantityDrawerOpen(false);
23981
+ };
23982
+ var handleOpenCheckout = function () {
23983
+ setPayModalVisible(true);
23984
+ };
23985
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(QuantityChangeDrawerDesktop, { editingQuote: quote, editingQuoteData: editingQuoteData, onClose: handleDrawerClose, open: quantityDrawerOpen, openCheckout: handleOpenCheckout, setEditingQuoteData: setEditingQuoteData, subscriptions: subscriptions, setUpdatingChargeQuantityId: setUpdatingChargeQuantityId, updatingChargeQuantityId: updatingChargeQuantityId }), jsxRuntime.jsx(Checkout, { onCancel: onCancel, onSuccess: onSuccess, onFail: onFail, open: payModalVisible, quote: quote, token: token, isUpdatingQuote: false })] }));
23471
23986
  };
23472
23987
 
23473
23988
  var Text$1 = antd.Typography.Text;
@@ -23483,8 +23998,6 @@ var SubscriptionsWrapper = function (_a) {
23483
23998
  };
23484
23999
  var styles = __assign(__assign({}, defaultStyles), userStyles);
23485
24000
  var _f = react.useState(undefined), upgradingSubscription = _f[0], setUpgradingSubscription = _f[1];
23486
- var _g = react.useState(undefined), updatingChargeQuantityId = _g[0], setUpdatingChargeQuantityId = _g[1];
23487
- var _h = react.useState(null), subscriptionUpgradeId = _h[0], setSubscriptionUpgradeId = _h[1];
23488
24001
  return (jsxRuntime.jsx(SubscriptionsContext.Provider, __assign({ value: {
23489
24002
  gap: styles.gap,
23490
24003
  shadow: styles.shadow,
@@ -23495,55 +24008,34 @@ var SubscriptionsWrapper = function (_a) {
23495
24008
  hideExpired: hideExpired,
23496
24009
  upgradingSubscription: upgradingSubscription,
23497
24010
  setUpgradingSubscription: setUpgradingSubscription,
23498
- updatingChargeQuantityId: updatingChargeQuantityId,
23499
- setUpdatingChargeQuantityId: setUpdatingChargeQuantityId,
23500
- subscriptionUpgradeId: subscriptionUpgradeId,
23501
- setSubscriptionUpgradeId: setSubscriptionUpgradeId,
23502
- } }, { children: jsxRuntime.jsx(QuotePreviewProvider, { children: jsxRuntime.jsx(Subscriptions, { handlePortalErrors: handlePortalErrors, companyName: companyName, noSubscriptionsComponent: noSubscriptionsComponent, hideTitle: hideTitle, hideExpiredToggle: hideExpiredToggle }) }) })));
24011
+ } }, { children: jsxRuntime.jsx(Subscriptions, { handlePortalErrors: handlePortalErrors, companyName: companyName, noSubscriptionsComponent: noSubscriptionsComponent, hideTitle: hideTitle, hideExpiredToggle: hideExpiredToggle }) })));
23503
24012
  };
23504
24013
  var Subscriptions = function (_a) {
23505
24014
  var handlePortalErrors = _a.handlePortalErrors, companyName = _a.companyName, noSubscriptionsComponent = _a.noSubscriptionsComponent, hideTitle = _a.hideTitle, hideExpiredToggle = _a.hideExpiredToggle;
23506
24015
  // Context
23507
24016
  var token = useToken();
23508
24017
  var apiHost = react.useContext(BunnyContext).apiHost;
23509
- var _b = react.useContext(SubscriptionsContext), setUpgradingSubscription = _b.setUpgradingSubscription, updatingChargeQuantityId = _b.updatingChargeQuantityId, setUpdatingChargeQuantityId = _b.setUpdatingChargeQuantityId, setSubscriptionUpgradeId = _b.setSubscriptionUpgradeId, className = _b.className, isInPreviewMode = _b.isInPreviewMode, hideExpiredOverride = _b.hideExpired;
24018
+ var _b = react.useContext(SubscriptionsContext), setUpgradingSubscription = _b.setUpgradingSubscription, className = _b.className, isInPreviewMode = _b.isInPreviewMode, hideExpiredOverride = _b.hideExpired;
23510
24019
  // Local state
23511
- var _c = react.useState(), editingQuoteData = _c[0], setEditingQuoteData = _c[1];
23512
- var _d = react.useState(false), payModalVisible = _d[0], setPayModalVisible = _d[1];
23513
- var _e = react.useState(true), hideExpiredState = _e[0], setHideExpiredState = _e[1];
24020
+ var _c = react.useState(true), hideExpiredState = _c[0], setHideExpiredState = _c[1];
24021
+ var _d = react.useState(false), expiredSwitchVisible = _d[0], setExpiredSwitchVisible = _d[1];
24022
+ var _e = react.useState(false), isChangingPlan = _e[0], setIsChangingPlan = _e[1];
23514
24023
  var _f = react.useState(false), quantityDrawerOpen = _f[0], setQuantityDrawerOpen = _f[1];
23515
- var _g = react.useState(false), expiredSwitchVisible = _g[0], setExpiredSwitchVisible = _g[1];
23516
- var _h = react.useState(false), isChangingPlan = _h[0], setIsChangingPlan = _h[1];
24024
+ // Derived state
23517
24025
  var hideExpired = hideExpiredOverride !== null && hideExpiredOverride !== void 0 ? hideExpiredOverride : hideExpiredState;
23518
24026
  // Hooks
23519
24027
  var queryClient = reactQuery.useQueryClient();
23520
24028
  var showSuccessNotification = common.useSuccessNotification();
23521
- var quoteDelete = useQuoteDelete();
23522
24029
  var isMobile = common.useIsMobile();
23523
- var defaultPaymentMethod = usePaymentMethod({
23524
- token: token,
23525
- apiHost: apiHost,
23526
- }).defaultPaymentMethod;
23527
24030
  var cancelSubscription = useCancelSubscription();
23528
24031
  // Queries
23529
- var quote = reactQuery.useQuery({
23530
- queryKey: common.QueryKeyFactory.default.createObjectKey({
23531
- id: editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id,
23532
- objectName: 'editingQuote',
23533
- token: token,
23534
- }),
23535
- queryFn: function () {
23536
- return (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id) ? getQuote({ token: token, id: editingQuoteData.id, apiHost: apiHost }) : undefined;
23537
- },
23538
- enabled: Boolean(editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id),
23539
- }).data;
23540
- var _j = reactQuery.useQuery({
24032
+ var _g = reactQuery.useQuery({
23541
24033
  queryKey: common.QueryKeyFactory.default.createTableKey({
23542
24034
  pluralType: 'subscriptions',
23543
24035
  token: token,
23544
24036
  }),
23545
24037
  queryFn: function () { return getSubscriptions({ token: token, apiHost: apiHost }); },
23546
- }), subscriptions = _j.data, subscriptionsAreLoading = _j.isLoading;
24038
+ }), subscriptions = _g.data, subscriptionsAreLoading = _g.isLoading;
23547
24039
  // Mutations
23548
24040
  var subscriptionCancel = reactQuery.useMutation({
23549
24041
  mutationFn: function (subscription) {
@@ -23562,50 +24054,13 @@ var Subscriptions = function (_a) {
23562
24054
  // Handlers
23563
24055
  var onChangePlanClick = function (subscription) {
23564
24056
  if (subscription) {
23565
- setSubscriptionUpgradeId(subscription.id);
23566
24057
  setUpgradingSubscription(subscription);
23567
24058
  }
23568
- else {
23569
- setSubscriptionUpgradeId(null);
23570
- setUpgradingSubscription(undefined);
23571
- }
23572
24059
  setIsChangingPlan(true);
23573
24060
  };
23574
24061
  var onCancelSubscriptionClick = function (subscription) {
23575
24062
  subscriptionCancel.mutate(subscription);
23576
24063
  };
23577
- var onSuccess = function () {
23578
- setQuantityDrawerOpen(false);
23579
- setEditingQuoteData(undefined);
23580
- queryClient.invalidateQueries({
23581
- queryKey: common.QueryKeyFactory.default.transactionsKey({ token: token }),
23582
- });
23583
- queryClient.invalidateQueries({
23584
- queryKey: common.QueryKeyFactory.default.createTableKey({
23585
- pluralType: 'subscriptions',
23586
- token: token,
23587
- }),
23588
- });
23589
- showSuccessNotification('Your plan has been updated', 'Payment successful');
23590
- setPayModalVisible(false);
23591
- setHideExpiredState(true);
23592
- };
23593
- var onCancel = function () {
23594
- setPayModalVisible(false);
23595
- };
23596
- var onFail = function (error) {
23597
- handlePortalErrors === null || handlePortalErrors === void 0 ? void 0 : handlePortalErrors(error);
23598
- };
23599
- var onClose = function () {
23600
- if (editingQuoteData) {
23601
- quoteDelete(editingQuoteData.id, apiHost, token);
23602
- setEditingQuoteData(undefined);
23603
- }
23604
- if (updatingChargeQuantityId) {
23605
- setUpdatingChargeQuantityId(undefined);
23606
- }
23607
- setQuantityDrawerOpen(false);
23608
- };
23609
24064
  var allSubscriptionsExpired = subscriptions === null || subscriptions === void 0 ? void 0 : subscriptions.every(function (subscription) {
23610
24065
  var _a, _b;
23611
24066
  return ((_a = subscription.state) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === common.SubscriptionState.EXPIRED ||
@@ -23625,11 +24080,11 @@ var Subscriptions = function (_a) {
23625
24080
  setExpiredSwitchVisible(true);
23626
24081
  }, [hasExpiredOrCanceledSubscriptions, subscriptions]);
23627
24082
  if (isChangingPlan || isInPreviewMode) {
23628
- return (jsxRuntime.jsx(PlanManager, { onChangePlanCancel: function () {
23629
- setIsChangingPlan(false);
23630
- }, handlePortalErrors: handlePortalErrors }));
24083
+ return (jsxRuntime.jsx(QuoteProvider, { children: jsxRuntime.jsx(PlanManager, { onChangePlanCancel: function () {
24084
+ setIsChangingPlan(false);
24085
+ }, handlePortalErrors: handlePortalErrors }) }));
23631
24086
  }
23632
- return (jsxRuntime.jsxs("div", __assign({ className: className }, { children: [!hideTitle ? jsxRuntime.jsx(PageTitle, { title: 'Subscriptions' }) : null, jsxRuntime.jsx(PageHeaderWithActions, __assign({ title: jsxRuntime.jsx(jsxRuntime.Fragment, { children: !hideExpiredToggle && (jsxRuntime.jsxs(Text$1, __assign({ className: "bunny-flex bunny-items-center bunny-justify-between", style: { minWidth: '120px' } }, { children: [hideExpired ? 'Active subscriptions' : 'All subscriptions', isMobile && expiredSwitchVisible && (jsxRuntime.jsx(HideExpiredToggle, { hideExpired: hideExpired, setHideExpired: setHideExpiredState }))] }))) }) }, { children: !isMobile && (jsxRuntime.jsx(SubscriptionsNavigation, { expiredSwitchVisible: !hideExpiredToggle && expiredSwitchVisible, hideExpired: hideExpired, setHideExpired: setHideExpiredState, setQuantityDrawerOpen: setQuantityDrawerOpen, subscriptions: subscriptions })) })), jsxRuntime.jsx(SubscriptionsListContainer, { companyName: companyName, hideExpired: hideExpired, onCancelSubscriptionClick: onCancelSubscriptionClick, onChangePlanClick: onChangePlanClick, subscriptions: subscriptions, subscriptionsAreLoading: subscriptionsAreLoading, noSubscriptionsComponent: noSubscriptionsComponent }), isMobile && (jsxRuntime.jsx("div", __assign({ className: "bunny-pt-4 bunny-pb-2" }, { children: jsxRuntime.jsx(SubscriptionsNavigation, { expiredSwitchVisible: expiredSwitchVisible, hideExpired: hideExpired, setHideExpired: setHideExpiredState, setQuantityDrawerOpen: setQuantityDrawerOpen, subscriptions: subscriptions }) }))), jsxRuntime.jsx(QuantityChangeDrawerDesktop, { editingQuote: quote, editingQuoteData: editingQuoteData, onClose: onClose, open: quantityDrawerOpen, openCheckout: function () { return setPayModalVisible(true); }, setEditingQuoteData: setEditingQuoteData, subscriptions: subscriptions }), jsxRuntime.jsx(Checkout, { onCancel: onCancel, onSuccess: onSuccess, onFail: onFail, open: payModalVisible, quote: quote, token: token, storedPaymentMethod: defaultPaymentMethod })] })));
24087
+ return (jsxRuntime.jsxs("div", __assign({ className: className }, { children: [!hideTitle ? jsxRuntime.jsx(PageTitle, { title: 'Subscriptions' }) : null, jsxRuntime.jsx(PageHeaderWithActions, __assign({ title: jsxRuntime.jsx(jsxRuntime.Fragment, { children: !hideExpiredToggle && (jsxRuntime.jsxs(Text$1, __assign({ className: "bunny-flex bunny-items-center bunny-justify-between", style: { minWidth: '120px' } }, { children: [hideExpired ? 'Active subscriptions' : 'All subscriptions', isMobile && expiredSwitchVisible && (jsxRuntime.jsx(HideExpiredToggle, { hideExpired: hideExpired, setHideExpired: setHideExpiredState }))] }))) }) }, { children: !isMobile && (jsxRuntime.jsx(SubscriptionsNavigation, { expiredSwitchVisible: !hideExpiredToggle && expiredSwitchVisible, hideExpired: hideExpired, setHideExpired: setHideExpiredState, setQuantityDrawerOpen: setQuantityDrawerOpen, subscriptions: subscriptions })) })), jsxRuntime.jsx(SubscriptionsListContainer, { companyName: companyName, hideExpired: hideExpired, onCancelSubscriptionClick: onCancelSubscriptionClick, onChangePlanClick: onChangePlanClick, subscriptions: subscriptions, subscriptionsAreLoading: subscriptionsAreLoading, noSubscriptionsComponent: noSubscriptionsComponent }), isMobile && (jsxRuntime.jsx("div", __assign({ className: "bunny-pt-4 bunny-pb-2" }, { children: jsxRuntime.jsx(SubscriptionsNavigation, { expiredSwitchVisible: expiredSwitchVisible, hideExpired: hideExpired, setHideExpired: setHideExpiredState, setQuantityDrawerOpen: setQuantityDrawerOpen, subscriptions: subscriptions }) }))), jsxRuntime.jsx(QuantityDrawerContainer, { subscriptions: subscriptions, quantityDrawerOpen: quantityDrawerOpen, setQuantityDrawerOpen: setQuantityDrawerOpen, handlePortalErrors: handlePortalErrors, setHideExpiredState: setHideExpiredState })] })));
23633
24088
  };
23634
24089
  var PageHeaderWithActions = function (_a) {
23635
24090
  var children = _a.children, title = _a.title;
@@ -23671,7 +24126,6 @@ var billingDetailsUpdate = function (_a) {
23671
24126
  });
23672
24127
  };
23673
24128
 
23674
- // TODO: move this to common
23675
24129
  var billingDetailsQuery = function () {
23676
24130
  return "\nquery BillingDetails {\n billingDetails {\n billingCity\n billingContact {\n email\n }\n billingCountry\n billingState\n billingStreet\n billingZip\n name\n taxNumber\n currency {\n id\n }\n }\n}";
23677
24131
  };
@@ -23876,9 +24330,6 @@ var PaymentFormSection = function (_a) {
23876
24330
  var onTokenExpired = react.useContext(BunnyContext).onTokenExpired;
23877
24331
  var handleAllErrorFormats = common.useAllErrorFormats(onTokenExpired);
23878
24332
  var showSuccessNotification = common.useSuccessNotification();
23879
- var token = useToken();
23880
- var account = useCurrentUserData(token).account;
23881
- var currencyId = account === null || account === void 0 ? void 0 : account.currencyId;
23882
24333
  return (jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile || hideBillingDetailsForm ? 'bunny-w-full' : 'bunny-w-1/2 bunny-pt-4', " bunny-flex bunny-justify-center") }, { children: jsxRuntime.jsx(PaymentForm, { onFail: function (error) {
23883
24334
  handleAllErrorFormats(error);
23884
24335
  }, onSavePaymentMethod: function (response) {
@@ -23888,7 +24339,7 @@ var PaymentFormSection = function (_a) {
23888
24339
  // TODO: onSavePaymentMethod(response: any) should be cleaned up to have a response type (not any)
23889
24340
  // and work with both stripe and demo pay requests
23890
24341
  onSavePaymentMethod === null || onSavePaymentMethod === void 0 ? void 0 : onSavePaymentMethod(response);
23891
- }, currencyId: currencyId }) })));
24342
+ } }) })));
23892
24343
  };
23893
24344
 
23894
24345
  exports.BillingDetails = BillingDetails;