@pollar/react 0.9.0 → 0.10.0-rc.10

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
@@ -12,8 +12,7 @@ Stellar-based applications.
12
12
  > (now accepts a `PollarClient` instance or a `PollarClientConfig`); `styles`
13
13
  > moves under `appConfig.styles`; new `appConfig` prop is the opt-out switch
14
14
  > for the remote `/applications/config` fetch (pass it — even `{}` — to skip
15
- > the fetch); new `ui.renderWallets` slot replaces the default Freighter/Albedo
16
- > picker. Read the [CHANGELOG](../../CHANGELOG.md) and
15
+ > the fetch). Read the [CHANGELOG](../../CHANGELOG.md) and
17
16
  > [UPGRADE.md](../../UPGRADE.md) before upgrading.
18
17
 
19
18
  ## Installation
@@ -89,11 +88,6 @@ Context provider that initialises the Pollar client and makes it available to ch
89
88
  /* optional style overrides */
90
89
  },
91
90
  }}
92
- ui={{
93
- // Optional: replace the default Freighter/Albedo wallet picker.
94
- // See "External wallet stacks" below for a kit-powered example.
95
- renderWallets: undefined,
96
- }}
97
91
  adapters={
98
92
  {
99
93
  /* optional named adapter set */
@@ -104,12 +98,11 @@ Context provider that initialises the Pollar client and makes it available to ch
104
98
  </PollarProvider>
105
99
  ```
106
100
 
107
- | Prop | Type | Required | Description |
108
- | ----------- | --------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
109
- | `client` | `PollarClient \| PollarClientConfig` | Yes | Either a pre-built `PollarClient` (testing, reuse outside React) or a `PollarClientConfig` the provider will construct one from. **Locked at first render** — swapping after mount is ignored |
110
- | `appConfig` | `PollarConfig` | No | Local override of `/applications/config`. **Presence is the opt-out switch**: pass it (even `{}`) and the remote fetch is skipped. Omit it to keep the existing remote-fetch-on-mount behaviour |
111
- | `ui` | `{ renderWallets?: RenderWalletsSlot }` | No | UI customisation slots. `renderWallets` replaces the default Freighter/Albedo buttons in `LoginModal`'s wallet picker. Receives `{ onConnect, authState }` and is expected to call `onConnect(walletId)` |
112
- | `adapters` | `PollarAdapters` | No | Named set of `PollarAdapter` objects (e.g. Trustless Work). See below |
101
+ | Prop | Type | Required | Description |
102
+ | ----------- | ------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
103
+ | `client` | `PollarClient \| PollarClientConfig` | Yes | Either a pre-built `PollarClient` (testing, reuse outside React) or a `PollarClientConfig` the provider will construct one from. **Locked at first render** — swapping after mount is ignored |
104
+ | `appConfig` | `PollarConfig` | No | Local override of `/applications/config`. **Presence is the opt-out switch**: pass it (even `{}`) and the remote fetch is skipped. Omit it to keep the existing remote-fetch-on-mount behaviour |
105
+ | `adapters` | `PollarAdapters` | No | Named set of `PollarAdapter` objects (e.g. Trustless Work). See below |
113
106
 
114
107
  > **Renamed in 0.8.0** — `config` → `client`, `styles` → `appConfig.styles`.
115
108
  > If you were passing `styles={{ ... }}` directly, move it to
@@ -252,8 +245,7 @@ want to swap the chrome but keep the data wiring from `usePollar()`.
252
245
  `<TxStatusView>` is the shared status component (build → sign → success/error) reused by `TransactionModal` and
253
246
  `SendModal`; it's exported on its own for consumers that want to embed the lifecycle elsewhere.
254
247
 
255
- > **0.8.1** — `onWalletConnect` is now **optional** on `<LoginModalTemplate>` (defaults to a no-op). If you drive the
256
- > wallet picker entirely through `ui.renderWallets`, you no longer have to pass a handler you don't use.
248
+ > **0.8.1** — `onWalletConnect` is now **optional** on `<LoginModalTemplate>` (defaults to a no-op).
257
249
 
258
250
  ---
259
251
 
@@ -319,48 +311,36 @@ import { Networks } from '@creit.tech/stellar-wallets-kit';
319
311
  ```
320
312
 
321
313
  Then any `login({ provider: 'wallet', type: '<kit wallet id>' })` is routed
322
- through the kit. The built-in `LoginModal` still shows only Freighter / Albedo
323
- unless you also wire `ui.renderWallets` (next section).
314
+ through the kit.
324
315
 
325
316
  #### Showing every kit wallet in `LoginModal`
326
317
 
327
- The `ui.renderWallets` slot replaces the hardcoded Freighter+Albedo buttons.
328
- `@pollar/stellar-wallets-kit-adapter/picker` ships a bundle that builds both
329
- halves (signing + picker UI) from a single options object drop both into
330
- `<PollarProvider>` and the kit's full wallet list (xBull, Lobstr, Rabet, …)
331
- renders in `LoginModal`:
318
+ Register the kit wallets with `walletAdapters` (plural) instead of the
319
+ signing-only resolver, and `LoginModal` auto-renders one button per wallet
320
+ collapsed behind a single "Wallet" gateway button (their shared `meta.group`):
332
321
 
333
322
  ```tsx
334
323
  import { PollarProvider } from '@pollar/react';
335
- import { createStellarWalletsKitBundle } from '@pollar/stellar-wallets-kit-adapter/picker';
324
+ import { stellarWalletsKitAdapters } from '@pollar/stellar-wallets-kit-adapter';
336
325
  import { Networks } from '@creit.tech/stellar-wallets-kit';
337
326
 
338
- const bundle = createStellarWalletsKitBundle({
339
- network: Networks.PUBLIC,
340
- picker: { wallets: ['xbull', 'lobstr', 'freighter'] }, // subset, optional
341
- });
342
-
343
327
  <PollarProvider
344
- client={{ apiKey: 'your-api-key', walletAdapter: bundle.walletAdapter }}
345
- ui={{ renderWallets: bundle.renderWallets }}
328
+ client={{
329
+ apiKey: 'your-api-key',
330
+ walletAdapters: stellarWalletsKitAdapters({
331
+ network: Networks.PUBLIC,
332
+ picker: { wallets: ['xbull', 'lobstr', 'freighter'] }, // subset, optional
333
+ }),
334
+ }}
346
335
  >
347
336
  {children}
348
337
  </PollarProvider>;
349
338
  ```
350
339
 
351
- If you only want a custom picker (no kit), `renderWallets` is just a function
352
- of `{ onConnect, authState }` return whatever JSX you want and call
353
- `onConnect(walletId)` when the user picks a wallet:
354
-
355
- ```tsx
356
- ui={{
357
- renderWallets: ({ onConnect, authState }) => (
358
- <button disabled={authState.step !== 'idle'} onClick={() => onConnect('xbull')}>
359
- xBull
360
- </button>
361
- ),
362
- }}
363
- ```
340
+ Each adapter's `meta.group` controls placement: adapters sharing a group label
341
+ collapse behind one gateway button (the kit wallets default to `'Wallet'`),
342
+ while adapters with no group e.g. Privy — render as their own button in the
343
+ root view. Pass `picker.groupLabel` to give the kit wallets a distinct gateway.
364
344
 
365
345
  ---
366
346
 
@@ -389,10 +369,6 @@ import type {
389
369
  PollarConfig,
390
370
  PollarStyles,
391
371
 
392
- // 0.8.0 — wallet picker slot
393
- RenderWalletsProps,
394
- RenderWalletsSlot,
395
-
396
372
  // Template props
397
373
  SendModalTemplateProps,
398
374
  ReceiveModalTemplateProps,
package/dist/index.css CHANGED
@@ -19,6 +19,9 @@
19
19
  display: flex;
20
20
  align-items: center;
21
21
  justify-content: center;
22
+ overflow-y: auto;
23
+ padding: 1rem;
24
+ box-sizing: border-box;
22
25
  background-color: rgba(0, 0, 0, 0.5);
23
26
  }
24
27
  .pollar-modal-card {
@@ -31,6 +34,8 @@
31
34
  background-color: var(--pollar-bg);
32
35
  box-sizing: border-box;
33
36
  font-family: inherit;
37
+ max-height: calc(100dvh - 2rem);
38
+ overflow-y: auto;
34
39
  }
35
40
  .pollar-input {
36
41
  width: 100%;
@@ -138,8 +143,11 @@
138
143
  gap: 0.625rem;
139
144
  margin-top: 1rem;
140
145
  }
141
- .pollar-btn-primary {
146
+ .pollar-modal-actions .pollar-btn-primary {
142
147
  flex: 1;
148
+ }
149
+ .pollar-btn-primary {
150
+ width: 100%;
143
151
  height: var(--pollar-buttons-height, 44px);
144
152
  border: none;
145
153
  border-radius: var(--pollar-buttons-border-radius, 0.5rem);
@@ -1017,26 +1025,29 @@
1017
1025
  .pollar-wallet-list {
1018
1026
  display: flex;
1019
1027
  flex-direction: column;
1020
- gap: 0.25rem;
1028
+ gap: 0.625rem;
1021
1029
  margin-top: 0.5rem;
1022
1030
  }
1023
1031
  .pollar-wallet-list-btn {
1024
1032
  display: flex;
1025
1033
  width: 100%;
1026
1034
  align-items: center;
1027
- gap: 1rem;
1028
- padding: 0.75rem 0.75rem;
1035
+ justify-content: center;
1036
+ gap: 0.75rem;
1037
+ min-height: var(--pollar-buttons-height, 44px);
1038
+ padding: 0 1rem;
1029
1039
  border-radius: var(--pollar-buttons-border-radius, 0.5rem);
1030
- border: 1px solid transparent;
1031
- background-color: transparent;
1040
+ border: 1px solid var(--pollar-border);
1041
+ background-color: var(--pollar-input-bg);
1032
1042
  color: var(--pollar-text);
1043
+ font-size: 1rem;
1044
+ font-weight: 500;
1033
1045
  cursor: pointer;
1034
1046
  transition: all 0.15s;
1035
1047
  box-sizing: border-box;
1036
- text-align: left;
1048
+ text-align: center;
1037
1049
  }
1038
1050
  .pollar-wallet-list-btn:hover:not(:disabled) {
1039
- background-color: var(--pollar-input-bg);
1040
1051
  border-color: var(--pollar-accent);
1041
1052
  color: var(--pollar-accent);
1042
1053
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
@@ -1049,9 +1060,9 @@
1049
1060
  cursor: not-allowed;
1050
1061
  }
1051
1062
  .pollar-wallet-list-icon {
1052
- width: 2.75rem;
1053
- height: 2.75rem;
1054
- border-radius: 0.625rem;
1063
+ width: 1.5rem;
1064
+ height: 1.5rem;
1065
+ border-radius: 0.375rem;
1055
1066
  flex-shrink: 0;
1056
1067
  object-fit: contain;
1057
1068
  }
@@ -1103,7 +1114,7 @@
1103
1114
  height: var(--pollar-buttons-height, 44px);
1104
1115
  align-items: center;
1105
1116
  justify-content: center;
1106
- gap: 0.625rem;
1117
+ gap: 0.75rem;
1107
1118
  border-radius: var(--pollar-buttons-border-radius, 0.5rem);
1108
1119
  border: 1px solid var(--pollar-border);
1109
1120
  background-color: var(--pollar-input-bg);
@@ -1753,6 +1764,26 @@
1753
1764
  animation: pollar-pulse 1.4s ease-in-out infinite;
1754
1765
  }
1755
1766
 
1767
+ /* src/components/swap-modal/SwapModal.css */
1768
+ .pollar-swap-quote {
1769
+ display: flex;
1770
+ flex-direction: column;
1771
+ gap: 8px;
1772
+ padding: 12px;
1773
+ margin-bottom: 12px;
1774
+ border: 1px solid var(--pollar-border);
1775
+ border-radius: var(--pollar-card-border-radius);
1776
+ background: var(--pollar-input-bg);
1777
+ color: var(--pollar-text);
1778
+ font-size: 14px;
1779
+ }
1780
+ .pollar-swap-quote-row {
1781
+ display: flex;
1782
+ align-items: center;
1783
+ justify-content: space-between;
1784
+ gap: 12px;
1785
+ }
1786
+
1756
1787
  /* src/components/sessions-modal/SessionsModal.css */
1757
1788
  .pollar-sessions-modal {
1758
1789
  max-width: 480px;