@luxfi/ui 5.3.7 → 5.3.9

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 (180) 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 +116 -107
  10. package/components/auth/signup-panel.tsx +119 -0
  11. package/components/back-button.tsx +49 -49
  12. package/components/chat-widget.tsx +85 -85
  13. package/components/commerce/_to_deprecate_checkout-widget/const.ts +13 -13
  14. package/components/commerce/_to_deprecate_checkout-widget/index.tsx_ +188 -188
  15. package/components/commerce/_to_deprecate_checkout-widget/obs-string-set.ts +48 -48
  16. package/components/commerce/_to_deprecate_checkout-widget/use-anim-clx-set.ts +58 -58
  17. package/components/commerce/bag-button.tsx +98 -98
  18. package/components/commerce/buy-button.tsx +34 -34
  19. package/components/commerce/checkout-button.tsx +129 -129
  20. package/components/commerce/checkout-panel/cart-accordian.tsx +66 -66
  21. package/components/commerce/checkout-panel/checkout-panel-props.ts +9 -9
  22. package/components/commerce/checkout-panel/desktop-bag-carousel.tsx +36 -36
  23. package/components/commerce/checkout-panel/desktop-cp.tsx +82 -82
  24. package/components/commerce/checkout-panel/index.tsx +126 -126
  25. package/components/commerce/checkout-panel/mobile-cp.tsx +66 -66
  26. package/components/commerce/checkout-panel/policy-links.tsx +29 -29
  27. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  28. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  29. package/components/commerce/desktop-bag-popup.tsx +78 -78
  30. package/components/commerce/desktop-nav-menu.tsx +194 -194
  31. package/components/commerce/drawer/index.tsx +88 -88
  32. package/components/commerce/drawer/micro.tsx +145 -145
  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 +107 -107
  36. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  37. package/components/commerce/mobile-nav-menu-ai.tsx +50 -50
  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 +28 -28
  45. package/components/footer.tsx +77 -77
  46. package/components/header/desktop.tsx +51 -51
  47. package/components/header/index.tsx +50 -50
  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-act.tsx +47 -47
  52. package/components/icons/ai-chat.tsx +29 -29
  53. package/components/icons/anodized-titanium.tsx +45 -45
  54. package/components/icons/avatar.tsx +11 -11
  55. package/components/icons/bag-icon.tsx +10 -10
  56. package/components/icons/blog-act.tsx +14 -14
  57. package/components/icons/blog.tsx +20 -20
  58. package/components/icons/bridge-act.tsx +18 -18
  59. package/components/icons/bridge.tsx +68 -68
  60. package/components/icons/changelog-act.tsx +15 -15
  61. package/components/icons/changelog.tsx +21 -21
  62. package/components/icons/chrome.tsx +45 -45
  63. package/components/icons/coins-act.tsx +29 -29
  64. package/components/icons/coins.tsx +20 -20
  65. package/components/icons/compare-cards-act.tsx +30 -30
  66. package/components/icons/compare-cards.tsx +21 -21
  67. package/components/icons/credit-act.tsx +29 -29
  68. package/components/icons/credit.tsx +20 -20
  69. package/components/icons/customer-support-act.tsx +27 -27
  70. package/components/icons/customer-support.tsx +21 -21
  71. package/components/icons/customers-act.tsx +65 -65
  72. package/components/icons/customers.tsx +33 -33
  73. package/components/icons/developer-docs-act.tsx +26 -26
  74. package/components/icons/developer-docs.tsx +20 -20
  75. package/components/icons/exchange-act.tsx +27 -27
  76. package/components/icons/exchange.tsx +21 -21
  77. package/components/icons/explorer-act.tsx +27 -27
  78. package/components/icons/explorer.tsx +22 -22
  79. package/components/icons/faqs-act.tsx +27 -27
  80. package/components/icons/faqs.tsx +21 -21
  81. package/components/icons/github.tsx +14 -14
  82. package/components/icons/guides-act.tsx +26 -26
  83. package/components/icons/guides.tsx +21 -21
  84. package/components/icons/gun-metal.tsx +44 -44
  85. package/components/icons/index.tsx +43 -43
  86. package/components/icons/integrations-act.tsx +41 -41
  87. package/components/icons/integrations.tsx +25 -25
  88. package/components/icons/irradescent.tsx +41 -41
  89. package/components/icons/launch-subnet.tsx +21 -21
  90. package/components/icons/launchsubnet-act.tsx +29 -29
  91. package/components/icons/left-arrow.tsx +11 -11
  92. package/components/icons/lux-finance-act.tsx +34 -34
  93. package/components/icons/lux-finance.tsx +23 -23
  94. package/components/icons/lux-logo.tsx +10 -10
  95. package/components/icons/lux-pass-act.tsx +41 -41
  96. package/components/icons/lux-pass.tsx +25 -25
  97. package/components/icons/lux-quests-act.tsx +15 -15
  98. package/components/icons/lux-quests.tsx +21 -21
  99. package/components/icons/market-act.tsx +39 -39
  100. package/components/icons/market.tsx +24 -24
  101. package/components/icons/mirrored-titanium.tsx +46 -46
  102. package/components/icons/more-benefits-act.tsx +29 -29
  103. package/components/icons/more-benefits.tsx +21 -21
  104. package/components/icons/open-source-act.tsx +41 -41
  105. package/components/icons/open-source.tsx +26 -26
  106. package/components/icons/right-arrow.tsx +10 -10
  107. package/components/icons/safe-act.tsx +77 -77
  108. package/components/icons/safe.tsx +37 -37
  109. package/components/icons/search.tsx +12 -12
  110. package/components/icons/secure-delivery.tsx +13 -13
  111. package/components/icons/shop-act.tsx +29 -29
  112. package/components/icons/shop.tsx +20 -20
  113. package/components/icons/social-icon.tsx +35 -35
  114. package/components/icons/social-svg.css +3 -3
  115. package/components/icons/sterling-silver-card.tsx +44 -44
  116. package/components/icons/templates-act.tsx +29 -29
  117. package/components/icons/templates.tsx +21 -21
  118. package/components/icons/validators-act.tsx +42 -42
  119. package/components/icons/validators.tsx +41 -41
  120. package/components/icons/view-all-card-act.tsx +28 -28
  121. package/components/icons/view-all-card.tsx +20 -20
  122. package/components/icons/wallet-act.tsx +29 -29
  123. package/components/icons/wallet.tsx +20 -20
  124. package/components/icons/warpcast.tsx +58 -58
  125. package/components/icons/youtube-logo.tsx +59 -59
  126. package/components/index.ts +26 -25
  127. package/components/logo.tsx +89 -89
  128. package/components/main.tsx +27 -27
  129. package/components/mini-chart/index.tsx +7 -7
  130. package/components/mini-chart/mini-chart-props.ts +43 -43
  131. package/components/mini-chart/mini-chart.tsx +85 -85
  132. package/components/mini-chart/wrapper.tsx +23 -23
  133. package/components/not-found/index.tsx +28 -28
  134. package/components/not-found/not-found-content.mdx +5 -5
  135. package/components/scripts.tsx +24 -24
  136. package/components/tooltip.tsx +31 -31
  137. package/environment.d.ts +5 -5
  138. package/next/analytics/fpixel.ts +15 -15
  139. package/next/analytics/google-analytics.ts +13 -13
  140. package/next/analytics/index.ts +3 -3
  141. package/next/analytics/pixel-analytics.tsx +54 -54
  142. package/next/font/get-app-router-font-classes.ts +12 -12
  143. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  144. package/next/font/next-font-desc.ts +27 -27
  145. package/next/font/pages-router-font-vars.tsx +18 -18
  146. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  147. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  148. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  149. package/next/head-metadata/index.tsx +208 -208
  150. package/next/middleware/determine-device-mw.ts +29 -16
  151. package/package.json +80 -80
  152. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  153. package/root-layout/index.tsx +112 -112
  154. package/server-actions/firebase-app.ts +14 -14
  155. package/server-actions/index.ts +5 -5
  156. package/server-actions/store-contact.ts +51 -51
  157. package/site-def/footer/community.tsx +67 -67
  158. package/site-def/footer/company.ts +37 -37
  159. package/site-def/footer/ecosystem.ts +37 -37
  160. package/site-def/footer/index.tsx +26 -26
  161. package/site-def/footer/legal.ts +28 -28
  162. package/site-def/footer/network.ts +45 -45
  163. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  164. package/site-def/index.ts +2 -2
  165. package/site-def/main-nav.tsx +458 -458
  166. package/style/cart-animation.css +29 -29
  167. package/style/checkout-animation.css +23 -23
  168. package/style/drawer-handle-overrides.css +160 -160
  169. package/style/lux-colors.css +85 -85
  170. package/style/lux-global.css +50 -50
  171. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  172. package/tailwind/index.ts +2 -2
  173. package/tailwind/lux-tw-fonts.ts +39 -39
  174. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  175. package/tsconfig.json +15 -15
  176. package/types/chatbot-config.ts +6 -6
  177. package/types/chatbot-suggested-question.ts +7 -7
  178. package/types/contact-info.ts +10 -10
  179. package/types/index.ts +4 -4
  180. package/types/site-def.ts +43 -43
@@ -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
  }
@@ -1,98 +1,98 @@
1
- 'use client'
2
- import React, { useEffect, useRef } from 'react'
3
- import { observable, type IObservableValue, reaction, runInAction } from 'mobx'
4
- import { observer } from 'mobx-react-lite'
5
-
6
- import { buttonVariants } from '@hanzo/ui/primitives'
7
- import { cn, type VariantProps } from '@hanzo/ui/util'
8
- import { useCommerce } from '@hanzo/commerce'
9
-
10
- import * as Icons from '../icons'
11
-
12
- const BagButton: React.FC<{
13
- showIfEmpty?: boolean
14
- animateOnHover?: boolean
15
- animateOnQuantityChange?: boolean
16
- size?: VariantProps<typeof buttonVariants>['size']
17
- className?: string
18
- iconClx?: string
19
- onClick?: () => void
20
- }> = observer(({
21
- showIfEmpty=false,
22
- animateOnHover=true,
23
- animateOnQuantityChange=true,
24
- size='default',
25
- className='',
26
- iconClx='',
27
- onClick
28
- }) => {
29
-
30
- const c = useCommerce()
31
- const wiggleRef = useRef<IObservableValue<'more' | 'less' | 'none'>>(observable.box('none'))
32
-
33
- useEffect(() => (
34
- // return IReactionDisposer
35
- animateOnQuantityChange ? reaction(
36
- () => (c.cartQuantity),
37
- (curr, prev) => {
38
- if (curr > prev) {
39
- runInAction(() => {wiggleRef.current.set('more')})
40
- }
41
- else {
42
- runInAction(() => {wiggleRef.current.set('less')})
43
- }
44
- setTimeout(() => {
45
- // Note that this doesn't actually stop the animation
46
- // just resets the styles
47
- runInAction(() => {wiggleRef.current.set('none')})
48
- }, 800)
49
- }
50
- ) : undefined
51
- ), [])
52
-
53
- // undefined means context is not installed, ie commerce functions are not in use
54
- if (!c || (!showIfEmpty && c.cartEmpty)) {
55
- return <div /> // trigger code needs non-null
56
- }
57
-
58
-
59
- return (
60
- <div
61
- aria-label="Bag"
62
- role='button'
63
- onClick={onClick}
64
- className={cn(
65
- buttonVariants({ variant: 'ghost', size, rounded: 'md' }),
66
- // Overides the bg change on hover --not a "hover effect"
67
- 'relative group p-0 aspect-square hover:bg-background',
68
- ((wiggleRef.current.get() === 'more') ?
69
- 'item-added-to-cart-animation'
70
- :
71
- (wiggleRef.current.get() === 'less') ? 'item-removed-from-cart-animation' : ''),
72
- className
73
- )}
74
- >
75
- {!c.cartEmpty && (
76
- <div className={
77
- 'z-above-content flex flex-col justify-center items-center ' +
78
- 'absolute left-0 right-0 top-0 bottom-0 ' +
79
- 'leading-none font-sans font-bold text-primary-fg text-xs '
80
- }>
81
- <div className='h-[3px] w-full' />
82
- <div>{c.cartQuantity}</div>
83
- </div>
84
- )}
85
- <Icons.bag width='24' height='28' className={cn(
86
- 'relative -top-[3px] fill-primary',
87
- iconClx,
88
- (animateOnHover ?
89
- 'group-hover:fill-primary-hover group-hover:scale-105 transition-scale transition-duration-300'
90
- :
91
- ''
92
- )
93
- )} aria-hidden="true" />
94
- </div>
95
- )
96
- })
97
-
98
- export default BagButton
1
+ 'use client'
2
+ import React, { useEffect, useRef } from 'react'
3
+ import { observable, type IObservableValue, reaction, runInAction } from 'mobx'
4
+ import { observer } from 'mobx-react-lite'
5
+
6
+ import { buttonVariants } from '@hanzo/ui/primitives'
7
+ import { cn, type VariantProps } from '@hanzo/ui/util'
8
+ import { useCommerce } from '@hanzo/commerce'
9
+
10
+ import * as Icons from '../icons'
11
+
12
+ const BagButton: React.FC<{
13
+ showIfEmpty?: boolean
14
+ animateOnHover?: boolean
15
+ animateOnQuantityChange?: boolean
16
+ size?: VariantProps<typeof buttonVariants>['size']
17
+ className?: string
18
+ iconClx?: string
19
+ onClick?: () => void
20
+ }> = observer(({
21
+ showIfEmpty=false,
22
+ animateOnHover=true,
23
+ animateOnQuantityChange=true,
24
+ size='default',
25
+ className='',
26
+ iconClx='',
27
+ onClick
28
+ }) => {
29
+
30
+ const c = useCommerce()
31
+ const wiggleRef = useRef<IObservableValue<'more' | 'less' | 'none'>>(observable.box('none'))
32
+
33
+ useEffect(() => (
34
+ // return IReactionDisposer
35
+ animateOnQuantityChange ? reaction(
36
+ () => (c.cartQuantity),
37
+ (curr, prev) => {
38
+ if (curr > prev) {
39
+ runInAction(() => {wiggleRef.current.set('more')})
40
+ }
41
+ else {
42
+ runInAction(() => {wiggleRef.current.set('less')})
43
+ }
44
+ setTimeout(() => {
45
+ // Note that this doesn't actually stop the animation
46
+ // just resets the styles
47
+ runInAction(() => {wiggleRef.current.set('none')})
48
+ }, 800)
49
+ }
50
+ ) : undefined
51
+ ), [])
52
+
53
+ // undefined means context is not installed, ie commerce functions are not in use
54
+ if (!c || (!showIfEmpty && c.cartEmpty)) {
55
+ return <div /> // trigger code needs non-null
56
+ }
57
+
58
+
59
+ return (
60
+ <div
61
+ aria-label="Bag"
62
+ role='button'
63
+ onClick={onClick}
64
+ className={cn(
65
+ buttonVariants({ variant: 'ghost', size, rounded: 'md' }),
66
+ // Overides the bg change on hover --not a "hover effect"
67
+ 'relative group p-0 aspect-square hover:bg-background',
68
+ ((wiggleRef.current.get() === 'more') ?
69
+ 'item-added-to-cart-animation'
70
+ :
71
+ (wiggleRef.current.get() === 'less') ? 'item-removed-from-cart-animation' : ''),
72
+ className
73
+ )}
74
+ >
75
+ {!c.cartEmpty && (
76
+ <div className={
77
+ 'z-above-content flex flex-col justify-center items-center ' +
78
+ 'absolute left-0 right-0 top-0 bottom-0 ' +
79
+ 'leading-none font-sans font-bold text-primary-fg text-xs '
80
+ }>
81
+ <div className='h-[3px] w-full' />
82
+ <div>{c.cartQuantity}</div>
83
+ </div>
84
+ )}
85
+ <Icons.bag width='24' height='28' className={cn(
86
+ 'relative -top-[3px] fill-primary',
87
+ iconClx,
88
+ (animateOnHover ?
89
+ 'group-hover:fill-primary-hover group-hover:scale-105 transition-scale transition-duration-300'
90
+ :
91
+ ''
92
+ )
93
+ )} aria-hidden="true" />
94
+ </div>
95
+ )
96
+ })
97
+
98
+ export default BagButton
@@ -1,34 +1,34 @@
1
- 'use client'
2
- import React, {type PropsWithChildren} from 'react'
3
-
4
- import { Button, buttonVariants } from '@hanzo/ui/primitives'
5
- import { type VariantProps } from '@hanzo/ui/util'
6
-
7
- import { cn } from '@hanzo/ui/util'
8
- import { useSelectAndBuy } from '../../commerce/ui/context'
9
-
10
- const BuyButton: React.FC<
11
- PropsWithChildren &
12
- VariantProps<typeof buttonVariants> &
13
- {
14
- skuPath: string
15
- className?: string
16
- }
17
- > = ({
18
- skuPath,
19
- children,
20
- className='',
21
- ...rest
22
- }) => {
23
-
24
- const buyOptions = useSelectAndBuy()
25
- const handleClick = (): void => { buyOptions.showVariants(skuPath) }
26
-
27
- return (
28
- <Button onClick={handleClick} {...rest} className={cn(className, '')}>
29
- {children}
30
- </Button>
31
- )
32
- }
33
-
34
- export default BuyButton
1
+ 'use client'
2
+ import React, {type PropsWithChildren} from 'react'
3
+
4
+ import { Button, buttonVariants } from '@hanzo/ui/primitives'
5
+ import { type VariantProps } from '@hanzo/ui/util'
6
+
7
+ import { cn } from '@hanzo/ui/util'
8
+ import { useSelectAndBuy } from '../../commerce/ui/context'
9
+
10
+ const BuyButton: React.FC<
11
+ PropsWithChildren &
12
+ VariantProps<typeof buttonVariants> &
13
+ {
14
+ skuPath: string
15
+ className?: string
16
+ }
17
+ > = ({
18
+ skuPath,
19
+ children,
20
+ className='',
21
+ ...rest
22
+ }) => {
23
+
24
+ const buyOptions = useSelectAndBuy()
25
+ const handleClick = (): void => { buyOptions.showVariants(skuPath) }
26
+
27
+ return (
28
+ <Button onClick={handleClick} {...rest} className={cn(className, '')}>
29
+ {children}
30
+ </Button>
31
+ )
32
+ }
33
+
34
+ export default BuyButton