@luxfi/core 5.3.7 → 10.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. package/package.json +36 -80
  2. package/tsconfig.json +10 -15
  3. package/tsconfig.tsbuildinfo +1 -0
  4. package/types/asset.ts +28 -0
  5. package/types/contract.ts +13 -0
  6. package/types/deposit-address.ts +9 -0
  7. package/types/exchange.ts +25 -0
  8. package/types/index.ts +21 -4
  9. package/types/network-type.ts +16 -0
  10. package/types/network.ts +58 -0
  11. package/types/swap-status.ts +58 -0
  12. package/types/transaction-type.ts +5 -0
  13. package/types/utila.ts +36 -0
  14. package/commerce/ui/conf.ts +0 -13
  15. package/commerce/ui/context.tsx +0 -123
  16. package/commerce/ui/store.ts +0 -290
  17. package/components/access-code-input.tsx +0 -71
  18. package/components/auth/auth-listener.tsx +0 -29
  19. package/components/auth/auth-token/clear-auth-token.tsx +0 -12
  20. package/components/auth/auth-token/set-auth-token.tsx +0 -16
  21. package/components/auth/common-auth-domains.ts +0 -16
  22. package/components/auth/login-panel.tsx +0 -107
  23. package/components/back-button.tsx +0 -49
  24. package/components/chat-widget.tsx +0 -85
  25. package/components/commerce/_to_deprecate_checkout-widget/const.ts +0 -13
  26. package/components/commerce/_to_deprecate_checkout-widget/index.tsx_ +0 -188
  27. package/components/commerce/_to_deprecate_checkout-widget/obs-string-set.ts +0 -48
  28. package/components/commerce/_to_deprecate_checkout-widget/use-anim-clx-set.ts +0 -59
  29. package/components/commerce/bag-button.tsx +0 -98
  30. package/components/commerce/buy-button.tsx +0 -34
  31. package/components/commerce/checkout-button.tsx +0 -129
  32. package/components/commerce/checkout-panel/cart-accordian.tsx +0 -66
  33. package/components/commerce/checkout-panel/checkout-panel-props.ts +0 -10
  34. package/components/commerce/checkout-panel/desktop-bag-carousel.tsx +0 -36
  35. package/components/commerce/checkout-panel/desktop-cp.tsx +0 -83
  36. package/components/commerce/checkout-panel/index.tsx +0 -126
  37. package/components/commerce/checkout-panel/mobile-cp.tsx +0 -67
  38. package/components/commerce/checkout-panel/policy-links.tsx +0 -29
  39. package/components/commerce/checkout-panel/steps-indicator.tsx +0 -39
  40. package/components/commerce/checkout-panel/thank-you.tsx +0 -18
  41. package/components/commerce/desktop-bag-popup.tsx +0 -78
  42. package/components/commerce/desktop-nav-menu.tsx +0 -194
  43. package/components/commerce/drawer/index.tsx +0 -88
  44. package/components/commerce/drawer/micro.tsx +0 -145
  45. package/components/commerce/drawer/shell.tsx +0 -85
  46. package/components/commerce/mobile-bag-drawer.tsx +0 -51
  47. package/components/commerce/mobile-login-button.tsx +0 -108
  48. package/components/commerce/mobile-menu-toggle-button.tsx +0 -35
  49. package/components/commerce/mobile-nav-menu-ai.tsx +0 -51
  50. package/components/commerce/mobile-nav-menu-item.tsx +0 -50
  51. package/components/commerce/mobile-nav-menu.tsx +0 -102
  52. package/components/contact-dialog/contact-form.tsx +0 -113
  53. package/components/contact-dialog/disclaimer.tsx +0 -13
  54. package/components/contact-dialog/index.tsx +0 -64
  55. package/components/copyright.tsx +0 -21
  56. package/components/drawer-margin.tsx +0 -28
  57. package/components/footer.tsx +0 -78
  58. package/components/header/desktop.tsx +0 -51
  59. package/components/header/index.tsx +0 -50
  60. package/components/header/mobile.tsx +0 -163
  61. package/components/header/theme-toggle.tsx +0 -26
  62. package/components/icons/24k-gold-card.tsx +0 -43
  63. package/components/icons/ai-chat-act.tsx +0 -47
  64. package/components/icons/ai-chat.tsx +0 -29
  65. package/components/icons/anodized-titanium.tsx +0 -45
  66. package/components/icons/avatar.tsx +0 -11
  67. package/components/icons/bag-icon.tsx +0 -10
  68. package/components/icons/blog-act.tsx +0 -14
  69. package/components/icons/blog.tsx +0 -20
  70. package/components/icons/bridge-act.tsx +0 -18
  71. package/components/icons/bridge.tsx +0 -68
  72. package/components/icons/changelog-act.tsx +0 -15
  73. package/components/icons/changelog.tsx +0 -21
  74. package/components/icons/chrome.tsx +0 -45
  75. package/components/icons/coins-act.tsx +0 -29
  76. package/components/icons/coins.tsx +0 -20
  77. package/components/icons/compare-cards-act.tsx +0 -30
  78. package/components/icons/compare-cards.tsx +0 -21
  79. package/components/icons/credit-act.tsx +0 -29
  80. package/components/icons/credit.tsx +0 -20
  81. package/components/icons/customer-support-act.tsx +0 -27
  82. package/components/icons/customer-support.tsx +0 -21
  83. package/components/icons/customers-act.tsx +0 -65
  84. package/components/icons/customers.tsx +0 -33
  85. package/components/icons/developer-docs-act.tsx +0 -26
  86. package/components/icons/developer-docs.tsx +0 -20
  87. package/components/icons/exchange-act.tsx +0 -27
  88. package/components/icons/exchange.tsx +0 -21
  89. package/components/icons/explorer-act.tsx +0 -27
  90. package/components/icons/explorer.tsx +0 -22
  91. package/components/icons/faqs-act.tsx +0 -27
  92. package/components/icons/faqs.tsx +0 -21
  93. package/components/icons/github.tsx +0 -14
  94. package/components/icons/guides-act.tsx +0 -26
  95. package/components/icons/guides.tsx +0 -21
  96. package/components/icons/gun-metal.tsx +0 -44
  97. package/components/icons/index.tsx +0 -43
  98. package/components/icons/integrations-act.tsx +0 -41
  99. package/components/icons/integrations.tsx +0 -25
  100. package/components/icons/irradescent.tsx +0 -41
  101. package/components/icons/launch-subnet.tsx +0 -21
  102. package/components/icons/launchsubnet-act.tsx +0 -29
  103. package/components/icons/left-arrow.tsx +0 -11
  104. package/components/icons/lux-finance-act.tsx +0 -34
  105. package/components/icons/lux-finance.tsx +0 -23
  106. package/components/icons/lux-logo.tsx +0 -10
  107. package/components/icons/lux-pass-act.tsx +0 -41
  108. package/components/icons/lux-pass.tsx +0 -25
  109. package/components/icons/lux-quests-act.tsx +0 -15
  110. package/components/icons/lux-quests.tsx +0 -21
  111. package/components/icons/market-act.tsx +0 -39
  112. package/components/icons/market.tsx +0 -24
  113. package/components/icons/mirrored-titanium.tsx +0 -46
  114. package/components/icons/more-benefits-act.tsx +0 -29
  115. package/components/icons/more-benefits.tsx +0 -21
  116. package/components/icons/open-source-act.tsx +0 -41
  117. package/components/icons/open-source.tsx +0 -26
  118. package/components/icons/right-arrow.tsx +0 -10
  119. package/components/icons/safe-act.tsx +0 -77
  120. package/components/icons/safe.tsx +0 -37
  121. package/components/icons/search.tsx +0 -12
  122. package/components/icons/secure-delivery.tsx +0 -13
  123. package/components/icons/shop-act.tsx +0 -29
  124. package/components/icons/shop.tsx +0 -20
  125. package/components/icons/social-icon.tsx +0 -35
  126. package/components/icons/social-svg.css +0 -3
  127. package/components/icons/sterling-silver-card.tsx +0 -44
  128. package/components/icons/templates-act.tsx +0 -29
  129. package/components/icons/templates.tsx +0 -21
  130. package/components/icons/validators-act.tsx +0 -42
  131. package/components/icons/validators.tsx +0 -41
  132. package/components/icons/view-all-card-act.tsx +0 -28
  133. package/components/icons/view-all-card.tsx +0 -20
  134. package/components/icons/wallet-act.tsx +0 -29
  135. package/components/icons/wallet.tsx +0 -20
  136. package/components/icons/warpcast.tsx +0 -58
  137. package/components/icons/youtube-logo.tsx +0 -59
  138. package/components/index.ts +0 -25
  139. package/components/logo.tsx +0 -89
  140. package/components/main.tsx +0 -27
  141. package/components/mini-chart/index.tsx +0 -8
  142. package/components/mini-chart/mini-chart-props.ts +0 -44
  143. package/components/mini-chart/mini-chart.tsx +0 -85
  144. package/components/mini-chart/wrapper.tsx +0 -23
  145. package/components/not-found/index.tsx +0 -28
  146. package/components/not-found/not-found-content.mdx +0 -5
  147. package/components/scripts.tsx +0 -24
  148. package/components/tooltip.tsx +0 -31
  149. package/environment.d.ts +0 -6
  150. package/next/analytics/fpixel.ts +0 -16
  151. package/next/analytics/google-analytics.ts +0 -14
  152. package/next/analytics/index.ts +0 -3
  153. package/next/analytics/pixel-analytics.tsx +0 -55
  154. package/next/font/get-app-router-font-classes.ts +0 -12
  155. package/next/font/load-and-return-lux-next-fonts-on-import.ts +0 -68
  156. package/next/font/local/Druk-Wide-Bold.ttf +0 -0
  157. package/next/font/local/Druk-Wide-Medium.ttf +0 -0
  158. package/next/font/local/InterVariable-Italic.ttf +0 -0
  159. package/next/font/local/InterVariable-Italic.woff2 +0 -0
  160. package/next/font/local/InterVariable.ttf +0 -0
  161. package/next/font/local/InterVariable.woff2 +0 -0
  162. package/next/font/next-font-desc.ts +0 -28
  163. package/next/font/pages-router-font-vars.tsx +0 -18
  164. package/next/head-metadata/from-next/metadata-types.ts +0 -158
  165. package/next/head-metadata/from-next/opengraph-types.ts +0 -267
  166. package/next/head-metadata/from-next/twitter-types.ts +0 -92
  167. package/next/head-metadata/index.tsx +0 -208
  168. package/next/index.ts +0 -1
  169. package/next/middleware/determine-device-mw.ts +0 -16
  170. package/root-layout/WHY_THIS_IS_SEPARATE.txt +0 -2
  171. package/root-layout/index.tsx +0 -112
  172. package/server-actions/TO-DO.txt +0 -1
  173. package/server-actions/firebase-app.ts +0 -14
  174. package/server-actions/index.ts +0 -5
  175. package/server-actions/store-contact.ts +0 -51
  176. package/site-def/footer/community.tsx +0 -67
  177. package/site-def/footer/company.ts +0 -37
  178. package/site-def/footer/ecosystem.ts +0 -37
  179. package/site-def/footer/index.tsx +0 -26
  180. package/site-def/footer/legal.ts +0 -28
  181. package/site-def/footer/network.ts +0 -45
  182. package/site-def/footer/svg/warpcast-logo.svg +0 -12
  183. package/site-def/index.ts +0 -3
  184. package/site-def/main-nav.tsx +0 -458
  185. package/style/cart-animation.css +0 -29
  186. package/style/checkout-animation.css +0 -23
  187. package/style/drawer-handle-overrides.css +0 -160
  188. package/style/lux-colors.css +0 -85
  189. package/style/lux-global.css +0 -51
  190. package/tailwind/fontFamily.tailwind.lux.ts +0 -18
  191. package/tailwind/index.ts +0 -2
  192. package/tailwind/lux-tw-fonts.ts +0 -40
  193. package/tailwind/tailwind.config.lux-preset.ts +0 -10
  194. package/types/chatbot-config.ts +0 -7
  195. package/types/chatbot-suggested-question.ts +0 -7
  196. package/types/contact-info.ts +0 -11
  197. package/types/site-def.ts +0 -43
@@ -1,290 +0,0 @@
1
- import {
2
- action,
3
- autorun,
4
- computed,
5
- makeObservable,
6
- observable,
7
- reaction,
8
- type IReactionDisposer,
9
- } from 'mobx'
10
-
11
- import type { CommerceService } from '@hanzo/commerce/types'
12
-
13
- const LOG = false ////////////////////
14
- const log = (s: string) => {
15
- if (LOG) {
16
- console.log('COMMERCE_UI ' + s)
17
- }
18
- }
19
-
20
- type SnapPoint = number | string
21
-
22
- type SnapPoints = {
23
- full: SnapPoint
24
- micro: SnapPoint
25
- }
26
-
27
- type SnapPointsConfig = {
28
- mb: SnapPoints
29
- dt: SnapPoints
30
- }
31
-
32
- type DrawerState = 'closed' | 'micro' | 'full'
33
-
34
- interface SelectAndBuy {
35
- showVariants: (skuPath: string) => void
36
- showRecentVariants: () => void
37
- hideVariants: () => void
38
- get currentSkuPath(): string | undefined
39
- newRoute: () => void
40
- }
41
-
42
- interface CommerceDrawer {
43
-
44
- get open(): boolean
45
- get state(): DrawerState
46
- get closedByUser(): boolean
47
- setClosedByUser(b: boolean): void
48
- get modal(): boolean
49
- get points(): SnapPoint[]
50
- get activePoint(): SnapPoint | null
51
- // Called by UI Gesture
52
- onActivePointChanged: (p: SnapPoint | null) => void
53
- get showCheckout(): boolean
54
- get showRecent(): boolean
55
- get showBuy(): boolean
56
-
57
- get microHeight(): SnapPoint
58
- get isMobile(): boolean
59
- get snapPointPx(): number
60
- }
61
-
62
- class CommerceUIStore implements
63
- SelectAndBuy,
64
- CommerceDrawer
65
- {
66
- _vHeight: number = 0
67
- _routeChangedTime = 0
68
-
69
- _currentSkuPath: string | undefined = undefined
70
- _closedByUser: boolean = false
71
- _checkingOut: boolean | undefined = undefined
72
- _ignoreStateChange: boolean = false
73
- _activePoint: SnapPoint | null = null
74
-
75
- _reactionDisposers: IReactionDisposer[] = []
76
- _service: CommerceService
77
- _pointsConfig: SnapPointsConfig
78
- _points: SnapPoints // points to either this._pointsConfig.md or this._pointsConfig.dt
79
-
80
- constructor(s: CommerceService, conf: SnapPointsConfig) {
81
- this._service = s
82
- this._pointsConfig = conf
83
- this._points = this._pointsConfig.dt
84
-
85
- makeObservable(this, {
86
- _currentSkuPath: observable,
87
- _closedByUser: observable,
88
- _checkingOut: observable,
89
- _activePoint: observable,
90
- _points: observable.ref,
91
- _vHeight: observable,
92
- _routeChangedTime: observable,
93
-
94
- showVariants: action,
95
- showRecentVariants: action,
96
- hideVariants: action,
97
- setClosedByUser: action,
98
- setCheckingOut: action,
99
- setActivePoint: action,
100
- setMobile: action,
101
- setViewportHeight: action,
102
- setRouteChangedTime: action,
103
-
104
- activePoint: computed,
105
- checkingOut: computed,
106
- closedByUser: computed,
107
- currentSkuPath: computed,
108
- microHeight: computed,
109
- modal: computed,
110
- points: computed,
111
- showRecent: computed,
112
- showBuy: computed,
113
- showCheckout: computed,
114
- snapPointPx: computed,
115
- state: computed,
116
- open: computed
117
- })
118
- }
119
-
120
- initialize = (): void => {
121
-
122
- this._reactionDisposers.push(reaction(
123
- () => ( this.state ),
124
- (s) => {
125
- if (this.ignoreStateChange) {
126
- log(`STATE CHANGE to "${s}" (IGNORED)`) // ===========
127
- this.setIgnoreStateChange(false)
128
- return
129
- }
130
- else {
131
- log(`STATE CHANGE to "${s}" (UI REACTED)`) // ===========
132
- this._syncUIToState(s)
133
- }
134
- }
135
- ))
136
- /*
137
- this._reactionDisposers.push(autorun(() => {
138
- log('AUTORUN: OPEN: ' + this.open)
139
- log('AUTORUN:' + // ===============
140
- '[showCheckout: ' + this.showCheckout +
141
- '], [showRecent: ' + this.showRecent +
142
- '], [showBuy: ' + this.showBuy +
143
- '], [closedByUser: ' + this._closedByUser +
144
- '], [checkingOut: ' + this._checkingOut + ']'
145
- ) // ===========
146
- }))
147
- */
148
- }
149
-
150
- newRoute = () => {
151
- this.setRouteChangedTime(new Date().getTime())
152
- this.hideVariants()
153
- this.setClosedByUser(false)
154
- // DO NOT reset _checkingOut!
155
- }
156
-
157
- onActivePointChanged = (newPoint: SnapPoint | null): void => {
158
- log("ON onActivePointChanged: " + newPoint) // ===========
159
- if (newPoint === this._points.micro && this.activePoint === this._points.full) {
160
- this.setIgnoreStateChange(true)
161
- this.hideVariants()
162
- }
163
- else if (newPoint === this._points.full && this.activePoint === this._points.micro) {
164
- this.setIgnoreStateChange(true)
165
- this.showRecentVariants()
166
- }
167
- this.setActivePoint(newPoint)
168
- }
169
-
170
- showVariants = (skuPath: string): void => {
171
- this._service.setCurrentItem(undefined)
172
- this._currentSkuPath = skuPath
173
- this._closedByUser = false
174
- }
175
-
176
- showRecentVariants = (): void => {
177
- const recentItemInfo = this._service.recentItem
178
- if (recentItemInfo) {
179
- this._service.setCurrentItem(undefined)
180
- this._currentSkuPath = recentItemInfo.item.sku
181
- this._closedByUser = false
182
- }
183
- }
184
-
185
- hideVariants = (): void => { this._currentSkuPath = undefined }
186
- get currentSkuPath(): string | undefined { return this._currentSkuPath }
187
-
188
- get closedByUser(): boolean { return this._closedByUser }
189
- setClosedByUser = (b: boolean): void => { this._closedByUser = b}
190
-
191
- get ignoreStateChange(): boolean { return this._ignoreStateChange }
192
- setIgnoreStateChange = (b: boolean): void => { this._ignoreStateChange = b}
193
-
194
- get checkingOut(): boolean | undefined { return this._checkingOut }
195
- setCheckingOut = (b: boolean): void => { this._checkingOut = b }
196
-
197
- get activePoint(): SnapPoint | null { return this._activePoint }
198
- setActivePoint = (pt: SnapPoint | null): void => { this._activePoint = pt}
199
-
200
- setRouteChangedTime = (t: number): void => {this._routeChangedTime = t}
201
-
202
- get points(): SnapPoint[] {
203
- return [this._points.micro, this._points.full]
204
- }
205
-
206
- _syncUIToState = (s: DrawerState) => {
207
- log("_syncUIToState: " + s) // ===========
208
- if (s === 'micro') {
209
- this.setActivePoint(this.points[0])
210
- }
211
- else if (s === 'full') {
212
- this.setActivePoint(this.points[this.points.length - 1])
213
- }
214
- }
215
-
216
- get open(): boolean {
217
-
218
- log('open():' + // ===============
219
- ' showCheckout: ' + this.showCheckout +
220
- ' showRecent: ' + this.showRecent +
221
- ' showBuy: ' + this.showBuy
222
- ) // ===========
223
-
224
- return (
225
- this._checkingOut !== undefined
226
- &&
227
- !this._checkingOut
228
- &&
229
- !this.closedByUser
230
- &&
231
- (this.showCheckout || this.showRecent || this.showBuy)
232
- )
233
- }
234
-
235
- get state(): DrawerState {
236
- if (!this.closedByUser && !this._checkingOut) {
237
- if (this.showBuy) {
238
- return 'full'
239
- }
240
- else if (this.showRecent || this.showCheckout) {
241
- return 'micro'
242
- }
243
- }
244
- return 'closed'
245
- }
246
-
247
- get showRecent(): boolean {
248
-
249
- const recentInfo = this._service.recentItem
250
- return !!recentInfo && recentInfo.modified > this._routeChangedTime
251
- }
252
-
253
- get showBuy(): boolean {return !!this.currentSkuPath}
254
- get showCheckout(): boolean { return !this._service.cartEmpty}
255
- get modal(): boolean { return this.state !== 'micro'}
256
-
257
- get microHeight(): SnapPoint {
258
- return this._points.micro
259
- }
260
-
261
- get isMobile(): boolean { return this._pointsConfig.mb === this._points }
262
- setMobile = (b: boolean): void => {
263
- log("setMobile: " + b) // ===========
264
- this._points = b ? this._pointsConfig.mb : this._pointsConfig.dt
265
- }
266
-
267
- setViewportHeight = (v: number) => {this._vHeight = v}
268
- get snapPointPx(): number {
269
- if (!this._activePoint || this._vHeight === 0) return 0
270
-
271
- if (typeof this._activePoint === 'string') {
272
- return parseInt(this._activePoint)
273
- }
274
-
275
- return this._vHeight * this._activePoint as number
276
- }
277
-
278
- dispose = () => {
279
- this._reactionDisposers.forEach((d) => {d()})
280
- }
281
- }
282
-
283
- export {
284
- CommerceUIStore,
285
- type CommerceDrawer,
286
- type SelectAndBuy,
287
- type SnapPointsConfig,
288
- type SnapPoints,
289
- type SnapPoint
290
- }
@@ -1,71 +0,0 @@
1
- 'use client'
2
-
3
- import { useState } from 'react'
4
- import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@hanzo/ui/primitives'
5
- import { cn } from '@hanzo/ui/util'
6
-
7
- const AccessCodeInput: React.FC<{
8
- onSuccess?: () => void
9
- onFail?: () => void
10
- validCodes?: string[]
11
- className?: string
12
- }> = ({
13
- onSuccess,
14
- onFail,
15
- validCodes,
16
- className
17
- }) => {
18
- const [status, setStatus] = useState<'valid' | 'invalid' | 'checking' | undefined>()
19
-
20
- const checkAccessCode = (code: string) => {
21
- setStatus(undefined)
22
- if (code.length === 6) {
23
- setStatus('checking')
24
- setTimeout(() => {
25
- if (validCodes?.includes(code) && onSuccess) {
26
- setStatus('valid')
27
- onSuccess()
28
- }
29
- else {
30
- setStatus('invalid')
31
- onFail && onFail()
32
- }
33
- }, 1000)
34
- }
35
- }
36
-
37
- return (
38
- <div className={cn('flex flex-col gap-2 mx-auto w-full text-center items-center', className)}>
39
- <InputOTP
40
- className='mx-auto'
41
- maxLength={6}
42
- onInput={(event) => checkAccessCode((event.target as HTMLInputElement).value)}
43
- render={({ slots }) => (
44
- <>
45
- <InputOTPGroup>
46
- {slots.slice(0, 3).map((slot, index) => (
47
- <InputOTPSlot key={index} {...slot} />
48
- ))}{" "}
49
- </InputOTPGroup>
50
- <InputOTPSeparator />
51
- <InputOTPGroup>
52
- {slots.slice(3).map((slot, index) => (
53
- <InputOTPSlot key={index + 3} {...slot} />
54
- ))}
55
- </InputOTPGroup>
56
- </>
57
- )}
58
- />
59
- <p className='h-[3rem]'>
60
- {
61
- status === 'checking' ? 'Checking access code...' :
62
- status === 'invalid' ? <span className='text-destructive'>Invalid access code!</span> :
63
- status === 'valid' ? <span>Access code is valid! Redirecting...</span> :
64
- null
65
- }
66
- </p>
67
- </div>
68
- )
69
- }
70
-
71
- export default AccessCodeInput
@@ -1,29 +0,0 @@
1
- 'use client'
2
-
3
- import { useEffect } from 'react'
4
- import { useAuth } from '@hanzo/auth/service'
5
- import { getCookie } from 'cookies-next'
6
-
7
- const AuthListener = () => {
8
- const auth = useAuth()
9
-
10
- useEffect(() => {
11
- fetch(`${process.env.NEXT_PUBLIC_LOGIN_SITE_URL}/api/auth/get-auth-token`, {
12
- method: 'GET',
13
- credentials: 'include',
14
- })
15
- .then(response => response.json())
16
- .then((data: any) => {
17
- const token = getCookie('auth-token')
18
- console.log(data)
19
- console.log(token)
20
- if (!!token) {
21
- auth.loginWithCustomToken(token)
22
- }
23
- })
24
- }, [auth])
25
-
26
- return ( <></> )
27
- }
28
-
29
- export default AuthListener
@@ -1,12 +0,0 @@
1
- import domains from '../common-auth-domains'
2
-
3
- const ClearAuthToken = () => {
4
- return (<>
5
- {domains.map(({url}) => (
6
- /* Clear auth-token cookie across all Lux domains */
7
- <img src={`${url}/api/auth/clear-auth-token`} className='absolute hidden'/>
8
- ))}
9
- </>)
10
- }
11
-
12
- export default ClearAuthToken
@@ -1,16 +0,0 @@
1
- import domains from '../common-auth-domains'
2
-
3
- const SetAuthToken: React.FC<{
4
- authToken: string
5
- }> = ({
6
- authToken,
7
- }) => {
8
- return (<>
9
- {!!authToken && domains.map(({url}) => (
10
- /* Set auth-token cookie across all Lux domains */
11
- <img src={`${url}/api/auth/set-auth-token?token=${authToken}`} className='absolute hidden'/>
12
- ))}
13
- </>)
14
- }
15
-
16
- export default SetAuthToken
@@ -1,16 +0,0 @@
1
- const domains = [
2
- { id: 'lux.market', url: 'https://lux.market' },
3
- { id: 'lux.shop', url: 'https://lux.shop' },
4
- { id: 'lux.credit', url: 'https://lux.credit' },
5
- { id: 'lux.network', url: 'https://lux.network' },
6
- { id: 'wallet.lux.network', url: 'https://wallet.lux.network' },
7
- { id: 'safe.lux.network', url: 'https://safe.lux.network' },
8
- { id: 'lux.finance', url: 'https://lux.finance' },
9
- { id: 'lux.exchange', url: 'https://lux.exchange' },
10
- { id: 'lux.quest', url: 'https://lux.quest' },
11
- { id: 'lux.id', url: 'https://lux.id' },
12
- ]
13
-
14
- export {
15
- domains as default
16
- }
@@ -1,107 +0,0 @@
1
- 'use client'
2
-
3
- import Link from 'next/link'
4
- import { useRouter } from 'next/navigation'
5
-
6
- import { setCookie } from 'cookies-next'
7
-
8
- import { cn } from '@hanzo/ui/util'
9
- import { Button, Carousel, CarouselContent, CarouselItem } from '@hanzo/ui/primitives'
10
- import { LoginPanel as Login } from '@hanzo/auth/components'
11
-
12
- import Logo from '../logo'
13
- import { EmblaAutoplay } from '..'
14
- import LuxLogo from '../icons/lux-logo'
15
- import { legal } from '../../site-def/footer'
16
-
17
- const LoginPanel: React.FC<{
18
- close: () => void
19
- getStartedUrl?: string
20
- redirectUrl?: string
21
- className?: string
22
- reviews: { text: string, author: string, href: string }[]
23
- }> = ({
24
- close,
25
- getStartedUrl='/',
26
- redirectUrl,
27
- className='',
28
- reviews
29
- }) => {
30
- const router = useRouter()
31
-
32
- const termsOfServiceUrl = legal.find(({title}) => title === 'Terms and Conditions')?.href || ''
33
- const privacyPolicyUrl = legal.find(({title}) => title === 'Privacy Policy')?.href || ''
34
-
35
- // TODO :aa shouldn't this happen in @hanzo/auth: components/LoginPanel ??
36
- // Otherwise, the functionality is split across modules! (and client/fw!)
37
- // (This was never my intent w the onLoginChanged callback.)
38
- const onLogin = (token: string) => {
39
- setCookie('auth-token', token, {
40
- domain: 'lux.id',
41
- path: '/',
42
- sameSite: 'none',
43
- secure: true,
44
- httpOnly: false,
45
- expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 30), // 30 days
46
- })
47
-
48
- redirectUrl && router.push(redirectUrl)
49
- }
50
-
51
- return (
52
- <div className={cn('grid grid-cols-1 md:grid-cols-2', className)}>
53
- <div className='hidden md:flex w-full h-full bg-level-1 flex-row items-end justify-end overflow-y-auto min-h-screen'>
54
- <div className='h-full w-full max-w-[750px] px-8 pt-0'>
55
- <div className='h-full w-full max-w-[550px] mx-auto flex flex-col justify-between min-h-screen py-10'>
56
- <Button
57
- variant='ghost'
58
- onClick={close}
59
- className='w-fit !min-w-0 p-2'
60
- >
61
- <Logo size='md' textClx='!cursor-pointer' variant='text-only'/>
62
- </Button>
63
- <Carousel
64
- options={{ align: 'center', loop: true }}
65
- className='w-full'
66
- plugins={[EmblaAutoplay({ delay: 5000, stopOnInteraction: true })]}
67
- >
68
- <CarouselContent>
69
- {reviews.map(({text, author, href}, index) => (
70
- <CarouselItem key={index}>
71
- <Link href={href} className='flex flex-col gap-3 cursor-pointer'>
72
- <p>“{text}“</p>
73
- <p className='text-sm'>{author}</p>
74
- </Link>
75
- </CarouselItem>
76
- ))}
77
- </CarouselContent>
78
- </Carousel>
79
- </div>
80
- </div>
81
- </div>
82
- <div className='w-full h-full bg-background flex flex-row items-center'>
83
- <div className='w-full max-w-[750px] relative flex flex-col items-center px-8 pt-0 text-center'>
84
- <div className='relative h-full w-full max-w-[400px] mx-auto flex flex-col gap-4 items-center py-10'>
85
- <Button
86
- variant='ghost'
87
- onClick={close}
88
- className='block md:hidden absolute rounded-full p-2 left-0 h-auto hover:bg-background'
89
- >
90
- <LuxLogo className='w-5 h-5'/>
91
- </Button>
92
- <Login
93
- getStartedUrl={getStartedUrl}
94
- redirectUrl={redirectUrl}
95
- className='w-full max-w-sm'
96
- termsOfServiceUrl={termsOfServiceUrl}
97
- privacyPolicyUrl={privacyPolicyUrl}
98
- onLoginChanged={onLogin}
99
- />
100
- </div>
101
- </div>
102
- </div>
103
- </div>
104
- )
105
- }
106
-
107
- export default LoginPanel
@@ -1,49 +0,0 @@
1
- 'use client'
2
- import React from 'react'
3
- import { useRouter } from 'next/navigation'
4
-
5
- import { ChevronLeft } from 'lucide-react'
6
-
7
-
8
- import {
9
- Button,
10
- buttonVariants,
11
- } from '@hanzo/ui/primitives'
12
-
13
- import type { VariantProps } from '@hanzo/ui/util'
14
-
15
- const BackButton: React.FC<{
16
- variant?: VariantProps<typeof buttonVariants>['variant']
17
- size?: VariantProps<typeof buttonVariants>['size']
18
- onBack?: () => void
19
- clx?: string
20
- iconClx?: string
21
- }> = ({
22
- variant='ghost',
23
- size='default',
24
- clx='',
25
- iconClx='',
26
- onBack
27
- }) => {
28
-
29
- const router = useRouter()
30
- const back = () => {
31
- if (onBack) {
32
- onBack()
33
- }
34
- router.back()
35
- }
36
-
37
- return (
38
- <Button
39
- variant={variant}
40
- size={size}
41
- onClick={back}
42
- className={clx}
43
- >
44
- <ChevronLeft className={iconClx}/>
45
- </Button>
46
- )
47
- }
48
-
49
- export default BackButton
@@ -1,85 +0,0 @@
1
- 'use client'
2
- import React from 'react'
3
-
4
- import { Button, Card } from '@hanzo/ui/primitives'
5
- import { cn } from '@hanzo/ui/util'
6
-
7
- import LuxLogo from './icons/lux-logo'
8
- import type { ChatbotSuggestedQuestion } from '../types'
9
-
10
- const ChatWidget: React.FC<{
11
- title: string
12
- chatbotUrl: string
13
- subtitle?: string
14
- question?: string
15
- buttonClx?: string
16
- /*
17
- ChatBotSuggestQuestion.icon
18
- Currently supports these icons from remix icons (https://remixicon.com/):
19
- GlobalLineIcon,
20
- ShieldFlashLineIcon,
21
- BankCardLineIcon,
22
- GroupLineIcon,
23
- QuestionnaireLineIcon
24
- */
25
- suggestedQuestions?: ChatbotSuggestedQuestion[]
26
- }> = ({
27
- title,
28
- chatbotUrl,
29
- subtitle,
30
- question,
31
- suggestedQuestions,
32
- buttonClx=''
33
- }) => {
34
-
35
- const [showChatbot, setShowChatbot] = React.useState<boolean>(false)
36
-
37
- const onClick = () => { setShowChatbot(!showChatbot) }
38
-
39
- const searchParams = new URLSearchParams()
40
- if (question) {
41
- searchParams.append('question', question)
42
- }
43
- if (suggestedQuestions) {
44
- searchParams.append('sQuestions', suggestedQuestions.map(({ message }) => message).join(','))
45
- searchParams.append('sHeadings', suggestedQuestions.map(({ heading }) => heading).join(','))
46
- searchParams.append('sIcons', suggestedQuestions.map(({ icon }) => icon).join(','))
47
- }
48
-
49
- const iframeSrc = `${chatbotUrl}?${searchParams.toString()}`
50
-
51
- return (<>
52
- <div className={
53
- 'fixed bottom-0 sm:bottom-16 right-0 w-full h-full ' +
54
- 'sm:max-w-[400px] sm:max-h-[550px] sm:px-4 z-floating ' +
55
- (showChatbot ? 'flex' : 'hidden')
56
- }>
57
- <Card className='flex flex-col h-full w-full'>
58
- <div className='flex px-4 py-2 h-12 bg-level-0 items-center justify-between'>
59
- <h1 className='font-semibold font-heading'>{title} <span className='opacity-60'>{subtitle}</span></h1>
60
- <Button onClick={onClick} variant='link' size='icon' className='w-fit sm:hidden'>
61
- <LuxLogo width={24} height={24}/>
62
- </Button>
63
- </div>
64
- <iframe src={iframeSrc} className='h-full' />
65
- </Card>
66
- </div>
67
-
68
- <LuxLogo
69
- width={28}
70
- height={28}
71
- onClick={onClick}
72
- className={cn(
73
- // z-index should be below anything in commerce-iu (buy drawer and checkout widget)
74
- 'fixed bottom-5 right-[24px] md:z-floating z-16 cursor-pointer',
75
- 'hover:drop-shadow-[0_2px_6px_rgba(255,255,255,1)]',
76
- 'transition-transform',
77
- showChatbot ? 'rotate-180' : '',
78
- buttonClx
79
- )}
80
- strokeWidth={1}
81
- />
82
- </>)
83
- }
84
-
85
- export default ChatWidget
@@ -1,13 +0,0 @@
1
- export default {
2
- itemImgConstraint: { w: 40, h: 24 },
3
- animDurationMs: 400,
4
- animTimingFn: 'cubic-bezier(0.4, 0, 0.2, 1)',
5
- compWidthClx: {
6
- checkout: 'w-pr-40',
7
- itemInfo: 'w-pr-60'
8
- },
9
- shadowStyle: {
10
- border: '1px solid rgb(100 100 100)',
11
- boxShadow: '2px 4px 4px -3px rgb(125 125 125 / 0.7), 4px -4px 8px -4px rgb(125 125 125 / 0.7)'
12
- }
13
- }