@product7/feedback-sdk 1.2.7 → 1.3.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.
@@ -1,1381 +1,7 @@
1
- export const CSS_STYLES = `
2
- .feedback-widget {
3
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', Oxygen, Ubuntu, Cantarell, sans-serif;
4
- font-size: 14px;
5
- line-height: 1.4;
6
- z-index: 999999;
7
- box-sizing: border-box;
8
- }
1
+ import { baseStyles } from './base.js';
2
+ import { changelogStyles } from './changelog.js';
3
+ import { feedbackStyles } from './feedback.js';
9
4
 
10
- .feedback-widget *,
11
- .feedback-widget *::before,
12
- .feedback-widget *::after {
13
- box-sizing: border-box;
14
- }
5
+ export const CSS_STYLES = baseStyles + feedbackStyles + changelogStyles;
15
6
 
16
- .feedback-widget-button {
17
- position: fixed;
18
- z-index: 999999;
19
- }
20
-
21
- .feedback-widget-button.position-bottom-right {
22
- bottom: 20px;
23
- right: 20px;
24
- }
25
-
26
- .feedback-widget-button.position-bottom-left {
27
- bottom: 20px;
28
- left: 20px;
29
- }
30
-
31
- .feedback-widget-button.position-top-right {
32
- top: 20px;
33
- right: 20px;
34
- }
35
-
36
- .feedback-widget-button.position-top-left {
37
- top: 20px;
38
- left: 20px;
39
- }
40
-
41
- .feedback-trigger-btn {
42
- position: relative;
43
- display: flex;
44
- align-items: center;
45
- justify-content: center;
46
- gap: 8px;
47
- height: 48px;
48
- overflow: visible;
49
- border-radius: 9999px;
50
- border: none;
51
- padding: 12px 20px;
52
- font-size: 14px;
53
- font-weight: 500;
54
- font-family: inherit;
55
- cursor: pointer;
56
- transition: all 0.3s ease;
57
- color: white;
58
- background: #155EEF;
59
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
60
- width: fit-content;
61
- }
62
-
63
- .feedback-trigger-btn:hover:not(:disabled) {
64
- transform: translateY(-2px);
65
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
66
- }
67
-
68
- .feedback-trigger-btn:disabled {
69
- opacity: 0.7;
70
- cursor: not-allowed;
71
- }
72
-
73
- .feedback-trigger-btn:focus-visible {
74
- outline: 2px solid #155EEF;
75
- outline-offset: 2px;
76
- }
77
-
78
- .feedback-icon {
79
- flex-shrink: 0;
80
- }
81
-
82
- .feedback-minimize-icon,
83
- .feedback-expand-icon {
84
- position: absolute;
85
- top: -6px;
86
- right: -6px;
87
- width: 24px;
88
- height: 24px;
89
- padding: 4px;
90
- display: flex;
91
- align-items: center;
92
- justify-content: center;
93
- background: white;
94
- border-radius: 50%;
95
- opacity: 0;
96
- transition: opacity 0.2s ease;
97
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
98
- cursor: pointer;
99
- display: flex;
100
- align-items: center;
101
- justify-content: center;
102
- }
103
-
104
- .feedback-minimize-icon svg,
105
- .feedback-expand-icon svg {
106
- width: 16px;
107
- height: 16px;
108
- display: block;
109
- fill: #155EEF;
110
- }
111
-
112
- /* Show minimize icon on hover when expanded */
113
- .feedback-widget-button:not(.minimized) .feedback-trigger-btn:hover .feedback-minimize-icon {
114
- opacity: 1;
115
- }
116
-
117
- /* Minimized state - just icon */
118
- .feedback-widget-button.minimized .feedback-trigger-btn {
119
- padding: 12px;
120
- width: 48px;
121
- height: 48px;
122
- justify-content: center;
123
- }
124
-
125
- .feedback-widget-button.minimized .feedback-text {
126
- display: none;
127
- }
128
-
129
- .feedback-widget-button.minimized .feedback-minimize-icon {
130
- display: none;
131
- }
132
-
133
- /* Show expand icon on hover when minimized */
134
- .feedback-widget-button.minimized .feedback-trigger-btn:hover .feedback-expand-icon {
135
- opacity: 1;
136
- }
137
-
138
- /* Side Panel Styles */
139
- .feedback-panel {
140
- position: fixed;
141
- bottom: 80px;
142
- right: 24px;
143
- width: 420px;
144
- max-height: 500px;
145
- z-index: 1000000;
146
- transform: translateX(calc(100% + 24px));
147
- transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
148
- font-family: inherit;
149
- }
150
-
151
- .feedback-panel.open {
152
- transform: translateX(0);
153
- }
154
-
155
- .feedback-panel-backdrop {
156
- position: fixed;
157
- top: 0;
158
- left: 0;
159
- right: 0;
160
- bottom: 0;
161
- background: rgba(0, 0, 0, 0.1);
162
- opacity: 0;
163
- transition: opacity 0.3s ease;
164
- pointer-events: none;
165
- z-index: 999999;
166
- }
167
-
168
- .feedback-panel-backdrop.show {
169
- opacity: 1;
170
- pointer-events: auto;
171
- }
172
-
173
- .feedback-panel-content {
174
- background: white;
175
- height: 100%;
176
- display: flex;
177
- flex-direction: column;
178
- border-radius: 16px;
179
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1),
180
- 0 10px 10px -5px rgba(0, 0, 0, 0.04),
181
- 0 0 0 1px rgba(0, 0, 0, 0.05);
182
- }
183
-
184
- .feedback-panel.theme-dark .feedback-panel-content {
185
- background: #1F2937;
186
- color: white;
187
- }
188
-
189
- .feedback-panel-header {
190
- display: flex;
191
- align-items: center;
192
- justify-content: space-between;
193
- padding: 24px;
194
- border-bottom: 1px solid #E5E7EB;
195
- flex-shrink: 0;
196
- }
197
-
198
- .feedback-panel.theme-dark .feedback-panel-header {
199
- border-bottom-color: #374151;
200
- }
201
-
202
- .feedback-panel-header h3 {
203
- margin: 0;
204
- font-size: 18px;
205
- font-weight: 600;
206
- color: #111827;
207
- }
208
-
209
- .feedback-panel.theme-dark .feedback-panel-header h3 {
210
- color: white;
211
- }
212
-
213
- .feedback-panel-close {
214
- background: none;
215
- border: none;
216
- font-size: 24px;
217
- cursor: pointer;
218
- color: #6B7280;
219
- padding: 4px;
220
- width: 32px;
221
- height: 32px;
222
- display: flex;
223
- align-items: center;
224
- justify-content: center;
225
- border-radius: 6px;
226
- transition: all 0.2s ease;
227
- }
228
-
229
- .feedback-panel-close:hover {
230
- background: #F3F4F6;
231
- color: #111827;
232
- }
233
-
234
- .feedback-panel-close:focus-visible {
235
- outline: 2px solid #155EEF;
236
- outline-offset: 2px;
237
- }
238
-
239
- .feedback-panel.theme-dark .feedback-panel-close {
240
- color: #9CA3AF;
241
- }
242
-
243
- .feedback-panel.theme-dark .feedback-panel-close:hover {
244
- background: #374151;
245
- color: white;
246
- }
247
-
248
- .feedback-panel-body {
249
- flex: 1;
250
- overflow-y: auto;
251
- padding: 24px;
252
- }
253
-
254
- .feedback-form {
255
- display: flex;
256
- flex-direction: column;
257
- height: 100%;
258
- }
259
-
260
- .feedback-form-group {
261
- display: flex;
262
- flex-direction: column;
263
- gap: 8px;
264
- margin-bottom: 20px;
265
- }
266
-
267
- .feedback-form-group:last-child {
268
- margin-bottom: 0;
269
- }
270
-
271
- .feedback-form-group label {
272
- font-size: 14px;
273
- font-weight: 500;
274
- line-height: 1.25;
275
- color: #374151;
276
- }
277
-
278
- .feedback-panel.theme-dark .feedback-form-group label {
279
- color: #D1D5DB;
280
- }
281
-
282
- .feedback-form-group input {
283
- height: 44px;
284
- width: 100%;
285
- border-radius: 8px;
286
- border: 1px solid #D1D5DB;
287
- padding: 10px 14px;
288
- font-size: 15px;
289
- font-weight: 400;
290
- line-height: 1.5;
291
- color: #1F2937;
292
- font-family: inherit;
293
- outline: none;
294
- transition: all 0.2s ease;
295
- }
296
-
297
- .feedback-form-group input::placeholder {
298
- font-size: 15px;
299
- color: #9CA3AF;
300
- }
301
-
302
- .feedback-form-group input:focus {
303
- border-color: #155EEF;
304
- box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
305
- }
306
-
307
- .feedback-form-group input:focus-visible {
308
- outline: none;
309
- }
310
-
311
- .feedback-form-group textarea {
312
- min-height: 200px;
313
- width: 100%;
314
- resize: vertical;
315
- border-radius: 8px;
316
- border: 1px solid #D1D5DB;
317
- padding: 10px 14px;
318
- font-size: 15px;
319
- font-weight: 400;
320
- line-height: 1.5;
321
- color: #1F2937;
322
- font-family: inherit;
323
- outline: none;
324
- transition: all 0.2s ease;
325
- }
326
-
327
- .feedback-form-group textarea::placeholder {
328
- font-size: 15px;
329
- color: #9CA3AF;
330
- }
331
-
332
- .feedback-form-group textarea:focus {
333
- border-color: #155EEF;
334
- box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
335
- }
336
-
337
- .feedback-form-group textarea:focus-visible {
338
- outline: none;
339
- }
340
-
341
- .feedback-panel.theme-dark .feedback-form-group input,
342
- .feedback-panel.theme-dark .feedback-form-group textarea {
343
- background: #374151;
344
- border-color: #4B5563;
345
- color: white;
346
- }
347
-
348
- .feedback-panel.theme-dark .feedback-form-group input::placeholder,
349
- .feedback-panel.theme-dark .feedback-form-group textarea::placeholder {
350
- color: #6B7280;
351
- }
352
-
353
- .feedback-btn {
354
- position: relative;
355
- display: inline-flex;
356
- align-items: center;
357
- justify-content: center;
358
- overflow: hidden;
359
- border-radius: 8px;
360
- border: none;
361
- height: 44px;
362
- padding: 10px 18px;
363
- font-size: 15px;
364
- font-weight: 500;
365
- font-family: inherit;
366
- cursor: pointer;
367
- transition: all 0.2s ease;
368
- }
369
-
370
- .feedback-btn:disabled {
371
- opacity: 0.6;
372
- cursor: not-allowed;
373
- }
374
-
375
- .feedback-btn:focus-visible {
376
- outline: 2px solid #155EEF;
377
- outline-offset: 2px;
378
- }
379
-
380
- .feedback-btn-submit {
381
- background: #155EEF;
382
- color: white;
383
- width: 100%;
384
- }
385
-
386
- .feedback-btn-submit:hover:not(:disabled) {
387
- background: #4338ca;
388
- }
389
-
390
- .feedback-btn-submit:active:not(:disabled) {
391
- background: #3730a3;
392
- }
393
-
394
- .feedback-btn-cancel {
395
- background: transparent;
396
- color: #6B7280;
397
- border: 1px solid #D1D5DB;
398
- }
399
-
400
- .feedback-btn-cancel:hover:not(:disabled) {
401
- background: #F9FAFB;
402
- border-color: #9CA3AF;
403
- color: #374151;
404
- }
405
-
406
- .feedback-panel.theme-dark .feedback-btn-cancel {
407
- color: #D1D5DB;
408
- border-color: #4B5563;
409
- }
410
-
411
- .feedback-panel.theme-dark .feedback-btn-cancel:hover:not(:disabled) {
412
- background: #374151;
413
- }
414
-
415
- .feedback-form-actions {
416
- display: flex;
417
- flex-direction: column;
418
- gap: 12px;
419
- margin-top: auto;
420
- padding-top: 24px;
421
- }
422
-
423
- .feedback-error {
424
- color: #DC2626;
425
- font-size: 14px;
426
- font-weight: 400;
427
- margin-top: 8px;
428
- padding: 12px;
429
- background: #FEE2E2;
430
- border: 1px solid #FECACA;
431
- border-radius: 8px;
432
- display: none;
433
- }
434
-
435
- .feedback-error.show {
436
- display: block;
437
- }
438
-
439
- .feedback-panel.theme-dark .feedback-error {
440
- background: #7F1D1D;
441
- border-color: #991B1B;
442
- color: #FCA5A5;
443
- }
444
-
445
- .feedback-success-notification {
446
- position: fixed;
447
- top: 24px;
448
- right: 24px;
449
- z-index: 1000002;
450
- background: white;
451
- border: 1px solid #D1FAE5;
452
- border-radius: 12px;
453
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
454
- animation: slideInRight 0.3s cubic-bezier(0.4, 0, 0.2, 1);
455
- min-width: 320px;
456
- }
457
-
458
- .feedback-success-content {
459
- display: flex;
460
- align-items: center;
461
- padding: 16px 20px;
462
- gap: 12px;
463
- }
464
-
465
- .feedback-success-icon {
466
- width: 20px;
467
- height: 20px;
468
- border-radius: 50%;
469
- background: #10B981;
470
- color: white;
471
- display: flex;
472
- align-items: center;
473
- justify-content: center;
474
- font-size: 12px;
475
- font-weight: 600;
476
- flex-shrink: 0;
477
- }
478
-
479
- .feedback-success-content span {
480
- color: #065F46;
481
- font-weight: 500;
482
- font-size: 14px;
483
- flex: 1;
484
- }
485
-
486
- .feedback-success-close {
487
- background: none;
488
- border: none;
489
- color: #6B7280;
490
- cursor: pointer;
491
- font-size: 20px;
492
- padding: 0;
493
- width: 24px;
494
- height: 24px;
495
- display: flex;
496
- align-items: center;
497
- justify-content: center;
498
- transition: all 0.2s ease;
499
- border-radius: 4px;
500
- flex-shrink: 0;
501
- }
502
-
503
- .feedback-success-close:hover {
504
- background: #F3F4F6;
505
- color: #374151;
506
- }
507
-
508
- .feedback-success-close:focus-visible {
509
- outline: 2px solid #155EEF;
510
- outline-offset: 2px;
511
- }
512
-
513
- @keyframes slideInRight {
514
- from {
515
- transform: translateX(400px);
516
- opacity: 0;
517
- }
518
- to {
519
- transform: translateX(0);
520
- opacity: 1;
521
- }
522
- }
523
-
524
- @keyframes fadeIn {
525
- from { opacity: 0; }
526
- to { opacity: 1; }
527
- }
528
-
529
- .feedback-panel-backdrop {
530
- animation: fadeIn 0.3s ease;
531
- }
532
-
533
- @media (max-width: 768px) {
534
- .feedback-panel {
535
- width: 100%;
536
- top: auto;
537
- bottom: 0;
538
- right: 0;
539
- left: 0;
540
- height: 85vh;
541
- max-height: 85vh;
542
- transform: translateY(100%);
543
- border-radius: 20px 20px 0 0;
544
- }
545
-
546
- .feedback-panel.open {
547
- transform: translateY(0);
548
- }
549
-
550
- .feedback-panel-content {
551
- border-radius: 20px 20px 0 0;
552
- }
553
-
554
- .feedback-panel-header {
555
- padding: 20px;
556
- position: relative;
557
- }
558
-
559
- .feedback-panel-header::before {
560
- content: '';
561
- position: absolute;
562
- top: 8px;
563
- left: 50%;
564
- transform: translateX(-50%);
565
- width: 40px;
566
- height: 4px;
567
- background: #D1D5DB;
568
- border-radius: 2px;
569
- }
570
-
571
- .feedback-panel.theme-dark .feedback-panel-header::before {
572
- background: #4B5563;
573
- }
574
-
575
- .feedback-panel-body {
576
- padding: 20px;
577
- }
578
-
579
- .feedback-form-group textarea {
580
- min-height: 150px;
581
- }
582
-
583
- .feedback-widget-button {
584
- bottom: 16px;
585
- right: 16px;
586
- }
587
-
588
- .feedback-widget-button.position-bottom-left {
589
- left: 16px;
590
- }
591
-
592
- .feedback-success-notification {
593
- top: 16px;
594
- right: 16px;
595
- left: 16px;
596
- min-width: auto;
597
- }
598
-
599
- .feedback-minimize-icon,
600
- .feedback-expand-icon {
601
- top: -4px;
602
- right: -4px;
603
- width: 20px;
604
- height: 20px;
605
- }
606
-
607
- .feedback-minimize-icon svg,
608
- .feedback-expand-icon svg {
609
- width: 14px;
610
- height: 14px;
611
- }
612
- }
613
-
614
- @media (prefers-reduced-motion: reduce) {
615
- .feedback-trigger-btn,
616
- .feedback-btn,
617
- .feedback-panel,
618
- .feedback-panel-backdrop,
619
- .feedback-success-notification,
620
- .feedback-minimize-icon,
621
- .feedback-expand-icon {
622
- transition: none;
623
- animation: none;
624
- }
625
- }
626
-
627
- @media print {
628
- .feedback-widget,
629
- .feedback-panel,
630
- .feedback-panel-backdrop,
631
- .feedback-success-notification {
632
- display: none !important;
633
- }
634
- }
635
-
636
- /* Changelog Widget Styles */
637
- .changelog-widget {
638
- position: fixed;
639
- z-index: 999999;
640
- }
641
-
642
- .changelog-widget.position-bottom-right {
643
- bottom: 20px;
644
- right: 20px;
645
- }
646
-
647
- .changelog-widget.position-bottom-left {
648
- bottom: 20px;
649
- left: 20px;
650
- }
651
-
652
- .changelog-widget.position-top-right {
653
- top: 20px;
654
- right: 20px;
655
- }
656
-
657
- .changelog-widget.position-top-left {
658
- top: 20px;
659
- left: 20px;
660
- }
661
-
662
- .changelog-trigger-btn {
663
- position: relative;
664
- display: flex;
665
- align-items: center;
666
- justify-content: center;
667
- gap: 8px;
668
- height: 48px;
669
- overflow: visible;
670
- border-radius: 9999px;
671
- border: none;
672
- padding: 12px 20px;
673
- font-size: 14px;
674
- font-weight: 500;
675
- font-family: inherit;
676
- cursor: pointer;
677
- transition: all 0.3s ease;
678
- color: white;
679
- background: #155EEF;
680
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
681
- width: fit-content;
682
- }
683
-
684
- .changelog-trigger-btn:hover {
685
- transform: translateY(-2px);
686
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
687
- }
688
-
689
- .changelog-trigger-btn:focus-visible {
690
- outline: 2px solid #155EEF;
691
- outline-offset: 2px;
692
- }
693
-
694
- .changelog-icon {
695
- flex-shrink: 0;
696
- }
697
-
698
- .changelog-confetti-emoji {
699
- font-size: 14px;
700
- margin-left: 2px;
701
- }
702
-
703
- .changelog-badge {
704
- position: absolute;
705
- top: -4px;
706
- right: -4px;
707
- width: 12px;
708
- height: 12px;
709
- background: #EF4444;
710
- border-radius: 50%;
711
- border: 2px solid white;
712
- }
713
-
714
- /* Confetti Animation */
715
- .changelog-confetti-container {
716
- position: fixed;
717
- top: 0;
718
- left: 0;
719
- width: 100%;
720
- height: 100%;
721
- pointer-events: none;
722
- z-index: 1000001;
723
- overflow: hidden;
724
- }
725
-
726
- .changelog-confetti {
727
- position: absolute;
728
- top: -20px;
729
- opacity: 0;
730
- animation: confettiFall 2s ease-out forwards;
731
- }
732
-
733
- @keyframes confettiFall {
734
- 0% {
735
- opacity: 1;
736
- transform: translateY(0) rotate(0deg) scale(1);
737
- }
738
- 10% {
739
- opacity: 1;
740
- }
741
- 100% {
742
- opacity: 0;
743
- transform: translateY(100vh) rotate(720deg) scale(0.5);
744
- }
745
- }
746
-
747
- /* Changelog Modal */
748
- .changelog-modal-backdrop {
749
- position: fixed;
750
- top: 0;
751
- left: 0;
752
- right: 0;
753
- bottom: 0;
754
- background: rgba(0, 0, 0, 0.5);
755
- opacity: 0;
756
- transition: opacity 0.3s ease;
757
- pointer-events: none;
758
- z-index: 999998;
759
- display: flex;
760
- align-items: center;
761
- justify-content: center;
762
- }
763
-
764
- .changelog-modal-backdrop.show {
765
- opacity: 1;
766
- pointer-events: auto;
767
- }
768
-
769
- .changelog-modal {
770
- position: fixed;
771
- top: 0;
772
- left: 0;
773
- right: 0;
774
- bottom: 0;
775
- z-index: 999999;
776
- display: flex;
777
- align-items: center;
778
- justify-content: center;
779
- padding: 20px;
780
- pointer-events: none;
781
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', Oxygen, Ubuntu, Cantarell, sans-serif;
782
- }
783
-
784
- .changelog-modal.open {
785
- pointer-events: auto;
786
- }
787
-
788
- .changelog-modal-container {
789
- position: relative;
790
- width: 100%;
791
- max-width: 580px;
792
- max-height: 90vh;
793
- background: #DBEAFE;
794
- border-radius: 24px;
795
- overflow: hidden;
796
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
797
- transform: scale(0.9) translateY(20px);
798
- opacity: 0;
799
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
800
- }
801
-
802
- .changelog-modal.open .changelog-modal-container {
803
- transform: scale(1) translateY(0);
804
- opacity: 1;
805
- }
806
-
807
- .changelog-modal.theme-dark .changelog-modal-container {
808
- background: #1E3A5F;
809
- }
810
-
811
- .changelog-modal-close {
812
- position: absolute;
813
- top: 16px;
814
- right: 16px;
815
- background: rgba(255, 255, 255, 0.9);
816
- border: none;
817
- font-size: 24px;
818
- cursor: pointer;
819
- color: #6B7280;
820
- padding: 0;
821
- width: 36px;
822
- height: 36px;
823
- display: flex;
824
- align-items: center;
825
- justify-content: center;
826
- border-radius: 50%;
827
- transition: all 0.2s ease;
828
- line-height: 1;
829
- z-index: 10;
830
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
831
- }
832
-
833
- .changelog-modal-close:hover {
834
- background: white;
835
- color: #111827;
836
- transform: scale(1.05);
837
- }
838
-
839
- .changelog-modal.theme-dark .changelog-modal-close {
840
- background: rgba(55, 65, 81, 0.9);
841
- color: #D1D5DB;
842
- }
843
-
844
- .changelog-modal.theme-dark .changelog-modal-close:hover {
845
- background: #374151;
846
- color: white;
847
- }
848
-
849
- .changelog-modal-content {
850
- overflow-y: auto;
851
- max-height: 90vh;
852
- }
853
-
854
- /* Changelog Loading */
855
- .changelog-loading {
856
- display: flex;
857
- align-items: center;
858
- justify-content: center;
859
- padding: 80px 20px;
860
- }
861
-
862
- .changelog-loading-spinner {
863
- width: 32px;
864
- height: 32px;
865
- border: 3px solid #E5E7EB;
866
- border-top-color: #155EEF;
867
- border-radius: 50%;
868
- animation: changelogSpin 0.8s linear infinite;
869
- }
870
-
871
- @keyframes changelogSpin {
872
- to {
873
- transform: rotate(360deg);
874
- }
875
- }
876
-
877
- /* Changelog Empty State */
878
- .changelog-empty {
879
- display: flex;
880
- flex-direction: column;
881
- align-items: center;
882
- justify-content: center;
883
- padding: 80px 20px;
884
- text-align: center;
885
- color: #9CA3AF;
886
- }
887
-
888
- .changelog-empty svg {
889
- margin-bottom: 16px;
890
- stroke: #D1D5DB;
891
- }
892
-
893
- .changelog-empty p {
894
- margin: 0;
895
- font-size: 15px;
896
- }
897
-
898
- /* Changelog Popup Item */
899
- .changelog-popup-item {
900
- display: flex;
901
- flex-direction: column;
902
- }
903
-
904
- .changelog-popup-image {
905
- width: 100%;
906
- padding: 24px 24px 0;
907
- }
908
-
909
- .changelog-popup-image img {
910
- width: 100%;
911
- height: auto;
912
- display: block;
913
- object-fit: cover;
914
- border-radius: 12px;
915
- border: 2px solid #155EEF;
916
- box-shadow: 0 4px 20px rgba(21, 94, 239, 0.2);
917
- }
918
-
919
- .changelog-popup-body {
920
- padding: 24px 32px 32px;
921
- text-align: center;
922
- }
923
-
924
- .changelog-popup-title {
925
- margin: 0 0 16px;
926
- font-size: 18px;
927
- font-weight: 600;
928
- line-height: 1.3;
929
- color: #111827;
930
- }
931
-
932
- .changelog-modal.theme-dark .changelog-popup-title {
933
- color: white;
934
- }
935
-
936
- .changelog-popup-description {
937
- margin: 0 0 24px;
938
- font-size: 17px;
939
- line-height: 1.6;
940
- color: #4B5563;
941
- }
942
-
943
- .changelog-modal.theme-dark .changelog-popup-description {
944
- color: #D1D5DB;
945
- }
946
-
947
- .changelog-popup-btn {
948
- display: inline-flex;
949
- align-items: center;
950
- justify-content: center;
951
- padding: 14px 32px;
952
- font-size: 16px;
953
- font-weight: 600;
954
- color: white;
955
- background: #155EEF;
956
- border: none;
957
- border-radius: 10px;
958
- cursor: pointer;
959
- transition: all 0.2s ease;
960
- }
961
-
962
- .changelog-popup-btn:hover {
963
- background: #1249CA;
964
- transform: translateY(-2px);
965
- box-shadow: 0 4px 12px rgba(21, 94, 239, 0.3);
966
- }
967
-
968
- .changelog-popup-btn:focus-visible {
969
- outline: 2px solid #155EEF;
970
- outline-offset: 2px;
971
- }
972
-
973
- /* Popup Footer with Dots and View All */
974
- .changelog-popup-footer {
975
- padding: 0 32px 24px;
976
- display: flex;
977
- flex-direction: column;
978
- align-items: center;
979
- gap: 16px;
980
- }
981
-
982
- .changelog-popup-dots {
983
- display: flex;
984
- gap: 8px;
985
- }
986
-
987
- .changelog-dot {
988
- width: 10px;
989
- height: 10px;
990
- border-radius: 50%;
991
- background: rgba(21, 94, 239, 0.3);
992
- cursor: pointer;
993
- transition: all 0.2s ease;
994
- }
995
-
996
- .changelog-dot:hover {
997
- background: rgba(21, 94, 239, 0.5);
998
- }
999
-
1000
- .changelog-dot.active {
1001
- background: #155EEF;
1002
- transform: scale(1.2);
1003
- }
1004
-
1005
- .changelog-view-all-btn {
1006
- display: inline-flex;
1007
- align-items: center;
1008
- gap: 6px;
1009
- background: none;
1010
- border: none;
1011
- color: #155EEF;
1012
- font-size: 14px;
1013
- font-weight: 500;
1014
- cursor: pointer;
1015
- padding: 8px 12px;
1016
- border-radius: 6px;
1017
- transition: all 0.2s ease;
1018
- }
1019
-
1020
- .changelog-view-all-btn:hover {
1021
- background: rgba(21, 94, 239, 0.1);
1022
- }
1023
-
1024
- .changelog-view-all-btn svg {
1025
- transition: transform 0.2s ease;
1026
- }
1027
-
1028
- .changelog-view-all-btn:hover svg {
1029
- transform: translateX(3px);
1030
- }
1031
-
1032
- .changelog-modal.theme-dark .changelog-view-all-btn {
1033
- color: #60A5FA;
1034
- }
1035
-
1036
- .changelog-modal.theme-dark .changelog-view-all-btn:hover {
1037
- background: rgba(96, 165, 250, 0.1);
1038
- }
1039
-
1040
- /* ==================== CHANGELOG LIST MODAL ==================== */
1041
- .changelog-list-modal-backdrop {
1042
- position: fixed;
1043
- top: 0;
1044
- left: 0;
1045
- right: 0;
1046
- bottom: 0;
1047
- background: rgba(0, 0, 0, 0.5);
1048
- opacity: 0;
1049
- transition: opacity 0.3s ease;
1050
- pointer-events: none;
1051
- z-index: 999998;
1052
- }
1053
-
1054
- .changelog-list-modal-backdrop.show {
1055
- opacity: 1;
1056
- pointer-events: auto;
1057
- }
1058
-
1059
- .changelog-list-modal {
1060
- position: fixed;
1061
- top: 0;
1062
- left: 0;
1063
- right: 0;
1064
- bottom: 0;
1065
- z-index: 999999;
1066
- display: flex;
1067
- align-items: center;
1068
- justify-content: center;
1069
- padding: 20px;
1070
- pointer-events: none;
1071
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', Oxygen, Ubuntu, Cantarell, sans-serif;
1072
- }
1073
-
1074
- .changelog-list-modal.open {
1075
- pointer-events: auto;
1076
- }
1077
-
1078
- .changelog-list-modal-container {
1079
- position: relative;
1080
- width: 100%;
1081
- max-width: 460px;
1082
- max-height: 85vh;
1083
- background: white;
1084
- border-radius: 20px;
1085
- overflow: hidden;
1086
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1087
- transform: scale(0.9) translateY(20px);
1088
- opacity: 0;
1089
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1090
- display: flex;
1091
- flex-direction: column;
1092
- }
1093
-
1094
- .changelog-list-modal.open .changelog-list-modal-container {
1095
- transform: scale(1) translateY(0);
1096
- opacity: 1;
1097
- }
1098
-
1099
- .changelog-list-modal.theme-dark .changelog-list-modal-container {
1100
- background: #1F2937;
1101
- color: white;
1102
- }
1103
-
1104
- .changelog-list-modal-header {
1105
- display: flex;
1106
- align-items: center;
1107
- justify-content: space-between;
1108
- padding: 14px 20px;
1109
- border-bottom: 1px solid #E5E7EB;
1110
- flex-shrink: 0;
1111
- background: white;
1112
- }
1113
-
1114
- .changelog-list-modal.theme-dark .changelog-list-modal-header {
1115
- border-bottom-color: #374151;
1116
- background: #1F2937;
1117
- }
1118
-
1119
- .changelog-list-modal-header h2 {
1120
- margin: 0;
1121
- font-size: 16px;
1122
- font-weight: 600;
1123
- color: #111827;
1124
- }
1125
-
1126
- .changelog-list-modal.theme-dark .changelog-list-modal-header h2 {
1127
- color: white;
1128
- }
1129
-
1130
- .changelog-list-modal-close {
1131
- background: none;
1132
- border: none;
1133
- font-size: 22px;
1134
- cursor: pointer;
1135
- color: #6B7280;
1136
- padding: 4px;
1137
- width: 28px;
1138
- height: 28px;
1139
- display: flex;
1140
- align-items: center;
1141
- justify-content: center;
1142
- border-radius: 6px;
1143
- transition: all 0.2s ease;
1144
- line-height: 1;
1145
- }
1146
-
1147
- .changelog-list-modal-close:hover {
1148
- background: #F3F4F6;
1149
- color: #111827;
1150
- }
1151
-
1152
- .changelog-list-modal.theme-dark .changelog-list-modal-close {
1153
- color: #9CA3AF;
1154
- }
1155
-
1156
- .changelog-list-modal.theme-dark .changelog-list-modal-close:hover {
1157
- background: #374151;
1158
- color: white;
1159
- }
1160
-
1161
- .changelog-list-modal-body {
1162
- flex: 1;
1163
- overflow-y: auto;
1164
- }
1165
-
1166
- /* Changelog List */
1167
- .changelog-list {
1168
- display: flex;
1169
- flex-direction: column;
1170
- }
1171
-
1172
- .changelog-list-item {
1173
- display: flex;
1174
- flex-direction: row;
1175
- align-items: center;
1176
- padding: 12px 16px;
1177
- border-bottom: 1px solid #E5E7EB;
1178
- cursor: pointer;
1179
- transition: background-color 0.2s ease;
1180
- position: relative;
1181
- }
1182
-
1183
- .changelog-list-item:hover {
1184
- background: #F9FAFB;
1185
- }
1186
-
1187
- .changelog-list-item:last-child {
1188
- border-bottom: none;
1189
- }
1190
-
1191
- .changelog-list-modal.theme-dark .changelog-list-item {
1192
- border-bottom-color: #374151;
1193
- }
1194
-
1195
- .changelog-list-modal.theme-dark .changelog-list-item:hover {
1196
- background: #374151;
1197
- }
1198
-
1199
- .changelog-list-item-image {
1200
- width: 100%;
1201
- margin-bottom: 8px;
1202
- border-radius: 6px;
1203
- overflow: hidden;
1204
- border: 1px solid #E5E7EB;
1205
- }
1206
-
1207
- .changelog-list-item-image img {
1208
- width: 100%;
1209
- height: 100px;
1210
- display: block;
1211
- object-fit: cover;
1212
- }
1213
-
1214
- .changelog-list-item-main {
1215
- flex: 1;
1216
- min-width: 0;
1217
- }
1218
-
1219
- .changelog-list-item-content {
1220
- display: flex;
1221
- flex-direction: column;
1222
- gap: 3px;
1223
- }
1224
-
1225
- .changelog-list-item-date {
1226
- font-size: 11px;
1227
- color: #6B7280;
1228
- font-weight: 500;
1229
- }
1230
-
1231
- .changelog-list-modal.theme-dark .changelog-list-item-date {
1232
- color: #9CA3AF;
1233
- }
1234
-
1235
- .changelog-list-item-labels {
1236
- display: flex;
1237
- flex-wrap: wrap;
1238
- gap: 4px;
1239
- margin-bottom: 1px;
1240
- }
1241
-
1242
- .changelog-list-item-title {
1243
- margin: 0;
1244
- font-size: 14px;
1245
- font-weight: 600;
1246
- line-height: 1.3;
1247
- color: #111827;
1248
- }
1249
-
1250
- .changelog-list-modal.theme-dark .changelog-list-item-title {
1251
- color: white;
1252
- }
1253
-
1254
- .changelog-list-item-description {
1255
- margin: 0;
1256
- font-size: 12px;
1257
- line-height: 1.4;
1258
- color: #6B7280;
1259
- display: -webkit-box;
1260
- -webkit-line-clamp: 2;
1261
- -webkit-box-orient: vertical;
1262
- overflow: hidden;
1263
- }
1264
-
1265
- .changelog-list-modal.theme-dark .changelog-list-item-description {
1266
- color: #9CA3AF;
1267
- }
1268
-
1269
- .changelog-list-item-arrow {
1270
- flex-shrink: 0;
1271
- margin-left: 12px;
1272
- color: #9CA3AF;
1273
- transition: all 0.2s ease;
1274
- }
1275
-
1276
- .changelog-list-item:hover .changelog-list-item-arrow {
1277
- color: #155EEF;
1278
- transform: translateX(3px);
1279
- }
1280
-
1281
- .changelog-list-modal.theme-dark .changelog-list-item-arrow {
1282
- color: #6B7280;
1283
- }
1284
-
1285
- .changelog-list-modal.theme-dark .changelog-list-item:hover .changelog-list-item-arrow {
1286
- color: #60A5FA;
1287
- }
1288
-
1289
- /* Mobile Responsive */
1290
- @media (max-width: 768px) {
1291
- .changelog-modal {
1292
- padding: 16px;
1293
- }
1294
-
1295
- .changelog-modal-container {
1296
- max-width: 100%;
1297
- border-radius: 20px;
1298
- }
1299
-
1300
- .changelog-widget {
1301
- bottom: 16px;
1302
- right: 16px;
1303
- }
1304
-
1305
- .changelog-widget.position-bottom-left {
1306
- left: 16px;
1307
- }
1308
-
1309
- .changelog-popup-image {
1310
- padding: 20px 20px 0;
1311
- }
1312
-
1313
- .changelog-popup-body {
1314
- padding: 20px 24px 24px;
1315
- }
1316
-
1317
- .changelog-popup-title {
1318
- font-size: 22px;
1319
- }
1320
-
1321
- .changelog-popup-description {
1322
- font-size: 15px;
1323
- }
1324
-
1325
- .changelog-popup-btn {
1326
- padding: 12px 28px;
1327
- font-size: 15px;
1328
- width: 100%;
1329
- }
1330
-
1331
- .changelog-popup-footer {
1332
- padding: 0 24px 20px;
1333
- }
1334
-
1335
- /* List modal mobile */
1336
- .changelog-list-modal {
1337
- padding: 16px;
1338
- }
1339
-
1340
- .changelog-list-modal-container {
1341
- max-width: 100%;
1342
- max-height: 90vh;
1343
- border-radius: 16px;
1344
- }
1345
-
1346
- .changelog-list-item {
1347
- padding: 10px 14px;
1348
- }
1349
-
1350
- .changelog-list-item-image img {
1351
- height: 80px;
1352
- }
1353
-
1354
- .changelog-list-item-title {
1355
- font-size: 13px;
1356
- }
1357
-
1358
- .changelog-list-item-description {
1359
- font-size: 11px;
1360
- }
1361
- }
1362
-
1363
- @media (prefers-reduced-motion: reduce) {
1364
- .changelog-modal,
1365
- .changelog-modal-container,
1366
- .changelog-modal-backdrop,
1367
- .changelog-list-modal,
1368
- .changelog-list-modal-container,
1369
- .changelog-list-modal-backdrop,
1370
- .changelog-trigger-btn,
1371
- .changelog-popup-btn,
1372
- .changelog-view-all-btn,
1373
- .changelog-loading-spinner,
1374
- .changelog-dot,
1375
- .changelog-list-item,
1376
- .changelog-list-item-arrow {
1377
- transition: none;
1378
- animation: none;
1379
- }
1380
- }
1381
- `;
7
+ export { baseStyles, changelogStyles, feedbackStyles };