From e53ccfb5101db4ade824b76bff47f7ddc46d70ba Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 6 Mar 2026 14:11:13 -0300 Subject: [PATCH] feat: Adding very_good create app_ui command --- .../create/commands/app_ui_package.dart | 26 ++ .../commands/create/commands/commands.dart | 1 + lib/src/commands/create/create.dart | 9 + .../commands/create/templates/templates.dart | 1 + .../very_good_app_ui/very_good_app_ui.dart | 2 + .../very_good_app_ui_bundle.dart | 327 ++++++++++++++++++ .../very_good_app_ui_template.dart | 32 ++ .../create/commands/app_ui_package_test.dart | 210 +++++++++++ test/src/commands/create/create_test.dart | 1 + tool/generate_bundles.sh | 1 + 10 files changed, 610 insertions(+) create mode 100644 lib/src/commands/create/commands/app_ui_package.dart create mode 100644 lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui.dart create mode 100644 lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_bundle.dart create mode 100644 lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_template.dart create mode 100644 test/src/commands/create/commands/app_ui_package_test.dart diff --git a/lib/src/commands/create/commands/app_ui_package.dart b/lib/src/commands/create/commands/app_ui_package.dart new file mode 100644 index 000000000..37f0fe7b3 --- /dev/null +++ b/lib/src/commands/create/commands/app_ui_package.dart @@ -0,0 +1,26 @@ +import 'package:very_good_cli/src/commands/commands.dart'; +import 'package:very_good_cli/src/commands/create/templates/templates.dart'; + +/// {@template very_good_create_app_ui_package_command} +/// A [CreateSubCommand] for creating App UI packages. +/// {@endtemplate} +class CreateAppUiPackage extends CreateSubCommand with Publishable { + /// {@macro very_good_create_app_ui_package_command} + CreateAppUiPackage({ + required super.logger, + required super.generatorFromBundle, + required super.generatorFromBrick, + }); + + @override + String get name => 'app_ui_package'; + + @override + List get aliases => ['app_ui_pkg']; + + @override + String get description => 'Generate a Very Good App UI package.'; + + @override + Template get template => AppUiTemplate(); +} diff --git a/lib/src/commands/create/commands/commands.dart b/lib/src/commands/create/commands/commands.dart index 5d1eade2c..7bd216fbf 100644 --- a/lib/src/commands/create/commands/commands.dart +++ b/lib/src/commands/create/commands/commands.dart @@ -1,3 +1,4 @@ +export 'app_ui_package.dart'; export 'create_subcommand.dart'; export 'dart_cli.dart'; export 'dart_package.dart'; diff --git a/lib/src/commands/create/create.dart b/lib/src/commands/create/create.dart index 55f1a190a..394d63c29 100644 --- a/lib/src/commands/create/create.dart +++ b/lib/src/commands/create/create.dart @@ -16,6 +16,15 @@ class CreateCommand extends Command { @visibleForTesting MasonGeneratorFromBundle? generatorFromBundle, @visibleForTesting MasonGeneratorFromBrick? generatorFromBrick, }) { + // very_good create app_ui_package + addSubcommand( + CreateAppUiPackage( + logger: logger, + generatorFromBundle: generatorFromBundle, + generatorFromBrick: generatorFromBrick, + ), + ); + // very_good create flutter_app addSubcommand( CreateFlutterApp( diff --git a/lib/src/commands/create/templates/templates.dart b/lib/src/commands/create/templates/templates.dart index c2e6f5a23..9439b6a53 100644 --- a/lib/src/commands/create/templates/templates.dart +++ b/lib/src/commands/create/templates/templates.dart @@ -1,5 +1,6 @@ export 'post_generate_actions.dart'; export 'template.dart'; +export 'very_good_app_ui/very_good_app_ui.dart'; export 'very_good_core/very_good_core.dart'; export 'very_good_dart_cli/very_good_dart_cli.dart'; export 'very_good_dart_package/very_good_dart_package.dart'; diff --git a/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui.dart b/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui.dart new file mode 100644 index 000000000..9c00b5099 --- /dev/null +++ b/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui.dart @@ -0,0 +1,2 @@ +export 'very_good_app_ui_bundle.dart'; +export 'very_good_app_ui_template.dart'; diff --git a/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_bundle.dart b/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_bundle.dart new file mode 100644 index 000000000..187d9e148 --- /dev/null +++ b/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_bundle.dart @@ -0,0 +1,327 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, implicit_dynamic_list_literal, implicit_dynamic_map_literal, inference_failure_on_collection_literal + +import 'package:mason/mason.dart'; + +final veryGoodAppUiBundle = MasonBundle.fromJson({ + "files": [ + { + "path": ".github/cspell.json", + "data": + "ewogICJ2ZXJzaW9uIjogIjAuMiIsCiAgIiRzY2hlbWEiOiAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0cmVldHNpZGVzb2Z0d2FyZS9jc3BlbGwvbWFpbi9jc3BlbGwuc2NoZW1hLmpzb24iLAogICJkaWN0aW9uYXJpZXMiOiBbInZndl9hbGxvd2VkIiwgInZndl9mb3JiaWRkZW4iXSwKICAiZGljdGlvbmFyeURlZmluaXRpb25zIjogWwogICAgewogICAgICAibmFtZSI6ICJ2Z3ZfYWxsb3dlZCIsCiAgICAgICJwYXRoIjogImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS92ZXJ5Z29vZG9wZW5zb3VyY2UvdmVyeV9nb29kX2RpY3Rpb25hcmllcy9tYWluL2FsbG93ZWQudHh0IiwKICAgICAgImRlc2NyaXB0aW9uIjogIkFsbG93ZWQgVkdWIFNwZWxsaW5ncyIKICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogInZndl9mb3JiaWRkZW4iLAogICAgICAicGF0aCI6ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdmVyeWdvb2RvcGVuc291cmNlL3ZlcnlfZ29vZF9kaWN0aW9uYXJpZXMvbWFpbi9mb3JiaWRkZW4udHh0IiwKICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiBWR1YgU3BlbGxpbmdzIgogICAgfQogIF0sCiAgInVzZUdpdGlnbm9yZSI6IHRydWUsCiAgIndvcmRzIjogWwogICAgInt7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0iLAogICAgImxlcnAiLAogICAgInh4bGciLAogICAgIndpZGdldGJvb2siLAogICAgIldpZGdldGJvb2siCiAgXQp9Cg==", + "type": "text", + }, + { + "path": ".github/dependabot.yaml", + "data": + "dmVyc2lvbjogMgplbmFibGUtYmV0YS1lY29zeXN0ZW1zOiB0cnVlCnVwZGF0ZXM6CiAgLSBwYWNrYWdlLWVjb3N5c3RlbTogImdpdGh1Yi1hY3Rpb25zIgogICAgZGlyZWN0b3J5OiAiLyIKICAgIHNjaGVkdWxlOgogICAgICBpbnRlcnZhbDogImRhaWx5IgogIC0gcGFja2FnZS1lY29zeXN0ZW06ICJwdWIiCiAgICBkaXJlY3Rvcnk6ICIvIgogICAgc2NoZWR1bGU6CiAgICAgIGludGVydmFsOiAiZGFpbHkiCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/bug_report.md", + "data": + "LS0tCm5hbWU6IEJ1ZyBSZXBvcnQKYWJvdXQ6IENyZWF0ZSBhIHJlcG9ydCB0byBoZWxwIHVzIGltcHJvdmUKdGl0bGU6ICJmaXg6ICIKbGFiZWxzOiBidWcKLS0tCgoqKkRlc2NyaXB0aW9uKioKCkEgY2xlYXIgYW5kIGNvbmNpc2UgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgYnVnIGlzLgoKKipTdGVwcyBUbyBSZXByb2R1Y2UqKgoKMS4gR28gdG8gJy4uLicKMi4gQ2xpY2sgb24gJy4uLi4nCjMuIFNjcm9sbCBkb3duIHRvICcuLi4uJwo0LiBTZWUgZXJyb3IKCioqRXhwZWN0ZWQgQmVoYXZpb3IqKgoKQSBjbGVhciBhbmQgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHlvdSBleHBlY3RlZCB0byBoYXBwZW4uCgoqKlNjcmVlbnNob3RzKioKCklmIGFwcGxpY2FibGUsIGFkZCBzY3JlZW5zaG90cyB0byBoZWxwIGV4cGxhaW4geW91ciBwcm9ibGVtLgoKKipBZGRpdGlvbmFsIENvbnRleHQqKgoKQWRkIGFueSBvdGhlciBjb250ZXh0IGFib3V0IHRoZSBwcm9ibGVtIGhlcmUuCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/build.md", + "data": + "LS0tCm5hbWU6IEJ1aWxkIFN5c3RlbQphYm91dDogQ2hhbmdlcyB0aGF0IGFmZmVjdCB0aGUgYnVpbGQgc3lzdGVtIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcwp0aXRsZTogImJ1aWxkOiAiCmxhYmVsczogYnVpbGQKLS0tCgoqKkRlc2NyaXB0aW9uKioKCkRlc2NyaWJlIHdoYXQgY2hhbmdlcyBuZWVkIHRvIGJlIGRvbmUgdG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgd2h5LgoKKipSZXF1aXJlbWVudHMqKgoKLSBbIF0gVGhlIGJ1aWxkIHN5c3RlbSBpcyBwYXNzaW5nCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/chore.md", + "data": + "LS0tCm5hbWU6IENob3JlCmFib3V0OiBPdGhlciBjaGFuZ2VzIHRoYXQgZG9uJ3QgbW9kaWZ5IHNyYyBvciB0ZXN0IGZpbGVzCnRpdGxlOiAiY2hvcmU6ICIKbGFiZWxzOiBjaG9yZQotLS0KCioqRGVzY3JpcHRpb24qKgoKQ2xlYXJseSBkZXNjcmliZSB3aGF0IGNoYW5nZSBpcyBuZWVkZWQgYW5kIHdoeS4gSWYgdGhpcyBjaGFuZ2VzIGNvZGUgdGhlbiBwbGVhc2UgdXNlIGFub3RoZXIgaXNzdWUgdHlwZS4KCioqUmVxdWlyZW1lbnRzKioKCi0gWyBdIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29kZQo=", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/ci.md", + "data": + "LS0tCm5hbWU6IENvbnRpbnVvdXMgSW50ZWdyYXRpb24KYWJvdXQ6IENoYW5nZXMgdG8gdGhlIENJIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHNjcmlwdHMKdGl0bGU6ICJjaTogIgpsYWJlbHM6IGNpCi0tLQoKKipEZXNjcmlwdGlvbioqCgpEZXNjcmliZSB3aGF0IGNoYW5nZXMgbmVlZCB0byBiZSBkb25lIHRvIHRoZSBjaS9jZCBzeXN0ZW0gYW5kIHdoeS4KCioqUmVxdWlyZW1lbnRzKioKCi0gWyBdIFRoZSBjaSBzeXN0ZW0gaXMgcGFzc2luZwo=", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/config.yml", + "data": "YmxhbmtfaXNzdWVzX2VuYWJsZWQ6IGZhbHNlCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/documentation.md", + "data": + "LS0tCm5hbWU6IERvY3VtZW50YXRpb24KYWJvdXQ6IEltcHJvdmUgdGhlIGRvY3VtZW50YXRpb24gc28gYWxsIGNvbGxhYm9yYXRvcnMgaGF2ZSBhIGNvbW1vbiB1bmRlcnN0YW5kaW5nCnRpdGxlOiAiZG9jczogIgpsYWJlbHM6IGRvY3VtZW50YXRpb24KLS0tCgoqKkRlc2NyaXB0aW9uKioKCkNsZWFybHkgZGVzY3JpYmUgd2hhdCBkb2N1bWVudGF0aW9uIHlvdSBhcmUgbG9va2luZyB0byBhZGQgb3IgaW1wcm92ZS4KCioqUmVxdWlyZW1lbnRzKioKCi0gWyBdIFJlcXVpcmVtZW50cyBnbyBoZXJlCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/feature_request.md", + "data": + "LS0tCm5hbWU6IEZlYXR1cmUgUmVxdWVzdAphYm91dDogQSBuZXcgZmVhdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgcHJvamVjdAp0aXRsZTogImZlYXQ6ICIKbGFiZWxzOiBmZWF0dXJlCi0tLQoKKipEZXNjcmlwdGlvbioqCgpDbGVhcmx5IGRlc2NyaWJlIHdoYXQgeW91IGFyZSBsb29raW5nIHRvIGFkZC4gVGhlIG1vcmUgY29udGV4dCB0aGUgYmV0dGVyLgoKKipSZXF1aXJlbWVudHMqKgoKLSBbIF0gQ2hlY2tsaXN0IG9mIHJlcXVpcmVtZW50cyB0byBiZSBmdWxmaWxsZWQKCioqQWRkaXRpb25hbCBDb250ZXh0KioKCkFkZCBhbnkgb3RoZXIgY29udGV4dCBvciBzY3JlZW5zaG90cyBhYm91dCB0aGUgZmVhdHVyZSByZXF1ZXN0IGdvIGhlcmUuCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/performance.md", + "data": + "LS0tCm5hbWU6IFBlcmZvcm1hbmNlIFVwZGF0ZQphYm91dDogQSBjb2RlIGNoYW5nZSB0aGF0IGltcHJvdmVzIHBlcmZvcm1hbmNlCnRpdGxlOiAicGVyZjogIgpsYWJlbHM6IHBlcmZvcm1hbmNlCi0tLQoKKipEZXNjcmlwdGlvbioqCgpDbGVhcmx5IGRlc2NyaWJlIHdoYXQgY29kZSBuZWVkcyB0byBiZSBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgaXMgZ29pbmcgdG8gYmUuIEJvbnVzIHBvaW50J3MgaWYgeW91IGNhbiB0aWUgdGhpcyBkaXJlY3RseSB0byB1c2VyIGV4cGVyaWVuY2UuCgoqKlJlcXVpcmVtZW50cyoqCgotIFsgXSBUaGVyZSBpcyBubyBkcm9wIGluIHRlc3QgY292ZXJhZ2UuCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/refactor.md", + "data": + "LS0tCm5hbWU6IFJlZmFjdG9yCmFib3V0OiBBIGNvZGUgY2hhbmdlIHRoYXQgbmVpdGhlciBmaXhlcyBhIGJ1ZyBub3IgYWRkcyBhIGZlYXR1cmUKdGl0bGU6ICJyZWZhY3RvcjogIgpsYWJlbHM6IHJlZmFjdG9yCi0tLQoKKipEZXNjcmlwdGlvbioqCgpDbGVhcmx5IGRlc2NyaWJlIHdoYXQgbmVlZHMgdG8gYmUgcmVmYWN0b3JlZCBhbmQgd2h5LiBQbGVhc2UgcHJvdmlkZSBsaW5rcyB0byByZWxhdGVkIGlzc3VlcyAoYnVncyBvciB1cGNvbWluZyBmZWF0dXJlcykgaW4gb3JkZXIgdG8gaGVscCBwcmlvcml0aXplLgoKKipSZXF1aXJlbWVudHMqKgoKLSBbIF0gVGhlcmUgaXMgbm8gZHJvcCBpbiB0ZXN0IGNvdmVyYWdlLgo=", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/revert.md", + "data": + "LS0tCm5hbWU6IFJldmVydCBDb21taXQKYWJvdXQ6IFJldmVydHMgYSBwcmV2aW91cyBjb21taXQKdGl0bGU6ICJyZXZlcnQ6ICIKbGFiZWxzOiByZXZlcnQKLS0tCgoqKkRlc2NyaXB0aW9uKioKClByb3ZpZGUgYSBsaW5rIHRvIGEgUFIvQ29tbWl0IHRoYXQgeW91IGFyZSBsb29raW5nIHRvIHJldmVydCBhbmQgd2h5LgoKKipSZXF1aXJlbWVudHMqKgoKLSBbIF0gQ2hhbmdlIGhhcyBiZWVuIHJldmVydGVkCi0gWyBdIE5vIGNoYW5nZSBpbiB0ZXN0IGNvdmVyYWdlIGhhcyBoYXBwZW5lZAotIFsgXSBBIG5ldyB0aWNrZXQgaXMgY3JlYXRlZCBmb3IgYW55IGZvbGxvdyBvbiB3b3JrIHRoYXQgbmVlZHMgdG8gaGFwcGVuCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/style.md", + "data": + "LS0tCm5hbWU6IFN0eWxlIENoYW5nZXMKYWJvdXQ6IENoYW5nZXMgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBtZWFuaW5nIG9mIHRoZSBjb2RlICh3aGl0ZSBzcGFjZSwgZm9ybWF0dGluZywgbWlzc2luZyBzZW1pLWNvbG9ucywgZXRjKQp0aXRsZTogInN0eWxlOiAiCmxhYmVsczogc3R5bGUKLS0tCgoqKkRlc2NyaXB0aW9uKioKCkNsZWFybHkgZGVzY3JpYmUgd2hhdCB5b3UgYXJlIGxvb2tpbmcgdG8gY2hhbmdlIGFuZCB3aHkuCgoqKlJlcXVpcmVtZW50cyoqCgotIFsgXSBUaGVyZSBpcyBubyBkcm9wIGluIHRlc3QgY292ZXJhZ2UuCg==", + "type": "text", + }, + { + "path": ".github/ISSUE_TEMPLATE/test.md", + "data": + "LS0tCm5hbWU6IFRlc3QKYWJvdXQ6IEFkZGluZyBtaXNzaW5nIHRlc3RzIG9yIGNvcnJlY3RpbmcgZXhpc3RpbmcgdGVzdHMKdGl0bGU6ICJ0ZXN0OiAiCmxhYmVsczogdGVzdAotLS0KCioqRGVzY3JpcHRpb24qKgoKTGlzdCBvdXQgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCBvciBjaGFuZ2VkLiBQbGVhc2UgYWxzbyBpbmNsdWRlIGFueSBpbmZvcm1hdGlvbiBhcyB0byB3aHkgdGhpcyB3YXMgbm90IGNvdmVyZWQgaW4gdGhlIHBhc3QuCgoqKlJlcXVpcmVtZW50cyoqCgotIFsgXSBUaGVyZSBpcyBubyBkcm9wIGluIHRlc3QgY292ZXJhZ2UuCg==", + "type": "text", + }, + { + "path": ".github/PULL_REQUEST_TEMPLATE.md", + "data": + "PCEtLQogIFRoYW5rcyBmb3IgY29udHJpYnV0aW5nIQoKICBQcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgeW91ciBjaGFuZ2VzIGJlbG93IGFuZCBhIGdlbmVyYWwgc3VtbWFyeSBpbiB0aGUgdGl0bGUKCiAgUGxlYXNlIGxvb2sgYXQgdGhlIGZvbGxvd2luZyBjaGVja2xpc3QgdG8gZW5zdXJlIHRoYXQgeW91ciBQUiBjYW4gYmUgYWNjZXB0ZWQgcXVpY2tseToKLS0+CgojIyBTdGF0dXMKCioqUkVBRFkvSU4gREVWRUxPUE1FTlQvSE9MRCoqCgojIyBEZXNjcmlwdGlvbgoKPCEtLS0gRGVzY3JpYmUgeW91ciBjaGFuZ2VzIGluIGRldGFpbCAtLT4KCiMjIFR5cGUgb2YgQ2hhbmdlCgo8IS0tLSBQdXQgYW4gYHhgIGluIGFsbCB0aGUgYm94ZXMgdGhhdCBhcHBseTogLS0+CgotIFsgXSDinKggTmV3IGZlYXR1cmUgKG5vbi1icmVha2luZyBjaGFuZ2Ugd2hpY2ggYWRkcyBmdW5jdGlvbmFsaXR5KQotIFsgXSDwn5ug77iPIEJ1ZyBmaXggKG5vbi1icmVha2luZyBjaGFuZ2Ugd2hpY2ggZml4ZXMgYW4gaXNzdWUpCi0gWyBdIOKdjCBCcmVha2luZyBjaGFuZ2UgKGZpeCBvciBmZWF0dXJlIHRoYXQgd291bGQgY2F1c2UgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSB0byBjaGFuZ2UpCi0gWyBdIPCfp7kgQ29kZSByZWZhY3RvcgotIFsgXSDinIUgQnVpbGQgY29uZmlndXJhdGlvbiBjaGFuZ2UKLSBbIF0g8J+TnSBEb2N1bWVudGF0aW9uCi0gWyBdIPCfl5HvuI8gQ2hvcmUKLSBbIF0g8J+nqiBUZXN0Cg==", + "type": "text", + }, + { + "path": ".github/workflows/license_check.yaml", + "data": + "bmFtZTogbGljZW5zZV9jaGVjawoKY29uY3VycmVuY3k6CiAgZ3JvdXA6ICR7eyNtdXN0YWNoZUNhc2V9fWdpdGh1Yi53b3JrZmxvd3t7L211c3RhY2hlQ2FzZX19LSR7eyNtdXN0YWNoZUNhc2V9fWdpdGh1Yi5yZWZ7ey9tdXN0YWNoZUNhc2V9fQogIGNhbmNlbC1pbi1wcm9ncmVzczogdHJ1ZQoKb246CiAgcHVsbF9yZXF1ZXN0OgogICAgYnJhbmNoZXM6CiAgICAgIC0gbWFpbgogICAgcGF0aHM6CiAgICAgIC0gInB1YnNwZWMueWFtbCIKICAgICAgLSAiLmdpdGh1Yi93b3JrZmxvd3MvbGljZW5zZV9jaGVjay55YW1sIgogIHB1c2g6CiAgICBicmFuY2hlczoKICAgICAgLSBtYWluCiAgICBwYXRoczoKICAgICAgLSAicHVic3BlYy55YW1sIgogICAgICAtICIuZ2l0aHViL3dvcmtmbG93cy9saWNlbnNlX2NoZWNrLnlhbWwiCgpqb2JzOgogIGxpY2Vuc2VfY2hlY2s6CiAgICB1c2VzOiBWZXJ5R29vZE9wZW5Tb3VyY2UvdmVyeV9nb29kX3dvcmtmbG93cy8uZ2l0aHViL3dvcmtmbG93cy9saWNlbnNlX2NoZWNrLnltbEB2MQogICAgd2l0aDoKICAgICAgYWxsb3dlZDogIk1JVCxCU0QtMy1DbGF1c2UsQlNELTItQ2xhdXNlLEFwYWNoZS0yLjAiCg==", + "type": "text", + }, + { + "path": ".github/workflows/main.yaml", + "data": + "bmFtZTogY2kKCmNvbmN1cnJlbmN5OgogIGdyb3VwOiAke3sjbXVzdGFjaGVDYXNlfX1naXRodWIud29ya2Zsb3d7ey9tdXN0YWNoZUNhc2V9fS0ke3sjbXVzdGFjaGVDYXNlfX1naXRodWIucmVme3svbXVzdGFjaGVDYXNlfX0KICBjYW5jZWwtaW4tcHJvZ3Jlc3M6IHRydWUKCm9uOgogIHB1bGxfcmVxdWVzdDoKICAgIGJyYW5jaGVzOgogICAgICAtIG1haW4KCmpvYnM6CiAgc2VtYW50aWNfcHVsbF9yZXF1ZXN0OgogICAgdXNlczogVmVyeUdvb2RPcGVuU291cmNlL3ZlcnlfZ29vZF93b3JrZmxvd3MvLmdpdGh1Yi93b3JrZmxvd3Mvc2VtYW50aWNfcHVsbF9yZXF1ZXN0LnltbEB2MQoKICBzcGVsbC1jaGVjazoKICAgIHVzZXM6IFZlcnlHb29kT3BlblNvdXJjZS92ZXJ5X2dvb2Rfd29ya2Zsb3dzLy5naXRodWIvd29ya2Zsb3dzL3NwZWxsX2NoZWNrLnltbEB2MQogICAgd2l0aDoKICAgICAgaW5jbHVkZXM6ICIqKi8qLm1kIgogICAgICBtb2RpZmllZF9maWxlc19vbmx5OiBmYWxzZQoKICBidWlsZDoKICAgIHVzZXM6IFZlcnlHb29kT3BlblNvdXJjZS92ZXJ5X2dvb2Rfd29ya2Zsb3dzLy5naXRodWIvd29ya2Zsb3dzL2ZsdXR0ZXJfcGFja2FnZS55bWxAdjEKICAgIHdpdGg6CiAgICAgIGZsdXR0ZXJfdmVyc2lvbjogIjMuNDEueCIK", + "type": "text", + }, + { + "path": ".gitignore", + "data": + "IyBNaXNjZWxsYW5lb3VzCiouY2xhc3MKKi5sb2cKKi5weWMKKi5zd3AKLkRTX1N0b3JlCi5hdG9tLwouYnVpbGRsb2cvCi5oaXN0b3J5Ci5zdm4vCm1pZ3JhdGVfd29ya2luZ19kaXIvCgojIEludGVsbGlKIHJlbGF0ZWQKKi5pbWwKKi5pcHIKKi5pd3MKLmlkZWEvCgojIFZTQ29kZSByZWxhdGVkCi52c2NvZGUvKgoKIyBGbHV0dGVyL0RhcnQvUHViIHJlbGF0ZWQKKiovZG9jL2FwaS8KKiovaW9zL0ZsdXR0ZXIvLmxhc3RfYnVpbGRfaWQKLmRhcnRfdG9vbC8KLmZsdXR0ZXItcGx1Z2lucwouZmx1dHRlci1wbHVnaW5zLWRlcGVuZGVuY2llcwoucGFja2FnZXMKLnB1Yi1jYWNoZS8KLnB1Yi8KL2J1aWxkLwpwdWJzcGVjLmxvY2sKCiMgV2ViIHJlbGF0ZWQKbGliL2dlbmVyYXRlZF9wbHVnaW5fcmVnaXN0cmFudC5kYXJ0CgojIFN5bWJvbGljYXRpb24gcmVsYXRlZAphcHAuKi5zeW1ib2xzCgojIE9iZnVzY2F0aW9uIHJlbGF0ZWQKYXBwLioubWFwLmpzb24KCiMgVGVzdCByZWxhdGVkCmNvdmVyYWdlCg==", + "type": "text", + }, + { + "path": "analysis_options.yaml", + "data": + "aW5jbHVkZTogcGFja2FnZTp2ZXJ5X2dvb2RfYW5hbHlzaXMvYW5hbHlzaXNfb3B0aW9ucy55YW1sCgphbmFseXplcjoKICBleGNsdWRlOgogICAgLSAid2lkZ2V0Ym9vay8qKiIK", + "type": "text", + }, + { + "path": "CHANGELOG.md", + "data": "IyAwLjEuMCsxCgotIEluaXRpYWwgcmVsZWFzZS4K", + "type": "text", + }, + { + "path": "coverage_badge.svg", + "data": + "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTAyIiBoZWlnaHQ9IjIwIj4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDI9IjAiIHkyPSIxMDAlIj4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiYmIiIHN0b3Atb3BhY2l0eT0iLjEiIC8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9Ii4xIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxjbGlwUGF0aCBpZD0iYSI+CiAgICAgICAgPHJlY3Qgd2lkdGg9IjEwMiIgaGVpZ2h0PSIyMCIgcng9IjMiIGZpbGw9IiNmZmYiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj4KICAgICAgICA8cGF0aCBmaWxsPSIjNTU1IiBkPSJNMCAwaDU5djIwSDB6IiAvPgogICAgICAgIDxwYXRoIGZpbGw9IiM0NGNjMTEiIGQ9Ik01OSAwaDQzdjIwSDU5eiIgLz4KICAgICAgICA8cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMCAwaDEwMnYyMEgweiIgLz4KICAgIDwvZz4KICAgIDxnIGZpbGw9IiNmZmYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJEZWphVnUgU2FucyxWZXJkYW5hLEdlbmV2YSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjExMCI+CiAgICAgICAgPHRleHQgeD0iMzA1IiB5PSIxNTAiIGZpbGw9IiMwMTAxMDEiIGZpbGwtb3BhY2l0eT0iLjMiIHRyYW5zZm9ybT0ic2NhbGUoLjEpIiB0ZXh0TGVuZ3RoPSI0OTAiPmNvdmVyYWdlPC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjMwNSIgeT0iMTQwIiB0cmFuc2Zvcm09InNjYWxlKC4xKSIgdGV4dExlbmd0aD0iNDkwIj5jb3ZlcmFnZTwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI3OTUiIHk9IjE1MCIgZmlsbD0iIzAxMDEwMSIgZmlsbC1vcGFjaXR5PSIuMyIgdHJhbnNmb3JtPSJzY2FsZSguMSkiIHRleHRMZW5ndGg9IjMzMCI+MTAwJTwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI3OTUiIHk9IjE0MCIgdHJhbnNmb3JtPSJzY2FsZSguMSkiIHRleHRMZW5ndGg9IjMzMCI+MTAwJTwvdGV4dD4KICAgIDwvZz4KPC9zdmc+Cg==", + "type": "binary", + }, + { + "path": "lib/src/extensions/build_context_extensions.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOnt7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0ve3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fS5kYXJ0JzsKCi8vLyBFeHRlbnNpb24gb24gW0J1aWxkQ29udGV4dF0gZm9yIGVhc3kgYWNjZXNzIHRvIGN1c3RvbSB0aGVtZSB0b2tlbnMuCmV4dGVuc2lvbiBBcHBUaGVtZUJ1aWxkQ29udGV4dCBvbiBCdWlsZENvbnRleHQgewogIC8vLyBSZXR1cm5zIHRoZSBbQXBwQ29sb3JzXSBmcm9tIHRoZSBjdXJyZW50IHRoZW1lLgogIEFwcENvbG9ycyBnZXQgYXBwQ29sb3JzID0+IFRoZW1lLm9mKHRoaXMpLmV4dGVuc2lvbjxBcHBDb2xvcnM+KCkhOwoKICAvLy8gUmV0dXJucyB0aGUgW0FwcFNwYWNpbmddIGZyb20gdGhlIGN1cnJlbnQgdGhlbWUuCiAgQXBwU3BhY2luZyBnZXQgYXBwU3BhY2luZyA9PiBUaGVtZS5vZih0aGlzKS5leHRlbnNpb248QXBwU3BhY2luZz4oKSE7Cn0K", + "type": "text", + }, + { + "path": "lib/src/theme/app_colors.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOnt7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0ve3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fS5kYXJ0JzsKCi8vLyB7QHRlbXBsYXRlIGFwcF9jb2xvcnN9Ci8vLyBDdXN0b20gY29sb3IgdG9rZW5zIGJleW9uZCBNYXRlcmlhbCdzIFtDb2xvclNjaGVtZV0uCi8vLwovLy8gUHJvdmlkZXMgc2VtYW50aWMgY29sb3JzIGZvciBzdWNjZXNzLCB3YXJuaW5nLCBhbmQgaW5mbyBzdGF0ZXMKLy8vIGFsb25nIHdpdGggdGhlaXIgb24tY29sb3IgdmFyaWFudHMuCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBBcHBDb2xvcnMgZXh0ZW5kcyBUaGVtZUV4dGVuc2lvbjxBcHBDb2xvcnM+IHsKICAvLy8ge0BtYWNybyBhcHBfY29sb3JzfQogIGNvbnN0IEFwcENvbG9ycyh7CiAgICByZXF1aXJlZCB0aGlzLnN1Y2Nlc3MsCiAgICByZXF1aXJlZCB0aGlzLm9uU3VjY2VzcywKICAgIHJlcXVpcmVkIHRoaXMud2FybmluZywKICAgIHJlcXVpcmVkIHRoaXMub25XYXJuaW5nLAogICAgcmVxdWlyZWQgdGhpcy5pbmZvLAogICAgcmVxdWlyZWQgdGhpcy5vbkluZm8sCiAgfSk7CgogIC8vLyBUaGUgY29sb3IgdXNlZCBmb3Igc3VjY2VzcyBzdGF0ZXMuCiAgZmluYWwgQ29sb3Igc3VjY2VzczsKCiAgLy8vIFRoZSBjb2xvciB1c2VkIGZvciBjb250ZW50IG9uIHRvcCBvZiBbc3VjY2Vzc10uCiAgZmluYWwgQ29sb3Igb25TdWNjZXNzOwoKICAvLy8gVGhlIGNvbG9yIHVzZWQgZm9yIHdhcm5pbmcgc3RhdGVzLgogIGZpbmFsIENvbG9yIHdhcm5pbmc7CgogIC8vLyBUaGUgY29sb3IgdXNlZCBmb3IgY29udGVudCBvbiB0b3Agb2YgW3dhcm5pbmddLgogIGZpbmFsIENvbG9yIG9uV2FybmluZzsKCiAgLy8vIFRoZSBjb2xvciB1c2VkIGZvciBpbmZvcm1hdGlvbmFsIHN0YXRlcy4KICBmaW5hbCBDb2xvciBpbmZvOwoKICAvLy8gVGhlIGNvbG9yIHVzZWQgZm9yIGNvbnRlbnQgb24gdG9wIG9mIFtpbmZvXS4KICBmaW5hbCBDb2xvciBvbkluZm87CgogIEBvdmVycmlkZQogIEFwcENvbG9ycyBjb3B5V2l0aCh7CiAgICBDb2xvcj8gc3VjY2VzcywKICAgIENvbG9yPyBvblN1Y2Nlc3MsCiAgICBDb2xvcj8gd2FybmluZywKICAgIENvbG9yPyBvbldhcm5pbmcsCiAgICBDb2xvcj8gaW5mbywKICAgIENvbG9yPyBvbkluZm8sCiAgfSkgewogICAgcmV0dXJuIEFwcENvbG9ycygKICAgICAgc3VjY2Vzczogc3VjY2VzcyA/PyB0aGlzLnN1Y2Nlc3MsCiAgICAgIG9uU3VjY2Vzczogb25TdWNjZXNzID8/IHRoaXMub25TdWNjZXNzLAogICAgICB3YXJuaW5nOiB3YXJuaW5nID8/IHRoaXMud2FybmluZywKICAgICAgb25XYXJuaW5nOiBvbldhcm5pbmcgPz8gdGhpcy5vbldhcm5pbmcsCiAgICAgIGluZm86IGluZm8gPz8gdGhpcy5pbmZvLAogICAgICBvbkluZm86IG9uSW5mbyA/PyB0aGlzLm9uSW5mbywKICAgICk7CiAgfQoKICBAb3ZlcnJpZGUKICBBcHBDb2xvcnMgbGVycChBcHBDb2xvcnM/IG90aGVyLCBkb3VibGUgdCkgewogICAgaWYgKG90aGVyIGlzISBBcHBDb2xvcnMpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIEFwcENvbG9ycygKICAgICAgc3VjY2VzczogQ29sb3IubGVycChzdWNjZXNzLCBvdGhlci5zdWNjZXNzLCB0KSEsCiAgICAgIG9uU3VjY2VzczogQ29sb3IubGVycChvblN1Y2Nlc3MsIG90aGVyLm9uU3VjY2VzcywgdCkhLAogICAgICB3YXJuaW5nOiBDb2xvci5sZXJwKHdhcm5pbmcsIG90aGVyLndhcm5pbmcsIHQpISwKICAgICAgb25XYXJuaW5nOiBDb2xvci5sZXJwKG9uV2FybmluZywgb3RoZXIub25XYXJuaW5nLCB0KSEsCiAgICAgIGluZm86IENvbG9yLmxlcnAoaW5mbywgb3RoZXIuaW5mbywgdCkhLAogICAgICBvbkluZm86IENvbG9yLmxlcnAob25JbmZvLCBvdGhlci5vbkluZm8sIHQpISwKICAgICk7CiAgfQp9Cg==", + "type": "text", + }, + { + "path": "lib/src/theme/app_spacing.dart", + "data": + "aW1wb3J0ICdkYXJ0OnVpJzsKCmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7CgovLy8ge0B0ZW1wbGF0ZSBhcHBfc3BhY2luZ30KLy8vIFNwYWNpbmcgc2NhbGUgdG9rZW5zIGZvciBjb25zaXN0ZW50IGxheW91dCB0aHJvdWdob3V0IHRoZSBhcHAuCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBBcHBTcGFjaW5nIGV4dGVuZHMgVGhlbWVFeHRlbnNpb248QXBwU3BhY2luZz4gewogIC8vLyB7QG1hY3JvIGFwcF9zcGFjaW5nfQogIGNvbnN0IEFwcFNwYWNpbmcoewogICAgdGhpcy54eHMgPSA0LAogICAgdGhpcy54cyA9IDgsCiAgICB0aGlzLnNtID0gMTIsCiAgICB0aGlzLm1kID0gMTYsCiAgICB0aGlzLmxnID0gMjQsCiAgICB0aGlzLnhsZyA9IDMyLAogICAgdGhpcy54eGxnID0gNDgsCiAgfSk7CgogIC8vLyBFeHRyYSBleHRyYSBzbWFsbCBzcGFjaW5nOiA0cHguCiAgZmluYWwgZG91YmxlIHh4czsKCiAgLy8vIEV4dHJhIHNtYWxsIHNwYWNpbmc6IDhweC4KICBmaW5hbCBkb3VibGUgeHM7CgogIC8vLyBTbWFsbCBzcGFjaW5nOiAxMnB4LgogIGZpbmFsIGRvdWJsZSBzbTsKCiAgLy8vIE1lZGl1bSBzcGFjaW5nOiAxNnB4LgogIGZpbmFsIGRvdWJsZSBtZDsKCiAgLy8vIExhcmdlIHNwYWNpbmc6IDI0cHguCiAgZmluYWwgZG91YmxlIGxnOwoKICAvLy8gRXh0cmEgbGFyZ2Ugc3BhY2luZzogMzJweC4KICBmaW5hbCBkb3VibGUgeGxnOwoKICAvLy8gRXh0cmEgZXh0cmEgbGFyZ2Ugc3BhY2luZzogNDhweC4KICBmaW5hbCBkb3VibGUgeHhsZzsKCiAgQG92ZXJyaWRlCiAgQXBwU3BhY2luZyBjb3B5V2l0aCh7CiAgICBkb3VibGU/IHh4cywKICAgIGRvdWJsZT8geHMsCiAgICBkb3VibGU/IHNtLAogICAgZG91YmxlPyBtZCwKICAgIGRvdWJsZT8gbGcsCiAgICBkb3VibGU/IHhsZywKICAgIGRvdWJsZT8geHhsZywKICB9KSB7CiAgICByZXR1cm4gQXBwU3BhY2luZygKICAgICAgeHhzOiB4eHMgPz8gdGhpcy54eHMsCiAgICAgIHhzOiB4cyA/PyB0aGlzLnhzLAogICAgICBzbTogc20gPz8gdGhpcy5zbSwKICAgICAgbWQ6IG1kID8/IHRoaXMubWQsCiAgICAgIGxnOiBsZyA/PyB0aGlzLmxnLAogICAgICB4bGc6IHhsZyA/PyB0aGlzLnhsZywKICAgICAgeHhsZzogeHhsZyA/PyB0aGlzLnh4bGcsCiAgICApOwogIH0KCiAgQG92ZXJyaWRlCiAgQXBwU3BhY2luZyBsZXJwKEFwcFNwYWNpbmc/IG90aGVyLCBkb3VibGUgdCkgewogICAgaWYgKG90aGVyIGlzISBBcHBTcGFjaW5nKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBBcHBTcGFjaW5nKAogICAgICB4eHM6IGxlcnBEb3VibGUoeHhzLCBvdGhlci54eHMsIHQpISwKICAgICAgeHM6IGxlcnBEb3VibGUoeHMsIG90aGVyLnhzLCB0KSEsCiAgICAgIHNtOiBsZXJwRG91YmxlKHNtLCBvdGhlci5zbSwgdCkhLAogICAgICBtZDogbGVycERvdWJsZShtZCwgb3RoZXIubWQsIHQpISwKICAgICAgbGc6IGxlcnBEb3VibGUobGcsIG90aGVyLmxnLCB0KSEsCiAgICAgIHhsZzogbGVycERvdWJsZSh4bGcsIG90aGVyLnhsZywgdCkhLAogICAgICB4eGxnOiBsZXJwRG91YmxlKHh4bGcsIG90aGVyLnh4bGcsIHQpISwKICAgICk7CiAgfQp9Cg==", + "type": "text", + }, + { + "path": "lib/src/theme/app_theme.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOnt7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0ve3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fS5kYXJ0JzsKCi8vLyB7QHRlbXBsYXRlIGFwcF90aGVtZX0KLy8vIENvbXBvc2VzIFtUaGVtZURhdGFdIHdpdGggW0NvbG9yU2NoZW1lLmZyb21TZWVkXSBhbmQgY3VzdG9tCi8vLyBbVGhlbWVFeHRlbnNpb25dcyBmb3IgbGlnaHQgYW5kIGRhcmsgdmFyaWFudHMuCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBBcHBUaGVtZSB7CiAgLy8vIFRoZSBsaWdodCBbVGhlbWVEYXRhXS4KICBzdGF0aWMgVGhlbWVEYXRhIGdldCBsaWdodCB7CiAgICBjb25zdCBhcHBDb2xvcnMgPSBBcHBDb2xvcnMoCiAgICAgIHN1Y2Nlc3M6IENvbG9yKDB4RkYxNkEzNEEpLAogICAgICBvblN1Y2Nlc3M6IENvbG9yKDB4RkZGRkZGRkYpLAogICAgICB3YXJuaW5nOiBDb2xvcigweEZGQ0E4QTA0KSwKICAgICAgb25XYXJuaW5nOiBDb2xvcigweEZGRkZGRkZGKSwKICAgICAgaW5mbzogQ29sb3IoMHhGRjI1NjNFQiksCiAgICAgIG9uSW5mbzogQ29sb3IoMHhGRkZGRkZGRiksCiAgICApOwoKICAgIHJldHVybiBUaGVtZURhdGEoCiAgICAgIGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZS5mcm9tU2VlZChzZWVkQ29sb3I6IGNvbnN0IENvbG9yKDB4RkY0RjQ2RTUpKSwKICAgICAgZXh0ZW5zaW9uczogY29uc3QgW2FwcENvbG9ycywgQXBwU3BhY2luZygpXSwKICAgICk7CiAgfQoKICAvLy8gVGhlIGRhcmsgW1RoZW1lRGF0YV0uCiAgc3RhdGljIFRoZW1lRGF0YSBnZXQgZGFyayB7CiAgICBjb25zdCBhcHBDb2xvcnMgPSBBcHBDb2xvcnMoCiAgICAgIHN1Y2Nlc3M6IENvbG9yKDB4RkY0QURFODApLAogICAgICBvblN1Y2Nlc3M6IENvbG9yKDB4RkYxQzFCMUYpLAogICAgICB3YXJuaW5nOiBDb2xvcigweEZGRkFDQzE1KSwKICAgICAgb25XYXJuaW5nOiBDb2xvcigweEZGMUMxQjFGKSwKICAgICAgaW5mbzogQ29sb3IoMHhGRjYwQTVGQSksCiAgICAgIG9uSW5mbzogQ29sb3IoMHhGRjFDMUIxRiksCiAgICApOwoKICAgIHJldHVybiBUaGVtZURhdGEoCiAgICAgIGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZS5mcm9tU2VlZCgKICAgICAgICBzZWVkQ29sb3I6IGNvbnN0IENvbG9yKDB4RkY0RjQ2RTUpLAogICAgICAgIGJyaWdodG5lc3M6IEJyaWdodG5lc3MuZGFyaywKICAgICAgKSwKICAgICAgZXh0ZW5zaW9uczogY29uc3QgW2FwcENvbG9ycywgQXBwU3BhY2luZygpXSwKICAgICk7CiAgfQp9Cg==", + "type": "text", + }, + { + "path": "lib/src/widgets/app_button.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOnt7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0ve3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fS5kYXJ0JzsKCi8vLyBWaXN1YWwgdmFyaWFudHMgZm9yIFtBcHBCdXR0b25dLgplbnVtIEFwcEJ1dHRvblZhcmlhbnQgewogIC8vLyBBIGZpbGxlZCBidXR0b24gd2l0aCB0aGUgcHJpbWFyeSBjb2xvci4KICBwcmltYXJ5LAoKICAvLy8gQSB0b25hbCBmaWxsZWQgYnV0dG9uIHdpdGggYSBzZWNvbmRhcnkgY29sb3IuCiAgc2Vjb25kYXJ5LAoKICAvLy8gQW4gb3V0bGluZWQgYnV0dG9uLgogIG91dGxpbmUsCn0KCi8vLyBTaXplIHZhcmlhbnRzIGZvciBbQXBwQnV0dG9uXS4KZW51bSBBcHBCdXR0b25TaXplIHsKICAvLy8gQSBzbWFsbCBidXR0b24uCiAgc21hbGwsCgogIC8vLyBBIG1lZGl1bSBidXR0b24uCiAgbWVkaXVtLAoKICAvLy8gQSBsYXJnZSBidXR0b24uCiAgbGFyZ2UsCn0KCi8vLyB7QHRlbXBsYXRlIGFwcF9idXR0b259Ci8vLyBBIHN0eWxlZCBidXR0b24gdGhhdCBjb21wb3NlcyBNYXRlcmlhbCdzIFtGaWxsZWRCdXR0b25dIGFuZAovLy8gW091dGxpbmVkQnV0dG9uXSB3aXRoIGFwcC1zcGVjaWZpYyBzaXppbmcgYW5kIHRoZW1pbmcuCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBBcHBCdXR0b24gZXh0ZW5kcyBTdGF0ZWxlc3NXaWRnZXQgewogIC8vLyB7QG1hY3JvIGFwcF9idXR0b259CiAgY29uc3QgQXBwQnV0dG9uKHsKICAgIHJlcXVpcmVkIHRoaXMub25QcmVzc2VkLAogICAgcmVxdWlyZWQgdGhpcy5jaGlsZCwKICAgIHRoaXMudmFyaWFudCA9IEFwcEJ1dHRvblZhcmlhbnQucHJpbWFyeSwKICAgIHRoaXMuc2l6ZSA9IEFwcEJ1dHRvblNpemUubWVkaXVtLAogICAgc3VwZXIua2V5LAogIH0pOwoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIGJ1dHRvbiBpcyB0YXBwZWQuCiAgZmluYWwgVm9pZENhbGxiYWNrPyBvblByZXNzZWQ7CgogIC8vLyBUaGUgYnV0dG9uJ3MgY29udGVudCwgdHlwaWNhbGx5IGEgW1RleHRdIHdpZGdldC4KICBmaW5hbCBXaWRnZXQgY2hpbGQ7CgogIC8vLyBUaGUgdmlzdWFsIHZhcmlhbnQgb2YgdGhlIGJ1dHRvbi4KICBmaW5hbCBBcHBCdXR0b25WYXJpYW50IHZhcmlhbnQ7CgogIC8vLyBUaGUgc2l6ZSBvZiB0aGUgYnV0dG9uLgogIGZpbmFsIEFwcEJ1dHRvblNpemUgc2l6ZTsKCiAgQG92ZXJyaWRlCiAgV2lkZ2V0IGJ1aWxkKEJ1aWxkQ29udGV4dCBjb250ZXh0KSB7CiAgICBmaW5hbCBzcGFjaW5nID0gY29udGV4dC5hcHBTcGFjaW5nOwoKICAgIGZpbmFsIHBhZGRpbmcgPSBzd2l0Y2ggKHNpemUpIHsKICAgICAgQXBwQnV0dG9uU2l6ZS5zbWFsbCA9PiBFZGdlSW5zZXRzLnN5bW1ldHJpYygKICAgICAgICBob3Jpem9udGFsOiBzcGFjaW5nLnNtLAogICAgICAgIHZlcnRpY2FsOiBzcGFjaW5nLnh4cywKICAgICAgKSwKICAgICAgQXBwQnV0dG9uU2l6ZS5tZWRpdW0gPT4gRWRnZUluc2V0cy5zeW1tZXRyaWMoCiAgICAgICAgaG9yaXpvbnRhbDogc3BhY2luZy5tZCwKICAgICAgICB2ZXJ0aWNhbDogc3BhY2luZy54cywKICAgICAgKSwKICAgICAgQXBwQnV0dG9uU2l6ZS5sYXJnZSA9PiBFZGdlSW5zZXRzLnN5bW1ldHJpYygKICAgICAgICBob3Jpem9udGFsOiBzcGFjaW5nLmxnLAogICAgICAgIHZlcnRpY2FsOiBzcGFjaW5nLnNtLAogICAgICApLAogICAgfTsKCiAgICBmaW5hbCBzdHlsZSA9IEJ1dHRvblN0eWxlKHBhZGRpbmc6IFdpZGdldFN0YXRlUHJvcGVydHlBbGwocGFkZGluZykpOwoKICAgIHJldHVybiBzd2l0Y2ggKHZhcmlhbnQpIHsKICAgICAgQXBwQnV0dG9uVmFyaWFudC5wcmltYXJ5ID0+IEZpbGxlZEJ1dHRvbigKICAgICAgICBvblByZXNzZWQ6IG9uUHJlc3NlZCwKICAgICAgICBzdHlsZTogc3R5bGUsCiAgICAgICAgY2hpbGQ6IGNoaWxkLAogICAgICApLAogICAgICBBcHBCdXR0b25WYXJpYW50LnNlY29uZGFyeSA9PiBGaWxsZWRCdXR0b24udG9uYWwoCiAgICAgICAgb25QcmVzc2VkOiBvblByZXNzZWQsCiAgICAgICAgc3R5bGU6IHN0eWxlLAogICAgICAgIGNoaWxkOiBjaGlsZCwKICAgICAgKSwKICAgICAgQXBwQnV0dG9uVmFyaWFudC5vdXRsaW5lID0+IE91dGxpbmVkQnV0dG9uKAogICAgICAgIG9uUHJlc3NlZDogb25QcmVzc2VkLAogICAgICAgIHN0eWxlOiBzdHlsZSwKICAgICAgICBjaGlsZDogY2hpbGQsCiAgICAgICksCiAgICB9OwogIH0KfQo=", + "type": "text", + }, + { + "path": "lib/{{project_name.snakeCase()}}.dart", + "data": + "Ly8vIHt7e2Rlc2NyaXB0aW9ufX19CmxpYnJhcnk7CgpleHBvcnQgJ3BhY2thZ2U6Zmx1dHRlci9tYXRlcmlhbC5kYXJ0JzsKCmV4cG9ydCAnc3JjL2V4dGVuc2lvbnMvYnVpbGRfY29udGV4dF9leHRlbnNpb25zLmRhcnQnOwpleHBvcnQgJ3NyYy90aGVtZS9hcHBfY29sb3JzLmRhcnQnOwpleHBvcnQgJ3NyYy90aGVtZS9hcHBfc3BhY2luZy5kYXJ0JzsKZXhwb3J0ICdzcmMvdGhlbWUvYXBwX3RoZW1lLmRhcnQnOwpleHBvcnQgJ3NyYy93aWRnZXRzL2FwcF9idXR0b24uZGFydCc7Cg==", + "type": "text", + }, + { + "path": "LICENSE", + "data": + "TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykge3tjdXJyZW50X3llYXJ9fSB7e29yZ19uYW1lfX0KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCg==", + "type": "text", + }, + { + "path": "pubspec.yaml", + "data": + "bmFtZToge3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fQpkZXNjcmlwdGlvbjoge3t7ZGVzY3JpcHRpb259fX0KdmVyc2lvbjogMC4xLjArMQp7e15wdWJsaXNoYWJsZX19cHVibGlzaF90bzogbm9uZXt7L3B1Ymxpc2hhYmxlfX0KCmVudmlyb25tZW50OgogIHNkazogXjMuMTEuMAogIGZsdXR0ZXI6IF4zLjQxLjAKCmRlcGVuZGVuY2llczoKICBmbHV0dGVyOgogICAgc2RrOiBmbHV0dGVyCgpkZXZfZGVwZW5kZW5jaWVzOgogIGZsdXR0ZXJfdGVzdDoKICAgIHNkazogZmx1dHRlcgogIG1vY2t0YWlsOiBeMS4wLjQKICB2ZXJ5X2dvb2RfYW5hbHlzaXM6IF4xMC4yLjAK", + "type": "text", + }, + { + "path": "README.md", + "data": + "IyB7e3Byb2plY3RfbmFtZS50aXRsZUNhc2UoKX19CgpbIVtzdHlsZTogdmVyeSBnb29kIGFuYWx5c2lzXVt2ZXJ5X2dvb2RfYW5hbHlzaXNfYmFkZ2VdXVt2ZXJ5X2dvb2RfYW5hbHlzaXNfbGlua10KWyFbUG93ZXJlZCBieSBNYXNvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9lbmRwb2ludD91cmw9aHR0cHMlM0ElMkYlMkZ0aW55dXJsLmNvbSUyRm1hc29uLWJhZGdlKV0oaHR0cHM6Ly9naXRodWIuY29tL2ZlbGFuZ2VsL21hc29uKQpbIVtMaWNlbnNlOiBNSVRdW2xpY2Vuc2VfYmFkZ2VdXVtsaWNlbnNlX2xpbmtdCgp7e3tkZXNjcmlwdGlvbn19fQoKIyMgSW5zdGFsbGF0aW9uIPCfkrsKCioq4p2XIEluIG9yZGVyIHRvIHN0YXJ0IHVzaW5nIHt7cHJvamVjdF9uYW1lLnRpdGxlQ2FzZSgpfX0geW91IG11c3QgaGF2ZSB0aGUgW0ZsdXR0ZXIgU0RLXVtmbHV0dGVyX2luc3RhbGxfbGlua10gaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZS4qKgoKSW5zdGFsbCB2aWEgYGZsdXR0ZXIgcHViIGFkZGA6CgpgYGBzaApkYXJ0IHB1YiBhZGQge3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fQpgYGAKCi0tLQoKIyMgRmVhdHVyZXMg4pyoCgotICoqVGhlbWVFeHRlbnNpb24tYmFzZWQgdGhlbWluZyoqIOKAlCBsaWdodCBhbmQgZGFyayB0aGVtZSB2YXJpYW50cyB3aXRoIGN1c3RvbSBjb2xvciBhbmQgc3BhY2luZyB0b2tlbnMgdmlhIGBUaGVtZUV4dGVuc2lvbjxUPmAKLSAqKkN1c3RvbSBjb2xvciB0b2tlbnMqKiDigJQgc2VtYW50aWMgY29sb3JzIGZvciBzdWNjZXNzLCB3YXJuaW5nLCBhbmQgaW5mbyBzdGF0ZXMgdmlhIGBBcHBDb2xvcnNgCi0gKipTcGFjaW5nIHNjYWxlKiog4oCUIGNvbnNpc3RlbnQgc3BhY2luZyB0b2tlbnMgZnJvbSB4eHMgdG8geHhsZyB2aWEgYEFwcFNwYWNpbmdgCi0gKipCdWlsZENvbnRleHQgZXh0ZW5zaW9ucyoqIOKAlCBzaG9ydGhhbmQgYGNvbnRleHQuYXBwQ29sb3JzYCBhbmQgYGNvbnRleHQuYXBwU3BhY2luZ2AKLSAqKkV4YW1wbGUgd2lkZ2V0Kiog4oCUIGBBcHBCdXR0b25gIGNvbXBvc2luZyBNYXRlcmlhbCdzIGBGaWxsZWRCdXR0b25gIGFuZCBgT3V0bGluZWRCdXR0b25gIHdpdGggYXBwLXNwZWNpZmljIHNpemluZwoKIyMgVXNhZ2Ug8J+agAoKV3JhcCB5b3VyIGFwcCB3aXRoIHRoZSB0aGVtZToKCmBgYGRhcnQKaW1wb3J0ICdwYWNrYWdlOnt7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0ve3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fS5kYXJ0JzsKCmNsYXNzIE15QXBwIGV4dGVuZHMgU3RhdGVsZXNzV2lkZ2V0IHsKICBAb3ZlcnJpZGUKICBXaWRnZXQgYnVpbGQoQnVpbGRDb250ZXh0IGNvbnRleHQpIHsKICAgIHJldHVybiBNYXRlcmlhbEFwcCgKICAgICAgdGhlbWU6IEFwcFRoZW1lLmxpZ2h0LAogICAgICBkYXJrVGhlbWU6IEFwcFRoZW1lLmRhcmssCiAgICAgIGhvbWU6IGNvbnN0IE15SG9tZVBhZ2UoKSwKICAgICk7CiAgfQp9CmBgYAoKVXNlIHdpZGdldHMgYW5kIHRva2VucyBpbiB5b3VyIGFwcDoKCmBgYGRhcnQKQXBwQnV0dG9uKAogIG9uUHJlc3NlZDogKCkge30sCiAgY2hpbGQ6IGNvbnN0IFRleHQoJ0NsaWNrIG1lJyksCik7CmBgYAoKQWNjZXNzIGN1c3RvbSB0b2tlbnMgdmlhIGNvbnRleHQgZXh0ZW5zaW9uczoKCmBgYGRhcnQKZmluYWwgY29sb3JzID0gY29udGV4dC5hcHBDb2xvcnM7CmZpbmFsIHNwYWNpbmcgPSBjb250ZXh0LmFwcFNwYWNpbmc7CmBgYAoKLS0tCgojIyBDb250aW51b3VzIEludGVncmF0aW9uIPCfpJYKCnt7cHJvamVjdF9uYW1lLnRpdGxlQ2FzZSgpfX0gY29tZXMgd2l0aCBhIGJ1aWx0LWluIFtHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd11bZ2l0aHViX2FjdGlvbnNfbGlua10gcG93ZXJlZCBieSBbVmVyeSBHb29kIFdvcmtmbG93c11bdmVyeV9nb29kX3dvcmtmbG93c19saW5rXSBidXQgeW91IGNhbiBhbHNvIGFkZCB5b3VyIHByZWZlcnJlZCBDSS9DRCBzb2x1dGlvbi4KCk91dCBvZiB0aGUgYm94LCBvbiBlYWNoIHB1bGwgcmVxdWVzdCBhbmQgcHVzaCwgdGhlIENJIGBmb3JtYXRzYCwgYGxpbnRzYCwgYW5kIGB0ZXN0c2AgdGhlIGNvZGUuIFRoaXMgZW5zdXJlcyB0aGUgY29kZSByZW1haW5zIGNvbnNpc3RlbnQgYW5kIGJlaGF2ZXMgY29ycmVjdGx5IGFzIHlvdSBhZGQgZnVuY3Rpb25hbGl0eSBvciBtYWtlIGNoYW5nZXMuIFRoZSBwcm9qZWN0IHVzZXMgW1ZlcnkgR29vZCBBbmFseXNpc11bdmVyeV9nb29kX2FuYWx5c2lzX2xpbmtdIGZvciBhIHN0cmljdCBzZXQgb2YgYW5hbHlzaXMgb3B0aW9ucyB1c2VkIGJ5IG91ciB0ZWFtLiBDb2RlIGNvdmVyYWdlIGlzIGVuZm9yY2VkIHVzaW5nIHRoZSBbVmVyeSBHb29kIFdvcmtmbG93c11bdmVyeV9nb29kX2NvdmVyYWdlX2xpbmtdLgoKLS0tCgojIyBSdW5uaW5nIFRlc3RzIPCfp6oKCkZvciBmaXJzdCB0aW1lIHVzZXJzLCBpbnN0YWxsIHRoZSBbdmVyeV9nb29kX2NsaV1bdmVyeV9nb29kX2NsaV9saW5rXToKCmBgYHNoCmRhcnQgcHViIGdsb2JhbCBhY3RpdmF0ZSB2ZXJ5X2dvb2RfY2xpCmBgYAoKVG8gcnVuIGFsbCB1bml0IHRlc3RzOgoKYGBgc2gKdmVyeV9nb29kIHRlc3QgLS1jb3ZlcmFnZQpgYGAKClRvIHZpZXcgdGhlIGdlbmVyYXRlZCBjb3ZlcmFnZSByZXBvcnQgeW91IGNhbiB1c2UgW2xjb3ZdKGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbGNvdikuCgpgYGBzaAojIEdlbmVyYXRlIENvdmVyYWdlIFJlcG9ydApnZW5odG1sIGNvdmVyYWdlL2xjb3YuaW5mbyAtbyBjb3ZlcmFnZS8KCiMgT3BlbiBDb3ZlcmFnZSBSZXBvcnQKb3BlbiBjb3ZlcmFnZS9pbmRleC5odG1sCmBgYAoKW2ZsdXR0ZXJfaW5zdGFsbF9saW5rXTogaHR0cHM6Ly9kb2NzLmZsdXR0ZXIuZGV2L2dldC1zdGFydGVkL2luc3RhbGwKW2dpdGh1Yl9hY3Rpb25zX2xpbmtdOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL2xlYXJuLWdpdGh1Yi1hY3Rpb25zCltsaWNlbnNlX2JhZGdlXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9saWNlbnNlLU1JVC1ibHVlLnN2ZwpbbGljZW5zZV9saW5rXTogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKW2xvZ29fYmxhY2tdOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVkdWZW50dXJlcy92ZXJ5X2dvb2RfYnJhbmQvbWFpbi9zdHlsZXMvUkVBRE1FL3Zndl9sb2dvX2JsYWNrLnBuZyNnaC1saWdodC1tb2RlLW9ubHkKW2xvZ29fd2hpdGVdOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVkdWZW50dXJlcy92ZXJ5X2dvb2RfYnJhbmQvbWFpbi9zdHlsZXMvUkVBRE1FL3Zndl9sb2dvX3doaXRlLnBuZyNnaC1kYXJrLW1vZGUtb25seQpbbWFzb25fbGlua106IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxhbmdlbC9tYXNvbgpbdmVyeV9nb29kX2FuYWx5c2lzX2JhZGdlXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9zdHlsZS12ZXJ5X2dvb2RfYW5hbHlzaXMtQjIyQzg5LnN2ZwpbdmVyeV9nb29kX2FuYWx5c2lzX2xpbmtdOiBodHRwczovL3B1Yi5kZXYvcGFja2FnZXMvdmVyeV9nb29kX2FuYWx5c2lzClt2ZXJ5X2dvb2RfY2xpX2xpbmtdOiBodHRwczovL3B1Yi5kZXYvcGFja2FnZXMvdmVyeV9nb29kX2NsaQpbdmVyeV9nb29kX2NvdmVyYWdlX2xpbmtdOiBodHRwczovL2dpdGh1Yi5jb20vbWFya2V0cGxhY2UvYWN0aW9ucy92ZXJ5LWdvb2QtY292ZXJhZ2UKW3ZlcnlfZ29vZF92ZW50dXJlc19saW5rXTogaHR0cHM6Ly92ZXJ5Z29vZC52ZW50dXJlcwpbdmVyeV9nb29kX3ZlbnR1cmVzX2xpbmtfbGlnaHRdOiBodHRwczovL3Zlcnlnb29kLnZlbnR1cmVzI2doLWxpZ2h0LW1vZGUtb25seQpbdmVyeV9nb29kX3ZlbnR1cmVzX2xpbmtfZGFya106IGh0dHBzOi8vdmVyeWdvb2QudmVudHVyZXMjZ2gtZGFyay1tb2RlLW9ubHkKW3ZlcnlfZ29vZF93b3JrZmxvd3NfbGlua106IGh0dHBzOi8vZ2l0aHViLmNvbS9WZXJ5R29vZE9wZW5Tb3VyY2UvdmVyeV9nb29kX3dvcmtmbG93cwo=", + "type": "text", + }, + { + "path": "test/helpers/helpers.dart", + "data": "ZXhwb3J0ICdwdW1wX2FwcC5kYXJ0JzsK", + "type": "text", + }, + { + "path": "test/helpers/pump_app.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXJfdGVzdC9mbHV0dGVyX3Rlc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7CgovLy8gRXh0ZW5zaW9uIG9uIFtXaWRnZXRUZXN0ZXJdIHRvIHB1bXAgYSB3aWRnZXQgd3JhcHBlZCBpbiBbTWF0ZXJpYWxBcHBdCi8vLyB3aXRoIHRoZSBmdWxsIGFwcCB0aGVtZS4KZXh0ZW5zaW9uIFB1bXBBcHAgb24gV2lkZ2V0VGVzdGVyIHsKICAvLy8gUHVtcHMgW3dpZGdldF0gd3JhcHBlZCBpbiBhIFtNYXRlcmlhbEFwcF0gd2l0aCBbQXBwVGhlbWUubGlnaHRdLgogIEZ1dHVyZTx2b2lkPiBwdW1wQXBwKFdpZGdldCB3aWRnZXQsIHtUaGVtZURhdGE/IHRoZW1lfSkgewogICAgcmV0dXJuIHB1bXBXaWRnZXQoCiAgICAgIE1hdGVyaWFsQXBwKAogICAgICAgIHRoZW1lOiB0aGVtZSA/PyBBcHBUaGVtZS5saWdodCwKICAgICAgICBob21lOiBTY2FmZm9sZChib2R5OiB3aWRnZXQpLAogICAgICApLAogICAgKTsKICB9Cn0K", + "type": "text", + }, + { + "path": "test/src/extensions/build_context_extensions_test.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXJfdGVzdC9mbHV0dGVyX3Rlc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7CgppbXBvcnQgJy4uLy4uL2hlbHBlcnMvaGVscGVycy5kYXJ0JzsKCnZvaWQgbWFpbigpIHsKICBncm91cCgnQXBwVGhlbWVCdWlsZENvbnRleHQnLCAoKSB7CiAgICB0ZXN0V2lkZ2V0cygnYXBwQ29sb3JzIHJldHVybnMgQXBwQ29sb3JzIGZyb20gdGhlbWUnLCAodGVzdGVyKSBhc3luYyB7CiAgICAgIGxhdGUgQXBwQ29sb3JzIGNvbG9yczsKICAgICAgYXdhaXQgdGVzdGVyLnB1bXBBcHAoCiAgICAgICAgQnVpbGRlcigKICAgICAgICAgIGJ1aWxkZXI6IChjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbG9ycyA9IGNvbnRleHQuYXBwQ29sb3JzOwogICAgICAgICAgICByZXR1cm4gY29uc3QgU2l6ZWRCb3goKTsKICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChjb2xvcnMsIGlzQTxBcHBDb2xvcnM+KCkpOwogICAgfSk7CgogICAgdGVzdFdpZGdldHMoJ2FwcFNwYWNpbmcgcmV0dXJucyBBcHBTcGFjaW5nIGZyb20gdGhlbWUnLCAodGVzdGVyKSBhc3luYyB7CiAgICAgIGxhdGUgQXBwU3BhY2luZyBzcGFjaW5nOwogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcCgKICAgICAgICBCdWlsZGVyKAogICAgICAgICAgYnVpbGRlcjogKGNvbnRleHQpIHsKICAgICAgICAgICAgc3BhY2luZyA9IGNvbnRleHQuYXBwU3BhY2luZzsKICAgICAgICAgICAgcmV0dXJuIGNvbnN0IFNpemVkQm94KCk7CiAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICk7CgogICAgICBleHBlY3Qoc3BhY2luZywgaXNBPEFwcFNwYWNpbmc+KCkpOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text", + }, + { + "path": "test/src/theme/app_colors_test.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXJfdGVzdC9mbHV0dGVyX3Rlc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ0FwcENvbG9ycycsICgpIHsKICAgIGNvbnN0IGNvbG9ycyA9IEFwcENvbG9ycygKICAgICAgc3VjY2VzczogQ29sb3IoMHhGRjE2QTM0QSksCiAgICAgIG9uU3VjY2VzczogQ29sb3IoMHhGRkZGRkZGRiksCiAgICAgIHdhcm5pbmc6IENvbG9yKDB4RkZDQThBMDQpLAogICAgICBvbldhcm5pbmc6IENvbG9yKDB4RkZGRkZGRkYpLAogICAgICBpbmZvOiBDb2xvcigweEZGMjU2M0VCKSwKICAgICAgb25JbmZvOiBDb2xvcigweEZGRkZGRkZGKSwKICAgICk7CgogICAgdGVzdCgnY29weVdpdGggcmV0dXJucyBhIG5ldyBpbnN0YW5jZSB3aXRoIHVwZGF0ZWQgdmFsdWVzJywgKCkgewogICAgICBmaW5hbCB1cGRhdGVkID0gY29sb3JzLmNvcHlXaXRoKHN1Y2Nlc3M6IGNvbnN0IENvbG9yKDB4RkYwMDAwMDApKTsKICAgICAgZXhwZWN0KHVwZGF0ZWQuc3VjY2VzcywgY29uc3QgQ29sb3IoMHhGRjAwMDAwMCkpOwogICAgICBleHBlY3QodXBkYXRlZC5vblN1Y2Nlc3MsIGNvbG9ycy5vblN1Y2Nlc3MpOwogICAgICBleHBlY3QodXBkYXRlZC53YXJuaW5nLCBjb2xvcnMud2FybmluZyk7CiAgICAgIGV4cGVjdCh1cGRhdGVkLm9uV2FybmluZywgY29sb3JzLm9uV2FybmluZyk7CiAgICAgIGV4cGVjdCh1cGRhdGVkLmluZm8sIGNvbG9ycy5pbmZvKTsKICAgICAgZXhwZWN0KHVwZGF0ZWQub25JbmZvLCBjb2xvcnMub25JbmZvKTsKICAgIH0pOwoKICAgIHRlc3QoJ2NvcHlXaXRoIHJldHVybnMgaWRlbnRpY2FsIGluc3RhbmNlIHdoZW4gbm8gdmFsdWVzIGFyZSBwcm92aWRlZCcsICgpIHsKICAgICAgZmluYWwgY29weSA9IGNvbG9ycy5jb3B5V2l0aCgpOwogICAgICBleHBlY3QoY29weS5zdWNjZXNzLCBjb2xvcnMuc3VjY2Vzcyk7CiAgICAgIGV4cGVjdChjb3B5Lm9uU3VjY2VzcywgY29sb3JzLm9uU3VjY2Vzcyk7CiAgICAgIGV4cGVjdChjb3B5Lndhcm5pbmcsIGNvbG9ycy53YXJuaW5nKTsKICAgICAgZXhwZWN0KGNvcHkub25XYXJuaW5nLCBjb2xvcnMub25XYXJuaW5nKTsKICAgICAgZXhwZWN0KGNvcHkuaW5mbywgY29sb3JzLmluZm8pOwogICAgICBleHBlY3QoY29weS5vbkluZm8sIGNvbG9ycy5vbkluZm8pOwogICAgfSk7CgogICAgdGVzdCgnbGVycCByZXR1cm5zIHRoaXMgd2hlbiBvdGhlciBpcyBub3QgQXBwQ29sb3JzJywgKCkgewogICAgICBmaW5hbCByZXN1bHQgPSBjb2xvcnMubGVycChudWxsLCAwLjUpOwogICAgICBleHBlY3QocmVzdWx0LCBjb2xvcnMpOwogICAgfSk7CgogICAgdGVzdCgnbGVycCBpbnRlcnBvbGF0ZXMgYmV0d2VlbiB0d28gQXBwQ29sb3JzJywgKCkgewogICAgICBjb25zdCBvdGhlciA9IEFwcENvbG9ycygKICAgICAgICBzdWNjZXNzOiBDb2xvcigweEZGMDAwMDAwKSwKICAgICAgICBvblN1Y2Nlc3M6IENvbG9yKDB4RkYwMDAwMDApLAogICAgICAgIHdhcm5pbmc6IENvbG9yKDB4RkYwMDAwMDApLAogICAgICAgIG9uV2FybmluZzogQ29sb3IoMHhGRjAwMDAwMCksCiAgICAgICAgaW5mbzogQ29sb3IoMHhGRjAwMDAwMCksCiAgICAgICAgb25JbmZvOiBDb2xvcigweEZGMDAwMDAwKSwKICAgICAgKTsKCiAgICAgIGZpbmFsIHJlc3VsdCA9IGNvbG9ycy5sZXJwKG90aGVyLCAwLjUpOwogICAgICBleHBlY3QocmVzdWx0LnN1Y2Nlc3MsIGlzTm90TnVsbCk7CiAgICAgIGV4cGVjdChyZXN1bHQub25TdWNjZXNzLCBpc05vdE51bGwpOwogICAgICBleHBlY3QocmVzdWx0Lndhcm5pbmcsIGlzTm90TnVsbCk7CiAgICAgIGV4cGVjdChyZXN1bHQub25XYXJuaW5nLCBpc05vdE51bGwpOwogICAgICBleHBlY3QocmVzdWx0LmluZm8sIGlzTm90TnVsbCk7CiAgICAgIGV4cGVjdChyZXN1bHQub25JbmZvLCBpc05vdE51bGwpOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text", + }, + { + "path": "test/src/theme/app_spacing_test.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXJfdGVzdC9mbHV0dGVyX3Rlc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ0FwcFNwYWNpbmcnLCAoKSB7CiAgICBjb25zdCBzcGFjaW5nID0gQXBwU3BhY2luZygpOwoKICAgIHRlc3QoJ2hhcyBjb3JyZWN0IGRlZmF1bHQgdmFsdWVzJywgKCkgewogICAgICBleHBlY3Qoc3BhY2luZy54eHMsIDQpOwogICAgICBleHBlY3Qoc3BhY2luZy54cywgOCk7CiAgICAgIGV4cGVjdChzcGFjaW5nLnNtLCAxMik7CiAgICAgIGV4cGVjdChzcGFjaW5nLm1kLCAxNik7CiAgICAgIGV4cGVjdChzcGFjaW5nLmxnLCAyNCk7CiAgICAgIGV4cGVjdChzcGFjaW5nLnhsZywgMzIpOwogICAgICBleHBlY3Qoc3BhY2luZy54eGxnLCA0OCk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb3B5V2l0aCByZXR1cm5zIGEgbmV3IGluc3RhbmNlIHdpdGggdXBkYXRlZCB2YWx1ZXMnLCAoKSB7CiAgICAgIGZpbmFsIHVwZGF0ZWQgPSBzcGFjaW5nLmNvcHlXaXRoKHh4czogMiwgbWQ6IDIwKTsKICAgICAgZXhwZWN0KHVwZGF0ZWQueHhzLCAyKTsKICAgICAgZXhwZWN0KHVwZGF0ZWQueHMsIHNwYWNpbmcueHMpOwogICAgICBleHBlY3QodXBkYXRlZC5zbSwgc3BhY2luZy5zbSk7CiAgICAgIGV4cGVjdCh1cGRhdGVkLm1kLCAyMCk7CiAgICAgIGV4cGVjdCh1cGRhdGVkLmxnLCBzcGFjaW5nLmxnKTsKICAgICAgZXhwZWN0KHVwZGF0ZWQueGxnLCBzcGFjaW5nLnhsZyk7CiAgICAgIGV4cGVjdCh1cGRhdGVkLnh4bGcsIHNwYWNpbmcueHhsZyk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb3B5V2l0aCByZXR1cm5zIGlkZW50aWNhbCBpbnN0YW5jZSB3aGVuIG5vIHZhbHVlcyBhcmUgcHJvdmlkZWQnLCAoKSB7CiAgICAgIGZpbmFsIGNvcHkgPSBzcGFjaW5nLmNvcHlXaXRoKCk7CiAgICAgIGV4cGVjdChjb3B5Lnh4cywgc3BhY2luZy54eHMpOwogICAgICBleHBlY3QoY29weS54cywgc3BhY2luZy54cyk7CiAgICAgIGV4cGVjdChjb3B5LnNtLCBzcGFjaW5nLnNtKTsKICAgICAgZXhwZWN0KGNvcHkubWQsIHNwYWNpbmcubWQpOwogICAgICBleHBlY3QoY29weS5sZywgc3BhY2luZy5sZyk7CiAgICAgIGV4cGVjdChjb3B5LnhsZywgc3BhY2luZy54bGcpOwogICAgICBleHBlY3QoY29weS54eGxnLCBzcGFjaW5nLnh4bGcpOwogICAgfSk7CgogICAgdGVzdCgnbGVycCByZXR1cm5zIHRoaXMgd2hlbiBvdGhlciBpcyBub3QgQXBwU3BhY2luZycsICgpIHsKICAgICAgZmluYWwgcmVzdWx0ID0gc3BhY2luZy5sZXJwKG51bGwsIDAuNSk7CiAgICAgIGV4cGVjdChyZXN1bHQsIHNwYWNpbmcpOwogICAgfSk7CgogICAgdGVzdCgnbGVycCBpbnRlcnBvbGF0ZXMgYmV0d2VlbiB0d28gQXBwU3BhY2luZyBpbnN0YW5jZXMnLCAoKSB7CiAgICAgIGNvbnN0IG90aGVyID0gQXBwU3BhY2luZygKICAgICAgICB4eHM6IDgsCiAgICAgICAgeHM6IDE2LAogICAgICAgIHNtOiAyNCwKICAgICAgICBtZDogMzIsCiAgICAgICAgbGc6IDQ4LAogICAgICAgIHhsZzogNjQsCiAgICAgICAgeHhsZzogOTYsCiAgICAgICk7CgogICAgICBmaW5hbCByZXN1bHQgPSBzcGFjaW5nLmxlcnAob3RoZXIsIDAuNSk7CiAgICAgIGV4cGVjdChyZXN1bHQueHhzLCA2KTsKICAgICAgZXhwZWN0KHJlc3VsdC54cywgMTIpOwogICAgICBleHBlY3QocmVzdWx0LnNtLCAxOCk7CiAgICAgIGV4cGVjdChyZXN1bHQubWQsIDI0KTsKICAgICAgZXhwZWN0KHJlc3VsdC5sZywgMzYpOwogICAgICBleHBlY3QocmVzdWx0LnhsZywgNDgpOwogICAgICBleHBlY3QocmVzdWx0Lnh4bGcsIDcyKTsKICAgIH0pOwogIH0pOwp9Cg==", + "type": "text", + }, + { + "path": "test/src/theme/app_theme_test.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXJfdGVzdC9mbHV0dGVyX3Rlc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ0FwcFRoZW1lJywgKCkgewogICAgZ3JvdXAoJ2xpZ2h0JywgKCkgewogICAgICB0ZXN0KCdyZXR1cm5zIGEgVGhlbWVEYXRhJywgKCkgewogICAgICAgIGV4cGVjdChBcHBUaGVtZS5saWdodCwgaXNBPFRoZW1lRGF0YT4oKSk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgnaGFzIEFwcENvbG9ycyBleHRlbnNpb24nLCAoKSB7CiAgICAgICAgZXhwZWN0KEFwcFRoZW1lLmxpZ2h0LmV4dGVuc2lvbjxBcHBDb2xvcnM+KCksIGlzTm90TnVsbCk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgnaGFzIEFwcFNwYWNpbmcgZXh0ZW5zaW9uJywgKCkgewogICAgICAgIGV4cGVjdChBcHBUaGVtZS5saWdodC5leHRlbnNpb248QXBwU3BhY2luZz4oKSwgaXNOb3ROdWxsKTsKICAgICAgfSk7CgogICAgICB0ZXN0KCdoYXMgbGlnaHQgYnJpZ2h0bmVzcycsICgpIHsKICAgICAgICBleHBlY3QoQXBwVGhlbWUubGlnaHQuYnJpZ2h0bmVzcywgQnJpZ2h0bmVzcy5saWdodCk7CiAgICAgIH0pOwogICAgfSk7CgogICAgZ3JvdXAoJ2RhcmsnLCAoKSB7CiAgICAgIHRlc3QoJ3JldHVybnMgYSBUaGVtZURhdGEnLCAoKSB7CiAgICAgICAgZXhwZWN0KEFwcFRoZW1lLmRhcmssIGlzQTxUaGVtZURhdGE+KCkpOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ2hhcyBBcHBDb2xvcnMgZXh0ZW5zaW9uJywgKCkgewogICAgICAgIGV4cGVjdChBcHBUaGVtZS5kYXJrLmV4dGVuc2lvbjxBcHBDb2xvcnM+KCksIGlzTm90TnVsbCk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgnaGFzIEFwcFNwYWNpbmcgZXh0ZW5zaW9uJywgKCkgewogICAgICAgIGV4cGVjdChBcHBUaGVtZS5kYXJrLmV4dGVuc2lvbjxBcHBTcGFjaW5nPigpLCBpc05vdE51bGwpOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ2hhcyBkYXJrIGJyaWdodG5lc3MnLCAoKSB7CiAgICAgICAgZXhwZWN0KEFwcFRoZW1lLmRhcmsuYnJpZ2h0bmVzcywgQnJpZ2h0bmVzcy5kYXJrKTsKICAgICAgfSk7CiAgICB9KTsKICB9KTsKfQo=", + "type": "text", + }, + { + "path": "test/src/widgets/app_button_test.dart", + "data": + "Ly8gTm90IHJlcXVpcmVkIGZvciB0ZXN0IGZpbGVzLgovLyBpZ25vcmVfZm9yX2ZpbGU6IHByZWZlcl9jb25zdF9jb25zdHJ1Y3RvcnMKCmltcG9ydCAncGFja2FnZTpmbHV0dGVyX3Rlc3QvZmx1dHRlcl90ZXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6e3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fS97e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19LmRhcnQnOwoKaW1wb3J0ICcuLi8uLi9oZWxwZXJzL2hlbHBlcnMuZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ0FwcEJ1dHRvbicsICgpIHsKICAgIHRlc3RXaWRnZXRzKCdyZW5kZXJzIGNoaWxkJywgKHRlc3RlcikgYXN5bmMgewogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcChBcHBCdXR0b24ob25QcmVzc2VkOiAoKSB7fSwgY2hpbGQ6IFRleHQoJ1RhcCBtZScpKSk7CgogICAgICBleHBlY3QoZmluZC50ZXh0KCdUYXAgbWUnKSwgZmluZHNPbmVXaWRnZXQpOwogICAgfSk7CgogICAgdGVzdFdpZGdldHMoJ2NhbGxzIG9uUHJlc3NlZCB3aGVuIHRhcHBlZCcsICh0ZXN0ZXIpIGFzeW5jIHsKICAgICAgdmFyIHRhcHBlZCA9IGZhbHNlOwogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcCgKICAgICAgICBBcHBCdXR0b24ob25QcmVzc2VkOiAoKSA9PiB0YXBwZWQgPSB0cnVlLCBjaGlsZDogVGV4dCgnVGFwIG1lJykpLAogICAgICApOwoKICAgICAgYXdhaXQgdGVzdGVyLnRhcChmaW5kLmJ5VHlwZShBcHBCdXR0b24pKTsKICAgICAgZXhwZWN0KHRhcHBlZCwgaXNUcnVlKTsKICAgIH0pOwoKICAgIHRlc3RXaWRnZXRzKCdkb2VzIG5vdCBjYWxsIG9uUHJlc3NlZCB3aGVuIGRpc2FibGVkJywgKHRlc3RlcikgYXN5bmMgewogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcChBcHBCdXR0b24ob25QcmVzc2VkOiBudWxsLCBjaGlsZDogVGV4dCgnRGlzYWJsZWQnKSkpOwoKICAgICAgYXdhaXQgdGVzdGVyLnRhcChmaW5kLmJ5VHlwZShBcHBCdXR0b24pKTsKICAgIH0pOwoKICAgIHRlc3RXaWRnZXRzKCdyZW5kZXJzIEZpbGxlZEJ1dHRvbiBmb3IgcHJpbWFyeSB2YXJpYW50JywgKHRlc3RlcikgYXN5bmMgewogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcChBcHBCdXR0b24ob25QcmVzc2VkOiAoKSB7fSwgY2hpbGQ6IFRleHQoJ1ByaW1hcnknKSkpOwoKICAgICAgZXhwZWN0KGZpbmQuYnlUeXBlKEZpbGxlZEJ1dHRvbiksIGZpbmRzT25lV2lkZ2V0KTsKICAgIH0pOwoKICAgIHRlc3RXaWRnZXRzKCdyZW5kZXJzIEZpbGxlZEJ1dHRvbi50b25hbCBmb3Igc2Vjb25kYXJ5IHZhcmlhbnQnLCAoCiAgICAgIHRlc3RlciwKICAgICkgYXN5bmMgewogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcCgKICAgICAgICBBcHBCdXR0b24oCiAgICAgICAgICBvblByZXNzZWQ6ICgpIHt9LAogICAgICAgICAgdmFyaWFudDogQXBwQnV0dG9uVmFyaWFudC5zZWNvbmRhcnksCiAgICAgICAgICBjaGlsZDogVGV4dCgnU2Vjb25kYXJ5JyksCiAgICAgICAgKSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChmaW5kLmJ5VHlwZShGaWxsZWRCdXR0b24pLCBmaW5kc09uZVdpZGdldCk7CiAgICB9KTsKCiAgICB0ZXN0V2lkZ2V0cygncmVuZGVycyBPdXRsaW5lZEJ1dHRvbiBmb3Igb3V0bGluZSB2YXJpYW50JywgKHRlc3RlcikgYXN5bmMgewogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcCgKICAgICAgICBBcHBCdXR0b24oCiAgICAgICAgICBvblByZXNzZWQ6ICgpIHt9LAogICAgICAgICAgdmFyaWFudDogQXBwQnV0dG9uVmFyaWFudC5vdXRsaW5lLAogICAgICAgICAgY2hpbGQ6IFRleHQoJ091dGxpbmUnKSwKICAgICAgICApLAogICAgICApOwoKICAgICAgZXhwZWN0KGZpbmQuYnlUeXBlKE91dGxpbmVkQnV0dG9uKSwgZmluZHNPbmVXaWRnZXQpOwogICAgfSk7CgogICAgdGVzdFdpZGdldHMoJ3JlbmRlcnMgd2l0aCBzbWFsbCBzaXplJywgKHRlc3RlcikgYXN5bmMgewogICAgICBhd2FpdCB0ZXN0ZXIucHVtcEFwcCgKICAgICAgICBBcHBCdXR0b24oCiAgICAgICAgICBvblByZXNzZWQ6ICgpIHt9LAogICAgICAgICAgc2l6ZTogQXBwQnV0dG9uU2l6ZS5zbWFsbCwKICAgICAgICAgIGNoaWxkOiBUZXh0KCdTbWFsbCcpLAogICAgICAgICksCiAgICAgICk7CgogICAgICBleHBlY3QoZmluZC50ZXh0KCdTbWFsbCcpLCBmaW5kc09uZVdpZGdldCk7CiAgICB9KTsKCiAgICB0ZXN0V2lkZ2V0cygncmVuZGVycyB3aXRoIGxhcmdlIHNpemUnLCAodGVzdGVyKSBhc3luYyB7CiAgICAgIGF3YWl0IHRlc3Rlci5wdW1wQXBwKAogICAgICAgIEFwcEJ1dHRvbigKICAgICAgICAgIG9uUHJlc3NlZDogKCkge30sCiAgICAgICAgICBzaXplOiBBcHBCdXR0b25TaXplLmxhcmdlLAogICAgICAgICAgY2hpbGQ6IFRleHQoJ0xhcmdlJyksCiAgICAgICAgKSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChmaW5kLnRleHQoJ0xhcmdlJyksIGZpbmRzT25lV2lkZ2V0KTsKICAgIH0pOwogIH0pOwp9Cg==", + "type": "text", + }, + { + "path": "widgetbook/.gitignore", + "data": + "IyBNaXNjZWxsYW5lb3VzCiouY2xhc3MKKi5sb2cKKi5weWMKKi5zd3AKLkRTX1N0b3JlCi5hdG9tLwouYnVpbGRsb2cvCi5oaXN0b3J5Ci5zdm4vCm1pZ3JhdGVfd29ya2luZ19kaXIvCgojIEludGVsbGlKIHJlbGF0ZWQKKi5pbWwKKi5pcHIKKi5pd3MKLmlkZWEvCgojIFZTQ29kZSByZWxhdGVkCi52c2NvZGUvKgoKIyBGbHV0dGVyL0RhcnQvUHViIHJlbGF0ZWQKKiovZG9jL2FwaS8KLmRhcnRfdG9vbC8KLmZsdXR0ZXItcGx1Z2lucwouZmx1dHRlci1wbHVnaW5zLWRlcGVuZGVuY2llcwoucGFja2FnZXMKLnB1Yi1jYWNoZS8KLnB1Yi8KL2J1aWxkLwpwdWJzcGVjLmxvY2sKCiMgVGVzdCByZWxhdGVkCmNvdmVyYWdlCg==", + "type": "text", + }, + { + "path": "widgetbook/analysis_options.yaml", + "data": + "aW5jbHVkZTogcGFja2FnZTp2ZXJ5X2dvb2RfYW5hbHlzaXMvYW5hbHlzaXNfb3B0aW9ucy55YW1sCgphbmFseXplcjoKICBleGNsdWRlOgogICAgLSAiKiovKi5nLmRhcnQiCg==", + "type": "text", + }, + { + "path": "widgetbook/lib/main.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXIvbWF0ZXJpYWwuZGFydCc7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rX2NhdGFsb2cvd2lkZ2V0Ym9vay93aWRnZXRib29rLmRhcnQnOwoKdm9pZCBtYWluKCkgewogIFdpZGdldHNGbHV0dGVyQmluZGluZy5lbnN1cmVJbml0aWFsaXplZCgpOwogIHJ1bkFwcChjb25zdCBXaWRnZXRib29rQXBwKCkpOwp9Cg==", + "type": "text", + }, + { + "path": "widgetbook/lib/widgetbook/use_cases/app_button.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXIvbWF0ZXJpYWwuZGFydCc7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rX2Fubm90YXRpb24vd2lkZ2V0Ym9va19hbm5vdGF0aW9uLmRhcnQnIGFzIHdpZGdldGJvb2s7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7CgovLy8gUHJpbWFyeSBbQXBwQnV0dG9uXSB1c2UgY2FzZS4KQHdpZGdldGJvb2suVXNlQ2FzZShuYW1lOiAncHJpbWFyeScsIHR5cGU6IEFwcEJ1dHRvbikKV2lkZ2V0IHByaW1hcnkoQnVpbGRDb250ZXh0IGNvbnRleHQpID0+IENlbnRlcigKICBjaGlsZDogQXBwQnV0dG9uKG9uUHJlc3NlZDogKCkge30sIGNoaWxkOiBjb25zdCBUZXh0KCdQcmltYXJ5JykpLAopOwoKLy8vIFNlY29uZGFyeSBbQXBwQnV0dG9uXSB1c2UgY2FzZS4KQHdpZGdldGJvb2suVXNlQ2FzZShuYW1lOiAnc2Vjb25kYXJ5JywgdHlwZTogQXBwQnV0dG9uKQpXaWRnZXQgc2Vjb25kYXJ5KEJ1aWxkQ29udGV4dCBjb250ZXh0KSA9PiBDZW50ZXIoCiAgY2hpbGQ6IEFwcEJ1dHRvbigKICAgIG9uUHJlc3NlZDogKCkge30sCiAgICB2YXJpYW50OiBBcHBCdXR0b25WYXJpYW50LnNlY29uZGFyeSwKICAgIGNoaWxkOiBjb25zdCBUZXh0KCdTZWNvbmRhcnknKSwKICApLAopOwoKLy8vIE91dGxpbmUgW0FwcEJ1dHRvbl0gdXNlIGNhc2UuCkB3aWRnZXRib29rLlVzZUNhc2UobmFtZTogJ291dGxpbmUnLCB0eXBlOiBBcHBCdXR0b24pCldpZGdldCBvdXRsaW5lKEJ1aWxkQ29udGV4dCBjb250ZXh0KSA9PiBDZW50ZXIoCiAgY2hpbGQ6IEFwcEJ1dHRvbigKICAgIG9uUHJlc3NlZDogKCkge30sCiAgICB2YXJpYW50OiBBcHBCdXR0b25WYXJpYW50Lm91dGxpbmUsCiAgICBjaGlsZDogY29uc3QgVGV4dCgnT3V0bGluZScpLAogICksCik7CgovLy8gRGlzYWJsZWQgW0FwcEJ1dHRvbl0gdXNlIGNhc2UuCkB3aWRnZXRib29rLlVzZUNhc2UobmFtZTogJ2Rpc2FibGVkJywgdHlwZTogQXBwQnV0dG9uKQpXaWRnZXQgZGlzYWJsZWQoQnVpbGRDb250ZXh0IGNvbnRleHQpID0+CiAgICBjb25zdCBDZW50ZXIoY2hpbGQ6IEFwcEJ1dHRvbihvblByZXNzZWQ6IG51bGwsIGNoaWxkOiBUZXh0KCdEaXNhYmxlZCcpKSk7CgovLy8gQWxsIHNpemVzIFtBcHBCdXR0b25dIHVzZSBjYXNlLgpAd2lkZ2V0Ym9vay5Vc2VDYXNlKG5hbWU6ICdhbGwgc2l6ZXMnLCB0eXBlOiBBcHBCdXR0b24pCldpZGdldCBhbGxTaXplcyhCdWlsZENvbnRleHQgY29udGV4dCkgPT4gQ2VudGVyKAogIGNoaWxkOiBDb2x1bW4oCiAgICBtYWluQXhpc1NpemU6IE1haW5BeGlzU2l6ZS5taW4sCiAgICBzcGFjaW5nOiA4LAogICAgY2hpbGRyZW46IFsKICAgICAgZm9yIChmaW5hbCBzaXplIGluIEFwcEJ1dHRvblNpemUudmFsdWVzKQogICAgICAgIEFwcEJ1dHRvbihvblByZXNzZWQ6ICgpIHt9LCBzaXplOiBzaXplLCBjaGlsZDogVGV4dChzaXplLm5hbWUpKSwKICAgIF0sCiAgKSwKKTsK", + "type": "text", + }, + { + "path": "widgetbook/lib/widgetbook/widgetbook.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXIvbWF0ZXJpYWwuZGFydCc7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rL3dpZGdldGJvb2suZGFydCc7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rX2Fubm90YXRpb24vd2lkZ2V0Ym9va19hbm5vdGF0aW9uLmRhcnQnIGFzIHdpZGdldGJvb2s7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rX2NhdGFsb2cvd2lkZ2V0Ym9vay93aWRnZXRib29rLmRpcmVjdG9yaWVzLmcuZGFydCc7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rX2NhdGFsb2cvd2lkZ2V0Ym9vay93aWRnZXRzL3dpZGdldHMuZGFydCc7CmltcG9ydCAncGFja2FnZTp7e3Byb2plY3RfbmFtZS5zbmFrZUNhc2UoKX19L3t7cHJvamVjdF9uYW1lLnNuYWtlQ2FzZSgpfX0uZGFydCc7CgovLy8gVGhlIFdpZGdldGJvb2sgY2F0YWxvZyBhcHAuCkB3aWRnZXRib29rLkFwcCgpCmNsYXNzIFdpZGdldGJvb2tBcHAgZXh0ZW5kcyBTdGF0ZWxlc3NXaWRnZXQgewogIC8vLyBDcmVhdGVzIGEgW1dpZGdldGJvb2tBcHBdLgogIGNvbnN0IFdpZGdldGJvb2tBcHAoe3N1cGVyLmtleX0pOwoKICBAb3ZlcnJpZGUKICBXaWRnZXQgYnVpbGQoQnVpbGRDb250ZXh0IGNvbnRleHQpIHsKICAgIHJldHVybiBXaWRnZXRib29rLm1hdGVyaWFsKAogICAgICBkaXJlY3RvcmllczogZGlyZWN0b3JpZXMsCiAgICAgIGFkZG9uczogWwogICAgICAgIEJ1aWxkZXJBZGRvbigKICAgICAgICAgIG5hbWU6ICdEZWNvcmF0b3InLAogICAgICAgICAgYnVpbGRlcjogKGNvbnRleHQsIGNoaWxkKSB7CiAgICAgICAgICAgIHJldHVybiBVc2VDYXNlRGVjb3JhdG9yKGNoaWxkOiBjaGlsZCk7CiAgICAgICAgICB9LAogICAgICAgICksCiAgICAgICAgVGhlbWVBZGRvbigKICAgICAgICAgIHRoZW1lczogWwogICAgICAgICAgICBXaWRnZXRib29rVGhlbWUobmFtZTogJ0xpZ2h0JywgZGF0YTogQXBwVGhlbWUubGlnaHQpLAogICAgICAgICAgICBXaWRnZXRib29rVGhlbWUobmFtZTogJ0RhcmsnLCBkYXRhOiBBcHBUaGVtZS5kYXJrKSwKICAgICAgICAgIF0sCiAgICAgICAgICB0aGVtZUJ1aWxkZXI6IChjb250ZXh0LCB0aGVtZSwgY2hpbGQpIHsKICAgICAgICAgICAgcmV0dXJuIFRoZW1lKAogICAgICAgICAgICAgIGRhdGE6IHRoZW1lLAogICAgICAgICAgICAgIGNoaWxkOiBEZWZhdWx0VGV4dFN0eWxlKAogICAgICAgICAgICAgICAgc3R5bGU6IHRoZW1lLnRleHRUaGVtZS5ib2R5TWVkaXVtID8/IGNvbnN0IFRleHRTdHlsZSgpLAogICAgICAgICAgICAgICAgY2hpbGQ6IGNoaWxkLAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgICksCiAgICAgIF0sCiAgICApOwogIH0KfQo=", + "type": "text", + }, + { + "path": "widgetbook/lib/widgetbook/widgetbook.directories.g.dart", + "data": + "Ly8gZGFydCBmb3JtYXQgd2lkdGg9ODAKLy8gY292ZXJhZ2U6aWdub3JlLWZpbGUKLy8gaWdub3JlX2Zvcl9maWxlOiB0eXBlPWxpbnQKLy8gaWdub3JlX2Zvcl9maWxlOiB1bnVzZWRfaW1wb3J0LCBwcmVmZXJfcmVsYXRpdmVfaW1wb3J0cywgZGlyZWN0aXZlc19vcmRlcmluZwoKLy8gR0VORVJBVEVEIENPREUgLSBETyBOT1QgTU9ESUZZIEJZIEhBTkQKCi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIEFwcEdlbmVyYXRvcgovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKLy8gaWdub3JlX2Zvcl9maWxlOiBub19sZWFkaW5nX3VuZGVyc2NvcmVzX2Zvcl9saWJyYXJ5X3ByZWZpeGVzCmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rL3dpZGdldGJvb2suZGFydCcgYXMgX3dpZGdldGJvb2s7CmltcG9ydCAncGFja2FnZTp3aWRnZXRib29rX2NhdGFsb2cvd2lkZ2V0Ym9vay91c2VfY2FzZXMvYXBwX2J1dHRvbi5kYXJ0JwogICAgYXMgX3dpZGdldGJvb2tfY2F0YWxvZ193aWRnZXRib29rX3VzZV9jYXNlc19hcHBfYnV0dG9uOwoKZmluYWwgZGlyZWN0b3JpZXMgPSA8X3dpZGdldGJvb2suV2lkZ2V0Ym9va05vZGU+WwogIF93aWRnZXRib29rLldpZGdldGJvb2tGb2xkZXIoCiAgICBuYW1lOiAnd2lkZ2V0cycsCiAgICBjaGlsZHJlbjogWwogICAgICBfd2lkZ2V0Ym9vay5XaWRnZXRib29rQ29tcG9uZW50KAogICAgICAgIG5hbWU6ICdBcHBCdXR0b24nLAogICAgICAgIHVzZUNhc2VzOiBbCiAgICAgICAgICBfd2lkZ2V0Ym9vay5XaWRnZXRib29rVXNlQ2FzZSgKICAgICAgICAgICAgbmFtZTogJ2FsbCBzaXplcycsCiAgICAgICAgICAgIGJ1aWxkZXI6CiAgICAgICAgICAgICAgICBfd2lkZ2V0Ym9va19jYXRhbG9nX3dpZGdldGJvb2tfdXNlX2Nhc2VzX2FwcF9idXR0b24uYWxsU2l6ZXMsCiAgICAgICAgICApLAogICAgICAgICAgX3dpZGdldGJvb2suV2lkZ2V0Ym9va1VzZUNhc2UoCiAgICAgICAgICAgIG5hbWU6ICdkaXNhYmxlZCcsCiAgICAgICAgICAgIGJ1aWxkZXI6CiAgICAgICAgICAgICAgICBfd2lkZ2V0Ym9va19jYXRhbG9nX3dpZGdldGJvb2tfdXNlX2Nhc2VzX2FwcF9idXR0b24uZGlzYWJsZWQsCiAgICAgICAgICApLAogICAgICAgICAgX3dpZGdldGJvb2suV2lkZ2V0Ym9va1VzZUNhc2UoCiAgICAgICAgICAgIG5hbWU6ICdvdXRsaW5lJywKICAgICAgICAgICAgYnVpbGRlcjoKICAgICAgICAgICAgICAgIF93aWRnZXRib29rX2NhdGFsb2dfd2lkZ2V0Ym9va191c2VfY2FzZXNfYXBwX2J1dHRvbi5vdXRsaW5lLAogICAgICAgICAgKSwKICAgICAgICAgIF93aWRnZXRib29rLldpZGdldGJvb2tVc2VDYXNlKAogICAgICAgICAgICBuYW1lOiAncHJpbWFyeScsCiAgICAgICAgICAgIGJ1aWxkZXI6CiAgICAgICAgICAgICAgICBfd2lkZ2V0Ym9va19jYXRhbG9nX3dpZGdldGJvb2tfdXNlX2Nhc2VzX2FwcF9idXR0b24ucHJpbWFyeSwKICAgICAgICAgICksCiAgICAgICAgICBfd2lkZ2V0Ym9vay5XaWRnZXRib29rVXNlQ2FzZSgKICAgICAgICAgICAgbmFtZTogJ3NlY29uZGFyeScsCiAgICAgICAgICAgIGJ1aWxkZXI6CiAgICAgICAgICAgICAgICBfd2lkZ2V0Ym9va19jYXRhbG9nX3dpZGdldGJvb2tfdXNlX2Nhc2VzX2FwcF9idXR0b24uc2Vjb25kYXJ5LAogICAgICAgICAgKSwKICAgICAgICBdLAogICAgICApLAogICAgXSwKICApLApdOwo=", + "type": "text", + }, + { + "path": "widgetbook/lib/widgetbook/widgets/use_case_decorator.dart", + "data": + "aW1wb3J0ICdwYWNrYWdlOmZsdXR0ZXIvbWF0ZXJpYWwuZGFydCc7CgovLy8gQSBkZWNvcmF0b3IgdGhhdCB3cmFwcyBldmVyeSB1c2UgY2FzZSB3aXRoIGEgY29uc2lzdGVudCBiYWNrZ3JvdW5kLgpjbGFzcyBVc2VDYXNlRGVjb3JhdG9yIGV4dGVuZHMgU3RhdGVsZXNzV2lkZ2V0IHsKICAvLy8gQ3JlYXRlcyBhIFtVc2VDYXNlRGVjb3JhdG9yXS4KICBjb25zdCBVc2VDYXNlRGVjb3JhdG9yKHtyZXF1aXJlZCB0aGlzLmNoaWxkLCBzdXBlci5rZXl9KTsKCiAgLy8vIFRoZSB1c2UgY2FzZSB3aWRnZXQgdG8gd3JhcC4KICBmaW5hbCBXaWRnZXQgY2hpbGQ7CgogIEBvdmVycmlkZQogIFdpZGdldCBidWlsZChCdWlsZENvbnRleHQgY29udGV4dCkgewogICAgZmluYWwgY29sb3JTY2hlbWUgPSBUaGVtZS5vZihjb250ZXh0KS5jb2xvclNjaGVtZTsKICAgIHJldHVybiBDb2xvcmVkQm94KAogICAgICBjb2xvcjogY29sb3JTY2hlbWUuc3VyZmFjZUNvbnRhaW5lckhpZ2hlc3QsCiAgICAgIGNoaWxkOiBTaXplZEJveC5leHBhbmQoY2hpbGQ6IE1hdGVyaWFsKGNoaWxkOiBjaGlsZCkpLAogICAgKTsKICB9Cn0K", + "type": "text", + }, + { + "path": "widgetbook/lib/widgetbook/widgets/widgets.dart", + "data": "ZXhwb3J0ICd1c2VfY2FzZV9kZWNvcmF0b3IuZGFydCc7Cg==", + "type": "text", + }, + { + "path": "widgetbook/pubspec.yaml", + "data": + "bmFtZTogd2lkZ2V0Ym9va19jYXRhbG9nCmRlc2NyaXB0aW9uOiAiV2lkZ2V0Ym9vayBjYXRhbG9nIGZvciB7e3Byb2plY3RfbmFtZS50aXRsZUNhc2UoKX19IgpwdWJsaXNoX3RvOiBub25lCnZlcnNpb246IDEuMC4wKzEKCmVudmlyb25tZW50OgogIHNkazogXjMuMTEuMAogIGZsdXR0ZXI6IF4zLjQxLjAKCmRlcGVuZGVuY2llczoKICBmbHV0dGVyOgogICAgc2RrOiBmbHV0dGVyCiAge3twcm9qZWN0X25hbWUuc25ha2VDYXNlKCl9fToKICAgIHBhdGg6IC4uCiAgd2lkZ2V0Ym9vazogXjMuMTAuMAogIHdpZGdldGJvb2tfYW5ub3RhdGlvbjogXjMuMi4wCgpkZXZfZGVwZW5kZW5jaWVzOgogIGJ1aWxkX3J1bm5lcjogXjIuNC4xNAogIGZsdXR0ZXJfdGVzdDoKICAgIHNkazogZmx1dHRlcgogIHZlcnlfZ29vZF9hbmFseXNpczogXjEwLjIuMAogIHdpZGdldGJvb2tfZ2VuZXJhdG9yOiBeMy4xMC4wCgpmbHV0dGVyOgogIHVzZXMtbWF0ZXJpYWwtZGVzaWduOiB0cnVlCg==", + "type": "text", + }, + ], + "hooks": [], + "name": "very_good_app_ui", + "description": + "A Very Good Flutter app UI package created by Very Good Ventures.", + "version": "0.1.0", + "environment": {"mason": "^0.1.0"}, + "repository": + "https://github.com/VeryGoodOpenSource/very_good_templates/tree/main/very_good_app_ui", + "readme": { + "path": "README.md", + "data": + "IyBWZXJ5IEdvb2QgQXBwIFVJCgpbIVtWZXJ5IEdvb2QgVmVudHVyZXNdW2xvZ29fd2hpdGVdXVt2ZXJ5X2dvb2RfdmVudHVyZXNfbGlua19kYXJrXQoKRGV2ZWxvcGVkIHdpdGgg8J+SmSBieSBbVmVyeSBHb29kIFZlbnR1cmVzXVt2ZXJ5X2dvb2RfdmVudHVyZXNfbGlua10g8J+mhAoKWyFbTGljZW5zZTogTUlUXVtsaWNlbnNlX2JhZGdlXV1bbGljZW5zZV9saW5rXQpbIVtQb3dlcmVkIGJ5IE1hc29uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2VuZHBvaW50P3VybD1odHRwcyUzQSUyRiUyRnRpbnl1cmwuY29tJTJGbWFzb24tYmFkZ2UpXShodHRwczovL2dpdGh1Yi5jb20vZmVsYW5nZWwvbWFzb24pCgpBIFZlcnkgR29vZCBGbHV0dGVyIGFwcCBVSSBwYWNrYWdlIGNyZWF0ZWQgYnkgVmVyeSBHb29kIFZlbnR1cmVzIPCfpoQuCgojIyBXaGF0J3MgSW5jbHVkZWQg4pyoCgotIOKchSBHaXRIdWIgV29ya2Zsb3cgcG93ZXJlZCBieSBbVmVyeSBHb29kIFdvcmtmbG93c11bdmVyeV9nb29kX3dvcmtmbG93c19saW5rXQotIOKchSBQdWxsIFJlcXVlc3QgVGVtcGxhdGUKLSDinIUgSXNzdWUgVGVtcGxhdGVzCi0g4pyFIERlcGVuZGFib3QgSW50ZWdyYXRpb24KLSDinIUgU3RyaWN0IGxpbnQgcnVsZXMgcG93ZXJlZCBieSBbVmVyeSBHb29kIEFuYWx5c2lzXVt2ZXJ5X2dvb2RfYW5hbHlzaXNfbGlua10KLSDinIUgMTAwJSBUZXN0IENvdmVyYWdlCi0g4pyFIEZ1bGx5IERvY3VtZW50ZWQgUHVibGljIEFQSQotIOKchSBNSVQgTGljZW5zZQotIOKchSBDaGFuZ2Vsb2cKLSDinIUgYFRoZW1lRXh0ZW5zaW9uYC1iYXNlZCB0aGVtaW5nIHdpdGggbGlnaHQgYW5kIGRhcmsgdmFyaWFudHMKLSDinIUgQ3VzdG9tIGNvbG9yIGFuZCBzcGFjaW5nIHRva2VucwotIOKchSBFeGFtcGxlIGBBcHBCdXR0b25gIHdpZGdldCBjb21wb3NpbmcgTWF0ZXJpYWwgd2lkZ2V0cwotIOKchSBgQnVpbGRDb250ZXh0YCBleHRlbnNpb25zIGZvciBlYXN5IHRoZW1lIGFjY2VzcwotIOKchSBXaWRnZXQgdGVzdCBoZWxwZXJzCi0g4pyFIFdpZGdldGJvb2sgY2F0YWxvZyBmb3IgYnJvd3Npbmcgd2lkZ2V0cyBpbiBpc29sYXRpb24KCiMjIE91dHB1dCDwn5OmCgpgYGBzaArilJzilIDilIAgLmdpdGh1YgrilIIgICDilJzilIDilIAgSVNTVUVfVEVNUExBVEUK4pSCICAg4pSCICAg4pSc4pSA4pSAIGJ1Z19yZXBvcnQubWQK4pSCICAg4pSCICAg4pSc4pSA4pSAIGJ1aWxkLm1kCuKUgiAgIOKUgiAgIOKUnOKUgOKUgCBjaG9yZS5tZArilIIgICDilIIgICDilJzilIDilIAgY2kubWQK4pSCICAg4pSCICAg4pSc4pSA4pSAIGNvbmZpZy55bWwK4pSCICAg4pSCICAg4pSc4pSA4pSAIGRvY3VtZW50YXRpb24ubWQK4pSCICAg4pSCICAg4pSc4pSA4pSAIGZlYXR1cmVfcmVxdWVzdC5tZArilIIgICDilIIgICDilJzilIDilIAgcGVyZm9ybWFuY2UubWQK4pSCICAg4pSCICAg4pSc4pSA4pSAIHJlZmFjdG9yLm1kCuKUgiAgIOKUgiAgIOKUnOKUgOKUgCByZXZlcnQubWQK4pSCICAg4pSCICAg4pSc4pSA4pSAIHN0eWxlLm1kCuKUgiAgIOKUgiAgIOKUlOKUgOKUgCB0ZXN0Lm1kCuKUgiAgIOKUnOKUgOKUgCBQVUxMX1JFUVVFU1RfVEVNUExBVEUubWQK4pSCICAg4pSc4pSA4pSAIGRlcGVuZGFib3QueWFtbArilIIgICDilJTilIDilIAgd29ya2Zsb3dzCuKUgiAgICAgICDilJTilIDilIAgbWFpbi55YW1sCuKUnOKUgOKUgCAuZ2l0aWdub3JlCuKUnOKUgOKUgCBDSEFOR0VMT0cubWQK4pSc4pSA4pSAIExJQ0VOU0UK4pSc4pSA4pSAIFJFQURNRS5tZArilJzilIDilIAgYW5hbHlzaXNfb3B0aW9ucy55YW1sCuKUnOKUgOKUgCBjb3ZlcmFnZV9iYWRnZS5zdmcK4pSc4pSA4pSAIGxpYgrilIIgICDilJzilIDilIAgc3JjCuKUgiAgIOKUgiAgIOKUnOKUgOKUgCBleHRlbnNpb25zCuKUgiAgIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBidWlsZF9jb250ZXh0X2V4dGVuc2lvbnMuZGFydArilIIgICDilIIgICDilJzilIDilIAgdGhlbWUK4pSCICAg4pSCICAg4pSCICAg4pSc4pSA4pSAIGFwcF9jb2xvcnMuZGFydArilIIgICDilIIgICDilIIgICDilJzilIDilIAgYXBwX3NwYWNpbmcuZGFydArilIIgICDilIIgICDilIIgICDilJTilIDilIAgYXBwX3RoZW1lLmRhcnQK4pSCICAg4pSCICAg4pSU4pSA4pSAIHdpZGdldHMK4pSCICAg4pSCICAgICAgIOKUlOKUgOKUgCBhcHBfYnV0dG9uLmRhcnQK4pSCICAg4pSU4pSA4pSAIG15X2FwcF91aS5kYXJ0CuKUnOKUgOKUgCBwdWJzcGVjLnlhbWwK4pSc4pSA4pSAIHRlc3QK4pSCICAg4pSc4pSA4pSAIGhlbHBlcnMK4pSCICAg4pSCICAg4pSc4pSA4pSAIGhlbHBlcnMuZGFydArilIIgICDilIIgICDilJTilIDilIAgcHVtcF9hcHAuZGFydArilIIgICDilJTilIDilIAgc3JjCuKUgiAgICAgICDilJzilIDilIAgdGhlbWUK4pSCICAgICAgIOKUgiAgIOKUnOKUgOKUgCBhcHBfY29sb3JzX3Rlc3QuZGFydArilIIgICAgICAg4pSCICAg4pSc4pSA4pSAIGFwcF9zcGFjaW5nX3Rlc3QuZGFydArilIIgICAgICAg4pSCICAg4pSU4pSA4pSAIGFwcF90aGVtZV90ZXN0LmRhcnQK4pSCICAgICAgIOKUlOKUgOKUgCB3aWRnZXRzCuKUgiAgICAgICAgICAg4pSU4pSA4pSAIGFwcF9idXR0b25fdGVzdC5kYXJ0CuKUlOKUgOKUgCB3aWRnZXRib29rCiAgICDilJzilIDilIAgLmdpdGlnbm9yZQogICAg4pSc4pSA4pSAIGFuYWx5c2lzX29wdGlvbnMueWFtbAogICAg4pSc4pSA4pSAIGxpYgogICAg4pSCICAg4pSc4pSA4pSAIG1haW4uZGFydAogICAg4pSCICAg4pSU4pSA4pSAIHdpZGdldGJvb2sKICAgIOKUgiAgICAgICDilJzilIDilIAgdXNlX2Nhc2VzCiAgICDilIIgICAgICAg4pSCICAg4pSU4pSA4pSAIGFwcF9idXR0b24uZGFydAogICAg4pSCICAgICAgIOKUnOKUgOKUgCB3aWRnZXRib29rLmRhcnQKICAgIOKUgiAgICAgICDilJTilIDilIAgd2lkZ2V0cwogICAg4pSCICAgICAgICAgICDilJzilIDilIAgdXNlX2Nhc2VfZGVjb3JhdG9yLmRhcnQKICAgIOKUgiAgICAgICAgICAg4pSU4pSA4pSAIHdpZGdldHMuZGFydAogICAg4pSU4pSA4pSAIHB1YnNwZWMueWFtbApgYGAKCkJ5IGRlZmF1bHQgYG1hc29uIG1ha2VgIHdpbGwgZ2VuZXJhdGUgdGhlIG91dHB1dCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBidXQgYSBjdXN0b20gb3V0cHV0IGRpcmVjdG9yeSBjYW4gYmUgc3BlY2lmaWVkIHZpYSB0aGUgWy1vIG9wdGlvbl1bbWFzb25fb3V0cHV0X2Rpcl06CgpgYGBzaAptYXNvbiBtYWtlIHZlcnlfZ29vZF9hcHBfdWkgLW8gLi9vdXRwdXRfZm9sZGVyCmBgYAoKW21hc29uX291dHB1dF9kaXJdOiBodHRwczovL2RvY3MuYnJpY2todWIuZGV2L21hc29uLW1ha2UjLWN1c3RvbS1vdXRwdXQtZGlyZWN0b3J5CltsaWNlbnNlX2JhZGdlXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9saWNlbnNlLU1JVC1ibHVlLnN2ZwpbbGljZW5zZV9saW5rXTogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKW2xvZ29fd2hpdGVdOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVkdWZW50dXJlcy92ZXJ5X2dvb2RfYnJhbmQvbWFpbi9zdHlsZXMvUkVBRE1FL3Zndl9sb2dvX3doaXRlLnBuZyNnaC1kYXJrLW1vZGUtb25seQpbdmVyeV9nb29kX2FuYWx5c2lzX2xpbmtdOiBodHRwczovL3B1Yi5kZXYvcGFja2FnZXMvdmVyeV9nb29kX2FuYWx5c2lzClt2ZXJ5X2dvb2RfdmVudHVyZXNfbGlua19kYXJrXTogaHR0cHM6Ly92ZXJ5Z29vZC52ZW50dXJlcyNnaC1kYXJrLW1vZGUtb25seQpbdmVyeV9nb29kX3ZlbnR1cmVzX2xpbmtdOiBodHRwczovL3Zlcnlnb29kLnZlbnR1cmVzClt2ZXJ5X2dvb2Rfd29ya2Zsb3dzX2xpbmtdOiBodHRwczovL2dpdGh1Yi5jb20vVmVyeUdvb2RPcGVuU291cmNlL3ZlcnlfZ29vZF93b3JrZmxvd3MK", + "type": "text", + }, + "changelog": { + "path": "CHANGELOG.md", + "data": "IyAwLjEuMAoKLSBmZWF0OiBpbml0aWFsIHJlbGVhc2UK", + "type": "text", + }, + "license": { + "path": "LICENSE", + "data": + "TUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAyNiBWZXJ5IEdvb2QgVmVudHVyZXMKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCg==", + "type": "text", + }, + "vars": { + "project_name": { + "type": "string", + "description": "The package name", + "default": "my_app_ui", + "prompt": "What is the project name?", + }, + "description": { + "type": "string", + "description": "The package description", + "default": "A Very Good App UI package", + "prompt": "What is the project description?", + }, + "publishable": { + "type": "boolean", + "description": + "Whether the generated package is intended to be published.", + "default": false, + "prompt": "Will the package be published?", + }, + }, +}); diff --git a/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_template.dart b/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_template.dart new file mode 100644 index 000000000..9d88950a0 --- /dev/null +++ b/lib/src/commands/create/templates/very_good_app_ui/very_good_app_ui_template.dart @@ -0,0 +1,32 @@ +import 'package:mason/mason.dart'; +import 'package:universal_io/io.dart'; +import 'package:very_good_cli/src/commands/create/templates/templates.dart'; +import 'package:very_good_cli/src/logger_extension.dart'; + +/// {@template app_ui_template} +/// A Flutter app UI package template. +/// {@endtemplate} +class AppUiTemplate extends Template { + /// {@macro app_ui_template} + AppUiTemplate() + : super( + name: 'app_ui', + bundle: veryGoodAppUiBundle, + help: 'Generate a Very Good App UI package.', + ); + + @override + Future onGenerateComplete(Logger logger, Directory outputDir) async { + if (await installFlutterPackages(logger, outputDir)) { + await applyDartFixes(logger, outputDir); + } + _logSummary(logger); + } + + void _logSummary(Logger logger) { + logger + ..info('\n') + ..created('Created a Very Good App UI Package! 🦄') + ..info('\n'); + } +} diff --git a/test/src/commands/create/commands/app_ui_package_test.dart b/test/src/commands/create/commands/app_ui_package_test.dart new file mode 100644 index 000000000..6ee276f25 --- /dev/null +++ b/test/src/commands/create/commands/app_ui_package_test.dart @@ -0,0 +1,210 @@ +import 'dart:io'; + +import 'package:args/args.dart'; +import 'package:mason/mason.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:path/path.dart' as path; +import 'package:test/test.dart'; +import 'package:very_good_cli/src/commands/commands.dart'; + +import '../../../../helpers/helpers.dart'; + +class _MockLogger extends Mock implements Logger {} + +class _MockProgress extends Mock implements Progress {} + +class _MockMasonGenerator extends Mock implements MasonGenerator {} + +class _MockGeneratorHooks extends Mock implements GeneratorHooks {} + +class _MockArgResults extends Mock implements ArgResults {} + +class _FakeLogger extends Fake implements Logger {} + +class _FakeDirectoryGeneratorTarget extends Fake + implements DirectoryGeneratorTarget {} + +final expectedUsage = [ + ''' +Generate a Very Good App UI package. + +Usage: very_good create app_ui_package [arguments] +-h, --help Print this usage information. +-o, --output-directory The desired output directory when creating a new project. + --description The description for this new project. + (defaults to "A Very Good Project created by Very Good CLI.") + --publishable Whether the generated project is intended to be published. + +Run "very_good help" to see global options.''', +]; + +const pubspec = ''' +name: example +environment: + sdk: ^3.11.0 +'''; + +void main() { + late Logger logger; + + setUpAll(() { + registerFallbackValue(_FakeDirectoryGeneratorTarget()); + registerFallbackValue(_FakeLogger()); + }); + + setUp(() { + logger = _MockLogger(); + + final progress = _MockProgress(); + + when(() => logger.progress(any())).thenReturn(progress); + }); + + group('can be instantiated', () { + test('with default options', () { + final logger = Logger(); + final command = CreateAppUiPackage( + logger: logger, + generatorFromBundle: null, + generatorFromBrick: null, + ); + expect(command.name, equals('app_ui_package')); + expect( + command.description, + equals('Generate a Very Good App UI package.'), + ); + expect(command.logger, equals(logger)); + expect(command, isA()); + }); + }); + + group('create app_ui_package', () { + test( + 'help', + withRunner((commandRunner, logger, pubUpdater, printLogs) async { + final result = await commandRunner.run([ + 'create', + 'app_ui_package', + '--help', + ]); + expect(printLogs, equals(expectedUsage)); + expect(result, equals(ExitCode.success.code)); + + printLogs.clear(); + + final resultAbbr = await commandRunner.run([ + 'create', + 'app_ui_pkg', + '-h', + ]); + expect(printLogs, equals(expectedUsage)); + expect(resultAbbr, equals(ExitCode.success.code)); + }), + ); + + group('running the command', () { + final generatedFiles = List.filled( + 10, + const GeneratedFile.created(path: ''), + ); + + late GeneratorHooks hooks; + late MasonGenerator generator; + + setUp(() { + hooks = _MockGeneratorHooks(); + generator = _MockMasonGenerator(); + + when(() => generator.hooks).thenReturn(hooks); + when( + () => hooks.preGen( + vars: any(named: 'vars'), + onVarsChanged: any(named: 'onVarsChanged'), + ), + ).thenAnswer((_) async {}); + + when( + () => generator.generate( + any(), + vars: any(named: 'vars'), + logger: any(named: 'logger'), + ), + ).thenAnswer((_) async { + return generatedFiles; + }); + + when(() => generator.id).thenReturn('generator_id'); + when(() => generator.description).thenReturn('generator description'); + when(() => generator.hooks).thenReturn(hooks); + + when( + () => hooks.preGen( + vars: any(named: 'vars'), + onVarsChanged: any(named: 'onVarsChanged'), + ), + ).thenAnswer((_) async {}); + when( + () => generator.generate( + any(), + vars: any(named: 'vars'), + logger: any(named: 'logger'), + ), + ).thenAnswer((invocation) async { + final target = + invocation.positionalArguments.first as DirectoryGeneratorTarget; + File(path.join(target.dir.path, 'pubspec.yaml')) + ..createSync(recursive: true) + ..writeAsStringSync(pubspec); + return generatedFiles; + }); + }); + + test('creates app ui package', () async { + final tempDirectory = Directory.systemTemp.createTempSync(); + addTearDown(() => tempDirectory.deleteSync(recursive: true)); + + final argResults = _MockArgResults(); + final command = CreateAppUiPackage( + logger: logger, + generatorFromBundle: (_) async => throw Exception('oops'), + generatorFromBrick: (_) async => generator, + )..argResultOverrides = argResults; + when( + () => argResults['output-directory'] as String?, + ).thenReturn(tempDirectory.path); + when(() => argResults.rest).thenReturn(['my_app_ui']); + + final result = await command.run(); + + expect(command.template.name, 'app_ui'); + expect(result, equals(ExitCode.success.code)); + + verify(() => logger.progress('Bootstrapping')).called(1); + verify( + () => hooks.preGen( + vars: { + 'project_name': 'my_app_ui', + 'description': '', + 'publishable': false, + }, + onVarsChanged: any(named: 'onVarsChanged'), + ), + ); + verify( + () => generator.generate( + any(), + vars: { + 'project_name': 'my_app_ui', + 'description': '', + 'publishable': false, + }, + logger: logger, + ), + ).called(1); + verify( + () => logger.info('Created a Very Good App UI Package! 🦄'), + ).called(1); + }); + }); + }); +} diff --git a/test/src/commands/create/create_test.dart b/test/src/commands/create/create_test.dart index db1597409..88d09cdb3 100644 --- a/test/src/commands/create/create_test.dart +++ b/test/src/commands/create/create_test.dart @@ -11,6 +11,7 @@ Usage: very_good create [arguments] -h, --help Print this usage information. Available subcommands: + app_ui_package Generate a Very Good App UI package. dart_cli Generate a Very Good Dart CLI application. dart_package Generate a Very Good Dart package. docs_site Generate a Very Good documentation site. diff --git a/tool/generate_bundles.sh b/tool/generate_bundles.sh index 2d62fa431..f1d27c368 100755 --- a/tool/generate_bundles.sh +++ b/tool/generate_bundles.sh @@ -2,6 +2,7 @@ # Runs `mason bundle` to generate bundles for all bricks within the respective templates directories. bricks=( + very_good_app_ui very_good_core very_good_dart_package very_good_dart_cli