@visns-studio/visns-components 5.15.8 → 5.15.10

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.
@@ -18,11 +18,17 @@
18
18
  border-bottom: 1px solid rgba(var(--primary-rgb), 0.7);
19
19
  z-index: 100;
20
20
  position: relative;
21
+ min-width: 1060px;
21
22
 
22
23
  .headerContent {
23
24
  display: flex;
24
25
  justify-content: space-between;
25
26
  align-items: center;
27
+ min-width: 0;
28
+ }
29
+
30
+ .titleSection {
31
+ flex-shrink: 0;
26
32
  }
27
33
 
28
34
  .title {
@@ -32,12 +38,44 @@
32
38
  margin: 0;
33
39
  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
34
40
  letter-spacing: -0.5px;
41
+ white-space: nowrap;
35
42
  }
36
43
 
37
44
  .controls {
38
45
  display: flex;
39
46
  gap: 12px;
40
47
  align-items: center;
48
+ flex-shrink: 0;
49
+ min-width: 540px;
50
+ }
51
+
52
+ .projectInput {
53
+ background: rgba(255, 255, 255, 0.15);
54
+ border: 1px solid rgba(255, 255, 255, 0.3);
55
+ border-radius: var(--br, 8px);
56
+ padding: 8px 12px;
57
+ color: white;
58
+ font-size: 14px;
59
+ width: 300px;
60
+ max-width: 300px;
61
+ transition: all 0.2s ease;
62
+ margin-right: 12px;
63
+ flex-shrink: 0;
64
+
65
+ &::placeholder {
66
+ color: rgba(255, 255, 255, 0.7);
67
+ }
68
+
69
+ &:focus {
70
+ outline: none;
71
+ background: rgba(255, 255, 255, 0.25);
72
+ border-color: rgba(255, 255, 255, 0.5);
73
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2);
74
+ }
75
+
76
+ &:hover {
77
+ background: rgba(255, 255, 255, 0.2);
78
+ }
41
79
  }
42
80
 
43
81
  .iconButton {
@@ -46,6 +84,7 @@
46
84
  justify-content: center;
47
85
  width: 44px;
48
86
  height: 44px;
87
+ min-width: 44px;
49
88
  padding: 0;
50
89
  background: var(--secondary-color, #6b7280);
51
90
  color: white;
@@ -56,6 +95,7 @@
56
95
  border: 1px solid rgba(var(--secondary-rgb, 107, 114, 128), 1);
57
96
  position: relative;
58
97
  margin: 0 2px;
98
+ flex-shrink: 0;
59
99
 
60
100
  &::after {
61
101
  content: attr(title);
@@ -129,6 +169,17 @@
129
169
  }
130
170
  }
131
171
 
172
+ &.importBtn {
173
+ background: var(--warning-color, #f59e0b);
174
+ border-color: rgba(var(--warning-rgb, 245, 158, 11), 1);
175
+
176
+ &:hover:not(:disabled) {
177
+ background: rgba(var(--warning-rgb, 245, 158, 11), 0.8);
178
+ transform: translateY(-2px);
179
+ box-shadow: 0 4px 12px rgba(var(--warning-rgb, 245, 158, 11), 0.3);
180
+ }
181
+ }
182
+
132
183
  &.saveFileBtn {
133
184
  background: var(--secondary-color, #6b7280);
134
185
  border-color: rgba(var(--secondary-rgb, 107, 114, 128), 1);
@@ -180,6 +231,7 @@
180
231
  overflow: hidden;
181
232
  gap: 0;
182
233
  position: relative;
234
+ height: calc(100vh - 100px);
183
235
  }
184
236
 
185
237
  .mapContainer {
@@ -236,9 +288,6 @@
236
288
  .imageContainer {
237
289
  flex: 1;
238
290
  position: relative;
239
- min-height: calc(100vh - 100px);
240
- height: calc(100vh - 100px);
241
- width: calc(100% - 400px);
242
291
  background: var(--bg);
243
292
  overflow: hidden;
244
293
  cursor: default;
@@ -247,9 +296,6 @@
247
296
  cursor: crosshair;
248
297
  }
249
298
 
250
- &.sidebarCollapsed {
251
- width: 100%;
252
- }
253
299
 
254
300
  &.dragOver {
255
301
  background: rgba(var(--primary-rgb), 0.05);
@@ -359,23 +405,16 @@
359
405
  }
360
406
 
361
407
  .sidebar {
362
- position: absolute;
363
- top: 70px;
364
- right: 0;
365
408
  width: 400px;
366
- height: calc(100% - 70px);
409
+ min-width: 400px;
367
410
  background: var(--item-color);
368
411
  border-left: 1px solid var(--border-color, #e5e7eb);
369
412
  display: flex;
370
413
  flex-direction: column;
371
414
  z-index: 20;
372
415
  box-shadow: -4px 0 16px rgba(0, 0, 0, 0.1);
373
- transform: translateX(0);
374
- transition: transform 0.3s ease;
375
-
376
- &.collapsed {
377
- transform: translateX(100%);
378
- }
416
+ flex-shrink: 0;
417
+ height: 100%;
379
418
 
380
419
  .sidebarHeader {
381
420
  padding: 20px 24px;
@@ -384,6 +423,75 @@
384
423
  position: relative;
385
424
  z-index: 1;
386
425
 
426
+ .sidebarTabs {
427
+ display: flex;
428
+ gap: 4px;
429
+ margin-bottom: 12px;
430
+
431
+ .tabButton {
432
+ flex: 1;
433
+ padding: 8px 12px;
434
+ background: transparent;
435
+ border: 1px solid var(--border-color, #e5e7eb);
436
+ border-radius: 6px;
437
+ font-size: 14px;
438
+ font-weight: 500;
439
+ color: var(--paragraph-color, #64748b);
440
+ cursor: pointer;
441
+ transition: all 0.2s ease;
442
+ display: flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ gap: 4px;
446
+
447
+ .tabCount {
448
+ font-size: 12px;
449
+ opacity: 0.7;
450
+ }
451
+
452
+ &:hover {
453
+ background: var(--surface-color, #f1f5f9);
454
+ color: var(--heading-color, #1e293b);
455
+ }
456
+
457
+ &.active {
458
+ background: var(--primary-color, #3b82f6);
459
+ color: white;
460
+ border-color: var(--primary-color, #3b82f6);
461
+
462
+ .tabCount {
463
+ opacity: 0.8;
464
+ }
465
+ }
466
+ }
467
+ }
468
+
469
+ .currentProject {
470
+ display: flex;
471
+ align-items: center;
472
+ gap: 8px;
473
+ padding: 8px 12px;
474
+ background: var(--success-color-light, #ecfdf5);
475
+ border: 1px solid var(--success-color, #10b981);
476
+ border-radius: 6px;
477
+ font-size: 12px;
478
+
479
+ .projectLabel {
480
+ color: var(--success-color, #10b981);
481
+ font-weight: 500;
482
+ }
483
+
484
+ .projectName {
485
+ color: var(--heading-color, #1e293b);
486
+ font-weight: 600;
487
+ flex: 1;
488
+ max-width: 200px;
489
+ overflow: hidden;
490
+ text-overflow: ellipsis;
491
+ white-space: nowrap;
492
+ }
493
+ }
494
+
387
495
  .sidebarTitle {
388
496
  font-size: 18px;
389
497
  font-weight: 700;
@@ -400,6 +508,140 @@
400
508
  }
401
509
  }
402
510
 
511
+ .sidebarContent {
512
+ flex: 1;
513
+ overflow: hidden;
514
+ display: flex;
515
+ flex-direction: column;
516
+ }
517
+
518
+ .emptyState {
519
+ text-align: center;
520
+ color: #6c757d;
521
+ padding: 40px 20px;
522
+ font-style: italic;
523
+
524
+ .emptyStateSubtext {
525
+ fontSize: 12px;
526
+ margin-top: 8px;
527
+ }
528
+ }
529
+
530
+ .loadingState {
531
+ text-align: center;
532
+ color: #6c757d;
533
+ padding: 40px 20px;
534
+ font-style: italic;
535
+ }
536
+
537
+ .projectsList {
538
+ flex: 1;
539
+ overflow-y: auto;
540
+ padding: 20px 24px;
541
+
542
+ &::-webkit-scrollbar {
543
+ width: 6px;
544
+ }
545
+
546
+ &::-webkit-scrollbar-track {
547
+ background: rgba(0, 0, 0, 0.05);
548
+ border-radius: 3px;
549
+ }
550
+
551
+ &::-webkit-scrollbar-thumb {
552
+ background: #d1d5db;
553
+ border-radius: 3px;
554
+
555
+ &:hover {
556
+ background: #9ca3af;
557
+ }
558
+ }
559
+
560
+ .projectItem {
561
+ padding: 16px;
562
+ background: var(--item-color);
563
+ border-radius: var(--br, 8px);
564
+ margin-bottom: 12px;
565
+ border: 1px solid var(--border-color, #e5e7eb);
566
+ transition: all 0.2s ease;
567
+ cursor: pointer;
568
+ position: relative;
569
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
570
+
571
+ &:hover {
572
+ background: var(--surface-color, #f8fafc);
573
+ border-color: var(--primary-color, #3b82f6);
574
+ transform: translateY(-1px);
575
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
576
+ }
577
+
578
+ &.selected {
579
+ border-color: var(--primary-color, #3b82f6);
580
+ background: var(--primary-color-light, #eff6ff);
581
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
582
+ }
583
+
584
+ .projectHeader {
585
+ margin-bottom: 8px;
586
+
587
+ .projectTitle {
588
+ font-size: 16px;
589
+ font-weight: 600;
590
+ color: var(--heading-color, #1e293b);
591
+ margin: 0 0 4px 0;
592
+ line-height: 1.2;
593
+ }
594
+
595
+ .projectMeta {
596
+ display: flex;
597
+ gap: 8px;
598
+ align-items: center;
599
+
600
+ .projectMode {
601
+ background: var(--primary-color-light, #eff6ff);
602
+ color: var(--primary-color, #3b82f6);
603
+ padding: 2px 6px;
604
+ border-radius: 4px;
605
+ font-size: 11px;
606
+ font-weight: 500;
607
+ text-transform: uppercase;
608
+ }
609
+
610
+ .projectDate {
611
+ font-size: 12px;
612
+ color: var(--paragraph-color, #64748b);
613
+ }
614
+ }
615
+ }
616
+
617
+ .projectInfo {
618
+ display: flex;
619
+ gap: 12px;
620
+ align-items: center;
621
+ margin-bottom: 8px;
622
+
623
+ .cameraCount {
624
+ font-size: 13px;
625
+ color: var(--paragraph-color, #64748b);
626
+ font-weight: 500;
627
+ }
628
+
629
+ .hasImage {
630
+ font-size: 12px;
631
+ color: var(--success-color, #10b981);
632
+ font-weight: 500;
633
+ }
634
+ }
635
+
636
+ .projectDescription {
637
+ font-size: 12px;
638
+ color: var(--paragraph-color, #64748b);
639
+ line-height: 1.4;
640
+ font-style: italic;
641
+ }
642
+ }
643
+ }
644
+
403
645
  .camerasList {
404
646
  flex: 1;
405
647
  overflow-y: auto;
@@ -3831,3 +3831,345 @@
3831
3831
  font-size: 0.9rem;
3832
3832
  }
3833
3833
  }
3834
+
3835
+ /* Unique Field Configuration Styling */
3836
+ .uniqueFieldConfig {
3837
+ margin-top: 24px;
3838
+ background-color: rgba(106, 90, 205, 0.05); // Subtle purple background
3839
+ border: 1px solid rgba(106, 90, 205, 0.15);
3840
+ border-radius: var(--radius);
3841
+ overflow: hidden;
3842
+ transition: all 0.3s ease;
3843
+
3844
+ &:hover {
3845
+ border-color: rgba(106, 90, 205, 0.25);
3846
+ box-shadow: 0 2px 8px rgba(106, 90, 205, 0.1);
3847
+ }
3848
+ }
3849
+
3850
+ .configHeader {
3851
+ padding: 16px 20px 12px 20px;
3852
+ background: linear-gradient(135deg, rgba(106, 90, 205, 0.08) 0%, rgba(106, 90, 205, 0.03) 100%);
3853
+ border-bottom: 1px solid rgba(106, 90, 205, 0.1);
3854
+
3855
+ h4 {
3856
+ margin: 0 0 6px 0;
3857
+ font-size: 1rem;
3858
+ font-weight: 600;
3859
+ color: #4c46a6;
3860
+ display: flex;
3861
+ align-items: center;
3862
+ gap: 8px;
3863
+
3864
+ svg {
3865
+ color: #6a5acd;
3866
+ flex-shrink: 0;
3867
+ }
3868
+
3869
+ &::before {
3870
+ content: '';
3871
+ width: 3px;
3872
+ height: 18px;
3873
+ background: linear-gradient(45deg, #6a5acd, #9370db);
3874
+ border-radius: 2px;
3875
+ }
3876
+ }
3877
+
3878
+ p {
3879
+ margin: 0;
3880
+ font-size: 0.875rem;
3881
+ color: var(--paragraph-color);
3882
+ opacity: 0.8;
3883
+ }
3884
+ }
3885
+
3886
+ .configContent {
3887
+ padding: 20px;
3888
+ }
3889
+
3890
+ .checkboxLabel {
3891
+ display: flex;
3892
+ align-items: flex-start;
3893
+ cursor: pointer;
3894
+ font-size: 0.875rem;
3895
+ color: var(--header-color);
3896
+ margin-bottom: 16px;
3897
+ padding: 12px;
3898
+ background-color: rgba(255, 255, 255, 0.3);
3899
+ border-radius: var(--radius);
3900
+ border: 1px solid rgba(106, 90, 205, 0.1);
3901
+ transition: all 0.2s ease;
3902
+
3903
+ &:hover {
3904
+ background-color: rgba(255, 255, 255, 0.5);
3905
+ border-color: rgba(106, 90, 205, 0.2);
3906
+ transform: translateY(-1px);
3907
+ }
3908
+
3909
+ input[type="checkbox"] {
3910
+ margin-right: 12px;
3911
+ width: 18px;
3912
+ height: 18px;
3913
+ cursor: pointer;
3914
+ accent-color: #6a5acd;
3915
+ margin-top: 1px; // Align with text
3916
+ flex-shrink: 0;
3917
+ }
3918
+ }
3919
+
3920
+ .checkboxText {
3921
+ font-weight: 500;
3922
+ color: var(--header-color);
3923
+ line-height: 1.4;
3924
+
3925
+ .activeIndicator {
3926
+ display: inline-flex;
3927
+ align-items: center;
3928
+ gap: 4px;
3929
+ margin-left: 8px;
3930
+ padding: 2px 8px;
3931
+ background-color: rgba(40, 167, 69, 0.1);
3932
+ color: #28a745;
3933
+ font-size: 0.75rem;
3934
+ font-weight: 600;
3935
+ border-radius: 12px;
3936
+ border: 1px solid rgba(40, 167, 69, 0.2);
3937
+
3938
+ svg {
3939
+ color: #28a745;
3940
+ flex-shrink: 0;
3941
+ }
3942
+ }
3943
+ }
3944
+
3945
+ .uniqueFieldSelector {
3946
+ margin-left: 30px; // Align with checkbox text
3947
+ padding-left: 16px;
3948
+ border-left: 2px solid rgba(106, 90, 205, 0.2);
3949
+ animation: slideDown 0.3s ease-out;
3950
+ }
3951
+
3952
+ @keyframes slideDown {
3953
+ from {
3954
+ opacity: 0;
3955
+ transform: translateY(-10px);
3956
+ }
3957
+ to {
3958
+ opacity: 1;
3959
+ transform: translateY(0);
3960
+ }
3961
+ }
3962
+
3963
+ .fieldLabel {
3964
+ display: block;
3965
+ font-size: 0.875rem;
3966
+ font-weight: 500;
3967
+ color: var(--header-color);
3968
+ margin-bottom: 8px;
3969
+ }
3970
+
3971
+ .fieldSelect {
3972
+ width: 100%;
3973
+ padding: 12px 16px;
3974
+ border: 2px solid rgba(106, 90, 205, 0.2);
3975
+ border-radius: var(--radius);
3976
+ font-size: 0.875rem;
3977
+ background-color: var(--bg-color);
3978
+ color: var(--header-color);
3979
+ transition: all 0.2s ease;
3980
+ cursor: pointer;
3981
+
3982
+ &:focus {
3983
+ outline: none;
3984
+ border-color: #6a5acd;
3985
+ box-shadow: 0 0 0 3px rgba(106, 90, 205, 0.15);
3986
+ }
3987
+
3988
+ &:hover {
3989
+ border-color: rgba(106, 90, 205, 0.3);
3990
+ }
3991
+
3992
+ option {
3993
+ padding: 8px;
3994
+ color: var(--header-color);
3995
+ background-color: var(--bg-color);
3996
+ }
3997
+ }
3998
+
3999
+ .fieldHelp {
4000
+ margin-top: 8px;
4001
+ font-size: 0.75rem;
4002
+ color: var(--paragraph-color);
4003
+ line-height: 1.4;
4004
+ padding: 8px 12px;
4005
+ background-color: rgba(106, 90, 205, 0.05);
4006
+ border-radius: var(--radius);
4007
+ border-left: 3px solid rgba(106, 90, 205, 0.3);
4008
+
4009
+ code {
4010
+ display: block;
4011
+ margin-top: 6px;
4012
+ padding: 6px 8px;
4013
+ background-color: rgba(0, 0, 0, 0.05);
4014
+ border-radius: 4px;
4015
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
4016
+ font-size: 0.7rem;
4017
+ color: #4c46a6;
4018
+ border: 1px solid rgba(106, 90, 205, 0.15);
4019
+ white-space: pre-wrap;
4020
+ word-break: break-word;
4021
+ }
4022
+
4023
+ strong {
4024
+ color: var(--header-color);
4025
+ font-weight: 600;
4026
+ }
4027
+ }
4028
+
4029
+ /* Row Exclusion Modal Styling */
4030
+ .rowExclusionModal {
4031
+ background-color: var(--bg-color);
4032
+ border-radius: var(--radius);
4033
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
4034
+ max-width: 800px;
4035
+ width: 90vw;
4036
+ max-height: 80vh;
4037
+ display: flex;
4038
+ flex-direction: column;
4039
+
4040
+ .modalHeader {
4041
+ padding: 24px;
4042
+ border-bottom: 1px solid var(--border-color);
4043
+ background: linear-gradient(135deg, rgba(220, 38, 127, 0.05) 0%, rgba(220, 38, 127, 0.02) 100%);
4044
+
4045
+ h3 {
4046
+ margin: 0 0 8px 0;
4047
+ font-size: 1.25rem;
4048
+ color: var(--header-color);
4049
+ font-weight: 600;
4050
+ }
4051
+
4052
+ p {
4053
+ margin: 0;
4054
+ color: var(--paragraph-color);
4055
+ font-size: 0.875rem;
4056
+ }
4057
+ }
4058
+
4059
+ .modalBody {
4060
+ flex: 1;
4061
+ overflow: hidden;
4062
+ display: flex;
4063
+ flex-direction: column;
4064
+ }
4065
+
4066
+ .rowExclusionList {
4067
+ flex: 1;
4068
+ overflow-y: auto;
4069
+ padding: 16px 24px;
4070
+ max-height: 400px;
4071
+ }
4072
+
4073
+ .rowExclusionItem {
4074
+ display: flex;
4075
+ align-items: center;
4076
+ padding: 12px;
4077
+ margin-bottom: 8px;
4078
+ border-radius: var(--radius);
4079
+ border: 1px solid var(--border-color);
4080
+ background-color: var(--tertiary-color);
4081
+ cursor: pointer;
4082
+ transition: all 0.2s ease;
4083
+
4084
+ &:hover {
4085
+ background-color: rgba(var(--primary-rgb), 0.05);
4086
+ border-color: rgba(var(--primary-rgb), 0.2);
4087
+ transform: translateX(4px);
4088
+ }
4089
+
4090
+ input[type="checkbox"] {
4091
+ margin-right: 12px;
4092
+ width: 16px;
4093
+ height: 16px;
4094
+ cursor: pointer;
4095
+ accent-color: var(--primary-color);
4096
+ flex-shrink: 0;
4097
+ }
4098
+ }
4099
+
4100
+ .rowPreview {
4101
+ display: flex;
4102
+ flex-direction: column;
4103
+ gap: 4px;
4104
+ flex: 1;
4105
+ min-width: 0;
4106
+ }
4107
+
4108
+ .rowValue {
4109
+ font-size: 0.875rem;
4110
+ color: var(--header-color);
4111
+ white-space: nowrap;
4112
+ overflow: hidden;
4113
+ text-overflow: ellipsis;
4114
+
4115
+ &:not(:first-child) {
4116
+ color: var(--paragraph-color);
4117
+ font-size: 0.8rem;
4118
+ }
4119
+ }
4120
+
4121
+ .exclusionSummary {
4122
+ padding: 16px 24px;
4123
+ background-color: rgba(var(--primary-rgb), 0.05);
4124
+ border-top: 1px solid var(--border-color);
4125
+
4126
+ p {
4127
+ margin: 0;
4128
+ font-size: 0.875rem;
4129
+ color: var(--primary-color);
4130
+ text-align: center;
4131
+ font-weight: 500;
4132
+ }
4133
+ }
4134
+
4135
+ .modalFooter {
4136
+ padding: 16px 24px;
4137
+ border-top: 1px solid var(--border-color);
4138
+ display: flex;
4139
+ gap: 12px;
4140
+ justify-content: flex-end;
4141
+ background-color: var(--tertiary-color);
4142
+
4143
+ button {
4144
+ padding: 10px 20px;
4145
+ border-radius: var(--radius);
4146
+ font-size: 0.875rem;
4147
+ font-weight: 500;
4148
+ cursor: pointer;
4149
+ transition: all 0.2s ease;
4150
+ border: 1px solid transparent;
4151
+
4152
+ &.cancelButton {
4153
+ background-color: transparent;
4154
+ color: var(--paragraph-color);
4155
+ border-color: var(--border-color);
4156
+
4157
+ &:hover {
4158
+ background-color: var(--border-color);
4159
+ color: var(--header-color);
4160
+ }
4161
+ }
4162
+
4163
+ &.confirmButton {
4164
+ background-color: var(--primary-color);
4165
+ color: white;
4166
+
4167
+ &:hover {
4168
+ background-color: var(--primary-hover, var(--primary-color));
4169
+ transform: translateY(-1px);
4170
+ box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.3);
4171
+ }
4172
+ }
4173
+ }
4174
+ }
4175
+ }