@sdkrouter/payments 0.1.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/dist/index.mjs ADDED
@@ -0,0 +1,933 @@
1
+ "use client";
2
+ import './chunk-MCTTQUAM.mjs';
3
+ import { PaymentProvider, PaymentContent, STYLE_ID } from './chunk-N3LT7RRW.mjs';
4
+ export { CustomerPaymentHistory, MAX_AMOUNT_USD, MIN_AMOUNT_USD, PaymentContent, PaymentForm, PaymentInfo, PaymentProvider, PaymentStatus, useCustomerPayments, usePayment, usePaymentIdentity, usePaymentLink } from './chunk-N3LT7RRW.mjs';
5
+ export { API as PaymentsAPI, createPaymentsApi } from './chunk-4QQBPIIT.mjs';
6
+ import { lazy, useState, useEffect, Suspense } from 'react';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+
9
+ // src/styles/theme.ts
10
+ var lightVars = `
11
+ --sdkr-pay-bg: #ffffff;
12
+ --sdkr-pay-bg-subtle: #f8fafc;
13
+ --sdkr-pay-fg: #1e293b;
14
+ --sdkr-pay-fg-muted: #64748b;
15
+ --sdkr-pay-border: #e2e8f0;
16
+ --sdkr-pay-primary: #3b82f6;
17
+ --sdkr-pay-primary-hover: #2563eb;
18
+ --sdkr-pay-primary-fg: #ffffff;
19
+ --sdkr-pay-error: #ef4444;
20
+ --sdkr-pay-error-bg: #fef2f2;
21
+ --sdkr-pay-success: #22c55e;
22
+ --sdkr-pay-success-bg: #f0fdf4;
23
+ --sdkr-pay-input-bg: #ffffff;
24
+ --sdkr-pay-input-border: #d1d5db;
25
+ --sdkr-pay-input-focus: #3b82f6;
26
+ --sdkr-pay-badge-bg: #eff6ff;
27
+ --sdkr-pay-badge-fg: #1d4ed8;
28
+ --sdkr-pay-card-shadow: 0 1px 3px rgba(0,0,0,0.1), 0 1px 2px rgba(0,0,0,0.06);
29
+ --sdkr-pay-qr-bg: #ffffff;
30
+ --sdkr-pay-qr-fg: #1e293b;
31
+ `;
32
+ var darkVars = `
33
+ --sdkr-pay-bg: #141414;
34
+ --sdkr-pay-bg-subtle: #0a0a0a;
35
+ --sdkr-pay-fg: #fafafa;
36
+ --sdkr-pay-fg-muted: #a1a1aa;
37
+ --sdkr-pay-border: #262626;
38
+ --sdkr-pay-primary: #3b82f6;
39
+ --sdkr-pay-primary-hover: #60a5fa;
40
+ --sdkr-pay-primary-fg: #ffffff;
41
+ --sdkr-pay-error: #f87171;
42
+ --sdkr-pay-error-bg: #1c1917;
43
+ --sdkr-pay-success: #4ade80;
44
+ --sdkr-pay-success-bg: #0a1a0f;
45
+ --sdkr-pay-input-bg: #1a1a1a;
46
+ --sdkr-pay-input-border: #333333;
47
+ --sdkr-pay-input-focus: #3b82f6;
48
+ --sdkr-pay-badge-bg: #1e293b;
49
+ --sdkr-pay-badge-fg: #60a5fa;
50
+ --sdkr-pay-card-shadow: 0 1px 3px rgba(0,0,0,0.3), 0 1px 2px rgba(0,0,0,0.2);
51
+ --sdkr-pay-qr-bg: #1a1a1a;
52
+ --sdkr-pay-qr-fg: #fafafa;
53
+ `;
54
+ var sel = ".sdkr-pay";
55
+ var darkSel = `.dark ${sel}`;
56
+ var darkAttrSel = `[data-theme="dark"] ${sel}`;
57
+ var lightSel = `.light ${sel}`;
58
+ var lightAttrSel = `[data-theme="light"] ${sel}`;
59
+ var darkMediaSel = `:root:not([data-theme="light"]):not(.light) ${sel}`;
60
+ var theme = `
61
+ /* Light (default) */
62
+ ${sel} { ${lightVars} }
63
+
64
+ /* Dark: system (only when no explicit theme) */
65
+ @media (prefers-color-scheme: dark) {
66
+ ${darkMediaSel} { ${darkVars} }
67
+ }
68
+
69
+ /* Dark: explicit */
70
+ ${darkSel},
71
+ ${darkAttrSel} { ${darkVars} }
72
+
73
+ /* Light: explicit (overrides system dark) */
74
+ ${lightSel},
75
+ ${lightAttrSel} { ${lightVars} }
76
+ `;
77
+
78
+ // src/styles/base.ts
79
+ var base = `
80
+ /* Base */
81
+ .sdkr-pay {
82
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
83
+ color: var(--sdkr-pay-fg);
84
+ background: var(--sdkr-pay-bg);
85
+ line-height: 1.5;
86
+ box-sizing: border-box;
87
+ -webkit-font-smoothing: antialiased;
88
+ }
89
+
90
+ .sdkr-pay *, .sdkr-pay *::before, .sdkr-pay *::after {
91
+ box-sizing: border-box;
92
+ }
93
+
94
+ /* Page layout */
95
+ .sdkr-pay-page {
96
+ min-height: 100vh;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ padding: 24px;
101
+ background: var(--sdkr-pay-bg-subtle);
102
+ }
103
+
104
+ .sdkr-pay-card {
105
+ width: 100%;
106
+ max-width: 440px;
107
+ background: var(--sdkr-pay-bg);
108
+ border: 1px solid var(--sdkr-pay-border);
109
+ border-radius: 12px;
110
+ box-shadow: var(--sdkr-pay-card-shadow);
111
+ overflow: hidden;
112
+ }
113
+
114
+ .sdkr-pay-widget {
115
+ width: 100%;
116
+ max-width: 440px;
117
+ }
118
+
119
+ .sdkr-pay-content {
120
+ animation: sdkr-pay-fade-in 0.2s ease-out;
121
+ }
122
+
123
+ .sdkr-pay-separator {
124
+ height: 1px;
125
+ background: var(--sdkr-pay-border);
126
+ margin: 0;
127
+ border: none;
128
+ }
129
+
130
+ /* Loading */
131
+ .sdkr-pay-loading {
132
+ display: flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ padding: 48px;
136
+ color: var(--sdkr-pay-fg-muted);
137
+ }
138
+
139
+ .sdkr-pay-spinner {
140
+ width: 20px;
141
+ height: 20px;
142
+ border: 2px solid var(--sdkr-pay-border);
143
+ border-top-color: var(--sdkr-pay-primary);
144
+ border-radius: 50%;
145
+ animation: sdkr-pay-spin 0.6s linear infinite;
146
+ }
147
+
148
+ /* Error page */
149
+ .sdkr-pay-error-page {
150
+ display: flex;
151
+ flex-direction: column;
152
+ align-items: center;
153
+ gap: 12px;
154
+ padding: 48px 24px;
155
+ text-align: center;
156
+ }
157
+
158
+ .sdkr-pay-error-text {
159
+ font-size: 14px;
160
+ color: var(--sdkr-pay-fg-muted);
161
+ margin: 0;
162
+ }
163
+
164
+ /* Powered by */
165
+ .sdkr-pay-powered {
166
+ text-align: center;
167
+ padding: 12px;
168
+ font-size: 11px;
169
+ color: var(--sdkr-pay-fg-muted);
170
+ }
171
+
172
+ .sdkr-pay-powered a {
173
+ color: var(--sdkr-pay-fg-muted);
174
+ text-decoration: none;
175
+ }
176
+
177
+ .sdkr-pay-powered a:hover {
178
+ text-decoration: underline;
179
+ }
180
+
181
+ /* Keyframes */
182
+ @keyframes sdkr-pay-spin {
183
+ to { transform: rotate(360deg); }
184
+ }
185
+
186
+ @keyframes sdkr-pay-fade-in {
187
+ from { opacity: 0; }
188
+ to { opacity: 1; }
189
+ }
190
+
191
+ @keyframes sdkr-pay-slide-up {
192
+ from { opacity: 0; transform: translateY(8px); }
193
+ to { opacity: 1; transform: translateY(0); }
194
+ }
195
+
196
+ @keyframes sdkr-blink {
197
+ 0%, 100% { opacity: 1; }
198
+ 50% { opacity: 0.5; }
199
+ }
200
+
201
+ @keyframes sdkr-pulse {
202
+ 0%, 100% { opacity: 0.3; transform: scale(0.8); }
203
+ 50% { opacity: 1; transform: scale(1.2); }
204
+ }
205
+ `;
206
+
207
+ // src/styles/form.ts
208
+ var form = `
209
+ /* Info section */
210
+ .sdkr-pay-info {
211
+ padding: 24px 24px 0;
212
+ }
213
+
214
+ .sdkr-pay-info-icon {
215
+ width: 40px;
216
+ height: 40px;
217
+ border-radius: 10px;
218
+ background: var(--sdkr-pay-badge-bg);
219
+ color: var(--sdkr-pay-badge-fg);
220
+ display: flex;
221
+ align-items: center;
222
+ justify-content: center;
223
+ margin-bottom: 12px;
224
+ }
225
+
226
+ .sdkr-pay-title {
227
+ font-size: 20px;
228
+ font-weight: 600;
229
+ margin: 0 0 4px;
230
+ color: var(--sdkr-pay-fg);
231
+ letter-spacing: -0.01em;
232
+ }
233
+
234
+ .sdkr-pay-description {
235
+ font-size: 14px;
236
+ color: var(--sdkr-pay-fg-muted);
237
+ margin: 0 0 16px;
238
+ white-space: pre-wrap;
239
+ line-height: 1.5;
240
+ }
241
+
242
+ .sdkr-pay-amount-badge {
243
+ display: inline-flex;
244
+ align-items: baseline;
245
+ gap: 6px;
246
+ padding: 8px 14px;
247
+ background: var(--sdkr-pay-badge-bg);
248
+ border-radius: 10px;
249
+ margin-bottom: 16px;
250
+ }
251
+
252
+ .sdkr-pay-amount-value {
253
+ font-size: 20px;
254
+ font-weight: 700;
255
+ color: var(--sdkr-pay-badge-fg);
256
+ letter-spacing: -0.02em;
257
+ }
258
+
259
+ .sdkr-pay-amount-currency {
260
+ font-size: 13px;
261
+ font-weight: 500;
262
+ color: var(--sdkr-pay-fg-muted);
263
+ }
264
+
265
+ /* Form */
266
+ .sdkr-pay-form {
267
+ padding: 20px 24px 24px;
268
+ }
269
+
270
+ .sdkr-pay-field {
271
+ margin-bottom: 16px;
272
+ }
273
+
274
+ .sdkr-pay-label {
275
+ display: block;
276
+ font-size: 13px;
277
+ font-weight: 500;
278
+ color: var(--sdkr-pay-fg);
279
+ margin-bottom: 6px;
280
+ }
281
+
282
+ .sdkr-pay-label-optional {
283
+ color: var(--sdkr-pay-fg-muted);
284
+ font-weight: 400;
285
+ }
286
+
287
+ .sdkr-pay-input {
288
+ width: 100%;
289
+ padding: 10px 12px;
290
+ font-size: 16px;
291
+ line-height: 1.5;
292
+ color: var(--sdkr-pay-fg);
293
+ background: var(--sdkr-pay-input-bg);
294
+ border: 1px solid var(--sdkr-pay-input-border);
295
+ border-radius: 8px;
296
+ outline: none;
297
+ transition: border-color 0.15s, box-shadow 0.15s;
298
+ -webkit-appearance: none;
299
+ }
300
+
301
+ .sdkr-pay-input:focus {
302
+ border-color: var(--sdkr-pay-input-focus);
303
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
304
+ }
305
+
306
+ .sdkr-pay-input::placeholder {
307
+ color: var(--sdkr-pay-fg-muted);
308
+ }
309
+
310
+ .sdkr-pay-input-error {
311
+ border-color: var(--sdkr-pay-error);
312
+ }
313
+
314
+ .sdkr-pay-input-error:focus {
315
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
316
+ }
317
+
318
+ .sdkr-pay-amount-prefix {
319
+ position: relative;
320
+ }
321
+
322
+ .sdkr-pay-amount-prefix .sdkr-pay-input {
323
+ padding-left: 28px;
324
+ }
325
+
326
+ .sdkr-pay-amount-prefix::before {
327
+ content: '$';
328
+ position: absolute;
329
+ left: 12px;
330
+ top: 50%;
331
+ transform: translateY(-50%);
332
+ color: var(--sdkr-pay-fg-muted);
333
+ font-size: 14px;
334
+ pointer-events: none;
335
+ }
336
+
337
+ .sdkr-pay-field-error {
338
+ display: flex;
339
+ align-items: center;
340
+ gap: 4px;
341
+ color: var(--sdkr-pay-error);
342
+ font-size: 12px;
343
+ margin-top: 4px;
344
+ }
345
+
346
+ .sdkr-pay-error {
347
+ display: flex;
348
+ align-items: center;
349
+ gap: 8px;
350
+ padding: 12px 16px;
351
+ background: var(--sdkr-pay-error-bg);
352
+ color: var(--sdkr-pay-error);
353
+ border-radius: 8px;
354
+ font-size: 14px;
355
+ margin-bottom: 16px;
356
+ }
357
+
358
+ /* Button */
359
+ .sdkr-pay-btn {
360
+ width: 100%;
361
+ padding: 12px 20px;
362
+ font-size: 15px;
363
+ font-weight: 600;
364
+ color: var(--sdkr-pay-primary-fg);
365
+ background: var(--sdkr-pay-primary);
366
+ border: none;
367
+ border-radius: 10px;
368
+ cursor: pointer;
369
+ transition: background 0.15s, opacity 0.15s, transform 0.1s;
370
+ }
371
+
372
+ .sdkr-pay-btn:hover:not(:disabled) {
373
+ background: var(--sdkr-pay-primary-hover);
374
+ }
375
+
376
+ .sdkr-pay-btn:active:not(:disabled) {
377
+ transform: scale(0.98);
378
+ }
379
+
380
+ .sdkr-pay-btn:disabled {
381
+ opacity: 0.5;
382
+ cursor: not-allowed;
383
+ }
384
+
385
+ .sdkr-pay-btn-content {
386
+ display: inline-flex;
387
+ align-items: center;
388
+ gap: 8px;
389
+ }
390
+
391
+ .sdkr-pay-btn-spinner {
392
+ animation: sdkr-pay-spin 0.8s linear infinite;
393
+ }
394
+
395
+ .sdkr-pay-btn--ghost {
396
+ display: inline-flex;
397
+ align-items: center;
398
+ justify-content: center;
399
+ gap: 6px;
400
+ background: transparent;
401
+ color: var(--sdkr-pay-fg-muted);
402
+ border: none;
403
+ font-size: 14px;
404
+ font-weight: 500;
405
+ cursor: pointer;
406
+ padding: 8px 16px;
407
+ border-radius: 8px;
408
+ transition: color 0.15s, background 0.15s;
409
+ width: auto;
410
+ }
411
+
412
+ .sdkr-pay-btn--ghost:hover {
413
+ color: var(--sdkr-pay-fg);
414
+ background: var(--sdkr-pay-bg-subtle);
415
+ }
416
+ `;
417
+
418
+ // src/styles/status.ts
419
+ var status = `
420
+ /* Status */
421
+ .sdkr-pay-status {
422
+ padding: 24px;
423
+ }
424
+
425
+ .sdkr-pay-status-header {
426
+ text-align: center;
427
+ margin-bottom: 20px;
428
+ }
429
+
430
+ .sdkr-pay-status-icon {
431
+ width: 48px;
432
+ height: 48px;
433
+ border-radius: 50%;
434
+ display: inline-flex;
435
+ align-items: center;
436
+ justify-content: center;
437
+ margin-bottom: 12px;
438
+ }
439
+
440
+ .sdkr-pay-status-icon--waiting {
441
+ background: var(--sdkr-pay-badge-bg);
442
+ color: var(--sdkr-pay-badge-fg);
443
+ }
444
+
445
+ .sdkr-pay-status-icon--success {
446
+ background: var(--sdkr-pay-success-bg);
447
+ color: var(--sdkr-pay-success);
448
+ }
449
+
450
+ .sdkr-pay-status-icon--error {
451
+ background: var(--sdkr-pay-error-bg);
452
+ color: var(--sdkr-pay-error);
453
+ }
454
+
455
+ .sdkr-pay-status-icon--paid {
456
+ background: #22c55e;
457
+ color: white;
458
+ }
459
+
460
+ .sdkr-pay-status-title {
461
+ font-size: 18px;
462
+ font-weight: 600;
463
+ margin: 0 0 4px;
464
+ letter-spacing: -0.01em;
465
+ }
466
+
467
+ .sdkr-pay-status-subtitle {
468
+ font-size: 13px;
469
+ color: var(--sdkr-pay-fg-muted);
470
+ margin: 0;
471
+ }
472
+
473
+ .sdkr-pay-status-actions {
474
+ padding: 8px 24px 16px;
475
+ text-align: center;
476
+ }
477
+
478
+ /* Hero amount */
479
+ .sdkr-pay-hero-amount {
480
+ display: flex;
481
+ align-items: center;
482
+ justify-content: center;
483
+ gap: 8px;
484
+ padding: 16px;
485
+ margin: 0 24px 16px;
486
+ background: var(--sdkr-pay-badge-bg);
487
+ border-radius: 12px;
488
+ }
489
+
490
+ .sdkr-pay-hero-amount-icon {
491
+ color: var(--sdkr-pay-badge-fg);
492
+ }
493
+
494
+ .sdkr-pay-hero-amount-value {
495
+ font-size: 24px;
496
+ font-weight: 700;
497
+ letter-spacing: -0.02em;
498
+ font-variant-numeric: tabular-nums;
499
+ color: var(--sdkr-pay-fg);
500
+ }
501
+
502
+ .sdkr-pay-hero-amount-coin {
503
+ font-size: 14px;
504
+ font-weight: 500;
505
+ color: var(--sdkr-pay-fg-muted);
506
+ }
507
+
508
+ /* QR */
509
+ .sdkr-pay-qr {
510
+ display: flex;
511
+ justify-content: center;
512
+ padding: 16px;
513
+ }
514
+
515
+ .sdkr-pay-qr svg {
516
+ border-radius: 12px;
517
+ padding: 12px;
518
+ background: var(--sdkr-pay-qr-bg);
519
+ }
520
+
521
+ /* Payment details */
522
+ .sdkr-pay-detail {
523
+ padding: 12px 16px;
524
+ background: var(--sdkr-pay-bg-subtle);
525
+ border: 1px solid var(--sdkr-pay-border);
526
+ border-radius: 8px;
527
+ margin-bottom: 12px;
528
+ }
529
+
530
+ .sdkr-pay-detail-label {
531
+ font-size: 11px;
532
+ font-weight: 500;
533
+ text-transform: uppercase;
534
+ letter-spacing: 0.5px;
535
+ color: var(--sdkr-pay-fg-muted);
536
+ margin-bottom: 4px;
537
+ }
538
+
539
+ .sdkr-pay-detail-value {
540
+ font-size: 14px;
541
+ font-weight: 500;
542
+ word-break: break-all;
543
+ color: var(--sdkr-pay-fg);
544
+ }
545
+
546
+ .sdkr-pay-detail-mono {
547
+ font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
548
+ font-size: 13px;
549
+ }
550
+
551
+ .sdkr-pay-detail-copyable {
552
+ display: flex;
553
+ align-items: center;
554
+ gap: 8px;
555
+ }
556
+
557
+ .sdkr-pay-detail-copyable span {
558
+ flex: 1;
559
+ min-width: 0;
560
+ word-break: break-all;
561
+ }
562
+
563
+ .sdkr-pay-copy-btn {
564
+ flex-shrink: 0;
565
+ width: 32px;
566
+ height: 32px;
567
+ border: 1px solid var(--sdkr-pay-border);
568
+ border-radius: 8px;
569
+ background: var(--sdkr-pay-bg);
570
+ color: var(--sdkr-pay-fg-muted);
571
+ cursor: pointer;
572
+ display: flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ transition: all 0.15s;
576
+ }
577
+
578
+ .sdkr-pay-copy-btn:hover {
579
+ background: var(--sdkr-pay-primary);
580
+ color: white;
581
+ border-color: var(--sdkr-pay-primary);
582
+ }
583
+
584
+ .sdkr-pay-copy-btn:active {
585
+ transform: scale(0.92);
586
+ }
587
+
588
+ .sdkr-pay-network-badge {
589
+ display: inline-block;
590
+ font-size: 11px;
591
+ font-weight: 500;
592
+ padding: 1px 6px;
593
+ border-radius: 4px;
594
+ background: var(--sdkr-pay-bg-subtle);
595
+ color: var(--sdkr-pay-fg-muted);
596
+ margin-left: 4px;
597
+ }
598
+
599
+ /* Countdown */
600
+ .sdkr-pay-countdown {
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ gap: 8px;
605
+ padding: 10px 16px;
606
+ margin: 8px 0;
607
+ border-radius: 8px;
608
+ background: var(--sdkr-pay-bg-subtle);
609
+ }
610
+
611
+ .sdkr-pay-countdown-icon {
612
+ color: var(--sdkr-pay-fg-muted);
613
+ }
614
+
615
+ .sdkr-pay-countdown-value {
616
+ font-size: 20px;
617
+ font-weight: 700;
618
+ font-variant-numeric: tabular-nums;
619
+ color: var(--sdkr-pay-fg);
620
+ }
621
+
622
+ .sdkr-pay-countdown--urgent .sdkr-pay-countdown-value {
623
+ color: var(--sdkr-pay-error);
624
+ animation: sdkr-blink 1s ease-in-out infinite;
625
+ }
626
+
627
+ /* Confirmations */
628
+ .sdkr-pay-confirmations {
629
+ display: flex;
630
+ align-items: center;
631
+ justify-content: center;
632
+ gap: 6px;
633
+ font-size: 13px;
634
+ color: var(--sdkr-pay-primary);
635
+ padding: 8px;
636
+ font-variant-numeric: tabular-nums;
637
+ }
638
+
639
+ .sdkr-pay-confirmations-icon {
640
+ animation: sdkr-pay-spin 1.5s linear infinite;
641
+ }
642
+
643
+ /* Polling */
644
+ .sdkr-pay-polling {
645
+ text-align: center;
646
+ font-size: 13px;
647
+ color: var(--sdkr-pay-primary);
648
+ padding: 8px;
649
+ display: flex;
650
+ align-items: center;
651
+ justify-content: center;
652
+ gap: 6px;
653
+ }
654
+
655
+ .sdkr-pay-polling-dot {
656
+ width: 8px;
657
+ height: 8px;
658
+ border-radius: 50%;
659
+ background: var(--sdkr-pay-primary);
660
+ animation: sdkr-pulse 1.5s ease-in-out infinite;
661
+ }
662
+
663
+ /* Warning */
664
+ .sdkr-pay-warning {
665
+ display: flex;
666
+ align-items: center;
667
+ justify-content: center;
668
+ gap: 6px;
669
+ font-size: 12px;
670
+ color: var(--sdkr-pay-fg-muted);
671
+ padding: 8px 16px;
672
+ margin: 8px 0;
673
+ border-radius: 8px;
674
+ background: var(--sdkr-pay-bg-subtle);
675
+ }
676
+
677
+ /* History */
678
+ .sdkr-pay-history {
679
+ padding: 24px;
680
+ }
681
+
682
+ .sdkr-pay-history-title {
683
+ font-size: 13px;
684
+ font-weight: 600;
685
+ text-transform: uppercase;
686
+ letter-spacing: 0.5px;
687
+ color: var(--sdkr-pay-fg-muted);
688
+ margin: 0 0 12px;
689
+ }
690
+
691
+ .sdkr-pay-history-item {
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: space-between;
695
+ padding: 12px 0;
696
+ border-bottom: 1px solid var(--sdkr-pay-border);
697
+ }
698
+
699
+ .sdkr-pay-history-item:last-child {
700
+ border-bottom: none;
701
+ }
702
+
703
+ .sdkr-pay-history-amount {
704
+ font-size: 14px;
705
+ font-weight: 600;
706
+ color: var(--sdkr-pay-fg);
707
+ }
708
+
709
+ .sdkr-pay-history-status {
710
+ display: inline-flex;
711
+ align-items: center;
712
+ padding: 2px 8px;
713
+ font-size: 12px;
714
+ font-weight: 500;
715
+ border-radius: 6px;
716
+ }
717
+
718
+ .sdkr-pay-history-status--completed {
719
+ background: var(--sdkr-pay-success-bg);
720
+ color: var(--sdkr-pay-success);
721
+ }
722
+
723
+ .sdkr-pay-history-status--pending {
724
+ background: var(--sdkr-pay-badge-bg);
725
+ color: var(--sdkr-pay-badge-fg);
726
+ }
727
+
728
+ .sdkr-pay-history-status--failed {
729
+ background: var(--sdkr-pay-error-bg);
730
+ color: var(--sdkr-pay-error);
731
+ }
732
+
733
+ .sdkr-pay-history-date {
734
+ font-size: 13px;
735
+ color: var(--sdkr-pay-fg-muted);
736
+ }
737
+ `;
738
+
739
+ // src/styles/modal.ts
740
+ var modal = `
741
+ /* Modal overlay */
742
+ .sdkr-pay-overlay {
743
+ position: fixed;
744
+ inset: 0;
745
+ background: rgba(0, 0, 0, 0.5);
746
+ display: flex;
747
+ align-items: center;
748
+ justify-content: center;
749
+ z-index: 9999;
750
+ padding: 24px;
751
+ animation: sdkr-pay-fade-in 0.15s ease-out;
752
+ }
753
+
754
+ .sdkr-pay-overlay .sdkr-pay-card {
755
+ animation: sdkr-pay-slide-up 0.2s ease-out;
756
+ }
757
+
758
+ /* Modal close */
759
+ .sdkr-pay-close {
760
+ position: absolute;
761
+ top: 12px;
762
+ right: 12px;
763
+ width: 28px;
764
+ height: 28px;
765
+ display: flex;
766
+ align-items: center;
767
+ justify-content: center;
768
+ background: none;
769
+ border: none;
770
+ color: var(--sdkr-pay-fg-muted);
771
+ cursor: pointer;
772
+ border-radius: 6px;
773
+ font-size: 18px;
774
+ line-height: 1;
775
+ transition: background 0.15s;
776
+ }
777
+
778
+ .sdkr-pay-close:hover {
779
+ background: var(--sdkr-pay-bg-subtle);
780
+ }
781
+ `;
782
+
783
+ // src/styles/mobile.ts
784
+ var mobile = `
785
+ /* \u2500\u2500 Mobile \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
786
+
787
+ .sdkr-pay--mobile .sdkr-pay-page {
788
+ padding: 0;
789
+ align-items: stretch;
790
+ min-height: 100dvh;
791
+ }
792
+
793
+ .sdkr-pay--mobile .sdkr-pay-card {
794
+ max-width: none;
795
+ border: none;
796
+ border-radius: 0;
797
+ box-shadow: none;
798
+ min-height: 100dvh;
799
+ display: flex;
800
+ flex-direction: column;
801
+ }
802
+
803
+ .sdkr-pay--mobile .sdkr-pay-content {
804
+ flex: 1;
805
+ display: flex;
806
+ flex-direction: column;
807
+ }
808
+
809
+ .sdkr-pay--mobile .sdkr-pay-status {
810
+ flex: 1;
811
+ display: flex;
812
+ flex-direction: column;
813
+ }
814
+
815
+ .sdkr-pay--mobile .sdkr-pay-status-actions {
816
+ margin-top: auto;
817
+ padding-bottom: env(safe-area-inset-bottom, 16px);
818
+ }
819
+
820
+ .sdkr-pay--mobile .sdkr-pay-form {
821
+ flex: 1;
822
+ display: flex;
823
+ flex-direction: column;
824
+ }
825
+
826
+ .sdkr-pay--mobile .sdkr-pay-form .sdkr-pay-btn {
827
+ margin-top: auto;
828
+ }
829
+
830
+ .sdkr-pay--mobile .sdkr-pay-powered {
831
+ padding-bottom: env(safe-area-inset-bottom, 12px);
832
+ }
833
+
834
+ .sdkr-pay--mobile .sdkr-pay-qr svg {
835
+ width: 180px;
836
+ height: 180px;
837
+ }
838
+
839
+ .sdkr-pay--mobile .sdkr-pay-detail-value {
840
+ font-size: 13px;
841
+ }
842
+
843
+ .sdkr-pay--mobile .sdkr-pay-input {
844
+ font-size: 16px;
845
+ }
846
+
847
+ /* CSS-only fallback for no-JS mobile */
848
+ @media (max-width: 767px) {
849
+ .sdkr-pay-page {
850
+ padding: 0;
851
+ align-items: stretch;
852
+ }
853
+ .sdkr-pay-card {
854
+ max-width: none;
855
+ border: none;
856
+ border-radius: 0;
857
+ box-shadow: none;
858
+ min-height: 100dvh;
859
+ }
860
+ }
861
+ `;
862
+
863
+ // src/styles/index.ts
864
+ var styles = [theme, base, form, status, modal, mobile].join("\n");
865
+
866
+ // src/hooks/useInjectStyles.ts
867
+ var refCount = 0;
868
+ function useInjectStyles() {
869
+ useEffect(() => {
870
+ refCount++;
871
+ if (!document.getElementById(STYLE_ID)) {
872
+ const style = document.createElement("style");
873
+ style.id = STYLE_ID;
874
+ style.textContent = styles;
875
+ document.head.appendChild(style);
876
+ }
877
+ return () => {
878
+ refCount--;
879
+ if (refCount === 0) {
880
+ document.getElementById(STYLE_ID)?.remove();
881
+ }
882
+ };
883
+ }, []);
884
+ }
885
+ var MOBILE_BREAKPOINT = 768;
886
+ function useMobile() {
887
+ const [isMobile, setIsMobile] = useState(false);
888
+ useEffect(() => {
889
+ const mq = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
890
+ setIsMobile(mq.matches);
891
+ const handler = (e) => setIsMobile(e.matches);
892
+ mq.addEventListener("change", handler);
893
+ return () => mq.removeEventListener("change", handler);
894
+ }, []);
895
+ return isMobile;
896
+ }
897
+ var PaymentContent2 = lazy(
898
+ () => import('./PaymentContent-HEOBMWSU.mjs').then((m) => ({ default: m.PaymentContent }))
899
+ );
900
+ function PaymentLoader() {
901
+ return /* @__PURE__ */ jsx("div", { className: "sdkr-pay-loading", style: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", padding: 48, gap: 12 }, children: /* @__PURE__ */ jsx("span", { className: "sdkr-pay-spinner" }) });
902
+ }
903
+ function PaymentPage(props) {
904
+ useInjectStyles();
905
+ const isMobile = useMobile();
906
+ const rootClass = isMobile ? "sdkr-pay sdkr-pay--mobile" : "sdkr-pay";
907
+ return /* @__PURE__ */ jsx(PaymentProvider, { ...props, children: /* @__PURE__ */ jsx("div", { className: rootClass, children: /* @__PURE__ */ jsx("div", { className: "sdkr-pay-page", children: /* @__PURE__ */ jsxs("div", { className: "sdkr-pay-card", children: [
908
+ /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(PaymentLoader, {}), children: /* @__PURE__ */ jsx(PaymentContent2, {}) }),
909
+ /* @__PURE__ */ jsxs("div", { className: "sdkr-pay-powered", children: [
910
+ "Powered by ",
911
+ /* @__PURE__ */ jsx("a", { href: "https://sdkrouter.com", target: "_blank", rel: "noopener noreferrer", children: "SDKRouter" })
912
+ ] })
913
+ ] }) }) }) });
914
+ }
915
+ function PaymentWidget(props) {
916
+ const { mode = "inline", buttonText = "Pay Now", ...config } = props;
917
+ useInjectStyles();
918
+ const [isOpen, setIsOpen] = useState(false);
919
+ const card = /* @__PURE__ */ jsxs("div", { className: "sdkr-pay-card", style: { position: "relative" }, children: [
920
+ mode === "button" && /* @__PURE__ */ jsx("button", { className: "sdkr-pay-close", onClick: () => setIsOpen(false), children: "\xD7" }),
921
+ /* @__PURE__ */ jsx(PaymentContent, {})
922
+ ] });
923
+ return /* @__PURE__ */ jsx(PaymentProvider, { ...config, children: /* @__PURE__ */ jsx("div", { className: "sdkr-pay", children: mode === "button" ? /* @__PURE__ */ jsxs(Fragment, { children: [
924
+ /* @__PURE__ */ jsx("button", { className: "sdkr-pay-btn", onClick: () => setIsOpen(true), children: buttonText }),
925
+ isOpen && /* @__PURE__ */ jsx("div", { className: "sdkr-pay-overlay", onClick: (e) => {
926
+ if (e.target === e.currentTarget) setIsOpen(false);
927
+ }, children: card })
928
+ ] }) : /* @__PURE__ */ jsx("div", { className: "sdkr-pay-widget", children: card }) }) });
929
+ }
930
+
931
+ export { PaymentPage, PaymentWidget, styles, useMobile };
932
+ //# sourceMappingURL=index.mjs.map
933
+ //# sourceMappingURL=index.mjs.map