@redzone/taunt-logins-ui-react 0.0.1
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/.history/index_20251002141038.html +13 -0
- package/.history/index_20251002141344.html +13 -0
- package/.history/package_20251002154235.json +32 -0
- package/.history/package_20251002160110.json +33 -0
- package/.history/package_20251002161109.json +33 -0
- package/.history/package_20251002161124.json +32 -0
- package/.history/src/App_20251002141038.tsx +35 -0
- package/.history/src/App_20251002142848.tsx +15 -0
- package/.history/src/App_20251002152540.tsx +15 -0
- package/.history/src/App_20251002152831.tsx +17 -0
- package/.history/src/App_20251002153145.tsx +18 -0
- package/.history/src/App_20251002153323.tsx +25 -0
- package/.history/src/App_20251002153420.tsx +32 -0
- package/.history/src/App_20251002153429.tsx +33 -0
- package/.history/src/App_20251002153457.tsx +39 -0
- package/.history/src/App_20251002153516.tsx +39 -0
- package/.history/src/App_20251002153520.tsx +39 -0
- package/.history/src/App_20251002153546.tsx +41 -0
- package/.history/src/App_20251002154625.tsx +41 -0
- package/.history/src/App_20251002154740.tsx +47 -0
- package/.history/src/App_20251002154812.tsx +47 -0
- package/.history/src/App_20251002154841.tsx +47 -0
- package/.history/src/App_20251002154915.tsx +54 -0
- package/.history/src/App_20251002160347.tsx +54 -0
- package/.history/src/lib/exports_20251002160004.ts +0 -0
- package/.history/src/lib/exports_20251002160045.ts +3 -0
- package/.history/src/lib/magic_20251002142829.tsx +0 -0
- package/.history/src/lib/magic_20251002142848.tsx +44 -0
- package/.history/src/lib/magic_20251002152540.tsx +28 -0
- package/.history/src/lib/magic_20251002152543.tsx +28 -0
- package/.history/src/lib/magic_20251002152546.tsx +28 -0
- package/.history/src/lib/magic_20251002152802.tsx +47 -0
- package/.history/src/lib/magic_20251002154740.tsx +47 -0
- package/.history/src/lib/magic_20251002155035.tsx +47 -0
- package/.history/src/lib/magic_20251002160411.tsx +49 -0
- package/.history/src/lib/magic_20251002160428.tsx +49 -0
- package/.history/src/lib/magic_20251002161028.tsx +50 -0
- package/.history/src/lib/metamask_20251002141612.tsx +0 -0
- package/.history/src/lib/metamask_20251002142622.tsx +38 -0
- package/.history/src/lib/metamask_20251002142654.tsx +41 -0
- package/.history/src/lib/metamask_20251002142726.tsx +44 -0
- package/.history/src/lib/metamask_20251002142848.tsx +0 -0
- package/.history/src/lib/metamask_20251002152802.tsx +28 -0
- package/.history/src/lib/metamask_20251002153516.tsx +27 -0
- package/.history/src/lib/metamask_20251002154228.tsx +27 -0
- package/.history/src/lib/metamask_20251002154523.tsx +27 -0
- package/.history/src/lib/styling_20251002154448.css +0 -0
- package/.history/src/lib/styling_20251002154523.css +19 -0
- package/.history/src/lib/styling_20251002154531.css +19 -0
- package/.history/src/lib/styling_20251002154544.css +20 -0
- package/.history/src/lib/styling_20251002154548.css +19 -0
- package/.history/src/lib/styling_20251002160446.css +20 -0
- package/.history/src/lib/styling_20251002160511.css +23 -0
- package/.history/src/lib/styling_20251002160515.css +24 -0
- package/.history/src/lib/styling_20251002160815.css +24 -0
- package/.history/src/lib/styling_20251002160910.css +24 -0
- package/.history/src/lib/styling_20251002160915.css +24 -0
- package/.history/src/lib/styling_20251002160952.css +24 -0
- package/.history/src/lib/styling_20251002161001.css +24 -0
- package/.history/src/lib/styling_20251002161011.css +24 -0
- package/.history/src/lib/styling_20251002161016.css +24 -0
- package/.history/src/lib/styling_20251002161036.css +25 -0
- package/.history/src/lib/tauntContext_20251002142359.ts +0 -0
- package/.history/src/lib/tauntContext_20251002142622.ts +17 -0
- package/.history/src/lib/tauntContext_20251002152540.ts +22 -0
- package/.history/src/lib/tauntContext_20251002152802.ts +22 -0
- package/.history/src/lib/tauntProvider_20251002142503.tsx +0 -0
- package/.history/src/lib/tauntProvider_20251002142622.tsx +15 -0
- package/.history/src/lib/tauntProvider_20251002143158.tsx +19 -0
- package/.history/src/lib/tauntProvider_20251002144018.tsx +19 -0
- package/.history/src/lib/tauntProvider_20251002152234.tsx +40 -0
- package/.history/src/lib/tauntProvider_20251002152802.tsx +40 -0
- package/.history/src/lib/tauntProvider_20251002153101.tsx +49 -0
- package/.history/src/lib/taunt_20251002160026.ts +0 -0
- package/.history/src/lib/taunt_20251002160045.ts +2 -0
- package/.history/src/main_20251002141038.tsx +10 -0
- package/.history/src/main_20251002141444.tsx +12 -0
- package/.history/src/main_20251002160347.tsx +12 -0
- package/.history/vite.config_20251002141038.ts +7 -0
- package/.history/vite.config_20251002141323.ts +10 -0
- package/.prettierrc.mjs +22 -0
- package/README.md +73 -0
- package/eslint.config.js +23 -0
- package/index.html +13 -0
- package/package.json +32 -0
- package/public/vite.svg +1 -0
- package/src/App.css +42 -0
- package/src/App.tsx +54 -0
- package/src/index.css +68 -0
- package/src/lib/exports.ts +3 -0
- package/src/lib/magic.tsx +50 -0
- package/src/lib/metamask.tsx +27 -0
- package/src/lib/styling.css +25 -0
- package/src/lib/taunt.ts +2 -0
- package/src/lib/tauntContext.ts +22 -0
- package/src/lib/tauntProvider.tsx +49 -0
- package/src/main.tsx +12 -0
- package/tsconfig.app.json +28 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +26 -0
- package/vite.config.ts +10 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { tauntMagicDidLogin } from "@redzone/taunt-logins"
|
|
2
|
+
import { useCallback, useMemo, useState } from "react"
|
|
3
|
+
|
|
4
|
+
import { useTaunt } from "./tauntContext"
|
|
5
|
+
|
|
6
|
+
export const Emailer = ({ onEmail }: { onEmail?: (email: string) => void }) => {
|
|
7
|
+
const { tauntServiceEndpoint } = useTaunt()
|
|
8
|
+
const [email, setEmail] = useState<string>()
|
|
9
|
+
|
|
10
|
+
const initialised = useMemo(() => email !== undefined, [email])
|
|
11
|
+
|
|
12
|
+
const validEmail = useMemo(() => {
|
|
13
|
+
const validRegex =
|
|
14
|
+
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
|
|
15
|
+
return email?.match(validRegex) ? email : undefined
|
|
16
|
+
}, [email])
|
|
17
|
+
|
|
18
|
+
const runMagic = useCallback(() => {
|
|
19
|
+
if (!validEmail) return
|
|
20
|
+
|
|
21
|
+
if (onEmail) {
|
|
22
|
+
onEmail(email!)
|
|
23
|
+
} else {
|
|
24
|
+
tauntMagicDidLogin(tauntServiceEndpoint, email!)
|
|
25
|
+
}
|
|
26
|
+
}, [validEmail, onEmail])
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<div>
|
|
30
|
+
{initialised && !validEmail && (
|
|
31
|
+
<div style={{ color: "red" }}>Please enter a valid email</div>
|
|
32
|
+
)}
|
|
33
|
+
<input
|
|
34
|
+
onChange={(e) => setEmail(e.target.value)}
|
|
35
|
+
placeholder="Enter your email"
|
|
36
|
+
type="email"
|
|
37
|
+
value={email}
|
|
38
|
+
/>
|
|
39
|
+
<button onClick={runMagic} type="button">
|
|
40
|
+
Send Magic Link
|
|
41
|
+
</button>
|
|
42
|
+
</div>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useCallback } from "react"
|
|
2
|
+
|
|
3
|
+
import { useTaunt } from "./tauntContext"
|
|
4
|
+
|
|
5
|
+
export const MetaMaskButton = ({
|
|
6
|
+
openMetamask
|
|
7
|
+
}: {
|
|
8
|
+
openMetamask?: () => void
|
|
9
|
+
}) => {
|
|
10
|
+
const { metamaskLogin } = useTaunt()
|
|
11
|
+
|
|
12
|
+
const runMetamask = useCallback(() => {
|
|
13
|
+
if (openMetamask) {
|
|
14
|
+
openMetamask()
|
|
15
|
+
} else {
|
|
16
|
+
metamaskLogin()
|
|
17
|
+
}
|
|
18
|
+
}, [metamaskLogin, openMetamask])
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<button
|
|
22
|
+
className="ml-2 p-2 bg-blue-500 text-white rounded-md"
|
|
23
|
+
onClick={runMetamask}
|
|
24
|
+
type="button">
|
|
25
|
+
Login with Metamask
|
|
26
|
+
</button>
|
|
27
|
+
)
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useCallback } from "react"
|
|
2
|
+
|
|
3
|
+
import { useTaunt } from "./tauntContext"
|
|
4
|
+
|
|
5
|
+
export const MetaMaskButton = ({
|
|
6
|
+
openMetamask
|
|
7
|
+
}: {
|
|
8
|
+
openMetamask?: () => void
|
|
9
|
+
}) => {
|
|
10
|
+
const { metamaskLogin } = useTaunt()
|
|
11
|
+
|
|
12
|
+
const runMetamask = useCallback(() => {
|
|
13
|
+
if (openMetamask) {
|
|
14
|
+
openMetamask()
|
|
15
|
+
} else {
|
|
16
|
+
metamaskLogin()
|
|
17
|
+
}
|
|
18
|
+
}, [metamaskLogin, openMetamask])
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<button
|
|
22
|
+
className="ml-2 p-2 bg-blue-500 text-white rounded-md"
|
|
23
|
+
onClick={runMetamask}>
|
|
24
|
+
Login with Metamask
|
|
25
|
+
</button>
|
|
26
|
+
)
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useCallback } from "react"
|
|
2
|
+
|
|
3
|
+
import { useTaunt } from "./tauntContext"
|
|
4
|
+
|
|
5
|
+
export const MetaMaskButton = ({
|
|
6
|
+
openMetamask
|
|
7
|
+
}: {
|
|
8
|
+
openMetamask?: () => void
|
|
9
|
+
}) => {
|
|
10
|
+
const { metamaskLogin } = useTaunt()
|
|
11
|
+
|
|
12
|
+
const runMetamask = useCallback(() => {
|
|
13
|
+
if (openMetamask) {
|
|
14
|
+
openMetamask()
|
|
15
|
+
} else {
|
|
16
|
+
metamaskLogin()
|
|
17
|
+
}
|
|
18
|
+
}, [metamaskLogin, openMetamask])
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<button
|
|
22
|
+
className="ml-2 p-2 bg-blue-500 text-white rounded-md"
|
|
23
|
+
onClick={runMetamask}>
|
|
24
|
+
Login with Metamask
|
|
25
|
+
</button>
|
|
26
|
+
)
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useCallback } from "react"
|
|
2
|
+
|
|
3
|
+
import "./styling.css"
|
|
4
|
+
|
|
5
|
+
import { useTaunt } from "./tauntContext"
|
|
6
|
+
|
|
7
|
+
export const MetaMaskButton = ({
|
|
8
|
+
openMetamask
|
|
9
|
+
}: {
|
|
10
|
+
openMetamask?: () => void
|
|
11
|
+
}) => {
|
|
12
|
+
const { metamaskLogin } = useTaunt()
|
|
13
|
+
|
|
14
|
+
const runMetamask = useCallback(() => {
|
|
15
|
+
if (openMetamask) {
|
|
16
|
+
openMetamask()
|
|
17
|
+
} else {
|
|
18
|
+
metamaskLogin()
|
|
19
|
+
}
|
|
20
|
+
}, [metamaskLogin, openMetamask])
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<button className="rdz-button" onClick={runMetamask}>
|
|
24
|
+
Login with Metamask
|
|
25
|
+
</button>
|
|
26
|
+
)
|
|
27
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
border-radius: 8px;
|
|
3
|
+
border: 1px solid transparent;
|
|
4
|
+
padding: 0.6em 1.2em;
|
|
5
|
+
font-size: 1em;
|
|
6
|
+
font-weight: 500;
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
background-color: #1a1a1a;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
transition: border-color 0.25s;
|
|
11
|
+
|
|
12
|
+
&:hover {
|
|
13
|
+
border-color: #646cff;
|
|
14
|
+
}
|
|
15
|
+
&:focus,
|
|
16
|
+
&:focus-visible {
|
|
17
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
border-radius: 80px;
|
|
3
|
+
border: 1px solid transparent;
|
|
4
|
+
padding: 0.6em 1.2em;
|
|
5
|
+
font-size: 1em;
|
|
6
|
+
font-weight: 500;
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
background-color: #1a1a1a;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
transition: border-color 0.25s;
|
|
11
|
+
|
|
12
|
+
&:hover {
|
|
13
|
+
border-color: #646cff;
|
|
14
|
+
}
|
|
15
|
+
&:focus,
|
|
16
|
+
&:focus-visible {
|
|
17
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
border-radius: 8px;
|
|
3
|
+
border: 1px solid transparent;
|
|
4
|
+
padding: 0.6em 1.2em;
|
|
5
|
+
font-size: 1em;
|
|
6
|
+
font-weight: 500;
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
background-color: #1a1a1a;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
transition: border-color 0.25s;
|
|
11
|
+
color: red;
|
|
12
|
+
|
|
13
|
+
&:hover {
|
|
14
|
+
border-color: #646cff;
|
|
15
|
+
}
|
|
16
|
+
&:focus,
|
|
17
|
+
&:focus-visible {
|
|
18
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
border-radius: 8px;
|
|
3
|
+
border: 1px solid transparent;
|
|
4
|
+
padding: 0.6em 1.2em;
|
|
5
|
+
font-size: 1em;
|
|
6
|
+
font-weight: 500;
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
background-color: #1a1a1a;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
transition: border-color 0.25s;
|
|
11
|
+
|
|
12
|
+
&:hover {
|
|
13
|
+
border-color: #646cff;
|
|
14
|
+
}
|
|
15
|
+
&:focus,
|
|
16
|
+
&:focus-visible {
|
|
17
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
color: lightgray;
|
|
3
|
+
border-radius: 8px;
|
|
4
|
+
border: 1px solid transparent;
|
|
5
|
+
padding: 0.6em 1.2em;
|
|
6
|
+
font-size: 1em;
|
|
7
|
+
font-weight: 500;
|
|
8
|
+
font-family: inherit;
|
|
9
|
+
background-color: #1a1a1a;
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
transition: border-color 0.25s;
|
|
12
|
+
|
|
13
|
+
&:hover {
|
|
14
|
+
border-color: #646cff;
|
|
15
|
+
}
|
|
16
|
+
&:focus,
|
|
17
|
+
&:focus-visible {
|
|
18
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
color: lightgray;
|
|
6
|
+
border-radius: 8px;
|
|
7
|
+
border: 1px solid transparent;
|
|
8
|
+
padding: 0.6em 1.2em;
|
|
9
|
+
font-size: 1em;
|
|
10
|
+
font-weight: 500;
|
|
11
|
+
font-family: inherit;
|
|
12
|
+
background-color: #1a1a1a;
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
transition: border-color 0.25s;
|
|
15
|
+
|
|
16
|
+
&:hover {
|
|
17
|
+
border-color: #646cff;
|
|
18
|
+
}
|
|
19
|
+
&:focus,
|
|
20
|
+
&:focus-visible {
|
|
21
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
font-family: Roboto;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
button.rdz-button {
|
|
2
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.rdz-button {
|
|
2
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.rdz-button {
|
|
2
|
+
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.rdz-button {
|
|
2
|
+
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400 !important;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.rdz-button {
|
|
2
|
+
font-family: Avenir, Helvetica, Arial, sans-serif !important;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400 !important;
|
|
5
|
+
|
|
6
|
+
color: lightgray;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
border: 1px solid transparent;
|
|
9
|
+
padding: 0.6em 1.2em;
|
|
10
|
+
font-size: 1em;
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
font-family: inherit;
|
|
13
|
+
background-color: #1a1a1a;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
transition: border-color 0.25s;
|
|
16
|
+
|
|
17
|
+
&:hover {
|
|
18
|
+
border-color: #646cff;
|
|
19
|
+
}
|
|
20
|
+
&:focus,
|
|
21
|
+
&:focus-visible {
|
|
22
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.rdz-button,
|
|
2
|
+
.rdz-input {
|
|
3
|
+
font-family: Avenir, Helvetica, Arial, sans-serif !important;
|
|
4
|
+
line-height: 1.5;
|
|
5
|
+
font-weight: 400 !important;
|
|
6
|
+
|
|
7
|
+
color: lightgray;
|
|
8
|
+
border-radius: 8px;
|
|
9
|
+
border: 1px solid transparent;
|
|
10
|
+
padding: 0.6em 1.2em;
|
|
11
|
+
font-size: 1em;
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
font-family: inherit;
|
|
14
|
+
background-color: #1a1a1a;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
transition: border-color 0.25s;
|
|
17
|
+
|
|
18
|
+
&:hover {
|
|
19
|
+
border-color: #646cff;
|
|
20
|
+
}
|
|
21
|
+
&:focus,
|
|
22
|
+
&:focus-visible {
|
|
23
|
+
outline: 4px auto -webkit-focus-ring-color;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createContext, useContext } from "react"
|
|
2
|
+
|
|
3
|
+
type ContextProps = {
|
|
4
|
+
tauntServiceEndpoint: string
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const TauntContext = createContext<ContextProps>({
|
|
8
|
+
tauntServiceEndpoint: ""
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export function useTaunt() {
|
|
12
|
+
const ctx = useContext(TauntContext)
|
|
13
|
+
if (!ctx) {
|
|
14
|
+
throw new Error("useTaunt must be used within a TauntProvider")
|
|
15
|
+
}
|
|
16
|
+
return ctx
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createContext, useContext } from "react"
|
|
2
|
+
|
|
3
|
+
type ContextProps = {
|
|
4
|
+
tauntServiceEndpoint: string
|
|
5
|
+
deets?: { accessToken: string; refreshToken: string }
|
|
6
|
+
metamaskLogin: () => void
|
|
7
|
+
otpLogin: (email: string) => void
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const TauntContext = createContext<ContextProps>({
|
|
11
|
+
tauntServiceEndpoint: "",
|
|
12
|
+
metamaskLogin: () => {},
|
|
13
|
+
otpLogin: () => {}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
export function useTaunt() {
|
|
17
|
+
const ctx = useContext(TauntContext)
|
|
18
|
+
if (!ctx) {
|
|
19
|
+
throw new Error("useTaunt must be used within a TauntProvider")
|
|
20
|
+
}
|
|
21
|
+
return ctx
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createContext, useContext } from "react"
|
|
2
|
+
|
|
3
|
+
type ContextProps = {
|
|
4
|
+
tauntServiceEndpoint: string
|
|
5
|
+
deets?: { accessToken: string; refreshToken: string }
|
|
6
|
+
metamaskLogin: () => void
|
|
7
|
+
otpMagicLogin: (email: string) => void
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const TauntContext = createContext<ContextProps>({
|
|
11
|
+
tauntServiceEndpoint: "",
|
|
12
|
+
metamaskLogin: () => {},
|
|
13
|
+
otpMagicLogin: () => {}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
export function useTaunt() {
|
|
17
|
+
const ctx = useContext(TauntContext)
|
|
18
|
+
if (!ctx) {
|
|
19
|
+
throw new Error("useTaunt must be used within a TauntProvider")
|
|
20
|
+
}
|
|
21
|
+
return ctx
|
|
22
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TauntContext } from "./tauntContext"
|
|
2
|
+
|
|
3
|
+
export const TauntProvider = ({
|
|
4
|
+
children,
|
|
5
|
+
tauntServiceEndpoint
|
|
6
|
+
}: {
|
|
7
|
+
children: React.ReactNode
|
|
8
|
+
tauntServiceEndpoint: string
|
|
9
|
+
}) => {
|
|
10
|
+
return (
|
|
11
|
+
<TauntContext.Provider value={{ tauntServiceEndpoint }}>
|
|
12
|
+
{children}
|
|
13
|
+
</TauntContext.Provider>
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TauntContext } from "./tauntContext"
|
|
2
|
+
|
|
3
|
+
export const TauntProvider = ({
|
|
4
|
+
children,
|
|
5
|
+
tauntServiceEndpoint
|
|
6
|
+
}: {
|
|
7
|
+
children: React.ReactNode
|
|
8
|
+
tauntServiceEndpoint?: string
|
|
9
|
+
}) => {
|
|
10
|
+
if (!tauntServiceEndpoint) {
|
|
11
|
+
throw new Error("tauntServiceEndpoint is required")
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<TauntContext.Provider value={{ tauntServiceEndpoint }}>
|
|
16
|
+
{children}
|
|
17
|
+
</TauntContext.Provider>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TauntContext } from "./tauntContext"
|
|
2
|
+
|
|
3
|
+
export const TauntProvider = ({
|
|
4
|
+
children,
|
|
5
|
+
tauntServiceEndpoint
|
|
6
|
+
}: {
|
|
7
|
+
children: React.ReactNode
|
|
8
|
+
tauntServiceEndpoint?: string
|
|
9
|
+
}) => {
|
|
10
|
+
if (!tauntServiceEndpoint) {
|
|
11
|
+
return <div>tauntServiceEndpoint is required</div>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<TauntContext.Provider value={{ tauntServiceEndpoint }}>
|
|
16
|
+
{children}
|
|
17
|
+
</TauntContext.Provider>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { tauntMagicDidLogin, tauntMetamaskLogin } from "@redzone/taunt-logins"
|
|
2
|
+
import { useCallback, useState } from "react"
|
|
3
|
+
|
|
4
|
+
import { TauntContext } from "./tauntContext"
|
|
5
|
+
|
|
6
|
+
export const TauntProvider = ({
|
|
7
|
+
children,
|
|
8
|
+
tauntServiceEndpoint
|
|
9
|
+
}: {
|
|
10
|
+
children: React.ReactNode
|
|
11
|
+
tauntServiceEndpoint?: string
|
|
12
|
+
}) => {
|
|
13
|
+
const [deets, setDeets] = useState<{
|
|
14
|
+
accessToken: string
|
|
15
|
+
refreshToken: string
|
|
16
|
+
}>()
|
|
17
|
+
|
|
18
|
+
const otpLogin = useCallback(
|
|
19
|
+
(email: string) => {
|
|
20
|
+
tauntMagicDidLogin(tauntServiceEndpoint!, email!).then(setDeets)
|
|
21
|
+
},
|
|
22
|
+
[tauntServiceEndpoint]
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
const metamaskLogin = useCallback(
|
|
26
|
+
() => tauntMetamaskLogin(tauntServiceEndpoint!).then(setDeets),
|
|
27
|
+
[tauntServiceEndpoint]
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
if (!tauntServiceEndpoint) {
|
|
31
|
+
return <div>tauntServiceEndpoint is required</div>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<TauntContext.Provider
|
|
36
|
+
value={{ tauntServiceEndpoint, deets, otpLogin, metamaskLogin }}>
|
|
37
|
+
{children}
|
|
38
|
+
</TauntContext.Provider>
|
|
39
|
+
)
|
|
40
|
+
}
|