@pelican-identity/react 2.0.12 → 2.0.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pelican-identity/react",
3
- "version": "2.0.12",
3
+ "version": "2.0.13",
4
4
  "description": "React components for Pelican Identity authentication",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -21,7 +21,7 @@
21
21
  "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
22
22
  },
23
23
  "dependencies": {
24
- "@pelican-identity/auth-core": "1.2.11"
24
+ "@pelican-identity/auth-core": "1.2.12"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/react": "^19.0.4",
@@ -1,395 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect } from "react";
3
- import PelicanButton from "./PelicanButton";
4
- import { usePelicanAuth } from "../hooks/usePelicanAuth";
5
- import StoreIcons from "./StoreIcons";
6
- const PelicanAuth = (config) => {
7
- const { start, qr, state, deeplink, isProcessing, stop, error, successMessage, } = usePelicanAuth({
8
- projectId: config.projectId,
9
- publicKey: config.publicKey,
10
- authType: config.authType,
11
- onClose: config.onClose,
12
- continuousMode: config.continuousMode,
13
- forceQRCode: config.forceQRCode,
14
- onSuccess: (identity) => {
15
- config.onSuccess(identity);
16
- },
17
- onError: (error) => {
18
- config.onError?.(error);
19
- },
20
- });
21
- useEffect(() => {
22
- if (config.continuousMode) {
23
- start();
24
- }
25
- }, [config.continuousMode]);
26
- return (_jsxs(_Fragment, { children: [_jsx("style", { children: `@keyframes fadeUp {
27
- from {
28
- opacity: 0;
29
- transform: translateY(20px);
30
- }
31
- to {
32
- opacity: 1;
33
- transform: translateY(0);
34
- }
35
- }
36
-
37
- @keyframes spin {
38
- to {
39
- transform: rotate(360deg);
40
- }
41
- }
42
-
43
- @keyframes successPulse {
44
- 0%,
45
- 100% {
46
- transform: scale(1);
47
- opacity: 1;
48
- }
49
- 50% {
50
- transform: scale(1.05);
51
- opacity: 0.9;
52
- }
53
- }
54
-
55
- .auth-container {
56
- width: 300px;
57
- max-width: fit-content;
58
- padding: 1rem;
59
- margin-top: 0.3rem;
60
- position: relative;
61
- animation: fadeUp 0.5s ease-out;
62
- background-color: #fcfcfc;
63
- border-radius: 2.5rem;
64
- display: flex;
65
- flex-direction: column;
66
- justify-content: space-between;
67
- align-items: center;
68
- gap: 1rem;
69
- min-height: 320px;
70
- }
71
- .js-auth-container {
72
- width: 300px;
73
- max-width: fit-content;
74
- padding: 1rem;
75
- margin-top: 0.3rem;
76
- position: relative;
77
- background-color: #fcfcfc;
78
- border-radius: 2.5rem;
79
- display: flex;
80
- flex-direction: column;
81
- justify-content: space-between;
82
- align-items: center;
83
- gap: 1rem;
84
- min-height: 320px;
85
- }
86
-
87
- .close-button {
88
- background-color: #2b2b2bff;
89
- border: none;
90
- cursor: pointer;
91
- transition: opacity 0.2s;
92
- height: 1.5rem;
93
- width: 1.5rem;
94
- display: flex;
95
- align-items: center;
96
- justify-content: center;
97
- border-radius: 50%;
98
- }
99
-
100
- .close-button:hover {
101
- opacity: 0.6;
102
- }
103
-
104
- .close-icon {
105
- width: 1.5rem;
106
- height: 1.5rem;
107
- fill: #000000;
108
- }
109
-
110
- .retry-container {
111
- text-align: center;
112
- padding: 3rem 0;
113
- }
114
-
115
- .retry-container > div:first-child {
116
- margin-bottom: 1rem;
117
- }
118
-
119
- .retry-text {
120
- font-size: 1.125rem;
121
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
122
- }
123
-
124
- .content-wrapper {
125
- display: flex;
126
- flex-direction: column;
127
- justify-content: center;
128
- align-items: center;
129
- gap: 2rem;
130
- }
131
-
132
- .unpaired-container {
133
- text-align: center;
134
- display: flex;
135
- flex-direction: column;
136
- }
137
-
138
- .main-heading {
139
- font-size: 0.75rem;
140
- font-weight: 600;
141
- color: #585858;
142
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
143
- }
144
-
145
- @media (min-width: 768px) {
146
- .main-heading {
147
- font-size: 1rem;
148
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
149
- }
150
- }
151
-
152
- @media (min-width: 1024px) {
153
- .main-heading {
154
- font-size: 1rem;
155
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
156
- }
157
- }
158
-
159
- .mobile-auth-container {
160
- display: flex;
161
- flex-direction: column;
162
- gap: 0.7rem;
163
- width: 253px;
164
- }
165
-
166
- .logo-container {
167
- display: flex;
168
- justify-content: center;
169
- padding: 2rem 0;
170
- }
171
-
172
- .open-app-link {
173
- display: inline-block;
174
- padding: 0.75rem 1rem;
175
- background-color: #2b2b2bff;
176
- width: fit-content;
177
- align-self: center;
178
-
179
- border-radius: 18px;
180
- color: #fff;
181
- font-weight: 500;
182
- font-size: 1rem;
183
- text-decoration: none;
184
- transition: background-color 0.2s;
185
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
186
- }
187
-
188
- .open-app-link:hover {
189
- opacity: 0.8;
190
- }
191
-
192
- .helper-text {
193
- font-size: 0.75rem;
194
- color: #6b7280;
195
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
196
- }
197
-
198
- .qr-container {
199
- display: flex;
200
- justify-content: center;
201
- }
202
-
203
- .qr-wrapper {
204
- display: flex;
205
- justify-content: center;
206
- align-items: center;
207
- overflow: hidden;
208
- border-radius: 2rem;
209
- background-color: #fff;
210
- padding: 0.2rem;
211
- height: 244px;
212
- width: 244px;
213
- }
214
-
215
- .qr-image {
216
- height: 90%;
217
- width: 90%;
218
- }
219
-
220
- .loader-container {
221
- display: flex;
222
- justify-content: center;
223
- }
224
-
225
- .instruction-text {
226
- font-size: 0.875rem;
227
- color: #9ca3af;
228
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
229
- }
230
-
231
- .paired-container {
232
- text-align: center;
233
- display: flex;
234
- flex-direction: column;
235
- gap: 1rem;
236
- max-width: 250px;
237
- }
238
-
239
- .paired-heading {
240
- font-size: 1rem;
241
- font-weight: 800;
242
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
243
- }
244
-
245
- @media (min-width: 768px) {
246
- .paired-heading {
247
- font-size: 1rem;
248
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
249
- }
250
- }
251
-
252
- .success-message {
253
- background-color: #121212;
254
- color: #d9eb1b;
255
- padding: 0.5rem 1rem;
256
- border-radius: 1.3rem;
257
- font-weight: 700;
258
- font-size: 1rem;
259
- animation: successPulse 0.2s ease-in-out;
260
- margin: 0.5rem 0;
261
- font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
262
- width: 300px;
263
- max-width: fit-content;
264
- }
265
-
266
- .auto-renew-badge {
267
- display: inline-block;
268
- background-color: rgba(217, 235, 27, 0.2);
269
- border: 1px solid #d9eb1b;
270
- color: #d9eb1b;
271
- padding: 0.25rem 0.75rem;
272
- border-radius: 9999px;
273
- font-size: 0.75rem;
274
- font-weight: 600;
275
- margin-top: 0.5rem;
276
- }
277
-
278
- .error-wrapper {
279
- display: flex;
280
- justify-content: center;
281
- align-items: center;
282
- text-align: center;
283
- border-radius: 1.5rem;
284
- border: 1px solid rgb(255, 236, 236);
285
- background-color: rgb(255, 255, 255);
286
- width: 250px;
287
- height: 80px;
288
- }
289
-
290
- .error-message {
291
- font-size: 0.75rem;
292
- font-weight: 400;
293
- color: rgb(255, 139, 139);
294
- font-family: Onest, system-ui, Avenir, Helvetica, Arial, sans-serif;
295
- max-width: 70%;
296
- }
297
-
298
- .loader {
299
- width: 48px;
300
- height: 48px;
301
- position: relative;
302
- }
303
- .loader::before,
304
- .loader::after {
305
- content: "";
306
- position: absolute;
307
- left: 50%;
308
- top: 50%;
309
- transform: translate(-50%, -50%);
310
- width: 48em;
311
- height: 48em;
312
- background-image: radial-gradient(circle 10px, #585858 100%, transparent 0),
313
- radial-gradient(circle 10px, #585858 100%, transparent 0),
314
- radial-gradient(circle 10px, #585858 100%, transparent 0),
315
- radial-gradient(circle 10px, #585858 100%, transparent 0),
316
- radial-gradient(circle 10px, #585858 100%, transparent 0),
317
- radial-gradient(circle 10px, #585858 100%, transparent 0),
318
- radial-gradient(circle 10px, #585858 100%, transparent 0),
319
- radial-gradient(circle 10px, #585858 100%, transparent 0),
320
- radial-gradient(circle 10px, #585858 100%, transparent 0);
321
- background-position: 0em -18em, 0em 18em, 18em 0em, -18em 0em, 13em -13em,
322
- -13em -13em, 13em 13em, -13em 13em;
323
- background-repeat: no-repeat;
324
- font-size: 0.5px;
325
- border-radius: 50%;
326
- animation: blast 1s ease-in infinite;
327
- }
328
- .loader::after {
329
- font-size: 1px;
330
- background: #585858;
331
- animation: bounce 1s ease-in infinite;
332
- }
333
-
334
- @keyframes bounce {
335
- 0%,
336
- 100% {
337
- font-size: 0.75px;
338
- }
339
- 50% {
340
- font-size: 1.5px;
341
- }
342
- }
343
- @keyframes blast {
344
- 0%,
345
- 40% {
346
- font-size: 0.5px;
347
- }
348
- 70% {
349
- opacity: 1;
350
- font-size: 4px;
351
- }
352
- 100% {
353
- font-size: 6px;
354
- opacity: 0;
355
- }
356
- }
357
- ` }), _jsxs("section", { children: [_jsx("div", { style: {
358
- maxWidth: "275px",
359
- justifyContent: "space-between",
360
- alignItems: "center",
361
- width: "100%",
362
- }, children: !config.continuousMode && (_jsxs("div", { style: {
363
- width: "100%",
364
- display: "flex",
365
- justifyContent: "space-between",
366
- alignItems: "center",
367
- }, children: [_jsx("button", { type: "button", style: {
368
- border: "none",
369
- background: "transparent",
370
- cursor: "pointer",
371
- }, onClick: () => {
372
- start();
373
- }, disabled: config.continuousMode, children: config.buttonComponent ? (config.buttonComponent) : (_jsx(PelicanButton, { authType: config.authType, text: config.buttonText })) }), state !== "idle" && (_jsx("button", { onClick: () => {
374
- stop();
375
- config.onClose?.();
376
- }, className: "close-button", "aria-label": "Close", type: "button", children: _jsx("svg", { fill: "#fff", stroke: "#fff", viewBox: "0 0 24 24", role: "img", "aria-label": "close icon", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 4, d: "M6 18L18 6M6 6l12 12", height: "24", width: "24", fill: "#fff", stroke: "#fff", color: "#fff" }) }) }))] })) }), state !== "idle" && (_jsxs("div", { className: "auth-container", children: [successMessage && (_jsxs("div", { className: "success-message", style: { textAlign: "center" }, children: [successMessage, config.continuousMode && (_jsx("p", { style: {
377
- fontSize: "0.8rem",
378
- marginTop: "0.5rem",
379
- color: "#f3f3f3",
380
- textAlign: "center",
381
- }, children: "Preparing next session..." }))] })), error && state === "error" && (_jsx("div", { className: "error-wrapper", children: _jsx("p", { className: "error-message", children: error.message }) })), isProcessing ? (_jsxs("div", { className: "content-wrapper", children: [_jsx("h2", { className: "main-heading", children: "one sec..." }), _jsx("span", { className: "loader", style: { margin: "1rem auto", width: "252px" } })] })) : (_jsx("div", { className: "content-wrapper", children: state === "awaiting-pair" && !successMessage && (_jsxs("div", { className: "unpaired-container", children: [!deeplink && !config.forceQRCode && (_jsx("h2", { className: "main-heading", children: "Open Pelican Vault" })), !config.forceQRCode && deeplink ? (_jsxs("div", { className: "mobile-auth-container", children: [_jsx("div", { className: "logo-container", children: _jsx("img", { src: "https://res.cloudinary.com/de0jr8mcm/image/upload/v1765904735/pelican/pelican_icon_r9ghqw.png ", alt: "Pelican Logo", style: { width: "80px", height: "80px" } }) }), _jsx("a", { href: deeplink, className: "open-app-link", children: "Open Pelican Vault" }), _jsxs("p", { className: "helper-text", children: ["Open the app to", " ", config.authType === "login"
382
- ? "login"
383
- : config.authType === "signup"
384
- ? "signup"
385
- : config.authType === "id-verification"
386
- ? "verify identity"
387
- : "authenticate"] })] })) : (config.forceQRCode &&
388
- qr &&
389
- state === "awaiting-pair") ||
390
- (!config.forceQRCode &&
391
- qr &&
392
- state === "awaiting-pair") ? (_jsx("div", { className: "qr-container", children: _jsxs("div", { className: "qr-wrapper", children: [qr && (_jsx("img", { src: qr, alt: "QR Code", className: "qr-image" })), !qr && _jsx("span", { className: "loader" })] }) })) : (_jsx("div", { className: "loader-container", children: _jsx("span", { className: "loader" }) }))] })) })), _jsx(StoreIcons, {})] }))] })] }));
393
- };
394
- export default PelicanAuth;
395
- //# sourceMappingURL=PelicanAuth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PelicanAuth.js","sourceRoot":"","sources":["../../src/components/PelicanAuth.tsx"],"names":[],"mappings":"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"}