Skip to content

Commit d2d9ddf

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 5cce347 commit d2d9ddf

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
statusAway: Color(0xff73788c).withValues(alpha: 0.25),
@@ -247,6 +249,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
247249
labelMenuButton: const Color(0xffffffff).withValues(alpha: 0.85),
248250
labelSearchPrompt: const Color(0xffffffff).withValues(alpha: 0.5),
249251
mainBackground: const Color(0xff1d1d1d),
252+
neutralButtonBg: const Color(0xffd4d1e0),
253+
neutralButtonLabel: const Color(0xffa9a3c2),
250254
radioBorder: Color(0xff626573),
251255
radioFillSelected: Color(0xff4e7cfa),
252256
statusAway: Color(0xffabaeba).withValues(alpha: 0.30),
@@ -331,6 +335,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
331335
required this.labelMenuButton,
332336
required this.labelSearchPrompt,
333337
required this.mainBackground,
338+
required this.neutralButtonBg,
339+
required this.neutralButtonLabel,
334340
required this.radioBorder,
335341
required this.radioFillSelected,
336342
required this.statusAway,
@@ -412,6 +418,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
412418
final Color labelMenuButton;
413419
final Color labelSearchPrompt;
414420
final Color mainBackground;
421+
final Color neutralButtonBg;
422+
final Color neutralButtonLabel;
415423
final Color radioBorder;
416424
final Color radioFillSelected;
417425
final Color statusAway;
@@ -488,6 +496,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
488496
Color? labelMenuButton,
489497
Color? labelSearchPrompt,
490498
Color? mainBackground,
499+
Color? neutralButtonBg,
500+
Color? neutralButtonLabel,
491501
Color? radioBorder,
492502
Color? radioFillSelected,
493503
Color? statusAway,
@@ -559,6 +569,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
559569
labelMenuButton: labelMenuButton ?? this.labelMenuButton,
560570
labelSearchPrompt: labelSearchPrompt ?? this.labelSearchPrompt,
561571
mainBackground: mainBackground ?? this.mainBackground,
572+
neutralButtonBg: neutralButtonBg ?? this.neutralButtonBg,
573+
neutralButtonLabel: neutralButtonLabel ?? this.neutralButtonLabel,
562574
radioBorder: radioBorder ?? this.radioBorder,
563575
radioFillSelected: radioFillSelected ?? this.radioFillSelected,
564576
statusAway: statusAway ?? this.statusAway,
@@ -637,6 +649,8 @@ class DesignVariables extends ThemeExtension<DesignVariables> {
637649
labelMenuButton: Color.lerp(labelMenuButton, other.labelMenuButton, t)!,
638650
labelSearchPrompt: Color.lerp(labelSearchPrompt, other.labelSearchPrompt, t)!,
639651
mainBackground: Color.lerp(mainBackground, other.mainBackground, t)!,
652+
neutralButtonBg: Color.lerp(neutralButtonBg, other.neutralButtonBg, t)!,
653+
neutralButtonLabel: Color.lerp(neutralButtonLabel, other.neutralButtonLabel, t)!,
640654
radioBorder: Color.lerp(radioBorder, other.radioBorder, t)!,
641655
radioFillSelected: Color.lerp(radioFillSelected, other.radioFillSelected, t)!,
642656
statusAway: Color.lerp(statusAway, other.statusAway, t)!,

0 commit comments

Comments
 (0)