@pollar/react 0.11.4 → 0.12.0-rc.2

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/README.md CHANGED
@@ -3,7 +3,14 @@
3
3
  React bindings for [Pollar](https://pollar.xyz) — drop-in authentication UI, transaction modals, and hooks for
4
4
  Stellar and Solana applications.
5
5
 
6
- > **0.11.4** (requires `@pollar/core@^0.11.4`).
6
+ > **0.11.5** (requires `@pollar/core@^0.11.5`).
7
+ > **Turnkey co-signed wallets**: `<CosignModal>` opens for a request the device did not settle and enables
8
+ > Approve only after it verifies against Turnkey; `useCosign()` exposes the pending requests.
9
+ > `<ConfirmModal>` shows every signature first under `confirmation: 'prompt'`. The ramp widget links the
10
+ > chain a ramp settles on and retries funds in transit; Send takes a Stellar memo (`SendMemoType`). See
11
+ > [UPGRADE.md](../../UPGRADE.md).
12
+ >
13
+ > Earlier: **0.11.4** (requires `@pollar/core@^0.11.4`).
7
14
  > **KYC by ramp corridor**: `<RampWidget>` lists routes locked by a requirement step and opens that
8
15
  > step - `<KycModal>`, `<RequirementFormModal>`, `<RegistryCheckModal>` or `<ProviderRegistrationModal>`
9
16
  > (all exported) - then quotes again; `openKycModal()` without a corridor walks the app's own KYC
@@ -132,7 +139,7 @@ Context provider that initialises the Pollar client and makes it available to ch
132
139
  <PollarProvider
133
140
  client={{
134
141
  apiKey: 'your-api-key',
135
- baseUrl: 'https://sdk.api.pollar.xyz', // optional, origin only — the SDK appends /v2
142
+ baseUrl: 'https://sdk.api.pollar.xyz', // optional, origin only — the SDK appends /v3
136
143
  stellarNetwork: 'testnet', // optional, default: 'testnet'
137
144
  storage, // optional, RN apps inject this
138
145
  keyManager, // optional, autodetects on web
package/dist/index.css CHANGED
@@ -47,6 +47,8 @@ html.dark .pollar-modal-card {
47
47
  --pollar-error-border: #7f1d1d !important;
48
48
  --pollar-error-text: #f87171 !important;
49
49
  --pollar-success-text: #4ade80 !important;
50
+ --pollar-logo-on-light-display: none !important;
51
+ --pollar-logo-on-dark-display: block !important;
50
52
  }
51
53
  .pollar-input {
52
54
  width: 100%;
@@ -262,32 +264,23 @@ html.dark .pollar-modal-card {
262
264
  align-items: center;
263
265
  justify-content: center;
264
266
  gap: 0.5rem;
267
+ margin-top: 1.25rem;
265
268
  border-top: 1px solid var(--pollar-border);
266
- padding-top: 1.5rem;
269
+ padding-top: 1rem;
267
270
  }
268
271
  .pollar-footer-protected {
269
272
  font-size: 0.875rem;
270
273
  color: var(--pollar-muted);
271
274
  }
272
- .pollar-footer-brand {
273
- display: flex;
274
- align-items: center;
275
- gap: 0.5rem;
276
- }
277
275
  .pollar-footer-logo {
278
- height: 18px;
279
- width: 18px;
280
- object-fit: contain;
276
+ height: 16px;
277
+ width: auto;
281
278
  }
282
- .pollar-footer-logo-svg {
283
- display: block;
284
- height: 18px;
285
- width: 21px;
279
+ .pollar-logo-on-light {
280
+ display: var(--pollar-logo-on-light-display, block);
286
281
  }
287
- .pollar-footer-name {
288
- font-size: 0.875rem;
289
- font-weight: 700;
290
- color: var(--pollar-text);
282
+ .pollar-logo-on-dark {
283
+ display: var(--pollar-logo-on-dark-display, none);
291
284
  }
292
285
  .pollar-footer-version {
293
286
  font-size: 0.7rem;
@@ -727,6 +720,22 @@ html.dark .pollar-modal-card {
727
720
  line-height: 30px;
728
721
  color: var(--Color-Neutral-400, #94a3b8);
729
722
  }
723
+ .pollar-send-label-optional {
724
+ font-weight: 400;
725
+ }
726
+ .pollar-send-memo-row {
727
+ display: flex;
728
+ gap: 0.5rem;
729
+ }
730
+ .pollar-send-memo-type {
731
+ flex: 0 0 5.5rem;
732
+ padding: 0 0.75rem;
733
+ cursor: pointer;
734
+ }
735
+ .pollar-send-memo-input {
736
+ flex: 1 1 auto;
737
+ min-width: 0;
738
+ }
730
739
  .pollar-send-destination-input {
731
740
  font-family: "Geist Mono", monospace;
732
741
  font-size: 14px;
@@ -792,11 +801,6 @@ html.dark .pollar-send-inline-action {
792
801
  border-radius: 999px;
793
802
  font-size: 0.9375rem;
794
803
  }
795
- .pollar-send-modal .pollar-footer {
796
- justify-content: flex-start;
797
- margin-top: 1.25rem;
798
- padding-top: 1rem;
799
- }
800
804
  @media (max-width: 480px) {
801
805
  .pollar-send-modal {
802
806
  max-width: calc(100vw - 2rem);
@@ -1963,6 +1967,56 @@ html.dark .pollar-send-inline-action {
1963
1967
  flex-direction: column;
1964
1968
  gap: 1rem;
1965
1969
  }
1970
+ .pollar-ramp-saved {
1971
+ gap: 0.625rem;
1972
+ padding-bottom: 1rem;
1973
+ margin-bottom: 1rem;
1974
+ border-bottom: 1px solid var(--pollar-border);
1975
+ }
1976
+ .pollar-ramp-saved-row {
1977
+ display: flex;
1978
+ gap: 0.625rem;
1979
+ align-items: center;
1980
+ }
1981
+ .pollar-ramp-saved-row > button:first-child {
1982
+ flex: 1;
1983
+ min-width: 0;
1984
+ }
1985
+ .pollar-ramp-saved-row > button:last-child:not(:first-child) {
1986
+ width: auto;
1987
+ }
1988
+ .pollar-ramp-explore {
1989
+ display: flex;
1990
+ flex-direction: column;
1991
+ gap: 0.625rem;
1992
+ border-top: 1px solid var(--pollar-border);
1993
+ margin-top: 1.25rem;
1994
+ padding-top: 1.25rem;
1995
+ }
1996
+ .pollar-ramp-workflow p {
1997
+ margin: 0;
1998
+ }
1999
+ .pollar-ramp-terms {
2000
+ padding: 0.875rem 1rem;
2001
+ border: 1px solid var(--pollar-border);
2002
+ border-radius: var(--pollar-card-border-radius, 10px);
2003
+ background: var(--pollar-input-bg);
2004
+ color: var(--pollar-text);
2005
+ line-height: 1.6;
2006
+ font-size: 0.875rem;
2007
+ }
2008
+ .pollar-ramp-workflow-detail,
2009
+ .pollar-ramp-reference {
2010
+ overflow-wrap: anywhere;
2011
+ font-size: 0.8125rem;
2012
+ line-height: 1.5;
2013
+ color: var(--pollar-muted);
2014
+ }
2015
+ .pollar-ramp-hosted-link {
2016
+ display: flex;
2017
+ justify-content: center;
2018
+ text-decoration: none;
2019
+ }
1966
2020
  .pollar-ramp-payment-title {
1967
2021
  font-size: 0.8125rem;
1968
2022
  font-weight: 600;
@@ -2190,10 +2244,6 @@ html.dark .pollar-send-inline-action {
2190
2244
  .pollar-receive-warning svg {
2191
2245
  flex: 0 0 auto;
2192
2246
  }
2193
- .pollar-receive-modal .pollar-footer {
2194
- margin-top: 0;
2195
- padding-top: 1rem;
2196
- }
2197
2247
  @media (max-width: 480px) {
2198
2248
  .pollar-receive-modal {
2199
2249
  max-width: calc(100vw - 2rem);
@@ -2209,6 +2259,23 @@ html.dark .pollar-send-inline-action {
2209
2259
  padding-inline: 0.625rem;
2210
2260
  }
2211
2261
  }
2262
+ .pollar-receive-locked {
2263
+ display: flex;
2264
+ flex-direction: column;
2265
+ align-items: center;
2266
+ gap: 0.75rem;
2267
+ padding: 1rem;
2268
+ border: 1px solid var(--pollar-error-border, #fecaca);
2269
+ border-radius: var(--pollar-card-border-radius, 10px);
2270
+ background: var(--pollar-error-bg, #fef2f2);
2271
+ color: var(--pollar-error-text, #b91c1c);
2272
+ font-size: 0.85rem;
2273
+ line-height: 1.4;
2274
+ text-align: center;
2275
+ }
2276
+ .pollar-receive-locked p {
2277
+ margin: 0;
2278
+ }
2212
2279
 
2213
2280
  /* src/components/transaction-modal/TransactionModal.css */
2214
2281
  .pollar-tx-modal {
@@ -2779,11 +2846,6 @@ html.dark .pollar-send-inline-action {
2779
2846
  border-radius: 999px;
2780
2847
  font-size: 0.9375rem;
2781
2848
  }
2782
- .pollar-swap-modal .pollar-footer {
2783
- justify-content: center;
2784
- margin-top: 1rem;
2785
- padding-top: 0.875rem;
2786
- }
2787
2849
  @media (max-width: 480px) {
2788
2850
  .pollar-swap-modal {
2789
2851
  max-width: calc(100vw - 2rem);
@@ -3217,7 +3279,6 @@ html.dark .pollar-sessions-modal {
3217
3279
  }
3218
3280
  .pollar-sessions-modal .pollar-footer {
3219
3281
  flex: 0 0 auto;
3220
- padding-top: 0.75rem;
3221
3282
  }
3222
3283
  .pollar-sessions-logout-all {
3223
3284
  display: flex;
@@ -3265,6 +3326,303 @@ html.dark .pollar-sessions-modal {
3265
3326
  }
3266
3327
  }
3267
3328
 
3329
+ /* src/components/cosign-modal/CosignModal.css */
3330
+ .pollar-cosign-modal {
3331
+ display: flex;
3332
+ flex-direction: column;
3333
+ width: 420px;
3334
+ max-width: calc(100vw - 2rem);
3335
+ max-height: calc(100dvh - 2rem);
3336
+ overflow: auto;
3337
+ padding-bottom: 0.75rem;
3338
+ }
3339
+ html.dark .pollar-cosign-modal {
3340
+ --pollar-bg: #1a1a1a !important;
3341
+ --pollar-border: #374151 !important;
3342
+ --pollar-text: #ffffff !important;
3343
+ --pollar-muted: #9ca3af !important;
3344
+ --pollar-input-bg: #374151 !important;
3345
+ --pollar-error-bg: #2a1515 !important;
3346
+ --pollar-error-border: #7f1d1d !important;
3347
+ --pollar-error-text: #f87171 !important;
3348
+ --pollar-success-text: #4ade80 !important;
3349
+ }
3350
+ .pollar-cosign-muted {
3351
+ color: var(--pollar-muted);
3352
+ font-size: 0.85rem;
3353
+ margin: 0;
3354
+ }
3355
+ .pollar-cosign-empty {
3356
+ padding: 1.5rem 0.25rem;
3357
+ text-align: center;
3358
+ }
3359
+ .pollar-cosign-approved-icon {
3360
+ display: block;
3361
+ margin: 0 auto 0.75rem;
3362
+ color: var(--pollar-success-text);
3363
+ }
3364
+ .pollar-cosign-tx-link {
3365
+ color: var(--pollar-accent);
3366
+ font-family: "Geist Mono", monospace;
3367
+ text-decoration: none;
3368
+ }
3369
+ .pollar-cosign-tx-link:hover {
3370
+ text-decoration: underline;
3371
+ }
3372
+ .pollar-cosign-empty-title {
3373
+ margin: 0 0 0.35rem;
3374
+ font-weight: 600;
3375
+ color: var(--pollar-text);
3376
+ }
3377
+ .pollar-cosign-list {
3378
+ list-style: none;
3379
+ margin: 0 0 0.75rem;
3380
+ padding: 0;
3381
+ display: flex;
3382
+ flex-direction: column;
3383
+ gap: 0.4rem;
3384
+ }
3385
+ .pollar-cosign-item {
3386
+ display: flex;
3387
+ justify-content: space-between;
3388
+ width: 100%;
3389
+ padding: 0.6rem 0.75rem;
3390
+ border: 1px solid var(--pollar-border);
3391
+ border-radius: var(--pollar-card-border-radius, 10px);
3392
+ background: transparent;
3393
+ color: var(--pollar-text);
3394
+ cursor: pointer;
3395
+ font: inherit;
3396
+ }
3397
+ .pollar-cosign-item-active {
3398
+ border-color: var(--pollar-accent);
3399
+ background: color-mix(in srgb, var(--pollar-accent) 7%, var(--pollar-bg));
3400
+ }
3401
+ .pollar-cosign-detail {
3402
+ display: flex;
3403
+ flex-direction: column;
3404
+ gap: 0.75rem;
3405
+ padding: 1rem;
3406
+ border: 1px solid var(--pollar-border);
3407
+ border-radius: calc(var(--pollar-card-border-radius, 10px) + 2px);
3408
+ }
3409
+ .pollar-cosign-detail-title {
3410
+ margin: 0;
3411
+ font-size: 1.05rem;
3412
+ font-weight: 600;
3413
+ color: var(--pollar-text);
3414
+ }
3415
+ .pollar-cosign-rows {
3416
+ margin: 0;
3417
+ display: flex;
3418
+ flex-direction: column;
3419
+ gap: 0.35rem;
3420
+ }
3421
+ .pollar-cosign-row {
3422
+ display: flex;
3423
+ justify-content: space-between;
3424
+ gap: 1rem;
3425
+ font-size: 0.9rem;
3426
+ }
3427
+ .pollar-cosign-row dt {
3428
+ color: var(--pollar-muted);
3429
+ }
3430
+ .pollar-cosign-row dd {
3431
+ margin: 0;
3432
+ color: var(--pollar-text);
3433
+ font-variant-numeric: tabular-nums;
3434
+ text-align: right;
3435
+ word-break: break-all;
3436
+ }
3437
+ .pollar-cosign-verify {
3438
+ padding: 0.55rem 0.7rem;
3439
+ border-radius: var(--pollar-card-border-radius, 10px);
3440
+ font-size: 0.82rem;
3441
+ border: 1px solid var(--pollar-border);
3442
+ color: var(--pollar-muted);
3443
+ }
3444
+ .pollar-cosign-verify-ok {
3445
+ color: var(--pollar-success-text, #15803d);
3446
+ border-color: color-mix(in srgb, var(--pollar-success-text, #15803d) 40%, var(--pollar-border));
3447
+ }
3448
+ .pollar-cosign-verify-bad,
3449
+ .pollar-cosign-error {
3450
+ color: var(--pollar-error-text);
3451
+ background: var(--pollar-error-bg);
3452
+ border: 1px solid var(--pollar-error-border);
3453
+ border-radius: var(--pollar-card-border-radius, 10px);
3454
+ padding: 0.55rem 0.7rem;
3455
+ font-size: 0.82rem;
3456
+ }
3457
+ .pollar-cosign-actions {
3458
+ display: flex;
3459
+ gap: 0.5rem;
3460
+ }
3461
+ .pollar-cosign-btn {
3462
+ flex: 1;
3463
+ padding: 0.65rem 0.75rem;
3464
+ border-radius: var(--pollar-button-border-radius, 10px);
3465
+ font: inherit;
3466
+ font-weight: 600;
3467
+ cursor: pointer;
3468
+ border: 1px solid var(--pollar-border);
3469
+ }
3470
+ .pollar-cosign-btn:disabled {
3471
+ opacity: 0.55;
3472
+ cursor: not-allowed;
3473
+ }
3474
+ .pollar-cosign-btn-secondary {
3475
+ background: transparent;
3476
+ color: var(--pollar-text);
3477
+ }
3478
+ .pollar-cosign-btn-primary {
3479
+ background: var(--pollar-accent);
3480
+ border-color: var(--pollar-accent);
3481
+ color: var(--pollar-accent-text, #fff);
3482
+ }
3483
+
3484
+ /* src/components/recovery-modal/RecoveryModal.css */
3485
+ .pollar-recovery-modal {
3486
+ display: flex;
3487
+ flex-direction: column;
3488
+ width: 440px;
3489
+ max-width: calc(100vw - 2rem);
3490
+ max-height: calc(100dvh - 2rem);
3491
+ overflow: hidden;
3492
+ padding-bottom: 0.75rem;
3493
+ }
3494
+ .pollar-recovery-body {
3495
+ display: flex;
3496
+ flex-direction: column;
3497
+ gap: 0.75rem;
3498
+ overflow-y: auto;
3499
+ padding: 0 0.25rem 0.5rem;
3500
+ }
3501
+ .pollar-recovery-banner {
3502
+ padding: 0.75rem 0.9rem;
3503
+ border-radius: var(--pollar-card-border-radius, 10px);
3504
+ font-size: 0.85rem;
3505
+ line-height: 1.4;
3506
+ }
3507
+ .pollar-recovery-banner-warn {
3508
+ border: 1px solid var(--pollar-error-border, #fecaca);
3509
+ background: var(--pollar-error-bg, #fef2f2);
3510
+ color: var(--pollar-error-text, #b91c1c);
3511
+ }
3512
+ .pollar-recovery-banner-ok {
3513
+ border: 1px solid color-mix(in srgb, var(--pollar-success-text, #16a34a) 35%, transparent);
3514
+ background: color-mix(in srgb, var(--pollar-success-text, #16a34a) 8%, var(--pollar-bg));
3515
+ color: var(--pollar-text);
3516
+ }
3517
+ .pollar-recovery-section {
3518
+ display: flex;
3519
+ flex-direction: column;
3520
+ gap: 0.45rem;
3521
+ padding-top: 0.6rem;
3522
+ border-top: 1px solid var(--pollar-border);
3523
+ }
3524
+ .pollar-recovery-section h3 {
3525
+ margin: 0;
3526
+ font-size: 0.9rem;
3527
+ font-weight: 600;
3528
+ color: var(--pollar-text);
3529
+ }
3530
+ .pollar-recovery-item {
3531
+ display: flex;
3532
+ align-items: center;
3533
+ justify-content: space-between;
3534
+ gap: 0.5rem;
3535
+ font-size: 0.85rem;
3536
+ color: var(--pollar-text);
3537
+ }
3538
+ .pollar-recovery-item-pending {
3539
+ flex-wrap: wrap;
3540
+ }
3541
+ .pollar-recovery-actions {
3542
+ display: flex;
3543
+ gap: 0.4rem;
3544
+ }
3545
+ .pollar-recovery-tag {
3546
+ padding: 0.1rem 0.45rem;
3547
+ border-radius: 999px;
3548
+ background: color-mix(in srgb, var(--pollar-accent) 12%, var(--pollar-bg));
3549
+ color: var(--pollar-accent);
3550
+ font-size: 0.72rem;
3551
+ font-weight: 600;
3552
+ }
3553
+ .pollar-recovery-muted {
3554
+ margin: 0;
3555
+ color: var(--pollar-muted);
3556
+ font-size: 0.8rem;
3557
+ line-height: 1.4;
3558
+ }
3559
+ .pollar-recovery-row {
3560
+ display: flex;
3561
+ gap: 0.5rem;
3562
+ }
3563
+ .pollar-recovery-input {
3564
+ flex: 1;
3565
+ min-width: 0;
3566
+ padding: 0.55rem 0.7rem;
3567
+ border: 1px solid var(--pollar-border);
3568
+ border-radius: var(--pollar-button-border-radius, 8px);
3569
+ background: var(--pollar-input-bg, transparent);
3570
+ color: var(--pollar-text);
3571
+ font-size: 0.85rem;
3572
+ }
3573
+ .pollar-recovery-btn {
3574
+ padding: 0.5rem 0.8rem;
3575
+ border: 1px solid var(--pollar-border);
3576
+ border-radius: var(--pollar-button-border-radius, 8px);
3577
+ background: transparent;
3578
+ color: var(--pollar-text);
3579
+ font-size: 0.82rem;
3580
+ font-weight: 500;
3581
+ cursor: pointer;
3582
+ }
3583
+ .pollar-recovery-btn:disabled {
3584
+ opacity: 0.55;
3585
+ cursor: not-allowed;
3586
+ }
3587
+ .pollar-recovery-btn-primary {
3588
+ border-color: var(--pollar-accent);
3589
+ background: var(--pollar-accent);
3590
+ color: #fff;
3591
+ }
3592
+ .pollar-recovery-btn-danger {
3593
+ border-color: var(--pollar-error-border, #fecaca);
3594
+ color: var(--pollar-error-text, #b91c1c);
3595
+ }
3596
+ .pollar-recovery-check {
3597
+ display: flex;
3598
+ gap: 0.45rem;
3599
+ align-items: flex-start;
3600
+ color: var(--pollar-text);
3601
+ font-size: 0.8rem;
3602
+ }
3603
+ .pollar-recovery-phrase {
3604
+ margin: 0;
3605
+ padding: 0.8rem;
3606
+ border: 1px dashed var(--pollar-border);
3607
+ border-radius: var(--pollar-card-border-radius, 10px);
3608
+ background: var(--pollar-input-bg, transparent);
3609
+ color: var(--pollar-text);
3610
+ font-size: 0.9rem;
3611
+ white-space: pre-wrap;
3612
+ word-break: break-word;
3613
+ user-select: all;
3614
+ }
3615
+ .pollar-recovery-notice {
3616
+ margin: 0;
3617
+ color: var(--pollar-success-text, #16a34a);
3618
+ font-size: 0.8rem;
3619
+ }
3620
+ .pollar-recovery-error {
3621
+ margin: 0;
3622
+ color: var(--pollar-error-text, #b91c1c);
3623
+ font-size: 0.8rem;
3624
+ }
3625
+
3268
3626
  /* src/components/tx-history-modal/TxHistoryModal.css */
3269
3627
  .pollar-hist-modal {
3270
3628
  max-width: 480px;