funuicss 3.8.17 → 3.9.1

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.
package/css/fun.css CHANGED
@@ -2145,14 +2145,17 @@ z-index: 9999 !important;
2145
2145
  top: 0;
2146
2146
  }
2147
2147
 
2148
+
2148
2149
  /* Dropdown Item */
2149
2150
  .dropdown-item {
2150
- padding: 0.6rem 0.8rem;
2151
+ padding: 0.4rem 0.8rem;
2151
2152
  cursor: pointer;
2152
2153
  display: flex;
2153
2154
  align-items: center;
2155
+ border-bottom: var(--border);
2154
2156
  gap: 0.5rem;
2155
2157
  flex-wrap: nowrap;
2158
+ font-size: var(--smallFont);
2156
2159
  transition: background-color 0.15s ease;
2157
2160
  }
2158
2161
 
@@ -4525,101 +4528,62 @@ filter: brightness(90%);
4525
4528
  background-color: rgba(0, 0, 0, 0.1);
4526
4529
  }
4527
4530
 
4528
- .tooltip {
4529
- position: relative;
4530
- display: inline-block;
4531
- }
4532
-
4533
- .tooltip .tip {
4534
- display: block;
4535
- background-color: var(--dark);
4536
- backdrop-filter: var(--raiseBackdrop);
4537
- color: var(--white);
4538
- text-align: center;
4539
- border-radius: var(--radius);
4540
- padding: 0.2rem 0.5rem !important;
4541
- font-weight: 500 !important;
4542
- position: absolute;
4543
- z-index: 10;
4544
- transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out;
4531
+ /* Portal tooltip specific styles */
4532
+ .tip[style*="position: fixed"] {
4533
+ position: fixed !important;
4534
+ z-index: 9999 !important;
4535
+ background-color: var(--dark) !important;
4536
+ color: var(--white) !important;
4537
+ padding: 0.4rem 0.75rem !important;
4538
+ border-radius: var(--radius) !important;
4539
+ box-shadow: var(--raised) !important;
4545
4540
  font-size: var(--smallFont) !important;
4546
- line-height: normal !important;
4547
- box-shadow: var(--raised);
4548
- width: max-content;
4549
- white-space: nowrap; /* prevents line breaks */
4550
- opacity: 0;
4551
- pointer-events: none;
4541
+ max-width: 200px !important;
4542
+ white-space: nowrap !important;
4543
+ pointer-events: none !important;
4552
4544
  }
4553
4545
 
4554
-
4555
- /* Show on hover */
4556
- .tooltip:hover .tip {
4557
- opacity: 1;
4558
- visibility: visible;
4559
- pointer-events: auto;
4546
+ /* Arrow for portal tooltips */
4547
+ .tip[style*="position: fixed"]::after {
4548
+ content: "" !important;
4549
+ position: absolute !important;
4550
+ border-style: solid !important;
4560
4551
  }
4561
4552
 
4562
- /* Arrow base */
4563
- .tooltip .tip::after {
4564
- content: "";
4565
- position: absolute;
4566
- border-style: solid;
4567
- }
4568
-
4569
- /* Top Tooltip */
4570
- .tooltip .tip-top {
4571
- bottom: 125%;
4572
- left: 50%;
4573
- transform: translateX(-50%);
4574
- }
4575
- .tooltip .tip-top::after {
4576
- top: 100%;
4577
- left: 50%;
4578
- transform: translateX(-50%);
4579
- border-width: 6px 6px 0 6px;
4580
- border-color: var(--dark) transparent transparent transparent;
4553
+ /* Top arrow */
4554
+ .tip-top[style*="position: fixed"]::after {
4555
+ bottom: -6px !important;
4556
+ left: 50% !important;
4557
+ transform: translateX(-50%) !important;
4558
+ border-width: 6px 6px 0 6px !important;
4559
+ border-color: var(--dark) transparent transparent transparent !important;
4581
4560
  }
4582
4561
 
4583
- /* Bottom Tooltip */
4584
- .tooltip .tip-bottom {
4585
- top: 125%;
4586
- left: 50%;
4587
- transform: translateX(-50%);
4588
- }
4589
- .tooltip .tip-bottom::after {
4590
- bottom: 100%;
4591
- left: 50%;
4592
- transform: translateX(-50%);
4593
- border-width: 0 6px 6px 6px;
4594
- border-color: transparent transparent var(--dark) transparent;
4562
+ /* Bottom arrow */
4563
+ .tip-bottom[style*="position: fixed"]::after {
4564
+ top: -6px !important;
4565
+ left: 50% !important;
4566
+ transform: translateX(-50%) !important;
4567
+ border-width: 0 6px 6px 6px !important;
4568
+ border-color: transparent transparent var(--dark) transparent !important;
4595
4569
  }
4596
4570
 
4597
- /* Right Tooltip */
4598
- .tooltip .tip-right {
4599
- top: 50%;
4600
- left: 105%;
4601
- transform: translateY(-50%);
4602
- }
4603
- .tooltip .tip-right::after {
4604
- top: 50%;
4605
- left: -6px;
4606
- transform: translateY(-50%);
4607
- border-width: 6px 6px 6px 0;
4608
- border-color: transparent var(--dark) transparent transparent;
4571
+ /* Left arrow */
4572
+ .tip-left[style*="position: fixed"]::after {
4573
+ right: -6px !important;
4574
+ top: 50% !important;
4575
+ transform: translateY(-50%) !important;
4576
+ border-width: 6px 0 6px 6px !important;
4577
+ border-color: transparent transparent transparent var(--dark) !important;
4609
4578
  }
4610
4579
 
4611
- /* Left Tooltip */
4612
- .tooltip .tip-left {
4613
- top: 50%;
4614
- right: 105%;
4615
- transform: translateY(-50%);
4616
- }
4617
- .tooltip .tip-left::after {
4618
- top: 50%;
4619
- right: -6px;
4620
- transform: translateY(-50%);
4621
- border-width: 6px 0 6px 6px;
4622
- border-color: transparent transparent transparent var(--dark);
4580
+ /* Right arrow */
4581
+ .tip-right[style*="position: fixed"]::after {
4582
+ left: -6px !important;
4583
+ top: 50% !important;
4584
+ transform: translateY(-50%) !important;
4585
+ border-width: 6px 6px 6px 0 !important;
4586
+ border-color: transparent var(--dark) transparent transparent !important;
4623
4587
  }
4624
4588
 
4625
4589
  .snackbar {
@@ -11806,12 +11770,15 @@ z-index: 10;
11806
11770
  .fade-in-down { animation: fadeInDown 0.8s ease-out !important; }
11807
11771
  .fade-in-left { animation: fadeInLeft 0.8s ease-out !important; }
11808
11772
  .fade-in-right { animation: fadeInRight 0.8s ease-out !important; }
11773
+ .fade-in-scale { animation: fadeInScale 0.8s ease-out !important; }
11774
+ .fade-in-blur { animation: fadeInBlur 0.8s ease-out !important; }
11809
11775
 
11810
11776
  /* Slide In */
11811
11777
  .slide-in-up { animation: slideInUp 0.8s ease-out !important; }
11812
11778
  .slide-in-down { animation: slideInDown 0.8s ease-out !important; }
11813
11779
  .slide-in-left { animation: slideInLeft 0.8s ease-out !important; }
11814
11780
  .slide-in-right { animation: slideInRight 0.8s ease-out !important; }
11781
+ .slide-in-diagonal { animation: slideInDiagonal 0.8s ease-out !important; }
11815
11782
 
11816
11783
  /* Zoom In */
11817
11784
  .zoom-in { animation: zoomIn 0.6s ease-out !important; }
@@ -11819,6 +11786,7 @@ z-index: 10;
11819
11786
  .zoom-in-down { animation: zoomInDown 0.8s ease-out !important; }
11820
11787
  .zoom-in-left { animation: zoomInLeft 0.8s ease-out !important; }
11821
11788
  .zoom-in-right { animation: zoomInRight 0.8s ease-out !important; }
11789
+ .zoom-in-rotate { animation: zoomInRotate 0.8s ease-out !important; }
11822
11790
 
11823
11791
  /* Bounce In */
11824
11792
  .bounce-in { animation: bounceIn 0.8s ease-out !important; }
@@ -11830,11 +11798,13 @@ z-index: 10;
11830
11798
  /* Flip In */
11831
11799
  .flip-in-x { animation: flipInX 0.8s ease-out !important; }
11832
11800
  .flip-in-y { animation: flipInY 0.8s ease-out !important; }
11801
+ .flip-in-diagonal { animation: flipInDiagonal 0.8s ease-out !important; }
11833
11802
 
11834
11803
  /* Rotate In */
11835
11804
  .rotate-in { animation: rotateIn 0.8s ease-out !important; }
11836
11805
  .rotate-in-up { animation: rotateInUp 0.8s ease-out !important; }
11837
11806
  .rotate-in-down { animation: rotateInDown 0.8s ease-out !important; }
11807
+ .rotate-in-scale { animation: rotateInScale 0.8s ease-out !important; }
11838
11808
 
11839
11809
  /* Special Entrance */
11840
11810
  .roll-in { animation: rollIn 0.8s ease-out !important; }
@@ -11842,42 +11812,99 @@ z-index: 10;
11842
11812
  .swing-in { animation: swingIn 0.8s ease-out !important; }
11843
11813
  .wobble-in { animation: wobbleIn 0.8s ease-out !important; }
11844
11814
  .pulse-in { animation: pulseIn 0.8s ease-out !important; }
11815
+ .unfold-in { animation: unfoldIn 0.8s ease-out !important; }
11816
+ .spiral-in { animation: spiralIn 0.8s ease-out !important; }
11845
11817
 
11846
11818
  /* ===== HOVER ANIMATIONS ===== */
11847
11819
  /* Scale Hover */
11848
- .hover-scale { transition: transform 0.3s ease !important; }
11820
+ .hover-scale { transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11849
11821
  .hover-scale:hover { transform: scale(1.05) !important; }
11850
- .hover-scale-lg { transition: transform 0.3s ease !important; }
11822
+ .hover-scale-lg { transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11851
11823
  .hover-scale-lg:hover { transform: scale(1.1) !important; }
11852
- .hover-scale-sm { transition: transform 0.3s ease !important; }
11824
+ .hover-scale-sm { transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11853
11825
  .hover-scale-sm:hover { transform: scale(1.02) !important; }
11854
11826
 
11827
+ /* Scale & Rotate Combined */
11828
+ .hover-scale-rotate { transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11829
+ .hover-scale-rotate:hover { transform: scale(1.05) rotate(3deg) !important; }
11830
+ .hover-scale-rotate-rev { transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11831
+ .hover-scale-rotate-rev:hover { transform: scale(1.05) rotate(-3deg) !important; }
11832
+
11855
11833
  /* Lift Hover */
11856
- .hover-lift { transition: all 0.3s ease !important; }
11857
- .hover-lift:hover { transform: translateY(-0.5rem) !important; box-shadow: var(--card) !important; }
11858
- .hover-lift-lg { transition: all 0.3s ease !important; }
11859
- .hover-lift-lg:hover { transform: translateY(-1rem) !important; box-shadow: var(--card) !important; }
11834
+ .hover-lift { transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11835
+ .hover-lift:hover { transform: translateY(-0.5rem) !important; box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.15) !important; }
11836
+ .hover-lift-lg { transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11837
+ .hover-lift-lg:hover { transform: translateY(-1rem) !important; box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.2) !important; }
11838
+
11839
+ /* Lift & Rotate Combined */
11840
+ .hover-lift-rotate { transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11841
+ .hover-lift-rotate:hover { transform: translateY(-0.5rem) rotate(2deg) !important; box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.15) !important; }
11842
+
11843
+ /* Tilt Hover */
11844
+ .hover-tilt-left { transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11845
+ .hover-tilt-left:hover { transform: perspective(1000px) rotateY(-10deg) !important; }
11846
+ .hover-tilt-right { transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11847
+ .hover-tilt-right:hover { transform: perspective(1000px) rotateY(10deg) !important; }
11848
+ .hover-tilt-up { transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11849
+ .hover-tilt-up:hover { transform: perspective(1000px) rotateX(10deg) !important; }
11850
+
11851
+ /* Skew Hover */
11852
+ .hover-skew { transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
11853
+ .hover-skew:hover { transform: skewX(-5deg) scale(1.02) !important; }
11860
11854
 
11861
11855
  /* Glow Hover */
11862
11856
  .hover-glow { transition: all 0.3s ease !important; }
11863
- .hover-glow:hover { box-shadow: 0 0 2rem rgba(var(--primary-rgb), 0.4) !important; transform: translateY(-0.25rem) !important; }
11857
+ .hover-glow:hover { box-shadow: 0 0 2rem rgba(59, 130, 246, 0.5) !important; transform: translateY(-0.25rem) !important; }
11858
+ .hover-glow-intense { transition: all 0.3s ease !important; }
11859
+ .hover-glow-intense:hover { box-shadow: 0 0 3rem rgba(59, 130, 246, 0.8), 0 0 1rem rgba(59, 130, 246, 0.4) inset !important; transform: scale(1.05) !important; }
11860
+
11861
+ /* Bounce & Scale */
11862
+ .hover-bounce-scale:hover { animation: bounceScale 0.6s ease !important; }
11864
11863
 
11865
- /* Shake Hover */
11864
+ /* Shake & Wobble */
11866
11865
  .hover-shake:hover { animation: shake 0.5s ease-in-out !important; }
11867
11866
  .hover-wobble:hover { animation: wobble 0.5s ease-in-out !important; }
11868
11867
  .hover-bounce:hover { animation: bounce 0.5s ease-in-out !important; }
11868
+ .hover-jello:hover { animation: jello 0.6s ease-in-out !important; }
11869
+ .hover-rubber:hover { animation: rubberBand 0.6s ease-in-out !important; }
11869
11870
 
11870
11871
  /* Border Hover */
11871
11872
  .hover-border-grow { transition: all 0.3s ease !important; border: 2px solid transparent !important; }
11872
- .hover-border-grow:hover { border-color: var(--gradient) !important; transform: scale(1.02) !important; }
11873
+ .hover-border-grow:hover { border-color: rgb(59, 130, 246) !important; transform: scale(1.02) !important; }
11874
+ .hover-border-glow { transition: all 0.3s ease !important; }
11875
+ .hover-border-glow:hover { box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3) !important; }
11876
+
11877
+ /* Shadow Hover */
11878
+ .hover-shadow-soft { transition: box-shadow 0.3s ease !important; }
11879
+ .hover-shadow-soft:hover { box-shadow: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.1) !important; }
11880
+ .hover-shadow-hard { transition: box-shadow 0.3s ease !important; }
11881
+ .hover-shadow-hard:hover { box-shadow: 0.5rem 0.5rem 0 rgba(0, 0, 0, 0.2) !important; }
11882
+ .hover-shadow-neon { transition: all 0.3s ease !important; }
11883
+ .hover-shadow-neon:hover { box-shadow: 0 0 1rem rgba(59, 130, 246, 0.6), 0 0 2rem rgba(59, 130, 246, 0.4) !important; }
11873
11884
 
11874
11885
  /* Text Hover */
11875
- .hover-text-glow:hover { text-shadow: 0 0 1rem currentColor !important; }
11876
- .hover-text-lift:hover { transform: translateY(-0.125rem) !important; text-shadow: var(--card) !important; }
11886
+ .hover-text-glow:hover { text-shadow: 0 0 1rem currentColor !important; transition: text-shadow 0.3s ease !important; }
11887
+ .hover-text-lift { transition: all 0.3s ease !important; }
11888
+ .hover-text-lift:hover { transform: translateY(-0.125rem) !important; text-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2) !important; }
11889
+ .hover-text-scale { transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) !important; display: inline-block !important; }
11890
+ .hover-text-scale:hover { transform: scale(1.1) !important; }
11891
+
11892
+ /* Flip Hover */
11893
+ .hover-flip-x { transition: transform 0.6s ease !important; transform-style: preserve-3d !important; }
11894
+ .hover-flip-x:hover { transform: rotateX(360deg) !important; }
11895
+ .hover-flip-y { transition: transform 0.6s ease !important; transform-style: preserve-3d !important; }
11896
+ .hover-flip-y:hover { transform: rotateY(360deg) !important; }
11897
+
11898
+ /* Swing Hover */
11899
+ .hover-swing:hover { animation: swing 0.8s ease !important; transform-origin: top center !important; }
11900
+
11901
+ /* Pulse Hover */
11902
+ .hover-pulse:hover { animation: pulseHover 0.6s ease !important; }
11903
+ .hover-heartbeat:hover { animation: heartbeat 0.8s ease-in-out !important; }
11877
11904
 
11878
11905
  /* ===== CONTINUOUS ANIMATIONS ===== */
11879
11906
  .animate-float { animation: float 3s ease-in-out infinite !important; }
11880
- .animate-pulse-slow { animation: pulse 3s ease-in-out infinite !important; }
11907
+ .animate-float-slow { animation: float 5s ease-in-out infinite !important; }
11881
11908
  .animate-bounce-slow { animation: bounce 2s ease-in-out infinite !important; }
11882
11909
  .animate-spin-slow { animation: spin 3s linear infinite !important; }
11883
11910
  .animate-ping-slow { animation: ping 3s ease-out infinite !important; }
@@ -11885,8 +11912,14 @@ z-index: 10;
11885
11912
  .animate-breath { animation: breath 4s ease-in-out infinite !important; }
11886
11913
  .animate-wave { animation: wave 2s ease-in-out infinite !important; }
11887
11914
  .animate-glow { animation: glow 2s ease-in-out infinite !important; }
11915
+ .animate-pulse-glow { animation: pulseGlow 2s ease-in-out infinite !important; }
11916
+ .animate-drift { animation: drift 6s ease-in-out infinite !important; }
11917
+ .animate-sway { animation: sway 3s ease-in-out infinite !important; }
11918
+ .animate-rotate-slow { animation: rotateSlow 20s linear infinite !important; }
11919
+ .animate-bob { animation: bob 2s ease-in-out infinite !important; }
11888
11920
 
11889
11921
  /* ===== ANIMATION KEYFRAMES ===== */
11922
+ /* Fade Animations */
11890
11923
  @keyframes fadeIn {
11891
11924
  from { opacity: 0; }
11892
11925
  to { opacity: 1; }
@@ -11912,6 +11945,17 @@ z-index: 10;
11912
11945
  to { opacity: 1; transform: translateX(0); }
11913
11946
  }
11914
11947
 
11948
+ @keyframes fadeInScale {
11949
+ from { opacity: 0; transform: scale(0.8); }
11950
+ to { opacity: 1; transform: scale(1); }
11951
+ }
11952
+
11953
+ @keyframes fadeInBlur {
11954
+ from { opacity: 0; filter: blur(10px); }
11955
+ to { opacity: 1; filter: blur(0); }
11956
+ }
11957
+
11958
+ /* Slide Animations */
11915
11959
  @keyframes slideInUp {
11916
11960
  from { transform: translateY(100%); }
11917
11961
  to { transform: translateY(0); }
@@ -11932,6 +11976,12 @@ z-index: 10;
11932
11976
  to { transform: translateX(0); }
11933
11977
  }
11934
11978
 
11979
+ @keyframes slideInDiagonal {
11980
+ from { transform: translate(-100%, -100%); opacity: 0; }
11981
+ to { transform: translate(0, 0); opacity: 1; }
11982
+ }
11983
+
11984
+ /* Zoom Animations */
11935
11985
  @keyframes zoomIn {
11936
11986
  from { opacity: 0; transform: scale(0.5); }
11937
11987
  to { opacity: 1; transform: scale(1); }
@@ -11942,6 +11992,27 @@ z-index: 10;
11942
11992
  to { opacity: 1; transform: scale(1) translateY(0); }
11943
11993
  }
11944
11994
 
11995
+ @keyframes zoomInDown {
11996
+ from { opacity: 0; transform: scale(0.5) translateY(-2rem); }
11997
+ to { opacity: 1; transform: scale(1) translateY(0); }
11998
+ }
11999
+
12000
+ @keyframes zoomInLeft {
12001
+ from { opacity: 0; transform: scale(0.5) translateX(-2rem); }
12002
+ to { opacity: 1; transform: scale(1) translateX(0); }
12003
+ }
12004
+
12005
+ @keyframes zoomInRight {
12006
+ from { opacity: 0; transform: scale(0.5) translateX(2rem); }
12007
+ to { opacity: 1; transform: scale(1) translateX(0); }
12008
+ }
12009
+
12010
+ @keyframes zoomInRotate {
12011
+ from { opacity: 0; transform: scale(0.5) rotate(-45deg); }
12012
+ to { opacity: 1; transform: scale(1) rotate(0); }
12013
+ }
12014
+
12015
+ /* Bounce Animations */
11945
12016
  @keyframes bounceIn {
11946
12017
  0% { opacity: 0; transform: scale(0.3); }
11947
12018
  50% { opacity: 1; transform: scale(1.05); }
@@ -11956,6 +12027,28 @@ z-index: 10;
11956
12027
  100% { opacity: 1; transform: translateY(0) scale(1); }
11957
12028
  }
11958
12029
 
12030
+ @keyframes bounceInDown {
12031
+ 0% { opacity: 0; transform: translateY(-2rem) scale(0.3); }
12032
+ 50% { opacity: 1; transform: translateY(1rem) scale(1.05); }
12033
+ 70% { transform: translateY(-0.5rem) scale(0.9); }
12034
+ 100% { opacity: 1; transform: translateY(0) scale(1); }
12035
+ }
12036
+
12037
+ @keyframes bounceInLeft {
12038
+ 0% { opacity: 0; transform: translateX(-2rem) scale(0.3); }
12039
+ 50% { opacity: 1; transform: translateX(1rem) scale(1.05); }
12040
+ 70% { transform: translateX(-0.5rem) scale(0.9); }
12041
+ 100% { opacity: 1; transform: translateX(0) scale(1); }
12042
+ }
12043
+
12044
+ @keyframes bounceInRight {
12045
+ 0% { opacity: 0; transform: translateX(2rem) scale(0.3); }
12046
+ 50% { opacity: 1; transform: translateX(-1rem) scale(1.05); }
12047
+ 70% { transform: translateX(0.5rem) scale(0.9); }
12048
+ 100% { opacity: 1; transform: translateX(0) scale(1); }
12049
+ }
12050
+
12051
+ /* Flip Animations */
11959
12052
  @keyframes flipInX {
11960
12053
  from { transform: perspective(400px) rotateX(90deg); opacity: 0; }
11961
12054
  to { transform: perspective(400px) rotateX(0deg); opacity: 1; }
@@ -11966,11 +12059,33 @@ z-index: 10;
11966
12059
  to { transform: perspective(400px) rotateY(0deg); opacity: 1; }
11967
12060
  }
11968
12061
 
12062
+ @keyframes flipInDiagonal {
12063
+ from { transform: perspective(400px) rotate3d(1, 1, 0, 90deg); opacity: 0; }
12064
+ to { transform: perspective(400px) rotate3d(1, 1, 0, 0deg); opacity: 1; }
12065
+ }
12066
+
12067
+ /* Rotate Animations */
11969
12068
  @keyframes rotateIn {
11970
12069
  from { transform: rotate(-180deg); opacity: 0; }
11971
12070
  to { transform: rotate(0deg); opacity: 1; }
11972
12071
  }
11973
12072
 
12073
+ @keyframes rotateInUp {
12074
+ from { transform: rotate(-180deg) translateY(2rem); opacity: 0; }
12075
+ to { transform: rotate(0deg) translateY(0); opacity: 1; }
12076
+ }
12077
+
12078
+ @keyframes rotateInDown {
12079
+ from { transform: rotate(180deg) translateY(-2rem); opacity: 0; }
12080
+ to { transform: rotate(0deg) translateY(0); opacity: 1; }
12081
+ }
12082
+
12083
+ @keyframes rotateInScale {
12084
+ from { transform: rotate(-180deg) scale(0.5); opacity: 0; }
12085
+ to { transform: rotate(0deg) scale(1); opacity: 1; }
12086
+ }
12087
+
12088
+ /* Special Entrance Animations */
11974
12089
  @keyframes rollIn {
11975
12090
  from { opacity: 0; transform: translateX(-100%) rotate(-120deg); }
11976
12091
  to { opacity: 1; transform: translateX(0px) rotate(0deg); }
@@ -12004,7 +12119,18 @@ z-index: 10;
12004
12119
  100% { opacity: 1; transform: scale(1); }
12005
12120
  }
12006
12121
 
12007
- /* Hover Keyframes */
12122
+ @keyframes unfoldIn {
12123
+ 0% { transform: scaleY(0.005) scaleX(0); opacity: 0; }
12124
+ 50% { transform: scaleY(0.005) scaleX(1); opacity: 0.5; }
12125
+ 100% { transform: scaleY(1) scaleX(1); opacity: 1; }
12126
+ }
12127
+
12128
+ @keyframes spiralIn {
12129
+ 0% { transform: rotate(960deg) scale(0); opacity: 0; }
12130
+ 100% { transform: rotate(0deg) scale(1); opacity: 1; }
12131
+ }
12132
+
12133
+ /* Hover Effect Keyframes */
12008
12134
  @keyframes shake {
12009
12135
  0%, 100% { transform: translateX(0); }
12010
12136
  20%, 60% { transform: translateX(-0.5rem); }
@@ -12020,6 +12146,57 @@ z-index: 10;
12020
12146
  75% { transform: translateX(-5%) rotate(-1deg); }
12021
12147
  }
12022
12148
 
12149
+ @keyframes bounce {
12150
+ 0%, 100% { transform: translateY(0); }
12151
+ 50% { transform: translateY(-1rem); }
12152
+ }
12153
+
12154
+ @keyframes jello {
12155
+ 0%, 100% { transform: skewX(0deg) skewY(0deg); }
12156
+ 30% { transform: skewX(25deg) skewY(25deg); }
12157
+ 40% { transform: skewX(-15deg) skewY(-15deg); }
12158
+ 50% { transform: skewX(15deg) skewY(15deg); }
12159
+ 65% { transform: skewX(-5deg) skewY(-5deg); }
12160
+ 75% { transform: skewX(5deg) skewY(5deg); }
12161
+ }
12162
+
12163
+ @keyframes rubberBand {
12164
+ 0% { transform: scale(1); }
12165
+ 30% { transform: scale(1.25, 0.75); }
12166
+ 40% { transform: scale(0.75, 1.25); }
12167
+ 50% { transform: scale(1.15, 0.85); }
12168
+ 65% { transform: scale(0.95, 1.05); }
12169
+ 75% { transform: scale(1.05, 0.95); }
12170
+ 100% { transform: scale(1); }
12171
+ }
12172
+
12173
+ @keyframes bounceScale {
12174
+ 0%, 100% { transform: scale(1); }
12175
+ 50% { transform: scale(1.15); }
12176
+ }
12177
+
12178
+ @keyframes swing {
12179
+ 20% { transform: rotate(15deg); }
12180
+ 40% { transform: rotate(-10deg); }
12181
+ 60% { transform: rotate(5deg); }
12182
+ 80% { transform: rotate(-5deg); }
12183
+ 100% { transform: rotate(0deg); }
12184
+ }
12185
+
12186
+ @keyframes pulseHover {
12187
+ 0% { transform: scale(1); }
12188
+ 50% { transform: scale(1.08); }
12189
+ 100% { transform: scale(1); }
12190
+ }
12191
+
12192
+ @keyframes heartbeat {
12193
+ 0%, 100% { transform: scale(1); }
12194
+ 14% { transform: scale(1.15); }
12195
+ 28% { transform: scale(1); }
12196
+ 42% { transform: scale(1.15); }
12197
+ 70% { transform: scale(1); }
12198
+ }
12199
+
12023
12200
  /* Continuous Animations */
12024
12201
  @keyframes float {
12025
12202
  0%, 100% { transform: translateY(0px); }
@@ -12037,15 +12214,63 @@ z-index: 10;
12037
12214
  }
12038
12215
 
12039
12216
  @keyframes glow {
12040
- 0%, 100% { box-shadow: 0 0 0.5rem rgba(var(--primary-rgb), 0.5); }
12041
- 50% { box-shadow: 0 0 2rem rgba(var(--primary-rgb), 0.8); }
12217
+ 0%, 100% { box-shadow: 0 0 0.5rem rgba(59, 130, 246, 0.5); }
12218
+ 50% { box-shadow: 0 0 2rem rgba(59, 130, 246, 0.8); }
12219
+ }
12220
+
12221
+ @keyframes pulseGlow {
12222
+ 0%, 100% { box-shadow: 0 0 1rem rgba(59, 130, 246, 0.4); transform: scale(1); }
12223
+ 50% { box-shadow: 0 0 2rem rgba(59, 130, 246, 0.8); transform: scale(1.02); }
12042
12224
  }
12043
12225
 
12044
12226
  @keyframes ping {
12045
12227
  75%, 100% { transform: scale(2); opacity: 0; }
12046
12228
  }
12047
12229
 
12230
+ @keyframes drift {
12231
+ 0%, 100% { transform: translate(0, 0); }
12232
+ 25% { transform: translate(0.5rem, -0.5rem); }
12233
+ 50% { transform: translate(0, -1rem); }
12234
+ 75% { transform: translate(-0.5rem, -0.5rem); }
12235
+ }
12236
+
12237
+ @keyframes sway {
12238
+ 0%, 100% { transform: rotate(0deg); }
12239
+ 50% { transform: rotate(5deg); }
12240
+ }
12241
+
12242
+ @keyframes rotateSlow {
12243
+ from { transform: rotate(0deg); }
12244
+ to { transform: rotate(360deg); }
12245
+ }
12246
+
12247
+ @keyframes bob {
12248
+ 0%, 100% { transform: translateY(0); }
12249
+ 50% { transform: translateY(-0.5rem); }
12250
+ }
12251
+
12252
+ @keyframes spin {
12253
+ from { transform: rotate(0deg); }
12254
+ to { transform: rotate(360deg); }
12255
+ }
12256
+
12257
+
12258
+
12259
+ /* ===== UTILITY CLASSES ===== */
12260
+ .delay-100 { animation-delay: 0.1s !important; }
12261
+ .delay-200 { animation-delay: 0.2s !important; }
12262
+ .delay-300 { animation-delay: 0.3s !important; }
12263
+ .delay-500 { animation-delay: 0.5s !important; }
12264
+ .delay-700 { animation-delay: 0.7s !important; }
12265
+ .delay-1000 { animation-delay: 1s !important; }
12266
+
12267
+ .duration-fast { animation-duration: 0.3s !important; }
12268
+ .duration-normal { animation-duration: 0.6s !important; }
12269
+ .duration-slow { animation-duration: 1s !important; }
12270
+ .duration-slower { animation-duration: 1.5s !important; }
12048
12271
 
12272
+ .ease-smooth { animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1) !important; }
12273
+ .ease-bounce { animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55) !important; }
12049
12274
 
12050
12275
  /* Make all scrollbars thin */
12051
12276
  * {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.8.17",
2
+ "version": "3.9.1",
3
3
  "name": "funuicss",
4
4
  "description": "React and Next.js component UI Library for creating Easy and good looking websites with fewer lines of code. Elevate your web development experience with our cutting-edge React/Next.js component UI Library. Craft stunning websites effortlessly, boasting both seamless functionality and aesthetic appeal—all achieved with minimal lines of code. Unleash the power of simplicity and style in your projects!",
5
5
  "main": "index.js",
@@ -23,6 +23,7 @@ interface DropdownProps {
23
23
  height?: string;
24
24
  minHeight?: string;
25
25
  maxHeight?: string;
26
+ usePortal?: boolean;
26
27
  }
27
28
  declare const Dropdown: React.FC<DropdownProps>;
28
29
  export default Dropdown;
@@ -35,44 +35,226 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  })();
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
37
  var react_1 = __importStar(require("react"));
38
+ var react_dom_1 = require("react-dom");
38
39
  var Dropdown = function (_a) {
39
- var _b = _a.position, position = _b === void 0 ? 'bottom' : _b, button = _a.button, items = _a.items, _c = _a.hoverable, hoverable = _c === void 0 ? true : _c, _d = _a.openOnHover, openOnHover = _d === void 0 ? true : _d, _e = _a.closableOnlyOutside, closableOnlyOutside = _e === void 0 ? false : _e, _f = _a.className, className = _f === void 0 ? '' : _f, _g = _a.menuClassName, menuClassName = _g === void 0 ? '' : _g, width = _a.width, minWidth = _a.minWidth, maxWidth = _a.maxWidth, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight;
40
+ var _b = _a.position, position = _b === void 0 ? 'bottom' : _b, button = _a.button, items = _a.items, _c = _a.hoverable, hoverable = _c === void 0 ? true : _c, _d = _a.openOnHover, openOnHover = _d === void 0 ? true : _d, _e = _a.closableOnlyOutside, closableOnlyOutside = _e === void 0 ? false : _e, _f = _a.className, className = _f === void 0 ? '' : _f, _g = _a.menuClassName, menuClassName = _g === void 0 ? '' : _g, width = _a.width, minWidth = _a.minWidth, maxWidth = _a.maxWidth, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, _h = _a.usePortal, usePortal = _h === void 0 ? true : _h;
40
41
  var containerRef = (0, react_1.useRef)(null);
41
- var _h = (0, react_1.useState)(false), open = _h[0], setOpen = _h[1];
42
+ var triggerRef = (0, react_1.useRef)(null);
43
+ var _j = (0, react_1.useState)(false), open = _j[0], setOpen = _j[1];
44
+ var _k = (0, react_1.useState)(null), menuPosition = _k[0], setMenuPosition = _k[1];
45
+ // Calculate menu position
46
+ var calculatePosition = function () {
47
+ if (!triggerRef.current)
48
+ return;
49
+ var rect = triggerRef.current.getBoundingClientRect();
50
+ var scrollY = window.scrollY;
51
+ var scrollX = window.scrollX;
52
+ var menuWidth = width ? (width.includes('px') ? parseInt(width) : 200) : 200;
53
+ var top = rect.bottom + scrollY;
54
+ var left = rect.left + scrollX;
55
+ setMenuPosition({
56
+ top: top,
57
+ left: left,
58
+ width: rect.width
59
+ });
60
+ };
61
+ // Handle clicks outside - SIMPLIFIED
42
62
  (0, react_1.useEffect)(function () {
43
63
  if (openOnHover)
44
64
  return;
45
- var handleClickOutside = function (event) {
46
- if (containerRef.current && !containerRef.current.contains(event.target)) {
47
- setOpen(false);
65
+ var handleDocumentClick = function (event) {
66
+ var _a;
67
+ // If click is inside the trigger, do nothing (it will be handled by trigger click)
68
+ if ((_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) {
69
+ return;
48
70
  }
71
+ // Close dropdown if click is outside
72
+ setOpen(false);
73
+ setMenuPosition(null);
49
74
  };
50
- document.addEventListener('mousedown', handleClickOutside);
51
- return function () { return document.removeEventListener('mousedown', handleClickOutside); };
52
- }, [openOnHover]);
53
- var showMenu = openOnHover || open;
75
+ // Add event listener with a delay to avoid immediate trigger
76
+ var timer = setTimeout(function () {
77
+ document.addEventListener('click', handleDocumentClick);
78
+ }, 10);
79
+ return function () {
80
+ clearTimeout(timer);
81
+ document.removeEventListener('click', handleDocumentClick);
82
+ };
83
+ }, [openOnHover, open]);
84
+ // Calculate position when opening
85
+ (0, react_1.useEffect)(function () {
86
+ if (open && usePortal) {
87
+ calculatePosition();
88
+ }
89
+ else {
90
+ setMenuPosition(null);
91
+ }
92
+ }, [open, usePortal, position]);
93
+ var showMenu = (openOnHover || open) && (usePortal ? menuPosition !== null : true);
54
94
  var menuStyle = {
55
- width: width,
56
- minWidth: minWidth,
95
+ width: width || ((menuPosition === null || menuPosition === void 0 ? void 0 : menuPosition.width) ? "".concat(menuPosition.width, "px") : 'auto'),
96
+ minWidth: minWidth || '200px',
57
97
  maxWidth: maxWidth,
58
98
  height: height,
59
99
  minHeight: minHeight,
60
100
  maxHeight: maxHeight,
101
+ position: usePortal ? 'fixed' : 'absolute',
102
+ top: usePortal && menuPosition ? menuPosition.top : undefined,
103
+ left: usePortal && menuPosition ? menuPosition.left : undefined,
104
+ zIndex: 9999,
105
+ };
106
+ var handleItemClick = function (item) {
107
+ var _a;
108
+ if (item.disabled)
109
+ return;
110
+ // Execute click handler
111
+ (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item);
112
+ // Close dropdown unless closableOnlyOutside is true
113
+ if (!closableOnlyOutside) {
114
+ setOpen(false);
115
+ setMenuPosition(null);
116
+ }
117
+ };
118
+ var renderMenu = function () { return (react_1.default.createElement("div", { className: "dropdown-menu ".concat(position, " ").concat(menuClassName), style: menuStyle,
119
+ // Prevent clicks inside from closing immediately
120
+ onClick: function (e) {
121
+ e.stopPropagation();
122
+ e.preventDefault();
123
+ } }, items.map(function (item, index) { return (react_1.default.createElement(react_1.default.Fragment, { key: index }, item.divider ? (react_1.default.createElement("div", { className: "dropdown-divider" })) : (react_1.default.createElement("div", { className: "dropdown-item ".concat(item.disabled ? 'disabled' : '', " ").concat(!hoverable ? 'no-hover' : 'hover-lighter'), onClick: function () { return handleItemClick(item); } },
124
+ item.startIcon && (react_1.default.createElement("span", { className: "dropdown-item-icon" }, item.startIcon)),
125
+ react_1.default.createElement("span", { className: "dropdown-item-label" }, item.label),
126
+ item.endIcon && (react_1.default.createElement("span", { className: "dropdown-item-icon" }, item.endIcon)))))); }))); };
127
+ var handleTriggerClick = function () {
128
+ if (!openOnHover) {
129
+ // Toggle open state
130
+ var newOpenState = !open;
131
+ setOpen(newOpenState);
132
+ // If closing, clear position immediately
133
+ if (!newOpenState) {
134
+ setMenuPosition(null);
135
+ }
136
+ }
61
137
  };
62
138
  return (react_1.default.createElement("div", { ref: containerRef, className: "dropdown-container ".concat(className), onMouseEnter: function () { return openOnHover && setOpen(true); }, onMouseLeave: function () { return openOnHover && setOpen(false); } },
63
- react_1.default.createElement("div", { onClick: function () { return !openOnHover && setOpen(!open); }, style: { cursor: !openOnHover ? 'pointer' : undefined } }, button),
64
- showMenu && (react_1.default.createElement("div", { className: "dropdown-menu ".concat(position, " ").concat(menuClassName), style: menuStyle }, items.map(function (item, index) { return (react_1.default.createElement(react_1.default.Fragment, { key: index }, item.divider ? (react_1.default.createElement("div", { className: "dropdown-divider" })) : (react_1.default.createElement("div", { className: "dropdown-item ".concat(item.disabled ? 'disabled' : '', " ").concat(!hoverable ? 'no-hover' : ''), onClick: function () {
65
- var _a;
66
- if (item.disabled)
67
- return;
68
- if (!closableOnlyOutside) {
69
- (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item);
70
- if (!openOnHover)
71
- setOpen(false);
72
- }
73
- } },
74
- item.startIcon && (react_1.default.createElement("span", { className: "dropdown-item-icon" }, item.startIcon)),
75
- react_1.default.createElement("span", { className: "dropdown-item-label" }, item.label),
76
- item.endIcon && (react_1.default.createElement("span", { className: "dropdown-item-icon" }, item.endIcon)))))); })))));
139
+ react_1.default.createElement("div", { ref: triggerRef, onClick: handleTriggerClick, style: { cursor: !openOnHover ? 'pointer' : undefined } }, button),
140
+ showMenu && (react_1.default.createElement(react_1.default.Fragment, null, usePortal ? ((0, react_dom_1.createPortal)(renderMenu(), document.body)) : (renderMenu())))));
77
141
  };
78
142
  exports.default = Dropdown;
143
+ // 'use client';
144
+ // import React, { useState, useRef, useEffect } from 'react';
145
+ // type Position = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
146
+ // interface DropdownItem {
147
+ // label: React.ReactNode;
148
+ // onClick?: () => void;
149
+ // startIcon?: React.ReactNode;
150
+ // endIcon?: React.ReactNode;
151
+ // disabled?: boolean;
152
+ // divider?: boolean;
153
+ // }
154
+ // interface DropdownProps {
155
+ // position?: Position;
156
+ // button: React.ReactNode;
157
+ // items: DropdownItem[];
158
+ // hoverable?: boolean;
159
+ // openOnHover?: boolean;
160
+ // closableOnlyOutside?: boolean;
161
+ // className?: string;
162
+ // menuClassName?: string;
163
+ // width?: string;
164
+ // minWidth?: string;
165
+ // maxWidth?: string;
166
+ // height?: string;
167
+ // minHeight?: string;
168
+ // maxHeight?: string;
169
+ // }
170
+ // const Dropdown: React.FC<DropdownProps> = ({
171
+ // position = 'bottom',
172
+ // button,
173
+ // items,
174
+ // hoverable = true,
175
+ // openOnHover = true,
176
+ // closableOnlyOutside = false,
177
+ // className = '',
178
+ // menuClassName = '',
179
+ // width,
180
+ // minWidth,
181
+ // maxWidth,
182
+ // height,
183
+ // minHeight,
184
+ // maxHeight,
185
+ // }) => {
186
+ // const containerRef = useRef<HTMLDivElement>(null);
187
+ // const [open, setOpen] = useState(false);
188
+ // useEffect(() => {
189
+ // if (openOnHover) return;
190
+ // const handleClickOutside = (event: MouseEvent) => {
191
+ // if (containerRef.current && !containerRef.current.contains(event.target as Node)) {
192
+ // setOpen(false);
193
+ // }
194
+ // };
195
+ // document.addEventListener('mousedown', handleClickOutside);
196
+ // return () => document.removeEventListener('mousedown', handleClickOutside);
197
+ // }, [openOnHover]);
198
+ // const showMenu = openOnHover || open;
199
+ // const menuStyle: React.CSSProperties = {
200
+ // width,
201
+ // minWidth,
202
+ // maxWidth,
203
+ // height,
204
+ // minHeight,
205
+ // maxHeight,
206
+ // };
207
+ // return (
208
+ // <div
209
+ // ref={containerRef}
210
+ // className={`dropdown-container ${className}`}
211
+ // onMouseEnter={() => openOnHover && setOpen(true)}
212
+ // onMouseLeave={() => openOnHover && setOpen(false)}
213
+ // >
214
+ // <div
215
+ // onClick={() => !openOnHover && setOpen(!open)}
216
+ // style={{ cursor: !openOnHover ? 'pointer' : undefined }}
217
+ // >
218
+ // {button}
219
+ // </div>
220
+ // {showMenu && (
221
+ // <div
222
+ // className={`dropdown-menu ${position} ${menuClassName}`}
223
+ // style={menuStyle}
224
+ // >
225
+ // {items.map((item, index) => (
226
+ // <React.Fragment key={index}>
227
+ // {item.divider ? (
228
+ // <div className="dropdown-divider" />
229
+ // ) : (
230
+ // <div
231
+ // className={`dropdown-item ${item.disabled ? 'disabled' : ''} ${!hoverable ? 'no-hover' : ''}`}
232
+ // onClick={() => {
233
+ // if (item.disabled) return;
234
+ // if (!closableOnlyOutside) {
235
+ // item.onClick?.();
236
+ // if (!openOnHover) setOpen(false);
237
+ // }
238
+ // }}
239
+ // >
240
+ // {item.startIcon && (
241
+ // <span className="dropdown-item-icon">
242
+ // {item.startIcon}
243
+ // </span>
244
+ // )}
245
+ // <span className="dropdown-item-label">{item.label}</span>
246
+ // {item.endIcon && (
247
+ // <span className="dropdown-item-icon">
248
+ // {item.endIcon}
249
+ // </span>
250
+ // )}
251
+ // </div>
252
+ // )}
253
+ // </React.Fragment>
254
+ // ))}
255
+ // </div>
256
+ // )}
257
+ // </div>
258
+ // );
259
+ // };
260
+ // export default Dropdown;
package/ui/form/Form.js CHANGED
@@ -326,8 +326,6 @@ var Form = function (props) {
326
326
  var submitBg = submitBgProp !== undefined ? submitBgProp : mergedProps.submitBg;
327
327
  var submitPrefix = submitPrefixProp !== undefined ? submitPrefixProp : mergedProps.submitPrefix;
328
328
  var submitSuffix = submitSuffixProp !== undefined ? submitSuffixProp : mergedProps.submitSuffix;
329
- var resetText = resetTextProp !== undefined ? resetTextProp : mergedProps.resetText;
330
- var showReset = showResetProp !== undefined ? showResetProp : mergedProps.showReset;
331
329
  var isLoading = isLoadingProp !== undefined ? isLoadingProp : mergedProps.isLoading;
332
330
  var className = classNameProp !== undefined ? classNameProp : mergedProps.className;
333
331
  var layout = layoutProp !== undefined ? layoutProp : mergedProps.layout;
@@ -46,6 +46,7 @@ var Button_1 = __importDefault(require("../button/Button"));
46
46
  var Accordion_1 = __importDefault(require("../accordion/Accordion"));
47
47
  var bs_1 = require("react-icons/bs");
48
48
  var Flex_1 = __importDefault(require("../flex/Flex"));
49
+ var ToolTip_1 = __importDefault(require("../tooltip/ToolTip"));
49
50
  function SideBar(_a) {
50
51
  var _b, _c;
51
52
  var _d = _a.funcss, funcss = _d === void 0 ? '' : _d, _e = _a.position, position = _e === void 0 ? 'left' : _e, _f = _a.open, open = _f === void 0 ? false : _f, header = _a.header, content = _a.content, footer = _a.footer, _g = _a.top, top = _g === void 0 ? 0 : _g, _h = _a.sidebarWidth, sidebarWidth = _h === void 0 ? 250 : _h, _j = _a.iconCSS, iconCSS = _j === void 0 ? '' : _j, _k = _a.sidebarCss, sidebarCss = _k === void 0 ? '' : _k, activeCss = _a.activeCss, _l = _a.bodyCss, bodyCss = _l === void 0 ? '' : _l, _m = _a.popIcon, popIcon = _m === void 0 ? false : _m, _o = _a.dividers, dividers = _o === void 0 ? false : _o, accordionItemCss = _a.accordionItemCss, _p = _a.links, links = _p === void 0 ? [] : _p, children = _a.children, onClose = _a.onClose, togglePrefix = _a.togglePrefix, _q = _a.isAccordion, isAccordion = _q === void 0 ? false : _q, _r = _a.isCollapsed, isCollapsed = _r === void 0 ? true : _r, // Default to true as requested
@@ -166,23 +167,24 @@ function SideBar(_a) {
166
167
  var isActive = link.onClick
167
168
  ? selectedOption === "".concat(section, "-").concat(index)
168
169
  : pathname === link.uri;
169
- return (react_1.default.createElement("div", { onClick: function () {
170
- if (isMobile) {
171
- handleClose();
172
- }
173
- if (link === null || link === void 0 ? void 0 : link.onClick) {
174
- link.onClick();
175
- setselectedOption("".concat(section, "-").concat(index));
176
- }
177
- else {
178
- window.location.href = link.uri;
179
- }
180
- }, key: link.uri, className: 'hover-scale' },
181
- react_1.default.createElement("span", { className: " pointer ".concat(iconCSS || '', " ").concat(variant === 'standard' || popIcon
182
- ? "p-1 ".concat(isActive ? 'text-primary' : 'bg border', " central")
183
- : variant === 'minimal' && !isActive
184
- ? 'p-1 central bg'
185
- : ''), style: { lineHeight: 0, borderRadius: '0.4rem', fontSize: collapseIconSize } }, link.icon)));
170
+ return (react_1.default.createElement(ToolTip_1.default, { key: link.uri, message: link.text, tip: 'right' },
171
+ react_1.default.createElement("div", { onClick: function () {
172
+ if (isMobile) {
173
+ handleClose();
174
+ }
175
+ if (link === null || link === void 0 ? void 0 : link.onClick) {
176
+ link.onClick();
177
+ setselectedOption("".concat(section, "-").concat(index));
178
+ }
179
+ else {
180
+ window.location.href = link.uri;
181
+ }
182
+ }, className: 'hover-scale-rotate hover-text-primary' },
183
+ react_1.default.createElement("span", { className: " pointer ".concat(iconCSS || '', " ").concat(variant === 'standard' || popIcon
184
+ ? "p-1 ".concat(isActive ? 'text-primary' : 'bg border', " central")
185
+ : variant === 'minimal' && !isActive
186
+ ? 'p-1 central bg'
187
+ : ''), style: { lineHeight: 0, borderRadius: '0.4rem', fontSize: collapseIconSize } }, link.icon))));
186
188
  }),
187
189
  sectionIndex < Object.keys(groupedLinks).length - 1 && (react_1.default.createElement("div", { className: "mt-1 mb-1 bt fit" }))));
188
190
  })))))),
package/ui/table/Table.js CHANGED
@@ -354,7 +354,8 @@ function Table(_a) {
354
354
  var shouldSlice = !searchQuery || results.length > 10;
355
355
  return (shouldSlice ? results.slice(startIndex, endIndex) : results).map(function (mdoc, index) { return (React.createElement("div", { className: "table-row animated slide-up ".concat(trCss), key: index, onClick: onRowClick ? function () { return onRowClick(mdoc); } : undefined, style: {
356
356
  // Match the grid template columns
357
- gridTemplateColumns: gridTemplateColumns
357
+ gridTemplateColumns: gridTemplateColumns,
358
+ position: 'relative', zIndex: ((shouldSlice ? results.slice(startIndex, endIndex) : results).length + 2) - (index)
358
359
  } },
359
360
  data.fields.map(function (fdoc, findex) {
360
361
  var _a, _b;
@@ -2,6 +2,12 @@ import * as React from 'react';
2
2
  interface ToolTipProps {
3
3
  funcss?: string;
4
4
  children?: React.ReactNode;
5
+ content?: React.ReactNode;
6
+ message?: React.ReactNode;
7
+ animation?: string;
8
+ duration?: number;
9
+ tip?: 'top' | 'bottom' | 'left' | 'right';
10
+ usePortal?: boolean;
5
11
  }
6
- export default function ToolTip({ funcss, children, ...rest }: ToolTipProps): React.JSX.Element;
12
+ export default function ToolTip({ funcss, children, content, message, animation, duration, tip, usePortal, ...rest }: ToolTipProps): React.JSX.Element;
7
13
  export {};
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __assign = (this && this.__assign) || function () {
3
4
  __assign = Object.assign || function(t) {
4
5
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -57,7 +58,73 @@ var __rest = (this && this.__rest) || function (s, e) {
57
58
  Object.defineProperty(exports, "__esModule", { value: true });
58
59
  exports.default = ToolTip;
59
60
  var React = __importStar(require("react"));
61
+ var react_dom_1 = require("react-dom");
60
62
  function ToolTip(_a) {
61
- var funcss = _a.funcss, children = _a.children, rest = __rest(_a, ["funcss", "children"]);
62
- return (React.createElement("span", __assign({ className: "tooltip ".concat(funcss !== null && funcss !== void 0 ? funcss : '') }, rest), children));
63
+ var funcss = _a.funcss, children = _a.children, content = _a.content, message = _a.message, animation = _a.animation, duration = _a.duration, _b = _a.tip, tip = _b === void 0 ? 'top' : _b, _c = _a.usePortal, usePortal = _c === void 0 ? true : _c, rest = __rest(_a, ["funcss", "children", "content", "message", "animation", "duration", "tip", "usePortal"]);
64
+ var _d = React.useState(false), isVisible = _d[0], setIsVisible = _d[1];
65
+ var _e = React.useState({ x: 0, y: 0 }), coords = _e[0], setCoords = _e[1];
66
+ var triggerRef = React.useRef(null);
67
+ var text = message || content || children;
68
+ var handleMouseEnter = function (e) {
69
+ if (triggerRef.current) {
70
+ var rect = triggerRef.current.getBoundingClientRect();
71
+ var x = rect.left + (rect.width / 2);
72
+ var y = rect.top;
73
+ if (tip === 'bottom') {
74
+ y = rect.bottom;
75
+ }
76
+ else if (tip === 'left') {
77
+ x = rect.left;
78
+ y = rect.top + (rect.height / 2);
79
+ }
80
+ else if (tip === 'right') {
81
+ x = rect.right;
82
+ y = rect.top + (rect.height / 2);
83
+ }
84
+ setCoords({ x: x, y: y });
85
+ setIsVisible(true);
86
+ }
87
+ };
88
+ var handleMouseLeave = function () {
89
+ setIsVisible(false);
90
+ };
91
+ var tooltipStyle = {
92
+ position: 'fixed',
93
+ top: coords.y + window.scrollY,
94
+ left: coords.x + window.scrollX,
95
+ zIndex: 9999,
96
+ opacity: isVisible ? 1 : 0,
97
+ transition: 'opacity 0.2s ease',
98
+ pointerEvents: 'none',
99
+ transform: tip === 'top' ? 'translate(-50%, -100%)' :
100
+ tip === 'bottom' ? 'translate(-50%, 0)' :
101
+ tip === 'left' ? 'translate(-100%, -50%)' :
102
+ 'translate(0, -50%)',
103
+ };
104
+ return (React.createElement(React.Fragment, null,
105
+ React.createElement("span", __assign({ ref: triggerRef, className: "tooltip ".concat(funcss), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave }, rest),
106
+ !usePortal && text && (React.createElement("div", { className: "tip tip-".concat(tip) }, text)),
107
+ children && children !== text ? children : null),
108
+ usePortal && text && isVisible && (0, react_dom_1.createPortal)(React.createElement("div", { className: "tip tip-".concat(tip), style: tooltipStyle }, text), document.body)));
63
109
  }
110
+ // import * as React from 'react';
111
+ // import Tip from './Tip';
112
+ // interface ToolTipProps {
113
+ // funcss?: string;
114
+ // children?: React.ReactNode;
115
+ // content?: React.ReactNode;
116
+ // message?: React.ReactNode;
117
+ // animation?: string;
118
+ // duration?: number;
119
+ // }
120
+ // export default function ToolTip({ funcss, children, content, message, animation, duration, ...rest }: ToolTipProps) {
121
+ // const text = message || content || children;
122
+ // return (
123
+ // <span
124
+ // className={`tooltip ${funcss}`}
125
+ // {...rest}
126
+ // >
127
+ // {text && <Tip tip="top" content={text} animation={animation} duration={duration} />}
128
+ // </span>
129
+ // );
130
+ // }