Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: [MDS-535] Create MoonTabBar component #179

Merged
merged 1 commit into from
May 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions example/lib/src/storybook/stories/segmented_control.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,7 @@ class SegmentedControlStory extends Story {
description: "Gap between MoonSegmentedControl segments.",
enabled: false,
initial: 4,
max: 16,
);

final isExpandedKnob = context.knobs.boolean(
label: "isExpanded",
description: "Whether MoonSegmentControl is horizontally expanded.",
max: 12,
);

final showLeadingKnob = context.knobs.boolean(
Expand All @@ -109,6 +104,16 @@ class SegmentedControlStory extends Story {
description: "Show widget in MoonSegmentedControl trailing slot.",
);

final isExpandedKnob = context.knobs.boolean(
label: "isExpanded",
description: "Expand MoonSegmentControl horizontally.",
);

final isDisabledKnob = context.knobs.boolean(
label: "isDisabled",
description: "Disable MoonSegmentedControl.",
);

final segmentStyle = SegmentStyle(
textColor: textColor,
selectedTextColor: selectedTextColor,
Expand All @@ -128,6 +133,7 @@ class SegmentedControlStory extends Story {
Column(
children: [
MoonSegmentedControl(
isDisabled: isDisabledKnob,
isExpanded: isExpandedKnob,
gap: gapKnob?.toDouble(),
segmentedControlSize: segmentedControlSizesKnob,
Expand Down Expand Up @@ -159,6 +165,7 @@ class SegmentedControlStory extends Story {
const TextDivider(text: "Icon MoonSegmentedControl"),
const SizedBox(height: 32),
MoonSegmentedControl(
isDisabled: isDisabledKnob,
isExpanded: isExpandedKnob,
gap: gapKnob?.toDouble(),
segmentedControlSize: segmentedControlSizesKnob,
Expand Down
225 changes: 225 additions & 0 deletions example/lib/src/storybook/stories/tab_bar.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
import 'package:example/src/storybook/common/color_options.dart';
import 'package:example/src/storybook/common/widgets/text_divider.dart';
import 'package:flutter/material.dart';
import 'package:moon_design/moon_design.dart';
import 'package:storybook_flutter/storybook_flutter.dart';

class TabBarStory extends Story {
TabBarStory()
: super(
name: "TabBar",
builder: (context) {
final tabsSizesKnob = context.knobs.nullable.options(
label: "tabBarSize",
description: "Size variants for MoonTabBar.",
enabled: false,
initial: MoonTabBarSize.md,
options: const [
Option(label: "sm", value: MoonTabBarSize.sm),
Option(label: "md", value: MoonTabBarSize.md),
],
);

final textColorsKnob = context.knobs.nullable.options(
label: "textColor",
description: "MoonColors variants for default text.",
enabled: false,
initial: 0,
// piccolo
options: colorOptions,
);

final textColor = colorTable(context)[textColorsKnob ?? 40];

final selectedTextColorsKnob = context.knobs.nullable.options(
label: "selectedTextColor",
description: "MoonColors variants for selected tab text.",
enabled: false,
initial: 0,
// piccolo
options: colorOptions,
);

final selectedTextColor = colorTable(context)[selectedTextColorsKnob ?? 40];

final indicatorColorsKnob = context.knobs.nullable.options(
label: "indicatorColor",
description: "MoonColors variants for default MoonTabBar indicator.",
enabled: false,
initial: 0,
// piccolo
options: colorOptions,
);

final indicatorColor = colorTable(context)[indicatorColorsKnob ?? 40];

final selectedTabColorsKnob = context.knobs.nullable.options(
label: "selectedTabColor",
description: "MoonColors variants for pill MoonTabBar selected tab.",
enabled: false,
initial: 0,
// piccolo
options: colorOptions,
);

final selectedTabColor = colorTable(context)[selectedTabColorsKnob ?? 40];

final borderRadiusKnob = context.knobs.nullable.sliderInt(
label: "borderRadius",
description: "Border radius for pill MoonTabBar.",
enabled: false,
initial: 8,
max: 32,
);

final indicatorHeightKnob = context.knobs.nullable.sliderInt(
label: "indicatorHeight",
description: "Indicator height for default MoonTabBar.",
enabled: false,
initial: 2,
max: 4,
);

final gapKnob = context.knobs.nullable.sliderInt(
label: "gap",
description: "Gap between MoonTabBar children.",
enabled: false,
initial: 4,
max: 12,
);

final showLeadingKnob = context.knobs.boolean(
label: "leading",
description: "Show widget in MoonTabBar leading slot.",
);

final showLabelKnob = context.knobs.boolean(
label: "label",
description: "Show widget in MoonTabBar label slot.",
initial: true,
);

final showTrailingKnob = context.knobs.boolean(
label: "trailing",
description: "Show widget in MoonTabBar trailing slot.",
);

final isExpandedKnob = context.knobs.boolean(
label: "isExpanded",
description: "Expand MoonTabBar horizontally.",
);

final tabStyle = MoonTabStyle(
textColor: textColor,
selectedTextColor: selectedTextColor,
indicatorColor: indicatorColor,
indicatorHeight: indicatorHeightKnob?.toDouble(),
);

final pillTabStyle = MoonPillTabStyle(
textColor: textColor,
selectedTextColor: selectedTextColor,
selectedTabColor: selectedTabColor,
borderRadius: borderRadiusKnob != null ? BorderRadius.circular(borderRadiusKnob.toDouble()) : null,
);

return Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 64),
const TextDivider(text: "Default MoonTabBar"),
const SizedBox(height: 32),
Column(
children: [
MoonTabBar(
tabBarSize: tabsSizesKnob,
isExpanded: isExpandedKnob,
gap: gapKnob?.toDouble(),
tabs: [
MoonTab(
leading: showLeadingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
label: showLabelKnob ? const Text('Tab1') : null,
trailing: showTrailingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
tabStyle: tabStyle,
),
MoonTab(
leading: showLeadingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
label: showLabelKnob ? const Text('Tab2') : null,
trailing: showTrailingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
tabStyle: tabStyle,
),
MoonTab(
leading: showLeadingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
label: showLabelKnob ? const Text('Tab3') : null,
trailing: showTrailingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
tabStyle: tabStyle,
),
],
),
const SizedBox(height: 32),
const TextDivider(text: "MoonTabBar with disabled tab"),
const SizedBox(height: 32),
MoonTabBar(
tabBarSize: tabsSizesKnob,
isExpanded: isExpandedKnob,
gap: gapKnob?.toDouble(),
tabs: [
MoonTab(
trailing: const MoonIcon(MoonIcons.frame_24),
tabStyle: tabStyle,
),
MoonTab(
trailing: const MoonIcon(MoonIcons.frame_24),
tabStyle: tabStyle,
disabled: true,
),
MoonTab(
trailing: const MoonIcon(MoonIcons.frame_24),
tabStyle: tabStyle,
),
MoonTab(
trailing: const MoonIcon(MoonIcons.frame_24),
tabStyle: tabStyle,
),
],
),
const SizedBox(height: 32),
const TextDivider(text: "Pill MoonTabBar"),
const SizedBox(height: 32),
MoonTabBar.pill(
tabBarSize: tabsSizesKnob,
isExpanded: isExpandedKnob,
gap: gapKnob?.toDouble(),
pillTabs: [
MoonPillTab(
leading: showLeadingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
label: showLabelKnob ? const Text('Tab1') : null,
trailing: showTrailingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
tabStyle: pillTabStyle,
),
MoonPillTab(
leading: showLeadingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
label: showLabelKnob ? const Text('Tab2') : null,
trailing: showTrailingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
tabStyle: pillTabStyle,
),
MoonPillTab(
leading: showLeadingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
label: showLabelKnob ? const Text('Tab3') : null,
trailing: showTrailingKnob ? const MoonIcon(MoonIcons.frame_24) : null,
tabStyle: pillTabStyle,
),
],
),
],
),
const SizedBox(height: 64),
],
),
),
);
},
);
}
2 changes: 2 additions & 0 deletions example/lib/src/storybook/storybook.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import 'package:example/src/storybook/stories/popover.dart';
import 'package:example/src/storybook/stories/radio.dart';
import 'package:example/src/storybook/stories/segmented_control.dart';
import 'package:example/src/storybook/stories/switch.dart';
import 'package:example/src/storybook/stories/tab_bar.dart';
import 'package:example/src/storybook/stories/tag.dart';
import 'package:example/src/storybook/stories/text_area.dart';
import 'package:example/src/storybook/stories/text_input.dart';
Expand Down Expand Up @@ -96,6 +97,7 @@ class StorybookPage extends StatelessWidget {
RadioStory(),
SegmentedControlStory(),
SwitchStory(),
TabBarStory(),
TagStory(),
TextAreaStory(),
TextInputStory(),
Expand Down
7 changes: 7 additions & 0 deletions lib/moon_design.dart
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,15 @@ export 'package:moon_design/src/widgets/popover/popover.dart';
export 'package:moon_design/src/widgets/progress/circular_progress.dart';
export 'package:moon_design/src/widgets/progress/linear_progress.dart';
export 'package:moon_design/src/widgets/radio/radio.dart';
export 'package:moon_design/src/widgets/segmented_control/segment.dart';
export 'package:moon_design/src/widgets/segmented_control/segment_style.dart';
export 'package:moon_design/src/widgets/segmented_control/segmented_control.dart';
export 'package:moon_design/src/widgets/switch/switch.dart';
export 'package:moon_design/src/widgets/tab_bar/pill_tab.dart';
export 'package:moon_design/src/widgets/tab_bar/pill_tab_style.dart';
export 'package:moon_design/src/widgets/tab_bar/tab.dart';
export 'package:moon_design/src/widgets/tab_bar/tab_bar.dart';
export 'package:moon_design/src/widgets/tab_bar/tab_style.dart';
export 'package:moon_design/src/widgets/tag/tag.dart';
export 'package:moon_design/src/widgets/text_area/text_area.dart';
export 'package:moon_design/src/widgets/text_input/form_text_input.dart';
Expand Down
5 changes: 3 additions & 2 deletions lib/src/theme/segmented_control/segmented_control_colors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

import 'package:moon_design/src/theme/colors.dart';
import 'package:moon_design/src/theme/typography/typography.dart';
import 'package:moon_design/src/utils/color_premul_lerp.dart';

@immutable
class MoonSegmentedControlColors extends ThemeExtension<MoonSegmentedControlColors> with DiagnosticableTreeMixin {
static final light = MoonSegmentedControlColors(
backgroundColor: MoonColors.light.goku,
selectedSegmentColor: MoonColors.light.gohan,
textColor: MoonColors.light.bulma,
textColor: MoonTypography.light.colors.bodyPrimary,
selectedTextColor: MoonColors.light.bulma,
);

static final dark = MoonSegmentedControlColors(
backgroundColor: MoonColors.dark.goku,
selectedSegmentColor: MoonColors.dark.gohan,
textColor: MoonColors.dark.bulma,
textColor: MoonTypography.dark.colors.bodyPrimary,
selectedTextColor: MoonColors.dark.bulma,
);

Expand Down
Loading