@bunnyapp/components 1.0.68 → 1.0.70
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.
- package/dist/cjs/index.js +504 -391
- package/dist/cjs/src/components/BillingDetails/BillingDetailsForm.d.ts +1 -1
- package/dist/cjs/src/components/Checkout/Checkout.d.ts +1 -3
- package/dist/cjs/src/components/Checkout/checkoutUtils.d.ts +1 -1
- package/dist/cjs/src/components/PaymentForm/PaymentForm.d.ts +2 -1
- package/dist/cjs/src/components/Quote/AcceptQuoteModal.d.ts +1 -1
- package/dist/cjs/src/components/Quote/Quote.stories.d.ts +5 -5
- package/dist/cjs/src/components/Signup/CheckoutSummary.d.ts +11 -0
- package/dist/cjs/src/components/Signup/PaymentForms.d.ts +6 -0
- package/dist/cjs/src/components/Signup/Signup.d.ts +1 -3
- package/dist/cjs/src/components/Subscriptions/PlanManager/PlanManager.d.ts +0 -4
- package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutBarSummarySection.d.ts +2 -1
- package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/PlanPickerCheckoutBar.d.ts +1 -1
- package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/BillingPeriodSelector.d.ts +2 -2
- package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/planPickerMobile/PriceListCardMobile.d.ts +1 -1
- package/dist/cjs/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardDescription.d.ts +1 -1
- package/dist/cjs/src/components/Subscriptions/Subscriptions.stories.d.ts +2 -2
- package/dist/cjs/src/components/Subscriptions/SubscriptionsContext.d.ts +2 -1
- package/dist/cjs/src/components/Transactions/Transactions.d.ts +5 -5
- package/dist/cjs/src/contexts/PaymentContext.d.ts +1 -1
- package/dist/cjs/src/graphql/mutations/accountSignup.d.ts +1 -2
- package/dist/cjs/src/graphql/mutations/quoteAccountSignup.d.ts +3 -2
- package/dist/cjs/src/graphql/mutations/quoteChangeAddCoupon.d.ts +8 -0
- package/dist/cjs/src/graphql/mutations/quoteChangeRemoveCoupon.d.ts +8 -0
- package/dist/cjs/src/hooks/quotes/useSendAcceptQuote.d.ts +1 -2
- package/dist/cjs/src/hooks/usePaymentPlugins.d.ts +24 -3
- package/dist/cjs/src/styles/constants.d.ts +0 -3
- package/dist/esm/index.js +510 -378
- package/dist/esm/src/components/BillingDetails/BillingDetailsForm.d.ts +1 -1
- package/dist/esm/src/components/Checkout/Checkout.d.ts +1 -3
- package/dist/esm/src/components/Checkout/checkoutUtils.d.ts +1 -1
- package/dist/esm/src/components/PaymentForm/PaymentForm.d.ts +2 -1
- package/dist/esm/src/components/Quote/AcceptQuoteModal.d.ts +1 -1
- package/dist/esm/src/components/Quote/Quote.stories.d.ts +5 -5
- package/dist/esm/src/components/Signup/CheckoutSummary.d.ts +11 -0
- package/dist/esm/src/components/Signup/PaymentForms.d.ts +6 -0
- package/dist/esm/src/components/Signup/Signup.d.ts +1 -3
- package/dist/esm/src/components/Subscriptions/PlanManager/PlanManager.d.ts +0 -4
- package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/CheckoutBarSummarySection.d.ts +2 -1
- package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/checkoutBar/PlanPickerCheckoutBar.d.ts +1 -1
- package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerDesktop/BillingPeriodSelector.d.ts +2 -2
- package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/planPickerMobile/PriceListCardMobile.d.ts +1 -1
- package/dist/esm/src/components/Subscriptions/PlanManager/PlanPicker/priceListCard/PriceListCardDescription.d.ts +1 -1
- package/dist/esm/src/components/Subscriptions/Subscriptions.stories.d.ts +2 -2
- package/dist/esm/src/components/Subscriptions/SubscriptionsContext.d.ts +2 -1
- package/dist/esm/src/components/Transactions/Transactions.d.ts +5 -5
- package/dist/esm/src/contexts/PaymentContext.d.ts +1 -1
- package/dist/esm/src/graphql/mutations/accountSignup.d.ts +1 -2
- package/dist/esm/src/graphql/mutations/quoteAccountSignup.d.ts +3 -2
- package/dist/esm/src/graphql/mutations/quoteChangeAddCoupon.d.ts +8 -0
- package/dist/esm/src/graphql/mutations/quoteChangeRemoveCoupon.d.ts +8 -0
- package/dist/esm/src/hooks/quotes/useSendAcceptQuote.d.ts +1 -2
- package/dist/esm/src/hooks/usePaymentPlugins.d.ts +24 -3
- package/dist/esm/src/styles/constants.d.ts +0 -3
- package/dist/index.d.ts +3 -4
- package/package.json +4 -6
- package/dist/cjs/src/graphql/mutations/quoteAddCoupon.d.ts +0 -8
- package/dist/cjs/src/styles/AntdOverrides.d.ts +0 -3
- package/dist/esm/src/graphql/mutations/quoteAddCoupon.d.ts +0 -8
- package/dist/esm/src/styles/AntdOverrides.d.ts +0 -3
package/dist/cjs/index.js
CHANGED
|
@@ -16,7 +16,6 @@ var request = require('graphql-request');
|
|
|
16
16
|
var react$1 = require('@pdf-viewer/react');
|
|
17
17
|
var reactStripeJs = require('@stripe/react-stripe-js');
|
|
18
18
|
var index_js = require('@stripe/stripe-js/pure/index.js');
|
|
19
|
-
var parse = require('html-react-parser');
|
|
20
19
|
var reactFontawesome = require('@fortawesome/react-fontawesome');
|
|
21
20
|
var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
|
|
22
21
|
var recharts = require('recharts');
|
|
@@ -25,28 +24,9 @@ var pkg = require('pluralize');
|
|
|
25
24
|
|
|
26
25
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
27
26
|
|
|
28
|
-
function _interopNamespace(e) {
|
|
29
|
-
if (e && e.__esModule) return e;
|
|
30
|
-
var n = Object.create(null);
|
|
31
|
-
if (e) {
|
|
32
|
-
Object.keys(e).forEach(function (k) {
|
|
33
|
-
if (k !== 'default') {
|
|
34
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
35
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
get: function () { return e[k]; }
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
n["default"] = e;
|
|
43
|
-
return Object.freeze(n);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
27
|
var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
|
|
47
28
|
var theme__default = /*#__PURE__*/_interopDefaultLegacy(theme);
|
|
48
29
|
var request__default = /*#__PURE__*/_interopDefaultLegacy(request);
|
|
49
|
-
var parse__default = /*#__PURE__*/_interopDefaultLegacy(parse);
|
|
50
30
|
var pkg__default = /*#__PURE__*/_interopDefaultLegacy(pkg);
|
|
51
31
|
|
|
52
32
|
function styleInject(css, ref) {
|
|
@@ -76,7 +56,7 @@ function styleInject(css, ref) {
|
|
|
76
56
|
}
|
|
77
57
|
}
|
|
78
58
|
|
|
79
|
-
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-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-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-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.bunny-flex-row {\n flex-direction: row;\n}\n.bunny-flex-col {\n flex-direction: column;\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-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-2 {\n padding: 0.5rem;\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-pb-8 {\n padding-bottom: 2rem;\n}\n.bunny-pl-0 {\n padding-left: 0px;\n}\n.bunny-pl-4 {\n padding-left: 1rem;\n}\n.bunny-pr-4 {\n padding-right: 1rem;\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-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-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-0 {\n margin-top: 0px;\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.mr-4 {\n margin-right: 1rem;\n}\n.mb-0 {\n margin-bottom: 0px;\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.whitespace-pre-wrap {\n white-space: pre-wrap;\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.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-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.bg-red-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 113 113 / 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-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / 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.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@media (min-width: 768px) {\n .sm\\:flex {\n display: flex;\n }\n .sm\\:hidden {\n display: none;\n }\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-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-my-0 {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.bunny-my-12 {\n margin-top: 3rem;\n margin-bottom: 3rem;\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-1 {\n margin-top: 0.25rem;\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-mb-5 {\n margin-bottom: 1.25rem;\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-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-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.bunny-flex-row {\n flex-direction: row;\n}\n.bunny-flex-col {\n flex-direction: column;\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-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-bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / 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-2 {\n padding: 0.5rem;\n}\n.bunny-p-4 {\n padding: 1rem;\n}\n.bunny-p-6 {\n padding: 1.5rem;\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-pb-8 {\n padding-bottom: 2rem;\n}\n.bunny-pl-0 {\n padding-left: 0px;\n}\n.bunny-pl-4 {\n padding-left: 1rem;\n}\n.bunny-pr-4 {\n padding-right: 1rem;\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-pl-2 {\n padding-left: 0.5rem;\n}\n.bunny-pl-12 {\n padding-left: 3rem;\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-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";
|
|
80
60
|
styleInject(css_248z);
|
|
81
61
|
|
|
82
62
|
/******************************************************************************
|
|
@@ -174,7 +154,7 @@ var BrandContext = react.createContext({
|
|
|
174
154
|
});
|
|
175
155
|
|
|
176
156
|
// This will be replaced at build time by rollup-plugin-replace
|
|
177
|
-
var PACKAGE_VERSION = '1.0.
|
|
157
|
+
var PACKAGE_VERSION = '1.0.69';
|
|
178
158
|
var createRequestHeaders = function (token) {
|
|
179
159
|
var headers = common.createClientDevHeaders(token);
|
|
180
160
|
// Add the components version header
|
|
@@ -218,7 +198,7 @@ var gqlRequest = function (_a) {
|
|
|
218
198
|
});
|
|
219
199
|
};
|
|
220
200
|
|
|
221
|
-
var MUTATION$
|
|
201
|
+
var MUTATION$b = "\n query entityBranding {\n entityBranding {\n accentColor\n brandColor\n topNavImageUrl\n }\n }\n";
|
|
222
202
|
var getBranding = function (_a) {
|
|
223
203
|
var token = _a.token, apiHost = _a.apiHost;
|
|
224
204
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -226,7 +206,7 @@ var getBranding = function (_a) {
|
|
|
226
206
|
return __generator(this, function (_b) {
|
|
227
207
|
switch (_b.label) {
|
|
228
208
|
case 0: return [4 /*yield*/, gqlRequest({
|
|
229
|
-
query: MUTATION$
|
|
209
|
+
query: MUTATION$b,
|
|
230
210
|
token: token,
|
|
231
211
|
apiHost: apiHost,
|
|
232
212
|
})];
|
|
@@ -248,14 +228,6 @@ var createGraphQLClient = function (apiHost, token) {
|
|
|
248
228
|
});
|
|
249
229
|
};
|
|
250
230
|
|
|
251
|
-
var BLUE_GRAY_HEX = '#717D94';
|
|
252
|
-
var CHARCOAL_GRAY = '#232323';
|
|
253
|
-
var PRIMARY_COLOR = '#FF5833';
|
|
254
|
-
var SECONDARY_SUCCESS_COLOR = '#00B76A';
|
|
255
|
-
|
|
256
|
-
var AntdOverrides = styled__default["default"].div(templateObject_1$d || (templateObject_1$d = __makeTemplateObject(["\n && .ant-popover {\n z-index: 1050;\n }\n && .ant-popover-inner-content {\n display: flex;\n flex-direction: column;\n\n gap: 0.5rem;\n max-width: 300px;\n }\n && .ant-popover-message-title {\n padding: 0;\n text-align: center;\n font-size: 1rem;\n }\n && .ant-popover-buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n && .ant-btn-link:disabled {\n color: ", ";\n }\n && .ant-btn-link:disabled:hover {\n background-color: transparent;\n }\n\n && .ant-notification {\n width: min-content;\n }\n && .ant-notification-topRight {\n right: 0;\n left: 0;\n margin-left: auto;\n margin-right: auto;\n }\n && .ant-notification-notice-wrapper {\n width: 350px;\n overflow: hidden;\n }\n && .ant-notification-notice {\n padding: 16px;\n width: 350px;\n\n display: flex;\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.08), 0px 1px 18px rgba(0, 0, 0, 0.08),\n 0px 3px 5px rgba(0, 0, 0, 0.16);\n }\n\n && .ant-notification-notice-description {\n padding: 0 14px 0 0;\n color: ", ";\n font-size: 14px;\n overflow-wrap: break-word;\n }\n\n && .ant-notification-notice-success {\n background-color: #edfffa;\n }\n && .ant-notification-notice-error {\n background-color: #fff8f4;\n }\n && .ant-notification-notice-error .ant-notification-notice-message {\n color: ", ";\n font-weight: 500;\n }\n && .ant-notification-notice-error .ant-notification-notice-icon {\n color: ", ";\n }\n\n && .ant-notification-notice-success .ant-notification-notice-message {\n color: ", ";\n font-weight: 500;\n }\n && .ant-notification-notice-success .ant-notification-notice-icon {\n color: ", ";\n }\n\n && .ant-notification-notice-message {\n margin-bottom: 0;\n }\n\n && .ant-notification-notice-close {\n top: 16px;\n right: 16px;\n }\n\n && .ant-menu-submenu-popup > .ant-menu .ant-menu-item {\n display: flex;\n align-items: center;\n }\n && .ant-menu-submenu::after {\n display: none;\n }\n"], ["\n && .ant-popover {\n z-index: 1050;\n }\n && .ant-popover-inner-content {\n display: flex;\n flex-direction: column;\n\n gap: 0.5rem;\n max-width: 300px;\n }\n && .ant-popover-message-title {\n padding: 0;\n text-align: center;\n font-size: 1rem;\n }\n && .ant-popover-buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n && .ant-btn-link:disabled {\n color: ", ";\n }\n && .ant-btn-link:disabled:hover {\n background-color: transparent;\n }\n\n && .ant-notification {\n width: min-content;\n }\n && .ant-notification-topRight {\n right: 0;\n left: 0;\n margin-left: auto;\n margin-right: auto;\n }\n && .ant-notification-notice-wrapper {\n width: 350px;\n overflow: hidden;\n }\n && .ant-notification-notice {\n padding: 16px;\n width: 350px;\n\n display: flex;\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.08), 0px 1px 18px rgba(0, 0, 0, 0.08),\n 0px 3px 5px rgba(0, 0, 0, 0.16);\n }\n\n && .ant-notification-notice-description {\n padding: 0 14px 0 0;\n color: ", ";\n font-size: 14px;\n overflow-wrap: break-word;\n }\n\n && .ant-notification-notice-success {\n background-color: #edfffa;\n }\n && .ant-notification-notice-error {\n background-color: #fff8f4;\n }\n && .ant-notification-notice-error .ant-notification-notice-message {\n color: ", ";\n font-weight: 500;\n }\n && .ant-notification-notice-error .ant-notification-notice-icon {\n color: ", ";\n }\n\n && .ant-notification-notice-success .ant-notification-notice-message {\n color: ", ";\n font-weight: 500;\n }\n && .ant-notification-notice-success .ant-notification-notice-icon {\n color: ", ";\n }\n\n && .ant-notification-notice-message {\n margin-bottom: 0;\n }\n\n && .ant-notification-notice-close {\n top: 16px;\n right: 16px;\n }\n\n && .ant-menu-submenu-popup > .ant-menu .ant-menu-item {\n display: flex;\n align-items: center;\n }\n && .ant-menu-submenu::after {\n display: none;\n }\n"])), BLUE_GRAY_HEX, CHARCOAL_GRAY, PRIMARY_COLOR, PRIMARY_COLOR, SECONDARY_SUCCESS_COLOR, SECONDARY_SUCCESS_COLOR);
|
|
257
|
-
var templateObject_1$d;
|
|
258
|
-
|
|
259
231
|
var BunnyContext = react.createContext({});
|
|
260
232
|
var extraQueryClient = new reactQuery.QueryClient();
|
|
261
233
|
// Every component shares similar props and functionality, which this wrapper handles.
|
|
@@ -277,7 +249,7 @@ function BunnyProvider(_a) {
|
|
|
277
249
|
apiHost: apiHost,
|
|
278
250
|
token: token,
|
|
279
251
|
onTokenExpired: onTokenExpired,
|
|
280
|
-
} }, { children: jsxRuntime.jsx(reactQuery.QueryClientProvider, __assign({ client: queryClient || extraQueryClient }, { children: jsxRuntime.jsx(ContextualWrapper, __assign({ darkMode: darkMode, configProviderProps: configProviderProps }, { children:
|
|
252
|
+
} }, { children: jsxRuntime.jsx(reactQuery.QueryClientProvider, __assign({ client: queryClient || extraQueryClient }, { children: jsxRuntime.jsx(ContextualWrapper, __assign({ darkMode: darkMode, configProviderProps: configProviderProps }, { children: children })) })) })));
|
|
281
253
|
}
|
|
282
254
|
function ContextualWrapper(_a) {
|
|
283
255
|
var children = _a.children, darkMode = _a.darkMode, configProviderProps = _a.configProviderProps;
|
|
@@ -335,7 +307,7 @@ function ContextualWrapper(_a) {
|
|
|
335
307
|
itemMarginBottom: 0,
|
|
336
308
|
verticalLabelPadding: '4px',
|
|
337
309
|
},
|
|
338
|
-
} }, configProviderProps) }, { children: children })) })) }));
|
|
310
|
+
} }, configProviderProps) }, { children: jsxRuntime.jsx("div", __assign({ className: "bunny-components bunny-contents" }, { children: children })) })) })) }));
|
|
339
311
|
}
|
|
340
312
|
|
|
341
313
|
var useAjax = function (onError) {
|
|
@@ -409,6 +381,19 @@ function useToken() {
|
|
|
409
381
|
}
|
|
410
382
|
|
|
411
383
|
var LISENSE_KEY = 'eyJkYXRhIjoiZXlKMElqb2liM0puWVc1cGVtRjBhVzl1SWl3aVlYWjFJam94TnpneU5ETXhPVGs1TENKa2JTSTZJbUoxYm01NUxtTnZiU0lzSW00aU9pSmhOV1F5TWpKaFpXTTNOelF5TkdFNUlpd2laWGh3SWpveE56WTJORFEzT1RrNUxDSmtiWFFpT2lKM2FXeGtZMkZ5WkNKOSIsInNpZ25hdHVyZSI6ImdJWW5BYWp0WW1aSHV1b1RrTkZCZnRGYjEzUTJOZXZwQXlKRmszdy9STDNUa08rRXZYWlV0MDZxenBrZWdOK1A4TXlkbFY1aityemQvM1VpYlB5SW1VSzAweHZSVk5hS29EOXB0cVpkbjR5SWRRdE1pU1NjZ0J1K1RkM0NXM2FONVNrdlNJVDEyTGpBMnVVYll2RmJ6RFpMci9hODkwa05sT0NQZURoVjMyd0w3R0NrTnV2Z1MyZlk5Mis0L25FdUdvZXBZR0RPN0Ryb3NaOGVlbnJ6b1BsQ044T204eFlMNXJxdUkvS2xLVTVYaGN0allrdzBTR0FlL0pDR1dTN1dLTDAvYmFvbS9GS1ltNU91VmlzcmlDVlc2UXgvbzBnTGE4bUtXLytMb3pNaHdFemdtU2I2S0xERzZpTEVPL0czQ2pYN2p2dTU1NEc4OUx2aW1BaE5BQT09In0=';
|
|
384
|
+
// Custom zoom layout component that uses useZoomContext
|
|
385
|
+
var CustomZoomLayout = function () {
|
|
386
|
+
// Consume from the controller provider
|
|
387
|
+
var _a = react$1.useZoomContext(), currentZoom = _a.currentZoom, setZoomLevel = _a.setZoomLevel;
|
|
388
|
+
var mountTimeRef = react.useRef(Date.now());
|
|
389
|
+
// Set default zoom to 100% once the document is loaded
|
|
390
|
+
react.useEffect(function () {
|
|
391
|
+
if (currentZoom < 1 && Date.now() - mountTimeRef.current < 3000) {
|
|
392
|
+
setZoomLevel(100);
|
|
393
|
+
}
|
|
394
|
+
}, [currentZoom, setZoomLevel]);
|
|
395
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
396
|
+
};
|
|
412
397
|
var DocumentTemplatePreview = function (_a) {
|
|
413
398
|
var targetUrl = _a.targetUrl;
|
|
414
399
|
var _b = react.useState(null), pdfUrl = _b[0], setPdfUrl = _b[1];
|
|
@@ -456,16 +441,16 @@ var DocumentTemplatePreview = function (_a) {
|
|
|
456
441
|
if (!pdfUrl) {
|
|
457
442
|
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
458
443
|
}
|
|
459
|
-
return (jsxRuntime.jsx("div", __assign({ className: "bunny-rounded bunny-w-full bunny-overflow-hidden bunny-grow bunny-min-h-0" }, { children: jsxRuntime.jsx(react$1.RPConfig, __assign({ licenseKey: LISENSE_KEY }, { children: jsxRuntime.
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
444
|
+
return (jsxRuntime.jsx("div", __assign({ className: "bunny-rounded bunny-w-full bunny-overflow-hidden bunny-grow bunny-min-h-0" }, { children: jsxRuntime.jsx(react$1.RPConfig, __assign({ licenseKey: LISENSE_KEY }, { children: jsxRuntime.jsxs(react$1.RPProvider, __assign({ src: pdfUrl }, { children: [jsxRuntime.jsx(CustomZoomLayout, {}), jsxRuntime.jsx(react$1.RPDefaultLayout, __assign({ style: {
|
|
445
|
+
width: '100%',
|
|
446
|
+
height: '100%',
|
|
447
|
+
}, slots: {
|
|
448
|
+
openFileTool: false,
|
|
449
|
+
downloadTool: false,
|
|
450
|
+
} }, { children: jsxRuntime.jsx(react$1.RPPages, {}) }))] })) })) })));
|
|
466
451
|
};
|
|
467
452
|
|
|
468
|
-
var MarkupContainer = defaultStyled.div(templateObject_1$
|
|
453
|
+
var MarkupContainer = defaultStyled.div(templateObject_1$b || (templateObject_1$b = __makeTemplateObject(["\n span {\n width: 100%;\n }\n"], ["\n span {\n width: 100%;\n }\n"])));
|
|
469
454
|
var InvoiceQuoteView = function (_a) {
|
|
470
455
|
var children = _a.children, formattedInvoice = _a.formattedInvoice, html = _a.html, backButtonName = _a.backButtonName, onBackButtonClick = _a.onBackButtonClick, onDownloadError = _a.onDownloadError, targetUrl = _a.targetUrl;
|
|
471
456
|
var downloadFile = useDownloadFile(formattedInvoice === null || formattedInvoice === void 0 ? void 0 : formattedInvoice.id, onDownloadError);
|
|
@@ -483,7 +468,7 @@ var InvoiceQuoteView = function (_a) {
|
|
|
483
468
|
minWidth: '750px',
|
|
484
469
|
} }, { children: [targetUrl ? (jsxRuntime.jsx(DocumentTemplatePreview, { targetUrl: targetUrl })) : (jsxRuntime.jsx(interweave.Markup, { content: html })), children] })))] })));
|
|
485
470
|
};
|
|
486
|
-
var templateObject_1$
|
|
471
|
+
var templateObject_1$b;
|
|
487
472
|
|
|
488
473
|
var fetchPDF = function (apiHost, documentUuid, documentType, token) { return __awaiter(void 0, void 0, void 0, function () {
|
|
489
474
|
var response;
|
|
@@ -531,6 +516,41 @@ function LegacyDocument(_a) {
|
|
|
531
516
|
}, title: "Invoice PDF", width: "100%" }));
|
|
532
517
|
}
|
|
533
518
|
|
|
519
|
+
var MUTATION$a = "\n mutation checkout(\n $invoiceId: ID,\n $quoteId: ID,\n $paymentMethodId: ID,\n $paymentMethodData: CheckoutPaymentMethodAttributes\n ) {\n checkout(\n invoiceId: $invoiceId,\n quoteId: $quoteId,\n paymentMethodId: $paymentMethodId,\n paymentMethodData: $paymentMethodData\n ) {\n invoice {\n id\n state\n amount\n amountDue\n }\n payment {\n id\n state\n amount\n }\n paymentApplication {\n id\n invoiceId\n paymentId\n }\n transaction {\n id\n amount\n }\n }\n }\n";
|
|
520
|
+
var checkout = function (_a) {
|
|
521
|
+
var quoteId = _a.quoteId, invoiceId = _a.invoiceId, paymentMethodId = _a.paymentMethodId, paymentMethodData = _a.paymentMethodData, token = _a.token, apiHost = _a.apiHost;
|
|
522
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
523
|
+
var mutationVars, response, errors;
|
|
524
|
+
return __generator(this, function (_b) {
|
|
525
|
+
switch (_b.label) {
|
|
526
|
+
case 0:
|
|
527
|
+
mutationVars = {
|
|
528
|
+
quoteId: quoteId,
|
|
529
|
+
invoiceId: invoiceId,
|
|
530
|
+
paymentMethodId: paymentMethodId,
|
|
531
|
+
};
|
|
532
|
+
if (paymentMethodData) {
|
|
533
|
+
mutationVars.paymentMethodData = __assign(__assign({}, paymentMethodData), { metadata: paymentMethodData.metadata });
|
|
534
|
+
}
|
|
535
|
+
return [4 /*yield*/, gqlRequest({
|
|
536
|
+
query: MUTATION$a,
|
|
537
|
+
token: token,
|
|
538
|
+
vars: mutationVars,
|
|
539
|
+
apiHost: apiHost,
|
|
540
|
+
})];
|
|
541
|
+
case 1:
|
|
542
|
+
response = _b.sent();
|
|
543
|
+
errors = (response === null || response === void 0 ? void 0 : response.checkout).errors;
|
|
544
|
+
if (errors)
|
|
545
|
+
throw errors;
|
|
546
|
+
return [2 /*return*/, {
|
|
547
|
+
savePaymentMethod: paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.savePaymentMethod,
|
|
548
|
+
}];
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
});
|
|
552
|
+
};
|
|
553
|
+
|
|
534
554
|
var paymentMethodsQuery = function (filter) { return "query paymentMethods {\n paymentMethods ".concat(filter ? "(".concat(filter, ")") : '', " {\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}"); };
|
|
535
555
|
var getPaymentMethods = function (_a) {
|
|
536
556
|
var apiHost = _a.apiHost, token = _a.token, accountId = _a.accountId;
|
|
@@ -570,11 +590,15 @@ var usePaymentMethod = function (_a) {
|
|
|
570
590
|
};
|
|
571
591
|
|
|
572
592
|
var filterPaymentPlugins = function (plugins) {
|
|
593
|
+
return plugins === null || plugins === void 0 ? void 0 : plugins.filter(function (plugin) { var _a, _b; return ((_a = plugin.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'payment' && ((_b = plugin.status) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'valid'; });
|
|
594
|
+
};
|
|
595
|
+
var filterPaymentPluginsByEntity = function (plugins, selectedEntityId) {
|
|
573
596
|
return plugins === null || plugins === void 0 ? void 0 : plugins.filter(function (plugin) {
|
|
574
|
-
var _a, _b
|
|
575
|
-
return
|
|
576
|
-
|
|
577
|
-
((
|
|
597
|
+
var _a, _b;
|
|
598
|
+
return selectedEntityId === undefined ||
|
|
599
|
+
selectedEntityId === null ||
|
|
600
|
+
((_a = plugin.entities) === null || _a === void 0 ? void 0 : _a.includes(selectedEntityId)) ||
|
|
601
|
+
((_b = plugin.entities) === null || _b === void 0 ? void 0 : _b.length) === 0;
|
|
578
602
|
});
|
|
579
603
|
};
|
|
580
604
|
var MUTATION$9 = "{\n paymentPlugins {\n enabled\n entities\n guid\n hidden\n id\n name\n status\n type\n webhookEnabled\n components\n }\n}";
|
|
@@ -603,19 +627,18 @@ var getPaymentPlugins = function (_a) {
|
|
|
603
627
|
});
|
|
604
628
|
};
|
|
605
629
|
var usePaymentPlugins = function (_a) {
|
|
606
|
-
var apiHost = _a.apiHost, token = _a.token;
|
|
630
|
+
var apiHost = _a.apiHost, token = _a.token, selectedEntityId = _a.selectedEntityId;
|
|
607
631
|
var _b = reactQuery.useQuery({
|
|
608
632
|
queryKey: ['paymentPlugins', token],
|
|
609
633
|
queryFn: function () { return getPaymentPlugins({ apiHost: apiHost, token: token }); },
|
|
610
634
|
staleTime: 5 * 60 * 1000, // Consider data fresh for 5 minutes
|
|
611
635
|
}), paymentPlugins = _b.data, isFetched = _b.isFetched;
|
|
612
636
|
var filteredPaymentPlugins = filterPaymentPlugins(paymentPlugins);
|
|
613
|
-
var
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
});
|
|
637
|
+
var filteredPaymentPluginsByEntity = selectedEntityId
|
|
638
|
+
? filterPaymentPluginsByEntity(filteredPaymentPlugins, selectedEntityId)
|
|
639
|
+
: filteredPaymentPlugins;
|
|
617
640
|
return {
|
|
618
|
-
paymentPlugins:
|
|
641
|
+
paymentPlugins: filteredPaymentPluginsByEntity,
|
|
619
642
|
isFetched: isFetched,
|
|
620
643
|
};
|
|
621
644
|
};
|
|
@@ -624,41 +647,6 @@ var getQuoteAmountDue = function (quote) {
|
|
|
624
647
|
return quote.amountDue || quote.amount;
|
|
625
648
|
};
|
|
626
649
|
|
|
627
|
-
var MUTATION$8 = "\n mutation checkout(\n $invoiceId: ID,\n $quoteId: ID,\n $paymentMethodId: ID,\n $paymentMethodData: CheckoutPaymentMethodAttributes\n ) {\n checkout(\n invoiceId: $invoiceId,\n quoteId: $quoteId,\n paymentMethodId: $paymentMethodId,\n paymentMethodData: $paymentMethodData\n ) {\n invoice {\n id\n state\n amount\n amountDue\n }\n payment {\n id\n state\n amount\n }\n paymentApplication {\n id\n invoiceId\n paymentId\n }\n transaction {\n id\n amount\n }\n }\n }\n";
|
|
628
|
-
var checkout = function (_a) {
|
|
629
|
-
var quoteId = _a.quoteId, invoiceId = _a.invoiceId, paymentMethodId = _a.paymentMethodId, paymentMethodData = _a.paymentMethodData, token = _a.token, apiHost = _a.apiHost;
|
|
630
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
631
|
-
var mutationVars, response, errors;
|
|
632
|
-
return __generator(this, function (_b) {
|
|
633
|
-
switch (_b.label) {
|
|
634
|
-
case 0:
|
|
635
|
-
mutationVars = {
|
|
636
|
-
quoteId: quoteId,
|
|
637
|
-
invoiceId: invoiceId,
|
|
638
|
-
paymentMethodId: paymentMethodId,
|
|
639
|
-
};
|
|
640
|
-
if (paymentMethodData) {
|
|
641
|
-
mutationVars.paymentMethodData = __assign(__assign({}, paymentMethodData), { metadata: paymentMethodData.metadata });
|
|
642
|
-
}
|
|
643
|
-
return [4 /*yield*/, gqlRequest({
|
|
644
|
-
query: MUTATION$8,
|
|
645
|
-
token: token,
|
|
646
|
-
vars: mutationVars,
|
|
647
|
-
apiHost: apiHost,
|
|
648
|
-
})];
|
|
649
|
-
case 1:
|
|
650
|
-
response = _b.sent();
|
|
651
|
-
errors = (response === null || response === void 0 ? void 0 : response.checkout).errors;
|
|
652
|
-
if (errors)
|
|
653
|
-
throw errors;
|
|
654
|
-
return [2 /*return*/, {
|
|
655
|
-
savePaymentMethod: paymentMethodData === null || paymentMethodData === void 0 ? void 0 : paymentMethodData.savePaymentMethod,
|
|
656
|
-
}];
|
|
657
|
-
}
|
|
658
|
-
});
|
|
659
|
-
});
|
|
660
|
-
};
|
|
661
|
-
|
|
662
650
|
function usePay$1(_a) {
|
|
663
651
|
var _this = this;
|
|
664
652
|
var onPaymentSuccess = _a.onPaymentSuccess, onPaymentError = _a.onPaymentError, quote = _a.quote, invoice = _a.invoice, storedPaymentMethod = _a.storedPaymentMethod, plugin = _a.plugin;
|
|
@@ -18333,9 +18321,7 @@ var lodashExports = requireLodash();
|
|
|
18333
18321
|
var Card = function (_a) {
|
|
18334
18322
|
var children = _a.children, className = _a.className, style = _a.style;
|
|
18335
18323
|
var darkMode = react.useContext(BunnyContext).darkMode;
|
|
18336
|
-
return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-rounded-md
|
|
18337
|
-
? "var(--row-background-dark)"
|
|
18338
|
-
: "var(--row-background)" }) }, { children: children })));
|
|
18324
|
+
return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-rounded-md ".concat(className), style: __assign(__assign({}, style), { backgroundColor: darkMode ? 'var(--row-background-dark)' : 'var(--row-background)' }) }, { children: children })));
|
|
18339
18325
|
};
|
|
18340
18326
|
|
|
18341
18327
|
var tagStyleMap = {
|
|
@@ -18759,7 +18745,7 @@ var DemoPayForm = function (_a) {
|
|
|
18759
18745
|
cvc: '',
|
|
18760
18746
|
}), cardDetails = _d[0], setCardDetails = _d[1];
|
|
18761
18747
|
var onSave = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
18762
|
-
var error_1;
|
|
18748
|
+
var error_1, errorResponse;
|
|
18763
18749
|
return __generator(this, function (_a) {
|
|
18764
18750
|
switch (_a.label) {
|
|
18765
18751
|
case 0:
|
|
@@ -18775,7 +18761,12 @@ var DemoPayForm = function (_a) {
|
|
|
18775
18761
|
return [3 /*break*/, 3];
|
|
18776
18762
|
case 2:
|
|
18777
18763
|
error_1 = _a.sent();
|
|
18778
|
-
|
|
18764
|
+
errorResponse = {
|
|
18765
|
+
response: {
|
|
18766
|
+
message: error_1.message,
|
|
18767
|
+
},
|
|
18768
|
+
};
|
|
18769
|
+
onFail(errorResponse);
|
|
18779
18770
|
return [3 /*break*/, 3];
|
|
18780
18771
|
case 3: return [2 /*return*/];
|
|
18781
18772
|
}
|
|
@@ -18802,14 +18793,14 @@ var DemoPayForm = function (_a) {
|
|
|
18802
18793
|
};
|
|
18803
18794
|
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 })] })));
|
|
18804
18795
|
};
|
|
18805
|
-
var StyledInputs = defaultStyled.div(templateObject_1$
|
|
18796
|
+
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) {
|
|
18806
18797
|
var darkMode = _a.darkMode;
|
|
18807
18798
|
return darkMode ? 'var(--row-background-dark)' : 'white';
|
|
18808
18799
|
}, function (_a) {
|
|
18809
18800
|
var darkMode = _a.darkMode;
|
|
18810
18801
|
return darkMode ? common.GRAY_500 : common.GRAY_200;
|
|
18811
18802
|
});
|
|
18812
|
-
var templateObject_1$
|
|
18803
|
+
var templateObject_1$a;
|
|
18813
18804
|
|
|
18814
18805
|
function useSave(_a) {
|
|
18815
18806
|
var _this = this;
|
|
@@ -18969,7 +18960,7 @@ var PaymentOption = function (_a) {
|
|
|
18969
18960
|
? "var(--row-background-dark) border-gray-500"
|
|
18970
18961
|
: '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" }))] })));
|
|
18971
18962
|
};
|
|
18972
|
-
var PaymentOptionContainer = defaultStyled.div(templateObject_1$
|
|
18963
|
+
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) {
|
|
18973
18964
|
var $brandColor = _a.$brandColor, $selected = _a.$selected;
|
|
18974
18965
|
return $selected &&
|
|
18975
18966
|
"\n border-color: ".concat($brandColor, ";\n ");
|
|
@@ -18977,7 +18968,7 @@ var PaymentOptionContainer = defaultStyled.div(templateObject_1$a || (templateOb
|
|
|
18977
18968
|
var $brandColor = _a.$brandColor;
|
|
18978
18969
|
return $brandColor;
|
|
18979
18970
|
});
|
|
18980
|
-
var templateObject_1$
|
|
18971
|
+
var templateObject_1$9;
|
|
18981
18972
|
|
|
18982
18973
|
function useRemovePaymentMethod(paymentPlugins, apiHost, token, accountId, onRemovePaymentMethod, onError) {
|
|
18983
18974
|
var _this = this;
|
|
@@ -19088,7 +19079,7 @@ function useSetDefaultPaymentMethod(paymentPlugins, apiHost, token, accountId, o
|
|
|
19088
19079
|
var showErrorNotification$1 = common.useErrorNotification();
|
|
19089
19080
|
var PaymentForm = function (_a) {
|
|
19090
19081
|
var _b;
|
|
19091
|
-
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;
|
|
19082
|
+
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, entityId = _a.entityId, overrideToken = _a.overrideToken, customCheckoutFunction = _a.customCheckoutFunction, currencyIdFromProps = _a.currencyId, paymentHoldOptions = _a.paymentHoldOptions;
|
|
19092
19083
|
// Local state
|
|
19093
19084
|
var _c = react.useState(false), showPaymentMethodForm = _c[0], setShowPaymentMethodForm = _c[1];
|
|
19094
19085
|
// Simple hooks
|
|
@@ -19102,8 +19093,9 @@ var PaymentForm = function (_a) {
|
|
|
19102
19093
|
apiHost: apiHost,
|
|
19103
19094
|
}), storedPaymentMethods = _d.paymentMethods, defaultPaymentMethod = _d.defaultPaymentMethod, isPaymentMethodLoading = _d.isLoading;
|
|
19104
19095
|
// Complex hooks
|
|
19105
|
-
var paymentPlugins = usePaymentPlugins({ apiHost: apiHost, token: token }).paymentPlugins;
|
|
19096
|
+
var paymentPlugins = usePaymentPlugins({ apiHost: apiHost, selectedEntityId: entityId, token: token }).paymentPlugins;
|
|
19106
19097
|
var selectedPaymentMethodPlugin = react.useMemo(function () {
|
|
19098
|
+
// TODO: consolate PluginData and PaymentPlugin into one type. Needs to be done on API side.
|
|
19107
19099
|
return 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()); });
|
|
19108
19100
|
}, [paymentPlugins, defaultPaymentMethod]);
|
|
19109
19101
|
// Derived state
|
|
@@ -19112,6 +19104,7 @@ var PaymentForm = function (_a) {
|
|
|
19112
19104
|
var currencyId = (_b = ((quote === null || quote === void 0 ? void 0 : quote.currencyId) ||
|
|
19113
19105
|
(invoice === null || invoice === void 0 ? void 0 : invoice.currencyId) ||
|
|
19114
19106
|
currencyIdFromProps)) === null || _b === void 0 ? void 0 : _b.toLowerCase();
|
|
19107
|
+
var paymentRequired = quote ? getQuoteAmountDue(quote) > 0 : true;
|
|
19115
19108
|
// Custom hooks
|
|
19116
19109
|
var _e = useSetDefaultPaymentMethod(paymentPlugins || [], apiHost, token, accountId, function (message) {
|
|
19117
19110
|
showErrorNotification$1(message, 'Error setting default payment method');
|
|
@@ -19128,9 +19121,29 @@ var PaymentForm = function (_a) {
|
|
|
19128
19121
|
var _f = usePaymentMethodSelectorPlugin({
|
|
19129
19122
|
defaultPaymentMethod: defaultPaymentMethod,
|
|
19130
19123
|
defaultPaymentMethodPlugin: defaultPaymentMethodPlugin,
|
|
19131
|
-
paymentMethodAllowedPlugins: paymentPlugins,
|
|
19124
|
+
paymentMethodAllowedPlugins: paymentPlugins || [],
|
|
19132
19125
|
}), selectorPaymentMethodPlugin = _f.selectorPaymentMethodPlugin, setSelectorPaymentMethodPlugin = _f.setSelectorPaymentMethodPlugin;
|
|
19133
19126
|
var selectedPaymentPluginIsManualPayment = (selectorPaymentMethodPlugin === null || selectorPaymentMethodPlugin === void 0 ? void 0 : selectorPaymentMethodPlugin.name) === 'Manual Payment';
|
|
19127
|
+
// Mutations
|
|
19128
|
+
var _g = reactQuery.useMutation({
|
|
19129
|
+
mutationFn: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
19130
|
+
return __generator(this, function (_a) {
|
|
19131
|
+
switch (_a.label) {
|
|
19132
|
+
case 0:
|
|
19133
|
+
if (!quote)
|
|
19134
|
+
throw new Error('Quote is required');
|
|
19135
|
+
if (paymentRequired)
|
|
19136
|
+
throw new Error('Payment is required');
|
|
19137
|
+
return [4 /*yield*/, checkout({ quoteId: quote.id, token: token, apiHost: apiHost })];
|
|
19138
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
19139
|
+
}
|
|
19140
|
+
});
|
|
19141
|
+
}); },
|
|
19142
|
+
onSuccess: function () {
|
|
19143
|
+
handlePaymentSuccess();
|
|
19144
|
+
},
|
|
19145
|
+
onError: onFail,
|
|
19146
|
+
}), checkoutNoPayment = _g.mutate, isCheckingOutNoPayment = _g.isPending;
|
|
19134
19147
|
var onClickRemove = useRemovePaymentMethod(paymentPlugins || [], apiHost, token, accountId, onRemovePaymentMethod, function (message) {
|
|
19135
19148
|
showErrorNotification$1(message, 'Error removing payment method');
|
|
19136
19149
|
});
|
|
@@ -19167,14 +19180,14 @@ var PaymentForm = function (_a) {
|
|
|
19167
19180
|
storedPaymentMethods: storedPaymentMethods,
|
|
19168
19181
|
defaultPaymentMethod: defaultPaymentMethod,
|
|
19169
19182
|
customCheckoutFunction: customCheckoutFunction,
|
|
19170
|
-
} }, { children: jsxRuntime.jsx(StripeWrapper, __assign({ plugin: selectorPaymentMethodPlugin, token: token, apiHost: apiHost, currencyId: currencyId, accountId: accountId }, { children: jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-0 bunny-w-full" }, { children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2 bunny-px-4" }, { children: [storedPaymentMethods === null || storedPaymentMethods === void 0 ? void 0 : storedPaymentMethods.map(function (paymentMethod) { return (jsxRuntime.jsx(MiniCreditCard, { onClickRemove: function () { return onClickRemove(paymentMethod); }, onClickSetDefault: function () { return handleSetDefault(paymentMethod); }, paymentMethodData: paymentMethod, id: "payment-method-".concat(paymentMethod.id) }, paymentMethod.id)); }), (storedPaymentMethods === null || storedPaymentMethods === void 0 ? void 0 : storedPaymentMethods.length) === 0 && (jsxRuntime.jsx(MiniCreditCard, { onClickRemove: function () { }, onClickSetDefault: function () { } }))] })), jsxRuntime.jsx(antd.Collapse, { bordered: false, activeKey: showPaymentMethodForm ? '1' : undefined, ghost: true, collapsible: "disabled", destroyOnHidden: true, items: [
|
|
19171
|
-
|
|
19172
|
-
|
|
19173
|
-
|
|
19174
|
-
|
|
19175
|
-
|
|
19176
|
-
|
|
19177
|
-
|
|
19183
|
+
} }, { children: jsxRuntime.jsx(StripeWrapper, __assign({ plugin: selectorPaymentMethodPlugin, token: token, apiHost: apiHost, currencyId: currencyId, accountId: accountId }, { children: jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-0 bunny-w-full" }, { children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: paymentRequired ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2 bunny-px-4" }, { children: [storedPaymentMethods === null || storedPaymentMethods === void 0 ? void 0 : storedPaymentMethods.map(function (paymentMethod) { return (jsxRuntime.jsx(MiniCreditCard, { onClickRemove: function () { return onClickRemove(paymentMethod); }, onClickSetDefault: function () { return handleSetDefault(paymentMethod); }, paymentMethodData: paymentMethod, id: "payment-method-".concat(paymentMethod.id) }, paymentMethod.id)); }), (storedPaymentMethods === null || storedPaymentMethods === void 0 ? void 0 : storedPaymentMethods.length) === 0 && (jsxRuntime.jsx(MiniCreditCard, { onClickRemove: function () { }, onClickSetDefault: function () { } }))] })), jsxRuntime.jsx(antd.Collapse, { bordered: false, activeKey: showPaymentMethodForm ? '1' : undefined, ghost: true, collapsible: "disabled", destroyOnHidden: true, items: [
|
|
19184
|
+
{
|
|
19185
|
+
key: '1',
|
|
19186
|
+
showArrow: false,
|
|
19187
|
+
label: !showPaymentMethodForm ? (jsxRuntime.jsx("div", __assign({ className: "bunny-pt-2" }, { children: jsxRuntime.jsx(antd.Button, __assign({ onClick: handleClickAddPaymentMethod, type: "default", className: "bunny-w-full", id: "addPaymentMethod" }, { children: "Add payment method" })) }))) : null,
|
|
19188
|
+
children: (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2 bunny-mt-2" }, { children: [jsxRuntime.jsx(PaymentMethodSelector, { onSelect: setSelectorPaymentMethodPlugin, paymentMethodAllowedPlugins: paymentPlugins || [], value: selectorPaymentMethodPlugin }), selectorPaymentMethodPlugin && (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col" }, { children: jsxRuntime.jsx(PaymentMethodDetails, { onFail: onFail, onSavePaymentMethod: handleSavePaymentMethod, plugin: selectorPaymentMethodPlugin }) })))] }))),
|
|
19189
|
+
},
|
|
19190
|
+
] }), paying && !selectedPaymentPluginIsManualPayment ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: defaultPaymentMethod ? (jsxRuntime.jsx("div", __assign({ className: "bunny-px-4" }, { children: jsxRuntime.jsx(CheckoutFooter, { quote: quote, invoice: invoice, onPaymentSuccess: handlePaymentSuccess, plugin: selectedPaymentMethodPlugin, onPaymentHoldSuccess: onPaymentHoldSuccess, paymentHoldOptions: paymentHoldOptions }) }))) : null })) : null] })) : (jsxRuntime.jsx(antd.Button, __assign({ style: { margin: '0 16px' }, loading: isCheckingOutNoPayment, onClick: function () { return checkoutNoPayment(); }, type: "primary" }, { children: isCheckingOutNoPayment ? 'Processing...' : 'Complete Order' }))) }) })) })) })));
|
|
19178
19191
|
};
|
|
19179
19192
|
function StripeWrapper(_a) {
|
|
19180
19193
|
var children = _a.children, plugin = _a.plugin, token = _a.token, apiHost = _a.apiHost, currencyId = _a.currencyId, accountId = _a.accountId;
|
|
@@ -19182,6 +19195,15 @@ function StripeWrapper(_a) {
|
|
|
19182
19195
|
return (jsxRuntime.jsx(reactStripeJs.Elements, __assign({ options: options, stripe: stripe }, { children: children })));
|
|
19183
19196
|
}
|
|
19184
19197
|
|
|
19198
|
+
var useCurrentUserData = function () {
|
|
19199
|
+
var queryClient = reactQuery.useQueryClient();
|
|
19200
|
+
var token = useToken();
|
|
19201
|
+
var currentUser = queryClient.getQueryData(common.QueryKeyFactory.default.currentUserKey(token));
|
|
19202
|
+
if (!currentUser)
|
|
19203
|
+
return {};
|
|
19204
|
+
return currentUser;
|
|
19205
|
+
};
|
|
19206
|
+
|
|
19185
19207
|
function Invoice(_a) {
|
|
19186
19208
|
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;
|
|
19187
19209
|
return (jsxRuntime.jsx(InvoiceQuoteContext.Provider, __assign({ value: {
|
|
@@ -19201,9 +19223,10 @@ function ActualInvoice() {
|
|
|
19201
19223
|
// Context
|
|
19202
19224
|
var queryClient = reactQuery.useQueryClient();
|
|
19203
19225
|
var _a = react.useContext(InvoiceQuoteContext), id = _a.id, invoiceQuoteViewComponent = _a.invoiceQuoteViewComponent, backButtonName = _a.backButtonName, onBackButtonClick = _a.onBackButtonClick, onPaymentSuccess = _a.onPaymentSuccess, className = _a.className;
|
|
19204
|
-
var _b = react.useContext(BunnyContext), apiHost = _b.apiHost, onTokenExpired = _b.onTokenExpired;
|
|
19226
|
+
var _b = react.useContext(BunnyContext), apiHost = _b.apiHost, onTokenExpired = _b.onTokenExpired;
|
|
19205
19227
|
var _c = react.useContext(InvoiceQuoteContext), hideDownloadButton = _c.hideDownloadButton, onInvoiceLoaded = _c.onInvoiceLoaded;
|
|
19206
19228
|
var token = useToken();
|
|
19229
|
+
var entityId = useCurrentUserData().entityId;
|
|
19207
19230
|
// Hooks
|
|
19208
19231
|
var showSuccessNotification = common.useSuccessNotification();
|
|
19209
19232
|
var handleAllErrorFormats = common.useAllErrorFormats(onTokenExpired);
|
|
@@ -19239,10 +19262,10 @@ function ActualInvoice() {
|
|
|
19239
19262
|
}, [formattedInvoice]);
|
|
19240
19263
|
if (!formattedInvoice)
|
|
19241
19264
|
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
19242
|
-
return (jsxRuntime.jsx("div", __assign({ className: "bunny-invoice-container" }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-6
|
|
19265
|
+
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, { entityId: entityId, onPaymentSuccess: onSuccess, onFail: onFail, invoice: formattedInvoice }) })))] })) })));
|
|
19243
19266
|
}
|
|
19244
19267
|
|
|
19245
|
-
var MUTATION$
|
|
19268
|
+
var MUTATION$8 = function (id) { 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 }"; };
|
|
19246
19269
|
var getFormattedQuote = function (_a) {
|
|
19247
19270
|
var id = _a.id, token = _a.token, apiHost = _a.apiHost;
|
|
19248
19271
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -19250,7 +19273,7 @@ var getFormattedQuote = function (_a) {
|
|
|
19250
19273
|
return __generator(this, function (_b) {
|
|
19251
19274
|
switch (_b.label) {
|
|
19252
19275
|
case 0: return [4 /*yield*/, gqlRequest({
|
|
19253
|
-
query: MUTATION$
|
|
19276
|
+
query: MUTATION$8(),
|
|
19254
19277
|
token: token,
|
|
19255
19278
|
apiHost: apiHost,
|
|
19256
19279
|
vars: { id: id },
|
|
@@ -19288,9 +19311,9 @@ var usePlugins = function (_a) {
|
|
|
19288
19311
|
return response;
|
|
19289
19312
|
};
|
|
19290
19313
|
var getPlugins = function (_a) {
|
|
19291
|
-
var
|
|
19314
|
+
var token = _a.token, apiHost = _a.apiHost;
|
|
19292
19315
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
19293
|
-
var response, plugins,
|
|
19316
|
+
var response, plugins, error;
|
|
19294
19317
|
return __generator(this, function (_b) {
|
|
19295
19318
|
switch (_b.label) {
|
|
19296
19319
|
case 0: return [4 /*yield*/, common.request({
|
|
@@ -19304,12 +19327,7 @@ var getPlugins = function (_a) {
|
|
|
19304
19327
|
return [4 /*yield*/, response.json()];
|
|
19305
19328
|
case 2:
|
|
19306
19329
|
plugins = _b.sent();
|
|
19307
|
-
|
|
19308
|
-
var _a, _b;
|
|
19309
|
-
var result = ((_a = plugin.entities) === null || _a === void 0 ? void 0 : _a.includes(Number(entityId))) || ((_b = plugin.entities) === null || _b === void 0 ? void 0 : _b.length) === 0 || !entityId;
|
|
19310
|
-
return result;
|
|
19311
|
-
});
|
|
19312
|
-
return [2 /*return*/, filteredPlugins];
|
|
19330
|
+
return [2 /*return*/, plugins];
|
|
19313
19331
|
case 3: return [4 /*yield*/, response.json()];
|
|
19314
19332
|
case 4:
|
|
19315
19333
|
error = _b.sent();
|
|
@@ -19360,72 +19378,46 @@ var quoteAccept = function (_a) {
|
|
|
19360
19378
|
};
|
|
19361
19379
|
// export default quoteAccept;
|
|
19362
19380
|
var useSendAcceptQuote = function (_a) {
|
|
19363
|
-
|
|
19381
|
+
var quoteId = _a.quoteId, apiHost = _a.apiHost, token = _a.token;
|
|
19364
19382
|
// Hooks
|
|
19365
19383
|
var graphQLMutation = common.useGraphQLmutation(function () {
|
|
19366
|
-
console.log(
|
|
19367
|
-
}, apiHost ||
|
|
19368
|
-
console.log(
|
|
19384
|
+
console.log('navigate in useGraphQLmutation in useSendAcceptQuote is not yet implemented');
|
|
19385
|
+
}, apiHost || '', function () {
|
|
19386
|
+
console.log('onError in useGraphQLmutation in useSendAcceptQuote is not yet implemented');
|
|
19369
19387
|
});
|
|
19370
19388
|
var signingPlugins = useSigningPlugins({ apiHost: apiHost, token: token });
|
|
19371
19389
|
var queryClient = reactQuery.useQueryClient();
|
|
19390
|
+
var showInfoNotification = common.useInfoNotification();
|
|
19372
19391
|
// Local state
|
|
19373
19392
|
var _b = react.useState(false), acceptBoxVisible = _b[0], setAcceptBoxVisible = _b[1];
|
|
19374
19393
|
var _c = react.useState(false), isAccepting = _c[0], setIsAccepting = _c[1];
|
|
19375
19394
|
// Pandadoc polling modal state
|
|
19376
19395
|
var _d = react.useState(false), pandadocPollingModalVisible = _d[0], setPandadocPollingModalVisible = _d[1];
|
|
19377
19396
|
var redirectForSigning = function () {
|
|
19378
|
-
var mutation = "mutation quoteSigningUrlCreate($quoteId: ID) {\n quoteSigningUrlCreate(quoteId: $quoteId) {\n redirectUri\n pluginClientId\n pluginShortName\n errors\n }\n }";
|
|
19397
|
+
var mutation = "mutation quoteSigningUrlCreate($quoteId: ID) {\n quoteSigningUrlCreate(quoteId: $quoteId) {\n redirectUri\n pluginClientId\n pluginShortName\n message\n errors\n }\n }";
|
|
19379
19398
|
var variables = {
|
|
19380
19399
|
quoteId: quoteId,
|
|
19381
19400
|
};
|
|
19382
19401
|
graphQLMutation(mutation, variables, function (rsp) {
|
|
19383
19402
|
if (rsp.errors)
|
|
19384
|
-
console.log(
|
|
19403
|
+
console.log('rsp.errors', rsp.errors);
|
|
19385
19404
|
else {
|
|
19386
|
-
|
|
19387
|
-
|
|
19405
|
+
var _a = rsp.data.quoteSigningUrlCreate, redirectUri = _a.redirectUri, message = _a.message, pluginShortName = _a.pluginShortName;
|
|
19406
|
+
if (redirectUri) {
|
|
19407
|
+
// If redirectUri exists, redirect the browser
|
|
19408
|
+
window.location.href = redirectUri;
|
|
19388
19409
|
}
|
|
19389
|
-
else if (
|
|
19410
|
+
else if (pluginShortName === 'pandadoc') {
|
|
19390
19411
|
setPandadocPollingModalVisible(true);
|
|
19391
19412
|
}
|
|
19392
|
-
else {
|
|
19393
|
-
|
|
19413
|
+
else if (message) {
|
|
19414
|
+
// If redirectUri is nil but message exists, display the message as notification
|
|
19415
|
+
showInfoNotification(message, 'Signing Information');
|
|
19416
|
+
setIsAccepting(false);
|
|
19394
19417
|
}
|
|
19395
19418
|
}
|
|
19396
19419
|
}, token);
|
|
19397
19420
|
};
|
|
19398
|
-
var openDropboxSignModal = function (clientId, url) { return __awaiter(void 0, void 0, void 0, function () {
|
|
19399
|
-
var HelloSign, client;
|
|
19400
|
-
return __generator(this, function (_a) {
|
|
19401
|
-
switch (_a.label) {
|
|
19402
|
-
case 0:
|
|
19403
|
-
if (typeof window === "undefined") {
|
|
19404
|
-
return [2 /*return*/];
|
|
19405
|
-
}
|
|
19406
|
-
return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('hellosign-embedded')); })];
|
|
19407
|
-
case 1:
|
|
19408
|
-
HelloSign = (_a.sent()).default;
|
|
19409
|
-
client = new HelloSign({
|
|
19410
|
-
clientId: clientId,
|
|
19411
|
-
});
|
|
19412
|
-
client.on("sign", function (data) {
|
|
19413
|
-
queryClient.refetchQueries({
|
|
19414
|
-
queryKey: common.QueryKeyFactory.default.createQuoteKey({
|
|
19415
|
-
id: quoteId,
|
|
19416
|
-
token: token,
|
|
19417
|
-
}),
|
|
19418
|
-
});
|
|
19419
|
-
});
|
|
19420
|
-
// Open the DropboxSign modal
|
|
19421
|
-
client.open(url, {
|
|
19422
|
-
clientId: clientId,
|
|
19423
|
-
skipDomainVerification: false, // Set true for development testing
|
|
19424
|
-
});
|
|
19425
|
-
return [2 /*return*/];
|
|
19426
|
-
}
|
|
19427
|
-
});
|
|
19428
|
-
}); };
|
|
19429
19421
|
var _e = reactQuery.useMutation({
|
|
19430
19422
|
mutationFn: function (changedFormItems) { return __awaiter(void 0, void 0, void 0, function () {
|
|
19431
19423
|
return __generator(this, function (_a) {
|
|
@@ -19533,11 +19525,11 @@ var PandadocPollingModal = function (_a) {
|
|
|
19533
19525
|
return (jsxRuntime.jsxs(antd.Modal, __assign({ title: "Uploading quote to Pandadoc", open: isVisible, closable: false, footer: null }, { children: [jsxRuntime.jsxs("div", __assign({ className: "bunny-py-4 bunny-text-center" }, { children: ["This may take a few seconds", ".".repeat(numberOfPolls)] })), jsxRuntime.jsx("div", __assign({ className: "bunny-text-center" }, { children: infoMessage }))] })));
|
|
19534
19526
|
};
|
|
19535
19527
|
|
|
19536
|
-
var ModalOverrideBrandStylings = defaultStyled(antd.Modal)(templateObject_1$
|
|
19528
|
+
var ModalOverrideBrandStylings = defaultStyled(antd.Modal)(templateObject_1$8 || (templateObject_1$8 = __makeTemplateObject(["\n .ant-modal-content {\n border-radius: 0.75rem;\n overflow: hidden;\n padding: 0 !important;\n }\n\n .ant-modal-header {\n border-bottom: none;\n padding: 1.5rem 1.5rem 0;\n margin: 0 !important;\n }\n .ant-modal-body {\n padding: 1rem 1.5rem 1.5rem;\n }\n .ant-modal-footer {\n border-top: none;\n padding: 0 1.5rem 1.5rem;\n margin: 0 !important;\n }\n"], ["\n .ant-modal-content {\n border-radius: 0.75rem;\n overflow: hidden;\n padding: 0 !important;\n }\n\n .ant-modal-header {\n border-bottom: none;\n padding: 1.5rem 1.5rem 0;\n margin: 0 !important;\n }\n .ant-modal-body {\n padding: 1rem 1.5rem 1.5rem;\n }\n .ant-modal-footer {\n border-top: none;\n padding: 0 1.5rem 1.5rem;\n margin: 0 !important;\n }\n"])));
|
|
19537
19529
|
var StyledModal$1 = function (props) {
|
|
19538
19530
|
return jsxRuntime.jsx(ModalOverrideBrandStylings, __assign({ closable: false }, props));
|
|
19539
19531
|
};
|
|
19540
|
-
var templateObject_1$
|
|
19532
|
+
var templateObject_1$8;
|
|
19541
19533
|
|
|
19542
19534
|
var useFocusFirstInput = function (_a) {
|
|
19543
19535
|
var firstInputRef = _a.firstInputRef, isVisible = _a.isVisible;
|
|
@@ -19551,6 +19543,9 @@ var AcceptQuoteModal = function (_a) {
|
|
|
19551
19543
|
var acceptBoxVisible = _a.acceptBoxVisible, formattedQuote = _a.formattedQuote, sendAccept = _a.sendAccept, setAcceptBoxVisible = _a.setAcceptBoxVisible, setIsAccepting = _a.setIsAccepting, isSendAcceptPending = _a.isSendAcceptPending;
|
|
19552
19544
|
// Refs
|
|
19553
19545
|
var firstInputRef = react.useRef(null);
|
|
19546
|
+
var apiHost = react.useContext(BunnyContext).apiHost;
|
|
19547
|
+
var token = useToken();
|
|
19548
|
+
var signingPlugins = useSigningPlugins({ apiHost: apiHost, token: token });
|
|
19554
19549
|
// Hooks
|
|
19555
19550
|
var form = antd.Form.useForm()[0];
|
|
19556
19551
|
useFocusFirstInput({ firstInputRef: firstInputRef, isVisible: acceptBoxVisible });
|
|
@@ -19559,7 +19554,7 @@ var AcceptQuoteModal = function (_a) {
|
|
|
19559
19554
|
var createRules = function (required, title) {
|
|
19560
19555
|
return required ? [{ required: true, message: "".concat(title, " is required") }] : [];
|
|
19561
19556
|
};
|
|
19562
|
-
return (jsxRuntime.jsx(StyledModal$1, __assign({ centered: true, okText: isSendAcceptPending ?
|
|
19557
|
+
return (jsxRuntime.jsx(StyledModal$1, __assign({ centered: true, okText: isSendAcceptPending ? 'Accepting...' : 'Accept', okButtonProps: {
|
|
19563
19558
|
loading: isSendAcceptPending,
|
|
19564
19559
|
disabled: isSendAcceptPending,
|
|
19565
19560
|
}, onCancel: function () {
|
|
@@ -19572,16 +19567,7 @@ var AcceptQuoteModal = function (_a) {
|
|
|
19572
19567
|
sendAccept(changedFields);
|
|
19573
19568
|
})
|
|
19574
19569
|
.catch(function () { });
|
|
19575
|
-
}, open: acceptBoxVisible, title:
|
|
19576
|
-
};
|
|
19577
|
-
|
|
19578
|
-
var useCurrentUserData = function () {
|
|
19579
|
-
var queryClient = reactQuery.useQueryClient();
|
|
19580
|
-
var token = useToken();
|
|
19581
|
-
var currentUser = queryClient.getQueryData(common.QueryKeyFactory.default.currentUserKey(token));
|
|
19582
|
-
if (!currentUser)
|
|
19583
|
-
return {};
|
|
19584
|
-
return currentUser;
|
|
19570
|
+
}, open: acceptBoxVisible, title: (signingPlugins === null || signingPlugins === void 0 ? void 0 : signingPlugins.length) ? 'Start signing' : 'Accept quote', width: 400 }, { children: jsxRuntime.jsxs(antd.Form, __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2", form: form, layout: "vertical" }, { children: [jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Your name", name: "name", rules: createRules(true, 'Your name') }, { children: jsxRuntime.jsx(antd.Input, { autoFocus: true, ref: firstInputRef }) })), jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Your job title", name: "title", rules: createRules(true, 'Your job title') }, { children: jsxRuntime.jsx(antd.Input, {}) })), jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Purchase order number", name: "poNumber", rules: createRules(poNumberRequired, 'Purchase order number') }, { children: jsxRuntime.jsx(antd.Input, {}) })), taxNumberRequired && (jsxRuntime.jsx(antd.Form.Item, __assign({ name: "taxNumber", label: taxNumberLabel, rules: createRules(taxNumberRequired, taxNumberLabel) }, { children: jsxRuntime.jsx(antd.Input, {}) })))] })) })));
|
|
19585
19571
|
};
|
|
19586
19572
|
|
|
19587
19573
|
var Title$2 = antd.Typography.Title;
|
|
@@ -19590,10 +19576,10 @@ var PaymentHoldModal = function (_a) {
|
|
|
19590
19576
|
var visible = _a.visible, setVisible = _a.setVisible, quote = _a.quote;
|
|
19591
19577
|
var queryClient = reactQuery.useQueryClient();
|
|
19592
19578
|
var token = useToken();
|
|
19593
|
-
var
|
|
19579
|
+
var entityId = useCurrentUserData().entityId;
|
|
19594
19580
|
return (jsxRuntime.jsxs(StyledModal$1, __assign({ centered: true, onCancel: function () {
|
|
19595
19581
|
setVisible(false);
|
|
19596
|
-
}, footer: null, open: visible, width: 600 }, { children: [jsxRuntime.jsx(Title$2, __assign({ className: "mt-4 pb-4 mx-4", level: 5 }, { children: "Pay to accept" })), jsxRuntime.jsx("div", __assign({ className: "mb-4" }, { children: jsxRuntime.jsx(PaymentForm, {
|
|
19582
|
+
}, footer: null, open: visible, width: 600 }, { children: [jsxRuntime.jsx(Title$2, __assign({ className: "mt-4 pb-4 mx-4", level: 5 }, { children: "Pay to accept" })), jsxRuntime.jsx("div", __assign({ className: "mb-4" }, { children: jsxRuntime.jsx(PaymentForm, { entityId: entityId, quote: {
|
|
19597
19583
|
amount: quote.amount,
|
|
19598
19584
|
currencyId: quote.currency,
|
|
19599
19585
|
id: quote.quote.id,
|
|
@@ -19617,7 +19603,7 @@ var PaymentHoldModal = function (_a) {
|
|
|
19617
19603
|
};
|
|
19618
19604
|
|
|
19619
19605
|
var Text$n = antd.Typography.Text;
|
|
19620
|
-
defaultStyled.div(templateObject_1$
|
|
19606
|
+
defaultStyled.div(templateObject_1$7 || (templateObject_1$7 = __makeTemplateObject(["\n span {\n width: 100%;\n }\n"], ["\n span {\n width: 100%;\n }\n"])));
|
|
19621
19607
|
function Quote(_a) {
|
|
19622
19608
|
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;
|
|
19623
19609
|
return (jsxRuntime.jsx(InvoiceQuoteContext.Provider, __assign({ value: {
|
|
@@ -19649,11 +19635,11 @@ function ActualQuote() {
|
|
|
19649
19635
|
var _this = this;
|
|
19650
19636
|
var _a, _b, _c, _d;
|
|
19651
19637
|
// Context
|
|
19652
|
-
var
|
|
19638
|
+
var apiHost = react.useContext(BunnyContext).apiHost;
|
|
19653
19639
|
var token = useToken();
|
|
19654
|
-
var
|
|
19640
|
+
var _e = react.useContext(InvoiceQuoteContext), className = _e.className, id = _e.id, hideDownloadButton = _e.hideDownloadButton, onQuoteLoaded = _e.onQuoteLoaded;
|
|
19655
19641
|
// Queries
|
|
19656
|
-
var
|
|
19642
|
+
var _f = reactQuery.useQuery({
|
|
19657
19643
|
queryKey: common.QueryKeyFactory.default.createQuoteKey({ id: id, token: token }),
|
|
19658
19644
|
queryFn: function () { return __awaiter(_this, void 0, void 0, function () {
|
|
19659
19645
|
var error_1;
|
|
@@ -19672,15 +19658,14 @@ function ActualQuote() {
|
|
|
19672
19658
|
});
|
|
19673
19659
|
}); },
|
|
19674
19660
|
placeholderData: reactQuery.keepPreviousData,
|
|
19675
|
-
}), data =
|
|
19661
|
+
}), data = _f.data, isLoading = _f.isLoading;
|
|
19676
19662
|
var formattedQuote = data;
|
|
19677
19663
|
// Hooks
|
|
19678
|
-
var
|
|
19664
|
+
var _g = useSendAcceptQuote({
|
|
19679
19665
|
token: token,
|
|
19680
|
-
onTokenExpired: onTokenExpired,
|
|
19681
19666
|
apiHost: apiHost,
|
|
19682
19667
|
quoteId: id,
|
|
19683
|
-
}), acceptBoxVisible =
|
|
19668
|
+
}), acceptBoxVisible = _g.acceptBoxVisible, isAccepting = _g.isAccepting, sendAccept = _g.sendAccept, setAcceptBoxVisible = _g.setAcceptBoxVisible, setIsAccepting = _g.setIsAccepting, startAcceptance = _g.startAcceptance, pandadocPollingModalVisible = _g.pandadocPollingModalVisible, setPandadocPollingModalVisible = _g.setPandadocPollingModalVisible, isSendAcceptPending = _g.isSendAcceptPending;
|
|
19684
19669
|
useSigningComplete({ data: formattedQuote, token: token });
|
|
19685
19670
|
var isMobile = common.useIsMobile();
|
|
19686
19671
|
var showErrorNotification = common.useErrorNotification();
|
|
@@ -19690,7 +19675,7 @@ function ActualQuote() {
|
|
|
19690
19675
|
}
|
|
19691
19676
|
}, [formattedQuote]);
|
|
19692
19677
|
// Payment hold stuff here
|
|
19693
|
-
var
|
|
19678
|
+
var _h = useQuotePaymentHold(formattedQuote), paymentHoldModalVisible = _h.paymentHoldModalVisible, setPaymentHoldModalVisible = _h.setPaymentHoldModalVisible, shouldDoPaymentHold = _h.shouldDoPaymentHold, paymentHoldCompleted = _h.paymentHoldCompleted, paymentHold = _h.paymentHold;
|
|
19694
19679
|
var handleClickAccept = function () {
|
|
19695
19680
|
if (shouldDoPaymentHold && !paymentHoldCompleted) {
|
|
19696
19681
|
setPaymentHoldModalVisible(true);
|
|
@@ -19722,9 +19707,14 @@ function QuoteButtons(_a) {
|
|
|
19722
19707
|
var entityBranding = react.useContext(BrandContext);
|
|
19723
19708
|
var downloadFile = useDownloadFile(id);
|
|
19724
19709
|
var isExpired = useIsExpired(formattedQuote === null || formattedQuote === void 0 ? void 0 : formattedQuote.expiresAt);
|
|
19710
|
+
var signingPlugins = useSigningPlugins({ apiHost: apiHost, token: token });
|
|
19725
19711
|
return (jsxRuntime.jsxs("div", __assign({ className: "flex flex-row justify-end items-center gap-4", id: "acceptance", style: {
|
|
19726
19712
|
color: entityBranding.secondaryColor,
|
|
19727
|
-
} }, { 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
|
|
19713
|
+
} }, { 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
|
|
19714
|
+
? 'Quote is expired'
|
|
19715
|
+
: (signingPlugins === null || signingPlugins === void 0 ? void 0 : signingPlugins.length)
|
|
19716
|
+
? 'Start signing'
|
|
19717
|
+
: 'Accept quote' }))) : null }))] })))] })));
|
|
19728
19718
|
}
|
|
19729
19719
|
function PaymentHoldDisplay(_a) {
|
|
19730
19720
|
var _b, _c, _d, _e;
|
|
@@ -19736,7 +19726,7 @@ function PaymentHoldDisplay(_a) {
|
|
|
19736
19726
|
var expirationDate = paymentHold.expiresAt ? common.formatDate(paymentHold.expiresAt) : 'N/A';
|
|
19737
19727
|
return (jsxRuntime.jsx(antd.Tooltip, __assign({ title: "".concat(formattedAmount, " will be charged to ").concat(paymentMethod, " once the quote is accepted. Hold will be released on ").concat(expirationDate, " if not accepted.") }, { children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(CustomizedTag, __assign({ color: 'orange', className: "rounded-md", style: { padding: 6 } }, { children: ["Hold of ", formattedAmount, " on ****", paymentMethod] })) }) })));
|
|
19738
19728
|
}
|
|
19739
|
-
var templateObject_1$
|
|
19729
|
+
var templateObject_1$7;
|
|
19740
19730
|
|
|
19741
19731
|
var QUOTES_QUERY = function (filter) { return "\n query quotes {\n quotes ".concat(filter ? "(".concat(filter, ")") : '', " {\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n nodes {\n id\n name\n account {\n name\n id\n }\n applicationDate\n state\n createdAt\n expiresAt\n currencyId\n amount\n number\n }\n }\n }"); };
|
|
19742
19732
|
var getQuotes = function (_a) {
|
|
@@ -19853,17 +19843,17 @@ var TransactionGridCell = defaultStyled.div.withConfig({
|
|
|
19853
19843
|
shouldForwardProp: function (prop) {
|
|
19854
19844
|
return !["gridColumn", "padding", "right"].includes(prop);
|
|
19855
19845
|
},
|
|
19856
|
-
})(templateObject_1$
|
|
19846
|
+
})(templateObject_1$6 || (templateObject_1$6 = __makeTemplateObject(["\n ", "\n\n display: flex;\n align-items: center;\n justify-content: ", ";\n\n text-align: ", ";\n white-space: nowrap;\n font-size: 14px;\n color: ", ";\n\n background-color: inherit;\n\n padding: 1rem;\n min-width: 48px;\n"], ["\n ", "\n\n display: flex;\n align-items: center;\n justify-content: ", ";\n\n text-align: ", ";\n white-space: nowrap;\n font-size: 14px;\n color: ", ";\n\n background-color: inherit;\n\n padding: 1rem;\n min-width: 48px;\n"])), function (props) { return props.gridColumn && "grid-column: ".concat(props.gridColumn, ";"); }, function (props) {
|
|
19857
19847
|
return props.right ? "flex-end" : "flex-start";
|
|
19858
19848
|
}, function (props) {
|
|
19859
19849
|
return props.right ? "right" : "left";
|
|
19860
19850
|
}, common.SLATE_600);
|
|
19861
|
-
var templateObject_1$
|
|
19851
|
+
var templateObject_1$6;
|
|
19862
19852
|
|
|
19863
19853
|
var Text$l = antd.Typography.Text;
|
|
19864
19854
|
var TransactionsEmptyState = function () {
|
|
19865
19855
|
var noTransactionsMessage = react.useContext(TransactionsListContext).noTransactionsMessage;
|
|
19866
|
-
return (jsxRuntime.jsx(Text$l, __assign({ className: "bunny-flex bunny-justify-center bunny-p-4 bunny-text-base" }, { children: noTransactionsMessage ||
|
|
19856
|
+
return (jsxRuntime.jsx(Text$l, __assign({ className: "bunny-flex bunny-justify-center bunny-p-4 bunny-text-base" }, { children: noTransactionsMessage || 'There are no transactions' })));
|
|
19867
19857
|
};
|
|
19868
19858
|
|
|
19869
19859
|
var Text$k = antd.Typography.Text;
|
|
@@ -19961,14 +19951,14 @@ var TransactionsListMobile = function (_a) {
|
|
|
19961
19951
|
var Text$h = antd.Typography.Text;
|
|
19962
19952
|
var DISPLAY_WIDTH = 1200;
|
|
19963
19953
|
function Transactions(_a) {
|
|
19964
|
-
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 ?
|
|
19954
|
+
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 ? [
|
|
19965
19955
|
common.TransactionKind.INVOICE,
|
|
19966
19956
|
common.TransactionKind.PAYMENT,
|
|
19967
19957
|
common.TransactionKind.REFUND,
|
|
19968
19958
|
common.TransactionKind.WRITE_OFF,
|
|
19969
19959
|
] : _j, style = _a.style, filter = _a.filter, noTransactionsMessage = _a.noTransactionsMessage, filterTransactions = _a.filterTransactions, _k = _a.sortTransactions, sortTransactions = _k === void 0 ? function (a, b) {
|
|
19970
19960
|
return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
|
|
19971
|
-
} : _k, _l = _a.transactionDateType, transactionDateType = _l === void 0 ?
|
|
19961
|
+
} : _k, _l = _a.transactionDateType, transactionDateType = _l === void 0 ? 'createdAt' : _l;
|
|
19972
19962
|
var contextValues = {
|
|
19973
19963
|
showSearchBar: showSearchBar,
|
|
19974
19964
|
showTitle: showTitle,
|
|
@@ -19992,12 +19982,11 @@ function Transactions(_a) {
|
|
|
19992
19982
|
var apiHost = react.useContext(BunnyContext).apiHost;
|
|
19993
19983
|
var token = useToken();
|
|
19994
19984
|
// Local state
|
|
19995
|
-
var _m = react.useState(
|
|
19996
|
-
var filterValue = filter ||
|
|
19997
|
-
(search ? "filter: \"transaction.transactionableId is ".concat(search, "\"") : "");
|
|
19985
|
+
var _m = react.useState(''), search = _m[0], setSearch = _m[1];
|
|
19986
|
+
var filterValue = filter || (search ? "filter: \"transaction.transactionableId is ".concat(search, "\"") : '');
|
|
19998
19987
|
// Queries
|
|
19999
19988
|
var data = reactQuery.useQuery({
|
|
20000
|
-
queryKey: [
|
|
19989
|
+
queryKey: ['transactions', token, filterValue],
|
|
20001
19990
|
queryFn: function () { return getTransactions(filterValue, apiHost, token); },
|
|
20002
19991
|
placeholderData: reactQuery.keepPreviousData,
|
|
20003
19992
|
}).data;
|
|
@@ -20014,8 +20003,7 @@ function TransactionsDisplay(_a) {
|
|
|
20014
20003
|
var _e = react.useState(null), selectedTransaction = _e[0], setSelectedTransaction = _e[1];
|
|
20015
20004
|
var _f = react.useState(false), drawerOpen = _f[0], setDrawerOpen = _f[1];
|
|
20016
20005
|
var updatedTransactions = (_c = (_b = transactions === null || transactions === void 0 ? void 0 : transactions.filter(function (transaction) {
|
|
20017
|
-
return !kindsToShow ||
|
|
20018
|
-
kindsToShow.includes(transaction.kind);
|
|
20006
|
+
return !kindsToShow || kindsToShow.includes(transaction.kind);
|
|
20019
20007
|
})) === null || _b === void 0 ? void 0 : _b.filter(filterTransactions || (function () { return true; }))) === null || _c === void 0 ? void 0 : _c.sort(sortTransactions || (function () { return 0; }));
|
|
20020
20008
|
// Hooks
|
|
20021
20009
|
var isMobile = common.useIsMobile();
|
|
@@ -20032,38 +20020,38 @@ function TransactionsDisplay(_a) {
|
|
|
20032
20020
|
var gridTemplateColumns = function () {
|
|
20033
20021
|
var templateColumns = [];
|
|
20034
20022
|
if (isMobile) {
|
|
20035
|
-
if (columns.includes(
|
|
20036
|
-
columns.includes(
|
|
20037
|
-
columns.includes(
|
|
20038
|
-
columns.includes(
|
|
20039
|
-
templateColumns.push(
|
|
20023
|
+
if (columns.includes('date') ||
|
|
20024
|
+
columns.includes('title') ||
|
|
20025
|
+
columns.includes('state') ||
|
|
20026
|
+
columns.includes('amount')) {
|
|
20027
|
+
templateColumns.push('auto');
|
|
20040
20028
|
}
|
|
20041
|
-
if (columns.includes(
|
|
20042
|
-
templateColumns.push(
|
|
20029
|
+
if (columns.includes('download')) {
|
|
20030
|
+
templateColumns.push('auto');
|
|
20043
20031
|
}
|
|
20044
20032
|
}
|
|
20045
20033
|
else {
|
|
20046
|
-
var leftColumns = [
|
|
20034
|
+
var leftColumns = ['accountName', 'date', 'title'].filter(function (column) {
|
|
20047
20035
|
return columns.includes(column);
|
|
20048
20036
|
}).length;
|
|
20049
20037
|
// The rightmost column (for left columns) should be 3fr, the rest should be auto
|
|
20050
20038
|
if (leftColumns === 0 || leftColumns === 1) {
|
|
20051
|
-
templateColumns.push(
|
|
20039
|
+
templateColumns.push('3fr');
|
|
20052
20040
|
}
|
|
20053
20041
|
else {
|
|
20054
|
-
templateColumns.push.apply(templateColumns, __spreadArray(__spreadArray([], Array(leftColumns - 1).fill(
|
|
20042
|
+
templateColumns.push.apply(templateColumns, __spreadArray(__spreadArray([], Array(leftColumns - 1).fill('auto'), false), ['3fr'], false));
|
|
20055
20043
|
}
|
|
20056
20044
|
// Right columns are only auto
|
|
20057
|
-
var rightColumns = [
|
|
20045
|
+
var rightColumns = ['download', 'state', 'amount'].filter(function (column) {
|
|
20058
20046
|
return columns.includes(column);
|
|
20059
20047
|
}).length;
|
|
20060
|
-
templateColumns.push.apply(templateColumns, Array(rightColumns).fill(
|
|
20048
|
+
templateColumns.push.apply(templateColumns, Array(rightColumns).fill('auto'));
|
|
20061
20049
|
}
|
|
20062
|
-
return templateColumns.join(
|
|
20050
|
+
return templateColumns.join(' ');
|
|
20063
20051
|
};
|
|
20064
20052
|
var drawerTitle = function () {
|
|
20065
20053
|
if (!selectedTransaction)
|
|
20066
|
-
return
|
|
20054
|
+
return '';
|
|
20067
20055
|
var kind = selectedTransaction.kind.toLowerCase();
|
|
20068
20056
|
return kind.charAt(0).toUpperCase() + kind.slice(1);
|
|
20069
20057
|
};
|
|
@@ -20071,20 +20059,18 @@ function TransactionsDisplay(_a) {
|
|
|
20071
20059
|
onTransactionDisplayClose === null || onTransactionDisplayClose === void 0 ? void 0 : onTransactionDisplayClose(selectedTransaction);
|
|
20072
20060
|
setDrawerOpen(false);
|
|
20073
20061
|
}
|
|
20074
|
-
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 ?
|
|
20075
|
-
), showSearchBar && (jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile ?
|
|
20076
|
-
? searchBarClassName
|
|
20077
|
-
: "border border-slate-200", onChange: function (e) {
|
|
20062
|
+
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
|
|
20063
|
+
), showSearchBar && (jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile ? 'bunny-w-full' : '') }, { children: jsxRuntime.jsx(antd.Input, { className: searchBarClassName ? searchBarClassName : '', onChange: function (e) {
|
|
20078
20064
|
if (isNaN(Number(e.target.value))) {
|
|
20079
20065
|
return;
|
|
20080
20066
|
}
|
|
20081
20067
|
onSearchValueChanged(e.target.value);
|
|
20082
|
-
}, prefix: jsxRuntime.jsx(icons.SearchOutlined, {}), placeholder: "Search by id #", style: {
|
|
20083
|
-
minWidth:
|
|
20068
|
+
}, prefix: !search && jsxRuntime.jsx(icons.SearchOutlined, {}), placeholder: "Search by id #", style: {
|
|
20069
|
+
minWidth: '300px',
|
|
20084
20070
|
}, value: search }) })))] }))) : null, jsxRuntime.jsx("div", __assign({ className: "bunny-grid bunny-w-full bunny-rounded-md bunny-overflow-auto ".concat(shadow), style: {
|
|
20085
20071
|
gridTemplateColumns: gridTemplateColumns(),
|
|
20086
|
-
backgroundColor: "var(--row-background".concat(darkMode ?
|
|
20087
|
-
} }, { 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) ||
|
|
20072
|
+
backgroundColor: "var(--row-background".concat(darkMode ? '-dark' : '', ")"),
|
|
20073
|
+
} }, { 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 })] })] }))) })))] })));
|
|
20088
20074
|
}
|
|
20089
20075
|
|
|
20090
20076
|
function Quotes(_a) {
|
|
@@ -20189,9 +20175,9 @@ function QuotesWrapper() {
|
|
|
20189
20175
|
return (jsxRuntime.jsx(TransactionsDisplay, { transactions: quotesAsTransactions, onSearchValueChanged: setSearch, search: search }));
|
|
20190
20176
|
}
|
|
20191
20177
|
|
|
20192
|
-
var MUTATION$
|
|
20178
|
+
var MUTATION$7 = function () { return "\nmutation AccountSignup (\n $pluginId: String!,\n $paymentMethodId: String,\n $priceListCode: String!,\n $accountId: ID!,\n $quoteId: ID!,\n) {\n accountSignup(\n pluginId: $pluginId,\n paymentMethodId: $paymentMethodId,\n priceListCode: $priceListCode,\n accountId: $accountId,\n quoteId: $quoteId,\n ) {\n errors\n quote {\n accountId\n amount\n amountDue\n applicationDate\n applied\n backdatedPeriods\n backdatedQuote\n billingDay\n contactId\n createdAt\n credits\n currencyId\n dealId\n discount\n discountValue\n endDate\n evergreen\n expiresAt\n id\n invoiceImmediately\n invoiceImmediatelyAvailable\n invoiceUntil\n isPendingApprovalRequest\n kind\n message\n name\n netPaymentDays\n notes\n number\n ownerId\n payableId\n periodAmount\n poNumber\n requiresApproval\n smallUnitAmountDue\n splitInvoice\n startDate\n state\n subtotal\n taxAmount\n taxCode\n updatedAt\n uuid\n }\n }\n}"; };
|
|
20193
20179
|
var accountSignup = function (_a) {
|
|
20194
|
-
var token = _a.token, apiHost = _a.apiHost, accountId = _a.accountId, quoteId = _a.quoteId, paymentToken = _a.paymentToken, paymentMethodId = _a.paymentMethodId, pluginId = _a.pluginId, priceListCode = _a.priceListCode
|
|
20180
|
+
var token = _a.token, apiHost = _a.apiHost, accountId = _a.accountId, quoteId = _a.quoteId, paymentToken = _a.paymentToken, paymentMethodId = _a.paymentMethodId, pluginId = _a.pluginId, priceListCode = _a.priceListCode;
|
|
20195
20181
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
20196
20182
|
var vars, response, errors;
|
|
20197
20183
|
var _b;
|
|
@@ -20205,10 +20191,9 @@ var accountSignup = function (_a) {
|
|
|
20205
20191
|
pluginId: pluginId,
|
|
20206
20192
|
paymentMethodId: paymentMethodId,
|
|
20207
20193
|
priceListCode: priceListCode,
|
|
20208
|
-
entityId: entityId,
|
|
20209
20194
|
};
|
|
20210
20195
|
return [4 /*yield*/, gqlRequest({
|
|
20211
|
-
query: MUTATION$
|
|
20196
|
+
query: MUTATION$7(),
|
|
20212
20197
|
token: token,
|
|
20213
20198
|
vars: vars,
|
|
20214
20199
|
apiHost: apiHost,
|
|
@@ -20224,9 +20209,9 @@ var accountSignup = function (_a) {
|
|
|
20224
20209
|
});
|
|
20225
20210
|
};
|
|
20226
20211
|
|
|
20227
|
-
var MUTATION$
|
|
20212
|
+
var MUTATION$6 = function () { return "\nmutation QuoteAccountSignup (\n $accountName: String!,\n $billingContact: ContactAttributes!,\n $priceListCode: String!,\n $billingDetails: BillingDetailsAttributes\n) {\n quoteAccountSignup(\n priceListCode: $priceListCode,\n accountName: $accountName,\n billingContact: $billingContact,\n billingDetails: $billingDetails\n ) {\n account {\n id\n }\n quote {\n accountId\n amount\n amountDue\n applicationDate\n applied\n backdatedPeriods\n backdatedQuote\n billingDay\n contactId\n createdAt\n credits\n currencyId\n dealId\n discount\n discountValue\n endDate\n evergreen\n expiresAt\n id\n invoiceImmediately\n invoiceImmediatelyAvailable\n invoiceUntil\n isPendingApprovalRequest\n kind\n message\n name\n netPaymentDays\n notes\n number\n ownerId\n payableId\n periodAmount\n poNumber\n requiresApproval\n smallUnitAmountDue\n splitInvoice\n startDate\n state\n subtotal\n taxAmount\n taxCode\n updatedAt\n uuid\n }\n tenant {\n code\n }\n portalSessionToken\n errors\n }\n}"; };
|
|
20228
20213
|
var quoteAccountSignup = function (_a) {
|
|
20229
|
-
var token = _a.token, apiHost = _a.apiHost, priceListCode = _a.priceListCode, accountName = _a.accountName, billingContact = _a.billingContact,
|
|
20214
|
+
var token = _a.token, apiHost = _a.apiHost, priceListCode = _a.priceListCode, accountName = _a.accountName, billingContact = _a.billingContact, billingDetails = _a.billingDetails;
|
|
20230
20215
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
20231
20216
|
var vars, response, errors;
|
|
20232
20217
|
var _b;
|
|
@@ -20237,10 +20222,10 @@ var quoteAccountSignup = function (_a) {
|
|
|
20237
20222
|
priceListCode: priceListCode,
|
|
20238
20223
|
accountName: accountName,
|
|
20239
20224
|
billingContact: billingContact,
|
|
20240
|
-
|
|
20225
|
+
billingDetails: billingDetails,
|
|
20241
20226
|
};
|
|
20242
20227
|
return [4 /*yield*/, gqlRequest({
|
|
20243
|
-
query: MUTATION$
|
|
20228
|
+
query: MUTATION$6(),
|
|
20244
20229
|
token: token,
|
|
20245
20230
|
vars: vars,
|
|
20246
20231
|
apiHost: apiHost,
|
|
@@ -20256,18 +20241,18 @@ var quoteAccountSignup = function (_a) {
|
|
|
20256
20241
|
});
|
|
20257
20242
|
};
|
|
20258
20243
|
|
|
20259
|
-
var MUTATION$
|
|
20260
|
-
var
|
|
20261
|
-
var
|
|
20244
|
+
var MUTATION$5 = "mutation quoteChangeAddCoupon($couponCode: String!, $quoteChangeId: ID!) {\n quoteChangeAddCoupon(couponCode: $couponCode, quoteChangeId: $quoteChangeId) {\n quoteChange {\n id\n charges {\n id\n amount\n couponId\n }\n }\n }\n}";
|
|
20245
|
+
var quoteChangeAddCoupon = function (_a) {
|
|
20246
|
+
var quoteChangeId = _a.quoteChangeId, couponCode = _a.couponCode, token = _a.token, apiHost = _a.apiHost;
|
|
20262
20247
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
20263
20248
|
var vars, response, errors;
|
|
20264
20249
|
var _b;
|
|
20265
20250
|
return __generator(this, function (_c) {
|
|
20266
20251
|
switch (_c.label) {
|
|
20267
20252
|
case 0:
|
|
20268
|
-
vars = {
|
|
20269
|
-
return [4 /*yield*/, gqlRequest({
|
|
20270
|
-
query: MUTATION$
|
|
20253
|
+
vars = { couponCode: couponCode, quoteChangeId: quoteChangeId };
|
|
20254
|
+
return [4 /*yield*/, common.gqlRequest({
|
|
20255
|
+
query: MUTATION$5,
|
|
20271
20256
|
token: token,
|
|
20272
20257
|
vars: vars,
|
|
20273
20258
|
apiHost: apiHost,
|
|
@@ -20283,6 +20268,60 @@ var quoteAddCoupon = function (_a) {
|
|
|
20283
20268
|
});
|
|
20284
20269
|
};
|
|
20285
20270
|
|
|
20271
|
+
var MUTATION$4 = "mutation quoteChangeRemoveCoupon($quoteChangeId: ID!, $couponCode: String!) {\n quoteChangeRemoveCoupon(quoteChangeId: $quoteChangeId, couponCode: $couponCode) {\n errors\n }\n}\n";
|
|
20272
|
+
var quoteChangeRemoveCoupon = function (_a) {
|
|
20273
|
+
var quoteChangeId = _a.quoteChangeId, couponCode = _a.couponCode, token = _a.token, apiHost = _a.apiHost;
|
|
20274
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
20275
|
+
var vars, response, errors;
|
|
20276
|
+
var _b;
|
|
20277
|
+
return __generator(this, function (_c) {
|
|
20278
|
+
switch (_c.label) {
|
|
20279
|
+
case 0:
|
|
20280
|
+
vars = { couponCode: couponCode, quoteChangeId: quoteChangeId };
|
|
20281
|
+
return [4 /*yield*/, common.gqlRequest({
|
|
20282
|
+
query: MUTATION$4,
|
|
20283
|
+
token: token,
|
|
20284
|
+
vars: vars,
|
|
20285
|
+
apiHost: apiHost,
|
|
20286
|
+
})];
|
|
20287
|
+
case 1:
|
|
20288
|
+
response = _c.sent();
|
|
20289
|
+
errors = (_b = response === null || response === void 0 ? void 0 : response.quoteChangeRemoveCoupon) === null || _b === void 0 ? void 0 : _b.errors;
|
|
20290
|
+
if (errors)
|
|
20291
|
+
throw errors;
|
|
20292
|
+
return [2 /*return*/, response.quote];
|
|
20293
|
+
}
|
|
20294
|
+
});
|
|
20295
|
+
});
|
|
20296
|
+
};
|
|
20297
|
+
|
|
20298
|
+
var QUOTE_RECALCULATE_TAXES = "\n mutation QuoteRecalculateTaxes($id: ID!) {\n quoteRecalculateTaxes(id: $id) {\n quote {\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 amountsByPeriod {\n amount\n startDate\n }\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 errors\n }\n }\n";
|
|
20299
|
+
var quoteRecalculateTaxes = function (_a) {
|
|
20300
|
+
var quoteId = _a.quoteId, apiHost = _a.apiHost, token = _a.token;
|
|
20301
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
20302
|
+
var vars, response, errors;
|
|
20303
|
+
var _b, _c;
|
|
20304
|
+
return __generator(this, function (_d) {
|
|
20305
|
+
switch (_d.label) {
|
|
20306
|
+
case 0:
|
|
20307
|
+
vars = { id: quoteId };
|
|
20308
|
+
return [4 /*yield*/, common.gqlRequest({
|
|
20309
|
+
query: QUOTE_RECALCULATE_TAXES,
|
|
20310
|
+
token: token,
|
|
20311
|
+
vars: vars,
|
|
20312
|
+
apiHost: apiHost,
|
|
20313
|
+
})];
|
|
20314
|
+
case 1:
|
|
20315
|
+
response = _d.sent();
|
|
20316
|
+
errors = (_b = response === null || response === void 0 ? void 0 : response.quoteRecalculateTaxes) === null || _b === void 0 ? void 0 : _b.errors;
|
|
20317
|
+
if (errors)
|
|
20318
|
+
throw errors;
|
|
20319
|
+
return [2 /*return*/, (_c = response.quoteRecalculateTaxes) === null || _c === void 0 ? void 0 : _c.quote];
|
|
20320
|
+
}
|
|
20321
|
+
});
|
|
20322
|
+
});
|
|
20323
|
+
};
|
|
20324
|
+
|
|
20286
20325
|
var MUTATION$3 = function () { return "\nquery PriceList($code: String!) {\n priceList (code: $code) {\n basePrice\n code\n createdAt\n currencyId\n id\n isVisible\n name\n periodMonths\n planId\n priceDescription\n productId\n product {\n name\n }\n sku\n trialAllowed\n trialLengthDays\n updatedAt\n }\n}"; };
|
|
20287
20326
|
var getPriceList = function (_a) {
|
|
20288
20327
|
var token = _a.token, code = _a.code, apiHost = _a.apiHost;
|
|
@@ -20304,7 +20343,7 @@ var getPriceList = function (_a) {
|
|
|
20304
20343
|
});
|
|
20305
20344
|
};
|
|
20306
20345
|
|
|
20307
|
-
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 amountsByPeriod {\n amount\n startDate\n }\n quoteChanges {\n currencyId\n id\n kind\n charges {\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
|
|
20346
|
+
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 amountsByPeriod {\n amount\n startDate\n }\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 }"); };
|
|
20308
20347
|
var getQuote = function (_a) {
|
|
20309
20348
|
var id = _a.id, token = _a.token, apiHost = _a.apiHost;
|
|
20310
20349
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -20342,47 +20381,93 @@ var BunnyMarketingLink = function () {
|
|
|
20342
20381
|
var isMobile = common.useIsMobile();
|
|
20343
20382
|
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 }) }))] })) })) })));
|
|
20344
20383
|
};
|
|
20345
|
-
var StyedLink = styled__default["default"].a(templateObject_1$
|
|
20384
|
+
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);
|
|
20346
20385
|
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);
|
|
20347
|
-
var templateObject_1$
|
|
20386
|
+
var templateObject_1$5, templateObject_2$1;
|
|
20387
|
+
|
|
20388
|
+
function CouponEditor(_a) {
|
|
20389
|
+
var className = _a.className, onAddCoupon = _a.onAddCoupon, isAddingCoupon = _a.isAddingCoupon;
|
|
20390
|
+
// Local state
|
|
20391
|
+
var _b = react.useState(''), couponCode = _b[0], setCouponCode = _b[1];
|
|
20392
|
+
function handleAddCoupon() {
|
|
20393
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
20394
|
+
return __generator(this, function (_a) {
|
|
20395
|
+
onAddCoupon(couponCode);
|
|
20396
|
+
setCouponCode('');
|
|
20397
|
+
return [2 /*return*/];
|
|
20398
|
+
});
|
|
20399
|
+
});
|
|
20400
|
+
}
|
|
20401
|
+
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 }), jsxRuntime.jsx(antd.Button, __assign({ loading: isAddingCoupon, type: "primary", onClick: handleAddCoupon }, { children: "Apply" }))] })) })));
|
|
20402
|
+
}
|
|
20403
|
+
|
|
20404
|
+
var Text$f = antd.Typography.Text;
|
|
20405
|
+
function CheckoutSummary(_a) {
|
|
20406
|
+
var quote = _a.quote, className = _a.className, onAddCoupon = _a.onAddCoupon, onRemoveCoupon = _a.onRemoveCoupon, isRemovingCoupon = _a.isRemovingCoupon, priceListData = _a.priceListData, isAddingCoupon = _a.isAddingCoupon;
|
|
20407
|
+
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) {
|
|
20408
|
+
return quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.map(function (charge) {
|
|
20409
|
+
var _a;
|
|
20410
|
+
var multiplier = charge.kind === 'COUPON' ? -1 : 1;
|
|
20411
|
+
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 () {
|
|
20412
|
+
var _a, _b;
|
|
20413
|
+
if (isRemovingCoupon) {
|
|
20414
|
+
return;
|
|
20415
|
+
}
|
|
20416
|
+
if (!((_a = charge.coupon) === null || _a === void 0 ? void 0 : _a.couponCode)) {
|
|
20417
|
+
throw new Error('Coupon code not found');
|
|
20418
|
+
}
|
|
20419
|
+
onRemoveCoupon((_b = charge.coupon) === null || _b === void 0 ? void 0 : _b.couponCode);
|
|
20420
|
+
}, 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));
|
|
20421
|
+
});
|
|
20422
|
+
}) })), 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) })] }))] }), jsxRuntime.jsx(CouponEditor, { className: "bunny-w-full", quote: quote, onAddCoupon: onAddCoupon, isAddingCoupon: isAddingCoupon })] })));
|
|
20423
|
+
}
|
|
20424
|
+
var CheckoutSummaryDivider = function () {
|
|
20425
|
+
return (jsxRuntime.jsx("div", __assign({ className: "bunny-my-2" }, { children: jsxRuntime.jsx(antd.Divider, { className: "m-0" }) })));
|
|
20426
|
+
};
|
|
20348
20427
|
|
|
20349
20428
|
var Title$1 = antd.Typography.Title;
|
|
20350
20429
|
function PaymentForms(_a) {
|
|
20351
20430
|
var quote = _a.quote, handlePaymentSuccess = _a.handlePaymentSuccess, handlePaymentFail = _a.handlePaymentFail, handleSubmit = _a.handleSubmit, proceedingToPayment = _a.proceedingToPayment, accountId = _a.accountId, overrideToken = _a.overrideToken, customCheckoutFunction = _a.customCheckoutFunction;
|
|
20352
|
-
var
|
|
20353
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: quote ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: overrideToken ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Title$1, __assign({ className: "bunny-px-4 bunny-m-0", level: 2 }, { children: "Payment" })), jsxRuntime.jsx(PaymentForm, {
|
|
20431
|
+
var entityId = useCurrentUserData().entityId;
|
|
20432
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: quote ? (jsxRuntime.jsx(jsxRuntime.Fragment, { children: overrideToken ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Title$1, __assign({ className: "bunny-px-4 bunny-m-0", level: 2 }, { children: "Payment" })), jsxRuntime.jsx(PaymentForm, { entityId: entityId, onFail: handlePaymentFail, onPaymentSuccess: handlePaymentSuccess, accountId: accountId, quote: quote, overrideToken: overrideToken, customCheckoutFunction: customCheckoutFunction })] })) : null })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Title$1, __assign({ className: "bunny-px-4 bunny-m-0", level: 2 }, { children: "Signup" })), jsxRuntime.jsx(InitialSignupForm, { className: "bunny-px-4", onSubmit: handleSubmit, submitting: proceedingToPayment })] })) }));
|
|
20354
20433
|
}
|
|
20355
20434
|
function InitialSignupForm(_a) {
|
|
20356
20435
|
var className = _a.className, onSubmit = _a.onSubmit, submitting = _a.submitting;
|
|
20357
20436
|
var form = antd.Form.useForm()[0];
|
|
20437
|
+
var isMobile = common.useIsMobile();
|
|
20358
20438
|
function handleSubmit() {
|
|
20359
20439
|
form.validateFields({ validateOnly: false }).then(function () {
|
|
20360
20440
|
onSubmit(form.getFieldsValue());
|
|
20361
20441
|
});
|
|
20362
20442
|
}
|
|
20363
|
-
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.jsx(antd.Form.Item, __assign({ name: "firstName", rules: [{ required: true, message: 'First name is required' }] }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "First name" }) })), jsxRuntime.jsx(antd.Form.Item, __assign({ name: "lastName", rules: [{ required: true, message: 'Last name is required' }] }, { children: jsxRuntime.jsx(antd.Input, { placeholder: "Last name" }) })), jsxRuntime.jsx(antd.Form.Item, __assign({ name: "email", rules: [
|
|
20364
|
-
|
|
20365
|
-
|
|
20366
|
-
|
|
20443
|
+
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: [
|
|
20444
|
+
{ required: true, message: 'Email is required' },
|
|
20445
|
+
{ type: 'email', message: 'Please enter a valid email' },
|
|
20446
|
+
], 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) {
|
|
20447
|
+
var _a, _b;
|
|
20448
|
+
return ((_a = option === null || option === void 0 ? void 0 : option.label) !== null && _a !== void 0 ? _a : '').toLowerCase().includes(input.toLowerCase()) ||
|
|
20449
|
+
((_b = option === null || option === void 0 ? void 0 : option.value) !== null && _b !== void 0 ? _b : '').toLowerCase().includes(input.toLowerCase());
|
|
20450
|
+
} }) })) })) })), 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" })) })] })) })));
|
|
20367
20451
|
}
|
|
20368
20452
|
|
|
20369
|
-
var Title = antd.Typography.Title, Text$
|
|
20453
|
+
var Title = antd.Typography.Title, Text$e = antd.Typography.Text;
|
|
20370
20454
|
function PaymentSuccessDisplay(_a) {
|
|
20371
20455
|
var amountPaid = _a.amountPaid, className = _a.className, companyName = _a.companyName, returnUrl = _a.returnUrl, style = _a.style, currencyId = _a.currencyId;
|
|
20372
|
-
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$
|
|
20456
|
+
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] })))] })));
|
|
20373
20457
|
}
|
|
20374
20458
|
|
|
20375
|
-
var Text$
|
|
20459
|
+
var Text$d = antd.Typography.Text;
|
|
20376
20460
|
function PriceListDisplay(_a) {
|
|
20377
20461
|
var priceListData = _a.priceListData;
|
|
20378
20462
|
if (!priceListData)
|
|
20379
20463
|
return null;
|
|
20380
|
-
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$
|
|
20464
|
+
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] })));
|
|
20381
20465
|
}
|
|
20382
20466
|
|
|
20383
20467
|
var showErrorNotification = common.useErrorNotification();
|
|
20468
|
+
var showSuccessNotification = common.useSuccessNotification();
|
|
20384
20469
|
function Signup(_a) {
|
|
20385
|
-
var companyName = _a.companyName, priceListCode = _a.priceListCode, returnUrl = _a.returnUrl, couponCode = _a.couponCode, className = _a.className, _b = _a.shadow, shadow = _b === void 0 ? 'shadow-md' : _b, style = _a.style
|
|
20470
|
+
var companyName = _a.companyName, priceListCode = _a.priceListCode, returnUrl = _a.returnUrl, couponCode = _a.couponCode, className = _a.className, _b = _a.shadow, shadow = _b === void 0 ? 'shadow-md' : _b, style = _a.style;
|
|
20386
20471
|
// Hooks
|
|
20387
20472
|
var apiHost = react.useContext(BunnyContext).apiHost;
|
|
20388
20473
|
var tokenFromContexts = useToken();
|
|
@@ -20392,8 +20477,7 @@ function Signup(_a) {
|
|
|
20392
20477
|
var _d = react.useState(undefined), accountId = _d[0], setAccountId = _d[1];
|
|
20393
20478
|
var _e = react.useState(undefined), portalSessionToken = _e[0], setPortalSessionToken = _e[1];
|
|
20394
20479
|
var token = portalSessionToken || tokenFromContexts;
|
|
20395
|
-
var _f = react.useState(false),
|
|
20396
|
-
var _g = react.useState(false), purchaseSucceeded = _g[0], setPurchaseSucceeded = _g[1];
|
|
20480
|
+
var _f = react.useState(false), purchaseSucceeded = _f[0], setPurchaseSucceeded = _f[1];
|
|
20397
20481
|
var defaultCouponAppliedRef = react.useRef(undefined);
|
|
20398
20482
|
var defaultPaymentMethod = usePaymentMethod({
|
|
20399
20483
|
accountId: accountId,
|
|
@@ -20401,6 +20485,71 @@ function Signup(_a) {
|
|
|
20401
20485
|
apiHost: apiHost,
|
|
20402
20486
|
}).defaultPaymentMethod;
|
|
20403
20487
|
var queryClient = reactQuery.useQueryClient();
|
|
20488
|
+
var recalculateTaxes = reactQuery.useMutation({
|
|
20489
|
+
mutationFn: function () {
|
|
20490
|
+
if (!(quote === null || quote === void 0 ? void 0 : quote.id)) {
|
|
20491
|
+
throw new Error('Quote ID is required');
|
|
20492
|
+
}
|
|
20493
|
+
return quoteRecalculateTaxes({ token: token, apiHost: apiHost, quoteId: quote.id });
|
|
20494
|
+
},
|
|
20495
|
+
onError: function (error) {
|
|
20496
|
+
if (!error[0].message.includes('Ensure that you have a taxation plugin')) {
|
|
20497
|
+
showErrorNotification(error.message);
|
|
20498
|
+
}
|
|
20499
|
+
},
|
|
20500
|
+
onSuccess: function (quote) {
|
|
20501
|
+
queryClient.setQueryData(['quote', initialQuote === null || initialQuote === void 0 ? void 0 : initialQuote.id], quote);
|
|
20502
|
+
queryClient.invalidateQueries({
|
|
20503
|
+
queryKey: ['quote', initialQuote === null || initialQuote === void 0 ? void 0 : initialQuote.id],
|
|
20504
|
+
});
|
|
20505
|
+
},
|
|
20506
|
+
}).mutate;
|
|
20507
|
+
var _g = reactQuery.useMutation({
|
|
20508
|
+
mutationFn: function (formData) {
|
|
20509
|
+
return quoteAccountSignup({
|
|
20510
|
+
token: token,
|
|
20511
|
+
apiHost: apiHost,
|
|
20512
|
+
priceListCode: priceListCode,
|
|
20513
|
+
accountName: formData.accountName,
|
|
20514
|
+
billingContact: {
|
|
20515
|
+
firstName: formData.firstName,
|
|
20516
|
+
lastName: formData.lastName,
|
|
20517
|
+
email: formData.email,
|
|
20518
|
+
},
|
|
20519
|
+
billingDetails: {
|
|
20520
|
+
billingCountry: formData.billingCountry,
|
|
20521
|
+
// TODO: add these billing details back for Avalara and AFC taxation plugins.
|
|
20522
|
+
// billingState: formData.billingState,
|
|
20523
|
+
// billingCity: formData.billingCity,
|
|
20524
|
+
// billingZip: formData.billingZip,
|
|
20525
|
+
// billingStreet: formData.billingStreet,
|
|
20526
|
+
// taxNumber: formData.taxNumber,
|
|
20527
|
+
},
|
|
20528
|
+
});
|
|
20529
|
+
},
|
|
20530
|
+
onSuccess: function (data) {
|
|
20531
|
+
setAccountId(data.account.id);
|
|
20532
|
+
setPortalSessionToken(data.portalSessionToken);
|
|
20533
|
+
// We must invalidate the accountPaymentMethodKey query in order to clear payment methods from the provided api token,
|
|
20534
|
+
// to instead use paymentMethods from portalSessionToken.
|
|
20535
|
+
queryClient.invalidateQueries({
|
|
20536
|
+
queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
|
|
20537
|
+
accountId: accountId,
|
|
20538
|
+
token: token,
|
|
20539
|
+
}),
|
|
20540
|
+
});
|
|
20541
|
+
setInitialQuote(data.quote);
|
|
20542
|
+
},
|
|
20543
|
+
onError: function (error) {
|
|
20544
|
+
var errorMessage = error.response.errors[0].message;
|
|
20545
|
+
if (errorMessage.includes("Address couldn't be validated")) {
|
|
20546
|
+
showErrorNotification('Please enter a valid billing address');
|
|
20547
|
+
}
|
|
20548
|
+
else {
|
|
20549
|
+
showErrorNotification(errorMessage);
|
|
20550
|
+
}
|
|
20551
|
+
},
|
|
20552
|
+
}), quoteAccountSignupMutate = _g.mutate, isSigningUp = _g.isPending;
|
|
20404
20553
|
// Queries
|
|
20405
20554
|
var _h = reactQuery.useQuery({
|
|
20406
20555
|
queryKey: ['priceList', priceListCode],
|
|
@@ -20419,30 +20568,63 @@ function Signup(_a) {
|
|
|
20419
20568
|
var quote = data || initialQuote;
|
|
20420
20569
|
var _k = reactQuery.useMutation({
|
|
20421
20570
|
mutationFn: function (couponCode) {
|
|
20571
|
+
var _a;
|
|
20422
20572
|
if (!quote) {
|
|
20423
20573
|
throw new Error('Quote is required');
|
|
20424
20574
|
}
|
|
20425
20575
|
if (!token) {
|
|
20426
20576
|
throw new Error('Token is required');
|
|
20427
20577
|
}
|
|
20428
|
-
|
|
20429
|
-
|
|
20578
|
+
if (!((_a = quote.quoteChanges[0]) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
20579
|
+
throw new Error('Quote change ID is required');
|
|
20580
|
+
}
|
|
20581
|
+
return quoteChangeAddCoupon({
|
|
20582
|
+
quoteChangeId: quote.quoteChanges[0].id,
|
|
20430
20583
|
couponCode: couponCode,
|
|
20431
20584
|
apiHost: apiHost,
|
|
20432
20585
|
token: token,
|
|
20433
20586
|
});
|
|
20434
20587
|
},
|
|
20435
20588
|
onSuccess: function () {
|
|
20436
|
-
queryClient.
|
|
20589
|
+
queryClient.invalidateQueries({
|
|
20437
20590
|
queryKey: ['quote', quote === null || quote === void 0 ? void 0 : quote.id],
|
|
20438
20591
|
});
|
|
20439
20592
|
showSuccessNotification('Coupon applied');
|
|
20593
|
+
recalculateTaxes();
|
|
20440
20594
|
},
|
|
20441
20595
|
onError: function (error) {
|
|
20442
20596
|
var _a, _b;
|
|
20443
20597
|
showErrorNotification((_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');
|
|
20444
20598
|
},
|
|
20445
20599
|
}), addCoupon = _k.mutate, isAddingCoupon = _k.isPending;
|
|
20600
|
+
var _l = reactQuery.useMutation({
|
|
20601
|
+
mutationFn: function (couponCode) {
|
|
20602
|
+
var _a;
|
|
20603
|
+
if (!quote) {
|
|
20604
|
+
throw new Error('Quote is required');
|
|
20605
|
+
}
|
|
20606
|
+
if (!((_a = quote.quoteChanges[0]) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
20607
|
+
throw new Error('Quote change ID is required');
|
|
20608
|
+
}
|
|
20609
|
+
return quoteChangeRemoveCoupon({
|
|
20610
|
+
quoteChangeId: quote.quoteChanges[0].id,
|
|
20611
|
+
couponCode: couponCode,
|
|
20612
|
+
apiHost: apiHost,
|
|
20613
|
+
token: token,
|
|
20614
|
+
});
|
|
20615
|
+
},
|
|
20616
|
+
onSuccess: function () {
|
|
20617
|
+
showSuccessNotification('Coupon removed');
|
|
20618
|
+
recalculateTaxes();
|
|
20619
|
+
queryClient.invalidateQueries({
|
|
20620
|
+
queryKey: ['quote', quote === null || quote === void 0 ? void 0 : quote.id],
|
|
20621
|
+
});
|
|
20622
|
+
},
|
|
20623
|
+
onError: function (error) {
|
|
20624
|
+
var _a, _b;
|
|
20625
|
+
showErrorNotification((_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');
|
|
20626
|
+
},
|
|
20627
|
+
}), removeCoupon = _l.mutate, isRemovingCoupon = _l.isPending;
|
|
20446
20628
|
// Handle default coupon application
|
|
20447
20629
|
react.useEffect(function () {
|
|
20448
20630
|
if (couponCode && (quote === null || quote === void 0 ? void 0 : quote.id) && defaultCouponAppliedRef.current !== couponCode) {
|
|
@@ -20452,46 +20634,9 @@ function Signup(_a) {
|
|
|
20452
20634
|
}, [couponCode, quote === null || quote === void 0 ? void 0 : quote.id]);
|
|
20453
20635
|
function handleSubmit(formData) {
|
|
20454
20636
|
return __awaiter(this, void 0, void 0, function () {
|
|
20455
|
-
var data_1, error_1;
|
|
20456
20637
|
return __generator(this, function (_a) {
|
|
20457
|
-
|
|
20458
|
-
|
|
20459
|
-
_a.trys.push([0, 2, , 3]);
|
|
20460
|
-
setProceedingToPayment(true);
|
|
20461
|
-
return [4 /*yield*/, quoteAccountSignup({
|
|
20462
|
-
token: token,
|
|
20463
|
-
apiHost: apiHost,
|
|
20464
|
-
priceListCode: priceListCode,
|
|
20465
|
-
accountName: formData.accountName,
|
|
20466
|
-
billingContact: {
|
|
20467
|
-
firstName: formData.firstName,
|
|
20468
|
-
lastName: formData.lastName,
|
|
20469
|
-
email: formData.email,
|
|
20470
|
-
},
|
|
20471
|
-
entityId: entityId,
|
|
20472
|
-
})];
|
|
20473
|
-
case 1:
|
|
20474
|
-
data_1 = _a.sent();
|
|
20475
|
-
setAccountId(data_1.account.id);
|
|
20476
|
-
setPortalSessionToken(data_1.portalSessionToken);
|
|
20477
|
-
// We must invalidate the accountPaymentMethodKey query in order to clear payment methods from the provided api token,
|
|
20478
|
-
// to instead use paymentMethods from portalSessionToken.
|
|
20479
|
-
queryClient.invalidateQueries({
|
|
20480
|
-
queryKey: common.QueryKeyFactory.default.accountPaymentMethodKey({
|
|
20481
|
-
accountId: accountId,
|
|
20482
|
-
token: token,
|
|
20483
|
-
}),
|
|
20484
|
-
});
|
|
20485
|
-
setProceedingToPayment(false);
|
|
20486
|
-
setInitialQuote(data_1.quote);
|
|
20487
|
-
return [3 /*break*/, 3];
|
|
20488
|
-
case 2:
|
|
20489
|
-
error_1 = _a.sent();
|
|
20490
|
-
setProceedingToPayment(false);
|
|
20491
|
-
showErrorNotification(error_1.response.message);
|
|
20492
|
-
return [3 /*break*/, 3];
|
|
20493
|
-
case 3: return [2 /*return*/];
|
|
20494
|
-
}
|
|
20638
|
+
quoteAccountSignupMutate(formData);
|
|
20639
|
+
return [2 /*return*/];
|
|
20495
20640
|
});
|
|
20496
20641
|
});
|
|
20497
20642
|
}
|
|
@@ -20528,7 +20673,6 @@ function Signup(_a) {
|
|
|
20528
20673
|
pluginId: plugin === null || plugin === void 0 ? void 0 : plugin.id.toString(),
|
|
20529
20674
|
priceListCode: priceListCode,
|
|
20530
20675
|
accountId: accountId,
|
|
20531
|
-
entityId: entityId,
|
|
20532
20676
|
})];
|
|
20533
20677
|
case 1: return [2 /*return*/, _a.sent()];
|
|
20534
20678
|
}
|
|
@@ -20536,28 +20680,20 @@ function Signup(_a) {
|
|
|
20536
20680
|
});
|
|
20537
20681
|
}
|
|
20538
20682
|
function handlePaymentFail(error) {
|
|
20539
|
-
|
|
20683
|
+
var _a;
|
|
20684
|
+
showErrorNotification((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.message);
|
|
20540
20685
|
}
|
|
20686
|
+
react.useEffect(function () {
|
|
20687
|
+
if (initialQuote === null || initialQuote === void 0 ? void 0 : initialQuote.id) {
|
|
20688
|
+
recalculateTaxes();
|
|
20689
|
+
}
|
|
20690
|
+
}, [initialQuote === null || initialQuote === void 0 ? void 0 : initialQuote.id]);
|
|
20541
20691
|
if (purchaseSucceeded) {
|
|
20542
20692
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: (quote === null || quote === void 0 ? void 0 : quote.currencyId) !== undefined ? (jsxRuntime.jsx("div", __assign({ className: "bunny-w-screen bunny-flex bunny-items-start bunny-pt-[25vh]" }, { children: jsxRuntime.jsx(PaymentSuccessDisplay, { amountPaid: (quote === null || quote === void 0 ? void 0 : quote.amountDue) || 0, className: "bunny-w-full", companyName: companyName, returnUrl: returnUrl, currencyId: quote === null || quote === void 0 ? void 0 : quote.currencyId }) }))) : (jsxRuntime.jsx("div", { children: "No currency ID found from Quote" })) }));
|
|
20543
20693
|
}
|
|
20544
|
-
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, priceListData: priceListData, isAddingCoupon: isAddingCoupon })) : (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: {
|
|
20694
|
+
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 })) : (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: {
|
|
20545
20695
|
boxShadow: '-5px 0 20px 0 rgba(0, 0, 0, 0.05)',
|
|
20546
|
-
} }, { 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:
|
|
20547
|
-
}
|
|
20548
|
-
var Text$d = antd.Typography.Text;
|
|
20549
|
-
var CheckoutSummaryDivider = function () {
|
|
20550
|
-
return (jsxRuntime.jsx("div", __assign({ className: "bunny-my-2" }, { children: jsxRuntime.jsx(antd.Divider, { className: "m-0" }) })));
|
|
20551
|
-
};
|
|
20552
|
-
var showSuccessNotification = common.useSuccessNotification();
|
|
20553
|
-
function CheckoutSummary(_a) {
|
|
20554
|
-
var quote = _a.quote, className = _a.className; _a.onAddCoupon; var priceListData = _a.priceListData; _a.isAddingCoupon;
|
|
20555
|
-
return (jsxRuntime.jsxs("div", __assign({ className: "".concat(className, " bunny-space-y-4") }, { children: [jsxRuntime.jsxs(Text$d, { 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) {
|
|
20556
|
-
return quoteChange === null || quoteChange === void 0 ? void 0 : quoteChange.charges.map(function (charge) {
|
|
20557
|
-
var multiplier = charge.kind === 'COUPON' ? -1 : 1;
|
|
20558
|
-
return (jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-justify-between" }, { children: [jsxRuntime.jsx("div", { children: charge.name }), jsxRuntime.jsx("div", { children: charge.quantity }), jsxRuntime.jsx("div", { children: common.formatCurrency(multiplier * charge.amount, charge.currencyId) })] }), charge.id));
|
|
20559
|
-
});
|
|
20560
|
-
}) })), 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.amountDue, 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.taxAmount, quote.currencyId) })] }))] }), false ] })));
|
|
20696
|
+
} }, { 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 }) }))) }))] })));
|
|
20561
20697
|
}
|
|
20562
20698
|
|
|
20563
20699
|
var useQuoteSubscriptionUpgrade = function () {
|
|
@@ -20646,35 +20782,6 @@ var pageWrapperClassName = function (isMobile) {
|
|
|
20646
20782
|
return "flex flex-col grow pt-4 ".concat(isMobile ? "pb-4 overflow-hidden" : "pb-8", " ").concat("content-container");
|
|
20647
20783
|
};
|
|
20648
20784
|
|
|
20649
|
-
var QUOTE_FIELDS = "quote {\n formattedQuote {\n html\n }\n acceptedByName\n acceptedByTitle\n accountId\n amount\n amountDue\n applicationDate\n applied\n billingDay\n contactId\n createdAt\n credits\n currencyId\n dealId\n discount\n discountValue\n endDate\n evergreen\n expiresAt\n id\n invoiceUntil\n isPendingApprovalRequest\n kind\n message\n name\n netPaymentDays\n notes\n ownerId\n periodAmount\n poNumber\n requiresApproval\n startDate\n state\n subtotal\n taxAmount\n updatedAt\n uuid\n amountsByPeriod {\n amount\n id\n name\n }\n endDateOptions {\n endDate\n label\n }\n invoiceUntilOptions {\n endDate\n label\n }\n quoteChanges {\n currencyId\n id\n kind\n charges {\n amountsByPeriod {\n amount\n startDate\n }\n amount\n billingPeriod\n billingPeriodAmounts { id amount prorationRate }\n chargeType\n couponId\n createdAt\n currencyId\n discount\n endDate\n feature { id name code isUnit unitName }\n id\n name\n priceListCharge {\n id\n }\n priceList {\n id\n }\n couponId\n price\n priceDecimals\n priceTiers { starts price }\n pricingModel\n prorationRate\n quantity\n quantityMax\n quantityMin\n startDate\n tieredAveragePrice\n updatedAt\n kind\n }\n priceList {\n id\n plan {\n name\n }\n product {\n name\n }\n }\n }\n}";
|
|
20650
|
-
|
|
20651
|
-
var QUOTE_RECALCULATE_TAXES = "\n mutation QuoteRecalculateTaxes($id: ID!) {\n quoteRecalculateTaxes(id: $id) {\n ".concat(QUOTE_FIELDS, "\n errors\n }\n }\n");
|
|
20652
|
-
var quoteRecalculateTaxes = function (_a) {
|
|
20653
|
-
var quoteId = _a.quoteId, apiHost = _a.apiHost, token = _a.token;
|
|
20654
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
20655
|
-
var vars, response, errors;
|
|
20656
|
-
var _b, _c;
|
|
20657
|
-
return __generator(this, function (_d) {
|
|
20658
|
-
switch (_d.label) {
|
|
20659
|
-
case 0:
|
|
20660
|
-
vars = { id: quoteId };
|
|
20661
|
-
return [4 /*yield*/, gqlRequest({
|
|
20662
|
-
query: QUOTE_RECALCULATE_TAXES,
|
|
20663
|
-
token: token,
|
|
20664
|
-
vars: vars,
|
|
20665
|
-
apiHost: apiHost,
|
|
20666
|
-
})];
|
|
20667
|
-
case 1:
|
|
20668
|
-
response = _d.sent();
|
|
20669
|
-
errors = (_b = response === null || response === void 0 ? void 0 : response.quoteRecalculateTaxes) === null || _b === void 0 ? void 0 : _b.errors;
|
|
20670
|
-
if (errors)
|
|
20671
|
-
throw errors;
|
|
20672
|
-
return [2 /*return*/, (_c = response.quoteRecalculateTaxes) === null || _c === void 0 ? void 0 : _c.quote];
|
|
20673
|
-
}
|
|
20674
|
-
});
|
|
20675
|
-
});
|
|
20676
|
-
};
|
|
20677
|
-
|
|
20678
20785
|
var MUTATION$2 = "{\n currentUser {\n taxationRequiredAccountFields\n }\n}";
|
|
20679
20786
|
var getTaxationRequiredAccountFields = function (_a) {
|
|
20680
20787
|
var apiHost = _a.apiHost, token = _a.token;
|
|
@@ -20786,6 +20893,7 @@ var QuoteCheckout = function (_a) {
|
|
|
20786
20893
|
var isMobile = common.useIsMobile();
|
|
20787
20894
|
var _b = react.useState(false), isSaving = _b[0], setIsSaving = _b[1];
|
|
20788
20895
|
var paymentRequired = getQuoteAmountDue(quote) > 0;
|
|
20896
|
+
var entityId = useCurrentUserData().entityId;
|
|
20789
20897
|
var checkoutMutation = reactQuery.useMutation({
|
|
20790
20898
|
mutationFn: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
20791
20899
|
return __generator(this, function (_a) {
|
|
@@ -20815,7 +20923,7 @@ var QuoteCheckout = function (_a) {
|
|
|
20815
20923
|
}
|
|
20816
20924
|
if (taxationRequiredAccountFields)
|
|
20817
20925
|
return (jsxRuntime.jsx(PaymentFormWrapper, __assign({ setMaxHeight: false }, { children: jsxRuntime.jsx(TaxationForm, { account: account, quote: quote }) })));
|
|
20818
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: paymentRequired ? (jsxRuntime.jsx(PaymentForm, {
|
|
20926
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: paymentRequired ? (jsxRuntime.jsx(PaymentForm, { entityId: entityId, onFail: onFail, onPaymentSuccess: onSuccess, quote: quote })) : (jsxRuntime.jsx(PaymentFormWrapper, __assign({ setMaxHeight: false }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2 ".concat(isMobile ? 'bunny-shadow-padding-x' : '') }, { children: [jsxRuntime.jsx(antd.Button, __assign({ onClick: handleCheckoutNoPayment, type: "primary" }, { children: isSaving ? 'Processing...' : 'Complete order' })), jsxRuntime.jsx("div", __assign({ className: "bunny-text-xs bunny-text-slate-500" }, { children: "No payment is required" }))] })) }))) }));
|
|
20819
20927
|
};
|
|
20820
20928
|
var PaymentFormWrapper = function (_a) {
|
|
20821
20929
|
var children = _a.children, setMaxHeight = _a.setMaxHeight, className = _a.className;
|
|
@@ -20832,9 +20940,10 @@ var PaymentFormWrapper = function (_a) {
|
|
|
20832
20940
|
var queryKeyFactory = common.QueryKeyFactory.default;
|
|
20833
20941
|
var Checkout = function (_a) {
|
|
20834
20942
|
var _b, _c;
|
|
20835
|
-
var onCancel = _a.onCancel, onSuccess = _a.onSuccess, onFail = _a.onFail, invoice = _a.invoice, open = _a.open, quote = _a.quote, selectedPriceList = _a.selectedPriceList
|
|
20943
|
+
var onCancel = _a.onCancel, onSuccess = _a.onSuccess, onFail = _a.onFail, invoice = _a.invoice, open = _a.open, quote = _a.quote, selectedPriceList = _a.selectedPriceList;
|
|
20836
20944
|
var apiHost = react.useContext(BunnyContext).apiHost;
|
|
20837
20945
|
var isMobile = common.useIsMobile();
|
|
20946
|
+
var token = useToken();
|
|
20838
20947
|
var hasTaxPlugin = useHasTaxPlugin({
|
|
20839
20948
|
apiHost: apiHost,
|
|
20840
20949
|
token: token,
|
|
@@ -20908,7 +21017,7 @@ var Checkout = function (_a) {
|
|
|
20908
21017
|
onFail(error);
|
|
20909
21018
|
}, onSuccess: onSuccess, quote: quote, taxationRequiredAccountFields: taxationRequiredAccountFields, token: token })) : (jsxRuntime.jsx(PaymentForm, { onFail: function (error) {
|
|
20910
21019
|
onFail(error);
|
|
20911
|
-
}, onPaymentSuccess: onSuccess }))] })), jsxRuntime.jsx(Footer, {})] })) })));
|
|
21020
|
+
}, onPaymentSuccess: onSuccess }))] })), jsxRuntime.jsx(Footer, { className: "bunny-pl-12" })] })) })));
|
|
20912
21021
|
};
|
|
20913
21022
|
|
|
20914
21023
|
var PageTitle = function (_a) {
|
|
@@ -21282,11 +21391,11 @@ var PlanPickerCheckoutBar = function (_a) {
|
|
|
21282
21391
|
return (jsxRuntime.jsx(CheckoutBarInput, { disabled: !chargeQuantity, charge: charge, quantity: chargeQuantity !== null && chargeQuantity !== void 0 ? chargeQuantity : 0, selectedPriceList: selectedPriceList, onQuantityChanged: function (quantity) {
|
|
21283
21392
|
onChangeQuantity(charge.id, quantity);
|
|
21284
21393
|
} }, index));
|
|
21285
|
-
}) })), jsxRuntime.jsx(CheckoutBarSummarySection, { onClickCheckout: function () { return setPayModalVisible(true); }, open: payModalVisible, quote: quote, selectedPriceList: selectedPriceList, upgradingSubscription: upgradingSubscription, quotePreviewData: quotePreviewData }), jsxRuntime.jsx(Checkout, {
|
|
21394
|
+
}) })), jsxRuntime.jsx(CheckoutBarSummarySection, { onClickCheckout: function () { return setPayModalVisible(true); }, open: payModalVisible, quote: quote, selectedPriceList: selectedPriceList, upgradingSubscription: upgradingSubscription, quotePreviewData: quotePreviewData }), jsxRuntime.jsx(Checkout, { onCancel: function () { return setPayModalVisible(false); }, onFail: onCheckoutFail, onSuccess: handleCheckoutSuccess, open: payModalVisible, quote: quote, selectedPriceList: selectedPriceList, storedPaymentMethod: defaultPaymentMethod, token: token })] })));
|
|
21286
21395
|
};
|
|
21287
21396
|
|
|
21288
21397
|
// WARNING: There is a preview button on APP that will need to be changed if this query is changed
|
|
21289
|
-
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 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 basePrice\n billingPeriod\n chargeType\n id\n name\n priceDecimals\n pricingModel\n quantityMax\n quantityMin\n selfServiceQuantity\n feature {\n name\n unitName\n }\n }\n }\n }\n }";
|
|
21398
|
+
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 basePrice\n billingPeriod\n chargeType\n id\n name\n priceDecimals\n pricingModel\n quantityMax\n quantityMin\n selfServiceQuantity\n feature {\n name\n unitName\n }\n }\n }\n }\n }";
|
|
21290
21399
|
var getPriceListChangeOptions = function (_a) {
|
|
21291
21400
|
var apiHost = _a.apiHost, isInPreviewMode = _a.isInPreviewMode, productId = _a.productId, token = _a.token, upgradingSubscription = _a.upgradingSubscription;
|
|
21292
21401
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -21370,17 +21479,13 @@ var BillingPeriodSelector = function (_a) {
|
|
|
21370
21479
|
}) })) }))] }))] })));
|
|
21371
21480
|
};
|
|
21372
21481
|
var ProductRadioStyled = styled__default["default"].div.withConfig({
|
|
21373
|
-
shouldForwardProp: function (prop) { return ![
|
|
21374
|
-
})(templateObject_1$
|
|
21375
|
-
return props.brandColor ? props.brandColor : "black";
|
|
21376
|
-
}, function (props) {
|
|
21377
|
-
return props.brandColor ? props.brandColor : "black";
|
|
21378
|
-
});
|
|
21482
|
+
shouldForwardProp: function (prop) { return !['brandColor'].includes(prop); },
|
|
21483
|
+
})(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n .ant-radio-button-wrapper:not(.ant-radio-button-wrapper-checked) {\n border-color: ", " !important;\n color: ", " !important;\n }\n"], ["\n .ant-radio-button-wrapper:not(.ant-radio-button-wrapper-checked) {\n border-color: ", " !important;\n color: ", " !important;\n }\n"])), function (props) { return (props.brandColor ? props.brandColor : 'black'); }, function (props) { return (props.brandColor ? props.brandColor : 'black'); });
|
|
21379
21484
|
var StyledRadioGroup = styled__default["default"].div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n .ant-radio-group {\n display: flex !important;\n align-items: center !important;\n padding: 4px !important;\n background-color: ", " !important;\n border-radius: 6px !important;\n width: ", " !important;\n border: none !important;\n }\n .ant-radio-button-wrapper {\n flex-grow: 1 !important;\n z-index: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n border-color: transparent !important;\n border-radius: 4px !important;\n > span {\n font-size: 11px !important;\n }\n }\n .ant-radio-button-wrapper:not(.ant-radio-button-wrapper-checked) {\n background: transparent !important;\n }\n .ant-radio-button-wrapper::before {\n display: none !important;\n }\n"], ["\n .ant-radio-group {\n display: flex !important;\n align-items: center !important;\n padding: 4px !important;\n background-color: ", " !important;\n border-radius: 6px !important;\n width: ", " !important;\n border: none !important;\n }\n .ant-radio-button-wrapper {\n flex-grow: 1 !important;\n z-index: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n border-color: transparent !important;\n border-radius: 4px !important;\n > span {\n font-size: 11px !important;\n }\n }\n .ant-radio-button-wrapper:not(.ant-radio-button-wrapper-checked) {\n background: transparent !important;\n }\n .ant-radio-button-wrapper::before {\n display: none !important;\n }\n"])), common.GRAY_200, function (_a) {
|
|
21380
21485
|
var $isMobile = _a.$isMobile;
|
|
21381
|
-
return $isMobile ?
|
|
21486
|
+
return ($isMobile ? '100%' : 'min-content');
|
|
21382
21487
|
});
|
|
21383
|
-
var templateObject_1$
|
|
21488
|
+
var templateObject_1$4, templateObject_2;
|
|
21384
21489
|
|
|
21385
21490
|
var PriceListCardTitle = function (_a) {
|
|
21386
21491
|
var priceList = _a.priceList, isPriceListCurrentSubscription = _a.isPriceListCurrentSubscription, trialRemainingDays = _a.trialRemainingDays;
|
|
@@ -21390,10 +21495,30 @@ var PriceListCardTitle = function (_a) {
|
|
|
21390
21495
|
: " " }))), 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 }))] })));
|
|
21391
21496
|
};
|
|
21392
21497
|
|
|
21498
|
+
var getPrice = function (priceList) {
|
|
21499
|
+
if (priceList.showPriceAsMonthly) {
|
|
21500
|
+
return priceList.monthlyBasePrice;
|
|
21501
|
+
}
|
|
21502
|
+
return priceList.basePrice;
|
|
21503
|
+
};
|
|
21504
|
+
var calculatePriceDecimals = function (priceList) {
|
|
21505
|
+
if (priceList.plan.pricingStyle === common.PricingStyle.PRICED) {
|
|
21506
|
+
var decimalPart = getPrice(priceList).toString().split('.')[1];
|
|
21507
|
+
if (!decimalPart)
|
|
21508
|
+
return 0;
|
|
21509
|
+
// If decimal part consists only of zeros, return 0
|
|
21510
|
+
if (parseInt(decimalPart) === 0) {
|
|
21511
|
+
return 0;
|
|
21512
|
+
}
|
|
21513
|
+
return undefined;
|
|
21514
|
+
}
|
|
21515
|
+
return 0;
|
|
21516
|
+
};
|
|
21393
21517
|
var PriceListCardPrice = function (_a) {
|
|
21394
21518
|
var priceList = _a.priceList;
|
|
21519
|
+
var priceDecimals = calculatePriceDecimals(priceList);
|
|
21395
21520
|
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
|
|
21396
|
-
? common.formatCurrency(priceList
|
|
21521
|
+
? common.formatCurrency(getPrice(priceList), priceList.currencyId, priceDecimals)
|
|
21397
21522
|
: priceList.plan.pricingStyle === common.PricingStyle.CONTACT_US
|
|
21398
21523
|
? ''
|
|
21399
21524
|
: 'Free' })));
|
|
@@ -21402,10 +21527,7 @@ var PriceListCardPrice = function (_a) {
|
|
|
21402
21527
|
var Text$c = antd.Typography.Text;
|
|
21403
21528
|
var PriceListCardDescription = function (_a) {
|
|
21404
21529
|
var description = _a.description;
|
|
21405
|
-
|
|
21406
|
-
if (!description)
|
|
21407
|
-
return null;
|
|
21408
|
-
return jsxRuntime.jsx(Text$c, __assign({ className: "bunny-text-center" }, { children: htmlParsedDescription }));
|
|
21530
|
+
return (jsxRuntime.jsx(Text$c, __assign({ className: "bunny-text-center" }, { children: jsxRuntime.jsx(interweave.Markup, { content: description }) })));
|
|
21409
21531
|
};
|
|
21410
21532
|
|
|
21411
21533
|
var BillingPeriodConverter;
|
|
@@ -21432,7 +21554,9 @@ var PriceListCardPriceDescription = function (_a) {
|
|
|
21432
21554
|
fontSize: isMobile ? '13px' : '12px',
|
|
21433
21555
|
} }, { children: priceList.plan.pricingDescription && !isEmptyHtml(priceList.plan.pricingDescription) ? (jsxRuntime.jsx(interweave.Markup, { content: priceList.plan.pricingDescription })) : ("per ".concat((feature === null || feature === void 0 ? void 0 : feature.unitName) && !doesPlanHaveFlatFeeCharges
|
|
21434
21556
|
? "".concat(feature.unitName.toLowerCase(), " / ")
|
|
21435
|
-
: ''
|
|
21557
|
+
: '').concat(priceList.showPriceAsMonthly
|
|
21558
|
+
? 'month'
|
|
21559
|
+
: common.PERIOD_LABELS[periodMonthsConverter(priceList.periodMonths)])) })), priceList.periodMonths > 1 && (jsxRuntime.jsxs(Text$b, __assign({ className: "bunny-text-center bunny-text-gray-900", style: { fontSize: isMobile ? '12px' : '11px' } }, { children: ["billed ", BillingPeriodConverter$1[periodMonthsConverter(priceList.periodMonths)]] })))] }));
|
|
21436
21560
|
};
|
|
21437
21561
|
|
|
21438
21562
|
var CheckIcon = function (_a) {
|
|
@@ -21456,12 +21580,10 @@ var PriceListCardButton = function (_a) {
|
|
|
21456
21580
|
return priceList.plan.contactUsLabel;
|
|
21457
21581
|
return 'Select';
|
|
21458
21582
|
};
|
|
21459
|
-
return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-grow bunny-w-full bunny-justify-end" }, { children: jsxRuntime.jsx(
|
|
21583
|
+
return (jsxRuntime.jsx("div", __assign({ className: "bunny-flex bunny-flex-col bunny-grow bunny-w-full bunny-justify-end" }, { 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: disableOnClick, style: {
|
|
21460
21584
|
maxWidth: '240px',
|
|
21461
21585
|
}, type: isSelected ? 'primary' : 'default' }, { children: createButtonText() })) })) })));
|
|
21462
21586
|
};
|
|
21463
|
-
var StyledCardButton = styled__default["default"].div(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n .ant-btn-primary {\n border-color: transparent !important;\n }\n .ant-btn-primary:disabled {\n background: ", ";\n color: ", ";\n }\n"], ["\n .ant-btn-primary {\n border-color: transparent !important;\n }\n .ant-btn-primary:disabled {\n background: ", ";\n color: ", ";\n }\n"])), common.SLATE_200, common.SLATE_600);
|
|
21464
|
-
var templateObject_1$4;
|
|
21465
21587
|
|
|
21466
21588
|
var PriceListCardMobile = function (_a) {
|
|
21467
21589
|
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;
|
|
@@ -21470,11 +21592,11 @@ var PriceListCardMobile = function (_a) {
|
|
|
21470
21592
|
if (!disableOnClick)
|
|
21471
21593
|
onClick(priceList);
|
|
21472
21594
|
}, style: {
|
|
21473
|
-
minWidth:
|
|
21595
|
+
minWidth: '220px',
|
|
21474
21596
|
borderColor: isSelected ? brandColor : common.SLATE_200,
|
|
21475
21597
|
} }, { children: [isSelected && (jsxRuntime.jsx("div", __assign({ className: "bunny-absolute", style: {
|
|
21476
|
-
top:
|
|
21477
|
-
right:
|
|
21598
|
+
top: '10px',
|
|
21599
|
+
right: '10px',
|
|
21478
21600
|
} }, { 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 })] }))] })));
|
|
21479
21601
|
};
|
|
21480
21602
|
|
|
@@ -21930,7 +22052,6 @@ var PlanManager = function (_a) {
|
|
|
21930
22052
|
var queryClient = reactQuery.useQueryClient();
|
|
21931
22053
|
var showSuccessNotification = common.useSuccessNotification();
|
|
21932
22054
|
var showInfoNotification = common.useInfoNotification();
|
|
21933
|
-
var isMobile = common.useIsMobile();
|
|
21934
22055
|
var defaultPaymentMethod = usePaymentMethod({
|
|
21935
22056
|
token: token,
|
|
21936
22057
|
apiHost: apiHost,
|
|
@@ -21982,8 +22103,8 @@ var PlanManager = function (_a) {
|
|
|
21982
22103
|
}, []);
|
|
21983
22104
|
function handleSetEditingQuoteData(quoteId, isTrial) {
|
|
21984
22105
|
setEditingQuoteData({
|
|
21985
|
-
id: quoteId || (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id),
|
|
21986
|
-
isTrial: isTrial || (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.isTrial),
|
|
22106
|
+
id: quoteId || (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.id) || '',
|
|
22107
|
+
isTrial: isTrial || (editingQuoteData === null || editingQuoteData === void 0 ? void 0 : editingQuoteData.isTrial) || false,
|
|
21987
22108
|
});
|
|
21988
22109
|
}
|
|
21989
22110
|
// Handlers
|
|
@@ -22014,7 +22135,7 @@ var PlanManager = function (_a) {
|
|
|
22014
22135
|
return showInfoNotification('You are in preview mode');
|
|
22015
22136
|
setQuotePreviewData(undefined);
|
|
22016
22137
|
onChangePlanCancel();
|
|
22017
|
-
}, title: "Change plan" }), jsxRuntime.jsx(PlanPicker, {}), jsxRuntime.jsx(Checkout, { onCancel: onCancel, onSuccess: onSuccess, onFail: onFail, open: payModalVisible, quote: quote, token: token,
|
|
22138
|
+
}, 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(); } }) }))] })));
|
|
22018
22139
|
};
|
|
22019
22140
|
|
|
22020
22141
|
var useCancelSubscription = function () {
|
|
@@ -23038,7 +23159,7 @@ var Subscriptions = function (_a) {
|
|
|
23038
23159
|
setIsChangingPlan(false);
|
|
23039
23160
|
}, handlePortalErrors: handlePortalErrors }));
|
|
23040
23161
|
}
|
|
23041
|
-
return (jsxRuntime.jsxs("div", __assign({ className:
|
|
23162
|
+
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 })] })));
|
|
23042
23163
|
};
|
|
23043
23164
|
var PageHeaderWithActions = function (_a) {
|
|
23044
23165
|
var children = _a.children, title = _a.title;
|
|
@@ -23158,7 +23279,7 @@ function BillingDetailsSection(_a) {
|
|
|
23158
23279
|
});
|
|
23159
23280
|
}); },
|
|
23160
23281
|
onSuccess: function () {
|
|
23161
|
-
showSuccessNotification(
|
|
23282
|
+
showSuccessNotification('Your account details have been saved');
|
|
23162
23283
|
queryClient.invalidateQueries({
|
|
23163
23284
|
queryKey: common.QueryKeyFactory.default.taxationRequiredAccountFieldsKey({
|
|
23164
23285
|
token: token,
|
|
@@ -23229,10 +23350,10 @@ function BillingDetailsSection(_a) {
|
|
|
23229
23350
|
case 2:
|
|
23230
23351
|
error_1 = _a.sent();
|
|
23231
23352
|
if (error_1 instanceof Error) {
|
|
23232
|
-
showErrorNotification(
|
|
23353
|
+
showErrorNotification('Failed to update account', error_1.message);
|
|
23233
23354
|
}
|
|
23234
23355
|
else {
|
|
23235
|
-
showErrorNotification(
|
|
23356
|
+
showErrorNotification('Please fill out all required fields');
|
|
23236
23357
|
}
|
|
23237
23358
|
return [3 /*break*/, 4];
|
|
23238
23359
|
case 3:
|
|
@@ -23246,29 +23367,21 @@ function BillingDetailsSection(_a) {
|
|
|
23246
23367
|
});
|
|
23247
23368
|
}); };
|
|
23248
23369
|
var filteredCountryList = react.useMemo(function () {
|
|
23249
|
-
return countryListFilter
|
|
23250
|
-
? common.Lists.COUNTRY_LIST.filter(countryListFilter)
|
|
23251
|
-
: common.Lists.COUNTRY_LIST;
|
|
23370
|
+
return countryListFilter ? common.Lists.COUNTRY_LIST.filter(countryListFilter) : common.Lists.COUNTRY_LIST;
|
|
23252
23371
|
}, [countryListFilter]);
|
|
23253
|
-
return (jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile || hidePaymentMethodForm ?
|
|
23254
|
-
{ required: true, message: "Street address is required" },
|
|
23255
|
-
] }, { children: jsxRuntime.jsx(antd.Input, {}) })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-4" }, { children: [jsxRuntime.jsx(antd.Form.Item, __assign({ label: "City", name: "billingCity", rules: [{ required: true, message: "City is required" }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, {}) })), jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Zipcode", name: "billingZip", rules: [{ required: true, message: "Zipcode is required" }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, {}) }))] })), jsxRuntime.jsxs("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({ label: "State", name: "billingState", rules: [
|
|
23372
|
+
return (jsxRuntime.jsx("div", __assign({ className: "".concat(isMobile || hidePaymentMethodForm ? 'bunny-w-full' : 'bunny-w-1/2') }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-px-4" }, { children: [jsxRuntime.jsxs(antd.Skeleton, __assign({ loading: isLoadingBillingDetails }, { children: [jsxRuntime.jsx("div", __assign({ className: "bunny-mb-2" }, { children: jsxRuntime.jsx(Text, __assign({ className: "bunny-font-medium bunny-text-lg" }, { children: (billingDetails === null || billingDetails === void 0 ? void 0 : billingDetails.name) || 'No company name' })) })), jsxRuntime.jsxs(antd.Form, __assign({ className: "bunny-flex bunny-flex-col bunny-gap-2", form: form, layout: "vertical", disabled: isUpdatingBillingDetails, autoComplete: "off" }, { children: [jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Street address", name: "billingStreet", rules: [{ required: true, message: 'Street address is required' }] }, { children: jsxRuntime.jsx(antd.Input, {}) })), jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-gap-4" }, { children: [jsxRuntime.jsx(antd.Form.Item, __assign({ label: "City", name: "billingCity", rules: [{ required: true, message: 'City is required' }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, {}) })), jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Zipcode", name: "billingZip", rules: [{ required: true, message: 'Zipcode is required' }], className: "bunny-flex-1" }, { children: jsxRuntime.jsx(antd.Input, {}) }))] })), jsxRuntime.jsxs("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: "bunny-flex-1 bunny-w-1/2" }, { children: jsxRuntime.jsx(antd.Form.Item, __assign({ label: "State", name: "billingState", rules: [
|
|
23256
23373
|
{
|
|
23257
23374
|
required: false,
|
|
23258
23375
|
},
|
|
23259
|
-
] }, { children: jsxRuntime.jsx(antd.Input, {}) })) })), jsxRuntime.jsx("div", __assign({ className: "flex-1 w-1/2" }, { children: jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Country", name: "billingCountry", rules: [{ required: true, message:
|
|
23376
|
+
] }, { children: jsxRuntime.jsx(antd.Input, {}) })) })), jsxRuntime.jsx("div", __assign({ className: "bunny-flex-1 bunny-w-1/2" }, { children: jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Country", name: "billingCountry", rules: [{ required: true, message: 'Country is required' }] }, { children: jsxRuntime.jsx(antd.Select, { className: "bunny-w-full", options: filteredCountryList, placeholder: "Select a country", popupMatchSelectWidth: false, showSearch: true, filterOption: function (input, option) {
|
|
23260
23377
|
var _a, _b;
|
|
23261
|
-
return ((_a = option === null || option === void 0 ? void 0 : option.label) !== null && _a !== void 0 ? _a :
|
|
23262
|
-
.toLowerCase()
|
|
23263
|
-
.includes(input.toLowerCase()) ||
|
|
23264
|
-
((_b = option === null || option === void 0 ? void 0 : option.value) !== null && _b !== void 0 ? _b : "")
|
|
23265
|
-
.toLowerCase()
|
|
23266
|
-
.includes(input.toLowerCase());
|
|
23378
|
+
return ((_a = option === null || option === void 0 ? void 0 : option.label) !== null && _a !== void 0 ? _a : '').toLowerCase().includes(input.toLowerCase()) ||
|
|
23379
|
+
((_b = option === null || option === void 0 ? void 0 : option.value) !== null && _b !== void 0 ? _b : '').toLowerCase().includes(input.toLowerCase());
|
|
23267
23380
|
} }) })) }))] })), jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Email", name: "billingContactEmail", rules: [
|
|
23268
23381
|
{
|
|
23269
23382
|
required: true,
|
|
23270
|
-
message:
|
|
23271
|
-
type:
|
|
23383
|
+
message: 'Email is required',
|
|
23384
|
+
type: 'email',
|
|
23272
23385
|
},
|
|
23273
23386
|
] }, { children: jsxRuntime.jsx(antd.Input, {}) })), jsxRuntime.jsx(antd.Form.Item, __assign({ label: "Tax ID", name: "taxNumber", tooltip: "Tax ID will be printed on quotes and invoices below the account's address", rules: [{ required: false }] }, { children: jsxRuntime.jsx(antd.Input, {}) }))] }))] })), jsxRuntime.jsx(antd.Button, __assign({ disabled: !isFormEdited || isUpdatingBillingDetails || !formIsValid, className: "bunny-w-full bunny-mt-4", type: "primary", onClick: saveBillingDetails }, { children: "Save" }))] })) })));
|
|
23274
23387
|
}
|
|
@@ -23277,7 +23390,7 @@ var BillingDetails = function (_a) {
|
|
|
23277
23390
|
var _b = _a.isCardEnabled, isCardEnabled = _b === void 0 ? true : _b, _c = _a.shadow, shadow = _c === void 0 ? 'shadow-md' : _c, className = _a.className, _d = _a.hidePaymentMethodForm, hidePaymentMethodForm = _d === void 0 ? false : _d, _e = _a.hideBillingDetailsForm, hideBillingDetailsForm = _e === void 0 ? false : _e, countryListFilter = _a.countryListFilter;
|
|
23278
23391
|
// Hooks
|
|
23279
23392
|
var isMobile = common.useIsMobile();
|
|
23280
|
-
return (jsxRuntime.jsx(WrapperComponent, __assign({ isCardEnabled: isCardEnabled, shadow: shadow, className: className }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-
|
|
23393
|
+
return (jsxRuntime.jsx(WrapperComponent, __assign({ isCardEnabled: isCardEnabled, shadow: shadow, className: className }, { children: jsxRuntime.jsxs("div", __assign({ className: "bunny-flex bunny-py-2 bunny-my-2 ".concat(isMobile ? 'bunny-flex-col bunny-space-y-4' : 'bunny-flex-row', " bunny-gap-4") }, { children: [!hideBillingDetailsForm ? (jsxRuntime.jsx(BillingDetailsSection, { hidePaymentMethodForm: hidePaymentMethodForm, countryListFilter: countryListFilter })) : null, !hideBillingDetailsForm && !hidePaymentMethodForm ? jsxRuntime.jsx(ResponsiveDivider, {}) : null, !hidePaymentMethodForm ? (jsxRuntime.jsx(PaymentFormSection, { hideBillingDetailsForm: hideBillingDetailsForm })) : null] })) })));
|
|
23281
23394
|
};
|
|
23282
23395
|
var WrapperComponent = function (_a) {
|
|
23283
23396
|
var children = _a.children, isCardEnabled = _a.isCardEnabled, shadow = _a.shadow, className = _a.className;
|
|
@@ -23293,8 +23406,8 @@ var PaymentFormSection = function (_a) {
|
|
|
23293
23406
|
var onTokenExpired = react.useContext(BunnyContext).onTokenExpired;
|
|
23294
23407
|
var handleAllErrorFormats = common.useAllErrorFormats(onTokenExpired);
|
|
23295
23408
|
var showSuccessNotification = common.useSuccessNotification();
|
|
23296
|
-
useCurrentUserData().
|
|
23297
|
-
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) {
|
|
23409
|
+
var entityId = useCurrentUserData().entityId;
|
|
23410
|
+
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, { entityId: entityId, onFail: function (error) {
|
|
23298
23411
|
handleAllErrorFormats(error);
|
|
23299
23412
|
}, onSavePaymentMethod: function () {
|
|
23300
23413
|
showSuccessNotification('Your payment method has been saved');
|