@shapeshiftoss/swap-widget 0.0.2 → 0.1.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 (159) hide show
  1. package/dist/index.d.ts +233 -0
  2. package/dist/index.js +63612 -0
  3. package/dist/style.css +1 -0
  4. package/package.json +69 -18
  5. package/Dockerfile +0 -87
  6. package/dist/assets/PhArrowCircleDown-B305t-Sh.js +0 -14
  7. package/dist/assets/PhArrowClockwise-CJPxQhr_.js +0 -14
  8. package/dist/assets/PhArrowDown-C4hT9BVu.js +0 -14
  9. package/dist/assets/PhArrowLeft-Way4Cu-r.js +0 -14
  10. package/dist/assets/PhArrowRight-Cp5ZME0F.js +0 -14
  11. package/dist/assets/PhArrowSquareOut-NnrK69c5.js +0 -14
  12. package/dist/assets/PhArrowUp-Dph6j8rm.js +0 -14
  13. package/dist/assets/PhArrowUpRight-BpJjRRRh.js +0 -14
  14. package/dist/assets/PhArrowsClockwise-CFUT8X7R.js +0 -14
  15. package/dist/assets/PhArrowsDownUp-BjBI4ckC.js +0 -14
  16. package/dist/assets/PhArrowsLeftRight-CuLpbKRk.js +0 -14
  17. package/dist/assets/PhBank-Dchr4XQJ.js +0 -14
  18. package/dist/assets/PhBrowser-dUu2TrC1.js +0 -14
  19. package/dist/assets/PhCaretDown-78IuKU3V.js +0 -14
  20. package/dist/assets/PhCaretLeft-_aiyH7n1.js +0 -14
  21. package/dist/assets/PhCaretRight-8zJQEuDX.js +0 -14
  22. package/dist/assets/PhCaretUp-CiCxKWwN.js +0 -14
  23. package/dist/assets/PhCheck-CcADx8br.js +0 -14
  24. package/dist/assets/PhCircleHalf-BYzSzd2h.js +0 -14
  25. package/dist/assets/PhClock-UItiXeJq.js +0 -14
  26. package/dist/assets/PhCompass-CUy3uA7t.js +0 -14
  27. package/dist/assets/PhCopy-C-PDgSlZ.js +0 -14
  28. package/dist/assets/PhCreditCard-CWRaUT6F.js +0 -14
  29. package/dist/assets/PhCurrencyDollar-Cqla3AXT.js +0 -14
  30. package/dist/assets/PhDesktop-BBIPrYLl.js +0 -14
  31. package/dist/assets/PhDeviceMobile-BdsPaATg.js +0 -14
  32. package/dist/assets/PhDotsThree-BMXCQl-0.js +0 -14
  33. package/dist/assets/PhEnvelope-yUsis6yU.js +0 -14
  34. package/dist/assets/PhFunnelSimple-Ba7BbWTp.js +0 -14
  35. package/dist/assets/PhGlobe-DgLxBk5U.js +0 -14
  36. package/dist/assets/PhIdentificationCard-Czjmq9Z3.js +0 -14
  37. package/dist/assets/PhImage-BAJ_erz6.js +0 -14
  38. package/dist/assets/PhInfo-Cr4DhVUE.js +0 -14
  39. package/dist/assets/PhLightbulb-BX_7duTr.js +0 -14
  40. package/dist/assets/PhMagnifyingGlass-Mygfryvz.js +0 -14
  41. package/dist/assets/PhPaperPlaneRight-BeuCA660.js +0 -14
  42. package/dist/assets/PhPlus-BMjcHjsT.js +0 -14
  43. package/dist/assets/PhPower-CGffGmdb.js +0 -14
  44. package/dist/assets/PhPuzzlePiece-wm_GpVSi.js +0 -14
  45. package/dist/assets/PhQrCode-DRwRzXCH.js +0 -14
  46. package/dist/assets/PhQuestion-M09j2U0T.js +0 -14
  47. package/dist/assets/PhQuestionMark-BP9EMB6h.js +0 -14
  48. package/dist/assets/PhSealCheck-BfG80yKn.js +0 -14
  49. package/dist/assets/PhSignOut-C5YOWlPT.js +0 -14
  50. package/dist/assets/PhSpinner-BXooDYzU.js +0 -14
  51. package/dist/assets/PhTrash-Biq6rmmL.js +0 -14
  52. package/dist/assets/PhUser-CAgZSpGe.js +0 -14
  53. package/dist/assets/PhVault-l2PHF38a.js +0 -14
  54. package/dist/assets/PhWallet-w25D16It.js +0 -14
  55. package/dist/assets/PhWarning-DPEydIPw.js +0 -14
  56. package/dist/assets/PhWarningCircle-BqjT745H.js +0 -14
  57. package/dist/assets/PhX-s-SmVExa.js +0 -14
  58. package/dist/assets/SwapController-If0bFrNc.js +0 -1
  59. package/dist/assets/ccip-BBB7uCdL.js +0 -1
  60. package/dist/assets/ccip-CkkdfKKI.js +0 -1
  61. package/dist/assets/data-capture-D4gAy-Yc.js +0 -242
  62. package/dist/assets/email-B1AJehis.js +0 -90
  63. package/dist/assets/embedded-wallet-Q6DQopDk.js +0 -410
  64. package/dist/assets/features-B6JAPAFb.js +0 -5
  65. package/dist/assets/index-5jd8RPN9.js +0 -7428
  66. package/dist/assets/index-B4kNtSTk.js +0 -1080
  67. package/dist/assets/index-B753eAob.js +0 -1
  68. package/dist/assets/index-BZoLTv77.js +0 -3
  69. package/dist/assets/index-Bcw9UURX.js +0 -3
  70. package/dist/assets/index-BkrV-ahK.js +0 -2
  71. package/dist/assets/index-CRQzQ_up.js +0 -9
  72. package/dist/assets/index-CSW0Gt5y.js +0 -132
  73. package/dist/assets/index-CZ4jTIsk.js +0 -138
  74. package/dist/assets/index-Cwa8SB3h.js +0 -61
  75. package/dist/assets/index-DEwQgT4r.js +0 -78
  76. package/dist/assets/index-DVfQiQ1d.js +0 -1
  77. package/dist/assets/index-cV3UdaMs.css +0 -1
  78. package/dist/assets/index-hAmu622O.js +0 -43
  79. package/dist/assets/onramp-XcPNCLRU.js +0 -422
  80. package/dist/assets/pay-with-exchange-BeHt4OF4.js +0 -280
  81. package/dist/assets/property-C9JG5tag.js +0 -27
  82. package/dist/assets/receive-7ff4he2S.js +0 -131
  83. package/dist/assets/send-CkMBIRXT.js +0 -554
  84. package/dist/assets/socials-DmmxuLrP.js +0 -250
  85. package/dist/assets/swaps-IHAYRQ0x.js +0 -1050
  86. package/dist/assets/transactions-9Cxdk7o9.js +0 -16
  87. package/dist/assets/v4-BOvFkHkt.js +0 -1
  88. package/dist/assets/w3m-modal-kJzFnBfB.js +0 -891
  89. package/dist/assets/wallet-standard-Dv8LMoUB.js +0 -1
  90. package/dist/favicon.png +0 -0
  91. package/dist/favicon.svg +0 -11
  92. package/dist/icon-192x192.png +0 -0
  93. package/dist/icon-512x512.png +0 -0
  94. package/dist/index.html +0 -33
  95. package/index.html +0 -32
  96. package/public/favicon.png +0 -0
  97. package/public/favicon.svg +0 -11
  98. package/public/icon-192x192.png +0 -0
  99. package/public/icon-512x512.png +0 -0
  100. package/railway.toml +0 -10
  101. package/src/api/client.ts +0 -95
  102. package/src/components/AddressInputModal.css +0 -173
  103. package/src/components/AddressInputModal.tsx +0 -250
  104. package/src/components/ApprovalStep.tsx +0 -92
  105. package/src/components/ExecutionStep.tsx +0 -27
  106. package/src/components/InputStep.tsx +0 -431
  107. package/src/components/QuoteSelector.css +0 -146
  108. package/src/components/QuoteSelector.tsx +0 -137
  109. package/src/components/QuotesModal.css +0 -250
  110. package/src/components/QuotesModal.tsx +0 -182
  111. package/src/components/SettingsModal.css +0 -145
  112. package/src/components/SettingsModal.tsx +0 -180
  113. package/src/components/StatusStep.tsx +0 -139
  114. package/src/components/SwapWidget.css +0 -713
  115. package/src/components/SwapWidget.tsx +0 -607
  116. package/src/components/TokenSelectModal.css +0 -438
  117. package/src/components/TokenSelectModal.tsx +0 -487
  118. package/src/components/WalletProvider.tsx +0 -92
  119. package/src/config/appkit.ts +0 -104
  120. package/src/config/wagmi.ts +0 -27
  121. package/src/constants/chains.ts +0 -72
  122. package/src/constants/defaults.ts +0 -28
  123. package/src/constants/swappers.ts +0 -48
  124. package/src/constants/viemChains.ts +0 -69
  125. package/src/contexts/SwapWalletContext.tsx +0 -25
  126. package/src/demo/App.css +0 -458
  127. package/src/demo/App.tsx +0 -481
  128. package/src/demo/main.tsx +0 -25
  129. package/src/hooks/useAssets.ts +0 -180
  130. package/src/hooks/useBalances.ts +0 -822
  131. package/src/hooks/useBitcoinSigning.ts +0 -276
  132. package/src/hooks/useMarketData.ts +0 -169
  133. package/src/hooks/useSolanaSigning.ts +0 -275
  134. package/src/hooks/useStatusPolling.ts +0 -137
  135. package/src/hooks/useSwapApproval.ts +0 -106
  136. package/src/hooks/useSwapDisplayValues.ts +0 -157
  137. package/src/hooks/useSwapExecution.ts +0 -199
  138. package/src/hooks/useSwapHandlers.ts +0 -119
  139. package/src/hooks/useSwapQuote.ts +0 -71
  140. package/src/hooks/useSwapQuoting.ts +0 -102
  141. package/src/hooks/useSwapRates.ts +0 -61
  142. package/src/index.ts +0 -43
  143. package/src/machines/SwapMachineContext.ts +0 -5
  144. package/src/machines/__tests__/guards.test.ts +0 -228
  145. package/src/machines/__tests__/setup.test.ts +0 -7
  146. package/src/machines/__tests__/swapMachine.test.ts +0 -544
  147. package/src/machines/__tests__/types.test.ts +0 -124
  148. package/src/machines/guards.ts +0 -33
  149. package/src/machines/swapMachine.ts +0 -288
  150. package/src/machines/types.ts +0 -54
  151. package/src/services/transactionStatus.ts +0 -322
  152. package/src/types/index.ts +0 -361
  153. package/src/utils/addressValidation.ts +0 -201
  154. package/src/utils/redirect.ts +0 -45
  155. package/src/vite-env.d.ts +0 -10
  156. package/tsconfig.json +0 -23
  157. package/tsconfig.node.json +0 -10
  158. package/vite.config.ts +0 -101
  159. package/vitest.config.ts +0 -18
@@ -1,713 +0,0 @@
1
- .ssw-widget {
2
- --ssw-accent: #3861fb;
3
- --ssw-accent-light: rgba(56, 97, 251, 0.1);
4
- --ssw-success: #00d395;
5
- --ssw-error: #f44336;
6
- --ssw-warning: #ffc107;
7
- --ssw-radius-widget: 20px;
8
- --ssw-radius-lg: 16px;
9
- --ssw-radius-md: 14px;
10
- --ssw-radius-sm: 10px;
11
- --ssw-radius-xs: 6px;
12
- --ssw-radius-2xs: 4px;
13
-
14
- font-family: var(--ssw-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);
15
- width: 100%;
16
- min-width: 420px;
17
- max-width: 420px;
18
- border-radius: var(--ssw-radius-widget);
19
- overflow: hidden;
20
- }
21
-
22
- .ssw-widget *,
23
- .ssw-widget *::before,
24
- .ssw-widget *::after {
25
- box-sizing: border-box;
26
- }
27
-
28
- .ssw-widget.ssw-dark {
29
- --ssw-bg-primary: #0a0a14;
30
- --ssw-bg-secondary: #12121c;
31
- --ssw-bg-tertiary: #1a1a2e;
32
- --ssw-bg-input: #0d0d16;
33
- --ssw-bg-hover: rgba(255, 255, 255, 0.05);
34
- --ssw-border: rgba(255, 255, 255, 0.08);
35
- --ssw-border-hover: rgba(255, 255, 255, 0.15);
36
- --ssw-text-primary: #ffffff;
37
- --ssw-text-secondary: #a0a0b0;
38
- --ssw-text-muted: #6b6b80;
39
-
40
- background: var(--ssw-bg-secondary);
41
- color: var(--ssw-text-primary);
42
- }
43
-
44
- .ssw-widget.ssw-light {
45
- --ssw-bg-primary: #ffffff;
46
- --ssw-bg-secondary: #f8f9fc;
47
- --ssw-bg-tertiary: #ffffff;
48
- --ssw-bg-input: #f0f2f5;
49
- --ssw-bg-hover: rgba(0, 0, 0, 0.04);
50
- --ssw-border: rgba(0, 0, 0, 0.08);
51
- --ssw-border-hover: rgba(0, 0, 0, 0.15);
52
- --ssw-text-primary: #1a1a2e;
53
- --ssw-text-secondary: #5c5c70;
54
- --ssw-text-muted: #9090a0;
55
-
56
- background: var(--ssw-bg-secondary);
57
- color: var(--ssw-text-primary);
58
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
59
- }
60
-
61
- .ssw-header {
62
- display: flex;
63
- align-items: center;
64
- justify-content: space-between;
65
- padding: 16px 20px;
66
- border-bottom: 1px solid var(--ssw-border);
67
- }
68
-
69
- .ssw-header-title {
70
- font-size: 16px;
71
- font-weight: 600;
72
- color: var(--ssw-text-primary);
73
- }
74
-
75
- .ssw-header-actions {
76
- display: flex;
77
- align-items: center;
78
- gap: 8px;
79
- }
80
-
81
- .ssw-connect-btn {
82
- display: flex;
83
- align-items: center;
84
- gap: 6px;
85
- padding: 8px 12px;
86
- border: 1px solid var(--ssw-border);
87
- background: var(--ssw-bg-tertiary);
88
- border-radius: var(--ssw-radius-sm);
89
- color: var(--ssw-text-primary);
90
- font-size: 13px;
91
- font-weight: 500;
92
- cursor: pointer;
93
- transition: all 0.15s ease;
94
- }
95
-
96
- .ssw-connect-btn:hover {
97
- background: var(--ssw-bg-hover);
98
- border-color: var(--ssw-accent);
99
- }
100
-
101
- .ssw-connect-btn.ssw-connected {
102
- background: color-mix(in srgb, var(--ssw-accent) 15%, var(--ssw-bg-tertiary));
103
- border-color: color-mix(in srgb, var(--ssw-accent) 40%, transparent);
104
- }
105
-
106
- .ssw-connect-btn.ssw-wrong-network {
107
- background: color-mix(in srgb, var(--ssw-error) 15%, var(--ssw-bg-tertiary));
108
- border-color: var(--ssw-error);
109
- color: var(--ssw-error);
110
- }
111
-
112
- .ssw-settings-btn {
113
- padding: 8px;
114
- border: none;
115
- background: none;
116
- border-radius: var(--ssw-radius-sm);
117
- color: var(--ssw-text-secondary);
118
- cursor: pointer;
119
- transition: all 0.15s ease;
120
- }
121
-
122
- .ssw-settings-btn:hover {
123
- color: var(--ssw-text-primary);
124
- background: var(--ssw-bg-hover);
125
- }
126
-
127
- .ssw-swap-container {
128
- padding: 16px;
129
- display: flex;
130
- flex-direction: column;
131
- gap: 4px;
132
- position: relative;
133
- }
134
-
135
- .ssw-token-section {
136
- background: var(--ssw-bg-tertiary);
137
- border-radius: var(--ssw-radius-lg);
138
- padding: 16px;
139
- border: 1px solid var(--ssw-border);
140
- transition: border-color 0.15s ease;
141
- }
142
-
143
- .ssw-token-section:focus-within {
144
- border-color: var(--ssw-accent);
145
- }
146
-
147
- .ssw-section-header {
148
- display: flex;
149
- align-items: center;
150
- justify-content: space-between;
151
- margin-bottom: 8px;
152
- }
153
-
154
- .ssw-section-label {
155
- font-size: 13px;
156
- font-weight: 500;
157
- color: var(--ssw-text-secondary);
158
- }
159
-
160
- .ssw-wallet-badge {
161
- font-size: 12px;
162
- color: var(--ssw-accent);
163
- padding: 2px 8px;
164
- background: var(--ssw-accent-light);
165
- border-radius: var(--ssw-radius-xs);
166
- }
167
-
168
- .ssw-input-row {
169
- display: flex;
170
- align-items: center;
171
- gap: 12px;
172
- }
173
-
174
- .ssw-amount-input {
175
- flex: 1;
176
- background: none;
177
- border: none;
178
- font-size: 32px;
179
- font-weight: 500;
180
- color: var(--ssw-text-primary);
181
- outline: none;
182
- min-width: 0;
183
- }
184
-
185
- .ssw-amount-input::placeholder {
186
- color: var(--ssw-text-muted);
187
- }
188
-
189
- .ssw-token-btn {
190
- display: flex;
191
- align-items: center;
192
- gap: 10px;
193
- padding: 8px 12px;
194
- border: none;
195
- background: var(--ssw-bg-secondary);
196
- border-radius: var(--ssw-radius-sm);
197
- cursor: pointer;
198
- transition: all 0.15s ease;
199
- flex-shrink: 0;
200
- }
201
-
202
- .ssw-token-btn:hover {
203
- background: var(--ssw-bg-hover);
204
- }
205
-
206
- .ssw-token-icon {
207
- width: 32px;
208
- height: 32px;
209
- border-radius: 50%;
210
- object-fit: contain;
211
- }
212
-
213
- .ssw-token-icon-placeholder {
214
- width: 32px;
215
- height: 32px;
216
- border-radius: 50%;
217
- background: var(--ssw-accent);
218
- display: flex;
219
- align-items: center;
220
- justify-content: center;
221
- font-size: 14px;
222
- font-weight: 600;
223
- color: white;
224
- }
225
-
226
- .ssw-token-info {
227
- display: flex;
228
- flex-direction: column;
229
- align-items: flex-start;
230
- gap: 2px;
231
- }
232
-
233
- .ssw-token-symbol {
234
- font-size: 15px;
235
- font-weight: 600;
236
- color: var(--ssw-text-primary);
237
- }
238
-
239
- .ssw-token-chain {
240
- font-size: 12px;
241
- color: var(--ssw-text-secondary);
242
- }
243
-
244
- .ssw-token-btn svg {
245
- color: var(--ssw-text-muted);
246
- }
247
-
248
- .ssw-token-btn-locked {
249
- cursor: default;
250
- }
251
-
252
- .ssw-token-btn-locked:hover {
253
- background: var(--ssw-bg-secondary);
254
- }
255
-
256
- .ssw-section-footer {
257
- display: flex;
258
- align-items: center;
259
- justify-content: space-between;
260
- margin-top: 8px;
261
- }
262
-
263
- .ssw-balance {
264
- font-size: 12px;
265
- color: var(--ssw-text-muted);
266
- }
267
-
268
- .ssw-balance-skeleton {
269
- width: 80px;
270
- height: 14px;
271
- border-radius: var(--ssw-radius-2xs);
272
- background: linear-gradient(
273
- 90deg,
274
- var(--ssw-bg-hover) 25%,
275
- var(--ssw-border) 50%,
276
- var(--ssw-bg-hover) 75%
277
- );
278
- background-size: 200% 100%;
279
- animation: ssw-skeleton-shimmer 1.5s infinite;
280
- }
281
-
282
- @keyframes ssw-skeleton-shimmer {
283
- 0% {
284
- background-position: 200% 0;
285
- }
286
- 100% {
287
- background-position: -200% 0;
288
- }
289
- }
290
-
291
- .ssw-usd-value {
292
- font-size: 13px;
293
- color: var(--ssw-text-muted);
294
- }
295
-
296
- .ssw-swap-divider {
297
- display: flex;
298
- justify-content: center;
299
- margin: -12px 0;
300
- position: relative;
301
- z-index: 10;
302
- }
303
-
304
- .ssw-swap-btn {
305
- width: 36px;
306
- height: 36px;
307
- border: 4px solid var(--ssw-bg-secondary);
308
- background: var(--ssw-bg-tertiary);
309
- border-radius: var(--ssw-radius-sm);
310
- display: flex;
311
- align-items: center;
312
- justify-content: center;
313
- cursor: pointer;
314
- color: var(--ssw-text-secondary);
315
- transition: color 0.15s ease, background 0.15s ease, transform 0.3s ease;
316
- }
317
-
318
- .ssw-swap-btn:hover {
319
- color: var(--ssw-text-primary);
320
- background: var(--ssw-bg-hover);
321
- }
322
-
323
- .ssw-swap-btn:active {
324
- transform: rotate(180deg);
325
- }
326
-
327
- .ssw-swap-btn:disabled {
328
- opacity: 0.4;
329
- cursor: not-allowed;
330
- }
331
-
332
- .ssw-swap-btn:disabled:hover {
333
- color: var(--ssw-text-secondary);
334
- background: var(--ssw-bg-tertiary);
335
- }
336
-
337
- .ssw-swap-btn:disabled:active {
338
- transform: none;
339
- }
340
-
341
- .ssw-receive-address-btn {
342
- display: flex;
343
- align-items: center;
344
- gap: 6px;
345
- padding: 4px 10px;
346
- background: var(--ssw-bg-tertiary);
347
- border: 1px solid var(--ssw-border);
348
- border-radius: var(--ssw-radius-xs);
349
- cursor: pointer;
350
- transition: all 0.15s ease;
351
- }
352
-
353
- .ssw-receive-address-btn:hover {
354
- background: var(--ssw-bg-hover);
355
- border-color: var(--ssw-accent);
356
- }
357
-
358
- .ssw-receive-address-btn.ssw-custom {
359
- border-color: var(--ssw-accent);
360
- background: color-mix(in srgb, var(--ssw-accent) 10%, var(--ssw-bg-tertiary));
361
- }
362
-
363
- .ssw-receive-address-text {
364
- font-size: 12px;
365
- font-family: monospace;
366
- color: var(--ssw-accent);
367
- }
368
-
369
- .ssw-receive-address-btn svg {
370
- color: var(--ssw-text-muted);
371
- flex-shrink: 0;
372
- }
373
-
374
- .ssw-receive-address-btn:hover svg {
375
- color: var(--ssw-accent);
376
- }
377
-
378
- .ssw-quotes {
379
- padding: 0 16px 16px;
380
- }
381
-
382
- .ssw-network-fee {
383
- display: flex;
384
- align-items: center;
385
- justify-content: space-between;
386
- padding: 0 20px;
387
- margin-bottom: 8px;
388
- }
389
-
390
- .ssw-network-fee-label {
391
- font-size: 13px;
392
- color: var(--ssw-text-muted);
393
- }
394
-
395
- .ssw-network-fee-value {
396
- font-size: 13px;
397
- font-weight: 500;
398
- color: var(--ssw-text-secondary);
399
- }
400
-
401
- .ssw-action-btn {
402
- width: calc(100% - 32px);
403
- margin: 0 16px 16px;
404
- padding: 16px;
405
- border: none;
406
- border-radius: var(--ssw-radius-md);
407
- background: var(--ssw-accent);
408
- color: white;
409
- font-size: 16px;
410
- font-weight: 600;
411
- cursor: pointer;
412
- transition: all 0.15s ease;
413
- }
414
-
415
- .ssw-action-btn:hover:not(:disabled) {
416
- filter: brightness(1.1);
417
- }
418
-
419
- .ssw-action-btn:disabled {
420
- background: var(--ssw-bg-tertiary);
421
- color: var(--ssw-text-muted);
422
- cursor: not-allowed;
423
- }
424
-
425
- .ssw-action-btn.ssw-secondary {
426
- background: color-mix(in srgb, var(--ssw-accent) 15%, var(--ssw-bg-tertiary));
427
- color: var(--ssw-text-primary);
428
- border: 1px solid color-mix(in srgb, var(--ssw-accent) 40%, transparent);
429
- }
430
-
431
- .ssw-action-btn.ssw-secondary:hover:not(:disabled) {
432
- background: color-mix(in srgb, var(--ssw-accent) 25%, var(--ssw-bg-tertiary));
433
- filter: none;
434
- }
435
-
436
- .ssw-powered-by {
437
- padding: 12px 16px;
438
- display: flex;
439
- align-items: center;
440
- justify-content: center;
441
- gap: 4px;
442
- font-size: 12px;
443
- color: var(--ssw-text-muted);
444
- border-top: 1px solid var(--ssw-border);
445
- }
446
-
447
- .ssw-powered-by a {
448
- color: var(--ssw-accent);
449
- text-decoration: none;
450
- font-weight: 500;
451
- }
452
-
453
- .ssw-powered-by-link {
454
- display: inline-flex;
455
- align-items: center;
456
- gap: 4px;
457
- }
458
-
459
- .ssw-powered-by a:hover {
460
- opacity: 0.8;
461
- }
462
-
463
- /* Transaction Status */
464
- .ssw-tx-status {
465
- display: flex;
466
- align-items: center;
467
- gap: 12px;
468
- padding: 12px 16px;
469
- margin: 0 16px 16px;
470
- border-radius: var(--ssw-radius-sm);
471
- background: var(--ssw-bg-tertiary);
472
- border: 1px solid var(--ssw-border);
473
- }
474
-
475
- .ssw-tx-status-pending {
476
- border-color: var(--ssw-accent);
477
- background: var(--ssw-accent-light);
478
- }
479
-
480
- .ssw-tx-status-success {
481
- border-color: var(--ssw-success);
482
- background: rgba(0, 211, 149, 0.1);
483
- }
484
-
485
- .ssw-tx-status-error {
486
- border-color: var(--ssw-error);
487
- background: rgba(244, 67, 54, 0.1);
488
- }
489
-
490
- .ssw-tx-status-icon {
491
- flex-shrink: 0;
492
- display: flex;
493
- align-items: center;
494
- justify-content: center;
495
- width: 24px;
496
- height: 24px;
497
- }
498
-
499
- .ssw-tx-status-pending .ssw-tx-status-icon {
500
- color: var(--ssw-accent);
501
- }
502
-
503
- .ssw-tx-status-success .ssw-tx-status-icon {
504
- color: var(--ssw-success);
505
- }
506
-
507
- .ssw-tx-status-error .ssw-tx-status-icon {
508
- color: var(--ssw-error);
509
- }
510
-
511
- .ssw-tx-status-content {
512
- flex: 1;
513
- display: flex;
514
- flex-direction: row;
515
- align-items: center;
516
- gap: 8px;
517
- min-width: 0;
518
- flex-wrap: wrap;
519
- }
520
-
521
- .ssw-tx-status-message {
522
- font-size: 14px;
523
- font-weight: 500;
524
- color: var(--ssw-text-primary);
525
- word-break: break-word;
526
- }
527
-
528
- .ssw-tx-status-link {
529
- font-size: 13px;
530
- color: var(--ssw-accent);
531
- text-decoration: none;
532
- }
533
-
534
- .ssw-tx-status-link:hover {
535
- text-decoration: underline;
536
- }
537
-
538
- .ssw-tx-status-close {
539
- flex-shrink: 0;
540
- background: none;
541
- border: none;
542
- padding: 4px;
543
- cursor: pointer;
544
- color: var(--ssw-text-muted);
545
- transition: color 0.15s ease;
546
- }
547
-
548
- .ssw-tx-status-close:hover {
549
- color: var(--ssw-text-primary);
550
- }
551
-
552
- /* Spinner animation */
553
- @keyframes ssw-spin {
554
- from {
555
- transform: rotate(0deg);
556
- }
557
- to {
558
- transform: rotate(360deg);
559
- }
560
- }
561
-
562
- .ssw-spinner {
563
- animation: ssw-spin 1s linear infinite;
564
- }
565
-
566
- /* Step Screens — shared layout for all non-input steps */
567
- .ssw-step-container {
568
- min-height: 320px;
569
- display: flex;
570
- flex-direction: column;
571
- }
572
-
573
- .ssw-step-screen {
574
- display: flex;
575
- flex-direction: column;
576
- align-items: center;
577
- justify-content: center;
578
- padding: 40px 32px;
579
- flex: 1;
580
- text-align: center;
581
- animation: ssw-step-enter 0.25s ease;
582
- }
583
-
584
- @keyframes ssw-step-enter {
585
- from {
586
- opacity: 0;
587
- transform: translateY(6px);
588
- }
589
- to {
590
- opacity: 1;
591
- transform: translateY(0);
592
- }
593
- }
594
-
595
- .ssw-step-icon-circle {
596
- width: 72px;
597
- height: 72px;
598
- border-radius: 50%;
599
- display: flex;
600
- align-items: center;
601
- justify-content: center;
602
- border-width: 2px;
603
- border-style: solid;
604
- flex-shrink: 0;
605
- }
606
-
607
- .ssw-step-icon-circle.ssw-ic-accent {
608
- background: var(--ssw-accent-light);
609
- border-color: var(--ssw-accent);
610
- color: var(--ssw-accent);
611
- }
612
-
613
- .ssw-step-icon-circle.ssw-ic-success {
614
- background: rgba(0, 211, 149, 0.1);
615
- border-color: var(--ssw-success);
616
- color: var(--ssw-success);
617
- }
618
-
619
- .ssw-step-icon-circle.ssw-ic-error {
620
- background: rgba(244, 67, 54, 0.1);
621
- border-color: var(--ssw-error);
622
- color: var(--ssw-error);
623
- }
624
-
625
- .ssw-step-title {
626
- font-size: 20px;
627
- font-weight: 600;
628
- color: var(--ssw-text-primary);
629
- margin-top: 20px;
630
- }
631
-
632
- .ssw-step-subtitle {
633
- font-size: 14px;
634
- color: var(--ssw-text-secondary);
635
- margin-top: 8px;
636
- max-width: 280px;
637
- line-height: 1.5;
638
- }
639
-
640
- .ssw-step-explorer-link {
641
- display: inline-flex;
642
- align-items: center;
643
- gap: 4px;
644
- font-size: 13px;
645
- color: var(--ssw-accent);
646
- text-decoration: none;
647
- margin-top: 16px;
648
- padding: 6px 12px;
649
- border-radius: var(--ssw-radius-xs);
650
- background: var(--ssw-accent-light);
651
- transition: opacity 0.15s ease;
652
- }
653
-
654
- .ssw-step-explorer-link:hover {
655
- opacity: 0.8;
656
- }
657
-
658
- .ssw-step-actions {
659
- display: flex;
660
- gap: 10px;
661
- margin-top: 24px;
662
- width: 100%;
663
- max-width: 320px;
664
- }
665
-
666
- .ssw-step-actions .ssw-action-btn {
667
- flex: 1;
668
- width: auto;
669
- margin: 0;
670
- white-space: nowrap;
671
- }
672
-
673
- .ssw-step-actions .ssw-secondary {
674
- background: var(--ssw-bg-tertiary);
675
- border: 1px solid var(--ssw-border);
676
- color: var(--ssw-text-secondary);
677
- }
678
-
679
- .ssw-step-actions .ssw-secondary:hover {
680
- border-color: var(--ssw-border-hover);
681
- color: var(--ssw-text-primary);
682
- }
683
-
684
- /* Outline button variant */
685
- .ssw-btn-outline .ssw-action-btn {
686
- background: transparent;
687
- border: 1px solid var(--ssw-border);
688
- color: var(--ssw-text-primary);
689
- }
690
-
691
- .ssw-btn-outline .ssw-action-btn:hover:not(:disabled) {
692
- border-color: var(--ssw-accent);
693
- background: var(--ssw-accent-light);
694
- filter: none;
695
- }
696
-
697
- .ssw-btn-outline .ssw-action-btn:disabled {
698
- background: transparent;
699
- border-color: var(--ssw-border);
700
- color: var(--ssw-text-muted);
701
- }
702
-
703
- .ssw-btn-outline .ssw-action-btn.ssw-secondary {
704
- background: transparent;
705
- border: 1px solid var(--ssw-border);
706
- color: var(--ssw-text-secondary);
707
- }
708
-
709
- .ssw-btn-outline .ssw-action-btn.ssw-secondary:hover:not(:disabled) {
710
- border-color: var(--ssw-border-hover);
711
- color: var(--ssw-text-primary);
712
- background: var(--ssw-bg-hover);
713
- }