@atlasauth/react 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/AtlasProvider.d.ts +7 -6
- package/dist/AtlasProvider.js +15 -1
- package/dist/AtlasProvider.js.map +1 -1
- package/dist/active-atlas.d.ts +26 -3
- package/dist/active-atlas.js.map +1 -1
- package/dist/appearance.js +1 -1
- package/dist/compat.d.ts +2 -4
- package/dist/compat.js.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.js +13 -2
- package/dist/components.js.map +1 -1
- package/dist/flow.d.ts +12 -1
- package/dist/flow.js +8 -1
- package/dist/flow.js.map +1 -1
- package/dist/hooks.d.ts +3 -4
- package/dist/hooks.js.map +1 -1
- package/dist/i18n.js +2 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/policies.d.ts +114 -0
- package/dist/policies.js +324 -0
- package/dist/policies.js.map +1 -0
- package/dist/sign-in-with-atlas.d.ts +85 -2
- package/dist/sign-in-with-atlas.js +217 -14
- package/dist/sign-in-with-atlas.js.map +1 -1
- package/dist/sign-in.js +9 -2
- package/dist/sign-in.js.map +1 -1
- package/dist/sign-up.d.ts +3 -0
- package/dist/sign-up.js +31 -5
- package/dist/sign-up.js.map +1 -1
- package/dist/styles.d.ts +1 -33
- package/dist/styles.js +16 -3
- package/dist/styles.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -5
package/dist/policies.js
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.usePolicyText = usePolicyText;
|
|
5
|
+
exports.usePolicyState = usePolicyState;
|
|
6
|
+
exports.usePolicies = usePolicies;
|
|
7
|
+
exports.PolicyViewer = PolicyViewer;
|
|
8
|
+
exports.PolicyConsent = PolicyConsent;
|
|
9
|
+
exports.PolicyClickwrap = PolicyClickwrap;
|
|
10
|
+
exports.PolicyModal = PolicyModal;
|
|
11
|
+
exports.PolicyScrollQueue = PolicyScrollQueue;
|
|
12
|
+
exports.PolicyAcceptStep = PolicyAcceptStep;
|
|
13
|
+
exports.PolicyGate = PolicyGate;
|
|
14
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
15
|
+
const react_1 = require("react");
|
|
16
|
+
const js_1 = require("@atlasauth/js");
|
|
17
|
+
const AtlasProvider_1 = require("./AtlasProvider");
|
|
18
|
+
const components_shared_1 = require("./components-shared");
|
|
19
|
+
/**
|
|
20
|
+
* Policy acceptance (terms of service, privacy, any policy) — the React half.
|
|
21
|
+
*
|
|
22
|
+
* `<SignUp/>` and `<SignIn/>` use these themselves; they are exported for
|
|
23
|
+
* custom forms and for in-app re-acceptance:
|
|
24
|
+
* - {@link usePolicies}: load the instance's policies into a controller;
|
|
25
|
+
* - {@link PolicyConsent} / {@link PolicyClickwrap}: the checkbox block (with
|
|
26
|
+
* an in-page document viewer) and the clickwrap sentence;
|
|
27
|
+
* - {@link PolicyModal}: the unskippable scroll-to-accept dialog;
|
|
28
|
+
* - {@link PolicyGate}: a signed-in banner for policies that need
|
|
29
|
+
* re-acceptance, opening the modal / checkboxes on demand.
|
|
30
|
+
*/
|
|
31
|
+
/** A translator over the catalog that falls back to the English policy strings. */
|
|
32
|
+
function usePolicyText() {
|
|
33
|
+
const t = (0, components_shared_1.useText)();
|
|
34
|
+
return (0, react_1.useMemo)(() => (0, js_1.policyTranslator)((key, vars) => t(key, vars)), [t]);
|
|
35
|
+
}
|
|
36
|
+
/** Subscribe a component to a controller's state. */
|
|
37
|
+
function usePolicyState(controller) {
|
|
38
|
+
const cache = (0, react_1.useRef)(null);
|
|
39
|
+
const get = (0, react_1.useCallback)(() => {
|
|
40
|
+
const snap = controller.snapshot();
|
|
41
|
+
const key = `${snap.viewing}|${snap.combinedChecked}|${snap.policies.map((p) => `${p.key}:${p.versionId}:${controller.isChecked(p.key)}`).join(',')}`;
|
|
42
|
+
if (cache.current?.key === key)
|
|
43
|
+
return cache.current.snap;
|
|
44
|
+
cache.current = { key, snap };
|
|
45
|
+
return snap;
|
|
46
|
+
}, [controller]);
|
|
47
|
+
return (0, react_1.useSyncExternalStore)((cb) => controller.subscribe(cb), get, get);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load the instance's policies (`GET /v1/client/policies`) into a controller.
|
|
51
|
+
* Resolves to an empty list when the instance defines none — render nothing.
|
|
52
|
+
*/
|
|
53
|
+
function usePolicies(options = {}, clientOverride) {
|
|
54
|
+
const own = (0, components_shared_1.useFapiClient)();
|
|
55
|
+
const client = clientOverride ?? own;
|
|
56
|
+
const { locale } = (0, AtlasProvider_1.useAtlas)();
|
|
57
|
+
const enabled = options.enabled !== false;
|
|
58
|
+
const controller = (0, react_1.useMemo)(() => new js_1.PolicyAcceptanceController([], { combined: options.combined }), [options.combined]);
|
|
59
|
+
const [loading, setLoading] = (0, react_1.useState)(enabled);
|
|
60
|
+
const refresh = (0, react_1.useCallback)(async () => {
|
|
61
|
+
const list = await (0, js_1.loadPolicies)(client, { locale: locale ?? undefined, signIn: options.signIn });
|
|
62
|
+
controller.setPolicies(list);
|
|
63
|
+
setLoading(false);
|
|
64
|
+
}, [client, controller, locale, options.signIn]);
|
|
65
|
+
(0, react_1.useEffect)(() => {
|
|
66
|
+
if (!enabled)
|
|
67
|
+
return;
|
|
68
|
+
let alive = true;
|
|
69
|
+
void (0, js_1.loadPolicies)(client, { locale: locale ?? undefined, signIn: options.signIn }).then((list) => {
|
|
70
|
+
if (!alive)
|
|
71
|
+
return;
|
|
72
|
+
controller.setPolicies(list);
|
|
73
|
+
setLoading(false);
|
|
74
|
+
});
|
|
75
|
+
return () => {
|
|
76
|
+
alive = false;
|
|
77
|
+
};
|
|
78
|
+
}, [client, controller, enabled, locale, options.signIn]);
|
|
79
|
+
const state = usePolicyState(controller);
|
|
80
|
+
return { controller, policies: state.policies, loading, refresh, build: () => controller.build() };
|
|
81
|
+
}
|
|
82
|
+
function PolicyContent({ policy, onEnd }) {
|
|
83
|
+
const bodyRef = (0, react_1.useRef)(null);
|
|
84
|
+
const sentinelRef = (0, react_1.useRef)(null);
|
|
85
|
+
const html = (0, react_1.useMemo)(() => (0, js_1.sanitizePolicyHtml)((0, js_1.policyHtml)(policy)), [policy]);
|
|
86
|
+
const cls = (0, components_shared_1.useClass)('text', 'atlas-policy-body');
|
|
87
|
+
(0, react_1.useEffect)(() => {
|
|
88
|
+
if (!onEnd || !bodyRef.current)
|
|
89
|
+
return;
|
|
90
|
+
return (0, js_1.observeScrollEnd)(bodyRef.current, sentinelRef.current, onEnd);
|
|
91
|
+
}, [html, onEnd]);
|
|
92
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: bodyRef, className: cls, tabIndex: 0, role: "region", "aria-label": policy.title, "data-atlas-policy-content": "", children: [(0, jsx_runtime_1.jsx)("div", { dangerouslySetInnerHTML: { __html: html } }), (0, jsx_runtime_1.jsx)("span", { ref: sentinelRef, className: "atlas-policy-sentinel", "aria-hidden": "true", "data-atlas-policy-end": "" })] }));
|
|
93
|
+
}
|
|
94
|
+
/** The in-page document viewer: the exact version the user is agreeing to. */
|
|
95
|
+
function PolicyViewer({ policy, controller }) {
|
|
96
|
+
const t = usePolicyText();
|
|
97
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
98
|
+
const onEnd = (0, react_1.useCallback)(() => controller.markScrolledToEnd(policy.key), [controller, policy.key]);
|
|
99
|
+
const meta = [
|
|
100
|
+
policy.version ? t('policy.version', { version: policy.version }) : '',
|
|
101
|
+
policy.effectiveAt ? t('policy.effective', { date: (0, js_1.formatPolicyDate)(policy.effectiveAt) }) : '',
|
|
102
|
+
]
|
|
103
|
+
.filter(Boolean)
|
|
104
|
+
.join(' · ');
|
|
105
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-viewer", role: "region", "aria-label": policy.title, "data-atlas-policy-viewer": policy.key, children: [(0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-viewer-head", children: [(0, jsx_runtime_1.jsx)("strong", { children: policy.title }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('link', 'atlas-policy-link'), "data-atlas-policy-back": "", onClick: () => controller.closeDocument(), children: t('policy.viewerBack') })] }), meta ? (0, jsx_runtime_1.jsx)("p", { className: "atlas-policy-meta", children: meta }) : null, (0, jsx_runtime_1.jsx)(PolicyContent, { policy: policy, onEnd: onEnd })] }));
|
|
106
|
+
}
|
|
107
|
+
function PolicyLink({ policy, controller }) {
|
|
108
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
109
|
+
return ((0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('link', 'atlas-policy-link'), "data-atlas-policy-open": policy.key, "aria-haspopup": "dialog", onClick: () => controller.openDocument(policy.key), children: policy.title }));
|
|
110
|
+
}
|
|
111
|
+
function Sentence({ template, name, nodes, and }) {
|
|
112
|
+
const [before, after] = (0, js_1.splitTemplate)(template, name);
|
|
113
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [before, nodes.map((node, i) => ((0, jsx_runtime_1.jsxs)("span", { children: [i > 0 ? (i === nodes.length - 1 ? ` ${and} ` : ', ') : null, node] }, i))), after] }));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The checkbox-mode policies: one combined checkbox ("I agree to the Terms of
|
|
117
|
+
* Service and Privacy Policy") or one each, the names opening the in-page
|
|
118
|
+
* viewer. While a document is open it replaces the checkboxes.
|
|
119
|
+
*/
|
|
120
|
+
function PolicyConsent({ controller, errors = [] }) {
|
|
121
|
+
const t = usePolicyText();
|
|
122
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
123
|
+
const state = usePolicyState(controller);
|
|
124
|
+
const id = (0, react_1.useId)();
|
|
125
|
+
const viewing = state.viewing ? state.policies.find((p) => p.key === state.viewing) : null;
|
|
126
|
+
if (viewing)
|
|
127
|
+
return (0, jsx_runtime_1.jsx)(PolicyViewer, { policy: viewing, controller: controller });
|
|
128
|
+
const boxes = state.policies.filter((p) => p.display === 'checkbox');
|
|
129
|
+
if (boxes.length === 0)
|
|
130
|
+
return null;
|
|
131
|
+
const and = t('policy.and');
|
|
132
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-consent", "data-atlas-policies": "", children: [controller.combined ? ((0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-row atlas-consent", children: [(0, jsx_runtime_1.jsx)("input", { id: `${id}-all`, type: "checkbox", name: "policies", "data-atlas-policy-all": "", checked: state.combinedChecked, onChange: (e) => controller.setAllChecked(e.target.checked) }), (0, jsx_runtime_1.jsx)("label", { htmlFor: `${id}-all`, className: cls('text', 'atlas-text'), children: (0, jsx_runtime_1.jsx)(Sentence, { template: t('policy.agreeCombined'), name: "policies", and: and, nodes: boxes.map((p) => (0, jsx_runtime_1.jsx)(PolicyLink, { policy: p, controller: controller }, p.key)) }) })] })) : (boxes.map((p) => {
|
|
133
|
+
const [before, after] = (0, js_1.splitTemplate)(t('policy.agreeOne'), 'policy');
|
|
134
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-row atlas-consent", children: [(0, jsx_runtime_1.jsx)("input", { id: `${id}-${p.key}`, type: "checkbox", name: `policy_${p.key}`, "data-atlas-policy-box": p.key, checked: controller.isChecked(p.key), onChange: (e) => controller.setChecked(p.key, e.target.checked) }), (0, jsx_runtime_1.jsxs)("label", { htmlFor: `${id}-${p.key}`, className: cls('text', 'atlas-text'), children: [before, (0, jsx_runtime_1.jsx)(PolicyLink, { policy: p, controller: controller }), after] })] }, p.key));
|
|
135
|
+
})), errors
|
|
136
|
+
.filter((e) => e.param === 'policy_acceptances' || e.param === 'consent')
|
|
137
|
+
.map((e) => ((0, jsx_runtime_1.jsx)("span", { className: cls('formFieldError', 'atlas-error'), children: e.message }, e.code)))] }));
|
|
138
|
+
}
|
|
139
|
+
/** The clickwrap sentence under the submit button for `link`-mode policies. */
|
|
140
|
+
function PolicyClickwrap({ controller }) {
|
|
141
|
+
const t = usePolicyText();
|
|
142
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
143
|
+
const state = usePolicyState(controller);
|
|
144
|
+
const links = state.policies.filter((p) => p.display === 'link');
|
|
145
|
+
if (links.length === 0)
|
|
146
|
+
return null;
|
|
147
|
+
return ((0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-policy-clickwrap'), "data-atlas-policy-clickwrap": "", children: (0, jsx_runtime_1.jsx)(Sentence, { template: t('policy.clickwrap'), name: "policies", and: t('policy.and'), nodes: links.map((p) => (0, jsx_runtime_1.jsx)(PolicyLink, { policy: p, controller: controller }, p.key)) }) }));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The unskippable scroll-mode dialog: `role="dialog" aria-modal="true"`, focus
|
|
151
|
+
* trapped, no close button, Escape disabled. Accept enables only once the end of
|
|
152
|
+
* the text has been seen (an IntersectionObserver on an end sentinel) or the
|
|
153
|
+
* text fits; Decline calls `onDecline`.
|
|
154
|
+
*/
|
|
155
|
+
function PolicyModal({ policy, reaccept = false, controller, onAccept, onDecline }) {
|
|
156
|
+
const t = usePolicyText();
|
|
157
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
158
|
+
const uid = (0, react_1.useId)();
|
|
159
|
+
const modalRef = (0, react_1.useRef)(null);
|
|
160
|
+
const bodyRef = (0, react_1.useRef)(null);
|
|
161
|
+
const [ready, setReady] = (0, react_1.useState)(false);
|
|
162
|
+
const html = (0, react_1.useMemo)(() => (0, js_1.sanitizePolicyHtml)((0, js_1.policyHtml)(policy)), [policy]);
|
|
163
|
+
const sentinelRef = (0, react_1.useRef)(null);
|
|
164
|
+
(0, react_1.useEffect)(() => {
|
|
165
|
+
setReady(false);
|
|
166
|
+
const body = bodyRef.current;
|
|
167
|
+
if (!body)
|
|
168
|
+
return;
|
|
169
|
+
return (0, js_1.observeScrollEnd)(body, sentinelRef.current, () => {
|
|
170
|
+
setReady(true);
|
|
171
|
+
controller?.markScrolledToEnd(policy.key);
|
|
172
|
+
});
|
|
173
|
+
}, [html, controller, policy.key]);
|
|
174
|
+
(0, react_1.useEffect)(() => {
|
|
175
|
+
const modal = modalRef.current;
|
|
176
|
+
if (!modal)
|
|
177
|
+
return;
|
|
178
|
+
controller?.startClock(policy.key);
|
|
179
|
+
const release = (0, js_1.trapFocus)(modal, { initialFocus: bodyRef.current });
|
|
180
|
+
return () => {
|
|
181
|
+
release();
|
|
182
|
+
controller?.stopClock(policy.key);
|
|
183
|
+
};
|
|
184
|
+
}, [controller, policy.key]);
|
|
185
|
+
const titleId = `${uid}-title`;
|
|
186
|
+
const hintId = `${uid}-hint`;
|
|
187
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "atlas-policy-overlay", "data-atlas-policy-modal": policy.key, children: (0, jsx_runtime_1.jsxs)("div", { ref: modalRef, className: "atlas-policy-modal", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": hintId, tabIndex: -1, children: [(0, jsx_runtime_1.jsx)("h2", { id: titleId, children: reaccept && policy.reaccept !== false ? t('policy.reacceptTitle', { policy: policy.title }) : policy.title }), reaccept && policy.reaccept !== false && policy.summaryOfChanges ? ((0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-summary", "data-atlas-policy-summary": "", children: [(0, jsx_runtime_1.jsx)("strong", { children: t('policy.summaryTitle') }), (0, jsx_runtime_1.jsx)("span", { children: policy.summaryOfChanges })] })) : null, (0, jsx_runtime_1.jsxs)("div", { ref: bodyRef, className: "atlas-policy-body", tabIndex: 0, role: "region", "aria-label": policy.title, "data-atlas-policy-content": "", children: [(0, jsx_runtime_1.jsx)("div", { dangerouslySetInnerHTML: { __html: html } }), (0, jsx_runtime_1.jsx)("span", { ref: sentinelRef, className: "atlas-policy-sentinel", "aria-hidden": "true", "data-atlas-policy-end": "" })] }), (0, jsx_runtime_1.jsx)("p", { id: hintId, className: "atlas-policy-hint", "aria-live": "polite", children: ready ? '' : t('policy.scrollHint') }), (0, jsx_runtime_1.jsxs)("div", { className: "atlas-policy-actions", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('formButtonSecondary', ''), "data-atlas-policy-decline": "", onClick: onDecline, children: t('policy.decline') }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('formButtonPrimary', 'atlas-policy-accept'), "data-atlas-policy-accept": "", disabled: !ready, "aria-disabled": !ready, onClick: () => ready && onAccept(), children: t('policy.accept') })] })] }) }));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Walk the controller's unread scroll-mode policies one dialog at a time while
|
|
191
|
+
* `running`. `onDone` fires once when the last one is accepted;
|
|
192
|
+
* `onDecline(policy)` when the user declines one.
|
|
193
|
+
*/
|
|
194
|
+
function PolicyScrollQueue({ controller, running, reaccept = false, onDone, onDecline, }) {
|
|
195
|
+
usePolicyState(controller);
|
|
196
|
+
const pending = controller.pendingScroll();
|
|
197
|
+
const policy = running ? pending : null;
|
|
198
|
+
const hadPolicy = (0, react_1.useRef)(false);
|
|
199
|
+
const doneRef = (0, react_1.useRef)(onDone);
|
|
200
|
+
doneRef.current = onDone;
|
|
201
|
+
(0, react_1.useEffect)(() => {
|
|
202
|
+
if (policy)
|
|
203
|
+
hadPolicy.current = true;
|
|
204
|
+
// Done only when the queue emptied because the user accepted the last one — not because it stopped (a decline).
|
|
205
|
+
else if (hadPolicy.current && running && pending === null) {
|
|
206
|
+
hadPolicy.current = false;
|
|
207
|
+
doneRef.current();
|
|
208
|
+
}
|
|
209
|
+
else if (!running)
|
|
210
|
+
hadPolicy.current = false;
|
|
211
|
+
}, [policy, running, pending]);
|
|
212
|
+
if (!policy)
|
|
213
|
+
return null;
|
|
214
|
+
return ((0, jsx_runtime_1.jsx)(PolicyModal, { policy: policy, reaccept: reaccept, controller: controller, onAccept: () => controller.acceptScroll(policy.key), onDecline: () => onDecline(policy) }, policy.versionId));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The sign-in step for a `needs_policy_acceptance` attempt: scroll-mode policies
|
|
218
|
+
* in their dialog, the rest as checkboxes / a clickwrap sentence, then
|
|
219
|
+
* "Accept and continue", which hands the `policy_acceptances` JSON to `onSubmit`.
|
|
220
|
+
*/
|
|
221
|
+
function PolicyAcceptStep({ attempt, busy, onSubmit, onDecline, }) {
|
|
222
|
+
const t = usePolicyText();
|
|
223
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
224
|
+
const client = (0, components_shared_1.useFapiClient)();
|
|
225
|
+
const { locale } = (0, AtlasProvider_1.useAtlas)();
|
|
226
|
+
const [controller, setController] = (0, react_1.useState)(null);
|
|
227
|
+
(0, react_1.useEffect)(() => {
|
|
228
|
+
let alive = true;
|
|
229
|
+
void (0, js_1.controllerForPending)(client, attempt, { locale: locale ?? undefined, combined: true }).then((c) => alive && setController(c));
|
|
230
|
+
return () => {
|
|
231
|
+
alive = false;
|
|
232
|
+
};
|
|
233
|
+
}, [client, attempt, locale]);
|
|
234
|
+
if (!controller)
|
|
235
|
+
return (0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: t('policy.loading') });
|
|
236
|
+
return (0, jsx_runtime_1.jsx)(PolicyAcceptStepBody, { controller: controller, busy: busy, onSubmit: onSubmit, onDecline: onDecline });
|
|
237
|
+
}
|
|
238
|
+
function PolicyAcceptStepBody({ controller, busy, onSubmit, onDecline, }) {
|
|
239
|
+
const t = usePolicyText();
|
|
240
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
241
|
+
const state = usePolicyState(controller);
|
|
242
|
+
const [declined, setDeclined] = (0, react_1.useState)(false);
|
|
243
|
+
const send = (0, react_1.useCallback)(() => onSubmit({ policy_acceptances: JSON.stringify(controller.build()) }), [controller, onSubmit]);
|
|
244
|
+
const hasOthers = state.policies.some((p) => p.display !== 'scroll');
|
|
245
|
+
return ((0, jsx_runtime_1.jsxs)("div", { "data-atlas-policy-step": "", children: [(0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: t('policy.pendingIntro') }), (0, jsx_runtime_1.jsx)(PolicyConsent, { controller: controller }), (0, jsx_runtime_1.jsx)(PolicyClickwrap, { controller: controller }), hasOthers ? ((0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('formButtonPrimary', 'atlas-button'), "data-atlas-policy-continue": "", disabled: busy || !controller.canSubmit() || controller.pendingScroll() !== null, onClick: send, children: t('policy.submit') })) : null, (0, jsx_runtime_1.jsx)(PolicyScrollQueue, { controller: controller, running: !declined, reaccept: true, onDone: () => {
|
|
246
|
+
if (!hasOthers)
|
|
247
|
+
send();
|
|
248
|
+
}, onDecline: (p) => {
|
|
249
|
+
setDeclined(true);
|
|
250
|
+
onDecline?.(p);
|
|
251
|
+
} })] }));
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* In-app re-acceptance. For a signed-in user it checks
|
|
255
|
+
* `GET /v1/client/me/policies`; when a policy needs re-acceptance it shows a
|
|
256
|
+
* banner (or, with `blocking`, the dialog at once). Accepting posts to
|
|
257
|
+
* `/v1/client/me/policies/accept`. Renders `children` (if any) always.
|
|
258
|
+
*/
|
|
259
|
+
function PolicyGate({ onAccepted, blocking = false, children }) {
|
|
260
|
+
const { status } = (0, AtlasProvider_1.useAtlas)();
|
|
261
|
+
const client = (0, components_shared_1.useFapiClient)();
|
|
262
|
+
const t = usePolicyText();
|
|
263
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
264
|
+
const [pending, setPending] = (0, react_1.useState)([]);
|
|
265
|
+
const [controller, setController] = (0, react_1.useState)(null);
|
|
266
|
+
const [open, setOpen] = (0, react_1.useState)(false);
|
|
267
|
+
const [error, setError] = (0, react_1.useState)('');
|
|
268
|
+
const [busy, setBusy] = (0, react_1.useState)(false);
|
|
269
|
+
(0, react_1.useEffect)(() => {
|
|
270
|
+
if (status !== 'signed_in')
|
|
271
|
+
return;
|
|
272
|
+
let alive = true;
|
|
273
|
+
void (0, js_1.loadMyPolicies)(client).then((all) => {
|
|
274
|
+
if (alive)
|
|
275
|
+
setPending(all.filter((p) => p.needsReaccept));
|
|
276
|
+
});
|
|
277
|
+
return () => {
|
|
278
|
+
alive = false;
|
|
279
|
+
};
|
|
280
|
+
}, [client, status]);
|
|
281
|
+
const begin = (0, react_1.useCallback)(async () => {
|
|
282
|
+
const all = await (0, js_1.loadPolicies)(client, {});
|
|
283
|
+
const wanted = new Set(pending.map((p) => p.key));
|
|
284
|
+
const c = new js_1.PolicyAcceptanceController(all.filter((p) => wanted.has(p.key)).map((p) => ({ ...p, required: true })));
|
|
285
|
+
setController(c);
|
|
286
|
+
setOpen(true);
|
|
287
|
+
}, [client, pending]);
|
|
288
|
+
(0, react_1.useEffect)(() => {
|
|
289
|
+
if (blocking && pending.length > 0 && !controller)
|
|
290
|
+
void begin();
|
|
291
|
+
}, [blocking, pending, controller, begin]);
|
|
292
|
+
const submit = (0, react_1.useCallback)(async () => {
|
|
293
|
+
if (!controller)
|
|
294
|
+
return;
|
|
295
|
+
setBusy(true);
|
|
296
|
+
const res = await (0, js_1.acceptMyPolicies)(client, controller.build());
|
|
297
|
+
setBusy(false);
|
|
298
|
+
if (!res.ok) {
|
|
299
|
+
setError(res.errors[0]?.message ?? t('policy.requiredGeneric'));
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
setPending([]);
|
|
303
|
+
setOpen(false);
|
|
304
|
+
setController(null);
|
|
305
|
+
onAccepted?.();
|
|
306
|
+
}, [client, controller, onAccepted, t]);
|
|
307
|
+
const titles = pending.map((p) => p.title);
|
|
308
|
+
const soonest = pending.map((p) => p.graceEndsAt).filter((x) => !!x).sort()[0];
|
|
309
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [pending.length > 0 && !open ? ((0, jsx_runtime_1.jsxs)("div", { className: cls('alert', 'atlas-policy-banner'), role: "status", "data-atlas-policy-banner": "", children: [(0, jsx_runtime_1.jsxs)("span", { children: [(0, jsx_runtime_1.jsxs)("strong", { children: [t('policy.bannerTitle'), ". "] }), t('policy.bannerBody', { policies: (0, js_1.joinTitles)(titles, t('policy.and')) }), soonest ? ` ${t('policy.bannerGrace', { date: (0, js_1.formatPolicyDate)(soonest) })}` : ''] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('link', 'atlas-policy-link'), onClick: () => void begin(), children: t('policy.bannerReview') })] })) : null, open && controller ? ((0, jsx_runtime_1.jsx)(PolicyGateDialog, { controller: controller, busy: busy, error: error, onSubmit: () => void submit(), onCancel: () => { setOpen(false); setController(null); }, blocking: blocking })) : null, children] }));
|
|
310
|
+
}
|
|
311
|
+
function PolicyGateDialog({ controller, busy, error, onSubmit, onCancel, blocking, }) {
|
|
312
|
+
const t = usePolicyText();
|
|
313
|
+
const cls = (0, components_shared_1.useClasses)();
|
|
314
|
+
const state = usePolicyState(controller);
|
|
315
|
+
const hasOthers = state.policies.some((p) => p.display !== 'scroll');
|
|
316
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [hasOthers ? ((0, jsx_runtime_1.jsxs)("div", { className: cls('card', 'atlas-card'), "data-atlas-policy-gate": "", children: [(0, jsx_runtime_1.jsx)(PolicyConsent, { controller: controller }), (0, jsx_runtime_1.jsx)(PolicyClickwrap, { controller: controller }), error ? (0, jsx_runtime_1.jsx)("p", { className: cls('formFieldError', 'atlas-error'), role: "alert", children: error }) : null, (0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('formButtonPrimary', 'atlas-button'), disabled: busy || !controller.canSubmit() || controller.pendingScroll() !== null, onClick: onSubmit, children: t('policy.submit') }), blocking ? null : ((0, jsx_runtime_1.jsx)("button", { type: "button", className: cls('link', 'atlas-link'), onClick: onCancel, children: t('policy.decline') }))] })) : null, (0, jsx_runtime_1.jsx)(PolicyScrollQueue, { controller: controller, running: true, reaccept: true, onDone: () => {
|
|
317
|
+
if (!hasOthers)
|
|
318
|
+
onSubmit();
|
|
319
|
+
}, onDecline: () => {
|
|
320
|
+
if (!blocking)
|
|
321
|
+
onCancel();
|
|
322
|
+
} })] }));
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../src/policies.tsx"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,71 @@ export declare function completeSignInWithAtlas(opts?: {
|
|
|
52
52
|
export declare function signInWithAtlasPopup(opts: AtlasIdOptions & {
|
|
53
53
|
fetch?: typeof fetch;
|
|
54
54
|
}): Promise<AtlasIdResult>;
|
|
55
|
+
declare const LABELS: {
|
|
56
|
+
readonly signin: "Sign in with Atlas";
|
|
57
|
+
readonly signup: "Sign up with Atlas";
|
|
58
|
+
readonly continue: "Continue with Atlas";
|
|
59
|
+
};
|
|
60
|
+
/** The labels for a BCP 47 tag (`es-MX` → es, `pt` → pt-BR), English when unknown. */
|
|
61
|
+
export declare function atlasIdLabels(locale?: string | null): Record<keyof typeof LABELS, string>;
|
|
62
|
+
/**
|
|
63
|
+
* The `atlasid:*` DOM events the button (this component and the hosted
|
|
64
|
+
* script's) dispatches on its element, bubbling:
|
|
65
|
+
* atlasid:ready rendered ({ version })
|
|
66
|
+
* atlasid:signin a popup / One Tap sign-in finished (the AtlasIdResult)
|
|
67
|
+
* atlasid:error { error } (popup_closed is a cancel)
|
|
68
|
+
* atlasid:onetap { outcome: signed_in | dismissed | unavailable | error }
|
|
69
|
+
* and keeps `data-atlasid-state` on it: ready | pending | signed-in | error.
|
|
70
|
+
*/
|
|
71
|
+
export declare const ATLASID_EVENTS: readonly ["atlasid:ready", "atlasid:signin", "atlasid:error", "atlasid:onetap"];
|
|
72
|
+
export type AtlasIdEventName = (typeof ATLASID_EVENTS)[number];
|
|
73
|
+
export interface AtlasIdEventHandlers {
|
|
74
|
+
onReady?: (detail: {
|
|
75
|
+
version?: string;
|
|
76
|
+
issuer?: string;
|
|
77
|
+
}) => void;
|
|
78
|
+
onSignIn?: (result: AtlasIdResult | Record<string, unknown>) => void;
|
|
79
|
+
onError?: (detail: {
|
|
80
|
+
error: string;
|
|
81
|
+
directive?: string;
|
|
82
|
+
origin?: string;
|
|
83
|
+
}) => void;
|
|
84
|
+
onOneTap?: (detail: {
|
|
85
|
+
outcome: 'signed_in' | 'dismissed' | 'unavailable' | 'error';
|
|
86
|
+
error?: string;
|
|
87
|
+
}) => void;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Subscribe to the `atlasid:*` events of a button element (this component, or
|
|
91
|
+
* a `[data-atlas-signin]` host the hosted script upgrades). Returns the
|
|
92
|
+
* unsubscribe function. SSR-safe: a no-op without an element.
|
|
93
|
+
*/
|
|
94
|
+
export declare function listenAtlasIdEvents(el: EventTarget | null | undefined, handlers: AtlasIdEventHandlers): () => void;
|
|
95
|
+
/** React hook form of {@link listenAtlasIdEvents} for a ref to the button or host element. */
|
|
96
|
+
export declare function useAtlasIdEvents(ref: {
|
|
97
|
+
current: EventTarget | null;
|
|
98
|
+
}, handlers: AtlasIdEventHandlers): void;
|
|
99
|
+
/**
|
|
100
|
+
* One Tap: the browser's own FedCM account prompt for Sign in with Atlas (no
|
|
101
|
+
* third-party cookies, no popup). Rejects with `fedcm_unavailable` where the
|
|
102
|
+
* browser has no FedCM, and with the browser's error when the user is signed
|
|
103
|
+
* out of Atlas or dismisses it — keep the button as the fallback.
|
|
104
|
+
*/
|
|
105
|
+
export declare function oneTapWithAtlas(opts: {
|
|
106
|
+
clientId: string;
|
|
107
|
+
issuer?: string;
|
|
108
|
+
nonce?: string;
|
|
109
|
+
scope?: string;
|
|
110
|
+
context?: 'signin' | 'signup' | 'use' | 'continue';
|
|
111
|
+
loginHint?: string;
|
|
112
|
+
signal?: AbortSignal;
|
|
113
|
+
mediation?: 'optional' | 'required' | 'silent';
|
|
114
|
+
}): Promise<{
|
|
115
|
+
credential: string;
|
|
116
|
+
idToken: string;
|
|
117
|
+
claims: Record<string, unknown>;
|
|
118
|
+
via: 'fedcm';
|
|
119
|
+
}>;
|
|
55
120
|
interface ButtonLook {
|
|
56
121
|
/**
|
|
57
122
|
* `redirect` (default) sends the whole page to Atlas. `popup` signs in inside
|
|
@@ -66,6 +131,20 @@ interface ButtonLook {
|
|
|
66
131
|
text?: 'signin' | 'signup' | 'continue';
|
|
67
132
|
className?: string;
|
|
68
133
|
onError?: (e: Error) => void;
|
|
134
|
+
/** Label language (BCP 47). Default: the page's <html lang>, else English. */
|
|
135
|
+
locale?: string;
|
|
136
|
+
/** Accessible name override; default the visible label. */
|
|
137
|
+
ariaLabel?: string;
|
|
138
|
+
/** Called once the button is in the DOM (also dispatched as atlasid:ready). */
|
|
139
|
+
onReady?: (detail: {
|
|
140
|
+
version: string;
|
|
141
|
+
}) => void;
|
|
142
|
+
/**
|
|
143
|
+
* One Tap: offer the browser's FedCM account prompt when the button mounts
|
|
144
|
+
* (browser mode). The result goes to onSuccess; where FedCM is unavailable
|
|
145
|
+
* or the user dismisses it, nothing changes and the button stays.
|
|
146
|
+
*/
|
|
147
|
+
oneTap?: boolean;
|
|
69
148
|
}
|
|
70
149
|
/**
|
|
71
150
|
* Browser mode (PKCE in the browser): pass clientId + redirectUri.
|
|
@@ -81,7 +160,11 @@ export declare function SignInWithAtlasButton(props: SignInWithAtlasButtonProps)
|
|
|
81
160
|
type: string;
|
|
82
161
|
className: string | undefined;
|
|
83
162
|
style: CSSProperties;
|
|
84
|
-
onClick: (
|
|
163
|
+
onClick: (ev?: {
|
|
164
|
+
currentTarget?: unknown;
|
|
165
|
+
}) => void;
|
|
166
|
+
ref: (node: HTMLButtonElement | null) => void;
|
|
167
|
+
'aria-label': string;
|
|
85
168
|
'data-atlas': string;
|
|
86
|
-
},
|
|
169
|
+
}, HTMLButtonElement>;
|
|
87
170
|
export {};
|