@luxfi/core 5.3.1 → 5.3.3

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 (183) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +123 -126
  3. package/commerce/ui/store.ts +289 -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 +49 -42
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/{checkout-widget → _to_deprecate_checkout-widget}/const.ts +13 -13
  13. package/components/commerce/{checkout-widget/index.tsx → _to_deprecate_checkout-widget/index.tsx_} +188 -192
  14. package/components/commerce/{checkout-widget → _to_deprecate_checkout-widget}/obs-string-set.ts +48 -48
  15. package/components/commerce/{checkout-widget → _to_deprecate_checkout-widget}/use-anim-clx-set.ts +58 -58
  16. package/components/commerce/bag-button.tsx +98 -98
  17. package/components/commerce/buy-button.tsx +34 -34
  18. package/components/commerce/checkout-button.tsx +129 -129
  19. package/components/commerce/checkout-panel/cart-accordian.tsx +66 -0
  20. package/components/commerce/checkout-panel/checkout-panel-props.ts +10 -0
  21. package/components/commerce/checkout-panel/{dt-bag-carousel.tsx → desktop-bag-carousel.tsx} +36 -36
  22. package/components/commerce/checkout-panel/desktop-cp.tsx +83 -0
  23. package/components/commerce/checkout-panel/index.tsx +126 -129
  24. package/components/commerce/checkout-panel/mobile-cp.tsx +67 -0
  25. package/components/commerce/checkout-panel/policy-links.tsx +29 -0
  26. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  27. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  28. package/components/commerce/desktop-bag-popup.tsx +78 -78
  29. package/components/commerce/desktop-nav-menu.tsx +130 -130
  30. package/components/commerce/drawer/index.tsx +88 -99
  31. package/components/commerce/drawer/micro.tsx +145 -144
  32. package/components/commerce/drawer/shell.tsx +85 -85
  33. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  34. package/components/commerce/mobile-login-button.tsx +107 -107
  35. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  36. package/components/commerce/mobile-nav-menu-ai.tsx +50 -51
  37. package/components/commerce/mobile-nav-menu-item.tsx +49 -49
  38. package/components/commerce/mobile-nav-menu.tsx +101 -101
  39. package/components/contact-dialog/contact-form.tsx +113 -113
  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/drawer-margin.tsx +25 -25
  44. package/components/footer.tsx +77 -77
  45. package/components/header/desktop.tsx +51 -51
  46. package/components/header/index.tsx +50 -50
  47. package/components/header/mobile.tsx +163 -163
  48. package/components/header/theme-toggle.tsx +26 -26
  49. package/components/icons/24k-gold-card.tsx +43 -43
  50. package/components/icons/ai-chat-act.tsx +47 -47
  51. package/components/icons/ai-chat.tsx +29 -29
  52. package/components/icons/anodized-titanium.tsx +45 -45
  53. package/components/icons/avatar.tsx +11 -11
  54. package/components/icons/bag-icon.tsx +10 -10
  55. package/components/icons/blog-act.tsx +14 -14
  56. package/components/icons/blog.tsx +20 -20
  57. package/components/icons/bridge-act.tsx +18 -18
  58. package/components/icons/bridge.tsx +68 -68
  59. package/components/icons/changelog-act.tsx +15 -15
  60. package/components/icons/changelog.tsx +21 -21
  61. package/components/icons/chrome.tsx +45 -45
  62. package/components/icons/coins-act.tsx +29 -29
  63. package/components/icons/coins.tsx +20 -20
  64. package/components/icons/compare-cards-act.tsx +30 -30
  65. package/components/icons/compare-cards.tsx +21 -21
  66. package/components/icons/credit-act.tsx +29 -29
  67. package/components/icons/credit.tsx +20 -20
  68. package/components/icons/customer-support-act.tsx +27 -27
  69. package/components/icons/customer-support.tsx +21 -21
  70. package/components/icons/customers-act.tsx +65 -65
  71. package/components/icons/customers.tsx +33 -33
  72. package/components/icons/developer-docs-act.tsx +26 -26
  73. package/components/icons/developer-docs.tsx +20 -20
  74. package/components/icons/exchange-act.tsx +27 -27
  75. package/components/icons/exchange.tsx +21 -21
  76. package/components/icons/explorer-act.tsx +27 -27
  77. package/components/icons/explorer.tsx +22 -22
  78. package/components/icons/faqs-act.tsx +27 -27
  79. package/components/icons/faqs.tsx +21 -21
  80. package/components/icons/github.tsx +14 -14
  81. package/components/icons/guides-act.tsx +26 -26
  82. package/components/icons/guides.tsx +21 -21
  83. package/components/icons/gun-metal.tsx +44 -44
  84. package/components/icons/index.tsx +43 -43
  85. package/components/icons/integrations-act.tsx +41 -41
  86. package/components/icons/integrations.tsx +25 -25
  87. package/components/icons/irradescent.tsx +41 -41
  88. package/components/icons/launch-subnet.tsx +21 -21
  89. package/components/icons/launchsubnet-act.tsx +29 -29
  90. package/components/icons/left-arrow.tsx +11 -11
  91. package/components/icons/lux-finance-act.tsx +34 -34
  92. package/components/icons/lux-finance.tsx +23 -23
  93. package/components/icons/lux-logo.tsx +10 -10
  94. package/components/icons/lux-pass-act.tsx +41 -41
  95. package/components/icons/lux-pass.tsx +25 -25
  96. package/components/icons/lux-quests-act.tsx +15 -15
  97. package/components/icons/lux-quests.tsx +21 -21
  98. package/components/icons/market-act.tsx +39 -39
  99. package/components/icons/market.tsx +24 -24
  100. package/components/icons/mirrored-titanium.tsx +46 -46
  101. package/components/icons/more-benefits-act.tsx +29 -29
  102. package/components/icons/more-benefits.tsx +21 -21
  103. package/components/icons/open-source-act.tsx +41 -41
  104. package/components/icons/open-source.tsx +26 -26
  105. package/components/icons/right-arrow.tsx +10 -10
  106. package/components/icons/safe-act.tsx +77 -77
  107. package/components/icons/safe.tsx +37 -37
  108. package/components/icons/search.tsx +12 -12
  109. package/components/icons/secure-delivery.tsx +13 -13
  110. package/components/icons/shop-act.tsx +29 -29
  111. package/components/icons/shop.tsx +20 -20
  112. package/components/icons/social-icon.tsx +35 -35
  113. package/components/icons/social-svg.css +3 -3
  114. package/components/icons/sterling-silver-card.tsx +44 -44
  115. package/components/icons/templates-act.tsx +29 -29
  116. package/components/icons/templates.tsx +21 -21
  117. package/components/icons/validators-act.tsx +42 -42
  118. package/components/icons/validators.tsx +41 -41
  119. package/components/icons/view-all-card-act.tsx +28 -28
  120. package/components/icons/view-all-card.tsx +20 -20
  121. package/components/icons/wallet-act.tsx +29 -29
  122. package/components/icons/wallet.tsx +20 -20
  123. package/components/icons/warpcast.tsx +58 -58
  124. package/components/icons/youtube-logo.tsx +59 -59
  125. package/components/index.ts +25 -27
  126. package/components/logo.tsx +89 -89
  127. package/components/main.tsx +27 -27
  128. package/components/mini-chart/index.tsx +7 -7
  129. package/components/mini-chart/mini-chart-props.ts +43 -43
  130. package/components/mini-chart/mini-chart.tsx +85 -85
  131. package/components/mini-chart/wrapper.tsx +23 -23
  132. package/components/not-found/index.tsx +28 -28
  133. package/components/not-found/not-found-content.mdx +5 -5
  134. package/components/scripts.tsx +24 -24
  135. package/components/tooltip.tsx +31 -31
  136. package/environment.d.ts +5 -5
  137. package/next/analytics/fpixel.ts +15 -15
  138. package/next/analytics/google-analytics.ts +13 -13
  139. package/next/analytics/index.ts +3 -3
  140. package/next/analytics/pixel-analytics.tsx +54 -54
  141. package/next/font/get-app-router-font-classes.ts +12 -12
  142. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  143. package/next/font/next-font-desc.ts +27 -27
  144. package/next/font/pages-router-font-vars.tsx +18 -18
  145. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  146. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  147. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  148. package/next/head-metadata/index.tsx +208 -208
  149. package/next/middleware/determine-device-mw.ts +16 -16
  150. package/package.json +79 -79
  151. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  152. package/root-layout/index.tsx +112 -112
  153. package/server-actions/firebase-app.ts +14 -14
  154. package/server-actions/index.ts +5 -5
  155. package/server-actions/store-contact.ts +51 -51
  156. package/site-def/footer/community.tsx +67 -67
  157. package/site-def/footer/company.ts +37 -37
  158. package/site-def/footer/ecosystem.ts +37 -37
  159. package/site-def/footer/index.tsx +26 -26
  160. package/site-def/footer/legal.ts +28 -28
  161. package/site-def/footer/network.ts +45 -45
  162. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  163. package/site-def/index.ts +2 -2
  164. package/site-def/main-nav.tsx +458 -458
  165. package/style/cart-animation.css +29 -29
  166. package/style/checkout-animation.css +23 -23
  167. package/style/drawer-handle-overrides.css +160 -160
  168. package/style/lux-colors.css +85 -85
  169. package/style/lux-global.css +50 -50
  170. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  171. package/tailwind/index.ts +2 -2
  172. package/tailwind/lux-tw-fonts.ts +39 -39
  173. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  174. package/tsconfig.json +15 -15
  175. package/types/chatbot-config.ts +6 -6
  176. package/types/chatbot-suggested-question.ts +7 -7
  177. package/types/contact-info.ts +10 -10
  178. package/types/index.ts +4 -4
  179. package/types/site-def.ts +43 -43
  180. package/components/commerce/add-widget.tsx +0 -20
  181. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +0 -85
  182. package/components/commerce/checkout-panel/links-row.tsx +0 -21
  183. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +0 -55
@@ -1,131 +1,131 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import Link from "next/link"
5
- import { cn } from '@hanzo/ui/util'
6
- import type { LinkDef } from '@hanzo/ui/types'
7
- import type { ChildMenu, LinkDefExtended } from "../../site-def/main-nav"
8
- import {
9
- NavigationMenu,
10
- NavigationMenuContent,
11
- NavigationMenuItem,
12
- NavigationMenuLink,
13
- NavigationMenuList,
14
- NavigationMenuTrigger,
15
- navigationMenuTriggerStyle
16
- } from '@hanzo/ui/primitives'
17
- import Warpcast from "../icons/warpcast"
18
-
19
- const DesktopNav: React.FC<{ links: LinkDefExtended[] }> = ({ links }) => (
20
- links.length > 0 ? (
21
- <NavigationMenu>
22
- <NavigationMenuList>
23
- {links.map((el, index) => {
24
- if (el.isAIMenu) {
25
- return (
26
- <NavigationMenuItem key={index}>
27
- <Link href={el.href} legacyBehavior passHref >
28
- <NavigationMenuLink className={cn('!rounded-2xl ', navigationMenuTriggerStyle())}>
29
- {el.title}
30
- </NavigationMenuLink>
31
- </Link>
32
- </NavigationMenuItem>
33
- )
34
- } else if (el.title === "Cards") {
35
- return (
36
- <NavigationMenuItem key={index}>
37
- <NavigationMenuTrigger className="!rounded-2xl">{el.title}</NavigationMenuTrigger>
38
- <NavigationMenuContent className="!left-0 overflow-scroll xl:w-[720px]">
39
- <div className="grid xl:grid-cols-3 xl:h-auto h-[600px] w-full ">
40
- <GroupChildMenu childs={el.childMenu} />
41
- </div>
42
- </NavigationMenuContent>
43
- </NavigationMenuItem>
44
- )
45
- } else {
46
- return (
47
- <NavigationMenuItem key={index}>
48
- <NavigationMenuTrigger className="!rounded-2xl">{el.title}</NavigationMenuTrigger>
49
- <NavigationMenuContent className="!left-0 overflow-scroll">
50
- <div className="xl:flex xl:flex-row w-full xl:h-auto h-[600px]">
51
- <GroupChildMenu childs={el.childMenu} />
52
- </div>
53
- </NavigationMenuContent>
54
- </NavigationMenuItem>
55
- )
56
- }
57
- })}
58
- </NavigationMenuList>
59
- </NavigationMenu>
60
- ) : null
61
- )
62
- export default DesktopNav
63
-
64
- const ListItem = React.forwardRef<
65
- React.ElementRef<"a">,
66
- React.ComponentPropsWithoutRef<"a">
67
- >(({ className, title, children, ...props }, ref) => {
68
- return (
69
- <li>
70
- <NavigationMenuLink asChild>
71
- <a
72
- ref={ref}
73
- className={cn(
74
- "block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-level-1 hover:text-accent-foreground focus:bg-level-1 focus:text-accent-foreground",
75
- className
76
- )}
77
- {...props}
78
- >
79
- <div className="text-sm font-medium leading-none">{title}</div>
80
- <p className="line-clamp-3 text-sm leading-snug text-muted-foreground">
81
- {children}
82
- </p>
83
- </a>
84
- </NavigationMenuLink>
85
- </li>
86
- )
87
- })
88
- ListItem.displayName = "ListItem"
89
-
90
- const GroupChildMenu: React.FC<{ childs: ChildMenu[] | undefined }> = ({ childs }) => {
91
- if (!childs) {
92
- return null
93
- }
94
-
95
- let groupedChildMenus = childs.reduce((grouped: Record<string, ChildMenu[]>, childLink) => {
96
- if (childLink.groupName) {
97
- if (!grouped[childLink.groupName]) {
98
- grouped[childLink.groupName] = []
99
- }
100
- grouped[childLink.groupName].push(childLink)
101
- }
102
- return grouped
103
- }, {} as Record<string, ChildMenu[]>)
104
-
105
- return Object.entries(groupedChildMenus).map(([groupName, childLinks]: [string, ChildMenu[]]) => (
106
- <div key={groupName} className={`xl:p-4 p-2 ${groupName === "Elite Card" || groupName === "Sovereign Card" ? "xl:-mt-34" : ""}`}>
107
- <h2 className="text-muted-1">{groupName}</h2>
108
- <ul className="w-[200px] gap-3 2xl:w-[250px]">
109
- {childLinks.map((link) => (
110
- <div className="flex items-center element-container text-muted-1 hover:text-primary" key={link.title}>
111
- {
112
- link.icon_act ? (
113
- <>
114
- <div className="icon-container-nor">{link.icon}</div>
115
- <div className="icon-container-hov">{link.icon_act}</div>
116
- </>
117
- ):(
118
- <div>{link.icon}</div>
119
- )
120
- }
121
- <div className="text-container">
122
- <ListItem key={link.title} title={link.title} href={link.href} className="hover:bg-transparent">
123
- {link.contents}
124
- </ListItem>
125
- </div>
126
- </div>
127
- ))}
128
- </ul>
129
- </div>
130
- ))
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import Link from "next/link"
5
+ import { cn } from '@hanzo/ui/util'
6
+ import type { LinkDef } from '@hanzo/ui/types'
7
+ import type { ChildMenu, LinkDefExtended } from "../../site-def/main-nav"
8
+ import {
9
+ NavigationMenu,
10
+ NavigationMenuContent,
11
+ NavigationMenuItem,
12
+ NavigationMenuLink,
13
+ NavigationMenuList,
14
+ NavigationMenuTrigger,
15
+ navigationMenuTriggerStyle
16
+ } from '@hanzo/ui/primitives'
17
+ import Warpcast from "../icons/warpcast"
18
+
19
+ const DesktopNav: React.FC<{ links: LinkDefExtended[] }> = ({ links }) => (
20
+ links.length > 0 ? (
21
+ <NavigationMenu>
22
+ <NavigationMenuList>
23
+ {links.map((el, index) => {
24
+ if (el.isAIMenu) {
25
+ return (
26
+ <NavigationMenuItem key={index}>
27
+ <Link href={el.href} legacyBehavior passHref >
28
+ <NavigationMenuLink className={cn('!rounded-2xl ', navigationMenuTriggerStyle())}>
29
+ {el.title}
30
+ </NavigationMenuLink>
31
+ </Link>
32
+ </NavigationMenuItem>
33
+ )
34
+ } else if (el.title === "Cards") {
35
+ return (
36
+ <NavigationMenuItem key={index}>
37
+ <NavigationMenuTrigger className="!rounded-2xl">{el.title}</NavigationMenuTrigger>
38
+ <NavigationMenuContent className="!left-0 overflow-scroll xl:w-[720px]">
39
+ <div className="grid xl:grid-cols-3 xl:h-auto h-[600px] w-full ">
40
+ <GroupChildMenu childs={el.childMenu} />
41
+ </div>
42
+ </NavigationMenuContent>
43
+ </NavigationMenuItem>
44
+ )
45
+ } else {
46
+ return (
47
+ <NavigationMenuItem key={index}>
48
+ <NavigationMenuTrigger className="!rounded-2xl">{el.title}</NavigationMenuTrigger>
49
+ <NavigationMenuContent className="!left-0 overflow-scroll">
50
+ <div className="xl:flex xl:flex-row w-full xl:h-auto h-[600px]">
51
+ <GroupChildMenu childs={el.childMenu} />
52
+ </div>
53
+ </NavigationMenuContent>
54
+ </NavigationMenuItem>
55
+ )
56
+ }
57
+ })}
58
+ </NavigationMenuList>
59
+ </NavigationMenu>
60
+ ) : null
61
+ )
62
+ export default DesktopNav
63
+
64
+ const ListItem = React.forwardRef<
65
+ React.ElementRef<"a">,
66
+ React.ComponentPropsWithoutRef<"a">
67
+ >(({ className, title, children, ...props }, ref) => {
68
+ return (
69
+ <li>
70
+ <NavigationMenuLink asChild>
71
+ <a
72
+ ref={ref}
73
+ className={cn(
74
+ "block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-level-1 hover:text-accent-foreground focus:bg-level-1 focus:text-accent-foreground",
75
+ className
76
+ )}
77
+ {...props}
78
+ >
79
+ <div className="text-sm font-medium leading-none">{title}</div>
80
+ <p className="line-clamp-3 text-sm leading-snug text-muted-foreground">
81
+ {children}
82
+ </p>
83
+ </a>
84
+ </NavigationMenuLink>
85
+ </li>
86
+ )
87
+ })
88
+ ListItem.displayName = "ListItem"
89
+
90
+ const GroupChildMenu: React.FC<{ childs: ChildMenu[] | undefined }> = ({ childs }) => {
91
+ if (!childs) {
92
+ return null
93
+ }
94
+
95
+ let groupedChildMenus = childs.reduce((grouped: Record<string, ChildMenu[]>, childLink) => {
96
+ if (childLink.groupName) {
97
+ if (!grouped[childLink.groupName]) {
98
+ grouped[childLink.groupName] = []
99
+ }
100
+ grouped[childLink.groupName].push(childLink)
101
+ }
102
+ return grouped
103
+ }, {} as Record<string, ChildMenu[]>)
104
+
105
+ return Object.entries(groupedChildMenus).map(([groupName, childLinks]: [string, ChildMenu[]]) => (
106
+ <div key={groupName} className={`xl:p-4 p-2 ${groupName === "Elite Card" || groupName === "Sovereign Card" ? "xl:-mt-34" : ""}`}>
107
+ <h2 className="text-muted-1">{groupName}</h2>
108
+ <ul className="w-[200px] gap-3 2xl:w-[250px]">
109
+ {childLinks.map((link) => (
110
+ <div className="flex items-center element-container text-muted-1 hover:text-primary" key={link.title}>
111
+ {
112
+ link.icon_act ? (
113
+ <>
114
+ <div className="icon-container-nor">{link.icon}</div>
115
+ <div className="icon-container-hov">{link.icon_act}</div>
116
+ </>
117
+ ):(
118
+ <div>{link.icon}</div>
119
+ )
120
+ }
121
+ <div className="text-container">
122
+ <ListItem key={link.title} title={link.title} href={link.href} className="hover:bg-transparent">
123
+ {link.contents}
124
+ </ListItem>
125
+ </div>
126
+ </div>
127
+ ))}
128
+ </ul>
129
+ </div>
130
+ ))
131
131
  }
@@ -1,99 +1,88 @@
1
- 'use client'
2
- import React from 'react'
3
- import { useRouter } from 'next/navigation'
4
- import { observer } from 'mobx-react-lite'
5
-
6
- import { CarouselBuyCard } from '@hanzo/commerce'
7
-
8
- import {
9
- useSelectAndBuy,
10
- useCommerceDrawer,
11
- useRecentActivity
12
- } from '../../../commerce/ui/context'
13
-
14
- import CommerceDrawer from './shell'
15
- import CheckoutButton from '../checkout-button'
16
- import Micro from './micro'
17
-
18
- const CommerceUIComponent: React.FC = observer(() => {
19
-
20
- const buy = useSelectAndBuy()
21
- const drawer = useCommerceDrawer()
22
- const recent = useRecentActivity()
23
- const router = useRouter()
24
-
25
-
26
- const handleCheckout = (): void => {
27
- router.push('/checkout')
28
- }
29
-
30
-
31
- const handleHandleClicked = (): void => {
32
-
33
- if (drawer.state === 'full') {
34
- buy.hideVariants()
35
- }
36
- else if (drawer.state === 'micro') {
37
- if (drawer.showAdded) {
38
- buy.showVariants(recent.item?.sku ?? '')
39
- }
40
- // checkout only
41
- else {
42
- drawer.setClosedByUser(true)
43
- }
44
- }
45
- }
46
-
47
- const handleItemClicked = () => {
48
- buy.showVariants(recent.item?.sku ?? '')
49
- }
50
-
51
- const handleCloseGesture = (): boolean => {
52
- if (drawer.state === 'full') {
53
- buy.hideVariants()
54
- return true // "handled!"
55
- }
56
- return false
57
- }
58
-
59
- return (
60
- <CommerceDrawer
61
- handleHandleClicked={handleHandleClicked}
62
- handleCloseGesture={handleCloseGesture}
63
- drawerClx='flex flex-col'
64
- >
65
- {drawer.state === 'full' && (
66
- /* The actual drawer is larger than the visible area (due to awkward
67
- vaul impl. So we have to ask the drawer for its currect snappoint
68
- and constrain layout to that.
69
- */
70
- <div style={{height: drawer.snapPointPx - 24 /* fudge factor for handle area */}}>
71
- <CarouselBuyCard
72
- skuPath={buy.currentSkuPath!}
73
- checkoutButton={
74
- <CheckoutButton
75
- handleCheckout={handleCheckout}
76
- className='w-full min-w-[160px] sm:max-w-[320px]'
77
- />
78
- }
79
- onQuantityChanged={recent.quantityChanged.bind(recent)}
80
- clx='justify-between h-full pb-3 gap-8'
81
- addBtnClx='w-full min-w-[160px] sm:max-w-[320px]'
82
- buttonsAreaClx='grow-0 shrink-0 mt-0'
83
- selectorClx='max-w-[475px] justify-between grow'
84
-
85
- />
86
- </div>
87
- )}
88
- {drawer.state === 'micro' && (
89
- <Micro
90
- handleCheckout={handleCheckout}
91
- handleItemClicked={handleItemClicked}
92
- clx='w-full px-2 sm:w-[460px] sm:mx-auto md:w-[550px]'
93
- />
94
- )}
95
- </CommerceDrawer>
96
- )
97
- })
98
-
99
- 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 { CarouselBuyCard } from '@hanzo/commerce'
7
+
8
+ import {
9
+ useSelectAndBuy,
10
+ useCommerceDrawer,
11
+ } from '../../../commerce/ui/context'
12
+
13
+ import CommerceDrawer from './shell'
14
+ import CheckoutButton from '../checkout-button'
15
+ import Micro from './micro'
16
+
17
+ const CommerceUIComponent: React.FC = observer(() => {
18
+
19
+ const buy = useSelectAndBuy()
20
+ const drawer = useCommerceDrawer()
21
+ const router = useRouter()
22
+
23
+ const handleCheckout = (): void => {
24
+ router.push('/checkout')
25
+ }
26
+
27
+ const handleHandleClicked = (): void => {
28
+
29
+ if (drawer.state === 'full') {
30
+ buy.hideVariants()
31
+ }
32
+ else if (drawer.state === 'micro') {
33
+ buy.showRecentVariants()
34
+ }
35
+ }
36
+
37
+ const handleItemClicked = () => {
38
+ buy.showRecentVariants()
39
+ }
40
+
41
+ const handleCloseGesture = (): boolean => {
42
+ if (drawer.state === 'full') {
43
+ buy.hideVariants()
44
+ return true // "handled!"
45
+ }
46
+ return false
47
+ }
48
+
49
+ return (
50
+ <CommerceDrawer
51
+ handleHandleClicked={handleHandleClicked}
52
+ handleCloseGesture={handleCloseGesture}
53
+ drawerClx='flex flex-col'
54
+ >
55
+ {drawer.state === 'full' && (
56
+ /* The actual drawer is larger than the visible area (due to awkward
57
+ vaul impl. So we have to ask the drawer for its currect snappoint
58
+ and constrain layout to that.
59
+ */
60
+ <div style={{height: drawer.snapPointPx - 24 /* fudge factor for handle area */}} >
61
+ <CarouselBuyCard
62
+ skuPath={buy.currentSkuPath!}
63
+ checkoutButton={
64
+ <CheckoutButton
65
+ handleCheckout={handleCheckout}
66
+ className='w-full min-w-[160px] sm:max-w-[320px]'
67
+ />
68
+ }
69
+ clx='justify-between h-full pb-3 gap-8'
70
+ addBtnClx='w-full min-w-[160px] sm:max-w-[320px]'
71
+ buttonsAreaClx='grow-0 shrink-0 mt-0'
72
+ selectorClx='max-w-[475px] justify-between grow'
73
+
74
+ />
75
+ </div>
76
+ )}
77
+ {drawer.state === 'micro' && (
78
+ <Micro
79
+ handleCheckout={handleCheckout}
80
+ handleItemClicked={handleItemClicked}
81
+ clx='w-full px-2 sm:w-[460px] sm:mx-auto md:w-[550px]'
82
+ />
83
+ )}
84
+ </CommerceDrawer>
85
+ )
86
+ })
87
+
88
+ export default CommerceUIComponent