@luxfi/core 5.1.2 → 5.1.4

Sign up to get free protection for your applications and to get access to all the features.
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 -10
  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