1import { ColorScheme } from "../theme/colorScheme"
2import { background, border, borderColor, foreground, text } from "./components"
3import { interactive, toggleable } from "../element"
4export default function contactsPanel(colorScheme: ColorScheme) {
5 const nameMargin = 8
6 const sidePadding = 12
7
8 let layer = colorScheme.middle
9
10 const contactButton = {
11 background: background(layer, "on"),
12 color: foreground(layer, "on"),
13 iconWidth: 8,
14 buttonWidth: 16,
15 cornerRadius: 8,
16 }
17 const projectRow = {
18 guestAvatarSpacing: 4,
19 height: 24,
20 guestAvatar: {
21 cornerRadius: 8,
22 width: 14,
23 },
24 name: {
25 ...text(layer, "mono", { size: "sm" }),
26 margin: {
27 left: nameMargin,
28 right: 6,
29 },
30 },
31 guests: {
32 margin: {
33 left: nameMargin,
34 right: nameMargin,
35 },
36 },
37 padding: {
38 left: sidePadding,
39 right: sidePadding,
40 },
41 }
42
43 return {
44 background: background(layer),
45 padding: { top: 12 },
46 userQueryEditor: {
47 background: background(layer, "on"),
48 cornerRadius: 6,
49 text: text(layer, "mono", "on"),
50 placeholderText: text(layer, "mono", "on", "disabled", {
51 size: "xs",
52 }),
53 selection: colorScheme.players[0],
54 border: border(layer, "on"),
55 padding: {
56 bottom: 4,
57 left: 8,
58 right: 8,
59 top: 4,
60 },
61 margin: {
62 left: 6,
63 },
64 },
65 userQueryEditorHeight: 33,
66 addContactButton: {
67 margin: { left: 6, right: 12 },
68 color: foreground(layer, "on"),
69 buttonWidth: 28,
70 iconWidth: 16,
71 },
72 rowHeight: 28,
73 sectionIconSize: 8,
74 headerRow: toggleable({
75 base: interactive({
76 base: {
77 ...text(layer, "mono", { size: "sm" }),
78 margin: { top: 14 },
79 padding: {
80 left: sidePadding,
81 right: sidePadding,
82 },
83 background: background(layer, "default"), // posiewic: breaking change
84 },
85 state: {
86 hovered: { background: background(layer, "default") },
87 }, // hack, we want headerRow to be interactive for whatever reason. It probably shouldn't be interactive in the first place.
88 }),
89 state: {
90 active: {
91 default: {
92 ...text(layer, "mono", "active", { size: "sm" }),
93 background: background(layer, "active"),
94 },
95 }
96 }
97 }),
98 leaveCall: interactive({
99 base: {
100 background: background(layer),
101 border: border(layer),
102 cornerRadius: 6,
103 margin: {
104 top: 1,
105 },
106 padding: {
107 top: 1,
108 bottom: 1,
109 left: 7,
110 right: 7,
111 },
112 ...text(layer, "sans", "variant", { size: "xs" }),
113 },
114 state: {
115 hovered: {
116 ...text(layer, "sans", "hovered", { size: "xs" }),
117 background: background(layer, "hovered"),
118 border: border(layer, "hovered"),
119 },
120 },
121 }),
122 contactRow: {
123 inactive: {
124 default: {
125 padding: {
126 left: sidePadding,
127 right: sidePadding,
128 },
129 },
130 },
131 active: {
132 default: {
133 background: background(layer, "active"),
134 padding: {
135 left: sidePadding,
136 right: sidePadding,
137 },
138 },
139 },
140 },
141
142 contactAvatar: {
143 cornerRadius: 10,
144 width: 18,
145 },
146 contactStatusFree: {
147 cornerRadius: 4,
148 padding: 4,
149 margin: { top: 12, left: 12 },
150 background: foreground(layer, "positive"),
151 },
152 contactStatusBusy: {
153 cornerRadius: 4,
154 padding: 4,
155 margin: { top: 12, left: 12 },
156 background: foreground(layer, "negative"),
157 },
158 contactUsername: {
159 ...text(layer, "mono", { size: "sm" }),
160 margin: {
161 left: nameMargin,
162 },
163 },
164 contactButtonSpacing: nameMargin,
165 contactButton: interactive({
166 base: { ...contactButton },
167 state: {
168 hovered: {
169 background: background(layer, "hovered"),
170 },
171 },
172 }),
173 disabledButton: {
174 ...contactButton,
175 background: background(layer, "on"),
176 color: foreground(layer, "on"),
177 },
178 callingIndicator: {
179 ...text(layer, "mono", "variant", { size: "xs" }),
180 },
181 treeBranch: toggleable(
182 interactive({
183 base: {
184 color: borderColor(layer),
185 width: 1,
186 },
187 state: {
188 hovered: {
189 color: borderColor(layer),
190 },
191 },
192 }),
193 {
194 default: {
195 color: borderColor(layer),
196 },
197 }
198 ),
199 projectRow: toggleable(
200 interactive({
201 base: {
202 ...projectRow,
203 background: background(layer),
204 icon: {
205 margin: { left: nameMargin },
206 color: foreground(layer, "variant"),
207 width: 12,
208 },
209 name: {
210 ...projectRow.name,
211 ...text(layer, "mono", { size: "sm" }),
212 },
213 },
214 state: {
215 hovered: {
216 background: background(layer, "hovered"),
217 },
218 },
219 }),
220 {
221 default: { background: background(layer, "active") },
222 }
223 ),
224 }
225}