xto-fronted 0.6.3 → 0.8.0

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 (33) hide show
  1. package/dist/{index-DydABgae.js → index-D73_-C9m.js} +13 -13
  2. package/dist/index-DBjV4kzh.js +249 -0
  3. package/dist/{index-IOKG7Gwo.js → index-DJ1oHe08.js} +973 -918
  4. package/dist/{index-BKO6Hzba.js → index-D_TGEwDg.js} +192 -140
  5. package/dist/{index-BZSZ3bx2.js → index-DauAWAHG.js} +28 -28
  6. package/dist/index.js +1 -1
  7. package/dist/style.css +1 -1
  8. package/package.json +9 -9
  9. package/src/App.vue +4 -4
  10. package/src/assets/styles/_dark.scss +176 -176
  11. package/src/assets/styles/_reset.scss +8 -8
  12. package/src/assets/styles/_root.scss +131 -125
  13. package/src/assets/styles/_variables.scss +17 -17
  14. package/src/assets/styles/index.scss +39 -39
  15. package/src/components/Layout/Footer.vue +1 -1
  16. package/src/components/Layout/Header.vue +59 -60
  17. package/src/components/Layout/MixTopMenu.vue +42 -43
  18. package/src/components/Layout/Sidebar.vue +8 -8
  19. package/src/components/Layout/SidebarMenuItem.vue +2 -2
  20. package/src/components/Layout/Tabs.vue +6 -6
  21. package/src/components/Layout/TopMenu.vue +42 -43
  22. package/src/components/Layout/index.vue +4 -4
  23. package/src/stores/app.ts +26 -2
  24. package/src/style.scss +2 -2
  25. package/src/views/dashboard/index.vue +125 -104
  26. package/src/views/error/403.vue +13 -13
  27. package/src/views/error/404.vue +14 -14
  28. package/src/views/login/index.vue +21 -54
  29. package/src/views/system/menu/index.vue +30 -30
  30. package/src/views/system/role/index.vue +20 -20
  31. package/src/views/system/user/index.vue +23 -23
  32. package/vite.config.ts +4 -1
  33. package/dist/index-BXHwCe22.js +0 -189
@@ -105,9 +105,9 @@ watch(displayMenuList, (newList, oldList) => {
105
105
  }, { immediate: false })
106
106
 
107
107
  // 菜单主题相关(浅色模式走 CSS 变量,深色模式保留深底硬编码以配合暗色覆盖)
108
- const menuBgColor = computed(() => appStore.isDark ? '#111A2C' : '#fff')
109
- const menuTextColor = computed(() => appStore.isDark ? '#CBD5E1' : '#334155')
110
- const menuActiveTextColor = computed(() => appStore.isDark ? '#4C8DFF' : '#1D4ED8')
108
+ const menuBgColor = computed(() => appStore.isDark ? '#161B21' : '#fff')
109
+ const menuTextColor = computed(() => appStore.isDark ? '#D9DCE1' : '#4E5566')
110
+ const menuActiveTextColor = computed(() => appStore.isDark ? '#818CF8' : '#4F46E5')
111
111
 
112
112
  // 菜单选择
113
113
  const handleMenuSelect = (index: string) => {
@@ -168,7 +168,7 @@ const handleLogout = () => {
168
168
  display: flex;
169
169
  flex-direction: column;
170
170
  background-color: var(--xto-bg-color, #FFFFFF);
171
- border-right: 1px solid var(--xto-border-color-light, #E2E8F0);
171
+ border-right: 1px solid var(--xto-border-color-light, #E5E6EB);
172
172
 
173
173
  &--collapsed {
174
174
  .sidebar__logo {
@@ -183,7 +183,7 @@ const handleLogout = () => {
183
183
  align-items: center;
184
184
  padding: 0 20px;
185
185
  gap: 10px;
186
- border-bottom: 1px solid var(--xto-border-color-light, #E2E8F0);
186
+ border-bottom: 1px solid var(--xto-border-color-light, #E5E6EB);
187
187
  }
188
188
 
189
189
  &__logo-img {
@@ -194,7 +194,7 @@ const handleLogout = () => {
194
194
  &__logo-text {
195
195
  font-size: 16px;
196
196
  font-weight: 600;
197
- color: var(--xto-color-primary, #1D4ED8);
197
+ color: var(--xto-color-primary, #4F46E5);
198
198
  }
199
199
 
200
200
  &__menu {
@@ -220,7 +220,7 @@ const handleLogout = () => {
220
220
 
221
221
  &__user {
222
222
  padding: 10px;
223
- border-top: 1px solid var(--xto-border-color-light, #E2E8F0);
223
+ border-top: 1px solid var(--xto-border-color-light, #E5E6EB);
224
224
  display: flex;
225
225
  align-items: center;
226
226
  justify-content: space-between;
@@ -239,7 +239,7 @@ const handleLogout = () => {
239
239
 
240
240
  &__user-role {
241
241
  font-size: 12px;
242
- color: var(--xto-color-text-secondary, #64748B);
242
+ color: var(--xto-color-text-secondary, #86909C);
243
243
  }
244
244
  }
245
245
  </style>
@@ -156,8 +156,8 @@ const hasChildren = computed(() => {
156
156
  height: 16px;
157
157
  font-size: 12px;
158
158
  font-weight: 600;
159
- color: var(--xto-color-primary, #1D4ED8);
160
- background-color: var(--xto-color-primary-light-8, #DBEAFE);
159
+ color: var(--xto-color-primary, #4F46E5);
160
+ background-color: var(--xto-color-primary-light-8, #DCDAFC);
161
161
  border-radius: var(--xto-border-radius-small, 4px);
162
162
  }
163
163
  </style>
@@ -83,7 +83,7 @@ const handleClose = (path: string) => {
83
83
  height: 100%;
84
84
  padding: 0 16px;
85
85
  background-color: var(--xto-bg-color, #FFFFFF);
86
- border-bottom: 1px solid var(--xto-border-color-light, #E2E8F0);
86
+ border-bottom: 1px solid var(--xto-border-color-light, #E5E6EB);
87
87
  box-sizing: border-box;
88
88
 
89
89
  :deep(.t-tabs) {
@@ -106,17 +106,17 @@ const handleClose = (path: string) => {
106
106
  margin-right: 4px;
107
107
  border-radius: 0;
108
108
  padding: 0 16px;
109
- color: var(--xto-color-text-regular, #334155);
109
+ color: var(--xto-color-text-regular, #4E5566);
110
110
  position: relative;
111
111
  transition: color 0.2s;
112
112
 
113
113
  &:hover {
114
- color: var(--xto-color-primary, #1D4ED8);
114
+ color: var(--xto-color-primary, #4F46E5);
115
115
  }
116
116
 
117
117
  &.is-active {
118
118
  background-color: transparent;
119
- color: var(--xto-color-primary, #1D4ED8);
119
+ color: var(--xto-color-primary, #4F46E5);
120
120
  font-weight: 600;
121
121
 
122
122
  &::after {
@@ -127,7 +127,7 @@ const handleClose = (path: string) => {
127
127
  right: 12px;
128
128
  height: 2px;
129
129
  border-radius: 2px;
130
- background-color: var(--xto-color-primary, #1D4ED8);
130
+ background-color: var(--xto-color-primary, #4F46E5);
131
131
  }
132
132
  }
133
133
  }
@@ -150,7 +150,7 @@ const handleClose = (path: string) => {
150
150
 
151
151
  &:hover {
152
152
  background-color: var(--xto-color-danger-light, #FEE2E2);
153
- color: var(--xto-color-danger, #EF4444);
153
+ color: var(--xto-color-danger, #F53F3F);
154
154
  }
155
155
  }
156
156
  </style>
@@ -233,11 +233,10 @@ const handleLayoutChange = (mode: LayoutMode) => {
233
233
  // 主题色选项
234
234
  const colorOptions = [
235
235
  { value: '#409eff', label: '默认蓝' },
236
- { value: '#1890ff', label: '科技蓝' },
237
- { value: '#52c41a', label: '极光绿' },
238
- { value: '#faad14', label: '日落橙' },
239
- { value: '#f5222d', label: '薄暮红' },
240
- { value: '#722ed1', label: '酱紫' }
236
+ { value: '#0F6FDE', label: '企业蓝' },
237
+ { value: '#00A870', label: '翡翠绿' },
238
+ { value: '#D46B08', label: '琥珀橙' },
239
+ { value: '#1F2329', label: '石墨黑' }
241
240
  ]
242
241
 
243
242
  // 设置主题色
@@ -440,7 +439,7 @@ onUnmounted(() => {
440
439
  <span>{{ userStore.userName?.charAt(0) || 'U' }}</span>
441
440
  </div>
442
441
  <span class="top-menu__user-name">{{ userStore.userName }}</span>
443
- <span class="top-menu__user-arrow" :class="{ 'is-active': dropdownVisible }">▼</span>
442
+ <span class="top-menu__user-arrow" :class="{ 'is-active': dropdownVisible }"><svg viewBox="0 0 12 12" width="10" height="10" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 4.5 6 8l3.5-3.5"/></svg></span>
444
443
  </div>
445
444
 
446
445
  <!-- 下拉菜单 -->
@@ -677,7 +676,7 @@ onUnmounted(() => {
677
676
  font-size: 12px;
678
677
  font-weight: 600;
679
678
  color: var(--xto-color-primary, #4F46E5);
680
- background-color: var(--xto-color-primary-light-8, #C7D2FE);
679
+ background-color: var(--xto-color-primary-light-8, #CAC7F9);
681
680
  border-radius: var(--xto-border-radius-small, 4px);
682
681
  }
683
682
 
@@ -692,28 +691,28 @@ onUnmounted(() => {
692
691
  position: relative;
693
692
  display: flex;
694
693
  align-items: center;
695
- background-color: var(--xto-fill-color-light, #F5F7FA);
694
+ background-color: var(--xto-fill-color-light, #F7F8FA);
696
695
  border-radius: var(--xto-border-radius-base, 6px);
697
696
  padding: 0 12px;
698
697
  height: 32px;
699
698
  width: 200px;
700
699
 
701
700
  &-icon {
702
- color: var(--xto-color-text-secondary, #6B7280);
701
+ color: var(--xto-color-text-secondary, #86909C);
703
702
  }
704
703
 
705
704
  &-input {
706
705
  flex: 1;
707
706
  height: 100%;
708
707
  font-size: 14px;
709
- color: var(--xto-color-text-primary, #1F2937);
708
+ color: var(--xto-color-text-primary, #1F2329);
710
709
  background: transparent;
711
710
  border: none;
712
711
  outline: none;
713
712
  padding-left: 8px;
714
713
 
715
714
  &::placeholder {
716
- color: var(--xto-color-text-placeholder, #9CA3AF);
715
+ color: var(--xto-color-text-placeholder, #A9AEB8);
717
716
  }
718
717
  }
719
718
 
@@ -744,17 +743,17 @@ onUnmounted(() => {
744
743
  transition: background-color 0.2s;
745
744
 
746
745
  &:hover {
747
- background-color: var(--xto-fill-color, #EDF2F7);
746
+ background-color: var(--xto-fill-color, #EDEEF1);
748
747
  }
749
748
 
750
749
  &-title {
751
750
  font-size: 14px;
752
- color: var(--xto-color-text-primary, #1F2937);
751
+ color: var(--xto-color-text-primary, #1F2329);
753
752
  }
754
753
 
755
754
  &-parent {
756
755
  font-size: 12px;
757
- color: var(--xto-color-text-secondary, #6B7280);
756
+ color: var(--xto-color-text-secondary, #86909C);
758
757
  margin-left: auto;
759
758
  }
760
759
  }
@@ -777,14 +776,14 @@ onUnmounted(() => {
777
776
  font-size: 12px;
778
777
  font-weight: 600;
779
778
  color: var(--xto-color-primary, #4F46E5);
780
- background-color: var(--xto-color-primary-light-8, #C7D2FE);
779
+ background-color: var(--xto-color-primary-light-8, #CAC7F9);
781
780
  border-radius: var(--xto-border-radius-small, 4px);
782
781
  }
783
782
 
784
783
  &-empty {
785
784
  padding: 16px 12px;
786
785
  text-align: center;
787
- color: var(--xto-color-text-secondary, #6B7280);
786
+ color: var(--xto-color-text-secondary, #86909C);
788
787
  font-size: 14px;
789
788
  }
790
789
  }
@@ -797,11 +796,11 @@ onUnmounted(() => {
797
796
  justify-content: center;
798
797
  cursor: pointer;
799
798
  border-radius: var(--xto-border-radius-base, 6px);
800
- color: var(--xto-color-text-regular, #4B5563);
799
+ color: var(--xto-color-text-regular, #4E5566);
801
800
  transition: all 0.2s;
802
801
 
803
802
  &:hover {
804
- background-color: var(--xto-fill-color, #EDF2F7);
803
+ background-color: var(--xto-fill-color, #EDEEF1);
805
804
  color: var(--xto-color-primary, #4F46E5);
806
805
  }
807
806
  }
@@ -821,13 +820,13 @@ onUnmounted(() => {
821
820
  transition: background-color 0.2s;
822
821
 
823
822
  &:hover {
824
- background-color: var(--xto-fill-color, #EDF2F7);
823
+ background-color: var(--xto-fill-color, #EDEEF1);
825
824
  }
826
825
  }
827
826
 
828
827
  &-name {
829
828
  font-size: 14px;
830
- color: var(--xto-color-text-primary, #1F2937);
829
+ color: var(--xto-color-text-primary, #1F2329);
831
830
  max-width: 100px;
832
831
  overflow: hidden;
833
832
  text-overflow: ellipsis;
@@ -836,7 +835,7 @@ onUnmounted(() => {
836
835
 
837
836
  &-arrow {
838
837
  font-size: 10px;
839
- color: var(--xto-color-text-secondary, #6B7280);
838
+ color: var(--xto-color-text-secondary, #86909C);
840
839
  transition: transform 0.2s;
841
840
 
842
841
  &.is-active {
@@ -849,7 +848,7 @@ onUnmounted(() => {
849
848
  width: 32px;
850
849
  height: 32px;
851
850
  border-radius: 50%;
852
- background: linear-gradient(135deg, var(--xto-color-primary, #4F46E5), var(--xto-color-primary-light-3, #818CF8));
851
+ background: linear-gradient(135deg, var(--xto-color-primary, #4F46E5), var(--xto-color-primary-light-3, #847DEC));
853
852
  display: flex;
854
853
  align-items: center;
855
854
  justify-content: center;
@@ -881,7 +880,7 @@ onUnmounted(() => {
881
880
  width: 40px;
882
881
  height: 40px;
883
882
  border-radius: 50%;
884
- background: linear-gradient(135deg, var(--xto-color-primary, #4F46E5), var(--xto-color-primary-light-3, #818CF8));
883
+ background: linear-gradient(135deg, var(--xto-color-primary, #4F46E5), var(--xto-color-primary-light-3, #847DEC));
885
884
  display: flex;
886
885
  align-items: center;
887
886
  justify-content: center;
@@ -897,18 +896,18 @@ onUnmounted(() => {
897
896
  &-name {
898
897
  font-size: 14px;
899
898
  font-weight: 500;
900
- color: var(--xto-color-text-primary, #1F2937);
899
+ color: var(--xto-color-text-primary, #1F2329);
901
900
  }
902
901
 
903
902
  &-role {
904
903
  font-size: 12px;
905
- color: var(--xto-color-text-secondary, #6B7280);
904
+ color: var(--xto-color-text-secondary, #86909C);
906
905
  margin-top: 2px;
907
906
  }
908
907
 
909
908
  &-divider {
910
909
  height: 1px;
911
- background-color: var(--xto-border-color-lighter, #EDF2F7);
910
+ background-color: var(--xto-border-color-lighter, #EDEEF1);
912
911
  }
913
912
 
914
913
  &-menu {
@@ -922,20 +921,20 @@ onUnmounted(() => {
922
921
  padding: 10px 16px;
923
922
  cursor: pointer;
924
923
  font-size: 14px;
925
- color: var(--xto-color-text-regular, #4B5563);
924
+ color: var(--xto-color-text-regular, #4E5566);
926
925
  transition: all 0.2s;
927
926
 
928
927
  &:hover {
929
- background-color: var(--xto-fill-color, #EDF2F7);
930
- color: var(--xto-color-text-primary, #1F2937);
928
+ background-color: var(--xto-fill-color, #EDEEF1);
929
+ color: var(--xto-color-text-primary, #1F2329);
931
930
  }
932
931
 
933
932
  &--danger {
934
- color: var(--xto-color-danger, #EF4444);
933
+ color: var(--xto-color-danger, #F53F3F);
935
934
 
936
935
  &:hover {
937
936
  background-color: var(--xto-color-danger-light, #FEE2E2);
938
- color: var(--xto-color-danger, #EF4444);
937
+ color: var(--xto-color-danger, #F53F3F);
939
938
  }
940
939
  }
941
940
  }
@@ -951,7 +950,7 @@ onUnmounted(() => {
951
950
  .settings-title {
952
951
  font-size: 14px;
953
952
  font-weight: 500;
954
- color: var(--xto-color-text-primary, #1F2937);
953
+ color: var(--xto-color-text-primary, #1F2329);
955
954
  margin-bottom: 12px;
956
955
  }
957
956
 
@@ -967,13 +966,13 @@ onUnmounted(() => {
967
966
  align-items: center;
968
967
  gap: 8px;
969
968
  padding: 12px;
970
- border: 1px solid var(--xto-border-color, #D1D5DB);
969
+ border: 1px solid var(--xto-border-color, #D9DCE1);
971
970
  border-radius: var(--xto-border-radius-base, 6px);
972
971
  cursor: pointer;
973
972
  transition: all 0.2s;
974
973
 
975
974
  &:hover {
976
- border-color: var(--xto-color-primary-light-5, #A5B4FC);
975
+ border-color: var(--xto-color-primary-light-5, #B9B5F5);
977
976
  }
978
977
 
979
978
  &.is-active {
@@ -984,14 +983,14 @@ onUnmounted(() => {
984
983
  &__preview {
985
984
  width: 48px;
986
985
  height: 36px;
987
- border: 1px solid var(--xto-border-color-light, #E5E7EB);
986
+ border: 1px solid var(--xto-border-color-light, #E5E6EB);
988
987
  border-radius: 2px;
989
988
  overflow: hidden;
990
989
  }
991
990
 
992
991
  &__label {
993
992
  font-size: 12px;
994
- color: var(--xto-color-text-regular, #4B5563);
993
+ color: var(--xto-color-text-regular, #4E5566);
995
994
  }
996
995
  }
997
996
 
@@ -1013,12 +1012,12 @@ onUnmounted(() => {
1013
1012
 
1014
1013
  .preview-header {
1015
1014
  height: 20%;
1016
- background-color: var(--xto-border-color-light, #E5E7EB);
1015
+ background-color: var(--xto-border-color-light, #E5E6EB);
1017
1016
  }
1018
1017
 
1019
1018
  .preview-content {
1020
1019
  flex: 1;
1021
- background-color: var(--xto-bg-color-page, #F5F7FA);
1020
+ background-color: var(--xto-bg-color-page, #F7F8FA);
1022
1021
  }
1023
1022
  }
1024
1023
  }
@@ -1035,7 +1034,7 @@ onUnmounted(() => {
1035
1034
 
1036
1035
  .preview-content-full {
1037
1036
  flex: 1;
1038
- background-color: var(--xto-bg-color-page, #F5F7FA);
1037
+ background-color: var(--xto-bg-color-page, #F7F8FA);
1039
1038
  }
1040
1039
  }
1041
1040
 
@@ -1061,12 +1060,12 @@ onUnmounted(() => {
1061
1060
 
1062
1061
  .preview-mix-aside {
1063
1062
  width: 25%;
1064
- background-color: var(--xto-color-primary-light-8, #C7D2FE);
1063
+ background-color: var(--xto-color-primary-light-8, #CAC7F9);
1065
1064
  }
1066
1065
 
1067
1066
  .preview-mix-content {
1068
1067
  flex: 1;
1069
- background-color: var(--xto-bg-color-page, #F5F7FA);
1068
+ background-color: var(--xto-bg-color-page, #F7F8FA);
1070
1069
  }
1071
1070
  }
1072
1071
  }
@@ -1108,7 +1107,7 @@ onUnmounted(() => {
1108
1107
 
1109
1108
  span {
1110
1109
  font-size: 14px;
1111
- color: var(--xto-color-text-regular, #4B5563);
1110
+ color: var(--xto-color-text-regular, #4E5566);
1112
1111
  }
1113
1112
  }
1114
1113
 
@@ -1123,7 +1122,7 @@ onUnmounted(() => {
1123
1122
  width: 100%;
1124
1123
  height: 100%;
1125
1124
  border-radius: 11px;
1126
- background-color: var(--xto-border-color, #D1D5DB);
1125
+ background-color: var(--xto-border-color, #D9DCE1);
1127
1126
  position: relative;
1128
1127
  transition: background-color 0.2s;
1129
1128
 
@@ -139,7 +139,7 @@ const showMixSidebar = computed(() => {
139
139
  width: 100%;
140
140
  height: 50px;
141
141
  background-color: var(--xto-bg-color, #FFFFFF);
142
- border-bottom: 1px solid var(--xto-border-color-lighter, #EDF2F7);
142
+ border-bottom: 1px solid var(--xto-border-color-lighter, #EDEEF1);
143
143
  flex-shrink: 0;
144
144
  }
145
145
 
@@ -163,7 +163,7 @@ const showMixSidebar = computed(() => {
163
163
  height: 50px;
164
164
  box-sizing: border-box;
165
165
  background-color: var(--xto-bg-color, #FFFFFF);
166
- border-bottom: 1px solid var(--xto-border-color-lighter, #EDF2F7);
166
+ border-bottom: 1px solid var(--xto-border-color-lighter, #EDEEF1);
167
167
  flex-shrink: 0;
168
168
  }
169
169
 
@@ -186,14 +186,14 @@ const showMixSidebar = computed(() => {
186
186
  height: 50px;
187
187
  box-sizing: border-box;
188
188
  background-color: var(--xto-bg-color, #FFFFFF);
189
- border-bottom: 1px solid var(--xto-border-color-lighter, #EDF2F7);
189
+ border-bottom: 1px solid var(--xto-border-color-lighter, #EDEEF1);
190
190
  flex-shrink: 0;
191
191
  }
192
192
 
193
193
  &__content {
194
194
  flex: 1;
195
195
  overflow: auto;
196
- background-color: var(--xto-bg-color-page, #F5F7FA);
196
+ background-color: var(--xto-bg-color-page, #F7F8FA);
197
197
  padding: 0;
198
198
  }
199
199
  }
package/src/stores/app.ts CHANGED
@@ -9,6 +9,14 @@ import { local } from '@/utils/storage'
9
9
  export type ThemeMode = 'light' | 'dark'
10
10
  export type LayoutMode = 'sidebar' | 'top' | 'mix'
11
11
 
12
+ /** hex → rgb 数组,非法输入返回 null */
13
+ function hexToRgb(hex: string): [number, number, number] | null {
14
+ const m = /^#?([0-9a-f]{6})$/i.exec(hex.trim())
15
+ if (!m) return null
16
+ const n = parseInt(m[1], 16)
17
+ return [(n >> 16) & 255, (n >> 8) & 255, n & 255]
18
+ }
19
+
12
20
  export const useAppStore = defineStore('app', () => {
13
21
  // 状态
14
22
  const appName = ref<string>(local.get<string>('appName') || 'XTO App')
@@ -102,10 +110,26 @@ export const useAppStore = defineStore('app', () => {
102
110
  local.set('showBreadcrumb', showBreadcrumb.value)
103
111
  }
104
112
 
105
- // 设置主题色
113
+ // 设置主题色(同时生成 light-1..9 / dark-1..3 色阶,保证浅色变体跟随)
106
114
  const setPrimaryColor = (color: string) => {
107
115
  primaryColor.value = color
108
- document.documentElement.style.setProperty('--xto-color-primary', color)
116
+ const root = document.documentElement
117
+ root.style.setProperty('--xto-color-primary', color)
118
+ const rgb = hexToRgb(color)
119
+ if (rgb) {
120
+ const mix = (t: number, toWhite: boolean) => {
121
+ const target = toWhite ? [255, 255, 255] : [0, 0, 0]
122
+ const c = rgb.map((v, i) => Math.round(v + (target[i] - v) * t))
123
+ return `#${c.map((v) => v.toString(16).padStart(2, '0')).join('')}`
124
+ }
125
+ for (let n = 1; n <= 9; n++) {
126
+ root.style.setProperty(`--xto-color-primary-light-${n}`, mix(n * 0.1, true))
127
+ }
128
+ root.style.setProperty('--xto-color-primary-dark-1', mix(0.12, false))
129
+ root.style.setProperty('--xto-color-primary-dark-2', mix(0.28, false))
130
+ root.style.setProperty('--xto-color-primary-dark-3', mix(0.45, false))
131
+ root.style.setProperty('--xto-color-ring', color)
132
+ }
109
133
  local.set('primaryColor', color)
110
134
  }
111
135
 
package/src/style.scss CHANGED
@@ -9,8 +9,8 @@
9
9
  /* 全局样式变量(与 @xto/core 主题系统对齐) */
10
10
  :root {
11
11
  --xto-bg-color: #FFFFFF;
12
- --xto-bg-color-page: #F5F7FA;
13
- --xto-border-color-lighter: #EDF2F7;
12
+ --xto-bg-color-page: #F7F8FA;
13
+ --xto-border-color-lighter: #EDEEF1;
14
14
  }
15
15
 
16
16
  /* ===== 交互光标与文本选中规范 =====