@luxfi/core 5.2.2 → 5.2.5

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 (114) hide show
  1. package/commerce/ui/conf.ts +13 -13
  2. package/commerce/ui/context.tsx +102 -102
  3. package/commerce/ui/store.ts +276 -276
  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/chat-widget.tsx +85 -85
  11. package/components/commerce/add-widget.tsx +20 -20
  12. package/components/commerce/bag-button.tsx +98 -98
  13. package/components/commerce/buy-button.tsx +34 -34
  14. package/components/commerce/checkout-button.tsx +129 -129
  15. package/components/commerce/checkout-panel/close-button.tsx +26 -26
  16. package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -36
  17. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +66 -66
  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 +235 -0
  29. package/components/commerce/drawer/index.tsx +116 -116
  30. package/components/commerce/drawer/micro.tsx +144 -144
  31. package/components/commerce/drawer/shell.tsx +83 -83
  32. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  33. package/components/commerce/mobile-login-button.tsx +101 -100
  34. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  35. package/components/commerce/mobile-nav-menu-ai.tsx +45 -98
  36. package/components/commerce/mobile-nav-menu-item.tsx +49 -45
  37. package/components/commerce/mobile-nav-menu.tsx +68 -80
  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 +21 -21
  42. package/components/drawer-margin.tsx +25 -25
  43. package/components/footer.tsx +77 -77
  44. package/components/header/desktop.tsx +57 -54
  45. package/components/header/index.tsx +52 -40
  46. package/components/header/mobile.tsx +166 -165
  47. package/components/header/theme-toggle.tsx +26 -26
  48. package/components/icons/avatar.tsx +11 -11
  49. package/components/icons/bag-icon.tsx +10 -10
  50. package/components/icons/github.tsx +14 -14
  51. package/components/icons/index.tsx +43 -43
  52. package/components/icons/left-arrow.tsx +11 -11
  53. package/components/icons/lux-logo.tsx +10 -10
  54. package/components/icons/right-arrow.tsx +10 -10
  55. package/components/icons/search.tsx +12 -12
  56. package/components/icons/secure-delivery.tsx +13 -13
  57. package/components/icons/social-icon.tsx +35 -35
  58. package/components/icons/social-svg.css +3 -3
  59. package/components/icons/warpcast.tsx +58 -0
  60. package/components/icons/youtube-logo.tsx +59 -59
  61. package/components/index.ts +25 -25
  62. package/components/logo.tsx +81 -81
  63. package/components/main.tsx +27 -27
  64. package/components/mini-chart/index.tsx +7 -7
  65. package/components/mini-chart/mini-chart-props.ts +43 -43
  66. package/components/mini-chart/mini-chart.tsx +85 -85
  67. package/components/mini-chart/wrapper.tsx +23 -23
  68. package/components/not-found/index.tsx +28 -28
  69. package/components/not-found/not-found-content.mdx +5 -5
  70. package/components/scripts.tsx +24 -24
  71. package/environment.d.ts +5 -5
  72. package/next/analytics/fpixel.ts +15 -15
  73. package/next/analytics/google-analytics.ts +13 -13
  74. package/next/analytics/index.ts +3 -3
  75. package/next/analytics/pixel-analytics.tsx +54 -54
  76. package/next/font/get-app-router-font-classes.ts +12 -12
  77. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  78. package/next/font/next-font-desc.ts +27 -27
  79. package/next/font/pages-router-font-vars.tsx +18 -18
  80. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  81. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  82. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  83. package/next/head-metadata/index.tsx +208 -208
  84. package/next/middleware/determine-device-mw.ts +16 -16
  85. package/package.json +78 -78
  86. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  87. package/root-layout/index.tsx +112 -112
  88. package/server-actions/firebase-app.ts +14 -14
  89. package/server-actions/index.ts +5 -5
  90. package/server-actions/store-contact.ts +51 -51
  91. package/site-def/footer/community.tsx +67 -67
  92. package/site-def/footer/company.ts +37 -37
  93. package/site-def/footer/ecosystem.ts +37 -37
  94. package/site-def/footer/index.tsx +26 -26
  95. package/site-def/footer/legal.ts +28 -28
  96. package/site-def/footer/network.ts +45 -45
  97. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  98. package/site-def/index.ts +2 -2
  99. package/site-def/main-nav.tsx +338 -292
  100. package/style/cart-animation.css +29 -29
  101. package/style/checkout-animation.css +23 -23
  102. package/style/drawer-handle-overrides.css +160 -160
  103. package/style/lux-colors.css +85 -85
  104. package/style/lux-global.css +30 -30
  105. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  106. package/tailwind/index.ts +2 -2
  107. package/tailwind/lux-tw-fonts.ts +39 -39
  108. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  109. package/tsconfig.json +15 -15
  110. package/types/chatbot-config.ts +6 -6
  111. package/types/chatbot-suggested-question.ts +7 -7
  112. package/types/contact-info.ts +10 -10
  113. package/types/index.ts +4 -4
  114. package/types/site-def.ts +43 -43
@@ -1,80 +1,68 @@
1
- 'use client'
2
- import React from 'react'
3
-
4
- import type { LinkDef } from '@hanzo/ui/types'
5
- import { LinkElement } from '@hanzo/ui/primitives'
6
- import { cn } from '@hanzo/ui/util'
7
- import type { LinkDefExtended } from '../../site-def/main-nav'
8
- import MobileNavMenuAI from './mobile-nav-menu-ai'
9
- import MobileNavMenuItem from './mobile-nav-menu-item'
10
- import MobileAuthWidget from './mobile-login-button'
11
-
12
- const MobileNav: React.FC<{
13
- currentAs: string | undefined
14
- links: LinkDefExtended[]
15
- className?: string
16
- commonItemClx?: string | ((def: LinkDef) => string),
17
- setChatbotOpen: (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
- onAction?: () => void
23
- // TODO :aa shouldn't be so aware of parent context!
24
- setMenuState: (arg: 'closed' | 'nav' | 'login' | 'bag') => void
25
- }> = ({
26
- currentAs,
27
- links,
28
- onAction,
29
- setMenuState,
30
- className = '',
31
- commonItemClx,
32
- setChatbotOpen,
33
- }) => (
34
- links.length > 0 ? (
35
-
36
- <div className={cn('flex flex-col h-full', className)} >
37
- <div className="flex flex-col flex-1">
38
- {links.map((el, index) => {
39
- const variant = el.variant ?? 'link'
40
- let internalClx = ''
41
- // note that linkFG (or any other variant of 'link')
42
- // will not get assigned these classes,
43
- // and will remain styles is 'foreground' (hence the name)
44
- if (variant === 'link') {
45
- internalClx += ' text-muted hover:text-foreground active:text-accent rounded-none'
46
- if (currentAs && currentAs === el.href) {
47
- internalClx += ' text-accent '
48
- }
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
-
58
- // return (
59
- // <LinkElement
60
- // def={el}
61
- // key={`common-${index}`}
62
- // size='lg'
63
- // className={cn(internalClx, itemClx)}
64
- // onClick={onAction}
65
- // />
66
- // )
67
- if (el.isAIMenu) {
68
- return <MobileNavMenuAI link={el} setChatbotOpen={setChatbotOpen} />
69
- }
70
- else {
71
- return <MobileNavMenuItem link={el} />
72
- }
73
- })}
74
- </div>
75
- <MobileAuthWidget className=' text-2xl' handleLogin={() => { setMenuState('login') }} />
76
- </div>
77
- ) : null
78
- )
79
-
80
- export default MobileNav
1
+ 'use client'
2
+ import React from 'react'
3
+
4
+ import type { LinkDef } from '@hanzo/ui/types'
5
+ import { cn } from '@hanzo/ui/util'
6
+ import type { LinkDefExtended } from '../../site-def/main-nav'
7
+ import MobileNavMenuAI from './mobile-nav-menu-ai'
8
+ import MobileNavMenuItem from './mobile-nav-menu-item'
9
+ import MobileAuthWidget from './mobile-login-button'
10
+
11
+ const MobileNav: React.FC<{
12
+ currentAs: string | undefined
13
+ links: LinkDefExtended[]
14
+ className?: string
15
+ commonItemClx?: string | ((def: LinkDef) => string)
16
+ setChatbotOpen: (open: boolean) => void
17
+ 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
+ setMenuState: (arg: 'closed' | 'nav' | 'login' | 'bag') => void
24
+ }> = ({
25
+ currentAs,
26
+ links,
27
+ setMenuState,
28
+ className = '',
29
+ commonItemClx,
30
+ setChatbotOpen,
31
+ setMenuOpen
32
+ }) => (
33
+ links.length > 0 ? (
34
+
35
+ <div className={cn('flex flex-col h-full', className)} >
36
+ <MobileNavMenuAI setMenuOpen={setMenuOpen} />
37
+ <div className="flex flex-col flex-1">
38
+ {links.map((el, index) => {
39
+ const variant = el.variant ?? 'link'
40
+ let internalClx = ''
41
+ // note that linkFG (or any other variant of 'link')
42
+ // will not get assigned these classes,
43
+ // and will remain styles is 'foreground' (hence the name)
44
+ if (variant === 'link') {
45
+ internalClx += ' text-muted hover:text-foreground active:text-accent rounded-none'
46
+ if (currentAs && currentAs === el.href) {
47
+ internalClx += ' text-accent '
48
+ }
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
+
58
+ if (!el.isAIMenu) {
59
+ return <MobileNavMenuItem link={el} setMenuOpen={setMenuOpen}/>
60
+ }
61
+ })}
62
+ </div>
63
+ <MobileAuthWidget className=' text-2xl' handleLogin={() => { setMenuState('login') }} />
64
+ </div>
65
+ ) : null
66
+ )
67
+
68
+ export default MobileNav
@@ -1,113 +1,113 @@
1
- 'use client'
2
-
3
- import React, { useTransition } from 'react'
4
-
5
- import { useForm, type SubmitHandler, type ControllerRenderProps } from 'react-hook-form'
6
- import { z } from 'zod'
7
- import { zodResolver } from '@hookform/resolvers/zod'
8
-
9
- // @ts-ignore
10
- import validator from 'validator'
11
-
12
- import { Loader2 } from 'lucide-react'
13
-
14
- import {
15
- Button,
16
- Input,
17
- Form,
18
- FormControl,
19
- FormField,
20
- FormItem,
21
- FormMessage,
22
- } from '@hanzo/ui/primitives'
23
-
24
- import type { SubmitServerAction } from '@hanzo/ui/types'
25
- import type { ContactInfo } from '../../types'
26
-
27
- const ContactFormSchema = z.object({
28
- email: z
29
- .string()
30
- .min(1, { message: "Email must be provided." })
31
- .email("Invalid email."),
32
- phone: z
33
- .string()
34
- .min(1, { message: "Telephone must be provided." })
35
- .refine(validator.isMobilePhone, { message: "Invalid format." })
36
- })
37
-
38
- type ContactFormSchemaType = z.infer<typeof ContactFormSchema>
39
-
40
- const ContactForm: React.FC<{
41
- onSubmit: (data: ContactFormSchemaType, enc: any) => void
42
- enclosure: any
43
- }> = ({
44
- onSubmit: _onSubmit,
45
- enclosure
46
- }) => {
47
-
48
- const form = useForm<ContactFormSchemaType>({
49
- resolver: zodResolver(ContactFormSchema),
50
- defaultValues: {
51
- email: '',
52
- phone: '',
53
- },
54
- })
55
-
56
- const [isPending, startTransition] = useTransition()
57
-
58
- const onSubmit: SubmitHandler<ContactFormSchemaType> = (data) => {
59
- // https://github.com/orgs/react-hook-form/discussions/10757#discussioncomment-6672403
60
- // @ts-ignore
61
- startTransition(async () => {
62
- await _onSubmit(data, enclosure)
63
- })
64
- }
65
-
66
- const MyFormItem: React.FC<{
67
- field: ControllerRenderProps<ContactFormSchemaType, 'email'> | ControllerRenderProps<ContactFormSchemaType, 'phone'>
68
- placeholder: string
69
- }> = ({
70
- field,
71
- placeholder
72
- }) => (
73
- <FormItem className="space-y-0" >
74
- <FormControl>
75
- <Input placeholder={placeholder} {...field} className="mt-0 text-foreground"/>
76
- </FormControl>
77
- <div className="flex flex-row justify-start items-stretch gap-2">
78
- <FormMessage />
79
- </div>
80
- </FormItem>
81
- )
82
-
83
- return (
84
- <Form {...form}>
85
- <form onSubmit={form.handleSubmit(onSubmit)} className="w-3/4">
86
- <div className='flex flex-col justify-start items-stretch mt-4'>
87
- <FormField
88
- control={form.control}
89
- name='email'
90
- render={({ field }) => ( <MyFormItem field={field} placeholder='email'/> )}
91
- />
92
- <FormField
93
- control={form.control}
94
- name='phone'
95
- // @ts-ignore
96
- render={({ field }) => ( <MyFormItem field={field} placeholder='phone'/> )}
97
- />
98
- <Button disabled={isPending} type='submit' className='bg-primary text-primary-fg hover:bg-primary-hover'>
99
- {isPending ? (<>
100
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
101
- Please wait
102
- </>
103
- ) : (
104
- <>Submit</>
105
- )}
106
- </Button>
107
- </div>
108
- </form>
109
- </Form>
110
- )
111
- }
112
-
113
- export default ContactForm
1
+ 'use client'
2
+
3
+ import React, { useTransition } from 'react'
4
+
5
+ import { useForm, type SubmitHandler, type ControllerRenderProps } from 'react-hook-form'
6
+ import { z } from 'zod'
7
+ import { zodResolver } from '@hookform/resolvers/zod'
8
+
9
+ // @ts-ignore
10
+ import validator from 'validator'
11
+
12
+ import { Loader2 } from 'lucide-react'
13
+
14
+ import {
15
+ Button,
16
+ Input,
17
+ Form,
18
+ FormControl,
19
+ FormField,
20
+ FormItem,
21
+ FormMessage,
22
+ } from '@hanzo/ui/primitives'
23
+
24
+ import type { SubmitServerAction } from '@hanzo/ui/types'
25
+ import type { ContactInfo } from '../../types'
26
+
27
+ const ContactFormSchema = z.object({
28
+ email: z
29
+ .string()
30
+ .min(1, { message: "Email must be provided." })
31
+ .email("Invalid email."),
32
+ phone: z
33
+ .string()
34
+ .min(1, { message: "Telephone must be provided." })
35
+ .refine(validator.isMobilePhone, { message: "Invalid format." })
36
+ })
37
+
38
+ type ContactFormSchemaType = z.infer<typeof ContactFormSchema>
39
+
40
+ const ContactForm: React.FC<{
41
+ onSubmit: (data: ContactFormSchemaType, enc: any) => void
42
+ enclosure: any
43
+ }> = ({
44
+ onSubmit: _onSubmit,
45
+ enclosure
46
+ }) => {
47
+
48
+ const form = useForm<ContactFormSchemaType>({
49
+ resolver: zodResolver(ContactFormSchema),
50
+ defaultValues: {
51
+ email: '',
52
+ phone: '',
53
+ },
54
+ })
55
+
56
+ const [isPending, startTransition] = useTransition()
57
+
58
+ const onSubmit: SubmitHandler<ContactFormSchemaType> = (data) => {
59
+ // https://github.com/orgs/react-hook-form/discussions/10757#discussioncomment-6672403
60
+ // @ts-ignore
61
+ startTransition(async () => {
62
+ await _onSubmit(data, enclosure)
63
+ })
64
+ }
65
+
66
+ const MyFormItem: React.FC<{
67
+ field: ControllerRenderProps<ContactFormSchemaType, 'email'> | ControllerRenderProps<ContactFormSchemaType, 'phone'>
68
+ placeholder: string
69
+ }> = ({
70
+ field,
71
+ placeholder
72
+ }) => (
73
+ <FormItem className="space-y-0" >
74
+ <FormControl>
75
+ <Input placeholder={placeholder} {...field} className="mt-0 text-foreground"/>
76
+ </FormControl>
77
+ <div className="flex flex-row justify-start items-stretch gap-2">
78
+ <FormMessage />
79
+ </div>
80
+ </FormItem>
81
+ )
82
+
83
+ return (
84
+ <Form {...form}>
85
+ <form onSubmit={form.handleSubmit(onSubmit)} className="w-3/4">
86
+ <div className='flex flex-col justify-start items-stretch mt-4'>
87
+ <FormField
88
+ control={form.control}
89
+ name='email'
90
+ render={({ field }) => ( <MyFormItem field={field} placeholder='email'/> )}
91
+ />
92
+ <FormField
93
+ control={form.control}
94
+ name='phone'
95
+ // @ts-ignore
96
+ render={({ field }) => ( <MyFormItem field={field} placeholder='phone'/> )}
97
+ />
98
+ <Button disabled={isPending} type='submit' className='bg-primary text-primary-fg hover:bg-primary-hover'>
99
+ {isPending ? (<>
100
+ <Loader2 className="mr-2 h-4 w-4 animate-spin" />
101
+ Please wait
102
+ </>
103
+ ) : (
104
+ <>Submit</>
105
+ )}
106
+ </Button>
107
+ </div>
108
+ </form>
109
+ </Form>
110
+ )
111
+ }
112
+
113
+ export default ContactForm
@@ -1,13 +1,13 @@
1
- import React from 'react'
2
-
3
- const Disclaimer: React.FC = () => (
4
- <div>
5
- By entering your mobile number and submitting, you consent to receive text messages from Lux at the number provided.
6
- Message and data rates may apply. Message frequency varies.
7
- You can unsubscribe at any time by replying STOP.
8
- View our <a href='/privacy'>Privacy Policy</a> and <a href='/terms'>Terms & conditions</a>.
9
- </div>
10
- )
11
-
12
- export default Disclaimer
13
-
1
+ import React from 'react'
2
+
3
+ const Disclaimer: React.FC = () => (
4
+ <div>
5
+ By entering your mobile number and submitting, you consent to receive text messages from Lux at the number provided.
6
+ Message and data rates may apply. Message frequency varies.
7
+ You can unsubscribe at any time by replying STOP.
8
+ View our <a href='/privacy'>Privacy Policy</a> and <a href='/terms'>Terms & conditions</a>.
9
+ </div>
10
+ )
11
+
12
+ export default Disclaimer
13
+
@@ -1,64 +1,64 @@
1
- 'use client'
2
-
3
- import React, { useState } from 'react'
4
-
5
- import type { ButtonModalProps} from '@hanzo/ui/types'
6
-
7
- import {
8
- Button,
9
- Dialog,
10
- DialogContent,
11
- DialogDescription,
12
- DialogHeader,
13
- DialogTitle,
14
- DialogTrigger,
15
- } from '@hanzo/ui/primitives'
16
-
17
- import ContactForm from './contact-form'
18
- import Disclaimer from './disclaimer'
19
-
20
- const ContactDialog: React.FC<ButtonModalProps> = ({
21
- open,
22
- onOpenChange,
23
- buttonText,
24
- buttonProps,
25
- title,
26
- byline,
27
- action,
28
- actionEnclosure
29
- }) => {
30
- const [success, setSuccess] = useState(false)
31
-
32
- const onSubmit = async (formData: any, enclosure: any) => {
33
- const result = await action(formData, enclosure)
34
- if (result.success) {
35
- setSuccess(true)
36
- }
37
- }
38
-
39
- return (
40
- <Dialog open={open} onOpenChange={onOpenChange} >
41
- <DialogTrigger asChild>
42
- <Button {...buttonProps} >{buttonText}</Button>
43
- </DialogTrigger>
44
- <DialogContent className="sm:max-w-[500px] p-0 gap-0 bg-background border">
45
- <DialogHeader className='py-6 text-foreground'>
46
- <DialogTitle className='text-4xl text-center text-inherit'>{title}</DialogTitle>
47
- {byline && (<DialogDescription className='text-inherit text-lg text-center'>{byline} </DialogDescription>)}
48
- </DialogHeader>
49
- <div className='px-8 pb-8 rounded-e-lg flex flex-col justify-start items-center'>
50
- {success ? (
51
- <p>{actionEnclosure?.reply}</p>
52
- ) : (
53
- <ContactForm onSubmit={onSubmit} enclosure={actionEnclosure}/>
54
- )}
55
- <div className='text-muted-1 text-xs mt-4' >
56
- <Disclaimer />
57
- </div>
58
- </div>
59
- </DialogContent>
60
- </Dialog>
61
- )
62
- }
63
-
64
- export default ContactDialog
1
+ 'use client'
2
+
3
+ import React, { useState } from 'react'
4
+
5
+ import type { ButtonModalProps} from '@hanzo/ui/types'
6
+
7
+ import {
8
+ Button,
9
+ Dialog,
10
+ DialogContent,
11
+ DialogDescription,
12
+ DialogHeader,
13
+ DialogTitle,
14
+ DialogTrigger,
15
+ } from '@hanzo/ui/primitives'
16
+
17
+ import ContactForm from './contact-form'
18
+ import Disclaimer from './disclaimer'
19
+
20
+ const ContactDialog: React.FC<ButtonModalProps> = ({
21
+ open,
22
+ onOpenChange,
23
+ buttonText,
24
+ buttonProps,
25
+ title,
26
+ byline,
27
+ action,
28
+ actionEnclosure
29
+ }) => {
30
+ const [success, setSuccess] = useState(false)
31
+
32
+ const onSubmit = async (formData: any, enclosure: any) => {
33
+ const result = await action(formData, enclosure)
34
+ if (result.success) {
35
+ setSuccess(true)
36
+ }
37
+ }
38
+
39
+ return (
40
+ <Dialog open={open} onOpenChange={onOpenChange} >
41
+ <DialogTrigger asChild>
42
+ <Button {...buttonProps} >{buttonText}</Button>
43
+ </DialogTrigger>
44
+ <DialogContent className="sm:max-w-[500px] p-0 gap-0 bg-background border">
45
+ <DialogHeader className='py-6 text-foreground'>
46
+ <DialogTitle className='text-4xl text-center text-inherit'>{title}</DialogTitle>
47
+ {byline && (<DialogDescription className='text-inherit text-lg text-center'>{byline} </DialogDescription>)}
48
+ </DialogHeader>
49
+ <div className='px-8 pb-8 rounded-e-lg flex flex-col justify-start items-center'>
50
+ {success ? (
51
+ <p>{actionEnclosure?.reply}</p>
52
+ ) : (
53
+ <ContactForm onSubmit={onSubmit} enclosure={actionEnclosure}/>
54
+ )}
55
+ <div className='text-muted-1 text-xs mt-4' >
56
+ <Disclaimer />
57
+ </div>
58
+ </div>
59
+ </DialogContent>
60
+ </Dialog>
61
+ )
62
+ }
63
+
64
+ export default ContactDialog
@@ -1,21 +1,21 @@
1
- import React from 'react'
2
-
3
- const FIRST = 2020
4
-
5
- const Copyright: React.FC<{
6
- className?: string
7
- }> = ({
8
- className=''
9
- }) => {
10
-
11
- const year = new Date().getFullYear()
12
- const yearString = (year > FIRST) ? `${FIRST} - ${year}` : FIRST.toString()
13
-
14
- return (
15
- <div className={className}>
16
- {`Copyright © ${yearString}`}&nbsp;<br className='sm:hidden'/>Lux Partners Ltd.&nbsp;<br className='md:hidden'/>&nbsp;All rights reserved.
17
- </div>
18
- )
19
- }
20
-
21
- export default Copyright
1
+ import React from 'react'
2
+
3
+ const FIRST = 2020
4
+
5
+ const Copyright: React.FC<{
6
+ className?: string
7
+ }> = ({
8
+ className=''
9
+ }) => {
10
+
11
+ const year = new Date().getFullYear()
12
+ const yearString = (year > FIRST) ? `${FIRST} - ${year}` : FIRST.toString()
13
+
14
+ return (
15
+ <div className={className}>
16
+ {`Copyright © ${yearString}`}&nbsp;<br className='sm:hidden'/>Lux Partners Ltd.&nbsp;<br className='md:hidden'/>&nbsp;All rights reserved.
17
+ </div>
18
+ )
19
+ }
20
+
21
+ export default Copyright
@@ -1,25 +1,25 @@
1
- 'use client'
2
- import React from 'react'
3
-
4
- import { cn } from '@hanzo/ui/util'
5
- import { useCommerceDrawer } from '@luxfi/core/commerce'
6
- import { observer } from 'mobx-react-lite'
7
-
8
- const DrawerMargin: React.FC<{
9
- clx?: string
10
- }> = observer(({
11
- clx=''
12
- }) => {
13
-
14
- const drawer = useCommerceDrawer()
15
- return (
16
- <div
17
- className={cn('transition-height', clx)}
18
- style={{
19
- height: drawer.state === 'micro' ? drawer.microHeight : 0
20
- }}
21
- />
22
- )
23
- })
24
-
25
- export default DrawerMargin
1
+ 'use client'
2
+ import React from 'react'
3
+
4
+ import { cn } from '@hanzo/ui/util'
5
+ import { useCommerceDrawer } from '@luxfi/core/commerce'
6
+ import { observer } from 'mobx-react-lite'
7
+
8
+ const DrawerMargin: React.FC<{
9
+ clx?: string
10
+ }> = observer(({
11
+ clx=''
12
+ }) => {
13
+
14
+ const drawer = useCommerceDrawer()
15
+ return (
16
+ <div
17
+ className={cn('transition-height', clx)}
18
+ style={{
19
+ height: drawer.state === 'micro' ? drawer.microHeight : 0
20
+ }}
21
+ />
22
+ )
23
+ })
24
+
25
+ export default DrawerMargin