diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart
index 8517b268..da89e0e5 100644
--- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart
+++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/buttons.dart
@@ -16,6 +16,8 @@
export './button_component.dart';
export './button_style.dart';
+export './file_selection_button_component.dart';
+export './file_selection_button_style.dart';
export './flat_button_component.dart';
export './flat_button_style.dart';
export './simple_icon_button_component.dart';
diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart
new file mode 100644
index 00000000..4d08b13e
--- /dev/null
+++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart
@@ -0,0 +1,69 @@
+// 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:flutter/widgets.dart';
+import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';
+import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
+
+part 'file_selection_button_component.g.dart';
+
+@ComponentProxyExtension()
+abstract class FileSelectionButtonComponent extends ButtonComponent
+ with CopyWithMixin<$FileSelectionButtonComponentCWProxy> {
+ const FileSelectionButtonComponent({
+ this.mainAxisSize = MainAxisSize.min,
+ this.leading,
+ this.title,
+ this.subTitle,
+ super.disabledStyle,
+ super.normalStyle,
+ super.hoveredStyle,
+ super.focusedStyle,
+ super.tappedStyle,
+ super.selectedStyle,
+ super.invalidStyle,
+ super.onPressed,
+ super.key,
+ });
+
+ @override
+ FileSelectionButtonStyle? get disabledStyle;
+
+ @override
+ FileSelectionButtonStyle? get normalStyle;
+
+ @override
+ FileSelectionButtonStyle? get hoveredStyle;
+
+ @override
+ FileSelectionButtonStyle? get focusedStyle;
+
+ @override
+ FileSelectionButtonStyle? get tappedStyle;
+
+ // When a file is selected
+ @override
+ FileSelectionButtonStyle? get selectedStyle;
+
+ // When the input file is invalid (too large, not supported format... etc)
+ @override
+ FileSelectionButtonStyle? get invalidStyle;
+
+ final MainAxisSize? mainAxisSize;
+ final Widget? leading;
+ final TextWrapper? title;
+ final TextWrapper? subTitle;
+}
diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart
new file mode 100644
index 00000000..d8708923
--- /dev/null
+++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.g.dart
@@ -0,0 +1,39 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'file_selection_button_component.dart';
+
+// **************************************************************************
+// ComponentProxyGenerator
+// **************************************************************************
+
+abstract class $FileSelectionButtonComponentCWProxy {
+ FileSelectionButtonComponent mainAxisSize(MainAxisSize? mainAxisSize);
+ FileSelectionButtonComponent leading(Widget? leading);
+ FileSelectionButtonComponent title(TextWrapper? title);
+ FileSelectionButtonComponent subTitle(TextWrapper? subTitle);
+ FileSelectionButtonComponent disabledStyle(ButtonStyle? disabledStyle);
+ FileSelectionButtonComponent normalStyle(ButtonStyle? normalStyle);
+ FileSelectionButtonComponent hoveredStyle(ButtonStyle? hoveredStyle);
+ FileSelectionButtonComponent focusedStyle(ButtonStyle? focusedStyle);
+ FileSelectionButtonComponent tappedStyle(ButtonStyle? tappedStyle);
+ FileSelectionButtonComponent selectedStyle(ButtonStyle? selectedStyle);
+ FileSelectionButtonComponent invalidStyle(ButtonStyle? invalidStyle);
+ FileSelectionButtonComponent onPressed(
+ void Function(ControlState)? onPressed);
+ FileSelectionButtonComponent key(Key? key);
+ FileSelectionButtonComponent call({
+ MainAxisSize? mainAxisSize,
+ Widget? leading,
+ TextWrapper? title,
+ TextWrapper? subTitle,
+ ButtonStyle? disabledStyle,
+ ButtonStyle? normalStyle,
+ ButtonStyle? hoveredStyle,
+ ButtonStyle? focusedStyle,
+ ButtonStyle? tappedStyle,
+ ButtonStyle? selectedStyle,
+ ButtonStyle? invalidStyle,
+ void Function(ControlState)? onPressed,
+ Key? key,
+ });
+}
diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart
new file mode 100644
index 00000000..5e0bd378
--- /dev/null
+++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_style.dart
@@ -0,0 +1,55 @@
+// 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:flutter/widgets.dart';
+import 'package:wyatt_ui_components/src/core/utils/multi_color.dart';
+import 'package:wyatt_ui_components/src/domain/entities/buttons/button_style.dart';
+
+class FileSelectionButtonStyle extends ButtonStyle {
+ const FileSelectionButtonStyle({
+ super.radius = 12,
+ super.padding = 13,
+ super.foregroundColors,
+ super.backgroundColors,
+ super.borderColors,
+ super.stroke = 2,
+ super.shadow = const BoxShadow(
+ blurRadius: 30,
+ offset: Offset(0, 5),
+ color: Color.fromRGBO(0, 0, 0, 0.05),
+ ),
+ });
+
+ @override
+ FileSelectionButtonStyle copyWith({
+ double? radius,
+ double? padding,
+ MultiColor? foregroundColors,
+ MultiColor? backgroundColors,
+ MultiColor? borderColors,
+ double? stroke,
+ BoxShadow? shadow,
+ }) =>
+ FileSelectionButtonStyle(
+ radius: radius ?? this.radius,
+ padding: padding ?? this.padding,
+ foregroundColors: foregroundColors ?? this.foregroundColors,
+ backgroundColors: backgroundColors ?? this.backgroundColors,
+ borderColors: borderColors ?? this.borderColors,
+ stroke: stroke ?? this.stroke,
+ shadow: shadow ?? this.shadow,
+ );
+}