tango-ui-cw 0.9.8 → 1.0.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 (118) hide show
  1. package/README.md +124 -39
  2. package/dist/component/CSSFab/index.d.ts +55 -0
  3. package/dist/component/CSSFab/useTangoStyle.d.ts +1 -0
  4. package/dist/component/TBanner/index.d.ts +50 -0
  5. package/dist/component/TButton/index.d.ts +107 -0
  6. package/dist/component/TColorPicker/index.d.ts +41 -0
  7. package/dist/component/TDate/index.d.ts +41 -0
  8. package/dist/component/TDatePicker/index.d.ts +49 -0
  9. package/dist/component/TDrawer/index.d.ts +58 -0
  10. package/dist/component/TInput/index.d.ts +81 -0
  11. package/dist/component/TLayout/index.d.ts +133 -0
  12. package/dist/component/TLine/index.d.ts +33 -0
  13. package/dist/component/TMark/index.d.ts +38 -0
  14. package/dist/component/TModal/index.d.ts +52 -0
  15. package/dist/component/TNotice/index.d.ts +30 -0
  16. package/dist/component/TSearch/index.d.ts +42 -0
  17. package/dist/component/TSpace/index.d.ts +56 -0
  18. package/dist/component/TTable/index.d.ts +76 -0
  19. package/dist/component/TTooltip/index.d.ts +31 -0
  20. package/dist/component/TUpload/index.d.ts +45 -0
  21. package/dist/component/index.d.ts +147 -0
  22. package/dist/index.cjs +12 -0
  23. package/dist/index.d.cts +18 -0
  24. package/dist/index.d.ts +18 -0
  25. package/dist/index.js +3648 -2
  26. package/dist/providers/NoticeProvider/NoticeProvider.d.ts +19 -0
  27. package/dist/providers/TangoI18nProvider/TangoI18nProvider.d.ts +28 -0
  28. package/dist/providers/ThemeProvider/ThemeProvider.d.ts +22 -0
  29. package/dist/scripts/check-peers.js +75 -0
  30. package/dist/styles/global.css +372 -0
  31. package/dist/styles/theme.css +13 -0
  32. package/package.json +65 -48
  33. package/dist/assets/Upload/delLogo.png.js +0 -1
  34. package/dist/assets/Upload/delLogo.png.mjs +0 -4
  35. package/dist/assets/Upload/fileslogo.png.js +0 -1
  36. package/dist/assets/Upload/fileslogo.png.mjs +0 -4
  37. package/dist/component/CSSFab/useTangoStyle.js +0 -2
  38. package/dist/component/CSSFab/useTangoStyle.mjs +0 -171
  39. package/dist/component/MaterialButton/MaterialButton.module.css.js +0 -1
  40. package/dist/component/MaterialButton/MaterialButton.module.css.mjs +0 -17
  41. package/dist/component/MaterialButton/index.js +0 -2
  42. package/dist/component/MaterialButton/index.mjs +0 -62
  43. package/dist/component/MaterialInput/MaterialInput.module.css.js +0 -1
  44. package/dist/component/MaterialInput/MaterialInput.module.css.mjs +0 -17
  45. package/dist/component/MaterialInput/index.js +0 -2
  46. package/dist/component/MaterialInput/index.mjs +0 -37
  47. package/dist/component/TBanner/TBanner.module.css.js +0 -1
  48. package/dist/component/TBanner/TBanner.module.css.mjs +0 -35
  49. package/dist/component/TBanner/index.js +0 -2
  50. package/dist/component/TBanner/index.mjs +0 -341
  51. package/dist/component/TButton/TButton.module.css.js +0 -1
  52. package/dist/component/TButton/TButton.module.css.mjs +0 -26
  53. package/dist/component/TButton/index.js +0 -2
  54. package/dist/component/TButton/index.mjs +0 -186
  55. package/dist/component/TColorPicker/TColorPicker.module.css.js +0 -1
  56. package/dist/component/TColorPicker/TColorPicker.module.css.mjs +0 -13
  57. package/dist/component/TColorPicker/index.js +0 -2
  58. package/dist/component/TColorPicker/index.mjs +0 -62
  59. package/dist/component/TDate/index.js +0 -2
  60. package/dist/component/TDate/index.mjs +0 -145
  61. package/dist/component/TDatePicker/TDatePicker.module.css.js +0 -1
  62. package/dist/component/TDatePicker/TDatePicker.module.css.mjs +0 -45
  63. package/dist/component/TDatePicker/index.js +0 -2
  64. package/dist/component/TDatePicker/index.mjs +0 -167
  65. package/dist/component/TDrawer/TDrawer.module.css.js +0 -1
  66. package/dist/component/TDrawer/TDrawer.module.css.mjs +0 -49
  67. package/dist/component/TDrawer/index.js +0 -2
  68. package/dist/component/TDrawer/index.mjs +0 -111
  69. package/dist/component/TInput/TInput.module.css.js +0 -1
  70. package/dist/component/TInput/TInput.module.css.mjs +0 -21
  71. package/dist/component/TInput/index.js +0 -2
  72. package/dist/component/TInput/index.mjs +0 -75
  73. package/dist/component/TLayout/index.js +0 -2
  74. package/dist/component/TLayout/index.mjs +0 -53
  75. package/dist/component/TLine/TLine.module.css.js +0 -1
  76. package/dist/component/TLine/TLine.module.css.mjs +0 -19
  77. package/dist/component/TLine/index.js +0 -2
  78. package/dist/component/TLine/index.mjs +0 -35
  79. package/dist/component/TMark/TMark.module.css.js +0 -1
  80. package/dist/component/TMark/TMark.module.css.mjs +0 -7
  81. package/dist/component/TMark/index.js +0 -2
  82. package/dist/component/TMark/index.mjs +0 -52
  83. package/dist/component/TModal/TModal.module.css.js +0 -1
  84. package/dist/component/TModal/TModal.module.css.mjs +0 -33
  85. package/dist/component/TModal/index.js +0 -2
  86. package/dist/component/TModal/index.mjs +0 -110
  87. package/dist/component/TNotice/TNotice.module.css.js +0 -1
  88. package/dist/component/TNotice/TNotice.module.css.mjs +0 -27
  89. package/dist/component/TNotice/index.js +0 -4
  90. package/dist/component/TNotice/index.mjs +0 -40
  91. package/dist/component/TNotice/useNotice.js +0 -2
  92. package/dist/component/TNotice/useNotice.mjs +0 -19
  93. package/dist/component/TSearch/TSearch.module.css.js +0 -1
  94. package/dist/component/TSearch/TSearch.module.css.mjs +0 -21
  95. package/dist/component/TSearch/index.js +0 -2
  96. package/dist/component/TSearch/index.mjs +0 -73
  97. package/dist/component/TSpace/TSpace.module.css.js +0 -1
  98. package/dist/component/TSpace/TSpace.module.css.mjs +0 -23
  99. package/dist/component/TSpace/index.js +0 -2
  100. package/dist/component/TSpace/index.mjs +0 -49
  101. package/dist/component/TTable/TTable.module.css.js +0 -1
  102. package/dist/component/TTable/TTable.module.css.mjs +0 -25
  103. package/dist/component/TTable/index.js +0 -8
  104. package/dist/component/TTable/index.mjs +0 -154
  105. package/dist/component/TTooltip/TTooltip.module.css.js +0 -1
  106. package/dist/component/TTooltip/TTooltip.module.css.mjs +0 -17
  107. package/dist/component/TTooltip/index.js +0 -2
  108. package/dist/component/TTooltip/index.mjs +0 -34
  109. package/dist/component/TUpload/TUpload.module.css.js +0 -1
  110. package/dist/component/TUpload/TUpload.module.css.mjs +0 -15
  111. package/dist/component/TUpload/index.js +0 -2
  112. package/dist/component/TUpload/index.mjs +0 -152
  113. package/dist/index.mjs +0 -50
  114. package/dist/providers/NoticeProvider.js +0 -2
  115. package/dist/providers/NoticeProvider.mjs +0 -117
  116. package/dist/providers/ThemeProvider.js +0 -2
  117. package/dist/providers/ThemeProvider.mjs +0 -21
  118. package/dist/tango-ui-cw.css +0 -1
@@ -0,0 +1,19 @@
1
+ import type { PropsWithChildren, ReactNode } from "react";
2
+
3
+ export type NoticeType = "success" | "fail" | "caution";
4
+ export type NoticeVariant = "default" | "md";
5
+
6
+ export interface NoticeApi {
7
+ success: (message: ReactNode) => void;
8
+ fail: (message: ReactNode) => void;
9
+ caution: (message: ReactNode) => void;
10
+ md: {
11
+ success: (message: ReactNode) => void;
12
+ fail: (message: ReactNode) => void;
13
+ caution: (message: ReactNode) => void;
14
+ };
15
+ }
16
+
17
+ export declare function NoticeProvider(props: PropsWithChildren): JSX.Element;
18
+
19
+ export declare function useNotice(): NoticeApi;
@@ -0,0 +1,28 @@
1
+ import type { PropsWithChildren } from "react";
2
+
3
+ export type TangoLocale = "zh-CN" | "en-US" | (string & {});
4
+
5
+ export type TangoMessages = Record<string, Record<string, unknown>>;
6
+
7
+ export interface TangoI18nContextValue {
8
+ locale: TangoLocale;
9
+ setLocale: (nextLocale: TangoLocale) => void;
10
+ toggleLocale: () => void;
11
+ messages: TangoMessages;
12
+ t: (key: string, fallback?: string) => string;
13
+ }
14
+
15
+ export interface TangoI18nProviderProps extends PropsWithChildren {
16
+ locale?: TangoLocale;
17
+ defaultLocale?: TangoLocale;
18
+ onLocaleChange?: (nextLocale: TangoLocale) => void;
19
+ messages?: TangoMessages;
20
+ }
21
+
22
+ export declare function TangoI18nProvider(
23
+ props: TangoI18nProviderProps
24
+ ): JSX.Element;
25
+
26
+ export declare function useTangoI18n(): TangoI18nContextValue;
27
+
28
+ export declare function normalizeTangoLocale(locale: TangoLocale): TangoLocale;
@@ -0,0 +1,22 @@
1
+ import type { PropsWithChildren } from "react";
2
+
3
+ export type ThemeMode = "light" | "dark";
4
+ export type ThemeTokens = Record<string, string>;
5
+
6
+ export interface ThemeContextValue {
7
+ theme: ThemeMode;
8
+ setTheme: (nextTheme: ThemeMode) => void;
9
+ toggleTheme: () => void;
10
+ themeTokens: ThemeTokens;
11
+ setThemeTokens: (
12
+ nextTokensOrUpdater:
13
+ | ThemeTokens
14
+ | ((previousTokens: ThemeTokens) => ThemeTokens)
15
+ ) => void;
16
+ setThemeColor: (color: string, tokenList?: string[]) => void;
17
+ resetThemeTokens: () => void;
18
+ }
19
+
20
+ export declare function ThemeProvider(props: PropsWithChildren): JSX.Element;
21
+
22
+ export declare function useTheme(): ThemeContextValue;
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * tango-ui-cw postinstall peer-dependency checker
5
+ * Per NPM-Summary.md §10.3, warns if required peers are missing.
6
+ *
7
+ * Gracefully skips if the dist/ build output doesn't exist yet
8
+ * (e.g. during `npm install` in the library's own repo before first build).
9
+ */
10
+
11
+ const fs = require("fs");
12
+ const path = require("path");
13
+
14
+ // If dist/index.js doesn't exist, we're in a pre-build state — skip silently.
15
+ const distEntry = path.resolve(__dirname, "..", "index.js");
16
+ if (!fs.existsSync(distEntry)) {
17
+ process.exit(0);
18
+ }
19
+
20
+ const REQUIRED_PEERS = [
21
+ { name: "react", range: ">=18", hint: "React 18+ is required." },
22
+ { name: "react-dom", range: ">=18", hint: "ReactDOM 18+ is required." },
23
+ { name: "next", range: ">=14", hint: "Next.js 14+ is required for SSR/SSG components." },
24
+ { name: "tailwind-merge", range: "^3.6.0", hint: "tailwind-merge ^3.6.0 is required for class merging." },
25
+ { name: "tailwindcss", range: "^4", hint: "Tailwind CSS v4 is required for utility classes." },
26
+ ];
27
+
28
+ function getVersion(name) {
29
+ try {
30
+ const resolved = require.resolve(`${name}/package.json`, { paths: [process.cwd()] });
31
+ const pkg = require(resolved);
32
+ return pkg.version;
33
+ } catch {
34
+ return null;
35
+ }
36
+ }
37
+
38
+ function satisfies(version, range) {
39
+ if (!version) return false;
40
+ const major = parseInt(version.split(".")[0], 10);
41
+ if (range.startsWith(">=")) {
42
+ const min = parseInt(range.replace(">=", ""), 10);
43
+ return major >= min;
44
+ }
45
+ if (range.startsWith("^")) {
46
+ const min = parseInt(range.replace("^", "").split(".")[0], 10);
47
+ return major >= min;
48
+ }
49
+ return true;
50
+ }
51
+
52
+ let hasMissing = false;
53
+
54
+ for (const peer of REQUIRED_PEERS) {
55
+ const version = getVersion(peer.name);
56
+ if (!version) {
57
+ console.warn(
58
+ `[tango-ui-cw] ⚠️ Peer dependency "${peer.name}" (${peer.range}) is not installed. ${peer.hint}`
59
+ );
60
+ hasMissing = true;
61
+ } else if (!satisfies(version, peer.range)) {
62
+ console.warn(
63
+ `[tango-ui-cw] ⚠️ Peer dependency "${peer.name}@${version}" does not satisfy "${peer.range}". ${peer.hint}`
64
+ );
65
+ hasMissing = true;
66
+ }
67
+ }
68
+
69
+ if (hasMissing) {
70
+ console.warn(
71
+ `[tango-ui-cw] Some peer dependencies are missing or incompatible. The library may not work correctly.`
72
+ );
73
+ } else {
74
+ console.log(`[tango-ui-cw] ✅ All peer dependencies are satisfied.`);
75
+ }
@@ -0,0 +1,372 @@
1
+ @import "./theme.css";
2
+
3
+ /*
4
+ * 这个文件定义了全局的CSS变量,主要用于主题颜色和一些常用的样式变量。
5
+ * 通过使用CSS变量,可以方便地在整个应用中统一管理和修改主题颜色。
6
+ * 其中,:root选择器定义了默认的颜色变量,而[data-theme="dark"]选择器则定义了暗色模式下的颜色变量。
7
+ * 这样可以通过切换data-theme属性来实现主题的切换。
8
+ * 另外,还定义了一些透明色、表格背景、工具提示等相关的颜色变量,以便在不同组件中使用。
9
+ * 这些变量可以根据需要进行调整,以适应不同的设计需求和用户偏好.
10
+ * added by clayw on 20260210
11
+ */
12
+ :root {
13
+ --radius: 0.625rem;
14
+ /* 用于页面整体背景、大容器背景 */
15
+ --background: oklch(1 0 0);
16
+ --foreground: oklch(0.145 0 0);
17
+ /* ****** */
18
+
19
+ --card: oklch(1 0 0);
20
+ --card-foreground: oklch(0.145 0 0);
21
+ --popover: oklch(1 0 0);
22
+ --popover-foreground: oklch(0.145 0 0);
23
+ /* 按钮背景、品牌强调色、小区域 */
24
+ --primary: oklch(0.985 0 0);
25
+ --primary-foreground: oklch(0.205 0 0);
26
+ --success: oklch(0.72 0.19 149);
27
+ --success-foreground: oklch(0.985 0 0);
28
+ --destructive-foreground: oklch(0.985 0 0);
29
+ --input-accent: oklch(0.205 0 0);
30
+ --modal-bg: oklch(0.985 0 0);
31
+ --modal-ok-bg: oklch(0.205 0 0);
32
+ --modal-ok-fg: oklch(0.985 0 0);
33
+ --modal-cancel-bg: oklch(0.985 0 0);
34
+ --modal-cancel-fg: oklch(0.205 0 0);
35
+ --modal-shadow: 0 2px 10px color-mix(in oklch, var(--foreground) 10%, transparent);
36
+ --drawer-bg: oklch(0.985 0 0);
37
+ --drawer-ok-bg: oklch(0.205 0 0);
38
+ --drawer-ok-fg: oklch(0.985 0 0);
39
+ --drawer-cancel-bg: oklch(0.985 0 0);
40
+ --drawer-cancel-fg: oklch(0.205 0 0);
41
+ --datepicker-confirm-bg: oklch(0.205 0 0);
42
+ --datepicker-confirm-fg: oklch(0.985 0 0);
43
+ --datepicker-cancel-bg: oklch(0.985 0 0);
44
+ --datepicker-cancel-fg: oklch(0.205 0 0);
45
+ /* ****** */
46
+
47
+ --input-bg: oklch(0.985 0 0);
48
+ --input-shadow: 0 1px 3px color-mix(in oklch, var(--foreground) 8%, transparent);
49
+ --input-focus-shadow: 0 0 0 3px color-mix(in oklch, var(--input-accent) 25%, transparent);
50
+ --input-error-border: oklch(0.577 0.245 27.325);
51
+ --input-error-bg: oklch(0.97 0.014 27.325);
52
+ --input-error-fg: oklch(0.577 0.245 27.325);
53
+ --input-error-focus-shadow: 0 0 0 3px color-mix(in oklch, var(--input-error-border) 25%, transparent);
54
+
55
+ --secondary: oklch(0.97 0 0);
56
+ --secondary-foreground: oklch(0.205 0 0);
57
+ --muted: oklch(0.97 0 0);
58
+ --muted-foreground: oklch(0.556 0 0);
59
+ --accent: oklch(0.97 0 0);
60
+ --accent-foreground: oklch(0.205 0 0);
61
+ --destructive: oklch(0.577 0.245 27.325);
62
+ --border: oklch(0.922 0 0);
63
+ --input: oklch(0.922 0 0);
64
+ --sidebar: oklch(0.985 0 0);
65
+ --sidebar-foreground: oklch(0.145 0 0);
66
+ --sidebar-primary: oklch(0.205 0 0);
67
+ --sidebar-primary-foreground: oklch(0.985 0 0);
68
+ --sidebar-accent: oklch(0.97 0 0);
69
+ --sidebar-accent-foreground: oklch(0.205 0 0);
70
+ --sidebar-border: oklch(0.922 0 0);
71
+ --sidebar-ring: oklch(0.708 0 0);
72
+
73
+ /* 透明色 */
74
+ --transparent: rgba(0, 0, 0, 0);
75
+
76
+ /* Button 主题 token,组件源码只消费变量,不直接写死颜色 */
77
+ --button-outline-foreground: var(--foreground);
78
+ --button-transparent-border: color-mix(in oklch, var(--foreground) 35%, transparent);
79
+ --button-shadow-default: color-mix(in oklch, var(--foreground) 20%, transparent);
80
+ --button-enu-bg: color-mix(in oklch, var(--background) 86%, var(--foreground) 6%);
81
+ --button-enu-fg: var(--foreground);
82
+ --button-enu-shadow: 4px 4px 8px color-mix(in oklch, var(--foreground) 16%, transparent), -4px -4px 8px color-mix(in oklch, var(--background) 92%, white);
83
+ --button-enu-hover-shadow: inset 3px 3px 6px color-mix(in oklch, var(--foreground) 16%, transparent), inset -3px -3px 6px color-mix(in oklch, var(--background) 92%, white), 3px 3px 6px color-mix(in oklch, var(--foreground) 16%, transparent), -3px -3px 6px color-mix(in oklch, var(--background) 92%, white);
84
+ --button-enu-active-shadow: inset 4px 4px 8px color-mix(in oklch, var(--foreground) 22%, transparent), inset -4px -4px 8px color-mix(in oklch, var(--background) 92%, white);
85
+ --button-loading-light: var(--background);
86
+ --button-loading-dark: var(--foreground);
87
+
88
+ /* 用于Drawer组件亮色确认按钮颜色 */
89
+ --primary-drawer: oklch(0.205 0 0);
90
+ --primary-foreground-drawer: oklch(0.922 0 0);
91
+
92
+ --table-background: var(--card);
93
+ --table-hover: var(--muted-foreground);
94
+
95
+ --tooltip-background: oklch(0.205 0 0);
96
+ --tooltip-foreground: oklch(0.922 0 0);
97
+ --tooltip-border: oklch(0.205 0 0);
98
+ --tooltip-radius: var(--radius);
99
+ --tooltip-shadow: 0 2px 8px color-mix(in oklch, var(--foreground) 12%, transparent);
100
+
101
+ --ripple-color: oklch(0.205 0 0 / 20%);
102
+
103
+ /* MaterialButton 主题 token */
104
+ --material-button-ripple: color-mix(in oklch, var(--primary-foreground) 60%, transparent);
105
+
106
+ /* Space 主题 token */
107
+ --space-triangle-size: 50px;
108
+ --space-triangle-color: var(--primary);
109
+ --space-half-circle-w: 100px;
110
+ --space-half-circle-h: 50px;
111
+ --space-half-circle-color: var(--primary);
112
+
113
+ /* Layout 主题 token */
114
+ --layout-header-bg: oklch(0.88 0 0);
115
+ --layout-header-color: oklch(0.25 0 0);
116
+ --layout-header-height: 64px;
117
+ --layout-footer-bg: oklch(0.88 0 0);
118
+ --layout-footer-color: oklch(0.25 0 0);
119
+ --layout-footer-height: 48px;
120
+ --layout-sider-bg: oklch(0.82 0 0);
121
+ --layout-sider-color: oklch(0.25 0 0);
122
+ --layout-sider-width: 200px;
123
+ --layout-toc-bg: oklch(0.92 0 0);
124
+ --layout-toc-color: oklch(0.25 0 0);
125
+ --layout-toc-width: 180px;
126
+ --layout-content-bg: var(--background);
127
+ --layout-content-color: var(--foreground);
128
+ --layout-border: var(--border);
129
+
130
+ /* Line 主题 token */
131
+ --line-color: var(--border);
132
+
133
+ /* Mark 主题 token */
134
+ --mark-default-bg: oklch(0.92 0.07 90);
135
+ --mark-primary-bg: oklch(0.90 0.10 250);
136
+ --mark-success-bg: oklch(0.90 0.10 150);
137
+ --mark-warning-bg: oklch(0.92 0.12 80);
138
+ --mark-danger-bg: oklch(0.90 0.12 25);
139
+
140
+ /* Notice 主题 token */
141
+ --notice-bg: oklch(1 0 0 / 92%);
142
+ --notice-foreground: oklch(0.205 0 0);
143
+ --notice-radius: var(--radius);
144
+ --notice-shadow: 0 6px 16px color-mix(in oklch, var(--foreground) 8%, transparent), 0 3px 6px -4px color-mix(in oklch, var(--foreground) 12%, transparent), 0 9px 28px 8px color-mix(in oklch, var(--foreground) 5%, transparent);
145
+ --notice-success-text: oklch(0.52 0.17 149);
146
+ --notice-fail-text: oklch(0.58 0.24 27);
147
+ --notice-caution-text: oklch(0.68 0.16 60);
148
+
149
+ /* Upload 主题 token */
150
+ --upload-border: var(--border);
151
+ --upload-radius: var(--radius);
152
+ --upload-list-bg: var(--background);
153
+ --upload-item-text: var(--foreground);
154
+ --upload-item-hover-bg: var(--muted);
155
+ --upload-icon-color: var(--muted-foreground);
156
+ --upload-del-color: var(--muted-foreground);
157
+ --upload-del-hover-bg: var(--accent);
158
+
159
+ /* Banner 主题 token — 亮色(同色系:背景淡、边框中、图标深、文字暗) */
160
+ --banner-info-bg: oklch(0.95 0.04 250);
161
+ --banner-info-border: oklch(0.62 0.17 250);
162
+ --banner-info-icon: oklch(0.52 0.17 250);
163
+ --banner-info-text: oklch(0.30 0.09 250);
164
+
165
+ --banner-success-bg: oklch(0.94 0.05 149);
166
+ --banner-success-border: oklch(0.62 0.18 149);
167
+ --banner-success-icon: oklch(0.52 0.18 149);
168
+ --banner-success-text: oklch(0.30 0.11 149);
169
+
170
+ --banner-warning-bg: oklch(0.96 0.06 80);
171
+ --banner-warning-border: oklch(0.78 0.15 80);
172
+ --banner-warning-icon: oklch(0.68 0.16 60);
173
+ --banner-warning-text: oklch(0.38 0.11 60);
174
+
175
+ --banner-error-bg: oklch(0.94 0.04 25);
176
+ --banner-error-border: oklch(0.63 0.21 25);
177
+ --banner-error-icon: oklch(0.55 0.22 25);
178
+ --banner-error-text: oklch(0.32 0.13 25);
179
+
180
+ --banner-close-icon: oklch(0.45 0 0);
181
+ --banner-btn-text: oklch(0.35 0 0);
182
+ --banner-btn-border: color-mix(in oklch, var(--foreground) 30%, transparent);
183
+ }
184
+
185
+ [data-theme="dark"] {
186
+ --background: oklch(0.145 0 0);
187
+ --foreground: oklch(0.985 0 0);
188
+ --card: oklch(0.205 0 0);
189
+ --card-foreground: oklch(0.985 0 0);
190
+ --popover: oklch(0.205 0 0);
191
+ --popover-foreground: oklch(0.985 0 0);
192
+ --primary: oklch(0.205 0 0);
193
+ --primary-foreground: oklch(0.922 0 0);
194
+ --success: oklch(0.62 0.19 149);
195
+ --success-foreground: oklch(0.985 0 0);
196
+ --destructive-foreground: oklch(0.985 0 0);
197
+ --input-accent: oklch(0.985 0 0);
198
+ --modal-bg: oklch(0.205 0 0);
199
+ --modal-ok-bg: oklch(0.985 0 0);
200
+ --modal-ok-fg: oklch(0.205 0 0);
201
+ --modal-cancel-bg: oklch(0.205 0 0);
202
+ --modal-cancel-fg: oklch(0.985 0 0);
203
+ --modal-shadow: 0 2px 10px color-mix(in oklch, black 40%, transparent);
204
+ --drawer-bg: oklch(0.205 0 0);
205
+ --drawer-ok-bg: oklch(0.985 0 0);
206
+ --drawer-ok-fg: oklch(0.205 0 0);
207
+ --drawer-cancel-bg: oklch(0.205 0 0);
208
+ --drawer-cancel-fg: oklch(0.985 0 0);
209
+ --datepicker-confirm-bg: oklch(0.985 0 0);
210
+ --datepicker-confirm-fg: oklch(0.205 0 0);
211
+ --datepicker-cancel-bg: oklch(0.205 0 0);
212
+ --datepicker-cancel-fg: oklch(0.985 0 0);
213
+ --secondary: oklch(0.269 0 0);
214
+ --secondary-foreground: oklch(0.985 0 0);
215
+ --muted: oklch(0.269 0 0);
216
+ --muted-foreground: oklch(0.708 0 0);
217
+ --accent: oklch(0.269 0 0);
218
+ --accent-foreground: oklch(0.985 0 0);
219
+ --destructive: oklch(0.704 0.191 22.216);
220
+ --border: oklch(1 0 0 / 10%);
221
+ --input: oklch(1 0 0 / 15%);
222
+ --sidebar: oklch(0.205 0 0);
223
+ --sidebar-foreground: oklch(0.985 0 0);
224
+ --sidebar-primary: oklch(0.488 0.243 264.376);
225
+ --sidebar-primary-foreground: oklch(0.985 0 0);
226
+ --sidebar-accent: oklch(0.269 0 0);
227
+ --sidebar-accent-foreground: oklch(0.985 0 0);
228
+ --sidebar-border: oklch(1 0 0 / 10%);
229
+ --sidebar-ring: oklch(0.556 0 0);
230
+
231
+ /* 用于Drawer组件暗色确认按钮颜色 */
232
+ --primary-drawer: oklch(0.985 0 0);
233
+ --primary-foreground-drawer: oklch(0.205 0 0);
234
+
235
+ --button-outline-foreground: var(--foreground);
236
+ --button-transparent-border: color-mix(in oklch, var(--foreground) 45%, transparent);
237
+ --button-shadow-default: color-mix(in oklch, var(--foreground) 35%, transparent);
238
+ --button-enu-bg: color-mix(in oklch, var(--background) 78%, var(--foreground) 20%);
239
+ --button-enu-fg: var(--foreground);
240
+ --button-enu-shadow: 4px 4px 8px color-mix(in oklch, black 40%, transparent), -4px -4px 8px color-mix(in oklch, white 14%, transparent);
241
+ --button-enu-hover-shadow: inset 3px 3px 6px color-mix(in oklch, black 45%, transparent), inset -3px -3px 6px color-mix(in oklch, white 16%, transparent), 3px 3px 6px color-mix(in oklch, black 45%, transparent), -3px -3px 6px color-mix(in oklch, white 16%, transparent);
242
+ --button-enu-active-shadow: inset 4px 4px 8px color-mix(in oklch, black 52%, transparent), inset -4px -4px 8px color-mix(in oklch, white 20%, transparent);
243
+ --button-loading-light: var(--background);
244
+ --button-loading-dark: var(--foreground);
245
+
246
+ --table-background: var(--card);
247
+ --table-hover: var(--muted-foreground);
248
+
249
+ --tooltip-background: oklch(0.922 0 0);
250
+ --tooltip-foreground: oklch(0.205 0 0);
251
+ --tooltip-border: oklch(0.922 0 0);
252
+ --tooltip-radius: var(--radius);
253
+ --tooltip-shadow: 0 2px 8px color-mix(in oklch, black 30%, transparent);
254
+
255
+ --input-bg: oklch(0.205 0 0);
256
+ --input-shadow: 0 1px 3px color-mix(in oklch, black 30%, transparent);
257
+ --input-focus-shadow: 0 0 0 3px color-mix(in oklch, var(--input-accent) 25%, transparent);
258
+ --input-error-border: oklch(0.704 0.191 22.216);
259
+ --input-error-bg: oklch(0.24 0.04 25);
260
+ --input-error-fg: oklch(0.704 0.191 22.216);
261
+ --input-error-focus-shadow: 0 0 0 3px color-mix(in oklch, var(--input-error-border) 25%, transparent);
262
+
263
+ /* Banner 主题 token — 暗色(同色系:背景深、边框中暗、图标亮、文字亮) */
264
+ --banner-info-bg: oklch(0.24 0.06 250);
265
+ --banner-info-border: oklch(0.45 0.15 250);
266
+ --banner-info-icon: oklch(0.65 0.18 250);
267
+ --banner-info-text: oklch(0.83 0.07 250);
268
+
269
+ --banner-success-bg: oklch(0.24 0.06 149);
270
+ --banner-success-border: oklch(0.45 0.15 149);
271
+ --banner-success-icon: oklch(0.65 0.19 149);
272
+ --banner-success-text: oklch(0.83 0.08 149);
273
+
274
+ --banner-warning-bg: oklch(0.27 0.06 80);
275
+ --banner-warning-border: oklch(0.50 0.13 80);
276
+ --banner-warning-icon: oklch(0.72 0.15 60);
277
+ --banner-warning-text: oklch(0.83 0.08 60);
278
+
279
+ --banner-error-bg: oklch(0.24 0.05 25);
280
+ --banner-error-border: oklch(0.45 0.16 25);
281
+ --banner-error-icon: oklch(0.65 0.22 25);
282
+ --banner-error-text: oklch(0.83 0.08 25);
283
+
284
+ --banner-close-icon: oklch(0.7 0 0);
285
+ --banner-btn-text: oklch(0.8 0 0);
286
+ --banner-btn-border: color-mix(in oklch, var(--foreground) 40%, transparent);
287
+
288
+ --material-button-ripple: color-mix(in oklch, var(--primary-foreground) 60%, transparent);
289
+
290
+ /* Space 主题 token */
291
+ --space-triangle-size: 50px;
292
+ --space-triangle-color: var(--primary);
293
+ --space-half-circle-w: 100px;
294
+ --space-half-circle-h: 50px;
295
+ --space-half-circle-color: var(--primary);
296
+
297
+ /* Layout 主题 token */
298
+ --layout-header-bg: oklch(0.28 0 0);
299
+ --layout-header-color: oklch(0.85 0 0);
300
+ --layout-header-height: 64px;
301
+ --layout-footer-bg: oklch(0.28 0 0);
302
+ --layout-footer-color: oklch(0.85 0 0);
303
+ --layout-footer-height: 48px;
304
+ --layout-sider-bg: oklch(0.22 0 0);
305
+ --layout-sider-color: oklch(0.85 0 0);
306
+ --layout-sider-width: 200px;
307
+ --layout-toc-bg: oklch(0.26 0 0);
308
+ --layout-toc-color: oklch(0.85 0 0);
309
+ --layout-toc-width: 180px;
310
+ --layout-content-bg: var(--background);
311
+ --layout-content-color: var(--foreground);
312
+ --layout-border: var(--border);
313
+
314
+ /* Line 主题 token */
315
+ --line-color: var(--border);
316
+
317
+ /* Mark 主题 token(暗色:饱和度更高、亮度更低) */
318
+ --mark-default-bg: oklch(0.50 0.10 90);
319
+ --mark-primary-bg: oklch(0.45 0.15 250);
320
+ --mark-success-bg: oklch(0.45 0.15 150);
321
+ --mark-warning-bg: oklch(0.50 0.15 80);
322
+ --mark-danger-bg: oklch(0.45 0.15 25);
323
+
324
+ /* Notice 主题 token */
325
+ --notice-bg: oklch(0.205 0 0 / 92%);
326
+ --notice-foreground: oklch(0.985 0 0);
327
+ --notice-radius: var(--radius);
328
+ --notice-shadow: 0 6px 16px color-mix(in oklch, black 40%, transparent), 0 3px 6px -4px color-mix(in oklch, black 30%, transparent), 0 9px 28px 8px color-mix(in oklch, black 20%, transparent);
329
+ --notice-success-text: oklch(0.72 0.19 149);
330
+ --notice-fail-text: oklch(0.70 0.19 22);
331
+ --notice-caution-text: oklch(0.78 0.15 60);
332
+
333
+ /* Upload 主题 token */
334
+ --upload-border: var(--border);
335
+ --upload-radius: var(--radius);
336
+ --upload-list-bg: var(--background);
337
+ --upload-item-text: var(--foreground);
338
+ --upload-item-hover-bg: var(--muted);
339
+ --upload-icon-color: var(--muted-foreground);
340
+ --upload-del-color: var(--muted-foreground);
341
+ --upload-del-hover-bg: var(--accent);
342
+ }
343
+
344
+ /* Layout 响应式:窄屏下 Sider/Toc 变全宽 */
345
+ @media (max-width: 768px) {
346
+ :root,
347
+ [data-theme="dark"] {
348
+ --layout-sider-width: 100%;
349
+ --layout-toc-width: 100%;
350
+ --layout-header-height: 48px;
351
+ --layout-footer-height: 40px;
352
+ }
353
+ }
354
+
355
+ /* Notice 动画 */
356
+ @keyframes noticeSlideDown {
357
+ 0% { transform: translateX(-50%) translateY(-50px); opacity: 0; }
358
+ 80% { transform: translateX(-50%) translateY(4px); opacity: 1; }
359
+ 100% { transform: translateX(-50%) translateY(0); opacity: 1; }
360
+ }
361
+ @keyframes noticeSlideUpFade {
362
+ from { transform: translateX(-50%) translateY(0); opacity: 1; }
363
+ to { transform: translateX(-50%) translateY(-20px); opacity: 0; }
364
+ }
365
+ @keyframes noticeSlideFromBottom {
366
+ from { transform: translateX(0); opacity: 0; }
367
+ to { transform: translateX(2%); opacity: 1; }
368
+ }
369
+ @keyframes noticeSlideToBottom {
370
+ from { transform: translateX(2%); opacity: 1; }
371
+ to { transform: translateX(0); opacity: 0; }
372
+ }
@@ -0,0 +1,13 @@
1
+ :root {
2
+ --theme-transition-duration: 0.22s;
3
+ --theme-transition-ease: ease;
4
+ }
5
+
6
+ html[data-theme],
7
+ html[data-theme] body {
8
+ transition:
9
+ background-color var(--theme-transition-duration) var(--theme-transition-ease),
10
+ color var(--theme-transition-duration) var(--theme-transition-ease),
11
+ border-color var(--theme-transition-duration) var(--theme-transition-ease),
12
+ box-shadow var(--theme-transition-duration) var(--theme-transition-ease);
13
+ }
package/package.json CHANGED
@@ -1,48 +1,65 @@
1
- {
2
- "name": "tango-ui-cw",
3
- "version": "0.9.8",
4
- "description": "A lightweight ui library with ClayW",
5
- "main": "dist/index.js",
6
- "module": "dist/index.mjs",
7
- "author": "ClayW",
8
- "license": "MIT",
9
- "scripts": {
10
- "build": "vite build && copyfiles -f src/styles/client.js dist/client.mjs",
11
- "prepublishOnly": "npm run build"
12
- },
13
- "devDependencies": {
14
- "@vitejs/plugin-react": "^4.4.1",
15
- "copyfiles": "^2.4.1",
16
- "rollup-plugin-preserve-directives": "^0.4.0",
17
- "vite": "^6.3.5"
18
- },
19
- "peerDependencies": {
20
- "react": "^18.0.0 || ^19.0.0",
21
- "react-dom": "^18.0.0 || ^19.0.0"
22
- },
23
- "peerDependenciesMeta": {
24
- "react": {
25
- "optional": false
26
- },
27
- "react-dom": {
28
- "optional": true
29
- }
30
- },
31
- "files": [
32
- "dist"
33
- ],
34
- "exports": {
35
- ".": {
36
- "import": "./dist/index.mjs",
37
- "require": "./dist/index.js"
38
- },
39
- "./client": {
40
- "import": "./dist/client.mjs",
41
- "require": "./dist/client.mjs"
42
- },
43
- "./tango.css": "./dist/tango-ui-cw.css"
44
- },
45
- "dependencies": {
46
- "prop-types": "^15.8.1"
47
- }
48
- }
1
+ {
2
+ "name": "tango-ui-cw",
3
+ "version": "1.0.0",
4
+ "description": "A lightweight ui library with ClayW",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "author": "ClayW",
9
+ "license": "MIT",
10
+ "type": "module",
11
+ "scripts": {
12
+ "build": "vite build && node scripts/post-build.js",
13
+ "postinstall": "node ./dist/scripts/check-peers.js",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "devDependencies": {
17
+ "@vitejs/plugin-react": "^4.4.1",
18
+ "vite": "^6.3.5"
19
+ },
20
+ "peerDependencies": {
21
+ "next": ">=14",
22
+ "react": ">=18",
23
+ "react-dom": ">=18",
24
+ "tailwind-merge": "^3.6.0",
25
+ "tailwindcss": "^4"
26
+ },
27
+ "peerDependenciesMeta": {
28
+ "react": {
29
+ "optional": false
30
+ },
31
+ "react-dom": {
32
+ "optional": true
33
+ },
34
+ "next": {
35
+ "optional": true
36
+ },
37
+ "tailwind-merge": {
38
+ "optional": false
39
+ },
40
+ "tailwindcss": {
41
+ "optional": false
42
+ }
43
+ },
44
+ "files": [
45
+ "dist"
46
+ ],
47
+ "exports": {
48
+ ".": {
49
+ "import": {
50
+ "types": "./dist/index.d.ts",
51
+ "default": "./dist/index.js"
52
+ },
53
+ "require": {
54
+ "types": "./dist/index.d.cts",
55
+ "default": "./dist/index.cjs"
56
+ }
57
+ },
58
+ "./style.css": "./dist/styles/global.css",
59
+ "./styles/*": "./dist/styles/*",
60
+ "./providers/*": "./dist/providers/*"
61
+ },
62
+ "sideEffects": [
63
+ "**/*.css"
64
+ ]
65
+ }
@@ -1 +0,0 @@
1
- "use strict";const A="data:image/png;base64,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";module.exports=A;
@@ -1,4 +0,0 @@
1
- const A = "data:image/png;base64,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";
2
- export {
3
- A as default
4
- };