@363045841yyt/klinechart 0.7.5 → 0.7.7

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 (43) hide show
  1. package/README.md +4 -4
  2. package/dist/components/ChartSettingsDialog.vue.d.ts +14 -0
  3. package/dist/components/ChartSettingsDialog.vue.d.ts.map +1 -0
  4. package/dist/components/ColorPresetPanel.vue.d.ts +12 -0
  5. package/dist/components/ColorPresetPanel.vue.d.ts.map +1 -0
  6. package/dist/components/DrawingStyleToolbar.vue.d.ts +1 -15
  7. package/dist/components/DrawingStyleToolbar.vue.d.ts.map +1 -1
  8. package/dist/components/IndicatorParams.vue.d.ts.map +1 -1
  9. package/dist/components/IndicatorSelector.vue.d.ts.map +1 -1
  10. package/dist/components/KLineChart.vue.d.ts +7 -6
  11. package/dist/components/KLineChart.vue.d.ts.map +1 -1
  12. package/dist/components/KLineTooltip.vue.d.ts +9 -2
  13. package/dist/components/KLineTooltip.vue.d.ts.map +1 -1
  14. package/dist/components/LeftToolbar.vue.d.ts +4 -3
  15. package/dist/components/LeftToolbar.vue.d.ts.map +1 -1
  16. package/dist/components/MarkerTooltip.vue.d.ts +1 -12
  17. package/dist/components/MarkerTooltip.vue.d.ts.map +1 -1
  18. package/dist/components/index.d.ts +1 -0
  19. package/dist/components/index.d.ts.map +1 -1
  20. package/dist/composables/useFullscreenTeleportTarget.d.ts.map +1 -1
  21. package/dist/index.cjs +2 -2
  22. package/dist/index.css +1 -0
  23. package/dist/index.d.cts +5 -5
  24. package/dist/index.d.ts +5 -5
  25. package/dist/index.js +1009 -905
  26. package/dist/version.d.ts +1 -1
  27. package/dist/web-component.d.ts +18 -0
  28. package/dist/web-component.d.ts.map +1 -0
  29. package/package.json +10 -2
  30. package/src/__tests__/_mockController.ts +11 -1
  31. package/src/components/ChartSettingsDialog.vue +624 -0
  32. package/src/components/ColorPresetPanel.vue +289 -0
  33. package/src/components/DrawingStyleToolbar.vue +12 -25
  34. package/src/components/IndicatorParams.vue +58 -57
  35. package/src/components/IndicatorSelector.vue +91 -88
  36. package/src/components/KLineChart.vue +267 -442
  37. package/src/components/KLineTooltip.vue +19 -13
  38. package/src/components/LeftToolbar.vue +35 -393
  39. package/src/components/MarkerTooltip.vue +5 -16
  40. package/src/components/index.ts +1 -0
  41. package/src/composables/useFullscreenTeleportTarget.ts +0 -2
  42. package/src/web-component.ts +14 -0
  43. package/dist/klinechart.css +0 -2
@@ -293,14 +293,12 @@ import IndicatorParams from './IndicatorParams.vue'
293
293
  import { useFullscreenTeleportTarget } from '../composables/useFullscreenTeleportTarget'
294
294
  import { coreSignalToVueRef } from '../index'
295
295
  import {
296
+ createIndicatorSelectorController,
297
+ type IndicatorDefinition,
296
298
  allIndicators,
297
299
  findIndicator,
298
300
  isSubIndicatorId,
299
- } from '@363045841yyt/klinechart-core/engine/renderers/Indicator/indicatorData'
300
- import type { Indicator } from '@363045841yyt/klinechart-core/engine/renderers/Indicator/indicatorData'
301
- import {
302
- createIndicatorSelectorController,
303
- type IndicatorDefinition,
301
+ type Indicator,
304
302
  } from '@363045841yyt/klinechart-core/controllers'
305
303
 
306
304
  const props = defineProps<{
@@ -562,7 +560,7 @@ onUnmounted(() => {
562
560
  width: 1px;
563
561
  height: 20px;
564
562
  align-self: center;
565
- background: #d9d9d9;
563
+ background: var(--klc-color-axis-line);
566
564
  }
567
565
 
568
566
  .indicator-item {
@@ -583,8 +581,7 @@ onUnmounted(() => {
583
581
  }
584
582
 
585
583
  .indicator-item.drag-over .indicator-btn {
586
- border-color: #1a1a1a;
587
- box-shadow: 0 0 0 2px rgba(26, 26, 26, 0.12);
584
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 12%, transparent);
588
585
  }
589
586
 
590
587
  .indicator-btn-wrapper {
@@ -595,10 +592,10 @@ onUnmounted(() => {
595
592
  position: relative;
596
593
  flex-shrink: 0;
597
594
  padding: 6px 16px;
598
- border: 1px solid #e0e0e0;
595
+ border: none;
599
596
  border-radius: 16px;
600
- background: #ffffff;
601
- color: #666;
597
+ background: var(--klc-color-tag-bg-white);
598
+ color: var(--klc-color-axis-text);
602
599
  font-size: 13px;
603
600
  font-weight: 500;
604
601
  cursor: pointer;
@@ -612,20 +609,17 @@ onUnmounted(() => {
612
609
  }
613
610
 
614
611
  .indicator-btn:hover:not(.hovering) {
615
- background: #f8f8f8;
616
- border-color: #ccc;
617
- color: #333;
612
+ background: var(--klc-color-tag-bg-hover);
613
+ color: var(--klc-color-foreground);
618
614
  }
619
615
 
620
616
  .indicator-btn.active {
621
- background: #f8f8f8;
622
- border-color: #1a1a1a;
623
- color: #1a1a1a;
617
+ background: var(--klc-color-tag-bg-hover);
618
+ color: var(--klc-color-foreground);
624
619
  }
625
620
 
626
621
  .indicator-btn.active:hover:not(.hovering) {
627
- background: #f0f0f0;
628
- border-color: #333;
622
+ background: var(--klc-color-tag-bg-hover);
629
623
  }
630
624
 
631
625
  .btn-content {
@@ -649,7 +643,7 @@ onUnmounted(() => {
649
643
  align-items: center;
650
644
  justify-content: center;
651
645
  gap: 4px;
652
- background: rgba(255, 255, 255, 0.85);
646
+ background: color-mix(in srgb, var(--klc-color-background) 85%, transparent);
653
647
  backdrop-filter: blur(4px);
654
648
  border-radius: 16px;
655
649
  z-index: 2;
@@ -662,7 +656,7 @@ onUnmounted(() => {
662
656
  border: none;
663
657
  border-radius: 50%;
664
658
  background: transparent;
665
- color: #666;
659
+ color: var(--klc-color-axis-text);
666
660
  cursor: pointer;
667
661
  display: flex;
668
662
  align-items: center;
@@ -671,12 +665,12 @@ onUnmounted(() => {
671
665
  }
672
666
 
673
667
  .action-btn:hover {
674
- background: rgba(0, 0, 0, 0.06);
675
- color: #333;
668
+ background: var(--klc-color-tag-bg-hover);
669
+ color: var(--klc-color-foreground);
676
670
  }
677
671
 
678
672
  .settings-btn:hover {
679
- color: #1a1a1a;
673
+ color: var(--klc-color-foreground);
680
674
  }
681
675
 
682
676
  .remove-btn:hover {
@@ -686,7 +680,7 @@ onUnmounted(() => {
686
680
  .divider {
687
681
  width: 1px;
688
682
  height: 14px;
689
- background: #e0e0e0;
683
+ background: var(--klc-color-border-button);
690
684
  }
691
685
 
692
686
  /* 添加按钮 */
@@ -695,10 +689,10 @@ onUnmounted(() => {
695
689
  width: 32px;
696
690
  height: 32px;
697
691
  padding: 0;
698
- border: 1px dashed #d9d9d9;
692
+ border: none;
699
693
  border-radius: 50%;
700
694
  background: transparent;
701
- color: #999;
695
+ color: var(--klc-color-axis-text);
702
696
  cursor: pointer;
703
697
  display: flex;
704
698
  align-items: center;
@@ -707,9 +701,8 @@ onUnmounted(() => {
707
701
  }
708
702
 
709
703
  .add-btn:hover {
710
- border-color: #1a1a1a;
711
- color: #1a1a1a;
712
- background: rgba(26, 26, 26, 0.04);
704
+ color: var(--klc-color-foreground);
705
+ background: var(--klc-color-tag-bg-hover);
713
706
  }
714
707
 
715
708
  /* ─────────────────────────────────────────────────────────────────
@@ -730,8 +723,8 @@ onUnmounted(() => {
730
723
 
731
724
  /* 弹窗容器 */
732
725
  .selector-modal {
733
- background: #ffffff;
734
- border: 1px solid #e0e0e0;
726
+ background: var(--klc-color-tag-bg-white);
727
+ border: 1px solid var(--klc-color-axis-line);
735
728
  border-radius: 12px;
736
729
  box-shadow: 0 8px 40px rgba(0, 0, 0, 0.15);
737
730
  width: 90vw;
@@ -748,8 +741,8 @@ onUnmounted(() => {
748
741
  justify-content: space-between;
749
742
  align-items: center;
750
743
  padding: 16px 20px;
751
- background: #f8f8f8;
752
- border-bottom: 1px solid #e8e8e8;
744
+ background: var(--klc-color-background);
745
+ border-bottom: 1px solid var(--klc-color-border-chart);
753
746
  flex-shrink: 0;
754
747
  }
755
748
 
@@ -762,18 +755,18 @@ onUnmounted(() => {
762
755
  .title-text {
763
756
  font-size: 14px;
764
757
  font-weight: 600;
765
- color: #1a1a1a;
758
+ color: var(--klc-color-foreground);
766
759
  letter-spacing: 0.2px;
767
760
  }
768
761
 
769
762
  .title-sub {
770
763
  font-size: 11px;
771
- color: #999;
764
+ color: var(--klc-color-axis-text);
772
765
  }
773
766
 
774
767
  .modal-close {
775
- background: #fff;
776
- border: 1px solid #e0e0e0;
768
+ background: var(--klc-color-tag-bg-white);
769
+ border: 1px solid var(--klc-color-border-button);
777
770
  border-radius: 6px;
778
771
  width: 28px;
779
772
  height: 28px;
@@ -781,15 +774,15 @@ onUnmounted(() => {
781
774
  align-items: center;
782
775
  justify-content: center;
783
776
  cursor: pointer;
784
- color: #888;
777
+ color: var(--klc-color-axis-text);
785
778
  transition: all 0.15s;
786
779
  padding: 0;
787
780
  }
788
781
 
789
782
  .modal-close:hover {
790
- background: #f0f0f0;
791
- color: #333;
792
- border-color: #ccc;
783
+ background: var(--klc-color-tag-bg-hover);
784
+ color: var(--klc-color-foreground);
785
+ border-color: var(--klc-color-axis-line);
793
786
  }
794
787
 
795
788
  .modal-close svg {
@@ -804,8 +797,8 @@ onUnmounted(() => {
804
797
  }
805
798
 
806
799
  .view-toggle-btn {
807
- background: #fff;
808
- border: 1px solid #e0e0e0;
800
+ background: var(--klc-color-tag-bg-white);
801
+ border: 1px solid var(--klc-color-border-button);
809
802
  border-radius: 6px;
810
803
  width: 28px;
811
804
  height: 28px;
@@ -813,21 +806,21 @@ onUnmounted(() => {
813
806
  align-items: center;
814
807
  justify-content: center;
815
808
  cursor: pointer;
816
- color: #888;
809
+ color: var(--klc-color-axis-text);
817
810
  transition: all 0.15s;
818
811
  padding: 0;
819
812
  }
820
813
 
821
814
  .view-toggle-btn:hover {
822
- background: #f0f0f0;
823
- color: #333;
824
- border-color: #ccc;
815
+ background: var(--klc-color-tag-bg-hover);
816
+ color: var(--klc-color-foreground);
817
+ border-color: var(--klc-color-axis-line);
825
818
  }
826
819
 
827
820
  .view-toggle-btn.active {
828
- background: #1a1a1a;
829
- border-color: #1a1a1a;
830
- color: #fff;
821
+ background: var(--klc-color-tag-bg-white);
822
+ border-color: var(--klc-color-border-button);
823
+ color: var(--klc-color-foreground);
831
824
  }
832
825
 
833
826
  /* 弹窗主体 */
@@ -840,26 +833,36 @@ onUnmounted(() => {
840
833
  gap: 20px;
841
834
  }
842
835
 
836
+ .modal-body::-webkit-scrollbar {
837
+ width: 8px;
838
+ }
839
+
840
+ .modal-body::-webkit-scrollbar-thumb {
841
+ background: var(--klc-color-axis-line);
842
+ border: 2px solid var(--klc-color-tag-bg-white);
843
+ border-radius: 999px;
844
+ }
845
+
843
846
  /* 搜索框 */
844
847
  .search-box {
845
848
  display: flex;
846
849
  align-items: center;
847
850
  gap: 10px;
848
851
  padding: 10px 14px;
849
- border: 1px solid #e0e0e0;
852
+ border: 1px solid var(--klc-color-border-button);
850
853
  border-radius: 8px;
851
854
  transition: all 0.2s ease;
852
855
  }
853
856
 
854
857
  .search-box:focus-within {
855
- background: #ffffff;
856
- border-color: #1a1a1a;
857
- box-shadow: 0 0 0 2px rgba(26, 26, 26, 0.08);
858
+ background: var(--klc-color-tag-bg-white);
859
+ border-color: var(--klc-color-foreground);
860
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--klc-color-foreground) 8%, transparent);
858
861
  }
859
862
 
860
863
  .search-icon {
861
864
  flex-shrink: 0;
862
- color: #999;
865
+ color: var(--klc-color-axis-text);
863
866
  }
864
867
 
865
868
  .search-input {
@@ -867,12 +870,12 @@ onUnmounted(() => {
867
870
  border: none;
868
871
  background: transparent;
869
872
  font-size: 13px;
870
- color: #333;
873
+ color: var(--klc-color-foreground);
871
874
  outline: none;
872
875
  }
873
876
 
874
877
  .search-input::placeholder {
875
- color: #aaa;
878
+ color: var(--klc-color-axis-text);
876
879
  }
877
880
 
878
881
  /* 无结果提示 */
@@ -882,7 +885,7 @@ onUnmounted(() => {
882
885
  align-items: center;
883
886
  justify-content: center;
884
887
  padding: 48px 20px;
885
- color: #ccc;
888
+ color: var(--klc-color-axis-text);
886
889
  gap: 12px;
887
890
  }
888
891
 
@@ -893,13 +896,13 @@ onUnmounted(() => {
893
896
  .no-results p {
894
897
  margin: 0;
895
898
  font-size: 14px;
896
- color: #999;
899
+ color: var(--klc-color-axis-text);
897
900
  font-weight: 500;
898
901
  }
899
902
 
900
903
  .no-results-hint {
901
904
  font-size: 12px;
902
- color: #bbb;
905
+ color: var(--klc-color-axis-text);
903
906
  }
904
907
 
905
908
  /* 指标区域 */
@@ -918,13 +921,13 @@ onUnmounted(() => {
918
921
  .section-title {
919
922
  font-size: 13px;
920
923
  font-weight: 600;
921
- color: #1a1a1a;
924
+ color: var(--klc-color-foreground);
922
925
  }
923
926
 
924
927
  .section-count {
925
928
  font-size: 11px;
926
- color: #999;
927
- background: #f0f0f0;
929
+ color: var(--klc-color-axis-text);
930
+ background: var(--klc-color-grid-minor);
928
931
  padding: 2px 8px;
929
932
  border-radius: 10px;
930
933
  }
@@ -961,8 +964,8 @@ onUnmounted(() => {
961
964
  transform: translateX(-50%);
962
965
  padding: 4px 10px;
963
966
  border-radius: 6px;
964
- background: #333;
965
- color: #fff;
967
+ background: var(--klc-color-foreground);
968
+ color: var(--klc-color-background);
966
969
  font-size: 12px;
967
970
  white-space: nowrap;
968
971
  pointer-events: none;
@@ -986,24 +989,24 @@ onUnmounted(() => {
986
989
  flex-direction: column;
987
990
  gap: 4px;
988
991
  padding: 12px 14px;
989
- border: 1px solid #e8e8e8;
992
+ border: 1px solid var(--klc-color-border-chart);
990
993
  border-radius: 8px;
991
- background: #ffffff;
994
+ background: var(--klc-color-tag-bg-white);
992
995
  cursor: pointer;
993
996
  transition: all 0.15s;
994
997
  text-align: left;
995
998
  }
996
999
 
997
1000
  .indicator-card:hover:not(.disabled) {
998
- border-color: #1a1a1a;
999
- background: #fafafa;
1001
+ border-color: var(--klc-color-foreground);
1002
+ background: var(--klc-color-background);
1000
1003
  transform: translateY(-1px);
1001
1004
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
1002
1005
  }
1003
1006
 
1004
1007
  .indicator-card.active {
1005
- border-color: #1a1a1a;
1006
- background: #f8f8f8;
1008
+ border-color: var(--klc-color-foreground);
1009
+ background: var(--klc-color-tag-bg-hover);
1007
1010
  }
1008
1011
 
1009
1012
  .card-header {
@@ -1016,7 +1019,7 @@ onUnmounted(() => {
1016
1019
  .card-label {
1017
1020
  font-size: 13px;
1018
1021
  font-weight: 600;
1019
- color: #1a1a1a;
1022
+ color: var(--klc-color-foreground);
1020
1023
  }
1021
1024
 
1022
1025
  .card-header-actions {
@@ -1035,32 +1038,32 @@ onUnmounted(() => {
1035
1038
  border: none;
1036
1039
  border-radius: 4px;
1037
1040
  background: transparent;
1038
- color: #bbb;
1041
+ color: var(--klc-color-axis-text);
1039
1042
  cursor: pointer;
1040
1043
  transition: all 0.15s;
1041
1044
  }
1042
1045
 
1043
1046
  .card-settings-btn:hover {
1044
- background: #f0f0f0;
1045
- color: #555;
1047
+ background: var(--klc-color-tag-bg-hover);
1048
+ color: var(--klc-color-foreground);
1046
1049
  }
1047
1050
 
1048
1051
  .card-name {
1049
1052
  font-size: 11px;
1050
- color: #666;
1053
+ color: var(--klc-color-axis-text);
1051
1054
  line-height: 1.4;
1052
1055
  }
1053
1056
 
1054
1057
  .card-params {
1055
1058
  font-size: 10px;
1056
- color: #999;
1059
+ color: var(--klc-color-axis-text);
1057
1060
  margin-top: 2px;
1058
1061
  }
1059
1062
 
1060
1063
  /* 区域分隔线 */
1061
1064
  .section-divider {
1062
1065
  height: 1px;
1063
- background: linear-gradient(90deg, transparent, #e0e0e0, transparent);
1066
+ background: linear-gradient(90deg, transparent, var(--klc-color-border-button), transparent);
1064
1067
  margin: 4px 0;
1065
1068
  }
1066
1069
 
@@ -1070,18 +1073,18 @@ onUnmounted(() => {
1070
1073
  align-items: center;
1071
1074
  justify-content: space-between;
1072
1075
  padding: 12px 20px;
1073
- background: #f8f8f8;
1074
- border-top: 1px solid #e8e8e8;
1076
+ background: var(--klc-color-background);
1077
+ border-top: 1px solid var(--klc-color-border-chart);
1075
1078
  flex-shrink: 0;
1076
1079
  }
1077
1080
 
1078
1081
  .footer-info {
1079
1082
  font-size: 12px;
1080
- color: #666;
1083
+ color: var(--klc-color-axis-text);
1081
1084
  }
1082
1085
 
1083
1086
  .info-text {
1084
- color: #999;
1087
+ color: var(--klc-color-axis-text);
1085
1088
  }
1086
1089
 
1087
1090
  /* 按钮样式 */
@@ -1100,14 +1103,14 @@ onUnmounted(() => {
1100
1103
  }
1101
1104
 
1102
1105
  .btn-confirm {
1103
- background: #1a1a1a;
1104
- border-color: #1a1a1a;
1105
- color: #fff;
1106
+ background: var(--klc-color-foreground);
1107
+ border-color: var(--klc-color-foreground);
1108
+ color: var(--klc-color-background);
1106
1109
  }
1107
1110
 
1108
1111
  .btn-confirm:hover {
1109
- background: #333;
1110
- border-color: #333;
1112
+ background: var(--klc-color-foreground);
1113
+ border-color: var(--klc-color-foreground);
1111
1114
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);
1112
1115
  transform: translateY(-1px);
1113
1116
  }