@theoo/react 0.1.0
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/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/components.d.ts +86 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +216 -0
- package/dist/components.js.map +1 -0
- package/dist/connect.d.ts +31 -0
- package/dist/connect.d.ts.map +1 -0
- package/dist/connect.js +203 -0
- package/dist/connect.js.map +1 -0
- package/dist/context.d.ts +34 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +47 -0
- package/dist/context.js.map +1 -0
- package/dist/hooks-entry.d.ts +4 -0
- package/dist/hooks-entry.d.ts.map +1 -0
- package/dist/hooks-entry.js +4 -0
- package/dist/hooks-entry.js.map +1 -0
- package/dist/hooks.d.ts +253 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +317 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Theoo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @theoo/react
|
|
2
|
+
|
|
3
|
+
React bindings for [Theoo](https://www.npmjs.com/package/@theoo/sdk) —
|
|
4
|
+
smart accounts owned by a passkey.
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
npm install @theoo/react @theoo/sdk
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { TheooProvider, useSession, useOperation } from "@theoo/react";
|
|
12
|
+
|
|
13
|
+
<TheooProvider client={theoo}>
|
|
14
|
+
<App />
|
|
15
|
+
</TheooProvider>;
|
|
16
|
+
|
|
17
|
+
function App() {
|
|
18
|
+
const session = useSession();
|
|
19
|
+
const op = useOperation();
|
|
20
|
+
if (session.status !== "signed_in") return <SignIn />;
|
|
21
|
+
return (
|
|
22
|
+
<button onClick={() => op.run({ kind: "call", call })}>
|
|
23
|
+
{op.busy ? "Waiting for your passkey…" : "Send"}
|
|
24
|
+
</button>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Hooks** — `useSession`, `useSignIn`, `useEnrolPasskey`, `useChains`,
|
|
30
|
+
`useOperation`, `useOperations`, `useRecovery`, `useSessionKeys`,
|
|
31
|
+
`useSolanaSessionKeys`.
|
|
32
|
+
|
|
33
|
+
**Components** — `SignIn`, `PasskeyEnrol`, `ConfirmOperation`, `Recovery`, and
|
|
34
|
+
`TheooConnect`, the connect-wallet button.
|
|
35
|
+
|
|
36
|
+
`@theoo/react/hooks` is the DOM-free half, which
|
|
37
|
+
[`@theoo/react-native`](https://www.npmjs.com/package/@theoo/react-native)
|
|
38
|
+
builds on.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type CSSProperties, type ReactNode } from "react";
|
|
2
|
+
import type { AuthOutcome, AuthProvider, OperationKind, OperationStatus } from "@theoo/sdk";
|
|
3
|
+
export declare const styles: {
|
|
4
|
+
box: CSSProperties;
|
|
5
|
+
input: CSSProperties;
|
|
6
|
+
button: CSSProperties;
|
|
7
|
+
secondary: CSSProperties;
|
|
8
|
+
error: CSSProperties;
|
|
9
|
+
muted: CSSProperties;
|
|
10
|
+
tiny: CSSProperties;
|
|
11
|
+
token: {
|
|
12
|
+
surface: string;
|
|
13
|
+
surface2: string;
|
|
14
|
+
ink: string;
|
|
15
|
+
ink2: string;
|
|
16
|
+
ink3: string;
|
|
17
|
+
line: string;
|
|
18
|
+
line2: string;
|
|
19
|
+
accent: string;
|
|
20
|
+
accentInk: string;
|
|
21
|
+
accentSoft: string;
|
|
22
|
+
alert: string;
|
|
23
|
+
alertSoft: string;
|
|
24
|
+
radius: string;
|
|
25
|
+
sans: string;
|
|
26
|
+
mono: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/** Which half of the door somebody is standing at. */
|
|
30
|
+
export type AuthMode = "signin" | "signup";
|
|
31
|
+
export interface SignInProps {
|
|
32
|
+
/** Which factors to offer. Default: email, phone and passkey. */
|
|
33
|
+
providers?: AuthProvider[];
|
|
34
|
+
onSignedIn?: (outcome: AuthOutcome) => void;
|
|
35
|
+
/**
|
|
36
|
+
* `signup` leads with a code, because a new person has no passkey yet;
|
|
37
|
+
* `signin` leads with the passkey, because a returning one does and it is
|
|
38
|
+
* one tap with nothing to type.
|
|
39
|
+
*
|
|
40
|
+
* The default is `signup`: a code works for both — it signs an existing
|
|
41
|
+
* person in and creates a new one — whereas the passkey path only works
|
|
42
|
+
* for somebody who has been here before. Leading with the path that can
|
|
43
|
+
* fail is how a first-time visitor gets stuck.
|
|
44
|
+
*/
|
|
45
|
+
mode?: AuthMode;
|
|
46
|
+
onModeChange?: (mode: AuthMode) => void;
|
|
47
|
+
/** Hide the Sign in / Sign up switch when the host renders its own. */
|
|
48
|
+
modeSwitch?: boolean;
|
|
49
|
+
title?: ReactNode;
|
|
50
|
+
className?: string;
|
|
51
|
+
}
|
|
52
|
+
/** The two-up control that says which half you are on. */
|
|
53
|
+
export declare function AuthModeSwitch({ mode, onChange, className, }: {
|
|
54
|
+
mode: AuthMode;
|
|
55
|
+
onChange: (m: AuthMode) => void;
|
|
56
|
+
className?: string;
|
|
57
|
+
}): import("react").JSX.Element;
|
|
58
|
+
/** Sign in with a code by email or phone, with a passkey, or with Google or KingsChat. */
|
|
59
|
+
export declare function SignIn({ providers, onSignedIn, mode: controlledMode, onModeChange, modeSwitch, title, className, }: SignInProps): import("react").JSX.Element;
|
|
60
|
+
export interface PasskeyEnrolProps {
|
|
61
|
+
label?: string;
|
|
62
|
+
onEnrolled?: (outcome: AuthOutcome) => void;
|
|
63
|
+
className?: string;
|
|
64
|
+
children?: ReactNode;
|
|
65
|
+
}
|
|
66
|
+
/** One button: create a passkey on this device for the signed-in user. */
|
|
67
|
+
export declare function PasskeyEnrol({ label, onEnrolled, className, children }: PasskeyEnrolProps): import("react").JSX.Element;
|
|
68
|
+
export interface ConfirmOperationProps {
|
|
69
|
+
/** What to run. A plain call, or a named kind. */
|
|
70
|
+
operation: OperationKind;
|
|
71
|
+
chain?: number;
|
|
72
|
+
onDone?: (status: OperationStatus) => void;
|
|
73
|
+
className?: string;
|
|
74
|
+
children?: ReactNode;
|
|
75
|
+
}
|
|
76
|
+
/** Shows what is about to happen, then does it with the passkey. */
|
|
77
|
+
export declare function ConfirmOperation({ operation, chain, onDone, className, children }: ConfirmOperationProps): import("react").JSX.Element;
|
|
78
|
+
export interface RecoveryProps {
|
|
79
|
+
chain?: number;
|
|
80
|
+
className?: string;
|
|
81
|
+
}
|
|
82
|
+
/** Recovery, end to end: turn it on, start it after enrolling a new passkey, complete it, or cancel it. */
|
|
83
|
+
export declare function Recovery({ chain, className }: RecoveryProps): import("react").JSX.Element;
|
|
84
|
+
/** Closes on Escape while `active`. */
|
|
85
|
+
export declare function useEscape(active: boolean, close: () => void): void;
|
|
86
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuCvG,eAAO,MAAM,MAAM;SACsD,aAAa;WAY/E,aAAa;YAWb,aAAa;eAWb,aAAa;WASb,aAAa;WACsD,aAAa;UACd,aAAa;;;;;;;;;;;;;;;;;;CAErF,CAAC;AAuBF,sDAAsD;AACtD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,SAAS,GACV,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAyCA;AAED,0FAA0F;AAC1F,wBAAgB,MAAM,CAAC,EACrB,SAAyC,EACzC,UAAU,EACV,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,UAAiB,EACjB,KAAK,EACL,SAAS,GACV,EAAE,WAAW,+BA+Lb;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAA6B,EAAE,EAAE,iBAAiB,+BA+B9G;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA8BD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAiC,EAAE,EAAE,qBAAqB,+BA4BjI;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2GAA2G;AAC3G,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,aAAa,+BA4C3D;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,QAS3D"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { useEnrolPasskey, useOperation, useRecovery, useSignIn } from "./hooks.js";
|
|
4
|
+
/*
|
|
5
|
+
* Plain, dependency-free components. Every element carries a `theoo-*` class so
|
|
6
|
+
* a stylesheet can restyle them.
|
|
7
|
+
*
|
|
8
|
+
* Colour comes from a nested chain of CSS custom properties:
|
|
9
|
+
*
|
|
10
|
+
* var(--theoo-surface, var(--surface, #ffffff))
|
|
11
|
+
* │ │ └─ a page with no tokens at all
|
|
12
|
+
* │ └───────────── a host whose design system
|
|
13
|
+
* │ already uses these names
|
|
14
|
+
* └────────────────────────────── a host styling the widget
|
|
15
|
+
*
|
|
16
|
+
* So the widget follows a host's dark mode with nothing configured, can be
|
|
17
|
+
* themed deliberately by setting `--theoo-*`, and still looks right dropped
|
|
18
|
+
* into a bare page. An inline style cannot express a media query, which is
|
|
19
|
+
* why the modes are reached this way rather than with one.
|
|
20
|
+
*/
|
|
21
|
+
const t = {
|
|
22
|
+
surface: "var(--theoo-surface, var(--surface, #ffffff))",
|
|
23
|
+
surface2: "var(--theoo-surface-2, var(--surface-2, #f4f4f6))",
|
|
24
|
+
ink: "var(--theoo-ink, var(--ink, #11131a))",
|
|
25
|
+
ink2: "var(--theoo-ink-2, var(--ink-2, #545a68))",
|
|
26
|
+
ink3: "var(--theoo-ink-3, var(--ink-3, #797f8d))",
|
|
27
|
+
line: "var(--theoo-line, var(--line, rgba(17, 19, 26, 0.12)))",
|
|
28
|
+
line2: "var(--theoo-line-2, var(--line-2, rgba(17, 19, 26, 0.2)))",
|
|
29
|
+
accent: "var(--theoo-accent, var(--accent, #4f46e5))",
|
|
30
|
+
accentInk: "var(--theoo-accent-ink, var(--accent-ink, #ffffff))",
|
|
31
|
+
accentSoft: "var(--theoo-accent-soft, var(--accent-soft, rgba(79, 70, 229, 0.1)))",
|
|
32
|
+
alert: "var(--theoo-alert, var(--alert, #b3261e))",
|
|
33
|
+
alertSoft: "var(--theoo-alert-soft, var(--alert-soft, rgba(179, 38, 30, 0.07)))",
|
|
34
|
+
radius: "var(--theoo-radius, var(--radius-sm, 10px))",
|
|
35
|
+
sans: "var(--theoo-font, var(--sans, ui-sans-serif, -apple-system, system-ui, sans-serif))",
|
|
36
|
+
mono: "var(--theoo-mono, var(--mono, ui-monospace, SFMono-Regular, Menlo, monospace))",
|
|
37
|
+
};
|
|
38
|
+
export const styles = {
|
|
39
|
+
box: { display: "grid", gap: 10, fontFamily: t.sans, color: t.ink },
|
|
40
|
+
input: {
|
|
41
|
+
width: "100%",
|
|
42
|
+
boxSizing: "border-box",
|
|
43
|
+
padding: "11px 13px",
|
|
44
|
+
fontSize: 15,
|
|
45
|
+
fontFamily: t.sans,
|
|
46
|
+
color: t.ink,
|
|
47
|
+
background: t.surface,
|
|
48
|
+
border: `1px solid ${t.line2}`,
|
|
49
|
+
borderRadius: t.radius,
|
|
50
|
+
outline: "none",
|
|
51
|
+
},
|
|
52
|
+
button: {
|
|
53
|
+
padding: "11px 15px",
|
|
54
|
+
fontSize: 15,
|
|
55
|
+
fontWeight: 550,
|
|
56
|
+
fontFamily: t.sans,
|
|
57
|
+
borderRadius: t.radius,
|
|
58
|
+
border: "1px solid transparent",
|
|
59
|
+
background: t.accent,
|
|
60
|
+
color: t.accentInk,
|
|
61
|
+
cursor: "pointer",
|
|
62
|
+
},
|
|
63
|
+
secondary: {
|
|
64
|
+
padding: "11px 15px",
|
|
65
|
+
fontSize: 15,
|
|
66
|
+
fontWeight: 500,
|
|
67
|
+
fontFamily: t.sans,
|
|
68
|
+
borderRadius: t.radius,
|
|
69
|
+
border: `1px solid ${t.line2}`,
|
|
70
|
+
background: t.surface,
|
|
71
|
+
color: t.ink,
|
|
72
|
+
cursor: "pointer",
|
|
73
|
+
},
|
|
74
|
+
error: {
|
|
75
|
+
color: t.alert,
|
|
76
|
+
background: t.alertSoft,
|
|
77
|
+
border: `1px solid ${t.alert}`,
|
|
78
|
+
borderRadius: t.radius,
|
|
79
|
+
padding: "9px 11px",
|
|
80
|
+
fontSize: 13,
|
|
81
|
+
lineHeight: 1.45,
|
|
82
|
+
},
|
|
83
|
+
muted: { color: t.ink2, fontSize: 13.5, lineHeight: 1.5, margin: 0 },
|
|
84
|
+
tiny: { color: t.ink3, fontSize: 12.5, lineHeight: 1.5, margin: 0 },
|
|
85
|
+
token: t,
|
|
86
|
+
};
|
|
87
|
+
const s = styles;
|
|
88
|
+
function ErrorLine({ error }) {
|
|
89
|
+
return error ? (_jsx("div", { className: "theoo-error", style: s.error, role: "alert", children: error.message })) : null;
|
|
90
|
+
}
|
|
91
|
+
/** A hairline with a word in it. */
|
|
92
|
+
function Or({ children = "or" }) {
|
|
93
|
+
return (_jsxs("div", { className: "theoo-or", style: { display: "flex", alignItems: "center", gap: 10, margin: "2px 0" }, children: [_jsx("span", { style: { flex: 1, height: 1, background: t.line } }), _jsx("span", { style: { ...s.tiny, textTransform: "uppercase", letterSpacing: "0.1em", fontSize: 10.5 }, children: children }), _jsx("span", { style: { flex: 1, height: 1, background: t.line } })] }));
|
|
94
|
+
}
|
|
95
|
+
/** The two-up control that says which half you are on. */
|
|
96
|
+
export function AuthModeSwitch({ mode, onChange, className, }) {
|
|
97
|
+
return (_jsx("div", { className: `theoo-modes ${className ?? ""}`, role: "tablist", style: {
|
|
98
|
+
display: "grid",
|
|
99
|
+
gridTemplateColumns: "1fr 1fr",
|
|
100
|
+
gap: 3,
|
|
101
|
+
padding: 3,
|
|
102
|
+
background: t.surface2,
|
|
103
|
+
border: `1px solid ${t.line}`,
|
|
104
|
+
borderRadius: `calc(${t.radius} + 3px)`,
|
|
105
|
+
}, children: ["signup", "signin"].map((m) => (_jsx("button", { type: "button", role: "tab", "aria-selected": mode === m, className: `theoo-mode ${mode === m ? "theoo-mode-active" : ""}`, onClick: () => onChange(m), style: {
|
|
106
|
+
padding: "7px 10px",
|
|
107
|
+
fontSize: 13.5,
|
|
108
|
+
fontWeight: mode === m ? 600 : 500,
|
|
109
|
+
fontFamily: t.sans,
|
|
110
|
+
border: "1px solid transparent",
|
|
111
|
+
borderColor: mode === m ? t.line : "transparent",
|
|
112
|
+
background: mode === m ? t.surface : "transparent",
|
|
113
|
+
color: mode === m ? t.ink : t.ink2,
|
|
114
|
+
borderRadius: t.radius,
|
|
115
|
+
cursor: "pointer",
|
|
116
|
+
}, children: m === "signup" ? "Create account" : "Sign in" }, m))) }));
|
|
117
|
+
}
|
|
118
|
+
/** Sign in with a code by email or phone, with a passkey, or with Google or KingsChat. */
|
|
119
|
+
export function SignIn({ providers = ["email", "phone", "passkey"], onSignedIn, mode: controlledMode, onModeChange, modeSwitch = true, title, className, }) {
|
|
120
|
+
const signIn = useSignIn(onSignedIn);
|
|
121
|
+
const [uncontrolledMode, setUncontrolledMode] = useState("signup");
|
|
122
|
+
const mode = controlledMode ?? uncontrolledMode;
|
|
123
|
+
const setMode = (m) => {
|
|
124
|
+
setUncontrolledMode(m);
|
|
125
|
+
onModeChange?.(m);
|
|
126
|
+
};
|
|
127
|
+
const codeProviders = providers.filter((p) => p === "email" || p === "phone");
|
|
128
|
+
const [provider, setProvider] = useState(codeProviders[0] ?? "email");
|
|
129
|
+
const [destination, setDestination] = useState("");
|
|
130
|
+
const [code, setCode] = useState("");
|
|
131
|
+
const send = (e) => {
|
|
132
|
+
e.preventDefault();
|
|
133
|
+
void signIn.sendCode(provider, destination.trim());
|
|
134
|
+
};
|
|
135
|
+
const submit = (e) => {
|
|
136
|
+
e.preventDefault();
|
|
137
|
+
void signIn.submitCode(code.trim());
|
|
138
|
+
};
|
|
139
|
+
if (signIn.step === "done") {
|
|
140
|
+
return (_jsx("div", { className: `theoo-signin theoo-done ${className ?? ""}`, style: s.box, children: _jsx("div", { children: "Signed in." }) }));
|
|
141
|
+
}
|
|
142
|
+
if (signIn.step === "code_sent") {
|
|
143
|
+
return (_jsxs("form", { className: `theoo-signin theoo-code ${className ?? ""}`, style: s.box, onSubmit: submit, children: [_jsxs("p", { style: s.muted, children: ["We sent a code to ", _jsx("strong", { style: { color: t.ink, fontWeight: 600 }, children: signIn.challenge.destinationMasked }), ".", signIn.challenge.devCode ? (_jsxs(_Fragment, { children: [" ", "Development server; the code is", " ", _jsx("code", { "data-dev-code": true, style: { fontFamily: t.mono, color: t.ink }, children: signIn.challenge.devCode }), "."] })) : null] }), _jsx("input", { className: "theoo-input", style: { ...s.input, fontFamily: t.mono, fontSize: 18, letterSpacing: "0.3em", textAlign: "center" }, inputMode: "numeric", autoComplete: "one-time-code", placeholder: "Code", "aria-label": "One-time code", value: code, onChange: (e) => setCode(e.target.value), autoFocus: true }), _jsx("button", { className: "theoo-button", style: s.button, type: "submit", disabled: signIn.busy || code.length === 0, children: signIn.busy ? "Checking…" : "Continue" }), _jsxs("button", { className: "theoo-link", style: { ...s.secondary, border: 0, background: "transparent", color: t.ink2, fontSize: 13.5, padding: 4 }, type: "button", onClick: signIn.reset, children: ["Use a different ", signIn.provider] }), _jsx(ErrorLine, { error: signIn.error })] }));
|
|
144
|
+
}
|
|
145
|
+
if (signIn.step === "redirect") {
|
|
146
|
+
return (_jsxs("div", { className: `theoo-signin theoo-redirect ${className ?? ""}`, style: s.box, children: [_jsx("a", { className: "theoo-button", style: { ...s.button, textAlign: "center", textDecoration: "none" }, href: signIn.challenge.url, children: "Continue" }), _jsx(ErrorLine, { error: signIn.error })] }));
|
|
147
|
+
}
|
|
148
|
+
const hasPasskey = providers.includes("passkey");
|
|
149
|
+
const codeForm = codeProviders.length > 0 ? (_jsxs("form", { style: { display: "grid", gap: 8 }, onSubmit: send, children: [codeProviders.length > 1 ? (_jsx("div", { className: "theoo-tabs", style: { display: "flex", gap: 14, paddingBottom: 2 }, children: codeProviders.map((p) => (_jsx("button", { type: "button", className: `theoo-tab ${provider === p ? "theoo-tab-active" : ""}`, "aria-pressed": provider === p, onClick: () => setProvider(p), style: {
|
|
150
|
+
border: 0,
|
|
151
|
+
background: "transparent",
|
|
152
|
+
padding: "2px 0 5px",
|
|
153
|
+
fontFamily: t.sans,
|
|
154
|
+
fontSize: 13.5,
|
|
155
|
+
fontWeight: provider === p ? 600 : 500,
|
|
156
|
+
color: provider === p ? t.ink : t.ink3,
|
|
157
|
+
borderBottom: `2px solid ${provider === p ? t.accent : "transparent"}`,
|
|
158
|
+
cursor: "pointer",
|
|
159
|
+
}, children: p === "email" ? "Email" : "Phone" }, p))) })) : null, _jsx("input", { className: "theoo-input", style: s.input, type: provider === "email" ? "email" : "tel", autoComplete: provider === "email" ? "email" : "tel", placeholder: provider === "email" ? "you@example.com" : "+1 555 000 0000", "aria-label": provider, value: destination, onChange: (e) => setDestination(e.target.value) }), _jsx("button", { className: "theoo-button", style: mode === "signin" && hasPasskey ? s.secondary : s.button, type: "submit", disabled: signIn.busy || destination.trim().length === 0, children: signIn.busy ? "Sending…" : "Send code" })] })) : null;
|
|
160
|
+
const passkeyButton = hasPasskey ? (_jsx("button", { className: "theoo-passkey", style: mode === "signin" ? s.button : s.secondary, type: "button", disabled: signIn.busy, onClick: () => void signIn.withPasskey(), children: mode === "signin" ? "Continue with a passkey" : "I already have a passkey" })) : null;
|
|
161
|
+
return (_jsxs("div", { className: `theoo-signin theoo-signin-${mode} ${className ?? ""}`, style: s.box, children: [title ? (_jsx("h2", { className: "theoo-title", style: { margin: 0, fontSize: 17, fontWeight: 600, letterSpacing: "-0.01em" }, children: title })) : null, modeSwitch && hasPasskey && codeProviders.length > 0 ? _jsx(AuthModeSwitch, { mode: mode, onChange: setMode }) : null, mode === "signin" ? (_jsxs(_Fragment, { children: [passkeyButton, passkeyButton && codeForm ? _jsx(Or, { children: "or use a code" }) : null, codeForm] })) : (_jsxs(_Fragment, { children: [codeForm, _jsx("p", { style: s.tiny, children: "We send a six-digit code to confirm it is you. Then you make a passkey, and that key \u2014 not a password, and nothing on our servers \u2014 owns your account." }), passkeyButton && codeForm ? _jsx(Or, {}) : null, passkeyButton] })), providers.includes("google") ? (_jsx("button", { className: "theoo-google", style: s.secondary, type: "button", disabled: signIn.busy, onClick: () => void signIn.withProvider("google"), children: "Continue with Google" })) : null, providers.includes("kingschat") ? (_jsx("button", { className: "theoo-kingschat", style: s.secondary, type: "button", disabled: signIn.busy, onClick: () => void signIn.withProvider("kingschat"), children: "Continue with KingsChat" })) : null, _jsx(ErrorLine, { error: signIn.error })] }));
|
|
162
|
+
}
|
|
163
|
+
/** One button: create a passkey on this device for the signed-in user. */
|
|
164
|
+
export function PasskeyEnrol({ label, onEnrolled, className, children = "Create a passkey" }) {
|
|
165
|
+
const { enrol, busy, error, outcome } = useEnrolPasskey();
|
|
166
|
+
return (_jsxs("div", { className: `theoo-enrol ${className ?? ""}`, style: s.box, children: [outcome ? (_jsxs("div", { children: ["Passkey created.", outcome.account ? (_jsxs("div", { style: s.muted, children: ["Account ", outcome.account.address, " on chain ", outcome.account.chain, "."] })) : null] })) : (_jsx("button", { className: "theoo-button", style: s.button, type: "button", disabled: busy, onClick: () => void enrol(label).then((o) => {
|
|
167
|
+
if (o)
|
|
168
|
+
onEnrolled?.(o);
|
|
169
|
+
}), children: busy ? "Waiting for your device…" : children })), _jsx(ErrorLine, { error: error })] }));
|
|
170
|
+
}
|
|
171
|
+
function describe(op) {
|
|
172
|
+
switch (op.kind) {
|
|
173
|
+
case "call": {
|
|
174
|
+
const c = op.call;
|
|
175
|
+
return (_jsxs("div", { style: s.muted, children: ["Call ", _jsx("code", { style: { fontFamily: t.mono }, children: c.to }), c.value && c.value !== "0" ? _jsxs(_Fragment, { children: [" with ", c.value, " wei"] }) : null, c.data && c.data !== "0x" ? _jsxs(_Fragment, { children: [" and ", Math.max(0, (c.data.length - 2) / 2), " bytes of data"] }) : null, "."] }));
|
|
176
|
+
}
|
|
177
|
+
case "enable_recovery":
|
|
178
|
+
return _jsx("div", { style: s.muted, children: "Turn on account recovery through Theoo's guardian." });
|
|
179
|
+
case "cancel_recovery":
|
|
180
|
+
return _jsx("div", { style: s.muted, children: "Cancel the pending recovery." });
|
|
181
|
+
case "grant_session":
|
|
182
|
+
return (_jsxs("div", { style: s.muted, children: ["Let ", op.session.label ?? "a session key", " call ", _jsx("code", { style: { fontFamily: t.mono }, children: op.session.target }), " with up to", " ", op.session.spendCap ?? "0", " wei until ", new Date(op.session.expiresAt * 1000).toLocaleString(), "."] }));
|
|
183
|
+
case "revoke_session":
|
|
184
|
+
return _jsxs("div", { style: s.muted, children: ["Revoke session key ", op.session, "."] });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/** Shows what is about to happen, then does it with the passkey. */
|
|
188
|
+
export function ConfirmOperation({ operation, chain, onDone, className, children = "Confirm with passkey" }) {
|
|
189
|
+
const { run, busy, error, status } = useOperation();
|
|
190
|
+
return (_jsxs("div", { className: `theoo-confirm ${className ?? ""}`, style: s.box, children: [describe(operation), status ? (_jsxs("div", { className: `theoo-status theoo-status-${status.state}`, children: [status.state === "included" ? "Done." : status.state === "failed" ? `Failed: ${status.error ?? "unknown"}` : `Status: ${status.state}`, status.txHash ? _jsxs("div", { style: s.muted, children: ["tx ", status.txHash] }) : null] })) : (_jsx("button", { className: "theoo-button", style: s.button, type: "button", disabled: busy, onClick: () => void run(operation, chain).then((st) => {
|
|
191
|
+
if (st)
|
|
192
|
+
onDone?.(st);
|
|
193
|
+
}), children: busy ? "Waiting for your passkey…" : children })), _jsx(ErrorLine, { error: error })] }));
|
|
194
|
+
}
|
|
195
|
+
/** Recovery, end to end: turn it on, start it after enrolling a new passkey, complete it, or cancel it. */
|
|
196
|
+
export function Recovery({ chain, className }) {
|
|
197
|
+
const r = useRecovery(chain);
|
|
198
|
+
if (!r.status)
|
|
199
|
+
return (_jsx("div", { className: `theoo-recovery ${className ?? ""}`, style: s.muted, children: "Loading\u2026" }));
|
|
200
|
+
const st = r.status;
|
|
201
|
+
return (_jsxs("div", { className: `theoo-recovery ${className ?? ""}`, style: s.box, children: [!st.enabled ? (_jsxs(_Fragment, { children: [_jsx("div", { style: s.muted, children: "Recovery is off. Turn it on so a lost passkey can be replaced after a two-day delay." }), _jsx("button", { className: "theoo-button", style: s.button, type: "button", disabled: r.busy, onClick: () => void r.enable(), children: "Turn on recovery" })] })) : st.pending ? (_jsxs(_Fragment, { children: [_jsxs("div", { style: s.muted, children: ["Recovery to a new passkey is pending; ready ", new Date(st.pending.readyAt * 1000).toLocaleString(), "."] }), _jsx("button", { className: "theoo-button", style: s.button, type: "button", disabled: r.busy || !st.pending.canComplete, onClick: () => void r.complete(), children: "Complete recovery" }), _jsx("button", { className: "theoo-secondary", style: s.secondary, type: "button", disabled: r.busy, onClick: () => void r.cancel(), children: "Cancel (with the old passkey)" })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: s.muted, children: ["Recovery is on: ", st.guardianCount, " guardian", st.guardianCount === 1 ? "" : "s", ", threshold ", st.threshold, ".", st.candidatePasskey ? " A new passkey is enrolled and can take over the account." : ""] }), st.candidatePasskey ? (_jsx("button", { className: "theoo-button", style: s.button, type: "button", disabled: r.busy, onClick: () => void r.begin(), children: "Move the account to my new passkey" })) : null] })), _jsx(ErrorLine, { error: r.error })] }));
|
|
202
|
+
}
|
|
203
|
+
/** Closes on Escape while `active`. */
|
|
204
|
+
export function useEscape(active, close) {
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
if (!active)
|
|
207
|
+
return;
|
|
208
|
+
const onKey = (e) => {
|
|
209
|
+
if (e.key === "Escape")
|
|
210
|
+
close();
|
|
211
|
+
};
|
|
212
|
+
window.addEventListener("keydown", onKey);
|
|
213
|
+
return () => window.removeEventListener("keydown", onKey);
|
|
214
|
+
}, [active, close]);
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { AuthProvider, SmartAccount } from "@theoo/sdk";
|
|
3
|
+
import { type AuthMode } from "./components.js";
|
|
4
|
+
export declare function shortAddress(a: string, head?: number, tail?: number): string;
|
|
5
|
+
export interface TheooConnectProps {
|
|
6
|
+
/** Sign-in factors to offer. */
|
|
7
|
+
providers?: AuthProvider[];
|
|
8
|
+
/** Label while nothing is connected. */
|
|
9
|
+
label?: ReactNode;
|
|
10
|
+
/** Also show the user's Solana address, when the tenant has a cluster. */
|
|
11
|
+
solana?: boolean;
|
|
12
|
+
/** Fired when an account is connected (after sign-in and passkey enrolment). */
|
|
13
|
+
onConnected?: (account: SmartAccount) => void;
|
|
14
|
+
onDisconnected?: () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Drive the dialog from outside — for a page that wants its own "Create an
|
|
17
|
+
* account" and "Sign in" buttons as well as the header chip. Leave both
|
|
18
|
+
* out and the component manages its own.
|
|
19
|
+
*/
|
|
20
|
+
open?: boolean;
|
|
21
|
+
onOpenChange?: (open: boolean) => void;
|
|
22
|
+
/** Which half the dialog opens on. Also controllable. */
|
|
23
|
+
mode?: AuthMode;
|
|
24
|
+
onModeChange?: (mode: AuthMode) => void;
|
|
25
|
+
/** Hide the chip entirely, when the only triggers are the host's own. */
|
|
26
|
+
trigger?: boolean;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
/** A connect-wallet button for passkey-owned accounts. */
|
|
30
|
+
export declare function TheooConnect({ providers, label, solana, onConnected, onDisconnected, open: controlledOpen, onOpenChange, mode: controlledMode, onModeChange, trigger, className, }: TheooConnectProps): import("react").JSX.Element;
|
|
31
|
+
//# sourceMappingURL=connect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7F,OAAO,KAAK,EAAe,YAAY,EAAmB,YAAY,EAAiB,MAAM,YAAY,CAAC;AAC1G,OAAO,EAA2D,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AA4GzG,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,IAAI,SAAI,GAAG,MAAM,CAElE;AAED,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,wCAAwC;IACxC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,yDAAyD;IACzD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAiB,EACjB,MAAa,EACb,WAAW,EACX,cAAc,EACd,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,OAAc,EACd,SAAS,GACV,EAAE,iBAAiB,+BA4LnB"}
|