@hanzo/commerce 7.5.0 → 7.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +5 -0
- package/LICENSE.md +21 -0
- package/billing.ts +2 -0
- package/client.ts +325 -0
- package/components/cart/cart-panel/promo-code.tsx +1 -1
- package/components/checkout/payment-step-form/index.tsx +2 -2
- package/components/checkout/shipping-step-form.tsx +1 -1
- package/dist/billing.d.ts +2 -0
- package/dist/billing.js +3 -0
- package/dist/billing.js.map +1 -0
- package/dist/client.d.ts +151 -0
- package/dist/client.js +188 -0
- package/dist/client.js.map +1 -0
- package/dist/components/Icons.d.ts +18 -0
- package/dist/components/Icons.js +19 -0
- package/dist/components/Icons.js.map +1 -0
- package/dist/components/Icons.jsx +19 -0
- package/dist/components/Icons.jsx.map +1 -0
- package/dist/components/add-to-cart-widget.d.ts +11 -0
- package/dist/components/add-to-cart-widget.js +85 -0
- package/dist/components/add-to-cart-widget.js.map +1 -0
- package/dist/components/add-to-cart-widget.jsx +99 -0
- package/dist/components/add-to-cart-widget.jsx.map +1 -0
- package/dist/components/buy/buy-card.d.ts +30 -0
- package/dist/components/buy/buy-card.js +109 -0
- package/dist/components/buy/buy-card.js.map +1 -0
- package/dist/components/buy/buy-card.jsx +123 -0
- package/dist/components/buy/buy-card.jsx.map +1 -0
- package/dist/components/buy/carousel-buy-card.d.ts +12 -0
- package/dist/components/buy/carousel-buy-card.js +94 -0
- package/dist/components/buy/carousel-buy-card.js.map +1 -0
- package/dist/components/buy/carousel-buy-card.jsx +99 -0
- package/dist/components/buy/carousel-buy-card.jsx.map +1 -0
- package/dist/components/buy/multi-family/all-variants-carousel.d.ts +4 -0
- package/dist/components/buy/multi-family/all-variants-carousel.js +115 -0
- package/dist/components/buy/multi-family/all-variants-carousel.js.map +1 -0
- package/dist/components/buy/multi-family/all-variants-carousel.jsx +147 -0
- package/dist/components/buy/multi-family/all-variants-carousel.jsx.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/index.d.ts +4 -0
- package/dist/components/buy/multi-family/family-carousel/index.js +27 -0
- package/dist/components/buy/multi-family/family-carousel/index.js.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/index.jsx +34 -0
- package/dist/components/buy/multi-family/family-carousel/index.jsx.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/slide.d.ts +11 -0
- package/dist/components/buy/multi-family/family-carousel/slide.js +35 -0
- package/dist/components/buy/multi-family/family-carousel/slide.js.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/slide.jsx +41 -0
- package/dist/components/buy/multi-family/family-carousel/slide.jsx.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/state.d.ts +20 -0
- package/dist/components/buy/multi-family/family-carousel/state.js +59 -0
- package/dist/components/buy/multi-family/family-carousel/state.js.map +1 -0
- package/dist/components/buy/multi-family/index.d.ts +2 -0
- package/dist/components/buy/multi-family/index.js +3 -0
- package/dist/components/buy/multi-family/index.js.map +1 -0
- package/dist/components/buy/single-family-selector.d.ts +15 -0
- package/dist/components/buy/single-family-selector.js +28 -0
- package/dist/components/buy/single-family-selector.js.map +1 -0
- package/dist/components/buy/single-family-selector.jsx +31 -0
- package/dist/components/buy/single-family-selector.jsx.map +1 -0
- package/dist/components/buy/title-and-byline.d.ts +8 -0
- package/dist/components/buy/title-and-byline.js +7 -0
- package/dist/components/buy/title-and-byline.js.map +1 -0
- package/dist/components/buy/title-and-byline.jsx +9 -0
- package/dist/components/buy/title-and-byline.jsx.map +1 -0
- package/dist/components/cart/cart-panel/cart-line-item.d.ts +11 -0
- package/dist/components/cart/cart-panel/cart-line-item.js +25 -0
- package/dist/components/cart/cart-panel/cart-line-item.js.map +1 -0
- package/dist/components/cart/cart-panel/cart-line-item.jsx +39 -0
- package/dist/components/cart/cart-panel/cart-line-item.jsx.map +1 -0
- package/dist/components/cart/cart-panel/index.d.ts +19 -0
- package/dist/components/cart/cart-panel/index.js +65 -0
- package/dist/components/cart/cart-panel/index.js.map +1 -0
- package/dist/components/cart/cart-panel/index.jsx +79 -0
- package/dist/components/cart/cart-panel/index.jsx.map +1 -0
- package/dist/components/cart/cart-panel/promo-code.d.ts +4 -0
- package/dist/components/cart/cart-panel/promo-code.js +62 -0
- package/dist/components/cart/cart-panel/promo-code.js.map +1 -0
- package/dist/components/cart/cart-panel/promo-code.jsx +74 -0
- package/dist/components/cart/cart-panel/promo-code.jsx.map +1 -0
- package/dist/components/cart/cart-panel/total-area.d.ts +7 -0
- package/dist/components/cart/cart-panel/total-area.js +14 -0
- package/dist/components/cart/cart-panel/total-area.js.map +1 -0
- package/dist/components/cart/cart-panel/total-area.jsx +37 -0
- package/dist/components/cart/cart-panel/total-area.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.d.ts +2 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.js +14 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.jsx +22 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.jsx +12 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.jsx +10 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.jsx +12 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.jsx +23 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.jsx +12 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.jsx +10 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/cc-button.d.ts +3 -0
- package/dist/components/checkout/payment-step-form/cc-button.js +6 -0
- package/dist/components/checkout/payment-step-form/cc-button.js.map +1 -0
- package/dist/components/checkout/payment-step-form/cc-button.jsx +9 -0
- package/dist/components/checkout/payment-step-form/cc-button.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/contact-form.d.ts +5 -0
- package/dist/components/checkout/payment-step-form/contact-form.js +6 -0
- package/dist/components/checkout/payment-step-form/contact-form.js.map +1 -0
- package/dist/components/checkout/payment-step-form/contact-form.jsx +21 -0
- package/dist/components/checkout/payment-step-form/contact-form.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.js +6 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.js.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.jsx +8 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.js +6 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.js.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.jsx +17 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.js +6 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.js.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.jsx +10 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/index.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/index.js +77 -0
- package/dist/components/checkout/payment-step-form/index.js.map +1 -0
- package/dist/components/checkout/payment-step-form/index.jsx +86 -0
- package/dist/components/checkout/payment-step-form/index.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.js +24 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.jsx +44 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/card.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/methods/card.js +160 -0
- package/dist/components/checkout/payment-step-form/methods/card.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/card.jsx +182 -0
- package/dist/components/checkout/payment-step-form/methods/card.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.d.ts +9 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.js +137 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.jsx +167 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.jsx.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/index.d.ts +6 -0
- package/dist/components/checkout/payment-step-form/methods/index.js +21 -0
- package/dist/components/checkout/payment-step-form/methods/index.js.map +1 -0
- package/dist/components/checkout/shipping-step-form.d.ts +3 -0
- package/dist/components/checkout/shipping-step-form.js +53 -0
- package/dist/components/checkout/shipping-step-form.js.map +1 -0
- package/dist/components/checkout/shipping-step-form.jsx +106 -0
- package/dist/components/checkout/shipping-step-form.jsx.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/item/product-card.d.ts +7 -0
- package/dist/components/item/product-card.js +9 -0
- package/dist/components/item/product-card.js.map +1 -0
- package/dist/components/item/product-card.jsx +21 -0
- package/dist/components/item/product-card.jsx.map +1 -0
- package/dist/components/item-selector/button.d.ts +4 -0
- package/dist/components/item-selector/button.js +47 -0
- package/dist/components/item-selector/button.js.map +1 -0
- package/dist/components/item-selector/button.jsx +65 -0
- package/dist/components/item-selector/button.jsx.map +1 -0
- package/dist/components/item-selector/carousel/index.d.ts +12 -0
- package/dist/components/item-selector/carousel/index.js +74 -0
- package/dist/components/item-selector/carousel/index.js.map +1 -0
- package/dist/components/item-selector/carousel/index.jsx +101 -0
- package/dist/components/item-selector/carousel/index.jsx.map +1 -0
- package/dist/components/item-selector/carousel/slider.d.ts +8 -0
- package/dist/components/item-selector/carousel/slider.js +12 -0
- package/dist/components/item-selector/carousel/slider.js.map +1 -0
- package/dist/components/item-selector/carousel/slider.jsx +11 -0
- package/dist/components/item-selector/carousel/slider.jsx.map +1 -0
- package/dist/components/item-selector/index.d.ts +2 -0
- package/dist/components/item-selector/index.js +3 -0
- package/dist/components/item-selector/index.js.map +1 -0
- package/dist/components/item-selector/quantity-indicator.d.ts +9 -0
- package/dist/components/item-selector/quantity-indicator.js +16 -0
- package/dist/components/item-selector/quantity-indicator.js.map +1 -0
- package/dist/components/item-selector/quantity-indicator.jsx +23 -0
- package/dist/components/item-selector/quantity-indicator.jsx.map +1 -0
- package/dist/components/node-tabs/index.d.ts +14 -0
- package/dist/components/node-tabs/index.js +42 -0
- package/dist/components/node-tabs/index.js.map +1 -0
- package/dist/components/node-tabs/index.jsx +48 -0
- package/dist/components/node-tabs/index.jsx.map +1 -0
- package/dist/components/node-tabs/node-image.d.ts +6 -0
- package/dist/components/node-tabs/node-image.js +13 -0
- package/dist/components/node-tabs/node-image.js.map +1 -0
- package/dist/components/node-tabs/node-image.jsx +12 -0
- package/dist/components/node-tabs/node-image.jsx.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/service/context.d.ts +8 -0
- package/dist/service/context.js +19 -0
- package/dist/service/context.js.map +1 -0
- package/dist/service/context.jsx +20 -0
- package/dist/service/context.jsx.map +1 -0
- package/dist/service/debug.d.ts +10 -0
- package/dist/service/debug.js +30 -0
- package/dist/service/debug.js.map +1 -0
- package/dist/service/impls/standalone/actual-line-item.d.ts +40 -0
- package/dist/service/impls/standalone/actual-line-item.js +84 -0
- package/dist/service/impls/standalone/actual-line-item.js.map +1 -0
- package/dist/service/impls/standalone/get-instance.d.ts +2 -0
- package/dist/service/impls/standalone/get-instance.js +39 -0
- package/dist/service/impls/standalone/get-instance.js.map +1 -0
- package/dist/service/impls/standalone/index.d.ts +67 -0
- package/dist/service/impls/standalone/index.js +416 -0
- package/dist/service/impls/standalone/index.js.map +1 -0
- package/dist/service/impls/standalone/order/firebase.d.ts +6 -0
- package/dist/service/impls/standalone/order/firebase.js +6 -0
- package/dist/service/impls/standalone/order/firebase.js.map +1 -0
- package/dist/service/impls/standalone/order/index.d.ts +30 -0
- package/dist/service/impls/standalone/order/index.js +21 -0
- package/dist/service/impls/standalone/order/index.js.map +1 -0
- package/dist/service/impls/standalone/persistence.d.ts +4 -0
- package/dist/service/impls/standalone/persistence.js +22 -0
- package/dist/service/impls/standalone/persistence.js.map +1 -0
- package/dist/service/path-utils.d.ts +7 -0
- package/dist/service/path-utils.js +16 -0
- package/dist/service/path-utils.js.map +1 -0
- package/dist/service/sep.d.ts +6 -0
- package/dist/service/sep.js +6 -0
- package/dist/service/sep.js.map +1 -0
- package/dist/types/category-node.d.ts +36 -0
- package/dist/types/category-node.js +2 -0
- package/dist/types/category-node.js.map +1 -0
- package/dist/types/checkout.d.ts +33 -0
- package/dist/types/checkout.js +2 -0
- package/dist/types/checkout.js.map +1 -0
- package/dist/types/commerce-config.d.ts +11 -0
- package/dist/types/commerce-config.js +2 -0
- package/dist/types/commerce-config.js.map +1 -0
- package/dist/types/commerce-service.d.ts +109 -0
- package/dist/types/commerce-service.js +2 -0
- package/dist/types/commerce-service.js.map +1 -0
- package/dist/types/family.d.ts +16 -0
- package/dist/types/family.js +2 -0
- package/dist/types/family.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/item-selector.d.ts +72 -0
- package/dist/types/item-selector.js +2 -0
- package/dist/types/item-selector.js.map +1 -0
- package/dist/types/line-item.d.ts +14 -0
- package/dist/types/line-item.js +2 -0
- package/dist/types/line-item.js.map +1 -0
- package/dist/types/multi-family-selector-props.d.ts +16 -0
- package/dist/types/multi-family-selector-props.js +2 -0
- package/dist/types/multi-family-selector-props.js.map +1 -0
- package/dist/types/product.d.ts +15 -0
- package/dist/types/product.js +2 -0
- package/dist/types/product.js.map +1 -0
- package/dist/types/promo.d.ts +7 -0
- package/dist/types/promo.js +2 -0
- package/dist/types/promo.js.map +1 -0
- package/dist/types/selection-ui-specifier.d.ts +40 -0
- package/dist/types/selection-ui-specifier.js +2 -0
- package/dist/types/selection-ui-specifier.js.map +1 -0
- package/dist/types/string-mutator.d.ts +9 -0
- package/dist/types/string-mutator.js +2 -0
- package/dist/types/string-mutator.js.map +1 -0
- package/dist/types/token-separators.d.ts +6 -0
- package/dist/types/token-separators.js +2 -0
- package/dist/types/token-separators.js.map +1 -0
- package/dist/util/analytics.d.ts +9 -0
- package/dist/util/analytics.js +10 -0
- package/dist/util/analytics.js.map +1 -0
- package/dist/util/countries.d.ts +7 -0
- package/dist/util/countries.js +197 -0
- package/dist/util/countries.js.map +1 -0
- package/dist/util/error.d.ts +1 -0
- package/dist/util/error.js +22 -0
- package/dist/util/error.js.map +1 -0
- package/dist/util/index.d.ts +15 -0
- package/dist/util/index.js +54 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/item-selector-options-accessor.d.ts +3 -0
- package/dist/util/item-selector-options-accessor.js +27 -0
- package/dist/util/item-selector-options-accessor.js.map +1 -0
- package/dist/util/line-item-ref.d.ts +8 -0
- package/dist/util/line-item-ref.js +15 -0
- package/dist/util/line-item-ref.js.map +1 -0
- package/dist/util/multi-family-selector-options-accessor.d.ts +3 -0
- package/dist/util/multi-family-selector-options-accessor.js +11 -0
- package/dist/util/multi-family-selector-options-accessor.js.map +1 -0
- package/dist/util/obs-string-mutator.d.ts +8 -0
- package/dist/util/obs-string-mutator.js +15 -0
- package/dist/util/obs-string-mutator.js.map +1 -0
- package/dist/util/product-media-accessor.d.ts +29 -0
- package/dist/util/product-media-accessor.js +22 -0
- package/dist/util/product-media-accessor.js.map +1 -0
- package/dist/util/promo-codes.d.ts +3 -0
- package/dist/util/promo-codes.js +100 -0
- package/dist/util/promo-codes.js.map +1 -0
- package/dist/util/selection-ui-specifiers.d.ts +3 -0
- package/dist/util/selection-ui-specifiers.js +24 -0
- package/dist/util/selection-ui-specifiers.js.map +1 -0
- package/dist/util/square-payment.d.ts +7 -0
- package/dist/util/square-payment.js +37 -0
- package/dist/util/square-payment.js.map +1 -0
- package/dist/util/use-sync-sku-param-w-current-item.d.ts +2 -0
- package/dist/util/use-sync-sku-param-w-current-item.js +61 -0
- package/dist/util/use-sync-sku-param-w-current-item.js.map +1 -0
- package/index.ts +9 -5
- package/package.json +13 -11
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
5
|
+
import { cn } from '@hanzo/ui/util';
|
|
6
|
+
import { Image } from '@hanzo/ui/primitives';
|
|
7
|
+
import { formatCurrencyValue } from '../../../util';
|
|
8
|
+
import AddToCartWidget from '../../add-to-cart-widget';
|
|
9
|
+
import { useCommerce } from '../../../service/context';
|
|
10
|
+
const DEF_IMG_SIZE = 40;
|
|
11
|
+
const renderTitle = (t) => {
|
|
12
|
+
const toks = t.split(', ');
|
|
13
|
+
if (toks.length === 2) {
|
|
14
|
+
return _jsxs(_Fragment, { children: [_jsxs("p", { children: [toks[0], ","] }), _jsx("p", { className: '', children: toks[1] })] });
|
|
15
|
+
}
|
|
16
|
+
return _jsx("p", { children: t });
|
|
17
|
+
};
|
|
18
|
+
const CartLineItem = observer(({ item, className = '', imgSizePx = DEF_IMG_SIZE, showPromoCode = false, itemClicked, selected = false }) => {
|
|
19
|
+
const cmmc = useCommerce();
|
|
20
|
+
const promoPrice = showPromoCode ? cmmc.itemPromoPrice(item) : undefined;
|
|
21
|
+
return (_jsxs("div", { className: cn('flex flex-col justify-start items-start text-sm font-sans', 'border border-background rounded-sm p-1', selected ? 'border-foreground' : '', (itemClicked && !selected ? 'cursor-pointer hover:!border-muted-4' : 'cursor-default '), className), onClick: () => { itemClicked && itemClicked(item); }, children: [_jsxs("div", { className: 'flex flex-row justify-between items-center gap-1', children: [item.img ? (_jsx(Image, { def: item.img, constrainTo: { w: imgSizePx, h: imgSizePx } })) : ( // placeholder so things align
|
|
22
|
+
_jsx("div", { style: { height: imgSizePx, width: imgSizePx }, className: 'bg-level-3' })), _jsx("div", { className: 'grow leading-tight ml-1', children: renderTitle(item.title) })] }), _jsxs("div", { className: 'flex flex-row items-center justify-between w-full', children: [_jsxs("div", { className: 'flex flex-row items-center', children: [_jsx(AddToCartWidget, { variant: 'minimal', item: item }), item.quantity > 1 && (_jsx("span", { className: 'pl-2.5', children: '@' + formatCurrencyValue(item.price) }))] }), _jsxs("div", { className: 'flex flex-row gap-1 items-center justify-end', children: [_jsx("span", { className: promoPrice ? 'line-through text-muted-2' : '', children: formatCurrencyValue(item.price * item.quantity) }), promoPrice && _jsx("span", { children: formatCurrencyValue(promoPrice * item.quantity) })] })] })] }));
|
|
23
|
+
});
|
|
24
|
+
export default CartLineItem;
|
|
25
|
+
//# sourceMappingURL=cart-line-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart-line-item.js","sourceRoot":"","sources":["../../../../components/cart/cart-panel/cart-line-item.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { observer } from 'mobx-react-lite';
|
|
4
|
+
import { cn } from '@hanzo/ui/util';
|
|
5
|
+
import { Image } from '@hanzo/ui/primitives';
|
|
6
|
+
import { formatCurrencyValue } from '../../../util';
|
|
7
|
+
import AddToCartWidget from '../../add-to-cart-widget';
|
|
8
|
+
import { useCommerce } from '../../../service/context';
|
|
9
|
+
const DEF_IMG_SIZE = 40;
|
|
10
|
+
const renderTitle = (t) => {
|
|
11
|
+
const toks = t.split(', ');
|
|
12
|
+
if (toks.length === 2) {
|
|
13
|
+
return <><p>{toks[0]},</p><p className=''>{toks[1]}</p></>;
|
|
14
|
+
}
|
|
15
|
+
return <p>{t}</p>;
|
|
16
|
+
};
|
|
17
|
+
const CartLineItem = observer(({ item, className = '', imgSizePx = DEF_IMG_SIZE, showPromoCode = false, itemClicked, selected = false }) => {
|
|
18
|
+
const cmmc = useCommerce();
|
|
19
|
+
const promoPrice = showPromoCode ? cmmc.itemPromoPrice(item) : undefined;
|
|
20
|
+
return (<div className={cn('flex flex-col justify-start items-start text-sm font-sans', 'border border-background rounded-sm p-1', selected ? 'border-foreground' : '', (itemClicked && !selected ? 'cursor-pointer hover:!border-muted-4' : 'cursor-default '), className)} onClick={() => { itemClicked && itemClicked(item); }}>
|
|
21
|
+
<div className='flex flex-row justify-between items-center gap-1'>
|
|
22
|
+
{item.img ? (<Image def={item.img} constrainTo={{ w: imgSizePx, h: imgSizePx }}/>) : ( // placeholder so things align
|
|
23
|
+
<div style={{ height: imgSizePx, width: imgSizePx }} className='bg-level-3'/>)}
|
|
24
|
+
<div className='grow leading-tight ml-1'>{renderTitle(item.title)}</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div className='flex flex-row items-center justify-between w-full'>
|
|
27
|
+
<div className='flex flex-row items-center'>
|
|
28
|
+
<AddToCartWidget variant='minimal' item={item}/>
|
|
29
|
+
{item.quantity > 1 && (<span className='pl-2.5'>{'@' + formatCurrencyValue(item.price)}</span>)}
|
|
30
|
+
</div>
|
|
31
|
+
<div className='flex flex-row gap-1 items-center justify-end'>
|
|
32
|
+
<span className={promoPrice ? 'line-through text-muted-2' : ''}>{formatCurrencyValue(item.price * item.quantity)}</span>
|
|
33
|
+
{promoPrice && <span>{formatCurrencyValue(promoPrice * item.quantity)}</span>}
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>);
|
|
37
|
+
});
|
|
38
|
+
export default CartLineItem;
|
|
39
|
+
//# sourceMappingURL=cart-line-item.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart-line-item.jsx","sourceRoot":"","sources":["../../../../components/cart/cart-panel/cart-line-item.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React, { type PropsWithChildren } from 'react';
|
|
2
|
+
declare const CartPanel: React.FC<PropsWithChildren & {
|
|
3
|
+
/** fix size and scroll after 'scrollAfter items in teh cart. */
|
|
4
|
+
scrollAfter?: number;
|
|
5
|
+
scrollHeightClx?: string;
|
|
6
|
+
imgSizePx?: number;
|
|
7
|
+
className?: string;
|
|
8
|
+
itemClx?: string;
|
|
9
|
+
listClx?: string;
|
|
10
|
+
noItemsClx?: string;
|
|
11
|
+
totalClx?: string;
|
|
12
|
+
buttonClx?: string;
|
|
13
|
+
showPromoCode?: boolean;
|
|
14
|
+
showShipping?: boolean;
|
|
15
|
+
selectItems?: boolean;
|
|
16
|
+
/** if not provided, 'checkout' button will be rendered */
|
|
17
|
+
handleCheckout?: () => void;
|
|
18
|
+
}>;
|
|
19
|
+
export default CartPanel;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useLayoutEffect } from 'react';
|
|
4
|
+
import { reaction } from 'mobx';
|
|
5
|
+
import { observer } from 'mobx-react-lite';
|
|
6
|
+
import { Button, ScrollArea } from '@hanzo/ui/primitives';
|
|
7
|
+
import { cn } from '@hanzo/ui/util';
|
|
8
|
+
import { useCommerce } from '../../../service/context';
|
|
9
|
+
import { sendFBEvent, sendGAEvent } from '../../../util/analytics';
|
|
10
|
+
import CartLineItem from './cart-line-item';
|
|
11
|
+
import TotalArea from './total-area';
|
|
12
|
+
const CartPanel = observer(({
|
|
13
|
+
/** If provided, 'children' is rendered above the items. eg, a heading. */
|
|
14
|
+
children, scrollAfter = 5, scrollHeightClx = 'h-[70vh]', imgSizePx = 40, className = '', itemClx = '', listClx = '', noItemsClx = '', totalClx = '', buttonClx = '', showPromoCode = false, showShipping = false, selectItems = false, handleCheckout, }) => {
|
|
15
|
+
const cmmc = useCommerce();
|
|
16
|
+
useLayoutEffect(() => {
|
|
17
|
+
if (!cmmc) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (!cmmc.cartEmpty && !cmmc.currentItem) {
|
|
21
|
+
cmmc.setCurrentItem(cmmc.cartItems[0].sku);
|
|
22
|
+
}
|
|
23
|
+
// return mobx disposer
|
|
24
|
+
return reaction(() => (cmmc.cartItems.length), (itemCount) => {
|
|
25
|
+
if (itemCount > 0) {
|
|
26
|
+
cmmc.setCurrentItem(cmmc.cartItems[0].sku);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}, []);
|
|
30
|
+
if (!cmmc) {
|
|
31
|
+
return _jsx("div", {});
|
|
32
|
+
}
|
|
33
|
+
const _handleCheckout = () => {
|
|
34
|
+
sendGAEvent('begin_checkout', {
|
|
35
|
+
currency: 'USD',
|
|
36
|
+
value: cmmc.cartTotal,
|
|
37
|
+
items: cmmc.cartItems.map((item) => ({
|
|
38
|
+
item_id: item.sku,
|
|
39
|
+
item_name: item.title,
|
|
40
|
+
item_category: item.familyId,
|
|
41
|
+
price: item.price,
|
|
42
|
+
quantity: item.quantity
|
|
43
|
+
})),
|
|
44
|
+
});
|
|
45
|
+
sendFBEvent('InitiateCheckout', {
|
|
46
|
+
content_ids: cmmc.cartItems.map((item) => item.sku),
|
|
47
|
+
contents: cmmc.cartItems.map(item => ({
|
|
48
|
+
id: item.sku,
|
|
49
|
+
quantity: item.quantity
|
|
50
|
+
})),
|
|
51
|
+
num_items: cmmc.cartItems.length,
|
|
52
|
+
value: cmmc.cartTotal,
|
|
53
|
+
currency: 'USD',
|
|
54
|
+
});
|
|
55
|
+
handleCheckout && handleCheckout();
|
|
56
|
+
};
|
|
57
|
+
const itemClicked = (item) => {
|
|
58
|
+
cmmc.setCurrentItem(item.sku);
|
|
59
|
+
};
|
|
60
|
+
const MainStuff = observer(() => (_jsxs(_Fragment, { children: [cmmc.cartEmpty ? (_jsx("p", { className: cn('text-center my-3', noItemsClx), children: "No items" })) : (_jsx(_Fragment, { children: cmmc.cartItems.map((item) => (_jsx(CartLineItem, { imgSizePx: imgSizePx, item: item, className: cn('mb-2', itemClx), showPromoCode: showPromoCode, itemClicked: selectItems ? itemClicked : undefined, selected: selectItems ? cmmc.currentItem?.sku === item.sku : false }, `mobile-${item.sku}`))) })), _jsx(TotalArea, { clx: totalClx, showPromoCode: showPromoCode, showShipping: showShipping })] })));
|
|
61
|
+
const scrolling = (cmmc.cartItems.length > scrollAfter);
|
|
62
|
+
return (_jsxs("div", { className: cn('border p-4 rounded-lg flex flex-col', className, scrolling ? scrollHeightClx : 'h-auto'), children: [children, scrolling ? (_jsx(ScrollArea, { className: cn('mt-2 w-full shrink py-0', listClx), children: _jsx(MainStuff, {}) })) : (_jsx("div", { className: cn('mt-2 w-full', listClx), children: _jsx(MainStuff, {}) })), handleCheckout && !cmmc.cartEmpty && (_jsx(Button, { onClick: _handleCheckout, variant: 'primary', rounded: 'lg', className: cn('mt-12 mx-auto w-full sm:max-w-[220px]', buttonClx), children: "Checkout" }))] }));
|
|
63
|
+
});
|
|
64
|
+
export default CartPanel;
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../components/cart/cart-panel/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,KAAK,EAAE,EAAE,eAAe,EAA0B,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAGnC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAC3C,OAAO,SAAS,MAAM,cAAc,CAAA;AAEpC,MAAM,SAAS,GAgBV,QAAQ,CAAC,CAAC;AACX,0EAA0E;AAC5E,QAAQ,EACR,WAAW,GAAC,CAAC,EACb,eAAe,GAAC,UAAU,EAC1B,SAAS,GAAC,EAAE,EACZ,SAAS,GAAC,EAAE,EACZ,OAAO,GAAC,EAAE,EACV,OAAO,GAAC,EAAE,EACV,UAAU,GAAC,EAAE,EACb,QAAQ,GAAC,EAAE,EACX,SAAS,GAAC,EAAE,EACZ,aAAa,GAAC,KAAK,EACnB,YAAY,GAAC,KAAK,EAClB,WAAW,GAAC,KAAK,EACjB,cAAc,GACf,EAAE,EAAE;IAEH,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;IAE1B,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC5C,CAAC;QACC,uBAAuB;QACzB,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CACtB,EACD,CAAC,SAAS,EAAE,EAAE;YACZ,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,eAAO,CAAA;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,WAAW,CAAC,gBAAgB,EAAE;YAC5B,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,OAAO,EAAE,IAAI,CAAC,GAAG;gBACjB,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,aAAa,EAAE,IAAI,CAAC,QAAQ;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;SACJ,CAAC,CAAA;QACF,WAAW,CAAC,kBAAkB,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACnD,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,IAAI,CAAC,GAAG;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAChC,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;QACF,cAAc,IAAI,cAAc,EAAE,CAAA;IACpC,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC,CAAA;IAED,MAAM,SAAS,GAAa,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,8BACzC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAChB,YAAG,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,UAAU,CAAC,yBAAc,CAC/D,CAAC,CAAC,CAAC,CAAC,4BACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC5B,KAAC,YAAY,IAEX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAClD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAN7D,UAAU,IAAI,CAAC,GAAG,EAAE,CAOzB,CACH,CAAC,GACC,CAAC,EACJ,KAAC,SAAS,IAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,GAAG,IACpF,CAAC,CAAC,CAAA;IAEL,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,CAAA;IAEvD,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAChB,qCAAqC,EACrC,SAAS,EACT,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CACvC,aACE,QAAQ,EACR,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,UAAU,IAAC,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,OAAO,CAAC,YAC3D,KAAC,SAAS,KAAG,GACF,CACd,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,YACxC,KAAC,SAAS,KAAG,GACT,CACP,EACA,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CACpC,KAAC,MAAM,IACL,OAAO,EAAE,eAAe,EACxB,OAAO,EAAC,SAAS,EACjB,OAAO,EAAC,IAAI,EACZ,SAAS,EAAE,EAAE,CAAC,uCAAuC,EAAE,SAAS,CAAC,yBAG1D,CACV,IACG,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React, { useLayoutEffect } from 'react';
|
|
3
|
+
import { reaction } from 'mobx';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
5
|
+
import { Button, ScrollArea } from '@hanzo/ui/primitives';
|
|
6
|
+
import { cn } from '@hanzo/ui/util';
|
|
7
|
+
import { useCommerce } from '../../../service/context';
|
|
8
|
+
import { sendFBEvent, sendGAEvent } from '../../../util/analytics';
|
|
9
|
+
import CartLineItem from './cart-line-item';
|
|
10
|
+
import TotalArea from './total-area';
|
|
11
|
+
const CartPanel = observer(({
|
|
12
|
+
/** If provided, 'children' is rendered above the items. eg, a heading. */
|
|
13
|
+
children, scrollAfter = 5, scrollHeightClx = 'h-[70vh]', imgSizePx = 40, className = '', itemClx = '', listClx = '', noItemsClx = '', totalClx = '', buttonClx = '', showPromoCode = false, showShipping = false, selectItems = false, handleCheckout, }) => {
|
|
14
|
+
const cmmc = useCommerce();
|
|
15
|
+
useLayoutEffect(() => {
|
|
16
|
+
if (!cmmc) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!cmmc.cartEmpty && !cmmc.currentItem) {
|
|
20
|
+
cmmc.setCurrentItem(cmmc.cartItems[0].sku);
|
|
21
|
+
}
|
|
22
|
+
// return mobx disposer
|
|
23
|
+
return reaction(() => (cmmc.cartItems.length), (itemCount) => {
|
|
24
|
+
if (itemCount > 0) {
|
|
25
|
+
cmmc.setCurrentItem(cmmc.cartItems[0].sku);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}, []);
|
|
29
|
+
if (!cmmc) {
|
|
30
|
+
return <div />;
|
|
31
|
+
}
|
|
32
|
+
const _handleCheckout = () => {
|
|
33
|
+
sendGAEvent('begin_checkout', {
|
|
34
|
+
currency: 'USD',
|
|
35
|
+
value: cmmc.cartTotal,
|
|
36
|
+
items: cmmc.cartItems.map((item) => ({
|
|
37
|
+
item_id: item.sku,
|
|
38
|
+
item_name: item.title,
|
|
39
|
+
item_category: item.familyId,
|
|
40
|
+
price: item.price,
|
|
41
|
+
quantity: item.quantity
|
|
42
|
+
})),
|
|
43
|
+
});
|
|
44
|
+
sendFBEvent('InitiateCheckout', {
|
|
45
|
+
content_ids: cmmc.cartItems.map((item) => item.sku),
|
|
46
|
+
contents: cmmc.cartItems.map(item => ({
|
|
47
|
+
id: item.sku,
|
|
48
|
+
quantity: item.quantity
|
|
49
|
+
})),
|
|
50
|
+
num_items: cmmc.cartItems.length,
|
|
51
|
+
value: cmmc.cartTotal,
|
|
52
|
+
currency: 'USD',
|
|
53
|
+
});
|
|
54
|
+
handleCheckout && handleCheckout();
|
|
55
|
+
};
|
|
56
|
+
const itemClicked = (item) => {
|
|
57
|
+
cmmc.setCurrentItem(item.sku);
|
|
58
|
+
};
|
|
59
|
+
const MainStuff = observer(() => (<>
|
|
60
|
+
{cmmc.cartEmpty ? (<p className={cn('text-center my-3', noItemsClx)}>No items</p>) : (<>
|
|
61
|
+
{cmmc.cartItems.map((item) => (<CartLineItem key={`mobile-${item.sku}`} imgSizePx={imgSizePx} item={item} className={cn('mb-2', itemClx)} showPromoCode={showPromoCode} itemClicked={selectItems ? itemClicked : undefined} selected={selectItems ? cmmc.currentItem?.sku === item.sku : false}/>))}
|
|
62
|
+
</>)}
|
|
63
|
+
<TotalArea clx={totalClx} showPromoCode={showPromoCode} showShipping={showShipping}/>
|
|
64
|
+
</>));
|
|
65
|
+
const scrolling = (cmmc.cartItems.length > scrollAfter);
|
|
66
|
+
return (<div className={cn('border p-4 rounded-lg flex flex-col', className, scrolling ? scrollHeightClx : 'h-auto')}>
|
|
67
|
+
{children}
|
|
68
|
+
{scrolling ? (<ScrollArea className={cn('mt-2 w-full shrink py-0', listClx)}>
|
|
69
|
+
<MainStuff />
|
|
70
|
+
</ScrollArea>) : (<div className={cn('mt-2 w-full', listClx)}>
|
|
71
|
+
<MainStuff />
|
|
72
|
+
</div>)}
|
|
73
|
+
{handleCheckout && !cmmc.cartEmpty && (<Button onClick={_handleCheckout} variant='primary' rounded='lg' className={cn('mt-12 mx-auto w-full sm:max-w-[220px]', buttonClx)}>
|
|
74
|
+
Checkout
|
|
75
|
+
</Button>)}
|
|
76
|
+
</div>);
|
|
77
|
+
});
|
|
78
|
+
export default CartPanel;
|
|
79
|
+
//# sourceMappingURL=index.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../../components/cart/cart-panel/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,KAAK,EAAE,EAAE,eAAe,EAA0B,MAAM,OAAO,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAGnC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAC3C,OAAO,SAAS,MAAM,cAAc,CAAA;AAEpC,MAAM,SAAS,GAgBV,QAAQ,CAAC,CAAC;AACX,0EAA0E;AAC5E,QAAQ,EACR,WAAW,GAAC,CAAC,EACb,eAAe,GAAC,UAAU,EAC1B,SAAS,GAAC,EAAE,EACZ,SAAS,GAAC,EAAE,EACZ,OAAO,GAAC,EAAE,EACV,OAAO,GAAC,EAAE,EACV,UAAU,GAAC,EAAE,EACb,QAAQ,GAAC,EAAE,EACX,SAAS,GAAC,EAAE,EACZ,aAAa,GAAC,KAAK,EACnB,YAAY,GAAC,KAAK,EAClB,WAAW,GAAC,KAAK,EACjB,cAAc,GACf,EAAE,EAAE;IAEH,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;IAE1B,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC5C,CAAC;QACC,uBAAuB;QACzB,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CACtB,EACD,CAAC,SAAS,EAAE,EAAE;YACZ,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,AAAD,EAAG,CAAA;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,WAAW,CAAC,gBAAgB,EAAE;YAC5B,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,OAAO,EAAE,IAAI,CAAC,GAAG;gBACjB,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,aAAa,EAAE,IAAI,CAAC,QAAQ;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;SACJ,CAAC,CAAA;QACF,WAAW,CAAC,kBAAkB,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YACnD,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,IAAI,CAAC,GAAG;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAChC,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;QACF,cAAc,IAAI,cAAc,EAAE,CAAA;IACpC,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC,CAAA;IAED,MAAM,SAAS,GAAa,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAC1C;IAAA,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAChB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAC/D,CAAC,CAAC,CAAC,CAAC,EACL;IAAA,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC5B,CAAC,YAAY,CACX,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAC1B,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAC/B,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CACnD,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EACnE,CACH,CAAC,CACF;IAAA,GAAG,CAAC,CACJ;IAAA,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,EACrF;EAAA,GAAG,CAAC,CAAC,CAAA;IAEL,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,CAAA;IAEvD,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAChB,qCAAqC,EACrC,SAAS,EACT,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CACvC,CAAC,CACA;MAAA,CAAC,QAAQ,CACT;MAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAC5D;UAAA,CAAC,SAAS,CAAC,AAAD,EACZ;QAAA,EAAE,UAAU,CAAC,CACd,CAAC,CAAC,CAAC,CACF,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CACzC;UAAA,CAAC,SAAS,CAAC,AAAD,EACZ;QAAA,EAAE,GAAG,CAAC,CACP,CACD;MAAA,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CACpC,CAAC,MAAM,CACL,OAAO,CAAC,CAAC,eAAe,CAAC,CACzB,OAAO,CAAC,SAAS,CACjB,OAAO,CAAC,IAAI,CACZ,SAAS,CAAC,CAAC,EAAE,CAAC,uCAAuC,EAAE,SAAS,CAAC,CAAC,CAElE;;QACF,EAAE,MAAM,CAAC,CACV,CACH;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { useSearchParams } from 'next/navigation';
|
|
5
|
+
import { observer } from 'mobx-react-lite';
|
|
6
|
+
import { useForm } from 'react-hook-form';
|
|
7
|
+
import * as z from 'zod';
|
|
8
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
9
|
+
import { Check } from 'lucide-react';
|
|
10
|
+
import { Button, Input } from '@hanzo/ui/primitives';
|
|
11
|
+
import { Form, FormControl, FormField, FormItem, } from '@hanzo/ui/form';
|
|
12
|
+
import { useCommerce } from '../../../service/context';
|
|
13
|
+
import getPromoFromApi from '../../../util/promo-codes';
|
|
14
|
+
const formSchema = z.object({
|
|
15
|
+
code: z.string().min(1, 'Invalid code'),
|
|
16
|
+
});
|
|
17
|
+
const PromoCode = observer(() => {
|
|
18
|
+
const cmmc = useCommerce();
|
|
19
|
+
const searchParams = useSearchParams();
|
|
20
|
+
const [codeAccepted, setCodeAccepted] = useState(false);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const code = searchParams.get('code');
|
|
23
|
+
if (code) {
|
|
24
|
+
getPromoFromApi(code).then((promo) => {
|
|
25
|
+
if (promo) {
|
|
26
|
+
form.setValue('code', code);
|
|
27
|
+
setCodeAccepted(true);
|
|
28
|
+
cmmc.setAppliedPromo(promo);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}, [searchParams]);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (cmmc.appliedPromo) {
|
|
35
|
+
form.setValue('code', cmmc.appliedPromo.code);
|
|
36
|
+
setCodeAccepted(true);
|
|
37
|
+
}
|
|
38
|
+
}, [cmmc.appliedPromo]);
|
|
39
|
+
const form = useForm({
|
|
40
|
+
resolver: zodResolver(formSchema),
|
|
41
|
+
defaultValues: {
|
|
42
|
+
code: '',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const applyPromoCode = async (values) => {
|
|
46
|
+
const { code } = values;
|
|
47
|
+
const promo = await getPromoFromApi(code);
|
|
48
|
+
if (!promo) {
|
|
49
|
+
form.setError('code', { message: 'Invalid code' });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
setCodeAccepted(true);
|
|
53
|
+
cmmc.setAppliedPromo(promo);
|
|
54
|
+
};
|
|
55
|
+
const removePromoCode = () => {
|
|
56
|
+
cmmc.setAppliedPromo(null);
|
|
57
|
+
setCodeAccepted(false);
|
|
58
|
+
};
|
|
59
|
+
return (_jsx("div", { className: 'flex flex-col gap-2 border-t py-1', children: _jsx(Form, { ...form, children: _jsx("form", { onSubmit: form.handleSubmit(applyPromoCode), children: _jsxs("div", { className: 'flex gap-2 items-center', children: [_jsx(FormField, { control: form.control, name: 'code', render: ({ field }) => (_jsx(FormItem, { className: 'w-full', children: _jsx(FormControl, { children: _jsx(Input, { ...field, className: 'h-9', placeholder: 'Discount or invite code', onInput: removePromoCode }) }) })) }), codeAccepted ? (_jsx(Check, {})) : (_jsx(Button, { variant: 'outline', className: '!w-fit !min-w-0 font-inter text-muted text-sm', children: "Apply" }))] }) }) }) }));
|
|
60
|
+
});
|
|
61
|
+
export default PromoCode;
|
|
62
|
+
//# sourceMappingURL=promo-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promo-code.js","sourceRoot":"","sources":["../../../../components/cart/cart-panel/promo-code.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useSearchParams } from 'next/navigation';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
5
|
+
import { useForm } from 'react-hook-form';
|
|
6
|
+
import * as z from 'zod';
|
|
7
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
8
|
+
import { Check } from 'lucide-react';
|
|
9
|
+
import { Button, Form, FormControl, FormField, FormItem, Input } from '@hanzo/ui/primitives';
|
|
10
|
+
import { useCommerce } from '../../../service/context';
|
|
11
|
+
import getPromoFromApi from '../../../util/promo-codes';
|
|
12
|
+
const formSchema = z.object({
|
|
13
|
+
code: z.string().min(1, 'Invalid code'),
|
|
14
|
+
});
|
|
15
|
+
const PromoCode = observer(() => {
|
|
16
|
+
const cmmc = useCommerce();
|
|
17
|
+
const searchParams = useSearchParams();
|
|
18
|
+
const [codeAccepted, setCodeAccepted] = useState(false);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const code = searchParams.get('code');
|
|
21
|
+
if (code) {
|
|
22
|
+
getPromoFromApi(code).then((promo) => {
|
|
23
|
+
if (promo) {
|
|
24
|
+
form.setValue('code', code);
|
|
25
|
+
setCodeAccepted(true);
|
|
26
|
+
cmmc.setAppliedPromo(promo);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}, [searchParams]);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (cmmc.appliedPromo) {
|
|
33
|
+
form.setValue('code', cmmc.appliedPromo.code);
|
|
34
|
+
setCodeAccepted(true);
|
|
35
|
+
}
|
|
36
|
+
}, [cmmc.appliedPromo]);
|
|
37
|
+
const form = useForm({
|
|
38
|
+
// @ts-expect-error Zod version incompatibility between ZodTypeDef and $ZodTypeInternals
|
|
39
|
+
resolver: zodResolver(formSchema),
|
|
40
|
+
defaultValues: {
|
|
41
|
+
code: '',
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
const applyPromoCode = async (values) => {
|
|
45
|
+
const { code } = values;
|
|
46
|
+
const promo = await getPromoFromApi(code);
|
|
47
|
+
if (!promo) {
|
|
48
|
+
form.setError('code', { message: 'Invalid code' });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
setCodeAccepted(true);
|
|
52
|
+
cmmc.setAppliedPromo(promo);
|
|
53
|
+
};
|
|
54
|
+
const removePromoCode = () => {
|
|
55
|
+
cmmc.setAppliedPromo(null);
|
|
56
|
+
setCodeAccepted(false);
|
|
57
|
+
};
|
|
58
|
+
return (<div className='flex flex-col gap-2 border-t py-1'>
|
|
59
|
+
<Form {...form}>
|
|
60
|
+
<form onSubmit={form.handleSubmit(applyPromoCode)}>
|
|
61
|
+
<div className='flex gap-2 items-center'>
|
|
62
|
+
<FormField control={form.control} name='code' render={({ field }) => (<FormItem className='w-full'>
|
|
63
|
+
<FormControl>
|
|
64
|
+
<Input {...field} className='h-9' placeholder='Discount or invite code' onInput={removePromoCode}/>
|
|
65
|
+
</FormControl>
|
|
66
|
+
</FormItem>)}/>
|
|
67
|
+
{codeAccepted ? (<Check />) : (<Button variant='outline' className='!w-fit !min-w-0 font-inter text-muted text-sm'>Apply</Button>)}
|
|
68
|
+
</div>
|
|
69
|
+
</form>
|
|
70
|
+
</Form>
|
|
71
|
+
</div>);
|
|
72
|
+
});
|
|
73
|
+
export default PromoCode;
|
|
74
|
+
//# sourceMappingURL=promo-code.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promo-code.jsx","sourceRoot":"","sources":["../../../../components/cart/cart-panel/promo-code.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { Suspense } from 'react';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
5
|
+
import { cn } from '@hanzo/ui/util';
|
|
6
|
+
import { formatCurrencyValue } from '../../../util';
|
|
7
|
+
import PromoCode from './promo-code';
|
|
8
|
+
import { useCommerce } from '../../../service/context';
|
|
9
|
+
const TotalArea = observer(({ showPromoCode = false, showShipping = false, clx }) => {
|
|
10
|
+
const cmmc = useCommerce();
|
|
11
|
+
return (_jsxs("div", { className: clx, children: [showPromoCode && (_jsx(Suspense, { children: _jsx(PromoCode, {}) })), (showShipping || showPromoCode) && (_jsxs("div", { className: 'flex flex-col gap-0.5 pb-1.5 text-sm ' + (!showPromoCode ? 'border-t pt-1.5' : ''), children: [_jsxs("p", { className: 'flex justify-between', children: [_jsx("span", { className: 'text-muted-1', children: "Subtotal" }), _jsx("span", { className: 'font-semibold', children: cmmc.cartTotal === 0 ? '0' : formatCurrencyValue(cmmc.cartTotal) })] }), cmmc.promoAppliedCartTotal !== cmmc.cartTotal && (_jsxs("p", { className: 'flex justify-between', children: [_jsx("span", { className: 'text-muted-1', children: "Promo Discount" }), _jsxs("span", { className: 'font-semibold', children: ["-", formatCurrencyValue(cmmc.cartTotal - cmmc.promoAppliedCartTotal)] })] })), showShipping && (_jsxs("p", { className: 'flex justify-between', children: [_jsx("span", { className: 'text-muted-1', children: "Shipping" }), _jsx("span", { className: 'font-semibold', children: "Free Global Shipping" })] }))] })), _jsxs("p", { className: cn('border-t py-2 flex justify-between'), children: ["TOTAL", _jsx("span", { className: 'font-semibold', children: formatCurrencyValue(showPromoCode ? cmmc.promoAppliedCartTotal : cmmc.cartTotal) })] })] }));
|
|
12
|
+
});
|
|
13
|
+
export default TotalArea;
|
|
14
|
+
//# sourceMappingURL=total-area.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"total-area.js","sourceRoot":"","sources":["../../../../components/cart/cart-panel/total-area.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,SAAS,GAIV,QAAQ,CAAC,CAAC,EACb,aAAa,GAAC,KAAK,EACnB,YAAY,GAAC,KAAK,EAClB,GAAG,EACJ,EAAE,EAAE;IAEH,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;IAE1B,OAAO,CACL,eAAK,SAAS,EAAE,GAAG,aAClB,aAAa,IAAI,CAChB,KAAC,QAAQ,cACP,KAAC,SAAS,KAAE,GACH,CACZ,EACA,CAAC,YAAY,IAAI,aAAa,CAAC,IAAI,CAClC,eAAK,SAAS,EAAE,uCAAuC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,aACjG,aAAG,SAAS,EAAC,sBAAsB,aACjC,eAAM,SAAS,EAAC,cAAc,yBAAgB,EAC9C,eAAM,SAAS,EAAC,eAAe,YAAE,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAQ,IACvG,EACH,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,SAAS,IAAI,CAChD,aAAG,SAAS,EAAC,sBAAsB,aACjC,eAAM,SAAS,EAAC,cAAc,+BAAsB,EACpD,gBAAM,SAAS,EAAC,eAAe,kBAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAQ,IACxG,CACL,EACA,YAAY,IAAI,CACf,aAAG,SAAS,EAAC,sBAAsB,aACjC,eAAM,SAAS,EAAC,cAAc,yBAAgB,EAC9C,eAAM,SAAS,EAAC,eAAe,qCAA4B,IACzD,CACL,IACG,CACP,EACC,aAAG,SAAS,EAAE,EAAE,CAAC,oCAAoC,CAAC,sBAEpD,eAAM,SAAS,EAAC,eAAe,YAC5B,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAC5E,IACL,IACA,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React, { Suspense } from 'react';
|
|
3
|
+
import { observer } from 'mobx-react-lite';
|
|
4
|
+
import { cn } from '@hanzo/ui/util';
|
|
5
|
+
import { formatCurrencyValue } from '../../../util';
|
|
6
|
+
import PromoCode from './promo-code';
|
|
7
|
+
import { useCommerce } from '../../../service/context';
|
|
8
|
+
const TotalArea = observer(({ showPromoCode = false, showShipping = false, clx }) => {
|
|
9
|
+
const cmmc = useCommerce();
|
|
10
|
+
return (<div className={clx}>
|
|
11
|
+
{showPromoCode && (<Suspense>
|
|
12
|
+
<PromoCode />
|
|
13
|
+
</Suspense>)}
|
|
14
|
+
{(showShipping || showPromoCode) && (<div className={'flex flex-col gap-0.5 pb-1.5 text-sm ' + (!showPromoCode ? 'border-t pt-1.5' : '')}>
|
|
15
|
+
<p className='flex justify-between'>
|
|
16
|
+
<span className='text-muted-1'>Subtotal</span>
|
|
17
|
+
<span className='font-semibold'>{cmmc.cartTotal === 0 ? '0' : formatCurrencyValue(cmmc.cartTotal)}</span>
|
|
18
|
+
</p>
|
|
19
|
+
{cmmc.promoAppliedCartTotal !== cmmc.cartTotal && (<p className='flex justify-between'>
|
|
20
|
+
<span className='text-muted-1'>Promo Discount</span>
|
|
21
|
+
<span className='font-semibold'>-{formatCurrencyValue(cmmc.cartTotal - cmmc.promoAppliedCartTotal)}</span>
|
|
22
|
+
</p>)}
|
|
23
|
+
{showShipping && (<p className='flex justify-between'>
|
|
24
|
+
<span className='text-muted-1'>Shipping</span>
|
|
25
|
+
<span className='font-semibold'>Free Global Shipping</span>
|
|
26
|
+
</p>)}
|
|
27
|
+
</div>)}
|
|
28
|
+
<p className={cn('border-t py-2 flex justify-between')}>
|
|
29
|
+
TOTAL
|
|
30
|
+
<span className='font-semibold'>
|
|
31
|
+
{formatCurrencyValue(showPromoCode ? cmmc.promoAppliedCartTotal : cmmc.cartTotal)}
|
|
32
|
+
</span>
|
|
33
|
+
</p>
|
|
34
|
+
</div>);
|
|
35
|
+
});
|
|
36
|
+
export default TotalArea;
|
|
37
|
+
//# sourceMappingURL=total-area.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"total-area.jsx","sourceRoot":"","sources":["../../../../components/cart/cart-panel/total-area.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,SAAS,GAIV,QAAQ,CAAC,CAAC,EACb,aAAa,GAAC,KAAK,EACnB,YAAY,GAAC,KAAK,EAClB,GAAG,EACJ,EAAE,EAAE;IAEH,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;IAE1B,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CACpB;IAAA,CAAC,aAAa,IAAI,CAChB,CAAC,QAAQ,CACP;QAAA,CAAC,SAAS,CAAA,EACZ;MAAA,EAAE,QAAQ,CAAC,CACZ,CACD;IAAA,CAAC,CAAC,YAAY,IAAI,aAAa,CAAC,IAAI,CAClC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,uCAAuC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAClG;QAAA,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CACjC;UAAA,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAC7C;UAAA,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAC1G;QAAA,EAAE,CAAC,CACH;QAAA,CAAC,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,SAAS,IAAI,CAChD,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CACjC;YAAA,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CACnD;YAAA,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAC3G;UAAA,EAAE,CAAC,CAAC,CACL,CACD;QAAA,CAAC,YAAY,IAAI,CACf,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CACjC;YAAA,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAC7C;YAAA,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,oBAAoB,EAAE,IAAI,CAC5D;UAAA,EAAE,CAAC,CAAC,CACL,CACH;MAAA,EAAE,GAAG,CAAC,CACP,CACC;MAAA,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAAC,CACrD;;QACA,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAC7B;UAAA,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CACnF;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,CAAC,CACL;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { LockKeyhole } from 'lucide-react';
|
|
3
|
+
import Amex from './card-icons/amex';
|
|
4
|
+
import Discover from './card-icons/discover';
|
|
5
|
+
import Mastercard from './card-icons/mastercard';
|
|
6
|
+
import Visa from './card-icons/visa';
|
|
7
|
+
import DinersClub from './card-icons/diners-club';
|
|
8
|
+
import Jcb from './card-icons/jcb';
|
|
9
|
+
// <span className='hidden sm:flex text-sm'>Secure payments with</span>
|
|
10
|
+
const PaymentMethods = () => {
|
|
11
|
+
return (_jsxs("div", { className: 'flex gap-1 items-center text-muted-1 pb-3', children: [_jsx(LockKeyhole, { className: 'w-4 h-4' }), _jsx("span", { className: 'hidden sm:flex text-sm', children: "Secure payments with" }), _jsx(Amex, { className: 'w-9 h-5' }), _jsx(Discover, { className: 'w-9 h-5' }), _jsx(Mastercard, { className: 'w-9 h-5' }), _jsx(Visa, { className: 'w-9 h-5' }), _jsx(DinersClub, { className: 'w-9 h-5' }), _jsx(Jcb, { className: 'w-9 h-5' })] }));
|
|
12
|
+
};
|
|
13
|
+
export default PaymentMethods;
|
|
14
|
+
//# sourceMappingURL=card-icon-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-icon-row.js","sourceRoot":"","sources":["../../../../components/checkout/payment-step-form/card-icon-row.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,QAAQ,MAAM,uBAAuB,CAAA;AAC5C,OAAO,UAAU,MAAM,yBAAyB,CAAA;AAChD,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,GAAG,MAAM,kBAAkB,CAAA;AAElC,6EAA6E;AAE7E,MAAM,cAAc,GAAa,GAAG,EAAE;IACpC,OAAO,CACL,eAAK,SAAS,EAAC,2CAA2C,aACxD,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAE,EAClC,eAAM,SAAS,EAAC,wBAAwB,qCAA4B,EACpE,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAE,EAC3B,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,GAAE,EAC/B,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAE,EACjC,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAE,EAC3B,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAE,EACjC,KAAC,GAAG,IAAC,SAAS,EAAC,SAAS,GAAE,IACtB,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { LockKeyhole } from 'lucide-react';
|
|
2
|
+
import Amex from './card-icons/amex';
|
|
3
|
+
import Discover from './card-icons/discover';
|
|
4
|
+
import Mastercard from './card-icons/mastercard';
|
|
5
|
+
import Visa from './card-icons/visa';
|
|
6
|
+
import DinersClub from './card-icons/diners-club';
|
|
7
|
+
import Jcb from './card-icons/jcb';
|
|
8
|
+
// <span className='hidden sm:flex text-sm'>Secure payments with</span>
|
|
9
|
+
const PaymentMethods = () => {
|
|
10
|
+
return (<div className='flex gap-1 items-center text-muted-1 pb-3'>
|
|
11
|
+
<LockKeyhole className='w-4 h-4'/>
|
|
12
|
+
<span className='hidden sm:flex text-sm'>Secure payments with</span>
|
|
13
|
+
<Amex className='w-9 h-5'/>
|
|
14
|
+
<Discover className='w-9 h-5'/>
|
|
15
|
+
<Mastercard className='w-9 h-5'/>
|
|
16
|
+
<Visa className='w-9 h-5'/>
|
|
17
|
+
<DinersClub className='w-9 h-5'/>
|
|
18
|
+
<Jcb className='w-9 h-5'/>
|
|
19
|
+
</div>);
|
|
20
|
+
};
|
|
21
|
+
export default PaymentMethods;
|
|
22
|
+
//# sourceMappingURL=card-icon-row.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-icon-row.jsx","sourceRoot":"","sources":["../../../../components/checkout/payment-step-form/card-icon-row.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,QAAQ,MAAM,uBAAuB,CAAA;AAC5C,OAAO,UAAU,MAAM,yBAAyB,CAAA;AAChD,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,GAAG,MAAM,kBAAkB,CAAA;AAElC,6EAA6E;AAE7E,MAAM,cAAc,GAAa,GAAG,EAAE;IACpC,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,2CAA2C,CACxD;MAAA,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAChC;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,oBAAoB,EAAE,IAAI,CACnE;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EACzB;MAAA,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAC7B;MAAA,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAC/B;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EACzB;MAAA,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAC/B;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAC1B;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import {} from 'lucide-react';
|
|
4
|
+
const Amex = (props) => (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", role: "img", viewBox: "0 0 38 24", "aria-labelledby": "pi-american_express", ...props, children: [_jsx("title", { id: "pi-american_express", children: "American Express" }), _jsxs("g", { fill: "none", children: [_jsx("path", { fill: "#000", d: "M35,0 L3,0 C1.3,0 0,1.3 0,3 L0,21 C0,22.7 1.4,24 3,24 L35,24 C36.7,24 38,22.7 38,21 L38,3 C38,1.3 36.6,0 35,0 Z", opacity: ".07" }), _jsx("path", { fill: "#006FCF", d: "M35,1 C36.1,1 37,1.9 37,3 L37,21 C37,22.1 36.1,23 35,23 L3,23 C1.9,23 1,22.1 1,21 L1,3 C1,1.9 1.9,1 3,1 L35,1" }), _jsx("path", { fill: "#FFF", d: "M8.971,10.268 L9.745,12.144 L8.203,12.144 L8.971,10.268 Z M25.046,10.346 L22.069,10.346 L22.069,11.173 L24.998,11.173 L24.998,12.412 L22.075,12.412 L22.075,13.334 L25.052,13.334 L25.052,14.073 L27.129,11.828 L25.052,9.488 L25.046,10.346 L25.046,10.346 Z M10.983,8.006 L14.978,8.006 L15.865,9.941 L16.687,8 L27.057,8 L28.135,9.19 L29.25,8 L34.013,8 L30.494,11.852 L33.977,15.68 L29.143,15.68 L28.065,14.49 L26.94,15.68 L10.03,15.68 L9.536,14.49 L8.406,14.49 L7.911,15.68 L4,15.68 L7.286,8 L10.716,8 L10.983,8.006 Z M19.646,9.084 L17.407,9.084 L15.907,12.62 L14.282,9.084 L12.06,9.084 L12.06,13.894 L10,9.084 L8.007,9.084 L5.625,14.596 L7.18,14.596 L7.674,13.406 L10.27,13.406 L10.764,14.596 L13.484,14.596 L13.484,10.661 L15.235,14.602 L16.425,14.602 L18.165,10.673 L18.165,14.603 L19.623,14.603 L19.647,9.083 L19.646,9.084 Z M28.986,11.852 L31.517,9.084 L29.695,9.084 L28.094,10.81 L26.546,9.084 L20.652,9.084 L20.652,14.602 L26.462,14.602 L28.076,12.864 L29.624,14.602 L31.499,14.602 L28.987,11.852 L28.986,11.852 Z" })] })] }));
|
|
5
|
+
export default Amex;
|
|
6
|
+
//# sourceMappingURL=amex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amex.js","sourceRoot":"","sources":["../../../../../components/checkout/payment-step-form/card-icons/amex.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAoB,MAAM,cAAc,CAAA;AAE/C,MAAM,IAAI,GAA0B,CAAC,KAAkB,EAAE,EAAE,CAAC,CAC3D,eACG,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,KAAK,EACV,OAAO,EAAC,WAAW,qBACH,qBAAqB,KACjC,KAAK,aAET,gBAAO,EAAE,EAAC,qBAAqB,iCAAyB,EACxD,aAAG,IAAI,EAAC,MAAM,aACZ,eACE,IAAI,EAAC,MAAM,EACX,CAAC,EAAC,iHAAiH,EACnH,OAAO,EAAC,KAAK,GACb,EACF,eACE,IAAI,EAAC,SAAS,EACd,CAAC,EAAC,+GAA+G,GACjH,EACF,eACE,IAAI,EAAC,MAAM,EACX,CAAC,EAAC,0/BAA0/B,GAC5/B,IACA,IACA,CAEP,CAAA;AAED,eAAe,IAAI,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {} from 'lucide-react';
|
|
3
|
+
const Amex = (props) => (<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" aria-labelledby="pi-american_express" {...props}>
|
|
4
|
+
<title id="pi-american_express">American Express</title>
|
|
5
|
+
<g fill="none">
|
|
6
|
+
<path fill="#000" d="M35,0 L3,0 C1.3,0 0,1.3 0,3 L0,21 C0,22.7 1.4,24 3,24 L35,24 C36.7,24 38,22.7 38,21 L38,3 C38,1.3 36.6,0 35,0 Z" opacity=".07"/>
|
|
7
|
+
<path fill="#006FCF" d="M35,1 C36.1,1 37,1.9 37,3 L37,21 C37,22.1 36.1,23 35,23 L3,23 C1.9,23 1,22.1 1,21 L1,3 C1,1.9 1.9,1 3,1 L35,1"/>
|
|
8
|
+
<path fill="#FFF" d="M8.971,10.268 L9.745,12.144 L8.203,12.144 L8.971,10.268 Z M25.046,10.346 L22.069,10.346 L22.069,11.173 L24.998,11.173 L24.998,12.412 L22.075,12.412 L22.075,13.334 L25.052,13.334 L25.052,14.073 L27.129,11.828 L25.052,9.488 L25.046,10.346 L25.046,10.346 Z M10.983,8.006 L14.978,8.006 L15.865,9.941 L16.687,8 L27.057,8 L28.135,9.19 L29.25,8 L34.013,8 L30.494,11.852 L33.977,15.68 L29.143,15.68 L28.065,14.49 L26.94,15.68 L10.03,15.68 L9.536,14.49 L8.406,14.49 L7.911,15.68 L4,15.68 L7.286,8 L10.716,8 L10.983,8.006 Z M19.646,9.084 L17.407,9.084 L15.907,12.62 L14.282,9.084 L12.06,9.084 L12.06,13.894 L10,9.084 L8.007,9.084 L5.625,14.596 L7.18,14.596 L7.674,13.406 L10.27,13.406 L10.764,14.596 L13.484,14.596 L13.484,10.661 L15.235,14.602 L16.425,14.602 L18.165,10.673 L18.165,14.603 L19.623,14.603 L19.647,9.083 L19.646,9.084 Z M28.986,11.852 L31.517,9.084 L29.695,9.084 L28.094,10.81 L26.546,9.084 L20.652,9.084 L20.652,14.602 L26.462,14.602 L28.076,12.864 L29.624,14.602 L31.499,14.602 L28.987,11.852 L28.986,11.852 Z"/>
|
|
9
|
+
</g>
|
|
10
|
+
</svg>);
|
|
11
|
+
export default Amex;
|
|
12
|
+
//# sourceMappingURL=amex.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amex.jsx","sourceRoot":"","sources":["../../../../../components/checkout/payment-step-form/card-icons/amex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAoB,MAAM,cAAc,CAAA;AAE/C,MAAM,IAAI,GAA0B,CAAC,KAAkB,EAAE,EAAE,CAAC,CAC3D,CAAC,GAAG,CACD,KAAK,CAAC,4BAA4B,CAClC,IAAI,CAAC,KAAK,CACV,OAAO,CAAC,WAAW,CACnB,eAAe,CAAC,qBAAqB,CACrC,IAAI,KAAK,CAAC,CAEV;IAAA,CAAC,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,KAAK,CACvD;IAAA,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CACZ;MAAA,CAAC,IAAI,CACH,IAAI,CAAC,MAAM,CACX,CAAC,CAAC,iHAAiH,CACnH,OAAO,CAAC,KAAK,EAEf;MAAA,CAAC,IAAI,CACH,IAAI,CAAC,SAAS,CACd,CAAC,CAAC,+GAA+G,EAEnH;MAAA,CAAC,IAAI,CACH,IAAI,CAAC,MAAM,CACX,CAAC,CAAC,0/BAA0/B,EAEhgC;IAAA,EAAE,CAAC,CACL;EAAA,EAAE,GAAG,CAAC,CAEP,CAAA;AAED,eAAe,IAAI,CAAA"}
|