@luxfi/core 5.2.7 → 5.2.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.
- package/commerce/ui/context.tsx +41 -17
- package/commerce/ui/store.ts +40 -12
- package/components/auth/login-panel.tsx +1 -1
- package/components/back-button.tsx +42 -0
- package/components/commerce/checkout-panel/dt-checkout-panel.tsx +36 -18
- package/components/commerce/checkout-panel/mb-checkout-panel.tsx +2 -2
- package/components/commerce/desktop-nav-menu.tsx +46 -45
- package/components/commerce/drawer/index.tsx +0 -17
- package/components/commerce/drawer/shell.tsx +58 -56
- package/components/commerce/mobile-nav-menu-ai.tsx +12 -8
- package/components/commerce/mobile-nav-menu.tsx +68 -34
- package/components/footer.tsx +1 -1
- package/components/header/desktop.tsx +20 -19
- package/components/header/mobile.tsx +15 -18
- package/components/icons/24k-gold-card.tsx +43 -0
- package/components/icons/ai-chat.tsx +29 -0
- package/components/icons/anodized-titanium.tsx +45 -0
- package/components/icons/blog.tsx +20 -0
- package/components/icons/bridge.tsx +68 -0
- package/components/icons/changelog.tsx +21 -0
- package/components/icons/chrome.tsx +45 -0
- package/components/icons/coins.tsx +20 -0
- package/components/icons/compare-cards.tsx +21 -0
- package/components/icons/credit.tsx +20 -0
- package/components/icons/customer-support.tsx +21 -0
- package/components/icons/customers.tsx +33 -0
- package/components/icons/developer-docs.tsx +20 -0
- package/components/icons/exchange.tsx +21 -0
- package/components/icons/explorer.tsx +22 -0
- package/components/icons/faqs.tsx +21 -0
- package/components/icons/guides.tsx +21 -0
- package/components/icons/gun-metal.tsx +44 -0
- package/components/icons/integrations.tsx +25 -0
- package/components/icons/irradescent.tsx +41 -0
- package/components/icons/launch-subnet.tsx +21 -0
- package/components/icons/lux-finance.tsx +23 -0
- package/components/icons/lux-pass.tsx +25 -0
- package/components/icons/lux-quests.tsx +21 -0
- package/components/icons/market.tsx +24 -0
- package/components/icons/mirrored-titanium.tsx +46 -0
- package/components/icons/more-benefits.tsx +21 -0
- package/components/icons/open-source.tsx +26 -0
- package/components/icons/safe.tsx +37 -0
- package/components/icons/shop.tsx +20 -0
- package/components/icons/sterling-silver-card.tsx +44 -0
- package/components/icons/templates.tsx +21 -0
- package/components/icons/validators.tsx +41 -0
- package/components/icons/view-all-card.tsx +20 -0
- package/components/icons/wallet.tsx +20 -0
- package/components/index.ts +2 -0
- package/components/logo.tsx +48 -40
- package/components/tooltip.tsx +31 -0
- package/package.json +2 -1
- package/root-layout/index.tsx +1 -1
- package/site-def/main-nav.tsx +248 -194
- package/components/commerce/checkout-panel/close-button.tsx +0 -26
@@ -1,10 +1,9 @@
|
|
1
1
|
'use client'
|
2
2
|
import React, { useState } from 'react'
|
3
|
-
import { Plus } from 'lucide-react'
|
3
|
+
import { ArrowRight, Plus } from 'lucide-react'
|
4
4
|
import { Search } from '../icons'
|
5
|
-
import { ChatWidget } from '../../components'
|
6
5
|
import { Button, Card } from '@hanzo/ui/primitives'
|
7
|
-
import
|
6
|
+
import { Logo } from '..'
|
8
7
|
|
9
8
|
interface MobileNavMenuAIProps {
|
10
9
|
setMenuOpen: (open: boolean) => void
|
@@ -15,11 +14,16 @@ const MobileNavMenuAI: React.FC<MobileNavMenuAIProps> = ({ setMenuOpen }) => {
|
|
15
14
|
|
16
15
|
return (
|
17
16
|
<>
|
18
|
-
<div className="w-full px-
|
19
|
-
<div className=
|
20
|
-
<
|
21
|
-
<
|
22
|
-
|
17
|
+
<div className="w-full px-[10.8px] py-4 text-2xl cursor-pointer">
|
18
|
+
<div className='flex justify-between'>
|
19
|
+
<Logo variant='text-only' />
|
20
|
+
<Plus className='w-[17.7px] h-[17.7px] flex-none rotate-45 transition-transform' onClick={() => setMenuOpen(false)} />
|
21
|
+
</div>
|
22
|
+
<div className="flex items-center gap-5 border-b border-[#3A3A3A] mt-4 rounded-2xl bg-muted-4">
|
23
|
+
<div className="text-muted-1 font-bold flex-1 flex justify-between h-9 items-center" onClick={() => setIsOpen(true)}>
|
24
|
+
<span className='text-base pl-2 font-light'>Ask AI a question</span>
|
25
|
+
<ArrowRight />
|
26
|
+
</div>
|
23
27
|
</div>
|
24
28
|
</div>
|
25
29
|
<div className={
|
@@ -1,12 +1,14 @@
|
|
1
1
|
'use client'
|
2
2
|
import React from 'react'
|
3
|
-
|
4
3
|
import type { LinkDef } from '@hanzo/ui/types'
|
5
4
|
import { cn } from '@hanzo/ui/util'
|
6
|
-
import type { LinkDefExtended } from '../../site-def/main-nav'
|
5
|
+
import type { LinkDefExtended, ChildMenu } from '../../site-def/main-nav'
|
7
6
|
import MobileNavMenuAI from './mobile-nav-menu-ai'
|
8
7
|
import MobileNavMenuItem from './mobile-nav-menu-item'
|
9
8
|
import MobileAuthWidget from './mobile-login-button'
|
9
|
+
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@hanzo/ui/primitives'
|
10
|
+
import { ChevronDown } from 'lucide-react'
|
11
|
+
import Link from 'next/link'
|
10
12
|
|
11
13
|
const MobileNav: React.FC<{
|
12
14
|
currentAs: string | undefined
|
@@ -15,11 +17,6 @@ const MobileNav: React.FC<{
|
|
15
17
|
commonItemClx?: string | ((def: LinkDef) => string)
|
16
18
|
setChatbotOpen: (open: boolean) => void
|
17
19
|
setMenuOpen: (open: boolean) => void
|
18
|
-
/**
|
19
|
-
* This is called *in addition* to the link's actual navigation
|
20
|
-
* action. eg, I link is clicked, and the modal menu is closes
|
21
|
-
*/
|
22
|
-
// TODO :aa shouldn't be so aware of parent context!
|
23
20
|
setMenuState: (arg: 'closed' | 'nav' | 'login' | 'bag') => void
|
24
21
|
}> = ({
|
25
22
|
currentAs,
|
@@ -31,38 +28,75 @@ const MobileNav: React.FC<{
|
|
31
28
|
setMenuOpen
|
32
29
|
}) => (
|
33
30
|
links.length > 0 ? (
|
34
|
-
|
35
|
-
<div className={cn('flex flex-col h-full', className)} >
|
31
|
+
<div className={cn('flex flex-col h-full', className)}>
|
36
32
|
<MobileNavMenuAI setMenuOpen={setMenuOpen} />
|
37
|
-
<div className="flex flex-col flex-1">
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
33
|
+
<div className="flex flex-col flex-1 overflow-auto">
|
34
|
+
<Accordion type="single" collapsible className='w-full h-full'>
|
35
|
+
{links.map((el, index) => {
|
36
|
+
const itemClx = (commonItemClx) ? (typeof commonItemClx === 'string' ? commonItemClx : commonItemClx(el)) : ''
|
37
|
+
const variant = el.variant ?? 'link'
|
38
|
+
let internalClx = variant === 'link'
|
39
|
+
? ' text-muted hover:text-foreground active:text-accent rounded-none'
|
40
|
+
: ' min-w-0'
|
41
|
+
|
46
42
|
if (currentAs && currentAs === el.href) {
|
47
|
-
internalClx += '
|
43
|
+
internalClx += ' pointer-events-none'
|
44
|
+
if (variant === 'link') {
|
45
|
+
internalClx += ' text-accent'
|
46
|
+
}
|
48
47
|
}
|
49
|
-
}
|
50
|
-
else {
|
51
|
-
internalClx += ' min-w-0'
|
52
|
-
}
|
53
|
-
if (currentAs && currentAs === el.href) {
|
54
|
-
internalClx += ' pointer-events-none'
|
55
|
-
}
|
56
|
-
const itemClx = (commonItemClx) ? (typeof commonItemClx === 'string' ? commonItemClx : commonItemClx(el)) : ''
|
57
48
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
49
|
+
if (!el.isAIMenu) {
|
50
|
+
return (
|
51
|
+
<AccordionItem key={index} value={el.title ? el.title : ""} className='!no-underline !border-0'>
|
52
|
+
<AccordionTrigger className={cn(internalClx, itemClx, '')}>
|
53
|
+
<div className={cn(internalClx, itemClx, 'flex items-center justify-between w-full pl-3 text-base font-normal leading-6')}>
|
54
|
+
{el.title}
|
55
|
+
</div>
|
56
|
+
<ChevronDown className="w-4 h-4 mr-3" />
|
57
|
+
</AccordionTrigger>
|
58
|
+
<AccordionContent>
|
59
|
+
{el.childMenu && (
|
60
|
+
<div className="px-4">
|
61
|
+
{Object.entries(el.childMenu.reduce((acc, child) => {
|
62
|
+
const group = acc[child.groupName ? child.groupName : ""] || []
|
63
|
+
group.push(child)
|
64
|
+
acc[child.groupName ? child.groupName : ""] = group
|
65
|
+
return acc
|
66
|
+
}, {} as { [key: string]: ChildMenu[] })).map(([groupName, children]) => (
|
67
|
+
<div key={groupName}>
|
68
|
+
<div className="mt-4 mb-4 font-light text-muted-1">{groupName}</div>
|
69
|
+
{children.map((child, childIndex) => (
|
70
|
+
<div key={childIndex} className="m-2">
|
71
|
+
<div className="flex items-center py-1">
|
72
|
+
<span>
|
73
|
+
{child.icon && child.icon}
|
74
|
+
</span>
|
75
|
+
<Link
|
76
|
+
href={child.href}
|
77
|
+
className="text-muted-2 hover:underline ml-5 hover:text-primary"
|
78
|
+
target={child.newTab ? '_blank' : '_self'}
|
79
|
+
rel="noopener noreferrer"
|
80
|
+
>
|
81
|
+
{child.title}
|
82
|
+
</Link>
|
83
|
+
</div>
|
84
|
+
</div>
|
85
|
+
))}
|
86
|
+
</div>
|
87
|
+
))}
|
88
|
+
</div>
|
89
|
+
)}
|
90
|
+
</AccordionContent>
|
91
|
+
</AccordionItem>
|
92
|
+
)
|
93
|
+
}
|
94
|
+
})}
|
95
|
+
</Accordion>
|
62
96
|
</div>
|
63
|
-
<MobileAuthWidget className='
|
97
|
+
<MobileAuthWidget className='text-2xl z-10' handleLogin={() => { setMenuState('login') }} />
|
64
98
|
</div>
|
65
99
|
) : null
|
66
|
-
)
|
100
|
+
);
|
67
101
|
|
68
|
-
export default MobileNav
|
102
|
+
export default MobileNav;
|
package/components/footer.tsx
CHANGED
@@ -33,7 +33,7 @@ const Footer: React.FC<{
|
|
33
33
|
'md:flex md:flex-row md:justify-between '
|
34
34
|
}>
|
35
35
|
<div className='hidden lg:flex flex-col' key={0}>
|
36
|
-
<Logo size='md'
|
36
|
+
<Logo size='md' variant='text-only' />
|
37
37
|
</div>
|
38
38
|
{footer.map((defs: LinkDef[], index: number) => {
|
39
39
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
|
3
|
-
import { NavItems } from '@hanzo/ui/primitives'
|
4
3
|
import { cn } from '@hanzo/ui/util'
|
5
4
|
import { AuthWidget } from '@hanzo/auth/components'
|
6
5
|
|
@@ -8,7 +7,7 @@ import { Logo } from '..'
|
|
8
7
|
|
9
8
|
import DesktopBagPopup from '../commerce/desktop-bag-popup'
|
10
9
|
import BagButton from '../commerce/bag-button'
|
11
|
-
import
|
10
|
+
import DesktopNav from '../commerce/desktop-nav-menu'
|
12
11
|
|
13
12
|
|
14
13
|
import type { LinkDef } from '@hanzo/ui/types'
|
@@ -25,25 +24,27 @@ const DesktopHeader: React.FC<{
|
|
25
24
|
|
26
25
|
// TODO move 13px into a size class and configure twMerge to recognize say, 'text-size-nav'
|
27
26
|
// (vs be beat out by 'text-color-nav')
|
28
|
-
|
29
|
-
|
30
|
-
{/* md or larger */}
|
31
|
-
<div className={
|
32
|
-
'flex flex-row h-[80px] items-center justify-between ' +
|
33
|
-
'px-[8px] w-full mx-auto max-w-screen'
|
34
|
-
}>
|
35
|
-
<Logo size='md' href='/' className='hidden lg:flex' key='two' layout='text-only'/>
|
36
|
-
<Logo size='sm' href='/' className='hidden md:flex lg:hidden' key='one' layout='text-only'/>
|
27
|
+
return (
|
28
|
+
<header className={cn('bg-background fixed z-header top-0 left-0 right-0', className)} >
|
37
29
|
{/* md or larger */}
|
38
|
-
<div className=
|
39
|
-
|
40
|
-
|
41
|
-
|
30
|
+
<div className={
|
31
|
+
'flex flex-row h-[80px] items-center justify-between ' +
|
32
|
+
'px-[8px] w-full mx-auto max-w-screen'
|
33
|
+
}>
|
34
|
+
<Logo size='md' href='/' outerClx='hidden lg:flex' key='two' variant='text-only' />
|
35
|
+
<Logo size='sm' href='/' outerClx='hidden md:flex lg:hidden' key='one' variant='text-only' />
|
36
|
+
{/* md or larger */}
|
37
|
+
<div className='flex w-full gap-4 items-center justify-between lg:ml-22'>
|
38
|
+
<DesktopNav links={links} />
|
39
|
+
<div className='flex items-center'>
|
40
|
+
<DesktopBagPopup popupClx='w-[340px]' trigger={<BagButton className='text-primary -mr-[3px] lg:min-w-0' />} />
|
41
|
+
<AuthWidget />
|
42
|
+
</div>
|
43
|
+
</div>
|
42
44
|
</div>
|
43
|
-
</
|
44
|
-
|
45
|
-
|
46
|
-
}
|
45
|
+
</header>
|
46
|
+
)
|
47
|
+
}
|
47
48
|
|
48
49
|
export default DesktopHeader
|
49
50
|
|
@@ -86,28 +86,25 @@ const MobileHeader: React.FC<{
|
|
86
86
|
// header element MUST be fixed, and NOT sticky. Or else drawer breaks on mobile browsers
|
87
87
|
return (<>
|
88
88
|
<header className={cn(
|
89
|
-
`bg-background fixed z-header top-0 left-0 w-full
|
89
|
+
`bg-background fixed z-header top-0 left-0 w-full ${menuOpen() ? 'hidden' : 'block'}`,
|
90
90
|
className
|
91
91
|
)}>
|
92
92
|
{/* smaller than md: mobile style drawer menu; h-11 is 44px, the standard mobile header height */}
|
93
|
-
<div className=
|
94
|
-
<
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
{
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
<Icons.Avatar className='self-center ' />
|
104
|
-
</div>
|
105
|
-
)}
|
106
|
-
<div className='flex gap-0 flex-row'>
|
107
|
-
<BagButton className='text-primary -mr-[3px]' onClick={openBag} />
|
108
|
-
<MenuToggleButton className='text-foreground' open={menuOpen()} setOpen={setMenuOpen} />
|
93
|
+
<div className='w-full h-11 flex flex-row justify-between items-center font-bold pl-6 pr-4'>
|
94
|
+
<Logo href='/' size='sm' outerClx={'top-[3px] h-full'} variant='text-only' />
|
95
|
+
{/* Not that key to the cross-fade effect
|
96
|
+
is that this is **on top of** the logo. */}
|
97
|
+
{menuOpen() && (
|
98
|
+
<div className={'absolute left-0 top-0 bottom-0 right-0 pl-8 ' +
|
99
|
+
'flex flex-row ' +
|
100
|
+
'bg-background animate-mobile-menu-open'
|
101
|
+
}>
|
102
|
+
<Icons.Avatar className='self-center ' />
|
109
103
|
</div>
|
110
|
-
|
104
|
+
)}
|
105
|
+
<div className='flex gap-0 flex-row'>
|
106
|
+
<BagButton className='text-primary -mr-[3px]' onClick={openBag} />
|
107
|
+
<MenuToggleButton className='text-foreground' open={menuOpen()} setOpen={setMenuOpen} />
|
111
108
|
</div>
|
112
109
|
|
113
110
|
</div>
|