@passflow/react 0.9.0 → 0.10.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 +25 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +132 -122
- package/dist/index.es.js.map +1 -1
- package/dist/src/components/provider/index.d.ts +2 -1
- package/dist/src/components/provider/index.d.ts.map +1 -1
- package/dist/src/components/provider/passflow-provider.d.ts +39 -5
- package/dist/src/components/provider/passflow-provider.d.ts.map +1 -1
- package/dist/src/components/provider/upgrade-provider.d.ts +49 -0
- package/dist/src/components/provider/upgrade-provider.d.ts.map +1 -0
- package/dist/src/components/ui/button/index.d.ts +12 -1
- package/dist/src/components/ui/button/index.d.ts.map +1 -1
- package/dist/src/components/ui/index.d.ts +2 -0
- package/dist/src/components/ui/index.d.ts.map +1 -1
- package/dist/src/components/ui/login-screen/consent.d.ts +2 -0
- package/dist/src/components/ui/login-screen/consent.d.ts.map +1 -1
- package/dist/src/components/ui/spinner/index.d.ts +23 -0
- package/dist/src/components/ui/spinner/index.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/challenge.d.ts +12 -0
- package/dist/src/components/ui/upgrade-dialog/challenge.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/factor-list.d.ts +20 -0
- package/dist/src/components/ui/upgrade-dialog/factor-list.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/index.d.ts +8 -0
- package/dist/src/components/ui/upgrade-dialog/index.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/state-mapping.d.ts +119 -0
- package/dist/src/components/ui/upgrade-dialog/state-mapping.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/status.d.ts +27 -0
- package/dist/src/components/ui/upgrade-dialog/status.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/types.d.ts +188 -0
- package/dist/src/components/ui/upgrade-dialog/types.d.ts.map +1 -0
- package/dist/src/components/ui/upgrade-dialog/upgrade-dialog.d.ts +13 -0
- package/dist/src/components/ui/upgrade-dialog/upgrade-dialog.d.ts.map +1 -0
- package/dist/src/context/index.d.ts +1 -0
- package/dist/src/context/index.d.ts.map +1 -1
- package/dist/src/context/upgrade-context.d.ts +85 -0
- package/dist/src/context/upgrade-context.d.ts.map +1 -0
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/use-upgrade.d.ts +43 -0
- package/dist/src/hooks/use-upgrade.d.ts.map +1 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/upgrade-auth.d.ts +38 -0
- package/dist/src/utils/upgrade-auth.d.ts.map +1 -0
- package/dist/style.css +1 -1
- package/package.json +4 -4
- package/dist/src/components/flow/upgrade-required-placeholder.d.ts +0 -21
- package/dist/src/components/flow/upgrade-required-placeholder.d.ts.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { PassflowProvider, OIDCExchangeContext } from './passflow-provider';
|
|
2
|
-
export type { OIDCExchangeContextValue } from './passflow-provider';
|
|
2
|
+
export type { OIDCExchangeContextValue, PassflowUpgradeOptions } from './passflow-provider';
|
|
3
|
+
export { UpgradeProvider, type UpgradeProviderProps } from './upgrade-provider';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,10 +1,39 @@
|
|
|
1
|
+
import { UpgradeProviderProps } from './upgrade-provider';
|
|
1
2
|
import { NavigateFunction, RouterType } from '../../context';
|
|
2
3
|
import { PassflowConfig } from '@passflow/core';
|
|
3
4
|
import { default as React, FC, ReactNode } from 'react';
|
|
5
|
+
/**
|
|
6
|
+
* The assurance-upgrade options a consumer may set on `PassflowProvider`.
|
|
7
|
+
*
|
|
8
|
+
* `children`, `enabled` and `backend` are owned by `PassflowProvider` itself:
|
|
9
|
+
* `backend` is a top-level prop (§13.5 — "where your API is" is the headline
|
|
10
|
+
* act, not a nested detail) and `enabled` is derived from `upgrade`/`backend`
|
|
11
|
+
* below, so there is exactly one source for each.
|
|
12
|
+
*/
|
|
13
|
+
export type PassflowUpgradeOptions = Omit<UpgradeProviderProps, 'children' | 'enabled' | 'backend'>;
|
|
4
14
|
type PassflowProviderProps = PassflowConfig & {
|
|
5
15
|
children: ReactNode;
|
|
6
16
|
navigate?: NavigateFunction;
|
|
7
17
|
router?: RouterType;
|
|
18
|
+
/**
|
|
19
|
+
* Where the customer's own API is — domain 2 of §13.5's two-domain
|
|
20
|
+
* interception model. Nothing outside this and Passflow's own API is ever
|
|
21
|
+
* observed, and there is no allow-all opt-in. `string | string[]`, an origin
|
|
22
|
+
* or a same-origin path prefix (`'/api'`).
|
|
23
|
+
*/
|
|
24
|
+
backend?: string | string[];
|
|
25
|
+
/**
|
|
26
|
+
* Automatic assurance upgrade (step-up). `undefined` ⇒ **off**, so no
|
|
27
|
+
* existing consumer changes behaviour on upgrade. `true` ⇒ on with
|
|
28
|
+
* defaults; an object ⇒ on with those options; `false` ⇒ off even when
|
|
29
|
+
* `backend` is declared.
|
|
30
|
+
*
|
|
31
|
+
* Declaring `backend` also turns it on: naming where your API is has no
|
|
32
|
+
* other meaning, and §13.5's acceptance configuration is `backend` plus one
|
|
33
|
+
* attached client. The global `window.fetch` patch is a separate, explicit
|
|
34
|
+
* act (`upgrade={{ interceptFetch: true }}`) and stays off by default.
|
|
35
|
+
*/
|
|
36
|
+
upgrade?: boolean | PassflowUpgradeOptions;
|
|
8
37
|
};
|
|
9
38
|
/**
|
|
10
39
|
* Read `parent_challenge_id` from the current URL's query string.
|
|
@@ -71,17 +100,22 @@ type ParentChallengeMeta = {
|
|
|
71
100
|
* - 200 { redirect_url } → the interceptor's fetch wrapper follows
|
|
72
101
|
* the redirect (sole owner of redirect_url navigation; this hook
|
|
73
102
|
* must never navigate on OK responses — see the res.ok branch).
|
|
74
|
-
* - 403 { error: "upgrade_required", ... } →
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* UNREACHABLE today (server's EvaluatePolicy is a no-op
|
|
78
|
-
* scaffold); activates when Subtask E lands.
|
|
103
|
+
* - 403 { error: "upgrade_required", ... } → falls through to the
|
|
104
|
+
* login form. Factor elevation on an existing session is
|
|
105
|
+
* `UpgradeProvider`'s flow, not this probe's.
|
|
79
106
|
* - 401 → clear stale tokens, fall through to login form.
|
|
80
107
|
*
|
|
81
108
|
* On any decision-point that ends with "render login form," the
|
|
82
109
|
* SDK consumer's existing PassflowFlow render path picks up
|
|
83
110
|
* naturally.
|
|
84
111
|
*/
|
|
112
|
+
/**
|
|
113
|
+
* `'upgrade_required'` is vestigial and kept deliberately (§8.4): it is
|
|
114
|
+
* unreachable today — the 403 branch below sets `'fallback_to_login'` — and
|
|
115
|
+
* removing a member from an exported union would be a type-level breaking
|
|
116
|
+
* change for anyone reading `OIDCExchangeContextValue`. Assurance elevation is
|
|
117
|
+
* now `UpgradeProvider`'s job, not a placeholder's.
|
|
118
|
+
*/
|
|
85
119
|
type ExchangeState = 'idle' | 'exchanging' | 'upgrade_required' | 'fallback_to_login';
|
|
86
120
|
/**
|
|
87
121
|
* Context surface exposed to children so the SDK's own components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passflow-provider.d.ts","sourceRoot":"","sources":["../../../../src/components/provider/passflow-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAGrB,KAAK,UAAU,EAIhB,MAAM,WAAW,CAAC;AACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"passflow-provider.d.ts","sourceRoot":"","sources":["../../../../src/components/provider/passflow-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACpG,OAAO,EAEL,KAAK,gBAAgB,EAGrB,KAAK,UAAU,EAIhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAiC,KAAK,cAAc,EAA2B,MAAM,gBAAgB,CAAC;AAC7G,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAiE,MAAM,OAAO,CAAC;AACtH,OAAO,oBAAoB,CAAC;AAE5B;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAEpG,KAAK,qBAAqB,GAAG,cAAc,GAAG;IAC5C,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;CAC5C,CAAC;AAsBF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,QAAO,MAAM,GAAG,SAQxD,CAAC;AAiCF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,uBAAuB,QAAO,OAA+B,CAAC;AAqK3E;;;GAGG;AACH,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;;;;;;GAMG;AACH,KAAK,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAwMtF;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,yCAE9B,CAAC;AAEH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA+ItD,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { UpgradeDialogLabels, UpgradeDialogProps } from '../ui/upgrade-dialog';
|
|
2
|
+
import { ReplayPolicy, UpgradeDiagnosticSink, UpgradeFactor } from '@passflow/core';
|
|
3
|
+
import { FC, ReactElement, ReactNode } from 'react';
|
|
4
|
+
export type UpgradeProviderProps = {
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
/** Default `true`. `false` installs nothing and leaves the hook inert. */
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Where the customer's own API is — domain 2 (§13.5). Nothing outside this
|
|
10
|
+
* and Passflow's own API is ever observed, and there is no allow-all opt-in.
|
|
11
|
+
*/
|
|
12
|
+
backend?: string | string[];
|
|
13
|
+
/**
|
|
14
|
+
* Patches `globalThis.fetch` through the core's registry. **Off by default**,
|
|
15
|
+
* and a different decision from enabling the UI: one prop for both would
|
|
16
|
+
* bundle "show me the verification prompt" with "patch the global", and only
|
|
17
|
+
* the second has the blast radius.
|
|
18
|
+
*/
|
|
19
|
+
interceptFetch?: boolean;
|
|
20
|
+
/** Requires the RFC 9470 channel. The body is then never read for a challenge. */
|
|
21
|
+
requireChallengeChannel?: 'header';
|
|
22
|
+
/** NARROWING ONLY: `false` excludes an admitted URL; `true` cannot widen. */
|
|
23
|
+
shouldIntercept?: (url: string) => boolean;
|
|
24
|
+
replay?: ReplayPolicy;
|
|
25
|
+
/** The fetch surface's only cancellation option. Default `'resolve-original'`. */
|
|
26
|
+
onCancel?: 'resolve-original' | 'reject';
|
|
27
|
+
onUpgradeDiagnostic?: UpgradeDiagnosticSink;
|
|
28
|
+
factors?: readonly UpgradeFactor[];
|
|
29
|
+
maxAttempts?: number;
|
|
30
|
+
relyingPartyId?: string;
|
|
31
|
+
/** Per-factor wording for the dialog. */
|
|
32
|
+
labels?: UpgradeDialogLabels;
|
|
33
|
+
title?: string;
|
|
34
|
+
/**
|
|
35
|
+
* FR5's render-prop override. It receives the **exact** props the built-in
|
|
36
|
+
* dialog would render — a typed, constrained override with no `className` or
|
|
37
|
+
* `style` leak.
|
|
38
|
+
*
|
|
39
|
+
* It carries the same obligations as the built-in dialog, the selection
|
|
40
|
+
* signal included: the `challenge` state's `onSelectFactor` must be called
|
|
41
|
+
* when the user picks a factor, because that is the only thing that reports
|
|
42
|
+
* §13.2's selection boundary to the controller. An override that never calls
|
|
43
|
+
* it leaves the controller `collecting` for the whole ceremony, so a late
|
|
44
|
+
* join re-ranks mid-entry — degraded, not silent.
|
|
45
|
+
*/
|
|
46
|
+
renderDialog?: (props: UpgradeDialogProps) => ReactElement | null;
|
|
47
|
+
};
|
|
48
|
+
export declare const UpgradeProvider: FC<UpgradeProviderProps>;
|
|
49
|
+
//# sourceMappingURL=upgrade-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-provider.d.ts","sourceRoot":"","sources":["../../../../src/components/provider/upgrade-provider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAwB,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAYpH,OAAO,EAIL,KAAK,YAAY,EAEjB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAQnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAqD,MAAM,OAAO,CAAC;AAEtH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,uBAAuB,CAAC,EAAE,QAAQ,CAAC;IACnC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,kBAAkB,GAAG,QAAQ,CAAC;IACzC,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;IAC5C,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,YAAY,GAAG,IAAI,CAAC;CACnE,CAAC;AAkHF,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAqWpD,CAAC"}
|
|
@@ -7,12 +7,23 @@ type RippleProps = {
|
|
|
7
7
|
export declare const Ripple: FC<RippleProps>;
|
|
8
8
|
type TButton = PropsWithChildren & ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
9
9
|
size: 'small' | 'medium' | 'big';
|
|
10
|
-
variant: 'primary' | 'secondary' | 'outlined' | 'warning' | 'clean' | 'provider' | 'dark';
|
|
10
|
+
variant: 'primary' | 'secondary' | 'outlined' | 'warning' | 'clean' | 'provider' | 'dark' | 'option';
|
|
11
11
|
type: 'button' | 'submit' | 'reset';
|
|
12
12
|
withIcon?: boolean;
|
|
13
13
|
asIcon?: boolean;
|
|
14
14
|
className?: string;
|
|
15
15
|
withRipple?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* The `option` variant's second line — the hint under the label. Rendered
|
|
18
|
+
* only by that variant, which owns the two-line geometry.
|
|
19
|
+
*/
|
|
20
|
+
description?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Toggle state for the `option` variant: mirrored to `aria-pressed` and
|
|
23
|
+
* styled by the variant itself, so no call site has to describe what
|
|
24
|
+
* "selected" looks like.
|
|
25
|
+
*/
|
|
26
|
+
pressed?: boolean;
|
|
16
27
|
};
|
|
17
28
|
export declare const Button: FC<TButton>;
|
|
18
29
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/button/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,EAAE,EAGP,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/button/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,EAAE,EAGP,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AACf,OAAO,oBAAoB,CAAC;AAE5B,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CASlC,CAAC;AAEF,KAAK,OAAO,GAAG,iBAAiB,GAC9B,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACxC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrG,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,OAAO,CA+F9B,CAAC"}
|
|
@@ -4,8 +4,10 @@ export { Button } from './button';
|
|
|
4
4
|
export * from './fields';
|
|
5
5
|
export * from './providers-box';
|
|
6
6
|
export { Link } from './link';
|
|
7
|
+
export { Spinner, type SpinnerProps, type SpinnerSize } from './spinner';
|
|
7
8
|
export { Switch } from './switch';
|
|
8
9
|
export * from './popover';
|
|
9
10
|
export * from './dialog';
|
|
10
11
|
export * from './login-screen';
|
|
12
|
+
export { UpgradeDialog, UpgradeChallengeView, UpgradeFactorList, UpgradeStatus, type UpgradeStatusState, DEFAULT_FACTOR_LABELS, dialogOutcomeFromError, describeAssuranceBar, readAssuranceBar, UPGRADE_FACTOR_CODE_CONTRACTS, toDialogFactors, toDialogState, upgradeDialogDismissHandler, type ToDialogStateInput, type UpgradeChallengeSnapshot, type UpgradeDialogErrorKind, type UpgradeDialogHandlers, type UpgradeDialogLabels, type UpgradeDialogOutcome, type UpgradeDialogUiState, type UpgradeFactorSnapshot, type UpgradePromptSnapshot, type UpgradeDialogCancelledState, type UpgradeDialogChallengeState, type UpgradeDialogExhaustedState, type UpgradeDialogFactor, type UpgradeDialogInsufficientState, type UpgradeDialogProps, type UpgradeDialogState, type UpgradeDialogSuccessState, type UpgradeDialogTransportState, type UpgradeDialogUnavailableState, type UpgradeDialogUnsatisfiableState, type UpgradeDialogWorkingState, type UpgradeFactorCodeContract, } from './upgrade-dialog';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAM/B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,6BAA6B,EAC7B,eAAe,EACf,aAAa,EACb,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC"}
|
|
@@ -8,6 +8,8 @@ import { LoginConsentState } from './types';
|
|
|
8
8
|
* button submits the subset that is still on, so "Allow" never grants more than
|
|
9
9
|
* what is visible on screen. Deny is a peer of Allow, not a hidden link: a
|
|
10
10
|
* consent screen where refusing is harder than accepting is a dark pattern.
|
|
11
|
+
* For the same reason neither button takes initial focus: a bare Enter on a
|
|
12
|
+
* freshly loaded screen must not grant every requested scope.
|
|
11
13
|
*/
|
|
12
14
|
export declare const LoginConsent: FC<LoginConsentState>;
|
|
13
15
|
//# sourceMappingURL=consent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/login-screen/consent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD
|
|
1
|
+
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/login-screen/consent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAgD9C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
export type SpinnerSize = 'small' | 'medium';
|
|
3
|
+
export type SpinnerProps = {
|
|
4
|
+
/** `small` sits inline beside a line of text; `medium` stands alone. */
|
|
5
|
+
size?: SpinnerSize;
|
|
6
|
+
/**
|
|
7
|
+
* The accessible name. Omit it when a sibling already announces the busy
|
|
8
|
+
* state — the ring is then decorative and hidden from assistive technology,
|
|
9
|
+
* which is what a status region with its own live text wants.
|
|
10
|
+
*/
|
|
11
|
+
label?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The indeterminate activity ring.
|
|
15
|
+
*
|
|
16
|
+
* It exists as a primitive so its diameter and stroke live in one place rather
|
|
17
|
+
* than in each consuming component's stylesheet. The upgrade dialog uses it;
|
|
18
|
+
* the login screen still draws its own identical ring in
|
|
19
|
+
* `login-screen.css` and should be migrated onto this when that file is next
|
|
20
|
+
* touched.
|
|
21
|
+
*/
|
|
22
|
+
export declare const Spinner: FC<SpinnerProps>;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/spinner/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,eAAe,CAAC;AAEvB,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG;IACzB,wEAAwE;IACxE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAOpC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { UpgradeDialogChallengeState } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* The collecting view: the suggested factor, its input affordance, the
|
|
5
|
+
* alternatives toggle, and the two terminal controls.
|
|
6
|
+
*
|
|
7
|
+
* Selection is reported through `onSelectFactor` before `onSubmit` ever fires —
|
|
8
|
+
* architecture §13.2's late-join boundary is factor selection, not submission,
|
|
9
|
+
* so the controller must learn of the choice while the user is still typing.
|
|
10
|
+
*/
|
|
11
|
+
export declare const UpgradeChallengeView: FC<UpgradeDialogChallengeState>;
|
|
12
|
+
//# sourceMappingURL=challenge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/upgrade-dialog/challenge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAoC,MAAM,OAAO,CAAC;AAKlE,OAAO,KAAK,EAAE,2BAA2B,EAAqB,MAAM,SAAS,CAAC;AAK9E;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,2BAA2B,CAoHhE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { UpgradeDialogFactor, UpgradeFactorType } from './types';
|
|
3
|
+
type UpgradeFactorListProps = {
|
|
4
|
+
factors: readonly UpgradeDialogFactor[];
|
|
5
|
+
selected: UpgradeFactorType;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
label?: string;
|
|
8
|
+
onSelect: (factor: UpgradeFactorType) => void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* The "use another way" alternatives. Selecting one reports the user's choice;
|
|
12
|
+
* it never navigates.
|
|
13
|
+
*
|
|
14
|
+
* Each row is `Button variant='option'`: the two-line geometry and the pressed
|
|
15
|
+
* look belong to that variant in the button library, not to this list. The list
|
|
16
|
+
* contributes layout only.
|
|
17
|
+
*/
|
|
18
|
+
export declare const UpgradeFactorList: FC<UpgradeFactorListProps>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=factor-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factor-list.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/upgrade-dialog/factor-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtE,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAyBxD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { UpgradeDialog } from './upgrade-dialog';
|
|
2
|
+
export { UpgradeChallengeView } from './challenge';
|
|
3
|
+
export { UpgradeFactorList } from './factor-list';
|
|
4
|
+
export { UPGRADE_SUCCESS_AUTO_CLOSE_MS, UpgradeStatus, type UpgradeStatusState } from './status';
|
|
5
|
+
export { DEFAULT_FACTOR_LABELS, dialogOutcomeFromError, describeAssuranceBar, readAssuranceBar, UPGRADE_FACTOR_CODE_CONTRACTS, toDialogFactors, toDialogState, upgradeDialogDismissHandler, } from './state-mapping';
|
|
6
|
+
export type { ToDialogStateInput, UpgradeChallengeSnapshot, UpgradeDialogErrorKind, UpgradeDialogHandlers, UpgradeDialogLabels, UpgradeDialogOutcome, UpgradeDialogUiState, UpgradeFactorSnapshot, UpgradePromptSnapshot, } from './state-mapping';
|
|
7
|
+
export type { AssuranceBar, UpgradeDialogCancelledState, UpgradeDialogChallengeState, UpgradeDialogExhaustedState, UpgradeDialogFactor, UpgradeDialogInsufficientState, UpgradeDialogProps, UpgradeDialogState, UpgradeDialogSuccessState, UpgradeDialogTransportState, UpgradeDialogUnavailableState, UpgradeDialogUnsatisfiableState, UpgradeDialogWorkingState, UpgradeFactorCodeContract, UpgradeFactorInput, UpgradeFactorType, } from './types';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/upgrade-dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACjG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,6BAA6B,EAC7B,eAAe,EACf,aAAa,EACb,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,8BAA8B,EAC9B,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,6BAA6B,EAC7B,+BAA+B,EAC/B,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { AssuranceBar, UpgradeDialogFactor, UpgradeDialogState, UpgradeFactorCodeContract, UpgradeFactorInput, UpgradeFactorType } from './types';
|
|
2
|
+
export type UpgradeChallengeSnapshot = {
|
|
3
|
+
requiredLevel?: number;
|
|
4
|
+
acrValues?: string;
|
|
5
|
+
maxAge?: number;
|
|
6
|
+
};
|
|
7
|
+
export type UpgradeFactorSnapshot = {
|
|
8
|
+
type: UpgradeFactorType;
|
|
9
|
+
input: UpgradeFactorInput;
|
|
10
|
+
};
|
|
11
|
+
export type UpgradePromptSnapshot = {
|
|
12
|
+
challenge: UpgradeChallengeSnapshot;
|
|
13
|
+
/** Already ranked by `selectFactors`; index 0 is the suggested factor. */
|
|
14
|
+
factors: readonly UpgradeFactorSnapshot[];
|
|
15
|
+
previousError?: unknown;
|
|
16
|
+
};
|
|
17
|
+
export type UpgradeDialogLabels = Partial<Record<UpgradeFactorType, {
|
|
18
|
+
label: string;
|
|
19
|
+
hint?: string;
|
|
20
|
+
}>>;
|
|
21
|
+
/** How the flight ended, as the controller's outcome summary reports it (§13.4). */
|
|
22
|
+
export type UpgradeDialogOutcome = {
|
|
23
|
+
kind: 'elevated';
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'insufficient';
|
|
26
|
+
obtained: AssuranceBar;
|
|
27
|
+
required: AssuranceBar;
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'cancelled';
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'failed';
|
|
32
|
+
error: unknown;
|
|
33
|
+
};
|
|
34
|
+
export type UpgradeDialogUiState = {
|
|
35
|
+
selected?: UpgradeFactorType | null;
|
|
36
|
+
busy?: boolean;
|
|
37
|
+
showAlternatives?: boolean;
|
|
38
|
+
};
|
|
39
|
+
export type UpgradeDialogHandlers = {
|
|
40
|
+
onSelectFactor: (factor: UpgradeFactorType) => void;
|
|
41
|
+
onToggleAlternatives: () => void;
|
|
42
|
+
onSubmit: (code?: string) => void;
|
|
43
|
+
onCancel: () => void;
|
|
44
|
+
onDismiss: () => void;
|
|
45
|
+
onRetry?: () => void;
|
|
46
|
+
};
|
|
47
|
+
export type ToDialogStateInput = {
|
|
48
|
+
prompt: UpgradePromptSnapshot | null;
|
|
49
|
+
outcome?: UpgradeDialogOutcome;
|
|
50
|
+
ui?: UpgradeDialogUiState;
|
|
51
|
+
labels?: UpgradeDialogLabels;
|
|
52
|
+
handlers: UpgradeDialogHandlers;
|
|
53
|
+
testId?: string;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* How an elevation failure reads to the user. `rejected` is the retryable
|
|
57
|
+
* wrong-answer case, which keeps the dialog open on the challenge.
|
|
58
|
+
*/
|
|
59
|
+
export type UpgradeDialogErrorKind = 'rejected' | 'cancelled' | 'exhausted' | 'unsatisfiable' | 'unavailable' | 'transport' | 'insufficient' | 'session-changed';
|
|
60
|
+
export declare const DEFAULT_FACTOR_LABELS: Record<UpgradeFactorType, {
|
|
61
|
+
label: string;
|
|
62
|
+
hint?: string;
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Per-factor code contracts, keyed by the factor type, which is the only thing
|
|
66
|
+
* about a factor the protocol guarantees.
|
|
67
|
+
*
|
|
68
|
+
* `recovery_codes` is the reason this table exists. The server generates them
|
|
69
|
+
* at `DefaultRecoveryCodeLength` (12) from a 32-character alphanumeric charset
|
|
70
|
+
* and accepts a configured length anywhere in 6..16, so the cap is the server's
|
|
71
|
+
* MAXIMUM — capping at the default would reject a valid code on a deployment
|
|
72
|
+
* that raised it, and capping at six (the old single hardcoded number) rejected
|
|
73
|
+
* every code on every deployment. A shorter configured code simply types
|
|
74
|
+
* shorter; a cap can only ever do harm by being too small.
|
|
75
|
+
*
|
|
76
|
+
* `null` means the factor collects nothing typed: its proof comes from the
|
|
77
|
+
* ceremony, so there is no field and no contract to state.
|
|
78
|
+
*/
|
|
79
|
+
export declare const UPGRADE_FACTOR_CODE_CONTRACTS: Readonly<{
|
|
80
|
+
totp: UpgradeFactorCodeContract;
|
|
81
|
+
email_otp: UpgradeFactorCodeContract;
|
|
82
|
+
sms_otp: UpgradeFactorCodeContract;
|
|
83
|
+
recovery_codes: UpgradeFactorCodeContract;
|
|
84
|
+
passkey: null;
|
|
85
|
+
}>;
|
|
86
|
+
/** Index 0 stays index 0: `selectFactors` already ranked the list, and ranking is not filtering. */
|
|
87
|
+
export declare const toDialogFactors: (factors: readonly UpgradeFactorSnapshot[], labels?: UpgradeDialogLabels) => UpgradeDialogFactor[];
|
|
88
|
+
/**
|
|
89
|
+
* How a failure reads to the user, as the dialog's own vocabulary.
|
|
90
|
+
*
|
|
91
|
+
* Named `dialogOutcomeFromError`, not `classifyUpgradeError`: that name belongs
|
|
92
|
+
* to `@passflow/core`, and holding it here shadowed core's symbol in the
|
|
93
|
+
* package's own star exports, which made the real classifier unreachable to
|
|
94
|
+
* consumers. This function decides nothing about what the error IS — core's
|
|
95
|
+
* classifier does — only which panel that kind is shown on.
|
|
96
|
+
*
|
|
97
|
+
* The dedicated error classes are matched before the kind table because they
|
|
98
|
+
* are not transport failures at all: they carry no `kind`, and core's
|
|
99
|
+
* classifier has nothing to say about them.
|
|
100
|
+
*/
|
|
101
|
+
export declare const dialogOutcomeFromError: (error: unknown) => UpgradeDialogErrorKind;
|
|
102
|
+
export declare const readAssuranceBar: (value: unknown) => AssuranceBar | undefined;
|
|
103
|
+
/** Human wording for a bar, on whichever axis it constrains. */
|
|
104
|
+
export declare const describeAssuranceBar: (bar?: AssuranceBar) => string;
|
|
105
|
+
/**
|
|
106
|
+
* The single projection. A terminal `outcome` always wins over an open prompt;
|
|
107
|
+
* an empty offered factor list is the `no usable factor` outcome; a `busy`
|
|
108
|
+
* ceremony with no code to type is `working`; everything else is the challenge.
|
|
109
|
+
*/
|
|
110
|
+
export declare const toDialogState: (input: ToDialogStateInput) => UpgradeDialogState;
|
|
111
|
+
/**
|
|
112
|
+
* What Escape and an overlay click mean in each state. Cancellation must reach
|
|
113
|
+
* the controller or the caller's promise hangs (§8.1), so this is never a bare
|
|
114
|
+
* close; `success` has nothing to cancel, so it closes instead of cancelling —
|
|
115
|
+
* returning `undefined` there made Escape and the overlay inert on the one
|
|
116
|
+
* state every user reaches.
|
|
117
|
+
*/
|
|
118
|
+
export declare const upgradeDialogDismissHandler: (state: UpgradeDialogState) => (() => void) | undefined;
|
|
119
|
+
//# sourceMappingURL=state-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-mapping.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/upgrade-dialog/state-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { UpgradeDialogState } from './types';
|
|
3
|
+
/** Every state that is not the collecting challenge. */
|
|
4
|
+
export type UpgradeStatusState = Exclude<UpgradeDialogState, {
|
|
5
|
+
kind: 'challenge';
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* How long `success` stays on screen before it closes itself (§13.4: "reports
|
|
9
|
+
* success and closes"). Long enough to be read, short enough that the app is
|
|
10
|
+
* never held behind a modal the user cannot see a reason for.
|
|
11
|
+
*/
|
|
12
|
+
export declare const UPGRADE_SUCCESS_AUTO_CLOSE_MS = 1800;
|
|
13
|
+
/**
|
|
14
|
+
* The non-collecting views: `working`, `success` and the six terminal outcomes
|
|
15
|
+
* of §13.3's settlement table.
|
|
16
|
+
*
|
|
17
|
+
* `insufficient` is deliberately rendered in the problem tone with both bars
|
|
18
|
+
* shown: the elevation succeeded and the action still did not, and the dialog
|
|
19
|
+
* must not report success when the replay was re-challenged (§13.4).
|
|
20
|
+
*
|
|
21
|
+
* `success` owns its own exit: a Done control and an auto-close timer, both
|
|
22
|
+
* calling the state's `onDismiss`. The affordance lives here rather than in the
|
|
23
|
+
* provider because a modal that cannot be closed is a property of this
|
|
24
|
+
* component, and the Storybook story for the state has to show the way out.
|
|
25
|
+
*/
|
|
26
|
+
export declare const UpgradeStatus: FC<UpgradeStatusState>;
|
|
27
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/upgrade-dialog/status.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAa,MAAM,OAAO,CAAC;AAK3C,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEhE,wDAAwD;AACxD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAepF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AASlD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA4DhD,CAAC"}
|