common_component_library_vue 0.1.1 → 0.1.3
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/dist-lib/common-component-library-vue.css +1 -1
- package/dist-lib/common-component-library-vue.mjs +1038 -167
- package/dist-lib/common-component-library-vue.umd.js +2 -1
- package/dist-lib/types/components/Chart/CcBarChart.vue.d.ts +32 -0
- package/dist-lib/types/components/Chart/CcLineChart.vue.d.ts +35 -0
- package/dist-lib/types/components/Chart/CcPieChart.vue.d.ts +30 -0
- package/dist-lib/types/components/Chart/common.d.ts +32 -0
- package/dist-lib/types/components/Chart/useECharts.d.ts +18 -0
- package/dist-lib/types/components/Table/CcTable.vue.d.ts +73 -0
- package/dist-lib/types/components/ThemeProvider/CcThemeProvider.vue.d.ts +27 -0
- package/dist-lib/types/index.d.ts +247 -3
- package/dist-lib/types/theme.d.ts +32 -0
- package/package.json +10 -4
- package/src/styles/themes/linear.css +47 -0
- package/src/styles/themes/notion.css +47 -0
- package/src/styles/themes/raycast.css +47 -0
- package/src/styles/themes/vercel.css +47 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Common Component Library
|
|
2
|
+
* Common Component Library 鈥?Vue 3 + TypeScript
|
|
3
3
|
* Design language: Stripe-inspired, defined in /DESIGN.md
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
@@ -24,11 +24,25 @@ import CcModal from './components/Modal/CcModal.vue';
|
|
|
24
24
|
import CcTooltip from './components/Tooltip/CcTooltip.vue';
|
|
25
25
|
import CcSpinner from './components/Spinner/CcSpinner.vue';
|
|
26
26
|
import CcDivider from './components/Divider/CcDivider.vue';
|
|
27
|
-
|
|
27
|
+
import CcTable from './components/Table/CcTable.vue';
|
|
28
|
+
import CcBarChart from './components/Chart/CcBarChart.vue';
|
|
29
|
+
import CcPieChart from './components/Chart/CcPieChart.vue';
|
|
30
|
+
import CcLineChart from './components/Chart/CcLineChart.vue';
|
|
31
|
+
import CcThemeProvider from './components/ThemeProvider/CcThemeProvider.vue';
|
|
32
|
+
export { CcButton, CcInput, CcTextarea, CcSelect, CcSwitch, CcCheckbox, CcRadio, CcCard, CcTag, CcBadge, CcAlert, CcModal, CcTooltip, CcSpinner, CcDivider, CcTable, CcBarChart, CcPieChart, CcLineChart, CcThemeProvider, };
|
|
28
33
|
export type { CcSelectOption } from './components/Select/CcSelect.vue';
|
|
29
|
-
|
|
34
|
+
export type { CcTableColumn, CcTableDensity } from './components/Table/CcTable.vue';
|
|
35
|
+
export type { CcChartSeries, CcPieDatum } from './components/Chart/common';
|
|
36
|
+
export type { CcTheme } from './theme';
|
|
37
|
+
export { CC_THEMES, CC_THEME_LABELS, setTheme, getTheme, resetTheme } from './theme';
|
|
38
|
+
/** Design tokens (CSS custom properties) 鈥?import once in your app entry */
|
|
30
39
|
import './styles/tokens.css';
|
|
31
40
|
import './styles/base.css';
|
|
41
|
+
/** Multi-theme: Linear / Vercel / Notion / Raycast (default Stripe is in tokens.css) */
|
|
42
|
+
import './styles/themes/linear.css';
|
|
43
|
+
import './styles/themes/vercel.css';
|
|
44
|
+
import './styles/themes/notion.css';
|
|
45
|
+
import './styles/themes/raycast.css';
|
|
32
46
|
/** Optional plugin for `app.use()` registration */
|
|
33
47
|
export declare function install(app: App): void;
|
|
34
48
|
declare const _default: {
|
|
@@ -720,6 +734,236 @@ declare const _default: {
|
|
|
720
734
|
default?: (props: {}) => any;
|
|
721
735
|
};
|
|
722
736
|
});
|
|
737
|
+
CcTable: {
|
|
738
|
+
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
739
|
+
columns: import("./index.ts").CcTableColumn[];
|
|
740
|
+
data: Array<Record<string, unknown>>;
|
|
741
|
+
rowKey?: string;
|
|
742
|
+
tableKey?: string;
|
|
743
|
+
showSelection?: boolean;
|
|
744
|
+
pageSizeOptions?: number[];
|
|
745
|
+
defaultDensity?: import("./index.ts").CcTableDensity;
|
|
746
|
+
emptyText?: string;
|
|
747
|
+
maxHeight?: string;
|
|
748
|
+
} & {
|
|
749
|
+
selectedKeys?: string[];
|
|
750
|
+
}> & Readonly<{
|
|
751
|
+
"onSelection-change"?: ((keys: string[], rows: Record<string, unknown>[]) => any) | undefined;
|
|
752
|
+
"onUpdate:selectedKeys"?: ((value: string[]) => any) | undefined;
|
|
753
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
754
|
+
"update:selectedKeys": (value: string[]) => any;
|
|
755
|
+
} & {
|
|
756
|
+
"selection-change": (keys: string[], rows: Record<string, unknown>[]) => any;
|
|
757
|
+
}, import("vue").PublicProps, {
|
|
758
|
+
rowKey: string;
|
|
759
|
+
tableKey: string;
|
|
760
|
+
showSelection: boolean;
|
|
761
|
+
pageSizeOptions: number[];
|
|
762
|
+
defaultDensity: import("./index.ts").CcTableDensity;
|
|
763
|
+
emptyText: string;
|
|
764
|
+
maxHeight: string;
|
|
765
|
+
}, false, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
|
766
|
+
P: {};
|
|
767
|
+
B: {};
|
|
768
|
+
D: {};
|
|
769
|
+
C: {};
|
|
770
|
+
M: {};
|
|
771
|
+
Defaults: {};
|
|
772
|
+
}, Readonly<{
|
|
773
|
+
columns: import("./index.ts").CcTableColumn[];
|
|
774
|
+
data: Array<Record<string, unknown>>;
|
|
775
|
+
rowKey?: string;
|
|
776
|
+
tableKey?: string;
|
|
777
|
+
showSelection?: boolean;
|
|
778
|
+
pageSizeOptions?: number[];
|
|
779
|
+
defaultDensity?: import("./index.ts").CcTableDensity;
|
|
780
|
+
emptyText?: string;
|
|
781
|
+
maxHeight?: string;
|
|
782
|
+
} & {
|
|
783
|
+
selectedKeys?: string[];
|
|
784
|
+
}> & Readonly<{
|
|
785
|
+
"onSelection-change"?: ((keys: string[], rows: Record<string, unknown>[]) => any) | undefined;
|
|
786
|
+
"onUpdate:selectedKeys"?: ((value: string[]) => any) | undefined;
|
|
787
|
+
}>, {}, {}, {}, {}, {
|
|
788
|
+
rowKey: string;
|
|
789
|
+
tableKey: string;
|
|
790
|
+
showSelection: boolean;
|
|
791
|
+
pageSizeOptions: number[];
|
|
792
|
+
defaultDensity: import("./index.ts").CcTableDensity;
|
|
793
|
+
emptyText: string;
|
|
794
|
+
maxHeight: string;
|
|
795
|
+
}>;
|
|
796
|
+
__isFragment?: never;
|
|
797
|
+
__isTeleport?: never;
|
|
798
|
+
__isSuspense?: never;
|
|
799
|
+
} & import("vue").ComponentOptionsBase<Readonly<{
|
|
800
|
+
columns: import("./index.ts").CcTableColumn[];
|
|
801
|
+
data: Array<Record<string, unknown>>;
|
|
802
|
+
rowKey?: string;
|
|
803
|
+
tableKey?: string;
|
|
804
|
+
showSelection?: boolean;
|
|
805
|
+
pageSizeOptions?: number[];
|
|
806
|
+
defaultDensity?: import("./index.ts").CcTableDensity;
|
|
807
|
+
emptyText?: string;
|
|
808
|
+
maxHeight?: string;
|
|
809
|
+
} & {
|
|
810
|
+
selectedKeys?: string[];
|
|
811
|
+
}> & Readonly<{
|
|
812
|
+
"onSelection-change"?: ((keys: string[], rows: Record<string, unknown>[]) => any) | undefined;
|
|
813
|
+
"onUpdate:selectedKeys"?: ((value: string[]) => any) | undefined;
|
|
814
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
815
|
+
"update:selectedKeys": (value: string[]) => any;
|
|
816
|
+
} & {
|
|
817
|
+
"selection-change": (keys: string[], rows: Record<string, unknown>[]) => any;
|
|
818
|
+
}, string, {
|
|
819
|
+
rowKey: string;
|
|
820
|
+
tableKey: string;
|
|
821
|
+
showSelection: boolean;
|
|
822
|
+
pageSizeOptions: number[];
|
|
823
|
+
defaultDensity: import("./index.ts").CcTableDensity;
|
|
824
|
+
emptyText: string;
|
|
825
|
+
maxHeight: string;
|
|
826
|
+
}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
|
|
827
|
+
$slots: {
|
|
828
|
+
[x: string]: ((props: {
|
|
829
|
+
row: Record<string, unknown>;
|
|
830
|
+
value: unknown;
|
|
831
|
+
}) => any) | undefined;
|
|
832
|
+
};
|
|
833
|
+
});
|
|
834
|
+
CcBarChart: import("vue").DefineComponent<{
|
|
835
|
+
categories: string[];
|
|
836
|
+
series: import("./index.ts").CcChartSeries[];
|
|
837
|
+
height?: number;
|
|
838
|
+
horizontal?: boolean;
|
|
839
|
+
stacked?: boolean;
|
|
840
|
+
rounded?: boolean;
|
|
841
|
+
showLegend?: boolean;
|
|
842
|
+
colors?: string[];
|
|
843
|
+
dark?: boolean;
|
|
844
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
845
|
+
categories: string[];
|
|
846
|
+
series: import("./index.ts").CcChartSeries[];
|
|
847
|
+
height?: number;
|
|
848
|
+
horizontal?: boolean;
|
|
849
|
+
stacked?: boolean;
|
|
850
|
+
rounded?: boolean;
|
|
851
|
+
showLegend?: boolean;
|
|
852
|
+
colors?: string[];
|
|
853
|
+
dark?: boolean;
|
|
854
|
+
}> & Readonly<{}>, {
|
|
855
|
+
height: number;
|
|
856
|
+
dark: boolean;
|
|
857
|
+
horizontal: boolean;
|
|
858
|
+
stacked: boolean;
|
|
859
|
+
rounded: boolean;
|
|
860
|
+
showLegend: boolean;
|
|
861
|
+
colors: string[];
|
|
862
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
863
|
+
CcPieChart: import("vue").DefineComponent<{
|
|
864
|
+
data: import("./index.ts").CcPieDatum[];
|
|
865
|
+
height?: number;
|
|
866
|
+
donut?: boolean;
|
|
867
|
+
rose?: boolean;
|
|
868
|
+
showLegend?: boolean;
|
|
869
|
+
showLabels?: boolean;
|
|
870
|
+
colors?: string[];
|
|
871
|
+
dark?: boolean;
|
|
872
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
873
|
+
data: import("./index.ts").CcPieDatum[];
|
|
874
|
+
height?: number;
|
|
875
|
+
donut?: boolean;
|
|
876
|
+
rose?: boolean;
|
|
877
|
+
showLegend?: boolean;
|
|
878
|
+
showLabels?: boolean;
|
|
879
|
+
colors?: string[];
|
|
880
|
+
dark?: boolean;
|
|
881
|
+
}> & Readonly<{}>, {
|
|
882
|
+
height: number;
|
|
883
|
+
dark: boolean;
|
|
884
|
+
showLegend: boolean;
|
|
885
|
+
colors: string[];
|
|
886
|
+
donut: boolean;
|
|
887
|
+
rose: boolean;
|
|
888
|
+
showLabels: boolean;
|
|
889
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
890
|
+
CcLineChart: import("vue").DefineComponent<{
|
|
891
|
+
categories: string[];
|
|
892
|
+
series: import("./index.ts").CcChartSeries[];
|
|
893
|
+
height?: number;
|
|
894
|
+
smooth?: boolean;
|
|
895
|
+
area?: boolean;
|
|
896
|
+
showDots?: boolean;
|
|
897
|
+
showLegend?: boolean;
|
|
898
|
+
showGrid?: boolean;
|
|
899
|
+
colors?: string[];
|
|
900
|
+
dark?: boolean;
|
|
901
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
902
|
+
categories: string[];
|
|
903
|
+
series: import("./index.ts").CcChartSeries[];
|
|
904
|
+
height?: number;
|
|
905
|
+
smooth?: boolean;
|
|
906
|
+
area?: boolean;
|
|
907
|
+
showDots?: boolean;
|
|
908
|
+
showLegend?: boolean;
|
|
909
|
+
showGrid?: boolean;
|
|
910
|
+
colors?: string[];
|
|
911
|
+
dark?: boolean;
|
|
912
|
+
}> & Readonly<{}>, {
|
|
913
|
+
area: boolean;
|
|
914
|
+
height: number;
|
|
915
|
+
dark: boolean;
|
|
916
|
+
showLegend: boolean;
|
|
917
|
+
colors: string[];
|
|
918
|
+
smooth: boolean;
|
|
919
|
+
showDots: boolean;
|
|
920
|
+
showGrid: boolean;
|
|
921
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
922
|
+
CcThemeProvider: {
|
|
923
|
+
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<{
|
|
924
|
+
theme?: import("./theme").CcTheme;
|
|
925
|
+
persist?: boolean;
|
|
926
|
+
}> & Readonly<{
|
|
927
|
+
onChange?: ((theme: import("./theme").CcTheme) => any) | undefined;
|
|
928
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
929
|
+
change: (theme: import("./theme").CcTheme) => any;
|
|
930
|
+
}, import("vue").PublicProps, {
|
|
931
|
+
theme: import("./theme").CcTheme;
|
|
932
|
+
persist: boolean;
|
|
933
|
+
}, false, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
|
934
|
+
P: {};
|
|
935
|
+
B: {};
|
|
936
|
+
D: {};
|
|
937
|
+
C: {};
|
|
938
|
+
M: {};
|
|
939
|
+
Defaults: {};
|
|
940
|
+
}, Readonly<{
|
|
941
|
+
theme?: import("./theme").CcTheme;
|
|
942
|
+
persist?: boolean;
|
|
943
|
+
}> & Readonly<{
|
|
944
|
+
onChange?: ((theme: import("./theme").CcTheme) => any) | undefined;
|
|
945
|
+
}>, {}, {}, {}, {}, {
|
|
946
|
+
theme: import("./theme").CcTheme;
|
|
947
|
+
persist: boolean;
|
|
948
|
+
}>;
|
|
949
|
+
__isFragment?: never;
|
|
950
|
+
__isTeleport?: never;
|
|
951
|
+
__isSuspense?: never;
|
|
952
|
+
} & import("vue").ComponentOptionsBase<Readonly<{
|
|
953
|
+
theme?: import("./theme").CcTheme;
|
|
954
|
+
persist?: boolean;
|
|
955
|
+
}> & Readonly<{
|
|
956
|
+
onChange?: ((theme: import("./theme").CcTheme) => any) | undefined;
|
|
957
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
958
|
+
change: (theme: import("./theme").CcTheme) => any;
|
|
959
|
+
}, string, {
|
|
960
|
+
theme: import("./theme").CcTheme;
|
|
961
|
+
persist: boolean;
|
|
962
|
+
}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
|
|
963
|
+
$slots: {
|
|
964
|
+
default?: (props: {}) => any;
|
|
965
|
+
};
|
|
966
|
+
});
|
|
723
967
|
install: typeof install;
|
|
724
968
|
};
|
|
725
969
|
export default _default;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 多主题系统 — 组件库公开的主题切换 API。
|
|
3
|
+
*
|
|
4
|
+
* 用法(三种方式等效):
|
|
5
|
+
* 1. 声明式:<CcThemeProvider theme="linear"> <App/> </CcThemeProvider>
|
|
6
|
+
* 2. 命令式:import { setTheme } from 'common_component_library_vue'; setTheme('linear')
|
|
7
|
+
* 3. HTML: <html data-cc-theme="linear">
|
|
8
|
+
*
|
|
9
|
+
* 主题实际生效于 CSS 选择器 [data-cc-theme="xxx"],作用于 <html> 根节点,
|
|
10
|
+
* 覆盖 :root 中的默认(Stripe)令牌,切换即时生效、无需刷新。
|
|
11
|
+
*/
|
|
12
|
+
/** 组件库支持的设计风格。stripe 为默认风格(无需任何主题文件)。 */
|
|
13
|
+
export type CcTheme = 'stripe' | 'linear' | 'vercel' | 'notion' | 'raycast';
|
|
14
|
+
/** 全部可用主题。 */
|
|
15
|
+
export declare const CC_THEMES: readonly CcTheme[];
|
|
16
|
+
/** 主题中文标签(演示与选择器展示用),value 保持英文主题名不变。 */
|
|
17
|
+
export declare const CC_THEME_LABELS: Record<CcTheme, string>;
|
|
18
|
+
/** <html> 上的主题属性名。 */
|
|
19
|
+
export declare const CC_THEME_ATTR = "data-cc-theme";
|
|
20
|
+
/** inject/provide 当前主题的注入键(可读取响应式主题)。 */
|
|
21
|
+
export declare const CC_THEME_KEY: unique symbol;
|
|
22
|
+
/** 校验是否为合法的内置主题名。 */
|
|
23
|
+
export declare function isCcTheme(value: unknown): value is CcTheme;
|
|
24
|
+
/**
|
|
25
|
+
* 切换组件库主题。
|
|
26
|
+
* @param theme 目标主题名;传入 'stripe' 或移除主题时恢复默认。
|
|
27
|
+
*/
|
|
28
|
+
export declare function setTheme(theme: CcTheme): void;
|
|
29
|
+
/** 读取当前生效的主题名。 */
|
|
30
|
+
export declare function getTheme(): CcTheme;
|
|
31
|
+
/** 恢复默认主题(Stripe)。 */
|
|
32
|
+
export declare function resetTheme(): void;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "common_component_library_vue",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Vue 3 + TypeScript + Vite 通用组件库,视觉规范由 DESIGN.md(Stripe
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Vue 3 + TypeScript + Vite 通用组件库,视觉规范由 DESIGN.md(Stripe 风格)定义,包含表格、图表与 15 个基础组件",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist-lib/common-component-library-vue.umd.js",
|
|
7
7
|
"module": "./dist-lib/common-component-library-vue.mjs",
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
"require": "./dist-lib/common-component-library-vue.umd.js"
|
|
14
14
|
},
|
|
15
15
|
"./style.css": "./dist-lib/common-component-library-vue.css",
|
|
16
|
+
"./themes/linear.css": "./src/styles/themes/linear.css",
|
|
17
|
+
"./themes/vercel.css": "./src/styles/themes/vercel.css",
|
|
18
|
+
"./themes/notion.css": "./src/styles/themes/notion.css",
|
|
19
|
+
"./themes/raycast.css": "./src/styles/themes/raycast.css",
|
|
16
20
|
"./dist-lib/*": "./dist-lib/*",
|
|
17
21
|
"./styles/tokens.css": "./src/styles/tokens.css",
|
|
18
22
|
"./styles/base.css": "./src/styles/base.css",
|
|
@@ -58,16 +62,18 @@
|
|
|
58
62
|
"prepublishOnly": "npm run build:lib"
|
|
59
63
|
},
|
|
60
64
|
"dependencies": {
|
|
61
|
-
"vue": "^3.
|
|
65
|
+
"vue": "^3.4.0"
|
|
62
66
|
},
|
|
63
67
|
"peerDependencies": {
|
|
64
|
-
"vue": "^3.4.0"
|
|
68
|
+
"vue": "^3.4.0",
|
|
69
|
+
"echarts": "^5.5.0 || ^6.0.0"
|
|
65
70
|
},
|
|
66
71
|
"devDependencies": {
|
|
67
72
|
"@fontsource/inter": "^5.3.0",
|
|
68
73
|
"@types/node": "^24.13.3",
|
|
69
74
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
70
75
|
"@vue/tsconfig": "^0.9.1",
|
|
76
|
+
"echarts": "^6.1.0",
|
|
71
77
|
"typescript": "~6.0.2",
|
|
72
78
|
"vite": "^8.2.2",
|
|
73
79
|
"vue-tsc": "^3.3.11"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
THEME · Linear — deep-dark, lavender accent
|
|
3
|
+
Source: awesome-design-md/linear.app/DESIGN.md
|
|
4
|
+
Apply by setting <html data-cc-theme="linear"> (or CcThemeProvider / setTheme).
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
[data-cc-theme='linear'] {
|
|
8
|
+
/* Brand & Accent */
|
|
9
|
+
--cc-primary: #5e6ad2;
|
|
10
|
+
--cc-primary-deep: #4f5ab8;
|
|
11
|
+
--cc-primary-press: #3d4798;
|
|
12
|
+
--cc-primary-soft: #828fff;
|
|
13
|
+
--cc-primary-subdued: #2a2e4a;
|
|
14
|
+
--cc-brand-dark-900: #0b0b0c;
|
|
15
|
+
--cc-ruby: #f25e5e;
|
|
16
|
+
--cc-magenta: #f5a3c7;
|
|
17
|
+
--cc-lemon: #d8b4fe;
|
|
18
|
+
|
|
19
|
+
/* Surface */
|
|
20
|
+
--cc-canvas: #010102;
|
|
21
|
+
--cc-canvas-soft: #0f1011;
|
|
22
|
+
--cc-canvas-cream: #141516;
|
|
23
|
+
--cc-hairline: #2a2d33;
|
|
24
|
+
--cc-hairline-input: #3a3e45;
|
|
25
|
+
|
|
26
|
+
/* Text */
|
|
27
|
+
--cc-ink: #f7f8f8;
|
|
28
|
+
--cc-ink-secondary: #d0d6e0;
|
|
29
|
+
--cc-ink-mute: #8a8f98;
|
|
30
|
+
--cc-ink-mute-2: #62666d;
|
|
31
|
+
--cc-on-primary: #ffffff;
|
|
32
|
+
|
|
33
|
+
/* Semantic */
|
|
34
|
+
--cc-success: #3ddc97;
|
|
35
|
+
--cc-success-soft: #14322a;
|
|
36
|
+
--cc-warning: #d8b4fe;
|
|
37
|
+
--cc-warning-soft: #2c2440;
|
|
38
|
+
--cc-error: #f25e5e;
|
|
39
|
+
--cc-error-soft: #3a1d1d;
|
|
40
|
+
--cc-info: #5e6ad2;
|
|
41
|
+
|
|
42
|
+
/* Shadows */
|
|
43
|
+
--cc-shadow-blue: #000000;
|
|
44
|
+
--cc-shadow-level-1: rgba(0, 0, 0, 0.5) 0 1px 3px;
|
|
45
|
+
--cc-shadow-level-2: rgba(0, 0, 0, 0.5) 0 8px 24px, rgba(0, 0, 0, 0.3) 0 2px 6px;
|
|
46
|
+
--cc-focus-ring: 0 0 0 3px rgba(94, 106, 210, 0.35);
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
THEME · Notion — paper light, indigo CTA
|
|
3
|
+
Source: awesome-design-md/notion/DESIGN.md
|
|
4
|
+
Apply by setting <html data-cc-theme="notion"> (or CcThemeProvider / setTheme).
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
[data-cc-theme='notion'] {
|
|
8
|
+
/* Brand & Accent */
|
|
9
|
+
--cc-primary: #5645d4;
|
|
10
|
+
--cc-primary-deep: #4534b3;
|
|
11
|
+
--cc-primary-press: #3a2a99;
|
|
12
|
+
--cc-primary-soft: #6f5fe8;
|
|
13
|
+
--cc-primary-subdued: #e9e7fb;
|
|
14
|
+
--cc-brand-dark-900: #0a1530;
|
|
15
|
+
--cc-ruby: #eb5757;
|
|
16
|
+
--cc-magenta: #eb5757;
|
|
17
|
+
--cc-lemon: #b76e00;
|
|
18
|
+
|
|
19
|
+
/* Surface */
|
|
20
|
+
--cc-canvas: #ffffff;
|
|
21
|
+
--cc-canvas-soft: #f7f7f5;
|
|
22
|
+
--cc-canvas-cream: #f1f1ef;
|
|
23
|
+
--cc-hairline: #e3e3e0;
|
|
24
|
+
--cc-hairline-input: #d0d0cc;
|
|
25
|
+
|
|
26
|
+
/* Text */
|
|
27
|
+
--cc-ink: #37352f;
|
|
28
|
+
--cc-ink-secondary: #4f4d47;
|
|
29
|
+
--cc-ink-mute: #9b9a97;
|
|
30
|
+
--cc-ink-mute-2: #787774;
|
|
31
|
+
--cc-on-primary: #ffffff;
|
|
32
|
+
|
|
33
|
+
/* Semantic */
|
|
34
|
+
--cc-success: #0a9f6e;
|
|
35
|
+
--cc-success-soft: #e4f5ee;
|
|
36
|
+
--cc-warning: #b76e00;
|
|
37
|
+
--cc-warning-soft: #faf1e2;
|
|
38
|
+
--cc-error: #eb5757;
|
|
39
|
+
--cc-error-soft: #fdeaea;
|
|
40
|
+
--cc-info: #0075de;
|
|
41
|
+
|
|
42
|
+
/* Shadows */
|
|
43
|
+
--cc-shadow-blue: #0a1530;
|
|
44
|
+
--cc-shadow-level-1: rgba(10, 21, 48, 0.08) 0 1px 3px;
|
|
45
|
+
--cc-shadow-level-2: rgba(10, 21, 48, 0.08) 0 8px 24px, rgba(10, 21, 48, 0.04) 0 2px 6px;
|
|
46
|
+
--cc-focus-ring: 0 0 0 3px rgba(86, 69, 212, 0.22);
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
THEME · Raycast — dark shell, white CTA
|
|
3
|
+
Source: awesome-design-md/raycast/DESIGN.md
|
|
4
|
+
Apply by setting <html data-cc-theme="raycast"> (or CcThemeProvider / setTheme).
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
[data-cc-theme='raycast'] {
|
|
8
|
+
/* Brand & Accent */
|
|
9
|
+
--cc-primary: #ffffff;
|
|
10
|
+
--cc-primary-deep: #e8e8e8;
|
|
11
|
+
--cc-primary-press: #d6d6d6;
|
|
12
|
+
--cc-primary-soft: #ffffff;
|
|
13
|
+
--cc-primary-subdued: #3a3a3c;
|
|
14
|
+
--cc-brand-dark-900: #111113;
|
|
15
|
+
--cc-ruby: #ff6363;
|
|
16
|
+
--cc-magenta: #ff8d70;
|
|
17
|
+
--cc-lemon: #f5c451;
|
|
18
|
+
|
|
19
|
+
/* Surface */
|
|
20
|
+
--cc-canvas: #151516;
|
|
21
|
+
--cc-canvas-soft: #1c1c1e;
|
|
22
|
+
--cc-canvas-cream: #222224;
|
|
23
|
+
--cc-hairline: #303033;
|
|
24
|
+
--cc-hairline-input: #3f3f42;
|
|
25
|
+
|
|
26
|
+
/* Text */
|
|
27
|
+
--cc-ink: #f4f4f6;
|
|
28
|
+
--cc-ink-secondary: #cdcdcd;
|
|
29
|
+
--cc-ink-mute: #9c9c9d;
|
|
30
|
+
--cc-ink-mute-2: #6a6b6c;
|
|
31
|
+
--cc-on-primary: #000000;
|
|
32
|
+
|
|
33
|
+
/* Semantic */
|
|
34
|
+
--cc-success: #3ddc97;
|
|
35
|
+
--cc-success-soft: #17352b;
|
|
36
|
+
--cc-warning: #f5c451;
|
|
37
|
+
--cc-warning-soft: #3a3118;
|
|
38
|
+
--cc-error: #ff6363;
|
|
39
|
+
--cc-error-soft: #3c1d1d;
|
|
40
|
+
--cc-info: #ffffff;
|
|
41
|
+
|
|
42
|
+
/* Shadows */
|
|
43
|
+
--cc-shadow-blue: #000000;
|
|
44
|
+
--cc-shadow-level-1: rgba(0, 0, 0, 0.6) 0 1px 3px;
|
|
45
|
+
--cc-shadow-level-2: rgba(0, 0, 0, 0.6) 0 8px 24px, rgba(0, 0, 0, 0.4) 0 2px 6px;
|
|
46
|
+
--cc-focus-ring: 0 0 0 3px rgba(255, 99, 99, 0.35);
|
|
47
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
THEME · Vercel — monochrome minimal, near-black CTA
|
|
3
|
+
Source: awesome-design-md/vercel/DESIGN.md
|
|
4
|
+
Apply by setting <html data-cc-theme="vercel"> (or CcThemeProvider / setTheme).
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
[data-cc-theme='vercel'] {
|
|
8
|
+
/* Brand & Accent */
|
|
9
|
+
--cc-primary: #171717;
|
|
10
|
+
--cc-primary-deep: #000000;
|
|
11
|
+
--cc-primary-press: #000000;
|
|
12
|
+
--cc-primary-soft: #444444;
|
|
13
|
+
--cc-primary-subdued: #eaeaea;
|
|
14
|
+
--cc-brand-dark-900: #0a0a0a;
|
|
15
|
+
--cc-ruby: #ee0000;
|
|
16
|
+
--cc-magenta: #f81ce5;
|
|
17
|
+
--cc-lemon: #f5a623;
|
|
18
|
+
|
|
19
|
+
/* Surface */
|
|
20
|
+
--cc-canvas: #ffffff;
|
|
21
|
+
--cc-canvas-soft: #fafafa;
|
|
22
|
+
--cc-canvas-cream: #f5f5f5;
|
|
23
|
+
--cc-hairline: #eaeaea;
|
|
24
|
+
--cc-hairline-input: #d4d4d4;
|
|
25
|
+
|
|
26
|
+
/* Text */
|
|
27
|
+
--cc-ink: #171717;
|
|
28
|
+
--cc-ink-secondary: #4d4d4d;
|
|
29
|
+
--cc-ink-mute: #888888;
|
|
30
|
+
--cc-ink-mute-2: #666666;
|
|
31
|
+
--cc-on-primary: #ffffff;
|
|
32
|
+
|
|
33
|
+
/* Semantic */
|
|
34
|
+
--cc-success: #0070f3;
|
|
35
|
+
--cc-success-soft: #e8f3ff;
|
|
36
|
+
--cc-warning: #f5a623;
|
|
37
|
+
--cc-warning-soft: #fdf3e3;
|
|
38
|
+
--cc-error: #ee0000;
|
|
39
|
+
--cc-error-soft: #fbeaea;
|
|
40
|
+
--cc-info: #0070f3;
|
|
41
|
+
|
|
42
|
+
/* Shadows */
|
|
43
|
+
--cc-shadow-blue: #000000;
|
|
44
|
+
--cc-shadow-level-1: rgba(0, 0, 0, 0.06) 0 1px 3px;
|
|
45
|
+
--cc-shadow-level-2: rgba(0, 0, 0, 0.06) 0 8px 24px, rgba(0, 0, 0, 0.03) 0 2px 6px;
|
|
46
|
+
--cc-focus-ring: 0 0 0 3px rgba(0, 112, 243, 0.25);
|
|
47
|
+
}
|