@luxfi/core 5.1.3 → 5.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/commerce/AUTO-GEN-bullion-by-family.json +33 -33
  2. package/commerce/EDIT-ME-bullion-market-prices.ts +11 -11
  3. package/commerce/assign-prices.ts +49 -49
  4. package/commerce/assign-videos-by-family-group.ts +14 -14
  5. package/commerce/bullion-price-1oz.ts +5 -5
  6. package/commerce/index.ts +18 -18
  7. package/commerce/lux-service-options.ts +6 -6
  8. package/components/access-code-input.tsx +71 -71
  9. package/components/auth/auth-listener.tsx +29 -29
  10. package/components/auth/auth-token/clear-auth-token.tsx +12 -12
  11. package/components/auth/auth-token/set-auth-token.tsx +16 -16
  12. package/components/auth/common-auth-domains.ts +16 -16
  13. package/components/auth/login-panel.tsx +104 -104
  14. package/components/chat-widget.tsx +80 -80
  15. package/components/commerce/bag-button.tsx +98 -98
  16. package/components/commerce/buy-drawer/drawer.tsx +44 -44
  17. package/components/commerce/buy-drawer/index.tsx +46 -46
  18. package/components/commerce/checkout-button.tsx +116 -116
  19. package/components/commerce/checkout-panel/close-button.tsx +26 -26
  20. package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -36
  21. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +66 -66
  22. package/components/commerce/checkout-panel/index.tsx +123 -123
  23. package/components/commerce/checkout-panel/links-row.tsx +21 -21
  24. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +54 -54
  25. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  26. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  27. package/components/commerce/checkout-widget/const.ts +13 -13
  28. package/components/commerce/checkout-widget/index.tsx +86 -86
  29. package/components/commerce/checkout-widget/obs-string-set.ts +48 -48
  30. package/components/commerce/checkout-widget/use-anim-clx-set.ts +56 -56
  31. package/components/commerce/checkout-widget/use-lagging-item-ref.ts +29 -29
  32. package/components/commerce/desktop-bag-popup.tsx +78 -78
  33. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  34. package/components/commerce/mobile-login-button.tsx +101 -0
  35. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  36. package/components/commerce/mobile-nav-menu-ai.tsx +98 -0
  37. package/components/commerce/mobile-nav-menu-item.tsx +46 -0
  38. package/components/commerce/mobile-nav-menu.tsx +79 -64
  39. package/components/contact-dialog/contact-form.tsx +112 -112
  40. package/components/contact-dialog/disclaimer.tsx +13 -13
  41. package/components/contact-dialog/index.tsx +64 -64
  42. package/components/copyright.tsx +21 -21
  43. package/components/footer.tsx +77 -77
  44. package/components/header/desktop.tsx +54 -54
  45. package/components/header/guts.tsx +27 -0
  46. package/components/header/index.tsx +47 -26
  47. package/components/header/mobile.tsx +165 -161
  48. package/components/header/theme-toggle.tsx +26 -26
  49. package/components/icons/avatar.tsx +11 -0
  50. package/components/icons/bag-icon.tsx +10 -10
  51. package/components/icons/github.tsx +14 -14
  52. package/components/icons/index.tsx +43 -35
  53. package/components/icons/left-arrow.tsx +11 -0
  54. package/components/icons/lux-logo.tsx +10 -10
  55. package/components/icons/right-arrow.tsx +10 -0
  56. package/components/icons/search.tsx +12 -0
  57. package/components/icons/secure-delivery.tsx +13 -13
  58. package/components/icons/social-icon.tsx +35 -35
  59. package/components/icons/social-svg.css +3 -3
  60. package/components/icons/youtube-logo.tsx +59 -59
  61. package/components/index.ts +27 -27
  62. package/components/logo.tsx +81 -81
  63. package/components/mini-chart/index.tsx +7 -7
  64. package/components/mini-chart/mini-chart-props.ts +43 -43
  65. package/components/mini-chart/mini-chart.tsx +85 -85
  66. package/components/mini-chart/wrapper.tsx +23 -23
  67. package/components/not-found/index.tsx +27 -27
  68. package/components/not-found/not-found-content.mdx +5 -5
  69. package/components/scripts.tsx +24 -24
  70. package/conf/index.ts +50 -50
  71. package/environment.d.ts +5 -5
  72. package/next/analytics/fpixel.ts +15 -15
  73. package/next/analytics/google-analytics.ts +13 -13
  74. package/next/analytics/index.ts +3 -3
  75. package/next/analytics/pixel-analytics.tsx +54 -54
  76. package/next/font/get-app-router-font-classes.ts +12 -12
  77. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  78. package/next/font/next-font-desc.ts +27 -27
  79. package/next/font/pages-router-font-vars.tsx +18 -18
  80. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  81. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  82. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  83. package/next/head-metadata/index.tsx +208 -208
  84. package/next/middleware/determine-device-mw.ts +16 -16
  85. package/package.json +73 -72
  86. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  87. package/root-layout/index.tsx +121 -120
  88. package/server-actions/firebase-app.ts +14 -14
  89. package/server-actions/index.ts +5 -5
  90. package/server-actions/store-contact.ts +51 -51
  91. package/site-def/footer/community.tsx +67 -67
  92. package/site-def/footer/company.ts +37 -37
  93. package/site-def/footer/ecosystem.ts +37 -37
  94. package/site-def/footer/index.tsx +26 -26
  95. package/site-def/footer/legal.ts +28 -28
  96. package/site-def/footer/network.ts +45 -45
  97. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  98. package/site-def/index.ts +2 -2
  99. package/site-def/main-nav.tsx +292 -0
  100. package/style/cart-animation.css +29 -29
  101. package/style/checkout-animation.css +23 -23
  102. package/style/lux-colors.css +85 -85
  103. package/style/lux-global.css +30 -30
  104. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  105. package/tailwind/index.ts +2 -2
  106. package/tailwind/lux-tw-fonts.ts +39 -39
  107. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  108. package/tsconfig.json +10 -28
  109. package/types/chatbot-config.ts +6 -6
  110. package/types/chatbot-suggested-question.ts +7 -7
  111. package/types/commerce-config.ts +10 -10
  112. package/types/contact-info.ts +10 -10
  113. package/types/index.ts +5 -5
  114. package/types/site-def.ts +45 -45
  115. package/site-def/main-nav.ts +0 -35
@@ -1,46 +1,46 @@
1
- 'use client'
2
- import React from 'react'
3
- import { useRouter } from 'next/navigation'
4
- import { observer } from 'mobx-react-lite'
5
-
6
- import { useCommerceUI, CarouselBuyCard } from '@hanzo/commerce'
7
-
8
- import CommerceDrawer from './drawer'
9
- import CheckoutButton from '../checkout-button'
10
-
11
- const CommerceUIComponent: React.FC = observer(() => {
12
-
13
- const ui = useCommerceUI()
14
- const router = useRouter()
15
-
16
- const handleCheckout = () => {
17
- router.push('/checkout')
18
- }
19
-
20
- // Should only ever be called internally to close
21
- const reallyOnlyCloseDrawer = (b: boolean) => {
22
- if (!b ) {
23
- ui.hideBuyOptions()
24
- }
25
- }
26
-
27
- return (
28
- <CommerceDrawer
29
- open={!!ui.buyOptionsSkuPath}
30
- setOpen={reallyOnlyCloseDrawer}
31
- drawerClx={'w-full md:max-w-[550px] md:mx-auto lg:max-w-[50vw]'}
32
- >
33
- <CarouselBuyCard
34
- skuPath={ui.buyOptionsSkuPath!}
35
- checkoutButton={
36
- <CheckoutButton handleCheckout={handleCheckout} className='w-full min-w-[160px] sm:max-w-[320px]'/>
37
- }
38
- clx='w-full'
39
- addBtnClx='w-full min-w-[160px] sm:max-w-[320px]'
40
- selectorClx='max-w-[475px]'
41
- />
42
- </CommerceDrawer>
43
- )
44
- })
45
-
46
- export default CommerceUIComponent
1
+ 'use client'
2
+ import React from 'react'
3
+ import { useRouter } from 'next/navigation'
4
+ import { observer } from 'mobx-react-lite'
5
+
6
+ import { useCommerceUI, CarouselBuyCard } from '@hanzo/commerce'
7
+
8
+ import CommerceDrawer from './drawer'
9
+ import CheckoutButton from '../checkout-button'
10
+
11
+ const CommerceUIComponent: React.FC = observer(() => {
12
+
13
+ const ui = useCommerceUI()
14
+ const router = useRouter()
15
+
16
+ const handleCheckout = () => {
17
+ router.push('/checkout')
18
+ }
19
+
20
+ // Should only ever be called internally to close
21
+ const reallyOnlyCloseDrawer = (b: boolean) => {
22
+ if (!b ) {
23
+ ui.hideBuyOptions()
24
+ }
25
+ }
26
+
27
+ return (
28
+ <CommerceDrawer
29
+ open={!!ui.buyOptionsSkuPath}
30
+ setOpen={reallyOnlyCloseDrawer}
31
+ drawerClx={'w-full md:max-w-[550px] md:mx-auto lg:max-w-[50vw]'}
32
+ >
33
+ <CarouselBuyCard
34
+ skuPath={ui.buyOptionsSkuPath!}
35
+ checkoutButton={
36
+ <CheckoutButton handleCheckout={handleCheckout} className='w-full min-w-[160px] sm:max-w-[320px]'/>
37
+ }
38
+ clx='w-full'
39
+ addBtnClx='w-full min-w-[160px] sm:max-w-[320px]'
40
+ selectorClx='max-w-[475px]'
41
+ />
42
+ </CommerceDrawer>
43
+ )
44
+ })
45
+
46
+ export default CommerceUIComponent
@@ -1,116 +1,116 @@
1
- 'use client'
2
- import React, { useEffect, useRef } from 'react'
3
- import { observable, type IObservableValue, reaction } from 'mobx'
4
- import { observer } from 'mobx-react-lite'
5
- import { type LucideProps } from 'lucide-react'
6
-
7
- import { Button, type ButtonProps } from '@hanzo/ui/primitives'
8
- import { cn } from '@hanzo/ui/util'
9
- import { useCommerce } from '@hanzo/commerce'
10
-
11
- import * as Icons from '../icons'
12
-
13
- const IconAndQuantity: React.FC<{
14
- animateOnQuantityChange?: boolean
15
- clx?: string
16
- iconClx?: string
17
- digitClx?: string
18
- }> = observer(({
19
- animateOnQuantityChange=true,
20
- clx='',
21
- iconClx='',
22
- digitClx=''
23
- }) => {
24
-
25
- const cmmc = useCommerce()
26
- const wiggleRef = useRef<IObservableValue<'more' | 'less' | 'none'>>(observable.box('none'))
27
-
28
- useEffect(() => (
29
- // return IReactionDisposer
30
- animateOnQuantityChange ? reaction(
31
- () => (cmmc.cartQuantity),
32
- (curr, prev) => {
33
- if (curr > prev) {
34
- wiggleRef.current.set('more')
35
- }
36
- else {
37
- wiggleRef.current.set('less')
38
- }
39
- setTimeout(() => {
40
- // Note that this doesn't actually stop the animation
41
- // just resets the styles
42
- wiggleRef.current.set('none')
43
- }, 800)
44
- }
45
- ) : undefined
46
- ), [])
47
-
48
- return (
49
- <div className={cn('flex items-center justify-center', clx)}>
50
- <div className={cn(
51
- 'relative flex items-center justify-center mr-1',
52
- ((wiggleRef.current.get() === 'more') ?
53
- 'item-added-to-cart-animation'
54
- :
55
- (wiggleRef.current.get() === 'less') ? 'item-removed-from-cart-animation' : ''),
56
- )} >
57
- {cmmc.cartQuantity > 0 && (
58
- <div className={cn(
59
- 'z-above-content flex flex-col justify-center items-center',
60
- 'absolute left-0 right-0 top-0 bottom-0',
61
- digitClx
62
- )}>
63
- <div style={{color: 'white' /* tailwind bug? */, fontSize: '11px', position: 'relative', top: '1px' }}>{cmmc.cartQuantity}</div>
64
- </div>
65
- )}
66
- <Icons.bag width='19' height='24' className={cn('relative -top-[3px] opacity-70' , iconClx)} aria-hidden="true" />
67
- </div>
68
- <span style={{fontSize: '17px',}}>&rsaquo;</span>
69
- </div>
70
- )
71
- })
72
-
73
- const CheckoutButton: React.FC<ButtonProps & {
74
- handleCheckout: () => void
75
- showQuantity?: boolean
76
- animateOnQuantityChange?: boolean
77
- centerText?: boolean
78
- }> = ({
79
- handleCheckout,
80
- variant='primary',
81
- rounded='lg',
82
- className,
83
- showQuantity=true,
84
- animateOnQuantityChange=true,
85
- centerText=true,
86
- ...rest
87
- }) => {
88
-
89
- return (
90
- <Button
91
- {...rest}
92
- onClick={handleCheckout}
93
- variant={variant}
94
- rounded={rounded}
95
- className={cn(
96
- className,
97
- 'flex justify-between items-stretch',
98
- showQuantity ? (centerText ? 'px-1.5' : 'pl-2.5 pr-1.5') : ''
99
- )}
100
- >
101
- {showQuantity && centerText && (
102
- <IconAndQuantity clx='invisible' />
103
- )}
104
- <div className='flex justify-center items-center'>Checkout</div>
105
- {showQuantity && (
106
- <IconAndQuantity
107
- animateOnQuantityChange={animateOnQuantityChange}
108
- iconClx='fill-fg-foreground'
109
- digitClx='text-primary-fg leading-none font-bold font-sans'
110
- />
111
- )}
112
- </Button>
113
- )
114
- }
115
-
116
- export default CheckoutButton
1
+ 'use client'
2
+ import React, { useEffect, useRef } from 'react'
3
+ import { observable, type IObservableValue, reaction } from 'mobx'
4
+ import { observer } from 'mobx-react-lite'
5
+ import { type LucideProps } from 'lucide-react'
6
+
7
+ import { Button, type ButtonProps } from '@hanzo/ui/primitives'
8
+ import { cn } from '@hanzo/ui/util'
9
+ import { useCommerce } from '@hanzo/commerce'
10
+
11
+ import * as Icons from '../icons'
12
+
13
+ const IconAndQuantity: React.FC<{
14
+ animateOnQuantityChange?: boolean
15
+ clx?: string
16
+ iconClx?: string
17
+ digitClx?: string
18
+ }> = observer(({
19
+ animateOnQuantityChange=true,
20
+ clx='',
21
+ iconClx='',
22
+ digitClx=''
23
+ }) => {
24
+
25
+ const cmmc = useCommerce()
26
+ const wiggleRef = useRef<IObservableValue<'more' | 'less' | 'none'>>(observable.box('none'))
27
+
28
+ useEffect(() => (
29
+ // return IReactionDisposer
30
+ animateOnQuantityChange ? reaction(
31
+ () => (cmmc.cartQuantity),
32
+ (curr, prev) => {
33
+ if (curr > prev) {
34
+ wiggleRef.current.set('more')
35
+ }
36
+ else {
37
+ wiggleRef.current.set('less')
38
+ }
39
+ setTimeout(() => {
40
+ // Note that this doesn't actually stop the animation
41
+ // just resets the styles
42
+ wiggleRef.current.set('none')
43
+ }, 800)
44
+ }
45
+ ) : undefined
46
+ ), [])
47
+
48
+ return (
49
+ <div className={cn('flex items-center justify-center', clx)}>
50
+ <div className={cn(
51
+ 'relative flex items-center justify-center mr-1',
52
+ ((wiggleRef.current.get() === 'more') ?
53
+ 'item-added-to-cart-animation'
54
+ :
55
+ (wiggleRef.current.get() === 'less') ? 'item-removed-from-cart-animation' : ''),
56
+ )} >
57
+ {cmmc.cartQuantity > 0 && (
58
+ <div className={cn(
59
+ 'z-above-content flex flex-col justify-center items-center',
60
+ 'absolute left-0 right-0 top-0 bottom-0',
61
+ digitClx
62
+ )}>
63
+ <div style={{color: 'white' /* tailwind bug? */, fontSize: '11px', position: 'relative', top: '1px' }}>{cmmc.cartQuantity}</div>
64
+ </div>
65
+ )}
66
+ <Icons.bag width='19' height='24' className={cn('relative -top-[3px] opacity-70' , iconClx)} aria-hidden="true" />
67
+ </div>
68
+ <span style={{fontSize: '17px',}}>&rsaquo;</span>
69
+ </div>
70
+ )
71
+ })
72
+
73
+ const CheckoutButton: React.FC<ButtonProps & {
74
+ handleCheckout: () => void
75
+ showQuantity?: boolean
76
+ animateOnQuantityChange?: boolean
77
+ centerText?: boolean
78
+ }> = ({
79
+ handleCheckout,
80
+ variant='primary',
81
+ rounded='lg',
82
+ className,
83
+ showQuantity=true,
84
+ animateOnQuantityChange=true,
85
+ centerText=true,
86
+ ...rest
87
+ }) => {
88
+
89
+ return (
90
+ <Button
91
+ {...rest}
92
+ onClick={handleCheckout}
93
+ variant={variant}
94
+ rounded={rounded}
95
+ className={cn(
96
+ className,
97
+ 'flex justify-between items-stretch',
98
+ showQuantity ? (centerText ? 'px-1.5' : 'pl-2.5 pr-1.5') : ''
99
+ )}
100
+ >
101
+ {showQuantity && centerText && (
102
+ <IconAndQuantity clx='invisible' />
103
+ )}
104
+ <div className='flex justify-center items-center'>Checkout</div>
105
+ {showQuantity && (
106
+ <IconAndQuantity
107
+ animateOnQuantityChange={animateOnQuantityChange}
108
+ iconClx='fill-fg-foreground'
109
+ digitClx='text-primary-fg leading-none font-bold font-sans'
110
+ />
111
+ )}
112
+ </Button>
113
+ )
114
+ }
115
+
116
+ export default CheckoutButton
@@ -1,26 +1,26 @@
1
- 'use client'
2
- import React from 'react'
3
-
4
- import { cn } from '@hanzo/ui/util'
5
-
6
- import Logo from '../../logo'
7
- import type { TShirtSize } from '@hanzo/ui/types'
8
-
9
- const CloseButton: React.FC<{
10
- close: () => void
11
- size?: TShirtSize
12
- className?: string
13
- }> = ({
14
- close,
15
- size,
16
- className=''
17
- }) => (
18
- <div
19
- onClick={close}
20
- className={cn('md:self-start', className)}
21
- >
22
- <Logo layout='text-only' href='/' size={size}/>
23
- </div>
24
- )
25
-
26
- export default CloseButton
1
+ 'use client'
2
+ import React from 'react'
3
+
4
+ import { cn } from '@hanzo/ui/util'
5
+
6
+ import Logo from '../../logo'
7
+ import type { TShirtSize } from '@hanzo/ui/types'
8
+
9
+ const CloseButton: React.FC<{
10
+ close: () => void
11
+ size?: TShirtSize
12
+ className?: string
13
+ }> = ({
14
+ close,
15
+ size,
16
+ className=''
17
+ }) => (
18
+ <div
19
+ onClick={close}
20
+ className={cn('md:self-start', className)}
21
+ >
22
+ <Logo layout='text-only' href='/' size={size}/>
23
+ </div>
24
+ )
25
+
26
+ export default CloseButton
@@ -1,36 +1,36 @@
1
- 'use client'
2
- import React from 'react'
3
- import { observer } from 'mobx-react-lite'
4
-
5
- import {
6
- useCommerce,
7
- CarouselItemSelector,
8
- type CarouselItemSelectorPropsExt
9
- } from '@hanzo/commerce'
10
-
11
- const DesktopBagCarousel: React.FC<{
12
- constrainTo: {w: number, h: number}
13
- className?: string
14
- }> = observer(({
15
- constrainTo,
16
- className=''
17
-
18
- }) => {
19
- const cmmc = useCommerce()
20
- return (
21
- <CarouselItemSelector
22
- items={cmmc.cartItems}
23
- selectedItemRef={cmmc}
24
- scrollable={false} // ignored
25
- selectSku={cmmc.setCurrentItem.bind(cmmc)}
26
- clx={className}
27
- ext={{
28
- options: {loop: true},
29
- constrainTo,
30
- imageOnly: true
31
- } satisfies CarouselItemSelectorPropsExt}
32
- />
33
- )
34
- })
35
-
36
- export default DesktopBagCarousel
1
+ 'use client'
2
+ import React from 'react'
3
+ import { observer } from 'mobx-react-lite'
4
+
5
+ import {
6
+ useCommerce,
7
+ CarouselItemSelector,
8
+ type CarouselItemSelectorPropsExt
9
+ } from '@hanzo/commerce'
10
+
11
+ const DesktopBagCarousel: React.FC<{
12
+ constrainTo: {w: number, h: number}
13
+ className?: string
14
+ }> = observer(({
15
+ constrainTo,
16
+ className=''
17
+
18
+ }) => {
19
+ const cmmc = useCommerce()
20
+ return (
21
+ <CarouselItemSelector
22
+ items={cmmc.cartItems}
23
+ selectedItemRef={cmmc}
24
+ scrollable={false} // ignored
25
+ selectSku={cmmc.setCurrentItem.bind(cmmc)}
26
+ clx={className}
27
+ ext={{
28
+ options: {loop: true},
29
+ constrainTo,
30
+ imageOnly: true
31
+ } satisfies CarouselItemSelectorPropsExt}
32
+ />
33
+ )
34
+ })
35
+
36
+ export default DesktopBagCarousel
@@ -1,67 +1,67 @@
1
- 'use client'
2
- import React, { type PropsWithChildren } from 'react'
3
-
4
- import { ScrollArea, StepIndicator } from '@hanzo/ui/primitives'
5
- import { AuthWidget } from '@hanzo/auth/components'
6
- import { CartPanel } from '@hanzo/commerce'
7
-
8
- import * as Icons from '../../icons'
9
- import DesktopBagCarousel from './dt-bag-carousel'
10
- import CloseButton from './close-button'
11
- import { cn } from '@hanzo/ui/util'
12
- import LinksRow from './links-row'
13
-
14
- const DesktopCheckoutPanel: React.FC<PropsWithChildren & {
15
- index: number
16
- stepNames: string[]
17
- close:() => void
18
- className?: string
19
- }> = ({
20
- index,
21
- stepNames,
22
- close,
23
- className='',
24
- children
25
- }) => (
26
-
27
- <div /* id='CHECKOUT_PANEL' */ className={cn('grid grid-cols-2', className)}>
28
- <div className='w-full h-full bg-background flex flex-row items-start justify-end'>
29
- <div className='w-full max-w-[750px] relative flex flex-col items-center justify-start p-8'>
30
- <CloseButton close={close} size='md'/>
31
- <div className='w-full max-w-[550px] mx-auto flex flex-col gap-3'>
32
- <DesktopBagCarousel className='h-[260px] w-[360px] lg:w-[420px] mx-auto -mt-8' constrainTo={{w: 250, h: 250}}/>
33
- <CartPanel
34
- className='w-full border-none p-0'
35
- itemClx='mb-3'
36
- totalClx='sticky -bottom-1 p-1 bg-background'
37
- listClx='pr-3'
38
- scrollAfter={5}
39
- scrollHeightClx='h-[50vh]'
40
- showPromoCode
41
- showShipping
42
- />
43
- </div>
44
- </div>
45
- </div>
46
- <div className='w-full h-full flex flex-col bg-level-1 min-h-screen justify-between'>
47
- <ScrollArea className='w-full flex flex-row items-start justify-start overflow-y-auto'>
48
- <div className='h-full w-full max-w-[750px] relative flex flex-col items-center px-8 pt-0'>
49
- <div className='bg-level-1 sticky h-30 pb-8 w-full top-0 flex justify-center items-end'>
50
- <AuthWidget noLogin className='hidden md:flex absolute top-4 right-4 '/>
51
- <StepIndicator dotSizeRem={1.5} steps={stepNames} currentStep={index} className='gap-2 text-base w-pr-70' />
52
- </div>
53
- <div className='w-full max-w-[550px] mx-auto pb-10'>
54
- {children}
55
- </div>
56
- </div>
57
- </ScrollArea>
58
- <div className='w-full max-w-[750px] relative flex flex-col items-center px-8 pt-0'>
59
- <div className='w-full max-w-[550px] mx-auto flex flex-col items-center'>
60
- <LinksRow className='w-full' />
61
- </div>
62
- </div>
63
- </div>
64
- </div>
65
- )
66
-
1
+ 'use client'
2
+ import React, { type PropsWithChildren } from 'react'
3
+
4
+ import { ScrollArea, StepIndicator } from '@hanzo/ui/primitives'
5
+ import { AuthWidget } from '@hanzo/auth/components'
6
+ import { CartPanel } from '@hanzo/commerce'
7
+
8
+ import * as Icons from '../../icons'
9
+ import DesktopBagCarousel from './dt-bag-carousel'
10
+ import CloseButton from './close-button'
11
+ import { cn } from '@hanzo/ui/util'
12
+ import LinksRow from './links-row'
13
+
14
+ const DesktopCheckoutPanel: React.FC<PropsWithChildren & {
15
+ index: number
16
+ stepNames: string[]
17
+ close:() => void
18
+ className?: string
19
+ }> = ({
20
+ index,
21
+ stepNames,
22
+ close,
23
+ className='',
24
+ children
25
+ }) => (
26
+
27
+ <div /* id='CHECKOUT_PANEL' */ className={cn('grid grid-cols-2', className)}>
28
+ <div className='w-full h-full bg-background flex flex-row items-start justify-end'>
29
+ <div className='w-full max-w-[750px] relative flex flex-col items-center justify-start p-8'>
30
+ <CloseButton close={close} size='md'/>
31
+ <div className='w-full max-w-[550px] mx-auto flex flex-col gap-3'>
32
+ <DesktopBagCarousel className='h-[260px] w-[360px] lg:w-[420px] mx-auto -mt-8' constrainTo={{w: 250, h: 250}}/>
33
+ <CartPanel
34
+ className='w-full border-none p-0'
35
+ itemClx='mb-3'
36
+ totalClx='sticky -bottom-1 p-1 bg-background'
37
+ listClx='pr-3'
38
+ scrollAfter={5}
39
+ scrollHeightClx='h-[50vh]'
40
+ showPromoCode
41
+ showShipping
42
+ />
43
+ </div>
44
+ </div>
45
+ </div>
46
+ <div className='w-full h-full flex flex-col bg-level-1 min-h-screen justify-between'>
47
+ <ScrollArea className='w-full flex flex-row items-start justify-start overflow-y-auto'>
48
+ <div className='h-full w-full max-w-[750px] relative flex flex-col items-center px-8 pt-0'>
49
+ <div className='bg-level-1 sticky h-30 pb-8 w-full top-0 flex justify-center items-end'>
50
+ <AuthWidget noLogin className='hidden md:flex absolute top-4 right-4 '/>
51
+ <StepIndicator dotSizeRem={1.5} steps={stepNames} currentStep={index} className='gap-2 text-base w-pr-70' />
52
+ </div>
53
+ <div className='w-full max-w-[550px] mx-auto pb-10'>
54
+ {children}
55
+ </div>
56
+ </div>
57
+ </ScrollArea>
58
+ <div className='w-full max-w-[750px] relative flex flex-col items-center px-8 pt-0'>
59
+ <div className='w-full max-w-[550px] mx-auto flex flex-col items-center'>
60
+ <LinksRow className='w-full' />
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ )
66
+
67
67
  export default DesktopCheckoutPanel