@luxfi/core 5.2.12 → 5.2.13
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/commerce/ui/conf.ts +13 -13
- package/commerce/ui/context.tsx +126 -126
- package/commerce/ui/store.ts +304 -304
- package/components/access-code-input.tsx +71 -71
- package/components/auth/auth-listener.tsx +29 -29
- package/components/auth/auth-token/clear-auth-token.tsx +12 -12
- package/components/auth/auth-token/set-auth-token.tsx +16 -16
- package/components/auth/common-auth-domains.ts +16 -16
- package/components/auth/login-panel.tsx +107 -107
- package/components/back-button.tsx +42 -42
- package/components/chat-widget.tsx +85 -85
- package/components/commerce/add-widget.tsx +20 -20
- package/components/commerce/bag-button.tsx +98 -98
- package/components/commerce/buy-button.tsx +34 -34
- package/components/commerce/checkout-button.tsx +129 -129
- package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -36
- package/components/commerce/checkout-panel/dt-checkout-panel.tsx +84 -84
- package/components/commerce/checkout-panel/index.tsx +129 -129
- package/components/commerce/checkout-panel/links-row.tsx +21 -21
- package/components/commerce/checkout-panel/mb-checkout-panel.tsx +54 -54
- package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
- package/components/commerce/checkout-panel/thank-you.tsx +18 -18
- package/components/commerce/checkout-widget/const.ts +13 -13
- package/components/commerce/checkout-widget/index.tsx +192 -192
- package/components/commerce/checkout-widget/obs-string-set.ts +48 -48
- package/components/commerce/checkout-widget/use-anim-clx-set.ts +58 -58
- package/components/commerce/desktop-bag-popup.tsx +78 -78
- package/components/commerce/desktop-nav-menu.tsx +130 -130
- package/components/commerce/drawer/index.tsx +99 -99
- package/components/commerce/drawer/micro.tsx +144 -144
- package/components/commerce/drawer/shell.tsx +85 -85
- package/components/commerce/mobile-bag-drawer.tsx +51 -51
- package/components/commerce/mobile-login-button.tsx +101 -101
- package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
- package/components/commerce/mobile-nav-menu-ai.tsx +48 -48
- package/components/commerce/mobile-nav-menu-item.tsx +49 -49
- package/components/commerce/mobile-nav-menu.tsx +101 -101
- package/components/contact-dialog/contact-form.tsx +113 -113
- package/components/contact-dialog/disclaimer.tsx +13 -13
- package/components/contact-dialog/index.tsx +64 -64
- package/components/copyright.tsx +21 -21
- package/components/drawer-margin.tsx +25 -25
- package/components/footer.tsx +77 -77
- package/components/header/desktop.tsx +50 -50
- package/components/header/index.tsx +52 -52
- package/components/header/mobile.tsx +163 -163
- package/components/header/theme-toggle.tsx +26 -26
- package/components/icons/24k-gold-card.tsx +43 -43
- package/components/icons/ai-chat-act.tsx +47 -47
- package/components/icons/ai-chat.tsx +29 -29
- package/components/icons/anodized-titanium.tsx +45 -45
- package/components/icons/avatar.tsx +11 -11
- package/components/icons/bag-icon.tsx +10 -10
- package/components/icons/blog-act.tsx +14 -14
- package/components/icons/blog.tsx +20 -20
- package/components/icons/bridge-act.tsx +18 -18
- package/components/icons/bridge.tsx +68 -68
- package/components/icons/changelog-act.tsx +15 -15
- package/components/icons/changelog.tsx +21 -21
- package/components/icons/chrome.tsx +45 -45
- package/components/icons/coins-act.tsx +29 -29
- package/components/icons/coins.tsx +20 -20
- package/components/icons/compare-cards-act.tsx +30 -30
- package/components/icons/compare-cards.tsx +21 -21
- package/components/icons/credit-act.tsx +29 -29
- package/components/icons/credit.tsx +20 -20
- package/components/icons/customer-support-act.tsx +27 -27
- package/components/icons/customer-support.tsx +21 -21
- package/components/icons/customers-act.tsx +65 -65
- package/components/icons/customers.tsx +33 -33
- package/components/icons/developer-docs-act.tsx +26 -26
- package/components/icons/developer-docs.tsx +20 -20
- package/components/icons/exchange-act.tsx +27 -27
- package/components/icons/exchange.tsx +21 -21
- package/components/icons/explorer-act.tsx +27 -27
- package/components/icons/explorer.tsx +22 -22
- package/components/icons/faqs-act.tsx +27 -27
- package/components/icons/faqs.tsx +21 -21
- package/components/icons/github.tsx +14 -14
- package/components/icons/guides-act.tsx +26 -26
- package/components/icons/guides.tsx +21 -21
- package/components/icons/gun-metal.tsx +44 -44
- package/components/icons/index.tsx +43 -43
- package/components/icons/integrations-act.tsx +41 -41
- package/components/icons/integrations.tsx +25 -25
- package/components/icons/irradescent.tsx +41 -41
- package/components/icons/launch-subnet.tsx +21 -21
- package/components/icons/launchsubnet-act.tsx +29 -29
- package/components/icons/left-arrow.tsx +11 -11
- package/components/icons/lux-finance-act.tsx +34 -34
- package/components/icons/lux-finance.tsx +23 -23
- package/components/icons/lux-logo.tsx +10 -10
- package/components/icons/lux-pass-act.tsx +41 -41
- package/components/icons/lux-pass.tsx +25 -25
- package/components/icons/lux-quests-act.tsx +15 -15
- package/components/icons/lux-quests.tsx +21 -21
- package/components/icons/market-act.tsx +39 -39
- package/components/icons/market.tsx +24 -24
- package/components/icons/mirrored-titanium.tsx +46 -46
- package/components/icons/more-benefits-act.tsx +29 -29
- package/components/icons/more-benefits.tsx +21 -21
- package/components/icons/open-source-act.tsx +41 -41
- package/components/icons/open-source.tsx +26 -26
- package/components/icons/right-arrow.tsx +10 -10
- package/components/icons/safe-act.tsx +77 -77
- package/components/icons/safe.tsx +37 -37
- package/components/icons/search.tsx +12 -12
- package/components/icons/secure-delivery.tsx +13 -13
- package/components/icons/shop-act.tsx +29 -29
- package/components/icons/shop.tsx +20 -20
- package/components/icons/social-icon.tsx +35 -35
- package/components/icons/social-svg.css +3 -3
- package/components/icons/sterling-silver-card.tsx +44 -44
- package/components/icons/templates-act.tsx +29 -29
- package/components/icons/templates.tsx +21 -21
- package/components/icons/validators-act.tsx +42 -42
- package/components/icons/validators.tsx +41 -41
- package/components/icons/view-all-card-act.tsx +28 -28
- package/components/icons/view-all-card.tsx +20 -20
- package/components/icons/wallet-act.tsx +29 -29
- package/components/icons/wallet.tsx +20 -20
- package/components/icons/warpcast.tsx +58 -58
- package/components/icons/youtube-logo.tsx +59 -59
- package/components/index.ts +27 -27
- package/components/logo.tsx +89 -89
- package/components/main.tsx +27 -27
- package/components/mini-chart/index.tsx +7 -7
- package/components/mini-chart/mini-chart-props.ts +43 -43
- package/components/mini-chart/mini-chart.tsx +85 -85
- package/components/mini-chart/wrapper.tsx +23 -23
- package/components/not-found/index.tsx +28 -28
- package/components/not-found/not-found-content.mdx +5 -5
- package/components/scripts.tsx +24 -24
- package/components/tooltip.tsx +31 -31
- package/environment.d.ts +5 -5
- package/next/analytics/fpixel.ts +15 -15
- package/next/analytics/google-analytics.ts +13 -13
- package/next/analytics/index.ts +3 -3
- package/next/analytics/pixel-analytics.tsx +54 -54
- package/next/font/get-app-router-font-classes.ts +12 -12
- package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
- package/next/font/next-font-desc.ts +27 -27
- package/next/font/pages-router-font-vars.tsx +18 -18
- package/next/head-metadata/from-next/metadata-types.ts +158 -158
- package/next/head-metadata/from-next/opengraph-types.ts +267 -267
- package/next/head-metadata/from-next/twitter-types.ts +92 -92
- package/next/head-metadata/index.tsx +208 -208
- package/next/middleware/determine-device-mw.ts +16 -16
- package/package.json +79 -79
- package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
- package/root-layout/index.tsx +112 -112
- package/server-actions/firebase-app.ts +14 -14
- package/server-actions/index.ts +5 -5
- package/server-actions/store-contact.ts +51 -51
- package/site-def/footer/community.tsx +67 -67
- package/site-def/footer/company.ts +37 -37
- package/site-def/footer/ecosystem.ts +37 -37
- package/site-def/footer/index.tsx +26 -26
- package/site-def/footer/legal.ts +28 -28
- package/site-def/footer/network.ts +45 -45
- package/site-def/footer/svg/warpcast-logo.svg +11 -11
- package/site-def/index.ts +2 -2
- package/site-def/main-nav.tsx +458 -458
- package/style/cart-animation.css +29 -29
- package/style/checkout-animation.css +23 -23
- package/style/drawer-handle-overrides.css +160 -160
- package/style/lux-colors.css +85 -85
- package/style/lux-global.css +47 -47
- package/tailwind/fontFamily.tailwind.lux.ts +18 -18
- package/tailwind/index.ts +2 -2
- package/tailwind/lux-tw-fonts.ts +39 -39
- package/tailwind/tailwind.config.lux-preset.ts +10 -10
- package/tsconfig.json +15 -15
- package/types/chatbot-config.ts +6 -6
- package/types/chatbot-suggested-question.ts +7 -7
- package/types/contact-info.ts +10 -10
- package/types/index.ts +4 -4
- package/types/site-def.ts +43 -43
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
import React, { useLayoutEffect, useRef, useState } from 'react'
|
|
3
|
-
|
|
4
|
-
import { capitalize, cn } from '@hanzo/ui/util'
|
|
5
|
-
|
|
6
|
-
import { useCommerce, ShippingStepForm, PaymentStepForm } from '@hanzo/commerce'
|
|
7
|
-
import type { CheckoutStep } from '@hanzo/commerce/types'
|
|
8
|
-
|
|
9
|
-
import ThankYou from './thank-you'
|
|
10
|
-
|
|
11
|
-
const STEPS = [
|
|
12
|
-
{
|
|
13
|
-
name: 'payment',
|
|
14
|
-
Comp: PaymentStepForm
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: 'delivery',
|
|
18
|
-
Comp: ShippingStepForm
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
name: 'done',
|
|
22
|
-
label: 'Done!',
|
|
23
|
-
Comp: ThankYou
|
|
24
|
-
}
|
|
25
|
-
] satisfies CheckoutStep[]
|
|
26
|
-
|
|
27
|
-
const STEP_NAMES = STEPS.map((s) => (s.label ? s.label : capitalize(s.name)))
|
|
28
|
-
|
|
29
|
-
import DesktopCP from './dt-checkout-panel'
|
|
30
|
-
import MobileCP from './mb-checkout-panel'
|
|
31
|
-
|
|
32
|
-
const CheckoutPanel: React.FC<{
|
|
33
|
-
close: () => void
|
|
34
|
-
className?: string
|
|
35
|
-
}> = ({
|
|
36
|
-
close,
|
|
37
|
-
className=''
|
|
38
|
-
}) => {
|
|
39
|
-
|
|
40
|
-
const cmmc = useCommerce()
|
|
41
|
-
|
|
42
|
-
// For sites that don't initialize cmmc
|
|
43
|
-
if (!cmmc) {
|
|
44
|
-
console.log("CHECKOUT PANEL: cmmc svc undefined!")
|
|
45
|
-
return <></>
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const [stepIndex, setStepIndex] = useState<number>(0)
|
|
49
|
-
const [orderId, setOrderId] = useState<string | undefined>(undefined)
|
|
50
|
-
|
|
51
|
-
// Step.name or 'first' or 'next' or 'last'
|
|
52
|
-
const setStep = (name: string): void => {
|
|
53
|
-
|
|
54
|
-
if (name === 'first') {
|
|
55
|
-
setStepIndex(0)
|
|
56
|
-
}
|
|
57
|
-
else if (name === 'last') {
|
|
58
|
-
setStepIndex(STEPS.length - 1)
|
|
59
|
-
}
|
|
60
|
-
else if (name === 'next') {
|
|
61
|
-
if (stepIndex <= STEPS.length - 2) {
|
|
62
|
-
setStepIndex(stepIndex + 1)
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
throw new Error('CheckoutPanel.setStep(): Attempting to advance past last step!')
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
const indexFound = STEPS.findIndex((el) => (el.name === name))
|
|
70
|
-
if (indexFound !== -1) {
|
|
71
|
-
setStepIndex(indexFound)
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
throw new Error('CheckoutPanel.setStep(): Step named ' + name + ' not found!')
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const _close = () => {
|
|
80
|
-
setStep('first')
|
|
81
|
-
close()
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Determine if mobile or desktop based on visibility of desktopElement
|
|
85
|
-
// https://stackoverflow.com/a/21696585/11378853
|
|
86
|
-
const desktopElement = useRef<HTMLDivElement | null>(null)
|
|
87
|
-
const [layout, setLayout] = useState<'mobile' | 'desktop' | undefined>()
|
|
88
|
-
|
|
89
|
-
// TODO :aa I assume it's becase we don't want two instance of the Square plugin....
|
|
90
|
-
// ... wondering if there is a simpler way.
|
|
91
|
-
useLayoutEffect(() => {
|
|
92
|
-
const checkLayout = () => {
|
|
93
|
-
setLayout(!!desktopElement.current?.offsetParent ? 'desktop' : 'mobile')
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// initial layout check
|
|
97
|
-
checkLayout()
|
|
98
|
-
|
|
99
|
-
window.addEventListener('resize', checkLayout)
|
|
100
|
-
return () => {
|
|
101
|
-
window.removeEventListener('resize', checkLayout)
|
|
102
|
-
}
|
|
103
|
-
}, [])
|
|
104
|
-
|
|
105
|
-
const StepToRender = STEPS[stepIndex].Comp
|
|
106
|
-
|
|
107
|
-
return (<>
|
|
108
|
-
<DesktopCP
|
|
109
|
-
className={cn('h-full', className, 'hidden md:flex')}
|
|
110
|
-
close={_close}
|
|
111
|
-
index={stepIndex}
|
|
112
|
-
stepNames={STEP_NAMES}
|
|
113
|
-
>
|
|
114
|
-
{/* Element required to determine if DesktopCP is visible */}
|
|
115
|
-
<div ref={desktopElement}/>
|
|
116
|
-
{layout === 'desktop' && <StepToRender onDone={() => {setStep('next')}} orderId={orderId} setOrderId={setOrderId}/>}
|
|
117
|
-
</DesktopCP>
|
|
118
|
-
<MobileCP
|
|
119
|
-
className={cn('h-full overflow-y-auto', className, 'md:hidden' )}
|
|
120
|
-
close={_close}
|
|
121
|
-
index={stepIndex}
|
|
122
|
-
stepNames={STEP_NAMES}
|
|
123
|
-
>
|
|
124
|
-
{layout === 'mobile' && <StepToRender onDone={() => {setStep('next')}} orderId={orderId} setOrderId={setOrderId}/>}
|
|
125
|
-
</MobileCP>
|
|
126
|
-
</>)
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
export default CheckoutPanel
|
|
1
|
+
'use client'
|
|
2
|
+
import React, { useLayoutEffect, useRef, useState } from 'react'
|
|
3
|
+
|
|
4
|
+
import { capitalize, cn } from '@hanzo/ui/util'
|
|
5
|
+
|
|
6
|
+
import { useCommerce, ShippingStepForm, PaymentStepForm } from '@hanzo/commerce'
|
|
7
|
+
import type { CheckoutStep } from '@hanzo/commerce/types'
|
|
8
|
+
|
|
9
|
+
import ThankYou from './thank-you'
|
|
10
|
+
|
|
11
|
+
const STEPS = [
|
|
12
|
+
{
|
|
13
|
+
name: 'payment',
|
|
14
|
+
Comp: PaymentStepForm
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'delivery',
|
|
18
|
+
Comp: ShippingStepForm
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'done',
|
|
22
|
+
label: 'Done!',
|
|
23
|
+
Comp: ThankYou
|
|
24
|
+
}
|
|
25
|
+
] satisfies CheckoutStep[]
|
|
26
|
+
|
|
27
|
+
const STEP_NAMES = STEPS.map((s) => (s.label ? s.label : capitalize(s.name)))
|
|
28
|
+
|
|
29
|
+
import DesktopCP from './dt-checkout-panel'
|
|
30
|
+
import MobileCP from './mb-checkout-panel'
|
|
31
|
+
|
|
32
|
+
const CheckoutPanel: React.FC<{
|
|
33
|
+
close: () => void
|
|
34
|
+
className?: string
|
|
35
|
+
}> = ({
|
|
36
|
+
close,
|
|
37
|
+
className=''
|
|
38
|
+
}) => {
|
|
39
|
+
|
|
40
|
+
const cmmc = useCommerce()
|
|
41
|
+
|
|
42
|
+
// For sites that don't initialize cmmc
|
|
43
|
+
if (!cmmc) {
|
|
44
|
+
console.log("CHECKOUT PANEL: cmmc svc undefined!")
|
|
45
|
+
return <></>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const [stepIndex, setStepIndex] = useState<number>(0)
|
|
49
|
+
const [orderId, setOrderId] = useState<string | undefined>(undefined)
|
|
50
|
+
|
|
51
|
+
// Step.name or 'first' or 'next' or 'last'
|
|
52
|
+
const setStep = (name: string): void => {
|
|
53
|
+
|
|
54
|
+
if (name === 'first') {
|
|
55
|
+
setStepIndex(0)
|
|
56
|
+
}
|
|
57
|
+
else if (name === 'last') {
|
|
58
|
+
setStepIndex(STEPS.length - 1)
|
|
59
|
+
}
|
|
60
|
+
else if (name === 'next') {
|
|
61
|
+
if (stepIndex <= STEPS.length - 2) {
|
|
62
|
+
setStepIndex(stepIndex + 1)
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
throw new Error('CheckoutPanel.setStep(): Attempting to advance past last step!')
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const indexFound = STEPS.findIndex((el) => (el.name === name))
|
|
70
|
+
if (indexFound !== -1) {
|
|
71
|
+
setStepIndex(indexFound)
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
throw new Error('CheckoutPanel.setStep(): Step named ' + name + ' not found!')
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const _close = () => {
|
|
80
|
+
setStep('first')
|
|
81
|
+
close()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Determine if mobile or desktop based on visibility of desktopElement
|
|
85
|
+
// https://stackoverflow.com/a/21696585/11378853
|
|
86
|
+
const desktopElement = useRef<HTMLDivElement | null>(null)
|
|
87
|
+
const [layout, setLayout] = useState<'mobile' | 'desktop' | undefined>()
|
|
88
|
+
|
|
89
|
+
// TODO :aa I assume it's becase we don't want two instance of the Square plugin....
|
|
90
|
+
// ... wondering if there is a simpler way.
|
|
91
|
+
useLayoutEffect(() => {
|
|
92
|
+
const checkLayout = () => {
|
|
93
|
+
setLayout(!!desktopElement.current?.offsetParent ? 'desktop' : 'mobile')
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// initial layout check
|
|
97
|
+
checkLayout()
|
|
98
|
+
|
|
99
|
+
window.addEventListener('resize', checkLayout)
|
|
100
|
+
return () => {
|
|
101
|
+
window.removeEventListener('resize', checkLayout)
|
|
102
|
+
}
|
|
103
|
+
}, [])
|
|
104
|
+
|
|
105
|
+
const StepToRender = STEPS[stepIndex].Comp
|
|
106
|
+
|
|
107
|
+
return (<>
|
|
108
|
+
<DesktopCP
|
|
109
|
+
className={cn('h-full', className, 'hidden md:flex')}
|
|
110
|
+
close={_close}
|
|
111
|
+
index={stepIndex}
|
|
112
|
+
stepNames={STEP_NAMES}
|
|
113
|
+
>
|
|
114
|
+
{/* Element required to determine if DesktopCP is visible */}
|
|
115
|
+
<div ref={desktopElement}/>
|
|
116
|
+
{layout === 'desktop' && <StepToRender onDone={() => {setStep('next')}} orderId={orderId} setOrderId={setOrderId}/>}
|
|
117
|
+
</DesktopCP>
|
|
118
|
+
<MobileCP
|
|
119
|
+
className={cn('h-full overflow-y-auto', className, 'md:hidden' )}
|
|
120
|
+
close={_close}
|
|
121
|
+
index={stepIndex}
|
|
122
|
+
stepNames={STEP_NAMES}
|
|
123
|
+
>
|
|
124
|
+
{layout === 'mobile' && <StepToRender onDone={() => {setStep('next')}} orderId={orderId} setOrderId={setOrderId}/>}
|
|
125
|
+
</MobileCP>
|
|
126
|
+
</>)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export default CheckoutPanel
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import Link from 'next/link'
|
|
2
|
-
|
|
3
|
-
import { Separator } from '@hanzo/ui/primitives'
|
|
4
|
-
import { cn } from '@hanzo/ui/util'
|
|
5
|
-
|
|
6
|
-
const LinksRow: React.FC<{
|
|
7
|
-
className?: string
|
|
8
|
-
}> = ({
|
|
9
|
-
className=''
|
|
10
|
-
}) => (
|
|
11
|
-
<div className={cn('flex flex-col', className)}>
|
|
12
|
-
<Separator/>
|
|
13
|
-
<div className='flex gap-4 text-sm py-2'>
|
|
14
|
-
{/* TODO: add Refund policy and Privacy policy links */}
|
|
15
|
-
<Link href=''>Refund policy</Link>
|
|
16
|
-
<Link href=''>Privacy policy</Link>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
export default LinksRow
|
|
1
|
+
import Link from 'next/link'
|
|
2
|
+
|
|
3
|
+
import { Separator } from '@hanzo/ui/primitives'
|
|
4
|
+
import { cn } from '@hanzo/ui/util'
|
|
5
|
+
|
|
6
|
+
const LinksRow: React.FC<{
|
|
7
|
+
className?: string
|
|
8
|
+
}> = ({
|
|
9
|
+
className=''
|
|
10
|
+
}) => (
|
|
11
|
+
<div className={cn('flex flex-col', className)}>
|
|
12
|
+
<Separator/>
|
|
13
|
+
<div className='flex gap-4 text-sm py-2'>
|
|
14
|
+
{/* TODO: add Refund policy and Privacy policy links */}
|
|
15
|
+
<Link href=''>Refund policy</Link>
|
|
16
|
+
<Link href=''>Privacy policy</Link>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
export default LinksRow
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
import React, { type PropsWithChildren } from 'react'
|
|
3
|
-
|
|
4
|
-
import { StepIndicator } from '@hanzo/ui/primitives'
|
|
5
|
-
import { cn } from '@hanzo/ui/util'
|
|
6
|
-
import { AuthWidget } from '@hanzo/auth/components'
|
|
7
|
-
import { CartAccordian } from '@hanzo/commerce'
|
|
8
|
-
|
|
9
|
-
import { Logo } from '../..'
|
|
10
|
-
import BagButton from '../bag-button'
|
|
11
|
-
import LinksRow from './links-row'
|
|
12
|
-
|
|
13
|
-
const MobileCheckoutPanel: React.FC<PropsWithChildren & {
|
|
14
|
-
index: number
|
|
15
|
-
stepNames: string[]
|
|
16
|
-
close:() => void
|
|
17
|
-
className?: string
|
|
18
|
-
}> = ({
|
|
19
|
-
index,
|
|
20
|
-
stepNames,
|
|
21
|
-
close,
|
|
22
|
-
className='',
|
|
23
|
-
children
|
|
24
|
-
}) => (
|
|
25
|
-
|
|
26
|
-
<div /* id='MOBILE_GRID' */ className={cn('bg-background flex flex-col justify-start px-4', className)}>
|
|
27
|
-
<div className='sticky top-0 w-full flex flex-row justify-between items-center bg-background'>
|
|
28
|
-
<Logo onClick={close} size='xs' href='/' />
|
|
29
|
-
{/* Need wrapper div since 'noLogin' returns null if no logged in user */}
|
|
30
|
-
<div className='w-10 h-10 flex items-center justify-center'><AuthWidget noLogin className=''/></div>
|
|
31
|
-
</div>
|
|
32
|
-
<CartAccordian
|
|
33
|
-
icon={
|
|
34
|
-
<BagButton
|
|
35
|
-
animateOnHover={false}
|
|
36
|
-
showIfEmpty
|
|
37
|
-
size='sm'
|
|
38
|
-
className='mr-1 relative w-5 h-6 sm:w-6 sm:h-7'
|
|
39
|
-
iconClx='fill-foreground'
|
|
40
|
-
/>
|
|
41
|
-
}
|
|
42
|
-
className='flex items-center justify-center w-full'
|
|
43
|
-
/>
|
|
44
|
-
<StepIndicator
|
|
45
|
-
dotSizeRem={1}
|
|
46
|
-
steps={stepNames}
|
|
47
|
-
currentStep={index}
|
|
48
|
-
className='text-xs font-semibold w-full pb-3'
|
|
49
|
-
/>
|
|
50
|
-
{children}
|
|
51
|
-
<LinksRow className='mt-auto mb-3 pt-2' />
|
|
52
|
-
</div>
|
|
53
|
-
)
|
|
54
|
-
|
|
1
|
+
'use client'
|
|
2
|
+
import React, { type PropsWithChildren } from 'react'
|
|
3
|
+
|
|
4
|
+
import { StepIndicator } from '@hanzo/ui/primitives'
|
|
5
|
+
import { cn } from '@hanzo/ui/util'
|
|
6
|
+
import { AuthWidget } from '@hanzo/auth/components'
|
|
7
|
+
import { CartAccordian } from '@hanzo/commerce'
|
|
8
|
+
|
|
9
|
+
import { Logo } from '../..'
|
|
10
|
+
import BagButton from '../bag-button'
|
|
11
|
+
import LinksRow from './links-row'
|
|
12
|
+
|
|
13
|
+
const MobileCheckoutPanel: React.FC<PropsWithChildren & {
|
|
14
|
+
index: number
|
|
15
|
+
stepNames: string[]
|
|
16
|
+
close:() => void
|
|
17
|
+
className?: string
|
|
18
|
+
}> = ({
|
|
19
|
+
index,
|
|
20
|
+
stepNames,
|
|
21
|
+
close,
|
|
22
|
+
className='',
|
|
23
|
+
children
|
|
24
|
+
}) => (
|
|
25
|
+
|
|
26
|
+
<div /* id='MOBILE_GRID' */ className={cn('bg-background flex flex-col justify-start px-4', className)}>
|
|
27
|
+
<div className='sticky top-0 w-full flex flex-row justify-between items-center bg-background'>
|
|
28
|
+
<Logo onClick={close} size='xs' href='/' />
|
|
29
|
+
{/* Need wrapper div since 'noLogin' returns null if no logged in user */}
|
|
30
|
+
<div className='w-10 h-10 flex items-center justify-center'><AuthWidget noLogin className=''/></div>
|
|
31
|
+
</div>
|
|
32
|
+
<CartAccordian
|
|
33
|
+
icon={
|
|
34
|
+
<BagButton
|
|
35
|
+
animateOnHover={false}
|
|
36
|
+
showIfEmpty
|
|
37
|
+
size='sm'
|
|
38
|
+
className='mr-1 relative w-5 h-6 sm:w-6 sm:h-7'
|
|
39
|
+
iconClx='fill-foreground'
|
|
40
|
+
/>
|
|
41
|
+
}
|
|
42
|
+
className='flex items-center justify-center w-full'
|
|
43
|
+
/>
|
|
44
|
+
<StepIndicator
|
|
45
|
+
dotSizeRem={1}
|
|
46
|
+
steps={stepNames}
|
|
47
|
+
currentStep={index}
|
|
48
|
+
className='text-xs font-semibold w-full pb-3'
|
|
49
|
+
/>
|
|
50
|
+
{children}
|
|
51
|
+
<LinksRow className='mt-auto mb-3 pt-2' />
|
|
52
|
+
</div>
|
|
53
|
+
)
|
|
54
|
+
|
|
55
55
|
export default MobileCheckoutPanel
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Breadcrumb,
|
|
3
|
-
BreadcrumbItem,
|
|
4
|
-
BreadcrumbLink,
|
|
5
|
-
BreadcrumbList,
|
|
6
|
-
BreadcrumbSeparator
|
|
7
|
-
} from '@hanzo/ui/primitives'
|
|
8
|
-
import { cn } from '@hanzo/ui/util'
|
|
9
|
-
|
|
10
|
-
const StepsIndicator: React.FC<{
|
|
11
|
-
currentStep: number
|
|
12
|
-
stepNames: string[]
|
|
13
|
-
className?: string
|
|
14
|
-
}> = ({
|
|
15
|
-
currentStep,
|
|
16
|
-
stepNames,
|
|
17
|
-
className=''
|
|
18
|
-
}) => (
|
|
19
|
-
<Breadcrumb className={className}>
|
|
20
|
-
<BreadcrumbList>
|
|
21
|
-
{stepNames.map((name, i) => (
|
|
22
|
-
<>
|
|
23
|
-
<BreadcrumbItem key={`item-${i}`}>
|
|
24
|
-
<BreadcrumbLink className={cn(
|
|
25
|
-
currentStep >= i ? '!text-foreground hover:text-foreground' : 'hover:text-muted-2',
|
|
26
|
-
'text-xxs sm:text-sm'
|
|
27
|
-
)}
|
|
28
|
-
>
|
|
29
|
-
{name}
|
|
30
|
-
</BreadcrumbLink>
|
|
31
|
-
</BreadcrumbItem>
|
|
32
|
-
{i !== stepNames.length - 1 && <BreadcrumbSeparator key={`sep-${i}`}/>}
|
|
33
|
-
</>
|
|
34
|
-
))}
|
|
35
|
-
</BreadcrumbList>
|
|
36
|
-
</Breadcrumb>
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
export default StepsIndicator
|
|
1
|
+
import {
|
|
2
|
+
Breadcrumb,
|
|
3
|
+
BreadcrumbItem,
|
|
4
|
+
BreadcrumbLink,
|
|
5
|
+
BreadcrumbList,
|
|
6
|
+
BreadcrumbSeparator
|
|
7
|
+
} from '@hanzo/ui/primitives'
|
|
8
|
+
import { cn } from '@hanzo/ui/util'
|
|
9
|
+
|
|
10
|
+
const StepsIndicator: React.FC<{
|
|
11
|
+
currentStep: number
|
|
12
|
+
stepNames: string[]
|
|
13
|
+
className?: string
|
|
14
|
+
}> = ({
|
|
15
|
+
currentStep,
|
|
16
|
+
stepNames,
|
|
17
|
+
className=''
|
|
18
|
+
}) => (
|
|
19
|
+
<Breadcrumb className={className}>
|
|
20
|
+
<BreadcrumbList>
|
|
21
|
+
{stepNames.map((name, i) => (
|
|
22
|
+
<>
|
|
23
|
+
<BreadcrumbItem key={`item-${i}`}>
|
|
24
|
+
<BreadcrumbLink className={cn(
|
|
25
|
+
currentStep >= i ? '!text-foreground hover:text-foreground' : 'hover:text-muted-2',
|
|
26
|
+
'text-xxs sm:text-sm'
|
|
27
|
+
)}
|
|
28
|
+
>
|
|
29
|
+
{name}
|
|
30
|
+
</BreadcrumbLink>
|
|
31
|
+
</BreadcrumbItem>
|
|
32
|
+
{i !== stepNames.length - 1 && <BreadcrumbSeparator key={`sep-${i}`}/>}
|
|
33
|
+
</>
|
|
34
|
+
))}
|
|
35
|
+
</BreadcrumbList>
|
|
36
|
+
</Breadcrumb>
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
export default StepsIndicator
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import Link from 'next/link'
|
|
3
|
-
|
|
4
|
-
import { ApplyTypography } from '@hanzo/ui/primitives'
|
|
5
|
-
|
|
6
|
-
import type { CheckoutStepComponentProps } from '@hanzo/commerce/types'
|
|
7
|
-
|
|
8
|
-
const ThankYou: React.FC<CheckoutStepComponentProps> = ({}) => (
|
|
9
|
-
<ApplyTypography className='flex flex-col gap-4 text-center mt-10'>
|
|
10
|
-
<h3>Thank you for your order!</h3>
|
|
11
|
-
<h6>Once your payment has been confirmed, you'll recieve an email with additional information.</h6>
|
|
12
|
-
<p>
|
|
13
|
-
While you wait, we cordially invite you to join the <Link href='https://warpcast.com/~/channel/lux'>Lux Channel</Link> on <Link href='https://warpcast.com/~/invite-page/227706?id=fbc9ca91'>Warpcast</Link>.
|
|
14
|
-
</p>
|
|
15
|
-
</ApplyTypography>
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
export default ThankYou
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import Link from 'next/link'
|
|
3
|
+
|
|
4
|
+
import { ApplyTypography } from '@hanzo/ui/primitives'
|
|
5
|
+
|
|
6
|
+
import type { CheckoutStepComponentProps } from '@hanzo/commerce/types'
|
|
7
|
+
|
|
8
|
+
const ThankYou: React.FC<CheckoutStepComponentProps> = ({}) => (
|
|
9
|
+
<ApplyTypography className='flex flex-col gap-4 text-center mt-10'>
|
|
10
|
+
<h3>Thank you for your order!</h3>
|
|
11
|
+
<h6>Once your payment has been confirmed, you'll recieve an email with additional information.</h6>
|
|
12
|
+
<p>
|
|
13
|
+
While you wait, we cordially invite you to join the <Link href='https://warpcast.com/~/channel/lux'>Lux Channel</Link> on <Link href='https://warpcast.com/~/invite-page/227706?id=fbc9ca91'>Warpcast</Link>.
|
|
14
|
+
</p>
|
|
15
|
+
</ApplyTypography>
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
export default ThankYou
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
itemImgConstraint: { w: 40, h: 24 },
|
|
3
|
-
animDurationMs: 400,
|
|
4
|
-
animTimingFn: 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
5
|
-
compWidthClx: {
|
|
6
|
-
checkout: 'w-pr-40',
|
|
7
|
-
itemInfo: 'w-pr-60'
|
|
8
|
-
},
|
|
9
|
-
shadowStyle: {
|
|
10
|
-
border: '1px solid rgb(100 100 100)',
|
|
11
|
-
boxShadow: '2px 4px 4px -3px rgb(125 125 125 / 0.7), 4px -4px 8px -4px rgb(125 125 125 / 0.7)'
|
|
12
|
-
}
|
|
13
|
-
}
|
|
1
|
+
export default {
|
|
2
|
+
itemImgConstraint: { w: 40, h: 24 },
|
|
3
|
+
animDurationMs: 400,
|
|
4
|
+
animTimingFn: 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
5
|
+
compWidthClx: {
|
|
6
|
+
checkout: 'w-pr-40',
|
|
7
|
+
itemInfo: 'w-pr-60'
|
|
8
|
+
},
|
|
9
|
+
shadowStyle: {
|
|
10
|
+
border: '1px solid rgb(100 100 100)',
|
|
11
|
+
boxShadow: '2px 4px 4px -3px rgb(125 125 125 / 0.7), 4px -4px 8px -4px rgb(125 125 125 / 0.7)'
|
|
12
|
+
}
|
|
13
|
+
}
|