From 6fdd211e0e0e9ba85fc512e52453adea22ca6efa Mon Sep 17 00:00:00 2001 From: Lucas Oliveira <62367544+tilucasoli@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:00:01 -0300 Subject: [PATCH] feat: Accordion interaction based on open variable (#546) --- .../attributes/animated/animated_data.dart | 12 + packages/remix/demo/.gitignore | 2 + .../lib/components/accordion_use_case.dart | 15 +- .../demo/lib/components/dropdown_menu.dart | 95 ++ .../{select_use_case.dart => select.dart} | 12 +- .../remix/demo/lib/main.directories.g.dart | 52 +- .../ephemeral/Flutter-Generated.xcconfig | 6 +- .../ephemeral/FlutterInputs.xcfilelist | 934 +++++++++--------- .../ephemeral/FlutterOutputs.xcfilelist | 64 +- .../ephemeral/flutter_export_environment.sh | 6 +- .../remix/demo/macos/Runner/AppDelegate.swift | 4 + packages/remix/lib/remix.dart | 1 + .../src/components/accordion/accordion.dart | 5 +- .../src/components/accordion/accordion.g.dart | 15 - .../components/accordion/accordion_style.dart | 24 +- .../accordion/accordion_widget.dart | 41 +- .../dropdown_menu/dropdown_menu.dart | 73 ++ .../dropdown_menu/dropdown_menu.g.dart | 767 ++++++++++++++ .../dropdown_menu/dropdown_menu_style.dart | 81 ++ .../dropdown_menu/dropdown_menu_widget.dart | 117 +++ .../dropdown_menu/item/dropdown_menu.dart | 29 + .../item/dropdown_menu_widget.dart | 81 ++ .../select/button/select_button_widget.dart | 33 - .../select/item/select_menu_widget.dart | 19 +- .../lib/src/components/select/select.dart | 17 +- .../lib/src/components/select/select.g.dart | 403 ++++---- .../src/components/select/select_style.dart | 26 +- .../src/components/select/select_widget.dart | 176 +--- .../select_trigger.dart} | 17 +- .../select/trigger/select_trigger_widget.dart | 50 + .../remix/lib/src/core/theme/component.dart | 7 + .../remix/lib/src/helpers/object_ext.dart | 5 + packages/remix/lib/src/helpers/overlay.dart | 120 +++ .../lib/src/themes/fortaleza/components.dart | 3 + .../fortaleza/components/accordion_theme.dart | 5 - .../fortaleza/components/dropdown_theme.dart | 29 + .../fortaleza/components/select_theme.dart | 2 +- .../lib/src/themes/fortaleza/tokens.dart | 10 +- .../ephemeral/Flutter-Generated.xcconfig | 6 +- .../ephemeral/flutter_export_environment.sh | 6 +- .../accordion/accordion_widget_test.dart | 56 +- 41 files changed, 2383 insertions(+), 1043 deletions(-) create mode 100644 packages/remix/demo/lib/components/dropdown_menu.dart rename packages/remix/demo/lib/components/{select_use_case.dart => select.dart} (86%) create mode 100644 packages/remix/lib/src/components/dropdown_menu/dropdown_menu.dart create mode 100644 packages/remix/lib/src/components/dropdown_menu/dropdown_menu.g.dart create mode 100644 packages/remix/lib/src/components/dropdown_menu/dropdown_menu_style.dart create mode 100644 packages/remix/lib/src/components/dropdown_menu/dropdown_menu_widget.dart create mode 100644 packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu.dart create mode 100644 packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu_widget.dart delete mode 100644 packages/remix/lib/src/components/select/button/select_button_widget.dart rename packages/remix/lib/src/components/select/{button/select_button.dart => trigger/select_trigger.dart} (58%) create mode 100644 packages/remix/lib/src/components/select/trigger/select_trigger_widget.dart create mode 100644 packages/remix/lib/src/helpers/object_ext.dart create mode 100644 packages/remix/lib/src/helpers/overlay.dart create mode 100644 packages/remix/lib/src/themes/fortaleza/components/dropdown_theme.dart diff --git a/packages/mix/lib/src/attributes/animated/animated_data.dart b/packages/mix/lib/src/attributes/animated/animated_data.dart index b261a6232..18e170728 100644 --- a/packages/mix/lib/src/attributes/animated/animated_data.dart +++ b/packages/mix/lib/src/attributes/animated/animated_data.dart @@ -33,6 +33,18 @@ class AnimatedData { return AnimatedDataDto(duration: duration, curve: curve, onEnd: _onEnd); } + AnimatedData copyWith({ + Duration? duration, + Curve? curve, + VoidCallback? onEnd, + }) { + return AnimatedData( + duration: duration ?? this.duration, + curve: curve ?? this.curve, + onEnd: onEnd ?? this.onEnd, + ); + } + @override bool operator ==(Object other) { if (identical(this, other)) return true; diff --git a/packages/remix/demo/.gitignore b/packages/remix/demo/.gitignore index 29a3a5017..79c113f9b 100644 --- a/packages/remix/demo/.gitignore +++ b/packages/remix/demo/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/packages/remix/demo/lib/components/accordion_use_case.dart b/packages/remix/demo/lib/components/accordion_use_case.dart index 3717fb0ba..1afa7f688 100644 --- a/packages/remix/demo/lib/components/accordion_use_case.dart +++ b/packages/remix/demo/lib/components/accordion_use_case.dart @@ -1,4 +1,5 @@ import 'package:demo/addons/icon_data_knob.dart'; +import 'package:demo/helpers/use_case_state.dart'; import 'package:flutter/material.dart' as m; import 'package:flutter/widgets.dart'; import 'package:mix/mix.dart'; @@ -6,16 +7,21 @@ import 'package:remix/remix.dart'; import 'package:widgetbook/widgetbook.dart'; import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook; +final _accordionKey = GlobalKey(); + @widgetbook.UseCase( name: 'Accordion Component', type: Accordion, ) Widget buildAccordionUseCase(BuildContext context) { + final knobState = WidgetbookState.of(context); + return Scaffold( body: Center( child: SizedBox( width: 300, child: Accordion( + key: _accordionKey, header: (spec) => AccordionHeaderSpecWidget( title: context.knobs.string( label: 'Title', @@ -33,11 +39,14 @@ Widget buildAccordionUseCase(BuildContext context) { ), spec: spec, ), - initiallyExpanded: true, - content: (spec) => TextSpecWidget( + expanded: + context.knobs.boolean(label: 'Expanded', initialValue: true), + content: const StyledText( 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s', - spec: spec, ), + onChanged: (value) { + knobState.updateKnob('Expanded', !value); + }, ), ), ), diff --git a/packages/remix/demo/lib/components/dropdown_menu.dart b/packages/remix/demo/lib/components/dropdown_menu.dart new file mode 100644 index 000000000..5b0c89123 --- /dev/null +++ b/packages/remix/demo/lib/components/dropdown_menu.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart' as m; +import 'package:flutter/widgets.dart'; +import 'package:remix/remix.dart'; +import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook; + +@widgetbook.UseCase( + name: 'DropdownMenu Component', + type: DropdownMenu, +) +Widget buildDropdownMenu(BuildContext context) { + return const Scaffold( + body: Center( + child: DropdownMenuDemo(), + ), + ); +} + +class DropdownMenuDemo extends StatefulWidget { + const DropdownMenuDemo({ + super.key, + }); + + @override + State createState() => _DropdownMenuDemoState(); +} + +enum MenuItem { + home, + profile, +} + +class _DropdownMenuDemoState extends State { + bool open = false; + @override + Widget build(BuildContext context) { + return Center( + child: DropdownMenu( + trigger: IconButton( + m.Icons.menu, + onPressed: () { + setState(() { + open = !open; + }); + }, + ), + onPressOutside: () { + setState(() { + open = false; + }); + }, + open: open, + items: [ + const DropdownMenuItem( + text: 'Features', + variants: [ + DropdownMenuStyle.itemLabel, + ], + ), + DropdownMenuItem( + text: 'home', + onPress: () { + setState(() { + open = false; + }); + showToast( + context: context, + entry: ToastEntry( + builder: (context, actions) => const Toast( + title: 'home was selected', + ), + ), + ); + }, + ), + DropdownMenuItem( + text: 'profile', + onPress: () { + setState(() { + open = false; + }); + showToast( + context: context, + entry: ToastEntry( + builder: (context, actions) => const Toast( + title: 'profile was selected', + ), + ), + ); + }, + ), + ], + ), + ); + } +} diff --git a/packages/remix/demo/lib/components/select_use_case.dart b/packages/remix/demo/lib/components/select.dart similarity index 86% rename from packages/remix/demo/lib/components/select_use_case.dart rename to packages/remix/demo/lib/components/select.dart index bf9a6ae51..41d90fa34 100644 --- a/packages/remix/demo/lib/components/select_use_case.dart +++ b/packages/remix/demo/lib/components/select.dart @@ -1,5 +1,4 @@ import 'package:demo/helpers/knob_builder.dart'; -import 'package:flutter/material.dart' as m; import 'package:flutter/widgets.dart'; import 'package:remix/remix.dart'; import 'package:remix/themes/fortaleza.dart'; @@ -41,15 +40,16 @@ class _SelectDemoState extends State { SizedBox( width: 200, child: Select( - disabled: - context.knobs.boolean(label: 'disabled', initialValue: false), - variants: [context.knobs.variant(FortalezaSelectStyle.variants)], value: selectedValue, onChanged: (value) => setState(() => selectedValue = value), - button: (spec) => spec( + trigger: SelectTrigger( text: selectedValue, - trailingIcon: m.Icons.keyboard_arrow_down_rounded, + disabled: context.knobs.boolean( + label: 'disabled', + initialValue: false, + ), ), + variants: [context.knobs.variant(FortalezaSelectStyle.variants)], items: List.generate( items.length, (index) => SelectMenuItem( diff --git a/packages/remix/demo/lib/main.directories.g.dart b/packages/remix/demo/lib/main.directories.g.dart index ec0d36358..f4319a7a6 100644 --- a/packages/remix/demo/lib/main.directories.g.dart +++ b/packages/remix/demo/lib/main.directories.g.dart @@ -19,17 +19,18 @@ import 'package:demo/components/checkbox_use_case.dart' as _i8; import 'package:demo/components/chip_use_case.dart' as _i9; import 'package:demo/components/dialog_use_case.dart' as _i10; import 'package:demo/components/divider_use_case.dart' as _i11; -import 'package:demo/components/icon_button_use_case.dart' as _i12; -import 'package:demo/components/menu_item_use_case.dart' as _i13; -import 'package:demo/components/progress_use_case.dart' as _i14; -import 'package:demo/components/radio_use_case.dart' as _i15; -import 'package:demo/components/segmented_control_use_case.dart' as _i16; -import 'package:demo/components/select_use_case.dart' as _i17; -import 'package:demo/components/slider.dart' as _i18; -import 'package:demo/components/spinner_use_case.dart' as _i19; -import 'package:demo/components/switch_use_case.dart' as _i20; -import 'package:demo/components/textfield_use_case.dart' as _i21; -import 'package:demo/components/toast_use_case.dart' as _i22; +import 'package:demo/components/dropdown_menu.dart' as _i12; +import 'package:demo/components/icon_button_use_case.dart' as _i13; +import 'package:demo/components/menu_item_use_case.dart' as _i14; +import 'package:demo/components/progress_use_case.dart' as _i15; +import 'package:demo/components/radio_use_case.dart' as _i16; +import 'package:demo/components/segmented_control_use_case.dart' as _i17; +import 'package:demo/components/select.dart' as _i18; +import 'package:demo/components/slider.dart' as _i19; +import 'package:demo/components/spinner_use_case.dart' as _i20; +import 'package:demo/components/switch_use_case.dart' as _i21; +import 'package:demo/components/textfield_use_case.dart' as _i22; +import 'package:demo/components/toast_use_case.dart' as _i23; import 'package:widgetbook/widgetbook.dart' as _i1; final directories = <_i1.WidgetbookNode>[ @@ -106,81 +107,88 @@ final directories = <_i1.WidgetbookNode>[ builder: _i11.buildDivider, ), ), + _i1.WidgetbookLeafComponent( + name: 'DropdownMenu', + useCase: _i1.WidgetbookUseCase( + name: 'DropdownMenu Component', + builder: _i12.buildDropdownMenu, + ), + ), _i1.WidgetbookLeafComponent( name: 'IconButton', useCase: _i1.WidgetbookUseCase( name: 'Button Component', - builder: _i12.buildButtonUseCase, + builder: _i13.buildButtonUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'MenuItem', useCase: _i1.WidgetbookUseCase( name: 'Menu Item Component', - builder: _i13.buildButtonUseCase, + builder: _i14.buildButtonUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'Progress', useCase: _i1.WidgetbookUseCase( name: 'Progress Component', - builder: _i14.buildProgressUseCase, + builder: _i15.buildProgressUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'Radio', useCase: _i1.WidgetbookUseCase( name: 'Radio Component', - builder: _i15.buildRadioUseCase, + builder: _i16.buildRadioUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'SegmentedControl', useCase: _i1.WidgetbookUseCase( name: 'SegmentedControl Component', - builder: _i16.buildAccordionUseCase, + builder: _i17.buildAccordionUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'Select', useCase: _i1.WidgetbookUseCase( name: 'Select Component', - builder: _i17.buildSelect, + builder: _i18.buildSelect, ), ), _i1.WidgetbookLeafComponent( name: 'Slider', useCase: _i1.WidgetbookUseCase( name: 'Slider Component', - builder: _i18.buildButtonUseCase, + builder: _i19.buildButtonUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'Spinner', useCase: _i1.WidgetbookUseCase( name: 'Spinner Component', - builder: _i19.buildSpinnerUseCase, + builder: _i20.buildSpinnerUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'Switch', useCase: _i1.WidgetbookUseCase( name: 'Switch Component', - builder: _i20.buildSwitchUseCase, + builder: _i21.buildSwitchUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'TextField', useCase: _i1.WidgetbookUseCase( name: 'TextField Component', - builder: _i21.buildButtonUseCase, + builder: _i22.buildButtonUseCase, ), ), _i1.WidgetbookLeafComponent( name: 'Toast', useCase: _i1.WidgetbookUseCase( name: 'Toast Component', - builder: _i22.buildButtonUseCase, + builder: _i23.buildButtonUseCase, ), ), ], diff --git a/packages/remix/demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/packages/remix/demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig index 207ef1037..f54e0adff 100644 --- a/packages/remix/demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig +++ b/packages/remix/demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -1,12 +1,12 @@ // This is a generated file; do not edit or check into version control. FLUTTER_ROOT=/Users/lucasoliveira/fvm/versions/stable -FLUTTER_APPLICATION_PATH=/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo +FLUTTER_APPLICATION_PATH=/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo COCOAPODS_PARALLEL_CODE_SIGN=true -FLUTTER_TARGET=/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/main.dart +FLUTTER_TARGET=/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/main.dart FLUTTER_BUILD_DIR=build FLUTTER_BUILD_NAME=1.0.0 FLUTTER_BUILD_NUMBER=1 DART_OBFUSCATION=false TRACK_WIDGET_CREATION=true TREE_SHAKE_ICONS=false -PACKAGE_CONFIG=/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/.dart_tool/package_config.json +PACKAGE_CONFIG=/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/.dart_tool/package_config.json diff --git a/packages/remix/demo/macos/Flutter/ephemeral/FlutterInputs.xcfilelist b/packages/remix/demo/macos/Flutter/ephemeral/FlutterInputs.xcfilelist index 463d06f4e..19306756c 100644 --- a/packages/remix/demo/macos/Flutter/ephemeral/FlutterInputs.xcfilelist +++ b/packages/remix/demo/macos/Flutter/ephemeral/FlutterInputs.xcfilelist @@ -1,4 +1,4 @@ -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-72.0.0/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-76.0.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/accessibility_tools-2.2.2/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/accessibility_tools-2.2.2/lib/accessibility_tools.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/accessibility_tools-2.2.2/lib/src/accessibility_issue.dart @@ -21,7 +21,7 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/accessibility_tools-2.2.2/lib/src/testing_tools/test_environment.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/accessibility_tools-2.2.2/lib/src/testing_tools/testing_tools_panel.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/accessibility_tools-2.2.2/lib/src/testing_tools/testing_tools_wrapper.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/analyzer-6.7.0/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/analyzer-6.11.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/args-2.5.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/async-2.11.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/async-2.11.0/lib/async.dart @@ -107,31 +107,31 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/src/stopwatch.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/clock-1.1.1/lib/src/utils.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/code_builder-4.10.0/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/collection.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/algorithms.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/boollist.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/canonicalized_map.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/combined_wrappers/combined_iterable.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/combined_wrappers/combined_iterator.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/combined_wrappers/combined_list.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/combined_wrappers/combined_map.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/comparators.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/empty_unmodifiable_set.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/equality.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/equality_map.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/equality_set.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/functions.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/iterable_extensions.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/iterable_zip.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/list_extensions.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/priority_queue.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/queue_list.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/union_set.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/union_set_controller.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/unmodifiable_wrappers.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/utils.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.18.0/lib/src/wrappers.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/collection.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/algorithms.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/boollist.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/canonicalized_map.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/combined_wrappers/combined_iterable.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/combined_wrappers/combined_iterator.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/combined_wrappers/combined_list.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/combined_wrappers/combined_map.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/comparators.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/empty_unmodifiable_set.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/equality.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/equality_map.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/equality_set.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/functions.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/iterable_extensions.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/iterable_zip.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/list_extensions.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/priority_queue.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/queue_list.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/union_set.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/union_set_controller.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/unmodifiable_wrappers.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/utils.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/collection-1.19.0/lib/src/wrappers.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/convert-3.1.1/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/crypto-3.0.5/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/cupertino_icons-1.0.8/LICENSE @@ -263,51 +263,51 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/src/json_serializable.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/src/json_serializable.g.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/json_annotation-4.9.0/lib/src/json_value.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/leak_tracker.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/devtools_integration/_protocol.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/devtools_integration/_registration.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/devtools_integration/delivery.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/devtools_integration/messages.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/devtools_integration/primitives.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_baseliner.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_leak_filter.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_leak_reporter.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_leak_tracker.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_object_record.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_object_record_set.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_object_records.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/_object_tracker.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/helpers.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/leak_tracking.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_dispatcher.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_finalizer.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_gc_counter.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_print_bytes.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_retaining_path/_connection.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_retaining_path/_retaining_path.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_retaining_path/_retaining_path_isolate.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/_test_helper_detector.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/leak_tracking/primitives/model.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/shared/_formatting.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/shared/_primitives.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/shared/_util.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.5/lib/src/shared/shared_model.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/leak_tracker_flutter_testing.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/src/matchers.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/src/model.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/src/testing.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/src/testing_for_testing/leaking_classes.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/src/testing_for_testing/test_case.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.5/lib/src/testing_for_testing/test_settings.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/leak_tracker.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/devtools_integration/_protocol.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/devtools_integration/_registration.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/devtools_integration/delivery.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/devtools_integration/messages.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/devtools_integration/primitives.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_baseliner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_leak_filter.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_leak_reporter.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_leak_tracker.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_object_record.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_object_record_set.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_object_records.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/_object_tracker.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/helpers.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/leak_tracking.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_dispatcher.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_finalizer.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_gc_counter.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_print_bytes.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_retaining_path/_connection.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_retaining_path/_retaining_path.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_retaining_path/_retaining_path_isolate.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/_test_helper_detector.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/leak_tracking/primitives/model.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/shared/_formatting.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/shared/_primitives.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/shared/_util.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker-10.0.7/lib/src/shared/shared_model.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/leak_tracker_flutter_testing.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/src/matchers.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/src/model.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/src/testing.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/src/testing_for_testing/leaking_classes.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/src/testing_for_testing/test_case.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/src/testing_for_testing/test_settings.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/leak_tracker_testing.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/src/leak_testing.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/src/matchers.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/lints-4.0.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/logging-1.2.0/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/macros-0.1.2-main.4/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/macros-0.1.3-main.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/expect.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/matcher-0.12.16+1/lib/matcher.dart @@ -430,17 +430,17 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/src/span_mixin.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/src/span_with_context.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/source_span-1.10.0/lib/src/utils.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/chain.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/frame.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/lazy_chain.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/lazy_trace.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/stack_zone_specification.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/trace.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/unparsed_frame.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/utils.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/src/vm_trace.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.11.1/lib/stack_trace.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/chain.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/frame.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/lazy_chain.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/lazy_trace.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/stack_zone_specification.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/trace.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/unparsed_frame.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/utils.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/src/vm_trace.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/stack_trace-1.12.0/lib/stack_trace.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/src/close_guarantee_channel.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/src/delegating_stream_channel.dart @@ -453,60 +453,60 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/src/stream_channel_transformer.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/stream_channel-2.1.2/lib/stream_channel.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/stream_transform-2.1.0/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/charcode.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/eager_span_scanner.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/exception.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/line_scanner.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/relative_span_scanner.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/span_scanner.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/string_scanner.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/src/utils.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.2.0/lib/string_scanner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/charcode.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/eager_span_scanner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/exception.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/line_scanner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/relative_span_scanner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/span_scanner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/string_scanner.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/src/utils.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/string_scanner-1.3.0/lib/string_scanner.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/src/generated/ascii_glyph_set.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/src/generated/glyph_set.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/src/generated/top_level.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/src/generated/unicode_glyph_set.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/term_glyph-1.2.1/lib/term_glyph.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/fake.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/hooks.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/scaffolding.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/closed_exception.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/compiler.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/configuration/on_platform.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/configuration/retry.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/configuration/skip.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/configuration/tags.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/configuration/test_on.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/configuration/timeout.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/declarer.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/group.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/group_entry.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/invoker.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/live_test.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/live_test_controller.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/message.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/metadata.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/operating_system.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/platform_selector.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/remote_exception.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/runtime.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/stack_trace_formatter.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/stack_trace_mapper.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/state.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/suite.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/suite_platform.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/test.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/test_failure.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/util/identifier_regex.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/backend/util/pretty_print.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/frontend/fake.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/scaffolding/spawn_hybrid.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/scaffolding/test_structure.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/scaffolding/utils.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.2/lib/src/utils.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/fake.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/hooks.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/scaffolding.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/closed_exception.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/compiler.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/configuration/on_platform.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/configuration/retry.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/configuration/skip.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/configuration/tags.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/configuration/test_on.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/configuration/timeout.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/declarer.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/group.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/group_entry.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/invoker.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/live_test.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/live_test_controller.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/message.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/metadata.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/operating_system.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/platform_selector.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/remote_exception.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/runtime.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/stack_trace_formatter.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/stack_trace_mapper.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/state.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/suite.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/suite_platform.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/test.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/test_failure.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/util/identifier_regex.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/backend/util/pretty_print.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/frontend/fake.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/scaffolding/spawn_hybrid.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/scaffolding/test_structure.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/scaffolding/utils.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/test_api-0.7.3/lib/src/utils.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/timing-1.0.1/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/typed_data-1.3.2/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/vector_math-2.1.4/LICENSE @@ -535,13 +535,13 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/src/vector_math_64/vector3.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/src/vector_math_64/vector4.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/vector_math-2.1.4/lib/vector_math_64.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/LICENSE -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/src/_stream_helpers.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/src/dart_io_extensions.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/src/snapshot_graph.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/src/vm_service.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/vm_service.dart -/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.2.5/lib/vm_service_io.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/LICENSE +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/lib/src/_stream_helpers.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/lib/src/dart_io_extensions.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/lib/src/snapshot_graph.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/lib/src/vm_service.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/lib/vm_service.dart +/Users/lucasoliveira/.pub-cache/hosted/pub.dev/vm_service-14.3.0/lib/vm_service_io.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/watcher-1.1.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/web-1.1.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/web_socket-0.1.6/LICENSE @@ -730,334 +730,344 @@ /Users/lucasoliveira/.pub-cache/hosted/pub.dev/widgetbook_annotation-3.2.0/lib/widgetbook_annotation.dart /Users/lucasoliveira/.pub-cache/hosted/pub.dev/widgetbook_generator-3.9.0/LICENSE /Users/lucasoliveira/.pub-cache/hosted/pub.dev/yaml-3.1.2/LICENSE -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/LICENSE -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/mix.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/animated/animated_data.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/animated/animated_data_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/animated/animated_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/border_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/border_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/border_radius_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/border_radius_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/border_radius_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/border_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/shape_border_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/border/shape_border_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/color/color_directives.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/color/color_directives_impl.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/color/color_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/color/color_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/color/material_colors_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/constraints/constraints_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/constraints/constraints_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/decoration/decoration_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/decoration/decoration_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/decoration/image/decoration_image_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/decoration/image/decoration_image_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/enum/enum_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/enum/enum_util.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/gap/gap_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/gap/spacing_side_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/gradient/gradient_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/gradient/gradient_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/modifiers/widget_modifiers_data.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/modifiers/widget_modifiers_data_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/modifiers/widget_modifiers_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/nested_style/nested_style_attribute.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/nested_style/nested_style_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/scalars/curves.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/scalars/scalar_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/scalars/scalar_util.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/shadow/shadow_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/shadow/shadow_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/shadow/shadow_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/spacing/edge_insets_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/spacing/edge_insets_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/spacing/spacing_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/strut_style/strut_style_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/strut_style/strut_style_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/text_height_behavior/text_height_behavior_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/text_height_behavior/text_height_behavior_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/text_style/text_style_dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/text_style/text_style_dto.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/attributes/text_style/text_style_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/attribute.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/attributes_map.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/deprecation_notices.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/directive.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/dto.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/factory/mix_data.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/factory/mix_provider.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/factory/style_mix.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/factory/style_widgets_ext.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/helpers.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/styled_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/utility.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/variant.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/widget_state/internal/gesture_mix_state.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/widget_state/internal/interactive_mix_state.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/widget_state/internal/mix_widget_state_builder.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/widget_state/internal/mouse_region_mix_state.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/core/widget_state/widget_state_controller.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/build_context_ext.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/compare_mixin.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/constants.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/deep_collection_equality.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/diagnostic_properties_builder_ext.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/helper_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/iterable_ext.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/mix_error.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/internal/string_ext.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/align_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/align_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/aspect_ratio_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/aspect_ratio_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/clip_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/clip_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/flexible_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/flexible_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/fractionally_sized_box_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/fractionally_sized_box_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/internal/render_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/internal/reset_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/internal/reset_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/intrinsic_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/intrinsic_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/mouse_cursor_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/mouse_cursor_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/opacity_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/opacity_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/padding_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/padding_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/rotated_box_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/rotated_box_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/scroll_view_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/scroll_view_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/sized_box_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/sized_box_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/transform_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/transform_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/visibility_widget_modifier.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/visibility_widget_modifier.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/modifiers/widget_modifiers_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/box/box_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/box/box_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/box/box_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/flex/flex_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/flex/flex_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/flex/flex_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/flexbox/flexbox_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/flexbox/flexbox_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/flexbox/flexbox_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/icon/icon_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/icon/icon_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/icon/icon_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/image/image_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/image/image_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/image/image_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/spec_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/stack/stack_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/stack/stack_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/stack/stack_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/text/text_directives_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/text/text_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/text/text_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/specs/text/text_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/material/material_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/material/material_tokens.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/mix/mix_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/breakpoints_token.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/color_token.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/mix_token.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/radius_token.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/space_token.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/text_style_token.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/token_resolver.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/theme/tokens/token_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_breakpoint_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_brightness_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_directionality_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_not_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_orientation_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_platform_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_util.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/variant_attribute.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/variants/widget_state_variant.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix/lib/src/widgets/pressable_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix_annotations/LICENSE -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix_annotations/lib/mix_annotations.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/mix_annotations/lib/src/annotations.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/LICENSE -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/addons/icon_data_knob.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/accordion_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/avatar_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/badge_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/button_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/callout_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/card_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/checkbox_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/chip_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/dialog_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/divider_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/icon_button_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/menu_item_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/progress_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/radio_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/segmented_control_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/select_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/slider.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/spinner_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/switch_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/textfield_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/components/toast_use_case.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/helpers/knob_builder.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/helpers/string.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/helpers/theme_addon.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/helpers/use_case_state.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/main.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/main.directories.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/pubspec.yaml -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/remix.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/accordion/accordion.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/accordion/accordion.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/accordion/accordion_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/accordion/accordion_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/accordion/header/accordion_header.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/accordion/header/accordion_header_spec_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/avatar/avatar.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/avatar/avatar.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/avatar/avatar_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/avatar/avatar_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/badge/badge.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/badge/badge.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/badge/badge_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/badge/badge_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/button/button.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/button/button.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/button/button_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/button/button_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/callout/callout.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/callout/callout.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/callout/callout_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/callout/callout_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/card/card.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/card/card.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/card/card_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/card/card_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/checkbox/checkbox.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/checkbox/checkbox.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/checkbox/checkbox_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/checkbox/checkbox_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/chip/chip.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/chip/chip.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/chip/chip_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/chip/chip_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/dialog/dialog.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/dialog/dialog.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/dialog/dialog_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/dialog/dialog_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/divider/divider.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/divider/divider.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/divider/divider_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/divider/divider_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/icon_button/icon_button.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/icon_button/icon_button.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/icon_button/icon_button_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/icon_button/icon_button_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/menu_item/menu_item.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/menu_item/menu_item.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/menu_item/menu_item_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/menu_item/menu_item_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/progress/progress.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/progress/progress.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/progress/progress_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/progress/progress_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/radio/radio.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/radio/radio.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/radio/radio_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/radio/radio_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/scaffold/scaffold.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/scaffold/scaffold.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/scaffold/scaffold_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/scaffold/scaffold_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/segmented_control/button/segmented_control_button.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/segmented_control/button/segmented_control_button_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/button/select_button.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/button/select_button_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/item/select_menu.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/item/select_menu_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/select.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/select.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/select_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/select/select_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/slider/slider.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/slider/slider.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/slider/slider_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/slider/slider_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/spinner/spinner.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/spinner/spinner.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/spinner/spinner_painter.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/spinner/spinner_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/spinner/spinner_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/switch/switch.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/switch/switch.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/switch/switch_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/switch/switch_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/textfield/attributes/attributes.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/textfield/attributes/attributes.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/textfield/textfield.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/textfield/textfield.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/textfield/textfield_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/textfield/textfield_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/toast/toast.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/toast/toast.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/toast/toast_layer.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/toast/toast_style.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/components/toast/toast_widget.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/core/remix_app.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/core/theme/component.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/core/theme/remix_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/color_palette.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/color_utils.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/component_builder.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/context_ext.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/spec/composited_transform_follower_spec.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/spec/composited_transform_follower_spec.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/helpers/utility_extension.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/accordion_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/avatar_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/badge_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/button_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/callout_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/card_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/checkbox_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/chip_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/dialog_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/divider_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/icon_button_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/menu_item_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/progress_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/radio_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/scaffold_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/segmented_control_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/select_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/slider_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/spinner_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/switch_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/textfield_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/components/toast_theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/theme.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/tokens.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/src/themes/fortaleza/tokens.g.dart -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/lib/themes/fortaleza.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/LICENSE +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/mix.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/animated/animated_data.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/animated/animated_data_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/animated/animated_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/border_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/border_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/border_radius_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/border_radius_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/border_radius_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/border_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/shape_border_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/border/shape_border_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/color/color_directives.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/color/color_directives_impl.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/color/color_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/color/color_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/color/material_colors_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/constraints/constraints_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/constraints/constraints_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/decoration/decoration_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/decoration/decoration_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/decoration/image/decoration_image_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/decoration/image/decoration_image_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/enum/enum_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/enum/enum_util.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/gap/gap_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/gap/spacing_side_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/gradient/gradient_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/gradient/gradient_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/modifiers/widget_modifiers_data.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/modifiers/widget_modifiers_data_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/modifiers/widget_modifiers_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/nested_style/nested_style_attribute.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/nested_style/nested_style_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/scalars/curves.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/scalars/scalar_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/scalars/scalar_util.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/shadow/shadow_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/shadow/shadow_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/shadow/shadow_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/spacing/edge_insets_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/spacing/edge_insets_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/spacing/spacing_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/strut_style/strut_style_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/strut_style/strut_style_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/text_height_behavior/text_height_behavior_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/text_height_behavior/text_height_behavior_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/text_style/text_style_dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/text_style/text_style_dto.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/attributes/text_style/text_style_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/attribute.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/attributes_map.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/deprecation_notices.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/directive.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/dto.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/factory/mix_data.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/factory/mix_provider.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/factory/style_mix.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/factory/style_widgets_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/helpers.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/styled_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/utility.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/variant.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/widget_state/internal/gesture_mix_state.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/widget_state/internal/interactive_mix_state.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/widget_state/internal/mix_widget_state_builder.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/widget_state/internal/mouse_region_mix_state.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/core/widget_state/widget_state_controller.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/build_context_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/compare_mixin.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/constants.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/deep_collection_equality.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/diagnostic_properties_builder_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/helper_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/iterable_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/mix_error.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/internal/string_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/align_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/align_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/aspect_ratio_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/aspect_ratio_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/clip_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/clip_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/flexible_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/flexible_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/fractionally_sized_box_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/fractionally_sized_box_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/internal/render_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/internal/reset_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/internal/reset_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/intrinsic_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/intrinsic_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/mouse_cursor_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/mouse_cursor_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/opacity_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/opacity_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/padding_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/padding_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/rotated_box_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/rotated_box_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/scroll_view_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/scroll_view_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/sized_box_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/sized_box_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/transform_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/transform_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/visibility_widget_modifier.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/visibility_widget_modifier.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/modifiers/widget_modifiers_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/box/box_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/box/box_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/box/box_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/flex/flex_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/flex/flex_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/flex/flex_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/flexbox/flexbox_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/flexbox/flexbox_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/flexbox/flexbox_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/icon/icon_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/icon/icon_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/icon/icon_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/image/image_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/image/image_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/image/image_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/spec_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/stack/stack_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/stack/stack_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/stack/stack_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/text/text_directives_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/text/text_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/text/text_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/specs/text/text_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/material/material_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/material/material_tokens.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/mix/mix_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/breakpoints_token.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/color_token.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/mix_token.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/radius_token.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/space_token.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/text_style_token.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/token_resolver.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/theme/tokens/token_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_breakpoint_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_brightness_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_directionality_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_not_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_orientation_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_platform_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/context_variant_util/on_util.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/variant_attribute.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/variants/widget_state_variant.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix/lib/src/widgets/pressable_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix_annotations/LICENSE +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix_annotations/lib/mix_annotations.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/mix_annotations/lib/src/annotations.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/LICENSE +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/addons/brightness_addon.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/addons/icon_data_knob.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/addons/theme_addon.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/accordion_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/avatar_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/badge_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/button_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/callout_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/card_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/checkbox_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/chip_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/dialog_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/divider_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/dropdown_menu.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/icon_button_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/menu_item_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/progress_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/radio_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/segmented_control_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/select.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/slider.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/spinner_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/switch_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/textfield_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/components/toast_use_case.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/helpers/knob_builder.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/helpers/string.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/helpers/use_case_state.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/main.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/main.directories.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/pubspec.yaml +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/remix.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/accordion/accordion.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/accordion/accordion.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/accordion/accordion_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/accordion/accordion_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/accordion/header/accordion_header.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/accordion/header/accordion_header_spec_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/avatar/avatar.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/avatar/avatar.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/avatar/avatar_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/avatar/avatar_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/badge/badge.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/badge/badge.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/badge/badge_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/badge/badge_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/button/button.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/button/button.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/button/button_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/button/button_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/callout/callout.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/callout/callout.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/callout/callout_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/callout/callout_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/card/card.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/card/card.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/card/card_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/card/card_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/checkbox/checkbox.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/checkbox/checkbox.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/checkbox/checkbox_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/checkbox/checkbox_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/chip/chip.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/chip/chip.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/chip/chip_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/chip/chip_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dialog/dialog.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dialog/dialog.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dialog/dialog_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dialog/dialog_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/divider/divider.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/divider/divider.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/divider/divider_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/divider/divider_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/icon_button/icon_button.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/icon_button/icon_button.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/icon_button/icon_button_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/icon_button/icon_button_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/menu_item/menu_item.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/menu_item/menu_item.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/menu_item/menu_item_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/menu_item/menu_item_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/progress/progress.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/progress/progress.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/progress/progress_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/progress/progress_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/radio/radio.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/radio/radio.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/radio/radio_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/radio/radio_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/scaffold/scaffold.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/scaffold/scaffold.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/scaffold/scaffold_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/scaffold/scaffold_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/segmented_control/button/segmented_control_button.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/segmented_control/button/segmented_control_button_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/segmented_control/segmented_control_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/button/select_button.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/button/select_button_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/item/select_menu.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/item/select_menu_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/select.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/select.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/select_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/select/select_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/slider/slider.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/slider/slider.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/slider/slider_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/slider/slider_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/spinner/spinner.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/spinner/spinner.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/spinner/spinner_painter.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/spinner/spinner_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/spinner/spinner_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/switch/switch.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/switch/switch.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/switch/switch_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/switch/switch_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/textfield/attributes/attributes.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/textfield/attributes/attributes.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/textfield/textfield.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/textfield/textfield.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/textfield/textfield_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/textfield/textfield_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/toast/toast.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/toast/toast.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/toast/toast_layer.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/toast/toast_style.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/components/toast/toast_widget.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/core/remix_app.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/core/theme/component.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/core/theme/remix_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/color_palette.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/color_utils.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/component_builder.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/context_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/object_ext.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/overlay.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/spec/composited_transform_follower_spec.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/spec/composited_transform_follower_spec.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/helpers/utility_extension.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/accordion_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/avatar_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/badge_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/button_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/callout_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/card_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/checkbox_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/chip_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/dialog_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/divider_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/icon_button_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/menu_item_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/progress_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/radio_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/scaffold_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/segmented_control_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/select_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/slider_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/spinner_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/switch_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/textfield_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/components/toast_theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/theme.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/tokens.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/src/themes/fortaleza/tokens.g.dart +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/lib/themes/fortaleza.dart /Users/lucasoliveira/fvm/versions/stable/bin/cache/artifacts/material_fonts/MaterialIcons-Regular.otf /Users/lucasoliveira/fvm/versions/stable/bin/cache/dart-sdk/pkg/_macros/LICENSE /Users/lucasoliveira/fvm/versions/stable/bin/cache/pkg/sky_engine/LICENSE @@ -1282,7 +1292,6 @@ /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/floating_action_button.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/floating_action_button_location.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/floating_action_button_theme.dart -/Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/flutter_logo.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/grid_tile.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/grid_tile_bar.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/material/icon_button.dart @@ -1579,6 +1588,7 @@ /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/editable_text.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/fade_in_image.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/feedback.dart +/Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/flutter_logo.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/focus_manager.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/focus_scope.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/focus_traversal.dart @@ -1662,6 +1672,7 @@ /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/size_changed_layout_notifier.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/sliver.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/sliver_fill.dart +/Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/sliver_floating_header.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/sliver_layout_builder.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/sliver_persistent_header.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/sliver_prototype_extent_list.dart @@ -1671,6 +1682,7 @@ /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/snapshot_widget.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/spacer.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/spell_check.dart +/Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/standard_component_type.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/status_transitions.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/system_context_menu.dart /Users/lucasoliveira/fvm/versions/stable/packages/flutter/lib/src/widgets/table.dart diff --git a/packages/remix/demo/macos/Flutter/ephemeral/FlutterOutputs.xcfilelist b/packages/remix/demo/macos/Flutter/ephemeral/FlutterOutputs.xcfilelist index 70c14cc43..caff3d440 100644 --- a/packages/remix/demo/macos/Flutter/ephemeral/FlutterOutputs.xcfilelist +++ b/packages/remix/demo/macos/Flutter/ephemeral/FlutterOutputs.xcfilelist @@ -1,32 +1,32 @@ -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/App -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/Info.plist -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/AssetManifest.bin -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/AssetManifest.json -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/FontManifest.json -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/NOTICES.Z -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/fonts/MaterialIcons-Regular.otf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/isolate_snapshot_data -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/kernel_blob.bin -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Black.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-BlackItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Bold.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-BoldItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraBold.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraLight.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Italic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Light.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-LightItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Medium.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-MediumItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Regular.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-SemiBold.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Thin.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ThinItalic.ttf -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/logo.png -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/shaders/ink_sparkle.frag -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/vm_snapshot_data -/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/FlutterMacOS.framework/Versions/A/FlutterMacOS +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/App +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/Info.plist +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/AssetManifest.bin +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/AssetManifest.json +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/FontManifest.json +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/NOTICES.Z +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/fonts/MaterialIcons-Regular.otf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/isolate_snapshot_data +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/kernel_blob.bin +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Black.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-BlackItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Bold.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-BoldItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraBold.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraLight.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Italic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Light.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-LightItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Medium.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-MediumItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Regular.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-SemiBold.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-Thin.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/fonts/Poppins/Poppins-ThinItalic.ttf +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/packages/widgetbook/assets/logo.png +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/shaders/ink_sparkle.frag +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/vm_snapshot_data +/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/build/macos/Build/Products/Debug/FlutterMacOS.framework/Versions/A/FlutterMacOS diff --git a/packages/remix/demo/macos/Flutter/ephemeral/flutter_export_environment.sh b/packages/remix/demo/macos/Flutter/ephemeral/flutter_export_environment.sh index bf6658c86..bc2602b91 100755 --- a/packages/remix/demo/macos/Flutter/ephemeral/flutter_export_environment.sh +++ b/packages/remix/demo/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -1,13 +1,13 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. export "FLUTTER_ROOT=/Users/lucasoliveira/fvm/versions/stable" -export "FLUTTER_APPLICATION_PATH=/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo" +export "FLUTTER_APPLICATION_PATH=/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo" export "COCOAPODS_PARALLEL_CODE_SIGN=true" -export "FLUTTER_TARGET=/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/lib/main.dart" +export "FLUTTER_TARGET=/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" export "DART_OBFUSCATION=false" export "TRACK_WIDGET_CREATION=true" export "TREE_SHAKE_ICONS=false" -export "PACKAGE_CONFIG=/Users/lucasoliveira/Developer/Projects/hairday/packages/mix/packages/remix/demo/.dart_tool/package_config.json" +export "PACKAGE_CONFIG=/Users/lucasoliveira/Developer/Mix/PoCs/remix_toast/packages/mix/packages/remix/demo/.dart_tool/package_config.json" diff --git a/packages/remix/demo/macos/Runner/AppDelegate.swift b/packages/remix/demo/macos/Runner/AppDelegate.swift index 8e02df288..b3c176141 100644 --- a/packages/remix/demo/macos/Runner/AppDelegate.swift +++ b/packages/remix/demo/macos/Runner/AppDelegate.swift @@ -6,4 +6,8 @@ class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/packages/remix/lib/remix.dart b/packages/remix/lib/remix.dart index e1a881a12..83eae72c0 100644 --- a/packages/remix/lib/remix.dart +++ b/packages/remix/lib/remix.dart @@ -29,6 +29,7 @@ export 'src/components/checkbox/checkbox.dart'; export 'src/components/chip/chip.dart'; export 'src/components/dialog/dialog.dart'; export 'src/components/divider/divider.dart'; +export 'src/components/dropdown_menu/dropdown_menu.dart'; export 'src/components/icon_button/icon_button.dart'; export 'src/components/menu_item/menu_item.dart'; export 'src/components/progress/progress.dart'; diff --git a/packages/remix/lib/src/components/accordion/accordion.dart b/packages/remix/lib/src/components/accordion/accordion.dart index db272e367..5f53bcbdb 100644 --- a/packages/remix/lib/src/components/accordion/accordion.dart +++ b/packages/remix/lib/src/components/accordion/accordion.dart @@ -20,7 +20,6 @@ base class AccordionSpec extends Spec with _$AccordionSpec { final AccordionHeaderSpec header; final BoxSpec contentContainer; - final TextSpec textContent; /// {@macro accordion_spec_of} static const of = _$AccordionSpec.of; @@ -31,10 +30,8 @@ base class AccordionSpec extends Spec with _$AccordionSpec { AccordionHeaderSpec? header, FlexBoxSpec? container, BoxSpec? contentContainer, - TextSpec? textContent, super.animated, }) : container = container ?? const FlexBoxSpec(), header = header ?? const AccordionHeaderSpec(), - contentContainer = contentContainer ?? const BoxSpec(), - textContent = textContent ?? const TextSpec(); + contentContainer = contentContainer ?? const BoxSpec(); } diff --git a/packages/remix/lib/src/components/accordion/accordion.g.dart b/packages/remix/lib/src/components/accordion/accordion.g.dart index 00e917355..ebcb638c3 100644 --- a/packages/remix/lib/src/components/accordion/accordion.g.dart +++ b/packages/remix/lib/src/components/accordion/accordion.g.dart @@ -36,14 +36,12 @@ mixin _$AccordionSpec on Spec { AccordionHeaderSpec? header, FlexBoxSpec? container, BoxSpec? contentContainer, - TextSpec? textContent, AnimatedData? animated, }) { return AccordionSpec( header: header ?? _$this.header, container: container ?? _$this.container, contentContainer: contentContainer ?? _$this.contentContainer, - textContent: textContent ?? _$this.textContent, animated: animated ?? _$this.animated, ); } @@ -61,7 +59,6 @@ mixin _$AccordionSpec on Spec { /// /// - [FlexBoxSpec.lerp] for [container]. /// - [BoxSpec.lerp] for [contentContainer]. - /// - [TextSpec.lerp] for [textContent]. /// For [header] and [animated], the interpolation is performed using a step function. /// If [t] is less than 0.5, the value from the current [AccordionSpec] is used. Otherwise, the value @@ -77,7 +74,6 @@ mixin _$AccordionSpec on Spec { header: _$this.header.lerp(other.header, t), container: _$this.container.lerp(other.container, t), contentContainer: _$this.contentContainer.lerp(other.contentContainer, t), - textContent: _$this.textContent.lerp(other.textContent, t), animated: t < 0.5 ? _$this.animated : other.animated, ); } @@ -91,7 +87,6 @@ mixin _$AccordionSpec on Spec { _$this.header, _$this.container, _$this.contentContainer, - _$this.textContent, _$this.animated, ]; @@ -109,13 +104,11 @@ base class AccordionSpecAttribute extends SpecAttribute { final AccordionHeaderSpecAttribute? header; final FlexBoxSpecAttribute? container; final BoxSpecAttribute? contentContainer; - final TextSpecAttribute? textContent; const AccordionSpecAttribute({ this.header, this.container, this.contentContainer, - this.textContent, super.animated, }); @@ -133,7 +126,6 @@ base class AccordionSpecAttribute extends SpecAttribute { header: header?.resolve(mix), container: container?.resolve(mix), contentContainer: contentContainer?.resolve(mix), - textContent: textContent?.resolve(mix), animated: animated?.resolve(mix) ?? mix.animation, ); } @@ -155,7 +147,6 @@ base class AccordionSpecAttribute extends SpecAttribute { container: container?.merge(other.container) ?? other.container, contentContainer: contentContainer?.merge(other.contentContainer) ?? other.contentContainer, - textContent: textContent?.merge(other.textContent) ?? other.textContent, animated: animated?.merge(other.animated) ?? other.animated, ); } @@ -169,7 +160,6 @@ base class AccordionSpecAttribute extends SpecAttribute { header, container, contentContainer, - textContent, animated, ]; } @@ -190,9 +180,6 @@ class AccordionSpecUtility late final contentContainer = BoxSpecUtility((v) => only(contentContainer: v)); - /// Utility for defining [AccordionSpecAttribute.textContent] - late final textContent = TextSpecUtility((v) => only(textContent: v)); - /// Utility for defining [AccordionSpecAttribute.animated] late final animated = AnimatedUtility((v) => only(animated: v)); @@ -210,14 +197,12 @@ class AccordionSpecUtility AccordionHeaderSpecAttribute? header, FlexBoxSpecAttribute? container, BoxSpecAttribute? contentContainer, - TextSpecAttribute? textContent, AnimatedDataDto? animated, }) { return builder(AccordionSpecAttribute( header: header, container: container, contentContainer: contentContainer, - textContent: textContent, animated: animated, )); } diff --git a/packages/remix/lib/src/components/accordion/accordion_style.dart b/packages/remix/lib/src/components/accordion/accordion_style.dart index cce240072..77c3beaae 100644 --- a/packages/remix/lib/src/components/accordion/accordion_style.dart +++ b/packages/remix/lib/src/components/accordion/accordion_style.dart @@ -14,22 +14,6 @@ class AccordionStyle extends SpecStyle { ..border.bottom.color.grey.shade400(), ]; - final contentStyle = [ - $.contentContainer.padding.bottom(16), - $.contentContainer.wrap.align( - alignment: Alignment.topCenter, - heightFactor: 0, - ), - spec.on.selected($.contentContainer.wrap.align(heightFactor: 1)), - ]; - - final textContainerStyle = [ - $.textContent.chain - ..style.fontSize(14) - ..style.height(1.4) - ..style.letterSpacing(0.2), - ]; - final headerStyle = [ $.header.container.chain ..flex.gap(6) @@ -49,12 +33,7 @@ class AccordionStyle extends SpecStyle { spec.on.selected($.header.trailingIcon.wrap.transform.rotate.d180()), ]; - return Style.create([ - ...flexContainerStyle, - ...contentStyle, - ...textContainerStyle, - ...headerStyle, - ]); + return Style.create([...flexContainerStyle, ...headerStyle]); } } @@ -70,7 +49,6 @@ class AccordionDarkStyle extends AccordionStyle { $.container.border.bottom.color.grey.shade700(), $.header.text.style.color.white(), $.header.trailingIcon.color.white(), - $.textContent.style.color.white(), ]); } } diff --git a/packages/remix/lib/src/components/accordion/accordion_widget.dart b/packages/remix/lib/src/components/accordion/accordion_widget.dart index d68f180c2..7058d2e12 100644 --- a/packages/remix/lib/src/components/accordion/accordion_widget.dart +++ b/packages/remix/lib/src/components/accordion/accordion_widget.dart @@ -5,65 +5,57 @@ class Accordion extends StatefulWidget { super.key, required this.header, required this.content, + this.onChanged, + this.expanded = true, this.variants = const [], - this.initiallyExpanded = false, this.style, }); final WidgetSpecBuilder header; - final WidgetSpecBuilder content; + final Widget content; final AccordionStyle? style; - final bool initiallyExpanded; + final bool expanded; final List variants; + final void Function(bool)? onChanged; @override State createState() => _AccordionState(); } -class _AccordionState extends State with TickerProviderStateMixin { +class _AccordionState extends State { late MixWidgetStateController _controller; - late MixWidgetStateController _contentController; @override void initState() { super.initState(); - _controller = MixWidgetStateController() - ..selected = widget.initiallyExpanded; - _contentController = MixWidgetStateController() - ..selected = widget.initiallyExpanded; + _controller = MixWidgetStateController()..selected = widget.expanded; } void _handleTap() { _controller.selected = !_controller.selected; - _contentController.selected = !_contentController.selected; + widget.onChanged?.call(widget.expanded); } @override void dispose() { _controller.dispose(); - _contentController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { - final style = widget.style ?? context.remix.components.accordion; + final Accordionstyle = widget.style ?? context.remix.components.accordion; final configuration = SpecConfiguration(context, AccordionSpecUtility.self); - final variantStyle = - style.makeStyle(configuration).applyVariants(widget.variants); + final style = + Accordionstyle.makeStyle(configuration).applyVariants(widget.variants); return RepaintBoundary( child: SpecBuilder( - controller: _contentController, - style: variantStyle, + style: style, builder: (context) { final spec = AccordionSpec.of(context); - final content = spec.contentContainer( - child: widget.content(spec.textContent), - ); - return spec.container( direction: Axis.vertical, children: [ @@ -71,7 +63,7 @@ class _AccordionState extends State with TickerProviderStateMixin { onPress: _handleTap, controller: _controller, child: SpecBuilder( - style: variantStyle, + style: style, builder: (context) { final spec = AccordionSpec.of(context); @@ -79,7 +71,12 @@ class _AccordionState extends State with TickerProviderStateMixin { }, ), ), - content, + AnimatedAlign( + alignment: Alignment.topCenter, + heightFactor: widget.expanded ? 1 : 0, + duration: const Duration(milliseconds: 200), + child: spec.contentContainer(child: widget.content), + ), ], ); }, diff --git a/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.dart b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.dart new file mode 100644 index 000000000..6906500ca --- /dev/null +++ b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.dart @@ -0,0 +1,73 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:mix/mix.dart'; +import 'package:mix_annotations/mix_annotations.dart'; + +import '../../core/theme/remix_theme.dart'; +import '../../helpers/object_ext.dart'; +import '../../helpers/overlay.dart'; + +part 'dropdown_menu.g.dart'; +part 'dropdown_menu_style.dart'; +part 'dropdown_menu_widget.dart'; +part 'item/dropdown_menu.dart'; +part 'item/dropdown_menu_widget.dart'; + +@MixableSpec() +class DropdownMenuSpec extends Spec + with _$DropdownMenuSpec, Diagnosticable { + @MixableProperty( + dto: MixableFieldDto(type: 'DropdownMenuContainerSpecAttribute'), + ) + final DropdownMenuContainerSpec menu; + + @MixableProperty( + dto: MixableFieldDto(type: 'DropdownMenuItemSpecAttribute'), + ) + final DropdownMenuItemSpec item; + + /// {@macro select_spec_of} + static const of = _$DropdownMenuSpec.of; + + static const from = _$DropdownMenuSpec.from; + + const DropdownMenuSpec({ + DropdownMenuContainerSpec? menu, + DropdownMenuItemSpec? item, + super.modifiers, + super.animated, + }) : item = item ?? const DropdownMenuItemSpec(), + menu = menu ?? const DropdownMenuContainerSpec(); + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + _debugFillProperties(properties); + } +} + +@MixableSpec() +base class DropdownMenuContainerSpec extends Spec + with _$DropdownMenuContainerSpec, Diagnosticable { + final FlexBoxSpec container; + final bool autoWidth; + + /// {@macro select_menu_spec_of} + static const of = _$DropdownMenuContainerSpec.of; + + static const from = _$DropdownMenuContainerSpec.from; + + const DropdownMenuContainerSpec({ + FlexBoxSpec? container, + bool? autoWidth, + super.modifiers, + super.animated, + }) : container = container ?? const FlexBoxSpec(), + autoWidth = autoWidth ?? true; + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + _debugFillProperties(properties); + } +} diff --git a/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.g.dart b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.g.dart new file mode 100644 index 000000000..a516c99b1 --- /dev/null +++ b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu.g.dart @@ -0,0 +1,767 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'dropdown_menu.dart'; + +// ************************************************************************** +// MixableSpecGenerator +// ************************************************************************** + +mixin _$DropdownMenuSpec on Spec { + static DropdownMenuSpec from(MixData mix) { + return mix.attributeOf()?.resolve(mix) ?? + const DropdownMenuSpec(); + } + + /// {@template dropdown_menu_spec_of} + /// Retrieves the [DropdownMenuSpec] from the nearest [Mix] ancestor in the widget tree. + /// + /// This method uses [Mix.of] to obtain the [Mix] instance associated with the + /// given [BuildContext], and then retrieves the [DropdownMenuSpec] from that [Mix]. + /// If no ancestor [Mix] is found, this method returns an empty [DropdownMenuSpec]. + /// + /// Example: + /// + /// ```dart + /// final dropdownMenuSpec = DropdownMenuSpec.of(context); + /// ``` + /// {@endtemplate} + static DropdownMenuSpec of(BuildContext context) { + return _$DropdownMenuSpec.from(Mix.of(context)); + } + + /// Creates a copy of this [DropdownMenuSpec] but with the given fields + /// replaced with the new values. + @override + DropdownMenuSpec copyWith({ + DropdownMenuContainerSpec? menu, + DropdownMenuItemSpec? item, + WidgetModifiersData? modifiers, + AnimatedData? animated, + }) { + return DropdownMenuSpec( + menu: menu ?? _$this.menu, + item: item ?? _$this.item, + modifiers: modifiers ?? _$this.modifiers, + animated: animated ?? _$this.animated, + ); + } + + /// Linearly interpolates between this [DropdownMenuSpec] and another [DropdownMenuSpec] based on the given parameter [t]. + /// + /// The parameter [t] represents the interpolation factor, typically ranging from 0.0 to 1.0. + /// When [t] is 0.0, the current [DropdownMenuSpec] is returned. When [t] is 1.0, the [other] [DropdownMenuSpec] is returned. + /// For values of [t] between 0.0 and 1.0, an interpolated [DropdownMenuSpec] is returned. + /// + /// If [other] is null, this method returns the current [DropdownMenuSpec] instance. + /// + /// The interpolation is performed on each property of the [DropdownMenuSpec] using the appropriate + /// interpolation method: + /// + + /// For [menu] and [item] and [modifiers] and [animated], the interpolation is performed using a step function. + /// If [t] is less than 0.5, the value from the current [DropdownMenuSpec] is used. Otherwise, the value + /// from the [other] [DropdownMenuSpec] is used. + /// + /// This method is typically used in animations to smoothly transition between + /// different [DropdownMenuSpec] configurations. + @override + DropdownMenuSpec lerp(DropdownMenuSpec? other, double t) { + if (other == null) return _$this; + + return DropdownMenuSpec( + menu: _$this.menu.lerp(other.menu, t), + item: _$this.item.lerp(other.item, t), + modifiers: other.modifiers, + animated: t < 0.5 ? _$this.animated : other.animated, + ); + } + + /// The list of properties that constitute the state of this [DropdownMenuSpec]. + /// + /// This property is used by the [==] operator and the [hashCode] getter to + /// compare two [DropdownMenuSpec] instances for equality. + @override + List get props => [ + _$this.menu, + _$this.item, + _$this.modifiers, + _$this.animated, + ]; + + DropdownMenuSpec get _$this => this as DropdownMenuSpec; + + void _debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties + .add(DiagnosticsProperty('menu', _$this.menu, defaultValue: null)); + properties + .add(DiagnosticsProperty('item', _$this.item, defaultValue: null)); + properties.add( + DiagnosticsProperty('modifiers', _$this.modifiers, defaultValue: null)); + properties.add( + DiagnosticsProperty('animated', _$this.animated, defaultValue: null)); + } +} + +/// Represents the attributes of a [DropdownMenuSpec]. +/// +/// This class encapsulates properties defining the layout and +/// appearance of a [DropdownMenuSpec]. +/// +/// Use this class to configure the attributes of a [DropdownMenuSpec] and pass it to +/// the [DropdownMenuSpec] constructor. +class DropdownMenuSpecAttribute extends SpecAttribute + with Diagnosticable { + final DropdownMenuContainerSpecAttribute? menu; + final DropdownMenuItemSpecAttribute? item; + + const DropdownMenuSpecAttribute({ + this.menu, + this.item, + super.modifiers, + super.animated, + }); + + /// Resolves to [DropdownMenuSpec] using the provided [MixData]. + /// + /// If a property is null in the [MixData], it falls back to the + /// default value defined in the `defaultValue` for that property. + /// + /// ```dart + /// final dropdownMenuSpec = DropdownMenuSpecAttribute(...).resolve(mix); + /// ``` + @override + DropdownMenuSpec resolve(MixData mix) { + return DropdownMenuSpec( + menu: menu?.resolve(mix), + item: item?.resolve(mix), + modifiers: modifiers?.resolve(mix), + animated: animated?.resolve(mix) ?? mix.animation, + ); + } + + /// Merges the properties of this [DropdownMenuSpecAttribute] with the properties of [other]. + /// + /// If [other] is null, returns this instance unchanged. Otherwise, returns a new + /// [DropdownMenuSpecAttribute] with the properties of [other] taking precedence over + /// the corresponding properties of this instance. + /// + /// Properties from [other] that are null will fall back + /// to the values from this instance. + @override + DropdownMenuSpecAttribute merge(covariant DropdownMenuSpecAttribute? other) { + if (other == null) return this; + + return DropdownMenuSpecAttribute( + menu: menu?.merge(other.menu) ?? other.menu, + item: item?.merge(other.item) ?? other.item, + modifiers: modifiers?.merge(other.modifiers) ?? other.modifiers, + animated: animated?.merge(other.animated) ?? other.animated, + ); + } + + /// The list of properties that constitute the state of this [DropdownMenuSpecAttribute]. + /// + /// This property is used by the [==] operator and the [hashCode] getter to + /// compare two [DropdownMenuSpecAttribute] instances for equality. + @override + List get props => [ + menu, + item, + modifiers, + animated, + ]; + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties.add(DiagnosticsProperty('menu', menu, defaultValue: null)); + properties.add(DiagnosticsProperty('item', item, defaultValue: null)); + properties + .add(DiagnosticsProperty('modifiers', modifiers, defaultValue: null)); + properties + .add(DiagnosticsProperty('animated', animated, defaultValue: null)); + } +} + +/// Utility class for configuring [DropdownMenuSpec] properties. +/// +/// This class provides methods to set individual properties of a [DropdownMenuSpec]. +/// Use the methods of this class to configure specific properties of a [DropdownMenuSpec]. +class DropdownMenuSpecUtility + extends SpecUtility { + /// Utility for defining [DropdownMenuSpecAttribute.menu] + late final menu = DropdownMenuContainerSpecUtility((v) => only(menu: v)); + + /// Utility for defining [DropdownMenuSpecAttribute.item] + late final item = DropdownMenuItemSpecUtility((v) => only(item: v)); + + /// Utility for defining [DropdownMenuSpecAttribute.modifiers] + late final wrap = SpecModifierUtility((v) => only(modifiers: v)); + + /// Utility for defining [DropdownMenuSpecAttribute.animated] + late final animated = AnimatedUtility((v) => only(animated: v)); + + DropdownMenuSpecUtility(super.builder, {super.mutable}); + + DropdownMenuSpecUtility get chain => + DropdownMenuSpecUtility(attributeBuilder, mutable: true); + + static DropdownMenuSpecUtility get self => + DropdownMenuSpecUtility((v) => v); + + /// Returns a new [DropdownMenuSpecAttribute] with the specified properties. + @override + T only({ + DropdownMenuContainerSpecAttribute? menu, + DropdownMenuItemSpecAttribute? item, + WidgetModifiersDataDto? modifiers, + AnimatedDataDto? animated, + }) { + return builder(DropdownMenuSpecAttribute( + menu: menu, + item: item, + modifiers: modifiers, + animated: animated, + )); + } +} + +/// A tween that interpolates between two [DropdownMenuSpec] instances. +/// +/// This class can be used in animations to smoothly transition between +/// different [DropdownMenuSpec] specifications. +class DropdownMenuSpecTween extends Tween { + DropdownMenuSpecTween({ + super.begin, + super.end, + }); + + @override + DropdownMenuSpec lerp(double t) { + if (begin == null && end == null) { + return const DropdownMenuSpec(); + } + + if (begin == null) { + return end!; + } + + return begin!.lerp(end!, t); + } +} + +mixin _$DropdownMenuContainerSpec on Spec { + static DropdownMenuContainerSpec from(MixData mix) { + return mix + .attributeOf() + ?.resolve(mix) ?? + const DropdownMenuContainerSpec(); + } + + /// {@template dropdown_menu_container_spec_of} + /// Retrieves the [DropdownMenuContainerSpec] from the nearest [Mix] ancestor in the widget tree. + /// + /// This method uses [Mix.of] to obtain the [Mix] instance associated with the + /// given [BuildContext], and then retrieves the [DropdownMenuContainerSpec] from that [Mix]. + /// If no ancestor [Mix] is found, this method returns an empty [DropdownMenuContainerSpec]. + /// + /// Example: + /// + /// ```dart + /// final dropdownMenuContainerSpec = DropdownMenuContainerSpec.of(context); + /// ``` + /// {@endtemplate} + static DropdownMenuContainerSpec of(BuildContext context) { + return _$DropdownMenuContainerSpec.from(Mix.of(context)); + } + + /// Creates a copy of this [DropdownMenuContainerSpec] but with the given fields + /// replaced with the new values. + @override + DropdownMenuContainerSpec copyWith({ + FlexBoxSpec? container, + bool? autoWidth, + WidgetModifiersData? modifiers, + AnimatedData? animated, + }) { + return DropdownMenuContainerSpec( + container: container ?? _$this.container, + autoWidth: autoWidth ?? _$this.autoWidth, + modifiers: modifiers ?? _$this.modifiers, + animated: animated ?? _$this.animated, + ); + } + + /// Linearly interpolates between this [DropdownMenuContainerSpec] and another [DropdownMenuContainerSpec] based on the given parameter [t]. + /// + /// The parameter [t] represents the interpolation factor, typically ranging from 0.0 to 1.0. + /// When [t] is 0.0, the current [DropdownMenuContainerSpec] is returned. When [t] is 1.0, the [other] [DropdownMenuContainerSpec] is returned. + /// For values of [t] between 0.0 and 1.0, an interpolated [DropdownMenuContainerSpec] is returned. + /// + /// If [other] is null, this method returns the current [DropdownMenuContainerSpec] instance. + /// + /// The interpolation is performed on each property of the [DropdownMenuContainerSpec] using the appropriate + /// interpolation method: + /// + /// - [FlexBoxSpec.lerp] for [container]. + + /// For [autoWidth] and [modifiers] and [animated], the interpolation is performed using a step function. + /// If [t] is less than 0.5, the value from the current [DropdownMenuContainerSpec] is used. Otherwise, the value + /// from the [other] [DropdownMenuContainerSpec] is used. + /// + /// This method is typically used in animations to smoothly transition between + /// different [DropdownMenuContainerSpec] configurations. + @override + DropdownMenuContainerSpec lerp(DropdownMenuContainerSpec? other, double t) { + if (other == null) return _$this; + + return DropdownMenuContainerSpec( + container: _$this.container.lerp(other.container, t), + autoWidth: t < 0.5 ? _$this.autoWidth : other.autoWidth, + modifiers: other.modifiers, + animated: t < 0.5 ? _$this.animated : other.animated, + ); + } + + /// The list of properties that constitute the state of this [DropdownMenuContainerSpec]. + /// + /// This property is used by the [==] operator and the [hashCode] getter to + /// compare two [DropdownMenuContainerSpec] instances for equality. + @override + List get props => [ + _$this.container, + _$this.autoWidth, + _$this.modifiers, + _$this.animated, + ]; + + DropdownMenuContainerSpec get _$this => this as DropdownMenuContainerSpec; + + void _debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties.add( + DiagnosticsProperty('container', _$this.container, defaultValue: null)); + properties.add( + DiagnosticsProperty('autoWidth', _$this.autoWidth, defaultValue: null)); + properties.add( + DiagnosticsProperty('modifiers', _$this.modifiers, defaultValue: null)); + properties.add( + DiagnosticsProperty('animated', _$this.animated, defaultValue: null)); + } +} + +/// Represents the attributes of a [DropdownMenuContainerSpec]. +/// +/// This class encapsulates properties defining the layout and +/// appearance of a [DropdownMenuContainerSpec]. +/// +/// Use this class to configure the attributes of a [DropdownMenuContainerSpec] and pass it to +/// the [DropdownMenuContainerSpec] constructor. +base class DropdownMenuContainerSpecAttribute + extends SpecAttribute with Diagnosticable { + final FlexBoxSpecAttribute? container; + final bool? autoWidth; + + const DropdownMenuContainerSpecAttribute({ + this.container, + this.autoWidth, + super.modifiers, + super.animated, + }); + + /// Resolves to [DropdownMenuContainerSpec] using the provided [MixData]. + /// + /// If a property is null in the [MixData], it falls back to the + /// default value defined in the `defaultValue` for that property. + /// + /// ```dart + /// final dropdownMenuContainerSpec = DropdownMenuContainerSpecAttribute(...).resolve(mix); + /// ``` + @override + DropdownMenuContainerSpec resolve(MixData mix) { + return DropdownMenuContainerSpec( + container: container?.resolve(mix), + autoWidth: autoWidth, + modifiers: modifiers?.resolve(mix), + animated: animated?.resolve(mix) ?? mix.animation, + ); + } + + /// Merges the properties of this [DropdownMenuContainerSpecAttribute] with the properties of [other]. + /// + /// If [other] is null, returns this instance unchanged. Otherwise, returns a new + /// [DropdownMenuContainerSpecAttribute] with the properties of [other] taking precedence over + /// the corresponding properties of this instance. + /// + /// Properties from [other] that are null will fall back + /// to the values from this instance. + @override + DropdownMenuContainerSpecAttribute merge( + covariant DropdownMenuContainerSpecAttribute? other) { + if (other == null) return this; + + return DropdownMenuContainerSpecAttribute( + container: container?.merge(other.container) ?? other.container, + autoWidth: other.autoWidth ?? autoWidth, + modifiers: modifiers?.merge(other.modifiers) ?? other.modifiers, + animated: animated?.merge(other.animated) ?? other.animated, + ); + } + + /// The list of properties that constitute the state of this [DropdownMenuContainerSpecAttribute]. + /// + /// This property is used by the [==] operator and the [hashCode] getter to + /// compare two [DropdownMenuContainerSpecAttribute] instances for equality. + @override + List get props => [ + container, + autoWidth, + modifiers, + animated, + ]; + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + .add(DiagnosticsProperty('container', container, defaultValue: null)); + properties + .add(DiagnosticsProperty('autoWidth', autoWidth, defaultValue: null)); + properties + .add(DiagnosticsProperty('modifiers', modifiers, defaultValue: null)); + properties + .add(DiagnosticsProperty('animated', animated, defaultValue: null)); + } +} + +/// Utility class for configuring [DropdownMenuContainerSpec] properties. +/// +/// This class provides methods to set individual properties of a [DropdownMenuContainerSpec]. +/// Use the methods of this class to configure specific properties of a [DropdownMenuContainerSpec]. +class DropdownMenuContainerSpecUtility + extends SpecUtility { + /// Utility for defining [DropdownMenuContainerSpecAttribute.container] + late final container = FlexBoxSpecUtility((v) => only(container: v)); + + /// Utility for defining [DropdownMenuContainerSpecAttribute.autoWidth] + late final autoWidth = BoolUtility((v) => only(autoWidth: v)); + + /// Utility for defining [DropdownMenuContainerSpecAttribute.modifiers] + late final wrap = SpecModifierUtility((v) => only(modifiers: v)); + + /// Utility for defining [DropdownMenuContainerSpecAttribute.animated] + late final animated = AnimatedUtility((v) => only(animated: v)); + + DropdownMenuContainerSpecUtility(super.builder, {super.mutable}); + + DropdownMenuContainerSpecUtility get chain => + DropdownMenuContainerSpecUtility(attributeBuilder, mutable: true); + + static DropdownMenuContainerSpecUtility + get self => DropdownMenuContainerSpecUtility((v) => v); + + /// Returns a new [DropdownMenuContainerSpecAttribute] with the specified properties. + @override + T only({ + FlexBoxSpecAttribute? container, + bool? autoWidth, + WidgetModifiersDataDto? modifiers, + AnimatedDataDto? animated, + }) { + return builder(DropdownMenuContainerSpecAttribute( + container: container, + autoWidth: autoWidth, + modifiers: modifiers, + animated: animated, + )); + } +} + +/// A tween that interpolates between two [DropdownMenuContainerSpec] instances. +/// +/// This class can be used in animations to smoothly transition between +/// different [DropdownMenuContainerSpec] specifications. +class DropdownMenuContainerSpecTween extends Tween { + DropdownMenuContainerSpecTween({ + super.begin, + super.end, + }); + + @override + DropdownMenuContainerSpec lerp(double t) { + if (begin == null && end == null) { + return const DropdownMenuContainerSpec(); + } + + if (begin == null) { + return end!; + } + + return begin!.lerp(end!, t); + } +} + +mixin _$DropdownMenuItemSpec on Spec { + static DropdownMenuItemSpec from(MixData mix) { + return mix.attributeOf()?.resolve(mix) ?? + const DropdownMenuItemSpec(); + } + + /// {@template dropdown_menu_item_spec_of} + /// Retrieves the [DropdownMenuItemSpec] from the nearest [Mix] ancestor in the widget tree. + /// + /// This method uses [Mix.of] to obtain the [Mix] instance associated with the + /// given [BuildContext], and then retrieves the [DropdownMenuItemSpec] from that [Mix]. + /// If no ancestor [Mix] is found, this method returns an empty [DropdownMenuItemSpec]. + /// + /// Example: + /// + /// ```dart + /// final dropdownMenuItemSpec = DropdownMenuItemSpec.of(context); + /// ``` + /// {@endtemplate} + static DropdownMenuItemSpec of(BuildContext context) { + return _$DropdownMenuItemSpec.from(Mix.of(context)); + } + + /// Creates a copy of this [DropdownMenuItemSpec] but with the given fields + /// replaced with the new values. + @override + DropdownMenuItemSpec copyWith({ + IconSpec? icon, + TextSpec? text, + FlexBoxSpec? container, + WidgetModifiersData? modifiers, + AnimatedData? animated, + }) { + return DropdownMenuItemSpec( + icon: icon ?? _$this.icon, + text: text ?? _$this.text, + container: container ?? _$this.container, + modifiers: modifiers ?? _$this.modifiers, + animated: animated ?? _$this.animated, + ); + } + + /// Linearly interpolates between this [DropdownMenuItemSpec] and another [DropdownMenuItemSpec] based on the given parameter [t]. + /// + /// The parameter [t] represents the interpolation factor, typically ranging from 0.0 to 1.0. + /// When [t] is 0.0, the current [DropdownMenuItemSpec] is returned. When [t] is 1.0, the [other] [DropdownMenuItemSpec] is returned. + /// For values of [t] between 0.0 and 1.0, an interpolated [DropdownMenuItemSpec] is returned. + /// + /// If [other] is null, this method returns the current [DropdownMenuItemSpec] instance. + /// + /// The interpolation is performed on each property of the [DropdownMenuItemSpec] using the appropriate + /// interpolation method: + /// + /// - [IconSpec.lerp] for [icon]. + /// - [TextSpec.lerp] for [text]. + /// - [FlexBoxSpec.lerp] for [container]. + + /// For [modifiers] and [animated], the interpolation is performed using a step function. + /// If [t] is less than 0.5, the value from the current [DropdownMenuItemSpec] is used. Otherwise, the value + /// from the [other] [DropdownMenuItemSpec] is used. + /// + /// This method is typically used in animations to smoothly transition between + /// different [DropdownMenuItemSpec] configurations. + @override + DropdownMenuItemSpec lerp(DropdownMenuItemSpec? other, double t) { + if (other == null) return _$this; + + return DropdownMenuItemSpec( + icon: _$this.icon.lerp(other.icon, t), + text: _$this.text.lerp(other.text, t), + container: _$this.container.lerp(other.container, t), + modifiers: other.modifiers, + animated: t < 0.5 ? _$this.animated : other.animated, + ); + } + + /// The list of properties that constitute the state of this [DropdownMenuItemSpec]. + /// + /// This property is used by the [==] operator and the [hashCode] getter to + /// compare two [DropdownMenuItemSpec] instances for equality. + @override + List get props => [ + _$this.icon, + _$this.text, + _$this.container, + _$this.modifiers, + _$this.animated, + ]; + + DropdownMenuItemSpec get _$this => this as DropdownMenuItemSpec; + + void _debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties + .add(DiagnosticsProperty('icon', _$this.icon, defaultValue: null)); + properties + .add(DiagnosticsProperty('text', _$this.text, defaultValue: null)); + properties.add( + DiagnosticsProperty('container', _$this.container, defaultValue: null)); + properties.add( + DiagnosticsProperty('modifiers', _$this.modifiers, defaultValue: null)); + properties.add( + DiagnosticsProperty('animated', _$this.animated, defaultValue: null)); + } +} + +/// Represents the attributes of a [DropdownMenuItemSpec]. +/// +/// This class encapsulates properties defining the layout and +/// appearance of a [DropdownMenuItemSpec]. +/// +/// Use this class to configure the attributes of a [DropdownMenuItemSpec] and pass it to +/// the [DropdownMenuItemSpec] constructor. +class DropdownMenuItemSpecAttribute extends SpecAttribute + with Diagnosticable { + final IconSpecAttribute? icon; + final TextSpecAttribute? text; + final FlexBoxSpecAttribute? container; + + const DropdownMenuItemSpecAttribute({ + this.icon, + this.text, + this.container, + super.modifiers, + super.animated, + }); + + /// Resolves to [DropdownMenuItemSpec] using the provided [MixData]. + /// + /// If a property is null in the [MixData], it falls back to the + /// default value defined in the `defaultValue` for that property. + /// + /// ```dart + /// final dropdownMenuItemSpec = DropdownMenuItemSpecAttribute(...).resolve(mix); + /// ``` + @override + DropdownMenuItemSpec resolve(MixData mix) { + return DropdownMenuItemSpec( + icon: icon?.resolve(mix), + text: text?.resolve(mix), + container: container?.resolve(mix), + modifiers: modifiers?.resolve(mix), + animated: animated?.resolve(mix) ?? mix.animation, + ); + } + + /// Merges the properties of this [DropdownMenuItemSpecAttribute] with the properties of [other]. + /// + /// If [other] is null, returns this instance unchanged. Otherwise, returns a new + /// [DropdownMenuItemSpecAttribute] with the properties of [other] taking precedence over + /// the corresponding properties of this instance. + /// + /// Properties from [other] that are null will fall back + /// to the values from this instance. + @override + DropdownMenuItemSpecAttribute merge( + covariant DropdownMenuItemSpecAttribute? other) { + if (other == null) return this; + + return DropdownMenuItemSpecAttribute( + icon: icon?.merge(other.icon) ?? other.icon, + text: text?.merge(other.text) ?? other.text, + container: container?.merge(other.container) ?? other.container, + modifiers: modifiers?.merge(other.modifiers) ?? other.modifiers, + animated: animated?.merge(other.animated) ?? other.animated, + ); + } + + /// The list of properties that constitute the state of this [DropdownMenuItemSpecAttribute]. + /// + /// This property is used by the [==] operator and the [hashCode] getter to + /// compare two [DropdownMenuItemSpecAttribute] instances for equality. + @override + List get props => [ + icon, + text, + container, + modifiers, + animated, + ]; + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties.add(DiagnosticsProperty('icon', icon, defaultValue: null)); + properties.add(DiagnosticsProperty('text', text, defaultValue: null)); + properties + .add(DiagnosticsProperty('container', container, defaultValue: null)); + properties + .add(DiagnosticsProperty('modifiers', modifiers, defaultValue: null)); + properties + .add(DiagnosticsProperty('animated', animated, defaultValue: null)); + } +} + +/// Utility class for configuring [DropdownMenuItemSpec] properties. +/// +/// This class provides methods to set individual properties of a [DropdownMenuItemSpec]. +/// Use the methods of this class to configure specific properties of a [DropdownMenuItemSpec]. +class DropdownMenuItemSpecUtility + extends SpecUtility { + /// Utility for defining [DropdownMenuItemSpecAttribute.icon] + late final icon = IconSpecUtility((v) => only(icon: v)); + + /// Utility for defining [DropdownMenuItemSpecAttribute.text] + late final text = TextSpecUtility((v) => only(text: v)); + + /// Utility for defining [DropdownMenuItemSpecAttribute.container] + late final container = FlexBoxSpecUtility((v) => only(container: v)); + + /// Utility for defining [DropdownMenuItemSpecAttribute.modifiers] + late final wrap = SpecModifierUtility((v) => only(modifiers: v)); + + /// Utility for defining [DropdownMenuItemSpecAttribute.animated] + late final animated = AnimatedUtility((v) => only(animated: v)); + + DropdownMenuItemSpecUtility(super.builder, {super.mutable}); + + DropdownMenuItemSpecUtility get chain => + DropdownMenuItemSpecUtility(attributeBuilder, mutable: true); + + static DropdownMenuItemSpecUtility get self => + DropdownMenuItemSpecUtility((v) => v); + + /// Returns a new [DropdownMenuItemSpecAttribute] with the specified properties. + @override + T only({ + IconSpecAttribute? icon, + TextSpecAttribute? text, + FlexBoxSpecAttribute? container, + WidgetModifiersDataDto? modifiers, + AnimatedDataDto? animated, + }) { + return builder(DropdownMenuItemSpecAttribute( + icon: icon, + text: text, + container: container, + modifiers: modifiers, + animated: animated, + )); + } +} + +/// A tween that interpolates between two [DropdownMenuItemSpec] instances. +/// +/// This class can be used in animations to smoothly transition between +/// different [DropdownMenuItemSpec] specifications. +class DropdownMenuItemSpecTween extends Tween { + DropdownMenuItemSpecTween({ + super.begin, + super.end, + }); + + @override + DropdownMenuItemSpec lerp(double t) { + if (begin == null && end == null) { + return const DropdownMenuItemSpec(); + } + + if (begin == null) { + return end!; + } + + return begin!.lerp(end!, t); + } +} diff --git a/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_style.dart b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_style.dart new file mode 100644 index 000000000..8cf6b42ff --- /dev/null +++ b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_style.dart @@ -0,0 +1,81 @@ +part of 'dropdown_menu.dart'; + +class DropdownMenuStyle extends SpecStyle { + static const itemLabel = Variant('item.label'); + + const DropdownMenuStyle(); + + @override + Style makeStyle(SpecConfiguration spec) { + final $ = spec.utilities; + + final menuStyle = [ + $.menu.container.chain + ..borderRadius(6) + ..shadow.color.black.withOpacity(0.07) + ..shadow.blurRadius(5) + ..color.white() + ..border.color.black12() + ..padding.all(4) + ..box.wrap.intrinsicWidth() + ..box.wrap.transform.scale(0.95) + ..box.wrap.opacity(0) + ..box.wrap.padding.top(0) + ..flex.mainAxisSize.min() + ..flex.crossAxisAlignment.start(), + $.menu.autoWidth.off(), + spec.on.selected( + $.menu.container.chain + ..box.wrap.transform.scale(1) + ..box.wrap.opacity(1) + ..box.wrap.padding.top(4), + ), + ]; + + final itemStyle = [ + $.item.container.chain + ..borderRadius(6) + ..padding.vertical(8) + ..padding.horizontal(6) + ..width.infinity() + ..flex.gap(6), + $.item.text.chain + ..style.color.black() + ..style.fontSize(14), + $.item.icon.size(20), + spec.on.hover($.item.container.color.black12()), + itemLabel( + $.item.container.borderRadius.all(0), + $.item.text.style.bold(), + spec.on.hover($.item.container.color.transparent()), + ), + ]; + + return Style.create([...menuStyle, ...itemStyle]).animate( + duration: const Duration(milliseconds: 100), + curve: Curves.linear, + ); + } +} + +class DropdownMenuDarkStyle extends DropdownMenuStyle { + const DropdownMenuDarkStyle(); + + @override + Style makeStyle(SpecConfiguration spec) { + final $ = spec.utilities; + + final menuStyle = $.menu.container.chain + ..color.black() + ..border.all.color.white12(); + + final itemStyle = $.item.text.style.color.white(); + + return Style.create([ + super.makeStyle(spec).call(), + menuStyle, + itemStyle, + spec.on.hover($.item.container.color.white12()), + ]); + } +} diff --git a/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_widget.dart b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_widget.dart new file mode 100644 index 000000000..016913c1e --- /dev/null +++ b/packages/remix/lib/src/components/dropdown_menu/dropdown_menu_widget.dart @@ -0,0 +1,117 @@ +part of 'dropdown_menu.dart'; + +class DropdownMenu extends StatefulWidget { + const DropdownMenu({ + super.key, + this.variants = const [], + this.style, + required this.trigger, + required this.items, + this.offset = const Offset(0, 4), + this.targetAnchor = Alignment.bottomCenter, + this.followerAnchor = Alignment.topCenter, + required this.open, + this.onPressOutside, + }); + + /// {@macro remix.component.style} + final DropdownMenuStyle? style; + + /// {@macro remix.component.variants} + final List variants; + + /// The trigger widget that opens the dropdown menu. + /// It is a builder that returns a widget and a callback to open the menu + final Widget trigger; + + /// The list of items to display in the dropdown menu. + /// Each item contains a value and widget to display. + final List items; + + /// The offset of the dropdown menu relative to the trigger widget. + final Offset offset; + + /// The anchor point on the trigger widget that the dropdown menu should be aligned to. + final Alignment targetAnchor; + + /// The anchor point on the dropdown menu that the trigger widget should be aligned to. + final Alignment followerAnchor; + + final bool open; + + final VoidCallback? onPressOutside; + + @override + State createState() => DropdownMenuState(); +} + +class DropdownMenuState extends State { + late final MixWidgetStateController _menuStateController; + + final _link = LayerLink(); + + @override + void initState() { + super.initState(); + + _menuStateController = MixWidgetStateController()..selected = widget.open; + } + + @override + void didUpdateWidget(DropdownMenu oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.open != oldWidget.open) { + _menuStateController.selected = widget.open; + } + } + + @override + void dispose() { + _menuStateController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final dropdownMenuStyle = + widget.style ?? context.remix.components.dropdownMenu; + final configuration = + SpecConfiguration(context, DropdownMenuSpecUtility.self); + final appliedStyle = dropdownMenuStyle + .makeStyle(configuration) + .applyVariants(widget.variants); + + final animatedStyle = appliedStyle.cast(); + + return OverlayWrapper( + target: RepaintBoundary(child: widget.trigger), + overlayChild: SpecBuilder( + controller: _menuStateController, + style: appliedStyle, + builder: (context) { + final menu = DropdownMenuSpec.of(context).menu; + + final FlexContainer = menu.container.copyWith( + box: menu.container.box.copyWith( + width: menu.autoWidth ? _link.leaderSize!.width : null, + ), + ); + + return FlexContainer( + direction: Axis.vertical, + children: List.generate(widget.items.length, (index) { + final item = widget.items[index]; + + return item; + }), + ); + }, + ), + onTapOutside: widget.onPressOutside, + showOverlay: widget.open, + animationDuration: animatedStyle?.animated.duration ?? Duration.zero, + link: _link, + ); + } +} diff --git a/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu.dart b/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu.dart new file mode 100644 index 000000000..17275791d --- /dev/null +++ b/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu.dart @@ -0,0 +1,29 @@ +part of '../dropdown_menu.dart'; + +@MixableSpec() +class DropdownMenuItemSpec extends Spec + with _$DropdownMenuItemSpec, Diagnosticable { + final IconSpec icon; + final TextSpec text; + final FlexBoxSpec container; + + static const of = _$DropdownMenuItemSpec.of; + + static const from = _$DropdownMenuItemSpec.from; + + const DropdownMenuItemSpec({ + IconSpec? icon, + TextSpec? text, + FlexBoxSpec? container, + super.modifiers, + super.animated, + }) : icon = icon ?? const IconSpec(), + text = text ?? const TextSpec(), + container = container ?? const FlexBoxSpec(); + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + _debugFillProperties(properties); + } +} diff --git a/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu_widget.dart b/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu_widget.dart new file mode 100644 index 000000000..1cd897e34 --- /dev/null +++ b/packages/remix/lib/src/components/dropdown_menu/item/dropdown_menu_widget.dart @@ -0,0 +1,81 @@ +part of '../dropdown_menu.dart'; + +/// A widget that represents an individual item in a [Select] dropdown menu. +/// +/// This widget is used internally by the [Select] widget to render each [SelectMenuItem] +/// in its dropdown. It applies styling and layout defined in the [SelectStyle]. +/// +/// Example usage within [Select]: +/// ```dart +/// Select( +/// value: selectedValue, +/// onChanged: (value) => setState(() => selectedValue = value), +/// items: [ +/// SelectMenuItem( +/// value: 'profile', +/// child: SelectMenuItemWidget( +/// icon: Icons.person, +/// text: 'Profile', +/// ), +/// ), +/// ], +/// ) +/// ``` + +class DropdownMenuItem extends StatelessWidget { + const DropdownMenuItem({ + super.key, + this.icon, + required this.text, + this.onPress, + this.variants = const [], + }); + + /// The optional icon data to display before the text. + final IconData? icon; + + /// The text label to display for this menu item. + final String text; + + /// The callback that is called when the item is pressed. + final VoidCallback? onPress; + + final List variants; + + Style _inheritStyleFromDropdownMenu(BuildContext context) { + final dropdownMenu = context.findAncestorWidgetOfExactType(); + + if (dropdownMenu == null) { + throw Exception('DropdownMenuItem must be a child of a DropdownMenu'); + } + + final style = dropdownMenu.style ?? context.remix.components.dropdownMenu; + final configuration = + SpecConfiguration(context, DropdownMenuSpecUtility.self); + + return style.makeStyle(configuration).applyVariants(dropdownMenu.variants); + } + + @override + Widget build(BuildContext context) { + final style = _inheritStyleFromDropdownMenu(context); + + return Pressable( + onPress: onPress, + child: SpecBuilder( + style: style.applyVariants(variants), + builder: (context) { + final item = DropdownMenuSpec.of(context).item; + final container = item.container; + final iconWidget = item.icon; + final textWidget = item.text; + + return container( + direction: Axis.horizontal, + children: [if (icon != null) iconWidget(icon), textWidget(text)], + ); + }, + ), + ); + } +} diff --git a/packages/remix/lib/src/components/select/button/select_button_widget.dart b/packages/remix/lib/src/components/select/button/select_button_widget.dart deleted file mode 100644 index 4e617a4fc..000000000 --- a/packages/remix/lib/src/components/select/button/select_button_widget.dart +++ /dev/null @@ -1,33 +0,0 @@ -part of '../select.dart'; - -class SelectButtonSpecWidget extends StatelessWidget { - const SelectButtonSpecWidget({ - super.key, - required this.spec, - required this.text, - required this.trailingIcon, - }); - - final SelectButtonSpec spec; - final String text; - final IconData trailingIcon; - - @override - Widget build(BuildContext context) { - return SpecBuilder( - inherit: true, - builder: (context) { - final button = SelectSpec.of(context).button; - - final container = button.container; - final label = button.label; - final icon = button.icon; - - return container( - direction: Axis.horizontal, - children: [label(text), icon(trailingIcon)], - ); - }, - ); - } -} diff --git a/packages/remix/lib/src/components/select/item/select_menu_widget.dart b/packages/remix/lib/src/components/select/item/select_menu_widget.dart index c839a3387..6f6990913 100644 --- a/packages/remix/lib/src/components/select/item/select_menu_widget.dart +++ b/packages/remix/lib/src/components/select/item/select_menu_widget.dart @@ -36,20 +36,15 @@ class SelectMenuItemWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return SpecBuilder( - inherit: true, - builder: (context) { - final item = SelectSpec.of(context).item; + final item = SelectSpec.of(context).item; - final container = item.container; - final icon = item.icon; - final text = item.text; + final container = item.container; + final icon = item.icon; + final text = item.text; - return container( - direction: Axis.horizontal, - children: [if (iconData != null) icon(iconData), text(this.text)], - ); - }, + return container( + direction: Axis.horizontal, + children: [if (iconData != null) icon(iconData), text(this.text)], ); } } diff --git a/packages/remix/lib/src/components/select/select.dart b/packages/remix/lib/src/components/select/select.dart index 57405ec67..ce8c18c11 100644 --- a/packages/remix/lib/src/components/select/select.dart +++ b/packages/remix/lib/src/components/select/select.dart @@ -4,23 +4,22 @@ import 'package:mix/mix.dart'; import 'package:mix_annotations/mix_annotations.dart'; import '../../core/theme/remix_theme.dart'; -import '../../helpers/component_builder.dart'; +import '../../helpers/object_ext.dart'; +import '../../helpers/overlay.dart'; import '../../helpers/spec/composited_transform_follower_spec.dart'; -part 'button/select_button.dart'; -part 'button/select_button_widget.dart'; part 'item/select_menu.dart'; part 'item/select_menu_widget.dart'; part 'select.g.dart'; part 'select_style.dart'; part 'select_widget.dart'; - -final $select = SelectSpecUtility.self; +part 'trigger/select_trigger.dart'; +part 'trigger/select_trigger_widget.dart'; @MixableSpec() class SelectSpec extends Spec with _$SelectSpec, Diagnosticable { - @MixableProperty(dto: MixableFieldDto(type: 'SelectButtonSpecAttribute')) - final SelectButtonSpec button; + @MixableProperty(dto: MixableFieldDto(type: 'SelectTriggerSpecAttribute')) + final SelectTriggerSpec button; @MixableProperty(dto: MixableFieldDto(type: 'SelectMenuSpecAttribute')) final SelectMenuSpec menu; @@ -39,13 +38,13 @@ class SelectSpec extends Spec with _$SelectSpec, Diagnosticable { static const from = _$SelectSpec.from; const SelectSpec({ - SelectButtonSpec? button, + SelectTriggerSpec? button, SelectMenuSpec? menu, SelectMenuItemSpec? item, CompositedTransformFollowerSpec? position, super.modifiers, super.animated, - }) : button = button ?? const SelectButtonSpec(), + }) : button = button ?? const SelectTriggerSpec(), item = item ?? const SelectMenuItemSpec(), menu = menu ?? const SelectMenuSpec(), position = position ?? const CompositedTransformFollowerSpec(); diff --git a/packages/remix/lib/src/components/select/select.g.dart b/packages/remix/lib/src/components/select/select.g.dart index ebfb688ce..886584c74 100644 --- a/packages/remix/lib/src/components/select/select.g.dart +++ b/packages/remix/lib/src/components/select/select.g.dart @@ -33,7 +33,7 @@ mixin _$SelectSpec on Spec { /// replaced with the new values. @override SelectSpec copyWith({ - SelectButtonSpec? button, + SelectTriggerSpec? button, SelectMenuSpec? menu, SelectMenuItemSpec? item, CompositedTransformFollowerSpec? position, @@ -123,7 +123,7 @@ mixin _$SelectSpec on Spec { /// the [SelectSpec] constructor. class SelectSpecAttribute extends SpecAttribute with Diagnosticable { - final SelectButtonSpecAttribute? button; + final SelectTriggerSpecAttribute? button; final SelectMenuSpecAttribute? menu; final SelectMenuItemSpecAttribute? item; final CompositedTransformFollowerSpecAttribute? position; @@ -215,7 +215,7 @@ class SelectSpecAttribute extends SpecAttribute class SelectSpecUtility extends SpecUtility { /// Utility for defining [SelectSpecAttribute.button] - late final button = SelectButtonSpecUtility((v) => only(button: v)); + late final button = SelectTriggerSpecUtility((v) => only(button: v)); /// Utility for defining [SelectSpecAttribute.menu] late final menu = SelectMenuSpecUtility((v) => only(menu: v)); @@ -244,7 +244,7 @@ class SelectSpecUtility /// Returns a new [SelectSpecAttribute] with the specified properties. @override T only({ - SelectButtonSpecAttribute? button, + SelectTriggerSpecAttribute? button, SelectMenuSpecAttribute? menu, SelectMenuItemSpecAttribute? item, CompositedTransformFollowerSpecAttribute? position, @@ -533,104 +533,104 @@ class SelectMenuSpecTween extends Tween { } } -mixin _$SelectButtonSpec on Spec { - static SelectButtonSpec from(MixData mix) { - return mix.attributeOf()?.resolve(mix) ?? - const SelectButtonSpec(); +mixin _$SelectMenuItemSpec on Spec { + static SelectMenuItemSpec from(MixData mix) { + return mix.attributeOf()?.resolve(mix) ?? + const SelectMenuItemSpec(); } - /// {@template select_button_spec_of} - /// Retrieves the [SelectButtonSpec] from the nearest [Mix] ancestor in the widget tree. + /// {@template select_menu_item_spec_of} + /// Retrieves the [SelectMenuItemSpec] from the nearest [Mix] ancestor in the widget tree. /// /// This method uses [Mix.of] to obtain the [Mix] instance associated with the - /// given [BuildContext], and then retrieves the [SelectButtonSpec] from that [Mix]. - /// If no ancestor [Mix] is found, this method returns an empty [SelectButtonSpec]. + /// given [BuildContext], and then retrieves the [SelectMenuItemSpec] from that [Mix]. + /// If no ancestor [Mix] is found, this method returns an empty [SelectMenuItemSpec]. /// /// Example: /// /// ```dart - /// final selectButtonSpec = SelectButtonSpec.of(context); + /// final selectMenuItemSpec = SelectMenuItemSpec.of(context); /// ``` /// {@endtemplate} - static SelectButtonSpec of(BuildContext context) { - return _$SelectButtonSpec.from(Mix.of(context)); + static SelectMenuItemSpec of(BuildContext context) { + return _$SelectMenuItemSpec.from(Mix.of(context)); } - /// Creates a copy of this [SelectButtonSpec] but with the given fields + /// Creates a copy of this [SelectMenuItemSpec] but with the given fields /// replaced with the new values. @override - SelectButtonSpec copyWith({ - FlexBoxSpec? container, + SelectMenuItemSpec copyWith({ IconSpec? icon, - TextSpec? label, + TextSpec? text, + FlexBoxSpec? container, WidgetModifiersData? modifiers, AnimatedData? animated, }) { - return SelectButtonSpec( - container: container ?? _$this.container, + return SelectMenuItemSpec( icon: icon ?? _$this.icon, - label: label ?? _$this.label, + text: text ?? _$this.text, + container: container ?? _$this.container, modifiers: modifiers ?? _$this.modifiers, animated: animated ?? _$this.animated, ); } - /// Linearly interpolates between this [SelectButtonSpec] and another [SelectButtonSpec] based on the given parameter [t]. + /// Linearly interpolates between this [SelectMenuItemSpec] and another [SelectMenuItemSpec] based on the given parameter [t]. /// /// The parameter [t] represents the interpolation factor, typically ranging from 0.0 to 1.0. - /// When [t] is 0.0, the current [SelectButtonSpec] is returned. When [t] is 1.0, the [other] [SelectButtonSpec] is returned. - /// For values of [t] between 0.0 and 1.0, an interpolated [SelectButtonSpec] is returned. + /// When [t] is 0.0, the current [SelectMenuItemSpec] is returned. When [t] is 1.0, the [other] [SelectMenuItemSpec] is returned. + /// For values of [t] between 0.0 and 1.0, an interpolated [SelectMenuItemSpec] is returned. /// - /// If [other] is null, this method returns the current [SelectButtonSpec] instance. + /// If [other] is null, this method returns the current [SelectMenuItemSpec] instance. /// - /// The interpolation is performed on each property of the [SelectButtonSpec] using the appropriate + /// The interpolation is performed on each property of the [SelectMenuItemSpec] using the appropriate /// interpolation method: /// - /// - [FlexBoxSpec.lerp] for [container]. /// - [IconSpec.lerp] for [icon]. - /// - [TextSpec.lerp] for [label]. + /// - [TextSpec.lerp] for [text]. + /// - [FlexBoxSpec.lerp] for [container]. /// For [modifiers] and [animated], the interpolation is performed using a step function. - /// If [t] is less than 0.5, the value from the current [SelectButtonSpec] is used. Otherwise, the value - /// from the [other] [SelectButtonSpec] is used. + /// If [t] is less than 0.5, the value from the current [SelectMenuItemSpec] is used. Otherwise, the value + /// from the [other] [SelectMenuItemSpec] is used. /// /// This method is typically used in animations to smoothly transition between - /// different [SelectButtonSpec] configurations. + /// different [SelectMenuItemSpec] configurations. @override - SelectButtonSpec lerp(SelectButtonSpec? other, double t) { + SelectMenuItemSpec lerp(SelectMenuItemSpec? other, double t) { if (other == null) return _$this; - return SelectButtonSpec( - container: _$this.container.lerp(other.container, t), + return SelectMenuItemSpec( icon: _$this.icon.lerp(other.icon, t), - label: _$this.label.lerp(other.label, t), + text: _$this.text.lerp(other.text, t), + container: _$this.container.lerp(other.container, t), modifiers: other.modifiers, animated: t < 0.5 ? _$this.animated : other.animated, ); } - /// The list of properties that constitute the state of this [SelectButtonSpec]. + /// The list of properties that constitute the state of this [SelectMenuItemSpec]. /// /// This property is used by the [==] operator and the [hashCode] getter to - /// compare two [SelectButtonSpec] instances for equality. + /// compare two [SelectMenuItemSpec] instances for equality. @override List get props => [ - _$this.container, _$this.icon, - _$this.label, + _$this.text, + _$this.container, _$this.modifiers, _$this.animated, ]; - SelectButtonSpec get _$this => this as SelectButtonSpec; + SelectMenuItemSpec get _$this => this as SelectMenuItemSpec; void _debugFillProperties(DiagnosticPropertiesBuilder properties) { - properties.add( - DiagnosticsProperty('container', _$this.container, defaultValue: null)); properties .add(DiagnosticsProperty('icon', _$this.icon, defaultValue: null)); properties - .add(DiagnosticsProperty('label', _$this.label, defaultValue: null)); + .add(DiagnosticsProperty('text', _$this.text, defaultValue: null)); + properties.add( + DiagnosticsProperty('container', _$this.container, defaultValue: null)); properties.add( DiagnosticsProperty('modifiers', _$this.modifiers, defaultValue: null)); properties.add( @@ -638,76 +638,77 @@ mixin _$SelectButtonSpec on Spec { } } -/// Represents the attributes of a [SelectButtonSpec]. +/// Represents the attributes of a [SelectMenuItemSpec]. /// /// This class encapsulates properties defining the layout and -/// appearance of a [SelectButtonSpec]. +/// appearance of a [SelectMenuItemSpec]. /// -/// Use this class to configure the attributes of a [SelectButtonSpec] and pass it to -/// the [SelectButtonSpec] constructor. -class SelectButtonSpecAttribute extends SpecAttribute +/// Use this class to configure the attributes of a [SelectMenuItemSpec] and pass it to +/// the [SelectMenuItemSpec] constructor. +base class SelectMenuItemSpecAttribute extends SpecAttribute with Diagnosticable { - final FlexBoxSpecAttribute? container; final IconSpecAttribute? icon; - final TextSpecAttribute? label; + final TextSpecAttribute? text; + final FlexBoxSpecAttribute? container; - const SelectButtonSpecAttribute({ - this.container, + const SelectMenuItemSpecAttribute({ this.icon, - this.label, + this.text, + this.container, super.modifiers, super.animated, }); - /// Resolves to [SelectButtonSpec] using the provided [MixData]. + /// Resolves to [SelectMenuItemSpec] using the provided [MixData]. /// /// If a property is null in the [MixData], it falls back to the /// default value defined in the `defaultValue` for that property. /// /// ```dart - /// final selectButtonSpec = SelectButtonSpecAttribute(...).resolve(mix); + /// final selectMenuItemSpec = SelectMenuItemSpecAttribute(...).resolve(mix); /// ``` @override - SelectButtonSpec resolve(MixData mix) { - return SelectButtonSpec( - container: container?.resolve(mix), + SelectMenuItemSpec resolve(MixData mix) { + return SelectMenuItemSpec( icon: icon?.resolve(mix), - label: label?.resolve(mix), + text: text?.resolve(mix), + container: container?.resolve(mix), modifiers: modifiers?.resolve(mix), animated: animated?.resolve(mix) ?? mix.animation, ); } - /// Merges the properties of this [SelectButtonSpecAttribute] with the properties of [other]. + /// Merges the properties of this [SelectMenuItemSpecAttribute] with the properties of [other]. /// /// If [other] is null, returns this instance unchanged. Otherwise, returns a new - /// [SelectButtonSpecAttribute] with the properties of [other] taking precedence over + /// [SelectMenuItemSpecAttribute] with the properties of [other] taking precedence over /// the corresponding properties of this instance. /// /// Properties from [other] that are null will fall back /// to the values from this instance. @override - SelectButtonSpecAttribute merge(covariant SelectButtonSpecAttribute? other) { + SelectMenuItemSpecAttribute merge( + covariant SelectMenuItemSpecAttribute? other) { if (other == null) return this; - return SelectButtonSpecAttribute( - container: container?.merge(other.container) ?? other.container, + return SelectMenuItemSpecAttribute( icon: icon?.merge(other.icon) ?? other.icon, - label: label?.merge(other.label) ?? other.label, + text: text?.merge(other.text) ?? other.text, + container: container?.merge(other.container) ?? other.container, modifiers: modifiers?.merge(other.modifiers) ?? other.modifiers, animated: animated?.merge(other.animated) ?? other.animated, ); } - /// The list of properties that constitute the state of this [SelectButtonSpecAttribute]. + /// The list of properties that constitute the state of this [SelectMenuItemSpecAttribute]. /// /// This property is used by the [==] operator and the [hashCode] getter to - /// compare two [SelectButtonSpecAttribute] instances for equality. + /// compare two [SelectMenuItemSpecAttribute] instances for equality. @override List get props => [ - container, icon, - label, + text, + container, modifiers, animated, ]; @@ -715,10 +716,10 @@ class SelectButtonSpecAttribute extends SpecAttribute @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); + properties.add(DiagnosticsProperty('icon', icon, defaultValue: null)); + properties.add(DiagnosticsProperty('text', text, defaultValue: null)); properties .add(DiagnosticsProperty('container', container, defaultValue: null)); - properties.add(DiagnosticsProperty('icon', icon, defaultValue: null)); - properties.add(DiagnosticsProperty('label', label, defaultValue: null)); properties .add(DiagnosticsProperty('modifiers', modifiers, defaultValue: null)); properties @@ -726,68 +727,68 @@ class SelectButtonSpecAttribute extends SpecAttribute } } -/// Utility class for configuring [SelectButtonSpec] properties. +/// Utility class for configuring [SelectMenuItemSpec] properties. /// -/// This class provides methods to set individual properties of a [SelectButtonSpec]. -/// Use the methods of this class to configure specific properties of a [SelectButtonSpec]. -class SelectButtonSpecUtility - extends SpecUtility { - /// Utility for defining [SelectButtonSpecAttribute.container] - late final container = FlexBoxSpecUtility((v) => only(container: v)); - - /// Utility for defining [SelectButtonSpecAttribute.icon] +/// This class provides methods to set individual properties of a [SelectMenuItemSpec]. +/// Use the methods of this class to configure specific properties of a [SelectMenuItemSpec]. +class SelectMenuItemSpecUtility + extends SpecUtility { + /// Utility for defining [SelectMenuItemSpecAttribute.icon] late final icon = IconSpecUtility((v) => only(icon: v)); - /// Utility for defining [SelectButtonSpecAttribute.label] - late final label = TextSpecUtility((v) => only(label: v)); + /// Utility for defining [SelectMenuItemSpecAttribute.text] + late final text = TextSpecUtility((v) => only(text: v)); + + /// Utility for defining [SelectMenuItemSpecAttribute.container] + late final container = FlexBoxSpecUtility((v) => only(container: v)); - /// Utility for defining [SelectButtonSpecAttribute.modifiers] + /// Utility for defining [SelectMenuItemSpecAttribute.modifiers] late final wrap = SpecModifierUtility((v) => only(modifiers: v)); - /// Utility for defining [SelectButtonSpecAttribute.animated] + /// Utility for defining [SelectMenuItemSpecAttribute.animated] late final animated = AnimatedUtility((v) => only(animated: v)); - SelectButtonSpecUtility(super.builder, {super.mutable}); + SelectMenuItemSpecUtility(super.builder, {super.mutable}); - SelectButtonSpecUtility get chain => - SelectButtonSpecUtility(attributeBuilder, mutable: true); + SelectMenuItemSpecUtility get chain => + SelectMenuItemSpecUtility(attributeBuilder, mutable: true); - static SelectButtonSpecUtility get self => - SelectButtonSpecUtility((v) => v); + static SelectMenuItemSpecUtility get self => + SelectMenuItemSpecUtility((v) => v); - /// Returns a new [SelectButtonSpecAttribute] with the specified properties. + /// Returns a new [SelectMenuItemSpecAttribute] with the specified properties. @override T only({ - FlexBoxSpecAttribute? container, IconSpecAttribute? icon, - TextSpecAttribute? label, + TextSpecAttribute? text, + FlexBoxSpecAttribute? container, WidgetModifiersDataDto? modifiers, AnimatedDataDto? animated, }) { - return builder(SelectButtonSpecAttribute( - container: container, + return builder(SelectMenuItemSpecAttribute( icon: icon, - label: label, + text: text, + container: container, modifiers: modifiers, animated: animated, )); } } -/// A tween that interpolates between two [SelectButtonSpec] instances. +/// A tween that interpolates between two [SelectMenuItemSpec] instances. /// /// This class can be used in animations to smoothly transition between -/// different [SelectButtonSpec] specifications. -class SelectButtonSpecTween extends Tween { - SelectButtonSpecTween({ +/// different [SelectMenuItemSpec] specifications. +class SelectMenuItemSpecTween extends Tween { + SelectMenuItemSpecTween({ super.begin, super.end, }); @override - SelectButtonSpec lerp(double t) { + SelectMenuItemSpec lerp(double t) { if (begin == null && end == null) { - return const SelectButtonSpec(); + return const SelectMenuItemSpec(); } if (begin == null) { @@ -798,104 +799,104 @@ class SelectButtonSpecTween extends Tween { } } -mixin _$SelectMenuItemSpec on Spec { - static SelectMenuItemSpec from(MixData mix) { - return mix.attributeOf()?.resolve(mix) ?? - const SelectMenuItemSpec(); +mixin _$SelectTriggerSpec on Spec { + static SelectTriggerSpec from(MixData mix) { + return mix.attributeOf()?.resolve(mix) ?? + const SelectTriggerSpec(); } - /// {@template select_menu_item_spec_of} - /// Retrieves the [SelectMenuItemSpec] from the nearest [Mix] ancestor in the widget tree. + /// {@template select_trigger_spec_of} + /// Retrieves the [SelectTriggerSpec] from the nearest [Mix] ancestor in the widget tree. /// /// This method uses [Mix.of] to obtain the [Mix] instance associated with the - /// given [BuildContext], and then retrieves the [SelectMenuItemSpec] from that [Mix]. - /// If no ancestor [Mix] is found, this method returns an empty [SelectMenuItemSpec]. + /// given [BuildContext], and then retrieves the [SelectTriggerSpec] from that [Mix]. + /// If no ancestor [Mix] is found, this method returns an empty [SelectTriggerSpec]. /// /// Example: /// /// ```dart - /// final selectMenuItemSpec = SelectMenuItemSpec.of(context); + /// final selectTriggerSpec = SelectTriggerSpec.of(context); /// ``` /// {@endtemplate} - static SelectMenuItemSpec of(BuildContext context) { - return _$SelectMenuItemSpec.from(Mix.of(context)); + static SelectTriggerSpec of(BuildContext context) { + return _$SelectTriggerSpec.from(Mix.of(context)); } - /// Creates a copy of this [SelectMenuItemSpec] but with the given fields + /// Creates a copy of this [SelectTriggerSpec] but with the given fields /// replaced with the new values. @override - SelectMenuItemSpec copyWith({ - IconSpec? icon, - TextSpec? text, + SelectTriggerSpec copyWith({ FlexBoxSpec? container, + IconSpec? icon, + TextSpec? label, WidgetModifiersData? modifiers, AnimatedData? animated, }) { - return SelectMenuItemSpec( - icon: icon ?? _$this.icon, - text: text ?? _$this.text, + return SelectTriggerSpec( container: container ?? _$this.container, + icon: icon ?? _$this.icon, + label: label ?? _$this.label, modifiers: modifiers ?? _$this.modifiers, animated: animated ?? _$this.animated, ); } - /// Linearly interpolates between this [SelectMenuItemSpec] and another [SelectMenuItemSpec] based on the given parameter [t]. + /// Linearly interpolates between this [SelectTriggerSpec] and another [SelectTriggerSpec] based on the given parameter [t]. /// /// The parameter [t] represents the interpolation factor, typically ranging from 0.0 to 1.0. - /// When [t] is 0.0, the current [SelectMenuItemSpec] is returned. When [t] is 1.0, the [other] [SelectMenuItemSpec] is returned. - /// For values of [t] between 0.0 and 1.0, an interpolated [SelectMenuItemSpec] is returned. + /// When [t] is 0.0, the current [SelectTriggerSpec] is returned. When [t] is 1.0, the [other] [SelectTriggerSpec] is returned. + /// For values of [t] between 0.0 and 1.0, an interpolated [SelectTriggerSpec] is returned. /// - /// If [other] is null, this method returns the current [SelectMenuItemSpec] instance. + /// If [other] is null, this method returns the current [SelectTriggerSpec] instance. /// - /// The interpolation is performed on each property of the [SelectMenuItemSpec] using the appropriate + /// The interpolation is performed on each property of the [SelectTriggerSpec] using the appropriate /// interpolation method: /// - /// - [IconSpec.lerp] for [icon]. - /// - [TextSpec.lerp] for [text]. /// - [FlexBoxSpec.lerp] for [container]. + /// - [IconSpec.lerp] for [icon]. + /// - [TextSpec.lerp] for [label]. /// For [modifiers] and [animated], the interpolation is performed using a step function. - /// If [t] is less than 0.5, the value from the current [SelectMenuItemSpec] is used. Otherwise, the value - /// from the [other] [SelectMenuItemSpec] is used. + /// If [t] is less than 0.5, the value from the current [SelectTriggerSpec] is used. Otherwise, the value + /// from the [other] [SelectTriggerSpec] is used. /// /// This method is typically used in animations to smoothly transition between - /// different [SelectMenuItemSpec] configurations. + /// different [SelectTriggerSpec] configurations. @override - SelectMenuItemSpec lerp(SelectMenuItemSpec? other, double t) { + SelectTriggerSpec lerp(SelectTriggerSpec? other, double t) { if (other == null) return _$this; - return SelectMenuItemSpec( - icon: _$this.icon.lerp(other.icon, t), - text: _$this.text.lerp(other.text, t), + return SelectTriggerSpec( container: _$this.container.lerp(other.container, t), + icon: _$this.icon.lerp(other.icon, t), + label: _$this.label.lerp(other.label, t), modifiers: other.modifiers, animated: t < 0.5 ? _$this.animated : other.animated, ); } - /// The list of properties that constitute the state of this [SelectMenuItemSpec]. + /// The list of properties that constitute the state of this [SelectTriggerSpec]. /// /// This property is used by the [==] operator and the [hashCode] getter to - /// compare two [SelectMenuItemSpec] instances for equality. + /// compare two [SelectTriggerSpec] instances for equality. @override List get props => [ - _$this.icon, - _$this.text, _$this.container, + _$this.icon, + _$this.label, _$this.modifiers, _$this.animated, ]; - SelectMenuItemSpec get _$this => this as SelectMenuItemSpec; + SelectTriggerSpec get _$this => this as SelectTriggerSpec; void _debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties.add( + DiagnosticsProperty('container', _$this.container, defaultValue: null)); properties .add(DiagnosticsProperty('icon', _$this.icon, defaultValue: null)); properties - .add(DiagnosticsProperty('text', _$this.text, defaultValue: null)); - properties.add( - DiagnosticsProperty('container', _$this.container, defaultValue: null)); + .add(DiagnosticsProperty('label', _$this.label, defaultValue: null)); properties.add( DiagnosticsProperty('modifiers', _$this.modifiers, defaultValue: null)); properties.add( @@ -903,77 +904,77 @@ mixin _$SelectMenuItemSpec on Spec { } } -/// Represents the attributes of a [SelectMenuItemSpec]. +/// Represents the attributes of a [SelectTriggerSpec]. /// /// This class encapsulates properties defining the layout and -/// appearance of a [SelectMenuItemSpec]. +/// appearance of a [SelectTriggerSpec]. /// -/// Use this class to configure the attributes of a [SelectMenuItemSpec] and pass it to -/// the [SelectMenuItemSpec] constructor. -base class SelectMenuItemSpecAttribute extends SpecAttribute +/// Use this class to configure the attributes of a [SelectTriggerSpec] and pass it to +/// the [SelectTriggerSpec] constructor. +class SelectTriggerSpecAttribute extends SpecAttribute with Diagnosticable { - final IconSpecAttribute? icon; - final TextSpecAttribute? text; final FlexBoxSpecAttribute? container; + final IconSpecAttribute? icon; + final TextSpecAttribute? label; - const SelectMenuItemSpecAttribute({ - this.icon, - this.text, + const SelectTriggerSpecAttribute({ this.container, + this.icon, + this.label, super.modifiers, super.animated, }); - /// Resolves to [SelectMenuItemSpec] using the provided [MixData]. + /// Resolves to [SelectTriggerSpec] using the provided [MixData]. /// /// If a property is null in the [MixData], it falls back to the /// default value defined in the `defaultValue` for that property. /// /// ```dart - /// final selectMenuItemSpec = SelectMenuItemSpecAttribute(...).resolve(mix); + /// final selectTriggerSpec = SelectTriggerSpecAttribute(...).resolve(mix); /// ``` @override - SelectMenuItemSpec resolve(MixData mix) { - return SelectMenuItemSpec( - icon: icon?.resolve(mix), - text: text?.resolve(mix), + SelectTriggerSpec resolve(MixData mix) { + return SelectTriggerSpec( container: container?.resolve(mix), + icon: icon?.resolve(mix), + label: label?.resolve(mix), modifiers: modifiers?.resolve(mix), animated: animated?.resolve(mix) ?? mix.animation, ); } - /// Merges the properties of this [SelectMenuItemSpecAttribute] with the properties of [other]. + /// Merges the properties of this [SelectTriggerSpecAttribute] with the properties of [other]. /// /// If [other] is null, returns this instance unchanged. Otherwise, returns a new - /// [SelectMenuItemSpecAttribute] with the properties of [other] taking precedence over + /// [SelectTriggerSpecAttribute] with the properties of [other] taking precedence over /// the corresponding properties of this instance. /// /// Properties from [other] that are null will fall back /// to the values from this instance. @override - SelectMenuItemSpecAttribute merge( - covariant SelectMenuItemSpecAttribute? other) { + SelectTriggerSpecAttribute merge( + covariant SelectTriggerSpecAttribute? other) { if (other == null) return this; - return SelectMenuItemSpecAttribute( - icon: icon?.merge(other.icon) ?? other.icon, - text: text?.merge(other.text) ?? other.text, + return SelectTriggerSpecAttribute( container: container?.merge(other.container) ?? other.container, + icon: icon?.merge(other.icon) ?? other.icon, + label: label?.merge(other.label) ?? other.label, modifiers: modifiers?.merge(other.modifiers) ?? other.modifiers, animated: animated?.merge(other.animated) ?? other.animated, ); } - /// The list of properties that constitute the state of this [SelectMenuItemSpecAttribute]. + /// The list of properties that constitute the state of this [SelectTriggerSpecAttribute]. /// /// This property is used by the [==] operator and the [hashCode] getter to - /// compare two [SelectMenuItemSpecAttribute] instances for equality. + /// compare two [SelectTriggerSpecAttribute] instances for equality. @override List get props => [ - icon, - text, container, + icon, + label, modifiers, animated, ]; @@ -981,10 +982,10 @@ base class SelectMenuItemSpecAttribute extends SpecAttribute @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); - properties.add(DiagnosticsProperty('icon', icon, defaultValue: null)); - properties.add(DiagnosticsProperty('text', text, defaultValue: null)); properties .add(DiagnosticsProperty('container', container, defaultValue: null)); + properties.add(DiagnosticsProperty('icon', icon, defaultValue: null)); + properties.add(DiagnosticsProperty('label', label, defaultValue: null)); properties .add(DiagnosticsProperty('modifiers', modifiers, defaultValue: null)); properties @@ -992,68 +993,68 @@ base class SelectMenuItemSpecAttribute extends SpecAttribute } } -/// Utility class for configuring [SelectMenuItemSpec] properties. +/// Utility class for configuring [SelectTriggerSpec] properties. /// -/// This class provides methods to set individual properties of a [SelectMenuItemSpec]. -/// Use the methods of this class to configure specific properties of a [SelectMenuItemSpec]. -class SelectMenuItemSpecUtility - extends SpecUtility { - /// Utility for defining [SelectMenuItemSpecAttribute.icon] - late final icon = IconSpecUtility((v) => only(icon: v)); +/// This class provides methods to set individual properties of a [SelectTriggerSpec]. +/// Use the methods of this class to configure specific properties of a [SelectTriggerSpec]. +class SelectTriggerSpecUtility + extends SpecUtility { + /// Utility for defining [SelectTriggerSpecAttribute.container] + late final container = FlexBoxSpecUtility((v) => only(container: v)); - /// Utility for defining [SelectMenuItemSpecAttribute.text] - late final text = TextSpecUtility((v) => only(text: v)); + /// Utility for defining [SelectTriggerSpecAttribute.icon] + late final icon = IconSpecUtility((v) => only(icon: v)); - /// Utility for defining [SelectMenuItemSpecAttribute.container] - late final container = FlexBoxSpecUtility((v) => only(container: v)); + /// Utility for defining [SelectTriggerSpecAttribute.label] + late final label = TextSpecUtility((v) => only(label: v)); - /// Utility for defining [SelectMenuItemSpecAttribute.modifiers] + /// Utility for defining [SelectTriggerSpecAttribute.modifiers] late final wrap = SpecModifierUtility((v) => only(modifiers: v)); - /// Utility for defining [SelectMenuItemSpecAttribute.animated] + /// Utility for defining [SelectTriggerSpecAttribute.animated] late final animated = AnimatedUtility((v) => only(animated: v)); - SelectMenuItemSpecUtility(super.builder, {super.mutable}); + SelectTriggerSpecUtility(super.builder, {super.mutable}); - SelectMenuItemSpecUtility get chain => - SelectMenuItemSpecUtility(attributeBuilder, mutable: true); + SelectTriggerSpecUtility get chain => + SelectTriggerSpecUtility(attributeBuilder, mutable: true); - static SelectMenuItemSpecUtility get self => - SelectMenuItemSpecUtility((v) => v); + static SelectTriggerSpecUtility get self => + SelectTriggerSpecUtility((v) => v); - /// Returns a new [SelectMenuItemSpecAttribute] with the specified properties. + /// Returns a new [SelectTriggerSpecAttribute] with the specified properties. @override T only({ - IconSpecAttribute? icon, - TextSpecAttribute? text, FlexBoxSpecAttribute? container, + IconSpecAttribute? icon, + TextSpecAttribute? label, WidgetModifiersDataDto? modifiers, AnimatedDataDto? animated, }) { - return builder(SelectMenuItemSpecAttribute( - icon: icon, - text: text, + return builder(SelectTriggerSpecAttribute( container: container, + icon: icon, + label: label, modifiers: modifiers, animated: animated, )); } } -/// A tween that interpolates between two [SelectMenuItemSpec] instances. +/// A tween that interpolates between two [SelectTriggerSpec] instances. /// /// This class can be used in animations to smoothly transition between -/// different [SelectMenuItemSpec] specifications. -class SelectMenuItemSpecTween extends Tween { - SelectMenuItemSpecTween({ +/// different [SelectTriggerSpec] specifications. +class SelectTriggerSpecTween extends Tween { + SelectTriggerSpecTween({ super.begin, super.end, }); @override - SelectMenuItemSpec lerp(double t) { + SelectTriggerSpec lerp(double t) { if (begin == null && end == null) { - return const SelectMenuItemSpec(); + return const SelectTriggerSpec(); } if (begin == null) { diff --git a/packages/remix/lib/src/components/select/select_style.dart b/packages/remix/lib/src/components/select/select_style.dart index 34658099d..67c283697 100644 --- a/packages/remix/lib/src/components/select/select_style.dart +++ b/packages/remix/lib/src/components/select/select_style.dart @@ -39,19 +39,19 @@ class SelectStyle extends SpecStyle { ..color.white() ..border.color.black12() ..padding.all(4) - ..wrap.intrinsicWidth() - ..wrap.transform.scale(0.95) - ..wrap.opacity(0) - ..wrap.padding.top(0) + ..box.wrap.intrinsicWidth() + ..box.wrap.transform.scale(0.95) + ..box.wrap.opacity(0) + ..box.wrap.padding.top(0) ..flex.mainAxisSize.min() ..flex.crossAxisAlignment.start(), $.menu.wrap.transform.scale(1.5), - $.menu.autoWidth.on(), + $.menu.autoWidth.off(), spec.on.selected( $.menu.container.chain - ..wrap.transform.scale(1) - ..wrap.opacity(1) - ..wrap.padding.top(4), + ..box.wrap.transform.scale(1) + ..box.wrap.opacity(1) + ..box.wrap.padding.top(4), ), ]; @@ -74,7 +74,10 @@ class SelectStyle extends SpecStyle { ...buttonStyle, ...menuStyle, ...positionStyle, - ]); + ]).animate( + duration: const Duration(milliseconds: 100), + curve: Curves.decelerate, + ); } } @@ -104,6 +107,9 @@ class SelectDarkStyle extends SelectStyle { itemStyle, spec.on.hover($.item.container.color.white12()), spec.on.disabled($.button.container.color.white10()), - ]); + ]).animate( + duration: const Duration(milliseconds: 100), + curve: Curves.decelerate, + ); } } diff --git a/packages/remix/lib/src/components/select/select_widget.dart b/packages/remix/lib/src/components/select/select_widget.dart index 119f57b8f..f8c20d739 100644 --- a/packages/remix/lib/src/components/select/select_widget.dart +++ b/packages/remix/lib/src/components/select/select_widget.dart @@ -12,11 +12,10 @@ class Select extends StatefulWidget { super.key, required this.value, required this.onChanged, - required this.button, + required this.trigger, required this.items, this.variants = const [], this.style, - this.disabled = false, }); /// The currently selected value in the select component. @@ -34,10 +33,7 @@ class Select extends StatefulWidget { /// Builder function that creates the button portion of the select component. /// When tapped, this button will display the dropdown menu. /// This allows customizing how the button is displayed. - final WidgetSpecBuilder button; - - /// {@macro remix.component.disabled} - final bool disabled; + final SelectTrigger trigger; /// The list of items to display in the dropdown menu. /// Each item contains a value and widget to display. @@ -47,16 +43,8 @@ class Select extends StatefulWidget { State