@visns-studio/visns-components 5.5.6 → 5.5.8

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.
@@ -172,6 +172,33 @@
172
172
  font-weight: 600;
173
173
  }
174
174
 
175
+ .sectionHeaderActions {
176
+ display: flex;
177
+ align-items: center;
178
+ gap: 8px;
179
+ }
180
+
181
+ .helpButton {
182
+ background: none;
183
+ border: none;
184
+ color: var(--muted-color, #6b7280);
185
+ cursor: pointer;
186
+ font-size: 0.9rem;
187
+ padding: 2px;
188
+ border-radius: 4px;
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ transition: all 0.2s ease;
193
+ width: 24px;
194
+ height: 24px;
195
+
196
+ &:hover {
197
+ color: var(--primary-color, #2563eb);
198
+ background-color: rgba(37, 99, 235, 0.1);
199
+ }
200
+ }
201
+
175
202
  .toggleBtn {
176
203
  background: none;
177
204
  border: none;
@@ -320,6 +347,179 @@
320
347
  margin-bottom: 16px;
321
348
  }
322
349
 
350
+ // Filter group styles
351
+ .filterGroup {
352
+ margin-bottom: 16px;
353
+ border: 1px solid var(--border-color, #e5e7eb);
354
+ border-radius: 8px;
355
+ overflow: hidden;
356
+ }
357
+
358
+ .filterGroupHeader {
359
+ display: flex;
360
+ justify-content: space-between;
361
+ align-items: center;
362
+ padding: 12px 16px;
363
+ background-color: #f3f4f6;
364
+ border-bottom: 1px solid var(--border-color, #e5e7eb);
365
+ }
366
+
367
+ .filterGroupTitle {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 16px;
371
+
372
+ h4 {
373
+ margin: 0;
374
+ font-size: 0.95em;
375
+ font-weight: 600;
376
+ color: var(--heading-color, #1f2937);
377
+ }
378
+ }
379
+
380
+ .filterGroupOperator {
381
+ display: flex;
382
+ align-items: center;
383
+ gap: 8px;
384
+
385
+ label {
386
+ font-size: 0.85em;
387
+ color: var(--paragraph-color, #4b5563);
388
+ }
389
+ }
390
+
391
+ .filterGroupActions {
392
+ display: flex;
393
+ gap: 8px;
394
+ }
395
+
396
+ .filterOperatorContainer {
397
+ display: flex;
398
+ justify-content: space-between;
399
+ align-items: center;
400
+ margin-bottom: 16px;
401
+ padding: 12px 16px;
402
+ background-color: #f9fafb;
403
+ border: 1px solid var(--border-color, #e5e7eb);
404
+ border-radius: 8px;
405
+ }
406
+
407
+ .mainFilterOperator {
408
+ display: flex;
409
+ align-items: center;
410
+ gap: 12px;
411
+
412
+ label {
413
+ font-size: 0.9em;
414
+ font-weight: 500;
415
+ color: var(--heading-color, #1f2937);
416
+ }
417
+ }
418
+
419
+ .operatorSelect {
420
+ padding: 6px 10px;
421
+ border: 1px solid var(--border-color, #d1d5db);
422
+ border-radius: 4px;
423
+ background-color: white;
424
+ font-size: 0.85em;
425
+ color: var(--paragraph-color, #4b5563);
426
+ min-width: 200px;
427
+ }
428
+
429
+ .operatorOptions {
430
+ display: flex;
431
+ gap: 12px;
432
+ margin-left: 8px;
433
+ }
434
+
435
+ .operatorOption {
436
+ border: 1px solid var(--border-color, #d1d5db);
437
+ border-radius: 6px;
438
+ padding: 8px 16px;
439
+ cursor: pointer;
440
+ transition: all 0.2s ease;
441
+ background-color: #f9fafb;
442
+ min-width: 140px;
443
+
444
+ &:hover {
445
+ background-color: #f3f4f6;
446
+ border-color: #c1c5cb;
447
+ }
448
+ }
449
+
450
+ .operatorOptionSelected {
451
+ background-color: var(--primary-color, #3b82f6);
452
+ color: white;
453
+ border-color: var(--primary-color, #3b82f6);
454
+
455
+ &:hover {
456
+ background-color: darken(#3b82f6, 5%);
457
+ border-color: darken(#3b82f6, 5%);
458
+ }
459
+
460
+ .operatorDescription {
461
+ color: rgba(255, 255, 255, 0.9);
462
+ }
463
+ }
464
+
465
+ .operatorName {
466
+ font-weight: 600;
467
+ font-size: 0.9em;
468
+ margin-bottom: 4px;
469
+ }
470
+
471
+ .operatorDescription {
472
+ font-size: 0.75em;
473
+ color: var(--muted-color, #6b7280);
474
+ }
475
+
476
+ .operatorButtonGroup {
477
+ display: flex;
478
+ border: 1px solid var(--border-color, #d1d5db);
479
+ border-radius: 4px;
480
+ overflow: hidden;
481
+ }
482
+
483
+ .operatorButton {
484
+ padding: 4px 12px;
485
+ background-color: #f9fafb;
486
+ border: none;
487
+ font-size: 0.8em;
488
+ cursor: pointer;
489
+ transition: all 0.2s ease;
490
+
491
+ &:first-child {
492
+ border-right: 1px solid var(--border-color, #d1d5db);
493
+ }
494
+
495
+ &:hover {
496
+ background-color: #f3f4f6;
497
+ }
498
+ }
499
+
500
+ .operatorButtonSelected {
501
+ background-color: var(--primary-color, #3b82f6);
502
+ color: white;
503
+
504
+ &:hover {
505
+ background-color: darken(#3b82f6, 5%);
506
+ }
507
+ }
508
+
509
+ .filterActionButtons {
510
+ display: flex;
511
+ gap: 8px;
512
+ }
513
+
514
+ .emptyFilterGroup {
515
+ padding: 16px;
516
+ text-align: center;
517
+ color: var(--muted-color, #6b7280);
518
+ font-style: italic;
519
+ font-size: 0.9em;
520
+ background-color: #f9fafb;
521
+ }
522
+
323
523
  .joinSection {
324
524
  margin-top: 8px;
325
525
  padding: 16px;
@@ -167,11 +167,14 @@
167
167
  .InovuaReactDataGrid__row-cell-wrap {
168
168
  background: var(--hover-color, rgb(230, 240, 250)) !important;
169
169
  cursor: pointer;
170
+ border-radius: 0 !important;
170
171
  }
171
172
  }
172
173
 
173
174
  .InovuaReactDataGrid {
174
175
  color: var(--paragraph-color) !important;
176
+ border-radius: var(--br, 4px) !important;
177
+ overflow: hidden !important;
175
178
  }
176
179
 
177
180
  .InovuaReactDataGrid__header {
@@ -181,10 +184,12 @@
181
184
  .InovuaReactDataGrid__row-hover-target:hover {
182
185
  color: var(--primary-color) !important;
183
186
  background: var(--hover-color, rgb(230, 240, 250)) !important;
187
+ border-radius: 0 !important;
184
188
  }
185
189
 
186
190
  .InovuaReactDataGrid__row:hover {
187
191
  cursor: pointer;
192
+ border-radius: 0 !important;
188
193
  }
189
194
 
190
195
  #smartTableSearchInput {
@@ -206,45 +211,13 @@
206
211
  transform: translateY(0);
207
212
  }
208
213
 
209
- .filterInput--alt {
210
- position: relative;
211
- display: flex;
212
- align-items: center;
214
+ /* Main filterInput--alt styling moved to the nested version below */
213
215
 
214
- input {
215
- padding-left: 3rem !important;
216
- }
217
- }
216
+ /* Main icon-search styling moved to the nested version below */
218
217
 
219
- .icon-search {
220
- width: max-content;
221
- height: auto;
222
- position: absolute;
223
- z-index: 500;
224
- padding-top: 4px;
225
- padding-left: 20px;
226
- }
227
-
228
- .filterAction--alt {
229
- position: absolute;
230
- right: 8px;
231
- top: 8px;
232
- gap: 5px;
233
- display: flex;
234
-
235
- > .btn {
236
- padding: 10px 70px;
237
- }
238
- }
218
+ /* Standalone filterAction--alt styling moved to the nested version inside filterInput--alt */
239
219
 
240
- .icon-search {
241
- width: max-content;
242
- height: auto;
243
- position: absolute;
244
- z-index: 500;
245
- padding-top: 4px;
246
- padding-left: 20px;
247
- }
220
+ /* Duplicate icon-search styling removed */
248
221
 
249
222
  .tdactions {
250
223
  width: 100%;
@@ -621,6 +594,172 @@
621
594
  }
622
595
  }
623
596
 
597
+ /* DataGrid top container and search container styles */
598
+ .dataGridTopContainer {
599
+ margin-bottom: 8px;
600
+ }
601
+
602
+ .searchContainer {
603
+ display: flex;
604
+ align-items: center;
605
+ justify-content: space-between;
606
+ width: 100%;
607
+ border: 1px solid #d1d5db;
608
+ border-radius: var(--br, 4px);
609
+ overflow: hidden;
610
+ background-color: #fff;
611
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
612
+
613
+ &:focus-within {
614
+ border-color: var(--primary-color, #3b82f6);
615
+ box-shadow: 0 0 0 2px rgba(var(--primary-rgb, 59, 130, 246), 0.2);
616
+ }
617
+ }
618
+
619
+ .searchInputWrapper {
620
+ flex: 1;
621
+ position: relative;
622
+ display: flex;
623
+ align-items: center;
624
+ }
625
+
626
+ .searchInput {
627
+ height: 38px;
628
+ border-radius: 0;
629
+ border: none;
630
+ padding: 0 10px 0 50px;
631
+ width: 100%;
632
+ font-size: 0.9rem;
633
+ box-sizing: border-box;
634
+
635
+ &:focus {
636
+ outline: none;
637
+ border-color: transparent;
638
+ box-shadow: none;
639
+ z-index: 1;
640
+ position: relative;
641
+ }
642
+
643
+ &::placeholder {
644
+ color: #9ca3af;
645
+ }
646
+ }
647
+
648
+ .actionButtonsWrapper {
649
+ display: flex;
650
+ align-items: center;
651
+ justify-content: flex-end;
652
+ }
653
+
654
+ /* Container for when only the action button is shown (search disabled) */
655
+ .actionButtonsContainer {
656
+ display: flex;
657
+ justify-content: flex-end;
658
+ width: 100%;
659
+ margin-bottom: 8px; /* Reduced spacing to match when searchbar is present */
660
+ }
661
+
662
+ .actionButtons {
663
+ display: flex;
664
+ align-items: center;
665
+ height: 38px;
666
+ gap: 0;
667
+
668
+ > .btn {
669
+ height: 38px;
670
+ border-radius: 0;
671
+ display: flex;
672
+ align-items: center;
673
+ justify-content: center;
674
+ padding: 0 20px;
675
+ margin-left: 0;
676
+ font-size: 0.9rem;
677
+ border: none;
678
+ box-sizing: border-box;
679
+
680
+ &:last-child {
681
+ border-top-right-radius: var(--br, 4px);
682
+ border-bottom-right-radius: var(--br, 4px);
683
+ }
684
+
685
+ &:focus,
686
+ &:active {
687
+ outline: none;
688
+ position: relative;
689
+ z-index: 2;
690
+ }
691
+ }
692
+ }
693
+
694
+ /* Standalone button styling when search is disabled */
695
+ .actionButtonsStandalone {
696
+ display: flex;
697
+ align-items: center;
698
+ height: 38px;
699
+ gap: 0;
700
+
701
+ > .btn {
702
+ height: 38px;
703
+ border-radius: var(--br, 4px);
704
+ display: flex;
705
+ align-items: center;
706
+ justify-content: center;
707
+ padding: 0 20px;
708
+ margin-left: 0;
709
+ font-size: 0.9rem;
710
+ border: 1px solid rgba(var(--primary-rgb, 59, 130, 246), 1.1);
711
+ box-sizing: border-box;
712
+ background-color: var(--primary-color, #3b82f6);
713
+ color: var(--tertiary-color, white);
714
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
715
+ transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1) 0s;
716
+
717
+ &:hover {
718
+ color: var(--tertiary-color, white);
719
+ background-color: var(--secondary-color, #2563eb);
720
+ border: 1px solid rgba(var(--secondary-rgb, 37, 99, 235), 1.05);
721
+ }
722
+
723
+ &:focus,
724
+ &:active {
725
+ outline: none;
726
+ box-shadow: 0 0 0 2px rgba(var(--primary-rgb, 59, 130, 246), 0.2);
727
+ position: relative;
728
+ z-index: 2;
729
+ }
730
+ }
731
+ }
732
+
733
+ .icon-search {
734
+ position: absolute;
735
+ left: 22px;
736
+ color: #9ca3af;
737
+ width: 16px;
738
+ height: 16px;
739
+ z-index: 500;
740
+ top: 50%;
741
+ transform: translateY(-50%);
742
+ display: flex;
743
+ align-items: center;
744
+ justify-content: center;
745
+ pointer-events: none;
746
+ opacity: 0.7;
747
+ }
748
+
749
+ /* DataGrid container styles */
750
+ .dataGridContainer {
751
+ width: 100%;
752
+ border-radius: var(--br, 4px);
753
+ overflow: hidden;
754
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
755
+
756
+ &:focus-within {
757
+ box-shadow: 0 0 0 2px rgba(var(--primary-rgb, 59, 130, 246), 0.2),
758
+ 0 1px 3px rgba(0, 0, 0, 0.05);
759
+ }
760
+ }
761
+
762
+ /* Original filter input styles kept for backward compatibility */
624
763
  .filterInput {
625
764
  display: flex;
626
765
  align-items: center;
@@ -632,28 +771,71 @@
632
771
  display: flex;
633
772
  align-items: center;
634
773
  justify-content: flex-start;
635
- margin-bottom: 10px;
774
+ margin-bottom: 0;
636
775
  width: 100%;
637
- height: 58px;
776
+ height: 38px;
777
+ position: relative;
778
+ border: 1px solid #d1d5db;
779
+ border-bottom: none;
638
780
 
639
781
  .icon-search {
640
782
  position: absolute;
641
- left: 10px;
642
- color: #6b7280;
783
+ left: 22px;
784
+ color: #9ca3af;
785
+ width: 16px;
786
+ height: 16px;
787
+ z-index: 500;
788
+ top: 50%;
789
+ transform: translateY(-50%);
790
+ display: flex;
791
+ align-items: center;
792
+ justify-content: center;
793
+ pointer-events: none;
794
+ opacity: 0.7;
643
795
  }
644
796
 
645
797
  input {
646
798
  height: 38px;
647
- border-radius: 4px;
648
- border: 1px solid #d1d5db;
649
- padding: 0 10px 0 35px;
799
+ border-radius: 0;
800
+ border: none;
801
+ padding: 0 10px 0 50px;
650
802
  width: 100%;
651
- max-width: 300px;
803
+ padding-right: 10px;
804
+ font-size: 0.9rem;
805
+ box-sizing: border-box;
652
806
 
653
807
  &:focus {
654
808
  outline: none;
655
809
  border-color: var(--primary-color, #3b82f6);
656
810
  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
811
+ z-index: 1; /* Ensure the focus outline appears above the button */
812
+ position: relative;
813
+ }
814
+
815
+ &::placeholder {
816
+ color: #9ca3af;
817
+ }
818
+ }
819
+
820
+ .filterAction--alt {
821
+ position: relative;
822
+ height: 38px;
823
+ z-index: 5;
824
+ display: flex;
825
+ gap: 0;
826
+ /* margin-left is now controlled in the component */
827
+
828
+ > .btn {
829
+ height: 38px;
830
+ border-radius: 0;
831
+ display: flex;
832
+ align-items: center;
833
+ justify-content: center;
834
+ padding: 0 20px;
835
+ margin-left: 0;
836
+ font-size: 0.9rem;
837
+ border: none;
838
+ box-sizing: border-box;
657
839
  }
658
840
  }
659
841
  }
@@ -1,5 +1,5 @@
1
1
  .visns__ms {
2
- max-height: 52px !important;
2
+ max-height: none !important; /* Allow height to grow with content */
3
3
  }
4
4
 
5
5
  .visns__ms input:hover {
@@ -10,3 +10,107 @@
10
10
  .visns__ms input:focus {
11
11
  box-shadow: none !important;
12
12
  }
13
+
14
+ /* Global styles for react-select to ensure it works in modals */
15
+ :global {
16
+ .visns-select__menu-portal {
17
+ z-index: 99999 !important;
18
+ }
19
+
20
+ .visns-select__menu {
21
+ z-index: 99999 !important;
22
+ max-height: 300px !important;
23
+ overflow-y: auto !important;
24
+ }
25
+
26
+ /* Control styles */
27
+ .visns-select__control {
28
+ min-height: 50px !important;
29
+ height: auto !important; /* Allow height to grow with content */
30
+ overflow: visible !important;
31
+ }
32
+
33
+ /* Value container styles */
34
+ .visns-select__value-container {
35
+ padding: 2px 8px !important;
36
+ flex-wrap: wrap !important;
37
+ max-height: 100px !important; /* Set a max height */
38
+ overflow-y: auto !important; /* Add scrolling when needed */
39
+ }
40
+
41
+ /* Indicator styles */
42
+ .visns-select__indicators {
43
+ display: flex !important;
44
+ align-items: center !important;
45
+ align-self: stretch !important;
46
+ height: auto !important;
47
+ }
48
+
49
+ .visns-select__indicator {
50
+ padding: 8px !important;
51
+ display: flex !important;
52
+ align-items: center !important;
53
+ align-self: stretch !important;
54
+ }
55
+
56
+ .visns-select__indicator-separator {
57
+ align-self: stretch !important;
58
+ margin: 4px 0 !important;
59
+ }
60
+
61
+ .visns-select__placeholder {
62
+ margin-left: 2px !important;
63
+ }
64
+
65
+ /* Multi-value styles */
66
+ .visns-select__multi-value {
67
+ margin: 2px !important;
68
+ }
69
+
70
+ /* Fix for modals */
71
+ .popup-content {
72
+ overflow: visible !important;
73
+ }
74
+
75
+ .modal__content {
76
+ overflow: visible !important;
77
+ }
78
+
79
+ /* CSS class fixes for React Select */
80
+ .css-13cymwt-control,
81
+ .css-t3ipsp-control {
82
+ min-height: 50px !important;
83
+ height: auto !important;
84
+ overflow: visible !important;
85
+ }
86
+
87
+ .css-1fdsijx-ValueContainer {
88
+ padding: 2px 8px !important;
89
+ flex-wrap: wrap !important;
90
+ max-height: 100px !important;
91
+ overflow-y: auto !important;
92
+ }
93
+
94
+ /* Indicators container */
95
+ .css-1hb7zxy-IndicatorsContainer {
96
+ display: flex !important;
97
+ align-items: center !important;
98
+ align-self: stretch !important;
99
+ height: auto !important;
100
+ }
101
+
102
+ /* Individual indicators */
103
+ .css-1xc3v61-indicatorContainer,
104
+ .css-15lsz6c-indicatorContainer {
105
+ padding: 8px !important;
106
+ display: flex !important;
107
+ align-items: center !important;
108
+ align-self: stretch !important;
109
+ }
110
+
111
+ /* Separator */
112
+ .css-1u9des2-indicatorSeparator {
113
+ align-self: stretch !important;
114
+ margin: 4px 0 !important;
115
+ }
116
+ }
@@ -0,0 +1,34 @@
1
+ /* Global styles for DataGrid components */
2
+ .InovuaReactDataGrid {
3
+ border-radius: var(--br, 4px) !important;
4
+ overflow: hidden !important;
5
+ }
6
+
7
+ .InovuaReactDataGrid__header-wrapper {
8
+ border-top-left-radius: var(--br, 4px) !important;
9
+ border-top-right-radius: var(--br, 4px) !important;
10
+ }
11
+
12
+ .InovuaReactDataGrid__body {
13
+ border-bottom-left-radius: var(--br, 4px) !important;
14
+ border-bottom-right-radius: var(--br, 4px) !important;
15
+ }
16
+
17
+ /* Fix for focus/hover effect styling */
18
+ .InovuaReactDataGrid__row-hover-target:hover,
19
+ .InovuaReactDataGrid__row-hover-target:focus,
20
+ .InovuaReactDataGrid__row-hover-target:focus-within {
21
+ border-radius: 0 !important;
22
+ }
23
+
24
+ /* Ensure consistent border radius for cells */
25
+ .InovuaReactDataGrid__cell {
26
+ border-radius: 0 !important;
27
+ }
28
+
29
+ /* Fix for focus outline */
30
+ .InovuaReactDataGrid:focus,
31
+ .InovuaReactDataGrid:focus-within {
32
+ outline: none !important;
33
+ box-shadow: 0 0 0 2px rgba(var(--primary-rgb, 59, 130, 246), 0.2) !important;
34
+ }