chordia-ui 3.2.3 → 3.2.5
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/IntegrationCard.cjs.js +2 -0
- package/dist/IntegrationCard.cjs.js.map +1 -0
- package/dist/IntegrationCard.es.js +188 -0
- package/dist/IntegrationCard.es.js.map +1 -0
- package/dist/SideDrawer.cjs.js +2 -0
- package/dist/SideDrawer.cjs.js.map +1 -0
- package/dist/SideDrawer.es.js +486 -0
- package/dist/SideDrawer.es.js.map +1 -0
- package/dist/UploadInteraction.cjs.js +2 -0
- package/dist/UploadInteraction.cjs.js.map +1 -0
- package/dist/UploadInteraction.es.js +379 -0
- package/dist/UploadInteraction.es.js.map +1 -0
- package/dist/components/common.cjs.js +1 -1
- package/dist/components/common.es.js +13 -11
- package/dist/components/layout.cjs.js +2 -2
- package/dist/components/layout.cjs.js.map +1 -1
- package/dist/components/layout.es.js +202 -411
- package/dist/components/layout.es.js.map +1 -1
- package/dist/components/navigation.cjs.js +1 -1
- package/dist/components/navigation.cjs.js.map +1 -1
- package/dist/components/navigation.es.js +212 -203
- package/dist/components/navigation.es.js.map +1 -1
- package/dist/components/onboarding.cjs.js +2 -0
- package/dist/components/onboarding.cjs.js.map +1 -0
- package/dist/components/onboarding.es.js +712 -0
- package/dist/components/onboarding.es.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs2.js +1 -1
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.es.js +74 -64
- package/dist/index.es.js.map +1 -1
- package/dist/index.es2.js +2 -2
- package/dist/index.es2.js.map +1 -1
- package/dist/pages/interactionDetails.cjs.js +1 -1
- package/dist/pages/interactionDetails.cjs.js.map +1 -1
- package/dist/pages/interactionDetails.es.js +16 -15
- package/dist/pages/interactionDetails.es.js.map +1 -1
- package/package.json +5 -1
- package/src/components/common/SideDrawer.jsx +321 -0
- package/src/components/common/index.js +1 -0
- package/src/components/index.js +4 -1
- package/src/components/layout/IntegrationCard.jsx +151 -141
- package/src/components/login/LoginPage.jsx +2 -2
- package/src/components/navigation/Sidebar.jsx +59 -39
- package/src/components/onboarding/AddTeammates.jsx +278 -0
- package/src/components/onboarding/GettingStarted.jsx +4 -0
- package/src/components/onboarding/UploadInteraction.jsx +3 -3
- package/src/components/onboarding/index.js +5 -0
- package/dist/AutoSearch.cjs.js +0 -2
- package/dist/AutoSearch.cjs.js.map +0 -1
- package/dist/AutoSearch.es.js +0 -190
- package/dist/AutoSearch.es.js.map +0 -1
|
@@ -1,42 +1,54 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import React from "react";
|
|
4
|
-
import { CheckCircle2,
|
|
4
|
+
import { CheckCircle2, Settings2, CloudOff, CloudDownload } from "lucide-react";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* IntegrationCard Component
|
|
8
8
|
* Displays an integration provider card with status, logo, and configuration options
|
|
9
|
+
*
|
|
10
|
+
* Props:
|
|
11
|
+
* - providerName string Provider display name
|
|
12
|
+
* - description string Short description / subtitle
|
|
13
|
+
* - status string "available" | "connected" | "coming-soon"
|
|
14
|
+
* - logoUrl string Optional logo image URL
|
|
15
|
+
* - icon ReactNode Optional custom icon/logo element
|
|
16
|
+
* - onConnect function Connect/Disconnect callback
|
|
17
|
+
* - onConfigure function Configure (settings) callback — shown for connected
|
|
9
18
|
*/
|
|
10
19
|
export default function IntegrationCard({
|
|
11
20
|
providerName,
|
|
12
21
|
description,
|
|
13
22
|
status = "available",
|
|
14
|
-
railColor,
|
|
15
23
|
logoUrl,
|
|
16
24
|
icon,
|
|
25
|
+
onConnect,
|
|
17
26
|
onConfigure,
|
|
18
27
|
}) {
|
|
28
|
+
const isConnected = status === "connected";
|
|
29
|
+
const isComingSoon = status === "coming-soon";
|
|
30
|
+
|
|
19
31
|
const statusConfig = {
|
|
20
32
|
connected: {
|
|
21
33
|
label: "Connected",
|
|
22
|
-
color: "#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
color: "var(--Grey-Strong, #808183)",
|
|
35
|
+
icon: <CheckCircle2 size={16} strokeWidth={2} />,
|
|
36
|
+
actionLabel: "Disconnect",
|
|
37
|
+
actionFilled: false,
|
|
26
38
|
},
|
|
27
39
|
available: {
|
|
28
40
|
label: "Available",
|
|
29
|
-
color: "#
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
color: "var(--Grey-Strong, #808183)",
|
|
42
|
+
icon: <CloudDownload size={16} strokeWidth={2} />,
|
|
43
|
+
actionLabel: "Connect",
|
|
44
|
+
actionFilled: true,
|
|
33
45
|
},
|
|
34
46
|
"coming-soon": {
|
|
35
47
|
label: "Coming Soon",
|
|
36
|
-
color: "
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
color: "var(--Grey-Muted, #B2AEA8)",
|
|
49
|
+
icon: <CloudOff size={16} strokeWidth={2} />,
|
|
50
|
+
actionLabel: "Connect",
|
|
51
|
+
actionFilled: false,
|
|
40
52
|
},
|
|
41
53
|
};
|
|
42
54
|
|
|
@@ -45,165 +57,163 @@ export default function IntegrationCard({
|
|
|
45
57
|
return (
|
|
46
58
|
<div
|
|
47
59
|
style={{
|
|
48
|
-
background: "#FFFFFF",
|
|
49
|
-
border: `1px solid ${railColor}20`,
|
|
50
|
-
borderRadius: "8px",
|
|
51
|
-
position: "relative",
|
|
52
60
|
display: "flex",
|
|
61
|
+
width: "317px",
|
|
62
|
+
height: "160px",
|
|
63
|
+
padding: "16px",
|
|
53
64
|
flexDirection: "column",
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
alignItems: "flex-start",
|
|
66
|
+
gap: "10px",
|
|
67
|
+
borderRadius: "4px",
|
|
68
|
+
border: "1px solid #D9D9D9",
|
|
69
|
+
background: "var(--Base-White, #FFF)",
|
|
59
70
|
}}
|
|
60
|
-
className="hover:shadow-sm"
|
|
61
71
|
>
|
|
62
|
-
{/*
|
|
63
|
-
<div
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
{/* Top: Name + Description */}
|
|
73
|
+
<div style={{ flex: 1, width: "100%" }}>
|
|
74
|
+
{/* Provider Name / Logo */}
|
|
75
|
+
<div style={{ marginBottom: "4px" }}>
|
|
76
|
+
{logoUrl ? (
|
|
77
|
+
<img
|
|
78
|
+
src={logoUrl}
|
|
79
|
+
alt={providerName}
|
|
80
|
+
style={{ height: "24px", objectFit: "contain" }}
|
|
81
|
+
/>
|
|
82
|
+
) : icon ? (
|
|
83
|
+
<div style={{ display: "flex", alignItems: "center" }}>{icon}</div>
|
|
84
|
+
) : (
|
|
85
|
+
<h3
|
|
86
|
+
style={{
|
|
87
|
+
fontSize: "16px",
|
|
88
|
+
fontWeight: 700,
|
|
89
|
+
color: "var(--Base-Strong, #1E2125)",
|
|
90
|
+
margin: 0,
|
|
91
|
+
lineHeight: 1.3,
|
|
92
|
+
}}
|
|
93
|
+
>
|
|
94
|
+
{providerName}
|
|
95
|
+
</h3>
|
|
96
|
+
)}
|
|
97
|
+
</div>
|
|
98
|
+
{/* Description */}
|
|
99
|
+
<p
|
|
100
|
+
style={{
|
|
101
|
+
fontSize: "13px",
|
|
102
|
+
lineHeight: 1.4,
|
|
103
|
+
color: "var(--Grey-Strong, #808183)",
|
|
104
|
+
margin: 0,
|
|
105
|
+
}}
|
|
106
|
+
>
|
|
107
|
+
{description}
|
|
108
|
+
</p>
|
|
109
|
+
</div>
|
|
74
110
|
|
|
75
|
-
{/*
|
|
111
|
+
{/* Bottom: Status + Actions */}
|
|
76
112
|
<div
|
|
77
113
|
style={{
|
|
78
|
-
padding: "20px",
|
|
79
|
-
paddingLeft: "24px",
|
|
80
114
|
display: "flex",
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
115
|
+
alignItems: "center",
|
|
116
|
+
justifyContent: "space-between",
|
|
117
|
+
width: "100%",
|
|
118
|
+
gap: "8px",
|
|
84
119
|
}}
|
|
85
120
|
>
|
|
86
|
-
{/*
|
|
121
|
+
{/* Status label */}
|
|
87
122
|
<div
|
|
88
123
|
style={{
|
|
89
124
|
display: "flex",
|
|
90
|
-
alignItems: "
|
|
91
|
-
|
|
92
|
-
|
|
125
|
+
alignItems: "center",
|
|
126
|
+
gap: "6px",
|
|
127
|
+
fontSize: "13px",
|
|
128
|
+
fontWeight: 400,
|
|
129
|
+
color: config.color,
|
|
93
130
|
}}
|
|
94
131
|
>
|
|
95
|
-
{
|
|
96
|
-
|
|
97
|
-
style={{
|
|
98
|
-
width: "48px",
|
|
99
|
-
height: "48px",
|
|
100
|
-
borderRadius: "6px",
|
|
101
|
-
background: `${railColor}08`,
|
|
102
|
-
border: `1px solid ${railColor}18`,
|
|
103
|
-
display: "flex",
|
|
104
|
-
alignItems: "center",
|
|
105
|
-
justifyContent: "center",
|
|
106
|
-
flexShrink: 0,
|
|
107
|
-
}}
|
|
108
|
-
>
|
|
109
|
-
{logoUrl ? (
|
|
110
|
-
<img
|
|
111
|
-
src={logoUrl}
|
|
112
|
-
alt={providerName}
|
|
113
|
-
style={{ width: "32px", height: "32px", objectFit: "contain" }}
|
|
114
|
-
/>
|
|
115
|
-
) : (
|
|
116
|
-
<div
|
|
117
|
-
style={{
|
|
118
|
-
color: railColor,
|
|
119
|
-
fontSize: "20px",
|
|
120
|
-
fontWeight: 650,
|
|
121
|
-
opacity: 0.8,
|
|
122
|
-
}}
|
|
123
|
-
>
|
|
124
|
-
{icon || (providerName ? providerName.charAt(0) : "")}
|
|
125
|
-
</div>
|
|
126
|
-
)}
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
{/* Status Badge */}
|
|
130
|
-
<div
|
|
131
|
-
style={{
|
|
132
|
-
display: "inline-flex",
|
|
133
|
-
alignItems: "center",
|
|
134
|
-
gap: "6px",
|
|
135
|
-
padding: "4px 10px",
|
|
136
|
-
borderRadius: "4px",
|
|
137
|
-
background: config.bgColor,
|
|
138
|
-
border: `1px solid ${config.borderColor}`,
|
|
139
|
-
fontSize: "11px",
|
|
140
|
-
fontWeight: 600,
|
|
141
|
-
letterSpacing: "0.01em",
|
|
142
|
-
color: config.color,
|
|
143
|
-
flexShrink: 0,
|
|
144
|
-
}}
|
|
145
|
-
>
|
|
146
|
-
{config.icon}
|
|
147
|
-
{config.label}
|
|
148
|
-
</div>
|
|
132
|
+
{config.icon}
|
|
133
|
+
{config.label}
|
|
149
134
|
</div>
|
|
150
135
|
|
|
151
|
-
{/*
|
|
152
|
-
<div style={{ flex:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
136
|
+
{/* Action area */}
|
|
137
|
+
<div style={{ display: "flex", alignItems: "center", gap: "8px" }}>
|
|
138
|
+
{/* Settings icon for connected */}
|
|
139
|
+
{isConnected && onConfigure && (
|
|
140
|
+
<button
|
|
141
|
+
onClick={(e) => {
|
|
142
|
+
e.stopPropagation();
|
|
143
|
+
onConfigure();
|
|
144
|
+
}}
|
|
145
|
+
style={{
|
|
146
|
+
display: "flex",
|
|
147
|
+
alignItems: "center",
|
|
148
|
+
justifyContent: "center",
|
|
149
|
+
width: "32px",
|
|
150
|
+
height: "32px",
|
|
151
|
+
border: "none",
|
|
152
|
+
background: "transparent",
|
|
153
|
+
color: "var(--Grey-Strong, #808183)",
|
|
154
|
+
cursor: "pointer",
|
|
155
|
+
borderRadius: "4px",
|
|
156
|
+
transition: "background 0.15s ease",
|
|
157
|
+
}}
|
|
158
|
+
onMouseEnter={(e) => {
|
|
159
|
+
e.currentTarget.style.background = "rgba(0,0,0,0.04)";
|
|
160
|
+
}}
|
|
161
|
+
onMouseLeave={(e) => {
|
|
162
|
+
e.currentTarget.style.background = "transparent";
|
|
163
|
+
}}
|
|
164
|
+
>
|
|
165
|
+
<Settings2 size={20} strokeWidth={2} />
|
|
166
|
+
</button>
|
|
167
|
+
)}
|
|
174
168
|
|
|
175
|
-
|
|
176
|
-
{status !== "coming-soon" && (
|
|
169
|
+
{/* Connect / Disconnect button */}
|
|
177
170
|
<button
|
|
178
171
|
onClick={(e) => {
|
|
179
172
|
e.stopPropagation();
|
|
180
|
-
|
|
173
|
+
onConnect?.();
|
|
181
174
|
}}
|
|
175
|
+
disabled={isComingSoon}
|
|
182
176
|
style={{
|
|
183
177
|
display: "flex",
|
|
184
|
-
|
|
178
|
+
height: "28px",
|
|
179
|
+
padding: "10px",
|
|
185
180
|
justifyContent: "center",
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
181
|
+
alignItems: "center",
|
|
182
|
+
gap: "10px",
|
|
183
|
+
borderRadius: "10px",
|
|
184
|
+
border: config.actionFilled
|
|
185
|
+
? "1px solid transparent"
|
|
186
|
+
: "1px solid #D9D9D9",
|
|
187
|
+
background: isComingSoon
|
|
188
|
+
? "var(--Grey-Muted, #B2AEA8)"
|
|
189
|
+
: config.actionFilled
|
|
190
|
+
? "var(--Base-Strong, #1E2125)"
|
|
191
|
+
: "var(--Base-White, #FFF)",
|
|
192
|
+
color: config.actionFilled || isComingSoon
|
|
193
|
+
? "#FFF"
|
|
194
|
+
: "var(--Base-Strong, #1E2125)",
|
|
191
195
|
fontSize: "13px",
|
|
192
196
|
fontWeight: 600,
|
|
193
|
-
|
|
194
|
-
|
|
197
|
+
cursor: isComingSoon ? "default" : "pointer",
|
|
198
|
+
opacity: isComingSoon ? 0.6 : 1,
|
|
195
199
|
transition: "all 0.15s ease",
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
lineHeight: 1.4,
|
|
201
|
+
}}
|
|
202
|
+
onMouseEnter={(e) => {
|
|
203
|
+
if (!isComingSoon && !config.actionFilled) {
|
|
204
|
+
e.currentTarget.style.background = "rgba(0,0,0,0.04)";
|
|
205
|
+
}
|
|
206
|
+
}}
|
|
207
|
+
onMouseLeave={(e) => {
|
|
208
|
+
if (!isComingSoon && !config.actionFilled) {
|
|
209
|
+
e.currentTarget.style.background = "var(--Base-White, #FFF)";
|
|
210
|
+
}
|
|
198
211
|
}}
|
|
199
|
-
className="hover:bg-[rgba(30,33,37,0.06)] hover:border-[rgba(30,33,37,0.20)]"
|
|
200
212
|
>
|
|
201
|
-
|
|
202
|
-
{status === "connected" ? "Configure" : "Connect"}
|
|
213
|
+
{config.actionLabel}
|
|
203
214
|
</button>
|
|
204
|
-
|
|
215
|
+
</div>
|
|
205
216
|
</div>
|
|
206
217
|
</div>
|
|
207
218
|
);
|
|
208
219
|
}
|
|
209
|
-
|
|
@@ -101,7 +101,7 @@ function NavRow({ text, linkText, onClick }) {
|
|
|
101
101
|
|
|
102
102
|
function TermsFooter({ onTerms, onPrivacyPolicy, paddingTop }) {
|
|
103
103
|
return (
|
|
104
|
-
<div style={{ display: 'flex', justifyContent: 'center', width: '100%',
|
|
104
|
+
<div style={{ display: 'flex', justifyContent: 'center', width: '100%', position: 'absolute', bottom: 40, left: 0, right: 0 }}>
|
|
105
105
|
<span style={{ fontSize: 15, fontWeight: 400, lineHeight: '22px', color: 'var(--color-text)', fontFamily: FF, textAlign: 'center', whiteSpace: 'nowrap' }}>
|
|
106
106
|
By continuing, you agree to our{' '}
|
|
107
107
|
<a href="https://pages.chordia.ai/terms-of-use/" target="_blank" rel="noopener noreferrer"
|
|
@@ -462,7 +462,7 @@ export default function LoginPage({
|
|
|
462
462
|
</div>
|
|
463
463
|
|
|
464
464
|
{/* Dots */}
|
|
465
|
-
<div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 8, height: 4,
|
|
465
|
+
<div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 8, height: 4, position: 'absolute', bottom: 40, left: 48 }}>
|
|
466
466
|
{Array.from({ length: SLIDE_COUNT }).map((_, i) => (
|
|
467
467
|
<button key={i} onClick={() => setActiveSlide(i)}
|
|
468
468
|
style={{
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useState } from "react";
|
|
4
4
|
import {
|
|
5
|
-
Home, FolderClosed, Users, Settings, ChevronDown,
|
|
5
|
+
Home, FolderClosed, Users, Settings, ChevronDown,
|
|
6
6
|
LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,
|
|
7
7
|
FileText, Headphones, Shield, Sliders, Workflow, SquareDot,
|
|
8
8
|
PanelLeftClose, PanelLeft,
|
|
@@ -73,7 +73,7 @@ export default function Sidebar({
|
|
|
73
73
|
onToggleCollapse,
|
|
74
74
|
header,
|
|
75
75
|
footer,
|
|
76
|
-
width =
|
|
76
|
+
width = 244,
|
|
77
77
|
collapsedWidth = 56,
|
|
78
78
|
}) {
|
|
79
79
|
const [internalCollapsed, setInternalCollapsed] = useState(false);
|
|
@@ -106,8 +106,10 @@ export default function Sidebar({
|
|
|
106
106
|
height: "100%",
|
|
107
107
|
display: "flex",
|
|
108
108
|
flexDirection: "column",
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
alignItems: "flex-start",
|
|
110
|
+
padding: collapsed ? "0" : "0 0 24px 24px",
|
|
111
|
+
gap: 24,
|
|
112
|
+
background: "var(--Background-Inverse, #0B0B0B)",
|
|
111
113
|
fontFamily: "var(--font-sans)",
|
|
112
114
|
transition: "width 0.2s ease, min-width 0.2s ease",
|
|
113
115
|
overflow: "hidden",
|
|
@@ -116,7 +118,7 @@ export default function Sidebar({
|
|
|
116
118
|
>
|
|
117
119
|
{/* Header slot */}
|
|
118
120
|
{header && !collapsed && (
|
|
119
|
-
<div style={{ padding: "16px 16px 8px", flexShrink: 0 }}>
|
|
121
|
+
<div style={{ padding: "16px 16px 8px", flexShrink: 0, width: "100%" }}>
|
|
120
122
|
{header}
|
|
121
123
|
</div>
|
|
122
124
|
)}
|
|
@@ -126,8 +128,9 @@ export default function Sidebar({
|
|
|
126
128
|
style={{
|
|
127
129
|
display: "flex",
|
|
128
130
|
justifyContent: collapsed ? "center" : "flex-end",
|
|
129
|
-
padding: collapsed ? "12px 0" : "8px
|
|
131
|
+
padding: collapsed ? "12px 0" : "8px 0 0",
|
|
130
132
|
flexShrink: 0,
|
|
133
|
+
width: "100%",
|
|
131
134
|
}}
|
|
132
135
|
>
|
|
133
136
|
<button
|
|
@@ -142,17 +145,17 @@ export default function Sidebar({
|
|
|
142
145
|
borderRadius: "var(--radius-sm)",
|
|
143
146
|
border: "none",
|
|
144
147
|
background: "transparent",
|
|
145
|
-
color: "
|
|
148
|
+
color: "rgba(255, 255, 255, 0.5)",
|
|
146
149
|
cursor: "pointer",
|
|
147
150
|
transition: "background 0.15s ease, color 0.15s ease",
|
|
148
151
|
}}
|
|
149
152
|
onMouseEnter={(e) => {
|
|
150
|
-
e.currentTarget.style.background = "
|
|
151
|
-
e.currentTarget.style.color = "
|
|
153
|
+
e.currentTarget.style.background = "rgba(255, 255, 255, 0.08)";
|
|
154
|
+
e.currentTarget.style.color = "rgba(255, 255, 255, 0.8)";
|
|
152
155
|
}}
|
|
153
156
|
onMouseLeave={(e) => {
|
|
154
157
|
e.currentTarget.style.background = "transparent";
|
|
155
|
-
e.currentTarget.style.color = "
|
|
158
|
+
e.currentTarget.style.color = "rgba(255, 255, 255, 0.5)";
|
|
156
159
|
}}
|
|
157
160
|
>
|
|
158
161
|
{collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}
|
|
@@ -165,7 +168,8 @@ export default function Sidebar({
|
|
|
165
168
|
flex: 1,
|
|
166
169
|
overflowY: "auto",
|
|
167
170
|
overflowX: "hidden",
|
|
168
|
-
padding: collapsed ? "0 8px" : "0
|
|
171
|
+
padding: collapsed ? "0 8px" : "0",
|
|
172
|
+
width: "100%",
|
|
169
173
|
}}
|
|
170
174
|
>
|
|
171
175
|
{menuItems.map((item, idx) => (
|
|
@@ -178,7 +182,7 @@ export default function Sidebar({
|
|
|
178
182
|
fontWeight: 650,
|
|
179
183
|
letterSpacing: "0.08em",
|
|
180
184
|
textTransform: "uppercase",
|
|
181
|
-
color: "
|
|
185
|
+
color: "rgba(255, 255, 255, 0.35)",
|
|
182
186
|
padding: "16px 8px 6px",
|
|
183
187
|
lineHeight: 1,
|
|
184
188
|
}}
|
|
@@ -213,8 +217,9 @@ export default function Sidebar({
|
|
|
213
217
|
<div
|
|
214
218
|
style={{
|
|
215
219
|
padding: "12px 16px",
|
|
216
|
-
borderTop: "1px solid
|
|
220
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.08)",
|
|
217
221
|
flexShrink: 0,
|
|
222
|
+
width: "100%",
|
|
218
223
|
}}
|
|
219
224
|
>
|
|
220
225
|
{footer}
|
|
@@ -235,30 +240,35 @@ function SidebarItem({ item, active, onNavigate, collapsed }) {
|
|
|
235
240
|
style={{
|
|
236
241
|
display: "flex",
|
|
237
242
|
alignItems: "center",
|
|
238
|
-
gap: collapsed ? 0 :
|
|
243
|
+
gap: collapsed ? 0 : 12,
|
|
239
244
|
justifyContent: collapsed ? "center" : "flex-start",
|
|
240
245
|
width: "100%",
|
|
241
|
-
padding: collapsed ? "10px 0" : "
|
|
242
|
-
borderRadius: "
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
+
padding: collapsed ? "10px 0" : "12px 24px 12px 12px",
|
|
247
|
+
borderRadius: active ? "4px 0 0 4px" : "4px",
|
|
248
|
+
borderRight: active ? "2px solid #00A66E" : "2px solid transparent",
|
|
249
|
+
borderTop: "none",
|
|
250
|
+
borderBottom: "none",
|
|
251
|
+
borderLeft: "none",
|
|
252
|
+
background: active ? "var(--Background-MonoPressed, #323232)" : "transparent",
|
|
253
|
+
color: active ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
|
|
246
254
|
fontWeight: active ? 550 : 400,
|
|
247
255
|
fontSize: "var(--text-sm)",
|
|
248
256
|
fontFamily: "var(--font-sans)",
|
|
249
257
|
cursor: "pointer",
|
|
250
258
|
textAlign: "left",
|
|
251
|
-
transition: "background 0.15s ease, color 0.1s ease",
|
|
259
|
+
transition: "background 0.15s ease, color 0.1s ease, border-color 0.15s ease",
|
|
252
260
|
marginBottom: 2,
|
|
253
261
|
}}
|
|
254
262
|
onMouseEnter={(e) => {
|
|
255
263
|
if (!active) {
|
|
256
|
-
e.currentTarget.style.background = "var(--
|
|
264
|
+
e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
|
|
265
|
+
e.currentTarget.style.color = "#00A66E";
|
|
257
266
|
}
|
|
258
267
|
}}
|
|
259
268
|
onMouseLeave={(e) => {
|
|
260
269
|
if (!active) {
|
|
261
270
|
e.currentTarget.style.background = "transparent";
|
|
271
|
+
e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
|
|
262
272
|
}
|
|
263
273
|
}}
|
|
264
274
|
>
|
|
@@ -266,10 +276,10 @@ function SidebarItem({ item, active, onNavigate, collapsed }) {
|
|
|
266
276
|
<span style={{ flexShrink: 0, display: "flex" }}>{item.icon}</span>
|
|
267
277
|
) : (
|
|
268
278
|
<Icon
|
|
269
|
-
size={
|
|
279
|
+
size={18}
|
|
270
280
|
style={{
|
|
271
281
|
flexShrink: 0,
|
|
272
|
-
color:
|
|
282
|
+
color: "inherit",
|
|
273
283
|
}}
|
|
274
284
|
/>
|
|
275
285
|
)}
|
|
@@ -304,24 +314,30 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
|
|
|
304
314
|
justifyContent: "center",
|
|
305
315
|
width: "100%",
|
|
306
316
|
padding: "10px 0",
|
|
307
|
-
borderRadius: "
|
|
317
|
+
borderRadius: "4px",
|
|
308
318
|
border: "none",
|
|
309
|
-
background: hasActiveChild ? "var(--
|
|
310
|
-
color: hasActiveChild ? "
|
|
319
|
+
background: hasActiveChild ? "var(--Background-MonoPressed, #323232)" : "transparent",
|
|
320
|
+
color: hasActiveChild ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
|
|
311
321
|
cursor: "pointer",
|
|
312
322
|
marginBottom: 2,
|
|
313
323
|
transition: "background 0.15s ease",
|
|
314
324
|
}}
|
|
315
325
|
onMouseEnter={(e) => {
|
|
316
|
-
if (!hasActiveChild)
|
|
326
|
+
if (!hasActiveChild) {
|
|
327
|
+
e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
|
|
328
|
+
e.currentTarget.style.color = "#00A66E";
|
|
329
|
+
}
|
|
317
330
|
}}
|
|
318
331
|
onMouseLeave={(e) => {
|
|
319
|
-
if (!hasActiveChild)
|
|
332
|
+
if (!hasActiveChild) {
|
|
333
|
+
e.currentTarget.style.background = "transparent";
|
|
334
|
+
e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
|
|
335
|
+
}
|
|
320
336
|
}}
|
|
321
337
|
>
|
|
322
338
|
<Icon
|
|
323
|
-
size={
|
|
324
|
-
style={{ color:
|
|
339
|
+
size={18}
|
|
340
|
+
style={{ color: "inherit" }}
|
|
325
341
|
/>
|
|
326
342
|
</button>
|
|
327
343
|
);
|
|
@@ -335,32 +351,35 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
|
|
|
335
351
|
style={{
|
|
336
352
|
display: "flex",
|
|
337
353
|
alignItems: "center",
|
|
338
|
-
gap:
|
|
354
|
+
gap: 12,
|
|
339
355
|
width: "100%",
|
|
340
|
-
padding: "
|
|
341
|
-
borderRadius: "
|
|
356
|
+
padding: "12px 24px 12px 12px",
|
|
357
|
+
borderRadius: "4px",
|
|
342
358
|
border: "none",
|
|
343
359
|
background: "transparent",
|
|
344
|
-
color: hasActiveChild ? "
|
|
360
|
+
color: hasActiveChild ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
|
|
345
361
|
fontWeight: hasActiveChild ? 550 : 400,
|
|
346
362
|
fontSize: "var(--text-sm)",
|
|
347
363
|
fontFamily: "var(--font-sans)",
|
|
348
364
|
cursor: "pointer",
|
|
349
365
|
textAlign: "left",
|
|
350
|
-
transition: "background 0.15s ease",
|
|
366
|
+
transition: "background 0.15s ease, color 0.15s ease",
|
|
351
367
|
}}
|
|
352
368
|
onMouseEnter={(e) => {
|
|
353
|
-
e.currentTarget.style.background = "var(--
|
|
369
|
+
e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
|
|
370
|
+
e.currentTarget.style.color = "#00A66E";
|
|
354
371
|
}}
|
|
355
372
|
onMouseLeave={(e) => {
|
|
356
373
|
e.currentTarget.style.background = "transparent";
|
|
374
|
+
if (!hasActiveChild) e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
|
|
375
|
+
else e.currentTarget.style.color = "#00A66E";
|
|
357
376
|
}}
|
|
358
377
|
>
|
|
359
378
|
<Icon
|
|
360
|
-
size={
|
|
379
|
+
size={18}
|
|
361
380
|
style={{
|
|
362
381
|
flexShrink: 0,
|
|
363
|
-
color:
|
|
382
|
+
color: "inherit",
|
|
364
383
|
}}
|
|
365
384
|
/>
|
|
366
385
|
<span
|
|
@@ -377,7 +396,8 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
|
|
|
377
396
|
size={14}
|
|
378
397
|
style={{
|
|
379
398
|
flexShrink: 0,
|
|
380
|
-
color: "
|
|
399
|
+
color: "inherit",
|
|
400
|
+
opacity: 0.7,
|
|
381
401
|
transform: expanded ? "rotate(0deg)" : "rotate(-90deg)",
|
|
382
402
|
transition: "transform 0.2s ease",
|
|
383
403
|
}}
|