@luxfi/core 5.2.8 → 5.2.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +126 -126
  3. package/commerce/ui/store.ts +304 -304
  4. package/components/access-code-input.tsx +71 -71
  5. package/components/auth/auth-listener.tsx +29 -29
  6. package/components/auth/auth-token/clear-auth-token.tsx +12 -12
  7. package/components/auth/auth-token/set-auth-token.tsx +16 -16
  8. package/components/auth/common-auth-domains.ts +16 -16
  9. package/components/auth/login-panel.tsx +107 -107
  10. package/components/back-button.tsx +42 -42
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/add-widget.tsx +20 -20
  13. package/components/commerce/bag-button.tsx +98 -98
  14. package/components/commerce/buy-button.tsx +34 -34
  15. package/components/commerce/checkout-button.tsx +129 -129
  16. package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -36
  17. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +84 -84
  18. package/components/commerce/checkout-panel/index.tsx +129 -129
  19. package/components/commerce/checkout-panel/links-row.tsx +21 -21
  20. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +54 -54
  21. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  22. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  23. package/components/commerce/checkout-widget/const.ts +13 -13
  24. package/components/commerce/checkout-widget/index.tsx +192 -192
  25. package/components/commerce/checkout-widget/obs-string-set.ts +48 -48
  26. package/components/commerce/checkout-widget/use-anim-clx-set.ts +58 -58
  27. package/components/commerce/desktop-bag-popup.tsx +78 -78
  28. package/components/commerce/desktop-nav-menu.tsx +131 -130
  29. package/components/commerce/drawer/index.tsx +99 -99
  30. package/components/commerce/drawer/micro.tsx +144 -144
  31. package/components/commerce/drawer/shell.tsx +85 -85
  32. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  33. package/components/commerce/mobile-login-button.tsx +101 -101
  34. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  35. package/components/commerce/mobile-nav-menu-ai.tsx +48 -42
  36. package/components/commerce/mobile-nav-menu-item.tsx +49 -49
  37. package/components/commerce/mobile-nav-menu.tsx +102 -68
  38. package/components/contact-dialog/contact-form.tsx +113 -113
  39. package/components/contact-dialog/disclaimer.tsx +13 -13
  40. package/components/contact-dialog/index.tsx +64 -64
  41. package/components/copyright.tsx +21 -21
  42. package/components/drawer-margin.tsx +25 -25
  43. package/components/footer.tsx +77 -77
  44. package/components/header/desktop.tsx +50 -49
  45. package/components/header/index.tsx +52 -52
  46. package/components/header/mobile.tsx +163 -163
  47. package/components/header/theme-toggle.tsx +26 -26
  48. package/components/icons/24k-gold-card.tsx +43 -0
  49. package/components/icons/ai-chat.tsx +29 -0
  50. package/components/icons/anodized-titanium.tsx +45 -0
  51. package/components/icons/avatar.tsx +11 -11
  52. package/components/icons/bag-icon.tsx +10 -10
  53. package/components/icons/blog.tsx +20 -0
  54. package/components/icons/bridge.tsx +68 -0
  55. package/components/icons/changelog.tsx +21 -0
  56. package/components/icons/chrome.tsx +45 -0
  57. package/components/icons/coins.tsx +20 -0
  58. package/components/icons/compare-cards.tsx +21 -0
  59. package/components/icons/credit.tsx +20 -0
  60. package/components/icons/customer-support.tsx +21 -0
  61. package/components/icons/customers.tsx +33 -0
  62. package/components/icons/developer-docs.tsx +20 -0
  63. package/components/icons/exchange.tsx +21 -0
  64. package/components/icons/explorer.tsx +22 -0
  65. package/components/icons/faqs.tsx +21 -0
  66. package/components/icons/github.tsx +14 -14
  67. package/components/icons/guides.tsx +21 -0
  68. package/components/icons/gun-metal.tsx +44 -0
  69. package/components/icons/index.tsx +43 -43
  70. package/components/icons/integrations.tsx +25 -0
  71. package/components/icons/irradescent.tsx +41 -0
  72. package/components/icons/launch-subnet.tsx +21 -0
  73. package/components/icons/left-arrow.tsx +11 -11
  74. package/components/icons/lux-finance.tsx +23 -0
  75. package/components/icons/lux-logo.tsx +10 -10
  76. package/components/icons/lux-pass.tsx +25 -0
  77. package/components/icons/lux-quests.tsx +21 -0
  78. package/components/icons/market.tsx +24 -0
  79. package/components/icons/mirrored-titanium.tsx +46 -0
  80. package/components/icons/more-benefits.tsx +21 -0
  81. package/components/icons/open-source.tsx +26 -0
  82. package/components/icons/right-arrow.tsx +10 -10
  83. package/components/icons/safe.tsx +37 -0
  84. package/components/icons/search.tsx +12 -12
  85. package/components/icons/secure-delivery.tsx +13 -13
  86. package/components/icons/shop.tsx +20 -0
  87. package/components/icons/social-icon.tsx +35 -35
  88. package/components/icons/social-svg.css +3 -3
  89. package/components/icons/sterling-silver-card.tsx +44 -0
  90. package/components/icons/templates.tsx +21 -0
  91. package/components/icons/validators.tsx +41 -0
  92. package/components/icons/view-all-card.tsx +20 -0
  93. package/components/icons/wallet.tsx +20 -0
  94. package/components/icons/warpcast.tsx +58 -58
  95. package/components/icons/youtube-logo.tsx +59 -59
  96. package/components/index.ts +27 -27
  97. package/components/logo.tsx +89 -89
  98. package/components/main.tsx +27 -27
  99. package/components/mini-chart/index.tsx +7 -7
  100. package/components/mini-chart/mini-chart-props.ts +43 -43
  101. package/components/mini-chart/mini-chart.tsx +85 -85
  102. package/components/mini-chart/wrapper.tsx +23 -23
  103. package/components/not-found/index.tsx +28 -28
  104. package/components/not-found/not-found-content.mdx +5 -5
  105. package/components/scripts.tsx +24 -24
  106. package/components/tooltip.tsx +31 -31
  107. package/environment.d.ts +5 -5
  108. package/next/analytics/fpixel.ts +15 -15
  109. package/next/analytics/google-analytics.ts +13 -13
  110. package/next/analytics/index.ts +3 -3
  111. package/next/analytics/pixel-analytics.tsx +54 -54
  112. package/next/font/get-app-router-font-classes.ts +12 -12
  113. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  114. package/next/font/next-font-desc.ts +27 -27
  115. package/next/font/pages-router-font-vars.tsx +18 -18
  116. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  117. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  118. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  119. package/next/head-metadata/index.tsx +208 -208
  120. package/next/middleware/determine-device-mw.ts +16 -16
  121. package/package.json +79 -79
  122. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  123. package/root-layout/index.tsx +112 -112
  124. package/server-actions/firebase-app.ts +14 -14
  125. package/server-actions/index.ts +5 -5
  126. package/server-actions/store-contact.ts +51 -51
  127. package/site-def/footer/community.tsx +67 -67
  128. package/site-def/footer/company.ts +37 -37
  129. package/site-def/footer/ecosystem.ts +37 -37
  130. package/site-def/footer/index.tsx +26 -26
  131. package/site-def/footer/legal.ts +28 -28
  132. package/site-def/footer/network.ts +45 -45
  133. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  134. package/site-def/index.ts +2 -2
  135. package/site-def/main-nav.tsx +392 -338
  136. package/style/cart-animation.css +29 -29
  137. package/style/checkout-animation.css +23 -23
  138. package/style/drawer-handle-overrides.css +160 -160
  139. package/style/lux-colors.css +85 -85
  140. package/style/lux-global.css +30 -30
  141. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  142. package/tailwind/index.ts +2 -2
  143. package/tailwind/lux-tw-fonts.ts +39 -39
  144. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  145. package/tsconfig.json +15 -15
  146. package/types/chatbot-config.ts +6 -6
  147. package/types/chatbot-suggested-question.ts +7 -7
  148. package/types/contact-info.ts +10 -10
  149. package/types/index.ts +4 -4
  150. 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
+ }