@zmzai/theme 0.8.3 → 0.8.4
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/package.json +9 -7
- package/src/components/app-shell/AppShell.tsx +1 -1
- package/src/components/app-shell/CommandPalette.tsx +1 -1
- package/src/components/badge/Badge.tsx +2 -1
- package/src/components/button/Button.tsx +1 -1
- package/src/components/button/button.styles.ts +3 -3
- package/src/components/card/card.styles.ts +1 -1
- package/src/components/dialog/Dialog.tsx +1 -1
- package/src/components/diff-view/diff-view.css +3 -3
- package/src/components/landing/landing.css +2 -3
- package/src/components/layout-grid/LayoutGrid.tsx +1 -1
- package/src/components/magnetic-button/MagneticButton.tsx +2 -2
- package/src/components/model-selector/model-selector.css +29 -29
- package/src/components/moving-border/MovingBorder.tsx +1 -1
- package/src/components/multi-step-loader/MultiStepLoader.tsx +1 -1
- package/src/components/notch/Notch.tsx +1 -1
- package/src/components/sticky-banner/StickyBanner.tsx +2 -2
- package/src/components/timeline/Timeline.tsx +1 -1
- package/src/components/tool-card/ToolCard.tsx +1 -1
- package/src/components/tooltip/Tooltip.tsx +1 -1
- package/src/tokens/theme.css +8 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zmzai/theme",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "zmzai 全品牌设计系统 — Radix UI + framer-motion + Tailwind v4 + MiSans",
|
|
@@ -60,6 +60,12 @@
|
|
|
60
60
|
"README.md",
|
|
61
61
|
"LICENSE"
|
|
62
62
|
],
|
|
63
|
+
"scripts": {
|
|
64
|
+
"build": "tsc -p tsconfig.json --noEmit",
|
|
65
|
+
"typecheck": "tsc --noEmit",
|
|
66
|
+
"playground": "vite playground --port 5174",
|
|
67
|
+
"prepublishOnly": "pnpm typecheck"
|
|
68
|
+
},
|
|
63
69
|
"peerDependencies": {
|
|
64
70
|
"react": "^19.0.0",
|
|
65
71
|
"react-dom": "^19.0.0",
|
|
@@ -99,9 +105,5 @@
|
|
|
99
105
|
"remark-gfm": "^4.0.1",
|
|
100
106
|
"tailwind-merge": "^2.5.0"
|
|
101
107
|
},
|
|
102
|
-
"
|
|
103
|
-
|
|
104
|
-
"typecheck": "tsc --noEmit",
|
|
105
|
-
"playground": "vite playground --port 5174"
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
+
"packageManager": "pnpm@10.34.5+sha512.a4ee05f2f73658255bd6a89859c065a45c28a57daefae2c893a168ee2b73168c37b91e83e57ea67654ad03f03031746430e8bce38e362e042605fb8abc80192e"
|
|
109
|
+
}
|
|
@@ -143,7 +143,7 @@ export function AppShell({
|
|
|
143
143
|
{/* 移动端抽屉 */}
|
|
144
144
|
{drawerOpen ? (
|
|
145
145
|
<div className="fixed inset-0 z-40 lg:hidden" role="presentation">
|
|
146
|
-
<div className="absolute inset-0 bg-
|
|
146
|
+
<div className="absolute inset-0 bg-ink/40" onClick={() => setDrawerOpen(false)} />
|
|
147
147
|
<nav className="absolute inset-y-0 left-0 flex w-64 flex-col gap-5 overflow-y-auto border-r border-line bg-bg px-3 py-4">
|
|
148
148
|
{brandBlock}
|
|
149
149
|
<SidebarSections sections={sections} pathname={pathname} link={Link} onNavigate={() => setDrawerOpen(false)} />
|
|
@@ -79,7 +79,7 @@ export function CommandPalette({ open, onClose, items, placeholder = "搜索页
|
|
|
79
79
|
};
|
|
80
80
|
|
|
81
81
|
return (
|
|
82
|
-
<div className="fixed inset-0 z-50 flex items-start justify-center bg-
|
|
82
|
+
<div className="fixed inset-0 z-50 flex items-start justify-center bg-ink/40 px-4 pt-[12vh]" onClick={onClose} role="presentation">
|
|
83
83
|
<div
|
|
84
84
|
className="w-full max-w-xl overflow-hidden rounded-xl border border-line bg-bg shadow-lg"
|
|
85
85
|
onClick={(event) => event.stopPropagation()}
|
|
@@ -11,6 +11,7 @@ export const badgeVariants = cva(
|
|
|
11
11
|
variant: {
|
|
12
12
|
solid: "bg-ink text-bg",
|
|
13
13
|
outline: "border border-line text-ink-2",
|
|
14
|
+
live: "border border-live/30 bg-live/10 text-live",
|
|
14
15
|
success: "border border-success/30 bg-success/10 text-success",
|
|
15
16
|
warning: "border border-warning/30 bg-warning/10 text-warning",
|
|
16
17
|
danger: "border border-danger/30 bg-danger/10 text-danger",
|
|
@@ -26,7 +27,7 @@ export const badgeVariants = cva(
|
|
|
26
27
|
);
|
|
27
28
|
|
|
28
29
|
export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
29
|
-
variant?: "solid" | "outline" | "success" | "warning" | "danger" | "accent";
|
|
30
|
+
variant?: "solid" | "outline" | "live" | "success" | "warning" | "danger" | "accent";
|
|
30
31
|
size?: "sm" | "md";
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -17,7 +17,7 @@ export interface ButtonProps
|
|
|
17
17
|
* Button — primary interactive element.
|
|
18
18
|
*
|
|
19
19
|
* - Uses framer-motion for hover/active micro-interactions
|
|
20
|
-
* -
|
|
20
|
+
* - Sharp radius (rounded-sm, 3px) on all variants
|
|
21
21
|
* - `loading` prop shows a spinner and disables
|
|
22
22
|
*
|
|
23
23
|
* @example
|
|
@@ -26,14 +26,14 @@ export const buttonVariants = cva(
|
|
|
26
26
|
variants: {
|
|
27
27
|
variant: {
|
|
28
28
|
primary:
|
|
29
|
-
//
|
|
30
|
-
"bg-
|
|
29
|
+
// 反色按钮:交互结构挂 accent(v0.8.4 收敛,与 ink 值同),文字用 accent-ink 而非硬编码 text-white
|
|
30
|
+
"bg-accent text-accent-ink hover:shadow-md active:scale-[0.98]",
|
|
31
31
|
secondary:
|
|
32
32
|
"border border-line text-ink hover:border-ink hover:bg-surface-2 active:scale-[0.98]",
|
|
33
33
|
ghost:
|
|
34
34
|
"text-ink-2 hover:bg-surface-2 hover:text-ink active:scale-[0.98]",
|
|
35
35
|
danger:
|
|
36
|
-
"bg-danger text-
|
|
36
|
+
"bg-danger text-accent-ink hover:shadow-md active:scale-[0.98]",
|
|
37
37
|
},
|
|
38
38
|
size: {
|
|
39
39
|
sm: "h-8 px-4 text-xs",
|
|
@@ -14,7 +14,7 @@ export const cardVariants = cva(
|
|
|
14
14
|
variant: {
|
|
15
15
|
default: "border-line",
|
|
16
16
|
interactive:
|
|
17
|
-
"border-line hover:border-ink hover:-translate-y-0.5 hover:shadow-
|
|
17
|
+
"border-line hover:border-ink hover:-translate-y-0.5 hover:shadow-lg cursor-pointer",
|
|
18
18
|
surface: "bg-surface border-line",
|
|
19
19
|
},
|
|
20
20
|
padding: {
|
|
@@ -44,7 +44,7 @@ export function DialogContent({ children, className }: DialogContentProps) {
|
|
|
44
44
|
animate={{ opacity: 1 }}
|
|
45
45
|
exit={{ opacity: 0 }}
|
|
46
46
|
transition={{ duration: 0.2 }}
|
|
47
|
-
className="fixed inset-0 z-50 bg-
|
|
47
|
+
className="fixed inset-0 z-50 bg-ink/40 backdrop-blur-sm"
|
|
48
48
|
/>
|
|
49
49
|
</DialogPrimitive.Overlay>
|
|
50
50
|
<DialogPrimitive.Content asChild>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
.diff-summary { display: flex; justify-content: space-between; gap: 0.75rem; font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.07em; text-transform: uppercase; color: var(--color-muted); }
|
|
4
4
|
.diff-summary-stats { display: inline-flex; gap: 0.5rem; }
|
|
5
5
|
.diff-add-count { color: var(--color-success); font-style: normal; }
|
|
6
|
-
.diff-del-count { color:
|
|
6
|
+
.diff-del-count { color: var(--color-danger); font-style: normal; }
|
|
7
7
|
.diff-file { border: 1px solid var(--color-line); border-radius: var(--radius); background: var(--color-surface); overflow: hidden; }
|
|
8
8
|
.diff-file-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.4rem 0.6rem; border-bottom: 1px solid var(--color-line); background: var(--color-surface-strong); }
|
|
9
9
|
.diff-file-path { font-family: var(--font-mono); font-size: 0.6875rem; color: var(--color-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
.diff-text { padding-left: 0.5rem; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
15
15
|
.diff-line.hunk { background: color-mix(in oklab, var(--color-accent-ink) 82%, var(--color-accent)); color: var(--color-accent-strong); }
|
|
16
16
|
.diff-line.add { background: color-mix(in oklab, var(--color-success) 16%, var(--color-surface)); color: var(--color-ink); }
|
|
17
|
-
.diff-line.remove { background: color-mix(in oklab,
|
|
17
|
+
.diff-line.remove { background: color-mix(in oklab, var(--color-danger) 14%, var(--color-surface)); color: var(--color-ink); }
|
|
18
18
|
.diff-line.meta { color: var(--color-muted); background: var(--color-surface); }
|
|
19
19
|
.diff-line.context { color: var(--color-muted); background: var(--color-surface); }
|
|
20
20
|
.diff-line.add .diff-gutter { color: var(--color-success); }
|
|
21
|
-
.diff-line.remove .diff-gutter { color:
|
|
21
|
+
.diff-line.remove .diff-gutter { color: var(--color-danger); }
|
|
22
22
|
.diff-preview { max-height: min(48dvh, 34rem); margin: 0; overflow: auto; padding: 0.75rem; border: 1px solid var(--color-line); background: var(--color-ink); color: var(--color-paper); font-family: var(--font-mono); font-size: 0.65625rem; line-height: 1.7; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
}
|
|
302
302
|
|
|
303
303
|
.why-card.dark .why-card-icon {
|
|
304
|
-
border-color:
|
|
304
|
+
border-color: color-mix(in oklab, var(--color-bg) 20%, transparent);
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
/* ── Integration chips ── */
|
|
@@ -425,6 +425,5 @@
|
|
|
425
425
|
.nav-shell.floating .site-nav {
|
|
426
426
|
border-radius: var(--radius-pill);
|
|
427
427
|
border-color: transparent;
|
|
428
|
-
box-shadow:
|
|
429
|
-
0 1px 3px oklch(0.15 0.010 30 / 0.06);
|
|
428
|
+
box-shadow: var(--shadow-lg);
|
|
430
429
|
}
|
|
@@ -78,7 +78,7 @@ export function LayoutGrid({ items, className }: LayoutGridProps) {
|
|
|
78
78
|
<motion.div
|
|
79
79
|
layoutId={`layout-card-${activeItem.id}`}
|
|
80
80
|
onClick={(e) => e.stopPropagation()}
|
|
81
|
-
className="relative max-h-[85vh] w-full max-w-2xl overflow-y-auto rounded-xl border border-line bg-bg p-6 shadow-
|
|
81
|
+
className="relative max-h-[85vh] w-full max-w-2xl overflow-y-auto rounded-xl border border-line bg-bg p-6 shadow-xl"
|
|
82
82
|
>
|
|
83
83
|
{/* Close button */}
|
|
84
84
|
<button
|
|
@@ -25,7 +25,7 @@ export interface MagneticButtonProps
|
|
|
25
25
|
* layout shift.
|
|
26
26
|
*
|
|
27
27
|
* @example
|
|
28
|
-
* <MagneticButton className="rounded-full bg-ink px-6 py-3 text-
|
|
28
|
+
* <MagneticButton className="rounded-full bg-ink px-6 py-3 text-accent-ink">
|
|
29
29
|
* 立即开始
|
|
30
30
|
* </MagneticButton>
|
|
31
31
|
*/
|
|
@@ -68,7 +68,7 @@ export function MagneticButton({
|
|
|
68
68
|
onMouseLeave={handleMouseLeave}
|
|
69
69
|
style={{ x: springX, y: springY }}
|
|
70
70
|
className={cn(
|
|
71
|
-
"relative inline-flex cursor-pointer items-center justify-center rounded-full bg-ink px-6 py-3 text-sm font-medium text-
|
|
71
|
+
"relative inline-flex cursor-pointer items-center justify-center rounded-full bg-ink px-6 py-3 text-sm font-medium text-accent-ink transition-colors hover:bg-ink/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:cursor-not-allowed disabled:opacity-50",
|
|
72
72
|
className
|
|
73
73
|
)}
|
|
74
74
|
{...props}
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
height: 2.25rem;
|
|
9
9
|
padding: 0 0.75rem;
|
|
10
10
|
border-radius: var(--radius-sm, 2px);
|
|
11
|
-
border: 1px solid var(--color-line
|
|
12
|
-
background: var(--color-bg
|
|
11
|
+
border: 1px solid var(--color-line);
|
|
12
|
+
background: var(--color-bg);
|
|
13
13
|
font-size: 0.875rem;
|
|
14
14
|
font-weight: 500;
|
|
15
|
-
color: var(--color-ink
|
|
15
|
+
color: var(--color-ink);
|
|
16
16
|
cursor: pointer;
|
|
17
17
|
outline: none;
|
|
18
18
|
transition: border-color 0.15s ease;
|
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.ms-trigger:hover {
|
|
23
|
-
border-color:
|
|
23
|
+
border-color: var(--color-ink-3);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
.ms-trigger:focus-visible {
|
|
27
|
-
border-color: var(--color-ink
|
|
27
|
+
border-color: var(--color-ink);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
.ms-trigger-placeholder {
|
|
31
|
-
color: var(--color-ink-3
|
|
31
|
+
color: var(--color-ink-3);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
.ms-trigger-chevron {
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
max-height: 28rem;
|
|
47
47
|
overflow-y: auto;
|
|
48
48
|
border-radius: var(--radius-sm, 2px);
|
|
49
|
-
border: 1px solid var(--color-line
|
|
50
|
-
background: var(--color-bg
|
|
49
|
+
border: 1px solid var(--color-line);
|
|
50
|
+
background: var(--color-bg);
|
|
51
51
|
box-shadow: var(--shadow-xl);
|
|
52
52
|
padding: 0.25rem;
|
|
53
53
|
}
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
align-items: center;
|
|
63
63
|
gap: 0.5rem;
|
|
64
64
|
padding: 0.5rem 0.5rem 0.25rem;
|
|
65
|
-
border-bottom: 1px solid var(--color-line
|
|
65
|
+
border-bottom: 1px solid var(--color-line);
|
|
66
66
|
margin-bottom: 0.25rem;
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -70,20 +70,20 @@
|
|
|
70
70
|
flex: 1;
|
|
71
71
|
height: 1.75rem;
|
|
72
72
|
padding: 0 0.5rem;
|
|
73
|
-
border: 1px solid var(--color-line
|
|
73
|
+
border: 1px solid var(--color-line);
|
|
74
74
|
border-radius: var(--radius-sm, 2px);
|
|
75
|
-
background: var(--color-bg
|
|
75
|
+
background: var(--color-bg);
|
|
76
76
|
font-size: 0.8125rem;
|
|
77
|
-
color: var(--color-ink
|
|
77
|
+
color: var(--color-ink);
|
|
78
78
|
outline: none;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
.ms-search-input::placeholder {
|
|
82
|
-
color: var(--color-ink-3
|
|
82
|
+
color: var(--color-ink-3);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
.ms-search-input:focus {
|
|
86
|
-
border-color: var(--color-ink
|
|
86
|
+
border-color: var(--color-ink);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/* Featured section */
|
|
@@ -109,12 +109,12 @@
|
|
|
109
109
|
|
|
110
110
|
.ms-featured-item:hover,
|
|
111
111
|
.ms-featured-item:focus-visible {
|
|
112
|
-
background: var(--color-surface-2
|
|
112
|
+
background: var(--color-surface-2);
|
|
113
113
|
outline: none;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
.ms-featured-item.ms-selected {
|
|
117
|
-
background: var(--color-surface-2
|
|
117
|
+
background: var(--color-surface-2);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
.ms-featured-icon {
|
|
@@ -132,14 +132,14 @@
|
|
|
132
132
|
.ms-featured-name {
|
|
133
133
|
font-size: 0.875rem;
|
|
134
134
|
font-weight: 500;
|
|
135
|
-
color: var(--color-ink
|
|
135
|
+
color: var(--color-ink);
|
|
136
136
|
line-height: 1.3;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
.ms-featured-desc {
|
|
140
140
|
margin-top: 0.125rem;
|
|
141
141
|
font-size: 0.75rem;
|
|
142
|
-
color: var(--color-ink-2
|
|
142
|
+
color: var(--color-ink-2);
|
|
143
143
|
line-height: 1.3;
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
.ms-separator {
|
|
154
154
|
margin: 0.375rem 0.5rem;
|
|
155
155
|
height: 1px;
|
|
156
|
-
background: var(--color-line
|
|
156
|
+
background: var(--color-line);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
/* Channel group */
|
|
@@ -173,15 +173,15 @@
|
|
|
173
173
|
font: inherit;
|
|
174
174
|
font-size: 0.8125rem;
|
|
175
175
|
font-weight: 500;
|
|
176
|
-
color: var(--color-ink-2
|
|
176
|
+
color: var(--color-ink-2);
|
|
177
177
|
border-radius: var(--radius-sm, 2px);
|
|
178
178
|
transition: background 0.1s ease, color 0.1s ease;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
.ms-channel-trigger:hover,
|
|
182
182
|
.ms-channel-trigger:focus-visible {
|
|
183
|
-
background: var(--color-surface-2
|
|
184
|
-
color: var(--color-ink
|
|
183
|
+
background: var(--color-surface-2);
|
|
184
|
+
color: var(--color-ink);
|
|
185
185
|
outline: none;
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
|
|
204
204
|
.ms-channel-count {
|
|
205
205
|
font-size: 0.6875rem;
|
|
206
|
-
color: var(--color-ink-3
|
|
206
|
+
color: var(--color-ink-3);
|
|
207
207
|
font-weight: 400;
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -222,7 +222,7 @@
|
|
|
222
222
|
cursor: pointer;
|
|
223
223
|
font: inherit;
|
|
224
224
|
font-size: 0.8125rem;
|
|
225
|
-
color: var(--color-ink-2
|
|
225
|
+
color: var(--color-ink-2);
|
|
226
226
|
border-radius: var(--radius-sm, 2px);
|
|
227
227
|
transition: background 0.1s ease;
|
|
228
228
|
width: 100%;
|
|
@@ -231,13 +231,13 @@
|
|
|
231
231
|
|
|
232
232
|
.ms-model-item:hover,
|
|
233
233
|
.ms-model-item:focus-visible {
|
|
234
|
-
background: var(--color-surface-2
|
|
235
|
-
color: var(--color-ink
|
|
234
|
+
background: var(--color-surface-2);
|
|
235
|
+
color: var(--color-ink);
|
|
236
236
|
outline: none;
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
.ms-model-item.ms-selected {
|
|
240
|
-
color: var(--color-ink
|
|
240
|
+
color: var(--color-ink);
|
|
241
241
|
font-weight: 500;
|
|
242
242
|
}
|
|
243
243
|
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
|
|
263
263
|
.ms-model-meta {
|
|
264
264
|
font-size: 0.6875rem;
|
|
265
|
-
color: var(--color-ink-3
|
|
265
|
+
color: var(--color-ink-3);
|
|
266
266
|
font-weight: 400;
|
|
267
267
|
flex-shrink: 0;
|
|
268
268
|
}
|
|
@@ -272,5 +272,5 @@
|
|
|
272
272
|
padding: 1.5rem 1rem;
|
|
273
273
|
text-align: center;
|
|
274
274
|
font-size: 0.8125rem;
|
|
275
|
-
color: var(--color-ink-3
|
|
275
|
+
color: var(--color-ink-3);
|
|
276
276
|
}
|
|
@@ -21,7 +21,7 @@ export interface MovingBorderProps {
|
|
|
21
21
|
*
|
|
22
22
|
* Uses CSS `@property --angle` for a smooth rotating light beam around
|
|
23
23
|
* the border. Based on Aceternity's Moving Border, adapted to zmzai's
|
|
24
|
-
*
|
|
24
|
+
* brand accent (ink since v0.8.3). Only the border moves — inner content stays static.
|
|
25
25
|
*
|
|
26
26
|
* @example
|
|
27
27
|
* <MovingBorder duration={5}>
|
|
@@ -49,7 +49,7 @@ export function MultiStepLoader({
|
|
|
49
49
|
transition={{ type: "spring", stiffness: 400, damping: 25 }}
|
|
50
50
|
className="flex h-5 w-5 items-center justify-center rounded-full bg-ink"
|
|
51
51
|
>
|
|
52
|
-
<svg className="h-3 w-3 text-
|
|
52
|
+
<svg className="h-3 w-3 text-bg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3">
|
|
53
53
|
<polyline points="20 6 9 17 4 12" />
|
|
54
54
|
</svg>
|
|
55
55
|
</motion.div>
|
|
@@ -33,7 +33,7 @@ export function Notch({ children, visible = false, className, ...props }: NotchP
|
|
|
33
33
|
exit={{ y: -60, opacity: 0 }}
|
|
34
34
|
transition={{ duration: 0.35, ease: [0.16, 1, 0.3, 1] }}
|
|
35
35
|
className={cn(
|
|
36
|
-
"pointer-events-auto flex items-center gap-2 rounded-full border border-line bg-ink px-4 py-2 text-sm text-
|
|
36
|
+
"pointer-events-auto flex items-center gap-2 rounded-full border border-line bg-ink px-4 py-2 text-sm text-accent-ink shadow-lg",
|
|
37
37
|
className
|
|
38
38
|
)}
|
|
39
39
|
{...props}
|
|
@@ -16,8 +16,8 @@ export interface StickyBannerProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
16
16
|
|
|
17
17
|
const variantStyles: Record<BannerVariant, string> = {
|
|
18
18
|
info: "bg-surface text-ink border-line",
|
|
19
|
-
warning: "bg-
|
|
20
|
-
danger: "
|
|
19
|
+
warning: "border-warning bg-warning-tint text-warning",
|
|
20
|
+
danger: "border-danger bg-danger-tint text-danger",
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -73,7 +73,7 @@ function TimelineItemRow({ item, isLast }: { item: TimelineItem; isLast: boolean
|
|
|
73
73
|
<div className="relative z-10 flex-shrink-0 pt-0.5">
|
|
74
74
|
{status === "done" && (
|
|
75
75
|
<div className="flex h-3.5 w-3.5 items-center justify-center rounded-full bg-ink">
|
|
76
|
-
<svg className="h-2 w-2 text-
|
|
76
|
+
<svg className="h-2 w-2 text-bg" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="2.5">
|
|
77
77
|
<polyline points="10 3 5 8 2 5" />
|
|
78
78
|
</svg>
|
|
79
79
|
</div>
|
|
@@ -33,7 +33,7 @@ export function ToolCard({ call, sessionIdle = false }: { call: ToolCall; sessio
|
|
|
33
33
|
<span className="tool-card-glyph" aria-hidden><Icon name={state.status === "completed" ? "check" : interrupted || state.status === "error" ? "cross" : "chevron-down"} size={12} /></span>
|
|
34
34
|
<span className="tool-card-label">{title}</span>
|
|
35
35
|
{(state.status === "error" || interrupted) && <Badge variant="danger" size="sm">失败</Badge>}
|
|
36
|
-
{running && !interrupted && <Badge variant="
|
|
36
|
+
{running && !interrupted && <Badge variant="live" size="sm">运行中</Badge>}
|
|
37
37
|
{toolDuration(call) && <span className="tool-card-duration">{toolDuration(call)}</span>}
|
|
38
38
|
<Icon name="chevron-down" size={12} className={isOpen ? "tool-card-chevron open" : "tool-card-chevron"} />
|
|
39
39
|
</button>
|
|
@@ -36,7 +36,7 @@ export function Tooltip({ children, content, side = "top", className }: TooltipP
|
|
|
36
36
|
side={side}
|
|
37
37
|
sideOffset={6}
|
|
38
38
|
className={cn(
|
|
39
|
-
"z-50 rounded-lg bg-ink px-2.5 py-1.5 text-xs font-medium text-
|
|
39
|
+
"z-50 rounded-lg bg-ink px-2.5 py-1.5 text-xs font-medium text-accent-ink shadow-md",
|
|
40
40
|
"data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95",
|
|
41
41
|
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
|
42
42
|
className
|
package/src/tokens/theme.css
CHANGED
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
* v0.1.x 黑白 Monochrome
|
|
17
17
|
* v0.2~0.5 暖纸 + 印章红
|
|
18
18
|
* v0.6.x 纯白 + 荧光绿(accent 一色包打天下,装饰过载 → 观感 demo)
|
|
19
|
-
* v0.
|
|
19
|
+
* v0.8.x 纯白 + 墨黑结构 + 绿色语义
|
|
20
|
+
* v0.8.3 品牌色全墨 Monochrome(现行)
|
|
20
21
|
*/
|
|
21
22
|
|
|
22
23
|
@theme {
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
--color-accent-ink: oklch(1 0 0);
|
|
47
48
|
--color-accent-strong: oklch(0.09 0.004 265);
|
|
48
49
|
--color-accent-tint: oklch(0.968 0.002 265);
|
|
49
|
-
--color-accent-readable: var(--color-accent);
|
|
50
|
+
--color-accent-readable: var(--color-accent); /* deprecated(v0.6 荧光绿遗迹),新代码直接用 accent */
|
|
50
51
|
|
|
51
52
|
/* ══════════════════════════════════════════════════════
|
|
52
53
|
3. Brand — 品牌资产专用(v0.8.3 起为全墨 Monochrome)
|
|
@@ -65,6 +66,7 @@
|
|
|
65
66
|
对照:v0.6 的荧光绿在白底只有 1.8:1,21 处 text-accent 全部不达标。
|
|
66
67
|
══════════════════════════════════════════════════════ */
|
|
67
68
|
--color-live: oklch(0.499 0.17 145); /* 运行中 / 活跃 · 5.55:1 */
|
|
69
|
+
--color-live-tint: oklch(0.955 0.045 145); /* live 浅底(badge/提示条,与 success-tint 同构) */
|
|
68
70
|
--color-success: oklch(0.499 0.13 145); /* 成功 · 5.70:1 */
|
|
69
71
|
--color-success-tint: oklch(0.955 0.035 145);
|
|
70
72
|
--color-warning: oklch(0.499 0.12 75); /* 告警 · 6.14:1 */
|
|
@@ -121,14 +123,15 @@
|
|
|
121
123
|
/* ══════════════════════════════════════════════════════
|
|
122
124
|
9. Motion
|
|
123
125
|
══════════════════════════════════════════════════════ */
|
|
124
|
-
--ease-out:
|
|
125
|
-
--ease-
|
|
126
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
127
|
+
--ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1); /* landing/各站用;v0.8.4 起由包提供 */
|
|
128
|
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
126
129
|
|
|
127
130
|
/* ══════════════════════════════════════════════════════
|
|
128
131
|
10. Backward-compat aliases
|
|
129
132
|
v1 token 名 → v0.7 值,让既有 267 个 class 无需改动。
|
|
130
133
|
══════════════════════════════════════════════════════ */
|
|
131
|
-
--color-paper: var(--color-bg);
|
|
134
|
+
--color-paper: var(--color-bg); /* deprecated(v1 遗迹),新代码用 --color-bg */
|
|
132
135
|
--color-muted: var(--color-ink-2);
|
|
133
136
|
--color-surface-strong: var(--color-surface-2);
|
|
134
137
|
--animate-dur-fast: 150ms;
|