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(),
+ );
+}