@luxfi/core 5.3.0 → 5.3.2

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 (179) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +123 -123
  3. package/commerce/ui/store.ts +289 -289
  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 -49
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/_to_deprecate_checkout-widget/const.ts +13 -13
  13. package/components/commerce/_to_deprecate_checkout-widget/index.tsx_ +188 -188
  14. package/components/commerce/_to_deprecate_checkout-widget/obs-string-set.ts +48 -48
  15. package/components/commerce/_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 -66
  20. package/components/commerce/checkout-panel/checkout-panel-props.ts +9 -9
  21. package/components/commerce/checkout-panel/desktop-bag-carousel.tsx +36 -36
  22. package/components/commerce/checkout-panel/desktop-cp.tsx +82 -82
  23. package/components/commerce/checkout-panel/index.tsx +126 -126
  24. package/components/commerce/checkout-panel/mobile-cp.tsx +66 -66
  25. package/components/commerce/checkout-panel/policy-links.tsx +29 -29
  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 -88
  31. package/components/commerce/drawer/micro.tsx +144 -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 -101
  35. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  36. package/components/commerce/mobile-nav-menu-ai.tsx +50 -47
  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 -50
  46. package/components/header/index.tsx +50 -52
  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 -25
  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 -47
  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
@@ -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">
39
- <div className="grid grid-cols-3 w-[846px]">
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">
50
- <div className="flex flex-row">
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={`py-4 px-4 ${groupName === "Elite Card" || groupName === "Sovereign Card" ? "-mt-34" : ""}`}>
107
- <h2 className="text-muted-1">{groupName}</h2>
108
- <ul className="w-[200px] gap-3 md:w-[250px] lg: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,88 +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
- } 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
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