@luxfi/core 5.1.4 → 5.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. package/commerce/{AUTO-GEN-bullion-by-family.json → data/AUTO-GEN-bullion-by-family.json} +33 -33
  2. package/commerce/{EDIT-ME-bullion-market-prices.ts → data/EDIT-ME-bullion-market-prices.ts} +11 -11
  3. package/commerce/{assign-prices.ts → data/assign-prices.ts} +49 -49
  4. package/commerce/{assign-videos-by-family-group.ts → data/assign-videos-by-family-group.ts} +14 -14
  5. package/commerce/{bullion-price-1oz.ts → data/bullion-price-1oz.ts} +5 -5
  6. package/commerce/{index.ts → data/index.ts} +18 -18
  7. package/commerce/ui/conf.ts +13 -0
  8. package/commerce/ui/context.tsx +102 -0
  9. package/commerce/ui/store.ts +277 -0
  10. package/components/access-code-input.tsx +71 -71
  11. package/components/auth/auth-listener.tsx +29 -29
  12. package/components/auth/auth-token/clear-auth-token.tsx +12 -12
  13. package/components/auth/auth-token/set-auth-token.tsx +16 -16
  14. package/components/auth/common-auth-domains.ts +16 -16
  15. package/components/auth/login-panel.tsx +107 -104
  16. package/components/chat-widget.tsx +85 -80
  17. package/components/commerce/add-widget.tsx +20 -0
  18. package/components/commerce/bag-button.tsx +98 -98
  19. package/components/commerce/buy-button.tsx +34 -0
  20. package/components/commerce/checkout-button.tsx +129 -116
  21. package/components/commerce/checkout-panel/close-button.tsx +26 -26
  22. package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -36
  23. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +66 -66
  24. package/components/commerce/checkout-panel/index.tsx +129 -124
  25. package/components/commerce/checkout-panel/links-row.tsx +21 -21
  26. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +54 -54
  27. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  28. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  29. package/components/commerce/checkout-widget/const.ts +13 -13
  30. package/components/commerce/checkout-widget/index.tsx +192 -86
  31. package/components/commerce/checkout-widget/obs-string-set.ts +48 -48
  32. package/components/commerce/checkout-widget/use-anim-clx-set.ts +58 -56
  33. package/components/commerce/desktop-bag-popup.tsx +78 -78
  34. package/components/commerce/drawer/index.tsx +117 -0
  35. package/components/commerce/drawer/micro.tsx +136 -0
  36. package/components/commerce/drawer/shell.tsx +79 -0
  37. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  38. package/components/commerce/mobile-login-button.tsx +100 -100
  39. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  40. package/components/commerce/mobile-nav-menu-ai.tsx +97 -97
  41. package/components/commerce/mobile-nav-menu-item.tsx +45 -45
  42. package/components/commerce/mobile-nav-menu.tsx +80 -79
  43. package/components/contact-dialog/contact-form.tsx +113 -112
  44. package/components/contact-dialog/disclaimer.tsx +13 -13
  45. package/components/contact-dialog/index.tsx +64 -64
  46. package/components/copyright.tsx +21 -21
  47. package/components/drawer-margin.tsx +25 -0
  48. package/components/footer.tsx +77 -77
  49. package/components/header/desktop.tsx +54 -54
  50. package/components/header/index.tsx +40 -47
  51. package/components/header/mobile.tsx +165 -165
  52. package/components/header/theme-toggle.tsx +26 -26
  53. package/components/icons/avatar.tsx +11 -11
  54. package/components/icons/bag-icon.tsx +10 -10
  55. package/components/icons/github.tsx +14 -14
  56. package/components/icons/index.tsx +43 -43
  57. package/components/icons/left-arrow.tsx +11 -11
  58. package/components/icons/lux-logo.tsx +10 -10
  59. package/components/icons/right-arrow.tsx +10 -10
  60. package/components/icons/search.tsx +12 -12
  61. package/components/icons/secure-delivery.tsx +13 -13
  62. package/components/icons/social-icon.tsx +35 -35
  63. package/components/icons/social-svg.css +3 -3
  64. package/components/icons/youtube-logo.tsx +59 -59
  65. package/components/index.ts +25 -27
  66. package/components/logo.tsx +81 -81
  67. package/components/main.tsx +27 -0
  68. package/components/mini-chart/index.tsx +7 -7
  69. package/components/mini-chart/mini-chart-props.ts +43 -43
  70. package/components/mini-chart/mini-chart.tsx +85 -85
  71. package/components/mini-chart/wrapper.tsx +23 -23
  72. package/components/not-found/index.tsx +28 -27
  73. package/components/not-found/not-found-content.mdx +5 -5
  74. package/components/scripts.tsx +24 -24
  75. package/conf/index.ts +52 -50
  76. package/{commerce/lux-service-options.ts → conf/lux-commerce-options.ts} +6 -6
  77. package/environment.d.ts +5 -5
  78. package/next/analytics/fpixel.ts +15 -15
  79. package/next/analytics/google-analytics.ts +13 -13
  80. package/next/analytics/index.ts +3 -3
  81. package/next/analytics/pixel-analytics.tsx +54 -54
  82. package/next/font/get-app-router-font-classes.ts +12 -12
  83. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  84. package/next/font/next-font-desc.ts +27 -27
  85. package/next/font/pages-router-font-vars.tsx +18 -18
  86. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  87. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  88. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  89. package/next/head-metadata/index.tsx +208 -208
  90. package/next/middleware/determine-device-mw.ts +16 -16
  91. package/package.json +80 -73
  92. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  93. package/root-layout/index.tsx +118 -121
  94. package/server-actions/firebase-app.ts +14 -14
  95. package/server-actions/index.ts +5 -5
  96. package/server-actions/store-contact.ts +51 -51
  97. package/site-def/footer/community.tsx +67 -67
  98. package/site-def/footer/company.ts +37 -37
  99. package/site-def/footer/ecosystem.ts +37 -37
  100. package/site-def/footer/index.tsx +26 -26
  101. package/site-def/footer/legal.ts +28 -28
  102. package/site-def/footer/network.ts +45 -45
  103. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  104. package/site-def/index.ts +2 -2
  105. package/site-def/main-nav.tsx +292 -292
  106. package/style/cart-animation.css +29 -29
  107. package/style/checkout-animation.css +23 -23
  108. package/style/drawer-handle-overrides.css +160 -0
  109. package/style/lux-colors.css +85 -85
  110. package/style/lux-global.css +30 -30
  111. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  112. package/tailwind/index.ts +2 -2
  113. package/tailwind/lux-tw-fonts.ts +39 -39
  114. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  115. package/tsconfig.json +15 -10
  116. package/types/chatbot-config.ts +6 -6
  117. package/types/chatbot-suggested-question.ts +7 -7
  118. package/types/commerce-config.ts +10 -10
  119. package/types/contact-info.ts +10 -10
  120. package/types/index.ts +5 -5
  121. package/types/site-def.ts +45 -45
  122. package/components/commerce/buy-drawer/drawer.tsx +0 -44
  123. package/components/commerce/buy-drawer/index.tsx +0 -46
  124. package/components/commerce/checkout-widget/use-lagging-item-ref.ts +0 -30
  125. package/components/header/guts.tsx +0 -27
@@ -1,116 +1,129 @@
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, runInAction } from 'mobx'
4
+ import { observer } from 'mobx-react-lite'
5
+
6
+ import { Button, type ButtonProps } from '@hanzo/ui/primitives'
7
+ import { cn } from '@hanzo/ui/util'
8
+ import { useCommerce } from '@hanzo/commerce'
9
+
10
+ import * as Icons from '../icons'
11
+
12
+ const IconAndQuantity: React.FC<{
13
+ animateOnQuantityChange?: boolean
14
+ showArrow?: boolean
15
+ showQuantity?: boolean
16
+ clx?: string
17
+ iconClx?: string
18
+ digitClx?: string
19
+ }> = observer(({
20
+ animateOnQuantityChange=false,
21
+ showArrow=true,
22
+ showQuantity=true,
23
+ clx='',
24
+ iconClx='',
25
+ digitClx=''
26
+ }) => {
27
+
28
+ const cmmc = useCommerce()
29
+ const wiggleRef = useRef<IObservableValue<'more' | 'less' | 'none'>>(observable.box('none'))
30
+
31
+ useEffect(() => (
32
+ // return IReactionDisposer
33
+ animateOnQuantityChange ? reaction(
34
+ () => (cmmc.cartQuantity),
35
+ (curr, prev) => {
36
+ if (curr > prev) {
37
+ runInAction(() => {wiggleRef.current.set('more') })
38
+ }
39
+ else {
40
+ runInAction(() => {wiggleRef.current.set('less') })
41
+ }
42
+ setTimeout(() => {
43
+ // Note that this doesn't actually stop the animation
44
+ // just resets the styles
45
+ runInAction(() => {wiggleRef.current.set('none') })
46
+ }, 800)
47
+ }
48
+ ) : undefined
49
+ ), [])
50
+
51
+ return (
52
+ <div className={cn('flex items-center justify-center', clx)}>
53
+ {showQuantity && (
54
+ <div className={cn(
55
+ 'relative flex items-center justify-center mr-1',
56
+ ((wiggleRef.current.get() === 'more') ?
57
+ 'item-added-to-cart-animation'
58
+ :
59
+ (wiggleRef.current.get() === 'less') ? 'item-removed-from-cart-animation' : ''),
60
+ )} >
61
+ {cmmc.cartQuantity > 0 && (
62
+ <div className={cn(
63
+ 'z-above-content flex flex-col justify-center items-center',
64
+ 'absolute left-0 right-0 top-0 bottom-0',
65
+ digitClx
66
+ )}>
67
+ <div style={{/* color: 'white' tailwind bug? ,*/ fontSize: '11px', position: 'relative', top: '1px' }}>{cmmc.cartQuantity}</div>
68
+ </div>
69
+ )}
70
+ <Icons.bag width='19' height='24' className={cn('relative -top-[3px] opacity-70' , iconClx)} aria-hidden="true" />
71
+ </div>
72
+ )}
73
+ {showArrow && (<span style={{fontSize: '17px',}}>&rsaquo;</span>)}
74
+ </div>
75
+ )
76
+ })
77
+
78
+ const CheckoutButton: React.FC<ButtonProps & {
79
+ handleCheckout: () => void
80
+ showQuantity?: boolean
81
+ showArrow?: boolean
82
+ animateOnQuantityChange?: boolean
83
+ centerText?: boolean
84
+ }> = ({
85
+ handleCheckout,
86
+ variant='primary',
87
+ rounded='lg',
88
+ className,
89
+ showQuantity=true,
90
+ showArrow=true,
91
+ animateOnQuantityChange=true,
92
+ centerText=true,
93
+ children,
94
+ ...rest
95
+ }) => {
96
+
97
+ return (
98
+ <Button
99
+ {...rest}
100
+ onClick={handleCheckout}
101
+ variant={variant}
102
+ rounded={rounded}
103
+ className={cn(
104
+ 'flex justify-between items-stretch group',
105
+ showQuantity ? (centerText ? 'px-1.5' : 'pl-2.5 pr-1.5') : '',
106
+ className,
107
+ )}
108
+ >
109
+ {centerText && ( // must scale this one too, as it effects layout
110
+ <IconAndQuantity
111
+ showArrow={showArrow}
112
+ showQuantity={showQuantity}
113
+ clx='invisible group-hover:scale-105 transition-scale transition-duration-300'
114
+ />
115
+ )}
116
+ {children ?? (<div className='flex justify-center items-center'>Checkout</div>)}
117
+ <IconAndQuantity
118
+ clx='group-hover:scale-105 transition-scale transition-duration-300'
119
+ animateOnQuantityChange={animateOnQuantityChange}
120
+ showArrow={showArrow}
121
+ showQuantity={showQuantity}
122
+ iconClx='fill-background'
123
+ digitClx='text-foreground group-hover:opacity-80 leading-none font-bold font-sans'
124
+ />
125
+ </Button>
126
+ )
127
+ }
128
+
129
+ 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