@hanzo/ui 8.27.35 → 8.27.39
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/dist/auth/SignIn.cjs +180 -17
- package/dist/auth/SignIn.d.ts +25 -1
- package/dist/auth/SignIn.d.ts.map +1 -1
- package/dist/auth/SignIn.js +146 -18
- package/dist/auth/SignIn.js.map +1 -1
- package/dist/consent/Consent.cjs +35 -14
- package/dist/consent/Consent.d.ts +1 -1
- package/dist/consent/Consent.d.ts.map +1 -1
- package/dist/consent/Consent.js +36 -15
- package/dist/consent/Consent.js.map +1 -1
- package/dist/gallery.cjs +2 -1
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +8 -4
- package/dist/gallery.js +3 -2
- package/dist/gallery.js.map +1 -1
- package/dist/marketing/ClosingCta.cjs +1 -1
- package/dist/marketing/ClosingCta.js +1 -1
- package/dist/marketing/ClosingCta.js.map +1 -1
- package/dist/marketing/Faq.cjs +1 -1
- package/dist/marketing/Faq.js +1 -1
- package/dist/marketing/Faq.js.map +1 -1
- package/dist/marketing/Footer.cjs +1 -1
- package/dist/marketing/Footer.js +1 -1
- package/dist/marketing/Footer.js.map +1 -1
- package/dist/marketing/Hero.cjs +2 -2
- package/dist/marketing/Hero.js +2 -2
- package/dist/marketing/Hero.js.map +1 -1
- package/dist/marketing/Plans.cjs +1 -1
- package/dist/marketing/Plans.js +1 -1
- package/dist/marketing/Plans.js.map +1 -1
- package/dist/marketing/blocks.cjs +3 -3
- package/dist/marketing/blocks.js +3 -3
- package/dist/marketing/blocks.js.map +1 -1
- package/dist/onboarding/ChatOnboarding.cjs +1 -1
- package/dist/onboarding/ChatOnboarding.js +2 -2
- package/dist/onboarding/ChatOnboarding.js.map +1 -1
- package/dist/onboarding/Onboarding.cjs +89 -21
- package/dist/onboarding/Onboarding.d.ts +30 -4
- package/dist/onboarding/Onboarding.d.ts.map +1 -1
- package/dist/onboarding/Onboarding.js +92 -24
- package/dist/onboarding/Onboarding.js.map +1 -1
- package/dist/onboarding/account.cjs +16 -0
- package/dist/onboarding/account.d.ts +21 -0
- package/dist/onboarding/account.d.ts.map +1 -0
- package/dist/onboarding/account.js +14 -0
- package/dist/onboarding/account.js.map +1 -0
- package/dist/onboarding/api.cjs +4 -1
- package/dist/onboarding/api.d.ts +5 -1
- package/dist/onboarding/api.d.ts.map +1 -1
- package/dist/onboarding/api.js +2 -0
- package/dist/onboarding/api.js.map +1 -1
- package/dist/onboarding/frame.cjs +13 -2
- package/dist/onboarding/frame.d.ts +11 -2
- package/dist/onboarding/frame.d.ts.map +1 -1
- package/dist/onboarding/frame.js +12 -2
- package/dist/onboarding/frame.js.map +1 -1
- package/dist/onboarding/hooks.cjs +25 -7
- package/dist/onboarding/hooks.d.ts +15 -4
- package/dist/onboarding/hooks.d.ts.map +1 -1
- package/dist/onboarding/hooks.js +26 -9
- package/dist/onboarding/hooks.js.map +1 -1
- package/dist/onboarding/index.cjs +10 -2
- package/dist/onboarding/index.d.ts +6 -4
- package/dist/onboarding/index.d.ts.map +1 -1
- package/dist/onboarding/index.js +6 -4
- package/dist/onboarding/index.js.map +1 -1
- package/dist/onboarding/screens.cjs +14 -3
- package/dist/onboarding/screens.d.ts +10 -1
- package/dist/onboarding/screens.d.ts.map +1 -1
- package/dist/onboarding/screens.js +13 -3
- package/dist/onboarding/screens.js.map +1 -1
- package/dist/onboarding/state.cjs +17 -2
- package/dist/onboarding/state.d.ts +22 -3
- package/dist/onboarding/state.d.ts.map +1 -1
- package/dist/onboarding/state.js +15 -2
- package/dist/onboarding/state.js.map +1 -1
- package/dist/styles.css +3 -0
- package/package.json +3 -3
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.CreateAccount = CreateAccount;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const checkbox_1 = require("../backends/gui/checkbox.cjs");
|
|
8
|
+
const field_1 = require("../backends/gui/field.cjs");
|
|
9
|
+
const button_1 = require("../backends/gui/button.cjs");
|
|
10
|
+
const layout_1 = require("../backends/gui/layout.cjs");
|
|
11
|
+
const frame_1 = require("./frame.cjs");
|
|
12
|
+
const screens_1 = require("./screens.cjs");
|
|
13
|
+
function CreateAccount({ site = 'Hanzo', email, busy, wrong, termsPath = '/terms', aupPath = '/aup', onCreate, onOther }) {
|
|
14
|
+
const [agree, setAgree] = (0, react_1.useState)(false);
|
|
15
|
+
return ((0, jsx_runtime_1.jsx)(frame_1.Page, { site: site, title: "Let\u2019s create your account", lede: "A few things for you to review", center: true, width: 360, foot: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.SizableText, { size: "$1", color: "$quiet", text: "center", children: `Email verified as ${email}` }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "link", size: "sm", px: 0, minH: 0, disabled: busy, onClick: onOther, children: "Use a different email" })] }), children: (0, jsx_runtime_1.jsxs)(frame_1.Panel, { label: "Terms", children: [(0, jsx_runtime_1.jsxs)(layout_1.XStack, { gap: "$3", items: "flex-start", children: [(0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { id: "hanzo-terms", checked: agree, onCheckedChange: (v) => setAgree(v === true), mt: "$1", "aria-label": "I agree to the Terms of Service and Acceptable Use Policy and confirm that I am at least 18 years of age" }), (0, jsx_runtime_1.jsxs)(layout_1.Paragraph, { render: "label", htmlFor: "hanzo-terms", size: "$2", color: "$ink", flex: 1, m: 0, children: [`I agree to ${site}’s `, (0, jsx_runtime_1.jsx)(layout_1.Anchor, { href: termsPath, color: "$ink", textDecorationLine: "underline", children: "Terms of Service" }), ' and ', (0, jsx_runtime_1.jsx)(layout_1.Anchor, { href: aupPath, color: "$ink", textDecorationLine: "underline", children: "Acceptable Use Policy" }), ' and confirm that I am at least 18 years of age.'] })] }), wrong ? (0, jsx_runtime_1.jsx)(field_1.FieldError, { children: wrong }) : null, (0, jsx_runtime_1.jsx)(screens_1.Primary, { disabled: !agree || busy, onClick: onCreate, children: busy ? 'One moment…' : 'Create account' })] }) }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Let's create your account": the one page a new account sees between proving
|
|
3
|
+
* its address and having an account. One unticked box, one button that stays
|
|
4
|
+
* disabled until the box is ticked, and the address it was proven for with a way
|
|
5
|
+
* to use another. Nothing is created before `onCreate` runs; the host records the
|
|
6
|
+
* acceptance (policy versions, time, method) on the IAM user.
|
|
7
|
+
*/
|
|
8
|
+
export interface CreateAccountProps {
|
|
9
|
+
site?: string;
|
|
10
|
+
/** The address that was verified. */
|
|
11
|
+
email: string;
|
|
12
|
+
busy?: boolean;
|
|
13
|
+
wrong?: string | null;
|
|
14
|
+
termsPath?: string;
|
|
15
|
+
aupPath?: string;
|
|
16
|
+
onCreate: () => void;
|
|
17
|
+
/** Go back and start over with another address. */
|
|
18
|
+
onOther: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function CreateAccount({ site, email, busy, wrong, termsPath, aupPath, onCreate, onOther }: CreateAccountProps): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/onboarding/account.tsx"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,mDAAmD;IACnD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAc,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAoB,EAAE,OAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,kBAAkB,+BA0ClJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Checkbox } from '../backends/gui/checkbox.js';
|
|
5
|
+
import { FieldError } from '../backends/gui/field.js';
|
|
6
|
+
import { Button } from '../backends/gui/button.js';
|
|
7
|
+
import { Anchor, Paragraph, SizableText, XStack } from '../backends/gui/layout.js';
|
|
8
|
+
import { Page, Panel } from './frame.js';
|
|
9
|
+
import { Primary } from './screens.js';
|
|
10
|
+
export function CreateAccount({ site = 'Hanzo', email, busy, wrong, termsPath = '/terms', aupPath = '/aup', onCreate, onOther }) {
|
|
11
|
+
const [agree, setAgree] = useState(false);
|
|
12
|
+
return (_jsx(Page, { site: site, title: "Let\u2019s create your account", lede: "A few things for you to review", center: true, width: 360, foot: _jsxs(_Fragment, { children: [_jsx(SizableText, { size: "$1", color: "$quiet", text: "center", children: `Email verified as ${email}` }), _jsx(Button, { type: "button", variant: "link", size: "sm", px: 0, minH: 0, disabled: busy, onClick: onOther, children: "Use a different email" })] }), children: _jsxs(Panel, { label: "Terms", children: [_jsxs(XStack, { gap: "$3", items: "flex-start", children: [_jsx(Checkbox, { id: "hanzo-terms", checked: agree, onCheckedChange: (v) => setAgree(v === true), mt: "$1", "aria-label": "I agree to the Terms of Service and Acceptable Use Policy and confirm that I am at least 18 years of age" }), _jsxs(Paragraph, { render: "label", htmlFor: "hanzo-terms", size: "$2", color: "$ink", flex: 1, m: 0, children: [`I agree to ${site}’s `, _jsx(Anchor, { href: termsPath, color: "$ink", textDecorationLine: "underline", children: "Terms of Service" }), ' and ', _jsx(Anchor, { href: aupPath, color: "$ink", textDecorationLine: "underline", children: "Acceptable Use Policy" }), ' and confirm that I am at least 18 years of age.'] })] }), wrong ? _jsx(FieldError, { children: wrong }) : null, _jsx(Primary, { disabled: !agree || busy, onClick: onCreate, children: busy ? 'One moment…' : 'Create account' })] }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/onboarding/account.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsBnC,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAsB;IACjJ,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzC,OAAO,CACL,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,EACV,KAAK,EAAC,gCAA2B,EACjC,IAAI,EAAC,gCAAgC,EACrC,MAAM,QACN,KAAK,EAAE,GAAG,EACV,IAAI,EACF,8BACE,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,YAChD,qBAAqB,KAAK,EAAE,GACjB,EACd,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,sCAEtF,IACR,YAGL,MAAC,KAAK,IAAC,KAAK,EAAC,OAAO,aAClB,MAAC,MAAM,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,YAAY,aACjC,KAAC,QAAQ,IAAC,EAAE,EAAC,aAAa,EAAC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,EAAC,IAAI,gBAAY,0GAA0G,GAAG,EACpP,MAAC,SAAS,IAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,aAAa,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,aACjF,cAAc,IAAI,KAAK,EACxB,KAAC,MAAM,IAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,MAAM,EAAC,kBAAkB,EAAC,WAAW,iCAE3D,EACR,OAAO,EACR,KAAC,MAAM,IAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,EAAC,kBAAkB,EAAC,WAAW,sCAEzD,EACR,kDAAkD,IACzC,IACL,EACR,KAAK,CAAC,CAAC,CAAC,KAAC,UAAU,cAAE,KAAK,GAAc,CAAC,CAAC,CAAC,IAAI,EAChD,KAAC,OAAO,IAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE,QAAQ,YACjD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,GAChC,IACJ,GACH,CACR,CAAA;AACH,CAAC"}
|
package/dist/onboarding/api.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.rename = exports.account = exports.saveProgress = exports.preferences = exports.ApiError = exports.API = void 0;
|
|
3
|
+
exports.rename = exports.account = exports.acceptTerms = exports.saveProgress = exports.preferences = exports.ApiError = exports.API = void 0;
|
|
4
4
|
exports.call = call;
|
|
5
5
|
const session_1 = require("../auth/session.cjs");
|
|
6
6
|
/** Where the IAM and billing routes answer from. api.hanzo.ai answers CORS for every Hanzo host. */
|
|
@@ -40,6 +40,9 @@ const preferences = (base, patch = {}) => call(base, '/v1/iam/preferences', { me
|
|
|
40
40
|
exports.preferences = preferences;
|
|
41
41
|
const saveProgress = (base, patch) => (0, exports.preferences)(base).then((cur) => (0, exports.preferences)(base, { onboarding: { ...(cur.onboarding ?? {}), ...patch } }));
|
|
42
42
|
exports.saveProgress = saveProgress;
|
|
43
|
+
/** PUT /v1/iam/terms: IAM records that the signed-in caller accepted these versions, with the time and the method. */
|
|
44
|
+
const acceptTerms = (base, policy) => call(base, '/v1/iam/terms', { method: 'PUT', body: JSON.stringify(policy) });
|
|
45
|
+
exports.acceptTerms = acceptTerms;
|
|
43
46
|
const account = (base) => call(base, '/v1/iam/account');
|
|
44
47
|
exports.account = account;
|
|
45
48
|
const rename = (base, displayName) => call(base, '/v1/iam/account', { method: 'PUT', body: JSON.stringify({ displayName }) });
|
package/dist/onboarding/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Progress, Stored } from './state.js';
|
|
1
|
+
import type { Accepted, Policy, Progress, Stored } from './state.js';
|
|
2
2
|
/** Where the IAM and billing routes answer from. api.hanzo.ai answers CORS for every Hanzo host. */
|
|
3
3
|
export declare const API = "https://api.hanzo.ai";
|
|
4
4
|
export declare class ApiError extends Error {
|
|
@@ -13,7 +13,11 @@ export interface Account {
|
|
|
13
13
|
owner?: string;
|
|
14
14
|
name?: string;
|
|
15
15
|
displayName?: string;
|
|
16
|
+
email?: string;
|
|
17
|
+
createdTime?: string;
|
|
16
18
|
}
|
|
19
|
+
/** PUT /v1/iam/terms: IAM records that the signed-in caller accepted these versions, with the time and the method. */
|
|
20
|
+
export declare const acceptTerms: (base: string, policy: Policy) => Promise<Accepted>;
|
|
17
21
|
export declare const account: (base: string) => Promise<Account>;
|
|
18
22
|
export declare const rename: (base: string, displayName: string) => Promise<Account>;
|
|
19
23
|
//# sourceMappingURL=api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/onboarding/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/onboarding/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEjE,oGAAoG;AACpG,eAAO,MAAM,GAAG,yBAAyB,CAAA;AAEzC,qBAAa,QAAS,SAAQ,KAAK;IACJ,QAAQ,CAAC,MAAM,EAAE,MAAM;IAApD,YAAY,OAAO,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM,EAEnD;CACF;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAoB5F;AAED,oFAAoF;AACpF,eAAO,MAAM,WAAW,SAAU,MAAM,UAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoG,CAAA;AAE5K,eAAO,MAAM,YAAY,SAAU,MAAM,SAAS,QAAQ,oBACmD,CAAA;AAE7G,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,sHAAsH;AACtH,eAAO,MAAM,WAAW,SAAU,MAAM,UAAU,MAAM,sBAA2F,CAAA;AAEnJ,eAAO,MAAM,OAAO,SAAU,MAAM,qBAA2C,CAAA;AAC/E,eAAO,MAAM,MAAM,SAAU,MAAM,eAAe,MAAM,qBAAqG,CAAA"}
|
package/dist/onboarding/api.js
CHANGED
|
@@ -33,6 +33,8 @@ export async function call(base, path, init = {}) {
|
|
|
33
33
|
/** POST /v1/iam/preferences: shallow-merged onto the stored blob; `{}` reads it. */
|
|
34
34
|
export const preferences = (base, patch = {}) => call(base, '/v1/iam/preferences', { method: 'POST', body: JSON.stringify(patch) });
|
|
35
35
|
export const saveProgress = (base, patch) => preferences(base).then((cur) => preferences(base, { onboarding: { ...(cur.onboarding ?? {}), ...patch } }));
|
|
36
|
+
/** PUT /v1/iam/terms: IAM records that the signed-in caller accepted these versions, with the time and the method. */
|
|
37
|
+
export const acceptTerms = (base, policy) => call(base, '/v1/iam/terms', { method: 'PUT', body: JSON.stringify(policy) });
|
|
36
38
|
export const account = (base) => call(base, '/v1/iam/account');
|
|
37
39
|
export const rename = (base, displayName) => call(base, '/v1/iam/account', { method: 'PUT', body: JSON.stringify({ displayName }) });
|
|
38
40
|
//# sourceMappingURL=api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/onboarding/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,oGAAoG;AACpG,MAAM,CAAC,MAAM,GAAG,GAAG,sBAAsB,CAAA;AAEzC,MAAM,OAAO,QAAS,SAAQ,KAAK;IACK,MAAM;IAA5C,YAAY,OAAe,EAAW,MAAc;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;sBADsB,MAAM;IAE5C,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,IAAY,EAAE,IAAY,EAAE,IAAI,GAAgB,EAAE;IAC9E,MAAM,KAAK,GAAG,MAAM,EAAE,CAAA;IACtB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE;QACxC,GAAG,IAAI;QACP,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAI,IAAI,CAAC,OAA8C,EAAE;KACjK,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,IAAI,GAAY,IAAI,CAAA;IACxB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,IAAgE,CAAA;QAC1E,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrG,CAAC;IACD,6DAA6D;IAC7D,MAAM,OAAO,GAAG,IAAkD,CAAA;IAClE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAM,CAAA;AAC7F,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAK,GAA4B,EAAE,EAAE,EAAE,CAAC,IAAI,CAAS,IAAI,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAE5K,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAe,EAAE,EAAE,CAC5D,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/onboarding/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use client';"use strict";
|
|
2
2
|
'use client';
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Bare = Bare;
|
|
4
5
|
exports.Page = Page;
|
|
5
6
|
exports.Panel = Panel;
|
|
6
7
|
exports.IntervalToggle = IntervalToggle;
|
|
7
8
|
exports.Line = Line;
|
|
8
9
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
10
|
+
const react_1 = require("react");
|
|
9
11
|
const shell_1 = require("@hanzogui/shell");
|
|
10
12
|
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
11
13
|
const button_1 = require("../backends/gui/button.cjs");
|
|
@@ -13,13 +15,22 @@ const card_1 = require("../backends/gui/card.cjs");
|
|
|
13
15
|
const layout_1 = require("../backends/gui/layout.cjs");
|
|
14
16
|
const spinner_1 = require("../backends/gui/spinner.cjs");
|
|
15
17
|
const toggle_group_1 = require("../backends/gui/toggle-group.cjs");
|
|
18
|
+
const Brand = (0, react_1.createContext)(true);
|
|
19
|
+
/**
|
|
20
|
+
* Wrap onboarding in a host whose own shell already draws the logo and the page's
|
|
21
|
+
* `main` (a bare masthead), so the pages draw neither a second logo nor a second `main`.
|
|
22
|
+
*/
|
|
23
|
+
function Bare({ children }) {
|
|
24
|
+
return (0, jsx_runtime_1.jsx)(Brand.Provider, { value: false, children: children });
|
|
25
|
+
}
|
|
16
26
|
/**
|
|
17
27
|
* One page of onboarding: the product's mark, a title, a line under it, and the
|
|
18
28
|
* screen. No progress bar and no step counter. `width` sets how much room the
|
|
19
29
|
* screen has: a column for a form, the full row for three plans.
|
|
20
30
|
*/
|
|
21
|
-
function Page({ site, title, lede, back, children, center, width = 480, start, busy, }) {
|
|
22
|
-
|
|
31
|
+
function Page({ site, title, lede, back, children, center, width = 480, start, busy, foot, }) {
|
|
32
|
+
const brand = (0, react_1.useContext)(Brand);
|
|
33
|
+
return ((0, jsx_runtime_1.jsxs)(layout_1.YStack, { render: brand ? 'main' : 'div', "aria-busy": busy || undefined, bg: "$background", minH: "100vh", items: "center", justify: center ? 'center' : 'flex-start', gap: "$4", pt: center ? 96 : 28, pb: 96, px: "$4", children: [back ? ((0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "ghost", size: "icon-lg", "aria-label": "Back", position: "absolute", t: 20, l: 20, rounded: "$10", onClick: back, children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowLeft, { size: 18 }) })) : null, brand ? ((0, jsx_runtime_1.jsxs)(layout_1.XStack, { items: "center", gap: "$2.5", mb: "$5", children: [(0, jsx_runtime_1.jsx)(shell_1.HanzoMark, { size: 20 }), (0, jsx_runtime_1.jsx)(layout_1.SizableText, { size: "$5", fontWeight: "500", color: "$ink", children: site })] })) : null, title || lede ? ((0, jsx_runtime_1.jsxs)(layout_1.YStack, { width: "100%", maxW: start ? width : 720, items: start ? 'flex-start' : 'center', gap: "$3", children: [title ? ((0, jsx_runtime_1.jsx)(layout_1.Heading, { render: "h1", size: "$9", fontWeight: "500", color: "$ink", text: start ? 'left' : 'center', m: 0, children: title })) : null, lede ? ((0, jsx_runtime_1.jsx)(layout_1.Paragraph, { size: "$3", color: "$quiet", text: start ? 'left' : 'center', maxW: 520, m: 0, children: lede })) : null] })) : null, busy ? (0, jsx_runtime_1.jsx)(spinner_1.Spinner, { size: 20 }) : null, children ? ((0, jsx_runtime_1.jsx)(layout_1.YStack, { width: "100%", maxW: width, items: "stretch", gap: "$4", mt: "$2", children: children })) : null, foot ? ((0, jsx_runtime_1.jsx)(layout_1.YStack, { position: "absolute", b: 32, l: 0, r: 0, items: "center", gap: "$1", px: "$4", children: foot })) : null] }));
|
|
23
34
|
}
|
|
24
35
|
/** A bordered panel with room inside, the surface for an order, a notice or a plan. */
|
|
25
36
|
function Panel({ children, label }) {
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
2
|
import type { Interval } from './plans.js';
|
|
3
|
+
/**
|
|
4
|
+
* Wrap onboarding in a host whose own shell already draws the logo and the page's
|
|
5
|
+
* `main` (a bare masthead), so the pages draw neither a second logo nor a second `main`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function Bare({ children }: {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
3
10
|
/**
|
|
4
11
|
* One page of onboarding: the product's mark, a title, a line under it, and the
|
|
5
12
|
* screen. No progress bar and no step counter. `width` sets how much room the
|
|
6
13
|
* screen has: a column for a form, the full row for three plans.
|
|
7
14
|
*/
|
|
8
|
-
export declare function Page({ site, title, lede, back, children, center, width, start, busy, }: {
|
|
15
|
+
export declare function Page({ site, title, lede, back, children, center, width, start, busy, foot, }: {
|
|
9
16
|
site: string;
|
|
10
17
|
title: string;
|
|
11
18
|
lede?: string;
|
|
@@ -16,6 +23,8 @@ export declare function Page({ site, title, lede, back, children, center, width,
|
|
|
16
23
|
/** Left-align the title and the line under it with the column, as a form does. */
|
|
17
24
|
start?: boolean;
|
|
18
25
|
busy?: boolean;
|
|
26
|
+
/** A quiet line at the foot of the page, under everything: who the email is, a way out. */
|
|
27
|
+
foot?: ReactNode;
|
|
19
28
|
}): import("react").JSX.Element;
|
|
20
29
|
/** A bordered panel with room inside, the surface for an order, a notice or a plan. */
|
|
21
30
|
export declare function Panel({ children, label }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/onboarding/frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/onboarding/frame.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAQjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC;;;GAGG;AACH,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAEzD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,KAAW,EACX,KAAK,EACL,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,2FAA2F;IAC3F,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,+BA4CA;AAED,uFAAuF;AACvF,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAMjF;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,+BAOrJ;AAED,4FAA4F;AAC5F,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,+BAoBtJ"}
|
package/dist/onboarding/frame.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext } from 'react';
|
|
3
4
|
import { HanzoMark } from '@hanzogui/shell';
|
|
4
5
|
import { ArrowLeft } from '@hanzogui/lucide-icons-2';
|
|
5
6
|
import { Button } from '../backends/gui/button.js';
|
|
@@ -7,13 +8,22 @@ import { Card, CardContent } from '../backends/gui/card.js';
|
|
|
7
8
|
import { Heading, Paragraph, SizableText, XStack, YStack } from '../backends/gui/layout.js';
|
|
8
9
|
import { Spinner } from '../backends/gui/spinner.js';
|
|
9
10
|
import { ToggleGroup, ToggleGroupItem } from '../backends/gui/toggle-group.js';
|
|
11
|
+
const Brand = createContext(true);
|
|
12
|
+
/**
|
|
13
|
+
* Wrap onboarding in a host whose own shell already draws the logo and the page's
|
|
14
|
+
* `main` (a bare masthead), so the pages draw neither a second logo nor a second `main`.
|
|
15
|
+
*/
|
|
16
|
+
export function Bare({ children }) {
|
|
17
|
+
return _jsx(Brand.Provider, { value: false, children: children });
|
|
18
|
+
}
|
|
10
19
|
/**
|
|
11
20
|
* One page of onboarding: the product's mark, a title, a line under it, and the
|
|
12
21
|
* screen. No progress bar and no step counter. `width` sets how much room the
|
|
13
22
|
* screen has: a column for a form, the full row for three plans.
|
|
14
23
|
*/
|
|
15
|
-
export function Page({ site, title, lede, back, children, center, width = 480, start, busy, }) {
|
|
16
|
-
|
|
24
|
+
export function Page({ site, title, lede, back, children, center, width = 480, start, busy, foot, }) {
|
|
25
|
+
const brand = useContext(Brand);
|
|
26
|
+
return (_jsxs(YStack, { render: brand ? 'main' : 'div', "aria-busy": busy || undefined, bg: "$background", minH: "100vh", items: "center", justify: center ? 'center' : 'flex-start', gap: "$4", pt: center ? 96 : 28, pb: 96, px: "$4", children: [back ? (_jsx(Button, { type: "button", variant: "ghost", size: "icon-lg", "aria-label": "Back", position: "absolute", t: 20, l: 20, rounded: "$10", onClick: back, children: _jsx(ArrowLeft, { size: 18 }) })) : null, brand ? (_jsxs(XStack, { items: "center", gap: "$2.5", mb: "$5", children: [_jsx(HanzoMark, { size: 20 }), _jsx(SizableText, { size: "$5", fontWeight: "500", color: "$ink", children: site })] })) : null, title || lede ? (_jsxs(YStack, { width: "100%", maxW: start ? width : 720, items: start ? 'flex-start' : 'center', gap: "$3", children: [title ? (_jsx(Heading, { render: "h1", size: "$9", fontWeight: "500", color: "$ink", text: start ? 'left' : 'center', m: 0, children: title })) : null, lede ? (_jsx(Paragraph, { size: "$3", color: "$quiet", text: start ? 'left' : 'center', maxW: 520, m: 0, children: lede })) : null] })) : null, busy ? _jsx(Spinner, { size: 20 }) : null, children ? (_jsx(YStack, { width: "100%", maxW: width, items: "stretch", gap: "$4", mt: "$2", children: children })) : null, foot ? (_jsx(YStack, { position: "absolute", b: 32, l: 0, r: 0, items: "center", gap: "$1", px: "$4", children: foot })) : null] }));
|
|
17
27
|
}
|
|
18
28
|
/** A bordered panel with room inside, the surface for an order, a notice or a plan. */
|
|
19
29
|
export function Panel({ children, label }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/onboarding/frame.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/onboarding/frame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
'use client';
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.useSession = useSession;
|
|
5
|
+
exports.firstRun = firstRun;
|
|
5
6
|
exports.useOnboarded = useOnboarded;
|
|
6
7
|
const react_1 = require("react");
|
|
7
8
|
const api_1 = require("./api.cjs");
|
|
@@ -14,6 +15,7 @@ function useSession(api = api_1.API) {
|
|
|
14
15
|
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
15
16
|
const [stored, setStored] = (0, react_1.useState)({});
|
|
16
17
|
const [name, setNameState] = (0, react_1.useState)('');
|
|
18
|
+
const [me, setMe] = (0, react_1.useState)({ email: '' });
|
|
17
19
|
const [error, setError] = (0, react_1.useState)(null);
|
|
18
20
|
(0, react_1.useEffect)(() => {
|
|
19
21
|
let live = true;
|
|
@@ -23,6 +25,7 @@ function useSession(api = api_1.API) {
|
|
|
23
25
|
setStored(prefs ?? {});
|
|
24
26
|
const a = me;
|
|
25
27
|
setNameState(a?.displayName?.trim() ?? '');
|
|
28
|
+
setMe({ email: a?.email ?? '', createdTime: a?.createdTime });
|
|
26
29
|
setLoading(false);
|
|
27
30
|
});
|
|
28
31
|
return () => {
|
|
@@ -48,20 +51,35 @@ function useSession(api = api_1.API) {
|
|
|
48
51
|
setStored((s) => ({ ...s, train_opt_in: on }));
|
|
49
52
|
await (0, api_1.preferences)(api, { train_opt_in: on });
|
|
50
53
|
}, [api]);
|
|
51
|
-
|
|
54
|
+
const accept = (0, react_1.useCallback)(async (policy) => {
|
|
55
|
+
const done = await (0, api_1.acceptTerms)(api, policy);
|
|
56
|
+
setStored((s) => ({ ...s, terms: done }));
|
|
57
|
+
return done;
|
|
58
|
+
}, [api]);
|
|
59
|
+
return { loading, progress: stored.onboarding ?? {}, trainOptIn: stored.train_opt_in, name, email: me.email, owesTerms: (0, state_1.owesTerms)(stored.terms, me.createdTime), accept, save, setName, setTrain, error };
|
|
52
60
|
}
|
|
53
61
|
/**
|
|
54
|
-
* Whether this person still has
|
|
55
|
-
*
|
|
56
|
-
*
|
|
62
|
+
* Whether this person still has a first-run step to do, from the terms page to
|
|
63
|
+
* the role. A failed read answers `pending: false`, because a broken read must
|
|
64
|
+
* not lock anyone out.
|
|
57
65
|
*/
|
|
66
|
+
async function firstRun(api = api_1.API) {
|
|
67
|
+
try {
|
|
68
|
+
const [s, me] = await Promise.all([(0, api_1.preferences)(api), (0, api_1.account)(api)]);
|
|
69
|
+
const p = s?.onboarding ?? {};
|
|
70
|
+
const pending = (0, state_1.owesTerms)(s?.terms, me?.createdTime) || (0, state_1.step)(p) !== 'done' || (0, state_1.chatStep)(p, Boolean(me?.displayName?.trim())) !== 'done';
|
|
71
|
+
return { pending, plan: p.plan };
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return { pending: false, plan: undefined };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** `firstRun` as a hook: `pending` is `null` while IAM has not answered, so a gate never flashes the wrong screen. */
|
|
58
78
|
function useOnboarded(api = api_1.API) {
|
|
59
79
|
const [state, setState] = (0, react_1.useState)({ pending: null, plan: undefined });
|
|
60
80
|
(0, react_1.useEffect)(() => {
|
|
61
81
|
let live = true;
|
|
62
|
-
(
|
|
63
|
-
.then((s) => live && setState({ pending: (0, state_1.step)(s?.onboarding ?? {}) !== 'done', plan: s?.onboarding?.plan }))
|
|
64
|
-
.catch(() => live && setState({ pending: false, plan: undefined }));
|
|
82
|
+
void firstRun(api).then((r) => live && setState(r));
|
|
65
83
|
return () => {
|
|
66
84
|
live = false;
|
|
67
85
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Progress } from './state.js';
|
|
1
|
+
import { type Accepted, type Policy, type Progress } from './state.js';
|
|
2
2
|
export type Track = (name: string, props?: Record<string, unknown>) => void;
|
|
3
3
|
export interface Session {
|
|
4
4
|
/** Nothing has answered yet. */
|
|
@@ -7,6 +7,12 @@ export interface Session {
|
|
|
7
7
|
trainOptIn: boolean | undefined;
|
|
8
8
|
/** The display name IAM holds, if any. */
|
|
9
9
|
name: string;
|
|
10
|
+
/** The verified address of the account. */
|
|
11
|
+
email: string;
|
|
12
|
+
/** The "Let's create your account" page is owed (see `owesTerms`). */
|
|
13
|
+
owesTerms: boolean;
|
|
14
|
+
/** Record the acceptance on the IAM user. */
|
|
15
|
+
accept: (policy: Policy) => Promise<Accepted>;
|
|
10
16
|
/** Merge a step into the stored progress (and the screen). */
|
|
11
17
|
save: (patch: Progress) => Promise<void>;
|
|
12
18
|
setName: (name: string) => Promise<void>;
|
|
@@ -19,10 +25,15 @@ export interface Session {
|
|
|
19
25
|
*/
|
|
20
26
|
export declare function useSession(api?: string): Session;
|
|
21
27
|
/**
|
|
22
|
-
* Whether this person still has
|
|
23
|
-
*
|
|
24
|
-
*
|
|
28
|
+
* Whether this person still has a first-run step to do, from the terms page to
|
|
29
|
+
* the role. A failed read answers `pending: false`, because a broken read must
|
|
30
|
+
* not lock anyone out.
|
|
25
31
|
*/
|
|
32
|
+
export declare function firstRun(api?: string): Promise<{
|
|
33
|
+
pending: boolean;
|
|
34
|
+
plan: string | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
/** `firstRun` as a hook: `pending` is `null` while IAM has not answered, so a gate never flashes the wrong screen. */
|
|
26
37
|
export declare function useOnboarded(api?: string): {
|
|
27
38
|
pending: boolean | null;
|
|
28
39
|
plan: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/onboarding/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/onboarding/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6B,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAe,MAAM,SAAS,CAAA;AAE3G,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAE3E,MAAM,WAAW,OAAO;IACtB,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAA;IAClB,6CAA6C;IAC7C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7C,8DAA8D;IAC9D,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAY,GAAG,OAAO,CA8DrD;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,GAAG,GAAE,MAAY,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CASzG;AAED,sHAAsH;AACtH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAY,GAAG;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAUrG"}
|
package/dist/onboarding/hooks.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
-
import { account, API, preferences, rename, saveProgress } from './api.js';
|
|
4
|
-
import { step } from './state.js';
|
|
3
|
+
import { account, acceptTerms, API, preferences, rename, saveProgress } from './api.js';
|
|
4
|
+
import { chatStep, owesTerms, step } from './state.js';
|
|
5
5
|
/**
|
|
6
6
|
* The person's onboarding, read from IAM once and written through as each step
|
|
7
7
|
* finishes. A failed read leaves the flow at the start rather than blocking it.
|
|
@@ -10,6 +10,7 @@ export function useSession(api = API) {
|
|
|
10
10
|
const [loading, setLoading] = useState(true);
|
|
11
11
|
const [stored, setStored] = useState({});
|
|
12
12
|
const [name, setNameState] = useState('');
|
|
13
|
+
const [me, setMe] = useState({ email: '' });
|
|
13
14
|
const [error, setError] = useState(null);
|
|
14
15
|
useEffect(() => {
|
|
15
16
|
let live = true;
|
|
@@ -19,6 +20,7 @@ export function useSession(api = API) {
|
|
|
19
20
|
setStored(prefs ?? {});
|
|
20
21
|
const a = me;
|
|
21
22
|
setNameState(a?.displayName?.trim() ?? '');
|
|
23
|
+
setMe({ email: a?.email ?? '', createdTime: a?.createdTime });
|
|
22
24
|
setLoading(false);
|
|
23
25
|
});
|
|
24
26
|
return () => {
|
|
@@ -44,20 +46,35 @@ export function useSession(api = API) {
|
|
|
44
46
|
setStored((s) => ({ ...s, train_opt_in: on }));
|
|
45
47
|
await preferences(api, { train_opt_in: on });
|
|
46
48
|
}, [api]);
|
|
47
|
-
|
|
49
|
+
const accept = useCallback(async (policy) => {
|
|
50
|
+
const done = await acceptTerms(api, policy);
|
|
51
|
+
setStored((s) => ({ ...s, terms: done }));
|
|
52
|
+
return done;
|
|
53
|
+
}, [api]);
|
|
54
|
+
return { loading, progress: stored.onboarding ?? {}, trainOptIn: stored.train_opt_in, name, email: me.email, owesTerms: owesTerms(stored.terms, me.createdTime), accept, save, setName, setTrain, error };
|
|
48
55
|
}
|
|
49
56
|
/**
|
|
50
|
-
* Whether this person still has
|
|
51
|
-
*
|
|
52
|
-
*
|
|
57
|
+
* Whether this person still has a first-run step to do, from the terms page to
|
|
58
|
+
* the role. A failed read answers `pending: false`, because a broken read must
|
|
59
|
+
* not lock anyone out.
|
|
53
60
|
*/
|
|
61
|
+
export async function firstRun(api = API) {
|
|
62
|
+
try {
|
|
63
|
+
const [s, me] = await Promise.all([preferences(api), account(api)]);
|
|
64
|
+
const p = s?.onboarding ?? {};
|
|
65
|
+
const pending = owesTerms(s?.terms, me?.createdTime) || step(p) !== 'done' || chatStep(p, Boolean(me?.displayName?.trim())) !== 'done';
|
|
66
|
+
return { pending, plan: p.plan };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return { pending: false, plan: undefined };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** `firstRun` as a hook: `pending` is `null` while IAM has not answered, so a gate never flashes the wrong screen. */
|
|
54
73
|
export function useOnboarded(api = API) {
|
|
55
74
|
const [state, setState] = useState({ pending: null, plan: undefined });
|
|
56
75
|
useEffect(() => {
|
|
57
76
|
let live = true;
|
|
58
|
-
|
|
59
|
-
.then((s) => live && setState({ pending: step(s?.onboarding ?? {}) !== 'done', plan: s?.onboarding?.plan }))
|
|
60
|
-
.catch(() => live && setState({ pending: false, plan: undefined }));
|
|
77
|
+
void firstRun(api).then((r) => live && setState(r));
|
|
61
78
|
return () => {
|
|
62
79
|
live = false;
|
|
63
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/onboarding/hooks.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/onboarding/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.preferences = exports.API = exports.ROLES = exports.OWN_TOPIC = exports.useCatalog = exports.loadCatalog = exports.unit = exports.SLUG = exports.saving = exports.period = exports.OFFERS = exports.offer = exports.MIN_SEATS = exports.MAX_SEATS = exports.lines = exports.item = exports.has = exports.ENTERPRISE_FROM = exports.adopt = exports.step = exports.chatStep = exports.useSession = exports.useOnboarded = exports.Checkout = exports.ChatOnboarding = exports.Onboarding = void 0;
|
|
3
|
+
exports.preferences = exports.API = exports.acceptTerms = exports.ROLES = exports.OWN_TOPIC = exports.useCatalog = exports.loadCatalog = exports.unit = exports.SLUG = exports.saving = exports.period = exports.OFFERS = exports.offer = exports.MIN_SEATS = exports.MAX_SEATS = exports.lines = exports.item = exports.has = exports.ENTERPRISE_FROM = exports.adopt = exports.step = exports.owesTerms = exports.NEW_WITHIN = exports.chatStep = exports.useSession = exports.useOnboarded = exports.firstRun = exports.CreateAccount = exports.Bare = exports.Checkout = exports.ChatOnboarding = exports.Onboarding = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* The onboarding every Hanzo surface shares. IAM holds each person's progress
|
|
6
6
|
* (POST /v1/iam/preferences), commerce takes the payment (/v1/billing), and
|
|
7
7
|
|
|
8
8
|
*
|
|
9
|
-
* <Onboarding/>
|
|
9
|
+
* <Onboarding/> the terms (new accounts) → Hanzo Pro → all plans | team → seats → checkout
|
|
10
10
|
* <ChatOnboarding/> before your first chat → name → role and starter prompts
|
|
11
11
|
* <Checkout/> the one checkout, also behind every Upgrade entry
|
|
12
12
|
*/
|
|
@@ -16,11 +16,18 @@ var ChatOnboarding_1 = require("./ChatOnboarding.cjs");
|
|
|
16
16
|
Object.defineProperty(exports, "ChatOnboarding", { enumerable: true, get: function () { return ChatOnboarding_1.ChatOnboarding; } });
|
|
17
17
|
var Checkout_1 = require("./Checkout.cjs");
|
|
18
18
|
Object.defineProperty(exports, "Checkout", { enumerable: true, get: function () { return Checkout_1.Checkout; } });
|
|
19
|
+
var frame_1 = require("./frame.cjs");
|
|
20
|
+
Object.defineProperty(exports, "Bare", { enumerable: true, get: function () { return frame_1.Bare; } });
|
|
21
|
+
var account_1 = require("./account.cjs");
|
|
22
|
+
Object.defineProperty(exports, "CreateAccount", { enumerable: true, get: function () { return account_1.CreateAccount; } });
|
|
19
23
|
var hooks_1 = require("./hooks.cjs");
|
|
24
|
+
Object.defineProperty(exports, "firstRun", { enumerable: true, get: function () { return hooks_1.firstRun; } });
|
|
20
25
|
Object.defineProperty(exports, "useOnboarded", { enumerable: true, get: function () { return hooks_1.useOnboarded; } });
|
|
21
26
|
Object.defineProperty(exports, "useSession", { enumerable: true, get: function () { return hooks_1.useSession; } });
|
|
22
27
|
var state_1 = require("./state.cjs");
|
|
23
28
|
Object.defineProperty(exports, "chatStep", { enumerable: true, get: function () { return state_1.chatStep; } });
|
|
29
|
+
Object.defineProperty(exports, "NEW_WITHIN", { enumerable: true, get: function () { return state_1.NEW_WITHIN; } });
|
|
30
|
+
Object.defineProperty(exports, "owesTerms", { enumerable: true, get: function () { return state_1.owesTerms; } });
|
|
24
31
|
Object.defineProperty(exports, "step", { enumerable: true, get: function () { return state_1.step; } });
|
|
25
32
|
var plans_1 = require("./plans.cjs");
|
|
26
33
|
Object.defineProperty(exports, "adopt", { enumerable: true, get: function () { return plans_1.adopt; } });
|
|
@@ -43,5 +50,6 @@ var roles_1 = require("./roles.cjs");
|
|
|
43
50
|
Object.defineProperty(exports, "OWN_TOPIC", { enumerable: true, get: function () { return roles_1.OWN_TOPIC; } });
|
|
44
51
|
Object.defineProperty(exports, "ROLES", { enumerable: true, get: function () { return roles_1.ROLES; } });
|
|
45
52
|
var api_1 = require("./api.cjs");
|
|
53
|
+
Object.defineProperty(exports, "acceptTerms", { enumerable: true, get: function () { return api_1.acceptTerms; } });
|
|
46
54
|
Object.defineProperty(exports, "API", { enumerable: true, get: function () { return api_1.API; } });
|
|
47
55
|
Object.defineProperty(exports, "preferences", { enumerable: true, get: function () { return api_1.preferences; } });
|
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
* (POST /v1/iam/preferences), commerce takes the payment (/v1/billing), and
|
|
4
4
|
|
|
5
5
|
*
|
|
6
|
-
* <Onboarding/>
|
|
6
|
+
* <Onboarding/> the terms (new accounts) → Hanzo Pro → all plans | team → seats → checkout
|
|
7
7
|
* <ChatOnboarding/> before your first chat → name → role and starter prompts
|
|
8
8
|
* <Checkout/> the one checkout, also behind every Upgrade entry
|
|
9
9
|
*/
|
|
10
10
|
export { Onboarding, type OnboardingProps } from './Onboarding.js';
|
|
11
11
|
export { ChatOnboarding, type ChatOnboardingProps } from './ChatOnboarding.js';
|
|
12
12
|
export { Checkout, type CheckoutProps } from './Checkout.js';
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
13
|
+
export { Bare } from './frame.js';
|
|
14
|
+
export { CreateAccount, type CreateAccountProps } from './account.js';
|
|
15
|
+
export { firstRun, useOnboarded, useSession, type Session, type Track } from './hooks.js';
|
|
16
|
+
export { chatStep, NEW_WITHIN, owesTerms, step, type Accepted, type ChatStep, type Policy, type Progress, type Step, type Use } from './state.js';
|
|
15
17
|
export { adopt, ENTERPRISE_FROM, has, item, lines, MAX_SEATS, MIN_SEATS, offer, OFFERS, period, saving, SLUG, unit, type Interval, type Lines, type Offer, type PlanId, type Row } from './plans.js';
|
|
16
18
|
export { loadCatalog, useCatalog } from './catalog.js';
|
|
17
19
|
export { OWN_TOPIC, ROLES, type Role, type Starter } from './roles.js';
|
|
18
|
-
export { API, preferences } from './api.js';
|
|
20
|
+
export { acceptTerms, API, preferences } from './api.js';
|
|
19
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG,EAAE,MAAM,SAAS,CAAA;AAC9I,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,SAAS,CAAA;AACjM,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA"}
|
package/dist/onboarding/index.js
CHANGED
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
* (POST /v1/iam/preferences), commerce takes the payment (/v1/billing), and
|
|
4
4
|
|
|
5
5
|
*
|
|
6
|
-
* <Onboarding/>
|
|
6
|
+
* <Onboarding/> the terms (new accounts) → Hanzo Pro → all plans | team → seats → checkout
|
|
7
7
|
* <ChatOnboarding/> before your first chat → name → role and starter prompts
|
|
8
8
|
* <Checkout/> the one checkout, also behind every Upgrade entry
|
|
9
9
|
*/
|
|
10
10
|
export { Onboarding } from './Onboarding.js';
|
|
11
11
|
export { ChatOnboarding } from './ChatOnboarding.js';
|
|
12
12
|
export { Checkout } from './Checkout.js';
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
13
|
+
export { Bare } from './frame.js';
|
|
14
|
+
export { CreateAccount } from './account.js';
|
|
15
|
+
export { firstRun, useOnboarded, useSession } from './hooks.js';
|
|
16
|
+
export { chatStep, NEW_WITHIN, owesTerms, step } from './state.js';
|
|
15
17
|
export { adopt, ENTERPRISE_FROM, has, item, lines, MAX_SEATS, MIN_SEATS, offer, OFFERS, period, saving, SLUG, unit } from './plans.js';
|
|
16
18
|
export { loadCatalog, useCatalog } from './catalog.js';
|
|
17
19
|
export { OWN_TOPIC, ROLES } from './roles.js';
|
|
18
|
-
export { API, preferences } from './api.js';
|
|
20
|
+
export { acceptTerms, API, preferences } from './api.js';
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAA4B,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAA4B,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,aAAa,EAA2B,MAAM,WAAW,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAiF,MAAM,SAAS,CAAA;AAC9I,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAgE,MAAM,SAAS,CAAA;AACjM,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,KAAK,EAA2B,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA"}
|