nanoplot 0.0.92 → 0.0.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/index.css +12 -165
  2. package/dist/src/components/Bars/components/HorizontalBars.js +1 -2
  3. package/dist/src/components/Bars/components/VerticalBars.js +1 -4
  4. package/dist/src/components/BoxShadow/BoxShadow.d.ts +5 -0
  5. package/dist/src/components/BoxShadow/BoxShadow.js +240 -0
  6. package/dist/src/components/Heatmap/Heatmap.js +1 -2
  7. package/dist/src/components/Lines/Lines.d.ts +3 -1
  8. package/dist/src/components/Lines/Lines.js +5 -0
  9. package/dist/src/components/Lines/components/Line.d.ts +8 -5
  10. package/dist/src/components/Lines/components/Line.js +19 -3
  11. package/dist/src/components/Lines/components/LinesTooltip.js +7 -7
  12. package/dist/src/components/Overlay/Overlay.d.ts +17 -3
  13. package/dist/src/components/Overlay/Overlay.js +21 -8
  14. package/dist/src/components/Overlay/OverlayCircle.d.ts +8 -0
  15. package/dist/src/components/Overlay/OverlayCircle.js +18 -0
  16. package/dist/src/components/Overlay/OverlayCross.d.ts +8 -0
  17. package/dist/src/components/Overlay/OverlayCross.js +18 -0
  18. package/dist/src/components/Overlay/OverlayDiamond.d.ts +8 -0
  19. package/dist/src/components/Overlay/OverlayDiamond.js +18 -0
  20. package/dist/src/components/Overlay/OverlayTriangle.d.ts +8 -0
  21. package/dist/src/components/Overlay/OverlayTriangle.js +18 -0
  22. package/dist/src/components/Pie/Pie.js +1 -1
  23. package/dist/src/components/Scatter/Scatter.d.ts +103 -9
  24. package/dist/src/components/Scatter/Scatter.js +12 -17
  25. package/dist/src/components/Scatter/components/ScatterLabels.d.ts +16 -1
  26. package/dist/src/components/Scatter/components/ScatterLabels.js +46 -18
  27. package/dist/src/components/Scatter/components/ScatterQuadrant.d.ts +3 -3
  28. package/dist/src/components/Scatter/components/ScatterQuadrant.js +2 -2
  29. package/dist/src/components/Scatter/components/ScatterTooltip.d.ts +3 -1
  30. package/dist/src/components/Scatter/components/ScatterTooltip.js +25 -12
  31. package/dist/src/components/Tooltip/Popup.js +45 -24
  32. package/dist/src/utils/coordinates/coordinates.js +10 -2
  33. package/dist/src/utils/domain/utils/temporal.js +6 -1
  34. package/dist/src/utils/gradient/gradient.d.ts +6 -2
  35. package/dist/src/utils/gradient/gradient.js +13 -6
  36. package/dist/src/utils/path/path.d.ts +0 -7
  37. package/dist/src/utils/path/path.js +0 -30
  38. package/dist/tsconfig.typings.tsbuildinfo +1 -1
  39. package/package.json +1 -1
package/dist/index.css CHANGED
@@ -32,10 +32,6 @@
32
32
  }
33
33
  }
34
34
 
35
- .pseudo-bg-inherit::before, .pseudo-bg-inherit::after {
36
- background: inherit;
37
- }
38
-
39
35
  .pointer-events-none {
40
36
  pointer-events: none;
41
37
  }
@@ -100,10 +96,6 @@
100
96
  z-index: -10;
101
97
  }
102
98
 
103
- .z-0 {
104
- z-index: 0;
105
- }
106
-
107
99
  .z-10 {
108
100
  z-index: 10;
109
101
  }
@@ -448,10 +440,6 @@
448
440
  stroke-width: 5;
449
441
  }
450
442
 
451
- .p-\[12px\] {
452
- padding: 12px;
453
- }
454
-
455
443
  .px-2\.5 {
456
444
  padding-left: 0.625rem;
457
445
  padding-right: 0.625rem;
@@ -678,50 +666,10 @@
678
666
  backface-visibility: hidden;
679
667
  }
680
668
 
681
- .\[background-position\:bottom\] {
682
- background-position: bottom;
683
- }
684
-
685
- .\[background-position\:right\] {
686
- background-position: right;
687
- }
688
-
689
- .\[background-size\:100\%_calc\(100\%\+var\(--h\)\)\] {
690
- background-size: 100% calc(100% + var(--h));
691
- }
692
-
693
- .\[background-size\:calc\(100\%\+var\(--h\)\)_100\%\] {
694
- background-size: calc(100% + var(--h)) 100%;
695
- }
696
-
697
669
  .\[background\:linear-gradient\(transparent\2c \#CFCFCF\)\] {
698
670
  background: linear-gradient(transparent,#CFCFCF);
699
671
  }
700
672
 
701
- .\[background\:padding-box_linear-gradient\(black\)\2c border-box_rgb\(45\2c 45\2c 45\)\] {
702
- background: padding-box linear-gradient(black),border-box rgb(45,45,45);
703
- }
704
-
705
- .\[border-radius\:min\(var\(--r\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_min\(var\(--r\)\2c 100\%-var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_var\(--r\)_var\(--r\)\/var\(--r\)\] {
706
- border-radius: min(var(--r),var(--p) - var(--h) * tan(var(--a) / 2)) min(var(--r),100% - var(--p) - var(--h) * tan(var(--a) / 2)) var(--r) var(--r) / var(--r);
707
- }
708
-
709
- .\[border-radius\:var\(--r\)\/min\(var\(--r\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_var\(--r\)_var\(--r\)_min\(var\(--r\)\2c 100\%-var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)\] {
710
- border-radius: var(--r)/min(var(--r),var(--p) - var(--h) * tan(var(--a) / 2)) var(--r) var(--r) min(var(--r),100% - var(--p) - var(--h) * tan(var(--a) / 2));
711
- }
712
-
713
- .\[border-radius\:var\(--r\)\/var\(--r\)_min\(var\(--r\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_min\(var\(--r\)\2c 100\%-var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_var\(--r\)\] {
714
- border-radius: var(--r)/var(--r) min(var(--r),var(--p) - var(--h) * tan(var(--a) / 2)) min(var(--r),100% - var(--p) - var(--h) * tan(var(--a) / 2)) var(--r);
715
- }
716
-
717
- .\[border-radius\:var\(--r\)_var\(--r\)_min\(var\(--r\)\2c 100\%-var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_min\(var\(--r\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)\/var\(--r\)\] {
718
- border-radius: var(--r) var(--r) min(var(--r),100% - var(--p) - var(--h) * tan(var(--a) / 2)) min(var(--r),var(--p) - var(--h) * tan(var(--a) / 2)) / var(--r);
719
- }
720
-
721
- .\[border\:var\(--b\)_solid_\#0000\] {
722
- border: var(--b) solid #0000;
723
- }
724
-
725
673
  .\[container-type\:size\] {
726
674
  container-type: size;
727
675
  }
@@ -858,129 +806,28 @@
858
806
  initial-value: 1px;
859
807
  }
860
808
 
861
- .before\:absolute::before {
862
- content: var(--tw-content);
863
- position: absolute;
864
- }
865
-
866
- .before\:z-\[-1\]::before {
867
- content: var(--tw-content);
868
- z-index: -1;
869
- }
870
-
871
- .before\:content-\[\'_\'\]::before {
872
- --tw-content: ' ';
873
- content: var(--tw-content);
874
- }
875
-
876
- .before\:\[background-size\:0_0\2c _100\%_100\%\]::before {
877
- content: var(--tw-content);
878
- background-size: 0 0, 100% 100%;
879
- }
880
-
881
- .before\:\[clip-path\:polygon\(calc\(100\%-var\(--h\)-var\(--b\)\)_min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)\2c calc\(100\%-var\(--h\)\)_min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)\2c 100\%_var\(--p\)\2c calc\(100\%-var\(--h\)\)_max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)\2c calc\(100\%-var\(--h\)-var\(--b\)\)_max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)\)\]::before {
882
- content: var(--tw-content);
883
- clip-path: polygon(calc(100% - var(--h) - var(--b)) min(100%,var(--p) + var(--h) * tan(var(--a) / 2)),calc(100% - var(--h)) min(100%,var(--p) + var(--h) * tan(var(--a) / 2)),100% var(--p),calc(100% - var(--h)) max(0%,var(--p) - var(--h) * tan(var(--a) / 2)),calc(100% - var(--h) - var(--b)) max(0%,var(--p) - var(--h) * tan(var(--a) / 2)));
884
- }
885
-
886
- .before\:\[clip-path\:polygon\(calc\(var\(--h\)\+var\(--b\)\)_min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)\2c var\(--h\)_min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)\2c 0_var\(--p\)\2c var\(--h\)_max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)\2c calc\(var\(--h\)\+var\(--b\)\)_max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)\)\]::before {
887
- content: var(--tw-content);
888
- clip-path: polygon(calc(var(--h) + var(--b)) min(100%,var(--p) + var(--h) * tan(var(--a) / 2)),var(--h) min(100%,var(--p) + var(--h) * tan(var(--a) / 2)),0 var(--p),var(--h) max(0%,var(--p) - var(--h) * tan(var(--a) / 2)),calc(var(--h) + var(--b)) max(0%,var(--p) - var(--h) * tan(var(--a) / 2)));
889
- }
890
-
891
- .before\:\[clip-path\:polygon\(min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)_calc\(100\%-var\(--h\)-var\(--b\)\)\2c min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)_calc\(100\%-var\(--h\)\)\2c var\(--p\)_100\%\2c max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_calc\(100\%-var\(--h\)\)\2c max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_calc\(100\%-var\(--h\)-var\(--b\)\)\)\]::before {
892
- content: var(--tw-content);
893
- clip-path: polygon(min(100%,var(--p) + var(--h) * tan(var(--a) / 2)) calc(100% - var(--h) - var(--b)),min(100%,var(--p) + var(--h) * tan(var(--a) / 2)) calc(100% - var(--h)),var(--p) 100%,max(0%,var(--p) - var(--h) * tan(var(--a) / 2)) calc(100% - var(--h)),max(0%,var(--p) - var(--h) * tan(var(--a) / 2)) calc(100% - var(--h) - var(--b)));
894
- }
895
-
896
- .before\:\[clip-path\:polygon\(min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)_calc\(var\(--h\)\+var\(--b\)\)\2c min\(100\%\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)\)_var\(--h\)\2c var\(--p\)_0\2c max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_var\(--h\)\2c max\(0\%\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\)_calc\(var\(--h\)\+var\(--b\)\)\)\]::before {
897
- content: var(--tw-content);
898
- clip-path: polygon(min(100%,var(--p) + var(--h) * tan(var(--a) / 2)) calc(var(--h) + var(--b)),min(100%,var(--p) + var(--h) * tan(var(--a) / 2)) var(--h),var(--p) 0,max(0%,var(--p) - var(--h) * tan(var(--a) / 2)) var(--h),max(0%,var(--p) - var(--h) * tan(var(--a) / 2)) calc(var(--h) + var(--b)));
899
- }
900
-
901
- .before\:\[inset\:calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)-var\(--h\)\)\]::before {
902
- content: var(--tw-content);
903
- inset: calc(-1 * var(--b)) calc(-1 * var(--b)) calc(-1 * var(--b)) calc(-1 * var(--b) - var(--h));
904
- }
905
-
906
- .before\:\[inset\:calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)-var\(--h\)\)\]::before {
907
- content: var(--tw-content);
908
- inset: calc(-1 * var(--b)) calc(-1 * var(--b)) calc(-1 * var(--b) - var(--h));
909
- }
910
-
911
- .before\:\[inset\:calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)-var\(--h\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)\]::before {
912
- content: var(--tw-content);
913
- inset: calc(-1 * var(--b)) calc(-1 * var(--b) - var(--h)) calc(-1 * var(--b)) calc(-1 * var(--b));
914
- }
915
-
916
- .before\:\[inset\:calc\(-1\*var\(--b\)-var\(--h\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)\]::before {
917
- content: var(--tw-content);
918
- inset: calc(-1 * var(--b) - var(--h)) calc(-1 * var(--b)) calc(-1 * var(--b));
919
- }
920
-
921
- .after\:absolute::after {
922
- content: var(--tw-content);
923
- position: absolute;
924
- }
925
-
926
- .after\:z-\[-1\]::after {
927
- content: var(--tw-content);
928
- z-index: -1;
929
- }
930
-
931
- .after\:content-\[\'_\'\]::after {
932
- --tw-content: ' ';
933
- content: var(--tw-content);
934
- }
935
-
936
- .after\:\[background-size\:100\%_100\%\2c 0_0\]::after {
937
- content: var(--tw-content);
938
- background-size: 100% 100%,0 0;
939
- }
940
-
941
- .after\:\[border\:inherit\]::after {
942
- content: var(--tw-content);
943
- border: inherit;
944
- }
809
+ @property --fit-w {
810
+ syntax: "<length>";
945
811
 
946
- .after\:\[clip-path\:polygon\(calc\(100\%-var\(--h\)-var\(--b\)\)_min\(100\%-var\(--b\)\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)-var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)\2c calc\(100\%-var\(--b\)\/sin\(var\(--a\)\/2\)\)_var\(--p\)\2c calc\(100\%-var\(--h\)-var\(--b\)\)_max\(var\(--b\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\+var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)\2c 50\%_50\%\)\]::after {
947
- content: var(--tw-content);
948
- clip-path: polygon(calc(100% - var(--h) - var(--b)) min(100% - var(--b),var(--p) + var(--h) * tan(var(--a) / 2) - var(--b) * tan(45deg - var(--a) / 4)),calc(100% - var(--b) / sin(var(--a) / 2)) var(--p),calc(100% - var(--h) - var(--b)) max(var(--b),var(--p) - var(--h) * tan(var(--a) / 2) + var(--b) * tan(45deg - var(--a) / 4)),50% 50%);
949
- }
812
+ inherits: true;
950
813
 
951
- .after\:\[clip-path\:polygon\(calc\(var\(--h\)\+var\(--b\)\)_min\(100\%-var\(--b\)\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)-var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)\2c calc\(var\(--b\)\/sin\(var\(--a\)\/2\)\)_var\(--p\)\2c calc\(var\(--h\)\+var\(--b\)\)_max\(var\(--b\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\+var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)\2c 50\%_50\%\)\]::after {
952
- content: var(--tw-content);
953
- clip-path: polygon(calc(var(--h) + var(--b)) min(100% - var(--b),var(--p) + var(--h) * tan(var(--a) / 2) - var(--b) * tan(45deg - var(--a) / 4)),calc(var(--b) / sin(var(--a) / 2)) var(--p),calc(var(--h) + var(--b)) max(var(--b),var(--p) - var(--h) * tan(var(--a) / 2) + var(--b) * tan(45deg - var(--a) / 4)),50% 50%);
814
+ initial-value: 1px;
954
815
  }
955
816
 
956
- .after\:\[clip-path\:polygon\(min\(100\%-var\(--b\)\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)-var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)_calc\(100\%-var\(--h\)-var\(--b\)\)\2c var\(--p\)_calc\(100\%-var\(--b\)\/sin\(var\(--a\)\/2\)\)\2c max\(var\(--b\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\+var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)_calc\(100\%-var\(--h\)-var\(--b\)\)\2c 50\%_50\%\)\]::after {
957
- content: var(--tw-content);
958
- clip-path: polygon(min(100% - var(--b),var(--p) + var(--h) * tan(var(--a) / 2) - var(--b) * tan(45deg - var(--a) / 4)) calc(100% - var(--h) - var(--b)),var(--p) calc(100% - var(--b) / sin(var(--a) / 2)),max(var(--b),var(--p) - var(--h) * tan(var(--a) / 2) + var(--b) * tan(45deg - var(--a) / 4)) calc(100% - var(--h) - var(--b)),50% 50%);
959
- }
817
+ @property --fit-h {
818
+ syntax: "<length>";
960
819
 
961
- .after\:\[clip-path\:polygon\(min\(100\%-var\(--b\)\2c var\(--p\)\+var\(--h\)\*tan\(var\(--a\)\/2\)-var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)_calc\(var\(--h\)\+var\(--b\)\)\2c var\(--p\)_calc\(var\(--b\)\/sin\(var\(--a\)\/2\)\)\2c max\(var\(--b\)\2c var\(--p\)-var\(--h\)\*tan\(var\(--a\)\/2\)\+var\(--b\)\*tan\(45deg-var\(--a\)\/4\)\)_calc\(var\(--h\)\+var\(--b\)\)\2c 50\%_50\%\)\]::after {
962
- content: var(--tw-content);
963
- clip-path: polygon(min(100% - var(--b),var(--p) + var(--h) * tan(var(--a) / 2) - var(--b) * tan(45deg - var(--a) / 4)) calc(var(--h) + var(--b)),var(--p) calc(var(--b) / sin(var(--a) / 2)),max(var(--b),var(--p) - var(--h) * tan(var(--a) / 2) + var(--b) * tan(45deg - var(--a) / 4)) calc(var(--h) + var(--b)),50% 50%);
964
- }
820
+ inherits: true;
965
821
 
966
- .after\:\[inset\:calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)-var\(--h\)\)\]::after {
967
- content: var(--tw-content);
968
- inset: calc(-1 * var(--b)) calc(-1 * var(--b)) calc(-1 * var(--b)) calc(-1 * var(--b) - var(--h));
822
+ initial-value: 1px;
969
823
  }
970
824
 
971
- .after\:\[inset\:calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)-var\(--h\)\)\]::after {
972
- content: var(--tw-content);
973
- inset: calc(-1 * var(--b)) calc(-1 * var(--b)) calc(-1 * var(--b) - var(--h));
974
- }
825
+ @property --sx {
826
+ syntax: "<number>";
975
827
 
976
- .after\:\[inset\:calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)-var\(--h\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)\]::after {
977
- content: var(--tw-content);
978
- inset: calc(-1 * var(--b)) calc(-1 * var(--b) - var(--h)) calc(-1 * var(--b)) calc(-1 * var(--b));
979
- }
828
+ inherits: false;
980
829
 
981
- .after\:\[inset\:calc\(-1\*var\(--b\)-var\(--h\)\)_calc\(-1\*var\(--b\)\)_calc\(-1\*var\(--b\)\)\]::after {
982
- content: var(--tw-content);
983
- inset: calc(-1 * var(--b) - var(--h)) calc(-1 * var(--b)) calc(-1 * var(--b));
830
+ initial-value: 1;
984
831
  }
985
832
 
986
833
  .hover\:stroke-\[var\(--worldmap-stroke\)\]:hover {
@@ -17,7 +17,6 @@ import { cx } from "../../../utils/cx/cx";
17
17
  import { ObjectUtils } from "../../../utils/object/object";
18
18
  import { Rect } from "./Rect";
19
19
  import { scale } from "../../../utils/math/math";
20
- import { overlay } from "../../Overlay/Overlay";
21
20
  import { ColorUtils } from "../../../utils/color/color";
22
21
  import { toEpochMs } from "../../../utils/domain/utils/temporal";
23
22
  export const HorizontalBars = ({ children, fill, stroke, labels, size = 50, radius = 0, anchor = 0, interactions, onMouseEnter, onMouseLeave, className, }) => {
@@ -75,7 +74,7 @@ export const HorizontalBars = ({ children, fill, stroke, labels, size = 50, radi
75
74
  return (_a = (labels === true ? bar.data.y : labels(bar))) !== null && _a !== void 0 ? _a : "";
76
75
  })();
77
76
  const breakpoint = [2, 4, 6, 8, 10, 15, 20].find((bp) => bp >= label.toString().length);
78
- return (React.createElement(overlay.div, { key: i, className: "bars__label @container-[size] absolute text-center", style: {
77
+ return (React.createElement("div", { key: i, className: "bars__label [grid-area:graph] @container-[size] absolute text-center", style: {
79
78
  width,
80
79
  height: height + "%",
81
80
  left: position === "above" ? "unset" : scale(Math.min(bar.x1, bar.x2), context.viewbox.x, 100) + "%",
@@ -18,7 +18,6 @@ import { ObjectUtils } from "../../../utils/object/object";
18
18
  import { Rect } from "./Rect";
19
19
  import { cx } from "../../../utils/cx/cx";
20
20
  import { scale } from "../../../utils/math/math";
21
- import { overlay } from "../../Overlay/Overlay";
22
21
  import { ColorUtils } from "../../../utils/color/color";
23
22
  import { toEpochMs } from "../../../utils/domain/utils/temporal";
24
23
  export const VerticalBars = (_a) => {
@@ -37,12 +36,10 @@ export const VerticalBars = (_a) => {
37
36
  }));
38
37
  const BAR_WIDTH = Math.floor(context.viewbox.x / context.domain.x.length / new Set(bars.map((bar) => bar.group)).size) * (size / 100); // this divided by number of unique groups?
39
38
  const xValues = new Set(bars.map((bar) => (typeof bar.data.x === "string" || typeof bar.data.x === "number" ? bar.data.x : toEpochMs(bar.data.x))));
40
- console.log(xValues);
41
39
  const dataset = Array.from(xValues)
42
40
  .flatMap((x) => {
43
41
  const coordinate = xForValue(x);
44
42
  const barsForTick = bars.filter((bar) => (typeof bar.data.x === "string" || typeof bar.data.x === "number" ? bar.data.x : toEpochMs(bar.data.x)) === x);
45
- console.log(barsForTick);
46
43
  return Object.entries(ObjectUtils.groupBy(barsForTick, ({ group }) => group)).flatMap(([, barsForGroup], i, groups) => {
47
44
  const x1 = coordinate + BAR_WIDTH * i - (BAR_WIDTH * Object.keys(groups).length) / 2;
48
45
  return barsForGroup === null || barsForGroup === void 0 ? void 0 : barsForGroup.map((bar) => (Object.assign(Object.assign({}, bar), { x1, x2: x1 + BAR_WIDTH, y1: yForValue(bar.data.y), y2: yForValue(anchor) }))).map((segment, ii, segments) => {
@@ -88,7 +85,7 @@ export const VerticalBars = (_a) => {
88
85
  return (_a = (labels === true ? bar.data.y : labels(bar))) !== null && _a !== void 0 ? _a : "";
89
86
  })();
90
87
  const breakpoint = [2, 4, 5, 6, 8, 10, 15, 20].find((bp) => bp >= label.toString().replace(".", "").length);
91
- return (React.createElement(overlay.div, { key: i, className: "bars__label @container-[size] absolute text-center", style: {
88
+ return (React.createElement("div", { key: i, className: "bars__label [grid-area:graph] @container-[size] absolute text-center", style: {
92
89
  width,
93
90
  height: Math.abs(height - (position === "above" ? 100 : 0)) + "%",
94
91
  left: scale(bar.x1, context.viewbox.x, 100) + "%",
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ export declare function BoxShadow({ id, shadow }: {
3
+ id: string;
4
+ shadow: string;
5
+ }): React.JSX.Element | null;
@@ -0,0 +1,240 @@
1
+ import React, { useMemo } from "react";
2
+ function splitShadows(str) {
3
+ const result = [];
4
+ let depth = 0, current = "";
5
+ for (const ch of str) {
6
+ if (ch === "(")
7
+ depth++;
8
+ if (ch === ")")
9
+ depth--;
10
+ if (ch === "," && depth === 0) {
11
+ result.push(current.trim());
12
+ current = "";
13
+ }
14
+ else {
15
+ current += ch;
16
+ }
17
+ }
18
+ if (current.trim())
19
+ result.push(current.trim());
20
+ return result;
21
+ }
22
+ function parseBoxShadow(shadowStr) {
23
+ if (!shadowStr || !shadowStr.trim())
24
+ return [];
25
+ return splitShadows(shadowStr).map(parseSingleShadow);
26
+ }
27
+ function buildFilterData(shadows) {
28
+ const primitives = [];
29
+ const dropRefs = [];
30
+ const insetRefs = [];
31
+ shadows.forEach((s, i) => {
32
+ const sd = s.blur / 2;
33
+ if (!s.inset) {
34
+ // ═══ DROP SHADOW ═══
35
+ let src = "SourceAlpha";
36
+ if (s.spread !== 0) {
37
+ const op = s.spread > 0 ? "dilate" : "erode";
38
+ primitives.push({ tag: "feMorphology", attrs: { in: src, operator: op, radius: Math.abs(s.spread), result: `dSp${i}` } });
39
+ src = `dSp${i}`;
40
+ }
41
+ if (sd > 0) {
42
+ primitives.push({ tag: "feGaussianBlur", attrs: { in: src, stdDeviation: sd, result: `dBl${i}` } });
43
+ src = `dBl${i}`;
44
+ }
45
+ primitives.push({ tag: "feOffset", attrs: { in: src, dx: s.offsetX, dy: s.offsetY, result: `dOf${i}` } });
46
+ primitives.push({ tag: "feFlood", attrs: { floodColor: s.color, floodOpacity: s.opacity, result: `dFl${i}` } });
47
+ primitives.push({ tag: "feComposite", attrs: { in: `dFl${i}`, in2: `dOf${i}`, operator: "in", result: `dSh${i}` } });
48
+ dropRefs.push(`dSh${i}`);
49
+ }
50
+ else {
51
+ // ═══ INSET SHADOW ═══
52
+ primitives.push({ tag: "feFlood", attrs: { floodColor: "white", floodOpacity: 1, result: `iWh${i}` } });
53
+ primitives.push({ tag: "feComposite", attrs: { in: `iWh${i}`, in2: "SourceAlpha", operator: "out", result: `iInv${i}` } });
54
+ let src = `iInv${i}`;
55
+ if (s.spread !== 0) {
56
+ const op = s.spread > 0 ? "dilate" : "erode";
57
+ primitives.push({ tag: "feMorphology", attrs: { in: src, operator: op, radius: Math.abs(s.spread), result: `iSp${i}` } });
58
+ src = `iSp${i}`;
59
+ }
60
+ if (sd > 0) {
61
+ primitives.push({ tag: "feGaussianBlur", attrs: { in: src, stdDeviation: sd, result: `iBl${i}` } });
62
+ src = `iBl${i}`;
63
+ }
64
+ primitives.push({ tag: "feOffset", attrs: { in: src, dx: s.offsetX, dy: s.offsetY, result: `iOf${i}` } });
65
+ primitives.push({ tag: "feFlood", attrs: { floodColor: s.color, floodOpacity: s.opacity, result: `iFl${i}` } });
66
+ primitives.push({ tag: "feComposite", attrs: { in: `iFl${i}`, in2: `iOf${i}`, operator: "in", result: `iCo${i}` } });
67
+ primitives.push({ tag: "feComposite", attrs: { in: `iCo${i}`, in2: "SourceAlpha", operator: "in", result: `iSh${i}` } });
68
+ insetRefs.push(`iSh${i}`);
69
+ }
70
+ });
71
+ // Merge order: drop shadows (last→first) → SourceGraphic → inset (last→first)
72
+ const mergeInputs = [];
73
+ for (let i = dropRefs.length - 1; i >= 0; i--)
74
+ mergeInputs.push(dropRefs[i]);
75
+ mergeInputs.push("SourceGraphic");
76
+ for (let i = insetRefs.length - 1; i >= 0; i--)
77
+ mergeInputs.push(insetRefs[i]);
78
+ return { primitives, mergeInputs };
79
+ }
80
+ function computeFilterRegion(shadows) {
81
+ let maxExt = 30;
82
+ for (const s of shadows) {
83
+ const ext = Math.abs(s.offsetX) + Math.abs(s.offsetY) + s.blur + Math.abs(s.spread) + 20;
84
+ if (ext > maxExt)
85
+ maxExt = ext;
86
+ }
87
+ const pad = Math.max(maxExt * 3, 100);
88
+ return { x: `-${pad}%`, y: `-${pad}%`, width: `${100 + pad * 2}%`, height: `${100 + pad * 2}%` };
89
+ }
90
+ function parseSingleShadow(str) {
91
+ const tokens = tokenize(str);
92
+ let inset = false;
93
+ const lengths = [];
94
+ let colorStr = null;
95
+ for (const token of tokens) {
96
+ if (token.toLowerCase() === "inset") {
97
+ inset = true;
98
+ }
99
+ else if (isLength(token)) {
100
+ lengths.push(parseFloat(token) || 0);
101
+ }
102
+ else {
103
+ colorStr = token;
104
+ }
105
+ }
106
+ const { color, opacity } = parseColorValue(colorStr || "rgba(0,0,0,1)");
107
+ return {
108
+ inset,
109
+ offsetX: lengths[0] || 0,
110
+ offsetY: lengths[1] || 0,
111
+ blur: Math.max(lengths[2] || 0, 0),
112
+ spread: lengths[3] || 0,
113
+ color,
114
+ opacity,
115
+ };
116
+ }
117
+ function isLength(token) {
118
+ return /^-?\d*\.?\d+(px|em|rem|pt|cm|mm|in|vh|vw|%)?$/.test(token);
119
+ }
120
+ // ─── Color Parser ─────────────────────────────────────────
121
+ function tokenize(str) {
122
+ const tokens = [];
123
+ let i = 0;
124
+ const s = str.trim();
125
+ while (i < s.length) {
126
+ if (/\s/.test(s[i])) {
127
+ i++;
128
+ continue;
129
+ }
130
+ if (/[a-zA-Z_]/.test(s[i])) {
131
+ let word = "";
132
+ while (i < s.length && /[a-zA-Z_-]/.test(s[i])) {
133
+ word += s[i];
134
+ i++;
135
+ }
136
+ if (i < s.length && s[i] === "(") {
137
+ word += "(";
138
+ i++;
139
+ let depth = 1;
140
+ while (i < s.length && depth > 0) {
141
+ if (s[i] === "(")
142
+ depth++;
143
+ if (s[i] === ")")
144
+ depth--;
145
+ word += s[i];
146
+ i++;
147
+ }
148
+ }
149
+ tokens.push(word);
150
+ continue;
151
+ }
152
+ if (s[i] === "#") {
153
+ let hex = "#";
154
+ i++;
155
+ while (i < s.length && /[0-9a-fA-F]/.test(s[i])) {
156
+ hex += s[i];
157
+ i++;
158
+ }
159
+ tokens.push(hex);
160
+ continue;
161
+ }
162
+ if (/[-\d.]/.test(s[i])) {
163
+ let num = "";
164
+ if (s[i] === "-") {
165
+ num += "-";
166
+ i++;
167
+ }
168
+ while (i < s.length && /[\d.]/.test(s[i])) {
169
+ num += s[i];
170
+ i++;
171
+ }
172
+ while (i < s.length && /[a-zA-Z%]/.test(s[i])) {
173
+ num += s[i];
174
+ i++;
175
+ }
176
+ tokens.push(num);
177
+ continue;
178
+ }
179
+ i++;
180
+ }
181
+ return tokens;
182
+ }
183
+ function parseColorValue(colorStr) {
184
+ const s = (colorStr || "").trim();
185
+ if (!s || s.toLowerCase() === "transparent")
186
+ return { color: "rgb(0,0,0)", opacity: 0 };
187
+ if (s.startsWith("#")) {
188
+ const hex = s.slice(1);
189
+ if (hex.length === 3)
190
+ return { color: s, opacity: 1 };
191
+ if (hex.length === 4) {
192
+ const a = parseInt(hex[3] + hex[3], 16) / 255;
193
+ return { color: `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`, opacity: +a.toFixed(3) };
194
+ }
195
+ if (hex.length === 6)
196
+ return { color: s, opacity: 1 };
197
+ if (hex.length === 8) {
198
+ const a = parseInt(hex.slice(6), 16) / 255;
199
+ return { color: s.slice(0, 7), opacity: +a.toFixed(3) };
200
+ }
201
+ return { color: s, opacity: 1 };
202
+ }
203
+ const rgbaMatch = s.match(/^rgba?\((.+)\)$/i);
204
+ if (rgbaMatch) {
205
+ const parts = rgbaMatch[1].split(/[\s,/]+/).filter(Boolean);
206
+ const [r, g, b] = parts;
207
+ if (parts.length >= 4) {
208
+ let a = parseFloat(parts[3]);
209
+ if (parts[3].endsWith("%"))
210
+ a = parseFloat(parts[3]) / 100;
211
+ return { color: `rgb(${r},${g},${b})`, opacity: a };
212
+ }
213
+ return { color: `rgb(${r},${g},${b})`, opacity: 1 };
214
+ }
215
+ const hslaMatch = s.match(/^hsla?\((.+)\)$/i);
216
+ if (hslaMatch) {
217
+ const parts = hslaMatch[1].split(/[\s,/]+/).filter(Boolean);
218
+ if (parts.length >= 4) {
219
+ let a = parseFloat(parts[3]);
220
+ if (parts[3].endsWith("%"))
221
+ a = parseFloat(parts[3]) / 100;
222
+ return { color: `hsl(${parts[0]},${parts[1]},${parts[2]})`, opacity: a };
223
+ }
224
+ return { color: s, opacity: 1 };
225
+ }
226
+ return { color: s, opacity: 1 };
227
+ }
228
+ export function BoxShadow({ id, shadow }) {
229
+ const filterElement = useMemo(() => {
230
+ const shadows = parseBoxShadow(shadow);
231
+ if (!shadows.length)
232
+ return null;
233
+ const { primitives, mergeInputs } = buildFilterData(shadows);
234
+ const region = computeFilterRegion(shadows);
235
+ return (React.createElement("filter", { id: id, x: region.x, y: region.y, width: region.width, height: region.height, colorInterpolationFilters: "sRGB", filterUnits: "userSpaceOnUse" },
236
+ primitives.map((p, i) => React.createElement(p.tag, Object.assign({ key: i }, p.attrs))),
237
+ React.createElement("feMerge", null, mergeInputs.map((ref, i) => (React.createElement("feMergeNode", { key: i, in: ref }))))));
238
+ }, [shadow, id]);
239
+ return filterElement;
240
+ }
@@ -16,7 +16,6 @@ import { GraphUtils } from "../../utils/graph/graph";
16
16
  import { CoordinatesUtils } from "../../utils/coordinates/coordinates";
17
17
  import { scale } from "../../utils/math/math";
18
18
  import { GradientUtils } from "../../utils/gradient/gradient";
19
- import { overlay } from "../Overlay/Overlay";
20
19
  import { ColorUtils } from "../../utils/color/color";
21
20
  import React from "react";
22
21
  import { ScalarUtils } from "../../utils/scalars/scalars";
@@ -67,7 +66,7 @@ export const Heatmap = (_a) => {
67
66
  return (_a = (labels === true ? rect.data.z.toString() : labels(rect.data.z))) !== null && _a !== void 0 ? _a : "";
68
67
  })();
69
68
  const breakpoint = [2, 4, 6, 8, 10, 15, 20].find((bp) => bp >= label.toString().length);
70
- return (React.createElement(overlay.div, { key: i, className: "heatmap__labels @container-[size] absolute text-center", style: {
69
+ return (React.createElement("div", { key: i, className: "heatmap__labels [grid-area:graph] @container-[size] absolute text-center", style: {
71
70
  width,
72
71
  height: height + "%",
73
72
  left: `${scale(rect.x1, context.viewbox.x, 100)}%`,
@@ -1,6 +1,7 @@
1
- import React, { ReactNode } from "react";
1
+ import React, { ComponentProps, ReactNode } from "react";
2
2
  import { InternalGraphContext } from "../../hooks/use-graph/use-graph";
3
3
  import { CurveUtils } from "../../utils/path/curve";
4
+ import { Line } from "./components/Line";
4
5
  interface Props extends React.SVGAttributes<SVGSVGElement> {
5
6
  children?: ReactNode;
6
7
  curve?: keyof typeof CurveUtils;
@@ -13,6 +14,7 @@ interface Props extends React.SVGAttributes<SVGSVGElement> {
13
14
  }
14
15
  export declare const Lines: {
15
16
  (props: Props): React.JSX.Element | null;
17
+ Line(props: ComponentProps<typeof Line>): React.JSX.Element;
16
18
  Tooltip: React.ComponentType<Omit<React.HTMLAttributes<HTMLDivElement> & {
17
19
  tooltip?: ((points: Array<Omit<import("../../export").CartesianDataset[number], "data"> & {
18
20
  data: import("../../export").CartesianDataset[number]["data"][number];
@@ -63,6 +63,11 @@ export const Lines = (props) => {
63
63
  }),
64
64
  children)));
65
65
  };
66
+ Lines.Line = (props) => {
67
+ const context = useGraph();
68
+ return (React.createElement("svg", { className: "[grid-area:graph] h-full w-full", viewBox: `0 0 ${context.viewbox.x} ${context.viewbox.y}`, preserveAspectRatio: "none" },
69
+ React.createElement(Line, Object.assign({}, props))));
70
+ };
66
71
  Lines.Tooltip = LinesTooltipZone;
67
72
  Lines.Mouse = LinesMouse;
68
73
  Lines.Joints = LinesJoints;
@@ -1,13 +1,16 @@
1
1
  import { JSX } from "react";
2
- type Props = JSX.IntrinsicElements["path"] & {
3
- d: string;
2
+ import { InternalGraphContext, TemporalDate } from "../../../hooks/use-graph/use-graph";
3
+ type Props = Omit<JSX.IntrinsicElements["path"], "points"> & {
4
+ d?: string;
4
5
  stroke: string;
5
6
  fill?: string;
7
+ filter?: string;
6
8
  disabled?: boolean;
7
9
  points?: Array<{
8
- x: number;
9
- y: number;
10
+ x: number | string | TemporalDate;
11
+ y: number | string | TemporalDate;
10
12
  }>;
13
+ context?: InternalGraphContext;
11
14
  };
12
- export declare const Line: ({ stroke, d, disabled, fill, className, points, ...rest }: Props) => JSX.Element;
15
+ export declare const Line: ({ stroke, d, disabled, fill, className, points, filter, ...rest }: Props) => JSX.Element;
13
16
  export {};
@@ -11,20 +11,36 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import React, { useId } from "react";
13
13
  import { LinearGradient } from "../../LinearGradient/LinearGradient";
14
+ import { useGraph } from "../../../hooks/use-graph/use-graph";
15
+ import { CoordinatesUtils } from "../../../utils/coordinates/coordinates";
16
+ import { CurveUtils } from "../../../utils/path/curve";
17
+ import { BoxShadow } from "../../BoxShadow/BoxShadow";
14
18
  export const Line = (_a) => {
15
- var { stroke, d, disabled, fill, className, points } = _a, rest = __rest(_a, ["stroke", "d", "disabled", "fill", "className", "points"]);
19
+ var { stroke, d, disabled, fill, className, points, filter } = _a, rest = __rest(_a, ["stroke", "d", "disabled", "fill", "className", "points", "filter"]);
20
+ const context = useGraph();
16
21
  const strokeId = useId();
17
22
  const fillId = useId();
18
23
  const clipId = useId();
24
+ const boxShadowId = useId();
19
25
  const isGradientFill = fill === null || fill === void 0 ? void 0 : fill.includes("linear-gradient");
20
26
  const isGradientStroke = stroke === null || stroke === void 0 ? void 0 : stroke.includes("linear-gradient");
21
27
  const isMaskStroke = stroke === null || stroke === void 0 ? void 0 : stroke.includes("mask");
28
+ const coordinatesFor = CoordinatesUtils.xyCoordinatesForDataset(context);
29
+ const D = (() => {
30
+ if (d)
31
+ return d;
32
+ if (points)
33
+ return CurveUtils.linear(coordinatesFor(points));
34
+ return "";
35
+ })();
22
36
  return (React.createElement(React.Fragment, null,
37
+ filter && React.createElement(BoxShadow, { id: boxShadowId, shadow: filter }),
23
38
  isGradientFill && !disabled && fill && React.createElement(LinearGradient, { id: fillId, gradient: fill }),
24
39
  isGradientStroke && !disabled && stroke && React.createElement(LinearGradient, { id: strokeId, gradient: stroke }),
25
40
  isMaskStroke && (React.createElement("mask", { id: clipId },
26
41
  React.createElement("rect", { width: "100%", height: "100%", fill: "black" }),
27
- React.createElement("path", { d: d, fill: "none", stroke: "white", strokeWidth: 1.5, vectorEffect: "non-scaling-stroke" }))),
42
+ React.createElement("path", { d: D, fill: "none", stroke: "white", strokeWidth: 1.5, vectorEffect: "non-scaling-stroke" }))),
28
43
  isMaskStroke && React.createElement("rect", { width: "100%", height: "100%", fill: `url(#${strokeId})`, mask: `url(#${clipId})` }),
29
- !isMaskStroke && (React.createElement("path", Object.assign({ d: d, stroke: isGradientStroke ? `url(#${strokeId})` : stroke, fill: isGradientFill ? `url(#${fillId})` : fill, vectorEffect: "non-scaling-stroke", strokeWidth: 1.5, className: className }, rest)))));
44
+ !isMaskStroke && (React.createElement("g", { filter: `url(#${boxShadowId})` },
45
+ React.createElement("path", Object.assign({ d: D, stroke: isGradientStroke ? `url(#${strokeId})` : stroke, fill: isGradientFill ? `url(#${fillId})` : fill, vectorEffect: "non-scaling-stroke", strokeWidth: 1.5, className: className }, rest))))));
30
46
  };