niuma-ui 2.0.0 → 2.0.2
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/CHANGELOG.md +31 -0
- package/README.en.md +1 -118
- package/README.md +58 -62
- package/README.zh-CN.md +128 -0
- package/dist/brand-icons.css +40 -0
- package/dist/components/_shared/src/reka.d.ts +1 -1
- package/dist/components/_shared/src/reka.js +2 -2
- package/dist/components/_shared/src/resolve-radius.js +1 -1
- package/dist/components/avatar/src/RsAvatar.impl.js +1 -1
- package/dist/components/button/src/RsButton.impl.js +1 -1
- package/dist/components/card/src/RsCard.impl.js +1 -1
- package/dist/components/cascader/src/RsCascader.css +20 -20
- package/dist/components/cascader/src/RsCascader.js +1 -1
- package/dist/components/code-block/src/RsCodeBlock.d.ts +1 -1
- package/dist/components/code-editor/src/code-editor-utils.js +2 -2
- package/dist/components/code-editor/src/code-mirror-lang.js +1 -1
- package/dist/components/config-provider/src/RsConfigProvider.css +2 -2
- package/dist/components/config-provider/src/RsConfigProvider.d.ts +8 -6
- package/dist/components/config-provider/src/RsConfigProvider.impl.js +64 -15
- package/dist/components/config-provider/src/RsConfigProvider.js +1 -1
- package/dist/components/context-menu/src/RsContextMenu.css +2 -2
- package/dist/components/context-menu/src/RsContextMenuItems.impl.js +1 -1
- package/dist/components/date-picker/src/RsDatePicker.css +17 -17
- package/dist/components/date-picker/src/RsDatePicker.impl.js +2 -2
- package/dist/components/date-picker/src/RsDatePicker.js +1 -1
- package/dist/components/dialog/src/RsConfirmDialog.impl.js +1 -1
- package/dist/components/dialog/src/RsDialog.css +1 -2
- package/dist/components/dialog/src/RsDialog.impl.js +1 -1
- package/dist/components/divider/src/RsDivider.css +13 -13
- package/dist/components/divider/src/RsDivider.js +1 -1
- package/dist/components/drawer/src/RsDrawer.css +2 -4
- package/dist/components/drawer/src/RsDrawer.impl.js +1 -1
- package/dist/components/dropdown/src/RsDropdown.css +2 -2
- package/dist/components/dropdown/src/RsDropdown.impl.js +1 -1
- package/dist/components/dropdown/src/RsDropdownItemView.impl.js +1 -1
- package/dist/components/form/src/form-rules.js +2 -2
- package/dist/components/icon/src/RsIcon.css +4 -4
- package/dist/components/icon/src/RsIcon.impl.js +6 -1
- package/dist/components/icon/src/RsIcon.js +1 -1
- package/dist/components/input/src/RsInput.css +86 -86
- package/dist/components/input/src/RsInput.js +1 -1
- package/dist/components/input/src/input-rules.js +3 -3
- package/dist/components/input-number/src/RsInputNumber.css +32 -32
- package/dist/components/input-number/src/RsInputNumber.js +1 -1
- package/dist/components/label/src/RsLabel.css +7 -7
- package/dist/components/label/src/RsLabel.js +1 -1
- package/dist/components/loading-bar/src/RsLoadingBar.css +4 -5
- package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
- package/dist/components/log/src/RsLog.css +39 -39
- package/dist/components/log/src/RsLog.d.ts +1 -1
- package/dist/components/log/src/RsLog.impl.js +1 -1
- package/dist/components/log/src/RsLog.js +1 -1
- package/dist/components/markdown/src/RsMarkdown.css +9 -7
- package/dist/components/menu/src/RsMenu.css +5 -5
- package/dist/components/menu/src/RsMenuItems.impl.js +1 -1
- package/dist/components/pagination/src/RsPagination.css +18 -18
- package/dist/components/pagination/src/RsPagination.impl.js +1 -1
- package/dist/components/pagination/src/RsPagination.js +1 -1
- package/dist/components/radio/src/RsRadio.impl.js +1 -1
- package/dist/components/radio/src/RsRadioItem.impl.js +1 -1
- package/dist/components/select/src/RsSelect.css +42 -42
- package/dist/components/select/src/RsSelect.impl.js +2 -2
- package/dist/components/select/src/RsSelect.js +1 -1
- package/dist/components/steps/src/RsSteps.css +18 -18
- package/dist/components/steps/src/RsSteps.js +1 -1
- package/dist/components/switch/src/RsSwitch.css +4 -6
- package/dist/components/switch/src/RsSwitch.impl.js +1 -1
- package/dist/components/table/style/rs-table.css +15 -15
- package/dist/components/tabs/src/RsTabs.impl.js +1 -1
- package/dist/components/terminal/src/RsTerminal.css +24 -24
- package/dist/components/terminal/src/RsTerminal.js +1 -1
- package/dist/components/textarea/src/RsTextarea.css +26 -26
- package/dist/components/textarea/src/RsTextarea.js +1 -1
- package/dist/components/time-picker/src/RsTimePicker.css +20 -20
- package/dist/components/time-picker/src/RsTimePicker.impl.js +2 -2
- package/dist/components/time-picker/src/RsTimePicker.js +1 -1
- package/dist/components/toaster/src/RsToaster.css +6 -6
- package/dist/components/toaster/src/RsToaster.impl.js +3 -6
- package/dist/components/tooltip/src/RsTooltip.impl.js +1 -1
- package/dist/components/tree/src/RsTree.css +72 -73
- package/dist/components/tree/src/RsTree.js +1 -1
- package/dist/components/tree-select/src/RsTreeSelect.css +11 -11
- package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
- package/dist/components/virtual-list/src/RsVirtualList.css +7 -8
- package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
- package/dist/composables/createRsDialog.js +6 -5
- package/dist/composables/useRsConfig.d.ts +11 -3
- package/dist/composables/useRsConfig.js +18 -6
- package/dist/composables/useRsI18n.d.ts +1 -1
- package/dist/composables/useRsI18n.js +5 -5
- package/dist/icons/brand.d.ts +6 -0
- package/dist/icons/brand.js +26 -0
- package/dist/icons/registry.d.ts +2 -0
- package/dist/icons/registry.js +2 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.js +19 -0
- package/dist/locale/apply.d.ts +8 -0
- package/dist/locale/apply.js +20 -0
- package/dist/locale/interpolate.d.ts +4 -3
- package/dist/locale/interpolate.js +108 -5
- package/dist/locale/messages.d.ts +2 -4
- package/dist/locale/messages.js +7 -9
- package/dist/locale/registry-public.d.ts +3 -0
- package/dist/locale/registry.d.ts +19 -0
- package/dist/locale/registry.js +50 -0
- package/dist/locale/resolve-host.d.ts +7 -0
- package/dist/locale/resolve-host.js +46 -0
- package/dist/locale/types.d.ts +13 -2
- package/dist/locale/types.js +6 -1
- package/dist/styles.css +245 -250
- package/dist/theme/apply.d.ts +15 -3
- package/dist/theme/apply.js +41 -4
- package/dist/theme/brand.example.css +5 -1
- package/dist/theme/presets.d.ts +6 -5
- package/dist/theme/presets.js +4 -3
- package/dist/theme/types.d.ts +15 -7
- package/dist/theme/types.js +4 -1
- package/dist/vite-plugins/niuma-ui-host.js +7 -0
- package/package.json +3 -1
package/dist/styles.css
CHANGED
|
@@ -642,6 +642,180 @@ to {
|
|
|
642
642
|
}
|
|
643
643
|
|
|
644
644
|
|
|
645
|
+
/*
|
|
646
|
+
* 内置图标:Lucide 走 --rs-icon-color;品牌 mark 走 --rs-icon-{name}-accent。
|
|
647
|
+
* 色值在 styles/index.css 的主题块里,这里只写图形规则。
|
|
648
|
+
*/
|
|
649
|
+
|
|
650
|
+
.rs-icon {
|
|
651
|
+
color: var(--rs-icon-color, currentColor);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
.lucide-api-icon .api-icon__label {
|
|
655
|
+
fill: currentColor;
|
|
656
|
+
stroke: none;
|
|
657
|
+
font-family: var(--rs-font-rounded);
|
|
658
|
+
font-size: 9.5px;
|
|
659
|
+
font-weight: 800;
|
|
660
|
+
letter-spacing: -0.04em;
|
|
661
|
+
text-anchor: middle;
|
|
662
|
+
-webkit-font-smoothing: antialiased;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
.lucide-ftp-icon .ftp-icon__folder {
|
|
666
|
+
fill: var(--rs-icon-ftp-accent, currentColor);
|
|
667
|
+
stroke: color-mix(in srgb, var(--rs-icon-ftp-accent, currentColor) 55%, #1a1a1a);
|
|
668
|
+
stroke-width: 1.1;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
.lucide-ftp-icon .ftp-icon__label {
|
|
672
|
+
fill: var(--rs-icon-ftp-on-accent, #ffffff);
|
|
673
|
+
stroke: none;
|
|
674
|
+
font-family: var(--rs-font-mono);
|
|
675
|
+
font-size: 6.2px;
|
|
676
|
+
font-weight: 900;
|
|
677
|
+
letter-spacing: -0.08em;
|
|
678
|
+
text-anchor: middle;
|
|
679
|
+
-webkit-font-smoothing: antialiased;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
.rs-context-menu__item[data-highlighted] .lucide-ftp-icon .ftp-icon__folder,
|
|
683
|
+
.rs-context-menu__item[data-state='open'] .lucide-ftp-icon .ftp-icon__folder {
|
|
684
|
+
fill: rgb(255 255 255 / 0.95);
|
|
685
|
+
stroke: rgb(255 255 255 / 0.55);
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.rs-context-menu__item[data-highlighted] .lucide-ftp-icon .ftp-icon__label,
|
|
689
|
+
.rs-context-menu__item[data-state='open'] .lucide-ftp-icon .ftp-icon__label {
|
|
690
|
+
fill: var(--rs-icon-ftp-accent);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.lucide-redis-icon .redis-icon__mark {
|
|
694
|
+
fill: var(--rs-icon-redis-accent, currentColor);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
.rs-context-menu__item[data-highlighted] .lucide-redis-icon .redis-icon__mark,
|
|
698
|
+
.rs-context-menu__item[data-state='open'] .lucide-redis-icon .redis-icon__mark {
|
|
699
|
+
fill: rgb(255 255 255 / 0.95);
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
.lucide-mongodb-icon .mongodb-icon__mark {
|
|
703
|
+
fill: var(--rs-icon-mongodb-accent, currentColor);
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
.rs-context-menu__item[data-highlighted] .lucide-mongodb-icon .mongodb-icon__mark,
|
|
707
|
+
.rs-context-menu__item[data-state='open'] .lucide-mongodb-icon .mongodb-icon__mark {
|
|
708
|
+
fill: rgb(255 255 255 / 0.95);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
.lucide-vastbase-icon .vastbase-icon__mark {
|
|
712
|
+
fill: var(--rs-icon-vastbase-accent, currentColor);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
.rs-context-menu__item[data-highlighted] .lucide-vastbase-icon .vastbase-icon__mark,
|
|
716
|
+
.rs-context-menu__item[data-state='open'] .lucide-vastbase-icon .vastbase-icon__mark {
|
|
717
|
+
fill: rgb(255 255 255 / 0.95);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
.lucide-mysql-icon .mysql-icon__mark {
|
|
721
|
+
fill: var(--rs-icon-mysql-accent, currentColor);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.rs-context-menu__item[data-highlighted] .lucide-mysql-icon .mysql-icon__mark,
|
|
725
|
+
.rs-context-menu__item[data-state='open'] .lucide-mysql-icon .mysql-icon__mark {
|
|
726
|
+
fill: rgb(255 255 255 / 0.95);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
.lucide-dameng-icon .dameng-icon__oval {
|
|
730
|
+
fill: var(--rs-icon-dameng-accent);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
.lucide-dameng-icon .dameng-icon__wave {
|
|
734
|
+
fill: var(--rs-icon-dameng-wave, currentColor);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
.rs-context-menu__item[data-highlighted] .lucide-dameng-icon .dameng-icon__oval,
|
|
738
|
+
.rs-context-menu__item[data-state='open'] .lucide-dameng-icon .dameng-icon__oval,
|
|
739
|
+
.rs-context-menu__item[data-highlighted] .lucide-dameng-icon .dameng-icon__wave,
|
|
740
|
+
.rs-context-menu__item[data-state='open'] .lucide-dameng-icon .dameng-icon__wave {
|
|
741
|
+
fill: rgb(255 255 255 / 0.95);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
.lucide-sqlite-icon .sqlite-icon__mark {
|
|
745
|
+
fill: var(--rs-icon-sqlite-accent, currentColor);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
.rs-context-menu__item[data-highlighted] .lucide-sqlite-icon .sqlite-icon__mark,
|
|
749
|
+
.rs-context-menu__item[data-state='open'] .lucide-sqlite-icon .sqlite-icon__mark {
|
|
750
|
+
fill: rgb(255 255 255 / 0.95);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
.lucide-oracle-icon .oracle-icon__mark {
|
|
754
|
+
fill: var(--rs-icon-oracle-accent, currentColor);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
.rs-context-menu__item[data-highlighted] .lucide-oracle-icon .oracle-icon__mark,
|
|
758
|
+
.rs-context-menu__item[data-state='open'] .lucide-oracle-icon .oracle-icon__mark {
|
|
759
|
+
fill: rgb(255 255 255 / 0.95);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
.lucide-clickhouse-icon .clickhouse-icon__mark {
|
|
763
|
+
fill: var(--rs-icon-clickhouse-accent, currentColor);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
.rs-context-menu__item[data-highlighted] .lucide-clickhouse-icon .clickhouse-icon__mark,
|
|
767
|
+
.rs-context-menu__item[data-state='open'] .lucide-clickhouse-icon .clickhouse-icon__mark {
|
|
768
|
+
fill: rgb(255 255 255 / 0.95);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
.lucide-kingbase-icon .kingbase-icon__mark {
|
|
772
|
+
fill: var(--rs-icon-kingbase-accent, currentColor);
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
.rs-context-menu__item[data-highlighted] .lucide-kingbase-icon .kingbase-icon__mark,
|
|
776
|
+
.rs-context-menu__item[data-state='open'] .lucide-kingbase-icon .kingbase-icon__mark {
|
|
777
|
+
fill: rgb(255 255 255 / 0.95);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
.lucide-sqlserver-icon .sqlserver-icon__mark {
|
|
781
|
+
fill: var(--rs-icon-sqlserver-accent, currentColor);
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
.rs-context-menu__item[data-highlighted] .lucide-sqlserver-icon .sqlserver-icon__mark,
|
|
785
|
+
.rs-context-menu__item[data-state='open'] .lucide-sqlserver-icon .sqlserver-icon__mark {
|
|
786
|
+
fill: rgb(255 255 255 / 0.95);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.lucide-postgres-icon .postgres-icon__mark {
|
|
790
|
+
fill: var(--rs-icon-postgres-accent, currentColor);
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.rs-context-menu__item[data-highlighted] .lucide-postgres-icon .postgres-icon__mark,
|
|
794
|
+
.rs-context-menu__item[data-state='open'] .lucide-postgres-icon .postgres-icon__mark {
|
|
795
|
+
fill: rgb(255 255 255 / 0.95);
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
@media (forced-colors: active) {
|
|
799
|
+
.lucide-ftp-icon .ftp-icon__folder,
|
|
800
|
+
.lucide-ftp-icon .ftp-icon__label,
|
|
801
|
+
.lucide-redis-icon .redis-icon__mark,
|
|
802
|
+
.lucide-mongodb-icon .mongodb-icon__mark,
|
|
803
|
+
.lucide-vastbase-icon .vastbase-icon__mark,
|
|
804
|
+
.lucide-mysql-icon .mysql-icon__mark,
|
|
805
|
+
.lucide-dameng-icon .dameng-icon__oval,
|
|
806
|
+
.lucide-dameng-icon .dameng-icon__wave,
|
|
807
|
+
.lucide-sqlite-icon .sqlite-icon__mark,
|
|
808
|
+
.lucide-oracle-icon .oracle-icon__mark,
|
|
809
|
+
.lucide-clickhouse-icon .clickhouse-icon__mark,
|
|
810
|
+
.lucide-kingbase-icon .kingbase-icon__mark,
|
|
811
|
+
.lucide-sqlserver-icon .sqlserver-icon__mark,
|
|
812
|
+
.lucide-postgres-icon .postgres-icon__mark,
|
|
813
|
+
.lucide-api-icon .api-icon__label {
|
|
814
|
+
fill: CanvasText;
|
|
815
|
+
stroke: CanvasText;
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
|
|
645
819
|
/*
|
|
646
820
|
* 盒模型由本包收口。html 定 border-box,其余 inherit(弹出层挂 body 也一致)。
|
|
647
821
|
*/
|
|
@@ -802,51 +976,15 @@ html {
|
|
|
802
976
|
--rs-label-font-weight: var(--rs-font-weight-medium);
|
|
803
977
|
--rs-label-line-height: var(--rs-line-height-normal);
|
|
804
978
|
|
|
805
|
-
/*
|
|
806
|
-
--rs-icon-
|
|
807
|
-
--rs-icon-ftp-on-accent: #ffffff;
|
|
808
|
-
|
|
809
|
-
/* Redis 品牌图标默认强调色(Redis 官方红) */
|
|
810
|
-
--rs-icon-redis-accent: #dc382d;
|
|
811
|
-
|
|
812
|
-
/* MongoDB 品牌图标默认强调色(MongoDB 官方绿) */
|
|
813
|
-
--rs-icon-mongodb-accent: #47a248;
|
|
814
|
-
|
|
815
|
-
/* Vastbase 品牌图标默认强调色(海量数据官网橙) */
|
|
816
|
-
--rs-icon-vastbase-accent: #ff6f1a;
|
|
817
|
-
|
|
818
|
-
/* MySQL 品牌图标默认强调色(MySQL 官方蓝) */
|
|
819
|
-
--rs-icon-mysql-accent: #4479a1;
|
|
820
|
-
|
|
821
|
-
/* Dameng 品牌图标默认色(官网 logo 取样:蓝 / 红) */
|
|
822
|
-
--rs-icon-dameng-accent: #0000d2;
|
|
823
|
-
--rs-icon-dameng-wave: #ec1b34;
|
|
824
|
-
|
|
825
|
-
/* SQLite 品牌图标默认强调色(SQLite 官方蓝) */
|
|
826
|
-
--rs-icon-sqlite-accent: #003b57;
|
|
827
|
-
|
|
828
|
-
/* Oracle 品牌图标默认强调色(Oracle 官方红) */
|
|
829
|
-
--rs-icon-oracle-accent: #f80000;
|
|
830
|
-
|
|
831
|
-
/* ClickHouse 品牌图标默认强调色(ClickHouse 官方黄) */
|
|
832
|
-
--rs-icon-clickhouse-accent: #ffcc01;
|
|
833
|
-
|
|
834
|
-
/* 人大金仓品牌图标默认强调色(官网政务红) */
|
|
835
|
-
--rs-icon-kingbase-accent: #c9151e;
|
|
836
|
-
|
|
837
|
-
/* SQL Server 品牌图标默认强调色(Simple Icons / 产品红) */
|
|
838
|
-
--rs-icon-sqlserver-accent: #cc2927;
|
|
839
|
-
|
|
840
|
-
/* PostgreSQL 品牌图标默认强调色(官方大象蓝) */
|
|
841
|
-
--rs-icon-postgres-accent: #336791;
|
|
979
|
+
/* Lucide / 线性图标。品牌 mark 色在可选 niuma-ui/brand-icons.css */
|
|
980
|
+
--rs-icon-color: currentColor;
|
|
842
981
|
|
|
843
982
|
/* macOS 风格原生滚动条(与 RsScrollbar 视觉一致) */
|
|
844
983
|
--rs-scrollbar-size: 13px;
|
|
845
984
|
--rs-scrollbar-padding: 2px;
|
|
846
985
|
}
|
|
847
986
|
|
|
848
|
-
/* ──
|
|
849
|
-
:root,
|
|
987
|
+
/* ── 公共暗色:仅 data-rs-theme=dark(system 由 JS 解析后再写该值)── */
|
|
850
988
|
[data-rs-theme='dark'] {
|
|
851
989
|
color-scheme: dark;
|
|
852
990
|
|
|
@@ -928,18 +1066,17 @@ html {
|
|
|
928
1066
|
--rs-btn-secondary-bg: var(--rs-surface-hover);
|
|
929
1067
|
--rs-btn-secondary-bg-hover: color-mix(in srgb, var(--rs-primary) 16%, var(--rs-surface-hover));
|
|
930
1068
|
--rs-btn-secondary-bg-active: color-mix(in srgb, var(--rs-primary) 24%, var(--rs-surface-hover));
|
|
931
|
-
--rs-text: #cccccc;
|
|
932
|
-
--rs-
|
|
933
|
-
--rs-
|
|
934
|
-
/* 文字语义 alias(Ant / Arco 四级 + link;底层仍可用 --rs-text / --rs-muted) */
|
|
935
|
-
--rs-text-primary: var(--rs-text);
|
|
936
|
-
--rs-text-secondary: var(--rs-muted);
|
|
937
|
-
--rs-text-tertiary: var(--rs-placeholder);
|
|
1069
|
+
--rs-text-primary: #cccccc;
|
|
1070
|
+
--rs-text-secondary: #9d9d9d;
|
|
1071
|
+
--rs-text-tertiary: #919191;
|
|
938
1072
|
--rs-text-disabled: #6e6e6e;
|
|
939
1073
|
--rs-text-inverse: #ffffff;
|
|
940
1074
|
--rs-text-link: var(--rs-primary);
|
|
941
1075
|
--rs-text-link-hover: var(--rs-primary-hover);
|
|
942
|
-
--rs-
|
|
1076
|
+
--rs-text: var(--rs-text-primary);
|
|
1077
|
+
--rs-muted: var(--rs-text-secondary);
|
|
1078
|
+
--rs-placeholder: var(--rs-text-tertiary);
|
|
1079
|
+
--rs-label-color: var(--rs-text-primary);
|
|
943
1080
|
--rs-danger: #ff453a;
|
|
944
1081
|
--rs-danger-container: #3b1210;
|
|
945
1082
|
--rs-on-danger-container: #ff8a84;
|
|
@@ -953,20 +1090,6 @@ html {
|
|
|
953
1090
|
--rs-info-container: #0a2540;
|
|
954
1091
|
--rs-on-info-container: #6cb4ff;
|
|
955
1092
|
|
|
956
|
-
--rs-icon-ftp-accent: #fb923c;
|
|
957
|
-
--rs-icon-ftp-on-accent: #ffffff;
|
|
958
|
-
--rs-icon-redis-accent: #ff6f61;
|
|
959
|
-
--rs-icon-mongodb-accent: #5cb85c;
|
|
960
|
-
--rs-icon-vastbase-accent: #ff8a3d;
|
|
961
|
-
--rs-icon-mysql-accent: #5a9fd4;
|
|
962
|
-
--rs-icon-sqlite-accent: #5aafd4;
|
|
963
|
-
--rs-icon-dameng-accent: #4d4dff;
|
|
964
|
-
--rs-icon-dameng-wave: #ff4d63;
|
|
965
|
-
--rs-icon-oracle-accent: #ff4d4d;
|
|
966
|
-
--rs-icon-clickhouse-accent: #ffe066;
|
|
967
|
-
--rs-icon-kingbase-accent: #ff4d57;
|
|
968
|
-
--rs-icon-sqlserver-accent: #ff5a57;
|
|
969
|
-
--rs-icon-postgres-accent: #6a9ec4;
|
|
970
1093
|
--rs-focus-border: var(--rs-primary);
|
|
971
1094
|
--rs-focus-ring: color-mix(in srgb, var(--rs-primary) 28%, transparent);
|
|
972
1095
|
--rs-focus-ring-width: 2px;
|
|
@@ -1108,7 +1231,8 @@ html {
|
|
|
1108
1231
|
--rs-shadow-lg: 0 12px 32px rgb(0 0 0 / 0.5), 0 0 0 0.5px rgb(255 255 255 / 0.1);
|
|
1109
1232
|
}
|
|
1110
1233
|
|
|
1111
|
-
/* ──
|
|
1234
|
+
/* ── 公共亮色:无属性 = light,避免盖住后面的 dark(:root 与属性选择器同权)── */
|
|
1235
|
+
:root:not([data-rs-theme]),
|
|
1112
1236
|
[data-rs-theme='light'] {
|
|
1113
1237
|
color-scheme: light;
|
|
1114
1238
|
|
|
@@ -1187,18 +1311,17 @@ html {
|
|
|
1187
1311
|
--rs-btn-secondary-bg: var(--rs-surface-hover);
|
|
1188
1312
|
--rs-btn-secondary-bg-hover: color-mix(in srgb, var(--rs-primary) 12%, var(--rs-surface-hover));
|
|
1189
1313
|
--rs-btn-secondary-bg-active: color-mix(in srgb, var(--rs-primary) 18%, var(--rs-surface-hover));
|
|
1190
|
-
--rs-text: #1d1d1f;
|
|
1191
|
-
--rs-
|
|
1192
|
-
--rs-
|
|
1193
|
-
/* 文字语义 alias(Ant / Arco 四级 + link;底层仍可用 --rs-text / --rs-muted) */
|
|
1194
|
-
--rs-text-primary: var(--rs-text);
|
|
1195
|
-
--rs-text-secondary: var(--rs-muted);
|
|
1196
|
-
--rs-text-tertiary: var(--rs-placeholder);
|
|
1314
|
+
--rs-text-primary: #1d1d1f;
|
|
1315
|
+
--rs-text-secondary: #6e6e73;
|
|
1316
|
+
--rs-text-tertiary: #909090;
|
|
1197
1317
|
--rs-text-disabled: #aeaeb2;
|
|
1198
1318
|
--rs-text-inverse: #ffffff;
|
|
1199
1319
|
--rs-text-link: var(--rs-primary);
|
|
1200
1320
|
--rs-text-link-hover: var(--rs-primary-hover);
|
|
1201
|
-
--rs-
|
|
1321
|
+
--rs-text: var(--rs-text-primary);
|
|
1322
|
+
--rs-muted: var(--rs-text-secondary);
|
|
1323
|
+
--rs-placeholder: var(--rs-text-tertiary);
|
|
1324
|
+
--rs-label-color: var(--rs-text-primary);
|
|
1202
1325
|
--rs-danger: #ff3b30;
|
|
1203
1326
|
--rs-danger-container: #ffe5e3;
|
|
1204
1327
|
--rs-on-danger-container: #c41e16;
|
|
@@ -1347,21 +1470,6 @@ html {
|
|
|
1347
1470
|
--rs-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.04), 0 0 0 0.5px rgb(0 0 0 / 0.04);
|
|
1348
1471
|
--rs-shadow: 0 4px 16px rgb(0 0 0 / 0.08), 0 0 0 0.5px rgb(0 0 0 / 0.06);
|
|
1349
1472
|
--rs-shadow-lg: 0 12px 32px rgb(0 0 0 / 0.12), 0 0 0 0.5px rgb(0 0 0 / 0.08);
|
|
1350
|
-
|
|
1351
|
-
--rs-icon-ftp-accent: #ea580c;
|
|
1352
|
-
--rs-icon-ftp-on-accent: #ffffff;
|
|
1353
|
-
--rs-icon-redis-accent: #dc382d;
|
|
1354
|
-
--rs-icon-mongodb-accent: #47a248;
|
|
1355
|
-
--rs-icon-vastbase-accent: #ff6f1a;
|
|
1356
|
-
--rs-icon-mysql-accent: #4479a1;
|
|
1357
|
-
--rs-icon-sqlite-accent: #003b57;
|
|
1358
|
-
--rs-icon-dameng-accent: #0000d2;
|
|
1359
|
-
--rs-icon-dameng-wave: #ec1b34;
|
|
1360
|
-
--rs-icon-oracle-accent: #f80000;
|
|
1361
|
-
--rs-icon-clickhouse-accent: #ffcc01;
|
|
1362
|
-
--rs-icon-kingbase-accent: #c9151e;
|
|
1363
|
-
--rs-icon-sqlserver-accent: #cc2927;
|
|
1364
|
-
--rs-icon-postgres-accent: #336791;
|
|
1365
1473
|
}
|
|
1366
1474
|
|
|
1367
1475
|
/**
|
|
@@ -1377,6 +1485,51 @@ html {
|
|
|
1377
1485
|
}
|
|
1378
1486
|
}
|
|
1379
1487
|
|
|
1488
|
+
/*
|
|
1489
|
+
* 高对比:把语义 token 映射到系统色。组件继续读 --rs-*,不必每组件写 forced-colors。
|
|
1490
|
+
*/
|
|
1491
|
+
@media (forced-colors: active) {
|
|
1492
|
+
:root:not([data-rs-theme]),
|
|
1493
|
+
[data-rs-theme='light'],
|
|
1494
|
+
[data-rs-theme='dark'] {
|
|
1495
|
+
--rs-bg: Canvas;
|
|
1496
|
+
--rs-surface: Canvas;
|
|
1497
|
+
--rs-surface-elevated: Canvas;
|
|
1498
|
+
--rs-surface-hover: Highlight;
|
|
1499
|
+
--rs-item-hover: Highlight;
|
|
1500
|
+
--rs-input-bg: Field;
|
|
1501
|
+
--rs-input-border: ButtonText;
|
|
1502
|
+
--rs-input-border-hover: Highlight;
|
|
1503
|
+
--rs-border: ButtonText;
|
|
1504
|
+
--rs-border-subtle: ButtonText;
|
|
1505
|
+
--rs-text-primary: CanvasText;
|
|
1506
|
+
--rs-text-secondary: GrayText;
|
|
1507
|
+
--rs-text-tertiary: GrayText;
|
|
1508
|
+
--rs-text-disabled: GrayText;
|
|
1509
|
+
--rs-text-inverse: Canvas;
|
|
1510
|
+
--rs-text-link: LinkText;
|
|
1511
|
+
--rs-text-link-hover: LinkText;
|
|
1512
|
+
--rs-text: CanvasText;
|
|
1513
|
+
--rs-muted: GrayText;
|
|
1514
|
+
--rs-placeholder: GrayText;
|
|
1515
|
+
--rs-label-color: CanvasText;
|
|
1516
|
+
--rs-primary: Highlight;
|
|
1517
|
+
--rs-primary-hover: Highlight;
|
|
1518
|
+
--rs-primary-foreground: HighlightText;
|
|
1519
|
+
--rs-primary-container: Canvas;
|
|
1520
|
+
--rs-on-primary-container: CanvasText;
|
|
1521
|
+
--rs-danger: Mark;
|
|
1522
|
+
--rs-success: CanvasText;
|
|
1523
|
+
--rs-warning: CanvasText;
|
|
1524
|
+
--rs-info: Highlight;
|
|
1525
|
+
--rs-focus-border: Highlight;
|
|
1526
|
+
--rs-focus-ring: Highlight;
|
|
1527
|
+
--rs-shadow-sm: none;
|
|
1528
|
+
--rs-shadow: none;
|
|
1529
|
+
--rs-shadow-lg: none;
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
|
|
1380
1533
|
/* 原生滚动条:WebKit + Firefox,颜色随 --rs-* 主题 token 变化 */
|
|
1381
1534
|
.rs-native-scrollbar {
|
|
1382
1535
|
scrollbar-width: thin;
|
|
@@ -1631,7 +1784,7 @@ code {
|
|
|
1631
1784
|
top: -0.55em;
|
|
1632
1785
|
margin-bottom: 0.125rem;
|
|
1633
1786
|
padding: 0 0.375rem;
|
|
1634
|
-
margin-
|
|
1787
|
+
margin-inline-start: var(--rs-space-sm);
|
|
1635
1788
|
width: fit-content;
|
|
1636
1789
|
max-width: calc(100% - var(--rs-space-sm) * 2);
|
|
1637
1790
|
background: var(--rs-surface-elevated);
|
|
@@ -1663,14 +1816,14 @@ code {
|
|
|
1663
1816
|
overflow: hidden;
|
|
1664
1817
|
text-overflow: ellipsis;
|
|
1665
1818
|
white-space: nowrap;
|
|
1666
|
-
text-align:
|
|
1819
|
+
text-align: start;
|
|
1667
1820
|
}
|
|
1668
1821
|
|
|
1669
1822
|
.rs-select__item-check {
|
|
1670
1823
|
display: inline-flex;
|
|
1671
1824
|
width: 0.875rem;
|
|
1672
1825
|
flex-shrink: 0;
|
|
1673
|
-
margin-
|
|
1826
|
+
margin-inline-start: auto;
|
|
1674
1827
|
color: var(--rs-primary);
|
|
1675
1828
|
}
|
|
1676
1829
|
|
|
@@ -1741,8 +1894,7 @@ code {
|
|
|
1741
1894
|
|
|
1742
1895
|
.rs-select__content--sm .rs-select__viewport,
|
|
1743
1896
|
.rs-select__content--ssm .rs-select__viewport {
|
|
1744
|
-
padding-
|
|
1745
|
-
padding-right: 0.25rem;
|
|
1897
|
+
padding-inline: 0.25rem;
|
|
1746
1898
|
padding-bottom: 0.25rem;
|
|
1747
1899
|
}
|
|
1748
1900
|
|
|
@@ -1794,7 +1946,7 @@ code {
|
|
|
1794
1946
|
}
|
|
1795
1947
|
|
|
1796
1948
|
.rs-auto-complete--clearable .rs-auto-complete__input {
|
|
1797
|
-
padding-
|
|
1949
|
+
padding-inline-end: calc(var(--rs-space-md) + 1.25rem);
|
|
1798
1950
|
}
|
|
1799
1951
|
|
|
1800
1952
|
.rs-auto-complete__input::placeholder {
|
|
@@ -1822,7 +1974,7 @@ code {
|
|
|
1822
1974
|
.rs-auto-complete__clear {
|
|
1823
1975
|
position: absolute;
|
|
1824
1976
|
top: 50%;
|
|
1825
|
-
|
|
1977
|
+
inset-inline-end: var(--rs-space-sm);
|
|
1826
1978
|
display: inline-flex;
|
|
1827
1979
|
align-items: center;
|
|
1828
1980
|
justify-content: center;
|
|
@@ -2085,7 +2237,7 @@ code {
|
|
|
2085
2237
|
.rs-toast__close {
|
|
2086
2238
|
position: absolute;
|
|
2087
2239
|
top: 0;
|
|
2088
|
-
|
|
2240
|
+
inset-inline-start: 0;
|
|
2089
2241
|
display: flex;
|
|
2090
2242
|
align-items: center;
|
|
2091
2243
|
justify-content: center;
|
|
@@ -2114,160 +2266,3 @@ code {
|
|
|
2114
2266
|
outline: none;
|
|
2115
2267
|
box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
|
|
2116
2268
|
}
|
|
2117
|
-
|
|
2118
|
-
/* Activity Bar「API」字标:粗圆角字重,随 currentColor */
|
|
2119
|
-
.lucide-api-icon .api-icon__label {
|
|
2120
|
-
fill: currentColor;
|
|
2121
|
-
stroke: none;
|
|
2122
|
-
font-family: var(--rs-font-rounded);
|
|
2123
|
-
font-size: 9.5px;
|
|
2124
|
-
font-weight: 800;
|
|
2125
|
-
letter-spacing: -0.04em;
|
|
2126
|
-
text-anchor: middle;
|
|
2127
|
-
-webkit-font-smoothing: antialiased;
|
|
2128
|
-
}
|
|
2129
|
-
|
|
2130
|
-
/* FTP 自定义图标:橙色实心文件夹 + 白色 FTP 字样 */
|
|
2131
|
-
.lucide-ftp-icon .ftp-icon__folder {
|
|
2132
|
-
fill: var(--rs-icon-ftp-accent);
|
|
2133
|
-
stroke: color-mix(in srgb, var(--rs-icon-ftp-accent) 55%, #1a1a1a);
|
|
2134
|
-
stroke-width: 1.1;
|
|
2135
|
-
}
|
|
2136
|
-
|
|
2137
|
-
.lucide-ftp-icon .ftp-icon__label {
|
|
2138
|
-
fill: var(--rs-icon-ftp-on-accent);
|
|
2139
|
-
stroke: none;
|
|
2140
|
-
font-family: var(--rs-font-mono);
|
|
2141
|
-
font-size: 6.2px;
|
|
2142
|
-
font-weight: 900;
|
|
2143
|
-
letter-spacing: -0.08em;
|
|
2144
|
-
text-anchor: middle;
|
|
2145
|
-
-webkit-font-smoothing: antialiased;
|
|
2146
|
-
}
|
|
2147
|
-
|
|
2148
|
-
.rs-context-menu__item[data-highlighted] .lucide-ftp-icon .ftp-icon__folder,
|
|
2149
|
-
.rs-context-menu__item[data-state='open'] .lucide-ftp-icon .ftp-icon__folder {
|
|
2150
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2151
|
-
stroke: rgb(255 255 255 / 0.55);
|
|
2152
|
-
}
|
|
2153
|
-
|
|
2154
|
-
.rs-context-menu__item[data-highlighted] .lucide-ftp-icon .ftp-icon__label,
|
|
2155
|
-
.rs-context-menu__item[data-state='open'] .lucide-ftp-icon .ftp-icon__label {
|
|
2156
|
-
fill: var(--rs-icon-ftp-accent);
|
|
2157
|
-
}
|
|
2158
|
-
|
|
2159
|
-
/* Redis 自定义图标:官方品牌 mark,单色填充随主题调整明暗对比度 */
|
|
2160
|
-
.lucide-redis-icon .redis-icon__mark {
|
|
2161
|
-
fill: var(--rs-icon-redis-accent);
|
|
2162
|
-
}
|
|
2163
|
-
|
|
2164
|
-
.rs-context-menu__item[data-highlighted] .lucide-redis-icon .redis-icon__mark,
|
|
2165
|
-
.rs-context-menu__item[data-state='open'] .lucide-redis-icon .redis-icon__mark {
|
|
2166
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2167
|
-
}
|
|
2168
|
-
|
|
2169
|
-
/* MongoDB 自定义图标:官方品牌 mark,单色填充随主题调整明暗对比度 */
|
|
2170
|
-
.lucide-mongodb-icon .mongodb-icon__mark {
|
|
2171
|
-
fill: var(--rs-icon-mongodb-accent);
|
|
2172
|
-
}
|
|
2173
|
-
|
|
2174
|
-
.rs-context-menu__item[data-highlighted] .lucide-mongodb-icon .mongodb-icon__mark,
|
|
2175
|
-
.rs-context-menu__item[data-state='open'] .lucide-mongodb-icon .mongodb-icon__mark {
|
|
2176
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2177
|
-
}
|
|
2178
|
-
|
|
2179
|
-
/* Vastbase 自定义图标:海量数据官方品牌 mark,单色填充随主题调整明暗对比度 */
|
|
2180
|
-
.lucide-vastbase-icon .vastbase-icon__mark {
|
|
2181
|
-
fill: var(--rs-icon-vastbase-accent);
|
|
2182
|
-
}
|
|
2183
|
-
|
|
2184
|
-
.rs-context-menu__item[data-highlighted] .lucide-vastbase-icon .vastbase-icon__mark,
|
|
2185
|
-
.rs-context-menu__item[data-state='open'] .lucide-vastbase-icon .vastbase-icon__mark {
|
|
2186
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2187
|
-
}
|
|
2188
|
-
|
|
2189
|
-
/* MySQL 自定义图标:官方品牌 mark,单色填充随主题调整明暗对比度 */
|
|
2190
|
-
.lucide-mysql-icon .mysql-icon__mark {
|
|
2191
|
-
fill: var(--rs-icon-mysql-accent);
|
|
2192
|
-
}
|
|
2193
|
-
|
|
2194
|
-
.rs-context-menu__item[data-highlighted] .lucide-mysql-icon .mysql-icon__mark,
|
|
2195
|
-
.rs-context-menu__item[data-state='open'] .lucide-mysql-icon .mysql-icon__mark {
|
|
2196
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2197
|
-
}
|
|
2198
|
-
|
|
2199
|
-
/* Dameng 自定义图标:官方品牌 mark(蓝椭圆 + 红波浪) */
|
|
2200
|
-
.lucide-dameng-icon .dameng-icon__oval {
|
|
2201
|
-
fill: var(--rs-icon-dameng-accent);
|
|
2202
|
-
}
|
|
2203
|
-
|
|
2204
|
-
.lucide-dameng-icon .dameng-icon__wave {
|
|
2205
|
-
fill: var(--rs-icon-dameng-wave);
|
|
2206
|
-
}
|
|
2207
|
-
|
|
2208
|
-
.rs-context-menu__item[data-highlighted] .lucide-dameng-icon .dameng-icon__oval,
|
|
2209
|
-
.rs-context-menu__item[data-state='open'] .lucide-dameng-icon .dameng-icon__oval,
|
|
2210
|
-
.rs-context-menu__item[data-highlighted] .lucide-dameng-icon .dameng-icon__wave,
|
|
2211
|
-
.rs-context-menu__item[data-state='open'] .lucide-dameng-icon .dameng-icon__wave {
|
|
2212
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2213
|
-
}
|
|
2214
|
-
|
|
2215
|
-
/* SQLite 自定义图标:官方品牌 mark,单色填充随主题调整明暗对比度 */
|
|
2216
|
-
.lucide-sqlite-icon .sqlite-icon__mark {
|
|
2217
|
-
fill: var(--rs-icon-sqlite-accent);
|
|
2218
|
-
}
|
|
2219
|
-
|
|
2220
|
-
.rs-context-menu__item[data-highlighted] .lucide-sqlite-icon .sqlite-icon__mark,
|
|
2221
|
-
.rs-context-menu__item[data-state='open'] .lucide-sqlite-icon .sqlite-icon__mark {
|
|
2222
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2223
|
-
}
|
|
2224
|
-
|
|
2225
|
-
/* Oracle 自定义图标:官方品牌 oval mark,单色填充随主题调整明暗对比度 */
|
|
2226
|
-
.lucide-oracle-icon .oracle-icon__mark {
|
|
2227
|
-
fill: var(--rs-icon-oracle-accent);
|
|
2228
|
-
}
|
|
2229
|
-
|
|
2230
|
-
.rs-context-menu__item[data-highlighted] .lucide-oracle-icon .oracle-icon__mark,
|
|
2231
|
-
.rs-context-menu__item[data-state='open'] .lucide-oracle-icon .oracle-icon__mark {
|
|
2232
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2233
|
-
}
|
|
2234
|
-
|
|
2235
|
-
/* ClickHouse 自定义图标:官方品牌 barcode mark,单色填充随主题调整明暗对比度 */
|
|
2236
|
-
.lucide-clickhouse-icon .clickhouse-icon__mark {
|
|
2237
|
-
fill: var(--rs-icon-clickhouse-accent);
|
|
2238
|
-
}
|
|
2239
|
-
|
|
2240
|
-
.rs-context-menu__item[data-highlighted] .lucide-clickhouse-icon .clickhouse-icon__mark,
|
|
2241
|
-
.rs-context-menu__item[data-state='open'] .lucide-clickhouse-icon .clickhouse-icon__mark {
|
|
2242
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2243
|
-
}
|
|
2244
|
-
|
|
2245
|
-
/* 人大金仓自定义图标:官方品牌 K lettermark,单色填充随主题调整明暗对比度 */
|
|
2246
|
-
.lucide-kingbase-icon .kingbase-icon__mark {
|
|
2247
|
-
fill: var(--rs-icon-kingbase-accent);
|
|
2248
|
-
}
|
|
2249
|
-
|
|
2250
|
-
.rs-context-menu__item[data-highlighted] .lucide-kingbase-icon .kingbase-icon__mark,
|
|
2251
|
-
.rs-context-menu__item[data-state='open'] .lucide-kingbase-icon .kingbase-icon__mark {
|
|
2252
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2253
|
-
}
|
|
2254
|
-
|
|
2255
|
-
/* SQL Server 自定义图标:官方品牌火焰/翼形 mark,单色填充随主题调整明暗对比度 */
|
|
2256
|
-
.lucide-sqlserver-icon .sqlserver-icon__mark {
|
|
2257
|
-
fill: var(--rs-icon-sqlserver-accent);
|
|
2258
|
-
}
|
|
2259
|
-
|
|
2260
|
-
.rs-context-menu__item[data-highlighted] .lucide-sqlserver-icon .sqlserver-icon__mark,
|
|
2261
|
-
.rs-context-menu__item[data-state='open'] .lucide-sqlserver-icon .sqlserver-icon__mark {
|
|
2262
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2263
|
-
}
|
|
2264
|
-
|
|
2265
|
-
/* PostgreSQL 自定义图标:官方大象(Slonik)mark,单色填充随主题调整明暗对比度 */
|
|
2266
|
-
.lucide-postgres-icon .postgres-icon__mark {
|
|
2267
|
-
fill: var(--rs-icon-postgres-accent);
|
|
2268
|
-
}
|
|
2269
|
-
|
|
2270
|
-
.rs-context-menu__item[data-highlighted] .lucide-postgres-icon .postgres-icon__mark,
|
|
2271
|
-
.rs-context-menu__item[data-state='open'] .lucide-postgres-icon .postgres-icon__mark {
|
|
2272
|
-
fill: rgb(255 255 255 / 0.95);
|
|
2273
|
-
}
|
package/dist/theme/apply.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type RsResolvedTheme, type RsThemeMode } from './types';
|
|
2
|
+
/** 系统是否偏好暗色。无 window 时视为浅色(与 :root 默认一致)。 */
|
|
3
|
+
export declare function prefersColorSchemeDark(): boolean;
|
|
4
|
+
/** 把偏好解析成 light / dark。色值仍只认 CSS,不读 themePresets。 */
|
|
5
|
+
export declare function resolveThemeMode(mode: RsThemeMode): RsResolvedTheme;
|
|
2
6
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
7
|
+
* 读已落到元素上的明暗。无属性或无法识别时按 light,
|
|
8
|
+
* 与 styles.css 的 `:root` 默认一致,避免编辑器 / 弹层先闪暗色。
|
|
9
|
+
*/
|
|
10
|
+
export declare function readResolvedTheme(el?: HTMLElement | null): RsResolvedTheme;
|
|
11
|
+
/**
|
|
12
|
+
* 切换主题:只写属性。
|
|
13
|
+
* `system` 解析后写 `data-rs-theme="light|dark"`,另标 `data-rs-theme-pref="system"`。
|
|
14
|
+
* 组件选择器继续认 light / dark,不必为 system 再复制一套。
|
|
5
15
|
*/
|
|
6
16
|
export declare function applyTheme(mode: RsThemeMode, el?: HTMLElement): void;
|
|
17
|
+
/** 系统明暗变化时回调;返回取消订阅。 */
|
|
18
|
+
export declare function subscribePreferredColorScheme(onChange: () => void): () => void;
|
package/dist/theme/apply.js
CHANGED
|
@@ -1,10 +1,47 @@
|
|
|
1
|
+
import { themeAttribute, themePrefAttribute } from "./types.js";
|
|
1
2
|
//#region src/theme/apply.ts
|
|
3
|
+
function matchPrefersColorSchemeDark() {
|
|
4
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return null;
|
|
5
|
+
return window.matchMedia("(prefers-color-scheme: dark)");
|
|
6
|
+
}
|
|
7
|
+
/** 系统是否偏好暗色。无 window 时视为浅色(与 :root 默认一致)。 */
|
|
8
|
+
function prefersColorSchemeDark() {
|
|
9
|
+
return matchPrefersColorSchemeDark()?.matches === true;
|
|
10
|
+
}
|
|
11
|
+
/** 把偏好解析成 light / dark。色值仍只认 CSS,不读 themePresets。 */
|
|
12
|
+
function resolveThemeMode(mode) {
|
|
13
|
+
if (mode === "light" || mode === "dark") return mode;
|
|
14
|
+
return prefersColorSchemeDark() ? "dark" : "light";
|
|
15
|
+
}
|
|
2
16
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
17
|
+
* 读已落到元素上的明暗。无属性或无法识别时按 light,
|
|
18
|
+
* 与 styles.css 的 `:root` 默认一致,避免编辑器 / 弹层先闪暗色。
|
|
19
|
+
*/
|
|
20
|
+
function readResolvedTheme(el) {
|
|
21
|
+
if (typeof document === "undefined") return "light";
|
|
22
|
+
const raw = (el ?? document.documentElement).getAttribute(themeAttribute);
|
|
23
|
+
if (raw === "light" || raw === "dark") return raw;
|
|
24
|
+
if (raw === "system") return resolveThemeMode("system");
|
|
25
|
+
return "light";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 切换主题:只写属性。
|
|
29
|
+
* `system` 解析后写 `data-rs-theme="light|dark"`,另标 `data-rs-theme-pref="system"`。
|
|
30
|
+
* 组件选择器继续认 light / dark,不必为 system 再复制一套。
|
|
5
31
|
*/
|
|
6
32
|
function applyTheme(mode, el = document.documentElement) {
|
|
7
|
-
|
|
33
|
+
const resolved = resolveThemeMode(mode);
|
|
34
|
+
el.setAttribute(themeAttribute, resolved);
|
|
35
|
+
if (mode === "system") el.setAttribute(themePrefAttribute, "system");
|
|
36
|
+
else el.removeAttribute(themePrefAttribute);
|
|
37
|
+
}
|
|
38
|
+
/** 系统明暗变化时回调;返回取消订阅。 */
|
|
39
|
+
function subscribePreferredColorScheme(onChange) {
|
|
40
|
+
const mq = matchPrefersColorSchemeDark();
|
|
41
|
+
if (!mq) return () => {};
|
|
42
|
+
const handler = () => onChange();
|
|
43
|
+
mq.addEventListener("change", handler);
|
|
44
|
+
return () => mq.removeEventListener("change", handler);
|
|
8
45
|
}
|
|
9
46
|
//#endregion
|
|
10
|
-
export { applyTheme };
|
|
47
|
+
export { applyTheme, prefersColorSchemeDark, readResolvedTheme, resolveThemeMode, subscribePreferredColorScheme };
|