@unisim/sdk 0.127.0 → 0.128.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/README.md +10 -0
- package/dist/AboutAppDialog.d.ts +93 -1
- package/dist/AboutAppDialog.d.ts.map +1 -1
- package/dist/AboutAppDialog.js +126 -3
- package/dist/AboutAppDialog.js.map +1 -1
- package/dist/SignInDialog.d.ts +8 -1
- package/dist/SignInDialog.d.ts.map +1 -1
- package/dist/SignInDialog.js +68 -35
- package/dist/SignInDialog.js.map +1 -1
- package/dist/emailAuth.d.ts +59 -0
- package/dist/emailAuth.d.ts.map +1 -0
- package/dist/emailAuth.js +115 -0
- package/dist/emailAuth.js.map +1 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +112 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/mockAuth.d.ts.map +1 -1
- package/dist/mockAuth.js +31 -2
- package/dist/mockAuth.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -55,6 +55,16 @@ function Header() {
|
|
|
55
55
|
- `useOrg()` — active org + list of orgs the user belongs to
|
|
56
56
|
- `signInWithPassword(supabase, email, password)`
|
|
57
57
|
- `signOut(supabase)`
|
|
58
|
+
- `continueWithEmail(supabase, { email, password })` — **the unified form.** Signs
|
|
59
|
+
in, or creates the account if there isn't one, and reports which happened:
|
|
60
|
+
`signed-in` · `created` · `upgraded` · `unconfirmed` · `account-exists` ·
|
|
61
|
+
`trial-collision` · `error`. There is no "does this email exist?" probe — the
|
|
62
|
+
sign-in is attempted first, so an account's existence is only ever disclosed
|
|
63
|
+
to someone who already submitted a password for it.
|
|
64
|
+
- `abandonTrialAndSignInWithEmail(supabase, { email, password })` — the
|
|
65
|
+
`trial-collision` escape hatch: drop the anonymous session and sign in for
|
|
66
|
+
real, leaving the trial work behind. Only after the user has agreed to that.
|
|
67
|
+
- `<SignInDialog />` renders all of the above; apps rarely need the functions.
|
|
58
68
|
|
|
59
69
|
### Trial mode (anonymous-auth users)
|
|
60
70
|
- `useTrialMode()` — `{ isTrial, hasSession, email }` for gating exports / multi-user
|
package/dist/AboutAppDialog.d.ts
CHANGED
|
@@ -1,5 +1,65 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import { type MenuTheme } from './menuTheme.js';
|
|
3
|
+
/** One open-source package this app is built on, as `gen-credits.mjs` emits it. */
|
|
4
|
+
export interface CreditsPackage {
|
|
5
|
+
/** The npm name — the identity. */
|
|
6
|
+
name: string;
|
|
7
|
+
/** How the project spells itself ("Tailwind CSS", not "tailwindcss"). Curated. */
|
|
8
|
+
title?: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
licence?: string;
|
|
11
|
+
repo?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The people, most significant first. Rendered as "A, B et al." — always
|
|
14
|
+
* "et al.", because at most two are named and every one of these projects
|
|
15
|
+
* has more contributors than that, so the qualifier is true in every case
|
|
16
|
+
* and its absence would be the lie. It is also Latin, and read as such in
|
|
17
|
+
* all eight of our languages, so it is deliberately not a translated string.
|
|
18
|
+
*/
|
|
19
|
+
authors?: string[];
|
|
20
|
+
/** What it does FOR US, in the reader's words. Curated; not npm's blurb. */
|
|
21
|
+
description?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* An app's generated `credits.json`. Two tiers, and the split is not cosmetic:
|
|
25
|
+
* `ships` is what reaches the user's machine and therefore what carries the
|
|
26
|
+
* MIT/BSD/Apache obligation; `builds` never leaves our build server and is
|
|
27
|
+
* credited purely as courtesy. Collapsing them would either over-claim an
|
|
28
|
+
* obligation or bury the packages that actually have one.
|
|
29
|
+
*/
|
|
30
|
+
export interface AppCredits {
|
|
31
|
+
ships?: CreditsPackage[];
|
|
32
|
+
builds?: CreditsPackage[];
|
|
33
|
+
/** How many packages the notices file covers — the direct deps plus their trees. */
|
|
34
|
+
noticesCount?: number;
|
|
35
|
+
}
|
|
36
|
+
/** One name in the "designed by" line, and where it points. */
|
|
37
|
+
export interface AuthorshipCredit {
|
|
38
|
+
href: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Who designed the app — the line at the foot of the dialog.
|
|
42
|
+
*
|
|
43
|
+
* Only the hrefs live here. The designer's NAME is a constant below and the
|
|
44
|
+
* team's reads out of the dictionary, because the two halves are different
|
|
45
|
+
* kinds of string: "James Markey MBE" is a person and a British honour, which
|
|
46
|
+
* is the same in all eight languages, whereas "the UNI·SIM team" is a common
|
|
47
|
+
* noun wrapped round a brand and is not ("l’équipe UNI·SIM", "UNI·SIM ekibi").
|
|
48
|
+
* Putting the team's label in the prop would have frozen it in English.
|
|
49
|
+
*/
|
|
50
|
+
export interface AppAuthorship {
|
|
51
|
+
designer: AuthorshipCredit;
|
|
52
|
+
team: AuthorshipCredit;
|
|
53
|
+
}
|
|
54
|
+
/** The designer, spelled once. A proper noun: never translated. */
|
|
55
|
+
export declare const AUTHORSHIP_DESIGNER = "James Markey MBE";
|
|
56
|
+
/**
|
|
57
|
+
* Every app in the suite is designed by the same person and the same team, so
|
|
58
|
+
* this is a default rather than a prop each app passes — seventeen apps
|
|
59
|
+
* hand-typing one sentence is seventeen chances to spell it differently, and
|
|
60
|
+
* the sentence names a real person.
|
|
61
|
+
*/
|
|
62
|
+
export declare const DEFAULT_AUTHORSHIP: AppAuthorship;
|
|
3
63
|
export interface AboutAppDialogProps {
|
|
4
64
|
open: boolean;
|
|
5
65
|
onClose: () => void;
|
|
@@ -51,6 +111,38 @@ export interface AboutAppDialogProps {
|
|
|
51
111
|
* whose whole point is a server.
|
|
52
112
|
*/
|
|
53
113
|
privacy?: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* The app's generated `credits.json` — the open-source projects it is built
|
|
116
|
+
* on. **Omitted, the whole section is omitted**, which is the point: this
|
|
117
|
+
* shipped to one app first and the other sixteen render exactly what they
|
|
118
|
+
* rendered before, with no per-app change and nothing to co-ordinate.
|
|
119
|
+
*
|
|
120
|
+
* ⚠️ Generate it, never hand-write it. `Universal_Apps/scripts/gen-credits.mjs`
|
|
121
|
+
* reads the installed tree; a typed list drifts from the lockfile the first
|
|
122
|
+
* time anyone upgrades anything, and a credits list that names a package we
|
|
123
|
+
* removed is worse than no list.
|
|
124
|
+
*/
|
|
125
|
+
credits?: AppCredits;
|
|
126
|
+
/**
|
|
127
|
+
* The app's `THIRD-PARTY-NOTICES.md` — the full licence texts. This is the
|
|
128
|
+
* artefact that actually discharges the licences; the list above is the
|
|
129
|
+
* courtesy. Omitted, the link is hidden rather than pointing at nothing.
|
|
130
|
+
*/
|
|
131
|
+
noticesHref?: string;
|
|
132
|
+
/**
|
|
133
|
+
* Who designed the app, as the quiet line at the foot of the dialog.
|
|
134
|
+
*
|
|
135
|
+
* Defaults to the suite credit, so it appears in every app that mounts this
|
|
136
|
+
* dialog with no per-app change — that is the point of it living here.
|
|
137
|
+
* Pass `null` for an app that is genuinely somebody else's work.
|
|
138
|
+
*
|
|
139
|
+
* ⚠️ **This is not, on its own, worth anything to a search engine.** The
|
|
140
|
+
* dialog is a portal that only enters the DOM once a user opens it, so a
|
|
141
|
+
* crawler never sees it. The machine-readable half of this credit is the
|
|
142
|
+
* `SoftwareApplication.author` JSON-LD on the product's marketing page in
|
|
143
|
+
* `UNI_SIM_Website`; this line is what a reader who opens the dialog sees.
|
|
144
|
+
*/
|
|
145
|
+
authorship?: AppAuthorship | null;
|
|
54
146
|
/** Defaults to MIT — every Universal App. */
|
|
55
147
|
licence?: string;
|
|
56
148
|
changelogHref?: string;
|
|
@@ -59,5 +151,5 @@ export interface AboutAppDialogProps {
|
|
|
59
151
|
siteHref?: string;
|
|
60
152
|
theme?: MenuTheme;
|
|
61
153
|
}
|
|
62
|
-
export declare function AboutAppDialog({ open, onClose, product, name, tagline, description, version, repo, proof, subject, plural, except, headline, privacy, licence, changelogHref, supportHref, siteHref, theme, }: AboutAppDialogProps): import("react").ReactPortal | null;
|
|
154
|
+
export declare function AboutAppDialog({ open, onClose, product, name, tagline, description, version, repo, proof, subject, plural, except, headline, privacy, credits, noticesHref, authorship, licence, changelogHref, supportHref, siteHref, theme, }: AboutAppDialogProps): import("react").ReactPortal | null;
|
|
63
155
|
//# sourceMappingURL=AboutAppDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AboutAppDialog.d.ts","sourceRoot":"","sources":["../src/AboutAppDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"AboutAppDialog.d.ts","sourceRoot":"","sources":["../src/AboutAppDialog.tsx"],"names":[],"mappings":"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"}
|
package/dist/AboutAppDialog.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect } from 'react';
|
|
3
|
+
import { Fragment, useEffect } from 'react';
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
import { NAV_OVERLAY_Z_INDEX } from './DropdownSurface.js';
|
|
6
6
|
import { t } from './i18n.js';
|
|
@@ -8,6 +8,18 @@ import { MENU } from './menuTheme.js';
|
|
|
8
8
|
import { useLanguage, useUniversal } from './provider.js';
|
|
9
9
|
import { PrivacyNote } from './PrivacyNote.js';
|
|
10
10
|
import { DEFAULT_SUITE_PRODUCTS, DEFAULT_UNIVERSAL_APPS_PRODUCTS, } from './SuiteSwitcher.js';
|
|
11
|
+
/** The designer, spelled once. A proper noun: never translated. */
|
|
12
|
+
export const AUTHORSHIP_DESIGNER = 'James Markey MBE';
|
|
13
|
+
/**
|
|
14
|
+
* Every app in the suite is designed by the same person and the same team, so
|
|
15
|
+
* this is a default rather than a prop each app passes — seventeen apps
|
|
16
|
+
* hand-typing one sentence is seventeen chances to spell it differently, and
|
|
17
|
+
* the sentence names a real person.
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_AUTHORSHIP = {
|
|
20
|
+
designer: { href: 'https://www.unisim.co.uk/about-james' },
|
|
21
|
+
team: { href: 'https://www.unisim.co.uk/blog/welcome-to-uni-sim' },
|
|
22
|
+
};
|
|
11
23
|
const CATALOGUE = [
|
|
12
24
|
...DEFAULT_UNIVERSAL_APPS_PRODUCTS,
|
|
13
25
|
...DEFAULT_SUITE_PRODUCTS,
|
|
@@ -17,7 +29,7 @@ function lookup(product) {
|
|
|
17
29
|
return undefined;
|
|
18
30
|
return CATALOGUE.find((p) => p.id === product);
|
|
19
31
|
}
|
|
20
|
-
export function AboutAppDialog({ open, onClose, product, name, tagline, description, version, repo, proof, subject, plural, except = null, headline, privacy = true, licence = 'MIT', changelogHref = 'https://changelog.unisim.co.uk', supportHref = 'https://unisim.co.uk/#contact', siteHref, theme = 'light', }) {
|
|
32
|
+
export function AboutAppDialog({ open, onClose, product, name, tagline, description, version, repo, proof, subject, plural, except = null, headline, privacy = true, credits, noticesHref, authorship = DEFAULT_AUTHORSHIP, licence = 'MIT', changelogHref = 'https://changelog.unisim.co.uk', supportHref = 'https://unisim.co.uk/#contact', siteHref, theme = 'light', }) {
|
|
21
33
|
const { language } = useLanguage();
|
|
22
34
|
const { config } = useUniversal();
|
|
23
35
|
const p = MENU[theme];
|
|
@@ -35,9 +47,50 @@ export function AboutAppDialog({ open, onClose, product, name, tagline, descript
|
|
|
35
47
|
return null;
|
|
36
48
|
const entry = lookup(product ?? config.product);
|
|
37
49
|
const title = name ?? entry?.name ?? 'This app';
|
|
50
|
+
// An entry the generator could not resolve carries no version and no repo;
|
|
51
|
+
// printing its bare npm name would credit nobody and look like a bug, so it
|
|
52
|
+
// is dropped here rather than rendered half-empty.
|
|
53
|
+
const ships = (credits?.ships ?? []).filter((c) => c.name && (c.repo || c.authors?.length));
|
|
54
|
+
// Joined with commas only, never a localised "and": the eight languages
|
|
55
|
+
// disagree about the conjunction AND about the comma before it, and a list
|
|
56
|
+
// of three tool names does not need one.
|
|
57
|
+
const tools = (credits?.builds ?? []).map((c) => c.title ?? c.name).join(', ');
|
|
38
58
|
const line = tagline ?? entry?.desc;
|
|
39
59
|
const site = siteHref ?? entry?.href;
|
|
40
|
-
return createPortal(_jsx("div", { style: overlayStyle, onClick: onClose, role: "presentation", children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": `${t(language, 'menu.about_app')} — ${title}`, style: cardStyle(p), onClick: (e) => e.stopPropagation(), children: [_jsx("button", { type: "button", onClick: onClose, "aria-label": t(language, 'nav.menu_close'), style: closeButtonStyle(p), onMouseEnter: (e) => { e.currentTarget.style.color = p.text; }, onMouseLeave: (e) => { e.currentTarget.style.color = p.muted; }, children: _jsx(IconClose, {}) }), _jsxs("div", { style: identityRowStyle, children: [entry?.glyph && _jsx("span", { style: markTileStyle(p), "aria-hidden": true, children: entry.glyph }), _jsxs("div", { style: { minWidth: 0 }, children: [_jsx("h2", { style: titleStyle(p), children: title }), site && _jsx("a", { href: site, target: "_blank", rel: "noopener noreferrer", style: siteLinkStyle(p), children: stripScheme(site) })] })] }), _jsxs("div", { style: { display: 'grid', gap: 14 }, children: [(description || line) && (_jsx(Section, { label: t(language, 'about.what_it_does'), palette: p, children: _jsx("p", { style: bodyStyle(p), children: description ?? line }) })), privacy && (_jsx(Section, { label: t(language, 'about.privacy'), palette: p, children: _jsx(PrivacyNote, { dismissible: false, theme: theme, repo: repo, proof: proof, subject: subject, plural: plural, except: except, headline: headline }) })), _jsxs(Section, { label: t(language, 'about.open_source'), palette: p, children: [_jsx("p", { style: bodyStyle(p), children: t(language, 'about.open_source_body').replace('{licence}', licence) }), _jsxs("div", { style: linkRowStyle, children: [_jsx(Link, { href: repo, palette: p, children: t(language, 'about.view_source') }), _jsx(Link, { href: `${repo.replace(/\/+$/, '')}/issues`, palette: p, children: t(language, 'about.report_problem') })] })] }),
|
|
60
|
+
return createPortal(_jsx("div", { style: overlayStyle, onClick: onClose, role: "presentation", children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": `${t(language, 'menu.about_app')} — ${title}`, style: cardStyle(p), onClick: (e) => e.stopPropagation(), children: [_jsx("button", { type: "button", onClick: onClose, "aria-label": t(language, 'nav.menu_close'), style: closeButtonStyle(p), onMouseEnter: (e) => { e.currentTarget.style.color = p.text; }, onMouseLeave: (e) => { e.currentTarget.style.color = p.muted; }, children: _jsx(IconClose, {}) }), _jsxs("div", { style: identityRowStyle, children: [entry?.glyph && _jsx("span", { style: markTileStyle(p), "aria-hidden": true, children: entry.glyph }), _jsxs("div", { style: { minWidth: 0 }, children: [_jsx("h2", { style: titleStyle(p), children: title }), site && _jsx("a", { href: site, target: "_blank", rel: "noopener noreferrer", style: siteLinkStyle(p), children: stripScheme(site) })] })] }), _jsxs("div", { style: { display: 'grid', gap: 14 }, children: [(description || line) && (_jsx(Section, { label: t(language, 'about.what_it_does'), palette: p, children: _jsx("p", { style: bodyStyle(p), children: description ?? line }) })), privacy && (_jsx(Section, { label: t(language, 'about.privacy'), palette: p, children: _jsx(PrivacyNote, { dismissible: false, theme: theme, repo: repo, proof: proof, subject: subject, plural: plural, except: except, headline: headline }) })), _jsxs(Section, { label: t(language, 'about.open_source'), palette: p, children: [_jsx("p", { style: bodyStyle(p), children: t(language, 'about.open_source_body').replace('{licence}', licence) }), _jsxs("div", { style: linkRowStyle, children: [_jsx(Link, { href: repo, palette: p, children: t(language, 'about.view_source') }), _jsx(Link, { href: `${repo.replace(/\/+$/, '')}/issues`, palette: p, children: t(language, 'about.report_problem') })] })] }), ships.length > 0 && (_jsxs(Section, { label: t(language, 'about.built_with'), palette: p, children: [_jsx("p", { style: bodyStyle(p), children: t(language, 'about.built_with_body') }), _jsx("ul", { style: creditsListStyle, children: ships.map((c, i) => (_jsxs("li", { style: creditRowStyle(p, i === 0), children: [_jsxs("span", { style: creditHeadStyle, children: [c.repo
|
|
61
|
+
? _jsx("a", { href: c.repo, target: "_blank", rel: "noopener noreferrer", style: creditNameStyle(p), children: c.title ?? c.name })
|
|
62
|
+
: _jsx("span", { style: { ...creditNameStyle(p), color: p.text }, children: c.title ?? c.name }), c.licence && _jsx("span", { style: creditLicenceStyle(p), children: c.licence })] }), byline(c) && _jsx("p", { style: creditByStyle(p), children: byline(c) })] }, c.name))) }), tools && (_jsx("p", { style: { ...bodyStyle(p), marginTop: 8, color: p.muted, fontSize: 11.5 }, children: t(language, 'about.built_with_tools').replace('{tools}', tools) })), noticesHref && (_jsx("div", { style: noticesRowStyle(p), children: _jsx(Link, { href: noticesHref, palette: p, children: t(language, 'about.all_packages').replace('{count}', String(credits?.noticesCount ?? ships.length)) }) }))] })), version && (_jsxs(Section, { label: t(language, 'about.version'), palette: p, children: [_jsx("p", { style: bodyStyle(p), children: _jsxs("span", { style: versionChipStyle(p), children: ["v", version] }) }), _jsx(Link, { href: changelogHref, palette: p, children: t(language, 'about.whats_new') })] })), _jsxs(Section, { label: t(language, 'about.support'), palette: p, children: [_jsx("p", { style: bodyStyle(p), children: t(language, 'about.support_body') }), _jsx(Link, { href: supportHref, palette: p, children: t(language, 'about.contact') })] })] }), authorship && (_jsx("footer", { style: colophonStyle(p), children: _jsx("p", { style: colophonTextStyle(p), children: interleave(t(language, 'about.designed_by'), {
|
|
63
|
+
designer: (_jsx("a", { href: authorship.designer.href, target: "_blank", rel: "noopener noreferrer", style: colophonLinkStyle(p), children: AUTHORSHIP_DESIGNER }, "designer")),
|
|
64
|
+
team: (_jsx("a", { href: authorship.team.href, target: "_blank", rel: "noopener noreferrer", style: colophonLinkStyle(p), children: t(language, 'about.the_team') }, "team")),
|
|
65
|
+
}) }) }))] }) }), document.body);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* "Andrew Dillon et al. · reads and writes the PDF itself" — people first,
|
|
69
|
+
* because they are the point of the section, and the middot only when both
|
|
70
|
+
* halves exist. A package with neither renders no byline at all rather than a
|
|
71
|
+
* stray separator.
|
|
72
|
+
*/
|
|
73
|
+
function byline(c) {
|
|
74
|
+
const who = c.authors?.length ? `${c.authors.join(', ')} et al.` : '';
|
|
75
|
+
return [who, c.description].filter(Boolean).join(' \u00b7 ');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Split a translated sentence on its `{placeholder}`s and drop the matching
|
|
79
|
+
* nodes in. `t()` returns a string, so a sentence with a link in the middle of
|
|
80
|
+
* it cannot be built any other way without either splitting the sentence into
|
|
81
|
+
* fragments a translator cannot see the shape of, or reaching for
|
|
82
|
+
* dangerouslySetInnerHTML on a string we would then have to trust.
|
|
83
|
+
*
|
|
84
|
+
* An unknown placeholder is left as written rather than dropped: a visible
|
|
85
|
+
* `{typo}` is a bug report, a silent gap is a sentence missing a word.
|
|
86
|
+
*/
|
|
87
|
+
function interleave(template, values) {
|
|
88
|
+
return template.split(/(\{\w+\})/g).map((part, i) => {
|
|
89
|
+
const key = /^\{(\w+)\}$/.exec(part)?.[1];
|
|
90
|
+
return key && key in values
|
|
91
|
+
? _jsx(Fragment, { children: values[key] }, i)
|
|
92
|
+
: _jsx(Fragment, { children: part }, i);
|
|
93
|
+
});
|
|
41
94
|
}
|
|
42
95
|
/** `https://opensource.unisim.co.uk/pdf` reads better as the host and path. */
|
|
43
96
|
function stripScheme(url) {
|
|
@@ -167,4 +220,74 @@ const versionChipStyle = (p) => ({
|
|
|
167
220
|
fontWeight: 700,
|
|
168
221
|
fontVariantNumeric: 'tabular-nums',
|
|
169
222
|
});
|
|
223
|
+
const creditsListStyle = {
|
|
224
|
+
listStyle: 'none',
|
|
225
|
+
margin: '6px 0 0',
|
|
226
|
+
padding: 0,
|
|
227
|
+
display: 'flex',
|
|
228
|
+
flexDirection: 'column',
|
|
229
|
+
};
|
|
230
|
+
// ⚠️ The rule goes BETWEEN rows, so the first one has none. Inline styles have
|
|
231
|
+
// no `:first-child`, which is why the index is threaded through rather than
|
|
232
|
+
// this being a stylesheet concern — a rule above the top row reads as a divider
|
|
233
|
+
// cutting the list off from the sentence that introduces it.
|
|
234
|
+
const creditRowStyle = (p, first) => ({
|
|
235
|
+
padding: first ? '0 0 6px' : '6px 0',
|
|
236
|
+
borderTop: first ? 0 : `1px solid ${p.divider}`,
|
|
237
|
+
});
|
|
238
|
+
const creditHeadStyle = {
|
|
239
|
+
display: 'flex',
|
|
240
|
+
alignItems: 'baseline',
|
|
241
|
+
justifyContent: 'space-between',
|
|
242
|
+
gap: 10,
|
|
243
|
+
};
|
|
244
|
+
const creditNameStyle = (p) => ({
|
|
245
|
+
fontSize: 12.5,
|
|
246
|
+
fontWeight: 600,
|
|
247
|
+
color: p.accentText,
|
|
248
|
+
textDecoration: 'none',
|
|
249
|
+
});
|
|
250
|
+
const creditLicenceStyle = (p) => ({
|
|
251
|
+
flexShrink: 0,
|
|
252
|
+
fontSize: 10.5,
|
|
253
|
+
fontWeight: 600,
|
|
254
|
+
color: p.chipText,
|
|
255
|
+
background: p.chipBg,
|
|
256
|
+
border: `1px solid ${p.chipBorder}`,
|
|
257
|
+
borderRadius: 999,
|
|
258
|
+
padding: '1px 7px',
|
|
259
|
+
whiteSpace: 'nowrap',
|
|
260
|
+
fontVariantNumeric: 'tabular-nums',
|
|
261
|
+
});
|
|
262
|
+
const creditByStyle = (p) => ({
|
|
263
|
+
margin: 0,
|
|
264
|
+
fontSize: 11.5,
|
|
265
|
+
lineHeight: 1.45,
|
|
266
|
+
color: p.muted,
|
|
267
|
+
});
|
|
268
|
+
const noticesRowStyle = (p) => ({
|
|
269
|
+
borderTop: `1px solid ${p.divider}`,
|
|
270
|
+
marginTop: 2,
|
|
271
|
+
paddingTop: 4,
|
|
272
|
+
});
|
|
273
|
+
const colophonStyle = (p) => ({
|
|
274
|
+
borderTop: `1px solid ${p.divider}`,
|
|
275
|
+
marginTop: 16,
|
|
276
|
+
paddingTop: 10,
|
|
277
|
+
});
|
|
278
|
+
const colophonTextStyle = (p) => ({
|
|
279
|
+
margin: 0,
|
|
280
|
+
fontSize: 11.5,
|
|
281
|
+
lineHeight: 1.5,
|
|
282
|
+
color: p.faint,
|
|
283
|
+
});
|
|
284
|
+
// Underlined rather than coloured: at this size the accent reads as a button
|
|
285
|
+
// row, and the line is meant to be found, not offered.
|
|
286
|
+
const colophonLinkStyle = (p) => ({
|
|
287
|
+
color: p.muted,
|
|
288
|
+
fontWeight: 600,
|
|
289
|
+
textDecoration: 'underline',
|
|
290
|
+
textDecorationColor: p.divider,
|
|
291
|
+
textUnderlineOffset: '2px',
|
|
292
|
+
});
|
|
170
293
|
//# sourceMappingURL=AboutAppDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AboutAppDialog.js","sourceRoot":"","sources":["../src/AboutAppDialog.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AboutAppDialog.js","sourceRoot":"","sources":["../src/AboutAppDialog.tsx"],"names":[],"mappings":"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"}
|
package/dist/SignInDialog.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retained for callers pinned to older SDKs. `'signin'` and `'signup'` are now
|
|
3
|
+
* the same thing — the unified form — and only `'reset'` opens a different one.
|
|
4
|
+
*/
|
|
1
5
|
export type SignInDialogMode = 'signin' | 'signup' | 'reset';
|
|
2
6
|
export interface SignInDialogProps {
|
|
3
7
|
/** Whether the dialog is shown. */
|
|
@@ -11,7 +15,10 @@ export interface SignInDialogProps {
|
|
|
11
15
|
* the footer "manage your account" link points at the origin.
|
|
12
16
|
*/
|
|
13
17
|
hubLoginHref?: string;
|
|
14
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Which form to open on. Only `'reset'` changes anything now: `'signin'` and
|
|
20
|
+
* `'signup'` both open the one unified email + password form.
|
|
21
|
+
*/
|
|
15
22
|
initialMode?: SignInDialogMode;
|
|
16
23
|
}
|
|
17
24
|
export declare function SignInDialog({ open, onClose, hubLoginHref, initialMode, }: SignInDialogProps): import("react").ReactPortal | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignInDialog.d.ts","sourceRoot":"","sources":["../src/SignInDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SignInDialog.d.ts","sourceRoot":"","sources":["../src/SignInDialog.tsx"],"names":[],"mappings":"AAqDA;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,qFAAqF;IACrF,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAA;CAC/B;AAgBD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,WAAsB,GACvB,EAAE,iBAAiB,sCA6UnB"}
|
package/dist/SignInDialog.js
CHANGED
|
@@ -9,6 +9,7 @@ import { useLanguage, useUniversal } from './provider.js';
|
|
|
9
9
|
import { useCanHover } from './hover.js';
|
|
10
10
|
import { OAuthButtons } from './OAuthButtons.js';
|
|
11
11
|
import { abandonTrialAndSignIn, clearOAuthError, isIdentityCollision, isManualLinkingDisabled, readOAuthError, startOAuthSignIn, } from './oauth.js';
|
|
12
|
+
import { continueWithEmail } from './emailAuth.js';
|
|
12
13
|
// Reset links must land somewhere that can host the set-a-password step; the
|
|
13
14
|
// hub's /login?finish=1 already does and is on Supabase's redirect allowlist,
|
|
14
15
|
// unlike each app's own origin.
|
|
@@ -34,6 +35,10 @@ export function SignInDialog({ open, onClose, hubLoginHref, initialMode = 'signi
|
|
|
34
35
|
const [error, setError] = useState(null);
|
|
35
36
|
const [info, setInfo] = useState(null);
|
|
36
37
|
const emailRef = useRef(null);
|
|
38
|
+
// The one outcome that needs a panel rather than a line of text, because it
|
|
39
|
+
// ends in a button — and the one the old two-form design could not say at
|
|
40
|
+
// all: the address is registered and this is not its password.
|
|
41
|
+
const [accountExists, setAccountExists] = useState(false);
|
|
37
42
|
// Provider sign-in. `oauthBusy` names the provider whose redirect is in
|
|
38
43
|
// flight; `oauthError` is either a failure to START one or — far more often —
|
|
39
44
|
// one read back off the URL after a failed round trip.
|
|
@@ -50,6 +55,7 @@ export function SignInDialog({ open, onClose, hubLoginHref, initialMode = 'signi
|
|
|
50
55
|
setPassword('');
|
|
51
56
|
setError(null);
|
|
52
57
|
setInfo(null);
|
|
58
|
+
setAccountExists(false);
|
|
53
59
|
setOauthBusy(null);
|
|
54
60
|
setOauthError(null);
|
|
55
61
|
setCollisionProvider(null);
|
|
@@ -117,7 +123,31 @@ export function SignInDialog({ open, onClose, hubLoginHref, initialMode = 'signi
|
|
|
117
123
|
setMode(m);
|
|
118
124
|
setError(null);
|
|
119
125
|
setInfo(null);
|
|
126
|
+
setAccountExists(false);
|
|
120
127
|
};
|
|
128
|
+
function applyOutcome(outcome) {
|
|
129
|
+
switch (outcome.kind) {
|
|
130
|
+
case 'signed-in':
|
|
131
|
+
// The provider's onAuthStateChange updates the navbar; nothing to
|
|
132
|
+
// navigate to — the whole point is the user stays where they were.
|
|
133
|
+
onClose();
|
|
134
|
+
return;
|
|
135
|
+
case 'created':
|
|
136
|
+
setInfo(t(language, 'signin.info_created'));
|
|
137
|
+
return;
|
|
138
|
+
case 'upgraded':
|
|
139
|
+
setInfo(t(language, 'signin.info_signup'));
|
|
140
|
+
return;
|
|
141
|
+
case 'unconfirmed':
|
|
142
|
+
setInfo(t(language, 'signin.info_unconfirmed'));
|
|
143
|
+
return;
|
|
144
|
+
case 'account-exists':
|
|
145
|
+
setAccountExists(true);
|
|
146
|
+
return;
|
|
147
|
+
case 'error':
|
|
148
|
+
setError(outcome.message);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
121
151
|
async function submit(e) {
|
|
122
152
|
e.preventDefault();
|
|
123
153
|
const address = email.trim();
|
|
@@ -128,9 +158,11 @@ export function SignInDialog({ open, onClose, hubLoginHref, initialMode = 'signi
|
|
|
128
158
|
setBusy(true);
|
|
129
159
|
setError(null);
|
|
130
160
|
setInfo(null);
|
|
161
|
+
setAccountExists(false);
|
|
131
162
|
if (mode === 'reset') {
|
|
132
|
-
// Same confirmation whether or not the address exists
|
|
133
|
-
//
|
|
163
|
+
// Same confirmation whether or not the address exists. Unlike the form
|
|
164
|
+
// above this one takes no password, so it can prove nothing about who
|
|
165
|
+
// holds the account and must therefore say nothing.
|
|
134
166
|
const { error: err } = await supabase.auth.resetPasswordForEmail(address, {
|
|
135
167
|
redirectTo: `${hubOrigin(hubLoginHref)}/login?finish=1`,
|
|
136
168
|
});
|
|
@@ -142,54 +174,36 @@ export function SignInDialog({ open, onClose, hubLoginHref, initialMode = 'signi
|
|
|
142
174
|
setInfo(t(language, 'signin.info_reset'));
|
|
143
175
|
return;
|
|
144
176
|
}
|
|
145
|
-
if
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
setBusy(false);
|
|
151
|
-
if (err) {
|
|
152
|
-
setError(err.message);
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
// The provider's onAuthStateChange updates the navbar; nothing to
|
|
156
|
-
// navigate to — the whole point is the user stays where they were.
|
|
157
|
-
onClose();
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
// mode === 'signup'. No emailRedirectTo: app origins aren't on the
|
|
161
|
-
// Supabase redirect allowlist, so the confirmation link lands on the
|
|
162
|
-
// project Site URL (the hub) exactly as hub-side signups do today.
|
|
163
|
-
const { error: err } = await supabase.auth.signUp({ email: address, password });
|
|
177
|
+
// Sign in, or create the account if there isn't one. No emailRedirectTo:
|
|
178
|
+
// app origins aren't on the Supabase redirect allowlist, so a confirmation
|
|
179
|
+
// link lands on the project Site URL (the hub), exactly as hub-side
|
|
180
|
+
// signups do today.
|
|
181
|
+
const outcome = await continueWithEmail(supabase, { email: address, password });
|
|
164
182
|
setBusy(false);
|
|
165
|
-
|
|
166
|
-
setError(err.message);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
setInfo(t(language, 'signin.info_signup'));
|
|
183
|
+
applyOutcome(outcome);
|
|
170
184
|
}
|
|
171
185
|
if (!open || typeof document === 'undefined')
|
|
172
186
|
return null;
|
|
173
|
-
const title = mode === '
|
|
174
|
-
: mode === 'reset' ? t(language, 'signin.title_reset')
|
|
175
|
-
: t(language, 'signin.title_signin');
|
|
187
|
+
const title = mode === 'reset' ? t(language, 'signin.title_reset') : t(language, 'signin.title_auth');
|
|
176
188
|
const cta = busy
|
|
177
189
|
? '…'
|
|
178
|
-
: mode === '
|
|
179
|
-
: mode === 'reset' ? t(language, 'signin.cta_reset')
|
|
180
|
-
: t(language, 'signin.cta_signin');
|
|
190
|
+
: mode === 'reset' ? t(language, 'signin.cta_reset') : t(language, 'signin.cta_continue');
|
|
181
191
|
const hub = hubOrigin(hubLoginHref);
|
|
182
192
|
return createPortal(_jsx("div", { style: overlayStyle, onMouseDown: (e) => {
|
|
183
193
|
if (e.target === e.currentTarget)
|
|
184
194
|
onClose();
|
|
185
|
-
}, children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": title, style: cardStyle, children: [_jsx("button", { type: "button", "aria-label": t(language, 'signin.close'), onClick: onClose, style: closeButtonStyle, children: _jsx(IconClose, {}) }), _jsx("p", { style: eyebrowStyle, children: "Universal ID" }), _jsx("h2", { style: titleStyle, children: title }), _jsx("p", { style: introStyle, children: t(language, 'signin.intro') }), mode !== 'reset' && (_jsxs("div", { style: { marginTop: 18 }, children: [_jsx(OAuthButtons, { onProvider: onProvider, busyProvider: oauthBusy, disabled: busy, labelFor: (p) => t(language, p === 'google' ? 'signin.continue_google' : 'signin.continue_microsoft'), dividerLabel: t(language, 'signin.or_email'), note: isAnonymous ? t(language, 'signin.trial_carries') : null }), oauthError && (_jsx("div", { style: oauthErrorStyle, children: collisionProvider ? (_jsxs(_Fragment, { children: [_jsx("p", { style: { margin: 0, fontWeight: 700 }, children: t(language, 'signin.collision_title') }), _jsx("p", { style: { margin: '4px 0 0', fontWeight: 400 }, children: t(language, 'signin.collision_body') }), _jsx("button", { type: "button", onClick: () => onAbandonTrial(collisionProvider), style: collisionButtonStyle, children: t(language, 'signin.collision_cta') })] })) : (_jsx("p", { style: { margin: 0 }, children: isManualLinkingDisabled(oauthError)
|
|
195
|
+
}, children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": title, style: cardStyle, children: [_jsx("button", { type: "button", "aria-label": t(language, 'signin.close'), onClick: onClose, style: closeButtonStyle, children: _jsx(IconClose, {}) }), _jsx("p", { style: eyebrowStyle, children: "Universal ID" }), _jsx("h2", { style: titleStyle, children: title }), _jsx("p", { style: introStyle, children: t(language, 'signin.intro') }), mode !== 'reset' && (_jsx("p", { style: unifiedNoteStyle, children: t(language, 'signin.unified_note') })), mode !== 'reset' && isAnonymous && (_jsx("p", { style: trialChoiceStyle, children: t(language, 'signin.trial_choice') })), mode !== 'reset' && (_jsxs("div", { style: { marginTop: 18 }, children: [_jsx(OAuthButtons, { onProvider: onProvider, busyProvider: oauthBusy, disabled: busy, labelFor: (p) => t(language, p === 'google' ? 'signin.continue_google' : 'signin.continue_microsoft'), dividerLabel: t(language, 'signin.or_email'), note: isAnonymous ? t(language, 'signin.trial_carries') : null }), oauthError && (_jsx("div", { style: oauthErrorStyle, children: collisionProvider ? (_jsxs(_Fragment, { children: [_jsx("p", { style: { margin: 0, fontWeight: 700 }, children: t(language, 'signin.collision_title') }), _jsx("p", { style: { margin: '4px 0 0', fontWeight: 400 }, children: t(language, 'signin.collision_body') }), _jsx("button", { type: "button", onClick: () => onAbandonTrial(collisionProvider), style: collisionButtonStyle, children: t(language, 'signin.collision_cta') })] })) : (_jsx("p", { style: { margin: 0 }, children: isManualLinkingDisabled(oauthError)
|
|
186
196
|
? t(language, 'signin.link_unavailable')
|
|
187
|
-
: oauthError.message })) }))] })), _jsxs("form", { onSubmit: submit, style: { marginTop: 18 }, children: [_jsxs("label", { style: labelStyle, children: [t(language, 'signin.email'), _jsx("input", { ref: emailRef, type: "email", value: email, onChange: (e) => setEmail(e.target.value), autoComplete: "email", required: true, style: inputStyle(!canHover) })] }), mode !== 'reset' && (_jsxs("label", { style: { ...labelStyle, marginTop: 12 }, children: [t(language, 'signin.password'), _jsx("input", { type: "password", value: password, onChange: (e) => setPassword(e.target.value),
|
|
197
|
+
: oauthError.message })) }))] })), _jsxs("form", { onSubmit: submit, style: { marginTop: 18 }, children: [_jsxs("label", { style: labelStyle, children: [t(language, 'signin.email'), _jsx("input", { ref: emailRef, type: "email", value: email, onChange: (e) => setEmail(e.target.value), autoComplete: "email", required: true, style: inputStyle(!canHover) })] }), mode !== 'reset' && (_jsxs("label", { style: { ...labelStyle, marginTop: 12 }, children: [t(language, 'signin.password'), _jsx("input", { type: "password", value: password, onChange: (e) => setPassword(e.target.value),
|
|
198
|
+
// One box for both, so this is a returning user's password far
|
|
199
|
+
// more often than a new one — and a manager that offers to fill
|
|
200
|
+
// it beats one that offers to generate a replacement.
|
|
201
|
+
autoComplete: "current-password", required: true, style: inputStyle(!canHover) })] })), error && _jsx("p", { style: errorStyle, children: error }), info && _jsx("p", { style: infoStyle, children: info }), accountExists && (_jsxs("div", { style: oauthErrorStyle, children: [_jsx("p", { style: { margin: 0, fontWeight: 700 }, children: t(language, 'signin.exists_title') }), _jsx("p", { style: { margin: '4px 0 0', fontWeight: 400 }, children: t(language, 'signin.exists_body') }), _jsx("button", { type: "button", onClick: () => switchMode('reset'), style: collisionButtonStyle, children: t(language, 'signin.exists_cta') })] })), _jsx("button", { type: "submit", disabled: busy || !email.trim() || (mode !== 'reset' && !password), style: {
|
|
188
202
|
...submitStyle,
|
|
189
203
|
...(busy || !email.trim() || (mode !== 'reset' && !password)
|
|
190
204
|
? { opacity: 0.6, cursor: 'default' }
|
|
191
205
|
: null),
|
|
192
|
-
}, children: cta })] }), _jsxs("div", { style: footerStyle, children: [mode
|
|
206
|
+
}, children: cta })] }), _jsxs("div", { style: footerStyle, children: [mode !== 'reset' ? (_jsx(FooterRow, { prompt: "", action: t(language, 'signin.forgot'), onClick: () => switchMode('reset') })) : (_jsx(FooterRow, { prompt: t(language, 'signin.have_account'), action: t(language, 'signin.cta_signin'), onClick: () => switchMode('signin') })), _jsxs("p", { style: manageStyle, children: [t(language, 'signin.manage'), ' ', _jsx("a", { href: hub, target: "_blank", rel: "noreferrer", style: manageLinkStyle, children: hub.replace(/^https?:\/\//, '') })] })] })] }) }), document.body);
|
|
193
207
|
}
|
|
194
208
|
function FooterRow({ prompt, action, onClick, }) {
|
|
195
209
|
return (_jsxs("div", { style: footerRowStyle, children: [_jsx("span", { children: prompt }), _jsx("button", { type: "button", onClick: onClick, style: footerLinkStyle, children: action })] }));
|
|
@@ -262,6 +276,25 @@ const introStyle = {
|
|
|
262
276
|
color: '#475569',
|
|
263
277
|
lineHeight: 1.5,
|
|
264
278
|
};
|
|
279
|
+
const trialChoiceStyle = {
|
|
280
|
+
margin: '8px 0 0',
|
|
281
|
+
padding: '8px 10px',
|
|
282
|
+
borderRadius: 8,
|
|
283
|
+
border: '1px solid #fde68a',
|
|
284
|
+
background: '#fffbeb',
|
|
285
|
+
fontSize: 12,
|
|
286
|
+
lineHeight: 1.5,
|
|
287
|
+
color: '#78350f',
|
|
288
|
+
};
|
|
289
|
+
// The one line of copy that explains why there is no "create an account" tab.
|
|
290
|
+
// Deliberately quieter than the intro: it answers a question most people never
|
|
291
|
+
// think to ask, and only matters to the ones who go looking for the missing tab.
|
|
292
|
+
const unifiedNoteStyle = {
|
|
293
|
+
margin: '8px 0 0',
|
|
294
|
+
fontSize: 12,
|
|
295
|
+
color: '#64748b',
|
|
296
|
+
lineHeight: 1.5,
|
|
297
|
+
};
|
|
265
298
|
const labelStyle = {
|
|
266
299
|
display: 'block',
|
|
267
300
|
fontSize: 11,
|