@mcp-elements/css 0.1.0 → 0.1.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/base.css +18 -2
- package/components/ai-badge.css +14 -5
- package/components/alert.css +6 -2
- package/components/button.css +25 -11
- package/components/card.css +12 -1
- package/components/dialog.css +44 -9
- package/components/dropdown-menu.css +9 -3
- package/components/feedback.css +2 -1
- package/components/mcp-consent-dialog.css +64 -16
- package/components/mcp-resource-browser.css +5 -1
- package/components/mcp-scope-inspector.css +16 -3
- package/components/mcp-server-status.css +17 -16
- package/components/mcp-tool-call.css +12 -12
- package/components/popover.css +12 -1
- package/components/select.css +8 -2
- package/components/toast.css +55 -26
- package/package.json +2 -1
package/base.css
CHANGED
|
@@ -23,7 +23,16 @@
|
|
|
23
23
|
--color-card-foreground: oklch(0.145 0 0);
|
|
24
24
|
--color-popover: oklch(1 0 0);
|
|
25
25
|
--color-popover-foreground: oklch(0.145 0 0);
|
|
26
|
-
--color-overlay: oklch(0 0 0 / 0.
|
|
26
|
+
--color-overlay: oklch(0 0 0 / 0.55);
|
|
27
|
+
|
|
28
|
+
/* Semantic status hues — shared by every component so success/warning/
|
|
29
|
+
danger read identically across tool-call, server-status, alerts, etc.
|
|
30
|
+
Components tint these with color-mix() for backgrounds and borders. */
|
|
31
|
+
--color-success: oklch(0.62 0.16 150);
|
|
32
|
+
--color-warning: oklch(0.68 0.15 70);
|
|
33
|
+
--color-danger: oklch(0.585 0.22 25);
|
|
34
|
+
--color-brand: oklch(0.62 0.21 5);
|
|
35
|
+
--color-brand-2: oklch(0.68 0.18 35);
|
|
27
36
|
|
|
28
37
|
/* Radius scale */
|
|
29
38
|
--radius-sm: 0.25rem;
|
|
@@ -83,6 +92,13 @@
|
|
|
83
92
|
--color-card-foreground: oklch(0.985 0 0);
|
|
84
93
|
--color-popover: oklch(0.205 0.015 286);
|
|
85
94
|
--color-popover-foreground: oklch(0.985 0 0);
|
|
86
|
-
--color-overlay: oklch(0 0 0 / 0.
|
|
95
|
+
--color-overlay: oklch(0 0 0 / 0.6);
|
|
96
|
+
|
|
97
|
+
/* Brighter status hues for dark surfaces */
|
|
98
|
+
--color-success: oklch(0.74 0.17 150);
|
|
99
|
+
--color-warning: oklch(0.82 0.16 75);
|
|
100
|
+
--color-danger: oklch(0.70 0.19 22);
|
|
101
|
+
--color-brand: oklch(0.71 0.22 5);
|
|
102
|
+
--color-brand-2: oklch(0.76 0.18 35);
|
|
87
103
|
}
|
|
88
104
|
}
|
package/components/ai-badge.css
CHANGED
|
@@ -3,15 +3,24 @@
|
|
|
3
3
|
@apply inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium
|
|
4
4
|
[&_svg]:size-3 [&_svg]:shrink-0;
|
|
5
5
|
}
|
|
6
|
+
/* Brand pink → coral, not the violet AI-template cliché. */
|
|
6
7
|
.mcpe-ai-badge-default {
|
|
7
|
-
background: linear-gradient(135deg,
|
|
8
|
-
|
|
8
|
+
background: linear-gradient(135deg,
|
|
9
|
+
color-mix(in oklab, var(--color-brand) 16%, transparent),
|
|
10
|
+
color-mix(in oklab, var(--color-brand-2) 16%, transparent));
|
|
11
|
+
color: var(--color-brand);
|
|
12
|
+
border: 1px solid color-mix(in oklab, var(--color-brand) 24%, transparent);
|
|
9
13
|
}
|
|
10
14
|
.mcpe-ai-badge-prominent {
|
|
11
|
-
background: linear-gradient(135deg,
|
|
12
|
-
|
|
15
|
+
background: linear-gradient(135deg, var(--color-brand), var(--color-brand-2));
|
|
16
|
+
color: oklch(1 0 0);
|
|
17
|
+
box-shadow:
|
|
18
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.22),
|
|
19
|
+
0 1px 2px 0 oklch(0 0 0 / 0.15);
|
|
13
20
|
}
|
|
14
21
|
.mcpe-ai-badge-subtle {
|
|
15
|
-
|
|
22
|
+
background: transparent;
|
|
23
|
+
color: var(--color-brand);
|
|
24
|
+
border: 1px solid color-mix(in oklab, var(--color-brand) 30%, transparent);
|
|
16
25
|
}
|
|
17
26
|
}
|
package/components/alert.css
CHANGED
|
@@ -11,11 +11,15 @@
|
|
|
11
11
|
@apply border-destructive/50 text-destructive [&>svg]:text-destructive;
|
|
12
12
|
}
|
|
13
13
|
.mcpe-alert-success {
|
|
14
|
-
|
|
14
|
+
border-color: color-mix(in oklab, var(--color-success) 45%, transparent);
|
|
15
|
+
color: var(--color-success);
|
|
15
16
|
}
|
|
17
|
+
.mcpe-alert-success > svg { color: var(--color-success); }
|
|
16
18
|
.mcpe-alert-warning {
|
|
17
|
-
|
|
19
|
+
border-color: color-mix(in oklab, var(--color-warning) 45%, transparent);
|
|
20
|
+
color: var(--color-warning);
|
|
18
21
|
}
|
|
22
|
+
.mcpe-alert-warning > svg { color: var(--color-warning); }
|
|
19
23
|
.mcpe-alert-title {
|
|
20
24
|
@apply mb-1 font-medium leading-none tracking-tight;
|
|
21
25
|
}
|
package/components/button.css
CHANGED
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
.mcpe-btn {
|
|
3
|
-
@apply inline-flex items-center justify-center gap-2 rounded-
|
|
4
|
-
whitespace-nowrap
|
|
5
|
-
focus-visible:outline-none focus-visible:ring-
|
|
3
|
+
@apply inline-flex items-center justify-center gap-2 rounded-lg text-sm font-medium
|
|
4
|
+
whitespace-nowrap cursor-pointer active:scale-[0.985]
|
|
5
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background
|
|
6
6
|
disabled:pointer-events-none disabled:opacity-50
|
|
7
7
|
[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0;
|
|
8
|
+
transition: background-color 120ms ease, border-color 120ms ease,
|
|
9
|
+
box-shadow 120ms ease, transform 120ms ease, color 120ms ease;
|
|
8
10
|
}
|
|
9
|
-
/* Variants
|
|
10
|
-
|
|
11
|
-
.mcpe-btn-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.mcpe-btn-
|
|
11
|
+
/* Variants — filled buttons carry a top inset highlight so they read as lit
|
|
12
|
+
surfaces (Linear/Vercel), not flat blocks. */
|
|
13
|
+
.mcpe-btn-primary {
|
|
14
|
+
@apply bg-primary text-primary-foreground hover:bg-primary/90;
|
|
15
|
+
box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.15), 0 1px 2px 0 oklch(0 0 0 / 0.12);
|
|
16
|
+
}
|
|
17
|
+
.mcpe-btn-secondary {
|
|
18
|
+
@apply bg-secondary text-secondary-foreground hover:bg-secondary/80;
|
|
19
|
+
box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.06), 0 1px 2px 0 oklch(0 0 0 / 0.08);
|
|
20
|
+
}
|
|
21
|
+
.mcpe-btn-outline {
|
|
22
|
+
@apply border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground;
|
|
23
|
+
}
|
|
24
|
+
.mcpe-btn-ghost { @apply hover:bg-accent hover:text-accent-foreground; }
|
|
25
|
+
.mcpe-btn-destructive {
|
|
26
|
+
@apply bg-destructive text-destructive-foreground hover:bg-destructive/90;
|
|
27
|
+
box-shadow: inset 0 1px 0 0 oklch(1 0 0 / 0.15), 0 1px 2px 0 oklch(0 0 0 / 0.12);
|
|
28
|
+
}
|
|
29
|
+
.mcpe-btn-link { @apply text-primary underline-offset-4 hover:underline; }
|
|
16
30
|
/* Sizes */
|
|
17
31
|
.mcpe-btn-sm { @apply h-8 rounded-md px-3 text-xs; }
|
|
18
32
|
.mcpe-btn-md { @apply h-9 px-4 py-2; }
|
|
19
|
-
.mcpe-btn-lg { @apply h-10
|
|
33
|
+
.mcpe-btn-lg { @apply h-10 px-8; }
|
|
20
34
|
.mcpe-btn-icon { @apply h-9 w-9; }
|
|
21
35
|
}
|
package/components/card.css
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
.mcpe-card {
|
|
3
|
-
@apply
|
|
3
|
+
@apply relative border bg-card text-card-foreground;
|
|
4
|
+
border-radius: 0.75rem; /* 12px */
|
|
5
|
+
box-shadow:
|
|
6
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.04),
|
|
7
|
+
0 1px 2px 0 oklch(0 0 0 / 0.06),
|
|
8
|
+
0 8px 24px -12px oklch(0 0 0 / 0.12);
|
|
9
|
+
}
|
|
10
|
+
[data-theme='dark'] .mcpe-card {
|
|
11
|
+
box-shadow:
|
|
12
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.04),
|
|
13
|
+
0 1px 2px 0 oklch(0 0 0 / 0.24),
|
|
14
|
+
0 12px 28px -12px oklch(0 0 0 / 0.40);
|
|
4
15
|
}
|
|
5
16
|
.mcpe-card-header {
|
|
6
17
|
@apply flex flex-col space-y-1.5 p-6;
|
package/components/dialog.css
CHANGED
|
@@ -1,26 +1,61 @@
|
|
|
1
1
|
@layer components {
|
|
2
|
+
/* Overlay centers the content via flexbox — no transform-based centering,
|
|
3
|
+
so the entrance animation can't fight the positioning. */
|
|
2
4
|
.mcpe-dialog-overlay {
|
|
3
|
-
@apply fixed inset-0 z-50
|
|
5
|
+
@apply fixed inset-0 z-50 flex items-center justify-center p-4;
|
|
6
|
+
background-color: var(--color-overlay);
|
|
7
|
+
backdrop-filter: blur(2px);
|
|
8
|
+
-webkit-backdrop-filter: blur(2px);
|
|
9
|
+
animation: mcpe-dialog-overlay-in 160ms ease-out;
|
|
4
10
|
}
|
|
11
|
+
|
|
5
12
|
.mcpe-dialog-content {
|
|
6
|
-
@apply
|
|
7
|
-
|
|
13
|
+
@apply relative z-50 grid w-full max-w-md gap-5 border bg-popover p-6 text-popover-foreground;
|
|
14
|
+
border-radius: 0.875rem; /* 14px — modern modal, not bubbly */
|
|
15
|
+
box-shadow:
|
|
16
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.05),
|
|
17
|
+
0 24px 48px -12px oklch(0 0 0 / 0.45),
|
|
18
|
+
0 8px 16px -8px oklch(0 0 0 / 0.30);
|
|
19
|
+
animation: mcpe-dialog-content-in 180ms cubic-bezier(0.22, 1, 0.36, 1) both;
|
|
20
|
+
transform-origin: center;
|
|
8
21
|
}
|
|
22
|
+
|
|
9
23
|
.mcpe-dialog-header {
|
|
10
|
-
@apply flex flex-col
|
|
24
|
+
@apply flex flex-col gap-1.5 pr-8 text-left;
|
|
11
25
|
}
|
|
26
|
+
|
|
12
27
|
.mcpe-dialog-footer {
|
|
13
|
-
@apply flex flex-col-reverse sm:flex-row sm:justify-end
|
|
28
|
+
@apply flex flex-col-reverse gap-2 sm:flex-row sm:justify-end;
|
|
14
29
|
}
|
|
30
|
+
|
|
15
31
|
.mcpe-dialog-title {
|
|
16
|
-
@apply text-
|
|
32
|
+
@apply text-base font-semibold leading-tight tracking-tight;
|
|
17
33
|
}
|
|
34
|
+
|
|
18
35
|
.mcpe-dialog-description {
|
|
19
|
-
@apply text-sm text-muted-foreground;
|
|
36
|
+
@apply text-sm leading-relaxed text-muted-foreground;
|
|
20
37
|
}
|
|
38
|
+
|
|
21
39
|
.mcpe-dialog-close {
|
|
22
|
-
@apply absolute right-
|
|
23
|
-
|
|
40
|
+
@apply absolute right-3.5 top-3.5 inline-flex h-8 w-8 items-center justify-center
|
|
41
|
+
rounded-md text-muted-foreground transition-colors
|
|
42
|
+
hover:bg-accent hover:text-foreground
|
|
43
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-popover
|
|
24
44
|
disabled:pointer-events-none;
|
|
25
45
|
}
|
|
26
46
|
}
|
|
47
|
+
|
|
48
|
+
@keyframes mcpe-dialog-overlay-in {
|
|
49
|
+
from { opacity: 0; }
|
|
50
|
+
to { opacity: 1; }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@keyframes mcpe-dialog-content-in {
|
|
54
|
+
from { opacity: 0; transform: scale(0.96); }
|
|
55
|
+
to { opacity: 1; transform: scale(1); }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media (prefers-reduced-motion: reduce) {
|
|
59
|
+
.mcpe-dialog-overlay,
|
|
60
|
+
.mcpe-dialog-content { animation: none; }
|
|
61
|
+
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
.mcpe-dropdown-menu-content {
|
|
3
|
-
@apply z-50 min-w-[8rem] overflow-hidden
|
|
4
|
-
text-popover-foreground
|
|
3
|
+
@apply z-50 min-w-[8rem] overflow-hidden border bg-popover p-1
|
|
4
|
+
text-popover-foreground;
|
|
5
|
+
border-radius: 0.625rem; /* 10px */
|
|
6
|
+
box-shadow:
|
|
7
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.05),
|
|
8
|
+
0 4px 12px -2px oklch(0 0 0 / 0.12),
|
|
9
|
+
0 16px 32px -8px oklch(0 0 0 / 0.22);
|
|
10
|
+
animation: mcpe-pop-in 140ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
5
11
|
}
|
|
6
12
|
.mcpe-dropdown-menu-item {
|
|
7
|
-
@apply relative flex cursor-default select-none items-center rounded-
|
|
13
|
+
@apply relative flex cursor-default select-none items-center rounded-md px-2 py-1.5
|
|
8
14
|
text-sm outline-none transition-colors;
|
|
9
15
|
}
|
|
10
16
|
.mcpe-dropdown-menu-item-active {
|
package/components/feedback.css
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
@apply ring-1 ring-ring;
|
|
12
12
|
}
|
|
13
13
|
.mcpe-feedback-btn-up.mcpe-feedback-btn-selected {
|
|
14
|
-
|
|
14
|
+
color: var(--color-success);
|
|
15
|
+
background-color: color-mix(in oklab, var(--color-success) 12%, transparent);
|
|
15
16
|
}
|
|
16
17
|
.mcpe-feedback-btn-down.mcpe-feedback-btn-selected {
|
|
17
18
|
@apply text-destructive bg-destructive/10 hover:bg-destructive/15;
|
|
@@ -1,51 +1,99 @@
|
|
|
1
1
|
@layer components {
|
|
2
|
+
/* Root — consistent vertical rhythm between identity, scopes, actions */
|
|
3
|
+
.mcpe-mcp-consent-dialog {
|
|
4
|
+
@apply flex flex-col gap-4;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/* Server identity row */
|
|
2
8
|
.mcpe-mcp-consent-dialog-server {
|
|
3
|
-
@apply flex items-center gap-3
|
|
4
|
-
border-bottom: 1px solid var(--color-border);
|
|
9
|
+
@apply flex items-center gap-3;
|
|
5
10
|
}
|
|
6
11
|
|
|
7
12
|
.mcpe-mcp-consent-dialog-icon {
|
|
8
|
-
@apply h-10 w-10
|
|
13
|
+
@apply flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden text-base font-semibold;
|
|
14
|
+
border-radius: 0.625rem; /* 10px */
|
|
9
15
|
background-color: var(--color-accent);
|
|
10
16
|
color: var(--color-accent-foreground);
|
|
17
|
+
border: 1px solid var(--color-border);
|
|
18
|
+
}
|
|
19
|
+
.mcpe-mcp-consent-dialog-icon img {
|
|
20
|
+
height: 100%;
|
|
21
|
+
width: 100%;
|
|
22
|
+
object-fit: cover;
|
|
11
23
|
}
|
|
12
24
|
|
|
25
|
+
.mcpe-mcp-consent-dialog-server-text {
|
|
26
|
+
@apply min-w-0;
|
|
27
|
+
}
|
|
13
28
|
.mcpe-mcp-consent-dialog-server-name {
|
|
14
|
-
@apply font-semibold
|
|
29
|
+
@apply text-sm font-semibold leading-tight;
|
|
30
|
+
color: var(--color-foreground);
|
|
15
31
|
}
|
|
16
|
-
|
|
17
32
|
.mcpe-mcp-consent-dialog-server-meta {
|
|
18
|
-
@apply text-xs;
|
|
33
|
+
@apply text-xs leading-tight;
|
|
34
|
+
margin-top: 0.125rem;
|
|
19
35
|
color: var(--color-muted-foreground);
|
|
20
36
|
}
|
|
21
37
|
|
|
38
|
+
/* Scope list */
|
|
22
39
|
.mcpe-mcp-consent-dialog-scopes {
|
|
23
|
-
@apply flex flex-col gap-
|
|
40
|
+
@apply flex flex-col gap-1.5;
|
|
24
41
|
}
|
|
25
42
|
|
|
26
43
|
.mcpe-mcp-consent-dialog-scope-item {
|
|
27
|
-
@apply flex items-
|
|
44
|
+
@apply flex items-center justify-between gap-3;
|
|
45
|
+
padding: 0.625rem 0.75rem; /* 10px / 12px */
|
|
46
|
+
border-radius: 0.5rem; /* 8px */
|
|
28
47
|
background-color: var(--color-muted);
|
|
29
|
-
border: 1px solid
|
|
48
|
+
border: 1px solid transparent;
|
|
49
|
+
transition: border-color 140ms var(--mcpe-ease, cubic-bezier(0.22, 1, 0.36, 1)),
|
|
50
|
+
background-color 140ms ease,
|
|
51
|
+
transform 140ms var(--mcpe-ease, cubic-bezier(0.22, 1, 0.36, 1)),
|
|
52
|
+
box-shadow 140ms ease;
|
|
53
|
+
}
|
|
54
|
+
.mcpe-mcp-consent-dialog-scope-item:hover {
|
|
55
|
+
border-color: var(--color-border);
|
|
56
|
+
background-color: color-mix(in oklab, var(--color-muted) 60%, var(--color-accent));
|
|
57
|
+
transform: translateY(-1px);
|
|
58
|
+
box-shadow: 0 2px 8px -4px oklch(0 0 0 / 0.30);
|
|
30
59
|
}
|
|
31
60
|
|
|
32
61
|
.mcpe-mcp-consent-dialog-scope-resource {
|
|
33
|
-
@apply font-mono text-
|
|
34
|
-
color: var(--color-
|
|
62
|
+
@apply truncate font-mono text-[0.8125rem] font-medium;
|
|
63
|
+
color: var(--color-foreground);
|
|
35
64
|
}
|
|
36
65
|
|
|
37
66
|
.mcpe-mcp-consent-dialog-scope-perms {
|
|
38
|
-
@apply flex flex-wrap gap-1
|
|
67
|
+
@apply flex shrink-0 flex-wrap items-center gap-1;
|
|
39
68
|
}
|
|
40
69
|
|
|
70
|
+
/* Permission badge — neutral by default; elevated perms (write/admin/…)
|
|
71
|
+
get a warning tint so risky grants stand out at a glance. */
|
|
41
72
|
.mcpe-mcp-consent-dialog-scope-perm {
|
|
42
|
-
@apply
|
|
43
|
-
|
|
44
|
-
|
|
73
|
+
@apply inline-flex items-center font-mono text-[0.625rem] font-semibold uppercase;
|
|
74
|
+
letter-spacing: 0.06em;
|
|
75
|
+
padding: 0.125rem 0.375rem;
|
|
76
|
+
border-radius: 0.3125rem; /* 5px */
|
|
77
|
+
background-color: color-mix(in oklab, var(--color-foreground) 8%, transparent);
|
|
78
|
+
color: var(--color-muted-foreground);
|
|
79
|
+
border: 1px solid transparent;
|
|
80
|
+
}
|
|
81
|
+
.mcpe-mcp-consent-dialog-scope-perm[data-perm='write'],
|
|
82
|
+
.mcpe-mcp-consent-dialog-scope-perm[data-perm='admin'],
|
|
83
|
+
.mcpe-mcp-consent-dialog-scope-perm[data-perm='delete'],
|
|
84
|
+
.mcpe-mcp-consent-dialog-scope-perm[data-perm='manage'] {
|
|
85
|
+
background-color: color-mix(in oklab, var(--color-warning) 16%, transparent);
|
|
86
|
+
color: var(--color-warning);
|
|
87
|
+
border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
|
|
45
88
|
}
|
|
46
89
|
|
|
90
|
+
/* Actions — separated from the content by a divider + generous spacing */
|
|
47
91
|
.mcpe-mcp-consent-dialog-actions {
|
|
48
|
-
@apply flex gap-2 pt-
|
|
92
|
+
@apply flex items-center gap-2.5 pt-4;
|
|
93
|
+
margin-top: 0.25rem;
|
|
49
94
|
border-top: 1px solid var(--color-border);
|
|
50
95
|
}
|
|
96
|
+
.mcpe-mcp-consent-dialog-actions > .mcpe-btn {
|
|
97
|
+
flex: 1 1 0%;
|
|
98
|
+
}
|
|
51
99
|
}
|
|
@@ -4,13 +4,17 @@
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
.mcpe-mcp-resource-browser-item {
|
|
7
|
-
@apply flex items-center gap-3 rounded-lg px-3 py-2.5 cursor-pointer
|
|
7
|
+
@apply flex items-center gap-3 rounded-lg px-3 py-2.5 cursor-pointer;
|
|
8
8
|
border: 1px solid transparent;
|
|
9
|
+
transition: background-color 140ms ease, border-color 140ms ease,
|
|
10
|
+
transform 140ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow 140ms ease;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
.mcpe-mcp-resource-browser-item:hover {
|
|
12
14
|
background-color: var(--color-accent);
|
|
13
15
|
border-color: var(--color-border);
|
|
16
|
+
transform: translateY(-1px);
|
|
17
|
+
box-shadow: 0 2px 8px -4px oklch(0 0 0 / 0.30);
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
.mcpe-mcp-resource-browser-item-selected {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
.mcpe-mcp-scope-inspector-trigger {
|
|
12
12
|
@apply flex w-full items-center justify-between px-4 py-3 text-left;
|
|
13
13
|
background-color: var(--color-card);
|
|
14
|
+
transition: background-color 140ms ease;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
.mcpe-mcp-scope-inspector-trigger:hover {
|
|
@@ -26,9 +27,21 @@
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
.mcpe-mcp-scope-inspector-perm {
|
|
29
|
-
@apply
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
@apply inline-flex items-center font-mono text-[0.625rem] font-semibold uppercase;
|
|
31
|
+
letter-spacing: 0.06em;
|
|
32
|
+
padding: 0.125rem 0.375rem;
|
|
33
|
+
border-radius: 0.3125rem; /* 5px */
|
|
34
|
+
background-color: color-mix(in oklab, var(--color-foreground) 8%, transparent);
|
|
35
|
+
color: var(--color-muted-foreground);
|
|
36
|
+
border: 1px solid transparent;
|
|
37
|
+
}
|
|
38
|
+
.mcpe-mcp-scope-inspector-perm[data-perm='write'],
|
|
39
|
+
.mcpe-mcp-scope-inspector-perm[data-perm='admin'],
|
|
40
|
+
.mcpe-mcp-scope-inspector-perm[data-perm='delete'],
|
|
41
|
+
.mcpe-mcp-scope-inspector-perm[data-perm='manage'] {
|
|
42
|
+
background-color: color-mix(in oklab, var(--color-warning) 16%, transparent);
|
|
43
|
+
color: var(--color-warning);
|
|
44
|
+
border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
|
|
32
45
|
}
|
|
33
46
|
|
|
34
47
|
.mcpe-mcp-scope-inspector-chevron {
|
|
@@ -10,43 +10,44 @@
|
|
|
10
10
|
|
|
11
11
|
/* Connected */
|
|
12
12
|
.mcpe-mcp-server-status-connected {
|
|
13
|
-
background-color:
|
|
14
|
-
border-color:
|
|
15
|
-
color:
|
|
13
|
+
background-color: color-mix(in oklab, var(--color-success) 12%, transparent);
|
|
14
|
+
border-color: color-mix(in oklab, var(--color-success) 30%, transparent);
|
|
15
|
+
color: var(--color-success);
|
|
16
16
|
}
|
|
17
17
|
.mcpe-mcp-server-status-connected .mcpe-mcp-server-status-dot {
|
|
18
|
-
background-color:
|
|
18
|
+
background-color: var(--color-success);
|
|
19
|
+
box-shadow: 0 0 6px color-mix(in oklab, var(--color-success) 70%, transparent);
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
/* Connecting */
|
|
22
23
|
.mcpe-mcp-server-status-connecting {
|
|
23
|
-
background-color:
|
|
24
|
-
border-color:
|
|
25
|
-
color:
|
|
24
|
+
background-color: color-mix(in oklab, var(--color-warning) 12%, transparent);
|
|
25
|
+
border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
|
|
26
|
+
color: var(--color-warning);
|
|
26
27
|
}
|
|
27
28
|
.mcpe-mcp-server-status-connecting .mcpe-mcp-server-status-dot {
|
|
28
|
-
background-color:
|
|
29
|
+
background-color: var(--color-warning);
|
|
29
30
|
animation: mcpe-pulse 1.5s ease-in-out infinite;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/* Disconnected */
|
|
33
34
|
.mcpe-mcp-server-status-disconnected {
|
|
34
|
-
background-color:
|
|
35
|
-
border-color:
|
|
36
|
-
color:
|
|
35
|
+
background-color: color-mix(in oklab, var(--color-muted-foreground) 10%, transparent);
|
|
36
|
+
border-color: color-mix(in oklab, var(--color-muted-foreground) 22%, transparent);
|
|
37
|
+
color: var(--color-muted-foreground);
|
|
37
38
|
}
|
|
38
39
|
.mcpe-mcp-server-status-disconnected .mcpe-mcp-server-status-dot {
|
|
39
|
-
background-color:
|
|
40
|
+
background-color: var(--color-muted-foreground);
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
/* Error */
|
|
43
44
|
.mcpe-mcp-server-status-error {
|
|
44
|
-
background-color:
|
|
45
|
-
border-color:
|
|
46
|
-
color:
|
|
45
|
+
background-color: color-mix(in oklab, var(--color-danger) 12%, transparent);
|
|
46
|
+
border-color: color-mix(in oklab, var(--color-danger) 30%, transparent);
|
|
47
|
+
color: var(--color-danger);
|
|
47
48
|
}
|
|
48
49
|
.mcpe-mcp-server-status-error .mcpe-mcp-server-status-dot {
|
|
49
|
-
background-color:
|
|
50
|
+
background-color: var(--color-danger);
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
@keyframes mcpe-pulse {
|
|
@@ -48,15 +48,15 @@
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
.mcpe-mcp-tool-call-result-done {
|
|
51
|
-
background-color:
|
|
52
|
-
border: 1px solid
|
|
53
|
-
color:
|
|
51
|
+
background-color: color-mix(in oklab, var(--color-success) 9%, transparent);
|
|
52
|
+
border: 1px solid color-mix(in oklab, var(--color-success) 25%, transparent);
|
|
53
|
+
color: var(--color-success);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.mcpe-mcp-tool-call-result-error {
|
|
57
|
-
background-color:
|
|
58
|
-
border: 1px solid
|
|
59
|
-
color:
|
|
57
|
+
background-color: color-mix(in oklab, var(--color-danger) 9%, transparent);
|
|
58
|
+
border: 1px solid color-mix(in oklab, var(--color-danger) 25%, transparent);
|
|
59
|
+
color: var(--color-danger);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.mcpe-mcp-tool-call-footer {
|
|
@@ -75,18 +75,18 @@
|
|
|
75
75
|
|
|
76
76
|
.mcpe-mcp-tool-call-badge-pending,
|
|
77
77
|
.mcpe-mcp-tool-call-badge-running {
|
|
78
|
-
background-color:
|
|
79
|
-
color:
|
|
78
|
+
background-color: color-mix(in oklab, var(--color-warning) 15%, transparent);
|
|
79
|
+
color: var(--color-warning);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
.mcpe-mcp-tool-call-badge-done {
|
|
83
|
-
background-color:
|
|
84
|
-
color:
|
|
83
|
+
background-color: color-mix(in oklab, var(--color-success) 15%, transparent);
|
|
84
|
+
color: var(--color-success);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
.mcpe-mcp-tool-call-badge-error {
|
|
88
|
-
background-color:
|
|
89
|
-
color:
|
|
88
|
+
background-color: color-mix(in oklab, var(--color-danger) 15%, transparent);
|
|
89
|
+
color: var(--color-danger);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
.mcpe-mcp-tool-call-badge-cancelled {
|
package/components/popover.css
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
@keyframes mcpe-pop-in {
|
|
2
|
+
from { opacity: 0; transform: scale(0.97) translateY(-2px); }
|
|
3
|
+
to { opacity: 1; transform: scale(1) translateY(0); }
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
@layer components {
|
|
2
7
|
.mcpe-popover-content {
|
|
3
|
-
@apply z-50 w-72
|
|
8
|
+
@apply z-50 w-72 border bg-popover p-4 text-popover-foreground outline-none;
|
|
9
|
+
border-radius: 0.75rem; /* 12px */
|
|
10
|
+
box-shadow:
|
|
11
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.05),
|
|
12
|
+
0 4px 12px -2px oklch(0 0 0 / 0.12),
|
|
13
|
+
0 16px 32px -8px oklch(0 0 0 / 0.22);
|
|
14
|
+
animation: mcpe-pop-in 140ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
4
15
|
}
|
|
5
16
|
}
|
package/components/select.css
CHANGED
|
@@ -30,8 +30,14 @@
|
|
|
30
30
|
color: var(--color-foreground);
|
|
31
31
|
}
|
|
32
32
|
.mcpe-select-content {
|
|
33
|
-
@apply relative z-50 max-h-96 min-w-[8rem] overflow-hidden
|
|
34
|
-
bg-popover text-popover-foreground
|
|
33
|
+
@apply relative z-50 max-h-96 min-w-[8rem] overflow-hidden border
|
|
34
|
+
bg-popover text-popover-foreground;
|
|
35
|
+
border-radius: 0.625rem; /* 10px */
|
|
36
|
+
box-shadow:
|
|
37
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.05),
|
|
38
|
+
0 4px 12px -2px oklch(0 0 0 / 0.12),
|
|
39
|
+
0 16px 32px -8px oklch(0 0 0 / 0.22);
|
|
40
|
+
animation: mcpe-pop-in 140ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
35
41
|
}
|
|
36
42
|
.mcpe-select-viewport {
|
|
37
43
|
@apply p-1;
|
package/components/toast.css
CHANGED
|
@@ -1,46 +1,75 @@
|
|
|
1
|
+
@keyframes mcpe-toast-in {
|
|
2
|
+
from { opacity: 0; transform: translateY(8px) scale(0.98); }
|
|
3
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
@layer components {
|
|
2
7
|
.mcpe-toaster {
|
|
3
|
-
@apply fixed z-[100] flex flex-col gap-2 p-4;
|
|
4
|
-
}
|
|
5
|
-
.mcpe-toaster-top-right {
|
|
6
|
-
@apply top-0 right-0;
|
|
7
|
-
}
|
|
8
|
-
.mcpe-toaster-bottom-right {
|
|
9
|
-
@apply bottom-0 right-0;
|
|
10
|
-
}
|
|
11
|
-
.mcpe-toaster-top-left {
|
|
12
|
-
@apply top-0 left-0;
|
|
13
|
-
}
|
|
14
|
-
.mcpe-toaster-bottom-left {
|
|
15
|
-
@apply bottom-0 left-0;
|
|
8
|
+
@apply fixed z-[100] flex flex-col gap-2.5 p-4;
|
|
16
9
|
}
|
|
10
|
+
.mcpe-toaster-top-right { @apply top-0 right-0; }
|
|
11
|
+
.mcpe-toaster-bottom-right { @apply bottom-0 right-0; }
|
|
12
|
+
.mcpe-toaster-top-left { @apply top-0 left-0; }
|
|
13
|
+
.mcpe-toaster-bottom-left { @apply bottom-0 left-0; }
|
|
14
|
+
|
|
15
|
+
/* Elevated neutral surface + a colored status icon — not a saturated fill.
|
|
16
|
+
Layered shadow reads like a real floating surface (Sonner/Linear). */
|
|
17
17
|
.mcpe-toast {
|
|
18
|
-
@apply pointer-events-auto relative flex w-full items-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
@apply pointer-events-auto relative flex w-full items-start gap-2.5
|
|
19
|
+
py-3 pl-3.5 pr-9;
|
|
20
|
+
min-width: 20rem;
|
|
21
|
+
border-radius: 0.75rem; /* 12px */
|
|
22
|
+
background-color: var(--color-popover);
|
|
23
|
+
color: var(--color-popover-foreground);
|
|
24
|
+
border: 1px solid var(--color-border);
|
|
25
|
+
box-shadow:
|
|
26
|
+
inset 0 1px 0 0 oklch(1 0 0 / 0.04),
|
|
27
|
+
0 1px 2px 0 oklch(0 0 0 / 0.20),
|
|
28
|
+
0 12px 28px -8px oklch(0 0 0 / 0.40);
|
|
29
|
+
animation: mcpe-toast-in 220ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.mcpe-toast-icon {
|
|
33
|
+
@apply mt-px flex h-[1.125rem] w-[1.125rem] shrink-0 items-center justify-center;
|
|
34
|
+
color: var(--color-muted-foreground);
|
|
21
35
|
}
|
|
36
|
+
.mcpe-toast-icon svg { height: 100%; width: 100%; }
|
|
37
|
+
|
|
22
38
|
.mcpe-toast-destructive {
|
|
23
|
-
|
|
39
|
+
border-color: color-mix(in oklab, var(--color-danger) 26%, var(--color-border));
|
|
40
|
+
background-color: color-mix(in oklab, var(--color-danger) 6%, var(--color-popover));
|
|
24
41
|
}
|
|
42
|
+
.mcpe-toast-destructive .mcpe-toast-icon { color: var(--color-danger); }
|
|
43
|
+
|
|
25
44
|
.mcpe-toast-success {
|
|
26
|
-
|
|
45
|
+
border-color: color-mix(in oklab, var(--color-success) 26%, var(--color-border));
|
|
46
|
+
background-color: color-mix(in oklab, var(--color-success) 6%, var(--color-popover));
|
|
27
47
|
}
|
|
48
|
+
.mcpe-toast-success .mcpe-toast-icon { color: var(--color-success); }
|
|
49
|
+
|
|
50
|
+
.mcpe-toast-body { @apply flex min-w-0 flex-col gap-0.5; }
|
|
51
|
+
|
|
28
52
|
.mcpe-toast-title {
|
|
29
|
-
@apply text-sm font-semibold;
|
|
53
|
+
@apply text-sm font-semibold leading-tight;
|
|
54
|
+
color: var(--color-foreground);
|
|
30
55
|
}
|
|
31
56
|
.mcpe-toast-description {
|
|
32
|
-
@apply text-
|
|
57
|
+
@apply text-[0.8125rem] leading-snug;
|
|
58
|
+
color: var(--color-muted-foreground);
|
|
33
59
|
}
|
|
34
60
|
.mcpe-toast-close {
|
|
35
|
-
@apply absolute right-
|
|
36
|
-
|
|
61
|
+
@apply absolute right-2 top-2.5 inline-flex h-6 w-6 items-center justify-center rounded-md
|
|
62
|
+
text-muted-foreground opacity-0 transition-all
|
|
63
|
+
hover:bg-accent hover:text-foreground
|
|
64
|
+
focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring;
|
|
37
65
|
}
|
|
38
|
-
.mcpe-toast:hover .mcpe-toast-close
|
|
66
|
+
.mcpe-toast:hover .mcpe-toast-close,
|
|
67
|
+
.mcpe-toast:focus-within .mcpe-toast-close {
|
|
39
68
|
@apply opacity-100;
|
|
40
69
|
}
|
|
41
70
|
.mcpe-toast-action {
|
|
42
|
-
@apply inline-flex h-
|
|
43
|
-
px-
|
|
44
|
-
focus-visible:outline-none focus-visible:ring-
|
|
71
|
+
@apply ml-auto inline-flex h-7 shrink-0 items-center justify-center self-center rounded-md border bg-transparent
|
|
72
|
+
px-2.5 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground
|
|
73
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50;
|
|
45
74
|
}
|
|
46
75
|
}
|