@multiplayer-app/session-recorder-browser 0.0.2 → 0.0.4

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 (104) hide show
  1. package/dist/browser/index.js +679 -708
  2. package/dist/browser/index.js.map +1 -1
  3. package/dist/exporters/index.js +1 -1
  4. package/dist/exporters/index.js.LICENSE.txt +65 -65
  5. package/dist/exporters/index.js.map +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.LICENSE.txt +65 -65
  8. package/dist/index.js.map +1 -1
  9. package/dist/src/config/constants.d.ts.map +1 -0
  10. package/dist/src/config/defaults.d.ts.map +1 -0
  11. package/dist/src/config/index.d.ts.map +1 -0
  12. package/dist/src/config/masking.d.ts.map +1 -0
  13. package/dist/src/config/session-recorder.d.ts.map +1 -0
  14. package/dist/src/config/validators.d.ts.map +1 -0
  15. package/dist/src/eventBus.d.ts.map +1 -0
  16. package/dist/src/exporters.d.ts.map +1 -0
  17. package/dist/src/index.d.ts.map +1 -0
  18. package/dist/src/listeners.d.ts.map +1 -0
  19. package/dist/src/otel/helpers.d.ts.map +1 -0
  20. package/dist/src/otel/index.d.ts.map +1 -0
  21. package/dist/src/otel/types.d.ts.map +1 -0
  22. package/dist/src/patch/index.d.ts.map +1 -0
  23. package/dist/src/patch/xhr.d.ts.map +1 -0
  24. package/dist/src/rrweb/exporter.d.ts.map +1 -0
  25. package/dist/src/rrweb/index.d.ts.map +1 -0
  26. package/dist/src/rrweb/indexedDbService.d.ts.map +1 -0
  27. package/dist/src/services/api.service.d.ts.map +1 -0
  28. package/dist/src/services/messaging.service.d.ts.map +1 -0
  29. package/dist/src/sessionRecorder.d.ts.map +1 -0
  30. package/dist/src/sessionWidget/UIManager.d.ts.map +1 -0
  31. package/dist/src/sessionWidget/buttonStateConfigs.d.ts.map +1 -0
  32. package/dist/src/sessionWidget/constants.d.ts.map +1 -0
  33. package/dist/src/sessionWidget/dragManager.d.ts.map +1 -0
  34. package/dist/src/sessionWidget/index.d.ts.map +1 -0
  35. package/dist/src/sessionWidget/templates/finalPopover.d.ts.map +1 -0
  36. package/dist/src/sessionWidget/templates/icons.d.ts.map +1 -0
  37. package/dist/src/sessionWidget/templates/initialPopover.d.ts.map +1 -0
  38. package/dist/src/sessionWidget/templates/recordingOverlay.d.ts.map +1 -0
  39. package/dist/src/sessionWidget/templates/submitSessionDialog.d.ts.map +1 -0
  40. package/dist/src/sessionWidget/templates/toast.d.ts.map +1 -0
  41. package/dist/src/types/index.d.ts.map +1 -0
  42. package/dist/src/types/session.d.ts.map +1 -0
  43. package/dist/src/types/sessionRecorder.d.ts.map +1 -0
  44. package/dist/src/types/widget.d.ts.map +1 -0
  45. package/dist/src/utils/array.d.ts.map +1 -0
  46. package/dist/src/utils/dom.d.ts.map +1 -0
  47. package/dist/src/utils/globals.d.ts.map +1 -0
  48. package/dist/src/utils/index.d.ts.map +1 -0
  49. package/dist/src/utils/navigator.d.ts.map +1 -0
  50. package/dist/src/utils/request-utils.d.ts.map +1 -0
  51. package/dist/src/utils/session.d.ts.map +1 -0
  52. package/dist/src/utils/storage.d.ts.map +1 -0
  53. package/dist/src/utils/time.d.ts.map +1 -0
  54. package/dist/src/utils/type-utils.d.ts.map +1 -0
  55. package/package.json +2 -2
  56. package/src/index.scss +913 -0
  57. package/dist/common/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
  58. package/dist/common/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
  59. package/dist/common/SessionRecorderIdGenerator.d.ts.map +0 -1
  60. package/dist/common/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  61. package/dist/common/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +0 -1
  62. package/dist/common/constants.base.d.ts.map +0 -1
  63. package/dist/common/constants.browser.d.ts.map +0 -1
  64. package/dist/common/constants.node.d.ts.map +0 -1
  65. package/dist/common/index-browser.d.ts.map +0 -1
  66. package/dist/common/index-node.d.ts.map +0 -1
  67. package/dist/common/index.d.ts.map +0 -1
  68. package/dist/common/sdk/capture-exception.d.ts.map +0 -1
  69. package/dist/common/sdk/id-generator.d.ts.map +0 -1
  70. package/dist/common/sdk/index.d.ts.map +0 -1
  71. package/dist/common/sdk/is-gzip.d.ts.map +0 -1
  72. package/dist/common/sdk/mask.d.ts.map +0 -1
  73. package/dist/common/sdk/save-continuous-deb-session.d.ts.map +0 -1
  74. package/dist/common/sdk/schemify.d.ts.map +0 -1
  75. package/dist/common/sdk/set-attribute.d.ts.map +0 -1
  76. package/dist/common/type/index.d.ts.map +0 -1
  77. package/dist/common/type/session-type.enum.d.ts.map +0 -1
  78. package/dist/config/defaults.d.ts.map +0 -1
  79. package/dist/config/index.d.ts.map +0 -1
  80. package/dist/config/masking.d.ts.map +0 -1
  81. package/dist/config/session-recorder.d.ts.map +0 -1
  82. package/dist/exporters.d.ts.map +0 -1
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/listeners.d.ts.map +0 -1
  85. package/dist/otel/helpers.d.ts.map +0 -1
  86. package/dist/otel/index.d.ts.map +0 -1
  87. package/dist/patch/index.d.ts.map +0 -1
  88. package/dist/patch/xhr.d.ts.map +0 -1
  89. package/dist/rrweb/exporter.d.ts.map +0 -1
  90. package/dist/rrweb/index.d.ts.map +0 -1
  91. package/dist/services/api.service.d.ts.map +0 -1
  92. package/dist/sessionRecorder.d.ts.map +0 -1
  93. package/dist/sessionWidget/UIManager.d.ts.map +0 -1
  94. package/dist/sessionWidget/buttonStateConfigs.d.ts.map +0 -1
  95. package/dist/sessionWidget/index.d.ts.map +0 -1
  96. package/dist/sessionWidget/templates/finalPopover.d.ts.map +0 -1
  97. package/dist/sessionWidget/templates/initialPopover.d.ts.map +0 -1
  98. package/dist/sessionWidget/templates/toast.d.ts.map +0 -1
  99. package/dist/types/index.d.ts.map +0 -1
  100. package/dist/types/session.d.ts.map +0 -1
  101. package/dist/types/sessionRecorder.d.ts.map +0 -1
  102. package/dist/utils/index.d.ts.map +0 -1
  103. package/dist/utils/navigator.d.ts.map +0 -1
  104. package/dist/utils/request-utils.d.ts.map +0 -1
package/src/index.scss ADDED
@@ -0,0 +1,913 @@
1
+ // Variables
2
+ $font-family-base: "PP Neue Montreal", Montserrat, Roboto, Arial, sans-serif;
3
+ $font-family-inter: Inter, sans-serif;
4
+
5
+ // Colors
6
+ $color-primary: #493bff;
7
+ $color-primary-dark: #382be4;
8
+ $color-primary-darker: #160d9c;
9
+ $color-text-primary: #2d3748;
10
+ $color-text-secondary: #718096;
11
+ $color-border: #e1e8f1;
12
+ $color-background: #ffffff;
13
+ $color-overlay: rgba(0, 0, 0, 0.5);
14
+
15
+ // Spacing
16
+ $spacing-xs: 4px;
17
+ $spacing-sm: 8px;
18
+ $spacing-md: 12px;
19
+ $spacing-lg: 16px;
20
+ $spacing-xl: 20px;
21
+ $spacing-xxl: 24px;
22
+
23
+ // Border radius
24
+ $border-radius-sm: 8px;
25
+ $border-radius-md: 12px;
26
+ $border-radius-lg: 24px;
27
+ $border-radius-full: 36px;
28
+
29
+ // Z-index layers
30
+ $z-index-base: 10000;
31
+ $z-index-overlay: 10003;
32
+ $z-index-modal: 10004;
33
+
34
+ // Mixins
35
+ @mixin flex-center {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ }
40
+
41
+ @mixin flex-between {
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: space-between;
45
+ }
46
+
47
+ @mixin button-base {
48
+ cursor: pointer;
49
+ border-radius: $border-radius-md;
50
+ font-family: $font-family-inter;
51
+ font-size: 14px;
52
+ font-weight: 500;
53
+ transition: all 0.2s;
54
+ }
55
+
56
+ @mixin gradient-primary {
57
+ background: linear-gradient(
58
+ 180deg,
59
+ $color-primary 0%,
60
+ $color-primary-dark 100%
61
+ );
62
+ }
63
+
64
+ @mixin box-shadow-sm {
65
+ box-shadow: 0 1px 1px -0.5px rgba(0, 0, 0, 0.06),
66
+ 0 3px 3px -1.5px rgba(0, 0, 0, 0.06);
67
+ }
68
+
69
+ // Base styles
70
+ .mp-root-wrapper {
71
+ * {
72
+ font-family: $font-family-base !important;
73
+ box-sizing: border-box;
74
+ }
75
+
76
+ textarea {
77
+ background: $color-background;
78
+ color: $color-text-primary;
79
+ }
80
+ }
81
+
82
+ // Button styles
83
+ .mp-session-debugger-button {
84
+ @include button-base;
85
+ @include flex-center;
86
+ position: fixed;
87
+ z-index: 2247483003;
88
+ padding: 5px;
89
+ background-color: $color-background;
90
+ border: solid 1px #bebfc1;
91
+ border-radius: $border-radius-full;
92
+ color: $color-text-secondary;
93
+ transition: background 0.3s;
94
+
95
+ width: 42px;
96
+ height: 42px;
97
+ will-change: right, bottom;
98
+
99
+ &.is-started {
100
+ color: $color-primary;
101
+ }
102
+
103
+ // Position variants
104
+ &.top-left {
105
+ top: $spacing-xxl;
106
+ left: $spacing-xxl;
107
+ }
108
+
109
+ &.top-right {
110
+ top: $spacing-xxl;
111
+ right: $spacing-xxl;
112
+ }
113
+
114
+ &.bottom-left {
115
+ bottom: $spacing-xxl;
116
+ left: $spacing-xxl;
117
+ }
118
+
119
+ &.bottom-right {
120
+ bottom: $spacing-xxl;
121
+ right: $spacing-xxl;
122
+ }
123
+
124
+ &.no-draggable {
125
+ position: static;
126
+ &::before {
127
+ transform: translateY(-18px) !important;
128
+ top: -10px !important;
129
+ left: 10px !important;
130
+ }
131
+ &:hover::before {
132
+ z-index: 1;
133
+ transform: translateY(-18px);
134
+ top: -10px;
135
+ left: 10px;
136
+ right: unset;
137
+ }
138
+ &.no-tooltip::before {
139
+ display: none;
140
+ }
141
+ }
142
+ &.mp-button-blue {
143
+ border: 1px rgba(0, 0, 0, 0.2);
144
+ background: #493bff;
145
+ &::before {
146
+ opacity: 1;
147
+ transform: translateX(0);
148
+ }
149
+ }
150
+ &:not([data-tooltip=""]) {
151
+ &:before {
152
+ content: attr(data-tooltip);
153
+ position: absolute;
154
+ pointer-events: none;
155
+ height: 28px;
156
+ top: 6px;
157
+ padding: 6px 8px 6px 8px;
158
+ border-radius: 8px;
159
+ font-family: Inter, sans-serif;
160
+ font-size: 12px;
161
+ font-weight: 500;
162
+ line-height: 16px;
163
+ opacity: 0;
164
+ transition: all 0.3s;
165
+ background: #1a202c;
166
+ color: white;
167
+ white-space: nowrap;
168
+ box-sizing: border-box;
169
+ z-index: -1;
170
+ transform: translateX(-8px);
171
+ left: unset;
172
+ right: 100%;
173
+ }
174
+ &.top-left:before,
175
+ &.bottom-left:before,
176
+ &.button-leftside:before {
177
+ transform: translateX(8px);
178
+ left: 100%;
179
+ right: unset;
180
+ }
181
+ }
182
+ &:not(.no-hover) {
183
+ &:hover {
184
+ color: #473cfb;
185
+ box-shadow: 0 3px 3px -1.5px rgba(0, 0, 0, 0.06),
186
+ 0 1px 1px -0.5px rgba(0, 0, 0, 0.06);
187
+ &:before {
188
+ opacity: 1;
189
+ }
190
+ &:not(.no-draggable) {
191
+ .mp-drag-hint svg {
192
+ opacity: 1;
193
+ }
194
+ }
195
+ }
196
+ }
197
+ svg {
198
+ transform: rotate(0deg);
199
+ transition: transform 0.3s linear;
200
+ }
201
+ &.rotate-on-hover {
202
+ &:hover {
203
+ svg {
204
+ transform: rotate(-180deg);
205
+ }
206
+ }
207
+ }
208
+ &.animate-rotate svg {
209
+ animation: _rotateAnimation 3s linear infinite;
210
+ }
211
+ }
212
+
213
+ .animate-bounce {
214
+ animation: _bounceAnimation 1.6s infinite;
215
+ animation-timing-function: cubic-bezier(0.87, 0, 0.13, 1);
216
+ }
217
+
218
+ .mp-drag-hint svg {
219
+ position: absolute;
220
+ width: 14px;
221
+ height: 14px;
222
+ top: -3px;
223
+ right: -9px;
224
+ opacity: 0;
225
+ transform: unset !important;
226
+ transition: opacity 0.1ms ease-in !important;
227
+ cursor: grab;
228
+ }
229
+
230
+ .mp-session-debugger-popover-textarea {
231
+ border: 1px solid #cbd5e0;
232
+ box-shadow: 0 12px 12px -12px #0000000f, 0 6px 6px -3px #0000000f,
233
+ 0 3px 3px -1.5px #0000000f, 0 1px 1px -0.5px #0000000f;
234
+ padding: 10px 13px 10px 13px;
235
+ border-radius: 12px;
236
+ font-family: Inter, serif;
237
+ font-size: 14px;
238
+ font-weight: 400;
239
+ color: #718096;
240
+ margin-bottom: 32px;
241
+ width: 100%;
242
+ height: 80px;
243
+ resize: none;
244
+ }
245
+
246
+ .mp-session-debugger {
247
+ &-popover {
248
+ position: fixed;
249
+ bottom: 90px;
250
+ right: $spacing-xxl;
251
+ width: 300px;
252
+ background: $color-background;
253
+ border-radius: $border-radius-lg;
254
+ overflow: hidden;
255
+ border: 1px solid rgba(245, 245, 245, 1);
256
+ @include box-shadow-sm;
257
+ z-index: $z-index-base;
258
+
259
+ &.hidden {
260
+ display: none;
261
+ }
262
+
263
+ &-content {
264
+ position: relative;
265
+ padding: 65px $spacing-lg $spacing-lg;
266
+ }
267
+
268
+ &-header {
269
+ position: absolute;
270
+ top: 0;
271
+ width: 100%;
272
+ right: 0;
273
+ @include flex-between;
274
+ padding: $spacing-lg;
275
+ gap: $spacing-sm;
276
+ background: linear-gradient(
277
+ 180deg,
278
+ rgba(255, 255, 255, 0) 50%,
279
+ rgba(255, 255, 255, 1) 100%
280
+ ),
281
+ linear-gradient(90deg, #d8f3fd 0%, #e3ecfd 100%);
282
+
283
+ a {
284
+ color: inherit;
285
+ margin-right: auto;
286
+ text-decoration: none;
287
+ }
288
+ }
289
+
290
+ &-body {
291
+ h2 {
292
+ margin-bottom: $spacing-xs;
293
+ font-size: 18px;
294
+ font-weight: 600;
295
+ color: $color-text-primary;
296
+ font-family: $font-family-base;
297
+ }
298
+
299
+ p {
300
+ font-family: $font-family-base;
301
+ font-size: 14px;
302
+ font-weight: 400;
303
+ color: $color-text-secondary;
304
+ margin-bottom: 32px;
305
+ }
306
+ &:has(#mp-session-debugger-continuous-debugging-checkbox:checked) {
307
+ .mp-session-debugger-continuous-debugging-overlay {
308
+ display: flex;
309
+ }
310
+ }
311
+ }
312
+
313
+ &-footer {
314
+ @include flex-between;
315
+ gap: $spacing-sm;
316
+ }
317
+
318
+ &-button {
319
+ @include button-base;
320
+ border: none;
321
+ color: $color-background;
322
+ width: 100%;
323
+ position: relative;
324
+ padding: $spacing-md $spacing-lg;
325
+ border-radius: $border-radius-md;
326
+ background: transparent;
327
+ overflow: hidden;
328
+ z-index: 1;
329
+
330
+ &::before {
331
+ content: "";
332
+ position: absolute;
333
+ top: 0;
334
+ left: 0;
335
+ right: 0;
336
+ bottom: 0;
337
+ @include gradient-primary;
338
+ transition: opacity 0.3s linear;
339
+ z-index: -1;
340
+ }
341
+
342
+ &::after {
343
+ content: "";
344
+ position: absolute;
345
+ top: 0;
346
+ left: 0;
347
+ right: 0;
348
+ bottom: 0;
349
+ background: linear-gradient(
350
+ 180deg,
351
+ $color-primary-darker 0%,
352
+ #160d9c 100%
353
+ );
354
+ transition: opacity 0.3s linear;
355
+ z-index: -1;
356
+ opacity: 0;
357
+ }
358
+
359
+ &:hover::after {
360
+ opacity: 1;
361
+ }
362
+
363
+ &:disabled,
364
+ &.disabled {
365
+ pointer-events: none;
366
+ opacity: 0.6;
367
+ cursor: not-allowed;
368
+ transition: opacity 0.2s ease;
369
+
370
+ &:hover,
371
+ &:focus {
372
+ background-color: inherit;
373
+ box-shadow: none;
374
+ }
375
+ }
376
+ }
377
+ }
378
+
379
+ &-continuous-debugging {
380
+ position: relative;
381
+ z-index: 3;
382
+ @include flex-between;
383
+ gap: $spacing-sm;
384
+ padding: $spacing-md;
385
+ border-radius: $border-radius-md;
386
+ border: 1px solid $color-border;
387
+ @include box-shadow-sm;
388
+ margin-bottom: $spacing-xl;
389
+
390
+ &-overlay {
391
+ position: absolute;
392
+ inset: 65px 0 0 0;
393
+ z-index: 2;
394
+ display: none;
395
+ border-radius: $border-radius-md;
396
+ backdrop-filter: blur(10px);
397
+ background: rgba(255, 255, 255, 0.5);
398
+ flex-direction: column;
399
+ justify-content: flex-end;
400
+ padding: $spacing-md;
401
+ gap: $spacing-md;
402
+
403
+ &-content {
404
+ padding: $spacing-md;
405
+ background: $color-background;
406
+ border-radius: $border-radius-md;
407
+ border: 1px solid $color-border;
408
+ @include box-shadow-sm;
409
+
410
+ h3 {
411
+ @include flex-center;
412
+ justify-content: flex-start;
413
+ margin: 0;
414
+ gap: $spacing-sm;
415
+ font-size: 14px;
416
+ font-weight: 500;
417
+ svg {
418
+ width: 20px;
419
+ height: 20px;
420
+ animation: _bounceAnimation 1.6s infinite;
421
+ animation-timing-function: cubic-bezier(0.87, 0, 0.13, 1);
422
+ }
423
+ }
424
+ p {
425
+ margin: 0;
426
+ }
427
+ }
428
+ }
429
+
430
+ &-label {
431
+ gap: $spacing-sm;
432
+ display: flex;
433
+ font-size: 14px;
434
+ color: $color-text-primary;
435
+ font-weight: 500;
436
+ }
437
+
438
+ &-switch {
439
+ display: flex;
440
+ align-items: center;
441
+ width: 44px;
442
+ height: 24px;
443
+ padding: 2px;
444
+ cursor: pointer;
445
+ border-radius: $border-radius-full;
446
+ background: #e2e8f0;
447
+
448
+ &:has(input:checked) {
449
+ background: $color-primary;
450
+ justify-content: flex-end;
451
+ }
452
+
453
+ input {
454
+ display: none;
455
+ }
456
+
457
+ span {
458
+ width: 20px;
459
+ height: 20px;
460
+ border-radius: 50%;
461
+ background: $color-background;
462
+ transition: transform 0.2s;
463
+ }
464
+ }
465
+ }
466
+ }
467
+
468
+ // Recording overlay
469
+ .mp-recording {
470
+ &-overlay {
471
+ background: #5c5d5d;
472
+ color: $color-background;
473
+ display: flex;
474
+ z-index: 2147483007;
475
+ left: 50%;
476
+ bottom: $spacing-xl;
477
+ position: fixed;
478
+ transform: translate(-50%, 0);
479
+ border: 0.5px solid #5c5d5d;
480
+ border-radius: $border-radius-lg;
481
+ font-family: Arial, sans-serif;
482
+ flex-direction: row;
483
+ font-size: 14px;
484
+ box-shadow: 0 1px 1px -0.5px rgba(0, 0, 0, 0.3);
485
+
486
+ &.hidden {
487
+ display: none;
488
+ }
489
+ }
490
+
491
+ &-status {
492
+ gap: $spacing-sm;
493
+ display: flex;
494
+ padding: $spacing-md $spacing-md;
495
+ flex-direction: row;
496
+ align-items: center;
497
+ }
498
+
499
+ &-indicator {
500
+ width: 24px;
501
+ height: 24px;
502
+ animation: pulse 1.5s infinite;
503
+ }
504
+
505
+ &-controls {
506
+ display: flex;
507
+ }
508
+
509
+ &-btn {
510
+ border: none;
511
+ border-right: 0.5px solid #5c5d5d;
512
+ background: #414141;
513
+ padding: 6px $spacing-md;
514
+ font-weight: bold;
515
+ cursor: pointer;
516
+ color: $color-background;
517
+ gap: $spacing-sm;
518
+ }
519
+ }
520
+
521
+ .mp-session-debugger-modal.hidden {
522
+ display: none;
523
+ }
524
+
525
+ .mp-session-debugger-popover-logo svg {
526
+ width: 30px;
527
+ }
528
+
529
+ .mp-session-debugger-dismiss-button {
530
+ display: flex;
531
+ justify-content: center;
532
+ align-items: center;
533
+ padding: 6px 16px;
534
+ background: white;
535
+ border: 1px solid #e1e8f1;
536
+ box-shadow: 0 3px 3px -1.5px #0000000f, 0 1px 1px -0.5px #0000000f;
537
+ border-radius: 12px;
538
+ font-size: 14px;
539
+ color: #2d3748;
540
+ font-weight: 500;
541
+ }
542
+
543
+ .mp-session-debugger-modal-backdrop {
544
+ position: fixed;
545
+ top: 0;
546
+ left: 0;
547
+ width: 100vw;
548
+ height: 100vh;
549
+ background-color: rgba(0, 0, 0, 0.5);
550
+ z-index: 10003;
551
+ }
552
+
553
+ /* Modal content */
554
+ .mp-session-debugger-modal-content {
555
+ position: fixed;
556
+ top: 50%;
557
+ left: 50%;
558
+ transform: translate(-50%, -50%);
559
+ background: white;
560
+ padding: 20px;
561
+ border-radius: 8px;
562
+ width: 80vw;
563
+ min-height: 70vh;
564
+ max-height: 90vh;
565
+ z-index: 10004;
566
+ display: flex;
567
+ flex-direction: column;
568
+ }
569
+
570
+ /* Close button */
571
+ .mp-session-debugger-modal-close {
572
+ background: none;
573
+ border: none;
574
+ padding: $spacing-sm;
575
+ cursor: pointer;
576
+ color: grey;
577
+ line-height: 1;
578
+ svg {
579
+ vertical-align: top;
580
+ }
581
+ }
582
+
583
+ /* Modal body */
584
+ .mp-session-debugger-modal-body {
585
+ flex: 1;
586
+ display: flex;
587
+ flex-direction: column;
588
+ padding: 20px 0;
589
+ height: 100%;
590
+ overflow: hidden;
591
+ background: white;
592
+ .rr-player {
593
+ border-radius: 4px;
594
+ border: 1px solid #c1c5ca;
595
+ box-shadow: unset;
596
+ overflow: hidden;
597
+ }
598
+ }
599
+
600
+
601
+ .mp-session-debugger-player-frame {
602
+ display: flex;
603
+ flex: 1;
604
+ overflow: hidden;
605
+ .replayer-wrapper {
606
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
607
+ }
608
+ }
609
+
610
+ /* Modal footer */
611
+ .mp-session-debugger-modal-footer {
612
+ display: flex;
613
+ justify-content: flex-end;
614
+ gap: 10px;
615
+ }
616
+
617
+ /* Buttons */
618
+ .mp-session-debugger-modal-button {
619
+ width: auto;
620
+ }
621
+
622
+ .mp-dismiss-recording,
623
+ .mp-dismiss-recording:before,
624
+ .mp-dismiss-recording:after {
625
+ background: white;
626
+ border: 1px solid #e1e8f1;
627
+ color: #2d3748;
628
+ }
629
+
630
+ @keyframes _rotateAnimation {
631
+ 0% {
632
+ transform: rotate(0);
633
+ }
634
+
635
+ 100% {
636
+ transform: rotate(360deg);
637
+ }
638
+ }
639
+
640
+ @keyframes _bounceAnimation {
641
+ 0%,
642
+ 100% {
643
+ padding: 3px;
644
+ }
645
+ 50% {
646
+ padding: 0;
647
+ }
648
+ }
649
+
650
+ // Dialog styles
651
+ #mp-submission-dialog {
652
+ position: fixed;
653
+ top: 0;
654
+ left: 0;
655
+ right: 0;
656
+ bottom: 0;
657
+ z-index: 99999;
658
+ @include flex-center;
659
+ font-family: -apple-system, BlinkMacSystemFont, sans-serif;
660
+
661
+ &.hidden {
662
+ display: none;
663
+ }
664
+
665
+ .mp-dialog {
666
+ &-backdrop {
667
+ background: rgba(0, 0, 0, 0.4);
668
+ position: fixed;
669
+ width: 100%;
670
+ height: 100%;
671
+ }
672
+
673
+ &-content {
674
+ top: 30%;
675
+ left: 40%;
676
+ position: absolute;
677
+ background: $color-background;
678
+ border-radius: $border-radius-lg;
679
+ padding: $spacing-xxl;
680
+ width: 90%;
681
+ max-width: 450px;
682
+ z-index: 100000;
683
+ animation: fadeIn 0.3s ease-out;
684
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
685
+ }
686
+
687
+ &-actions {
688
+ @include flex-between;
689
+ gap: $spacing-md;
690
+ }
691
+ }
692
+
693
+ h3 {
694
+ margin-bottom: $spacing-lg;
695
+ font-size: 20px;
696
+ color: #2a374a;
697
+ }
698
+
699
+ .subtitle {
700
+ font-size: 12px;
701
+ color: #6d8198;
702
+ margin-bottom: $spacing-lg;
703
+ }
704
+
705
+ .form-group {
706
+ margin-bottom: $spacing-xl;
707
+ }
708
+
709
+ label {
710
+ display: block;
711
+ margin-bottom: $spacing-sm;
712
+ color: #555;
713
+ font-size: 14px;
714
+ }
715
+
716
+ textarea {
717
+ width: 100%;
718
+ padding: $spacing-md;
719
+ border: 1px solid #e0e0e0;
720
+ border-radius: $border-radius-sm;
721
+ resize: vertical;
722
+ min-height: 100px;
723
+ max-height: 350px;
724
+ font-family: inherit;
725
+ font-size: 14px;
726
+ transition: border 0.2s;
727
+
728
+ &:focus {
729
+ outline: none;
730
+ border-color: $color-primary-dark;
731
+ box-shadow: 0 0 0 2px rgba(26, 115, 232, 0.2);
732
+ }
733
+
734
+ &::placeholder {
735
+ color: #6d8198;
736
+ opacity: 1;
737
+ }
738
+ }
739
+
740
+ button {
741
+ padding: $spacing-md $spacing-lg;
742
+ border-radius: $border-radius-md;
743
+ cursor: pointer;
744
+ font-size: 14px;
745
+ font-weight: 500;
746
+ transition: all 0.2s;
747
+ }
748
+
749
+ #mp-cancel-submission {
750
+ background: #f5f5f5;
751
+ border: 1px solid $color-border;
752
+ color: $color-text-primary;
753
+ @include box-shadow-sm;
754
+ }
755
+
756
+ #mp-submit-recording {
757
+ @include gradient-primary;
758
+ border: none;
759
+ color: $color-background;
760
+
761
+ &:hover {
762
+ background: linear-gradient(
763
+ 180deg,
764
+ $color-primary 0%,
765
+ $color-primary-darker 100%
766
+ );
767
+ }
768
+ }
769
+ }
770
+
771
+ #mp-confirmation-dialog {
772
+ position: fixed;
773
+ top: 0;
774
+ left: 0;
775
+ width: 100%;
776
+ height: 100%;
777
+ font-size: 14px;
778
+ background: rgba(0, 0, 0, 0.4);
779
+ @include flex-center;
780
+ z-index: 9999;
781
+
782
+ .mp-dialog {
783
+ &-content {
784
+ padding: $spacing-xl;
785
+ color: #2a374a;
786
+ max-width: 410px;
787
+ background: $color-background;
788
+ border-radius: $border-radius-lg;
789
+ }
790
+
791
+ &-buttons {
792
+ gap: $spacing-md;
793
+ display: flex;
794
+ margin-top: $spacing-lg;
795
+ justify-content: flex-end;
796
+ }
797
+ }
798
+
799
+ button {
800
+ font-weight: 500;
801
+ cursor: pointer;
802
+ padding: $spacing-md $spacing-lg;
803
+ border-radius: $border-radius-md;
804
+ transition: all 0.2s;
805
+ }
806
+
807
+ #mp-dialog-confirm {
808
+ background: #dd524c;
809
+ color: $color-background;
810
+
811
+ &:hover {
812
+ background: #c53030;
813
+ }
814
+ }
815
+
816
+ #mp-dialog-cancel {
817
+ background: #f5f5f5;
818
+ border: 1px solid $color-border;
819
+ color: $color-text-primary;
820
+ @include box-shadow-sm;
821
+ }
822
+ }
823
+
824
+ // Utility classes
825
+ .mp-drag-handle {
826
+ padding: $spacing-md $spacing-md;
827
+ @include flex-center;
828
+ }
829
+
830
+
831
+
832
+ // Toast styles
833
+ .mp-toast {
834
+ left: 50%;
835
+ bottom: 40px;
836
+ position: fixed;
837
+ transform: translateX(-50%);
838
+ background: #535454;
839
+ z-index: 10001;
840
+ padding: 0;
841
+ border: none;
842
+ border-radius: 14px;
843
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.18);
844
+ display: flex;
845
+ font-size: 14px;
846
+ font-weight: 500;
847
+ animation: slideUpCenter 0.3s cubic-bezier(0.4,0,0.2,1);
848
+ &-error {
849
+ .mp-toast-icon {
850
+ color: #dd524c;
851
+ }
852
+ }
853
+ &.hidden {
854
+ display: none;
855
+ }
856
+
857
+ &-content {
858
+ padding: 0;
859
+ gap: 12px;
860
+ color: white;
861
+ display: flex;
862
+ align-items: center;
863
+ width: 100%;
864
+ height: 100%;
865
+ white-space: nowrap;
866
+ }
867
+
868
+ &-icon {
869
+ margin-left: 12px;
870
+ display: flex;
871
+ align-items: center;
872
+ justify-content: center;
873
+ svg {
874
+ width: 20px;
875
+ height: 20px;
876
+ }
877
+ }
878
+
879
+ &-message {
880
+ flex: 1;
881
+ margin-right: 12px;
882
+ font-weight: 500;
883
+ }
884
+
885
+ &-button {
886
+ display: flex;
887
+ align-items: center;
888
+ justify-content: center;
889
+ border-top-right-radius: 14px;
890
+ border-bottom-right-radius: 14px;
891
+ padding: 12px 16px !important;
892
+ background: #414141 !important;
893
+ font-weight: 500 !important;
894
+ border: 0.5px solid #5C5D5D;
895
+ cursor: pointer;
896
+ text-decoration: none !important;
897
+ transition: background 0.18s;
898
+ }
899
+ &-button:hover, &-button:focus {
900
+ background: rgba(255,255,255,0.18);
901
+ }
902
+ }
903
+
904
+ @keyframes slideUpCenter {
905
+ from {
906
+ transform: translateX(-50%) translateY(40px);
907
+ opacity: 0;
908
+ }
909
+ to {
910
+ transform: translateX(-50%) translateY(0);
911
+ opacity: 1;
912
+ }
913
+ }