@thunderid/react 0.13.0 → 1.0.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 (67) hide show
  1. package/dist/api/getUsersMeMeta.d.ts +22 -0
  2. package/dist/api/getUsersMeMeta.d.ts.map +1 -0
  3. package/dist/api/getUsersMeMeta.js +32 -0
  4. package/dist/api/getUsersMeMeta.js.map +1 -0
  5. package/dist/cjs/api/getUsersMeMeta.cjs +34 -0
  6. package/dist/cjs/api/getUsersMeMeta.cjs.map +1 -0
  7. package/dist/cjs/components/adapters/GoogleButton.cjs +425 -31
  8. package/dist/cjs/components/adapters/GoogleButton.cjs.map +1 -1
  9. package/dist/cjs/components/factories/FieldFactory.cjs +4 -1
  10. package/dist/cjs/components/factories/FieldFactory.cjs.map +1 -1
  11. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.cjs +91 -35
  12. package/dist/cjs/components/presentation/UserProfile/BaseUserProfile.cjs.map +1 -1
  13. package/dist/cjs/components/presentation/UserProfile/UserProfile.cjs +4 -2
  14. package/dist/cjs/components/presentation/UserProfile/UserProfile.cjs.map +1 -1
  15. package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs +5 -0
  16. package/dist/cjs/components/presentation/auth/AuthOptionFactory.cjs.map +1 -1
  17. package/dist/cjs/components/primitives/OtpField/OtpField.cjs +4 -3
  18. package/dist/cjs/components/primitives/OtpField/OtpField.cjs.map +1 -1
  19. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs +1 -0
  20. package/dist/cjs/contexts/ThunderID/ThunderIDContext.cjs.map +1 -1
  21. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs +32 -13
  22. package/dist/cjs/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
  23. package/dist/cjs/contexts/User/UserContext.cjs +2 -1
  24. package/dist/cjs/contexts/User/UserContext.cjs.map +1 -1
  25. package/dist/cjs/contexts/User/UserProvider.cjs +5 -3
  26. package/dist/cjs/contexts/User/UserProvider.cjs.map +1 -1
  27. package/dist/cjs/index.cjs +2 -0
  28. package/dist/components/adapters/GoogleButton.d.ts.map +1 -1
  29. package/dist/components/adapters/GoogleButton.js +425 -31
  30. package/dist/components/adapters/GoogleButton.js.map +1 -1
  31. package/dist/components/factories/FieldFactory.d.ts +8 -0
  32. package/dist/components/factories/FieldFactory.d.ts.map +1 -1
  33. package/dist/components/factories/FieldFactory.js +4 -1
  34. package/dist/components/factories/FieldFactory.js.map +1 -1
  35. package/dist/components/presentation/UserProfile/BaseUserProfile.d.ts +2 -1
  36. package/dist/components/presentation/UserProfile/BaseUserProfile.d.ts.map +1 -1
  37. package/dist/components/presentation/UserProfile/BaseUserProfile.js +91 -35
  38. package/dist/components/presentation/UserProfile/BaseUserProfile.js.map +1 -1
  39. package/dist/components/presentation/UserProfile/UserProfile.d.ts.map +1 -1
  40. package/dist/components/presentation/UserProfile/UserProfile.js +5 -3
  41. package/dist/components/presentation/UserProfile/UserProfile.js.map +1 -1
  42. package/dist/components/presentation/auth/AuthOptionFactory.d.ts.map +1 -1
  43. package/dist/components/presentation/auth/AuthOptionFactory.js +5 -0
  44. package/dist/components/presentation/auth/AuthOptionFactory.js.map +1 -1
  45. package/dist/components/primitives/OtpField/OtpField.d.ts +4 -0
  46. package/dist/components/primitives/OtpField/OtpField.d.ts.map +1 -1
  47. package/dist/components/primitives/OtpField/OtpField.js +4 -3
  48. package/dist/components/primitives/OtpField/OtpField.js.map +1 -1
  49. package/dist/contexts/ThunderID/ThunderIDContext.d.ts +5 -1
  50. package/dist/contexts/ThunderID/ThunderIDContext.d.ts.map +1 -1
  51. package/dist/contexts/ThunderID/ThunderIDContext.js +1 -0
  52. package/dist/contexts/ThunderID/ThunderIDContext.js.map +1 -1
  53. package/dist/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
  54. package/dist/contexts/ThunderID/ThunderIDProvider.js +32 -13
  55. package/dist/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
  56. package/dist/contexts/User/UserContext.d.ts +2 -1
  57. package/dist/contexts/User/UserContext.d.ts.map +1 -1
  58. package/dist/contexts/User/UserContext.js +2 -1
  59. package/dist/contexts/User/UserContext.js.map +1 -1
  60. package/dist/contexts/User/UserProvider.d.ts +5 -2
  61. package/dist/contexts/User/UserProvider.d.ts.map +1 -1
  62. package/dist/contexts/User/UserProvider.js +5 -3
  63. package/dist/contexts/User/UserProvider.js.map +1 -1
  64. package/dist/index.d.ts +2 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -1
  67. package/package.json +2 -2
@@ -3,6 +3,430 @@ import Button_default from "../primitives/Button/Button.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/adapters/GoogleButton.tsx
6
+ /** Google's gradient "G" mark, matching the icon shipped in `@thunderid/console`'s `GoogleIcon`. */
7
+ const GoogleGlyph = () => /* @__PURE__ */ jsxs("svg", {
8
+ width: "18",
9
+ height: "18",
10
+ viewBox: "0 0 268.1522 273.8827",
11
+ xmlns: "http://www.w3.org/2000/svg",
12
+ children: [/* @__PURE__ */ jsxs("defs", { children: [
13
+ /* @__PURE__ */ jsxs("linearGradient", {
14
+ id: "google-btn-a",
15
+ children: [/* @__PURE__ */ jsx("stop", {
16
+ offset: "0",
17
+ stopColor: "#0fbc5c"
18
+ }), /* @__PURE__ */ jsx("stop", {
19
+ offset: "1",
20
+ stopColor: "#0cba65"
21
+ })]
22
+ }),
23
+ /* @__PURE__ */ jsxs("linearGradient", {
24
+ id: "google-btn-g",
25
+ children: [
26
+ /* @__PURE__ */ jsx("stop", {
27
+ offset: ".2312727",
28
+ stopColor: "#0fbc5f"
29
+ }),
30
+ /* @__PURE__ */ jsx("stop", {
31
+ offset: ".3115468",
32
+ stopColor: "#0fbc5f"
33
+ }),
34
+ /* @__PURE__ */ jsx("stop", {
35
+ offset: ".3660131",
36
+ stopColor: "#0fbc5e"
37
+ }),
38
+ /* @__PURE__ */ jsx("stop", {
39
+ offset: ".4575163",
40
+ stopColor: "#0fbc5d"
41
+ }),
42
+ /* @__PURE__ */ jsx("stop", {
43
+ offset: ".540305",
44
+ stopColor: "#12bc58"
45
+ }),
46
+ /* @__PURE__ */ jsx("stop", {
47
+ offset: ".6993464",
48
+ stopColor: "#28bf3c"
49
+ }),
50
+ /* @__PURE__ */ jsx("stop", {
51
+ offset: ".7712418",
52
+ stopColor: "#38c02b"
53
+ }),
54
+ /* @__PURE__ */ jsx("stop", {
55
+ offset: ".8605665",
56
+ stopColor: "#52c218"
57
+ }),
58
+ /* @__PURE__ */ jsx("stop", {
59
+ offset: ".9150327",
60
+ stopColor: "#67c30f"
61
+ }),
62
+ /* @__PURE__ */ jsx("stop", {
63
+ offset: "1",
64
+ stopColor: "#86c504"
65
+ })
66
+ ]
67
+ }),
68
+ /* @__PURE__ */ jsxs("linearGradient", {
69
+ id: "google-btn-h",
70
+ children: [
71
+ /* @__PURE__ */ jsx("stop", {
72
+ offset: ".1416122",
73
+ stopColor: "#1abd4d"
74
+ }),
75
+ /* @__PURE__ */ jsx("stop", {
76
+ offset: ".2475151",
77
+ stopColor: "#6ec30d"
78
+ }),
79
+ /* @__PURE__ */ jsx("stop", {
80
+ offset: ".3115468",
81
+ stopColor: "#8ac502"
82
+ }),
83
+ /* @__PURE__ */ jsx("stop", {
84
+ offset: ".3660131",
85
+ stopColor: "#a2c600"
86
+ }),
87
+ /* @__PURE__ */ jsx("stop", {
88
+ offset: ".4456735",
89
+ stopColor: "#c8c903"
90
+ }),
91
+ /* @__PURE__ */ jsx("stop", {
92
+ offset: ".540305",
93
+ stopColor: "#ebcb03"
94
+ }),
95
+ /* @__PURE__ */ jsx("stop", {
96
+ offset: ".6156363",
97
+ stopColor: "#f7cd07"
98
+ }),
99
+ /* @__PURE__ */ jsx("stop", {
100
+ offset: ".6993454",
101
+ stopColor: "#fdcd04"
102
+ }),
103
+ /* @__PURE__ */ jsx("stop", {
104
+ offset: ".7712418",
105
+ stopColor: "#fdce05"
106
+ }),
107
+ /* @__PURE__ */ jsx("stop", {
108
+ offset: ".8605661",
109
+ stopColor: "#ffce0a"
110
+ })
111
+ ]
112
+ }),
113
+ /* @__PURE__ */ jsxs("linearGradient", {
114
+ id: "google-btn-f",
115
+ children: [
116
+ /* @__PURE__ */ jsx("stop", {
117
+ offset: ".3159041",
118
+ stopColor: "#ff4c3c"
119
+ }),
120
+ /* @__PURE__ */ jsx("stop", {
121
+ offset: ".6038179",
122
+ stopColor: "#ff692c"
123
+ }),
124
+ /* @__PURE__ */ jsx("stop", {
125
+ offset: ".7268366",
126
+ stopColor: "#ff7825"
127
+ }),
128
+ /* @__PURE__ */ jsx("stop", {
129
+ offset: ".884534",
130
+ stopColor: "#ff8d1b"
131
+ }),
132
+ /* @__PURE__ */ jsx("stop", {
133
+ offset: "1",
134
+ stopColor: "#ff9f13"
135
+ })
136
+ ]
137
+ }),
138
+ /* @__PURE__ */ jsxs("linearGradient", {
139
+ id: "google-btn-b",
140
+ children: [
141
+ /* @__PURE__ */ jsx("stop", {
142
+ offset: ".2312727",
143
+ stopColor: "#ff4541"
144
+ }),
145
+ /* @__PURE__ */ jsx("stop", {
146
+ offset: ".3115468",
147
+ stopColor: "#ff4540"
148
+ }),
149
+ /* @__PURE__ */ jsx("stop", {
150
+ offset: ".4575163",
151
+ stopColor: "#ff4640"
152
+ }),
153
+ /* @__PURE__ */ jsx("stop", {
154
+ offset: ".540305",
155
+ stopColor: "#ff473f"
156
+ }),
157
+ /* @__PURE__ */ jsx("stop", {
158
+ offset: ".6993464",
159
+ stopColor: "#ff5138"
160
+ }),
161
+ /* @__PURE__ */ jsx("stop", {
162
+ offset: ".7712418",
163
+ stopColor: "#ff5b33"
164
+ }),
165
+ /* @__PURE__ */ jsx("stop", {
166
+ offset: ".8605665",
167
+ stopColor: "#ff6c29"
168
+ }),
169
+ /* @__PURE__ */ jsx("stop", {
170
+ offset: "1",
171
+ stopColor: "#ff8c18"
172
+ })
173
+ ]
174
+ }),
175
+ /* @__PURE__ */ jsxs("linearGradient", {
176
+ id: "google-btn-d",
177
+ children: [/* @__PURE__ */ jsx("stop", {
178
+ offset: ".4084578",
179
+ stopColor: "#fb4e5a"
180
+ }), /* @__PURE__ */ jsx("stop", {
181
+ offset: "1",
182
+ stopColor: "#ff4540"
183
+ })]
184
+ }),
185
+ /* @__PURE__ */ jsxs("linearGradient", {
186
+ id: "google-btn-c",
187
+ children: [
188
+ /* @__PURE__ */ jsx("stop", {
189
+ offset: ".1315461",
190
+ stopColor: "#0cba65"
191
+ }),
192
+ /* @__PURE__ */ jsx("stop", {
193
+ offset: ".2097843",
194
+ stopColor: "#0bb86d"
195
+ }),
196
+ /* @__PURE__ */ jsx("stop", {
197
+ offset: ".2972969",
198
+ stopColor: "#09b479"
199
+ }),
200
+ /* @__PURE__ */ jsx("stop", {
201
+ offset: ".3962575",
202
+ stopColor: "#08ad93"
203
+ }),
204
+ /* @__PURE__ */ jsx("stop", {
205
+ offset: ".4771242",
206
+ stopColor: "#0aa6a9"
207
+ }),
208
+ /* @__PURE__ */ jsx("stop", {
209
+ offset: ".5684245",
210
+ stopColor: "#0d9cc6"
211
+ }),
212
+ /* @__PURE__ */ jsx("stop", {
213
+ offset: ".667385",
214
+ stopColor: "#1893dd"
215
+ }),
216
+ /* @__PURE__ */ jsx("stop", {
217
+ offset: ".7687273",
218
+ stopColor: "#258bf1"
219
+ }),
220
+ /* @__PURE__ */ jsx("stop", {
221
+ offset: ".8585063",
222
+ stopColor: "#3086ff"
223
+ })
224
+ ]
225
+ }),
226
+ /* @__PURE__ */ jsxs("linearGradient", {
227
+ id: "google-btn-e",
228
+ children: [
229
+ /* @__PURE__ */ jsx("stop", {
230
+ offset: ".3660131",
231
+ stopColor: "#ff4e3a"
232
+ }),
233
+ /* @__PURE__ */ jsx("stop", {
234
+ offset: ".4575163",
235
+ stopColor: "#ff8a1b"
236
+ }),
237
+ /* @__PURE__ */ jsx("stop", {
238
+ offset: ".540305",
239
+ stopColor: "#ffa312"
240
+ }),
241
+ /* @__PURE__ */ jsx("stop", {
242
+ offset: ".6156363",
243
+ stopColor: "#ffb60c"
244
+ }),
245
+ /* @__PURE__ */ jsx("stop", {
246
+ offset: ".7712418",
247
+ stopColor: "#ffcd0a"
248
+ }),
249
+ /* @__PURE__ */ jsx("stop", {
250
+ offset: ".8605665",
251
+ stopColor: "#fecf0a"
252
+ }),
253
+ /* @__PURE__ */ jsx("stop", {
254
+ offset: ".9150327",
255
+ stopColor: "#fecf08"
256
+ }),
257
+ /* @__PURE__ */ jsx("stop", {
258
+ offset: "1",
259
+ stopColor: "#fdcd01"
260
+ })
261
+ ]
262
+ }),
263
+ /* @__PURE__ */ jsx("linearGradient", {
264
+ href: "#google-btn-a",
265
+ id: "google-btn-s",
266
+ x1: "219.6997",
267
+ y1: "329.5351",
268
+ x2: "254.4673",
269
+ y2: "329.5351",
270
+ gradientUnits: "userSpaceOnUse"
271
+ }),
272
+ /* @__PURE__ */ jsx("radialGradient", {
273
+ href: "#google-btn-b",
274
+ id: "google-btn-m",
275
+ gradientUnits: "userSpaceOnUse",
276
+ gradientTransform: "matrix(-1.936885,1.043001,1.455731,2.555422,290.5254,-400.6338)",
277
+ cx: "109.6267",
278
+ cy: "135.8619",
279
+ fx: "109.6267",
280
+ fy: "135.8619",
281
+ r: "71.46001"
282
+ }),
283
+ /* @__PURE__ */ jsx("radialGradient", {
284
+ href: "#google-btn-c",
285
+ id: "google-btn-n",
286
+ gradientUnits: "userSpaceOnUse",
287
+ gradientTransform: "matrix(-3.512595,-4.45809,-1.692547,1.260616,870.8006,191.554)",
288
+ cx: "45.25866",
289
+ cy: "279.2738",
290
+ fx: "45.25866",
291
+ fy: "279.2738",
292
+ r: "71.46001"
293
+ }),
294
+ /* @__PURE__ */ jsx("radialGradient", {
295
+ href: "#google-btn-d",
296
+ id: "google-btn-l",
297
+ cx: "304.0166",
298
+ cy: "118.0089",
299
+ fx: "304.0166",
300
+ fy: "118.0089",
301
+ r: "47.85445",
302
+ gradientTransform: "matrix(2.064353,-4.926832e-6,-2.901531e-6,2.592041,-297.6788,-151.7469)",
303
+ gradientUnits: "userSpaceOnUse"
304
+ }),
305
+ /* @__PURE__ */ jsx("radialGradient", {
306
+ href: "#google-btn-e",
307
+ id: "google-btn-o",
308
+ gradientUnits: "userSpaceOnUse",
309
+ gradientTransform: "matrix(-0.2485783,2.083138,2.962486,0.3341668,-255.1463,-331.1636)",
310
+ cx: "181.001",
311
+ cy: "177.2013",
312
+ fx: "181.001",
313
+ fy: "177.2013",
314
+ r: "71.46001"
315
+ }),
316
+ /* @__PURE__ */ jsx("radialGradient", {
317
+ href: "#google-btn-f",
318
+ id: "google-btn-p",
319
+ cx: "207.6733",
320
+ cy: "108.0972",
321
+ fx: "207.6733",
322
+ fy: "108.0972",
323
+ r: "41.1025",
324
+ gradientTransform: "matrix(-1.249206,1.343263,-3.896837,-3.425693,880.5011,194.9051)",
325
+ gradientUnits: "userSpaceOnUse"
326
+ }),
327
+ /* @__PURE__ */ jsx("radialGradient", {
328
+ href: "#google-btn-g",
329
+ id: "google-btn-r",
330
+ gradientUnits: "userSpaceOnUse",
331
+ gradientTransform: "matrix(-1.936885,-1.043001,1.455731,-2.555422,290.5254,838.6834)",
332
+ cx: "109.6267",
333
+ cy: "135.8619",
334
+ fx: "109.6267",
335
+ fy: "135.8619",
336
+ r: "71.46001"
337
+ }),
338
+ /* @__PURE__ */ jsx("radialGradient", {
339
+ href: "#google-btn-h",
340
+ id: "google-btn-j",
341
+ gradientUnits: "userSpaceOnUse",
342
+ gradientTransform: "matrix(-0.081402,-1.93722,2.926737,-0.1162508,-215.1345,632.8606)",
343
+ cx: "154.8697",
344
+ cy: "145.9691",
345
+ fx: "154.8697",
346
+ fy: "145.9691",
347
+ r: "71.46001"
348
+ }),
349
+ /* @__PURE__ */ jsx("filter", {
350
+ id: "google-btn-q",
351
+ x: "-.04842873",
352
+ y: "-.0582241",
353
+ width: "1.096857",
354
+ height: "1.116448",
355
+ colorInterpolationFilters: "sRGB",
356
+ children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "1.700914" })
357
+ }),
358
+ /* @__PURE__ */ jsx("filter", {
359
+ id: "google-btn-k",
360
+ x: "-.01670084",
361
+ y: "-.01009856",
362
+ width: "1.033402",
363
+ height: "1.020197",
364
+ colorInterpolationFilters: "sRGB",
365
+ children: /* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: ".2419367" })
366
+ }),
367
+ /* @__PURE__ */ jsx("clipPath", {
368
+ clipPathUnits: "userSpaceOnUse",
369
+ id: "google-btn-i",
370
+ children: /* @__PURE__ */ jsx("path", {
371
+ d: "M371.3784 193.2406H237.0825v53.4375h77.167c-1.2405 7.5627-4.0259 15.0024-8.1049 21.7862-4.6734 7.7723-10.4511 13.6895-16.373 18.1957-17.7389 13.4983-38.42 16.2584-52.7828 16.2584-36.2824 0-67.2833-23.2865-79.2844-54.9287-.4843-1.1482-.8059-2.3344-1.1975-3.5068-2.652-8.0533-4.101-16.5825-4.101-25.4474 0-9.226 1.5691-18.0575 4.4301-26.3985 11.2851-32.8967 42.9849-57.4674 80.1789-57.4674 7.4811 0 14.6854.8843 21.5173 2.6481 15.6135 4.0309 26.6578 11.9698 33.4252 18.2494l40.834-39.7111c-24.839-22.616-57.2194-36.3201-95.8444-36.3201-30.8782-.00066-59.3863 9.55308-82.7477 25.6992-18.9454 13.0941-34.4833 30.6254-44.9695 50.9861-9.75366 18.8785-15.09441 39.7994-15.09441 62.2934 0 22.495 5.34891 43.6334 15.10261 62.3374v.126c10.3023 19.8567 25.3678 36.9537 43.6783 49.9878 15.9962 11.3866 44.6789 26.5516 84.0307 26.5516 22.6301 0 42.6867-4.0517 60.3748-11.6447 12.76-5.4775 24.0655-12.6217 34.3012-21.8036 13.5247-12.1323 24.1168-27.1388 31.3465-44.4041 7.2297-17.2654 11.097-36.7895 11.097-57.957 0-9.858-.9971-19.8694-2.6881-28.9684Z",
372
+ fill: "#000"
373
+ })
374
+ })
375
+ ] }), /* @__PURE__ */ jsx("g", {
376
+ transform: "matrix(0.957922,0,0,0.985255,-90.17436,-78.85577)",
377
+ children: /* @__PURE__ */ jsxs("g", {
378
+ clipPath: "url(#google-btn-i)",
379
+ children: [
380
+ /* @__PURE__ */ jsx("path", {
381
+ d: "M92.07563 219.9585c.14844 22.14 6.5014 44.983 16.11767 63.4234v.1269c6.9482 13.3919 16.4444 23.9704 27.2604 34.4518l65.326-23.67c-12.3593-6.2344-14.2452-10.0546-23.1048-17.0253-9.0537-9.0658-15.8015-19.4735-20.0038-31.677h-.1693l.1693-.1269c-2.7646-8.0587-3.0373-16.6129-3.1393-25.5029Z",
382
+ fill: "url(#google-btn-j)",
383
+ filter: "url(#google-btn-k)"
384
+ }),
385
+ /* @__PURE__ */ jsx("path", {
386
+ d: "M237.0835 79.02491c-6.4568 22.52569-3.988 44.42139 0 57.16129 7.4561.0055 14.6388.8881 21.4494 2.6464 15.6135 4.0309 26.6566 11.97 33.424 18.2496l41.8794-40.7256c-24.8094-22.58904-54.6663-37.2961-96.7528-37.33169Z",
387
+ fill: "url(#google-btn-l)",
388
+ filter: "url(#google-btn-k)"
389
+ }),
390
+ /* @__PURE__ */ jsx("path", {
391
+ d: "M236.9434 78.84678c-31.6709-.00068-60.9107 9.79833-84.8718 26.35902-8.8968 6.149-17.0612 13.2521-24.3311 21.1509-1.9045 17.7429 14.2569 39.5507 46.2615 39.3702 15.5284-17.9373 38.4946-29.5427 64.0561-29.5427.0233 0 .046.0019.0693.002l-1.0439-57.33536c-.0472-.00003-.0929-.00406-.1401-.00406Z",
392
+ fill: "url(#google-btn-m)",
393
+ filter: "url(#google-btn-k)"
394
+ }),
395
+ /* @__PURE__ */ jsx("path", {
396
+ d: "m341.4751 226.3788-28.2685 19.2848c-1.2405 7.5627-4.0278 15.0023-8.1068 21.7861-4.6734 7.7723-10.4506 13.6898-16.3725 18.196-17.7022 13.4704-38.3286 16.2439-52.6877 16.2553-14.8415 25.1018-17.4435 37.6749 1.0439 57.9342 22.8762-.0167 43.157-4.1174 61.0458-11.7965 12.9312-5.551 24.3879-12.7913 34.7609-22.0964 13.7061-12.295 24.4421-27.5034 31.7688-45.0003 7.3267-17.497 11.2446-37.2822 11.2446-58.7336Z",
397
+ fill: "url(#google-btn-n)",
398
+ filter: "url(#google-btn-k)"
399
+ }),
400
+ /* @__PURE__ */ jsx("path", {
401
+ d: "M234.9956 191.2104v57.4981h136.0062c1.1962-7.8745 5.1523-18.0644 5.1523-26.5001 0-9.858-.9963-21.899-2.6873-30.998Z",
402
+ fill: "#3086ff",
403
+ filter: "url(#google-btn-k)"
404
+ }),
405
+ /* @__PURE__ */ jsx("path", {
406
+ d: "M128.3894 124.3268c-8.393 9.1191-15.5632 19.326-21.2483 30.3646-9.75351 18.8785-15.09402 41.8295-15.09402 64.3235 0 .317.02642.6271.02855.9436 4.31953 8.2244 59.66647 6.6495 62.45617 0-.0035-.3103-.0387-.6128-.0387-.9238 0-9.226 1.5696-16.0262 4.4306-24.3672 3.5294-10.2885 9.0557-19.7628 16.1223-27.9257 1.6019-2.0309 5.8748-6.3969 7.1214-9.0157.4749-.9975-.8621-1.5574-.9369-1.9085-.0836-.3927-1.8762-.0769-2.2778-.3694-1.2751-.9288-3.8001-1.4138-5.3334-1.8449-3.2772-.9215-8.7085-2.9536-11.7252-5.0601-9.5357-6.6586-24.417-14.6122-33.5047-24.2164Z",
407
+ fill: "url(#google-btn-o)",
408
+ filter: "url(#google-btn-k)"
409
+ }),
410
+ /* @__PURE__ */ jsx("path", {
411
+ d: "M162.0989 155.8569c22.1123 13.3013 28.4714-6.7139 43.173-12.9771L179.698 90.21568c-9.4075 3.92642-18.2957 8.80465-26.5426 14.50442-12.316 8.5122-23.192 18.8995-32.1763 30.7204Z",
412
+ fill: "url(#google-btn-p)",
413
+ filter: "url(#google-btn-q)"
414
+ }),
415
+ /* @__PURE__ */ jsx("path", {
416
+ d: "M171.0987 290.222c-29.6829 10.6413-34.3299 11.023-37.0622 29.2903 5.2213 5.0597 10.8312 9.74 16.7926 13.9835 15.9962 11.3867 46.766 26.5517 86.1178 26.5517.0462 0 .0904-.004.1366-.004v-59.1574c-.0298.0001-.064.002-.0938.002-14.7359 0-26.5113-3.8435-38.5848-10.5273-2.9768-1.6479-8.3775 2.7772-11.1229.799-3.7865-2.7284-12.8991 2.3508-16.1833-.9378Z",
417
+ fill: "url(#google-btn-r)",
418
+ filter: "url(#google-btn-k)"
419
+ }),
420
+ /* @__PURE__ */ jsx("path", {
421
+ d: "M219.6997 299.0227v59.9959c5.506.6402 11.2361 1.0289 17.2472 1.0289 6.0259 0 11.8556-.3073 17.5204-.8723v-59.7481c-6.3482 1.0777-12.3272 1.461-17.4776 1.461-5.9318 0-11.7005-.6858-17.29-1.8654Z",
422
+ opacity: ".5",
423
+ fill: "url(#google-btn-s)",
424
+ filter: "url(#google-btn-k)"
425
+ })
426
+ ]
427
+ })
428
+ })]
429
+ });
6
430
  /**
7
431
  * Google Sign-In Button Component.
8
432
  * Handles authentication with Google identity provider.
@@ -16,37 +440,7 @@ const GoogleButton = ({ isLoading, preferences, children,...rest }) => {
16
440
  color: "secondary",
17
441
  variant: "solid",
18
442
  disabled: isLoading,
19
- startIcon: /* @__PURE__ */ jsx("svg", {
20
- width: "18",
21
- height: "18",
22
- viewBox: "0 0 67.91 67.901",
23
- xmlns: "http://www.w3.org/2000/svg",
24
- children: /* @__PURE__ */ jsxs("g", {
25
- transform: "translate(-0.001 -0.001)",
26
- children: [
27
- /* @__PURE__ */ jsx("path", {
28
- d: "M15.049,160.965l-2.364,8.824-8.639.183a34.011,34.011,0,0,1-.25-31.7h0l7.691,1.41,3.369,7.645a20.262,20.262,0,0,0,.19,13.642Z",
29
- transform: "translate(0 -119.93)",
30
- fill: "#fbbb00"
31
- }),
32
- /* @__PURE__ */ jsx("path", {
33
- d: "M294.24,208.176A33.939,33.939,0,0,1,282.137,241h0l-9.687-.494-1.371-8.559a20.235,20.235,0,0,0,8.706-10.333H261.628V208.176Z",
34
- transform: "translate(-226.93 -180.567)",
35
- fill: "#518ef8"
36
- }),
37
- /* @__PURE__ */ jsx("path", {
38
- d: "M81.668,328.8h0a33.962,33.962,0,0,1-51.161-10.387l11-9.006a20.192,20.192,0,0,0,29.1,10.338Z",
39
- transform: "translate(-26.463 -268.374)",
40
- fill: "#28b446"
41
- }),
42
- /* @__PURE__ */ jsx("path", {
43
- d: "M80.451,7.816l-11,9A20.19,20.19,0,0,0,39.686,27.393l-11.06-9.055h0A33.959,33.959,0,0,1,80.451,7.816Z",
44
- transform: "translate(-24.828)",
45
- fill: "#f14336"
46
- })
47
- ]
48
- })
49
- }),
443
+ startIcon: /* @__PURE__ */ jsx(GoogleGlyph, {}),
50
444
  children: children ?? t("elements.buttons.google.text")
51
445
  });
52
446
  };
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleButton.js","names":["GoogleButton: FC<GoogleButtonProps & HTMLAttributes<HTMLButtonElement>>","useTranslation","Button"],"sources":["../../../src/components/adapters/GoogleButton.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {WithPreferences} from '@thunderid/browser';\nimport {FC, HTMLAttributes} from 'react';\nimport useTranslation from '../../hooks/useTranslation';\nimport Button from '../primitives/Button/Button';\n\nexport interface GoogleButtonProps extends WithPreferences {\n /**\n * Whether the component is in loading state.\n */\n isLoading?: boolean;\n}\n\n/**\n * Google Sign-In Button Component.\n * Handles authentication with Google identity provider.\n */\nconst GoogleButton: FC<GoogleButtonProps & HTMLAttributes<HTMLButtonElement>> = ({\n isLoading,\n preferences,\n children,\n ...rest\n}: GoogleButtonProps & HTMLAttributes<HTMLButtonElement>) => {\n const {t} = useTranslation(preferences?.i18n);\n\n return (\n <Button\n {...rest}\n fullWidth\n type=\"button\"\n color=\"secondary\"\n variant=\"solid\"\n disabled={isLoading}\n startIcon={\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 67.91 67.901\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(-0.001 -0.001)\">\n <path\n d=\"M15.049,160.965l-2.364,8.824-8.639.183a34.011,34.011,0,0,1-.25-31.7h0l7.691,1.41,3.369,7.645a20.262,20.262,0,0,0,.19,13.642Z\"\n transform=\"translate(0 -119.93)\"\n fill=\"#fbbb00\"\n />\n <path\n d=\"M294.24,208.176A33.939,33.939,0,0,1,282.137,241h0l-9.687-.494-1.371-8.559a20.235,20.235,0,0,0,8.706-10.333H261.628V208.176Z\"\n transform=\"translate(-226.93 -180.567)\"\n fill=\"#518ef8\"\n />\n <path\n d=\"M81.668,328.8h0a33.962,33.962,0,0,1-51.161-10.387l11-9.006a20.192,20.192,0,0,0,29.1,10.338Z\"\n transform=\"translate(-26.463 -268.374)\"\n fill=\"#28b446\"\n />\n <path\n d=\"M80.451,7.816l-11,9A20.19,20.19,0,0,0,39.686,27.393l-11.06-9.055h0A33.959,33.959,0,0,1,80.451,7.816Z\"\n transform=\"translate(-24.828)\"\n fill=\"#f14336\"\n />\n </g>\n </svg>\n }\n >\n {children ?? t('elements.buttons.google.text')}\n </Button>\n );\n};\n\nexport default GoogleButton;\n"],"mappings":";;;;;;;;;AAmBA,MAAMA,gBAA2E,EAC/E,WACA,aACA,SACA,GAAG,WACwD;CAC3D,MAAM,EAAC,MAAKC,uBAAe,aAAa,KAAK;AAE7C,QACE,oBAACC;EACC,GAAI;EACJ;EACA,MAAK;EACL,OAAM;EACN,SAAQ;EACR,UAAU;EACV,WACE,oBAAC;GAAI,OAAM;GAAK,QAAO;GAAK,SAAQ;GAAmB,OAAM;aAC3D,qBAAC;IAAE,WAAU;;KACX,oBAAC;MACC,GAAE;MACF,WAAU;MACV,MAAK;OACL;KACF,oBAAC;MACC,GAAE;MACF,WAAU;MACV,MAAK;OACL;KACF,oBAAC;MACC,GAAE;MACF,WAAU;MACV,MAAK;OACL;KACF,oBAAC;MACC,GAAE;MACF,WAAU;MACV,MAAK;OACL;;KACA;IACA;YAGP,YAAY,EAAE,+BAA+B;GACvC;;AAIb,2BAAe"}
1
+ {"version":3,"file":"GoogleButton.js","names":["GoogleGlyph: FC","GoogleButton: FC<GoogleButtonProps & HTMLAttributes<HTMLButtonElement>>","useTranslation","Button"],"sources":["../../../src/components/adapters/GoogleButton.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {WithPreferences} from '@thunderid/browser';\nimport {FC, HTMLAttributes} from 'react';\nimport useTranslation from '../../hooks/useTranslation';\nimport Button from '../primitives/Button/Button';\n\nexport interface GoogleButtonProps extends WithPreferences {\n /**\n * Whether the component is in loading state.\n */\n isLoading?: boolean;\n}\n\n/** Google's gradient \"G\" mark, matching the icon shipped in `@thunderid/console`'s `GoogleIcon`. */\nconst GoogleGlyph: FC = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 268.1522 273.8827\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient id=\"google-btn-a\">\n <stop offset=\"0\" stopColor=\"#0fbc5c\" />\n <stop offset=\"1\" stopColor=\"#0cba65\" />\n </linearGradient>\n <linearGradient id=\"google-btn-g\">\n <stop offset=\".2312727\" stopColor=\"#0fbc5f\" />\n <stop offset=\".3115468\" stopColor=\"#0fbc5f\" />\n <stop offset=\".3660131\" stopColor=\"#0fbc5e\" />\n <stop offset=\".4575163\" stopColor=\"#0fbc5d\" />\n <stop offset=\".540305\" stopColor=\"#12bc58\" />\n <stop offset=\".6993464\" stopColor=\"#28bf3c\" />\n <stop offset=\".7712418\" stopColor=\"#38c02b\" />\n <stop offset=\".8605665\" stopColor=\"#52c218\" />\n <stop offset=\".9150327\" stopColor=\"#67c30f\" />\n <stop offset=\"1\" stopColor=\"#86c504\" />\n </linearGradient>\n <linearGradient id=\"google-btn-h\">\n <stop offset=\".1416122\" stopColor=\"#1abd4d\" />\n <stop offset=\".2475151\" stopColor=\"#6ec30d\" />\n <stop offset=\".3115468\" stopColor=\"#8ac502\" />\n <stop offset=\".3660131\" stopColor=\"#a2c600\" />\n <stop offset=\".4456735\" stopColor=\"#c8c903\" />\n <stop offset=\".540305\" stopColor=\"#ebcb03\" />\n <stop offset=\".6156363\" stopColor=\"#f7cd07\" />\n <stop offset=\".6993454\" stopColor=\"#fdcd04\" />\n <stop offset=\".7712418\" stopColor=\"#fdce05\" />\n <stop offset=\".8605661\" stopColor=\"#ffce0a\" />\n </linearGradient>\n <linearGradient id=\"google-btn-f\">\n <stop offset=\".3159041\" stopColor=\"#ff4c3c\" />\n <stop offset=\".6038179\" stopColor=\"#ff692c\" />\n <stop offset=\".7268366\" stopColor=\"#ff7825\" />\n <stop offset=\".884534\" stopColor=\"#ff8d1b\" />\n <stop offset=\"1\" stopColor=\"#ff9f13\" />\n </linearGradient>\n <linearGradient id=\"google-btn-b\">\n <stop offset=\".2312727\" stopColor=\"#ff4541\" />\n <stop offset=\".3115468\" stopColor=\"#ff4540\" />\n <stop offset=\".4575163\" stopColor=\"#ff4640\" />\n <stop offset=\".540305\" stopColor=\"#ff473f\" />\n <stop offset=\".6993464\" stopColor=\"#ff5138\" />\n <stop offset=\".7712418\" stopColor=\"#ff5b33\" />\n <stop offset=\".8605665\" stopColor=\"#ff6c29\" />\n <stop offset=\"1\" stopColor=\"#ff8c18\" />\n </linearGradient>\n <linearGradient id=\"google-btn-d\">\n <stop offset=\".4084578\" stopColor=\"#fb4e5a\" />\n <stop offset=\"1\" stopColor=\"#ff4540\" />\n </linearGradient>\n <linearGradient id=\"google-btn-c\">\n <stop offset=\".1315461\" stopColor=\"#0cba65\" />\n <stop offset=\".2097843\" stopColor=\"#0bb86d\" />\n <stop offset=\".2972969\" stopColor=\"#09b479\" />\n <stop offset=\".3962575\" stopColor=\"#08ad93\" />\n <stop offset=\".4771242\" stopColor=\"#0aa6a9\" />\n <stop offset=\".5684245\" stopColor=\"#0d9cc6\" />\n <stop offset=\".667385\" stopColor=\"#1893dd\" />\n <stop offset=\".7687273\" stopColor=\"#258bf1\" />\n <stop offset=\".8585063\" stopColor=\"#3086ff\" />\n </linearGradient>\n <linearGradient id=\"google-btn-e\">\n <stop offset=\".3660131\" stopColor=\"#ff4e3a\" />\n <stop offset=\".4575163\" stopColor=\"#ff8a1b\" />\n <stop offset=\".540305\" stopColor=\"#ffa312\" />\n <stop offset=\".6156363\" stopColor=\"#ffb60c\" />\n <stop offset=\".7712418\" stopColor=\"#ffcd0a\" />\n <stop offset=\".8605665\" stopColor=\"#fecf0a\" />\n <stop offset=\".9150327\" stopColor=\"#fecf08\" />\n <stop offset=\"1\" stopColor=\"#fdcd01\" />\n </linearGradient>\n <linearGradient\n href=\"#google-btn-a\"\n id=\"google-btn-s\"\n x1=\"219.6997\"\n y1=\"329.5351\"\n x2=\"254.4673\"\n y2=\"329.5351\"\n gradientUnits=\"userSpaceOnUse\"\n />\n <radialGradient\n href=\"#google-btn-b\"\n id=\"google-btn-m\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(-1.936885,1.043001,1.455731,2.555422,290.5254,-400.6338)\"\n cx=\"109.6267\"\n cy=\"135.8619\"\n fx=\"109.6267\"\n fy=\"135.8619\"\n r=\"71.46001\"\n />\n <radialGradient\n href=\"#google-btn-c\"\n id=\"google-btn-n\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(-3.512595,-4.45809,-1.692547,1.260616,870.8006,191.554)\"\n cx=\"45.25866\"\n cy=\"279.2738\"\n fx=\"45.25866\"\n fy=\"279.2738\"\n r=\"71.46001\"\n />\n <radialGradient\n href=\"#google-btn-d\"\n id=\"google-btn-l\"\n cx=\"304.0166\"\n cy=\"118.0089\"\n fx=\"304.0166\"\n fy=\"118.0089\"\n r=\"47.85445\"\n gradientTransform=\"matrix(2.064353,-4.926832e-6,-2.901531e-6,2.592041,-297.6788,-151.7469)\"\n gradientUnits=\"userSpaceOnUse\"\n />\n <radialGradient\n href=\"#google-btn-e\"\n id=\"google-btn-o\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(-0.2485783,2.083138,2.962486,0.3341668,-255.1463,-331.1636)\"\n cx=\"181.001\"\n cy=\"177.2013\"\n fx=\"181.001\"\n fy=\"177.2013\"\n r=\"71.46001\"\n />\n <radialGradient\n href=\"#google-btn-f\"\n id=\"google-btn-p\"\n cx=\"207.6733\"\n cy=\"108.0972\"\n fx=\"207.6733\"\n fy=\"108.0972\"\n r=\"41.1025\"\n gradientTransform=\"matrix(-1.249206,1.343263,-3.896837,-3.425693,880.5011,194.9051)\"\n gradientUnits=\"userSpaceOnUse\"\n />\n <radialGradient\n href=\"#google-btn-g\"\n id=\"google-btn-r\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(-1.936885,-1.043001,1.455731,-2.555422,290.5254,838.6834)\"\n cx=\"109.6267\"\n cy=\"135.8619\"\n fx=\"109.6267\"\n fy=\"135.8619\"\n r=\"71.46001\"\n />\n <radialGradient\n href=\"#google-btn-h\"\n id=\"google-btn-j\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(-0.081402,-1.93722,2.926737,-0.1162508,-215.1345,632.8606)\"\n cx=\"154.8697\"\n cy=\"145.9691\"\n fx=\"154.8697\"\n fy=\"145.9691\"\n r=\"71.46001\"\n />\n <filter\n id=\"google-btn-q\"\n x=\"-.04842873\"\n y=\"-.0582241\"\n width=\"1.096857\"\n height=\"1.116448\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur stdDeviation=\"1.700914\" />\n </filter>\n <filter\n id=\"google-btn-k\"\n x=\"-.01670084\"\n y=\"-.01009856\"\n width=\"1.033402\"\n height=\"1.020197\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur stdDeviation=\".2419367\" />\n </filter>\n <clipPath clipPathUnits=\"userSpaceOnUse\" id=\"google-btn-i\">\n <path\n d=\"M371.3784 193.2406H237.0825v53.4375h77.167c-1.2405 7.5627-4.0259 15.0024-8.1049 21.7862-4.6734 7.7723-10.4511 13.6895-16.373 18.1957-17.7389 13.4983-38.42 16.2584-52.7828 16.2584-36.2824 0-67.2833-23.2865-79.2844-54.9287-.4843-1.1482-.8059-2.3344-1.1975-3.5068-2.652-8.0533-4.101-16.5825-4.101-25.4474 0-9.226 1.5691-18.0575 4.4301-26.3985 11.2851-32.8967 42.9849-57.4674 80.1789-57.4674 7.4811 0 14.6854.8843 21.5173 2.6481 15.6135 4.0309 26.6578 11.9698 33.4252 18.2494l40.834-39.7111c-24.839-22.616-57.2194-36.3201-95.8444-36.3201-30.8782-.00066-59.3863 9.55308-82.7477 25.6992-18.9454 13.0941-34.4833 30.6254-44.9695 50.9861-9.75366 18.8785-15.09441 39.7994-15.09441 62.2934 0 22.495 5.34891 43.6334 15.10261 62.3374v.126c10.3023 19.8567 25.3678 36.9537 43.6783 49.9878 15.9962 11.3866 44.6789 26.5516 84.0307 26.5516 22.6301 0 42.6867-4.0517 60.3748-11.6447 12.76-5.4775 24.0655-12.6217 34.3012-21.8036 13.5247-12.1323 24.1168-27.1388 31.3465-44.4041 7.2297-17.2654 11.097-36.7895 11.097-57.957 0-9.858-.9971-19.8694-2.6881-28.9684Z\"\n fill=\"#000\"\n />\n </clipPath>\n </defs>\n <g transform=\"matrix(0.957922,0,0,0.985255,-90.17436,-78.85577)\">\n <g clipPath=\"url(#google-btn-i)\">\n <path\n d=\"M92.07563 219.9585c.14844 22.14 6.5014 44.983 16.11767 63.4234v.1269c6.9482 13.3919 16.4444 23.9704 27.2604 34.4518l65.326-23.67c-12.3593-6.2344-14.2452-10.0546-23.1048-17.0253-9.0537-9.0658-15.8015-19.4735-20.0038-31.677h-.1693l.1693-.1269c-2.7646-8.0587-3.0373-16.6129-3.1393-25.5029Z\"\n fill=\"url(#google-btn-j)\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"M237.0835 79.02491c-6.4568 22.52569-3.988 44.42139 0 57.16129 7.4561.0055 14.6388.8881 21.4494 2.6464 15.6135 4.0309 26.6566 11.97 33.424 18.2496l41.8794-40.7256c-24.8094-22.58904-54.6663-37.2961-96.7528-37.33169Z\"\n fill=\"url(#google-btn-l)\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"M236.9434 78.84678c-31.6709-.00068-60.9107 9.79833-84.8718 26.35902-8.8968 6.149-17.0612 13.2521-24.3311 21.1509-1.9045 17.7429 14.2569 39.5507 46.2615 39.3702 15.5284-17.9373 38.4946-29.5427 64.0561-29.5427.0233 0 .046.0019.0693.002l-1.0439-57.33536c-.0472-.00003-.0929-.00406-.1401-.00406Z\"\n fill=\"url(#google-btn-m)\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"m341.4751 226.3788-28.2685 19.2848c-1.2405 7.5627-4.0278 15.0023-8.1068 21.7861-4.6734 7.7723-10.4506 13.6898-16.3725 18.196-17.7022 13.4704-38.3286 16.2439-52.6877 16.2553-14.8415 25.1018-17.4435 37.6749 1.0439 57.9342 22.8762-.0167 43.157-4.1174 61.0458-11.7965 12.9312-5.551 24.3879-12.7913 34.7609-22.0964 13.7061-12.295 24.4421-27.5034 31.7688-45.0003 7.3267-17.497 11.2446-37.2822 11.2446-58.7336Z\"\n fill=\"url(#google-btn-n)\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"M234.9956 191.2104v57.4981h136.0062c1.1962-7.8745 5.1523-18.0644 5.1523-26.5001 0-9.858-.9963-21.899-2.6873-30.998Z\"\n fill=\"#3086ff\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"M128.3894 124.3268c-8.393 9.1191-15.5632 19.326-21.2483 30.3646-9.75351 18.8785-15.09402 41.8295-15.09402 64.3235 0 .317.02642.6271.02855.9436 4.31953 8.2244 59.66647 6.6495 62.45617 0-.0035-.3103-.0387-.6128-.0387-.9238 0-9.226 1.5696-16.0262 4.4306-24.3672 3.5294-10.2885 9.0557-19.7628 16.1223-27.9257 1.6019-2.0309 5.8748-6.3969 7.1214-9.0157.4749-.9975-.8621-1.5574-.9369-1.9085-.0836-.3927-1.8762-.0769-2.2778-.3694-1.2751-.9288-3.8001-1.4138-5.3334-1.8449-3.2772-.9215-8.7085-2.9536-11.7252-5.0601-9.5357-6.6586-24.417-14.6122-33.5047-24.2164Z\"\n fill=\"url(#google-btn-o)\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"M162.0989 155.8569c22.1123 13.3013 28.4714-6.7139 43.173-12.9771L179.698 90.21568c-9.4075 3.92642-18.2957 8.80465-26.5426 14.50442-12.316 8.5122-23.192 18.8995-32.1763 30.7204Z\"\n fill=\"url(#google-btn-p)\"\n filter=\"url(#google-btn-q)\"\n />\n <path\n d=\"M171.0987 290.222c-29.6829 10.6413-34.3299 11.023-37.0622 29.2903 5.2213 5.0597 10.8312 9.74 16.7926 13.9835 15.9962 11.3867 46.766 26.5517 86.1178 26.5517.0462 0 .0904-.004.1366-.004v-59.1574c-.0298.0001-.064.002-.0938.002-14.7359 0-26.5113-3.8435-38.5848-10.5273-2.9768-1.6479-8.3775 2.7772-11.1229.799-3.7865-2.7284-12.8991 2.3508-16.1833-.9378Z\"\n fill=\"url(#google-btn-r)\"\n filter=\"url(#google-btn-k)\"\n />\n <path\n d=\"M219.6997 299.0227v59.9959c5.506.6402 11.2361 1.0289 17.2472 1.0289 6.0259 0 11.8556-.3073 17.5204-.8723v-59.7481c-6.3482 1.0777-12.3272 1.461-17.4776 1.461-5.9318 0-11.7005-.6858-17.29-1.8654Z\"\n opacity=\".5\"\n fill=\"url(#google-btn-s)\"\n filter=\"url(#google-btn-k)\"\n />\n </g>\n </g>\n </svg>\n);\n\n/**\n * Google Sign-In Button Component.\n * Handles authentication with Google identity provider.\n */\nconst GoogleButton: FC<GoogleButtonProps & HTMLAttributes<HTMLButtonElement>> = ({\n isLoading,\n preferences,\n children,\n ...rest\n}: GoogleButtonProps & HTMLAttributes<HTMLButtonElement>) => {\n const {t} = useTranslation(preferences?.i18n);\n\n return (\n <Button\n {...rest}\n fullWidth\n type=\"button\"\n color=\"secondary\"\n variant=\"solid\"\n disabled={isLoading}\n startIcon={<GoogleGlyph />}\n >\n {children ?? t('elements.buttons.google.text')}\n </Button>\n );\n};\n\nexport default GoogleButton;\n"],"mappings":"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"}
@@ -25,10 +25,18 @@ export interface FieldConfig {
25
25
  * Display name for the field.
26
26
  */
27
27
  label: string;
28
+ /**
29
+ * Number of characters for OTP fields.
30
+ */
31
+ length?: number;
28
32
  /**
29
33
  * The name of the field.
30
34
  */
31
35
  name: string;
36
+ /**
37
+ * Whether an OTP field accepts digits only. Defaults to true.
38
+ */
39
+ numericOnly?: boolean;
32
40
  /**
33
41
  * Callback function when the field loses focus.
34
42
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FieldFactory.d.ts","sourceRoot":"","sources":["../../../src/components/factories/FieldFactory.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAc,EAAE,EAAE,YAAY,EAAC,MAAM,OAAO,CAAC;AAKpD,OAAe,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,EACb,MAAM,SAAS,EACf,kBAAgB,EAChB,iBAAe,KACd,MAAM,GAAG,IAsBX,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,KAAG,YA6HjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,WAAW,CAA4D,CAAC;AAEtG,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FieldFactory.d.ts","sourceRoot":"","sources":["../../../src/components/factories/FieldFactory.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAc,EAAE,EAAE,YAAY,EAAC,MAAM,OAAO,CAAC;AAKpD,OAAe,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,EACb,MAAM,SAAS,EACf,kBAAgB,EAChB,iBAAe,KACd,MAAM,GAAG,IAsBX,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,KAAG,YAqIjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,WAAW,CAA4D,CAAC;AAEtG,eAAe,YAAY,CAAC"}
@@ -44,7 +44,7 @@ const validateFieldValue = (value, type, required = false, touched = false) => {
44
44
  * ```
45
45
  */
46
46
  const createField = (config) => {
47
- const { name, type, label, required, value, onChange, onBlur, disabled = false, error, className, id, options = [], touched = false, placeholder } = config;
47
+ const { name, type, label, required, value, onChange, onBlur, disabled = false, error, className, id, options = [], touched = false, placeholder, length, numericOnly = true } = config;
48
48
  const validationError = error || validateFieldValue(value, type, required, touched);
49
49
  const commonProps = {
50
50
  className,
@@ -96,6 +96,9 @@ const createField = (config) => {
96
96
  }
97
97
  case FieldType.Otp: return /* @__PURE__ */ jsx(OtpField_default, {
98
98
  ...commonProps,
99
+ length,
100
+ type: numericOnly ? "number" : "text",
101
+ uppercase: !numericOnly,
99
102
  onChange: (e) => onChange(e.target.value)
100
103
  });
101
104
  case FieldType.Number: return /* @__PURE__ */ jsx(TextField_default, {
@@ -1 +1 @@
1
- {"version":3,"file":"FieldFactory.js","names":["numValue: number","validationError: string | null","commonProps: Record<string, any>","PasswordField","TextField","DatePicker","isChecked: boolean","Checkbox","OtpField","fieldOptions: SelectOption[]","Select","FieldFactory: FC<FieldConfig>"],"sources":["../../../src/components/factories/FieldFactory.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {FieldType} from '@thunderid/browser';\nimport {ChangeEvent, FC, ReactElement} from 'react';\nimport Checkbox from '../primitives/Checkbox/Checkbox';\nimport DatePicker from '../primitives/DatePicker/DatePicker';\nimport OtpField from '../primitives/OtpField/OtpField';\nimport PasswordField from '../primitives/PasswordField/PasswordField';\nimport Select, {SelectOption} from '../primitives/Select/Select';\nimport TextField from '../primitives/TextField/TextField';\n\n/**\n * Interface for field configuration.\n */\nexport interface FieldConfig {\n /**\n * Additional CSS class name.\n */\n className?: string;\n /**\n * Whether the field is disabled.\n */\n disabled?: boolean;\n /**\n * Error message to display.\n */\n error?: string;\n /**\n * HTML id to apply to the rendered field.\n */\n id?: string;\n /**\n * Display name for the field.\n */\n label: string;\n /**\n * The name of the field.\n */\n name: string;\n /**\n * Callback function when the field loses focus.\n */\n onBlur?: () => void;\n /**\n * Callback function when the field value changes.\n */\n onChange: (value: string) => void;\n /**\n * Additional options for multi-valued fields.\n */\n options?: SelectOption[];\n /**\n * Placeholder text for the field.\n */\n placeholder?: string;\n /**\n * Whether the field is required.\n */\n required: boolean;\n /**\n * Whether the field has been touched/interacted with by the user.\n */\n touched?: boolean;\n /**\n * The field type.\n */\n type: FieldType;\n /**\n * Current value of the field.\n */\n value: string;\n}\n\n/**\n * Utility function to validate field values based on type\n */\nexport const validateFieldValue = (\n value: string,\n type: FieldType,\n required = false,\n touched = false,\n): string | null => {\n if (required && touched && (!value || value.trim() === '')) {\n return 'This field is required';\n }\n\n if (!value || value.trim() === '') {\n return null;\n }\n\n switch (type) {\n case FieldType.Number: {\n const numValue: number = parseInt(value, 10);\n if (Number.isNaN(numValue)) {\n return 'Please enter a valid number';\n }\n break;\n }\n default:\n break;\n }\n\n return null;\n};\n\n/**\n * Factory function to create form fields based on field type.\n *\n * @param config - The field configuration\n * @returns The appropriate React component for the field type\n *\n * @example\n * ```tsx\n * const field = createField({\n * param: 'username',\n * type: FieldType.Text,\n * label: 'Username',\n * confidential: false,\n * required: true,\n * value: '',\n * onChange: (value) => console.log(value)\n * });\n * ```\n */\nexport const createField = (config: FieldConfig): ReactElement => {\n const {\n name,\n type,\n label,\n required,\n value,\n onChange,\n onBlur,\n disabled = false,\n error,\n className,\n id,\n options = [],\n touched = false,\n placeholder,\n } = config;\n\n const validationError: string | null = error || validateFieldValue(value, type, required, touched);\n\n const commonProps: Record<string, any> = {\n className,\n 'data-testid': `thunderid-signin-${name}`,\n disabled,\n error: validationError,\n id,\n label,\n name,\n onBlur,\n placeholder,\n required,\n value,\n };\n\n switch (type) {\n case FieldType.Password:\n return <PasswordField {...commonProps} onChange={onChange} />;\n case FieldType.Text:\n return (\n <TextField\n {...commonProps}\n type=\"text\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n autoComplete=\"off\"\n />\n );\n case FieldType.Email:\n return (\n <TextField\n {...commonProps}\n type=\"email\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n autoComplete=\"email\"\n />\n );\n case FieldType.Tel:\n return (\n <TextField\n {...commonProps}\n type=\"tel\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n autoComplete=\"tel\"\n />\n );\n case FieldType.Date:\n return (\n <DatePicker {...commonProps} onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)} />\n );\n case FieldType.Checkbox: {\n const isChecked: boolean = value === 'true' || (value as any) === true;\n return (\n <Checkbox\n {...commonProps}\n checked={isChecked}\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.checked.toString())}\n />\n );\n }\n case FieldType.Otp:\n return (\n <OtpField {...commonProps} onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)} />\n );\n case FieldType.Number:\n return (\n <TextField\n {...commonProps}\n type=\"number\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n helperText=\"Enter a numeric value\"\n />\n );\n case FieldType.Select: {\n const fieldOptions: SelectOption[] = options.length > 0 ? options : [];\n\n if (fieldOptions.length > 0) {\n return (\n <Select\n {...commonProps}\n options={fieldOptions}\n onChange={(e: ChangeEvent<HTMLSelectElement>): void => onChange(e.target.value)}\n helperText=\"Select from available options\"\n />\n );\n }\n\n return (\n <TextField\n {...commonProps}\n type=\"text\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n helperText=\"Enter multiple values separated by commas (e.g., value1, value2, value3)\"\n placeholder=\"value1, value2, value3\"\n />\n );\n }\n default:\n return (\n <TextField\n {...commonProps}\n type=\"text\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n helperText=\"Unknown field type, treating as text\"\n />\n );\n }\n};\n\n/**\n * React component wrapper for the field factory.\n */\nexport const FieldFactory: FC<FieldConfig> = (props: FieldConfig): ReactElement => createField(props);\n\nexport default FieldFactory;\n"],"mappings":";;;;;;;;;;;;;AA6EA,MAAa,sBACX,OACA,MACA,WAAW,OACX,UAAU,UACQ;AAClB,KAAI,YAAY,YAAY,CAAC,SAAS,MAAM,MAAM,KAAK,IACrD,QAAO;AAGT,KAAI,CAAC,SAAS,MAAM,MAAM,KAAK,GAC7B,QAAO;AAGT,SAAQ,MAAR;EACE,KAAK,UAAU,QAAQ;GACrB,MAAMA,WAAmB,SAAS,OAAO,GAAG;AAC5C,OAAI,OAAO,MAAM,SAAS,CACxB,QAAO;AAET;;EAEF,QACE;;AAGJ,QAAO;;;;;;;;;;;;;;;;;;;;;AAsBT,MAAa,eAAe,WAAsC;CAChE,MAAM,EACJ,MACA,MACA,OACA,UACA,OACA,UACA,QACA,WAAW,OACX,OACA,WACA,IACA,UAAU,EAAE,EACZ,UAAU,OACV,gBACE;CAEJ,MAAMC,kBAAiC,SAAS,mBAAmB,OAAO,MAAM,UAAU,QAAQ;CAElG,MAAMC,cAAmC;EACvC;EACA,eAAe,oBAAoB;EACnC;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAED,SAAQ,MAAR;EACE,KAAK,UAAU,SACb,QAAO,oBAACC;GAAc,GAAI;GAAuB;IAAY;EAC/D,KAAK,UAAU,KACb,QACE,oBAACC;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,cAAa;IACb;EAEN,KAAK,UAAU,MACb,QACE,oBAACA;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,cAAa;IACb;EAEN,KAAK,UAAU,IACb,QACE,oBAACA;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,cAAa;IACb;EAEN,KAAK,UAAU,KACb,QACE,oBAACC;GAAW,GAAI;GAAa,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;IAAI;EAEnH,KAAK,UAAU,UAAU;GACvB,MAAMC,YAAqB,UAAU,UAAW,UAAkB;AAClE,UACE,oBAACC;IACC,GAAI;IACJ,SAAS;IACT,WAAW,MAA2C,SAAS,EAAE,OAAO,QAAQ,UAAU,CAAC;KAC3F;;EAGN,KAAK,UAAU,IACb,QACE,oBAACC;GAAS,GAAI;GAAa,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;IAAI;EAEjH,KAAK,UAAU,OACb,QACE,oBAACJ;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,YAAW;IACX;EAEN,KAAK,UAAU,QAAQ;GACrB,MAAMK,eAA+B,QAAQ,SAAS,IAAI,UAAU,EAAE;AAEtE,OAAI,aAAa,SAAS,EACxB,QACE,oBAACC;IACC,GAAI;IACJ,SAAS;IACT,WAAW,MAA4C,SAAS,EAAE,OAAO,MAAM;IAC/E,YAAW;KACX;AAIN,UACE,oBAACN;IACC,GAAI;IACJ,MAAK;IACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;IAC9E,YAAW;IACX,aAAY;KACZ;;EAGN,QACE,QACE,oBAACA;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,YAAW;IACX;;;;;;AAQV,MAAaO,gBAAiC,UAAqC,YAAY,MAAM"}
1
+ {"version":3,"file":"FieldFactory.js","names":["numValue: number","validationError: string | null","commonProps: Record<string, any>","PasswordField","TextField","DatePicker","isChecked: boolean","Checkbox","OtpField","fieldOptions: SelectOption[]","Select","FieldFactory: FC<FieldConfig>"],"sources":["../../../src/components/factories/FieldFactory.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {FieldType} from '@thunderid/browser';\nimport {ChangeEvent, FC, ReactElement} from 'react';\nimport Checkbox from '../primitives/Checkbox/Checkbox';\nimport DatePicker from '../primitives/DatePicker/DatePicker';\nimport OtpField from '../primitives/OtpField/OtpField';\nimport PasswordField from '../primitives/PasswordField/PasswordField';\nimport Select, {SelectOption} from '../primitives/Select/Select';\nimport TextField from '../primitives/TextField/TextField';\n\n/**\n * Interface for field configuration.\n */\nexport interface FieldConfig {\n /**\n * Additional CSS class name.\n */\n className?: string;\n /**\n * Whether the field is disabled.\n */\n disabled?: boolean;\n /**\n * Error message to display.\n */\n error?: string;\n /**\n * HTML id to apply to the rendered field.\n */\n id?: string;\n /**\n * Display name for the field.\n */\n label: string;\n /**\n * Number of characters for OTP fields.\n */\n length?: number;\n /**\n * The name of the field.\n */\n name: string;\n /**\n * Whether an OTP field accepts digits only. Defaults to true.\n */\n numericOnly?: boolean;\n /**\n * Callback function when the field loses focus.\n */\n onBlur?: () => void;\n /**\n * Callback function when the field value changes.\n */\n onChange: (value: string) => void;\n /**\n * Additional options for multi-valued fields.\n */\n options?: SelectOption[];\n /**\n * Placeholder text for the field.\n */\n placeholder?: string;\n /**\n * Whether the field is required.\n */\n required: boolean;\n /**\n * Whether the field has been touched/interacted with by the user.\n */\n touched?: boolean;\n /**\n * The field type.\n */\n type: FieldType;\n /**\n * Current value of the field.\n */\n value: string;\n}\n\n/**\n * Utility function to validate field values based on type\n */\nexport const validateFieldValue = (\n value: string,\n type: FieldType,\n required = false,\n touched = false,\n): string | null => {\n if (required && touched && (!value || value.trim() === '')) {\n return 'This field is required';\n }\n\n if (!value || value.trim() === '') {\n return null;\n }\n\n switch (type) {\n case FieldType.Number: {\n const numValue: number = parseInt(value, 10);\n if (Number.isNaN(numValue)) {\n return 'Please enter a valid number';\n }\n break;\n }\n default:\n break;\n }\n\n return null;\n};\n\n/**\n * Factory function to create form fields based on field type.\n *\n * @param config - The field configuration\n * @returns The appropriate React component for the field type\n *\n * @example\n * ```tsx\n * const field = createField({\n * param: 'username',\n * type: FieldType.Text,\n * label: 'Username',\n * confidential: false,\n * required: true,\n * value: '',\n * onChange: (value) => console.log(value)\n * });\n * ```\n */\nexport const createField = (config: FieldConfig): ReactElement => {\n const {\n name,\n type,\n label,\n required,\n value,\n onChange,\n onBlur,\n disabled = false,\n error,\n className,\n id,\n options = [],\n touched = false,\n placeholder,\n length,\n numericOnly = true,\n } = config;\n\n const validationError: string | null = error || validateFieldValue(value, type, required, touched);\n\n const commonProps: Record<string, any> = {\n className,\n 'data-testid': `thunderid-signin-${name}`,\n disabled,\n error: validationError,\n id,\n label,\n name,\n onBlur,\n placeholder,\n required,\n value,\n };\n\n switch (type) {\n case FieldType.Password:\n return <PasswordField {...commonProps} onChange={onChange} />;\n case FieldType.Text:\n return (\n <TextField\n {...commonProps}\n type=\"text\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n autoComplete=\"off\"\n />\n );\n case FieldType.Email:\n return (\n <TextField\n {...commonProps}\n type=\"email\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n autoComplete=\"email\"\n />\n );\n case FieldType.Tel:\n return (\n <TextField\n {...commonProps}\n type=\"tel\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n autoComplete=\"tel\"\n />\n );\n case FieldType.Date:\n return (\n <DatePicker {...commonProps} onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)} />\n );\n case FieldType.Checkbox: {\n const isChecked: boolean = value === 'true' || (value as any) === true;\n return (\n <Checkbox\n {...commonProps}\n checked={isChecked}\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.checked.toString())}\n />\n );\n }\n case FieldType.Otp:\n return (\n <OtpField\n {...commonProps}\n length={length}\n type={numericOnly ? 'number' : 'text'}\n uppercase={!numericOnly}\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n />\n );\n case FieldType.Number:\n return (\n <TextField\n {...commonProps}\n type=\"number\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n helperText=\"Enter a numeric value\"\n />\n );\n case FieldType.Select: {\n const fieldOptions: SelectOption[] = options.length > 0 ? options : [];\n\n if (fieldOptions.length > 0) {\n return (\n <Select\n {...commonProps}\n options={fieldOptions}\n onChange={(e: ChangeEvent<HTMLSelectElement>): void => onChange(e.target.value)}\n helperText=\"Select from available options\"\n />\n );\n }\n\n return (\n <TextField\n {...commonProps}\n type=\"text\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n helperText=\"Enter multiple values separated by commas (e.g., value1, value2, value3)\"\n placeholder=\"value1, value2, value3\"\n />\n );\n }\n default:\n return (\n <TextField\n {...commonProps}\n type=\"text\"\n onChange={(e: ChangeEvent<HTMLInputElement>): void => onChange(e.target.value)}\n helperText=\"Unknown field type, treating as text\"\n />\n );\n }\n};\n\n/**\n * React component wrapper for the field factory.\n */\nexport const FieldFactory: FC<FieldConfig> = (props: FieldConfig): ReactElement => createField(props);\n\nexport default FieldFactory;\n"],"mappings":";;;;;;;;;;;;;AAqFA,MAAa,sBACX,OACA,MACA,WAAW,OACX,UAAU,UACQ;AAClB,KAAI,YAAY,YAAY,CAAC,SAAS,MAAM,MAAM,KAAK,IACrD,QAAO;AAGT,KAAI,CAAC,SAAS,MAAM,MAAM,KAAK,GAC7B,QAAO;AAGT,SAAQ,MAAR;EACE,KAAK,UAAU,QAAQ;GACrB,MAAMA,WAAmB,SAAS,OAAO,GAAG;AAC5C,OAAI,OAAO,MAAM,SAAS,CACxB,QAAO;AAET;;EAEF,QACE;;AAGJ,QAAO;;;;;;;;;;;;;;;;;;;;;AAsBT,MAAa,eAAe,WAAsC;CAChE,MAAM,EACJ,MACA,MACA,OACA,UACA,OACA,UACA,QACA,WAAW,OACX,OACA,WACA,IACA,UAAU,EAAE,EACZ,UAAU,OACV,aACA,QACA,cAAc,SACZ;CAEJ,MAAMC,kBAAiC,SAAS,mBAAmB,OAAO,MAAM,UAAU,QAAQ;CAElG,MAAMC,cAAmC;EACvC;EACA,eAAe,oBAAoB;EACnC;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAED,SAAQ,MAAR;EACE,KAAK,UAAU,SACb,QAAO,oBAACC;GAAc,GAAI;GAAuB;IAAY;EAC/D,KAAK,UAAU,KACb,QACE,oBAACC;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,cAAa;IACb;EAEN,KAAK,UAAU,MACb,QACE,oBAACA;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,cAAa;IACb;EAEN,KAAK,UAAU,IACb,QACE,oBAACA;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,cAAa;IACb;EAEN,KAAK,UAAU,KACb,QACE,oBAACC;GAAW,GAAI;GAAa,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;IAAI;EAEnH,KAAK,UAAU,UAAU;GACvB,MAAMC,YAAqB,UAAU,UAAW,UAAkB;AAClE,UACE,oBAACC;IACC,GAAI;IACJ,SAAS;IACT,WAAW,MAA2C,SAAS,EAAE,OAAO,QAAQ,UAAU,CAAC;KAC3F;;EAGN,KAAK,UAAU,IACb,QACE,oBAACC;GACC,GAAI;GACI;GACR,MAAM,cAAc,WAAW;GAC/B,WAAW,CAAC;GACZ,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;IAC9E;EAEN,KAAK,UAAU,OACb,QACE,oBAACJ;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,YAAW;IACX;EAEN,KAAK,UAAU,QAAQ;GACrB,MAAMK,eAA+B,QAAQ,SAAS,IAAI,UAAU,EAAE;AAEtE,OAAI,aAAa,SAAS,EACxB,QACE,oBAACC;IACC,GAAI;IACJ,SAAS;IACT,WAAW,MAA4C,SAAS,EAAE,OAAO,MAAM;IAC/E,YAAW;KACX;AAIN,UACE,oBAACN;IACC,GAAI;IACJ,MAAK;IACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;IAC9E,YAAW;IACX,aAAY;KACZ;;EAGN,QACE,QACE,oBAACA;GACC,GAAI;GACJ,MAAK;GACL,WAAW,MAA2C,SAAS,EAAE,OAAO,MAAM;GAC9E,YAAW;IACX;;;;;;AAQV,MAAaO,gBAAiC,UAAqC,YAAY,MAAM"}
@@ -1,4 +1,4 @@
1
- import { User, Preferences } from '@thunderid/browser';
1
+ import { User, Preferences, AttributeSchema } from '@thunderid/browser';
2
2
  import { FC, ReactElement } from 'react';
3
3
  export interface BaseUserProfileProps {
4
4
  attributeMapping?: {
@@ -30,6 +30,7 @@ export interface BaseUserProfileProps {
30
30
  profile?: User;
31
31
  showFields?: string[];
32
32
  title?: string;
33
+ userSchema?: Record<string, AttributeSchema> | null;
33
34
  }
34
35
  declare const BaseUserProfile: FC<BaseUserProfileProps>;
35
36
  export default BaseUserProfile;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseUserProfile.d.ts","sourceRoot":"","sources":["../../../../src/components/presentation/UserProfile/BaseUserProfile.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,IAAI,EAAiC,WAAW,EAAY,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAC,EAAE,EAAE,YAAY,EAAmC,MAAM,OAAO,CAAC;AAwCzE,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;QAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+BD,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAwkB7C,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"BaseUserProfile.d.ts","sourceRoot":"","sources":["../../../../src/components/presentation/UserProfile/BaseUserProfile.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAC,IAAI,EAAiC,WAAW,EAAa,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAC,EAAE,EAAE,YAAY,EAAmC,MAAM,OAAO,CAAC;AAyCzE,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;QAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,CAAC;CACrD;AA+BD,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAopB7C,CAAC;AAEF,eAAe,eAAe,CAAC"}