@luxfi/core 5.3.0 → 5.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) 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 +107 -107
  10. package/components/back-button.tsx +49 -49
  11. package/components/chat-widget.tsx +85 -85
  12. package/components/commerce/_to_deprecate_checkout-widget/const.ts +13 -13
  13. package/components/commerce/_to_deprecate_checkout-widget/index.tsx_ +188 -188
  14. package/components/commerce/_to_deprecate_checkout-widget/obs-string-set.ts +48 -48
  15. package/components/commerce/_to_deprecate_checkout-widget/use-anim-clx-set.ts +58 -58
  16. package/components/commerce/bag-button.tsx +98 -98
  17. package/components/commerce/buy-button.tsx +34 -34
  18. package/components/commerce/checkout-button.tsx +129 -129
  19. package/components/commerce/checkout-panel/cart-accordian.tsx +66 -66
  20. package/components/commerce/checkout-panel/checkout-panel-props.ts +9 -9
  21. package/components/commerce/checkout-panel/desktop-bag-carousel.tsx +36 -36
  22. package/components/commerce/checkout-panel/desktop-cp.tsx +82 -82
  23. package/components/commerce/checkout-panel/index.tsx +126 -126
  24. package/components/commerce/checkout-panel/mobile-cp.tsx +66 -66
  25. package/components/commerce/checkout-panel/policy-links.tsx +29 -29
  26. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -39
  27. package/components/commerce/checkout-panel/thank-you.tsx +18 -18
  28. package/components/commerce/desktop-bag-popup.tsx +78 -78
  29. package/components/commerce/desktop-nav-menu.tsx +130 -130
  30. package/components/commerce/drawer/index.tsx +88 -88
  31. package/components/commerce/drawer/micro.tsx +144 -144
  32. package/components/commerce/drawer/shell.tsx +85 -85
  33. package/components/commerce/mobile-bag-drawer.tsx +51 -51
  34. package/components/commerce/mobile-login-button.tsx +107 -101
  35. package/components/commerce/mobile-menu-toggle-button.tsx +35 -35
  36. package/components/commerce/mobile-nav-menu-ai.tsx +50 -47
  37. package/components/commerce/mobile-nav-menu-item.tsx +49 -49
  38. package/components/commerce/mobile-nav-menu.tsx +101 -101
  39. package/components/contact-dialog/contact-form.tsx +113 -113
  40. package/components/contact-dialog/disclaimer.tsx +13 -13
  41. package/components/contact-dialog/index.tsx +64 -64
  42. package/components/copyright.tsx +21 -21
  43. package/components/drawer-margin.tsx +25 -25
  44. package/components/footer.tsx +77 -77
  45. package/components/header/desktop.tsx +51 -50
  46. package/components/header/index.tsx +50 -52
  47. package/components/header/mobile.tsx +163 -163
  48. package/components/header/theme-toggle.tsx +26 -26
  49. package/components/icons/24k-gold-card.tsx +43 -43
  50. package/components/icons/ai-chat-act.tsx +47 -47
  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-act.tsx +14 -14
  56. package/components/icons/blog.tsx +20 -20
  57. package/components/icons/bridge-act.tsx +18 -18
  58. package/components/icons/bridge.tsx +68 -68
  59. package/components/icons/changelog-act.tsx +15 -15
  60. package/components/icons/changelog.tsx +21 -21
  61. package/components/icons/chrome.tsx +45 -45
  62. package/components/icons/coins-act.tsx +29 -29
  63. package/components/icons/coins.tsx +20 -20
  64. package/components/icons/compare-cards-act.tsx +30 -30
  65. package/components/icons/compare-cards.tsx +21 -21
  66. package/components/icons/credit-act.tsx +29 -29
  67. package/components/icons/credit.tsx +20 -20
  68. package/components/icons/customer-support-act.tsx +27 -27
  69. package/components/icons/customer-support.tsx +21 -21
  70. package/components/icons/customers-act.tsx +65 -65
  71. package/components/icons/customers.tsx +33 -33
  72. package/components/icons/developer-docs-act.tsx +26 -26
  73. package/components/icons/developer-docs.tsx +20 -20
  74. package/components/icons/exchange-act.tsx +27 -27
  75. package/components/icons/exchange.tsx +21 -21
  76. package/components/icons/explorer-act.tsx +27 -27
  77. package/components/icons/explorer.tsx +22 -22
  78. package/components/icons/faqs-act.tsx +27 -27
  79. package/components/icons/faqs.tsx +21 -21
  80. package/components/icons/github.tsx +14 -14
  81. package/components/icons/guides-act.tsx +26 -26
  82. package/components/icons/guides.tsx +21 -21
  83. package/components/icons/gun-metal.tsx +44 -44
  84. package/components/icons/index.tsx +43 -43
  85. package/components/icons/integrations-act.tsx +41 -41
  86. package/components/icons/integrations.tsx +25 -25
  87. package/components/icons/irradescent.tsx +41 -41
  88. package/components/icons/launch-subnet.tsx +21 -21
  89. package/components/icons/launchsubnet-act.tsx +29 -29
  90. package/components/icons/left-arrow.tsx +11 -11
  91. package/components/icons/lux-finance-act.tsx +34 -34
  92. package/components/icons/lux-finance.tsx +23 -23
  93. package/components/icons/lux-logo.tsx +10 -10
  94. package/components/icons/lux-pass-act.tsx +41 -41
  95. package/components/icons/lux-pass.tsx +25 -25
  96. package/components/icons/lux-quests-act.tsx +15 -15
  97. package/components/icons/lux-quests.tsx +21 -21
  98. package/components/icons/market-act.tsx +39 -39
  99. package/components/icons/market.tsx +24 -24
  100. package/components/icons/mirrored-titanium.tsx +46 -46
  101. package/components/icons/more-benefits-act.tsx +29 -29
  102. package/components/icons/more-benefits.tsx +21 -21
  103. package/components/icons/open-source-act.tsx +41 -41
  104. package/components/icons/open-source.tsx +26 -26
  105. package/components/icons/right-arrow.tsx +10 -10
  106. package/components/icons/safe-act.tsx +77 -77
  107. package/components/icons/safe.tsx +37 -37
  108. package/components/icons/search.tsx +12 -12
  109. package/components/icons/secure-delivery.tsx +13 -13
  110. package/components/icons/shop-act.tsx +29 -29
  111. package/components/icons/shop.tsx +20 -20
  112. package/components/icons/social-icon.tsx +35 -35
  113. package/components/icons/social-svg.css +3 -3
  114. package/components/icons/sterling-silver-card.tsx +44 -44
  115. package/components/icons/templates-act.tsx +29 -29
  116. package/components/icons/templates.tsx +21 -21
  117. package/components/icons/validators-act.tsx +42 -42
  118. package/components/icons/validators.tsx +41 -41
  119. package/components/icons/view-all-card-act.tsx +28 -28
  120. package/components/icons/view-all-card.tsx +20 -20
  121. package/components/icons/wallet-act.tsx +29 -29
  122. package/components/icons/wallet.tsx +20 -20
  123. package/components/icons/warpcast.tsx +58 -58
  124. package/components/icons/youtube-logo.tsx +59 -59
  125. package/components/index.ts +25 -25
  126. package/components/logo.tsx +89 -89
  127. package/components/main.tsx +27 -27
  128. package/components/mini-chart/index.tsx +7 -7
  129. package/components/mini-chart/mini-chart-props.ts +43 -43
  130. package/components/mini-chart/mini-chart.tsx +85 -85
  131. package/components/mini-chart/wrapper.tsx +23 -23
  132. package/components/not-found/index.tsx +28 -28
  133. package/components/not-found/not-found-content.mdx +5 -5
  134. package/components/scripts.tsx +24 -24
  135. package/components/tooltip.tsx +31 -31
  136. package/environment.d.ts +5 -5
  137. package/next/analytics/fpixel.ts +15 -15
  138. package/next/analytics/google-analytics.ts +13 -13
  139. package/next/analytics/index.ts +3 -3
  140. package/next/analytics/pixel-analytics.tsx +54 -54
  141. package/next/font/get-app-router-font-classes.ts +12 -12
  142. package/next/font/load-and-return-lux-next-fonts-on-import.ts +68 -68
  143. package/next/font/next-font-desc.ts +27 -27
  144. package/next/font/pages-router-font-vars.tsx +18 -18
  145. package/next/head-metadata/from-next/metadata-types.ts +158 -158
  146. package/next/head-metadata/from-next/opengraph-types.ts +267 -267
  147. package/next/head-metadata/from-next/twitter-types.ts +92 -92
  148. package/next/head-metadata/index.tsx +208 -208
  149. package/next/middleware/determine-device-mw.ts +16 -16
  150. package/package.json +79 -79
  151. package/root-layout/WHY_THIS_IS_SEPARATE.txt +1 -1
  152. package/root-layout/index.tsx +112 -112
  153. package/server-actions/firebase-app.ts +14 -14
  154. package/server-actions/index.ts +5 -5
  155. package/server-actions/store-contact.ts +51 -51
  156. package/site-def/footer/community.tsx +67 -67
  157. package/site-def/footer/company.ts +37 -37
  158. package/site-def/footer/ecosystem.ts +37 -37
  159. package/site-def/footer/index.tsx +26 -26
  160. package/site-def/footer/legal.ts +28 -28
  161. package/site-def/footer/network.ts +45 -45
  162. package/site-def/footer/svg/warpcast-logo.svg +11 -11
  163. package/site-def/index.ts +2 -2
  164. package/site-def/main-nav.tsx +458 -458
  165. package/style/cart-animation.css +29 -29
  166. package/style/checkout-animation.css +23 -23
  167. package/style/drawer-handle-overrides.css +160 -160
  168. package/style/lux-colors.css +85 -85
  169. package/style/lux-global.css +50 -47
  170. package/tailwind/fontFamily.tailwind.lux.ts +18 -18
  171. package/tailwind/index.ts +2 -2
  172. package/tailwind/lux-tw-fonts.ts +39 -39
  173. package/tailwind/tailwind.config.lux-preset.ts +10 -10
  174. package/tsconfig.json +15 -15
  175. package/types/chatbot-config.ts +6 -6
  176. package/types/chatbot-suggested-question.ts +7 -7
  177. package/types/contact-info.ts +10 -10
  178. package/types/index.ts +4 -4
  179. package/types/site-def.ts +43 -43
@@ -1,25 +1,25 @@
1
- export { default as AccessCodeInput } from './access-code-input'
2
- export { default as ChatWidget } from './chat-widget'
3
- export { default as ContactDialog } from './contact-dialog'
4
- export { default as Copyright} from './copyright'
5
- export { default as Footer } from './footer'
6
- export { default as Header } from './header'
7
- export * as Icons from './icons'
8
- export { default as Logo } from './logo'
9
- export { default as Main } from './main'
10
- export { default as MiniChart } from './mini-chart'
11
- export { default as NotFound } from './not-found'
12
-
13
- export { default as AuthListener } from './auth/auth-listener'
14
- export { default as BackButton } from './back-button'
15
- export { default as BuyDrawer } from './commerce/drawer'
16
- export { default as DrawerMargin } from './drawer-margin'
17
- export { default as BuyButton } from './commerce/buy-button'
18
- export { default as CheckoutButton } from './commerce/checkout-button'
19
- export { default as CheckoutPanel } from './commerce/checkout-panel'
20
- export { default as LoginPanel } from './auth/login-panel'
21
- export { default as Scripts } from './scripts'
22
- export { default as Tooltip } from './tooltip'
23
-
24
- export { default as EmblaAutoplay } from 'embla-carousel-autoplay'
25
-
1
+ export { default as AccessCodeInput } from './access-code-input'
2
+ export { default as ChatWidget } from './chat-widget'
3
+ export { default as ContactDialog } from './contact-dialog'
4
+ export { default as Copyright} from './copyright'
5
+ export { default as Footer } from './footer'
6
+ export { default as Header } from './header'
7
+ export * as Icons from './icons'
8
+ export { default as Logo } from './logo'
9
+ export { default as Main } from './main'
10
+ export { default as MiniChart } from './mini-chart'
11
+ export { default as NotFound } from './not-found'
12
+
13
+ export { default as AuthListener } from './auth/auth-listener'
14
+ export { default as BackButton } from './back-button'
15
+ export { default as BuyDrawer } from './commerce/drawer'
16
+ export { default as DrawerMargin } from './drawer-margin'
17
+ export { default as BuyButton } from './commerce/buy-button'
18
+ export { default as CheckoutButton } from './commerce/checkout-button'
19
+ export { default as CheckoutPanel } from './commerce/checkout-panel'
20
+ export { default as LoginPanel } from './auth/login-panel'
21
+ export { default as Scripts } from './scripts'
22
+ export { default as Tooltip } from './tooltip'
23
+
24
+ export { default as EmblaAutoplay } from 'embla-carousel-autoplay'
25
+
@@ -1,89 +1,89 @@
1
- import React from 'react'
2
- import Link from 'next/link'
3
-
4
- import { type TShirtSize } from '@hanzo/ui/types'
5
-
6
- import { cn } from '@hanzo/ui/util'
7
-
8
- import * as Icons from './icons'
9
-
10
- const TEXT = 'LUX'
11
-
12
- const Logo: React.FC<{
13
- size?: TShirtSize
14
- variant?: 'text-only' | 'logo-only' | 'full'
15
- onClick?: () => void
16
- href?: string
17
- outerClx?: string
18
- textClx?: string
19
- }> = ({
20
- size,
21
- href, // no default please!
22
- outerClx='',
23
- textClx='',
24
- variant='full',
25
- onClick,
26
- }) => {
27
- let classes: any = {}
28
- const toAdd = (variant === 'logo-only') ?
29
- {
30
- span: 'hidden',
31
- icon: ''
32
- }
33
- :
34
- (variant === 'text-only') ?
35
- {
36
- span: '',
37
- icon: 'hidden'
38
- }
39
- :
40
- {
41
- span: '',
42
- icon: ''
43
- }
44
-
45
- if (size === 'lg' || size === 'xl' ) { // for safety
46
- classes.icon = 'h-10 w-10 mr-4 color-inherit '
47
- classes.span = 'text-3xl '
48
- }
49
- // match lux.network
50
- else if (size === 'md') {
51
- classes.icon = 'h-[32px] w-[32px] mr-[12px] color-inherit '
52
- classes.span = 'text-[1.8rem]/[1.8rem] tracking-tighter '
53
- }
54
- else if (size === 'sm' ) {
55
- classes.icon = 'h-6 w-6 mr-2 color-inherit '
56
- classes.span = 'text-lg '
57
- }
58
- // xs
59
- else {
60
- classes.icon = 'h-4 w-4 mr-1 color-inherit '
61
- classes.span = 'text-base '
62
- }
63
-
64
- classes.icon += toAdd.icon
65
- classes.span += toAdd.span
66
-
67
-
68
- const outerClasses = 'flex flex-row items-center ' + outerClx
69
- const spanClasses = 'inline-block font-bold font-heading '
70
- + textClx
71
- + (href ? ' hover:text-accent cursor-pointer ' : ' cursor-default ')
72
- + classes.span
73
-
74
- return (
75
- href ? (
76
- <Link href={href} className={outerClasses} onClick={onClick} >
77
- <Icons.logo className={classes.icon} />
78
- <span className={spanClasses}>{TEXT}</span>
79
- </Link>
80
- ) : (
81
- <span className={outerClasses} onClick={onClick}>
82
- <Icons.logo className={classes.icon} />
83
- <span className={spanClasses}>{TEXT}</span>
84
- </span>
85
- )
86
- )
87
- }
88
-
89
- export default Logo
1
+ import React from 'react'
2
+ import Link from 'next/link'
3
+
4
+ import { type TShirtSize } from '@hanzo/ui/types'
5
+
6
+ import { cn } from '@hanzo/ui/util'
7
+
8
+ import * as Icons from './icons'
9
+
10
+ const TEXT = 'LUX'
11
+
12
+ const Logo: React.FC<{
13
+ size?: TShirtSize
14
+ variant?: 'text-only' | 'logo-only' | 'full'
15
+ onClick?: () => void
16
+ href?: string
17
+ outerClx?: string
18
+ textClx?: string
19
+ }> = ({
20
+ size,
21
+ href, // no default please!
22
+ outerClx='',
23
+ textClx='',
24
+ variant='full',
25
+ onClick,
26
+ }) => {
27
+ let classes: any = {}
28
+ const toAdd = (variant === 'logo-only') ?
29
+ {
30
+ span: 'hidden',
31
+ icon: ''
32
+ }
33
+ :
34
+ (variant === 'text-only') ?
35
+ {
36
+ span: '',
37
+ icon: 'hidden'
38
+ }
39
+ :
40
+ {
41
+ span: '',
42
+ icon: ''
43
+ }
44
+
45
+ if (size === 'lg' || size === 'xl' ) { // for safety
46
+ classes.icon = 'h-10 w-10 mr-4 color-inherit '
47
+ classes.span = 'text-3xl '
48
+ }
49
+ // match lux.network
50
+ else if (size === 'md') {
51
+ classes.icon = 'h-[32px] w-[32px] mr-[12px] color-inherit '
52
+ classes.span = 'text-[1.8rem]/[1.8rem] tracking-tighter '
53
+ }
54
+ else if (size === 'sm' ) {
55
+ classes.icon = 'h-6 w-6 mr-2 color-inherit '
56
+ classes.span = 'text-lg '
57
+ }
58
+ // xs
59
+ else {
60
+ classes.icon = 'h-4 w-4 mr-1 color-inherit '
61
+ classes.span = 'text-base '
62
+ }
63
+
64
+ classes.icon += toAdd.icon
65
+ classes.span += toAdd.span
66
+
67
+
68
+ const outerClasses = 'flex flex-row items-center ' + outerClx
69
+ const spanClasses = 'inline-block font-bold font-heading '
70
+ + textClx
71
+ + (href ? ' hover:text-accent cursor-pointer ' : ' cursor-default ')
72
+ + classes.span
73
+
74
+ return (
75
+ href ? (
76
+ <Link href={href} className={outerClasses} onClick={onClick} >
77
+ <Icons.logo className={classes.icon} />
78
+ <span className={spanClasses}>{TEXT}</span>
79
+ </Link>
80
+ ) : (
81
+ <span className={outerClasses} onClick={onClick}>
82
+ <Icons.logo className={classes.icon} />
83
+ <span className={spanClasses}>{TEXT}</span>
84
+ </span>
85
+ )
86
+ )
87
+ }
88
+
89
+ export default Logo
@@ -1,27 +1,27 @@
1
- import React, { type PropsWithChildren } from 'react'
2
- import { cn } from '@hanzo/ui/util'
3
-
4
- const Main: React.FC<PropsWithChildren & {
5
- id?: string
6
- className?: string
7
- headerSpace?: boolean
8
- standardWidth?: boolean
9
- }> = ({
10
- children,
11
- className='',
12
- headerSpace=true,
13
- standardWidth=true,
14
- id
15
- }) => (
16
- <main id={id ?? 'LUX_UI_MAIN'} className={cn(
17
- 'flex flex-col justify-start items-center',
18
- 'px-4 md:px-6 lg:px-8',
19
- standardWidth ? 'max-w-screen-2xl w-full lg:mx-auto' : '',
20
- headerSpace ? 'pt-[44px] md:pt-[80px]' : 'py-4',
21
- className
22
- )}>
23
- {children}
24
- </main>
25
- )
26
-
27
- export default Main
1
+ import React, { type PropsWithChildren } from 'react'
2
+ import { cn } from '@hanzo/ui/util'
3
+
4
+ const Main: React.FC<PropsWithChildren & {
5
+ id?: string
6
+ className?: string
7
+ headerSpace?: boolean
8
+ standardWidth?: boolean
9
+ }> = ({
10
+ children,
11
+ className='',
12
+ headerSpace=true,
13
+ standardWidth=true,
14
+ id
15
+ }) => (
16
+ <main id={id ?? 'LUX_UI_MAIN'} className={cn(
17
+ 'flex flex-col justify-start items-center',
18
+ 'px-4 md:px-6 lg:px-8',
19
+ standardWidth ? 'max-w-screen-2xl w-full lg:mx-auto' : '',
20
+ headerSpace ? 'pt-[44px] md:pt-[80px]' : 'py-4',
21
+ className
22
+ )}>
23
+ {children}
24
+ </main>
25
+ )
26
+
27
+ export default Main
@@ -1,8 +1,8 @@
1
- import MiniChart from './wrapper'
2
- // import { type MiniChartProps, type MiniChartDateRanges } from './mini-chart-props'
3
-
4
- export {
5
- MiniChart as default,
6
- // type MiniChartProps,
7
- // type MiniChartDateRanges
1
+ import MiniChart from './wrapper'
2
+ // import { type MiniChartProps, type MiniChartDateRanges } from './mini-chart-props'
3
+
4
+ export {
5
+ MiniChart as default,
6
+ // type MiniChartProps,
7
+ // type MiniChartDateRanges
8
8
  }
@@ -1,44 +1,44 @@
1
- import type { CSSProperties } from 'react'
2
-
3
- // https://www.typescriptlang.org/docs/handbook/enums.html#enums-at-runtime
4
- const enum MiniChartDateRangesValues {
5
- '1D',
6
- '1M',
7
- '3M',
8
- '12M',
9
- '60M',
10
- 'ALL',
11
- }
12
-
13
- type MiniChartDateRanges = keyof typeof MiniChartDateRangesValues
14
-
15
- interface MiniChartBaseProps {
16
- symbol: string
17
- exchange?: string
18
- dateRange: MiniChartDateRanges
19
- noTimeScale?: boolean
20
- width?: number | string
21
- height?: number | string
22
- locale?: string
23
- colorTheme?: "light" | "dark"
24
- // @ts-ignore // TODO
25
- lineColor?: CSSProperties["color"]
26
- // @ts-ignore // TODO
27
- topGradientColor?: CSSProperties["color"]
28
- // @ts-ignore // TODO
29
- bottomGradientColor?: CSSProperties["color"]
30
- isTransparent?: boolean
31
- autosize?: boolean
32
- chartOnly?: boolean
33
- largeChartUrl?: string
34
- }
35
-
36
- type MiniChartProps = {
37
- widgetProps: MiniChartBaseProps
38
- containerStyles?: CSSProperties
39
- }
40
-
41
- export {
42
- type MiniChartProps,
43
- type MiniChartDateRanges
1
+ import type { CSSProperties } from 'react'
2
+
3
+ // https://www.typescriptlang.org/docs/handbook/enums.html#enums-at-runtime
4
+ const enum MiniChartDateRangesValues {
5
+ '1D',
6
+ '1M',
7
+ '3M',
8
+ '12M',
9
+ '60M',
10
+ 'ALL',
11
+ }
12
+
13
+ type MiniChartDateRanges = keyof typeof MiniChartDateRangesValues
14
+
15
+ interface MiniChartBaseProps {
16
+ symbol: string
17
+ exchange?: string
18
+ dateRange: MiniChartDateRanges
19
+ noTimeScale?: boolean
20
+ width?: number | string
21
+ height?: number | string
22
+ locale?: string
23
+ colorTheme?: "light" | "dark"
24
+ // @ts-ignore // TODO
25
+ lineColor?: CSSProperties["color"]
26
+ // @ts-ignore // TODO
27
+ topGradientColor?: CSSProperties["color"]
28
+ // @ts-ignore // TODO
29
+ bottomGradientColor?: CSSProperties["color"]
30
+ isTransparent?: boolean
31
+ autosize?: boolean
32
+ chartOnly?: boolean
33
+ largeChartUrl?: string
34
+ }
35
+
36
+ type MiniChartProps = {
37
+ widgetProps: MiniChartBaseProps
38
+ containerStyles?: CSSProperties
39
+ }
40
+
41
+ export {
42
+ type MiniChartProps,
43
+ type MiniChartDateRanges
44
44
  }
@@ -1,85 +1,85 @@
1
- 'use client'
2
-
3
- import React, { useEffect, useRef } from 'react'
4
- import { type MiniChartProps } from './mini-chart-props'
5
-
6
- const MiniChart: React.FC<MiniChartProps> = ({
7
- widgetProps,
8
- containerStyles = {}
9
- }) => {
10
-
11
- const {
12
- symbol,
13
- exchange,
14
- lineColor,
15
- topGradientColor,
16
- bottomGradientColor,
17
- width,
18
- height,
19
- autosize,
20
- locale,
21
- ...rest
22
- } = widgetProps
23
-
24
- const symbolString = (exchange) ? `${exchange}:${symbol}` : symbol
25
-
26
- const containerRef = useRef<HTMLDivElement | null>(null)
27
-
28
- useEffect(() => {
29
- if (!containerRef.current) {
30
- return
31
- }
32
- const script = document.createElement('script')
33
- script.type = 'text/javascript'
34
- script.src = 'https://s3.tradingview.com/external-embedding/embed-widget-mini-symbol-overview.js'
35
- script.async = true
36
- script.onload = async () => {
37
- const iframe = containerRef.current?.querySelector('iframe')
38
- if (iframe && iframe instanceof Element) {
39
- iframe.style.colorScheme = 'normal'
40
- setTimeout(() => {
41
- const value = document.querySelector('#mini-symbol-overview-ticker')
42
- //console.log("TICKER: " + value)
43
- }, 1200) // from experimentation
44
-
45
-
46
- }
47
-
48
- const copyDiv = document.querySelector('.tradingview-widget-copyright')
49
- if (copyDiv) {
50
- //console.log("COPY: " + copyDiv)
51
- setTimeout(() => {
52
- copyDiv.classList.remove('invisible')
53
- }, 1200) // from experimentation
54
- }
55
- }
56
- const config = JSON.stringify({
57
- symbol: symbolString,
58
- width: autosize ? '100%' : (width || 350),
59
- height: autosize ? '100%' : (height || 220),
60
- locale: locale ?? 'en',
61
- isTransparent: 'true',
62
- trendLineColor: lineColor || 'rgba(41, 98, 255, 1)',
63
- underLineColor: topGradientColor || 'rgba(41, 98, 255, 0.3)',
64
- underLineBottomColor: bottomGradientColor || 'rgba(41, 98, 255, 0)',
65
- ...rest,
66
- })
67
- script.innerHTML = config
68
- containerRef.current.appendChild(script)
69
- return () => {
70
- while (containerRef.current?.firstChild) {
71
- containerRef.current.removeChild(containerRef.current.firstChild)
72
- }
73
- }
74
- }, [ JSON.stringify(widgetProps) ])
75
-
76
- return (<>
77
- <div style={containerStyles} className='tradingview-widget-container h-[150px]' ref={containerRef} />
78
- <div className='tradingview-widget-copyright border-t w-full invisible'>
79
- <a href={`https://www.tradingview.com/symbols/${symbol}${exchange ? `/?exchange=${exchange}` : '' }`} rel="noopener" target="_blank">
80
- <span className="text-[--hz-ui-primary]">{symbol} quotes</span></a>&nbsp;by TradingView
81
- </div>
82
- </>)
83
- }
84
-
85
- export default MiniChart
1
+ 'use client'
2
+
3
+ import React, { useEffect, useRef } from 'react'
4
+ import { type MiniChartProps } from './mini-chart-props'
5
+
6
+ const MiniChart: React.FC<MiniChartProps> = ({
7
+ widgetProps,
8
+ containerStyles = {}
9
+ }) => {
10
+
11
+ const {
12
+ symbol,
13
+ exchange,
14
+ lineColor,
15
+ topGradientColor,
16
+ bottomGradientColor,
17
+ width,
18
+ height,
19
+ autosize,
20
+ locale,
21
+ ...rest
22
+ } = widgetProps
23
+
24
+ const symbolString = (exchange) ? `${exchange}:${symbol}` : symbol
25
+
26
+ const containerRef = useRef<HTMLDivElement | null>(null)
27
+
28
+ useEffect(() => {
29
+ if (!containerRef.current) {
30
+ return
31
+ }
32
+ const script = document.createElement('script')
33
+ script.type = 'text/javascript'
34
+ script.src = 'https://s3.tradingview.com/external-embedding/embed-widget-mini-symbol-overview.js'
35
+ script.async = true
36
+ script.onload = async () => {
37
+ const iframe = containerRef.current?.querySelector('iframe')
38
+ if (iframe && iframe instanceof Element) {
39
+ iframe.style.colorScheme = 'normal'
40
+ setTimeout(() => {
41
+ const value = document.querySelector('#mini-symbol-overview-ticker')
42
+ //console.log("TICKER: " + value)
43
+ }, 1200) // from experimentation
44
+
45
+
46
+ }
47
+
48
+ const copyDiv = document.querySelector('.tradingview-widget-copyright')
49
+ if (copyDiv) {
50
+ //console.log("COPY: " + copyDiv)
51
+ setTimeout(() => {
52
+ copyDiv.classList.remove('invisible')
53
+ }, 1200) // from experimentation
54
+ }
55
+ }
56
+ const config = JSON.stringify({
57
+ symbol: symbolString,
58
+ width: autosize ? '100%' : (width || 350),
59
+ height: autosize ? '100%' : (height || 220),
60
+ locale: locale ?? 'en',
61
+ isTransparent: 'true',
62
+ trendLineColor: lineColor || 'rgba(41, 98, 255, 1)',
63
+ underLineColor: topGradientColor || 'rgba(41, 98, 255, 0.3)',
64
+ underLineBottomColor: bottomGradientColor || 'rgba(41, 98, 255, 0)',
65
+ ...rest,
66
+ })
67
+ script.innerHTML = config
68
+ containerRef.current.appendChild(script)
69
+ return () => {
70
+ while (containerRef.current?.firstChild) {
71
+ containerRef.current.removeChild(containerRef.current.firstChild)
72
+ }
73
+ }
74
+ }, [ JSON.stringify(widgetProps) ])
75
+
76
+ return (<>
77
+ <div style={containerStyles} className='tradingview-widget-container h-[150px]' ref={containerRef} />
78
+ <div className='tradingview-widget-copyright border-t w-full invisible'>
79
+ <a href={`https://www.tradingview.com/symbols/${symbol}${exchange ? `/?exchange=${exchange}` : '' }`} rel="noopener" target="_blank">
80
+ <span className="text-[--hz-ui-primary]">{symbol} quotes</span></a>&nbsp;by TradingView
81
+ </div>
82
+ </>)
83
+ }
84
+
85
+ export default MiniChart
@@ -1,23 +1,23 @@
1
- import React from 'react'
2
-
3
- import BaseChart from './mini-chart'
4
-
5
- const Wrapper: React.FC<{
6
- symbol: string,
7
- exchange?: string
8
- }> = ({
9
- symbol,
10
- exchange
11
- }) => (
12
- <BaseChart widgetProps ={{
13
- symbol,
14
- exchange,
15
- autosize: true,
16
- colorTheme: 'dark',
17
- lineColor: "rgb(114, 27, 228)",
18
- bottomGradientColor: "rgba(255, 255, 255, 0.1)",
19
- dateRange: '60M',
20
- }}/>
21
- )
22
-
23
- export default Wrapper
1
+ import React from 'react'
2
+
3
+ import BaseChart from './mini-chart'
4
+
5
+ const Wrapper: React.FC<{
6
+ symbol: string,
7
+ exchange?: string
8
+ }> = ({
9
+ symbol,
10
+ exchange
11
+ }) => (
12
+ <BaseChart widgetProps ={{
13
+ symbol,
14
+ exchange,
15
+ autosize: true,
16
+ colorTheme: 'dark',
17
+ lineColor: "rgb(114, 27, 228)",
18
+ bottomGradientColor: "rgba(255, 255, 255, 0.1)",
19
+ dateRange: '60M',
20
+ }}/>
21
+ )
22
+
23
+ export default Wrapper
@@ -1,28 +1,28 @@
1
- import React from 'react'
2
-
3
- import { ApplyTypography } from '@hanzo/ui/primitives'
4
-
5
- import type { SiteDef } from '../../site-def'
6
- import Footer from '../footer'
7
- import Header from '../header'
8
- import Main from '../main'
9
-
10
- import NotFoundMDX from './not-found-content.mdx'
11
-
12
- const NotFound: React.FC<{
13
- header?: boolean
14
- siteDef: SiteDef
15
- }> = ({
16
- header=false,
17
- siteDef
18
- }) => (<>
19
- {header && <Header siteDef={siteDef}/>}
20
- <Main className='h-[100svh] sm:h-[700px] px-8 sm:px-10 ' headerSpace={header}>
21
- <ApplyTypography className='mt-[200px] flex flex-col md:gap-8 '>
22
- <NotFoundMDX />
23
- </ApplyTypography>
24
- </Main>
25
- <Footer siteDef={siteDef}/>
26
- </>)
27
-
28
- export default NotFound
1
+ import React from 'react'
2
+
3
+ import { ApplyTypography } from '@hanzo/ui/primitives'
4
+
5
+ import type { SiteDef } from '../../site-def'
6
+ import Footer from '../footer'
7
+ import Header from '../header'
8
+ import Main from '../main'
9
+
10
+ import NotFoundMDX from './not-found-content.mdx'
11
+
12
+ const NotFound: React.FC<{
13
+ header?: boolean
14
+ siteDef: SiteDef
15
+ }> = ({
16
+ header=false,
17
+ siteDef
18
+ }) => (<>
19
+ {header && <Header siteDef={siteDef}/>}
20
+ <Main className='h-[100svh] sm:h-[700px] px-8 sm:px-10 ' headerSpace={header}>
21
+ <ApplyTypography className='mt-[200px] flex flex-col md:gap-8 '>
22
+ <NotFoundMDX />
23
+ </ApplyTypography>
24
+ </Main>
25
+ <Footer siteDef={siteDef}/>
26
+ </>)
27
+
28
+ export default NotFound