@arcblock/did-connect-core 4.1.51 → 4.1.53
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/ui/design-tokens.js +4 -4
- package/dist/ui/i18n.d.ts +3 -1
- package/dist/ui/i18n.d.ts.map +1 -1
- package/dist/ui/i18n.js +92 -32
- package/dist/ui/i18n.js.map +1 -1
- package/dist/ui/index.bundle.js +804 -96
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -0
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/login-dialog.d.ts +26 -0
- package/dist/ui/login-dialog.d.ts.map +1 -0
- package/dist/ui/login-dialog.js +206 -0
- package/dist/ui/login-dialog.js.map +1 -0
- package/dist/ui/login-page.d.ts +73 -2
- package/dist/ui/login-page.d.ts.map +1 -1
- package/dist/ui/login-page.js +383 -46
- package/dist/ui/login-page.js.map +1 -1
- package/dist/ui/qr-renderer.d.ts.map +1 -1
- package/dist/ui/qr-renderer.js +19 -3
- package/dist/ui/qr-renderer.js.map +1 -1
- package/dist/ui/styles.d.ts.map +1 -1
- package/dist/ui/styles.js +84 -8
- package/dist/ui/styles.js.map +1 -1
- package/dist/ui/webauthn-browser.d.ts +1 -0
- package/dist/ui/webauthn-browser.d.ts.map +1 -1
- package/dist/ui/webauthn-browser.js +19 -9
- package/dist/ui/webauthn-browser.js.map +1 -1
- package/package.json +1 -1
package/dist/ui/index.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ export { DESIGN_RESET_CSS, DESIGN_TOKENS_CSS, DESIGN_TOKENS_LIGHT_CSS, lightToke
|
|
|
2
2
|
export { DidAddressElement } from './did-address-element.js';
|
|
3
3
|
export { SUPPORTED_LOCALES, t } from './i18n.js';
|
|
4
4
|
export { getOAuthIcon, ICON_DID_WALLET, ICON_EMAIL, ICON_PASSKEY, OAUTH_ICONS } from './icons.js';
|
|
5
|
-
export {
|
|
5
|
+
export { LoginDialog, type LoginDialogOptions } from './login-dialog.js';
|
|
6
|
+
export { type LoginEvent, type LoginMethod, LoginPage, type LoginPageOptions } from './login-page.js';
|
|
6
7
|
export { clearQR, renderQR } from './qr-renderer.js';
|
|
7
8
|
export { LOGIN_PAGE_STYLES } from './styles.js';
|
|
8
9
|
export { b64urlDecode, b64urlEncode, type PasskeyAuthOptions, runPasskeyAuth, serializeAuthentication, serializeRegistration, } from './webauthn-browser.js';
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5J,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5J,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,kBAAkB,EACvB,cAAc,EACd,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC"}
|
package/dist/ui/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export { DESIGN_RESET_CSS, DESIGN_TOKENS_CSS, DESIGN_TOKENS_LIGHT_CSS, lightToke
|
|
|
3
3
|
export { DidAddressElement } from './did-address-element.js';
|
|
4
4
|
export { SUPPORTED_LOCALES, t } from './i18n.js';
|
|
5
5
|
export { getOAuthIcon, ICON_DID_WALLET, ICON_EMAIL, ICON_PASSKEY, OAUTH_ICONS } from './icons.js';
|
|
6
|
+
export { LoginDialog } from './login-dialog.js';
|
|
6
7
|
export { LoginPage } from './login-page.js';
|
|
7
8
|
export { clearQR, renderQR } from './qr-renderer.js';
|
|
8
9
|
export { LOGIN_PAGE_STYLES } from './styles.js';
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5J,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5J,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAqC,SAAS,EAAyB,MAAM,iBAAiB,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,YAAY,EAEZ,cAAc,EACd,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Native modal shell: focus containment, inert background and focus restoration. */
|
|
2
|
+
import type { ConnectConfig, HttpAdapter } from '../types.js';
|
|
3
|
+
import { type LoginPageOptions } from './login-page.js';
|
|
4
|
+
export interface LoginDialogOptions extends LoginPageOptions {
|
|
5
|
+
/** Actual trigger, including browsers where a pointer click doesn't focus buttons. */
|
|
6
|
+
returnFocus?: HTMLElement;
|
|
7
|
+
}
|
|
8
|
+
export declare class LoginDialog {
|
|
9
|
+
private config;
|
|
10
|
+
private http;
|
|
11
|
+
private options;
|
|
12
|
+
private host?;
|
|
13
|
+
private dialog?;
|
|
14
|
+
private page?;
|
|
15
|
+
private previous?;
|
|
16
|
+
private themeObserver?;
|
|
17
|
+
private systemTheme?;
|
|
18
|
+
private syncTheme;
|
|
19
|
+
constructor(config: ConnectConfig, http: HttpAdapter, options?: LoginDialogOptions);
|
|
20
|
+
mount(): void;
|
|
21
|
+
private hostTheme;
|
|
22
|
+
setTheme(theme: 'light' | 'dark'): void;
|
|
23
|
+
private applyTheme;
|
|
24
|
+
destroy(): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=login-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-dialog.d.ts","sourceRoot":"","sources":["../../src/ui/login-dialog.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAyBnE,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,sFAAsF;IACtF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,WAAW;IAQV,OAAO,CAAC,MAAM;IAAiB,OAAO,CAAC,IAAI;IAAe,OAAO,CAAC,OAAO;IAPrF,OAAO,CAAC,IAAI,CAAC,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAmB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAA2C;gBACxC,MAAM,EAAE,aAAa,EAAU,IAAI,EAAE,WAAW,EAAU,OAAO,GAAE,kBAAuB;IAC9G,KAAK,IAAI,IAAI;IAqFb,OAAO,CAAC,SAAS;IAuBjB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAIvC,OAAO,CAAC,UAAU;IAIlB,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { DESIGN_TOKENS_CSS, DESIGN_TOKENS_LIGHT_CSS } from './design-tokens.js';
|
|
2
|
+
import { t } from './i18n.js';
|
|
3
|
+
import { LoginPage } from './login-page.js';
|
|
4
|
+
// The dialog and its ::backdrop must live in the SAME style tree. A rule in a
|
|
5
|
+
// descendant shadow root cannot style the native dialog's backdrop.
|
|
6
|
+
const DIALOG_STYLES = `${DESIGN_TOKENS_CSS}${DESIGN_TOKENS_LIGHT_CSS}
|
|
7
|
+
:host { color-scheme: dark; }
|
|
8
|
+
:host([data-theme="light"]) { color-scheme: light; }
|
|
9
|
+
dialog { box-sizing:border-box; position:fixed; inset:0; margin:auto; padding:0;
|
|
10
|
+
width:min(420px,calc(100vw - 32px)); max-width:none; max-height:calc(100dvh - 32px);
|
|
11
|
+
border:1px solid var(--border); border-radius:16px; background:var(--bg-card);
|
|
12
|
+
color:var(--text); color-scheme:inherit; overflow:hidden; box-shadow:var(--shadow-lg); }
|
|
13
|
+
dialog::backdrop { background:rgba(8,10,18,.56); }
|
|
14
|
+
:host(:not([data-theme="light"])) dialog::backdrop { background:rgba(0,0,0,.68); }
|
|
15
|
+
[data-dialog-scroll] { max-height:calc(100dvh - 34px); overflow:auto; overscroll-behavior:contain; }
|
|
16
|
+
.close { position:absolute; top:8px; right:8px; z-index:3; display:grid; place-items:center;
|
|
17
|
+
box-sizing:border-box; width:44px; height:44px; padding:0; border:1px solid transparent;
|
|
18
|
+
border-radius:10px; background:var(--bg-card); color:var(--text-secondary);
|
|
19
|
+
font:400 24px/1 system-ui,sans-serif; cursor:pointer; }
|
|
20
|
+
.close:hover { color:var(--text); background:var(--bg-hover); }
|
|
21
|
+
.close:focus-visible { outline:2px solid var(--blue); outline-offset:-3px; }
|
|
22
|
+
.host-error { padding:16px 20px; font:14px/1.5 system-ui,sans-serif; overflow-wrap:anywhere; }
|
|
23
|
+
.retry { padding:10px 16px; margin:0 20px 20px; color:var(--text); background:var(--bg-elevated);
|
|
24
|
+
border:1px solid var(--border); border-radius:8px; font:inherit; cursor:pointer; }
|
|
25
|
+
`;
|
|
26
|
+
export class LoginDialog {
|
|
27
|
+
config;
|
|
28
|
+
http;
|
|
29
|
+
options;
|
|
30
|
+
host;
|
|
31
|
+
dialog;
|
|
32
|
+
page;
|
|
33
|
+
previous;
|
|
34
|
+
themeObserver;
|
|
35
|
+
systemTheme;
|
|
36
|
+
syncTheme = () => this.applyTheme(this.hostTheme());
|
|
37
|
+
constructor(config, http, options = {}) {
|
|
38
|
+
this.config = config;
|
|
39
|
+
this.http = http;
|
|
40
|
+
this.options = options;
|
|
41
|
+
}
|
|
42
|
+
mount() {
|
|
43
|
+
if (this.dialog)
|
|
44
|
+
return;
|
|
45
|
+
let focused = document.activeElement;
|
|
46
|
+
while (focused?.shadowRoot?.activeElement)
|
|
47
|
+
focused = focused.shadowRoot.activeElement;
|
|
48
|
+
this.previous = this.options.returnFocus ?? (focused instanceof HTMLElement ? focused : undefined);
|
|
49
|
+
const host = document.createElement('div');
|
|
50
|
+
host.dataset.didLoginDialogHost = '';
|
|
51
|
+
host.style.cssText = 'position:fixed;width:0;height:0;';
|
|
52
|
+
this.host = host;
|
|
53
|
+
const root = host.attachShadow({ mode: 'open' });
|
|
54
|
+
const style = document.createElement('style');
|
|
55
|
+
style.textContent = DIALOG_STYLES;
|
|
56
|
+
root.append(style);
|
|
57
|
+
const dialog = document.createElement('dialog');
|
|
58
|
+
this.dialog = dialog;
|
|
59
|
+
dialog.setAttribute('aria-label', this.options.purpose?.title ?? t('signIn', this.options.locale));
|
|
60
|
+
root.append(dialog);
|
|
61
|
+
const close = document.createElement('button');
|
|
62
|
+
close.type = 'button';
|
|
63
|
+
close.className = 'close';
|
|
64
|
+
close.textContent = '×';
|
|
65
|
+
close.setAttribute('aria-label', t('cancel', this.options.locale));
|
|
66
|
+
const cancel = () => {
|
|
67
|
+
if (this.options.dismissible === false || this.dialog !== dialog)
|
|
68
|
+
return;
|
|
69
|
+
try {
|
|
70
|
+
this.options.onEvent?.({ name: 'cancel', mode: 'dialog' });
|
|
71
|
+
}
|
|
72
|
+
catch { /* analytics must not block cancellation */ }
|
|
73
|
+
this.destroy();
|
|
74
|
+
this.options.onCancel?.();
|
|
75
|
+
};
|
|
76
|
+
close.addEventListener('click', cancel);
|
|
77
|
+
if (this.options.dismissible !== false)
|
|
78
|
+
dialog.append(close);
|
|
79
|
+
const scroller = document.createElement('div');
|
|
80
|
+
scroller.dataset.dialogScroll = '';
|
|
81
|
+
dialog.append(scroller);
|
|
82
|
+
const container = document.createElement('div');
|
|
83
|
+
container.dataset.loginDialogMount = '';
|
|
84
|
+
scroller.append(container);
|
|
85
|
+
dialog.addEventListener('cancel', event => { event.preventDefault(); cancel(); });
|
|
86
|
+
document.body.append(host);
|
|
87
|
+
const theme = this.hostTheme();
|
|
88
|
+
host.dataset.theme = theme;
|
|
89
|
+
this.page = new LoginPage(container, this.config, this.http, {
|
|
90
|
+
...this.options, theme, isolate: true, mode: 'dialog', onCancel: cancel,
|
|
91
|
+
onLocaleChange: locale => {
|
|
92
|
+
this.options.locale = locale;
|
|
93
|
+
close.setAttribute('aria-label', t('cancel', locale));
|
|
94
|
+
dialog.setAttribute('aria-label', this.options.purpose?.title ?? t('signIn', locale));
|
|
95
|
+
this.options.onLocaleChange?.(locale);
|
|
96
|
+
},
|
|
97
|
+
onSuccess: async () => {
|
|
98
|
+
const showFailure = () => {
|
|
99
|
+
if (!dialog.isConnected || this.dialog !== dialog)
|
|
100
|
+
return;
|
|
101
|
+
for (const node of scroller.querySelectorAll('.host-error, .retry'))
|
|
102
|
+
node.remove();
|
|
103
|
+
const status = document.createElement('p');
|
|
104
|
+
status.className = 'host-error';
|
|
105
|
+
status.setAttribute('role', 'alert');
|
|
106
|
+
status.textContent = t('authFailed', this.options.locale);
|
|
107
|
+
const retry = document.createElement('button');
|
|
108
|
+
retry.type = 'button';
|
|
109
|
+
retry.className = 'retry';
|
|
110
|
+
retry.textContent = t('tryAgain', this.options.locale);
|
|
111
|
+
retry.onclick = async () => {
|
|
112
|
+
retry.disabled = true;
|
|
113
|
+
try {
|
|
114
|
+
await this.options.onSuccess?.();
|
|
115
|
+
if (this.dialog === dialog)
|
|
116
|
+
this.destroy();
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
showFailure();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
scroller.append(status, retry);
|
|
123
|
+
};
|
|
124
|
+
try {
|
|
125
|
+
await this.options.onSuccess?.();
|
|
126
|
+
if (this.dialog === dialog)
|
|
127
|
+
this.destroy();
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
showFailure();
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
this.page.mount();
|
|
135
|
+
this.themeObserver = new MutationObserver(this.syncTheme);
|
|
136
|
+
for (const target of [document.documentElement, document.body]) {
|
|
137
|
+
this.themeObserver.observe(target, { attributes: true, attributeFilter: ['data-theme', 'data-mode', 'class', 'style'] });
|
|
138
|
+
}
|
|
139
|
+
if (typeof window.matchMedia === 'function') {
|
|
140
|
+
this.systemTheme = window.matchMedia('(prefers-color-scheme: dark)');
|
|
141
|
+
this.systemTheme.addEventListener('change', this.syncTheme);
|
|
142
|
+
}
|
|
143
|
+
dialog.showModal();
|
|
144
|
+
// Focus the title without scrolling a long dialog past its introduction.
|
|
145
|
+
const title = container.shadowRoot?.querySelector('h1, h2');
|
|
146
|
+
if (title) {
|
|
147
|
+
title.tabIndex = -1;
|
|
148
|
+
title.focus({ preventScroll: true });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
hostTheme() {
|
|
152
|
+
for (const element of [document.documentElement, document.body]) {
|
|
153
|
+
for (const name of ['data-mode', 'data-theme']) {
|
|
154
|
+
const value = element.getAttribute(name);
|
|
155
|
+
if (value === 'light' || value === 'dark')
|
|
156
|
+
return value;
|
|
157
|
+
if (value === 'system' || value === 'auto')
|
|
158
|
+
return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
for (const element of [document.documentElement, document.body]) {
|
|
162
|
+
if (element.classList.contains('dark'))
|
|
163
|
+
return 'dark';
|
|
164
|
+
if (element.classList.contains('light'))
|
|
165
|
+
return 'light';
|
|
166
|
+
}
|
|
167
|
+
for (const element of [document.body, document.documentElement]) {
|
|
168
|
+
const schemes = getComputedStyle(element).colorScheme.split(/\s+/);
|
|
169
|
+
if (schemes.includes('light') && schemes.includes('dark')) {
|
|
170
|
+
return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
171
|
+
}
|
|
172
|
+
if (schemes.includes('light'))
|
|
173
|
+
return 'light';
|
|
174
|
+
if (schemes.includes('dark'))
|
|
175
|
+
return 'dark';
|
|
176
|
+
}
|
|
177
|
+
if (this.options.theme === 'light' || this.options.theme === 'dark')
|
|
178
|
+
return this.options.theme;
|
|
179
|
+
return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
180
|
+
}
|
|
181
|
+
setTheme(theme) {
|
|
182
|
+
this.options.theme = theme;
|
|
183
|
+
this.applyTheme(theme);
|
|
184
|
+
}
|
|
185
|
+
applyTheme(theme) {
|
|
186
|
+
if (this.host)
|
|
187
|
+
this.host.dataset.theme = theme;
|
|
188
|
+
this.page?.setTheme(theme);
|
|
189
|
+
}
|
|
190
|
+
destroy() {
|
|
191
|
+
this.themeObserver?.disconnect();
|
|
192
|
+
this.themeObserver = undefined;
|
|
193
|
+
this.systemTheme?.removeEventListener('change', this.syncTheme);
|
|
194
|
+
this.systemTheme = undefined;
|
|
195
|
+
this.page?.destroy();
|
|
196
|
+
this.page = undefined;
|
|
197
|
+
this.dialog?.close();
|
|
198
|
+
this.dialog?.remove();
|
|
199
|
+
this.dialog = undefined;
|
|
200
|
+
this.host?.remove();
|
|
201
|
+
this.host = undefined;
|
|
202
|
+
if (this.previous?.isConnected)
|
|
203
|
+
this.previous.focus({ preventScroll: true });
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=login-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-dialog.js","sourceRoot":"","sources":["../../src/ui/login-dialog.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/login-page.d.ts
CHANGED
|
@@ -7,7 +7,25 @@
|
|
|
7
7
|
* @browser-only — manipulates DOM.
|
|
8
8
|
*/
|
|
9
9
|
import type { ConnectConfig, HttpAdapter, OAuthProvider } from '../types.js';
|
|
10
|
+
export type LoginMethod = 'passkey' | 'oauth' | 'email' | 'did-connect';
|
|
11
|
+
export interface LoginEvent {
|
|
12
|
+
name: 'view' | 'method_selected' | 'success' | 'cancel' | 'incomplete';
|
|
13
|
+
method?: LoginMethod;
|
|
14
|
+
mode: 'page' | 'dialog';
|
|
15
|
+
}
|
|
10
16
|
export interface LoginPageOptions {
|
|
17
|
+
purpose?: {
|
|
18
|
+
title: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
};
|
|
21
|
+
preferredLayout?: 'social-first' | 'passkey-first';
|
|
22
|
+
oauthProviderOrder?: string[];
|
|
23
|
+
/** Application-scoped key; stores only a method enum, never identity data. */
|
|
24
|
+
preferenceKey?: string;
|
|
25
|
+
mode?: 'page' | 'dialog';
|
|
26
|
+
onEvent?: (event: LoginEvent) => void;
|
|
27
|
+
/** Host persists draft/intent before leaving for OAuth. */
|
|
28
|
+
onBeforeRedirect?: () => void;
|
|
11
29
|
/** Auth methods to display, in order */
|
|
12
30
|
methods?: Array<'passkey' | 'did-connect' | 'oauth' | 'email'>;
|
|
13
31
|
/** OAuth provider list (required if methods includes 'oauth') */
|
|
@@ -26,7 +44,7 @@ export interface LoginPageOptions {
|
|
|
26
44
|
label: string;
|
|
27
45
|
}>;
|
|
28
46
|
/** Callback on successful authentication */
|
|
29
|
-
onSuccess?: () => void
|
|
47
|
+
onSuccess?: () => void | Promise<void>;
|
|
30
48
|
/** Callback on error */
|
|
31
49
|
onError?: (error: Error) => void;
|
|
32
50
|
/** Passkey API prefix override */
|
|
@@ -41,8 +59,21 @@ export interface LoginPageOptions {
|
|
|
41
59
|
privacyUrl?: string;
|
|
42
60
|
/** URL to terms of service page */
|
|
43
61
|
termsUrl?: string;
|
|
44
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Color theme (default: 'dark').
|
|
64
|
+
* On mount, `?theme=` wins, then `localStorage["web-mode"]` (`light` |
|
|
65
|
+
* `dark` | `auto`). This value is the fallback when neither is set — the
|
|
66
|
+
* server copies `did_connect_theme` / `arc_mode` into it. Dialog mode honors
|
|
67
|
+
* the resolved host theme instead of URL/storage preferences. The login UI
|
|
68
|
+
* does not render a theme switch and does not write that storage.
|
|
69
|
+
*/
|
|
45
70
|
theme?: 'light' | 'dark' | 'auto';
|
|
71
|
+
/**
|
|
72
|
+
* Mount into an open shadow root on the container. Styles and theme stay on
|
|
73
|
+
* that host and do not change the document. Default false. Kept on the
|
|
74
|
+
* instance because update() destroys and mounts again.
|
|
75
|
+
*/
|
|
76
|
+
isolate?: boolean;
|
|
46
77
|
/** Federation: Master OAuth origin — popup opens Master's OAuth login URL instead of local */
|
|
47
78
|
masterOAuthOrigin?: string;
|
|
48
79
|
/** Federation: Master app name — shown as hint "Authentication provided by {masterName}" */
|
|
@@ -59,6 +90,13 @@ export interface LoginPageOptions {
|
|
|
59
90
|
* calls this instead of navigating. Takes precedence over homeUrl.
|
|
60
91
|
*/
|
|
61
92
|
onCancel?: () => void;
|
|
93
|
+
/**
|
|
94
|
+
* Whether the user may leave without signing in. Default true.
|
|
95
|
+
* `false` hides Cancel / the home link and does not call `onCancel`.
|
|
96
|
+
* The host must also ignore Escape and backdrop clicks; only `onSuccess`
|
|
97
|
+
* closes that dialog. Sub-view Back still returns to the method list.
|
|
98
|
+
*/
|
|
99
|
+
dismissible?: boolean;
|
|
62
100
|
}
|
|
63
101
|
export declare class LoginPage {
|
|
64
102
|
private container;
|
|
@@ -68,21 +106,54 @@ export declare class LoginPage {
|
|
|
68
106
|
private tokenSession;
|
|
69
107
|
private styleEl;
|
|
70
108
|
private mounted;
|
|
109
|
+
private completed;
|
|
110
|
+
private generation;
|
|
111
|
+
private activeMethod?;
|
|
112
|
+
private activeProvider?;
|
|
113
|
+
private oauthCleanup?;
|
|
114
|
+
private emailTimer?;
|
|
115
|
+
private emailDraft;
|
|
116
|
+
private abort?;
|
|
117
|
+
private emit;
|
|
118
|
+
private select;
|
|
71
119
|
private currentView;
|
|
72
120
|
private cardEl;
|
|
73
121
|
private mediaQuery;
|
|
74
122
|
private mediaListener;
|
|
75
123
|
private localeOutsideClick;
|
|
124
|
+
/** Open shadow root when isolate is set. Reused across destroy/mount. */
|
|
125
|
+
private shadow;
|
|
126
|
+
private readonly isolate;
|
|
76
127
|
constructor(container: HTMLElement, config: ConnectConfig, http: HttpAdapter, options?: LoginPageOptions);
|
|
77
128
|
/** Mount the login UI into the container. Idempotent — second call is a no-op. */
|
|
78
129
|
mount(): void;
|
|
79
130
|
/** Destroy the login UI, clean up timers and listeners. Idempotent. */
|
|
80
131
|
destroy(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Apply a light or dark theme without remounting.
|
|
134
|
+
* The host writes `web-mode` itself. Isolate updates the shadow host only.
|
|
135
|
+
*/
|
|
136
|
+
setTheme(theme: 'light' | 'dark'): void;
|
|
81
137
|
/** Update options and re-render. */
|
|
82
138
|
update(newOptions: Partial<LoginPageOptions>): void;
|
|
139
|
+
/** Light DOM themes <html>. Isolate themes the shadow host only. */
|
|
140
|
+
private themeTarget;
|
|
141
|
+
/** Shadow root created once. attachShadow throws if called again. */
|
|
142
|
+
private mountRoot;
|
|
143
|
+
private detachMedia;
|
|
144
|
+
/**
|
|
145
|
+
* Same order as theme/init.js: `?theme=` is a preview and wins;
|
|
146
|
+
* otherwise `localStorage["web-mode"]`. Neither write happens here.
|
|
147
|
+
*/
|
|
148
|
+
private adoptStoredTheme;
|
|
149
|
+
/** light sets data-theme. dark removes it. auto follows the OS. */
|
|
83
150
|
private applyTheme;
|
|
151
|
+
/** Redraw a visible QR so its plate matches the theme. Leaves a timeout overlay alone. */
|
|
152
|
+
private repaintQRPlate;
|
|
84
153
|
private filterMethods;
|
|
85
154
|
private renderCard;
|
|
155
|
+
/** Locale sits on the card's top-right row, level with Back / Cancel. */
|
|
156
|
+
private renderCardTools;
|
|
86
157
|
private renderLocaleSwitcher;
|
|
87
158
|
/** Menu of caller-supplied locales. Closed until the trigger is clicked. */
|
|
88
159
|
private renderLocaleMenu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-page.d.ts","sourceRoot":"","sources":["../../src/ui/login-page.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkB7E,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IAC/D,iEAAiE;IACjE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"login-page.d.ts","sourceRoot":"","sources":["../../src/ui/login-page.ts"],"names":[],"mappings":"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"}
|