Skip to content

Commit 08d0b90

Browse files
committed
button [nfc]: Have ZulipWebUiKitButton support ad hoc minimal-neutral type
For muted-users, coming up. Figma: https://www.figma.com/design/1JTNtYo9memgW7vV6d0ygq/Zulip-Mobile?node-id=6092-50795&m=dev
1 parent 1d0159a commit 08d0b90

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

lib/widgets/button.dart

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ class ZulipWebUiKitButton extends StatelessWidget {
3333

3434
WidgetStateColor _backgroundColor(DesignVariables designVariables) {
3535
switch ((attention, intent)) {
36+
case (ZulipWebUiKitButtonAttention.minimal, ZulipWebUiKitButtonIntent.neutral):
37+
return WidgetStateColor.fromMap({
38+
WidgetState.pressed: designVariables.neutralButtonBg.withFadedAlpha(0.3),
39+
~WidgetState.pressed: designVariables.neutralButtonBg.withAlpha(0),
40+
});
41+
case (ZulipWebUiKitButtonAttention.medium, ZulipWebUiKitButtonIntent.neutral):
42+
case (ZulipWebUiKitButtonAttention.high, ZulipWebUiKitButtonIntent.neutral):
43+
case (ZulipWebUiKitButtonAttention.minimal, ZulipWebUiKitButtonIntent.info):
44+
throw UnimplementedError();
3645
case (ZulipWebUiKitButtonAttention.medium, ZulipWebUiKitButtonIntent.info):
3746
return WidgetStateColor.fromMap({
3847
WidgetState.pressed: designVariables.btnBgAttMediumIntInfoActive,
@@ -48,6 +57,13 @@ class ZulipWebUiKitButton extends StatelessWidget {
4857

4958
Color _labelColor(DesignVariables designVariables) {
5059
switch ((attention, intent)) {
60+
case (ZulipWebUiKitButtonAttention.minimal, ZulipWebUiKitButtonIntent.neutral):
61+
// TODO nit: don't fade in pressed state
62+
return designVariables.neutralButtonLabel.withFadedAlpha(0.85);
63+
case (ZulipWebUiKitButtonAttention.medium, ZulipWebUiKitButtonIntent.neutral):
64+
case (ZulipWebUiKitButtonAttention.high, ZulipWebUiKitButtonIntent.neutral):
65+
case (ZulipWebUiKitButtonAttention.minimal, ZulipWebUiKitButtonIntent.info):
66+
throw UnimplementedError();
5167
case (ZulipWebUiKitButtonAttention.medium, ZulipWebUiKitButtonIntent.info):
5268
return designVariables.btnLabelAttMediumIntInfo;
5369
case (ZulipWebUiKitButtonAttention.high, ZulipWebUiKitButtonIntent.info):
@@ -80,6 +96,8 @@ class ZulipWebUiKitButton extends StatelessWidget {
8096

8197
BorderSide _borderSide(DesignVariables designVariables) {
8298
switch (attention) {
99+
case ZulipWebUiKitButtonAttention.minimal:
100+
return BorderSide.none;
83101
case ZulipWebUiKitButtonAttention.medium:
84102
// TODO inner shadow effect like `box-shadow: inset`, following Figma;
85103
// needs Flutter support for something like that:
@@ -167,10 +185,15 @@ enum ZulipWebUiKitButtonAttention {
167185
high,
168186
medium,
169187
// low,
188+
189+
/// An ad hoc value for the "Reveal message" button
190+
/// on a message from a muted sender:
191+
/// https://www.figma.com/design/1JTNtYo9memgW7vV6d0ygq/Zulip-Mobile?node-id=6092-50786&m=dev
192+
minimal,
170193
}
171194

172195
enum ZulipWebUiKitButtonIntent {
173-
// neutral,
196+
neutral,
174197
// warning,
175198
// danger,
176199
info,

lib/widgets/theme.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
171171
labelMenuButton: const Color(0xff222222),
172172
labelSearchPrompt: const Color(0xff000000).withValues(alpha: 0.5),
173173
mainBackground: const Color(0xfff0f0f0),
174+
neutralButtonBg: const Color(0xff8c84ae),
175+
neutralButtonLabel: const Color(0xff433d5c),
174176
radioBorder: Color(0xffbbbdc8),
175177
radioFillSelected: Color(0xff4370f0),
176178
textInput: const Color(0xff000000),
@@ -240,6 +242,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
240242
labelMenuButton: const Color(0xffffffff).withValues(alpha: 0.85),
241243
labelSearchPrompt: const Color(0xffffffff).withValues(alpha: 0.5),
242244
mainBackground: const Color(0xff1d1d1d),
245+
neutralButtonBg: const Color(0xffd4d1e0),
246+
neutralButtonLabel: const Color(0xffa9a3c2),
243247
radioBorder: Color(0xff626573),
244248
radioFillSelected: Color(0xff4e7cfa),
245249
textInput: const Color(0xffffffff).withValues(alpha: 0.9),
@@ -317,6 +321,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
317321
required this.labelMenuButton,
318322
required this.labelSearchPrompt,
319323
required this.mainBackground,
324+
required this.neutralButtonBg,
325+
required this.neutralButtonLabel,
320326
required this.radioBorder,
321327
required this.radioFillSelected,
322328
required this.textInput,
@@ -395,6 +401,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
395401
final Color labelMenuButton;
396402
final Color labelSearchPrompt;
397403
final Color mainBackground;
404+
final Color neutralButtonBg;
405+
final Color neutralButtonLabel;
398406
final Color radioBorder;
399407
final Color radioFillSelected;
400408
final Color textInput;
@@ -468,6 +476,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
468476
Color? labelMenuButton,
469477
Color? labelSearchPrompt,
470478
Color? mainBackground,
479+
Color? neutralButtonBg,
480+
Color? neutralButtonLabel,
471481
Color? radioBorder,
472482
Color? radioFillSelected,
473483
Color? textInput,
@@ -536,6 +546,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
536546
labelMenuButton: labelMenuButton ?? this.labelMenuButton,
537547
labelSearchPrompt: labelSearchPrompt ?? this.labelSearchPrompt,
538548
mainBackground: mainBackground ?? this.mainBackground,
549+
neutralButtonBg: neutralButtonBg ?? this.neutralButtonBg,
550+
neutralButtonLabel: neutralButtonLabel ?? this.neutralButtonLabel,
539551
radioBorder: radioBorder ?? this.radioBorder,
540552
radioFillSelected: radioFillSelected ?? this.radioFillSelected,
541553
textInput: textInput ?? this.textInput,
@@ -611,6 +623,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
611623
labelMenuButton: Color.lerp(labelMenuButton, other.labelMenuButton, t)!,
612624
labelSearchPrompt: Color.lerp(labelSearchPrompt, other.labelSearchPrompt, t)!,
613625
mainBackground: Color.lerp(mainBackground, other.mainBackground, t)!,
626+
neutralButtonBg: Color.lerp(neutralButtonBg, other.neutralButtonBg, t)!,
627+
neutralButtonLabel: Color.lerp(neutralButtonLabel, other.neutralButtonLabel, t)!,
614628
radioBorder: Color.lerp(radioBorder, other.radioBorder, t)!,
615629
radioFillSelected: Color.lerp(radioFillSelected, other.radioFillSelected, t)!,
616630
textInput: Color.lerp(textInput, other.textInput, t)!,

0 commit comments

Comments
 (0)