From 56c4004613a3ec01babcc2069acba71e86cc5fe2 Mon Sep 17 00:00:00 2001 From: Pablo Guerra Date: Tue, 10 Oct 2023 15:46:59 -0400 Subject: [PATCH] Improved Mobile UI, Bug Fixes, & Icon --- .gitignore | 1 - assets/images/icon.png | Bin 0 -> 15802 bytes lib/constants/strings.dart | 23 ++- lib/main.dart | 1 + lib/pages/input_form.dart | 65 +++++-- lib/pages/split_view.dart | 280 +++++++++++++++++++++-------- lib/services/file_handler.dart | 20 +++ lib/services/project_info.dart | 22 +++ lib/services/redirect_handler.dart | 14 ++ lib/widgets/custom_entry.dart | 32 +++- lib/widgets/education_entry.dart | 34 +++- lib/widgets/experience_entry.dart | 36 ++-- lib/widgets/portrait_drawer.dart | 63 +++++++ pubspec.lock | 16 ++ pubspec.yaml | 4 + web/favicon.png | Bin 917 -> 2193 bytes web/icons/Icon-192.png | Bin 5292 -> 15802 bytes web/icons/Icon-512.png | Bin 8252 -> 14908 bytes web/icons/Icon-maskable-192.png | Bin 5594 -> 15802 bytes web/icons/Icon-maskable-512.png | Bin 20998 -> 14908 bytes 20 files changed, 483 insertions(+), 128 deletions(-) create mode 100644 assets/images/icon.png create mode 100644 lib/services/file_handler.dart create mode 100644 lib/services/project_info.dart create mode 100644 lib/services/redirect_handler.dart create mode 100644 lib/widgets/portrait_drawer.dart diff --git a/.gitignore b/.gitignore index a8e938c..1eab1a2 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,6 @@ migrate_working_dir/ /build/ # Web related -lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols diff --git a/assets/images/icon.png b/assets/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5ea51f06935da0564379e0346ab5d2260df5f5 GIT binary patch literal 15802 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 '© $year Pablo L. Guerra'; // Form static const String contactDetails = 'Contact Details'; @@ -51,7 +70,7 @@ class Strings { // Split view static const String recompile = 'RECOMPILE'; - static const String download = 'DOWNLOAD'; + static const String downloadPDF = 'DOWNLOAD PDF'; static const String form = 'Form'; static const String preview = 'Preview'; } diff --git a/lib/main.dart b/lib/main.dart index 0dfdf25..e2a4691 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'constants/strings.dart'; import 'pages/split_view.dart'; void main() { + WidgetsFlutterBinding.ensureInitialized(); runApp(const FlutterResumeBuilder()); } diff --git a/lib/pages/input_form.dart b/lib/pages/input_form.dart index 1891211..132630c 100644 --- a/lib/pages/input_form.dart +++ b/lib/pages/input_form.dart @@ -23,19 +23,19 @@ import '../widgets/image_file_picker.dart'; /// The input form for the resume. class InputForm extends StatefulWidget { - const InputForm({super.key}); + const InputForm({ + super.key, + this.portrait = false, + }); + + /// Whether the layout is portrait or not. + final bool portrait; @override State createState() => _InputFormState(); } class _InputFormState extends State { - /// The key for the contact section. - final GlobalKey> _contactSectionKey = GlobalKey(); - - /// The key for the skill section. - final GlobalKey> _skillSectionKey = GlobalKey(); - /// Form fields for requesting the user's name, location, and a logo. Widget _header(Resume resume) { return Row( @@ -101,6 +101,7 @@ class _InputFormState extends State { children: [ if (titleEditable) Expanded( + flex: 2, child: GenericTextField( key: UniqueKey(), label: '', @@ -120,7 +121,6 @@ class _InputFormState extends State { ), ), const Expanded( - flex: 2, child: Divider( indent: 10, endIndent: 10, @@ -201,15 +201,25 @@ class _InputFormState extends State { Widget _contactSection(Resume resume) { return ReorderableBuilder( longPressDelay: const Duration(milliseconds: 250), - key: _contactSectionKey, + enableScrollingWhileDragging: false, + dragChildBoxDecoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + boxShadow: const [ + BoxShadow( + color: Colors.black54, + blurRadius: 10, + offset: Offset(-2, 5), + ), + ], + ), builder: (List children) { return GridView.custom( - key: _contactSectionKey, + physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, childrenDelegate: SliverChildListDelegate(children), - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( mainAxisExtent: 74, - crossAxisCount: 2, + crossAxisCount: widget.portrait ? 1 : 2, mainAxisSpacing: 10, crossAxisSpacing: 10, ), @@ -259,8 +269,17 @@ class _InputFormState extends State { opacity: resume.sectionVisible(Strings.skills) ? 1 : 0.5, child: ReorderableBuilder( longPressDelay: const Duration(milliseconds: 250), - key: _skillSectionKey, enableScrollingWhileDragging: false, + dragChildBoxDecoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + boxShadow: const [ + BoxShadow( + color: Colors.black54, + blurRadius: 10, + offset: Offset(-2, 5), + ), + ], + ), onReorder: (List orderUpdateEntities) { for (final OrderUpdateEntity element in orderUpdateEntities) { resume.onReorderSkillsList(element.oldIndex, element.newIndex); @@ -269,12 +288,11 @@ class _InputFormState extends State { builder: (List children) { return GridView.custom( physics: const NeverScrollableScrollPhysics(), - key: _skillSectionKey, shrinkWrap: true, childrenDelegate: SliverChildListDelegate(children), - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( mainAxisExtent: 74, - crossAxisCount: 5, + crossAxisCount: widget.portrait ? 2 : 5, mainAxisSpacing: 10, crossAxisSpacing: 10, ), @@ -318,16 +336,18 @@ class _InputFormState extends State { ), ReorderableList( itemCount: resume.experiences.length, + physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, proxyDecorator: _proxyDecorator, onReorder: (int oldIndex, int newIndex) { resume.onReorderExperienceList(oldIndex, newIndex); }, itemBuilder: (BuildContext context, int index) { - return ReorderableDragStartListener( + return ReorderableDelayedDragStartListener( key: Key('${Strings.experience}$index'), index: index, child: ExperienceEntry( + portrait: widget.portrait, experience: resume.experiences[index], onSubmitted: (_) { resume.rebuild(); @@ -356,15 +376,17 @@ class _InputFormState extends State { ReorderableList( itemCount: resume.educationHistory.length, shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), proxyDecorator: _proxyDecorator, onReorder: (int oldIndex, int newIndex) { resume.onReorderEducationList(oldIndex, newIndex); }, itemBuilder: (BuildContext context, int index) { - return ReorderableDragStartListener( + return ReorderableDelayedDragStartListener( key: Key('${Strings.education}$index'), index: index, child: EducationEntry( + portrait: widget.portrait, education: resume.educationHistory[index], onSubmitted: (_) { resume.rebuild(); @@ -409,14 +431,16 @@ class _InputFormState extends State { itemCount: genericSection.length, shrinkWrap: true, proxyDecorator: _proxyDecorator, + physics: const NeverScrollableScrollPhysics(), onReorder: (int oldIndex, int newIndex) { resume.onReorderCustomSectionList(oldIndex, newIndex); }, itemBuilder: (BuildContext context, int index) { - return ReorderableDragStartListener( + return ReorderableDelayedDragStartListener( key: Key('$title$index'), index: index, child: CustomEntry( + portrait: widget.portrait, genericSection: genericSection[index], onSubmitted: (_) { resume.rebuild(); @@ -443,6 +467,9 @@ class _InputFormState extends State { elevation: elevation, color: Colors.transparent, shadowColor: Colors.black54, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20), + ), child: child, ), ); diff --git a/lib/pages/split_view.dart b/lib/pages/split_view.dart index 815825f..e8165e7 100644 --- a/lib/pages/split_view.dart +++ b/lib/pages/split_view.dart @@ -1,11 +1,7 @@ -import 'dart:convert'; -import 'dart:html' as html; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:url_launcher/url_launcher.dart'; import '../constants/strings.dart'; import '../models/contact.dart'; @@ -13,7 +9,11 @@ import '../models/education.dart'; import '../models/experience.dart'; import '../models/generic.dart'; import '../models/resume.dart'; +import '../services/file_handler.dart'; import '../services/pdf_generator.dart'; +import '../services/project_info.dart'; +import '../services/redirect_handler.dart'; +import '../widgets/portrait_drawer.dart'; import 'input_form.dart'; import 'pdf_viewer.dart'; @@ -28,9 +28,13 @@ class SplitViewState extends State with TickerProviderStateMixin { /// The resume to use. final Resume _resume = Resume(); + /// The project info handler. + ProjectVersionInfoHandler projectInfoHandler = ProjectVersionInfoHandler(); + /// The PDF generator. late PDFGenerator pdfGenerator; + /// The tab controller. TabController? _tabController; /// Populates the resume with sample data. @@ -112,27 +116,15 @@ class SplitViewState extends State with TickerProviderStateMixin { ]; } - /// The PDF viewer. - Widget _pdfViewer() { - return Stack( - children: [ - PDFViewer(pdfGenerator: pdfGenerator), - Positioned( - top: 10, - right: 10, - child: _recompileButton(), - ), - ], - ); - } - /// The portrait layout of the split view. Widget _portraitLayout() { return TabBarView( controller: _tabController, children: [ - const InputForm(), - _pdfViewer(), + const InputForm( + portrait: true, + ), + PDFViewer(pdfGenerator: pdfGenerator), ], ); } @@ -142,7 +134,18 @@ class SplitViewState extends State with TickerProviderStateMixin { return Row( children: [ const Expanded(child: InputForm()), - Expanded(child: _pdfViewer()), + Expanded( + child: Stack( + children: [ + PDFViewer(pdfGenerator: pdfGenerator), + Positioned( + top: 10, + right: 10, + child: _recompileButton(), + ), + ], + ), + ), ], ); } @@ -163,7 +166,7 @@ class SplitViewState extends State with TickerProviderStateMixin { ); } - /// A button that recompiles the resume. + /// A button to save and recompile the resume. Widget _recompileButton() { return MaterialButton( color: Colors.green[700], @@ -191,42 +194,178 @@ class SplitViewState extends State with TickerProviderStateMixin { ); } - /// A drawer that provides various options. - Widget _drawer(BuildContext context) { - return Drawer( - backgroundColor: Theme.of(context).colorScheme.surface, - child: Column( - children: [ - DrawerHeader( - margin: EdgeInsets.zero, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.stretch, + /// A list tile option for the drawer and popup menu. + Widget _listOption({ + required BuildContext context, + required String title, + required IconData iconData, + required Function() onTap, + }) { + return ListTile( + leading: Icon( + iconData, + color: Theme.of(context).colorScheme.onSurface, + ), + title: Text( + title.toUpperCase(), + style: Theme.of(context).textTheme.labelSmall, + ), + onTap: onTap, + ); + } + + /// Displays an about dialog containing information about the project and + /// more options. + void _showAboutDialog({required bool portraitMode}) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + insetPadding: portraitMode + ? const EdgeInsets.symmetric(horizontal: 30.0, vertical: 24.0) + : const EdgeInsets.symmetric(horizontal: 150, vertical: 100), + title: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - TextButton( - onPressed: () async { - if (await canLaunchUrl(Uri.parse(Strings.flutterUrl))) { - launchUrl( - Uri.parse(Strings.flutterUrl), - ); - } - }, - child: Text( - Strings.poweredByFlutter.toUpperCase(), - style: Theme.of(context).textTheme.labelSmall!.copyWith( - color: Theme.of(context) - .colorScheme - .onSurface - .withOpacity(0.5), - ), - ), + Image.asset( + Strings.iconPath, + height: 50, + width: 50, + ), + const SizedBox(width: 10), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + Strings.flutterResumeBuilder, + style: Theme.of(context).textTheme.titleLarge, + ), + Text( + '${projectInfoHandler.version} (${projectInfoHandler.buildNumber})', + style: Theme.of(context).textTheme.bodyMedium, + ), + ], ), ], ), + content: const Text( + Strings.projectInfo, + textAlign: TextAlign.center, + ), + actions: [ + TextButton( + child: Text(Strings.moreProjects.toUpperCase()), + onPressed: () { + Navigator.pop(context); + RedirectHandler.openUrl(Strings.portfolioUrl); + }, + ), + TextButton( + child: Text(Strings.licenses.toUpperCase()), + onPressed: () { + Navigator.pop(context); + showLicensePage( + context: context, + applicationName: Strings.flutterResumeBuilder, + applicationVersion: projectInfoHandler.version, + applicationLegalese: Strings.copyRight('2021'), + ); + }, + ), + TextButton( + onPressed: () => Navigator.pop(context), + child: const Text(Strings.ok), + ), + ], + ); + }); + } + + /// The action items to display in the drawer or popup menu. + List _actionItems({required bool portraitMode}) { + if (portraitMode) { + return [ + _listOption( + context: context, + title: Strings.downloadPDF, + iconData: Icons.download, + onTap: () { + Navigator.pop(context); + FileHandler().savePDF(pdfGenerator); + }, + ), + _listOption( + context: context, + title: Strings.aboutThisProject.toUpperCase(), + iconData: Icons.info, + onTap: () { + Navigator.pop(context); + _showAboutDialog(portraitMode: portraitMode); + }, + ), + _listOption( + context: context, + title: Strings.contributeToThisProject.toUpperCase(), + iconData: Icons.code, + onTap: () { + Navigator.pop(context); + RedirectHandler.openUrl(Strings.sourceCodeUrl); + }, + ), + _listOption( + context: context, + title: Strings.projectDonation.toUpperCase(), + iconData: Icons.attach_money, + onTap: () { + Navigator.pop(context); + RedirectHandler.openUrl(Strings.sponsorUrl); + }, + ), + ]; + } + return [ + IconButton( + icon: const Icon(Icons.download), + tooltip: Strings.downloadPDF, + onPressed: () => FileHandler().savePDF(pdfGenerator), + ), + IconButton( + icon: const Icon(Icons.info), + tooltip: Strings.aboutThisProject.toUpperCase(), + onPressed: () => _showAboutDialog(portraitMode: portraitMode), + ), + PopupMenuButton( + tooltip: Strings.moreOptions.toUpperCase(), + itemBuilder: (BuildContext context) => >[ + PopupMenuItem( + padding: EdgeInsets.zero, + child: _listOption( + context: context, + title: Strings.contributeToThisProject.toUpperCase(), + iconData: Icons.code, + onTap: () { + Navigator.pop(context); + RedirectHandler.openUrl(Strings.sourceCodeUrl); + }), + onTap: () {}, + ), + PopupMenuItem( + padding: EdgeInsets.zero, + child: _listOption( + context: context, + title: Strings.projectDonation.toUpperCase(), + iconData: Icons.attach_money, + onTap: () { + Navigator.pop(context); + RedirectHandler.openUrl(Strings.sponsorUrl); + }, + ), + onTap: () {}, ), ], ), - ); + const SizedBox(width: 10), + ]; } @override @@ -244,8 +383,12 @@ class SplitViewState extends State with TickerProviderStateMixin { child: OrientationBuilder( builder: (BuildContext context, Orientation orientation) { return Scaffold( - drawer: - orientation == Orientation.landscape ? null : _drawer(context), + drawer: orientation == Orientation.landscape + ? null + : PortraitDrawer( + pdfGenerator: pdfGenerator, + actionItems: _actionItems(portraitMode: true), + ), appBar: AppBar( bottom: orientation == Orientation.landscape ? null @@ -258,13 +401,8 @@ class SplitViewState extends State with TickerProviderStateMixin { const Text(Strings.resumeBuilder), if (orientation == Orientation.landscape) TextButton( - onPressed: () async { - if (await canLaunchUrl(Uri.parse(Strings.flutterUrl))) { - launchUrl( - Uri.parse(Strings.flutterUrl), - ); - } - }, + onPressed: () => + RedirectHandler.openUrl(Strings.flutterUrl), child: Text( Strings.poweredByFlutter.toUpperCase(), style: Theme.of(context).textTheme.labelSmall!.copyWith( @@ -277,25 +415,9 @@ class SplitViewState extends State with TickerProviderStateMixin { ), ], ), - actions: [ - IconButton( - onPressed: () async { - final String docID = - '${DateTime.now().month}${DateTime.now().day}${DateTime.now().year.toString().substring(2)}-${DateTime.now().hour}${DateTime.now().minute}${DateTime.now().second}'; - final String content = base64Encode( - await pdfGenerator.generateResumeAsPDF()); - html.AnchorElement( - href: - 'data:application/octet-stream;charset=utf-16le;base64,$content') - ..setAttribute('download', - '${pdfGenerator.resume.nameController.text} Resume $docID.pdf') - ..click(); - }, - tooltip: Strings.download, - icon: const Icon(Icons.download)), - const SizedBox(width: 10), - const SizedBox(width: 24), - ], + actions: orientation == Orientation.landscape + ? _actionItems(portraitMode: false) + : null, centerTitle: false, ), body: Consumer( diff --git a/lib/services/file_handler.dart b/lib/services/file_handler.dart new file mode 100644 index 0000000..33b0fe8 --- /dev/null +++ b/lib/services/file_handler.dart @@ -0,0 +1,20 @@ +import 'dart:convert'; +import 'dart:html' as html; + +import 'pdf_generator.dart'; + +/// A class that handles file operations. +class FileHandler { + /// Saves the PDF to the user's device. + Future savePDF(PDFGenerator pdfGenerator) async { + final String docID = + '${DateTime.now().month}${DateTime.now().day}${DateTime.now().year.toString().substring(2)}-${DateTime.now().hour}${DateTime.now().minute}${DateTime.now().second}'; + final String content = + base64Encode(await pdfGenerator.generateResumeAsPDF()); + html.AnchorElement( + href: 'data:application/octet-stream;charset=utf-16le;base64,$content') + ..setAttribute('download', + '${pdfGenerator.resume.nameController.text} Resume $docID.pdf') + ..click(); + } +} diff --git a/lib/services/project_info.dart b/lib/services/project_info.dart new file mode 100644 index 0000000..b20cbfd --- /dev/null +++ b/lib/services/project_info.dart @@ -0,0 +1,22 @@ +import 'package:package_info_plus/package_info_plus.dart'; + +/// Contains information about the project version. +class ProjectVersionInfoHandler { + ProjectVersionInfoHandler() { + _init(); + } + + /// The package info instance. + late PackageInfo packageInfo; + + /// Initializes the package info. + Future _init() async { + packageInfo = await PackageInfo.fromPlatform(); + } + + /// The project version number. + String get version => packageInfo.version; + + /// The project build number. + String get buildNumber => packageInfo.buildNumber; +} diff --git a/lib/services/redirect_handler.dart b/lib/services/redirect_handler.dart new file mode 100644 index 0000000..0e90722 --- /dev/null +++ b/lib/services/redirect_handler.dart @@ -0,0 +1,14 @@ +import 'package:url_launcher/url_launcher.dart'; + +/// Handles redirecting to external URLs. +class RedirectHandler { + RedirectHandler._(); + + /// Opens the given [urlString] in the default browser. + static Future openUrl(String urlString) async { + final Uri url = Uri.parse(urlString); + if (await canLaunchUrl(url)) { + await launchUrl(url); + } + } +} diff --git a/lib/widgets/custom_entry.dart b/lib/widgets/custom_entry.dart index e7ad2a0..236c3c6 100644 --- a/lib/widgets/custom_entry.dart +++ b/lib/widgets/custom_entry.dart @@ -12,6 +12,7 @@ class CustomEntry extends StatefulWidget { super.key, required this.genericSection, required this.onSubmitted, + required this.portrait, }); /// The generic section to use. @@ -20,6 +21,9 @@ class CustomEntry extends StatefulWidget { /// The callback when the user submits the text field. final Function(String?)? onSubmitted; + /// Whether the layout is portrait or not. + final bool portrait; + @override State createState() => CustomEntryState(); } @@ -28,6 +32,18 @@ class CustomEntryState extends State { /// The callback when the user submits the text field. Function(String?)? get onSubmitted => widget.onSubmitted; + // Returns the layout based on the orientation. + Widget _responsiveLayout({required List children}) { + if (widget.portrait) { + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: children, + ); + } + return Row(children: children); + } + @override Widget build(BuildContext context) { return Padding( @@ -37,17 +53,17 @@ class CustomEntryState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 4), - Row( + _responsiveLayout( children: [ - Expanded( + Flexible( child: GenericTextField( label: Strings.title, onSubmitted: onSubmitted, controller: widget.genericSection.titleController, ), ), - const SizedBox(width: 8), - Expanded( + const SizedBox(width: 10, height: 10), + Flexible( child: DateRangeEntry( startDateController: widget.genericSection.startDateController, @@ -58,9 +74,9 @@ class CustomEntryState extends State { ], ), const SizedBox(height: 10), - Row( + _responsiveLayout( children: [ - Expanded( + Flexible( flex: 2, child: GenericTextField( label: Strings.subtitle, @@ -68,8 +84,8 @@ class CustomEntryState extends State { controller: widget.genericSection.subtitleController, ), ), - const SizedBox(width: 10), - Expanded( + const SizedBox(width: 10, height: 10), + Flexible( child: GenericTextField( label: Strings.location, controller: widget.genericSection.locationController, diff --git a/lib/widgets/education_entry.dart b/lib/widgets/education_entry.dart index 8efe4cb..1223581 100644 --- a/lib/widgets/education_entry.dart +++ b/lib/widgets/education_entry.dart @@ -12,6 +12,7 @@ class EducationEntry extends StatefulWidget { super.key, required this.education, required this.onSubmitted, + required this.portrait, }); /// The callback when the user submits the text field. @@ -20,6 +21,9 @@ class EducationEntry extends StatefulWidget { /// The education to use. final Education education; + /// Whether the layout is portrait or not. + final bool portrait; + @override State createState() => EducationEntryState(); } @@ -28,6 +32,18 @@ class EducationEntryState extends State { /// The callback when the user submits the text field. Function(String?)? get onSubmitted => widget.onSubmitted; + /// Returns the layout based on the orientation. + Widget _responsiveLayout({required List children}) { + if (widget.portrait) { + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: children, + ); + } + return Row(children: children); + } + @override Widget build(BuildContext context) { return Padding( @@ -37,17 +53,17 @@ class EducationEntryState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 4), - Row( + _responsiveLayout( children: [ - Expanded( + Flexible( child: GenericTextField( label: Strings.institution, controller: widget.education.institutionController, onSubmitted: onSubmitted, ), ), - const SizedBox(width: 8), - Expanded( + const SizedBox(width: 10, height: 10), + Flexible( child: DateRangeEntry( startDateController: widget.education.startDateController, endDateController: widget.education.endDateController, @@ -56,18 +72,18 @@ class EducationEntryState extends State { ), ], ), - const SizedBox(height: 16), - Row( + const SizedBox(height: 10), + _responsiveLayout( children: [ - Expanded( + Flexible( child: GenericTextField( label: Strings.degree, controller: widget.education.degreeController, onSubmitted: onSubmitted, ), ), - const SizedBox(width: 8), - Expanded( + const SizedBox(width: 10, height: 10), + Flexible( child: GenericTextField( label: Strings.location, controller: widget.education.locationController, diff --git a/lib/widgets/experience_entry.dart b/lib/widgets/experience_entry.dart index 07ecf9b..b6a9aab 100644 --- a/lib/widgets/experience_entry.dart +++ b/lib/widgets/experience_entry.dart @@ -12,6 +12,7 @@ class ExperienceEntry extends StatefulWidget { super.key, required this.experience, required this.onSubmitted, + required this.portrait, }); /// The experience to use. @@ -20,6 +21,9 @@ class ExperienceEntry extends StatefulWidget { /// The callback when the user submits the text field. final Function(String?)? onSubmitted; + /// Whether the layout is portrait or not. + final bool portrait; + @override State createState() => ExperienceEntryState(); } @@ -28,6 +32,18 @@ class ExperienceEntryState extends State { /// The callback when the user submits the text field. Function(String?)? get onSubmitted => widget.onSubmitted; + /// Returns the layout based on the orientation. + Widget _responsiveLayout({required List children}) { + if (widget.portrait) { + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: children, + ); + } + return Row(children: children); + } + @override Widget build(BuildContext context) { return Padding( @@ -37,17 +53,17 @@ class ExperienceEntryState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 4), - Row( + _responsiveLayout( children: [ - Expanded( + Flexible( child: GenericTextField( label: Strings.position, onSubmitted: onSubmitted, controller: widget.experience.positionController, ), ), - const SizedBox(width: 8), - Expanded( + const SizedBox(width: 10, height: 10), + Flexible( child: DateRangeEntry( startDateController: widget.experience.startDateController, endDateController: widget.experience.endDateController, @@ -56,10 +72,10 @@ class ExperienceEntryState extends State { ), ], ), - const SizedBox(height: 16), - Row( + const SizedBox(height: 10), + _responsiveLayout( children: [ - Expanded( + Flexible( flex: 2, child: GenericTextField( label: Strings.company, @@ -67,8 +83,8 @@ class ExperienceEntryState extends State { controller: widget.experience.companyController, ), ), - const SizedBox(width: 8), - Expanded( + const SizedBox(width: 10, height: 10), + Flexible( child: GenericTextField( label: Strings.location, onSubmitted: onSubmitted, @@ -77,7 +93,7 @@ class ExperienceEntryState extends State { ), ], ), - const SizedBox(height: 16), + const SizedBox(height: 10), GenericTextField( label: Strings.jobDescription, controller: widget.experience.descriptionController, diff --git a/lib/widgets/portrait_drawer.dart b/lib/widgets/portrait_drawer.dart new file mode 100644 index 0000000..fead57e --- /dev/null +++ b/lib/widgets/portrait_drawer.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../constants/strings.dart'; +import '../services/pdf_generator.dart'; + +/// A drawer that is displayed in portrait mode. +class PortraitDrawer extends StatelessWidget { + const PortraitDrawer({ + super.key, + required this.pdfGenerator, + required this.actionItems, + }); + + /// The PDF generator. + final PDFGenerator pdfGenerator; + + /// The action items to display in the drawer. + final List actionItems; + + @override + Widget build(BuildContext context) { + return Drawer( + backgroundColor: Theme.of(context).colorScheme.surface, + child: Column( + children: [ + DrawerHeader( + margin: EdgeInsets.zero, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Image.asset( + Strings.iconPath, + height: 50, + ), + TextButton( + onPressed: () async { + if (await canLaunchUrl(Uri.parse(Strings.flutterUrl))) { + launchUrl( + Uri.parse(Strings.flutterUrl), + ); + } + }, + child: Text( + Strings.poweredByFlutter.toUpperCase(), + style: Theme.of(context).textTheme.labelSmall!.copyWith( + color: Theme.of(context) + .colorScheme + .onSurface + .withOpacity(0.5), + ), + ), + ), + ], + ), + ), + ...actionItems + ], + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 180f8cf..ddab167 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -296,6 +296,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + sha256: "0351aaba3b267c4962ed73058a5f62a84de7e39670a20e2916a6baff2ffcfbe5" + url: "https://pub.dev" + source: hosted + version: "5.0.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" path: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ac88528..a8562af 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,6 +25,7 @@ dependencies: flutter_reorderable_grid_view: ^4.0.0 file_picker: ^5.5.0 url_launcher: ^6.1.14 + package_info_plus: ^5.0.0 dev_dependencies: flutter_test: @@ -34,3 +35,6 @@ dev_dependencies: flutter: uses-material-design: true + +assets: + - assets/images/ diff --git a/web/favicon.png b/web/favicon.png index 8aaa46ac1ae21512746f852a42ba87e4165dfdd1..3b7a9590eff7990dddcd0f1d195f6bddb0eae776 100644 GIT binary patch literal 2193 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 UHmF&bi~s-t07*qoM6N<$f(K*&v;Y7A diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png index b749bfef07473333cf1dd31e9eed89862a5d52aa..1a5ea51f06935da0564379e0346ab5d2260df5f5 100644 GIT binary patch literal 15802 zcmY+r1z21$vjDn_yVK&X#i2Nh7k77ecX!*;(&Ad&-QC^Y-Q9~jkN)?6_rACLos&7) zkxWiDnPg_d739Q`5%3TI006S2gs9R-+4=8+gZa2Ct=hnT6hLPsabZCDIKk1!Lx`z{ zq?xQN;L8UL2Y?1*03iRNe0%{wJOK26U;sc0i2uK^5|HM_6;i4fc z!((i3%V=m~Z)D2oVe9aZ3c%;V^8wnLx)_pp*xJ}R^LT*B{)55u0spIJA|v?^iiwS1B{aj^ck16x)X=cwo7HFUD(36_ZKvMq8EfBkZR&#R%G4Z-v~>jqSC6~f zhtmZ~=rsfAqoPdTE_m(FcTER7DUy?As4lv9+dQw=b;qB_n-0>Q&)XC+0=}yC_m@Rs z&kYv$nvXX9{qx6;eGvui1ayk3)*J4F^P1L`dK}p!|f0dk^I!LFKd}+T3 zP=1l>2b{tyav3@`-F%u*Wa9BBK=4rP-0UM@SZ(|P%!mg}z_MdpyXooOncW)?7*5i) z#QNFNL-vxHOL@mX6czdAi#BDOHTAmcxwyD!Ck+4CQHFd`4+g>cyTCjdCjVkc)a0dg zq7|eal1Bz8LB@#!xmXOsEPBw`+1arhTPLyip03Z=cm*6{yA4W;vvRkBk)@0We*fx$ zq%Wibali6f()#j?gszKYGxgWiv$M~smZzjh1!RCA@zKDa>bkg-!}hp0VbN1nn4rHS z8&M=Ak-9mcAT$yJZR0^Z#^e9tx)orDihyaI8yb3@$;m19hb&JO z8;4TQhG6u`9t9x}Exa%DxYxTOG#u$L!g?CzZ{LPIDrEa>$T8$I%( z<=v?13Q$t|n#t6j=*EFkzMu?~sc*Z(zPzEWHWf%>Wg7Gi7>q&7Lh5Jdu;pZ1*&WZ) zvQ*^mURte+z%W}q!6WAO@*8G{!g3bc#ivZ)FC`r&b!0)nqdg5c=&Gh-nr*%uDv(HE zF@K2(?JI;bip6pLtiIQO4lgZ`RVFLQ@ISIp?eZj?0k2+q)cOE*wl{jYy>!#R|R>Q2wx?>!0N<@BGEa>%BJ3$ z?&>(xpow7>0x&1Zn#x&g1Wq@al!cfOdb_10T`dHK3qo?Y zV|w2EFMilQ`?_*5VkjO5|C57BdkFRBv?a5veDxy1ccbg8{pe&;MkmrL7KATgpbsMJ;5`GFUo zm{=njNJOaXOshL^2y=X!@J;4AEv(iJ0dP_N#V9R_nuT8S;s;NLKJ&|-#gZfnG+6=! zQ3U=dH8piXpJ-oM&nC%~qtCZfZ+AR3Y2Y7YdN(dA{DEH%!5fF-bqze`9|VyQsbcV@ z&V3m4E0Ba1U&Z@tW3$VC@6cW8HO^!=W09=RQ45}m2V=9|y3^|_-SZ#(5ebCL3&20= z^`lp}5lIxh(T3cHv#pt-2SbEG{BSi$UxYo(QCbz?LNcJ)B_L0Ouqzd(yv}9w22hB< zN8T))*G?z|{IvbsiijJ4ILFG3WH8nBi2sPitPx2K$;I*>{obASXg2A7 zfr-gbRaKRgj}|<{W1w?Yey6vkYP&rD<;!nLQ&UQrVX@BH`Dpd*sf1&zX6;lgMl3jK zn8Nbn1QbGE2{6i8ZgI2L4+NCq^;geKO^@ILSsC%8v{guF#!aOv79ehRak13)j!~ZM z9}XooFHs|-oV3Oj=FOl=L%??Ebo6w)_CTnP`7__7sOv)3K)nK<% zeW%E3;t+=QInhE}R{o%Ai5s34x;qSLWu-ISB%Mw0g@?j=zBHzGw%us~BoH%|BPQvU z;c_%v6blh1h}h8EJTTA@uYS-$mEm($ML~HV(*yp&(#0sXO>%pUiY57ccedO2SwHUa zT0h=>!&khzT1=`dP&mBr0tNHy2EMHu%;pGnA^cmNwYv0x+nUMwY7?vDw&>APO#v)P zTwyCGL030Vo$ZR+_OgRh+LYg+Mb*>yb5L_8=L#9QSVRNS3HbKSlG8IYnJB6y>pGsbZuo^yFo{{@ z@fR_JsWxCmZ+h$@8i~4z__%~&4d%{n%8Q|hlJfZ5lLe_yNtq-agFT0J?!4w%nSwQ} zfH}xw82pYkk_o=&Qkk?TP$80|)6Jn`Bqen0XJH{QReTpu4EL|z`*>V$o_gEK%s|%n zI{)DtOE!}RnK{B4NSs^AZh2x_gT(DGINHy-kz`SQejPGK(k6v_ETh z7^b}($@|AhGqpi6y(ble7=*Stnd3)<01kV}=zlf=# zs>Us20EfM6Jct|c2{i>S*{);VQ zQdy8I5-nt-0h9ekd)w~$cyz(r#e1&*`x_4p1zI<4RpK@^7U^d(!tKt7GIzbiT)iU& z}-q94+J|y&N6f%#wLVp7=9yu@LpMN2jI#r0@Bw4XELvwb$p74-+?r zxc{8_Z!>F%AL0vf2{jj4Fc>Mp-~Tcn3{T)nb6I;g&SHWjh(<}_7DKqSvRmGA{^=By z52@dBj7dyf@ddqy(8u@CVVe!6)CR3<$okGaDX}A1azF14E^b6cPp>>eOHnV&lUctd zP2V2jk{A^e2?n$Eor-VkHxHHp#=;-n!507&ZP$p)aATF1-RUcoJ*7;*&rb{q+dX{< z9Mao(&ty~;hGhOmM%gzf3-U@cN~-bMLvi7o^z`&`dBjZ644MuAocb!e=A(HVktYb43ZJt|ttUI}q=!we0p+nzQm^IXYXmO*z2P))QW&X95* zX;aB1>SYPy@AoX44^yy>%VJ@ug!v$Zvn!^Ks~CQ#H_y+*r{Y90St4Mo2~~Z+yH>(-&ICZ{N06s;B?3staD7gWJ-5TvJjRCc!rt4}X8 z>fy=tq|#Z|?nb3waH{8iatux)#k=eIqmzMtd+A!`wDSJomT{hV#d)>Cmat}vO%DCT zE+O(b8w&5lFCgDvH85j~ONthF5p%c4__P-V`u8F!E~G*US_7? zbqP!+A_~?JX_AKf!Ra+pz3loO`AGh<%fqE%^7XE=!H}KP@hGq;vyotqF zJm-a!^(>~uq$fo-X5Blp^`V>2sqe-TuSn|s8*^+93Uq9<+B)eGP$RCKua~^@V5WV% zJg8$Q%;VHR8D-OXRS;%#v(for-09pujU4>tnk1AV)>O{zcd=k9<50568wD$TSBuXh z!o(Txb^Y)!PJJfd=i6_nD%pEZI#Uhy#L2fg+PU5p<*Zw!GtA0mZ3H|XhapJ&Ltg>Z z>&H>Xga`mdTg{MCSZ32=`x+&>Gbv<_7ia+bY3&HGYcje6uJi8j;R@&Kz3(^yy z3^wh?tK^;%?cd4{Wz%dzeo|5)p%x?DJU0TWL2cEGwU&lr5Q5EU%`G*$LSEE)6Ysr* z@PQnUxckj_ddbt&Lqn?H=!I^Isz!tsL8gQryRK(LFSPW6_Z}r8W-^;xBPn8=QTKp1 zl|*GEWo9Oi*XG-(aqygYCp;^$Z>>i99R`{9o8lwH8?bU7C=u?b?y!tj_&}N|fKyKjl#)$2poK#k!7gj&xn|dEU+~ z%{pK;DK~FMX zWC>`~bi2HMDsNl4VY5As|4z}SCOdvJ&-*Ir!7G7K*~X@MFb7RT5s^);ZDvO|t^Ip7EaF zK$?&oLlg!&(3g(4+nt!WS!o6i8#U^~O-oBl9`mFpF6yaNdh|;-+A(LIE*`gInxP`e zYO_5URsV!Colxepo^BRs|Bi?4i{ZRP9i-b~N_oD!+|kFeSSvgwRfmXCoR z)@(Qc_!`WL;Ou?J-*lKwYxP_Z9HA?KNy)?@aA&=qTbaw(ilUIm<+cf)*iqciT==EG zHP)~m)&ANMe6m+qU3Ujni-ON+y8bnnFUh&a}uCRLw_=DS@3Iy z9*%;iDLvz!lisdQ1h$>3I&QT0Dw&JRob@=)&vIX2{a8WCew_YdIqO8>}a#Me=Li73P1nX>iH4Mu{|X||$2 z<&*uMus8d1O`Bx3t1G;teI=XFdQ}8dxyerNkoSY$7xD>v85Qv}<9J1e0}HzDWxtGU zO}dYETnVZyhRE91u??q8)Sef+?*wa7@mwtiH-)MVrdn8!ZZ0|_T2O39r|VP+T?^k9 zFg_s}9Gx;QRe`iQY_xtwsxDbcSosU~dl!E4t$7i+ZKxhsrSk(%FlVzNqEyNYJgX4- z?y_iJPCa`aRFaZ|(l=Mjo_BvT3Cx{rWOzcB%5x4yMUV<1hnFj_!T3~p1?9vFQ7`sohLwG@3Z0<(xxo*IFgrwjR5Ok)jA1mPP-DGZs!>$OVxYTR(n=U z)t+=oIRr9jbO*W)zmbAe2otzvKG$yJ1kD#<&JD%w`|jov-4W1pTEL&t^&z+fD;`j0 zv@;c?d8IJ6vzuHhxDv%k3P%^(RhKnyvIuYOpmleDH_*#L@G8w#B23CEj;!F|PUcOa#I#&^zh%^qy26=$IadVjfgDX$*?N`A4) z(BG}!8ET&_XXfkFf_Ah1^fr0lIf2XDTVb=TkCoPbY_PdCrwJazn}|H%uaI|m}WxS%Bx=$f;Ip}mu7}0Xw zCA-fu5uG@?w;f{y*qVfwZA^##;}ztjsdkaOes!4B5l2_iC^te0SzXp8m5Z6jW1L@a zH=dB1wzBrEuCKX}d>8Ic?7{6CM*eRwtSODIwDib}*Frihqzi@`k^)mB-sEIHpS?MU zltt{QE0Hf{y9<>RUu@yu>35sXgw!}H)YsF`Rtc0fVZCubz9{RS%#|eGoF#tYb>BbE zC(r*K$QQ$JLsw>J0$@C2eXC{LZNAX|sajQ23sytrkr~=UqiJet*}b0NPaGij*C}BM z8tF4mosM%~Ou7rfhWwfj?DE(bHMmzL(kEyel;LaeiqJZeSMa&*b6U)$&j_mU336={ zzo&pUXYMD)LWUA(JJGp074%Ezd%c-qh5lmOV7FE)nF~h8%C+~G;o;edVB4)8VTu)a z+p_dL%KO|!lj9P-slXc80{{vWc>hufv1BF;O)q1b%18gZcOQtgpKjiI+9EJT4{|U#V0dx(}7bruU%Lv*D9ubgDKC?2nmZE2R5Hb zP|WG4!7N<&2-4#uffA-dfrJW(f#OyD6&Gjn*vDix(t|n?*3K*EW_EDA4l8!`h}nV_ za2!I92$58>;OLCWNGEdX-|A8nf$#o<@uK_3L(F~{Dc4Tq`qPJ%C8Ao8A#f8lZTH>| zNoomRGsB62Aa6ozKRueMn4~J#sFIm}GWg3Rq1OY5o^@082E55R@SH7K_g><2_X61e_vsjhRgyKdk%=|Ey@Q>8&pb_3Z&ZL%K?RGAesXv?grSe(eF7*Q{(Qsm3)Qd6D zPs+tVz@F)+OeYHz>`;weMjn;o9aI($=Eo_BKc+0-!B1+;2pn!E$!7SmipUd}S6 zI)o}Yra^an_$}&X_7R`%vF${VDw8P;Gu7_3ivcfP?gXuE(ex5C0I`+W^2!|yOp)o{ zVPggXTW(m4`v(uFa!DITe`v(%DmE>9g` z(8tfY&M1{(1$s|)Y0y3g!V<+XXmd&)l&k414yD^3UZ6mJjWa@SBGw=$r=cP3vH&;0 z_G)gFZE~?93V4nA?s~QnL(MH^%z3XaoG#FEb3fEm6y|wM39K#lx;Y4LR4K!j<{S2j zvs@TZ?2lCb8j7X1ykp5Ex5PcfdLV$*?U5LoU|0iT;2R*!HN{Nc;K*iDr&;QfgmM`bWxF*ACGkI`F_ffIu&8^n^&n&dA{L z4caVYLMnsBC!x|`!^viFCZB)8b3lc{4+2!YdB{3{*E}?OIAz9u(BxYnPDG;ZSm6;G zoN<46n>g&>K4HdU@G1Hh|LJK~g<5&39PMgsA&_Cl1qp2?2Y^tpG>*~uPKzaYml{XwP_0JVlYIGuH8cgZ;WU5D^p zjez&spU-ES`aoWW2Sg26X8g6&IIiDW$^%uv7G>Kv^S?AQ;=|d78ckLIt5(vUczkHg znufw5=A|5hU;kZacTd!Qbq=^vq0{_(A8wZ3Zp%eG{@nxYrmP-mTda4N&WRb-F5!V1 zI1EOC&?xOlbQgucqT?-0tpQ3}oySb!g7d&ffE3!Ii!=%+EG@Q1`J${mP-OfLD>>Nl z8E+b?t-Y~Ug8y+B)1yMX2s4t03p6CqelkErB_VaLI|4OGH+hVP8-UbeGBj|t?){#y zwMe2sXjf>R89M_Bm6B~3lK~Xyx>?oVAHMLr_mAPGm%bMkOw6p?)h`C&O}931+zuSdaF^}EAJRJ0Fkq+^e;2z;bt5eN4u_LXd1y6y{iP;IeZUNX5R zUvp4Qy=Jo{s~va5I%IQ8-My3eIBl0Hlsnuhw_UdDs59@E78d(z3#!CF2CQ@wv+p>{ zn>qH2z?@|m>`$wE_Ul4WQvYDG&RfXWmE_JGlrlZqAqB7o6{e7sVS6}rfh{yr0d8&1MBM#+$4h<*b=C_fpv#ph^yD*8w(#(kB?$Lv|dAS z##F}p^-RX`O*h0TgAGiS>nzcV45PnrN?Y=#o(8xO8}mxN{G!1vBKpE5$#^!`Fndx}|7fFqCl`>q`- z=4=T{);%tVOC#1N!wxVaBQ&PXRiOyMW$|*2DI&$Ys)L7ZtYJ?W;s8bS@1hC>sLSS$ z<(k6G*~ApqpZTMawpV6B885p;8OLY?xL-}HshN+_0_6`9bUzMSn7aFkB7~gWwc3B6 zF1mt&5MslV=DWym21THDt&cVsybXcsKtgTDXfXX@@N)R>2{voZ$bX_uM!w+?D;!Wi zAR-_D-!@A?cXv?kA%;vt+^96rr<(=KJwPT`zhV$nzW7-n{8Z`6PGns{R=kO(OD(SJ z_lb#QHgUPGW(iNv=UPUhlPGP%<%ct`WY?9mW7Bnig9h=ls_ry=t>FB%3ueKY!v%Wz zl`eaAZ>~*Bl4QPlq7XLX06ATaT7gW=#WQ41P@o}1F;mCm7=cIZfR#n))B!H93e?GD z6sd^mb$?lNkV}7*A)cmH5oq3EE#19xf)ECdBNQ^VgY%(njwt?xre^qTHyeI7po5=U zJ+s(6sk2bTg`nqHx_%>WL)Vt0PWkGTg?b(b=Xz z)-vR!a|1#DF)_^|-Ooh&uDEW;fl$t`wLbnA9~vow8%0KykOE|Vf zlbMTu{-@Dus{eX7>g6UA<3$?qrd)-Y?`|Vs`NzyW2$rZ-->zc^Wvg?++sm}_WJ~@H z1@b{8&#ZL-<%0(1Wq`YB_2Ug0cTU(Eh#>p%7B#j{l`El}(7=cun; zxzyWKyODRd;2F!suiJde@0;c?s9h7Da1qD5+iF`0-4$Y6Vp(Q|@(d5UtoG-8Y2kT+ zw(C_O!~DCXD6{@+{qK#${qGh8XhGXS>{)q56$6F=`AW>46Zn^GE1uWs14yOMm7V9b zN{58gHZ^yrLnC#ips}Jm=JXB16}H=}Bc*^w;xK+@l)%u}i?7k)i|kCG=QG6_trV^5zobg+L)JxNe{jq}?i#GG$z}j9H$&@jCvo z<^eqZq=aIV0fGrSjb_uURJ<#tf;CYTCkrZupJYQTSdP5 zez>v<#Mn|XU%nz=ab0*e?3$}kLo6=RF>6}MBY!HBn#9IvBwfq?_A{k#$W&st>~0p` z5~Z80K7Un^_+vDG{e~Y!EHu$u=dI^|=Gt_z?j4#h$J6wnO;`s@S3gx$=e}Y02)8L< z`(in^zk5}57huVL#Wp%e^i1c3(<%20Edz5mBKdLukNs}_irow$Wz%e?<0sEqB6=0? z2M3k}xC!8cK+NAUL;J^^ha9E+ z#gLT;_SHo5TstocL4kgBAA5n6Y`ysZW@DRKFj#W_1~%fUC$A%s;aO|?IoE)C$oR`+ zGOsrbBT5T?{`md6zr38l&dt86H`+?i_i@X5SML;K2=5tMe;<^x7$BTrG0q)oMd+8Q z<{oHs^>UrOZ%(T0BUnEw3dPO2nmOzr)zUq#B$K%uvx7RgyT6Y$gH|eodTNW*4MQ#O zn?X1YwO_3xE8JI(yR+cEq%=?jkqhDcAYzzSH4J>vON$mX`9~OOX`?^v2(6lupx}|& zQ0ZuATiJX>MlStGm2e{?VY(74LBz1HAMO|3@|HWVwLD5X>)hQ7CWnd@OrF3jQMl=h z`5u6W{;F$8R`Y6z=fb$IMu2NaOr7~e`gDuB{e*q11ppVRITnaYz(sN)(smTPj(TFH z=J{jm7>>8PVJOn?hFnrgYPzXr^$Sg0xXki6@|$&ediavgNyz2_)U(2epi{R76qw9P zh_L0}x@dOm`C)0Mc8UqUYjquZ^{0Lb*rvVuWY(P&+(m3kX>Z6ogf1h9{g#_h9(wxKu6_Fq-3cc%&kmzKCwAVvP*K6R2ZGJwv|KKFjL znw6M)AHwRAOIU_XBc4yUwy}~o^ow3u#yrLQYX62l1_-Ogul&i43EQ=bRo*V@zo0V4nEPWYVO+#0 zL66!#Egq+l@xQ)LPFcN~fFOo^v@*{kgNTiD<_qr@2hp000qq7nsdr~9)c)RE&_^5g znGie(0oUq+R+d z{>4_qneXyJZyTDhoybESr1yBJ_SUN2r?pqVV4iguZc?XR+1v?!XD1LOj(**=k4_6ot8g-3m_F!$_dN zn_K;=!>g=Ds};!2X;g{VKUdq^C%W=(?72AyT94YJ@D1zJr(xI&rYMv%9_c)W)d1OT zgGTEG#`9lEbU-I*C~dbV)}tkI$#u`?jTBhb&q3e_!68}rVGCJ^L~*|Z*EhNSOSx9F z(W;SzvdN5+V(T4$9K5s^I{60dyw{F)zSe7-!+WjEgF)nt4oS5#Jz&K>O$cW#ighHD z*SAvg2!mW&=hv{hW=m(yBlJ9AatPo$Rw6^(LY0IDYQ*!}jOv}GnM)AX^xL$Xs zzs(oA_!>oE^HikavI%+J47wI{qf%gZH@kv0ezaoV4V_UI6Q~*wBLM8bu`E{c|S{}9Y6@v*s-$P49W)~@aBR)v?(%!e@tg| zXveH7InI+shGS9>HoKlMJH8@6zFznr#FlfexzxyXI5j)W9N{$l=xa^#810i9k_k`R z^n)Ai&ut54cmspr8PxZ=+lr$7W#p%`L|{!<@yk0jyDIQCE=JsgJED`t2aVAO0JX)+ zYn!ZF8T79z`ZFvIzG+cZgO*2z$1?>?0r@=&5(hrNkgKWkMQPzYC)D-*%BEksV2O9t zf32T}0618aCFAZ=o4M@QbzVo)Un^HVW_~p*hT@7iAjLp}2{0KH)ldz8k;?GP{(3h| zf3d(d5G)RSaVQ(tY*-6?gdI`2B38I`rc*l6Q}(mw6C;A$%u`xhZ1Zkteed#)iDr=j z%Et#`L~pLOdgiP;jg%GJT|T9`uhaU!><}CH5ga>;O^K{DOaLA)gZn5V*CdhPKLtza-eC+Hcz<0j8%=P!&KQ1kc6^WX{ zov9$Ag01{C<{KRg3{?*fmhe&J@h8b8*G&Lx)e zl}n{KtNYs`rCIdNadPPhEi23yj&eI33E#cid~1eu zV8qRiG`R;HoYWDeH2?g4;ksJGV~y+zmuuKxu%QU}=)#Ae-1vJs{;hb&CTem(CWrMc zS^~^VnBwRZUysn8lV5^@ZE_2!Xuf_vpU6u*Qm2}$Ry~chzyx1F7Sylq0ReV z(rll(P`Qqmy4p{s6fuu?WxyHnQryM)NLQhZ!*-os-~YC*_3g>ptK+d}=;S6K(ZF0x z>yM1z{{6h4O%;+sfcTL)22dEjW3wmp>T2XYE(y{ZrVR?^8UI4aY(}Zrg3yDgS7D|4`*@J@y!+DbNyj?ZEsf!~0ImJD0_*5JN zJg7YSaS#kKKpJfI3Oz{44na2~JEkuAsDsnN1g5v^rri8o$Wz-m($Nv>O?oqQTwb?` zJ{&-;q-GEJgci2rwg>@AU;r-90L4y(=l;=rQX6SjBZpi5P3#l>gMv4zTrJBcZ$y_< zLwTFY-Kjp=+xrGhhtAV2VE|G73m44JCt-rh_ha>r>4{p)nW-9r*oFW zJZp1ZuT<&0*dv_gQV>}#-^$6^+@5`_orNNGkJ?+_HKyU%F&GI~3Cvx{n46b3)O6q{{)y>LB5?5b{w%<730@m}|Aw^2qiw2q{DSY$*M{l2 z$a(xC#ZAhH1D~(Bc!9uY~gK@a-F1xskvB%ghFB5LU1rB2;2aZ?BA`{2Sm_t zWBxBHs;XXYWV^ii6!}XP<`qQMcCT7Cyk9>*t0Aio*(QYvQhukQ75_z4{L&s$WG!u=5|*lpY*_eGoh0K->|OHXP| zEDIJ;famM}o+gq0a;>#K6(y;oumRfF@NhyEQ;jO4p>2(px_aK0N7$Zo_fz?*&4lsmGja^>f-ddHtSrh4BOzt=!{uldI(TgOQs6Bq)$a)kxge8gib#ztKY1ggC|0#J*;MUd z$UK>P0GO!jSHudq?>DMYM)qw>0I?%>yhq7R&7Q15k;k5mtuTS55kQ`3mx;a?u#4ZE zB9QRDN+>DCY^|MVU&Biv&i_0!@}E1jqXBT+g};}-_FHj`#(2@)vBU7_ zsLF+12EVUL!@>|1O*{YPA1@r3la+>w*7vOzW`XwLq^vQ#5;ove=0Vy$p@f=DF<9k3 z9+mPu{yR(_gV^ z6uj^v35A>?`Hji>nXo34uBQsxwV!KE4$6<;`q*)t`{1y6+(b=}&ETd0<<6U?Nw$Rx z?!X|$l}5ZRDTztotu}HbgZXjfyO%TF112j>X72HH6Zmv=D3t$4ox|leUhD%wmu-M; z0*j$u>o{uQ$SxDtjoCdhzX&^cYkc(2BQEUn(DCR7yvO{n2;+)BZAktTvfig(WQ~`5 zuLdLJc+w$A4FT<6Q_i@SQt5~jd&s?5nF;mhmg#&Fh#^8E_R?OWzpqa$cKkVzT}Lh| zDZp!#mPmI+Bay@D1-}{CErKF`@jO1JD6W+U@+vi_EA2FCikW)Fe>)$n8 zrPPCZB)jqe-Zg7YEprs3Wl4w0Zb}T$!uR~4M=LANk}x|={nb#sp6 z5RyOy9E23pkp$~{r1(veWyv}$xR3C>dE%17I6uhgs`c^2YOlF3AxOPPnN{^XW? zolEw)OzQp5Ys&sn$^plrwoIr$OZ#4ZeDkY zGZGrspFSsO6Xyj6BONL1v=3oUrk?+rO(UCAWx_Z`Jc9T}x4A=58l-Mr#ao z(Ce!sjWvqVQjZJVt`zJJQKu`Y#yUfBeX{t7uu>mlc=uAVlFBg4LWYjnBRnrv#+Dpz z*znXgw%}sS#9|9J-jT6-+(pqrJgp^ddsu4sZQ=X-5ZkN-HK3^jHNsy-?T{xfCpXp) zpdd{S_>Eg`)yduXaYQ*3jQXaMFW({jbW=yhy;L^iX6psz9FeL%S($)ChXSD1?vt&_!%*_T{2=Y+cp!al(37Y1_SWD(_*vg4Ots+o7=sDC<>1nJvGLQ&4W?2( zcDfz^Q&cw5$lT{7IYMy!+<0n;E1S3R4`XvWVN4`J4hx3x)A1&>xkcrGp8zau?Bi-? z`?lMBFjU+V>`xTKPk8$X0~(n7AORj~ep)m&B!hnFhz@y)!$P^5u|Exv=ksCn{Mu7e z{+lth;o;$UezN_{Uli#m#dA^!)sQwVf%HOgUbD_k-4Kz>c_OFE81?(TENB8cSS1MP z^#me+TX6Af&6dCBpKTq5eNz`qQl{J%pM*^Mypbd(Hq8cexIb9GG(lcemSypgx&Vjh zP0X!deVr`=3|CVXV<$8;tIMCa)v{E*Xq)4lH)u;mau{UL9P3k)CjN9z}Vp#UiR(p&zop3Zi|SvM(6IPZ0oLhNIVsmFOIS_MfN%#|k3CB!MDZEem3W+Xw&ii3aYVFqzJ5FLW} z&X~XDoMK~9&J{qi&c)Ep1f{C@XfKmSyp!ng>oZewV0uG z@SbEonD%nv?P!v(BL$ry=h~^HCB(eRsJM)xc5>?sM70IReq<1RMIZ>?pXpaseziGI z*KNqU`eEx$eryc5LpVn2DRv|#53V`n>a453gH3Y=Lm0{hA{aCr>B{>oE&%6 z7q#d@vo65-rP1r_q5Dh9%HHyrg;eH_ zo57z-MX~flFrtvmhPe2+jbno$#>9XI)2iPhFiLvqtE`c|61`yB*6T{_kv3gX#mDGo zsiP96KSS;m5^IdJe)fj^UHCfKLnnPuA`;lC7?2?4;hD2M=@i~J#k@JT74W&}Q_KAQ z&ifOhp8V&Sm>7P{KMXHGyFDleJgUzU>=Ai#i@kqqUCW`8A&~4d!Jn0g<;qjG@e)tK zA12#VON$1onY;?JD{RIg%)LDUjfs6IFYhO+Vq;AGuJHQ?OAyq)5U|uz3ho4@nj&N});0!~(MaR*aD{yVzD{T;Zl%3n?@g10!zMIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png index 88cfd48dff1169879ba46840804b412fe02fefd6..38a50f01347eec3e4f8390af444bd1ec4bfe3820 100644 GIT binary patch literal 14908 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 literal 8252 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 diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png index eb9b4d76e525556d5d89141648c724331630325d..1a5ea51f06935da0564379e0346ab5d2260df5f5 100644 GIT binary patch literal 15802 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png index d69c56691fbdb0b7efa65097c7cc1edac12a6d3e..38a50f01347eec3e4f8390af444bd1ec4bfe3820 100644 GIT binary patch literal 14908 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 literal 20998 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 MPgg&ebxsLQ025IeI{*Lx