@visns-studio/visns-components 5.11.2 → 5.11.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.
@@ -0,0 +1,690 @@
1
+ // MergeEntity Component Styles
2
+ // Uses CSS custom properties from project root for consistent theming
3
+
4
+ .container {
5
+ background: var(--bg-color, #ffffff);
6
+ border: 1px solid var(--border-color, #e1e5e9);
7
+ border-radius: var(--border-radius, 8px);
8
+ padding: var(--spacing-lg, 24px);
9
+ margin: var(--spacing-md, 16px) 0;
10
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.1));
11
+ position: relative;
12
+ z-index: 10; // Lower than navigation to prevent interference
13
+ contain: layout style; // Prevent layout shifts from affecting parent
14
+ isolation: isolate; // Create new stacking context
15
+ }
16
+
17
+ .header {
18
+ margin-bottom: var(--spacing-lg, 24px);
19
+ border-bottom: 1px solid var(--border-color, #e1e5e9);
20
+ padding-bottom: var(--spacing-md, 16px);
21
+
22
+ h3 {
23
+ color: var(--text-color, #333333);
24
+ font-size: var(--font-size-lg, 18px);
25
+ font-weight: var(--font-weight-semibold, 600);
26
+ margin: 0 0 var(--spacing-xs, 8px) 0;
27
+ display: flex;
28
+ align-items: center;
29
+ }
30
+
31
+ p {
32
+ color: var(--text-color-muted, #6b7280);
33
+ font-size: var(--font-size-sm, 14px);
34
+ margin: 0;
35
+ line-height: 1.5;
36
+ }
37
+ }
38
+
39
+ .loading {
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ padding: var(--spacing-xl, 32px);
44
+ color: var(--text-color-muted, #6b7280);
45
+ font-size: var(--font-size-md, 16px);
46
+ }
47
+
48
+ // Progress Steps
49
+ .progressSteps {
50
+ display: flex;
51
+ justify-content: space-between;
52
+ margin-bottom: var(--spacing-xl, 32px);
53
+ padding: 0 var(--spacing-md, 16px);
54
+ position: relative;
55
+
56
+ &::before {
57
+ content: '';
58
+ position: absolute;
59
+ top: 12px;
60
+ left: var(--spacing-lg, 24px);
61
+ right: var(--spacing-lg, 24px);
62
+ height: 2px;
63
+ background: var(--border-color, #e1e5e9);
64
+ z-index: 1;
65
+ }
66
+ }
67
+
68
+ .step {
69
+ display: flex;
70
+ flex-direction: column;
71
+ align-items: center;
72
+ gap: var(--spacing-xs, 8px);
73
+ position: relative;
74
+ z-index: 2;
75
+ background: var(--bg-color, #ffffff);
76
+ padding: 0 var(--spacing-sm, 12px);
77
+
78
+ svg {
79
+ width: 24px;
80
+ height: 24px;
81
+ padding: 4px;
82
+ border-radius: 50%;
83
+ background: var(--bg-color-secondary, #f8f9fa);
84
+ border: 2px solid var(--border-color, #e1e5e9);
85
+ color: var(--text-color-muted, #6b7280);
86
+ transition: all 0.3s ease;
87
+ }
88
+
89
+ span {
90
+ font-size: var(--font-size-xs, 12px);
91
+ color: var(--text-color-muted, #6b7280);
92
+ font-weight: var(--font-weight-medium, 500);
93
+ text-align: center;
94
+ transition: color 0.3s ease;
95
+ }
96
+
97
+ &.active {
98
+ svg {
99
+ background: var(--primary-color, #3b82f6);
100
+ border-color: var(--primary-color, #3b82f6);
101
+ color: white;
102
+ }
103
+
104
+ span {
105
+ color: var(--primary-color, #3b82f6);
106
+ }
107
+ }
108
+
109
+ &.current {
110
+ svg {
111
+ background: var(--primary-color-light, #dbeafe);
112
+ border-color: var(--primary-color, #3b82f6);
113
+ color: var(--primary-color, #3b82f6);
114
+ animation: pulse 2s infinite;
115
+ }
116
+ }
117
+ }
118
+
119
+ @keyframes pulse {
120
+ 0%, 100% {
121
+ transform: scale(1);
122
+ }
123
+ 50% {
124
+ transform: scale(1.1);
125
+ }
126
+ }
127
+
128
+ // Step Content
129
+ .stepContent {
130
+ animation: fadeIn 0.3s ease-in-out;
131
+
132
+ h4 {
133
+ color: var(--text-color, #333333);
134
+ font-size: var(--font-size-lg, 18px);
135
+ font-weight: var(--font-weight-semibold, 600);
136
+ margin: 0 0 var(--spacing-lg, 24px) 0;
137
+ }
138
+ }
139
+
140
+ @keyframes fadeIn {
141
+ from {
142
+ opacity: 0;
143
+ transform: translateY(10px);
144
+ }
145
+ to {
146
+ opacity: 1;
147
+ transform: translateY(0);
148
+ }
149
+ }
150
+
151
+ // Search Section
152
+ .searchSection {
153
+ .searchField {
154
+ position: relative;
155
+ margin-bottom: var(--spacing-lg, 24px);
156
+ }
157
+
158
+ .searchInput {
159
+ width: 100%;
160
+ padding: var(--spacing-sm, 12px) var(--spacing-xl, 32px) var(--spacing-sm, 12px) var(--spacing-md, 16px);
161
+ border: 1px solid var(--border-color, #e1e5e9);
162
+ border-radius: var(--border-radius, 8px);
163
+ font-size: var(--font-size-md, 16px);
164
+ background: var(--bg-color, #ffffff);
165
+ color: var(--text-color, #333333);
166
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
167
+
168
+ &:focus {
169
+ outline: none;
170
+ border-color: var(--primary-color, #3b82f6);
171
+ box-shadow: 0 0 0 3px var(--primary-color-light, #dbeafe);
172
+ }
173
+
174
+ &::placeholder {
175
+ color: var(--text-color-muted, #6b7280);
176
+ }
177
+ }
178
+
179
+ .searchIcon {
180
+ position: absolute;
181
+ right: var(--spacing-sm, 12px);
182
+ top: 50%;
183
+ transform: translateY(-50%);
184
+ color: var(--text-color-muted, #6b7280);
185
+ pointer-events: none;
186
+ }
187
+ }
188
+
189
+ .searchResults {
190
+ h5 {
191
+ color: var(--text-color, #333333);
192
+ font-size: var(--font-size-md, 16px);
193
+ font-weight: var(--font-weight-semibold, 600);
194
+ margin: 0 0 var(--spacing-md, 16px) 0;
195
+ }
196
+ }
197
+
198
+ .searchResult {
199
+ display: flex;
200
+ align-items: center;
201
+ justify-content: space-between;
202
+ padding: var(--spacing-md, 16px);
203
+ border: 1px solid var(--border-color, #e1e5e9);
204
+ border-radius: var(--border-radius, 8px);
205
+ margin-bottom: var(--spacing-sm, 12px);
206
+ cursor: pointer;
207
+ transition: all 0.3s ease;
208
+ background: var(--bg-color, #ffffff);
209
+
210
+ &:hover {
211
+ border-color: var(--primary-color, #3b82f6);
212
+ box-shadow: var(--shadow-md, 0 4px 6px rgba(0, 0, 0, 0.1));
213
+ transform: translateY(-1px);
214
+ }
215
+
216
+ .resultInfo {
217
+ flex: 1;
218
+ }
219
+
220
+ .resultName {
221
+ font-weight: var(--font-weight-semibold, 600);
222
+ color: var(--text-color, #333333);
223
+ margin-bottom: var(--spacing-xs, 8px);
224
+ }
225
+
226
+ .resultDetails {
227
+ display: flex;
228
+ gap: var(--spacing-md, 16px);
229
+ }
230
+
231
+ .resultDetail {
232
+ font-size: var(--font-size-sm, 14px);
233
+ color: var(--text-color-muted, #6b7280);
234
+ }
235
+
236
+ .selectIcon {
237
+ color: var(--primary-color, #3b82f6);
238
+ transition: transform 0.3s ease;
239
+ }
240
+
241
+ &:hover .selectIcon {
242
+ transform: translateX(4px);
243
+ }
244
+ }
245
+
246
+ .noResults {
247
+ text-align: center;
248
+ padding: var(--spacing-xl, 32px);
249
+ color: var(--text-color-muted, #6b7280);
250
+ font-style: italic;
251
+ background: var(--bg-color-secondary, #f8f9fa);
252
+ border-radius: var(--border-radius, 8px);
253
+ }
254
+
255
+ // Selection Preview
256
+ .selectionPreview {
257
+ display: flex;
258
+ align-items: center;
259
+ gap: var(--spacing-lg, 24px);
260
+ margin-bottom: var(--spacing-xl, 32px);
261
+
262
+ @media (max-width: 768px) {
263
+ flex-direction: column;
264
+ gap: var(--spacing-md, 16px);
265
+ }
266
+ }
267
+
268
+ .entityCard {
269
+ flex: 1;
270
+ padding: var(--spacing-lg, 24px);
271
+ border: 1px solid var(--border-color, #e1e5e9);
272
+ border-radius: var(--border-radius, 8px);
273
+ background: var(--bg-color, #ffffff);
274
+
275
+ h5 {
276
+ color: var(--text-color, #333333);
277
+ font-size: var(--font-size-md, 16px);
278
+ font-weight: var(--font-weight-semibold, 600);
279
+ margin: 0 0 var(--spacing-md, 16px) 0;
280
+ padding-bottom: var(--spacing-sm, 12px);
281
+ border-bottom: 1px solid var(--border-color, #e1e5e9);
282
+ }
283
+
284
+ .entityName {
285
+ font-size: var(--font-size-lg, 18px);
286
+ font-weight: var(--font-weight-semibold, 600);
287
+ color: var(--text-color, #333333);
288
+ margin-bottom: var(--spacing-md, 16px);
289
+ }
290
+
291
+ .entityField {
292
+ display: flex;
293
+ justify-content: space-between;
294
+ margin-bottom: var(--spacing-sm, 12px);
295
+
296
+ .fieldLabel {
297
+ font-weight: var(--font-weight-medium, 500);
298
+ color: var(--text-color-muted, #6b7280);
299
+ }
300
+
301
+ .fieldValue {
302
+ color: var(--text-color, #333333);
303
+ }
304
+ }
305
+ }
306
+
307
+ .mergeArrow {
308
+ color: var(--primary-color, #3b82f6);
309
+ flex-shrink: 0;
310
+
311
+ @media (max-width: 768px) {
312
+ transform: rotate(90deg);
313
+ }
314
+ }
315
+
316
+ // Conflicts Section
317
+ .conflictsSection {
318
+ margin-bottom: var(--spacing-xl, 32px);
319
+
320
+ .conflictNote {
321
+ display: flex;
322
+ align-items: center;
323
+ gap: var(--spacing-sm, 12px);
324
+ padding: var(--spacing-md, 16px);
325
+ background: var(--warning-bg, #fef3c7);
326
+ border: 1px solid var(--warning-border, #f59e0b);
327
+ border-radius: var(--border-radius, 8px);
328
+ margin-bottom: var(--spacing-lg, 24px);
329
+ color: var(--warning-text, #92400e);
330
+ }
331
+
332
+ .conflictItem {
333
+ margin-bottom: var(--spacing-lg, 24px);
334
+ padding: var(--spacing-lg, 24px);
335
+ border: 1px solid var(--border-color, #e1e5e9);
336
+ border-radius: var(--border-radius, 8px);
337
+ background: var(--bg-color, #ffffff);
338
+
339
+ .conflictField {
340
+ margin-bottom: var(--spacing-md, 16px);
341
+ color: var(--text-color, #333333);
342
+ font-weight: var(--font-weight-semibold, 600);
343
+ }
344
+
345
+ .conflictOptions {
346
+ display: grid;
347
+ grid-template-columns: 1fr 1fr;
348
+ gap: var(--spacing-md, 16px);
349
+
350
+ @media (max-width: 768px) {
351
+ grid-template-columns: 1fr;
352
+ }
353
+ }
354
+
355
+ .conflictOption {
356
+ display: flex;
357
+ align-items: center;
358
+ gap: var(--spacing-sm, 12px);
359
+ padding: var(--spacing-md, 16px);
360
+ border: 1px solid var(--border-color, #e1e5e9);
361
+ border-radius: var(--border-radius, 8px);
362
+ cursor: pointer;
363
+ transition: all 0.3s ease;
364
+ background: var(--bg-color, #ffffff);
365
+
366
+ &:hover {
367
+ border-color: var(--primary-color, #3b82f6);
368
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.1));
369
+ }
370
+
371
+ input[type="radio"] {
372
+ margin: 0;
373
+ accent-color: var(--primary-color, #3b82f6);
374
+ }
375
+
376
+ .optionContent {
377
+ flex: 1;
378
+
379
+ .optionLabel {
380
+ display: block;
381
+ font-weight: var(--font-weight-medium, 500);
382
+ color: var(--text-color, #333333);
383
+ margin-bottom: var(--spacing-xs, 8px);
384
+ }
385
+
386
+ .optionValue {
387
+ display: block;
388
+ font-size: var(--font-size-sm, 14px);
389
+ color: var(--text-color-muted, #6b7280);
390
+ word-break: break-all;
391
+ }
392
+ }
393
+
394
+ &:has(input:checked) {
395
+ border-color: var(--primary-color, #3b82f6);
396
+ background: var(--primary-color-light, #dbeafe);
397
+ }
398
+ }
399
+ }
400
+ }
401
+
402
+ .noConflicts {
403
+ text-align: center;
404
+ padding: var(--spacing-xl, 32px);
405
+
406
+ .successIcon {
407
+ color: var(--success-color, #10b981);
408
+ margin-bottom: var(--spacing-md, 16px);
409
+ }
410
+
411
+ p {
412
+ color: var(--text-color, #333333);
413
+ font-size: var(--font-size-md, 16px);
414
+ margin: 0;
415
+ }
416
+ }
417
+
418
+ // Advanced Options
419
+ .advancedSection {
420
+ margin-bottom: var(--spacing-xl, 32px);
421
+ border-top: 1px solid var(--border-color, #e1e5e9);
422
+ padding-top: var(--spacing-lg, 24px);
423
+ position: relative;
424
+ z-index: 1; // Prevent stacking context issues
425
+
426
+ .advancedToggle {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: var(--spacing-sm, 12px);
430
+ background: var(--bg-color, #ffffff);
431
+ border: 1px solid var(--border-color, #e1e5e9);
432
+ color: var(--primary-color, #3b82f6);
433
+ font-size: var(--font-size-md, 16px);
434
+ font-weight: var(--font-weight-medium, 500);
435
+ cursor: pointer;
436
+ padding: var(--spacing-md, 16px) var(--spacing-lg, 24px);
437
+ border-radius: var(--border-radius, 8px);
438
+ transition: all 0.3s ease;
439
+ width: 100%;
440
+ justify-content: flex-start;
441
+ outline: none;
442
+ position: relative;
443
+
444
+ &:hover {
445
+ color: var(--primary-color-dark, #2563eb);
446
+ border-color: var(--primary-color, #3b82f6);
447
+ background: var(--primary-color-light, #dbeafe);
448
+ transform: translateY(-1px);
449
+ box-shadow: var(--shadow-md, 0 4px 6px rgba(0, 0, 0, 0.1));
450
+ }
451
+
452
+ &:focus {
453
+ border-color: var(--primary-color, #3b82f6);
454
+ box-shadow: 0 0 0 3px var(--primary-color-light, #dbeafe);
455
+ }
456
+
457
+ svg {
458
+ transition: transform 0.3s ease;
459
+ }
460
+
461
+ &[aria-expanded="true"] svg {
462
+ transform: rotate(180deg);
463
+ }
464
+ }
465
+
466
+ .advancedOptions {
467
+ margin-top: var(--spacing-md, 16px);
468
+ padding: var(--spacing-xl, 32px);
469
+ background: linear-gradient(135deg, var(--bg-color-secondary, #f8f9fa) 0%, rgba(248, 249, 250, 0.8) 100%);
470
+ border: 1px solid var(--border-color, #e1e5e9);
471
+ border-radius: var(--border-radius, 8px);
472
+ animation: slideDown 0.3s ease-out;
473
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05);
474
+ position: relative;
475
+
476
+ &::before {
477
+ content: '';
478
+ position: absolute;
479
+ top: 0;
480
+ left: 0;
481
+ right: 0;
482
+ height: 4px;
483
+ background: linear-gradient(90deg, var(--primary-color, #3b82f6), var(--primary-color-dark, #2563eb));
484
+ border-radius: var(--border-radius, 8px) var(--border-radius, 8px) 0 0;
485
+ }
486
+
487
+ .option {
488
+ display: flex;
489
+ align-items: center;
490
+ gap: var(--spacing-sm, 12px);
491
+ margin-bottom: var(--spacing-sm, 12px);
492
+ cursor: pointer;
493
+ color: var(--text-color, #333333);
494
+ padding: var(--spacing-sm, 12px);
495
+ border-radius: var(--border-radius, 8px);
496
+ transition: all 0.3s ease;
497
+ background: var(--bg-color, #ffffff);
498
+ border: 1px solid transparent;
499
+
500
+ &:hover {
501
+ background: var(--primary-color-light, #dbeafe);
502
+ border-color: var(--primary-color, #3b82f6);
503
+ transform: translateY(-1px);
504
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.1));
505
+ }
506
+
507
+ input[type="checkbox"] {
508
+ margin: 0;
509
+ accent-color: var(--primary-color, #3b82f6);
510
+ width: 16px;
511
+ height: 16px;
512
+ cursor: pointer;
513
+ flex-shrink: 0;
514
+ }
515
+
516
+ label {
517
+ cursor: pointer;
518
+ line-height: 1.4;
519
+ user-select: none;
520
+ font-weight: var(--font-weight-medium, 500);
521
+ font-size: var(--font-size-sm, 14px);
522
+ }
523
+
524
+ &:last-child {
525
+ margin-bottom: 0;
526
+ }
527
+ }
528
+
529
+ .note {
530
+ margin-top: var(--spacing-lg, 24px);
531
+ padding: var(--spacing-md, 16px);
532
+ background: var(--info-bg, #eff6ff);
533
+ border: 1px solid var(--info-border, #3b82f6);
534
+ border-radius: var(--border-radius, 8px);
535
+ border-left: 4px solid var(--primary-color, #3b82f6);
536
+
537
+ p {
538
+ margin: 0;
539
+ color: var(--info-text, #1e40af);
540
+ font-size: var(--font-size-sm, 14px);
541
+ line-height: 1.5;
542
+ font-style: italic;
543
+ }
544
+ }
545
+
546
+ .relationshipOptions {
547
+ margin-top: var(--spacing-lg, 24px);
548
+
549
+ label {
550
+ display: block;
551
+ margin-bottom: var(--spacing-sm, 12px);
552
+ font-weight: var(--font-weight-medium, 500);
553
+ color: var(--text-color, #333333);
554
+ }
555
+ }
556
+ }
557
+ }
558
+
559
+ @keyframes slideDown {
560
+ from {
561
+ opacity: 0;
562
+ transform: translateY(-10px);
563
+ }
564
+ to {
565
+ opacity: 1;
566
+ transform: translateY(0);
567
+ }
568
+ }
569
+
570
+ // Action Buttons
571
+ .actionButtons {
572
+ display: flex;
573
+ gap: var(--spacing-md, 16px);
574
+ justify-content: flex-end;
575
+ margin-top: var(--spacing-xl, 32px);
576
+ padding-top: var(--spacing-lg, 24px);
577
+ border-top: 1px solid var(--border-color, #e1e5e9);
578
+
579
+ @media (max-width: 768px) {
580
+ flex-direction: column;
581
+ }
582
+ }
583
+
584
+ .primaryBtn, .secondaryBtn {
585
+ padding: var(--spacing-sm, 12px) var(--spacing-lg, 24px);
586
+ border-radius: var(--border-radius, 8px);
587
+ font-size: var(--font-size-md, 16px);
588
+ font-weight: var(--font-weight-medium, 500);
589
+ cursor: pointer;
590
+ transition: all 0.3s ease;
591
+ min-width: 120px;
592
+ display: flex;
593
+ align-items: center;
594
+ justify-content: center;
595
+ gap: var(--spacing-xs, 8px);
596
+
597
+ &:disabled {
598
+ opacity: 0.6;
599
+ cursor: not-allowed;
600
+ }
601
+ }
602
+
603
+ .primaryBtn {
604
+ background: var(--primary-color, #3b82f6);
605
+ color: white;
606
+ border: 1px solid var(--primary-color, #3b82f6);
607
+
608
+ &:hover:not(:disabled) {
609
+ background: var(--primary-color-dark, #2563eb);
610
+ border-color: var(--primary-color-dark, #2563eb);
611
+ box-shadow: var(--shadow-md, 0 4px 6px rgba(0, 0, 0, 0.1));
612
+ }
613
+ }
614
+
615
+ .secondaryBtn {
616
+ background: var(--bg-color, #ffffff);
617
+ color: var(--text-color, #333333);
618
+ border: 1px solid var(--border-color, #e1e5e9);
619
+
620
+ &:hover:not(:disabled) {
621
+ background: var(--bg-color-secondary, #f8f9fa);
622
+ border-color: var(--border-color-dark, #d1d5db);
623
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.1));
624
+ }
625
+ }
626
+
627
+ // Success Message
628
+ .successMessage {
629
+ text-align: center;
630
+ padding: var(--spacing-xl, 32px);
631
+
632
+ .successIcon {
633
+ color: var(--success-color, #10b981);
634
+ margin-bottom: var(--spacing-lg, 24px);
635
+ }
636
+
637
+ h4 {
638
+ color: var(--text-color, #333333);
639
+ font-size: var(--font-size-xl, 20px);
640
+ font-weight: var(--font-weight-semibold, 600);
641
+ margin: 0 0 var(--spacing-md, 16px) 0;
642
+ }
643
+
644
+ p {
645
+ color: var(--text-color-muted, #6b7280);
646
+ font-size: var(--font-size-md, 16px);
647
+ line-height: 1.6;
648
+ margin: 0 0 var(--spacing-xl, 32px) 0;
649
+ max-width: 500px;
650
+ margin-left: auto;
651
+ margin-right: auto;
652
+ }
653
+
654
+ .actionButtons {
655
+ justify-content: center;
656
+ border-top: none;
657
+ padding-top: 0;
658
+ margin-top: 0;
659
+ }
660
+ }
661
+
662
+ // Responsive Design
663
+ @media (max-width: 768px) {
664
+ .container {
665
+ padding: var(--spacing-md, 16px);
666
+ margin: var(--spacing-sm, 12px) 0;
667
+ }
668
+
669
+ .header {
670
+ h3 {
671
+ font-size: var(--font-size-md, 16px);
672
+ }
673
+ }
674
+
675
+ .progressSteps {
676
+ padding: 0 var(--spacing-sm, 12px);
677
+
678
+ .step {
679
+ span {
680
+ font-size: var(--font-size-xs, 11px);
681
+ }
682
+ }
683
+ }
684
+
685
+ .stepContent {
686
+ h4 {
687
+ font-size: var(--font-size-md, 16px);
688
+ }
689
+ }
690
+ }
@@ -61,6 +61,24 @@
61
61
  margin-top: 1px;
62
62
  }
63
63
 
64
+ .primaryIndicator {
65
+ background: #007bff;
66
+ color: white;
67
+ padding: 1px 4px;
68
+ border-radius: 2px;
69
+ font-size: 0.7em;
70
+ font-weight: 500;
71
+ text-transform: uppercase;
72
+ margin-left: 4px;
73
+ }
74
+
75
+ .relationshipType {
76
+ font-size: 0.75em;
77
+ color: #666;
78
+ text-transform: capitalize;
79
+ margin-top: 2px;
80
+ }
81
+
64
82
  /* Global styles for react-select to ensure it works in modals */
65
83
  :global {
66
84
  .visns-select__menu-portal {