diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart similarity index 100% rename from packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart rename to packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index 4626fb50..a8cb2d1e 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/src/core/utils/theme_helper.dart'; import 'package:wyatt_ui_components/src/domain/entities/theme_style.dart'; /// {@template theme_resolver} @@ -38,52 +39,34 @@ abstract class ThemeResolver, T, E> { S? Function(BuildContext context, {E? extra}) get customStyleFn; /// Compute default value from Flutter Theme or with hardcoded values. - S computeDefaultValue(BuildContext context, {E? extra}); - - S? computeExtensionValueFn( - BuildContext context, - T themeExtension, { + S computeDefaultValue( + BuildContext context, { E? extra, }); - /// Compute values from the extension if found - S? _computeExtensionValue( - BuildContext context, { + /// Compute extension value from custom component extension. + S? computeExtensionValueFn( + BuildContext context, + T? themeExtension, { E? extra, - }) { - final themeExtension = Theme.of(context).extension(); - if (themeExtension != null) { - return computeExtensionValueFn( - context, - themeExtension, - extra: extra, - ); - } - return null; - } - - /// Compute custom value - S? _computeCustomValue( - BuildContext context, { - E? extra, - }) { - final customStyle = customStyleFn( - context, - extra: extra, - ); - if (customStyle != null) { - return customStyle; - } - return null; - } + }); /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { - S style = computeDefaultValue(context, extra: extra); - style = - style.mergeWith(_computeExtensionValue(context, extra: extra)) ?? style; - style = - style.mergeWith(_computeCustomValue(context, extra: extra)) ?? style; - return style; + final style = computeDefaultValue(context, extra: extra); + return ThemeHelper.getThemeElement( + [ + style, + computeExtensionValueFn( + context, + Theme.of(context).extension(), + extra: extra, + ), + customStyleFn(context, extra: extra) + ], + transform: (value) => value, + combine: (value, element) => value?.mergeWith(element), + ) ?? + style; } } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart index 17821996..ec38db81 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart @@ -16,4 +16,5 @@ export 'multi_color.dart'; export 'text_wrapper.dart'; +export 'theme_helper.dart'; export 'theme_resolver.dart'; diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart index 71f1b221..aaff531d 100644 --- a/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.dart @@ -14,9 +14,49 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:wyatt_ui_components/src/domain/entities/entities.dart'; +part 'component_theme_data.g.dart'; +@CopyWith() class ComponentThemeData { + factory ComponentThemeData({ + TopAppBarComponent? appBar, + TopNavigationBarComponent? topNavigationBarComponent, + BottomNavigationBarComponent? bottomNavigationBar, + ErrorWidgetComponent? errorWidget, + LoadingWidgetComponent? loadingWidget, + LoaderComponent? loaderComponent, + RichTextBuilderComponent? richTextBuilderComponent, + TextInputComponent? textInputComponent, + FileSelectionButtonComponent? fileSelectionButtonComponent, + FlatButtonComponent? flatButtonComponent, + SimpleIconButtonComponent? simpleIconButtonComponent, + SymbolButtonComponent? symbolButtonComponent, + InformationCardComponent? informationCardComponent, + PortfolioCardComponent? portfolioCardComponent, + QuoteCardComponent? quoteCardComponent, + SkillCardComponent? skillCardComponent, + }) => + ComponentThemeData.raw( + appBar: appBar, + topNavigationBarComponent: topNavigationBarComponent, + bottomNavigationBar: bottomNavigationBar, + errorWidget: errorWidget, + loadingWidget: loadingWidget, + loaderComponent: loaderComponent, + richTextBuilderComponent: richTextBuilderComponent, + textInputComponent: textInputComponent, + fileSelectionButtonComponent: fileSelectionButtonComponent, + flatButtonComponent: flatButtonComponent, + simpleIconButtonComponent: simpleIconButtonComponent, + symbolButtonComponent: symbolButtonComponent, + informationCardComponent: informationCardComponent, + portfolioCardComponent: portfolioCardComponent, + quoteCardComponent: quoteCardComponent, + skillCardComponent: skillCardComponent, + ); + const ComponentThemeData.raw({ this.appBar, this.topNavigationBarComponent, @@ -35,11 +75,11 @@ class ComponentThemeData { this.quoteCardComponent, this.skillCardComponent, }); + final TopAppBarComponent? appBar; final TopNavigationBarComponent? topNavigationBarComponent; final BottomNavigationBarComponent? bottomNavigationBar; - final ErrorWidgetComponent? errorWidget; final LoadingWidgetComponent? loadingWidget; final LoaderComponent? loaderComponent; diff --git a/packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart b/packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart new file mode 100644 index 00000000..b080a1dd --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/features/component_theme_data.g.dart @@ -0,0 +1,265 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'component_theme_data.dart'; + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class _$ComponentThemeDataCWProxy { + ComponentThemeData appBar(TopAppBarComponent? appBar); + + ComponentThemeData topNavigationBarComponent( + TopNavigationBarComponent? topNavigationBarComponent); + + ComponentThemeData bottomNavigationBar( + BottomNavigationBarComponent? bottomNavigationBar); + + ComponentThemeData errorWidget(ErrorWidgetComponent? errorWidget); + + ComponentThemeData loadingWidget(LoadingWidgetComponent? loadingWidget); + + ComponentThemeData loaderComponent(LoaderComponent? loaderComponent); + + ComponentThemeData richTextBuilderComponent( + RichTextBuilderComponent? richTextBuilderComponent); + + ComponentThemeData textInputComponent(TextInputComponent? textInputComponent); + + ComponentThemeData fileSelectionButtonComponent( + FileSelectionButtonComponent? fileSelectionButtonComponent); + + ComponentThemeData flatButtonComponent( + FlatButtonComponent? flatButtonComponent); + + ComponentThemeData simpleIconButtonComponent( + SimpleIconButtonComponent? simpleIconButtonComponent); + + ComponentThemeData symbolButtonComponent( + SymbolButtonComponent? symbolButtonComponent); + + ComponentThemeData informationCardComponent( + InformationCardComponent? informationCardComponent); + + ComponentThemeData portfolioCardComponent( + PortfolioCardComponent? portfolioCardComponent); + + ComponentThemeData quoteCardComponent(QuoteCardComponent? quoteCardComponent); + + ComponentThemeData skillCardComponent(SkillCardComponent? skillCardComponent); + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// ComponentThemeData(...).copyWith(id: 12, name: "My name") + /// ```` + ComponentThemeData call({ + TopAppBarComponent? appBar, + TopNavigationBarComponent? topNavigationBarComponent, + BottomNavigationBarComponent? bottomNavigationBar, + ErrorWidgetComponent? errorWidget, + LoadingWidgetComponent? loadingWidget, + LoaderComponent? loaderComponent, + RichTextBuilderComponent? richTextBuilderComponent, + TextInputComponent? textInputComponent, + FileSelectionButtonComponent? fileSelectionButtonComponent, + FlatButtonComponent? flatButtonComponent, + SimpleIconButtonComponent? simpleIconButtonComponent, + SymbolButtonComponent? symbolButtonComponent, + InformationCardComponent? informationCardComponent, + PortfolioCardComponent? portfolioCardComponent, + QuoteCardComponent? quoteCardComponent, + SkillCardComponent? skillCardComponent, + }); +} + +/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfComponentThemeData.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfComponentThemeData.copyWith.fieldName(...)` +class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy { + const _$ComponentThemeDataCWProxyImpl(this._value); + + final ComponentThemeData _value; + + @override + ComponentThemeData appBar(TopAppBarComponent? appBar) => this(appBar: appBar); + + @override + ComponentThemeData topNavigationBarComponent( + TopNavigationBarComponent? topNavigationBarComponent) => + this(topNavigationBarComponent: topNavigationBarComponent); + + @override + ComponentThemeData bottomNavigationBar( + BottomNavigationBarComponent? bottomNavigationBar) => + this(bottomNavigationBar: bottomNavigationBar); + + @override + ComponentThemeData errorWidget(ErrorWidgetComponent? errorWidget) => + this(errorWidget: errorWidget); + + @override + ComponentThemeData loadingWidget(LoadingWidgetComponent? loadingWidget) => + this(loadingWidget: loadingWidget); + + @override + ComponentThemeData loaderComponent(LoaderComponent? loaderComponent) => + this(loaderComponent: loaderComponent); + + @override + ComponentThemeData richTextBuilderComponent( + RichTextBuilderComponent? richTextBuilderComponent) => + this(richTextBuilderComponent: richTextBuilderComponent); + + @override + ComponentThemeData textInputComponent( + TextInputComponent? textInputComponent) => + this(textInputComponent: textInputComponent); + + @override + ComponentThemeData fileSelectionButtonComponent( + FileSelectionButtonComponent? fileSelectionButtonComponent) => + this(fileSelectionButtonComponent: fileSelectionButtonComponent); + + @override + ComponentThemeData flatButtonComponent( + FlatButtonComponent? flatButtonComponent) => + this(flatButtonComponent: flatButtonComponent); + + @override + ComponentThemeData simpleIconButtonComponent( + SimpleIconButtonComponent? simpleIconButtonComponent) => + this(simpleIconButtonComponent: simpleIconButtonComponent); + + @override + ComponentThemeData symbolButtonComponent( + SymbolButtonComponent? symbolButtonComponent) => + this(symbolButtonComponent: symbolButtonComponent); + + @override + ComponentThemeData informationCardComponent( + InformationCardComponent? informationCardComponent) => + this(informationCardComponent: informationCardComponent); + + @override + ComponentThemeData portfolioCardComponent( + PortfolioCardComponent? portfolioCardComponent) => + this(portfolioCardComponent: portfolioCardComponent); + + @override + ComponentThemeData quoteCardComponent( + QuoteCardComponent? quoteCardComponent) => + this(quoteCardComponent: quoteCardComponent); + + @override + ComponentThemeData skillCardComponent( + SkillCardComponent? skillCardComponent) => + this(skillCardComponent: skillCardComponent); + + @override + + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. + /// + /// Usage + /// ```dart + /// ComponentThemeData(...).copyWith(id: 12, name: "My name") + /// ```` + ComponentThemeData call({ + Object? appBar = const $CopyWithPlaceholder(), + Object? topNavigationBarComponent = const $CopyWithPlaceholder(), + Object? bottomNavigationBar = const $CopyWithPlaceholder(), + Object? errorWidget = const $CopyWithPlaceholder(), + Object? loadingWidget = const $CopyWithPlaceholder(), + Object? loaderComponent = const $CopyWithPlaceholder(), + Object? richTextBuilderComponent = const $CopyWithPlaceholder(), + Object? textInputComponent = const $CopyWithPlaceholder(), + Object? fileSelectionButtonComponent = const $CopyWithPlaceholder(), + Object? flatButtonComponent = const $CopyWithPlaceholder(), + Object? simpleIconButtonComponent = const $CopyWithPlaceholder(), + Object? symbolButtonComponent = const $CopyWithPlaceholder(), + Object? informationCardComponent = const $CopyWithPlaceholder(), + Object? portfolioCardComponent = const $CopyWithPlaceholder(), + Object? quoteCardComponent = const $CopyWithPlaceholder(), + Object? skillCardComponent = const $CopyWithPlaceholder(), + }) { + return ComponentThemeData( + appBar: appBar == const $CopyWithPlaceholder() + ? _value.appBar + // ignore: cast_nullable_to_non_nullable + : appBar as TopAppBarComponent?, + topNavigationBarComponent: + topNavigationBarComponent == const $CopyWithPlaceholder() + ? _value.topNavigationBarComponent + // ignore: cast_nullable_to_non_nullable + : topNavigationBarComponent as TopNavigationBarComponent?, + bottomNavigationBar: bottomNavigationBar == const $CopyWithPlaceholder() + ? _value.bottomNavigationBar + // ignore: cast_nullable_to_non_nullable + : bottomNavigationBar as BottomNavigationBarComponent?, + errorWidget: errorWidget == const $CopyWithPlaceholder() + ? _value.errorWidget + // ignore: cast_nullable_to_non_nullable + : errorWidget as ErrorWidgetComponent?, + loadingWidget: loadingWidget == const $CopyWithPlaceholder() + ? _value.loadingWidget + // ignore: cast_nullable_to_non_nullable + : loadingWidget as LoadingWidgetComponent?, + loaderComponent: loaderComponent == const $CopyWithPlaceholder() + ? _value.loaderComponent + // ignore: cast_nullable_to_non_nullable + : loaderComponent as LoaderComponent?, + richTextBuilderComponent: + richTextBuilderComponent == const $CopyWithPlaceholder() + ? _value.richTextBuilderComponent + // ignore: cast_nullable_to_non_nullable + : richTextBuilderComponent as RichTextBuilderComponent?, + textInputComponent: textInputComponent == const $CopyWithPlaceholder() + ? _value.textInputComponent + // ignore: cast_nullable_to_non_nullable + : textInputComponent as TextInputComponent?, + fileSelectionButtonComponent: + fileSelectionButtonComponent == const $CopyWithPlaceholder() + ? _value.fileSelectionButtonComponent + // ignore: cast_nullable_to_non_nullable + : fileSelectionButtonComponent as FileSelectionButtonComponent?, + flatButtonComponent: flatButtonComponent == const $CopyWithPlaceholder() + ? _value.flatButtonComponent + // ignore: cast_nullable_to_non_nullable + : flatButtonComponent as FlatButtonComponent?, + simpleIconButtonComponent: + simpleIconButtonComponent == const $CopyWithPlaceholder() + ? _value.simpleIconButtonComponent + // ignore: cast_nullable_to_non_nullable + : simpleIconButtonComponent as SimpleIconButtonComponent?, + symbolButtonComponent: + symbolButtonComponent == const $CopyWithPlaceholder() + ? _value.symbolButtonComponent + // ignore: cast_nullable_to_non_nullable + : symbolButtonComponent as SymbolButtonComponent?, + informationCardComponent: + informationCardComponent == const $CopyWithPlaceholder() + ? _value.informationCardComponent + // ignore: cast_nullable_to_non_nullable + : informationCardComponent as InformationCardComponent?, + portfolioCardComponent: + portfolioCardComponent == const $CopyWithPlaceholder() + ? _value.portfolioCardComponent + // ignore: cast_nullable_to_non_nullable + : portfolioCardComponent as PortfolioCardComponent?, + quoteCardComponent: quoteCardComponent == const $CopyWithPlaceholder() + ? _value.quoteCardComponent + // ignore: cast_nullable_to_non_nullable + : quoteCardComponent as QuoteCardComponent?, + skillCardComponent: skillCardComponent == const $CopyWithPlaceholder() + ? _value.skillCardComponent + // ignore: cast_nullable_to_non_nullable + : skillCardComponent as SkillCardComponent?, + ); + } +} + +extension $ComponentThemeDataCopyWith on ComponentThemeData { + /// Returns a callable class that can be used as follows: `instanceOfComponentThemeData.copyWith(...)` or like so:`instanceOfComponentThemeData.copyWith.fieldName(...)`. + // ignore: library_private_types_in_public_api + _$ComponentThemeDataCWProxy get copyWith => + _$ComponentThemeDataCWProxyImpl(this); +} diff --git a/packages/wyatt_ui_components/pubspec.yaml b/packages/wyatt_ui_components/pubspec.yaml index 80e5e707..6b8848b6 100644 --- a/packages/wyatt_ui_components/pubspec.yaml +++ b/packages/wyatt_ui_components/pubspec.yaml @@ -10,17 +10,20 @@ environment: dependencies: flutter: { sdk: flutter } + copy_with_extension: ^5.0.0 wyatt_component_copy_with_extension: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git path: packages/wyatt_component_copy_with_extension dev_dependencies: - build_runner: ^2.3.3 flutter_test: { sdk: flutter } wyatt_analysis: hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub version: ^2.4.0 + + build_runner: ^2.3.3 + copy_with_extension_gen: ^5.0.0 wyatt_component_copy_with_gen: git: url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart index f5a4a2aa..9e1578e9 100644 --- a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart @@ -42,7 +42,7 @@ class NavigationItem extends StatelessWidget { context .themeExtension() ?.secondaryColor, - Theme.of(context).primaryColor, + context.colorScheme.primary ], valueValidator: (value) => value != null, transform: (value) => value, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 505e9e37..feb496b7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -80,33 +80,33 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< @override FileSelectionButtonStyle? computeExtensionValueFn( BuildContext context, - FileSelectionButtonThemeExtension themeExtension, { + FileSelectionButtonThemeExtension? themeExtension, { ButtonState? extra, }) { FileSelectionButtonStyle? style; switch (extra?.state) { case ControlState.disabled: - style = themeExtension.disabledStyle; + style = themeExtension?.disabledStyle; break; case ControlState.focused: - style = themeExtension.focusedStyle; + style = themeExtension?.focusedStyle; break; case ControlState.hovered: - style = themeExtension.hoveredStyle; + style = themeExtension?.hoveredStyle; break; case ControlState.tapped: - style = themeExtension.tappedStyle; + style = themeExtension?.tappedStyle; break; case ControlState.normal: case null: - style = themeExtension.normalStyle; + style = themeExtension?.normalStyle; break; } if (extra?.isSelected ?? false) { - style = themeExtension.selectedStyle; + style = themeExtension?.selectedStyle; } if (extra?.isInvalid ?? false) { - style = themeExtension.invalidStyle; + style = themeExtension?.invalidStyle; } return style; } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart index dfbe1349..abb6b8c3 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -76,21 +76,21 @@ class FlatButtonThemeResolver extends ThemeResolver LoaderStyle( - colors: themeExtension.colors, - stroke: themeExtension.stroke, + colors: themeExtension?.colors, + stroke: themeExtension?.stroke, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart index 4661a264..74202562 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -43,11 +43,11 @@ class RichTextBuilderThemeResolver extends ThemeResolver RichTextBuilderStyle( - defaultStyle: themeExtension.defaultStyle, - styles: themeExtension.styles, + defaultStyle: themeExtension?.defaultStyle, + styles: themeExtension?.styles, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart index 8e5139c7..e64b1b41 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input.dart @@ -25,7 +25,7 @@ part 'text_input.g.dart'; @ComponentCopyWithExtension() class TextInput extends TextInputComponent with $TextInputCWMixin { - TextInput({ + const TextInput({ super.expand, super.validator, super.key, diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart index 5a3fbd0c..0791ac25 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -118,19 +118,19 @@ class TextInputThemeResolver extends ThemeResolver. export './linear_gradient_helper.dart'; -export './theme_helper.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart new file mode 100644 index 00000000..a8f83f3a --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/features/wyatt_component_theme_data.dart @@ -0,0 +1,36 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class WyattComponentThemeData { + static ComponentThemeData get wyattComponentThemeData => ComponentThemeData( + appBar: const TopAppBar(), + topNavigationBarComponent: const TopNavigationBar(), + loaderComponent: const Loader(), + richTextBuilderComponent: const RichTextBuilder(), + textInputComponent: const TextInput(), + fileSelectionButtonComponent: FileSelectionButton(), + flatButtonComponent: FlatButton(), + simpleIconButtonComponent: SimpleIconButton(), + symbolButtonComponent: SymbolButton(), + informationCardComponent: const InformationCard(), + portfolioCardComponent: const PortfolioCard(), + quoteCardComponent: const QuoteCard(), + skillCardComponent: const SkillCard(), + ); +}