@luxfi/core 5.2.12 → 5.2.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +126 -126
  3. package/commerce/ui/store.ts +304 -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 +42 -42
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/add-widget.tsx +20 -20
  13. package/components/commerce/bag-button.tsx +98 -98
  14. package/components/commerce/buy-button.tsx +34 -34
  15. package/components/commerce/checkout-button.tsx +129 -129
  16. package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -36
  17. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +84 -84
  18. package/components/commerce/checkout-panel/index.tsx +129 -129
  19. package/components/commerce/checkout-panel/links-row.tsx +21 -21
  20. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +54 -54
  21. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  22. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  23. package/components/commerce/checkout-widget/const.ts +13 -13
  24. package/components/commerce/checkout-widget/index.tsx +192 -192
  25. package/components/commerce/checkout-widget/obs-string-set.ts +48 -48
  26. package/components/commerce/checkout-widget/use-anim-clx-set.ts +58 -58
  27. package/components/commerce/desktop-bag-popup.tsx +78 -78
  28. package/components/commerce/desktop-nav-menu.tsx +130 -130
  29. package/components/commerce/drawer/index.tsx +99 -99
  30. package/components/commerce/drawer/micro.tsx +144 -144
  31. package/components/commerce/drawer/shell.tsx +85 -85
  32. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  33. package/components/commerce/mobile-login-button.tsx +101 -101
  34. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  35. package/components/commerce/mobile-nav-menu-ai.tsx +48 -48
  36. package/components/commerce/mobile-nav-menu-item.tsx +49 -49
  37. package/components/commerce/mobile-nav-menu.tsx +101 -101
  38. package/components/contact-dialog/contact-form.tsx +113 -113
  39. package/components/contact-dialog/disclaimer.tsx +13 -13
  40. package/components/contact-dialog/index.tsx +64 -64
  41. package/components/copyright.tsx +17 -21
  42. package/components/drawer-margin.tsx +25 -25
  43. package/components/footer.tsx +77 -77
  44. package/components/header/desktop.tsx +50 -50
  45. package/components/header/index.tsx +52 -52
  46. package/components/header/mobile.tsx +163 -163
  47. package/components/header/theme-toggle.tsx +26 -26
  48. package/components/icons/24k-gold-card.tsx +43 -43
  49. package/components/icons/ai-chat-act.tsx +47 -47
  50. package/components/icons/ai-chat.tsx +29 -29
  51. package/components/icons/anodized-titanium.tsx +45 -45
  52. package/components/icons/avatar.tsx +11 -11
  53. package/components/icons/bag-icon.tsx +10 -10
  54. package/components/icons/blog-act.tsx +14 -14
  55. package/components/icons/blog.tsx +20 -20
  56. package/components/icons/bridge-act.tsx +18 -18
  57. package/components/icons/bridge.tsx +68 -68
  58. package/components/icons/changelog-act.tsx +15 -15
  59. package/components/icons/changelog.tsx +21 -21
  60. package/components/icons/chrome.tsx +45 -45
  61. package/components/icons/coins-act.tsx +29 -29
  62. package/components/icons/coins.tsx +20 -20
  63. package/components/icons/compare-cards-act.tsx +30 -30
  64. package/components/icons/compare-cards.tsx +21 -21
  65. package/components/icons/credit-act.tsx +29 -29
  66. package/components/icons/credit.tsx +20 -20
  67. package/components/icons/customer-support-act.tsx +27 -27
  68. package/components/icons/customer-support.tsx +21 -21
  69. package/components/icons/customers-act.tsx +65 -65
  70. package/components/icons/customers.tsx +33 -33
  71. package/components/icons/developer-docs-act.tsx +26 -26
  72. package/components/icons/developer-docs.tsx +20 -20
  73. package/components/icons/exchange-act.tsx +27 -27
  74. package/components/icons/exchange.tsx +21 -21
  75. package/components/icons/explorer-act.tsx +27 -27
  76. package/components/icons/explorer.tsx +22 -22
  77. package/components/icons/faqs-act.tsx +27 -27
  78. package/components/icons/faqs.tsx +21 -21
  79. package/components/icons/github.tsx +14 -14
  80. package/components/icons/guides-act.tsx +26 -26
  81. package/components/icons/guides.tsx +21 -21
  82. package/components/icons/gun-metal.tsx +44 -44
  83. package/components/icons/index.tsx +43 -43
  84. package/components/icons/integrations-act.tsx +41 -41
  85. package/components/icons/integrations.tsx +25 -25
  86. package/components/icons/irradescent.tsx +41 -41
  87. package/components/icons/launch-subnet.tsx +21 -21
  88. package/components/icons/launchsubnet-act.tsx +29 -29
  89. package/components/icons/left-arrow.tsx +11 -11
  90. package/components/icons/lux-finance-act.tsx +34 -34
  91. package/components/icons/lux-finance.tsx +23 -23
  92. package/components/icons/lux-logo.tsx +10 -10
  93. package/components/icons/lux-pass-act.tsx +41 -41
  94. package/components/icons/lux-pass.tsx +25 -25
  95. package/components/icons/lux-quests-act.tsx +15 -15
  96. package/components/icons/lux-quests.tsx +21 -21
  97. package/components/icons/market-act.tsx +39 -39
  98. package/components/icons/market.tsx +24 -24
  99. package/components/icons/mirrored-titanium.tsx +46 -46
  100. package/components/icons/more-benefits-act.tsx +29 -29
  101. package/components/icons/more-benefits.tsx +21 -21
  102. package/components/icons/open-source-act.tsx +41 -41
  103. package/components/icons/open-source.tsx +26 -26
  104. package/components/icons/right-arrow.tsx +10 -10
  105. package/components/icons/safe-act.tsx +77 -77
  106. package/components/icons/safe.tsx +37 -37
  107. package/components/icons/search.tsx +12 -12
  108. package/components/icons/secure-delivery.tsx +13 -13
  109. package/components/icons/shop-act.tsx +29 -29
  110. package/components/icons/shop.tsx +20 -20
  111. package/components/icons/social-icon.tsx +35 -35
  112. package/components/icons/social-svg.css +3 -3
  113. package/components/icons/sterling-silver-card.tsx +44 -44
  114. package/components/icons/templates-act.tsx +29 -29
  115. package/components/icons/templates.tsx +21 -21
  116. package/components/icons/validators-act.tsx +42 -42
  117. package/components/icons/validators.tsx +41 -41
  118. package/components/icons/view-all-card-act.tsx +28 -28
  119. package/components/icons/view-all-card.tsx +20 -20
  120. package/components/icons/wallet-act.tsx +29 -29
  121. package/components/icons/wallet.tsx +20 -20
  122. package/components/icons/warpcast.tsx +58 -58
  123. package/components/icons/youtube-logo.tsx +59 -59
  124. package/components/index.ts +27 -27
  125. package/components/logo.tsx +89 -89
  126. package/components/main.tsx +27 -27
  127. package/components/mini-chart/index.tsx +7 -7
  128. package/components/mini-chart/mini-chart-props.ts +43 -43
  129. package/components/mini-chart/mini-chart.tsx +85 -85
  130. package/components/mini-chart/wrapper.tsx +23 -23
  131. package/components/not-found/index.tsx +28 -28
  132. package/components/not-found/not-found-content.mdx +5 -5
  133. package/components/scripts.tsx +24 -24
  134. package/components/tooltip.tsx +31 -31
  135. package/environment.d.ts +5 -5
  136. package/next/analytics/fpixel.ts +15 -15
  137. package/next/analytics/google-analytics.ts +13 -13
  138. package/next/analytics/index.ts +3 -3
  139. package/next/analytics/pixel-analytics.tsx +54 -54
  140. package/next/font/get-app-router-font-classes.ts +12 -12
  141. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  142. package/next/font/next-font-desc.ts +27 -27
  143. package/next/font/pages-router-font-vars.tsx +18 -18
  144. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  145. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  146. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  147. package/next/head-metadata/index.tsx +208 -208
  148. package/next/middleware/determine-device-mw.ts +16 -16
  149. package/package.json +79 -79
  150. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  151. package/root-layout/index.tsx +112 -112
  152. package/server-actions/firebase-app.ts +14 -14
  153. package/server-actions/index.ts +5 -5
  154. package/server-actions/store-contact.ts +51 -51
  155. package/site-def/footer/community.tsx +67 -67
  156. package/site-def/footer/company.ts +37 -37
  157. package/site-def/footer/ecosystem.ts +37 -37
  158. package/site-def/footer/index.tsx +26 -26
  159. package/site-def/footer/legal.ts +28 -28
  160. package/site-def/footer/network.ts +45 -45
  161. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  162. package/site-def/index.ts +2 -2
  163. package/site-def/main-nav.tsx +458 -458
  164. package/style/cart-animation.css +29 -29
  165. package/style/checkout-animation.css +23 -23
  166. package/style/drawer-handle-overrides.css +160 -160
  167. package/style/lux-colors.css +85 -85
  168. package/style/lux-global.css +47 -47
  169. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  170. package/tailwind/index.ts +2 -2
  171. package/tailwind/lux-tw-fonts.ts +39 -39
  172. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  173. package/tsconfig.json +15 -15
  174. package/types/chatbot-config.ts +6 -6
  175. package/types/chatbot-suggested-question.ts +7 -7
  176. package/types/contact-info.ts +10 -10
  177. package/types/index.ts +4 -4
  178. package/types/site-def.ts +43 -43
@@ -1,192 +1,192 @@
1
- 'use client'
2
- import React, { useRef } from 'react'
3
- import { createPortal } from 'react-dom'
4
- import { usePathname, useRouter } from 'next/navigation'
5
- import { observer } from 'mobx-react-lite'
6
-
7
- import { cn } from '@hanzo/ui/util'
8
- import { useStepAnimation } from '@hanzo/ui/util-client'
9
-
10
- import { Image } from '@hanzo/ui/primitives'
11
-
12
- import { useCommerceDrawer, useRecentActivity } from '../../../commerce/ui/context'
13
-
14
- import CheckoutButton from '../checkout-button'
15
- import useAnimationClxSet from './use-anim-clx-set'
16
- import CONST from './const'
17
- import type { LineItem } from '@hanzo/commerce/types'
18
-
19
- const transStyle = (t: { transition: string, from : string, to: string } | undefined) : any => (
20
- t ? {
21
- transitionProperty: t.transition,
22
- transitionTimingFunction: CONST.animTimingFn,
23
- transitionDuration: `${CONST.animDurationMs}ms`
24
- } : {}
25
- )
26
-
27
- const transClx = (on: boolean, t: { transition: string, from : string, to: string } | undefined) : string => (
28
- on ? (t?.from ?? '') : (t?.to ?? '')
29
- )
30
-
31
- const VARS: any = {
32
- BR: {
33
- pos: 'bottom-[24px] right-[66px]',
34
- width: 'w-initial',
35
- centerText: false,
36
- coClx: 'w-auto',
37
- infoClx: 'w-auto',
38
- activeItemAnim: {
39
- co: {
40
- transition: 'none',
41
- from : 'px-3 gap-2.5',
42
- to: ''
43
- },
44
- coText: {
45
- transition: 'max-width',
46
- from : 'max-w-[100px]',
47
- to: 'max-w-[0px]'
48
- },
49
- info: {
50
- transition: 'transform, opacity',
51
- from : 'scale-x-100 opacity-100 origin-right',
52
- to: 'scale-x-0 opacity-0 origin-right'
53
- }
54
- },
55
- showArrow: true
56
- },
57
- TR: {
58
- pos: 'top-[48px] md:top-[80px] right-[28px]',
59
- width: 'w-initial',
60
- centerText: false,
61
- showQuantity: false,
62
- showArrow: true,
63
- coClx: 'w-auto px-3 gap-1',
64
- infoClx: 'w-auto',
65
- activeItemAnim: {
66
- co: {
67
- transition: 'none',
68
- from : 'px-3 gap-2.5',
69
- to: ''
70
- },
71
- coText: {
72
- transition: 'max-width',
73
- from : 'max-w-[100px]',
74
- to: 'max-w-[0px]'
75
- },
76
- info: {
77
- transition: 'transform',
78
- from : 'scale-x-100 origin-right',
79
- to: 'scale-x-0 origin-right'
80
- }
81
- },
82
- },
83
- TRIO: {
84
- pos: 'top-[48px] md:top-[70px] right-[28px]',
85
- centerText: false,
86
- showQuantity: true,
87
- showArrow: true,
88
- width: 'w-initial',
89
- coClx: 'hidden',
90
- infoClx: 'w-auto',
91
- activeItemAnim: {
92
- info: {
93
- transition: 'transform, opacity',
94
- from : 'scale-x-100 opacity-100',
95
- to: 'scale-x-50 opacity-0'
96
- }
97
- },
98
- }
99
- }
100
-
101
- const v = 'TR'
102
-
103
- const CheckoutWidget: React.FC<{
104
- clx?: string
105
- }> = observer(({
106
- clx=''
107
- }) => {
108
-
109
- const router = useRouter()
110
-
111
- const isCheckout = usePathname() === '/checkout'
112
- const clxSet = useAnimationClxSet(isCheckout)
113
-
114
- const recentActivity = useRecentActivity()
115
-
116
- // for rendering content after recentActivity.item() would return false
117
- const persistentRef = useRef<LineItem | undefined>(undefined)
118
-
119
- // Doing double duty of being initial step fn for StepAnimation,
120
- // and also capturing the item for persistentRef :)
121
- const initialStepFn = (): boolean => {
122
- if (!!recentActivity.item && !persistentRef.current) {
123
- persistentRef.current = recentActivity.item
124
- }
125
- return !!recentActivity.item
126
- }
127
- const steps = useStepAnimation(initialStepFn, [CONST.animDurationMs, CONST.animDurationMs, CONST.animDurationMs])
128
-
129
- const handleCheckout = () => { router.push('/checkout')}
130
-
131
- return globalThis?.document?.body && createPortal(
132
- (<div
133
- className={cn(
134
- VARS[v].width,
135
- 'z-below-modal-2 fixed ',
136
- VARS[v].pos,
137
- 'rounded-lg',
138
- 'flex',
139
- steps.notPast(0) ? 'bg-background' : '',
140
- steps.notPast(1) ? 'gap-2' : '',
141
- clxSet.asArray.join(' ')
142
- )}
143
- style={steps.notPast(1) ? {} : VARS[v].coClx?.includes('hidden') ? {} : CONST.shadowStyle}
144
- >
145
- <div
146
- className={cn(
147
- 'flex flex-row justify-between items-center',
148
- transClx(steps.notPast(0), VARS[v].activeItemAnim.info),
149
- VARS[v].itemClx,
150
- steps.notPast(1) ? 'px-3 border rounded-lg bg-level-1 border-muted-3' : ''
151
- )}
152
- style={transStyle(VARS[v].activeItemAnim.info)}
153
- >
154
- {steps.notPast(1) && persistentRef.current?.img && (
155
- <Image def={persistentRef.current.img} constrainTo={CONST.itemImgConstraint} preload className='grow-0 shrink-0'/>
156
- )}
157
- {steps.notPast(1) && persistentRef.current && (<div className='text-foreground grow ml-1'>
158
- <p className='whitespace-nowrap text-ellipsis text-sm'>{persistentRef.current.title}</p>
159
- <p className='whitespace-nowrap text-clip text-xxs' >recently added...</p>
160
- </div>)}
161
- </div>
162
- <CheckoutButton
163
- handleCheckout={handleCheckout}
164
- centerText={VARS[v].centerText ?? !steps.notPast(0)}
165
- variant='primary'
166
- rounded='lg'
167
- showQuantity={VARS[v].showQuantity ?? true}
168
- showArrow={VARS[v].showArrow ?? true}
169
- className={cn(
170
- // for setting and unsetting 'gap'
171
- transClx((VARS[v].activeItemAnim.coText ? steps.notPast(3) : true), VARS[v].activeItemAnim.co),
172
- VARS[v].coClx
173
- )}
174
- style={transStyle(VARS[v].activeItemAnim.co)}
175
- >
176
- <div
177
- className={cn(
178
- 'overflow-hidden',
179
- 'flex justify-center items-center',
180
- transClx(steps.notPast(2), VARS[v].activeItemAnim.coText),
181
- )}
182
- style={transStyle(VARS[v].activeItemAnim.coText)}
183
- >
184
- Checkout
185
- </div>
186
- </CheckoutButton>
187
- </div>),
188
- globalThis?.document?.body
189
- )
190
- })
191
-
192
- export default CheckoutWidget
1
+ 'use client'
2
+ import React, { useRef } from 'react'
3
+ import { createPortal } from 'react-dom'
4
+ import { usePathname, useRouter } from 'next/navigation'
5
+ import { observer } from 'mobx-react-lite'
6
+
7
+ import { cn } from '@hanzo/ui/util'
8
+ import { useStepAnimation } from '@hanzo/ui/util-client'
9
+
10
+ import { Image } from '@hanzo/ui/primitives'
11
+
12
+ import { useCommerceDrawer, useRecentActivity } from '../../../commerce/ui/context'
13
+
14
+ import CheckoutButton from '../checkout-button'
15
+ import useAnimationClxSet from './use-anim-clx-set'
16
+ import CONST from './const'
17
+ import type { LineItem } from '@hanzo/commerce/types'
18
+
19
+ const transStyle = (t: { transition: string, from : string, to: string } | undefined) : any => (
20
+ t ? {
21
+ transitionProperty: t.transition,
22
+ transitionTimingFunction: CONST.animTimingFn,
23
+ transitionDuration: `${CONST.animDurationMs}ms`
24
+ } : {}
25
+ )
26
+
27
+ const transClx = (on: boolean, t: { transition: string, from : string, to: string } | undefined) : string => (
28
+ on ? (t?.from ?? '') : (t?.to ?? '')
29
+ )
30
+
31
+ const VARS: any = {
32
+ BR: {
33
+ pos: 'bottom-[24px] right-[66px]',
34
+ width: 'w-initial',
35
+ centerText: false,
36
+ coClx: 'w-auto',
37
+ infoClx: 'w-auto',
38
+ activeItemAnim: {
39
+ co: {
40
+ transition: 'none',
41
+ from : 'px-3 gap-2.5',
42
+ to: ''
43
+ },
44
+ coText: {
45
+ transition: 'max-width',
46
+ from : 'max-w-[100px]',
47
+ to: 'max-w-[0px]'
48
+ },
49
+ info: {
50
+ transition: 'transform, opacity',
51
+ from : 'scale-x-100 opacity-100 origin-right',
52
+ to: 'scale-x-0 opacity-0 origin-right'
53
+ }
54
+ },
55
+ showArrow: true
56
+ },
57
+ TR: {
58
+ pos: 'top-[48px] md:top-[80px] right-[28px]',
59
+ width: 'w-initial',
60
+ centerText: false,
61
+ showQuantity: false,
62
+ showArrow: true,
63
+ coClx: 'w-auto px-3 gap-1',
64
+ infoClx: 'w-auto',
65
+ activeItemAnim: {
66
+ co: {
67
+ transition: 'none',
68
+ from : 'px-3 gap-2.5',
69
+ to: ''
70
+ },
71
+ coText: {
72
+ transition: 'max-width',
73
+ from : 'max-w-[100px]',
74
+ to: 'max-w-[0px]'
75
+ },
76
+ info: {
77
+ transition: 'transform',
78
+ from : 'scale-x-100 origin-right',
79
+ to: 'scale-x-0 origin-right'
80
+ }
81
+ },
82
+ },
83
+ TRIO: {
84
+ pos: 'top-[48px] md:top-[70px] right-[28px]',
85
+ centerText: false,
86
+ showQuantity: true,
87
+ showArrow: true,
88
+ width: 'w-initial',
89
+ coClx: 'hidden',
90
+ infoClx: 'w-auto',
91
+ activeItemAnim: {
92
+ info: {
93
+ transition: 'transform, opacity',
94
+ from : 'scale-x-100 opacity-100',
95
+ to: 'scale-x-50 opacity-0'
96
+ }
97
+ },
98
+ }
99
+ }
100
+
101
+ const v = 'TR'
102
+
103
+ const CheckoutWidget: React.FC<{
104
+ clx?: string
105
+ }> = observer(({
106
+ clx=''
107
+ }) => {
108
+
109
+ const router = useRouter()
110
+
111
+ const isCheckout = usePathname() === '/checkout'
112
+ const clxSet = useAnimationClxSet(isCheckout)
113
+
114
+ const recentActivity = useRecentActivity()
115
+
116
+ // for rendering content after recentActivity.item() would return false
117
+ const persistentRef = useRef<LineItem | undefined>(undefined)
118
+
119
+ // Doing double duty of being initial step fn for StepAnimation,
120
+ // and also capturing the item for persistentRef :)
121
+ const initialStepFn = (): boolean => {
122
+ if (!!recentActivity.item && !persistentRef.current) {
123
+ persistentRef.current = recentActivity.item
124
+ }
125
+ return !!recentActivity.item
126
+ }
127
+ const steps = useStepAnimation(initialStepFn, [CONST.animDurationMs, CONST.animDurationMs, CONST.animDurationMs])
128
+
129
+ const handleCheckout = () => { router.push('/checkout')}
130
+
131
+ return globalThis?.document?.body && createPortal(
132
+ (<div
133
+ className={cn(
134
+ VARS[v].width,
135
+ 'z-below-modal-2 fixed ',
136
+ VARS[v].pos,
137
+ 'rounded-lg',
138
+ 'flex',
139
+ steps.notPast(0) ? 'bg-background' : '',
140
+ steps.notPast(1) ? 'gap-2' : '',
141
+ clxSet.asArray.join(' ')
142
+ )}
143
+ style={steps.notPast(1) ? {} : VARS[v].coClx?.includes('hidden') ? {} : CONST.shadowStyle}
144
+ >
145
+ <div
146
+ className={cn(
147
+ 'flex flex-row justify-between items-center',
148
+ transClx(steps.notPast(0), VARS[v].activeItemAnim.info),
149
+ VARS[v].itemClx,
150
+ steps.notPast(1) ? 'px-3 border rounded-lg bg-level-1 border-muted-3' : ''
151
+ )}
152
+ style={transStyle(VARS[v].activeItemAnim.info)}
153
+ >
154
+ {steps.notPast(1) && persistentRef.current?.img && (
155
+ <Image def={persistentRef.current.img} constrainTo={CONST.itemImgConstraint} preload className='grow-0 shrink-0'/>
156
+ )}
157
+ {steps.notPast(1) && persistentRef.current && (<div className='text-foreground grow ml-1'>
158
+ <p className='whitespace-nowrap text-ellipsis text-sm'>{persistentRef.current.title}</p>
159
+ <p className='whitespace-nowrap text-clip text-xxs' >recently added...</p>
160
+ </div>)}
161
+ </div>
162
+ <CheckoutButton
163
+ handleCheckout={handleCheckout}
164
+ centerText={VARS[v].centerText ?? !steps.notPast(0)}
165
+ variant='primary'
166
+ rounded='lg'
167
+ showQuantity={VARS[v].showQuantity ?? true}
168
+ showArrow={VARS[v].showArrow ?? true}
169
+ className={cn(
170
+ // for setting and unsetting 'gap'
171
+ transClx((VARS[v].activeItemAnim.coText ? steps.notPast(3) : true), VARS[v].activeItemAnim.co),
172
+ VARS[v].coClx
173
+ )}
174
+ style={transStyle(VARS[v].activeItemAnim.co)}
175
+ >
176
+ <div
177
+ className={cn(
178
+ 'overflow-hidden',
179
+ 'flex justify-center items-center',
180
+ transClx(steps.notPast(2), VARS[v].activeItemAnim.coText),
181
+ )}
182
+ style={transStyle(VARS[v].activeItemAnim.coText)}
183
+ >
184
+ Checkout
185
+ </div>
186
+ </CheckoutButton>
187
+ </div>),
188
+ globalThis?.document?.body
189
+ )
190
+ })
191
+
192
+ export default CheckoutWidget
@@ -1,48 +1,48 @@
1
- import {
2
- action,
3
- computed,
4
- makeObservable,
5
- observable
6
- } from 'mobx'
7
-
8
- class ObsStringSet {
9
-
10
- private _set = observable.set(new Set<string>())
11
-
12
- constructor(initial: string[] = []) {
13
- initial.forEach((el) => {this._set.add(el)})
14
- makeObservable(this, {
15
- add: action,
16
- remove: action,
17
- asArray: computed
18
- })
19
- }
20
-
21
- add = (v: string | string[]): void => {
22
- if (Array.isArray(v)) {
23
- v.forEach((el) => {this._set.add(el)})
24
- }
25
- else {
26
- this._set.add(v)
27
- }
28
- }
29
-
30
- remove = (v: string | string[]): void => {
31
- if (Array.isArray(v)) {
32
- v.forEach((el) => {this._set.delete(el)})
33
- }
34
- else {
35
- this._set.delete(v)
36
- }
37
- }
38
-
39
- has = (v: string): boolean => (
40
- this._set.has(v)
41
- )
42
-
43
- get asArray() {
44
- return Array.from(this._set)
45
- }
46
- }
47
-
48
- export default ObsStringSet
1
+ import {
2
+ action,
3
+ computed,
4
+ makeObservable,
5
+ observable
6
+ } from 'mobx'
7
+
8
+ class ObsStringSet {
9
+
10
+ private _set = observable.set(new Set<string>())
11
+
12
+ constructor(initial: string[] = []) {
13
+ initial.forEach((el) => {this._set.add(el)})
14
+ makeObservable(this, {
15
+ add: action,
16
+ remove: action,
17
+ asArray: computed
18
+ })
19
+ }
20
+
21
+ add = (v: string | string[]): void => {
22
+ if (Array.isArray(v)) {
23
+ v.forEach((el) => {this._set.add(el)})
24
+ }
25
+ else {
26
+ this._set.add(v)
27
+ }
28
+ }
29
+
30
+ remove = (v: string | string[]): void => {
31
+ if (Array.isArray(v)) {
32
+ v.forEach((el) => {this._set.delete(el)})
33
+ }
34
+ else {
35
+ this._set.delete(v)
36
+ }
37
+ }
38
+
39
+ has = (v: string): boolean => (
40
+ this._set.has(v)
41
+ )
42
+
43
+ get asArray() {
44
+ return Array.from(this._set)
45
+ }
46
+ }
47
+
48
+ export default ObsStringSet
@@ -1,59 +1,59 @@
1
- import { useEffect, useRef } from 'react'
2
- import { reaction, runInAction} from 'mobx'
3
-
4
- import { useCommerce } from '@hanzo/commerce'
5
-
6
- import ObsStringSet from './obs-string-set'
7
- import { useSelectAndBuy } from '../../../commerce/ui/context'
8
-
9
- export default (isCheckout: boolean): ObsStringSet => {
10
-
11
- const ui = useSelectAndBuy()
12
- const cmmc = useCommerce()
13
-
14
- const clxSetRef = useRef<ObsStringSet>(new ObsStringSet(
15
- (cmmc.cartEmpty || ui.currentSkuPath || isCheckout) ? ['hidden'] : []
16
- ))
17
-
18
- useEffect(() => (
19
- reaction(
20
- () => ({
21
- microOpen: !(cmmc.cartEmpty || !!ui.currentSkuPath || isCheckout),
22
- buyOpen: !!ui.currentSkuPath
23
- }),
24
- (val, prev) => {
25
-
26
- runInAction(() => {
27
- if (!val.microOpen && prev.microOpen) {
28
- clxSetRef.current.add('checkout-widget-disappears')
29
- }
30
- else if (val.microOpen && !prev.microOpen) {
31
- clxSetRef.current.remove('hidden')
32
- clxSetRef.current.add('checkout-widget-appears')
33
- }
34
- if (!val.buyOpen && prev.buyOpen) {
35
- clxSetRef.current.add('checkout-widget-appears-after-buy-drawer-closes')
36
- }
37
- else {
38
- clxSetRef.current.remove('checkout-widget-appears-after-buy-drawer-closes')
39
- }
40
- })
41
-
42
- setTimeout(() => {runInAction(() => {
43
- clxSetRef.current.remove(['checkout-widget-appears', 'checkout-widget-appears-after-buy-drawer-closes'])
44
- if (clxSetRef.current.has('checkout-widget-disappears') ) {
45
- clxSetRef.current.remove('checkout-widget-disappears')
46
- clxSetRef.current.add('hidden')
47
- }
48
- })}, 800)
49
- },
50
- {equals: (val, prev) => (
51
- val.microOpen === prev.microOpen
52
- &&
53
- val.buyOpen === prev.buyOpen
54
- )}
55
- )
56
- ), [isCheckout])
57
-
58
- return clxSetRef.current
1
+ import { useEffect, useRef } from 'react'
2
+ import { reaction, runInAction} from 'mobx'
3
+
4
+ import { useCommerce } from '@hanzo/commerce'
5
+
6
+ import ObsStringSet from './obs-string-set'
7
+ import { useSelectAndBuy } from '../../../commerce/ui/context'
8
+
9
+ export default (isCheckout: boolean): ObsStringSet => {
10
+
11
+ const ui = useSelectAndBuy()
12
+ const cmmc = useCommerce()
13
+
14
+ const clxSetRef = useRef<ObsStringSet>(new ObsStringSet(
15
+ (cmmc.cartEmpty || ui.currentSkuPath || isCheckout) ? ['hidden'] : []
16
+ ))
17
+
18
+ useEffect(() => (
19
+ reaction(
20
+ () => ({
21
+ microOpen: !(cmmc.cartEmpty || !!ui.currentSkuPath || isCheckout),
22
+ buyOpen: !!ui.currentSkuPath
23
+ }),
24
+ (val, prev) => {
25
+
26
+ runInAction(() => {
27
+ if (!val.microOpen && prev.microOpen) {
28
+ clxSetRef.current.add('checkout-widget-disappears')
29
+ }
30
+ else if (val.microOpen && !prev.microOpen) {
31
+ clxSetRef.current.remove('hidden')
32
+ clxSetRef.current.add('checkout-widget-appears')
33
+ }
34
+ if (!val.buyOpen && prev.buyOpen) {
35
+ clxSetRef.current.add('checkout-widget-appears-after-buy-drawer-closes')
36
+ }
37
+ else {
38
+ clxSetRef.current.remove('checkout-widget-appears-after-buy-drawer-closes')
39
+ }
40
+ })
41
+
42
+ setTimeout(() => {runInAction(() => {
43
+ clxSetRef.current.remove(['checkout-widget-appears', 'checkout-widget-appears-after-buy-drawer-closes'])
44
+ if (clxSetRef.current.has('checkout-widget-disappears') ) {
45
+ clxSetRef.current.remove('checkout-widget-disappears')
46
+ clxSetRef.current.add('hidden')
47
+ }
48
+ })}, 800)
49
+ },
50
+ {equals: (val, prev) => (
51
+ val.microOpen === prev.microOpen
52
+ &&
53
+ val.buyOpen === prev.buyOpen
54
+ )}
55
+ )
56
+ ), [isCheckout])
57
+
58
+ return clxSetRef.current
59
59
  }