@luxfi/core 5.2.10 → 5.2.11

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 (155) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +126 -126
  3. package/commerce/ui/store.ts +306 -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/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/cart-accordian.tsx +66 -0
  17. package/components/commerce/checkout-panel/checkout-panel-props.ts +10 -0
  18. package/components/commerce/checkout-panel/{dt-bag-carousel.tsx → desktop-bag-carousel.tsx} +36 -36
  19. package/components/commerce/checkout-panel/desktop-cp.tsx +83 -0
  20. package/components/commerce/checkout-panel/index.tsx +126 -129
  21. package/components/commerce/checkout-panel/mobile-cp.tsx +67 -0
  22. package/components/commerce/checkout-panel/policy-links.tsx +29 -0
  23. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  24. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  25. package/components/commerce/checkout-widget/const.ts +13 -13
  26. package/components/commerce/checkout-widget/index.tsx +192 -192
  27. package/components/commerce/checkout-widget/obs-string-set.ts +48 -48
  28. package/components/commerce/checkout-widget/use-anim-clx-set.ts +58 -58
  29. package/components/commerce/desktop-bag-popup.tsx +78 -78
  30. package/components/commerce/desktop-nav-menu.tsx +130 -130
  31. package/components/commerce/drawer/index.tsx +99 -99
  32. package/components/commerce/drawer/micro.tsx +144 -144
  33. package/components/commerce/drawer/shell.tsx +85 -85
  34. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  35. package/components/commerce/mobile-login-button.tsx +101 -101
  36. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  37. package/components/commerce/mobile-nav-menu-ai.tsx +47 -48
  38. package/components/commerce/mobile-nav-menu-item.tsx +49 -49
  39. package/components/commerce/mobile-nav-menu.tsx +101 -101
  40. package/components/contact-dialog/contact-form.tsx +113 -113
  41. package/components/contact-dialog/disclaimer.tsx +13 -13
  42. package/components/contact-dialog/index.tsx +64 -64
  43. package/components/copyright.tsx +21 -21
  44. package/components/drawer-margin.tsx +25 -25
  45. package/components/footer.tsx +77 -77
  46. package/components/header/desktop.tsx +50 -50
  47. package/components/header/index.tsx +52 -52
  48. package/components/header/mobile.tsx +163 -163
  49. package/components/header/theme-toggle.tsx +26 -26
  50. package/components/icons/24k-gold-card.tsx +43 -43
  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.tsx +20 -20
  56. package/components/icons/bridge.tsx +68 -68
  57. package/components/icons/changelog.tsx +21 -21
  58. package/components/icons/chrome.tsx +45 -45
  59. package/components/icons/coins.tsx +20 -20
  60. package/components/icons/compare-cards.tsx +21 -21
  61. package/components/icons/credit.tsx +20 -20
  62. package/components/icons/customer-support.tsx +21 -21
  63. package/components/icons/customers.tsx +33 -33
  64. package/components/icons/developer-docs.tsx +20 -20
  65. package/components/icons/exchange.tsx +21 -21
  66. package/components/icons/explorer.tsx +22 -22
  67. package/components/icons/faqs.tsx +21 -21
  68. package/components/icons/github.tsx +14 -14
  69. package/components/icons/guides.tsx +21 -21
  70. package/components/icons/gun-metal.tsx +44 -44
  71. package/components/icons/index.tsx +43 -43
  72. package/components/icons/integrations.tsx +25 -25
  73. package/components/icons/irradescent.tsx +41 -41
  74. package/components/icons/launch-subnet.tsx +21 -21
  75. package/components/icons/left-arrow.tsx +11 -11
  76. package/components/icons/lux-finance.tsx +23 -23
  77. package/components/icons/lux-logo.tsx +10 -10
  78. package/components/icons/lux-pass.tsx +25 -25
  79. package/components/icons/lux-quests.tsx +21 -21
  80. package/components/icons/market.tsx +24 -24
  81. package/components/icons/mirrored-titanium.tsx +46 -46
  82. package/components/icons/more-benefits.tsx +21 -21
  83. package/components/icons/open-source.tsx +26 -26
  84. package/components/icons/right-arrow.tsx +10 -10
  85. package/components/icons/safe.tsx +37 -37
  86. package/components/icons/search.tsx +12 -12
  87. package/components/icons/secure-delivery.tsx +13 -13
  88. package/components/icons/shop.tsx +20 -20
  89. package/components/icons/social-icon.tsx +35 -35
  90. package/components/icons/social-svg.css +3 -3
  91. package/components/icons/sterling-silver-card.tsx +44 -44
  92. package/components/icons/templates.tsx +21 -21
  93. package/components/icons/validators.tsx +41 -41
  94. package/components/icons/view-all-card.tsx +20 -20
  95. package/components/icons/wallet.tsx +20 -20
  96. package/components/icons/warpcast.tsx +58 -58
  97. package/components/icons/youtube-logo.tsx +59 -59
  98. package/components/index.ts +27 -27
  99. package/components/logo.tsx +89 -89
  100. package/components/main.tsx +27 -27
  101. package/components/mini-chart/index.tsx +7 -7
  102. package/components/mini-chart/mini-chart-props.ts +43 -43
  103. package/components/mini-chart/mini-chart.tsx +85 -85
  104. package/components/mini-chart/wrapper.tsx +23 -23
  105. package/components/not-found/index.tsx +28 -28
  106. package/components/not-found/not-found-content.mdx +5 -5
  107. package/components/scripts.tsx +24 -24
  108. package/components/tooltip.tsx +31 -31
  109. package/environment.d.ts +5 -5
  110. package/next/analytics/fpixel.ts +15 -15
  111. package/next/analytics/google-analytics.ts +13 -13
  112. package/next/analytics/index.ts +3 -3
  113. package/next/analytics/pixel-analytics.tsx +54 -54
  114. package/next/font/get-app-router-font-classes.ts +12 -12
  115. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  116. package/next/font/next-font-desc.ts +27 -27
  117. package/next/font/pages-router-font-vars.tsx +18 -18
  118. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  119. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  120. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  121. package/next/head-metadata/index.tsx +208 -208
  122. package/next/middleware/determine-device-mw.ts +16 -16
  123. package/package.json +79 -79
  124. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  125. package/root-layout/index.tsx +112 -112
  126. package/server-actions/firebase-app.ts +14 -14
  127. package/server-actions/index.ts +5 -5
  128. package/server-actions/store-contact.ts +51 -51
  129. package/site-def/footer/community.tsx +67 -67
  130. package/site-def/footer/company.ts +37 -37
  131. package/site-def/footer/ecosystem.ts +37 -37
  132. package/site-def/footer/index.tsx +26 -26
  133. package/site-def/footer/legal.ts +28 -28
  134. package/site-def/footer/network.ts +45 -45
  135. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  136. package/site-def/index.ts +2 -2
  137. package/site-def/main-nav.tsx +392 -392
  138. package/style/cart-animation.css +29 -29
  139. package/style/checkout-animation.css +23 -23
  140. package/style/drawer-handle-overrides.css +160 -160
  141. package/style/lux-colors.css +85 -85
  142. package/style/lux-global.css +30 -30
  143. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  144. package/tailwind/index.ts +2 -2
  145. package/tailwind/lux-tw-fonts.ts +39 -39
  146. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  147. package/tsconfig.json +15 -15
  148. package/types/chatbot-config.ts +6 -6
  149. package/types/chatbot-suggested-question.ts +7 -7
  150. package/types/contact-info.ts +10 -10
  151. package/types/index.ts +4 -4
  152. package/types/site-def.ts +43 -43
  153. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +0 -85
  154. package/components/commerce/checkout-panel/links-row.tsx +0 -21
  155. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +0 -55
@@ -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
  }