@pollar/react 0.7.0 → 0.8.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.
- package/README.md +151 -83
- package/dist/index.css +155 -64
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +86 -11
- package/dist/index.d.ts +86 -11
- package/dist/index.js +1016 -472
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1016 -474
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,8 +3,13 @@
|
|
|
3
3
|
React bindings for [Pollar](https://pollar.xyz) — drop-in authentication UI, transaction modals, and hooks for
|
|
4
4
|
Stellar-based applications.
|
|
5
5
|
|
|
6
|
-
> **0.
|
|
7
|
-
>
|
|
6
|
+
> **0.8.0 reshapes `<PollarProvider>` props (breaking).** `config` → `client`
|
|
7
|
+
> (now accepts a `PollarClient` instance or a `PollarClientConfig`); `styles`
|
|
8
|
+
> moves under `appConfig.styles`; new `appConfig` prop is the opt-out switch
|
|
9
|
+
> for the remote `/applications/config` fetch (pass it — even `{}` — to skip
|
|
10
|
+
> the fetch); new `ui.renderWallets` slot replaces the default Freighter/Albedo
|
|
11
|
+
> picker. Read the [CHANGELOG](../../CHANGELOG.md) and
|
|
12
|
+
> [UPGRADE.md](../../UPGRADE.md) before upgrading.
|
|
8
13
|
|
|
9
14
|
## Installation
|
|
10
15
|
|
|
@@ -27,11 +32,7 @@ import { PollarProvider } from '@pollar/react';
|
|
|
27
32
|
import '@pollar/react/styles.css';
|
|
28
33
|
|
|
29
34
|
export default function App({ children }: { children: React.ReactNode }) {
|
|
30
|
-
return
|
|
31
|
-
<PollarProvider config={{ apiKey: 'your-api-key' }}>
|
|
32
|
-
{children}
|
|
33
|
-
</PollarProvider>
|
|
34
|
-
);
|
|
35
|
+
return <PollarProvider client={{ apiKey: 'your-api-key' }}>{children}</PollarProvider>;
|
|
35
36
|
}
|
|
36
37
|
```
|
|
37
38
|
|
|
@@ -42,11 +43,7 @@ export function Profile() {
|
|
|
42
43
|
const { isAuthenticated, walletAddress, login, logout, getClient } = usePollar();
|
|
43
44
|
|
|
44
45
|
if (!isAuthenticated) {
|
|
45
|
-
return (
|
|
46
|
-
<button onClick={() => login({ provider: 'google' })}>
|
|
47
|
-
Sign in with Google
|
|
48
|
-
</button>
|
|
49
|
-
);
|
|
46
|
+
return <button onClick={() => login({ provider: 'google' })}>Sign in with Google</button>;
|
|
50
47
|
}
|
|
51
48
|
|
|
52
49
|
// PII (email, name, avatar, providers) lives in memory only — fetch it from the client.
|
|
@@ -70,29 +67,50 @@ Context provider that initialises the Pollar client and makes it available to ch
|
|
|
70
67
|
|
|
71
68
|
```tsx
|
|
72
69
|
<PollarProvider
|
|
73
|
-
|
|
70
|
+
client={{
|
|
74
71
|
apiKey: 'your-api-key',
|
|
75
|
-
baseUrl: 'https://sdk.api.pollar.xyz',
|
|
76
|
-
stellarNetwork: 'testnet',
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
72
|
+
baseUrl: 'https://sdk.api.pollar.xyz', // optional
|
|
73
|
+
stellarNetwork: 'testnet', // optional, default: 'testnet'
|
|
74
|
+
storage, // optional, RN apps inject this
|
|
75
|
+
keyManager, // optional, autodetects on web
|
|
76
|
+
walletAdapter, // optional, external wallet stack
|
|
77
|
+
deviceLabel: 'iPhone — Safari', // optional, shown in SessionsModal
|
|
78
|
+
onStorageDegrade, // optional, telemetry hook
|
|
79
|
+
}}
|
|
80
|
+
// Optional: pass `appConfig` (even `{}`) to skip the remote
|
|
81
|
+
// `/applications/config` fetch and use local-only styles/branding.
|
|
82
|
+
appConfig={{
|
|
83
|
+
styles: {
|
|
84
|
+
/* optional style overrides */
|
|
85
|
+
},
|
|
86
|
+
}}
|
|
87
|
+
ui={{
|
|
88
|
+
// Optional: replace the default Freighter/Albedo wallet picker.
|
|
89
|
+
// See "External wallet stacks" below for a kit-powered example.
|
|
90
|
+
renderWallets: undefined,
|
|
83
91
|
}}
|
|
84
|
-
|
|
85
|
-
|
|
92
|
+
adapters={
|
|
93
|
+
{
|
|
94
|
+
/* optional named adapter set */
|
|
95
|
+
}
|
|
96
|
+
}
|
|
86
97
|
>
|
|
87
98
|
{children}
|
|
88
99
|
</PollarProvider>
|
|
89
100
|
```
|
|
90
101
|
|
|
91
|
-
| Prop
|
|
92
|
-
|
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
102
|
+
| Prop | Type | Required | Description |
|
|
103
|
+
| ----------- | --------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
104
|
+
| `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 |
|
|
105
|
+
| `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 |
|
|
106
|
+
| `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)` |
|
|
107
|
+
| `adapters` | `PollarAdapters` | No | Named set of `PollarAdapter` objects (e.g. Trustless Work). See below |
|
|
108
|
+
|
|
109
|
+
> **Renamed in 0.8.0** — `config` → `client`, `styles` → `appConfig.styles`.
|
|
110
|
+
> If you were passing `styles={{ ... }}` directly, move it to
|
|
111
|
+
> `appConfig={{ styles: { ... } }}` (which also opts you out of the remote
|
|
112
|
+
> `/applications/config` fetch). See [UPGRADE.md](../../UPGRADE.md) for the
|
|
113
|
+
> full migration matrix.
|
|
96
114
|
|
|
97
115
|
---
|
|
98
116
|
|
|
@@ -104,56 +122,56 @@ needed.
|
|
|
104
122
|
```ts
|
|
105
123
|
const {
|
|
106
124
|
// Session
|
|
107
|
-
isAuthenticated,
|
|
108
|
-
walletAddress,
|
|
109
|
-
walletType,
|
|
125
|
+
isAuthenticated, // boolean — true when a wallet public key is present
|
|
126
|
+
walletAddress, // string — '' until authenticated
|
|
127
|
+
walletType, // WalletId | null
|
|
110
128
|
|
|
111
129
|
// Client escape hatch
|
|
112
|
-
getClient,
|
|
130
|
+
getClient, // () => PollarClient — for getUserProfile(), listSessions(), …
|
|
113
131
|
|
|
114
132
|
// Auth
|
|
115
|
-
login,
|
|
116
|
-
logout,
|
|
117
|
-
openLoginModal,
|
|
133
|
+
login, // (options: PollarLoginOptions) => void
|
|
134
|
+
logout, // () => void (fire-and-forget; await getClient().logout() if you need the promise)
|
|
135
|
+
openLoginModal, // () => void
|
|
118
136
|
|
|
119
137
|
// Sessions (new in 0.7.0)
|
|
120
|
-
openSessionsModal,
|
|
138
|
+
openSessionsModal, // () => void
|
|
121
139
|
|
|
122
140
|
// Transactions
|
|
123
|
-
tx,
|
|
124
|
-
buildTx,
|
|
125
|
-
signAndSubmitTx,
|
|
126
|
-
openTxModal,
|
|
141
|
+
tx, // TransactionState
|
|
142
|
+
buildTx, // (operation, params, options?) => Promise<void>
|
|
143
|
+
signAndSubmitTx, // (unsignedXdr: string) => Promise<void>
|
|
144
|
+
openTxModal, // () => void
|
|
127
145
|
|
|
128
146
|
// Transaction history
|
|
129
|
-
txHistory,
|
|
130
|
-
openTxHistoryModal,
|
|
147
|
+
txHistory, // TxHistoryState
|
|
148
|
+
openTxHistoryModal, // () => void
|
|
131
149
|
|
|
132
150
|
// Wallet balance
|
|
133
|
-
walletBalance,
|
|
134
|
-
refreshWalletBalance,
|
|
151
|
+
walletBalance, // WalletBalanceState
|
|
152
|
+
refreshWalletBalance, // () => Promise<void>
|
|
135
153
|
openWalletBalanceModal, // () => void
|
|
136
154
|
|
|
137
155
|
// Send / Receive
|
|
138
|
-
openSendModal,
|
|
139
|
-
openReceiveModal,
|
|
156
|
+
openSendModal, // () => void
|
|
157
|
+
openReceiveModal, // () => void
|
|
140
158
|
|
|
141
159
|
// Network
|
|
142
|
-
network,
|
|
143
|
-
setNetwork,
|
|
160
|
+
network, // StellarNetwork — 'mainnet' | 'testnet'
|
|
161
|
+
setNetwork, // (network: StellarNetwork) => void
|
|
144
162
|
|
|
145
163
|
// KYC (UI ready — backend coming soon)
|
|
146
|
-
openKycModal,
|
|
164
|
+
openKycModal, // (options?: { country?, level?, onApproved? }) => void
|
|
147
165
|
|
|
148
166
|
// Ramp (UI ready — backend coming soon)
|
|
149
|
-
openRampModal,
|
|
167
|
+
openRampModal, // () => void
|
|
150
168
|
|
|
151
169
|
// App config / styles served by the Pollar API
|
|
152
|
-
appConfig,
|
|
153
|
-
styles,
|
|
170
|
+
appConfig, // PollarConfig
|
|
171
|
+
styles, // PollarStyles
|
|
154
172
|
|
|
155
173
|
// Adapters (from PollarProvider props)
|
|
156
|
-
adapters,
|
|
174
|
+
adapters, // PollarAdapters | undefined
|
|
157
175
|
} = usePollar();
|
|
158
176
|
```
|
|
159
177
|
|
|
@@ -187,16 +205,16 @@ login({ provider: 'wallet', type: 'lobstr' });
|
|
|
187
205
|
Every modal mounts itself when its `openXModal()` action is called. You don't need to render these directly — they're
|
|
188
206
|
already wired inside `<PollarProvider>` — but they're exported in case you want to mount them yourself.
|
|
189
207
|
|
|
190
|
-
| Component
|
|
191
|
-
|
|
|
192
|
-
| `<WalletButton>`
|
|
193
|
-
| `<SendModal>`
|
|
194
|
-
| `<ReceiveModal>`
|
|
195
|
-
| `<TxHistoryModal>`
|
|
196
|
-
| `<WalletBalanceModal>`
|
|
197
|
-
| `<SessionsModal>`
|
|
198
|
-
| `<KycModal>`
|
|
199
|
-
| `<RampWidget>`
|
|
208
|
+
| Component | Purpose |
|
|
209
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
210
|
+
| `<WalletButton>` | Drop-in button. Opens login when signed out; signed in, shows the wallet address with a dropdown (Send, Receive, balance, history, sign out). Inline arc spinner during in-progress transactions |
|
|
211
|
+
| `<SendModal>` | Full send flow: asset picker, amount, destination, inline build → sign → success/error |
|
|
212
|
+
| `<ReceiveModal>` | Wallet address as QR code with copy-to-clipboard (no external QR dependency required) |
|
|
213
|
+
| `<TxHistoryModal>` | Paginated transaction history with auto-fetch on open and stellar.expert explorer links |
|
|
214
|
+
| `<WalletBalanceModal>` | Stellar account balances with refresh button |
|
|
215
|
+
| `<SessionsModal>` | **New in 0.7.0.** Lists every active refresh-token family for the current user with device metadata, marks the local session, per-row revoke, and a "Sign out everywhere" button |
|
|
216
|
+
| `<KycModal>` | Identity verification flow — provider selection + status polling _(UI preview — backend coming soon)_ |
|
|
217
|
+
| `<RampWidget>` | Buy/sell crypto — direction tabs, route comparison, payment instructions _(UI preview — backend coming soon)_ |
|
|
200
218
|
|
|
201
219
|
```tsx
|
|
202
220
|
import { WalletButton } from '@pollar/react';
|
|
@@ -213,18 +231,18 @@ export function Header() {
|
|
|
213
231
|
Every modal ships a pure presentational "template" companion — same name with a `Template` suffix. Use these when you
|
|
214
232
|
want to swap the chrome but keep the data wiring from `usePollar()`.
|
|
215
233
|
|
|
216
|
-
| Wrapper
|
|
217
|
-
|
|
|
218
|
-
| `<WalletButton>`
|
|
219
|
-
|
|
|
220
|
-
| `<SendModal>`
|
|
221
|
-
| `<ReceiveModal>`
|
|
222
|
-
| `<TransactionModal>`
|
|
223
|
-
| `<TxHistoryModal>`
|
|
224
|
-
| `<WalletBalanceModal>`
|
|
225
|
-
| `<KycModal>`
|
|
226
|
-
| `<RampWidget>`
|
|
227
|
-
| `<SessionsModal>`
|
|
234
|
+
| Wrapper | Template |
|
|
235
|
+
| ----------------------- | ------------------------------ |
|
|
236
|
+
| `<WalletButton>` | `<WalletButtonTemplate>` |
|
|
237
|
+
| _(internal LoginModal)_ | `<LoginModalTemplate>` |
|
|
238
|
+
| `<SendModal>` | `<SendModalTemplate>` |
|
|
239
|
+
| `<ReceiveModal>` | `<ReceiveModalTemplate>` |
|
|
240
|
+
| `<TransactionModal>` | `<TransactionModalTemplate>` |
|
|
241
|
+
| `<TxHistoryModal>` | `<TxHistoryModalTemplate>` |
|
|
242
|
+
| `<WalletBalanceModal>` | `<WalletBalanceModalTemplate>` |
|
|
243
|
+
| `<KycModal>` | `<KycModalTemplate>` |
|
|
244
|
+
| `<RampWidget>` | `<RampWidgetTemplate>` |
|
|
245
|
+
| `<SessionsModal>` | `<SessionsModalTemplate>` |
|
|
228
246
|
|
|
229
247
|
`<TxStatusView>` is the shared status component (build → sign → success/error) reused by `TransactionModal` and
|
|
230
248
|
`SendModal`; it's exported on its own for consumers that want to embed the lifecycle elsewhere.
|
|
@@ -241,12 +259,12 @@ import type { PollarAdapter } from '@pollar/core';
|
|
|
241
259
|
|
|
242
260
|
const trustlessWork: PollarAdapter = {
|
|
243
261
|
initialize: async (params) => ({ unsignedTransaction: '…' }),
|
|
244
|
-
release:
|
|
262
|
+
release: async (params) => ({ unsignedTransaction: '…' }),
|
|
245
263
|
};
|
|
246
264
|
|
|
247
|
-
<PollarProvider
|
|
265
|
+
<PollarProvider client={{ apiKey }} adapters={{ trustlessWork }}>
|
|
248
266
|
…
|
|
249
|
-
</PollarProvider
|
|
267
|
+
</PollarProvider>;
|
|
250
268
|
```
|
|
251
269
|
|
|
252
270
|
> **Renamed in 0.7.0** — `EscrowFn` → `AdapterFn` and `EscrowAdapter` → `PollarAdapter`. Runtime contract is
|
|
@@ -263,7 +281,9 @@ const useTrustlessWork = createPollarAdapterHook<typeof trustlessWork>('trustles
|
|
|
263
281
|
|
|
264
282
|
function MyComponent() {
|
|
265
283
|
const tw = useTrustlessWork();
|
|
266
|
-
await tw.initialize({
|
|
284
|
+
await tw.initialize({
|
|
285
|
+
/* … */
|
|
286
|
+
}); // unsigned XDR is built, signed, and submitted automatically
|
|
267
287
|
}
|
|
268
288
|
```
|
|
269
289
|
|
|
@@ -271,7 +291,9 @@ function MyComponent() {
|
|
|
271
291
|
|
|
272
292
|
### External wallet stacks (Stellar Wallets Kit, …)
|
|
273
293
|
|
|
274
|
-
Pass a `WalletAdapterResolver` to `
|
|
294
|
+
Pass a `WalletAdapterResolver` to `client.walletAdapter` so Pollar can reach
|
|
295
|
+
wallets that live outside `@pollar/core`. The signing path alone (no UI
|
|
296
|
+
changes):
|
|
275
297
|
|
|
276
298
|
```tsx
|
|
277
299
|
import { PollarProvider } from '@pollar/react';
|
|
@@ -279,16 +301,58 @@ import { stellarWalletsKit } from '@pollar/stellar-wallets-kit-adapter';
|
|
|
279
301
|
import { Networks } from '@creit.tech/stellar-wallets-kit';
|
|
280
302
|
|
|
281
303
|
<PollarProvider
|
|
282
|
-
|
|
304
|
+
client={{
|
|
283
305
|
apiKey: 'your-api-key',
|
|
284
306
|
walletAdapter: stellarWalletsKit({ network: Networks.PUBLIC }),
|
|
285
307
|
}}
|
|
286
308
|
>
|
|
287
309
|
{children}
|
|
288
|
-
</PollarProvider
|
|
310
|
+
</PollarProvider>;
|
|
289
311
|
```
|
|
290
312
|
|
|
291
|
-
Then any `login({ provider: 'wallet', type: '<kit wallet id>' })` is routed
|
|
313
|
+
Then any `login({ provider: 'wallet', type: '<kit wallet id>' })` is routed
|
|
314
|
+
through the kit. The built-in `LoginModal` still shows only Freighter / Albedo
|
|
315
|
+
unless you also wire `ui.renderWallets` (next section).
|
|
316
|
+
|
|
317
|
+
#### Showing every kit wallet in `LoginModal`
|
|
318
|
+
|
|
319
|
+
The `ui.renderWallets` slot replaces the hardcoded Freighter+Albedo buttons.
|
|
320
|
+
`@pollar/stellar-wallets-kit-adapter/picker` ships a bundle that builds both
|
|
321
|
+
halves (signing + picker UI) from a single options object — drop both into
|
|
322
|
+
`<PollarProvider>` and the kit's full wallet list (xBull, Lobstr, Rabet, …)
|
|
323
|
+
renders in `LoginModal`:
|
|
324
|
+
|
|
325
|
+
```tsx
|
|
326
|
+
import { PollarProvider } from '@pollar/react';
|
|
327
|
+
import { createStellarWalletsKitBundle } from '@pollar/stellar-wallets-kit-adapter/picker';
|
|
328
|
+
import { Networks } from '@creit.tech/stellar-wallets-kit';
|
|
329
|
+
|
|
330
|
+
const bundle = createStellarWalletsKitBundle({
|
|
331
|
+
network: Networks.PUBLIC,
|
|
332
|
+
picker: { wallets: ['xbull', 'lobstr', 'freighter'] }, // subset, optional
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
<PollarProvider
|
|
336
|
+
client={{ apiKey: 'your-api-key', walletAdapter: bundle.walletAdapter }}
|
|
337
|
+
ui={{ renderWallets: bundle.renderWallets }}
|
|
338
|
+
>
|
|
339
|
+
{children}
|
|
340
|
+
</PollarProvider>;
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
If you only want a custom picker (no kit), `renderWallets` is just a function
|
|
344
|
+
of `{ onConnect, authState }` — return whatever JSX you want and call
|
|
345
|
+
`onConnect(walletId)` when the user picks a wallet:
|
|
346
|
+
|
|
347
|
+
```tsx
|
|
348
|
+
ui={{
|
|
349
|
+
renderWallets: ({ onConnect, authState }) => (
|
|
350
|
+
<button disabled={authState.step !== 'idle'} onClick={() => onConnect('xbull')}>
|
|
351
|
+
xBull
|
|
352
|
+
</button>
|
|
353
|
+
),
|
|
354
|
+
}}
|
|
355
|
+
```
|
|
292
356
|
|
|
293
357
|
---
|
|
294
358
|
|
|
@@ -317,6 +381,10 @@ import type {
|
|
|
317
381
|
PollarConfig,
|
|
318
382
|
PollarStyles,
|
|
319
383
|
|
|
384
|
+
// 0.8.0 — wallet picker slot
|
|
385
|
+
RenderWalletsProps,
|
|
386
|
+
RenderWalletsSlot,
|
|
387
|
+
|
|
320
388
|
// Template props
|
|
321
389
|
SendModalTemplateProps,
|
|
322
390
|
ReceiveModalTemplateProps,
|
package/dist/index.css
CHANGED
|
@@ -270,6 +270,97 @@
|
|
|
270
270
|
animation: pollar-spin 1s linear infinite;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
+
/* src/components/distribution-rules-modal/DistributionRulesModal.css */
|
|
274
|
+
.pollar-dist-modal {
|
|
275
|
+
max-width: 460px;
|
|
276
|
+
}
|
|
277
|
+
.pollar-dist-list {
|
|
278
|
+
display: flex;
|
|
279
|
+
flex-direction: column;
|
|
280
|
+
gap: 0.625rem;
|
|
281
|
+
max-height: 420px;
|
|
282
|
+
overflow-y: auto;
|
|
283
|
+
margin-bottom: 1rem;
|
|
284
|
+
}
|
|
285
|
+
.pollar-dist-item {
|
|
286
|
+
display: flex;
|
|
287
|
+
flex-direction: column;
|
|
288
|
+
gap: 0.375rem;
|
|
289
|
+
background: var(--pollar-input-bg);
|
|
290
|
+
border: 1px solid var(--pollar-border);
|
|
291
|
+
border-radius: var(--pollar-card-border-radius, 10px);
|
|
292
|
+
padding: 0.875rem 1rem;
|
|
293
|
+
}
|
|
294
|
+
.pollar-dist-item[data-claimable=false] {
|
|
295
|
+
opacity: 0.7;
|
|
296
|
+
}
|
|
297
|
+
.pollar-dist-item-row {
|
|
298
|
+
display: flex;
|
|
299
|
+
align-items: baseline;
|
|
300
|
+
justify-content: space-between;
|
|
301
|
+
gap: 0.75rem;
|
|
302
|
+
}
|
|
303
|
+
.pollar-dist-item-name {
|
|
304
|
+
font-size: 0.9375rem;
|
|
305
|
+
font-weight: 600;
|
|
306
|
+
color: var(--pollar-text);
|
|
307
|
+
overflow: hidden;
|
|
308
|
+
text-overflow: ellipsis;
|
|
309
|
+
white-space: nowrap;
|
|
310
|
+
}
|
|
311
|
+
.pollar-dist-item-amount {
|
|
312
|
+
font-size: 0.9375rem;
|
|
313
|
+
font-weight: 700;
|
|
314
|
+
color: var(--pollar-text);
|
|
315
|
+
font-variant-numeric: tabular-nums;
|
|
316
|
+
white-space: nowrap;
|
|
317
|
+
}
|
|
318
|
+
.pollar-dist-item-asset {
|
|
319
|
+
font-size: 0.75rem;
|
|
320
|
+
color: var(--pollar-muted);
|
|
321
|
+
font-weight: 600;
|
|
322
|
+
margin-left: 2px;
|
|
323
|
+
}
|
|
324
|
+
.pollar-dist-item-meta {
|
|
325
|
+
font-size: 0.75rem;
|
|
326
|
+
color: var(--pollar-muted);
|
|
327
|
+
display: flex;
|
|
328
|
+
gap: 0.375rem;
|
|
329
|
+
flex-wrap: wrap;
|
|
330
|
+
}
|
|
331
|
+
.pollar-dist-item-action {
|
|
332
|
+
margin-top: 0.375rem;
|
|
333
|
+
display: flex;
|
|
334
|
+
align-items: center;
|
|
335
|
+
justify-content: flex-end;
|
|
336
|
+
}
|
|
337
|
+
.pollar-dist-claim-btn {
|
|
338
|
+
flex: 0 0 auto;
|
|
339
|
+
height: 32px;
|
|
340
|
+
padding: 0 0.875rem;
|
|
341
|
+
font-size: 0.8125rem;
|
|
342
|
+
}
|
|
343
|
+
.pollar-dist-item-status {
|
|
344
|
+
font-size: 0.75rem;
|
|
345
|
+
font-weight: 600;
|
|
346
|
+
padding: 4px 10px;
|
|
347
|
+
border-radius: 999px;
|
|
348
|
+
text-transform: uppercase;
|
|
349
|
+
letter-spacing: 0.04em;
|
|
350
|
+
}
|
|
351
|
+
.pollar-dist-item-status[data-kind=claimed] {
|
|
352
|
+
background: rgba(22, 163, 74, 0.12);
|
|
353
|
+
color: var(--pollar-success-text, #16a34a);
|
|
354
|
+
}
|
|
355
|
+
.pollar-dist-item-status[data-kind=unavailable] {
|
|
356
|
+
background: rgba(107, 114, 128, 0.12);
|
|
357
|
+
color: var(--pollar-muted);
|
|
358
|
+
}
|
|
359
|
+
.pollar-dist-item-error {
|
|
360
|
+
font-size: 0.75rem;
|
|
361
|
+
color: var(--pollar-error-text, #dc2626);
|
|
362
|
+
}
|
|
363
|
+
|
|
273
364
|
/* src/components/kyc-modal/KycModal.css */
|
|
274
365
|
.pollar-kyc-badge {
|
|
275
366
|
display: inline-flex;
|
|
@@ -491,8 +582,8 @@
|
|
|
491
582
|
padding: 0 1rem;
|
|
492
583
|
position: relative;
|
|
493
584
|
text-align: center;
|
|
494
|
-
-webkit-transition: transform .15s, box-shadow .15s;
|
|
495
|
-
transition: transform .15s, box-shadow .15s;
|
|
585
|
+
-webkit-transition: transform 0.15s, box-shadow 0.15s;
|
|
586
|
+
transition: transform 0.15s, box-shadow 0.15s;
|
|
496
587
|
vertical-align: middle;
|
|
497
588
|
white-space: nowrap;
|
|
498
589
|
width: 100%;
|
|
@@ -530,8 +621,8 @@
|
|
|
530
621
|
flex-grow: 0;
|
|
531
622
|
}
|
|
532
623
|
.gsi-material-button .gsi-material-button-state {
|
|
533
|
-
-webkit-transition: opacity .218s;
|
|
534
|
-
transition: opacity .218s;
|
|
624
|
+
-webkit-transition: opacity 0.218s;
|
|
625
|
+
transition: opacity 0.218s;
|
|
535
626
|
bottom: 0;
|
|
536
627
|
left: 0;
|
|
537
628
|
opacity: 0;
|
|
@@ -663,7 +754,7 @@
|
|
|
663
754
|
background-color: var(--pollar-bg);
|
|
664
755
|
}
|
|
665
756
|
.pollar-social-list {
|
|
666
|
-
margin-bottom: .625rem;
|
|
757
|
+
margin-bottom: 0.625rem;
|
|
667
758
|
display: flex;
|
|
668
759
|
flex-direction: column;
|
|
669
760
|
gap: 0.625rem;
|
|
@@ -864,65 +955,6 @@
|
|
|
864
955
|
cursor: not-allowed;
|
|
865
956
|
}
|
|
866
957
|
|
|
867
|
-
/* src/components/receive-modal/ReceiveModal.css */
|
|
868
|
-
.pollar-receive-modal {
|
|
869
|
-
max-width: 380px;
|
|
870
|
-
}
|
|
871
|
-
.pollar-receive-qr {
|
|
872
|
-
display: flex;
|
|
873
|
-
align-items: center;
|
|
874
|
-
justify-content: center;
|
|
875
|
-
padding: 1.25rem;
|
|
876
|
-
margin-bottom: 1rem;
|
|
877
|
-
background: var(--pollar-input-bg);
|
|
878
|
-
border: 1px solid var(--pollar-border);
|
|
879
|
-
border-radius: var(--pollar-card-border-radius, 10px);
|
|
880
|
-
}
|
|
881
|
-
.pollar-receive-instructions {
|
|
882
|
-
font-size: 0.8125rem;
|
|
883
|
-
color: var(--pollar-muted);
|
|
884
|
-
text-align: center;
|
|
885
|
-
margin: 0 0 1rem;
|
|
886
|
-
line-height: 1.5;
|
|
887
|
-
}
|
|
888
|
-
.pollar-receive-address-row {
|
|
889
|
-
display: flex;
|
|
890
|
-
align-items: center;
|
|
891
|
-
gap: 0.625rem;
|
|
892
|
-
background: var(--pollar-input-bg);
|
|
893
|
-
border: 1px solid var(--pollar-border);
|
|
894
|
-
border-radius: var(--pollar-card-border-radius, 10px);
|
|
895
|
-
padding: 0.625rem 0.875rem;
|
|
896
|
-
margin-bottom: 1rem;
|
|
897
|
-
}
|
|
898
|
-
.pollar-receive-address {
|
|
899
|
-
flex: 1;
|
|
900
|
-
font-size: 0.75rem;
|
|
901
|
-
font-family: monospace;
|
|
902
|
-
color: var(--pollar-text);
|
|
903
|
-
word-break: break-all;
|
|
904
|
-
line-height: 1.5;
|
|
905
|
-
}
|
|
906
|
-
.pollar-receive-copy-btn {
|
|
907
|
-
display: inline-flex;
|
|
908
|
-
align-items: center;
|
|
909
|
-
gap: 0.375rem;
|
|
910
|
-
flex-shrink: 0;
|
|
911
|
-
padding: 0.375rem 0.75rem;
|
|
912
|
-
border-radius: var(--pollar-buttons-border-radius, 6px);
|
|
913
|
-
border: 1px solid var(--pollar-border);
|
|
914
|
-
background: none;
|
|
915
|
-
font-size: 0.75rem;
|
|
916
|
-
font-weight: 500;
|
|
917
|
-
color: var(--pollar-muted);
|
|
918
|
-
cursor: pointer;
|
|
919
|
-
transition: color 150ms, background 150ms;
|
|
920
|
-
}
|
|
921
|
-
.pollar-receive-copy-btn:hover {
|
|
922
|
-
color: var(--pollar-text);
|
|
923
|
-
background: var(--pollar-border);
|
|
924
|
-
}
|
|
925
|
-
|
|
926
958
|
/* src/components/ramp-widget/RampWidget.css */
|
|
927
959
|
.pollar-ramp-modal {
|
|
928
960
|
max-width: 480px;
|
|
@@ -1154,6 +1186,65 @@
|
|
|
1154
1186
|
margin: 0;
|
|
1155
1187
|
}
|
|
1156
1188
|
|
|
1189
|
+
/* src/components/receive-modal/ReceiveModal.css */
|
|
1190
|
+
.pollar-receive-modal {
|
|
1191
|
+
max-width: 380px;
|
|
1192
|
+
}
|
|
1193
|
+
.pollar-receive-qr {
|
|
1194
|
+
display: flex;
|
|
1195
|
+
align-items: center;
|
|
1196
|
+
justify-content: center;
|
|
1197
|
+
padding: 1.25rem;
|
|
1198
|
+
margin-bottom: 1rem;
|
|
1199
|
+
background: var(--pollar-input-bg);
|
|
1200
|
+
border: 1px solid var(--pollar-border);
|
|
1201
|
+
border-radius: var(--pollar-card-border-radius, 10px);
|
|
1202
|
+
}
|
|
1203
|
+
.pollar-receive-instructions {
|
|
1204
|
+
font-size: 0.8125rem;
|
|
1205
|
+
color: var(--pollar-muted);
|
|
1206
|
+
text-align: center;
|
|
1207
|
+
margin: 0 0 1rem;
|
|
1208
|
+
line-height: 1.5;
|
|
1209
|
+
}
|
|
1210
|
+
.pollar-receive-address-row {
|
|
1211
|
+
display: flex;
|
|
1212
|
+
align-items: center;
|
|
1213
|
+
gap: 0.625rem;
|
|
1214
|
+
background: var(--pollar-input-bg);
|
|
1215
|
+
border: 1px solid var(--pollar-border);
|
|
1216
|
+
border-radius: var(--pollar-card-border-radius, 10px);
|
|
1217
|
+
padding: 0.625rem 0.875rem;
|
|
1218
|
+
margin-bottom: 1rem;
|
|
1219
|
+
}
|
|
1220
|
+
.pollar-receive-address {
|
|
1221
|
+
flex: 1;
|
|
1222
|
+
font-size: 0.75rem;
|
|
1223
|
+
font-family: monospace;
|
|
1224
|
+
color: var(--pollar-text);
|
|
1225
|
+
word-break: break-all;
|
|
1226
|
+
line-height: 1.5;
|
|
1227
|
+
}
|
|
1228
|
+
.pollar-receive-copy-btn {
|
|
1229
|
+
display: inline-flex;
|
|
1230
|
+
align-items: center;
|
|
1231
|
+
gap: 0.375rem;
|
|
1232
|
+
flex-shrink: 0;
|
|
1233
|
+
padding: 0.375rem 0.75rem;
|
|
1234
|
+
border-radius: var(--pollar-buttons-border-radius, 6px);
|
|
1235
|
+
border: 1px solid var(--pollar-border);
|
|
1236
|
+
background: none;
|
|
1237
|
+
font-size: 0.75rem;
|
|
1238
|
+
font-weight: 500;
|
|
1239
|
+
color: var(--pollar-muted);
|
|
1240
|
+
cursor: pointer;
|
|
1241
|
+
transition: color 150ms, background 150ms;
|
|
1242
|
+
}
|
|
1243
|
+
.pollar-receive-copy-btn:hover {
|
|
1244
|
+
color: var(--pollar-text);
|
|
1245
|
+
background: var(--pollar-border);
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1157
1248
|
/* src/components/transaction-modal/TransactionModal.css */
|
|
1158
1249
|
.pollar-tx-modal {
|
|
1159
1250
|
max-width: 420px;
|