@arcblock/did-connect-react 3.4.14 → 3.5.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.
Files changed (208) hide show
  1. package/dist/standalone/did-connect-react.css +1 -0
  2. package/dist/standalone/index.js +133700 -0
  3. package/lib/Connect/components/login-item/connect-choose-list.js +111 -111
  4. package/lib/Connect/components/login-item/connect-provider-list.js +180 -180
  5. package/lib/Connect/components/login-item/mobile-login-item.js +56 -56
  6. package/lib/Connect/components/login-item/passkey-login-item.js +27 -29
  7. package/lib/Connect/components/login-item/web-login-item.js +31 -29
  8. package/lib/Connect/connect.js +202 -197
  9. package/lib/Connect/contexts/state.js +19 -17
  10. package/lib/Connect/hooks/provider-list.js +33 -33
  11. package/lib/Connect/plugins/email/list-item.js +14 -14
  12. package/lib/Connect/plugins/email/placeholder.js +77 -76
  13. package/lib/package.json.js +1 -1
  14. package/package.json +14 -9
  15. package/.aigne/doc-smith/config.yaml +0 -85
  16. package/.aigne/doc-smith/history.yaml +0 -6
  17. package/.aigne/doc-smith/output/structure-plan.json +0 -204
  18. package/.aigne/doc-smith/translation-cache.yaml +0 -11
  19. package/.aigne/doc-smith/upload-cache.yaml +0 -213
  20. package/docs/_sidebar.md +0 -18
  21. package/docs/advanced-authentication-methods.ja.md +0 -261
  22. package/docs/advanced-authentication-methods.md +0 -261
  23. package/docs/advanced-authentication-methods.zh-TW.md +0 -261
  24. package/docs/advanced-authentication-methods.zh.md +0 -261
  25. package/docs/advanced-utilities.ja.md +0 -132
  26. package/docs/advanced-utilities.md +0 -132
  27. package/docs/advanced-utilities.zh-TW.md +0 -132
  28. package/docs/advanced-utilities.zh.md +0 -132
  29. package/docs/advanced.ja.md +0 -95
  30. package/docs/advanced.md +0 -95
  31. package/docs/advanced.zh-TW.md +0 -95
  32. package/docs/advanced.zh.md +0 -95
  33. package/docs/api-reference.ja.md +0 -178
  34. package/docs/api-reference.md +0 -178
  35. package/docs/api-reference.zh-TW.md +0 -178
  36. package/docs/api-reference.zh.md +0 -178
  37. package/docs/assets/diagram/core-components-session-provider-01.ja.jpg +0 -0
  38. package/docs/assets/diagram/core-components-session-provider-01.jpg +0 -0
  39. package/docs/assets/diagram/core-components-session-provider-01.zh-TW.jpg +0 -0
  40. package/docs/assets/diagram/core-components-session-provider-01.zh.jpg +0 -0
  41. package/docs/assets/diagram/did-connect-diagram-0.ja.jpg +0 -0
  42. package/docs/assets/diagram/did-connect-diagram-0.jpg +0 -0
  43. package/docs/assets/diagram/did-connect-diagram-0.zh-TW.jpg +0 -0
  44. package/docs/assets/diagram/did-connect-diagram-0.zh.jpg +0 -0
  45. package/docs/assets/diagram/overview-01.ja.jpg +0 -0
  46. package/docs/assets/diagram/overview-01.jpg +0 -0
  47. package/docs/assets/diagram/overview-01.zh-TW.jpg +0 -0
  48. package/docs/assets/diagram/overview-01.zh.jpg +0 -0
  49. package/docs/assets/diagram/use-connect-diagram-0.ja.jpg +0 -0
  50. package/docs/assets/diagram/use-connect-diagram-0.jpg +0 -0
  51. package/docs/assets/diagram/use-connect-diagram-0.zh-TW.jpg +0 -0
  52. package/docs/assets/diagram/use-connect-diagram-0.zh.jpg +0 -0
  53. package/docs/core-components-did-connect.ja.md +0 -166
  54. package/docs/core-components-did-connect.md +0 -166
  55. package/docs/core-components-did-connect.zh-TW.md +0 -166
  56. package/docs/core-components-did-connect.zh.md +0 -166
  57. package/docs/core-components-session-provider.ja.md +0 -197
  58. package/docs/core-components-session-provider.md +0 -197
  59. package/docs/core-components-session-provider.zh-TW.md +0 -197
  60. package/docs/core-components-session-provider.zh.md +0 -197
  61. package/docs/core-components.ja.md +0 -16
  62. package/docs/core-components.md +0 -16
  63. package/docs/core-components.zh-TW.md +0 -16
  64. package/docs/core-components.zh.md +0 -16
  65. package/docs/getting-started.ja.md +0 -138
  66. package/docs/getting-started.md +0 -138
  67. package/docs/getting-started.zh-TW.md +0 -138
  68. package/docs/getting-started.zh.md +0 -138
  69. package/docs/hooks-use-connect.ja.md +0 -178
  70. package/docs/hooks-use-connect.md +0 -178
  71. package/docs/hooks-use-connect.zh-TW.md +0 -178
  72. package/docs/hooks-use-connect.zh.md +0 -178
  73. package/docs/hooks-use-did.ja.md +0 -107
  74. package/docs/hooks-use-did.md +0 -107
  75. package/docs/hooks-use-did.zh-TW.md +0 -107
  76. package/docs/hooks-use-did.zh.md +0 -107
  77. package/docs/hooks-use-oauth-passkey.ja.md +0 -188
  78. package/docs/hooks-use-oauth-passkey.md +0 -188
  79. package/docs/hooks-use-oauth-passkey.zh-TW.md +0 -188
  80. package/docs/hooks-use-oauth-passkey.zh.md +0 -188
  81. package/docs/hooks.ja.md +0 -23
  82. package/docs/hooks.md +0 -23
  83. package/docs/hooks.zh-TW.md +0 -23
  84. package/docs/hooks.zh.md +0 -23
  85. package/docs/overview.ja.md +0 -119
  86. package/docs/overview.md +0 -119
  87. package/docs/overview.zh-TW.md +0 -119
  88. package/docs/overview.zh.md +0 -119
  89. package/docs/ui-components-address.ja.md +0 -121
  90. package/docs/ui-components-address.md +0 -121
  91. package/docs/ui-components-address.zh-TW.md +0 -121
  92. package/docs/ui-components-address.zh.md +0 -121
  93. package/docs/ui-components-avatar.ja.md +0 -65
  94. package/docs/ui-components-avatar.md +0 -65
  95. package/docs/ui-components-avatar.zh-TW.md +0 -65
  96. package/docs/ui-components-avatar.zh.md +0 -65
  97. package/docs/ui-components-button.ja.md +0 -99
  98. package/docs/ui-components-button.md +0 -99
  99. package/docs/ui-components-button.zh-TW.md +0 -99
  100. package/docs/ui-components-button.zh.md +0 -99
  101. package/docs/ui-components-logo.ja.md +0 -52
  102. package/docs/ui-components-logo.md +0 -52
  103. package/docs/ui-components-logo.zh-TW.md +0 -52
  104. package/docs/ui-components-logo.zh.md +0 -52
  105. package/docs/ui-components.ja.md +0 -57
  106. package/docs/ui-components.md +0 -57
  107. package/docs/ui-components.zh-TW.md +0 -57
  108. package/docs/ui-components.zh.md +0 -57
  109. package/glossary.md +0 -1
  110. package/src/Address/index.jsx +0 -2
  111. package/src/Avatar/index.jsx +0 -2
  112. package/src/Button/Button.stories.jsx +0 -7
  113. package/src/Button/index.jsx +0 -21
  114. package/src/Connect/Connect.stories.jsx +0 -34
  115. package/src/Connect/assets/locale.js +0 -149
  116. package/src/Connect/assets/login-bg.png +0 -0
  117. package/src/Connect/assets/login-slogan.js +0 -7
  118. package/src/Connect/components/action-button.jsx +0 -22
  119. package/src/Connect/components/app-tips.jsx +0 -156
  120. package/src/Connect/components/auto-height.jsx +0 -38
  121. package/src/Connect/components/back-button.jsx +0 -24
  122. package/src/Connect/components/connect-status.jsx +0 -259
  123. package/src/Connect/components/did-connect-title.jsx +0 -107
  124. package/src/Connect/components/download-tips.jsx +0 -55
  125. package/src/Connect/components/loading.jsx +0 -25
  126. package/src/Connect/components/login-item/connect-choose-list.jsx +0 -317
  127. package/src/Connect/components/login-item/connect-provider-list.jsx +0 -462
  128. package/src/Connect/components/login-item/login-method-item.jsx +0 -139
  129. package/src/Connect/components/login-item/mobile-login-item.jsx +0 -181
  130. package/src/Connect/components/login-item/passkey-login-item.jsx +0 -54
  131. package/src/Connect/components/login-item/wallet-login-options.jsx +0 -129
  132. package/src/Connect/components/login-item/web-login-item.jsx +0 -157
  133. package/src/Connect/components/mask-overlay.jsx +0 -32
  134. package/src/Connect/components/refresh-overlay.jsx +0 -52
  135. package/src/Connect/components/switch-app.jsx +0 -69
  136. package/src/Connect/connect.jsx +0 -617
  137. package/src/Connect/contexts/state.jsx +0 -234
  138. package/src/Connect/fallback-connect.jsx +0 -47
  139. package/src/Connect/fullpage.jsx +0 -3
  140. package/src/Connect/hooks/auth-url.js +0 -31
  141. package/src/Connect/hooks/method-list.js +0 -121
  142. package/src/Connect/hooks/page-show.js +0 -24
  143. package/src/Connect/hooks/provider-list.js +0 -165
  144. package/src/Connect/hooks/security.js +0 -40
  145. package/src/Connect/hooks/token.js +0 -627
  146. package/src/Connect/hooks/use-apps.js +0 -69
  147. package/src/Connect/hooks/use-quick-connect.js +0 -119
  148. package/src/Connect/index.jsx +0 -21
  149. package/src/Connect/landing-page.jsx +0 -3
  150. package/src/Connect/plugins/email/index.jsx +0 -85
  151. package/src/Connect/plugins/email/list-item.jsx +0 -34
  152. package/src/Connect/plugins/email/placeholder.jsx +0 -365
  153. package/src/Connect/plugins/index.js +0 -2
  154. package/src/Connect/use-connect.jsx +0 -321
  155. package/src/Connect/with-blocklet.jsx +0 -26
  156. package/src/Connect/with-bridge-call.jsx +0 -138
  157. package/src/Federated/context.jsx +0 -93
  158. package/src/Federated/index.jsx +0 -1
  159. package/src/Logo/index.jsx +0 -2
  160. package/src/OAuth/bind-conflict-alert.jsx +0 -37
  161. package/src/OAuth/context.jsx +0 -407
  162. package/src/OAuth/guest.svg +0 -20
  163. package/src/OAuth/index.jsx +0 -1
  164. package/src/OAuth/passport-switcher.jsx +0 -2
  165. package/src/Passkey/actions.jsx +0 -217
  166. package/src/Passkey/constants.js +0 -2
  167. package/src/Passkey/context.jsx +0 -395
  168. package/src/Passkey/dialog.jsx +0 -401
  169. package/src/Passkey/icon.jsx +0 -10
  170. package/src/Passkey/index.jsx +0 -2
  171. package/src/Service/index.jsx +0 -96
  172. package/src/Session/assets/did-spaces-guide-cover.svg +0 -1
  173. package/src/Session/assets/did-spaces-guide-icon.svg +0 -7
  174. package/src/Session/context.jsx +0 -7
  175. package/src/Session/did-spaces-guide.jsx +0 -173
  176. package/src/Session/handler.jsx +0 -98
  177. package/src/Session/hooks/use-federated.js +0 -91
  178. package/src/Session/hooks/use-mobile.jsx +0 -6
  179. package/src/Session/hooks/use-protected-routes.js +0 -16
  180. package/src/Session/hooks/use-session-token.js +0 -400
  181. package/src/Session/hooks/use-verify.jsx +0 -76
  182. package/src/Session/index.jsx +0 -1789
  183. package/src/Session/libs/constants.js +0 -17
  184. package/src/Session/libs/did-spaces.js +0 -38
  185. package/src/Session/libs/federated.js +0 -82
  186. package/src/Session/libs/index.js +0 -5
  187. package/src/Session/libs/locales.js +0 -160
  188. package/src/Session/libs/login-mobile.js +0 -80
  189. package/src/Session/window-focus-aware.jsx +0 -28
  190. package/src/SessionManager/index.jsx +0 -2
  191. package/src/Storage/engine/cookie.js +0 -25
  192. package/src/Storage/engine/local-storage.js +0 -57
  193. package/src/Storage/index.js +0 -25
  194. package/src/User/index.js +0 -4
  195. package/src/User/use-did.js +0 -80
  196. package/src/User/wrap-did.jsx +0 -18
  197. package/src/WebWalletSWKeeper/index.jsx +0 -3
  198. package/src/components/PassportSwitcher.jsx +0 -160
  199. package/src/constant.js +0 -27
  200. package/src/error.js +0 -6
  201. package/src/hooks/use-locale.jsx +0 -6
  202. package/src/index.js +0 -32
  203. package/src/locales/en.jsx +0 -15
  204. package/src/locales/index.jsx +0 -13
  205. package/src/locales/zh.jsx +0 -15
  206. package/src/types.d.ts +0 -355
  207. package/src/utils.js +0 -413
  208. package/vite.config.mjs +0 -29
@@ -1,401 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import { useImperativeHandle, useState } from 'react';
3
- import styled from '@emotion/styled';
4
- import {
5
- Alert,
6
- Box,
7
- Button,
8
- CircularProgress,
9
- Dialog,
10
- DialogActions,
11
- DialogContent,
12
- DialogTitle,
13
- Stack,
14
- TextField,
15
- } from '@mui/material';
16
- import isEmail from 'validator/lib/isEmail';
17
- import { Icon } from '@iconify/react';
18
- import passKeyRoundedIcon from '@iconify-icons/material-symbols/passkey-rounded';
19
- import { useMemoizedFn } from 'ahooks';
20
- import Toast from '@arcblock/ux/lib/Toast';
21
- import Typography from '@arcblock/ux/lib/Typography';
22
- import { getCookieOptions } from '@arcblock/ux/lib/Util';
23
- import trim from 'lodash/trim';
24
- import base64 from 'base64-url';
25
- import Cookie from 'js-cookie';
26
- import noop from 'lodash/noop';
27
-
28
- import { usePasskey } from './context';
29
- import { getWebAuthnErrorMessage } from '../utils';
30
- import { VERIFY_CODE_LENGTH } from './constants';
31
-
32
- function PasskeyDialog({ ref, extraParams = {}, createMode = 'connect', action, onSuccess = noop, onError = noop }) {
33
- const { api, locale, t, loginPasskey, logoutPasskey, passkeyState, connectPasskey } = usePasskey();
34
- const isEmailRequired = createMode === 'register';
35
- const [isEmailVerified, setIsEmailVerified] = useState(false);
36
- const isFullScreen = window.innerWidth < 600;
37
- const handleOpenDialog = useMemoizedFn(() => {
38
- passkeyState.openDialog = true;
39
- passkeyState.error = '';
40
- passkeyState.creatingStatus = '';
41
- passkeyState.verifyingStatus = '';
42
- const initialEmail = passkeyState.email;
43
- setIsEmailVerified(initialEmail && isEmailRequired ? !isEmail(initialEmail) : false);
44
- });
45
- const handleCloseDialog = useMemoizedFn(() => {
46
- passkeyState.openDialog = false;
47
- passkeyState.error = '';
48
- passkeyState.creatingStatus = '';
49
- passkeyState.verifyingStatus = '';
50
- const initialEmail = passkeyState.email;
51
- setIsEmailVerified(initialEmail && isEmailRequired ? !isEmail(initialEmail) : false);
52
- });
53
-
54
- const handleSendCode = useMemoizedFn(async (e) => {
55
- e.preventDefault();
56
- if (isEmailRequired && !isEmail(passkeyState.email)) {
57
- setIsEmailVerified(true);
58
- return;
59
- }
60
- setIsEmailVerified(false);
61
- passkeyState.loading = true;
62
- try {
63
- await api.post(`../kyc/email/send?locale=${locale}`, { email: passkeyState.email });
64
- passkeyState.sent = true;
65
- Toast.success(t('codeSentSuccess'));
66
- } catch (error) {
67
- Toast.error(error.message);
68
- document.getElementById('email-input')?.focus();
69
- } finally {
70
- passkeyState.loading = false;
71
- }
72
- });
73
-
74
- const handleVerifyPasskey = useMemoizedFn(async (credentialId = '') => {
75
- try {
76
- passkeyState.verifying = true;
77
- passkeyState.error = '';
78
- if (!credentialId) {
79
- passkeyState.verifyingStatus = '';
80
- }
81
-
82
- const result = await loginPasskey({
83
- ...extraParams,
84
- action,
85
- credentialId,
86
- });
87
-
88
- const cookieOptions = getCookieOptions({ expireInDays: 7 });
89
- Cookie.remove('connected_did', cookieOptions);
90
- Cookie.remove('connected_pk', cookieOptions);
91
- Cookie.remove('connected_wallet_os', cookieOptions);
92
-
93
- passkeyState.verifying = false;
94
- if (result?.sessionToken) {
95
- passkeyState.verifyingStatus = 'succeed';
96
- onSuccess({ ...result, encrypted: false }, (val) => val);
97
- }
98
- } catch (err) {
99
- console.error('Failed to verify passkey', err);
100
- const errorMessage = getWebAuthnErrorMessage(err, t('verifyPasskeyFailed'));
101
- passkeyState.verifying = false;
102
- passkeyState.error = errorMessage;
103
- passkeyState.verifyingStatus = 'error';
104
- await logoutPasskey();
105
- onError(new Error(errorMessage));
106
- }
107
- });
108
-
109
- const handleCreatePasskey = useMemoizedFn(async () => {
110
- if (isEmailRequired && !isEmail(passkeyState.email)) {
111
- setIsEmailVerified(true);
112
- return;
113
- }
114
- setIsEmailVerified(false);
115
- passkeyState.creating = true;
116
- passkeyState.error = '';
117
- passkeyState.creatingStatus = '';
118
-
119
- try {
120
- const result = await connectPasskey({
121
- ...extraParams,
122
- action,
123
- purpose: isEmailRequired ? 'register' : 'connect',
124
- email: isEmailRequired ? base64.encode(passkeyState.email) : '',
125
- });
126
- if (!result) {
127
- // 用户取消的操作
128
- passkeyState.error = t('cancelAuth');
129
- passkeyState.creatingStatus = 'error';
130
- passkeyState.creating = false;
131
- passkeyState.verifying = false;
132
- passkeyState.verifyingStatus = '';
133
- return;
134
- }
135
- passkeyState.creating = false;
136
- passkeyState.openDialog = false;
137
- passkeyState.creatingStatus = 'succeed';
138
-
139
- if (createMode === 'connect') {
140
- onSuccess({ ...result, encrypted: false }, (val) => val);
141
- } else if (result?.credentialId) {
142
- handleVerifyPasskey(result.credentialId);
143
- }
144
- } catch (err) {
145
- console.error('Failed to create passkey', err);
146
- passkeyState.creating = false;
147
- passkeyState.error = getWebAuthnErrorMessage(err, t('createPasskeyFailed'));
148
- passkeyState.creatingStatus = 'error';
149
- }
150
- });
151
-
152
- const handleVerifyCode = useMemoizedFn(async (e) => {
153
- if (e) e.preventDefault();
154
- passkeyState.loading = true;
155
- try {
156
- await api.post(`../kyc/email/verify?locale=${locale}`, { code: passkeyState.code });
157
- passkeyState.verified = true;
158
- handleCreatePasskey();
159
- } catch (error) {
160
- Toast.error(error.message);
161
- passkeyState.verified = false;
162
- document.getElementById(`code-input-${trim(passkeyState.code).length - 1}`)?.focus();
163
- } finally {
164
- passkeyState.loading = false;
165
- }
166
- });
167
-
168
- useImperativeHandle(ref, () => {
169
- return {
170
- open: handleOpenDialog,
171
- close: handleCloseDialog,
172
- handleVerifyCode,
173
- };
174
- }, [handleOpenDialog, handleCloseDialog, handleVerifyCode]);
175
-
176
- const renderActions = () => {
177
- return (
178
- <>
179
- <Button onClick={handleCloseDialog} sx={{ color: 'text.secondary' }}>
180
- {t('cancel')}
181
- </Button>
182
- {isEmailRequired && (
183
- <Button
184
- variant="contained"
185
- onClick={
186
- // eslint-disable-next-line no-nested-ternary
187
- passkeyState.verified ? handleCreatePasskey : passkeyState.sent ? handleVerifyCode : handleSendCode
188
- }
189
- disabled={
190
- passkeyState.verifying ||
191
- passkeyState.creating ||
192
- !passkeyState.email ||
193
- (passkeyState.sent && trim(passkeyState.code).length !== VERIFY_CODE_LENGTH)
194
- }>
195
- {(passkeyState.loading || passkeyState.creating) && <CircularProgress size={16} sx={{ mr: 1 }} />}
196
- {/* eslint-disable-next-line no-nested-ternary */}
197
- {passkeyState.verified ? t('createPasskey') : passkeyState.sent ? t('verifyButton') : t('sendCodeButton')}
198
- </Button>
199
- )}
200
- {!isEmailRequired && (
201
- <Button
202
- variant="contained"
203
- color="primary"
204
- onClick={handleCreatePasskey}
205
- disabled={
206
- passkeyState.loading ||
207
- passkeyState.creating ||
208
- (isEmailRequired && (!passkeyState.email || !passkeyState.verified))
209
- }
210
- startIcon={
211
- (passkeyState.loading || passkeyState.creating) && (
212
- <CircularProgress size={16} sx={{ mr: 1 }} color="inherit" />
213
- )
214
- }>
215
- {passkeyState.loading || passkeyState.creating ? t('creatingPasskey') : t('createPasskey')}
216
- </Button>
217
- )}
218
- </>
219
- );
220
- };
221
-
222
- return (
223
- <StyledDialog
224
- open={passkeyState.openDialog}
225
- onClose={handleCloseDialog}
226
- fullWidth
227
- maxWidth="sm"
228
- fullScreen={isFullScreen}>
229
- <StyledDialogTitle>
230
- <KeyIcon>
231
- <Icon icon={passKeyRoundedIcon} fontSize={24} color="initial" />
232
- </KeyIcon>
233
- {t('createPasskey')}
234
- </StyledDialogTitle>
235
- <StyledDialogContent>
236
- <Typography variant="body1">{t('createPasskeyDesc1')}</Typography>
237
- <Typography variant="body1">{t('createPasskeyDesc2')}</Typography>
238
- {passkeyState.error && <Alert severity="error">{passkeyState.error}</Alert>}
239
- {isEmailRequired && (
240
- <Form>
241
- {!passkeyState.sent && (
242
- <TextField
243
- type="email"
244
- id="email-input"
245
- size="medium"
246
- placeholder={t('emailPlaceholder')}
247
- sx={{ width: '100%', '.MuiFormHelperText-root': { ml: 0 } }}
248
- value={passkeyState.email}
249
- onChange={(e) => {
250
- passkeyState.email = e.target.value;
251
- setIsEmailVerified(!isEmail(passkeyState.email));
252
- }}
253
- disabled={passkeyState.loading || passkeyState.creating}
254
- required
255
- error={isEmailVerified}
256
- helperText={isEmailVerified ? t('emailInvalid') : ''}
257
- />
258
- )}
259
- {passkeyState.sent && !passkeyState.verified && (
260
- <Stack
261
- direction="column"
262
- sx={{
263
- justifyContent: 'center',
264
- alignItems: 'center',
265
- mb: 2,
266
- }}>
267
- <Typography variant="body2">{t('codeSentMessage', { email: passkeyState.email })}</Typography>
268
- <Box sx={{ width: '100%', display: 'flex', justifyContent: 'space-between', gap: 2, mt: 0 }}>
269
- {Array(VERIFY_CODE_LENGTH)
270
- .fill('')
271
- .map((_, index) => (
272
- <TextField
273
- // eslint-disable-next-line react/no-array-index-key
274
- key={`code-input-${index}`}
275
- value={trim(passkeyState.code[index]) || ''}
276
- type="number"
277
- margin="none"
278
- onChange={(e) => {
279
- const newCode = passkeyState.code.split('');
280
- newCode[index] = e.target.value;
281
- passkeyState.code = newCode.join('');
282
- if (e.target.value && index < 5) {
283
- document.getElementById(`code-input-${index + 1}`)?.focus();
284
- }
285
- }}
286
- onKeyDown={(e) => {
287
- if (e.key === 'Backspace' && !trim(passkeyState.code[index]) && index > 0) {
288
- document.getElementById(`code-input-${index - 1}`)?.focus();
289
- }
290
- }}
291
- disabled={passkeyState.loading}
292
- required
293
- id={`code-input-${index}`}
294
- autoComplete="off"
295
- slotProps={{
296
- htmlInput: {
297
- maxLength: 1,
298
- style: { textAlign: 'center', fontSize: '1.5rem' },
299
- autoComplete: 'off',
300
- },
301
- }}
302
- />
303
- ))}
304
- </Box>
305
- </Stack>
306
- )}
307
- </Form>
308
- )}
309
- {isFullScreen && (
310
- <Box sx={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center', mt: 2 }}>{renderActions()}</Box>
311
- )}
312
- </StyledDialogContent>
313
- {!isFullScreen && <StyledDialogActions>{renderActions()}</StyledDialogActions>}
314
- </StyledDialog>
315
- );
316
- }
317
- PasskeyDialog.propTypes = {
318
- extraParams: PropTypes.object,
319
- createMode: PropTypes.string,
320
- action: PropTypes.string.isRequired,
321
- onSuccess: PropTypes.func,
322
- onError: PropTypes.func,
323
- ref: PropTypes.any.isRequired,
324
- };
325
-
326
- export default PasskeyDialog;
327
-
328
- const StyledDialog = styled(Dialog)`
329
- .MuiDialog-paper {
330
- border-radius: 12px;
331
- max-width: 440px;
332
- }
333
- `;
334
-
335
- const StyledDialogTitle = styled(DialogTitle)`
336
- text-align: center;
337
- padding: 24px 24px 16px;
338
- font-size: 20px;
339
- font-weight: 600;
340
- `;
341
-
342
- const StyledDialogContent = styled(DialogContent)`
343
- padding: 0 24px;
344
-
345
- .MuiTypography-body1 {
346
- font-size: 14px;
347
- line-height: 1.5;
348
- margin-bottom: 16px;
349
- }
350
-
351
- .MuiTextField-root {
352
- margin-top: 16px;
353
- width: 100%;
354
- }
355
- `;
356
-
357
- const StyledDialogActions = styled(DialogActions)`
358
- text-align: center;
359
- padding: 16px 24px 24px;
360
-
361
- .MuiButton-root {
362
- text-transform: none;
363
- font-size: 14px;
364
- border-radius: 6px;
365
- padding: 6px 16px;
366
- }
367
- `;
368
-
369
- const KeyIcon = styled('div')`
370
- width: 48px;
371
- height: 48px;
372
- margin: 0 auto 16px;
373
- background-color: #f6f8fa;
374
- border-radius: 50%;
375
- display: flex;
376
- align-items: center;
377
- justify-content: center;
378
-
379
- svg {
380
- width: 32px;
381
- height: 32px;
382
- }
383
- `;
384
-
385
- const Form = styled.div`
386
- display: flex;
387
- flex-direction: column;
388
- align-items: center;
389
- justify-content: center;
390
- width: 100%;
391
- gap: 24px;
392
-
393
- input[type='number']::-webkit-inner-spin-button,
394
- input[type='number']::-webkit-outer-spin-button {
395
- -webkit-appearance: none;
396
- margin: 0;
397
- }
398
- div.Mui-focused input {
399
- caret-color: ${(props) => props.theme.palette.primary.main};
400
- }
401
- `;
@@ -1,10 +0,0 @@
1
- export default function PasskeyIcon(props) {
2
- return (
3
- <svg xmlns="http://www.w3.org/2000/svg" width={24} height={24} viewBox="0 0 24 24" {...props}>
4
- <path
5
- fill="currentColor"
6
- d="M3 20v-2.8q0-.85.438-1.562T4.6 14.55q1.55-.775 3.15-1.162T11 13q.5 0 1 .038t1 .112q-.1 1.45.525 2.738T15.35 18v2zm16 3l-1.5-1.5v-4.65q-1.1-.325-1.8-1.237T15 13.5q0-1.45 1.025-2.475T18.5 10t2.475 1.025T22 13.5q0 1.125-.638 2t-1.612 1.25L21 18l-1.5 1.5L21 21zm-8-11q-1.65 0-2.825-1.175T7 8t1.175-2.825T11 4t2.825 1.175T15 8t-1.175 2.825T11 12m7.5 2q.425 0 .713-.288T19.5 13t-.288-.712T18.5 12t-.712.288T17.5 13t.288.713t.712.287"
7
- />
8
- </svg>
9
- );
10
- }
@@ -1,2 +0,0 @@
1
- export * from './context';
2
- export { default as PasskeyActions } from './actions';
@@ -1,96 +0,0 @@
1
- import { joinURL } from 'ufo';
2
- import { createAxios } from '../utils';
3
-
4
- async function renewRefreshToken(refreshToken, { authServicePrefix, serviceHost }) {
5
- if (!refreshToken) {
6
- throw new Error('Refresh token not found');
7
- }
8
- const refreshApi = createAxios({
9
- baseURL: serviceHost,
10
- timeout: 10 * 1000,
11
- secure: true,
12
- headers: {
13
- authorization: `Bearer ${encodeURIComponent(refreshToken)}`,
14
- },
15
- });
16
- const { data } = await refreshApi.post(joinURL(authServicePrefix, '/refreshSession'));
17
- return data;
18
- }
19
-
20
- export default function createService(
21
- {
22
- refreshTokenStorage,
23
- sessionTokenStorage,
24
- serviceHost,
25
- authServicePrefix,
26
- onRefreshTokenError,
27
- onRefreshTokenSuccess,
28
- },
29
- options = {}
30
- ) {
31
- let refreshingTokenRequest = null;
32
- const service = createAxios({
33
- baseURL: serviceHost,
34
- timeout: 30 * 1000,
35
- ...options,
36
- });
37
- const { getToken: getSessionToken, setToken: setSessionToken, removeToken: removeSessionToken } = sessionTokenStorage;
38
- const { getToken: getRefreshToken, setToken: setRefreshToken, removeToken: removeRefreshToken } = refreshTokenStorage;
39
-
40
- service.interceptors.request.use(
41
- async (config) => {
42
- if (sessionTokenStorage.engine === 'ls') {
43
- const token = getSessionToken();
44
- if (token) {
45
- config.headers.authorization = `Bearer ${encodeURIComponent(token)}`;
46
- }
47
- }
48
- if (refreshingTokenRequest) {
49
- await refreshingTokenRequest;
50
- }
51
-
52
- return config;
53
- },
54
- (error) => Promise.reject(error)
55
- );
56
-
57
- service.interceptors.response.use(
58
- (response) => response,
59
- async (error) => {
60
- const originalRequest = error.config;
61
- if (!originalRequest) {
62
- return Promise.reject(error);
63
- }
64
-
65
- originalRequest.headers = { ...originalRequest?.headers };
66
- // FIXME: @zhanghan 在某次 createTokenFn 的时候,出现了 401 导致 did-connect 页面展示了 `Refresh token not found` 错误
67
- if (error?.response?.status === 401 && !originalRequest._retry) {
68
- originalRequest._retry = true;
69
- if (!refreshingTokenRequest) {
70
- refreshingTokenRequest = renewRefreshToken(getRefreshToken(), { serviceHost, authServicePrefix });
71
- }
72
- try {
73
- const tokenData = await refreshingTokenRequest;
74
- setSessionToken(tokenData.nextToken);
75
- setRefreshToken(tokenData.nextRefreshToken);
76
- if (typeof onRefreshTokenSuccess === 'function') {
77
- onRefreshTokenSuccess(tokenData);
78
- }
79
- return service(originalRequest);
80
- } catch (error2) {
81
- removeSessionToken();
82
- removeRefreshToken();
83
- if (typeof onRefreshTokenError === 'function') {
84
- onRefreshTokenError();
85
- }
86
- return Promise.reject(error2);
87
- } finally {
88
- refreshingTokenRequest = null;
89
- }
90
- }
91
- return Promise.reject(error);
92
- }
93
- );
94
-
95
- return service;
96
- }
@@ -1 +0,0 @@
1
- <svg viewBox="0 0 440 167" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><rect width="440" height="167" rx="8" fill="url(#b)"/><g style="mix-blend-mode:overlay" opacity=".4" clip-path="url(#c)"><mask id="d" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="-183" width="441" height="395"><path d="M220.481 167.765v-43.661h-43.808v43.661h43.808zm0 43.661v-43.661h-43.808v43.661h43.808zm-43.808-43.661v-43.661h-43.808v43.661h43.808zm-43.808 0v-43.661H89.057v43.661h43.808zm-43.808 0v-43.661H45.25v43.661h43.808zm-43.807 0v-43.661H1.442v43.661H45.25zm131.423 43.661v-43.661h-43.808v43.661h43.808zm-43.808 0v-43.661H89.057v43.661h43.808zm-43.808 0v-43.661H45.25v43.661h43.808zm-43.807 0v-43.661H1.442v43.661H45.25zm219.039-43.661v-43.661h-43.808v43.661h43.808zm0 43.661v-43.661h-43.808v43.661h43.808zm43.807-43.661v-43.661h-43.807v43.661h43.807zm0 43.661v-43.661h-43.807v43.661h43.807zm43.808-43.661v-43.661h-43.808v43.661h43.808zm0 43.661v-43.661h-43.808v43.661h43.808zm43.808-43.661v-43.661h-43.808v43.661h43.808zm0 43.661v-43.661h-43.808v43.661h43.808zm43.808-43.661v-43.661h-43.808v43.661h43.808zm0 43.661v-43.661h-43.808v43.661h43.808zm-219.039-87.322v-43.66h-43.808v43.66h43.808zm-43.808 0v-43.66h-43.808v43.66h43.808zm-43.808 0v-43.66H89.057v43.66h43.808zm-43.808 0v-43.66H45.25v43.66h43.808zm-43.807 0v-43.66H1.442v43.66H45.25zm219.039 0v-43.66h-43.808v43.66h43.808zm43.807 0v-43.66h-43.807v43.66h43.807zm43.808 0v-43.66h-43.808v43.66h43.808zm43.808 0v-43.66h-43.808v43.66h43.808zm43.808 0v-43.66h-43.808v43.66h43.808zm-219.039-43.66V36.781h-43.808v43.661h43.808zm-43.808 0V36.781h-43.808v43.661h43.808zm-43.808 0V36.781H89.057v43.661h43.808zm-43.808 0V36.781H45.25v43.661h43.808zm-43.807 0V36.781H1.442v43.661H45.25zm87.615-43.662v-43.66H89.057v43.66h43.808zm0-43.66V-50.54H89.057v43.66h43.808zm0-43.661v-43.66H89.057v43.66h43.808zm0-43.66v-43.662H89.057V-94.2h43.808zm0-43.662v-43.66H89.057v43.66h43.808zM176.673-6.878V-50.54h-43.808v43.66h43.808zm0-43.661v-43.66h-43.808v43.66h43.808zm0-43.66v-43.662h-43.808V-94.2h43.808zm0-43.662v-43.66h-43.808v43.66h43.808zM89.058 36.782v-43.66H45.25v43.66h43.808zm0-43.66V-50.54H45.25v43.66h43.808zm0-43.661v-43.66H45.25v43.66h43.808zm0-43.66v-43.662H45.25V-94.2h43.808zm0-43.662v-43.66H45.25v43.66h43.808zM45.25 36.782v-43.66H1.442v43.66H45.25zm0-43.66V-50.54H1.442v43.66H45.25zm0-43.661v-43.66H1.442v43.66H45.25zm0-43.66v-43.662H1.442V-94.2H45.25zm0-43.662v-43.66H1.442v43.66H45.25zM264.289 80.443v-43.66h-43.808v43.66h43.808zm43.807 0v-43.66h-43.807v43.66h43.807zm43.808 0v-43.66h-43.808v43.66h43.808zm43.808 0v-43.66h-43.808v43.66h43.808zm43.808 0v-43.66h-43.808v43.66h43.808zm-219.039-43.66V-6.879h-43.808v43.66h43.808zm0-43.661V-50.54h-43.808v43.66h43.808zm0-43.661v-43.66h-43.808v43.66h43.808zm0-43.66v-43.662h-43.808V-94.2h43.808zm0-43.662v-43.66h-43.808v43.66h43.808zM176.673 36.782v-43.66h-43.808v43.66h43.808zm87.616 0v-43.66h-43.808v43.66h43.808zm0-43.66V-50.54h-43.808v43.66h43.808zm0-43.661v-43.66h-43.808v43.66h43.808zm0-43.66v-43.662h-43.808V-94.2h43.808zm0-43.662v-43.66h-43.808v43.66h43.808zm43.807 174.643v-43.66h-43.807v43.66h43.807zm0-43.66V-50.54h-43.807v43.66h43.807zm0-43.661v-43.66h-43.807v43.66h43.807zm0-43.66v-43.662h-43.807V-94.2h43.807zm0-43.662v-43.66h-43.807v43.66h43.807zm43.808 174.643v-43.66h-43.808v43.66h43.808zm0-43.66V-50.54h-43.808v43.66h43.808zm0-43.661v-43.66h-43.808v43.66h43.808zm0-43.66v-43.662h-43.808V-94.2h43.808zm0-43.662v-43.66h-43.808v43.66h43.808zm43.808 174.643v-43.66h-43.808v43.66h43.808zm0-43.66V-50.54h-43.808v43.66h43.808zm0-43.661v-43.66h-43.808v43.66h43.808zm0-43.66v-43.662h-43.808V-94.2h43.808zm0-43.662v-43.66h-43.808v43.66h43.808zM439.52 36.782v-43.66h-43.808v43.66h43.808zm0-43.66V-50.54h-43.808v43.66h43.808zm0-43.661v-43.66h-43.808v43.66h43.808zm0-43.66v-43.662h-43.808V-94.2h43.808zm0-43.662v-43.66h-43.808v43.66h43.808z" fill="#070707" fill-opacity=".4" style="fill:color(display-p3 .0275 .0275 .0275);fill-opacity:.4"/><path d="M220.481 167.765v-43.661m0 43.661h-43.808m43.808 0v43.661m0-43.661h43.808m-43.808-43.661h-43.808m43.808 0h43.808m-43.808 0v-43.66m-43.808 87.321v-43.661m0 43.661v43.661m0-43.661h-43.808m87.616 43.661h-43.808m43.808 0h43.808m0-43.661v-43.661m0 43.661v43.661m0-43.661h43.807m-131.423-43.661h-43.808m43.808 0v-43.66m87.616 43.66h43.807m-43.807 0v-43.66m-43.808 0h-43.808m43.808 0h43.808m-43.808 0V36.781m-87.616 87.322v43.661m0-43.661H89.057m43.808 0v-43.66m43.808 0h-43.808m43.808 0V36.781m0 174.644h-43.808m0-43.661H89.057m43.808 0v43.661m131.424 0h43.807m-175.231 0H89.057m0-87.322v43.661m0-43.661H45.25m43.808 0v-43.66m43.807 0H89.057m43.808 0V36.781M89.057 167.766H45.25m43.808 0v43.661M45.25 124.104v43.661m0-43.661H1.442m43.808 0v-43.66m43.808 0H45.25m43.808 0V36.781M45.25 167.766H1.442m43.808 0v43.661m43.808 0H45.25M1.442 124.104v43.661m0-43.661v-43.66m43.808 0H1.442m43.808 0V36.781M1.442 167.766v43.661H45.25M1.442 80.443v-43.66m306.654 130.982v-43.661m0 43.661v43.661m0-43.661h43.808m-43.808-43.661h43.808m-43.808 0v-43.66m-43.807 0h43.807m-43.807 0V36.781m43.807 174.644h43.808m0-43.661v-43.661m0 43.661v43.661m0-43.661h43.808m-43.808-43.661h43.808m-43.808 0v-43.66m-43.808 0h43.808m-43.808 0V36.781m43.808 174.644h43.808m0-43.661v-43.661m0 43.661v43.661m0-43.661h43.808m-43.808-43.661h43.808m-43.808 0v-43.66m-43.808 0h43.808m-43.808 0V36.781m43.808 174.644h43.808v-43.661m0 0v-43.661m0 0v-43.66m-43.808 0h43.808m-43.808 0V36.781m43.808 43.661v-43.66m-219.039 0h-43.808m43.808 0h43.808m-43.808 0V-6.879m-43.808 43.66h-43.808m43.808 0v-43.66m-43.808 43.66H89.057m43.808 0v-43.66m-43.808 43.66H45.25m43.808 0v-43.66M45.25 36.782H1.442m43.808 0v-43.66M1.442 36.782v-43.66m262.847 43.66h43.807m-43.807 0v-43.66m43.807 43.66h43.808m-43.808 0v-43.66m43.808 43.66h43.808m-43.808 0v-43.66m43.808 43.66h43.808m-43.808 0v-43.66m43.808 43.66v-43.66m-219.039 0h-43.808m43.808 0V-50.54m0 43.66h43.808m-87.616 0h-43.808m43.808 0v-43.66M132.865-6.88H89.057m43.808 0v-43.66M89.057-6.879v-43.66m0 43.66H45.25m0 0v-43.66m0 43.66H1.442m0 0v-43.66m131.423 0H89.057m43.808 0v-43.66m0 43.66h43.808m-87.615 0v-43.66m0 43.66H45.25m87.615-43.66H89.057m43.808 0v-43.662m0 43.661h43.808m0 43.661v-43.66m0 43.66h43.808M89.058-94.199v-43.662m0 43.661H45.25m0 43.661v-43.66m0 43.66H1.442m131.423-87.322H89.057m43.808 0v-43.66m0 43.66h43.808m0 43.661v-43.661m0 43.661h43.808M89.058-137.86v-43.66m0 43.66H45.25m0 43.661v-43.661m0 43.661H1.442m131.423-87.321H89.057m43.808 0h43.808m0 43.66v-43.66m0 43.66h43.808M89.058-181.52H45.25m0 43.66v-43.66m0 43.66H1.442m175.231-43.66h43.808m-175.231 0H1.442v43.66M220.48-50.539v-43.66m0 43.66h43.808m-43.808-43.66v-43.662m0 43.661h43.808m-43.808-43.661v-43.66m0 43.66h43.808m-43.808-43.66h43.808M1.442-50.539v-43.66m0 0v-43.662M264.289-6.878V-50.54m0 43.66h43.807m0 0v-43.66m0 43.66h43.808m0 0v-43.66m0 43.66h43.808m0 0v-43.66m0 43.66h43.808m0 0v-43.66m-175.231 0V-94.2m0 43.66h43.807M264.289-94.2v-43.662m0 43.661h43.807m-43.807-43.661v-43.66m0 43.66h43.807m-43.807-43.66h43.807m0 130.982V-94.2m0 43.66h43.808M308.096-94.2v-43.662m0 43.661h43.808m-43.808-43.661v-43.66m0 43.66h43.808m-43.808-43.66h43.808m0 130.982V-94.2m0 43.66h43.808M351.904-94.2v-43.662m0 43.661h43.808m-43.808-43.661v-43.66m0 43.66h43.808m-43.808-43.66h43.808m0 130.982V-94.2m0 43.66h43.808M395.712-94.2v-43.662m0 43.661h43.808m-43.808-43.661v-43.66m0 43.66 43.808.001m-43.808-43.661h43.808v43.661m0 87.321V-94.2m0 0v-43.661" stroke="#151515" style="stroke:color(display-p3 .0824 .0824 .0824);stroke-opacity:1"/><path d="M307.866 80.213V37.012H264.52v43.201h43.346zm-87.615 43.661V80.673h-43.347v43.201h43.347zm-43.808-87.322v-43.2h-43.347v43.2h43.347z" fill="#070707" fill-opacity=".4" style="fill:color(display-p3 .0275 .0275 .0275);fill-opacity:.4"/></mask><g mask="url(#d)"><path d="M-53.203-8.946c0-163.462 125.32-295.974 279.909-295.974 154.59 0 279.909 132.512 279.909 295.974S381.296 287.028 226.706 287.028c-154.589 0-279.909-132.512-279.909-295.974z" fill="url(#e)"/></g></g><g filter="url(#f)"><rect x="32" y="44" width="101" height="72" rx="12" fill="#fff" fill-opacity=".32" style="fill:#fff;fill-opacity:.32"/><rect x="32.5" y="44.5" width="100" height="71" rx="11.5" stroke="#fff" style="stroke:#fff;stroke-opacity:1"/></g><g filter="url(#g)"><rect x="294" y="44" width="101" height="72" rx="12" fill="#fff" fill-opacity=".32" style="fill:#fff;fill-opacity:.32"/><rect x="294.5" y="44.5" width="100" height="71" rx="11.5" stroke="#fff" style="stroke:#fff;stroke-opacity:1"/></g><path fill-rule="evenodd" clip-rule="evenodd" d="M313.2 74.671c0-.812.659-1.471 1.472-1.471h15.368a2.522 2.522 0 0 1 2.522 2.522v8.21a2.522 2.522 0 0 1-2.522 2.521h-15.435a1.405 1.405 0 0 1-1.405-1.404H312a2.605 2.605 0 0 0 2.605 2.604h15.435a3.722 3.722 0 0 0 3.722-3.722v-8.209A3.722 3.722 0 0 0 330.04 72h-15.368A2.672 2.672 0 0 0 312 74.671h1.2zm12.912 1.968c-.526-.303-1.148-.454-1.867-.454h-2.511v7.217h2.511c.719 0 1.341-.148 1.867-.443a3.113 3.113 0 0 0 1.241-1.248c.295-.536.443-1.168.443-1.897 0-.735-.148-1.374-.443-1.917a3.097 3.097 0 0 0-1.241-1.258zm-.231 4.959c-.391.426-.949.639-1.674.639h-1.174V77.35h1.174c.725 0 1.283.22 1.674.66.391.44.587 1.041.587 1.804 0 .756-.196 1.35-.587 1.784zm-6.76-5.413h1.299v7.217h-1.299v-7.217zm-2.669.454c-.526-.303-1.148-.454-1.867-.454h-2.511v7.217h2.511c.719 0 1.341-.148 1.867-.443a3.114 3.114 0 0 0 1.241-1.248c.295-.536.443-1.168.443-1.897 0-.735-.148-1.374-.443-1.917a3.096 3.096 0 0 0-1.241-1.258zm-.231 4.959c-.391.426-.949.639-1.674.639h-1.174V77.35h1.174c.725 0 1.283.22 1.674.66.391.44.587 1.041.587 1.804 0 .756-.196 1.35-.587 1.784zm13.538-2.7a.726.726 0 1 0 0-1.452.726.726 0 0 0 0 1.453zm0 3.392a.726.726 0 1 0 0-1.452.726.726 0 0 0 0 1.452zm13.014-6.236a.563.563 0 0 0 .141-.172l.351-.694a3.423 3.423 0 0 0-1.193-.756 4.048 4.048 0 0 0-1.496-.268c-.485 0-.916.078-1.294.234a2.869 2.869 0 0 0-.957.611 2.587 2.587 0 0 0-.586.873c-.135.33-.202.671-.202 1.024 0 .44.065.811.195 1.113.131.298.304.548.519.75.216.197.461.357.735.48.274.124.555.234.842.33l.842.269c.274.087.519.192.735.316.215.123.388.277.519.46.13.183.195.42.195.708 0 .257-.043.49-.128.701-.085.21-.209.392-.371.543a1.648 1.648 0 0 1-.586.344 2.502 2.502 0 0 1-.795.116 2.56 2.56 0 0 1-.93-.15 4.007 4.007 0 0 1-.653-.33 7.973 7.973 0 0 1-.459-.337c-.121-.101-.229-.152-.323-.152a.357.357 0 0 0-.195.055.571.571 0 0 0-.142.138l-.411.7c.18.198.382.377.606.537.23.156.474.29.735.405.26.11.537.195.829.255.292.064.593.096.903.096.516 0 .977-.08 1.381-.24.409-.166.752-.39 1.031-.674.278-.284.49-.616.633-.997.149-.38.223-.788.223-1.223 0-.408-.068-.751-.202-1.03a2.157 2.157 0 0 0-.519-.716 2.921 2.921 0 0 0-.735-.488 7.943 7.943 0 0 0-.842-.336 66.569 66.569 0 0 0-.842-.289 4.08 4.08 0 0 1-.735-.323 1.758 1.758 0 0 1-.525-.447c-.131-.174-.196-.394-.196-.66 0-.206.036-.396.108-.57a1.28 1.28 0 0 1 .33-.46c.144-.133.321-.236.533-.31a2.19 2.19 0 0 1 .747-.116c.301 0 .56.039.775.116.216.074.4.159.553.255.157.091.287.176.391.254.103.073.195.11.276.11a.312.312 0 0 0 .189-.055zm4.059 6.975c-.247-.114-.479-.316-.694-.604v-3.306c.238-.32.496-.568.775-.742.283-.174.615-.261.997-.261.261 0 .494.048.701.144.206.092.379.238.519.44.143.197.251.453.323.77.076.311.115.69.115 1.134 0 .847-.167 1.493-.499 1.938-.328.44-.793.66-1.395.66-.31 0-.591-.058-.842-.172zm-.303-5.298a4.13 4.13 0 0 0-.459.474l-.114-.776c-.045-.18-.16-.269-.344-.269h-.788v9.326h1.314v-3.03c.229.247.489.44.781.577.292.137.643.206 1.052.206.458 0 .869-.092 1.233-.275a2.73 2.73 0 0 0 .93-.77 3.49 3.49 0 0 0 .586-1.147c.139-.445.209-.926.209-1.443a5.63 5.63 0 0 0-.189-1.533 3.318 3.318 0 0 0-.519-1.12 2.218 2.218 0 0 0-.815-.688 2.353 2.353 0 0 0-1.058-.233c-.243 0-.472.03-.687.09a2.544 2.544 0 0 0-.6.24 2.76 2.76 0 0 0-.532.37zm9.555 3.312a9.45 9.45 0 0 0-1.362.131 3.601 3.601 0 0 0-.909.261c-.234.11-.402.24-.506.392a.84.84 0 0 0-.155.495c0 .174.027.325.081.453a.946.946 0 0 0 .229.31.98.98 0 0 0 .344.171c.13.037.272.055.425.055a2.292 2.292 0 0 0 1.03-.233c.149-.078.29-.172.425-.282.135-.11.267-.236.398-.378v-1.375zm-3.855-2.907a3.92 3.92 0 0 1 1.24-.831 3.869 3.869 0 0 1 1.476-.275c.391 0 .737.066 1.037.2.301.127.555.308.762.542.207.234.362.513.465.838.108.326.162.686.162 1.08v4.453h-.587a.572.572 0 0 1-.296-.062.47.47 0 0 1-.162-.247l-.141-.612a6.414 6.414 0 0 1-.519.44 3.635 3.635 0 0 1-.539.323 2.74 2.74 0 0 1-.593.2 3.313 3.313 0 0 1-.701.068c-.27 0-.523-.037-.761-.11a1.746 1.746 0 0 1-.614-.35 1.672 1.672 0 0 1-.417-.585 2.083 2.083 0 0 1-.149-.818c0-.275.072-.538.216-.79.148-.256.386-.486.714-.687.333-.202.764-.367 1.294-.495.535-.128 1.19-.202 1.968-.22v-.508c0-.527-.11-.921-.331-1.183-.22-.26-.543-.391-.97-.391-.287 0-.53.036-.728.11a2.775 2.775 0 0 0-.505.247c-.139.087-.263.167-.371.24a.55.55 0 0 1-.323.11.382.382 0 0 1-.236-.075.657.657 0 0 1-.155-.179l-.236-.433zm11.577.454a.776.776 0 0 0 .121-.124l.351-.495a3.16 3.16 0 0 0-.998-.68c-.372-.16-.804-.24-1.293-.24-.521 0-.984.091-1.388.274a2.878 2.878 0 0 0-1.025.75 3.235 3.235 0 0 0-.626 1.133c-.14.44-.209.92-.209 1.437 0 .568.078 1.077.236 1.526.157.444.37.82.64 1.127.274.306.595.54.963.7.373.16.773.241 1.2.241.247 0 .489-.02.727-.062.243-.041.474-.105.695-.192.22-.087.426-.2.619-.337.198-.137.376-.305.533-.502l-.378-.494a.286.286 0 0 0-.249-.124.37.37 0 0 0-.249.11 3.674 3.674 0 0 1-.303.227 2.41 2.41 0 0 1-.459.233 2.024 2.024 0 0 1-.7.103 1.88 1.88 0 0 1-.796-.165 1.674 1.674 0 0 1-.606-.494 2.42 2.42 0 0 1-.384-.805 4.049 4.049 0 0 1-.135-1.092c0-.394.043-.75.128-1.065.086-.317.209-.585.371-.805.166-.22.373-.389.62-.508.247-.12.532-.179.856-.179.247 0 .453.03.619.09.171.055.315.116.432.185.121.064.22.126.296.186a.412.412 0 0 0 .229.082.268.268 0 0 0 .162-.041zm6.189 1.285c0-.266-.038-.51-.115-.735a1.633 1.633 0 0 0-.323-.584 1.486 1.486 0 0 0-.526-.385 1.746 1.746 0 0 0-.714-.138c-.553 0-.988.163-1.307.488-.315.326-.515.777-.6 1.354h3.585zm1.085 3.271c-.162.193-.348.36-.56.502-.211.138-.435.25-.673.337a4.031 4.031 0 0 1-.742.192 4.607 4.607 0 0 1-.748.062c-.471 0-.909-.08-1.314-.24a3.012 3.012 0 0 1-1.044-.715 3.377 3.377 0 0 1-.687-1.169c-.162-.467-.243-1.003-.243-1.608 0-.485.074-.937.222-1.354a3.32 3.32 0 0 1 .634-1.1 2.973 2.973 0 0 1 1.017-.734c.4-.18.849-.269 1.348-.269.418 0 .802.072 1.152.213.355.138.661.34.917.605.256.266.456.594.599.983.149.39.223.834.223 1.333 0 .207-.023.346-.068.42-.045.068-.128.103-.249.103h-4.488c.014.417.072.78.176 1.092.103.307.244.564.424.77.184.206.402.36.654.46.251.101.532.152.842.152.292 0 .544-.035.755-.103a3.86 3.86 0 0 0 .552-.22 4.41 4.41 0 0 0 .391-.227.55.55 0 0 1 .283-.103c.108 0 .191.041.249.124l.378.494zm5.435-4.652a.416.416 0 0 0 .114-.13l.29-.489a2.8 2.8 0 0 0-.943-.605 3.26 3.26 0 0 0-1.227-.22c-.395 0-.748.058-1.058.172-.305.11-.563.26-.775.447a1.987 1.987 0 0 0-.478.653 1.92 1.92 0 0 0-.162.776c0 .303.05.56.149.77.103.211.235.39.397.536.166.147.355.268.566.365.211.096.427.18.647.254.22.073.436.142.647.206.211.064.397.14.559.227.166.087.299.192.398.316.103.119.155.27.155.453 0 .143-.027.278-.081.406a.963.963 0 0 1-.249.344 1.238 1.238 0 0 1-.411.233 1.877 1.877 0 0 1-.587.083 2.16 2.16 0 0 1-.674-.09 2.791 2.791 0 0 1-.458-.206 5.92 5.92 0 0 1-.323-.213.456.456 0 0 0-.263-.096.378.378 0 0 0-.216.055.383.383 0 0 0-.134.144l-.31.516c.269.247.604.45 1.004.611.399.16.835.24 1.307.24.422 0 .797-.056 1.125-.171a2.34 2.34 0 0 0 .822-.474 1.94 1.94 0 0 0 .506-.715c.116-.28.175-.582.175-.907 0-.284-.052-.525-.155-.722a1.532 1.532 0 0 0-.398-.501 2.11 2.11 0 0 0-.559-.35 6.066 6.066 0 0 0-.64-.255 20.592 20.592 0 0 0-.64-.206 4.374 4.374 0 0 1-.56-.227 1.363 1.363 0 0 1-.397-.296.638.638 0 0 1-.148-.433.851.851 0 0 1 .337-.674 1.13 1.13 0 0 1 .39-.198 1.7 1.7 0 0 1 .519-.076c.229 0 .427.025.593.076.166.05.31.105.431.164.126.06.232.115.317.165.09.05.171.076.243.076a.313.313 0 0 0 .155-.034z" fill="#3B82F6" style="fill:color(display-p3 .2314 .5098 .9647);fill-opacity:1"/><circle cx="83" cy="116" r="12.5" fill="#25C99B" stroke="#fff" style="fill:color(display-p3 .1451 .7882 .6078);fill-opacity:1;stroke:#fff;stroke-opacity:1"/><path d="M89.486 115.191a6.552 6.552 0 0 0-5.654-5.599 6.555 6.555 0 0 0-6.889 3.98m-.404-3.236v3.236h3.236m-3.237 3.237a6.551 6.551 0 0 0 5.654 5.599 6.555 6.555 0 0 0 6.889-3.98m.404 3.236v-3.236H86.25" stroke="#fff" style="stroke:#fff;stroke-opacity:1" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/><circle cx="345" cy="116" r="12.5" fill="#25C99B" stroke="#fff" style="fill:color(display-p3 .1451 .7882 .6078);fill-opacity:1;stroke:#fff;stroke-opacity:1"/><path fill-rule="evenodd" clip-rule="evenodd" d="M344.65 109.176a.699.699 0 0 0-.928 0 7.963 7.963 0 0 1-5.638 1.99.699.699 0 0 0-.704.502 9.35 9.35 0 0 0 .837 7.254 9.352 9.352 0 0 0 5.793 4.446c.116.03.237.03.353-.001.114-.029.229-.061.344-.096a.7.7 0 1 0-.402-1.341l-.119.035a7.976 7.976 0 0 1-2.672-1.342 7.974 7.974 0 0 1-3.062-5.404 7.974 7.974 0 0 1 .139-2.646 9.362 9.362 0 0 0 5.595-1.964 9.361 9.361 0 0 0 5.594 1.964 7.952 7.952 0 0 1-.054 3.697.7.7 0 1 0 1.357.345 9.365 9.365 0 0 0-.091-4.947.7.7 0 0 0-.704-.502 7.96 7.96 0 0 1-5.638-1.99zm3.887 11.595v2.64a.7.7 0 0 0 1.4 0v-2.64l.97.97a.699.699 0 1 0 .99-.99l-2.165-2.165a.7.7 0 0 0-.99 0l-2.165 2.165a.7.7 0 0 0 .99.99l.97-.97z" fill="#fff" style="fill:#fff;fill-opacity:1"/><path d="M59.725 80.496V84h-1.14v-3.504l-3.312-5.064h1.356l2.569 4.08 2.508-4.08H63l-3.276 5.064zm3.362.408c0 .376.048.712.144 1.008.104.288.244.532.42.732.176.192.38.34.612.444a1.881 1.881 0 0 0 1.5 0c.24-.104.448-.252.624-.444.176-.2.312-.444.408-.732a3.03 3.03 0 0 0 .156-1.008c0-.376-.052-.708-.156-.996a2.082 2.082 0 0 0-.408-.744 1.749 1.749 0 0 0-.624-.456 1.881 1.881 0 0 0-1.5 0 1.779 1.779 0 0 0-.612.456 2.23 2.23 0 0 0-.42.744c-.096.288-.144.62-.144.996zm-1.08 0c0-.456.064-.88.192-1.272.128-.4.32-.744.576-1.032.256-.296.572-.528.948-.696a3.148 3.148 0 0 1 1.296-.252c.496 0 .928.084 1.296.252.376.168.692.4.948.696.256.288.448.632.576 1.032.128.392.192.816.192 1.272 0 .456-.064.88-.192 1.272s-.32.736-.576 1.032a2.75 2.75 0 0 1-.948.684c-.368.16-.8.24-1.296.24-.488 0-.92-.08-1.296-.24a2.75 2.75 0 0 1-.948-.684 2.966 2.966 0 0 1-.576-1.032 4.075 4.075 0 0 1-.192-1.272zM74.249 84h-.96v-.984h-.023c-.217.384-.493.668-.829.852-.335.176-.731.264-1.188.264-.407 0-.748-.052-1.02-.156a1.677 1.677 0 0 1-.66-.468 1.8 1.8 0 0 1-.36-.708 4.149 4.149 0 0 1-.096-.924v-4.08h1.02v4.2c0 .384.113.688.337.912.224.224.531.336.924.336.311 0 .58-.048.803-.144a1.51 1.51 0 0 0 .576-.408c.153-.176.264-.38.337-.612.08-.24.12-.5.12-.78v-3.504h1.02V84zm1.376-6.204h.96v1.308h.024c.248-.504.552-.876.912-1.116.36-.24.816-.352 1.368-.336v1.08c-.408 0-.756.056-1.044.168-.288.112-.52.276-.696.492-.176.216-.304.48-.384.792a4.17 4.17 0 0 0-.12 1.056V84h-1.02v-6.204zm8.44 5.244h1.896c.128 0 .288-.008.48-.024.192-.024.396-.072.612-.144.216-.08.428-.192.636-.336.216-.144.408-.34.576-.588.168-.248.304-.556.408-.924.112-.376.168-.828.168-1.356 0-.512-.052-.968-.156-1.368a2.48 2.48 0 0 0-.492-1.032 2.049 2.049 0 0 0-.876-.648c-.36-.152-.804-.228-1.332-.228h-1.92v6.648zm-1.14-7.608h2.94c1.32 0 2.336.336 3.048 1.008.712.672 1.068 1.696 1.068 3.072 0 .72-.08 1.36-.24 1.92a3.634 3.634 0 0 1-.744 1.404 3.254 3.254 0 0 1-1.284.864c-.52.2-1.136.3-1.848.3h-2.94v-8.568zm13.658 8.544c-.176.104-.42.156-.732.156-.264 0-.476-.072-.636-.216-.152-.152-.228-.396-.228-.732-.28.336-.608.58-.984.732a3.265 3.265 0 0 1-1.2.216c-.28 0-.548-.032-.804-.096a1.859 1.859 0 0 1-.648-.3 1.508 1.508 0 0 1-.444-.528 1.897 1.897 0 0 1-.156-.804c0-.352.06-.64.18-.864a1.54 1.54 0 0 1 .468-.54c.2-.144.424-.252.672-.324.256-.072.516-.132.78-.18.28-.056.544-.096.792-.12.256-.032.48-.072.672-.12.192-.056.344-.132.456-.228.112-.104.168-.252.168-.444 0-.224-.044-.404-.132-.54a.81.81 0 0 0-.324-.312 1.261 1.261 0 0 0-.444-.144 3.232 3.232 0 0 0-.48-.036c-.432 0-.792.084-1.08.252-.288.16-.444.468-.468.924h-1.02c.016-.384.096-.708.24-.972s.336-.476.576-.636c.24-.168.512-.288.816-.36a4.42 4.42 0 0 1 .996-.108c.28 0 .556.02.828.06.28.04.532.124.756.252.224.12.404.292.54.516.136.224.204.516.204.876v3.192c0 .24.012.416.036.528.032.112.128.168.288.168.088 0 .192-.02.312-.06v.792zm-1.656-3.18a1.332 1.332 0 0 1-.504.216c-.208.04-.428.076-.66.108-.224.024-.452.056-.684.096-.232.032-.44.088-.624.168a1.16 1.16 0 0 0-.456.348c-.112.144-.168.344-.168.6 0 .168.032.312.096.432.072.112.16.204.264.276.112.072.24.124.384.156.144.032.296.048.456.048.336 0 .624-.044.864-.132.24-.096.436-.212.588-.348.152-.144.264-.296.336-.456.072-.168.108-.324.108-.468v-1.044zm2.52-3h1.02v.84h.025c.168-.344.432-.592.792-.744.36-.16.756-.24 1.188-.24.48 0 .896.088 1.248.264.36.176.656.416.888.72.24.296.42.64.54 1.032.12.392.18.808.18 1.248 0 .44-.06.856-.18 1.248a2.87 2.87 0 0 1-.528 1.032 2.45 2.45 0 0 1-.888.684c-.352.168-.764.252-1.236.252-.152 0-.324-.016-.516-.048a2.856 2.856 0 0 1-.552-.156 2.43 2.43 0 0 1-.528-.288 1.774 1.774 0 0 1-.408-.468h-.024v3.192h-1.02v-8.568zm4.801 3.048c0-.288-.04-.568-.12-.84a2.124 2.124 0 0 0-.348-.744 1.638 1.638 0 0 0-.6-.516 1.786 1.786 0 0 0-.852-.192c-.344 0-.636.068-.876.204-.24.136-.436.316-.588.54a2.256 2.256 0 0 0-.336.744c-.064.28-.096.564-.096.852 0 .304.036.6.108.888.072.28.184.528.336.744.16.216.364.392.612.528.248.128.548.192.9.192s.644-.068.876-.204c.24-.136.432-.316.576-.54a2.35 2.35 0 0 0 .312-.768c.064-.288.096-.584.096-.888zm2.193-3.048h1.02v.84h.024c.168-.344.432-.592.792-.744.36-.16.756-.24 1.188-.24.48 0 .896.088 1.248.264.36.176.656.416.888.72.24.296.42.64.54 1.032.12.392.18.808.18 1.248 0 .44-.06.856-.18 1.248a2.87 2.87 0 0 1-.528 1.032 2.45 2.45 0 0 1-.888.684c-.352.168-.764.252-1.236.252-.152 0-.324-.016-.516-.048a2.856 2.856 0 0 1-.552-.156 2.43 2.43 0 0 1-.528-.288 1.774 1.774 0 0 1-.408-.468h-.024v3.192h-1.02v-8.568zm4.8 3.048c0-.288-.04-.568-.12-.84a2.124 2.124 0 0 0-.348-.744 1.638 1.638 0 0 0-.6-.516 1.786 1.786 0 0 0-.852-.192c-.344 0-.636.068-.876.204-.24.136-.436.316-.588.54a2.256 2.256 0 0 0-.336.744c-.064.28-.096.564-.096.852 0 .304.036.6.108.888.072.28.184.528.336.744.16.216.364.392.612.528.248.128.548.192.9.192s.644-.068.876-.204c.24-.136.432-.316.576-.54a2.35 2.35 0 0 0 .312-.768c.064-.288.096-.584.096-.888z" fill="#3B82F6" style="fill:color(display-p3 .2314 .5098 .9647);fill-opacity:1"/><path d="m290.5 83-5-2.887v5.774l5-2.887zm-151.5.5h1.01v-1H139v1zm5.05 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1zm6.06 0h2.02v-1h-2.02v1z" fill="#030712" style="fill:color(display-p3 .0118 .0275 .0706);fill-opacity:1"/><circle cx="254" cy="83" r="15.5" fill="#25C99B" stroke="#fff" style="fill:color(display-p3 .1451 .7882 .6078);fill-opacity:1;stroke:#fff;stroke-opacity:1"/><path fill-rule="evenodd" clip-rule="evenodd" d="M249.8 82.6a1.4 1.4 0 1 1-2.8 0 1.4 1.4 0 0 1 2.8 0zm5.6 0a1.4 1.4 0 1 1-2.8 0 1.4 1.4 0 0 1 2.8 0zm4.2 1.4a1.4 1.4 0 1 0 0-2.8 1.4 1.4 0 0 0 0 2.8z" fill="#fff" style="fill:#fff;fill-opacity:1"/><circle cx="227" cy="83" r="15.5" fill="#3B82F6" stroke="#fff" style="fill:color(display-p3 .2314 .5098 .9647);fill-opacity:1;stroke:#fff;stroke-opacity:1"/><path d="m230 81 4.553-2.276a1 1 0 0 1 1.447.894v6.764a1 1 0 0 1-1.447.894L230 85v-4zm-12-2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2v-8z" fill="#3B82F6" style="fill:color(display-p3 .2314 .5098 .9647);fill-opacity:1"/><path d="m230 81 4.553-2.276a1 1 0 0 1 1.447.894v6.764a1 1 0 0 1-1.447.894L230 85v-4zm-12-2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2v-8z" stroke="#fff" style="stroke:#fff;stroke-opacity:1" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/><circle cx="200" cy="83" r="15.5" fill="#25C99B" stroke="#fff" style="fill:color(display-p3 .1451 .7882 .6078);fill-opacity:1;stroke:#fff;stroke-opacity:1"/><path d="M202 74v4a.998.998 0 0 0 1 1h4m-5-5h-7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V79m-5-5 5 5m-9 5-1 2 1 2m4-4 1 2-1 2" stroke="#fff" style="stroke:#fff;stroke-opacity:1" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/><circle cx="173" cy="83" r="15.5" fill="#3B82F6" stroke="#fff" style="fill:color(display-p3 .2314 .5098 .9647);fill-opacity:1;stroke:#fff;stroke-opacity:1"/><path d="M175.667 79.444h.009M165 86.555l4.444-4.444c.825-.794 1.842-.794 2.667 0l4.445 4.444m-1.778-1.777.889-.89c.825-.793 1.841-.793 2.666 0L181 86.556m-16-8.888A2.667 2.667 0 0 1 167.667 75h10.666A2.666 2.666 0 0 1 181 77.667v10.666A2.667 2.667 0 0 1 178.333 91h-10.666A2.666 2.666 0 0 1 165 88.333V77.667z" stroke="#fff" style="stroke:#fff;stroke-opacity:1" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></g><defs><clipPath id="a"><path fill="#fff" style="fill:#fff;fill-opacity:1" d="M0 0h440v167H0z"/></clipPath><clipPath id="c"><path fill="#fff" style="fill:#fff;fill-opacity:1" transform="rotate(90 311 129)" d="M0 0h394v439H0z"/></clipPath><filter id="f" x="28" y="40" width="109" height="80" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feGaussianBlur in="BackgroundImageFix" stdDeviation="2"/><feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_6169_38"/><feBlend in="SourceGraphic" in2="effect1_backgroundBlur_6169_38" result="shape"/></filter><filter id="g" x="290" y="40" width="109" height="80" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feGaussianBlur in="BackgroundImageFix" stdDeviation="2"/><feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_6169_38"/><feBlend in="SourceGraphic" in2="effect1_backgroundBlur_6169_38" result="shape"/></filter><radialGradient id="e" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-279.909 0 0 -295.974 226.706 -8.946)"><stop stop-color="#F6FAFF" style="stop-color:color(display-p3 .963 .9821 1);stop-opacity:1"/><stop offset="1" stop-color="#8EC7FF" stop-opacity="0" style="stop-color:none;stop-opacity:0"/></radialGradient><linearGradient id="b" x1="440" y1="15" x2="0" y2="159.5" gradientUnits="userSpaceOnUse"><stop stop-color="#A2B7FF" style="stop-color:color(display-p3 .6353 .7189 .9997);stop-opacity:1"/><stop offset=".634" stop-color="#E7F4FC" style="stop-color:color(display-p3 .9059 .9569 .9882);stop-opacity:1"/><stop offset="1" stop-color="#8BC0FF" style="stop-color:color(display-p3 .5451 .7547 1);stop-opacity:1"/></linearGradient></defs></svg>
@@ -1,7 +0,0 @@
1
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g id="icon">
3
- <path id="Union" fill-rule="evenodd" clip-rule="evenodd"
4
- d="M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8ZM15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8ZM10.6585 6.75529C10.852 6.55827 10.8491 6.2417 10.6521 6.04821C10.4551 5.85472 10.1385 5.85759 9.94501 6.05461L7.16878 8.88151L5.95903 7.64968C5.76554 7.45266 5.44897 7.4498 5.25195 7.64329C5.05493 7.83678 5.05207 8.15335 5.24556 8.35037L6.81204 9.94545C6.90606 10.0412 7.0346 10.0951 7.16878 10.0951C7.30296 10.0951 7.4315 10.0412 7.52552 9.94545L10.6585 6.75529Z"
5
- fill="#3B82F6" style="fill:#3B82F6;fill:color(display-p3 0.2314 0.5098 0.9647);fill-opacity:1;" />
6
- </g>
7
- </svg>
@@ -1,7 +0,0 @@
1
- /* eslint-disable import/prefer-default-export */
2
- import { createContext } from 'react';
3
-
4
- /**
5
- * @type {React.Context<import('../types').SessionContext>}
6
- */
7
- export const SessionContext = createContext();