From 404a9065a7a3fd4b9ca8efcab3a7e36858f6ea95 Mon Sep 17 00:00:00 2001 From: Ivan Vigliante Date: Fri, 18 Sep 2020 16:18:34 -0600 Subject: [PATCH 01/25] Added ability to track eggs using Amplitude's event-properties --- .../helpers/pb_plugin_list_helper.dart | 12 ++++++++++-- lib/main.dart | 6 +++++- pb-scripts/merge-plugins.sh | 5 +++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart b/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart index e5b19b15..2421b9a1 100644 --- a/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart +++ b/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart @@ -1,8 +1,7 @@ -import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/plugins/switch.dart'; +import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/plugins/injected_tab_bar.dart'; import 'package:parabeac_core/plugins/injected_app_bar.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/input/sketch/entities/layers/symbol_instance.dart'; import 'package:parabeac_core/plugins/injected_tab.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; @@ -32,6 +31,15 @@ class PBPluginListHelper { Map allowListNames; + /// List of static plugin names used for Amplitude + static List names = [ + '.*switch', + '.*background', + '.*navbar', + '.*tabbar', + '.*tab', + ]; + List baseNames = ['.*background', '.*navbar', '.*tabbar', '.*tab']; /// Adds `node` to the list of plugin nodes if the semantic diff --git a/lib/main.dart b/lib/main.dart index ecee7bde..46849e52 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/controllers/sketch_controller.dart'; import 'package:parabeac_core/input/sketch/services/input_design.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_plugin_list_helper.dart'; import 'package:quick_log/quick_log.dart'; import 'package:sentry/sentry.dart'; import 'package:uuid/uuid.dart'; @@ -138,7 +139,10 @@ void addToAmplitude() async { var lambdaEndpt = 'https://jsr2rwrw5m.execute-api.us-east-1.amazonaws.com/default/pb-lambda-microservice'; - var body = json.encode({'id': MainInfo().deviceId}); + var body = json.encode({ + 'id': MainInfo().deviceId, + 'eventProperties': {'eggs': PBPluginListHelper.names ?? {}} + }); await http.post( lambdaEndpt, diff --git a/pb-scripts/merge-plugins.sh b/pb-scripts/merge-plugins.sh index 53b51c05..31acf756 100644 --- a/pb-scripts/merge-plugins.sh +++ b/pb-scripts/merge-plugins.sh @@ -107,6 +107,11 @@ do '"${inline[newCounter]}"' : '"${classSaved[newCounter]}"'(Point(0, 0), Point(0, 0), Uuid().v4(), currentContext: context), ' pb_plugin_list_helper.dart + sed -i.bak ' + /List names = / a\ + '"${inline[newCounter]}"', + ' pb_plugin_list_helper.dart + echo $tempLine | cat - pb_plugin_list_helper.dart > temp && mv temp pb_plugin_list_helper.dart echo "[INFO]: Plugin set!" else From f3dd184e1f8f4722b94b34a9f39240ba4333136e Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Wed, 23 Sep 2020 18:07:56 -0600 Subject: [PATCH 02/25] Merging `stable` into `dev` (#34) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update MANIFESTO.md * Update README.md * Update README.md * Update README.md Updated ReadMe with some structural changes and minor fixes * Update README.md Added `pub install` to getting started. * Update README.md * Update README.md * Added ability to track eggs using Amplitude's event-properties (#25) Co-authored-by: Ivan Vigliante * Fix wiki link (#27) * Update issue template * Remove unused import Co-authored-by: Ivan Huerta Co-authored-by: Eddie Co-authored-by: Ian Hudson Co-authored-by: ChangJoo Park(박창주) Co-authored-by: Eddie --- .../ISSUE_TEMPLATE/refactor-issue-template.md | 17 +++ MANIFESTO.md | 4 +- README.md | 115 ++++++++++-------- lib/design_logic/design_element.dart | 2 - lib/design_logic/design_node.dart | 1 - .../flutter_project_builder.dart | 3 +- .../fluttter_page_builder.dart | 2 - .../attribute-helper/pb_color_gen_helper.dart | 4 +- .../generators/helpers/pb_gen_helper.dart | 1 - .../generators/layouts/pb_column_gen.dart | 1 - .../generators/layouts/pb_layout_gen.dart | 1 - .../generators/layouts/pb_row_gen.dart | 2 +- .../generators/layouts/pb_scaffold_gen.dart | 1 - .../generators/layouts/pb_stack_gen.dart | 4 +- .../layouts/pb_v_scrollview_gen.dart | 2 - .../generators/pb_flutter_generator.dart | 1 - .../generators/plugins/pb_injected_node.dart | 3 - lib/generation/generators/screen_builder.dart | 2 - .../symbols/pb_instancesym_gen.dart | 1 - .../visual-widgets/pb_align_gen.dart | 4 +- .../visual-widgets/pb_container_gen.dart | 3 +- .../visual-widgets/pb_flexible_gen.dart | 4 +- .../visual-widgets/pb_padding_gen.dart | 4 +- .../visual-widgets/pb_positioned_gen.dart | 3 +- .../visual-widgets/pb_shape_group_gen.dart | 3 +- lib/input/sketch/entities/layers/bitmap.dart | 3 +- lib/input/sketch/entities/layers/oval.dart | 4 +- .../sketch/entities/layers/rectangle.dart | 5 +- .../sketch/entities/layers/shape_group.dart | 3 +- .../sketch/entities/layers/shape_path.dart | 1 - .../entities/plugins/plugin_container.dart | 5 +- .../helpers/node_tuple.dart | 1 - .../helpers/pb_context.dart | 1 - .../helpers/pb_deny_list_helper.dart | 1 - .../pb_semantic_generation_service.dart | 1 - .../pb_visual_generation_service.dart | 1 - lib/plugins/injected_app_bar.dart | 4 +- lib/plugins/injected_tab_bar.dart | 8 +- lib/plugins/switch.dart | 21 ++-- .../padding_dynamic_size_test.dart | 2 - 40 files changed, 115 insertions(+), 134 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/refactor-issue-template.md diff --git a/.github/ISSUE_TEMPLATE/refactor-issue-template.md b/.github/ISSUE_TEMPLATE/refactor-issue-template.md new file mode 100644 index 00000000..ee83a501 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/refactor-issue-template.md @@ -0,0 +1,17 @@ +--- +name: Refactor Issue Template +about: Request a change in the codebase. +title: '' +labels: enhancement, refactor +assignees: '' + +--- + +## Change Proposal +Describe in a sentence or two the change that is being requested. + +### Module and Current Solution +What is this change going to affect (Alignment Service, Generation Service, etc...) and the current solution that is implemented. + +## Benefits of the Change +What improvements occur because of this change? (Readability, Performance, Scalability, etc...) diff --git a/MANIFESTO.md b/MANIFESTO.md index ee0c125f..d234c557 100644 --- a/MANIFESTO.md +++ b/MANIFESTO.md @@ -4,6 +4,6 @@ Why go to 8 months of effort to build a new tool, just to have developers around Easy. Parabeac builds apps for developers, so who better to ensure our tool quality? Frankly, the developers we built this tool for could probably build it themselves (though, honestly, we think we did a pretty sweet job). Our belief is that the quality of Parabeac code should be defined not by us, but instead by the real-time consensus of the global developer community. -We love what we do at Parabeac. Most of us live out in far West Texas but we honor and respect the global developer community, from Mountain View to Mumbai. We know an ocean of global enthusiasts will make Parabeac better in ways we could never have envisioned by ourselves. They will configure and change to fit what their real requirements are, not what we thought their requirements might be. In short, we want Parabeac Core to be the clear pool of open source code into which every developer around the world can see a bit of their own reflection. +We love what we do at Parabeac. Most of us live out in far West Texas but we honor and respect the global developer community, from Mountain View to Shanghai. We know an ocean of global enthusiasts will make Parabeac better in ways we could never have envisioned by ourselves. They will configure and change to fit what their real requirements are, not what we thought their requirements might be. In short, we want Parabeac Core to be the clear pool of open source code into which every developer around the world can see a bit of their own reflection. -So welcome. \ No newline at end of file +So welcome. diff --git a/README.md b/README.md index 395c826a..9267b8ca 100644 --- a/README.md +++ b/README.md @@ -14,64 +14,27 @@ Parabeac-Core is an open-source repository that converts design files into Flutt · Understanding the code export · - Contribute + Contribute · Community + · + Dev.to -# How it works -Parabeac-Core is essentially broken up into 3 pieces which you can see in the list or animation below. While most of the magic is in the interpretation engine, you can view more animations & information here. - - 1. Convert design file into Parabeac design protocol - 2. [Interpretation Engine](https://github.com/Parabeac/parabeac-core/wiki/Parabeac-Interpretation-Engine-Overview) - > Made up of the Visual, Layout, & Alignment generation services. - 3. Generate Flutter code - -![Parabeac High Level Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-high-level-animation2.gif) - -## [Parabeac Design Protocol](https://docs.parabeac.com/) -Parabeac Design Protocol is our way of helping define UI/UX elements within Design Files for cleaner and more succinct code conversion. By adding naming-semantics to elements, symbols, and layer names to the design file, Parabeac-Core is able to identify specific UI elements & override interpretation & generation with a specific implementation. - -## [Visual Generation Service](https://github.com/Parabeac/parabeac-core/wiki/Visual-Generation-Service) -These are mostly built by a one to one relationship from the Parabeac Design Language into Parabeac Intermediate Nodes. For example, a rectangle in the design language will simply convert to an `InheritedContainer`. - -![Parabeac Visual Generation Service Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-visual-generation-service.gif) - -## [Layout Generation Service](https://github.com/Parabeac/parabeac-core/wiki/Layout-Generation-Service) -This service is a bit more interesting, as we break down each group of nodes to be laid out by the layout service. The service takes the first 2 nodes compares them & generates a layout, we grab the next node, compare it to the layout & then the leaves if needed to and continuously traverse the rest of the layer into the laid out tree that we construct. - -![Parabeac Layout Generation Service Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-layout-generation-service.gif) - -## [Alignment Generation Service](https://github.com/Parabeac/parabeac-core/wiki/Alignment-Generation-Service) -In Flutter, there are only a couple ways to achieve alignment. We recognized the following as the most common: -* Flex-based layouts -* Padding/margin -* Positioning (Stacks) -* Alignment (Container/Single Child/Visual Node) - -Depending on the type of layout to add alignment to we have various services to take the nodes in and apply the alignment information needed. - -![Parabeac Alignment Generation Service Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-alignment-generation-service2.gif) - -# How to contribute -Welcome! The best way to contribute to Parabeac is through pull requests, filing issues on Github, writing documentation & helping others in our Discord community. We are an early project, but like many other projects, helping with bugs that others have filed on Stack Overflow is extremely helpful. We recommend filing bugs & feature requests on the Github issue tracker. For more details make sure to check out our [wiki](https://github.com/Parabeac/open_source_prep/wiki). - - -# How to create & run Parabeac eggs -Parabeac eggs are essentially plugins that change the way a set of design elements are interpreted. A very simple example of this are 2 eggs that we created called NavBar & TabBar. Eggs are loaded into the project before the runtime of Parabeac-Core because unfortunately dart doesn't support [dynamic module loading](https://github.com/dart-lang/sdk/issues/10530). - -You can also create your own eggs! By using our [Parabeac Egg Template](https://github.com/Parabeac/parabeac-egg-template) you can quickly define your own semantics and corresponding code generation which allows for the most flexible and robust export customization possible. You can also upload your eggs to our **_git-based marketplace for templates_** to help support the community going forward. +# Get Started -To add a Parabeac egg, download the egg and add it to the `parabeac-core/plugins` folder. When you run Parabeac-Core it will automatically grab & import the egg into the project. +If you have any trouble with getting Parabeac-Core running, check out this video! [![Parabeac-Core Getting Started](https://img.youtube.com/vi/e4CJgPMNCyo/0.jpg)](https://www.youtube.com/watch?v=e4CJgPMNCyo&feature=youtu.be) +Parabeac currently supports conversions from [Sketch](https://www.sketch.com) but is designed to support more platforms in the future. ### Dependencies - [Dart](https://dart.dev/get-dart) - [Flutter](https://flutter.dev/docs/get-started/install) - [node.js](https://nodejs.org/en/download/) + - MacOS + Xcode or Android Studio To test out a Sketch file feel free to download [this Sketch file](https://drive.google.com/file/d/10ZdTTUCFLrGJ-1oVmapWoH5HCe87Sz4e/view?usp=sharing)! @@ -100,24 +63,72 @@ Follow these steps in order to run Parabeac Core on your local environment: 1. Clone PBCore repo in order to get the code on your machine 2. If you have any plugins make sure to put the plugins in the plugin folder 3. In your terminal change directory to the root PBCore directory and run: + ``` bash - $dart parabeac.dart -p -n + $ pub install + $ dart parabeac.dart -p -n ``` ## Metrics Parabeac-core keeps track of how many times it is run. Although we do not collect any personal information, you can turn off metrics at any time by creating the environment variable `PB_METRICS = "false"`. # Running the exported code -### Requirement(s) +### Requirements +- Flutter +- Dart +### Steps +1. Make sure you have flutter installed correctly. (You can run ```flutter doctor``` within your terminal to easily check) +2. Move to the Flutter Projects Root Directory +> **If your Project utilizes Sketch Prototyping Skip to Step 5** +3. Within Main.dart import the main screen that you want the app to launch with from the screens folder +4. Next change the home property of the MaterialApp that is being returned in the Build Method to the name of the Screen imported in Step 3 +5. Save Main.dart and Execute `flutter run` in your terminal -- Download [Flutter](https://flutter.dev/docs/get-started/install) -- Traverse to main.dart -- Call the screen you want to view -- Execute `flutter run` +# How to create & run Parabeac eggs +Parabeac eggs are essentially plugins that change the way a set of design elements are interpreted. A very simple example of this are 2 eggs that we created called NavBar & TabBar. Eggs are loaded into the project before the runtime of Parabeac-Core because unfortunately dart doesn't support [dynamic module loading](https://github.com/dart-lang/sdk/issues/10530). -# Get Started +You can also create your own eggs! By using our [Parabeac Egg Template](https://github.com/Parabeac/parabeac-egg-template) you can quickly define your own semantics and corresponding code generation which allows for the most flexible and robust export customization possible. You can also upload your eggs to our **_git-based marketplace for templates_** to help support the community going forward. -Parabeac currently supports conversions from [Sketch](https://www.sketch.com) but is designed to support more platforms in the future. +To add a Parabeac egg, download the egg and add it to the `parabeac-core/plugins` folder. When you run Parabeac-Core it will automatically grab & import the egg into the project. + +# How it works +Parabeac-Core is essentially broken up into 3 pieces which you can see in the list or animation below. While most of the magic is in the interpretation engine, you can view more animations & information here. + + 1. Convert design file into Parabeac design protocol + 2. [Interpretation Engine](https://github.com/Parabeac/parabeac-core/wiki/Parabeac-Interpretation-Engine-Overview) + > Made up of the Visual, Layout, & Alignment generation services. + 3. Generate Flutter code + +![Parabeac High Level Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-high-level-animation2.gif) + +## [Parabeac Design Protocol](https://docs.parabeac.com/) +Parabeac Design Protocol is our way of helping define UI/UX elements within Design Files for cleaner and more succinct code conversion. By adding naming-semantics to elements, symbols, and layer names to the design file, Parabeac-Core is able to identify specific UI elements & override interpretation & generation with a specific implementation. + +## [Visual Generation Service](https://github.com/Parabeac/parabeac-core/wiki/Visual-Generation-Service) +These are mostly built by a one to one relationship from the Parabeac Design Language into Parabeac Intermediate Nodes. For example, a rectangle in the design language will simply convert to an `InheritedContainer`. + +![Parabeac Visual Generation Service Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-visual-generation-service.gif) + +## [Layout Generation Service](https://github.com/Parabeac/parabeac-core/wiki/Layout-Generation-Service) +This service is a bit more interesting, as we break down each group of nodes to be laid out by the layout service. The service takes the first 2 nodes compares them & generates a layout, we grab the next node, compare it to the layout & then the leaves if needed to and continuously traverse the rest of the layer into the laid out tree that we construct. + +![Parabeac Layout Generation Service Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-layout-generation-service.gif) + + +## [Alignment Generation Service](https://github.com/Parabeac/parabeac-core/wiki/Alignment-Generation-Service) +In Flutter, there are only a couple ways to achieve alignment. We recognized the following as the most common: +* Flex-based layouts +* Padding/margin +* Positioning (Stacks) +* Alignment (Container/Single Child/Visual Node) + +Depending on the type of layout to add alignment to we have various services to take the nodes in and apply the alignment information needed. + +![Parabeac Alignment Generation Service Animation](https://kindling-sketch.s3.amazonaws.com/parabeac-alignment-generation-service2.gif) + + +# How to contribute +Welcome! The best way to contribute to Parabeac is through pull requests, filing issues on Github, writing documentation & helping others in our Discord community. We are an early project, but like many other projects, helping with bugs that others have filed on Stack Overflow is extremely helpful. We recommend filing bugs & feature requests on the Github issue tracker. For more details make sure to check out our [wiki](https://github.com/Parabeac/Parabeac-Core/wiki). # Upcoming & Known Issues diff --git a/lib/design_logic/design_element.dart b/lib/design_logic/design_element.dart index a61bc49b..36dc820b 100644 --- a/lib/design_logic/design_element.dart +++ b/lib/design_logic/design_element.dart @@ -1,6 +1,4 @@ -import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; abstract class DesignElement extends DesignNode { DesignElement() : super('', '', false, null, '', null, null); diff --git a/lib/design_logic/design_node.dart b/lib/design_logic/design_node.dart index 33aa41f5..52f7caf8 100644 --- a/lib/design_logic/design_node.dart +++ b/lib/design_logic/design_node.dart @@ -1,4 +1,3 @@ -import 'package:parabeac_core/design_logic/rect.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; diff --git a/lib/generation/flutter_project_builder/flutter_project_builder.dart b/lib/generation/flutter_project_builder/flutter_project_builder.dart index 5d2171a9..2b2fbe61 100644 --- a/lib/generation/flutter_project_builder/flutter_project_builder.dart +++ b/lib/generation/flutter_project_builder/flutter_project_builder.dart @@ -12,11 +12,10 @@ import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_n import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_gen_cache.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; import 'package:parabeac_core/plugins/injected_app_bar.dart'; -import 'package:parabeac_core/plugins/injected_tab.dart'; import 'package:parabeac_core/plugins/injected_tab_bar.dart'; import 'package:quick_log/quick_log.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; String pathToFlutterProject = '${MainInfo().outputPath}/temp/'; diff --git a/lib/generation/flutter_project_builder/fluttter_page_builder.dart b/lib/generation/flutter_project_builder/fluttter_page_builder.dart index 922a8910..83443421 100644 --- a/lib/generation/flutter_project_builder/fluttter_page_builder.dart +++ b/lib/generation/flutter_project_builder/fluttter_page_builder.dart @@ -1,6 +1,4 @@ import 'dart:convert'; -import 'dart:io' show Platform; -import 'package:parabeac_core/controllers/main_info.dart'; import 'dart:io'; class FlutterPageBuilder { diff --git a/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart b/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart index b0c65ad3..8ab8bdb2 100644 --- a/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart @@ -1,8 +1,6 @@ import 'package:parabeac_core/generation/generators/attribute-helper/pb_attribute_gen_helper.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; class PBColorGenHelper extends PBAttributesHelper { PBColorGenHelper() : super('color'); diff --git a/lib/generation/generators/helpers/pb_gen_helper.dart b/lib/generation/generators/helpers/pb_gen_helper.dart index 22d74bce..726b952c 100644 --- a/lib/generation/generators/helpers/pb_gen_helper.dart +++ b/lib/generation/generators/helpers/pb_gen_helper.dart @@ -1,4 +1,3 @@ -import 'package:parabeac_core/generation/generators/pb_generator.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; abstract class PBGenHelper { diff --git a/lib/generation/generators/layouts/pb_column_gen.dart b/lib/generation/generators/layouts/pb_column_gen.dart index bd667e7d..cd3cc184 100644 --- a/lib/generation/generators/layouts/pb_column_gen.dart +++ b/lib/generation/generators/layouts/pb_column_gen.dart @@ -1,5 +1,4 @@ import 'package:parabeac_core/generation/generators/layouts/pb_layout_gen.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/column.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; diff --git a/lib/generation/generators/layouts/pb_layout_gen.dart b/lib/generation/generators/layouts/pb_layout_gen.dart index b2c24f4f..79b9c49c 100644 --- a/lib/generation/generators/layouts/pb_layout_gen.dart +++ b/lib/generation/generators/layouts/pb_layout_gen.dart @@ -1,6 +1,5 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; abstract class PBLayoutGenerator extends PBGenerator { PBLayoutGenerator(String widgetType) : super(widgetType); diff --git a/lib/generation/generators/layouts/pb_row_gen.dart b/lib/generation/generators/layouts/pb_row_gen.dart index 2ea9d8ac..8c1df85e 100644 --- a/lib/generation/generators/layouts/pb_row_gen.dart +++ b/lib/generation/generators/layouts/pb_row_gen.dart @@ -1,7 +1,7 @@ import 'package:parabeac_core/generation/generators/layouts/pb_layout_gen.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/row.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; + import '../pb_flutter_generator.dart'; class PBRowGenerator extends PBLayoutGenerator { diff --git a/lib/generation/generators/layouts/pb_scaffold_gen.dart b/lib/generation/generators/layouts/pb_scaffold_gen.dart index 4567e637..3fe87fd9 100644 --- a/lib/generation/generators/layouts/pb_scaffold_gen.dart +++ b/lib/generation/generators/layouts/pb_scaffold_gen.dart @@ -1,6 +1,5 @@ import 'package:parabeac_core/generation/generators/attribute-helper/pb_color_gen_helper.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; diff --git a/lib/generation/generators/layouts/pb_stack_gen.dart b/lib/generation/generators/layouts/pb_stack_gen.dart index 64a6d785..f6de86e2 100644 --- a/lib/generation/generators/layouts/pb_stack_gen.dart +++ b/lib/generation/generators/layouts/pb_stack_gen.dart @@ -1,7 +1,7 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/stack.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; + import '../pb_flutter_generator.dart'; class PBStackGenerator extends PBGenerator { diff --git a/lib/generation/generators/layouts/pb_v_scrollview_gen.dart b/lib/generation/generators/layouts/pb_v_scrollview_gen.dart index c873b1fe..89a57747 100644 --- a/lib/generation/generators/layouts/pb_v_scrollview_gen.dart +++ b/lib/generation/generators/layouts/pb_v_scrollview_gen.dart @@ -1,7 +1,5 @@ import 'package:parabeac_core/generation/generators/layouts/pb_layout_gen.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import '../pb_flutter_generator.dart'; class PBVerticalScrollViewGen extends PBLayoutGenerator { PBVerticalScrollViewGen() : super('VERTICAL_SCROLLVIEW'); diff --git a/lib/generation/generators/pb_flutter_generator.dart b/lib/generation/generators/pb_flutter_generator.dart index 0c3bcf90..9d3019dc 100644 --- a/lib/generation/generators/pb_flutter_generator.dart +++ b/lib/generation/generators/pb_flutter_generator.dart @@ -1,7 +1,6 @@ import 'package:parabeac_core/generation/generators/pb_param.dart'; import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/generation/generators/util/pb_input_formatter.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; diff --git a/lib/generation/generators/plugins/pb_injected_node.dart b/lib/generation/generators/plugins/pb_injected_node.dart index 40cc3f78..09897f7c 100644 --- a/lib/generation/generators/plugins/pb_injected_node.dart +++ b/lib/generation/generators/plugins/pb_injected_node.dart @@ -1,9 +1,6 @@ -import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; -import '../pb_generator.dart'; - class PBInjectedNode extends PBIntermediateNode { PBInjectedNode( Point topLeftCorner, diff --git a/lib/generation/generators/screen_builder.dart b/lib/generation/generators/screen_builder.dart index b3976093..c611ccfa 100644 --- a/lib/generation/generators/screen_builder.dart +++ b/lib/generation/generators/screen_builder.dart @@ -1,5 +1,3 @@ -import 'dart:convert'; - import 'package:build/build.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; diff --git a/lib/generation/generators/symbols/pb_instancesym_gen.dart b/lib/generation/generators/symbols/pb_instancesym_gen.dart index bf82d62e..517bfad5 100644 --- a/lib/generation/generators/symbols/pb_instancesym_gen.dart +++ b/lib/generation/generators/symbols/pb_instancesym_gen.dart @@ -1,5 +1,4 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/generation/generators/util/pb_input_formatter.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; diff --git a/lib/generation/generators/visual-widgets/pb_align_gen.dart b/lib/generation/generators/visual-widgets/pb_align_gen.dart index b9ff07a4..840d23f0 100644 --- a/lib/generation/generators/visual-widgets/pb_align_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_align_gen.dart @@ -1,10 +1,10 @@ import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/injected_align.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:quick_log/quick_log.dart'; + import '../pb_flutter_generator.dart'; -import '../pb_widget_manager.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/injected_align.dart'; class PBAlignGenerator extends PBGenerator { var log = Logger('Align Generator'); diff --git a/lib/generation/generators/visual-widgets/pb_container_gen.dart b/lib/generation/generators/visual-widgets/pb_container_gen.dart index 5d9ffcef..8b823394 100644 --- a/lib/generation/generators/visual-widgets/pb_container_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_container_gen.dart @@ -2,11 +2,10 @@ import 'package:parabeac_core/generation/generators/attribute-helper/pb_box_deco import 'package:parabeac_core/generation/generators/attribute-helper/pb_color_gen_helper.dart'; import 'package:parabeac_core/generation/generators/attribute-helper/pb_size_helper.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; import '../pb_flutter_generator.dart'; -import '../pb_widget_manager.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; class PBContainerGenerator extends PBGenerator { String color; diff --git a/lib/generation/generators/visual-widgets/pb_flexible_gen.dart b/lib/generation/generators/visual-widgets/pb_flexible_gen.dart index 215b5b79..8da9b787 100644 --- a/lib/generation/generators/visual-widgets/pb_flexible_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_flexible_gen.dart @@ -1,10 +1,10 @@ import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/alignments/flexible.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:quick_log/quick_log.dart'; + import '../pb_flutter_generator.dart'; -import '../pb_widget_manager.dart'; class PBFlexibleGenerator extends PBGenerator { var log = Logger('Flexible Generator'); diff --git a/lib/generation/generators/visual-widgets/pb_padding_gen.dart b/lib/generation/generators/visual-widgets/pb_padding_gen.dart index a6aac0be..7e7ecda2 100644 --- a/lib/generation/generators/visual-widgets/pb_padding_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_padding_gen.dart @@ -1,10 +1,8 @@ -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/alignments/padding.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import '../pb_flutter_generator.dart'; import '../pb_generator.dart'; -import '../pb_widget_manager.dart'; class PBPaddingGen extends PBGenerator { PBPaddingGen() : super('PADDING'); diff --git a/lib/generation/generators/visual-widgets/pb_positioned_gen.dart b/lib/generation/generators/visual-widgets/pb_positioned_gen.dart index d818271a..304e6b86 100644 --- a/lib/generation/generators/visual-widgets/pb_positioned_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_positioned_gen.dart @@ -1,11 +1,10 @@ import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/alignments/injected_positioned.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:quick_log/quick_log.dart'; import '../pb_flutter_generator.dart'; -import '../pb_widget_manager.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/alignments/injected_positioned.dart'; class PBPositionedGenerator extends PBGenerator { PBPositionedGenerator() : super('POSITIONED'); diff --git a/lib/generation/generators/visual-widgets/pb_shape_group_gen.dart b/lib/generation/generators/visual-widgets/pb_shape_group_gen.dart index ebc8db03..b4c45579 100644 --- a/lib/generation/generators/visual-widgets/pb_shape_group_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_shape_group_gen.dart @@ -1,8 +1,7 @@ import 'package:parabeac_core/generation/generators/attribute-helper/pb_size_helper.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_group.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; class PBShapeGroupGen extends PBGenerator { var _sizehelper; diff --git a/lib/input/sketch/entities/layers/bitmap.dart b/lib/input/sketch/entities/layers/bitmap.dart index c6f7e998..14a17964 100644 --- a/lib/input/sketch/entities/layers/bitmap.dart +++ b/lib/input/sketch/entities/layers/bitmap.dart @@ -1,5 +1,4 @@ import 'package:json_annotation/json_annotation.dart'; -import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/design_logic/image.dart'; import 'package:parabeac_core/input/sketch/entities/abstract_sketch_node_factory.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; @@ -7,10 +6,10 @@ import 'package:parabeac_core/input/sketch/entities/layers/flow.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/input/sketch/entities/objects/image_ref.dart'; import 'package:parabeac_core/input/sketch/entities/style/style.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_deny_list_helper.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_plugin_list_helper.dart'; part 'bitmap.g.dart'; diff --git a/lib/input/sketch/entities/layers/oval.dart b/lib/input/sketch/entities/layers/oval.dart index bce088b1..38fceaba 100644 --- a/lib/input/sketch/entities/layers/oval.dart +++ b/lib/input/sketch/entities/layers/oval.dart @@ -1,3 +1,4 @@ +import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/input/sketch/entities/abstract_sketch_node_factory.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_shape_layer.dart'; @@ -7,9 +8,8 @@ import 'package:parabeac_core/input/sketch/entities/style/style.dart'; import 'package:parabeac_core/input/sketch/helper/svg_png_convertion.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_oval.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'dart:convert'; + part 'oval.g.dart'; // title: Oval Layer diff --git a/lib/input/sketch/entities/layers/rectangle.dart b/lib/input/sketch/entities/layers/rectangle.dart index 7b948d8d..f005c26f 100644 --- a/lib/input/sketch/entities/layers/rectangle.dart +++ b/lib/input/sketch/entities/layers/rectangle.dart @@ -1,4 +1,4 @@ -import 'package:parabeac_core/design_logic/rect.dart'; +import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/input/sketch/entities/abstract_sketch_node_factory.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_shape_layer.dart'; @@ -6,9 +6,8 @@ import 'package:parabeac_core/input/sketch/entities/layers/flow.dart'; import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; import 'package:parabeac_core/input/sketch/entities/style/border.dart'; import 'package:parabeac_core/input/sketch/entities/style/style.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; diff --git a/lib/input/sketch/entities/layers/shape_group.dart b/lib/input/sketch/entities/layers/shape_group.dart index 6d73d161..081435ad 100644 --- a/lib/input/sketch/entities/layers/shape_group.dart +++ b/lib/input/sketch/entities/layers/shape_group.dart @@ -1,3 +1,4 @@ +import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/input/sketch/entities/abstract_sketch_node_factory.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_group_layer.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; @@ -7,9 +8,7 @@ import 'package:parabeac_core/input/sketch/entities/style/style.dart'; import 'package:parabeac_core/input/sketch/helper/svg_png_convertion.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_group.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'dart:convert'; part 'shape_group.g.dart'; diff --git a/lib/input/sketch/entities/layers/shape_path.dart b/lib/input/sketch/entities/layers/shape_path.dart index 02935ea8..46f8e0b8 100644 --- a/lib/input/sketch/entities/layers/shape_path.dart +++ b/lib/input/sketch/entities/layers/shape_path.dart @@ -9,7 +9,6 @@ import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_pa import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'dart:convert'; part 'shape_path.g.dart'; // title: Shape Path Layer diff --git a/lib/interpret_and_optimize/entities/plugins/plugin_container.dart b/lib/interpret_and_optimize/entities/plugins/plugin_container.dart index 5fbc7992..fb6d7fef 100644 --- a/lib/interpret_and_optimize/entities/plugins/plugin_container.dart +++ b/lib/interpret_and_optimize/entities/plugins/plugin_container.dart @@ -1,14 +1,13 @@ +import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/generation/generators/visual-widgets/pb_container_gen.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/injected_align.dart'; -import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/temp_group_layout_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_visual_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; -import 'package:json_annotation/json_annotation.dart'; part 'plugin_container.g.dart'; diff --git a/lib/interpret_and_optimize/helpers/node_tuple.dart b/lib/interpret_and_optimize/helpers/node_tuple.dart index 1b7b6a4b..386c1321 100644 --- a/lib/interpret_and_optimize/helpers/node_tuple.dart +++ b/lib/interpret_and_optimize/helpers/node_tuple.dart @@ -1,5 +1,4 @@ import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; /// A simple child Sketch Node & Converted Parent Node holder. (Tuple) diff --git a/lib/interpret_and_optimize/helpers/pb_context.dart b/lib/interpret_and_optimize/helpers/pb_context.dart index e0221171..26807568 100644 --- a/lib/interpret_and_optimize/helpers/pb_context.dart +++ b/lib/interpret_and_optimize/helpers/pb_context.dart @@ -1,4 +1,3 @@ -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; diff --git a/lib/interpret_and_optimize/helpers/pb_deny_list_helper.dart b/lib/interpret_and_optimize/helpers/pb_deny_list_helper.dart index 41087349..cf14be1a 100644 --- a/lib/interpret_and_optimize/helpers/pb_deny_list_helper.dart +++ b/lib/interpret_and_optimize/helpers/pb_deny_list_helper.dart @@ -1,5 +1,4 @@ import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_deny_list_node.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; diff --git a/lib/interpret_and_optimize/services/pb_semantic_generation_service.dart b/lib/interpret_and_optimize/services/pb_semantic_generation_service.dart index 6768c836..bcb5a51c 100644 --- a/lib/interpret_and_optimize/services/pb_semantic_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_semantic_generation_service.dart @@ -1,5 +1,4 @@ import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_deny_list_helper.dart'; diff --git a/lib/interpret_and_optimize/services/pb_visual_generation_service.dart b/lib/interpret_and_optimize/services/pb_visual_generation_service.dart index cc169ed1..72b58d70 100644 --- a/lib/interpret_and_optimize/services/pb_visual_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_visual_generation_service.dart @@ -3,7 +3,6 @@ import 'package:parabeac_core/generation/prototyping/pb_dest_holder.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; import 'package:parabeac_core/input/sketch/entities/layers/abstract_group_layer.dart'; import 'package:parabeac_core/input/sketch/services/positional_cleansing_service.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_deny_list_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; diff --git a/lib/plugins/injected_app_bar.dart b/lib/plugins/injected_app_bar.dart index e5401910..6fb83ed4 100644 --- a/lib/plugins/injected_app_bar.dart +++ b/lib/plugins/injected_app_bar.dart @@ -2,11 +2,9 @@ import 'package:parabeac_core/controllers/interpret.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; +import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_injected_intermediate.dart'; -import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; diff --git a/lib/plugins/injected_tab_bar.dart b/lib/plugins/injected_tab_bar.dart index e517b825..501b9870 100644 --- a/lib/plugins/injected_tab_bar.dart +++ b/lib/plugins/injected_tab_bar.dart @@ -2,17 +2,13 @@ import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; -import 'package:parabeac_core/plugins/injected_tab.dart'; +import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_injected_intermediate.dart'; -import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; - -import 'package:json_annotation/json_annotation.dart'; +import 'package:parabeac_core/plugins/injected_tab.dart'; class InjectedTabBar extends PBEgg implements PBInjectedIntermediate { final String UUID; diff --git a/lib/plugins/switch.dart b/lib/plugins/switch.dart index 5d2f85a5..3cacd541 100644 --- a/lib/plugins/switch.dart +++ b/lib/plugins/switch.dart @@ -1,15 +1,12 @@ import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; import 'package:parabeac_core/generation/generators/pb_param.dart'; import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; -import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_injected_intermediate.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import '../input/sketch/entities/layers/abstract_layer.dart'; import '../interpret_and_optimize/helpers/pb_context.dart'; class Switch extends PBEgg implements PBInjectedIntermediate { @@ -57,18 +54,18 @@ class SwitchGenerator extends PBGenerator { manager.addDependencies('list_tile_switch', '^0.0.2'); manager.addImport('package:list_tile_switch/list_tile_switch.dart'); var buffer = StringBuffer(); - buffer.write('''ListTileSwitch( - value: switchValue, - leading: Icon(Icons.access_alarms), - onChanged: (value) { - setState(() { - switchValue = value; + buffer.write('''ListTileSwitch( + value: switchValue, + leading: Icon(Icons.access_alarms), + onChanged: (value) { + setState(() { + switchValue = value; }); }, visualDensity: VisualDensity.comfortable, switchType: SwitchType.cupertino, - switchActiveColor: Colors.indigo, - title: Text('Default Custom Switch'), + switchActiveColor: Colors.indigo, + title: Text('Default Custom Switch'), ), '''); return buffer.toString(); diff --git a/test/lib/input_services/padding_dynamic_size_test.dart b/test/lib/input_services/padding_dynamic_size_test.dart index 4a6730f0..b68bda95 100644 --- a/test/lib/input_services/padding_dynamic_size_test.dart +++ b/test/lib/input_services/padding_dynamic_size_test.dart @@ -1,8 +1,6 @@ import 'package:mockito/mockito.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_writer.dart'; -import 'package:parabeac_core/generation/generators/pb_page_writer.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_padding_gen.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/alignments/padding.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; From 241d8b3fd4af04be88fa40234980c19a618bf4e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ChangJoo=20Park=28=EB=B0=95=EC=B0=BD=EC=A3=BC=29?= Date: Thu, 24 Sep 2020 22:39:50 +0900 Subject: [PATCH 03/25] refactor: generateState[ful|less]Widget using multiline text --- .../generators/pb_flutter_generator.dart | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/lib/generation/generators/pb_flutter_generator.dart b/lib/generation/generators/pb_flutter_generator.dart index 9d3019dc..d1fd74af 100644 --- a/lib/generation/generators/pb_flutter_generator.dart +++ b/lib/generation/generators/pb_flutter_generator.dart @@ -23,35 +23,52 @@ class PBFlutterGenerator extends PBGenerationManager { } String generateStatefulWidget(String body, String name) { - name = PBInputFormatter.formatLabel(name, - isTitle: true, space_to_underscore: false); - var widgetName = name; + var widgetName = _generateWidgetName(name); var constructorName = '_$name'; - var buffer = StringBuffer(); - buffer.write('class ${widgetName} extends StatefulWidget{\n' - '\tconst ${widgetName}() : super();\n' - '@override\n_${widgetName} createState() => _${widgetName}();\n}\n\n' - 'class _${widgetName} extends State<${widgetName}>{\n' - '${generateInstanceVariables()}\n' - '${generateConstructor(constructorName)}\n' - '@override\nWidget build(BuildContext context){\n' - 'return ${body};\n}\n}'); - return generateImports() + buffer.toString(); + return ''' +${generateImports()} + +class ${widgetName} extends StatefulWidget{ + const ${widgetName}() : super(); + @override + _${widgetName} createState() => _${widgetName}(); +} + +class _${widgetName} extends State<${widgetName}>{ + ${generateInstanceVariables()} + ${generateConstructor(constructorName)} + + @override + Widget build(BuildContext context){ + return ${body}; + } +}'''; } String generateStatelessWidgets(String body, String name) { - name = PBInputFormatter.formatLabel(name, - isTitle: true, space_to_underscore: false); - var buffer = StringBuffer(); + var widgetName = _generateWidgetName(name); var constructorName = '_$name'; - buffer.write('class ${name} extends StatelessWidget{\n' - '\tconst ${name}({Key key}) : super(key : key);\n' - '${generateInstanceVariables()}\n' - '${generateConstructor(constructorName)}\n' - '\t@override\n\tWidget build(BuildContext context){\n\t return ${body};}}'); - return generateImports() + buffer.toString(); + return ''' +${generateImports()} + +class ${widgetName} extends StatelessWidget{ + const ${widgetName}({Key key}) : super(key : key); + ${generateInstanceVariables()} + ${generateConstructor(constructorName)} + + @override + Widget build(BuildContext context){ + return ${body}; + } +}'''; } + String _generateWidgetName(name) => PBInputFormatter.formatLabel( + name, + isTitle: true, + space_to_underscore: false, + ); + String generateConstructor(name) { if (constructorVariables == null || constructorVariables.isEmpty) { return ''; From cabc5ca6d91cd3b0a1a81fb0376b7a926f3d59d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ChangJoo=20Park=28=EB=B0=95=EC=B0=BD=EC=A3=BC=29?= Date: Thu, 24 Sep 2020 22:47:48 +0900 Subject: [PATCH 04/25] refactor: generateStatelessWidgets makes only one widget. Fix generateStatelessWidgets to generateStatelessWidget --- lib/generation/generators/pb_flutter_generator.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/generation/generators/pb_flutter_generator.dart b/lib/generation/generators/pb_flutter_generator.dart index d1fd74af..e53b9eac 100644 --- a/lib/generation/generators/pb_flutter_generator.dart +++ b/lib/generation/generators/pb_flutter_generator.dart @@ -45,7 +45,7 @@ class _${widgetName} extends State<${widgetName}>{ }'''; } - String generateStatelessWidgets(String body, String name) { + String generateStatelessWidget(String body, String name) { var widgetName = _generateWidgetName(name); var constructorName = '_$name'; return ''' @@ -145,7 +145,7 @@ class ${widgetName} extends StatelessWidget{ return generateStatefulWidget(gen.generate(rootNode), rootNode.name); break; case BUILDER_TYPE.STATELESS_WIDGET: - return generateStatelessWidgets( + return generateStatelessWidget( gen.generate(rootNode), rootNode.name); break; case BUILDER_TYPE.EMPTY_PAGE: From f3ccd7f83f1d85f3012aadc7c76d8271f4742184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ChangJoo=20Park=28=EB=B0=95=EC=B0=BD=EC=A3=BC=29?= Date: Fri, 25 Sep 2020 09:54:47 +0900 Subject: [PATCH 05/25] Format code when project created (#37) --- .../flutter_project_builder.dart | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/generation/flutter_project_builder/flutter_project_builder.dart b/lib/generation/flutter_project_builder/flutter_project_builder.dart index 2b2fbe61..bf2c3e20 100644 --- a/lib/generation/flutter_project_builder/flutter_project_builder.dart +++ b/lib/generation/flutter_project_builder/flutter_project_builder.dart @@ -121,6 +121,19 @@ class FlutterProjectBuilder { runInShell: true, environment: Platform.environment, workingDirectory: '${MainInfo().outputPath}'); + + log.info( + Process.runSync( + 'dartfmt', + [ + '-w', + '${pathToFlutterProject}bin', + '${pathToFlutterProject}lib', + '${pathToFlutterProject}test' + ], + workingDirectory: MainInfo().outputPath) + .stdout, + ); } /// Traverse the [node] tree, check if any nodes need importing, From 3a5dd82211d1acb651dd106618f3aa06c1a77de2 Mon Sep 17 00:00:00 2001 From: Kenneth Hurley Date: Fri, 25 Sep 2020 21:52:35 -0700 Subject: [PATCH 06/25] Adding fontWeight and fontStyle for flutter to pickup on font styles. --- .../visual-widgets/pb_text_gen.dart | 6 ++ .../entities/style/font_descriptor.dart | 4 ++ .../sketch/entities/style/text_style.dart | 65 +++++++++++++++---- .../entities/inherited_text.dart | 7 +- .../entities/inherited_text.g.dart | 2 - 5 files changed, 67 insertions(+), 17 deletions(-) diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index 0b8909e5..35174845 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -22,6 +22,12 @@ class PBTextGen extends PBGenerator { if (source.fontSize != null) { buffer.write('fontSize: ${source.fontSize.toString()},\n'); } + if (source.fontWeight != null) { + buffer.write('fontWeight: FontWeight.${source.fontWeight.toString()},\n'); + } + if (source.fontStyle != null) { + buffer.write('fontStyle: FontStyle.${source.fontStyle.toString()},\n'); + } if (source.color != null) { if (findDefaultColor(source.color) == null) { buffer.write('color: Color(${source.color}),'); diff --git a/lib/input/sketch/entities/style/font_descriptor.dart b/lib/input/sketch/entities/style/font_descriptor.dart index 423b81db..594d3f94 100644 --- a/lib/input/sketch/entities/style/font_descriptor.dart +++ b/lib/input/sketch/entities/style/font_descriptor.dart @@ -9,6 +9,10 @@ class FontDescriptor { String fontName; @JsonKey(ignore: true) num fontSize; + @JsonKey(ignore: true) + String fontWeight; + @JsonKey(ignore: true) + String fontStyle; FontDescriptor({this.rawAttributes}) { fontSize = rawAttributes['size']; diff --git a/lib/input/sketch/entities/style/text_style.dart b/lib/input/sketch/entities/style/text_style.dart index fd7ee742..9b211221 100644 --- a/lib/input/sketch/entities/style/text_style.dart +++ b/lib/input/sketch/entities/style/text_style.dart @@ -17,18 +17,54 @@ class TextStyle { @JsonKey(ignore: true) num verticalAlignment; @JsonKey(ignore: true) - String weight; - @JsonKey(ignore: true) + String style; - /// List of possible text weights - final List WEIGHTS = [ - 'BoldOblique', - 'LightOblique', - 'Bold', + /// List of possible text weights, sorted by longest string first for .contains + final List STYLES = [ + 'ExtraLightItalic', + 'ExtraBoldItalic', + 'SemiBoldItalic', + 'MediumItalic', + 'LightItalic', + 'BlackItalic', + 'ThinItalic', + 'ExtraLight', + 'BoldItalic', + 'ExtraBold', + 'SemiBold', + 'Regular', + 'Italic', + 'Medium', 'Light', - 'Oblique' + 'Black', + 'Bold', + 'Thin', +// 'BoldOblique', +// 'LightOblique', +// 'Oblique', ]; + final Map > fontInfo = { + 'Thin': { 'fontWeight': 'w100', 'fontStyle': 'normal'}, + 'ThinItalic': { 'fontWeight': 'w100', 'fontStyle': 'italic'}, + 'ExtraLight': { 'fontWeight': 'w200', 'fontStyle': 'normal'}, + 'ExtraLightItalic': { 'fontWeight': 'w200', 'fontStyle': 'italic'}, + 'Light': { 'fontWeight': 'w300', 'fontStyle': 'normal'}, + 'LightItalic': { 'fontWeight': 'w300', 'fontStyle': 'italic'}, + 'Regular': { 'fontWeight': 'w400', 'fontStyle': 'normal'}, + 'Italic': { 'fontWeight': 'w400', 'fontStyle': 'italic'}, + 'Medium': { 'fontWeight': 'w500', 'fontStyle': 'normal'}, + 'MediumItalic': { 'fontWeight': 'w500', 'fontStyle': 'italic'}, + 'SemiBold': { 'fontWeight': 'w600', 'fontStyle': 'normal'}, + 'SemiBoldItalic': { 'fontWeight': 'w600', 'fontStyle': 'italic'}, + 'Bold': { 'fontWeight': 'w700', 'fontStyle': 'normal'}, + 'BoldItalic': { 'fontWeight': 'w700', 'fontStyle': 'italic'}, + 'ExtraBold': { 'fontWeight': 'w800', 'fontStyle': 'normal'}, + 'ExtraBoldItalic': { 'fontWeight': 'w800', 'fontStyle': 'italic'}, + 'Black': { 'fontWeight': 'w900', 'fontStyle': 'normal'}, + 'BlackItalic': { 'fontWeight': 'w900', 'fontStyle': 'italic'}, + }; + TextStyle({this.rawEncodedAttributes}) { color = Color.fromJson( rawEncodedAttributes['MSAttributedStringColorAttribute']); @@ -39,12 +75,15 @@ class TextStyle { verticalAlignment = rawEncodedAttributes['textStyleVerticalAlignment']; //Find if text has special weight - for (var w in WEIGHTS) { - if (fontDescriptor.fontName.contains(w)) { - weight = w; - + for (var s in STYLES) { + if (fontDescriptor.fontName.contains(s)) { + // this is really a mapping of style to weight + fontDescriptor.fontWeight = fontInfo[s]['fontWeight']; + // this is only normal, italic style + fontDescriptor.fontStyle = fontInfo[s]['fontStyle']; + // this is really fontFamily with removal of -XXX font type name suffix fontDescriptor.fontName = - fontDescriptor.fontName.replaceFirst('-$w', ''); + fontDescriptor.fontName.replaceFirst('-$s', ''); break; } } diff --git a/lib/interpret_and_optimize/entities/inherited_text.dart b/lib/interpret_and_optimize/entities/inherited_text.dart index d2836f85..9b1688ea 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.dart @@ -39,7 +39,8 @@ class InheritedText extends PBVisualIntermediateNode num fontSize; String fontName; - String weight; + String fontWeight; // one of the w100-w900 weights + String fontStyle; // normal, or italic String textAlignment; InheritedText(this.originalRef, {this.currentContext}) @@ -62,7 +63,9 @@ class InheritedText extends PBVisualIntermediateNode fontSize = originalRef.style.textStyle.fontDescriptor.fontSize; color = originalRef.style.textStyle.color.toHex(); fontName = originalRef.style.textStyle.fontDescriptor.fontName; - weight = originalRef.style.textStyle.weight; + fontWeight = originalRef.style.textStyle.fontDescriptor.fontWeight; + fontStyle = originalRef.style.textStyle.fontDescriptor.fontStyle; + alignmenttype = originalRef.style.textStyle.paragraphStyle.alignment; if (alignmenttype == 0) { textAlignment = 'left'; diff --git a/lib/interpret_and_optimize/entities/inherited_text.g.dart b/lib/interpret_and_optimize/entities/inherited_text.g.dart index 86c51cd9..2da28025 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.g.dart @@ -29,7 +29,6 @@ InheritedText _$InheritedTextFromJson(Map json) { ..widgetType = json['widgetType'] as String ..fontSize = json['fontSize'] as num ..fontName = json['fontName'] as String - ..weight = json['weight'] as String ..textAlignment = json['textAlignment'] as String; } @@ -51,6 +50,5 @@ Map _$InheritedTextToJson(InheritedText instance) => 'widgetType': instance.widgetType, 'fontSize': instance.fontSize, 'fontName': instance.fontName, - 'weight': instance.weight, 'textAlignment': instance.textAlignment, }; From c19758b5dc9d317a5d89546f9ba7e39625eabf13 Mon Sep 17 00:00:00 2001 From: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Date: Sat, 26 Sep 2020 12:49:29 -0700 Subject: [PATCH 07/25] Feature addfontstyleinfo (#42) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update MANIFESTO.md * Update README.md * Update README.md * Update README.md Updated ReadMe with some structural changes and minor fixes * Update README.md Added `pub install` to getting started. * Update README.md * Update README.md * Added ability to track eggs using Amplitude's event-properties (#25) Co-authored-by: Ivan Vigliante * Fix wiki link (#27) * Update issue template * Remove unused import * Make file with snakeCase * Adding fontWeight and fontStyle for flutter to pickup on font styles. Co-authored-by: Ivan Huerta Co-authored-by: Eddie Co-authored-by: Ian Hudson Co-authored-by: Ivan Vigliante Co-authored-by: ChangJoo Park(박창주) Co-authored-by: Eddie Co-authored-by: Ivan <42812006+ivan-015@users.noreply.github.com> --- .../flutter_project_builder.dart | 7 +- .../visual-widgets/pb_text_gen.dart | 6 ++ .../entities/style/font_descriptor.dart | 4 ++ .../sketch/entities/style/text_style.dart | 65 +++++++++++++++---- .../entities/inherited_text.dart | 7 +- .../entities/inherited_text.g.dart | 2 - pubspec.yaml | 1 + 7 files changed, 72 insertions(+), 20 deletions(-) diff --git a/lib/generation/flutter_project_builder/flutter_project_builder.dart b/lib/generation/flutter_project_builder/flutter_project_builder.dart index bf2c3e20..f2de6d5b 100644 --- a/lib/generation/flutter_project_builder/flutter_project_builder.dart +++ b/lib/generation/flutter_project_builder/flutter_project_builder.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:archive/archive.dart'; +import 'package:recase/recase.dart'; import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_writer.dart'; @@ -186,7 +187,7 @@ class FlutterProjectBuilder { var pageWriter = PBFlutterWriter(); for (var directory in mainTree.groups) { - var directoryName = directory.name.toLowerCase().replaceAll(' ', '_'); + var directoryName = directory.name.snakeCase; var flutterGenerator; var importSet = []; var bodyBuffer, constructorBuffer; @@ -209,9 +210,9 @@ class FlutterProjectBuilder { var name = isSymbolsDir ? SYMBOL_DIR_NAME : fileName; var symbolFilePath = - '${projectName}/lib/screens/${directoryName}/${name.toLowerCase()}.dart'; + '${projectName}/lib/screens/${directoryName}/${name.snakeCase}.dart'; var fileNamePath = - '${projectName}/lib/screens/${directoryName}/${fileName.toLowerCase()}.dart'; + '${projectName}/lib/screens/${directoryName}/${fileName.snakeCase}.dart'; // TODO: Need FlutterGenerator for each page because otherwise // we'd add all imports to every single dart page. Discuss alternatives if (!isSymbolsDir) { diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index 0b8909e5..35174845 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -22,6 +22,12 @@ class PBTextGen extends PBGenerator { if (source.fontSize != null) { buffer.write('fontSize: ${source.fontSize.toString()},\n'); } + if (source.fontWeight != null) { + buffer.write('fontWeight: FontWeight.${source.fontWeight.toString()},\n'); + } + if (source.fontStyle != null) { + buffer.write('fontStyle: FontStyle.${source.fontStyle.toString()},\n'); + } if (source.color != null) { if (findDefaultColor(source.color) == null) { buffer.write('color: Color(${source.color}),'); diff --git a/lib/input/sketch/entities/style/font_descriptor.dart b/lib/input/sketch/entities/style/font_descriptor.dart index 423b81db..594d3f94 100644 --- a/lib/input/sketch/entities/style/font_descriptor.dart +++ b/lib/input/sketch/entities/style/font_descriptor.dart @@ -9,6 +9,10 @@ class FontDescriptor { String fontName; @JsonKey(ignore: true) num fontSize; + @JsonKey(ignore: true) + String fontWeight; + @JsonKey(ignore: true) + String fontStyle; FontDescriptor({this.rawAttributes}) { fontSize = rawAttributes['size']; diff --git a/lib/input/sketch/entities/style/text_style.dart b/lib/input/sketch/entities/style/text_style.dart index fd7ee742..9b211221 100644 --- a/lib/input/sketch/entities/style/text_style.dart +++ b/lib/input/sketch/entities/style/text_style.dart @@ -17,18 +17,54 @@ class TextStyle { @JsonKey(ignore: true) num verticalAlignment; @JsonKey(ignore: true) - String weight; - @JsonKey(ignore: true) + String style; - /// List of possible text weights - final List WEIGHTS = [ - 'BoldOblique', - 'LightOblique', - 'Bold', + /// List of possible text weights, sorted by longest string first for .contains + final List STYLES = [ + 'ExtraLightItalic', + 'ExtraBoldItalic', + 'SemiBoldItalic', + 'MediumItalic', + 'LightItalic', + 'BlackItalic', + 'ThinItalic', + 'ExtraLight', + 'BoldItalic', + 'ExtraBold', + 'SemiBold', + 'Regular', + 'Italic', + 'Medium', 'Light', - 'Oblique' + 'Black', + 'Bold', + 'Thin', +// 'BoldOblique', +// 'LightOblique', +// 'Oblique', ]; + final Map > fontInfo = { + 'Thin': { 'fontWeight': 'w100', 'fontStyle': 'normal'}, + 'ThinItalic': { 'fontWeight': 'w100', 'fontStyle': 'italic'}, + 'ExtraLight': { 'fontWeight': 'w200', 'fontStyle': 'normal'}, + 'ExtraLightItalic': { 'fontWeight': 'w200', 'fontStyle': 'italic'}, + 'Light': { 'fontWeight': 'w300', 'fontStyle': 'normal'}, + 'LightItalic': { 'fontWeight': 'w300', 'fontStyle': 'italic'}, + 'Regular': { 'fontWeight': 'w400', 'fontStyle': 'normal'}, + 'Italic': { 'fontWeight': 'w400', 'fontStyle': 'italic'}, + 'Medium': { 'fontWeight': 'w500', 'fontStyle': 'normal'}, + 'MediumItalic': { 'fontWeight': 'w500', 'fontStyle': 'italic'}, + 'SemiBold': { 'fontWeight': 'w600', 'fontStyle': 'normal'}, + 'SemiBoldItalic': { 'fontWeight': 'w600', 'fontStyle': 'italic'}, + 'Bold': { 'fontWeight': 'w700', 'fontStyle': 'normal'}, + 'BoldItalic': { 'fontWeight': 'w700', 'fontStyle': 'italic'}, + 'ExtraBold': { 'fontWeight': 'w800', 'fontStyle': 'normal'}, + 'ExtraBoldItalic': { 'fontWeight': 'w800', 'fontStyle': 'italic'}, + 'Black': { 'fontWeight': 'w900', 'fontStyle': 'normal'}, + 'BlackItalic': { 'fontWeight': 'w900', 'fontStyle': 'italic'}, + }; + TextStyle({this.rawEncodedAttributes}) { color = Color.fromJson( rawEncodedAttributes['MSAttributedStringColorAttribute']); @@ -39,12 +75,15 @@ class TextStyle { verticalAlignment = rawEncodedAttributes['textStyleVerticalAlignment']; //Find if text has special weight - for (var w in WEIGHTS) { - if (fontDescriptor.fontName.contains(w)) { - weight = w; - + for (var s in STYLES) { + if (fontDescriptor.fontName.contains(s)) { + // this is really a mapping of style to weight + fontDescriptor.fontWeight = fontInfo[s]['fontWeight']; + // this is only normal, italic style + fontDescriptor.fontStyle = fontInfo[s]['fontStyle']; + // this is really fontFamily with removal of -XXX font type name suffix fontDescriptor.fontName = - fontDescriptor.fontName.replaceFirst('-$w', ''); + fontDescriptor.fontName.replaceFirst('-$s', ''); break; } } diff --git a/lib/interpret_and_optimize/entities/inherited_text.dart b/lib/interpret_and_optimize/entities/inherited_text.dart index d2836f85..9b1688ea 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.dart @@ -39,7 +39,8 @@ class InheritedText extends PBVisualIntermediateNode num fontSize; String fontName; - String weight; + String fontWeight; // one of the w100-w900 weights + String fontStyle; // normal, or italic String textAlignment; InheritedText(this.originalRef, {this.currentContext}) @@ -62,7 +63,9 @@ class InheritedText extends PBVisualIntermediateNode fontSize = originalRef.style.textStyle.fontDescriptor.fontSize; color = originalRef.style.textStyle.color.toHex(); fontName = originalRef.style.textStyle.fontDescriptor.fontName; - weight = originalRef.style.textStyle.weight; + fontWeight = originalRef.style.textStyle.fontDescriptor.fontWeight; + fontStyle = originalRef.style.textStyle.fontDescriptor.fontStyle; + alignmenttype = originalRef.style.textStyle.paragraphStyle.alignment; if (alignmenttype == 0) { textAlignment = 'left'; diff --git a/lib/interpret_and_optimize/entities/inherited_text.g.dart b/lib/interpret_and_optimize/entities/inherited_text.g.dart index 86c51cd9..2da28025 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.g.dart @@ -29,7 +29,6 @@ InheritedText _$InheritedTextFromJson(Map json) { ..widgetType = json['widgetType'] as String ..fontSize = json['fontSize'] as num ..fontName = json['fontName'] as String - ..weight = json['weight'] as String ..textAlignment = json['textAlignment'] as String; } @@ -51,6 +50,5 @@ Map _$InheritedTextToJson(InheritedText instance) => 'widgetType': instance.widgetType, 'fontSize': instance.fontSize, 'fontName': instance.fontName, - 'weight': instance.weight, 'textAlignment': instance.textAlignment, }; diff --git a/pubspec.yaml b/pubspec.yaml index 9c210703..729a8638 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: analyzer: ^0.39.15 quick_log: ^1.1.3 sentry: ">=3.0.0 <4.0.0" + recase: "^3.0.0" # path: ^1.6.0 dev_dependencies: From 86c7d7caec856491a310699c37c26959dc7e03bb Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Sat, 26 Sep 2020 13:58:51 -0600 Subject: [PATCH 08/25] Changed `plugins` to `eggs` and removed `switch` egg (#35) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update MANIFESTO.md * Update README.md * Update README.md * Update README.md Updated ReadMe with some structural changes and minor fixes * Update README.md Added `pub install` to getting started. * Update README.md * Update README.md * Added ability to track eggs using Amplitude's event-properties (#25) Co-authored-by: Ivan Vigliante * Fix wiki link (#27) * Update issue template * Remove unused import * Changed `plugins` to `eggs` and removed `switch` egg * Changed "Para-beac" to "Parabeac" Co-authored-by: Ivan Huerta Co-authored-by: Eddie Co-authored-by: Ian Hudson Co-authored-by: ChangJoo Park(박창주) Co-authored-by: Eddie --- lib/{plugins => eggs}/injected_app_bar.dart | 0 lib/{plugins => eggs}/injected_tab.dart | 0 lib/{plugins => eggs}/injected_tab_bar.dart | 3 +- .../flutter_project_builder.dart | 4 +- .../pb_cupertino_search_bar.dart | 2 +- .../pb_prototype_aggregation_service.dart | 2 +- .../pb_prototype_linker_service.dart | 7 +- .../entities/inherited_scaffold.dart | 4 +- .../helpers/pb_plugin_list_helper.dart | 9 +-- lib/plugins/switch.dart | 75 ------------------- pb-scripts/automate.sh | 2 +- pb-scripts/install.sh | 2 +- pb-scripts/merge-plugins.sh | 12 +-- 13 files changed, 22 insertions(+), 100 deletions(-) rename lib/{plugins => eggs}/injected_app_bar.dart (100%) rename lib/{plugins => eggs}/injected_tab.dart (100%) rename lib/{plugins => eggs}/injected_tab_bar.dart (98%) delete mode 100644 lib/plugins/switch.dart diff --git a/lib/plugins/injected_app_bar.dart b/lib/eggs/injected_app_bar.dart similarity index 100% rename from lib/plugins/injected_app_bar.dart rename to lib/eggs/injected_app_bar.dart diff --git a/lib/plugins/injected_tab.dart b/lib/eggs/injected_tab.dart similarity index 100% rename from lib/plugins/injected_tab.dart rename to lib/eggs/injected_tab.dart diff --git a/lib/plugins/injected_tab_bar.dart b/lib/eggs/injected_tab_bar.dart similarity index 98% rename from lib/plugins/injected_tab_bar.dart rename to lib/eggs/injected_tab_bar.dart index 501b9870..79152b5d 100644 --- a/lib/plugins/injected_tab_bar.dart +++ b/lib/eggs/injected_tab_bar.dart @@ -8,7 +8,8 @@ import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inje import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; -import 'package:parabeac_core/plugins/injected_tab.dart'; + +import 'injected_tab.dart'; class InjectedTabBar extends PBEgg implements PBInjectedIntermediate { final String UUID; diff --git a/lib/generation/flutter_project_builder/flutter_project_builder.dart b/lib/generation/flutter_project_builder/flutter_project_builder.dart index f2de6d5b..ae074829 100644 --- a/lib/generation/flutter_project_builder/flutter_project_builder.dart +++ b/lib/generation/flutter_project_builder/flutter_project_builder.dart @@ -4,6 +4,8 @@ import 'dart:io'; import 'package:archive/archive.dart'; import 'package:recase/recase.dart'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/eggs/injected_app_bar.dart'; +import 'package:parabeac_core/eggs/injected_tab_bar.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_generator.dart'; import 'package:parabeac_core/generation/generators/pb_flutter_writer.dart'; import 'package:parabeac_core/generation/prototyping/pb_dest_holder.dart'; @@ -14,8 +16,6 @@ import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_inte import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_gen_cache.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/plugins/injected_app_bar.dart'; -import 'package:parabeac_core/plugins/injected_tab_bar.dart'; import 'package:quick_log/quick_log.dart'; String pathToFlutterProject = '${MainInfo().outputPath}/temp/'; diff --git a/lib/generation/generators/visual-widgets/pb_cupertino_search_bar.dart b/lib/generation/generators/visual-widgets/pb_cupertino_search_bar.dart index a1787d68..5ba78b8d 100644 --- a/lib/generation/generators/visual-widgets/pb_cupertino_search_bar.dart +++ b/lib/generation/generators/visual-widgets/pb_cupertino_search_bar.dart @@ -1,5 +1,5 @@ +import 'package:parabeac_core/eggs/injected_app_bar.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/plugins/injected_app_bar.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; class PBCupertinoSearchBar extends PBGenerator { diff --git a/lib/generation/prototyping/pb_prototype_aggregation_service.dart b/lib/generation/prototyping/pb_prototype_aggregation_service.dart index 7e86faee..5902f4e9 100644 --- a/lib/generation/prototyping/pb_prototype_aggregation_service.dart +++ b/lib/generation/prototyping/pb_prototype_aggregation_service.dart @@ -1,3 +1,4 @@ +import 'package:parabeac_core/eggs/injected_tab.dart'; import 'package:parabeac_core/generation/prototyping/pb_dest_holder.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_storage.dart'; @@ -5,7 +6,6 @@ import 'package:parabeac_core/interpret_and_optimize/entities/injected_container import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_intermediate_node.dart'; -import 'package:parabeac_core/plugins/injected_tab.dart'; /// This class keeps track of the [PrototypeNode]s that do not have necessary /// properties from their destination [PBIntermediateNode] and populates them diff --git a/lib/generation/prototyping/pb_prototype_linker_service.dart b/lib/generation/prototyping/pb_prototype_linker_service.dart index ee82c084..edd61055 100644 --- a/lib/generation/prototyping/pb_prototype_linker_service.dart +++ b/lib/generation/prototyping/pb_prototype_linker_service.dart @@ -1,3 +1,6 @@ +import 'package:parabeac_core/eggs/injected_app_bar.dart'; +import 'package:parabeac_core/eggs/injected_tab.dart'; +import 'package:parabeac_core/eggs/injected_tab_bar.dart'; import 'package:parabeac_core/generation/generators/plugins/pb_injected_node.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_aggregation_service.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_storage.dart'; @@ -9,10 +12,6 @@ import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layo import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_visual_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/services/intermediate_node_searcher_service.dart'; -import 'package:parabeac_core/plugins/injected_app_bar.dart'; -import 'package:parabeac_core/plugins/injected_tab.dart'; -import 'package:parabeac_core/plugins/injected_tab_bar.dart'; - class PBPrototypeLinkerService { PBPrototypeStorage _prototypeStorage; PBPrototypeAggregationService _aggregationService; diff --git a/lib/interpret_and_optimize/entities/inherited_scaffold.dart b/lib/interpret_and_optimize/entities/inherited_scaffold.dart index df265465..309825be 100644 --- a/lib/interpret_and_optimize/entities/inherited_scaffold.dart +++ b/lib/interpret_and_optimize/entities/inherited_scaffold.dart @@ -1,10 +1,10 @@ import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/eggs/injected_app_bar.dart'; +import 'package:parabeac_core/eggs/injected_tab_bar.dart'; import 'package:parabeac_core/generation/generators/layouts/pb_scaffold_gen.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; import 'package:parabeac_core/input/sketch/entities/layers/artboard.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/injected_align.dart'; -import 'package:parabeac_core/plugins/injected_app_bar.dart'; -import 'package:parabeac_core/plugins/injected_tab_bar.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/temp_group_layout_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; diff --git a/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart b/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart index 2421b9a1..e64eee12 100644 --- a/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart +++ b/lib/interpret_and_optimize/helpers/pb_plugin_list_helper.dart @@ -1,9 +1,8 @@ -import 'package:parabeac_core/plugins/switch.dart'; +import 'package:parabeac_core/eggs/injected_app_bar.dart'; +import 'package:parabeac_core/eggs/injected_tab.dart'; +import 'package:parabeac_core/eggs/injected_tab_bar.dart'; import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/plugins/injected_tab_bar.dart'; -import 'package:parabeac_core/plugins/injected_app_bar.dart'; import 'package:parabeac_core/input/sketch/entities/layers/symbol_instance.dart'; -import 'package:parabeac_core/plugins/injected_tab.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; @@ -14,8 +13,6 @@ class PBPluginListHelper { static final PBPluginListHelper _instance = PBPluginListHelper._internal(); void initPlugins(PBContext context) { allowListNames = { - '.*switch': Switch(Point(0, 0), Point(0, 0), Uuid().v4(), - currentContext: context), '.*tabbar': InjectedTabBar(Point(0, 0), Point(0, 0), Uuid().v4(), currentContext: context), '.*navbar': InjectedNavbar(Point(0, 0), Point(0, 0), Uuid().v4(), diff --git a/lib/plugins/switch.dart b/lib/plugins/switch.dart deleted file mode 100644 index 3cacd541..00000000 --- a/lib/plugins/switch.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:parabeac_core/design_logic/design_node.dart'; -import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_param.dart'; -import 'package:parabeac_core/generation/generators/plugins/pb_plugin_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_injected_intermediate.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; - -import '../interpret_and_optimize/helpers/pb_context.dart'; - -class Switch extends PBEgg implements PBInjectedIntermediate { - Switch(Point topLeftCorner, Point bottomRightCorner, this.UUID, - {this.currentContext}) - : super(topLeftCorner, bottomRightCorner, currentContext) { - generator = SwitchGenerator(widgetType); - } - - PBContext currentContext; - - final String UUID; - - String widgetType = 'Switch'; - - String semanticName = '.*switch'; - - @override - void addChild(PBIntermediateNode node) {} - - @override - void alignChild() {} - - @override - void extractInformation(DesignNode incomingNode) {} - - @override - PBEgg generatePluginNode( - Point topLeftCorner, Point bottomRightCorner, DesignNode originalRef) { - return Switch(topLeftCorner, bottomRightCorner, UUID, - currentContext: currentContext); - // throw UnimplementedError(); - } -} - -class SwitchGenerator extends PBGenerator { - SwitchGenerator(String widgetType) : super(widgetType); - - @override - String generate(PBIntermediateNode source) { - if (source is Switch) { - var value = PBParam('switchValue', 'bool', false); - manager.addInstanceVariable(value); - manager.addConstructorVariable(value); - manager.addDependencies('list_tile_switch', '^0.0.2'); - manager.addImport('package:list_tile_switch/list_tile_switch.dart'); - var buffer = StringBuffer(); - buffer.write('''ListTileSwitch( - value: switchValue, - leading: Icon(Icons.access_alarms), - onChanged: (value) { - setState(() { - switchValue = value; - }); - }, - visualDensity: VisualDensity.comfortable, - switchType: SwitchType.cupertino, - switchActiveColor: Colors.indigo, - title: Text('Default Custom Switch'), - ), - '''); - return buffer.toString(); - } - throw UnimplementedError(); - } -} diff --git a/pb-scripts/automate.sh b/pb-scripts/automate.sh index 2b11abc5..a7cd35c5 100755 --- a/pb-scripts/automate.sh +++ b/pb-scripts/automate.sh @@ -5,7 +5,7 @@ service="$3" keyID="$4" url="$5" -echo "[INFO]: Downloading plugins..." +echo "[INFO]: Downloading eggs..." date="`TZ=''"$region"'' date +"%Y%m%dT%k%M%SZ"`" diff --git a/pb-scripts/install.sh b/pb-scripts/install.sh index 12604fe5..c02c7d15 100644 --- a/pb-scripts/install.sh +++ b/pb-scripts/install.sh @@ -1,4 +1,4 @@ -echo "[INFO]: Installing Para-beac core and its dependencies" +echo "[INFO]: Installing Parabeac core and its dependencies" dart pub get cd SketchAssetConverter && npm i echo "Installed Sketch Asset Converter dependencies" \ No newline at end of file diff --git a/pb-scripts/merge-plugins.sh b/pb-scripts/merge-plugins.sh index 31acf756..52760fba 100644 --- a/pb-scripts/merge-plugins.sh +++ b/pb-scripts/merge-plugins.sh @@ -6,10 +6,10 @@ project=parabeac_core cat pb-scripts/parabird.txt -cd lib/plugins +cd lib/eggs # ========================================== -# Donload plugins if link is provided +# Download eggs if link is provided # ========================================== if [ -z "${1}" ] then @@ -31,12 +31,12 @@ fi counter=0 # ========================================== -# To collect plugins information +# To collect eggs information # ========================================== for f in *.dart do # -> To get import of file - saved[counter]="import@'package:$project/plugins/$f';" + saved[counter]="import@'package:$project/eggs/$f';" # echo ${saved[counter]} # Uncomment to debug # -> To get file semantics @@ -61,7 +61,7 @@ cd ../interpret_and_optimize/helpers/ newCounter=0; -echo "[INFO]: Processing plugins..." +echo "[INFO]: Processing eggs..." # ========================================== # To put plugin information on plugin helper @@ -97,7 +97,7 @@ do echo "[ERROR]: No path found" else #################################################### - # This logic allows us to skip repeting plugins + # This logic allows us to skip repeting eggs #################################################### onFile="`grep -n "$tempLine" pb_plugin_list_helper.dart `" if [ -z "${onFile}" ] From 6948eff6cd9b0b5fb6eb9a03d38171bad176e299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ChangJoo=20Park=28=EB=B0=95=EC=B0=BD=EC=A3=BC=29?= Date: Sun, 27 Sep 2020 05:06:08 +0900 Subject: [PATCH 09/25] Refactor padding gen (#40) * Refactor relativePadding easier to maintain * Refactor remove redundant if using reflect * Refactor using for-in loop https://dart.dev/guides/language/effective-dart/usage#avoid-using-iterableforeach-with-a-function-literal --- .../visual-widgets/pb_padding_gen.dart | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/lib/generation/generators/visual-widgets/pb_padding_gen.dart b/lib/generation/generators/visual-widgets/pb_padding_gen.dart index 7e7ecda2..e560fa79 100644 --- a/lib/generation/generators/visual-widgets/pb_padding_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_padding_gen.dart @@ -1,3 +1,5 @@ +import 'dart:mirrors'; + import 'package:parabeac_core/interpret_and_optimize/entities/alignments/padding.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; @@ -8,48 +10,42 @@ class PBPaddingGen extends PBGenerator { PBPaddingGen() : super('PADDING'); String relativePadding(BUILDER_TYPE type, bool isVertical, double value) { + var fixedValue = value.toStringAsFixed(2); if (type != null) { - if (isVertical) { - return 'MediaQuery.of(context).size.height * ${(value).toStringAsFixed(2)}'; - } else { - return 'MediaQuery.of(context).size.width * ${(value).toStringAsFixed(2)}'; - } + var property = isVertical ? 'height' : 'width'; + return 'MediaQuery.of(context).size.$property * $fixedValue'; } - return '${value.toStringAsFixed(2)}'; + + return '$fixedValue'; } @override String generate(PBIntermediateNode source) { - if (source is Padding) { - var buffer = StringBuffer(); - buffer.write('Padding('); - buffer.write('padding: EdgeInsets.only('); - if (source.left != null) { - buffer.write( - 'left: ${relativePadding(BUILDER_TYPE.BODY, false, source.left)},'); - } - if (source.right != null) { - buffer.write( - 'right: ${relativePadding(BUILDER_TYPE.BODY, false, source.right)},'); - } - if (source.bottom != null) { - buffer.write( - 'bottom: ${relativePadding(BUILDER_TYPE.BODY, true, source.bottom)},'); - } - if (source.top != null) { + if (!(source is Padding)) { + return ''; + } + final padding = source as Padding; + var buffer = StringBuffer(); + buffer.write('Padding('); + buffer.write('padding: EdgeInsets.only('); + + final paddingPositions = ['left', 'right', 'bottom', 'top']; + var reflectedPadding = reflect(padding); + for (var position in paddingPositions) { + var value = reflectedPadding.getField(Symbol(position)).reflectee; + if (value != null) { buffer.write( - 'top: ${relativePadding(BUILDER_TYPE.BODY, true, source.top)},'); - } - buffer.write('),'); - if (source.child != null) { - var statement = source.child != null - ? 'child: ${manager.generate(source.child, type: source.builder_type ?? BUILDER_TYPE.BODY)}' - : ''; - buffer.write(statement); + '$position: ${relativePadding(BUILDER_TYPE.BODY, false, value)},'); } - buffer.write(')'); - return buffer.toString(); } - return ''; + buffer.write('),'); + + if (source.child != null) { + buffer.write( + 'child: ${manager.generate(source.child, type: source.builder_type ?? BUILDER_TYPE.BODY)}'); + } + buffer.write(')'); + + return buffer.toString(); } } From aed095e82aded194dea3f9b5383d31b1b3b9ee66 Mon Sep 17 00:00:00 2001 From: Genius Ventures Date: Sat, 26 Sep 2020 19:56:22 -0700 Subject: [PATCH 10/25] This adds the missing border thickness for rectangles --- .../pb_box_decoration_gen_helper.dart | 14 +++++++++++--- lib/input/sketch/entities/layers/rectangle.dart | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart b/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart index a147b45f..a19a39b4 100644 --- a/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart @@ -21,9 +21,17 @@ class PBBoxDecorationHelper extends PBAttributesHelper { } else if (borderInfo['borderRadius'] != null) { buffer.write( 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo['borderRadius']})),'); - if (borderInfo['borderColorHex'] != null) { - buffer.write( - 'border: Border.all(color: Color(${borderInfo['borderColorHex']}),),'); + if ((borderInfo['borderColorHex'] != null) || (borderInfo['borderThickness'] != null)) { + buffer.write('border: Border.all('); + if (borderInfo['borderColorHex'] != null) { + buffer.write( + 'color: Color(${borderInfo['borderColorHex']}),'); + } + if (borderInfo['borderThickness'] != null) { + buffer.write( + 'width: ${borderInfo['borderThickness']},'); + } + buffer.write('),'); // end of Border.all( } } } diff --git a/lib/input/sketch/entities/layers/rectangle.dart b/lib/input/sketch/entities/layers/rectangle.dart index f005c26f..ce294915 100644 --- a/lib/input/sketch/entities/layers/rectangle.dart +++ b/lib/input/sketch/entities/layers/rectangle.dart @@ -136,7 +136,8 @@ class Rectangle extends AbstractShapeLayer implements SketchNodeFactory { borderInfo: { 'borderRadius': style.borderOptions.isEnabled ? points[0]['cornerRadius'] : null, - 'borderColorHex': border != null ? border.color.toHex() : null + 'borderColorHex': border != null ? border.color.toHex() : null, + 'borderThickness' : border != null ? border.thickness : null }, )); } From 1b9a591765bd1f3d576b2d23ae61ab81dcde9e19 Mon Sep 17 00:00:00 2001 From: Genius Ventures Date: Sat, 26 Sep 2020 23:16:19 -0700 Subject: [PATCH 11/25] Adds fontFamily to attributes as that really selects the right font --- lib/generation/generators/visual-widgets/pb_text_gen.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index 35174845..52103f53 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -19,6 +19,9 @@ class PBTextGen extends PBGenerator { .write(('\'${source.text?.replaceAll('\n', ' ') ?? ''}\'') + ',\n'); } buffer.write('style: TextStyle(\n'); + if (source.fontName != null) { + buffer.write('fontFamily: \'${source.fontName}\',\n'); + } if (source.fontSize != null) { buffer.write('fontSize: ${source.fontSize.toString()},\n'); } @@ -26,7 +29,7 @@ class PBTextGen extends PBGenerator { buffer.write('fontWeight: FontWeight.${source.fontWeight.toString()},\n'); } if (source.fontStyle != null) { - buffer.write('fontStyle: FontStyle.${source.fontStyle.toString()},\n'); + buffer.write('fontStyle: FontStyle.${source.fontStyle},\n'); } if (source.color != null) { if (findDefaultColor(source.color) == null) { From 90caea3f55bfc2792a2389ce578c9b7a427eb86c Mon Sep 17 00:00:00 2001 From: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Date: Sun, 27 Sep 2020 11:44:26 -0700 Subject: [PATCH 12/25] Feature addfontstyleinfo (#46) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update MANIFESTO.md * Update README.md * Update README.md * Update README.md Updated ReadMe with some structural changes and minor fixes * Update README.md Added `pub install` to getting started. * Update README.md * Update README.md * Added ability to track eggs using Amplitude's event-properties (#25) Co-authored-by: Ivan Vigliante * Fix wiki link (#27) * Update issue template * Remove unused import * Make file with snakeCase * Adding fontWeight and fontStyle for flutter to pickup on font styles. * This adds the missing border thickness for rectangles * Adds fontFamily to attributes as that really selects the right font Co-authored-by: Ivan Huerta Co-authored-by: Eddie Co-authored-by: Ian Hudson Co-authored-by: Ivan Vigliante Co-authored-by: ChangJoo Park(박창주) Co-authored-by: Eddie Co-authored-by: Ivan <42812006+ivan-015@users.noreply.github.com> --- .../pb_box_decoration_gen_helper.dart | 14 +++++++++++--- .../generators/visual-widgets/pb_text_gen.dart | 5 ++++- lib/input/sketch/entities/layers/rectangle.dart | 3 ++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart b/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart index a147b45f..a19a39b4 100644 --- a/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_box_decoration_gen_helper.dart @@ -21,9 +21,17 @@ class PBBoxDecorationHelper extends PBAttributesHelper { } else if (borderInfo['borderRadius'] != null) { buffer.write( 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo['borderRadius']})),'); - if (borderInfo['borderColorHex'] != null) { - buffer.write( - 'border: Border.all(color: Color(${borderInfo['borderColorHex']}),),'); + if ((borderInfo['borderColorHex'] != null) || (borderInfo['borderThickness'] != null)) { + buffer.write('border: Border.all('); + if (borderInfo['borderColorHex'] != null) { + buffer.write( + 'color: Color(${borderInfo['borderColorHex']}),'); + } + if (borderInfo['borderThickness'] != null) { + buffer.write( + 'width: ${borderInfo['borderThickness']},'); + } + buffer.write('),'); // end of Border.all( } } } diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index 35174845..52103f53 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -19,6 +19,9 @@ class PBTextGen extends PBGenerator { .write(('\'${source.text?.replaceAll('\n', ' ') ?? ''}\'') + ',\n'); } buffer.write('style: TextStyle(\n'); + if (source.fontName != null) { + buffer.write('fontFamily: \'${source.fontName}\',\n'); + } if (source.fontSize != null) { buffer.write('fontSize: ${source.fontSize.toString()},\n'); } @@ -26,7 +29,7 @@ class PBTextGen extends PBGenerator { buffer.write('fontWeight: FontWeight.${source.fontWeight.toString()},\n'); } if (source.fontStyle != null) { - buffer.write('fontStyle: FontStyle.${source.fontStyle.toString()},\n'); + buffer.write('fontStyle: FontStyle.${source.fontStyle},\n'); } if (source.color != null) { if (findDefaultColor(source.color) == null) { diff --git a/lib/input/sketch/entities/layers/rectangle.dart b/lib/input/sketch/entities/layers/rectangle.dart index f005c26f..ce294915 100644 --- a/lib/input/sketch/entities/layers/rectangle.dart +++ b/lib/input/sketch/entities/layers/rectangle.dart @@ -136,7 +136,8 @@ class Rectangle extends AbstractShapeLayer implements SketchNodeFactory { borderInfo: { 'borderRadius': style.borderOptions.isEnabled ? points[0]['cornerRadius'] : null, - 'borderColorHex': border != null ? border.color.toHex() : null + 'borderColorHex': border != null ? border.color.toHex() : null, + 'borderThickness' : border != null ? border.thickness : null }, )); } From 25240d815eb37283fa050161c4242d68ea7eab7f Mon Sep 17 00:00:00 2001 From: Genius Ventures Date: Tue, 29 Sep 2020 21:35:23 -0700 Subject: [PATCH 13/25] Allows different configurations for layout service, etc. --- lib/configurations/configurations.json | 9 ++++++- lib/controllers/main_info.dart | 4 +++ lib/controllers/sketch_controller.dart | 10 +++++--- .../entities/layouts/row.dart | 4 +-- .../entities/layouts/row.g.dart | 2 +- .../entities/layouts/stack.dart | 4 +-- .../entities/layouts/stack.g.dart | 2 +- .../helpers/pb_configuration.dart | 14 ++++++----- .../helpers/pb_context.dart | 5 ++-- .../pb_layout_generation_service.dart | 25 +++++++++++++------ lib/main.dart | 16 +++++++++--- .../pb_align_generation_service_test.dart | 2 +- 12 files changed, 65 insertions(+), 32 deletions(-) diff --git a/lib/configurations/configurations.json b/lib/configurations/configurations.json index 0ced7a19..0608268d 100644 --- a/lib/configurations/configurations.json +++ b/lib/configurations/configurations.json @@ -2,7 +2,14 @@ "default": { "widgetStyle": "Material", "widgetType": "Stateless", - "widgetSpacing": "Expanded" + "widgetSpacing": "Expanded", + "layoutPrecedence" : ["column", "row", "stack"] + }, + "stack": { + "widgetStyle": "Material", + "widgetType": "Stateless", + "widgetSpacing": "Expanded", + "layoutPrecedence" : ["stack"] }, "This will be replaced by a Object ID to determine specific configurations for each page": { "widgetStyle": "Material", diff --git a/lib/controllers/main_info.dart b/lib/controllers/main_info.dart index da00a0a5..e71baa6d 100644 --- a/lib/controllers/main_info.dart +++ b/lib/controllers/main_info.dart @@ -16,6 +16,9 @@ class MainInfo { Directory cwd; Map configurations; + // the type of configuration you want to set, 'default' is default type. + String configurationType; + /// Unique ID for the device running parabeac-core String deviceId; @@ -27,6 +30,7 @@ class MainInfo { 'widgetStyle': 'Material', 'widgetType': 'Stateless', 'widgetSpacing': 'Expanded', + 'layoutPrecedence': ['columns', 'rows', 'stack'] } }; diff --git a/lib/controllers/sketch_controller.dart b/lib/controllers/sketch_controller.dart index c5d92ac1..175e8573 100644 --- a/lib/controllers/sketch_controller.dart +++ b/lib/controllers/sketch_controller.dart @@ -18,8 +18,8 @@ class SketchController { ///Converting the [fileAbsPath] sketch file to flutter void convertSketchFile( - var fileAbsPath, var projectPath, var configurationPath) async { - configure(configurationPath); + var fileAbsPath, var projectPath, var configurationPath, var configType) async { + configure(configurationPath, configType); ///INTAKE var ids = InputDesignService(fileAbsPath); @@ -38,11 +38,12 @@ class SketchController { fpb.convertToFlutterProject(); } - void configure(var configurationPath) async { + void configure(var configurationPath, var configType) async { Map configurations; try { if (configurationPath == null || configurationPath.isEmpty) { configurations = MainInfo().defaultConfigs; + } else { configurations = json.decode(File(configurationPath).readAsStringSync()); @@ -56,8 +57,9 @@ class SketchController { } ///SET CONFIGURATION - // Setting configurations globaly + // Setting configurations globally MainInfo().configurations = configurations; + MainInfo().configurationType = configType; } SketchNodeTree generateSketchNodeTree( diff --git a/lib/interpret_and_optimize/entities/layouts/row.dart b/lib/interpret_and_optimize/entities/layouts/row.dart index 797e3c75..466dcb85 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.dart @@ -44,7 +44,7 @@ class PBIntermediateRowLayout extends PBLayoutIntermediateNode { String widgetType = 'ROW'; - PBIntermediateRowLayout(this.UUID, {this.currentContext}) + PBIntermediateRowLayout({this.UUID, this.currentContext}) : super(ROW_RULES, ROW_EXCEPTIONS, currentContext) { generator = PBRowGenerator(); checkCrossAxisAlignment(); @@ -101,7 +101,7 @@ class PBIntermediateRowLayout extends PBLayoutIntermediateNode { PBLayoutIntermediateNode generateLayout( List children, PBContext currentContext) { var row = - PBIntermediateRowLayout(Uuid().v4(), currentContext: currentContext); + PBIntermediateRowLayout(UUID: Uuid().v4(), currentContext: currentContext); row.prototypeNode = prototypeNode; children.forEach((child) => row.addChild(child)); return row; diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index dfad5ddc..b09c300f 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -9,7 +9,7 @@ part of 'row.dart'; PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( Map json) { return PBIntermediateRowLayout( - json['UUID'] as String, + UUID: json['UUID'] as String, ) ..subsemantic = json['subsemantic'] as String ..child = json['child'] diff --git a/lib/interpret_and_optimize/entities/layouts/stack.dart b/lib/interpret_and_optimize/entities/layouts/stack.dart index b818a9c4..9f0d6a0b 100644 --- a/lib/interpret_and_optimize/entities/layouts/stack.dart +++ b/lib/interpret_and_optimize/entities/layouts/stack.dart @@ -33,7 +33,7 @@ class PBIntermediateStackLayout extends PBLayoutIntermediateNode { String widgetType = 'Stack'; - PBIntermediateStackLayout(this.UUID, {this.currentContext}) + PBIntermediateStackLayout({this.UUID, this.currentContext}) : super(STACK_RULES, [], currentContext) { generator = PBStackGenerator(); } @@ -85,7 +85,7 @@ class PBIntermediateStackLayout extends PBLayoutIntermediateNode { List children, PBContext currentContext) { /// The width of this stack must be the full width of the Scaffold or Artboard. As discussed, at some point we can change this but for now, this makes the most sense. var stack = - PBIntermediateStackLayout(Uuid().v4(), currentContext: currentContext); + PBIntermediateStackLayout(UUID: Uuid().v4(), currentContext: currentContext); stack.prototypeNode = prototypeNode; children.forEach((child) => stack.addChild(child)); return stack; diff --git a/lib/interpret_and_optimize/entities/layouts/stack.g.dart b/lib/interpret_and_optimize/entities/layouts/stack.g.dart index 1568b6fe..38a99820 100644 --- a/lib/interpret_and_optimize/entities/layouts/stack.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/stack.g.dart @@ -9,7 +9,7 @@ part of 'stack.dart'; PBIntermediateStackLayout _$PBIntermediateStackLayoutFromJson( Map json) { return PBIntermediateStackLayout( - json['UUID'] as String, + UUID: json['UUID'] as String, ) ..subsemantic = json['subsemantic'] as String ..child = json['child'] diff --git a/lib/interpret_and_optimize/helpers/pb_configuration.dart b/lib/interpret_and_optimize/helpers/pb_configuration.dart index 7fd13782..3893db64 100644 --- a/lib/interpret_and_optimize/helpers/pb_configuration.dart +++ b/lib/interpret_and_optimize/helpers/pb_configuration.dart @@ -1,8 +1,11 @@ +import 'package:parabeac_core/controllers/main_info.dart'; + class PBConfiguration { PBConfiguration(Map defaultConfig, this.specificConfig) { widgetStyle = defaultConfig['widgetStyle']; widgetType = defaultConfig['widgetStyle']; widgetSpacing = defaultConfig['widgetStyle']; + layoutPrecedence = defaultConfig['layoutPrecedence'] ?? ['column', 'row', 'stack']; } String widgetStyle; @@ -11,12 +14,11 @@ class PBConfiguration { String widgetSpacing; + List layoutPrecedence; + Map specificConfig; - void setConfigurations(Map configurations) { - // Setting default configurations - widgetStyle = configurations['default']['widgetSpacing']; - widgetType = configurations['default']['widgetType']; - widgetSpacing = configurations['default']['widgetSpacing']; - } + // not sure why setConfigurations(), so replaced with this class variable + Map configurations; + } diff --git a/lib/interpret_and_optimize/helpers/pb_context.dart b/lib/interpret_and_optimize/helpers/pb_context.dart index 26807568..3669e8c1 100644 --- a/lib/interpret_and_optimize/helpers/pb_context.dart +++ b/lib/interpret_and_optimize/helpers/pb_context.dart @@ -1,3 +1,4 @@ +import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; @@ -12,7 +13,7 @@ class PBContext { copyConfig.remove('default'); configuration = - PBConfiguration(jsonConfigurations['default'], jsonConfigurations); - configuration.setConfigurations(jsonConfigurations); + PBConfiguration(jsonConfigurations[MainInfo().configurationType], jsonConfigurations); + configuration.configurations = jsonConfigurations; } } diff --git a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart index 8c983963..14bc826f 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -13,6 +13,7 @@ import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/services/pb_generation_service.dart'; import 'package:quick_log/quick_log.dart'; import 'package:uuid/uuid.dart'; +import 'package:parabeac_core/controllers/main_info.dart'; /// PBLayoutGenerationService: /// Inject PBLayoutIntermediateNode to a PBIntermediateNode Tree that signifies the grouping of PBItermediateNodes in a given direction. There should not be any PBAlignmentIntermediateNode in the input tree. @@ -20,7 +21,7 @@ import 'package:uuid/uuid.dart'; /// Output:PBIntermediateNode Tree class PBLayoutGenerationService implements PBGenerationService { ///The available Layouts that could be injected. - List _availableLayouts; + List _availableLayouts = []; var log = Logger('Layout Generation Service'); @@ -34,15 +35,23 @@ class PBLayoutGenerationService implements PBGenerationService { PBContext currentContext; PBLayoutGenerationService({this.currentContext}) { - _availableLayouts = [ - PBIntermediateColumnLayout( + Map layoutHandlers = { + 'column': PBIntermediateColumnLayout( currentContext: currentContext, UUID: Uuid().v4()), - PBIntermediateRowLayout(Uuid().v4(), currentContext: currentContext), - PBIntermediateStackLayout(Uuid().v4(), currentContext: currentContext) - ]; + 'row': PBIntermediateRowLayout(currentContext: currentContext, UUID: Uuid().v4()), + 'stack': PBIntermediateStackLayout(currentContext: currentContext, UUID: Uuid().v4()), + }; - defaultLayout = PBIntermediateColumnLayout( - currentContext: currentContext, UUID: Uuid().v4()); + var mainInfo = MainInfo(); + + for (var layoutType in currentContext.configuration.layoutPrecedence ?? ['column']) { + layoutType = layoutType.toLowerCase(); + if (layoutHandlers.containsKey(layoutType)) { + _availableLayouts.add(layoutHandlers[layoutType]); + } + } + + defaultLayout = _availableLayouts[0]; } ///The default [PBLayoutIntermediateNode] diff --git a/lib/main.dart b/lib/main.dart index 46849e52..c03dee50 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,7 +29,8 @@ void main(List args) async { var path = ''; var projectName = ''; var designType = 'sketch'; - var configurationPath; + var configurationPath = 'lib/configurations/configurations.json'; + var configurationType = 'default'; for (var i = 0; i < args.length; i += 2) { switch (args[i]) { case '-p': @@ -50,9 +51,16 @@ void main(List args) async { case '-n': projectName = args[i + 1]; break; + // usage -c "default:lib/configurations/configurations.json case '-c': - // handle configurations - configurationPath = 'lib/configurations/configurations.json'; + var configSet = args[i + 1].split(':'); + if (configSet.isNotEmpty) { + configurationType = configSet[0]; + } + if (configSet.length >= 2) { + // handle configurations + configurationPath = configSet[1]; + } break; } } @@ -84,7 +92,7 @@ void main(List args) async { //Retrieving the Sketch PNGs from the design file await Directory('${MainInfo().outputPath}pngs').create(recursive: true); await SketchController().convertSketchFile(pathToSketchFile, - MainInfo().outputPath + projectName, configurationPath); + MainInfo().outputPath + projectName, configurationPath, configurationType); process.kill(); } else if (designType == 'xd') { assert(false, 'We don\'t support Adobe XD.'); diff --git a/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart b/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart index 2b52f001..54072557 100644 --- a/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart +++ b/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart @@ -30,7 +30,7 @@ void main() { PBIntermediateStackLayout stack; setUp(() { stack = - PBIntermediateStackLayout(Uuid().v4(), currentContext: MockContext()); + PBIntermediateStackLayout(UUID: Uuid().v4(), currentContext: MockContext()); }); test('Testing the stack alignment algorithm', () { From 2c6e5ae3ab07db54976a3edf7696f89450bdddf2 Mon Sep 17 00:00:00 2001 From: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Date: Wed, 30 Sep 2020 00:24:23 -0700 Subject: [PATCH 14/25] Feature to use configuration.json (#52) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update MANIFESTO.md * Update README.md * Update README.md * Update README.md Updated ReadMe with some structural changes and minor fixes * Update README.md Added `pub install` to getting started. * Update README.md * Update README.md * Added ability to track eggs using Amplitude's event-properties (#25) Co-authored-by: Ivan Vigliante * Fix wiki link (#27) * Update issue template * Remove unused import * Make file with snakeCase * Adding fontWeight and fontStyle for flutter to pickup on font styles. * This adds the missing border thickness for rectangles * Adds fontFamily to attributes as that really selects the right font * Allows different configurations for layout service, etc. Co-authored-by: Ivan Huerta Co-authored-by: Eddie Co-authored-by: Ian Hudson Co-authored-by: Ivan Vigliante Co-authored-by: ChangJoo Park(박창주) Co-authored-by: Eddie Co-authored-by: Ivan <42812006+ivan-015@users.noreply.github.com> --- lib/configurations/configurations.json | 9 ++++++- lib/controllers/main_info.dart | 4 +++ lib/controllers/sketch_controller.dart | 10 +++++--- .../entities/layouts/row.dart | 4 +-- .../entities/layouts/row.g.dart | 2 +- .../entities/layouts/stack.dart | 4 +-- .../entities/layouts/stack.g.dart | 2 +- .../helpers/pb_configuration.dart | 14 ++++++----- .../helpers/pb_context.dart | 5 ++-- .../pb_layout_generation_service.dart | 25 +++++++++++++------ lib/main.dart | 16 +++++++++--- .../pb_align_generation_service_test.dart | 2 +- 12 files changed, 65 insertions(+), 32 deletions(-) diff --git a/lib/configurations/configurations.json b/lib/configurations/configurations.json index 0ced7a19..0608268d 100644 --- a/lib/configurations/configurations.json +++ b/lib/configurations/configurations.json @@ -2,7 +2,14 @@ "default": { "widgetStyle": "Material", "widgetType": "Stateless", - "widgetSpacing": "Expanded" + "widgetSpacing": "Expanded", + "layoutPrecedence" : ["column", "row", "stack"] + }, + "stack": { + "widgetStyle": "Material", + "widgetType": "Stateless", + "widgetSpacing": "Expanded", + "layoutPrecedence" : ["stack"] }, "This will be replaced by a Object ID to determine specific configurations for each page": { "widgetStyle": "Material", diff --git a/lib/controllers/main_info.dart b/lib/controllers/main_info.dart index da00a0a5..e71baa6d 100644 --- a/lib/controllers/main_info.dart +++ b/lib/controllers/main_info.dart @@ -16,6 +16,9 @@ class MainInfo { Directory cwd; Map configurations; + // the type of configuration you want to set, 'default' is default type. + String configurationType; + /// Unique ID for the device running parabeac-core String deviceId; @@ -27,6 +30,7 @@ class MainInfo { 'widgetStyle': 'Material', 'widgetType': 'Stateless', 'widgetSpacing': 'Expanded', + 'layoutPrecedence': ['columns', 'rows', 'stack'] } }; diff --git a/lib/controllers/sketch_controller.dart b/lib/controllers/sketch_controller.dart index c5d92ac1..175e8573 100644 --- a/lib/controllers/sketch_controller.dart +++ b/lib/controllers/sketch_controller.dart @@ -18,8 +18,8 @@ class SketchController { ///Converting the [fileAbsPath] sketch file to flutter void convertSketchFile( - var fileAbsPath, var projectPath, var configurationPath) async { - configure(configurationPath); + var fileAbsPath, var projectPath, var configurationPath, var configType) async { + configure(configurationPath, configType); ///INTAKE var ids = InputDesignService(fileAbsPath); @@ -38,11 +38,12 @@ class SketchController { fpb.convertToFlutterProject(); } - void configure(var configurationPath) async { + void configure(var configurationPath, var configType) async { Map configurations; try { if (configurationPath == null || configurationPath.isEmpty) { configurations = MainInfo().defaultConfigs; + } else { configurations = json.decode(File(configurationPath).readAsStringSync()); @@ -56,8 +57,9 @@ class SketchController { } ///SET CONFIGURATION - // Setting configurations globaly + // Setting configurations globally MainInfo().configurations = configurations; + MainInfo().configurationType = configType; } SketchNodeTree generateSketchNodeTree( diff --git a/lib/interpret_and_optimize/entities/layouts/row.dart b/lib/interpret_and_optimize/entities/layouts/row.dart index 797e3c75..466dcb85 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.dart @@ -44,7 +44,7 @@ class PBIntermediateRowLayout extends PBLayoutIntermediateNode { String widgetType = 'ROW'; - PBIntermediateRowLayout(this.UUID, {this.currentContext}) + PBIntermediateRowLayout({this.UUID, this.currentContext}) : super(ROW_RULES, ROW_EXCEPTIONS, currentContext) { generator = PBRowGenerator(); checkCrossAxisAlignment(); @@ -101,7 +101,7 @@ class PBIntermediateRowLayout extends PBLayoutIntermediateNode { PBLayoutIntermediateNode generateLayout( List children, PBContext currentContext) { var row = - PBIntermediateRowLayout(Uuid().v4(), currentContext: currentContext); + PBIntermediateRowLayout(UUID: Uuid().v4(), currentContext: currentContext); row.prototypeNode = prototypeNode; children.forEach((child) => row.addChild(child)); return row; diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index dfad5ddc..b09c300f 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -9,7 +9,7 @@ part of 'row.dart'; PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( Map json) { return PBIntermediateRowLayout( - json['UUID'] as String, + UUID: json['UUID'] as String, ) ..subsemantic = json['subsemantic'] as String ..child = json['child'] diff --git a/lib/interpret_and_optimize/entities/layouts/stack.dart b/lib/interpret_and_optimize/entities/layouts/stack.dart index b818a9c4..9f0d6a0b 100644 --- a/lib/interpret_and_optimize/entities/layouts/stack.dart +++ b/lib/interpret_and_optimize/entities/layouts/stack.dart @@ -33,7 +33,7 @@ class PBIntermediateStackLayout extends PBLayoutIntermediateNode { String widgetType = 'Stack'; - PBIntermediateStackLayout(this.UUID, {this.currentContext}) + PBIntermediateStackLayout({this.UUID, this.currentContext}) : super(STACK_RULES, [], currentContext) { generator = PBStackGenerator(); } @@ -85,7 +85,7 @@ class PBIntermediateStackLayout extends PBLayoutIntermediateNode { List children, PBContext currentContext) { /// The width of this stack must be the full width of the Scaffold or Artboard. As discussed, at some point we can change this but for now, this makes the most sense. var stack = - PBIntermediateStackLayout(Uuid().v4(), currentContext: currentContext); + PBIntermediateStackLayout(UUID: Uuid().v4(), currentContext: currentContext); stack.prototypeNode = prototypeNode; children.forEach((child) => stack.addChild(child)); return stack; diff --git a/lib/interpret_and_optimize/entities/layouts/stack.g.dart b/lib/interpret_and_optimize/entities/layouts/stack.g.dart index 1568b6fe..38a99820 100644 --- a/lib/interpret_and_optimize/entities/layouts/stack.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/stack.g.dart @@ -9,7 +9,7 @@ part of 'stack.dart'; PBIntermediateStackLayout _$PBIntermediateStackLayoutFromJson( Map json) { return PBIntermediateStackLayout( - json['UUID'] as String, + UUID: json['UUID'] as String, ) ..subsemantic = json['subsemantic'] as String ..child = json['child'] diff --git a/lib/interpret_and_optimize/helpers/pb_configuration.dart b/lib/interpret_and_optimize/helpers/pb_configuration.dart index 7fd13782..3893db64 100644 --- a/lib/interpret_and_optimize/helpers/pb_configuration.dart +++ b/lib/interpret_and_optimize/helpers/pb_configuration.dart @@ -1,8 +1,11 @@ +import 'package:parabeac_core/controllers/main_info.dart'; + class PBConfiguration { PBConfiguration(Map defaultConfig, this.specificConfig) { widgetStyle = defaultConfig['widgetStyle']; widgetType = defaultConfig['widgetStyle']; widgetSpacing = defaultConfig['widgetStyle']; + layoutPrecedence = defaultConfig['layoutPrecedence'] ?? ['column', 'row', 'stack']; } String widgetStyle; @@ -11,12 +14,11 @@ class PBConfiguration { String widgetSpacing; + List layoutPrecedence; + Map specificConfig; - void setConfigurations(Map configurations) { - // Setting default configurations - widgetStyle = configurations['default']['widgetSpacing']; - widgetType = configurations['default']['widgetType']; - widgetSpacing = configurations['default']['widgetSpacing']; - } + // not sure why setConfigurations(), so replaced with this class variable + Map configurations; + } diff --git a/lib/interpret_and_optimize/helpers/pb_context.dart b/lib/interpret_and_optimize/helpers/pb_context.dart index 26807568..3669e8c1 100644 --- a/lib/interpret_and_optimize/helpers/pb_context.dart +++ b/lib/interpret_and_optimize/helpers/pb_context.dart @@ -1,3 +1,4 @@ +import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_configuration.dart'; import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; @@ -12,7 +13,7 @@ class PBContext { copyConfig.remove('default'); configuration = - PBConfiguration(jsonConfigurations['default'], jsonConfigurations); - configuration.setConfigurations(jsonConfigurations); + PBConfiguration(jsonConfigurations[MainInfo().configurationType], jsonConfigurations); + configuration.configurations = jsonConfigurations; } } diff --git a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart index 8c983963..14bc826f 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -13,6 +13,7 @@ import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/services/pb_generation_service.dart'; import 'package:quick_log/quick_log.dart'; import 'package:uuid/uuid.dart'; +import 'package:parabeac_core/controllers/main_info.dart'; /// PBLayoutGenerationService: /// Inject PBLayoutIntermediateNode to a PBIntermediateNode Tree that signifies the grouping of PBItermediateNodes in a given direction. There should not be any PBAlignmentIntermediateNode in the input tree. @@ -20,7 +21,7 @@ import 'package:uuid/uuid.dart'; /// Output:PBIntermediateNode Tree class PBLayoutGenerationService implements PBGenerationService { ///The available Layouts that could be injected. - List _availableLayouts; + List _availableLayouts = []; var log = Logger('Layout Generation Service'); @@ -34,15 +35,23 @@ class PBLayoutGenerationService implements PBGenerationService { PBContext currentContext; PBLayoutGenerationService({this.currentContext}) { - _availableLayouts = [ - PBIntermediateColumnLayout( + Map layoutHandlers = { + 'column': PBIntermediateColumnLayout( currentContext: currentContext, UUID: Uuid().v4()), - PBIntermediateRowLayout(Uuid().v4(), currentContext: currentContext), - PBIntermediateStackLayout(Uuid().v4(), currentContext: currentContext) - ]; + 'row': PBIntermediateRowLayout(currentContext: currentContext, UUID: Uuid().v4()), + 'stack': PBIntermediateStackLayout(currentContext: currentContext, UUID: Uuid().v4()), + }; - defaultLayout = PBIntermediateColumnLayout( - currentContext: currentContext, UUID: Uuid().v4()); + var mainInfo = MainInfo(); + + for (var layoutType in currentContext.configuration.layoutPrecedence ?? ['column']) { + layoutType = layoutType.toLowerCase(); + if (layoutHandlers.containsKey(layoutType)) { + _availableLayouts.add(layoutHandlers[layoutType]); + } + } + + defaultLayout = _availableLayouts[0]; } ///The default [PBLayoutIntermediateNode] diff --git a/lib/main.dart b/lib/main.dart index 46849e52..c03dee50 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,7 +29,8 @@ void main(List args) async { var path = ''; var projectName = ''; var designType = 'sketch'; - var configurationPath; + var configurationPath = 'lib/configurations/configurations.json'; + var configurationType = 'default'; for (var i = 0; i < args.length; i += 2) { switch (args[i]) { case '-p': @@ -50,9 +51,16 @@ void main(List args) async { case '-n': projectName = args[i + 1]; break; + // usage -c "default:lib/configurations/configurations.json case '-c': - // handle configurations - configurationPath = 'lib/configurations/configurations.json'; + var configSet = args[i + 1].split(':'); + if (configSet.isNotEmpty) { + configurationType = configSet[0]; + } + if (configSet.length >= 2) { + // handle configurations + configurationPath = configSet[1]; + } break; } } @@ -84,7 +92,7 @@ void main(List args) async { //Retrieving the Sketch PNGs from the design file await Directory('${MainInfo().outputPath}pngs').create(recursive: true); await SketchController().convertSketchFile(pathToSketchFile, - MainInfo().outputPath + projectName, configurationPath); + MainInfo().outputPath + projectName, configurationPath, configurationType); process.kill(); } else if (designType == 'xd') { assert(false, 'We don\'t support Adobe XD.'); diff --git a/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart b/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart index 2b52f001..54072557 100644 --- a/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart +++ b/test/lib/interpret_and_optimize/services/pb_align_generation_service_test.dart @@ -30,7 +30,7 @@ void main() { PBIntermediateStackLayout stack; setUp(() { stack = - PBIntermediateStackLayout(Uuid().v4(), currentContext: MockContext()); + PBIntermediateStackLayout(UUID: Uuid().v4(), currentContext: MockContext()); }); test('Testing the stack alignment algorithm', () { From ae0ad63e853d1f3cd0cea45f9d65b974940c50fe Mon Sep 17 00:00:00 2001 From: Genius Ventures Date: Wed, 30 Sep 2020 16:12:56 -0700 Subject: [PATCH 15/25] Fix bug that I introduced that is setting the default configs from the wrong attributes --- lib/interpret_and_optimize/helpers/pb_configuration.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/interpret_and_optimize/helpers/pb_configuration.dart b/lib/interpret_and_optimize/helpers/pb_configuration.dart index 3893db64..965439cb 100644 --- a/lib/interpret_and_optimize/helpers/pb_configuration.dart +++ b/lib/interpret_and_optimize/helpers/pb_configuration.dart @@ -3,8 +3,8 @@ import 'package:parabeac_core/controllers/main_info.dart'; class PBConfiguration { PBConfiguration(Map defaultConfig, this.specificConfig) { widgetStyle = defaultConfig['widgetStyle']; - widgetType = defaultConfig['widgetStyle']; - widgetSpacing = defaultConfig['widgetStyle']; + widgetType = defaultConfig['widgetType']; + widgetSpacing = defaultConfig['widgetSpacing']; layoutPrecedence = defaultConfig['layoutPrecedence'] ?? ['column', 'row', 'stack']; } From 38c40dab74feb0980fde261f34d584e6f6127dfc Mon Sep 17 00:00:00 2001 From: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Date: Thu, 1 Oct 2020 09:49:10 -0700 Subject: [PATCH 16/25] Fixes MediaQuery.Of on Symbol Masters that would move padding of the symbol instance (#54) --- .../generators/visual-widgets/pb_padding_gen.dart | 6 ++++-- .../services/pb_layout_generation_service.dart | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/generation/generators/visual-widgets/pb_padding_gen.dart b/lib/generation/generators/visual-widgets/pb_padding_gen.dart index e560fa79..cd9d3354 100644 --- a/lib/generation/generators/visual-widgets/pb_padding_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_padding_gen.dart @@ -1,6 +1,8 @@ import 'dart:mirrors'; import 'package:parabeac_core/interpret_and_optimize/entities/alignments/padding.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_master_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import '../pb_flutter_generator.dart'; @@ -11,7 +13,7 @@ class PBPaddingGen extends PBGenerator { String relativePadding(BUILDER_TYPE type, bool isVertical, double value) { var fixedValue = value.toStringAsFixed(2); - if (type != null) { + if ((type != null) && (type != BUILDER_TYPE.SYMBOL_MASTER)) { var property = isVertical ? 'height' : 'width'; return 'MediaQuery.of(context).size.$property * $fixedValue'; } @@ -35,7 +37,7 @@ class PBPaddingGen extends PBGenerator { var value = reflectedPadding.getField(Symbol(position)).reflectee; if (value != null) { buffer.write( - '$position: ${relativePadding(BUILDER_TYPE.BODY, false, value)},'); + '$position: ${relativePadding(source.builder_type ?? BUILDER_TYPE.BODY, false, value)},'); } } buffer.write('),'); diff --git a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart index 14bc826f..be1ce56a 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -42,8 +42,6 @@ class PBLayoutGenerationService implements PBGenerationService { 'stack': PBIntermediateStackLayout(currentContext: currentContext, UUID: Uuid().v4()), }; - var mainInfo = MainInfo(); - for (var layoutType in currentContext.configuration.layoutPrecedence ?? ['column']) { layoutType = layoutType.toLowerCase(); if (layoutHandlers.containsKey(layoutType)) { From 1a3f812d95b936bd4095bee29ec2d314c4a3164c Mon Sep 17 00:00:00 2001 From: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Date: Thu, 1 Oct 2020 10:23:52 -0700 Subject: [PATCH 17/25] Adds Font kerning parameter 'letterSpacing' to TextStyle (#72) * Fixes MediaQuery.Of on Symbol Masters that would move padding of the symbol instance * Adds kerning parameter 'letterSpacing' to TextStyle --- lib/generation/generators/visual-widgets/pb_text_gen.dart | 3 +++ lib/input/sketch/entities/style/font_descriptor.dart | 2 ++ lib/input/sketch/entities/style/text_style.dart | 1 + lib/interpret_and_optimize/entities/inherited_text.dart | 2 ++ lib/interpret_and_optimize/entities/inherited_text.g.dart | 4 +++- 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index 52103f53..1f893859 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -31,6 +31,9 @@ class PBTextGen extends PBGenerator { if (source.fontStyle != null) { buffer.write('fontStyle: FontStyle.${source.fontStyle},\n'); } + if (source.letterSpacing != null) { + buffer.write('letterSpacing: ${source.letterSpacing},\n'); + } if (source.color != null) { if (findDefaultColor(source.color) == null) { buffer.write('color: Color(${source.color}),'); diff --git a/lib/input/sketch/entities/style/font_descriptor.dart b/lib/input/sketch/entities/style/font_descriptor.dart index 594d3f94..a1f5b372 100644 --- a/lib/input/sketch/entities/style/font_descriptor.dart +++ b/lib/input/sketch/entities/style/font_descriptor.dart @@ -13,6 +13,8 @@ class FontDescriptor { String fontWeight; @JsonKey(ignore: true) String fontStyle; + @JsonKey(ignore: true) + num letterSpacing; FontDescriptor({this.rawAttributes}) { fontSize = rawAttributes['size']; diff --git a/lib/input/sketch/entities/style/text_style.dart b/lib/input/sketch/entities/style/text_style.dart index 9b211221..f4930e8c 100644 --- a/lib/input/sketch/entities/style/text_style.dart +++ b/lib/input/sketch/entities/style/text_style.dart @@ -84,6 +84,7 @@ class TextStyle { // this is really fontFamily with removal of -XXX font type name suffix fontDescriptor.fontName = fontDescriptor.fontName.replaceFirst('-$s', ''); + fontDescriptor.letterSpacing = rawEncodedAttributes['kerning'] ?? 0.0; break; } } diff --git a/lib/interpret_and_optimize/entities/inherited_text.dart b/lib/interpret_and_optimize/entities/inherited_text.dart index 9b1688ea..a360d936 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.dart @@ -42,6 +42,7 @@ class InheritedText extends PBVisualIntermediateNode String fontWeight; // one of the w100-w900 weights String fontStyle; // normal, or italic String textAlignment; + num letterSpacing; InheritedText(this.originalRef, {this.currentContext}) : super( @@ -65,6 +66,7 @@ class InheritedText extends PBVisualIntermediateNode fontName = originalRef.style.textStyle.fontDescriptor.fontName; fontWeight = originalRef.style.textStyle.fontDescriptor.fontWeight; fontStyle = originalRef.style.textStyle.fontDescriptor.fontStyle; + letterSpacing = originalRef.style.textStyle.fontDescriptor.letterSpacing; alignmenttype = originalRef.style.textStyle.paragraphStyle.alignment; if (alignmenttype == 0) { diff --git a/lib/interpret_and_optimize/entities/inherited_text.g.dart b/lib/interpret_and_optimize/entities/inherited_text.g.dart index 2da28025..7120d74d 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.g.dart @@ -29,7 +29,8 @@ InheritedText _$InheritedTextFromJson(Map json) { ..widgetType = json['widgetType'] as String ..fontSize = json['fontSize'] as num ..fontName = json['fontName'] as String - ..textAlignment = json['textAlignment'] as String; + ..textAlignment = json['textAlignment'] as String + ..letterSpacing = json['letterSpacing'] as num; } Map _$InheritedTextToJson(InheritedText instance) => @@ -51,4 +52,5 @@ Map _$InheritedTextToJson(InheritedText instance) => 'fontSize': instance.fontSize, 'fontName': instance.fontName, 'textAlignment': instance.textAlignment, + 'letterSpacing': instance.letterSpacing, }; From f06808e4d69dab94a0bf5f97096db6beb888c8f7 Mon Sep 17 00:00:00 2001 From: legolaus Date: Fri, 2 Oct 2020 09:29:35 +0530 Subject: [PATCH 18/25] Helpflag added in main.dart (#79) * These changes allow for the usage of Polygon, Triangle, and Star in sketch * This adds the missing border thickness for rectangles (#45) * Update README.md Added brief intro paragraph under "What is Parabeac-Core" section. * Adding check for empty or with -h option * Added help support for main.dart * remove local variable creation that caused compile error * allow to proceed to main.dart. remove return statement Co-authored-by: DepressoExpressoBoi Co-authored-by: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Co-authored-by: Ivan Huerta Co-authored-by: Ian Hudson --- README.md | 2 + lib/controllers/macbg.py | 10 ++ lib/design_logic/star.dart | 5 - .../abstract_sketch_node_factory.dart | 8 +- lib/input/sketch/entities/layers/polygon.dart | 127 ++++++++++++++++++ .../sketch/entities/layers/polygon.g.dart | 81 +++++++++++ lib/input/sketch/entities/layers/star.dart | 127 ++++++++++++++++++ lib/input/sketch/entities/layers/star.g.dart | 81 +++++++++++ .../sketch/entities/layers/triangle.dart | 127 ++++++++++++++++++ .../sketch/entities/layers/triangle.g.dart | 81 +++++++++++ .../entities/inherited_polygon.dart | 90 +++++++++++++ .../entities/inherited_polygon.g.dart | 46 +++++++ .../entities/inherited_star.dart | 90 +++++++++++++ .../entities/inherited_star.g.dart | 46 +++++++ .../entities/inherited_triangle.dart | 90 +++++++++++++ .../entities/inherited_triangle.g.dart | 46 +++++++ lib/main.dart | 19 ++- parabeac.dart | 34 +++-- 18 files changed, 1088 insertions(+), 22 deletions(-) create mode 100644 lib/controllers/macbg.py delete mode 100644 lib/design_logic/star.dart create mode 100644 lib/input/sketch/entities/layers/polygon.dart create mode 100644 lib/input/sketch/entities/layers/polygon.g.dart create mode 100644 lib/input/sketch/entities/layers/star.dart create mode 100644 lib/input/sketch/entities/layers/star.g.dart create mode 100644 lib/input/sketch/entities/layers/triangle.dart create mode 100644 lib/input/sketch/entities/layers/triangle.g.dart create mode 100644 lib/interpret_and_optimize/entities/inherited_polygon.dart create mode 100644 lib/interpret_and_optimize/entities/inherited_polygon.g.dart create mode 100644 lib/interpret_and_optimize/entities/inherited_star.dart create mode 100644 lib/interpret_and_optimize/entities/inherited_star.g.dart create mode 100644 lib/interpret_and_optimize/entities/inherited_triangle.dart create mode 100644 lib/interpret_and_optimize/entities/inherited_triangle.g.dart diff --git a/README.md b/README.md index 9267b8ca..363c8ee5 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ Parabeac-Core is an open-source repository that converts design files into Flutt Dev.to +# What is Parabeac-Core? +Parabeac-Core is an open-source repository that converts design files into Flutter code. The biggest challenge in code conversion is achieving quality code, but in a tool like this, there’s so much variability in what quality code should look like. So Parabeac-Core is built in a way not to promise quality code, but to be driven by the community so that you can configure & tweak to you or your teams liking. See our [Manifesto](https://github.com/Parabeac/Parabeac-Core/blob/stable/MANIFESTO.md). We welcome contributors to improve Parabeac-Core, create [Parabeac Eggs](https://github.com/Parabeac/parabeac-egg-template), & to join our [Discord](https://discord.com/invite/qUrghes) community! # Get Started diff --git a/lib/controllers/macbg.py b/lib/controllers/macbg.py new file mode 100644 index 00000000..e4e4f9fb --- /dev/null +++ b/lib/controllers/macbg.py @@ -0,0 +1,10 @@ +import subprocess + +SCRIPT = """/usr/bin/osascript< this._isVisible = _isVisible; + + @override + bool get isVisible => _isVisible; + + @override + void set style(_style) => this._style = _style; + + @override + Style get style => _style; + Polygon( + {bool edited, + bool isClosed, + pointRadiusBehaviour, + List points, + this.UUID, + booleanOperation, + exportOptions, + Frame this.boundaryRectangle, + Flow flow, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + isVisible, + layerListExpandedType, + name, + nameIsFixed, + resizingConstraint, + resizingType, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + Style style, + maintainScrollPosition}) + : _isVisible = isVisible, + _style = style, + super( + edited, + isClosed, + pointRadiusBehaviour, + points, + UUID, + booleanOperation, + exportOptions, + boundaryRectangle, + flow, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + isVisible, + layerListExpandedType, + name, + nameIsFixed, + resizingConstraint, + resizingType, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + style, + maintainScrollPosition); + + @override + SketchNode createSketchNode(Map json) { + var polygon = Polygon.fromJson(json); + return polygon; + } + + factory Polygon.fromJson(Map json) => _$PolygonFromJson(json); + @override + Map toJson() => _$PolygonToJson(this); + + @override + Future interpretNode(PBContext currentContext) async { + var image = await convertImageLocal( + UUID, boundaryRectangle.width, boundaryRectangle.height); + if (image == null) { + return null; + } + return Future.value( + InheritedPolygon(this, currentContext: currentContext, image: image)); + } +} diff --git a/lib/input/sketch/entities/layers/polygon.g.dart b/lib/input/sketch/entities/layers/polygon.g.dart new file mode 100644 index 00000000..c55fc02a --- /dev/null +++ b/lib/input/sketch/entities/layers/polygon.g.dart @@ -0,0 +1,81 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'polygon.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Polygon _$PolygonFromJson(Map json) { + return Polygon( + edited: json['edited'] as bool, + isClosed: json['isClosed'] as bool, + pointRadiusBehaviour: json['pointRadiusBehaviour'], + points: json['points'] as List, + UUID: json['do_objectID'] as String, + booleanOperation: json['booleanOperation'], + exportOptions: json['exportOptions'], + boundaryRectangle: json['frame'] == null + ? null + : Frame.fromJson(json['frame'] as Map), + flow: json['flow'] == null + ? null + : Flow.fromJson(json['flow'] as Map), + isFixedToViewport: json['isFixedToViewport'], + isFlippedHorizontal: json['isFlippedHorizontal'], + isFlippedVertical: json['isFlippedVertical'], + isLocked: json['isLocked'], + isVisible: json['isVisible'], + layerListExpandedType: json['layerListExpandedType'], + name: json['name'], + nameIsFixed: json['nameIsFixed'], + resizingConstraint: json['resizingConstraint'], + resizingType: json['resizingType'], + rotation: json['rotation'], + sharedStyleID: json['sharedStyleID'], + shouldBreakMaskChain: json['shouldBreakMaskChain'], + hasClippingMask: json['hasClippingMask'], + clippingMaskMode: json['clippingMaskMode'], + userInfo: json['userInfo'], + style: json['style'] == null + ? null + : Style.fromJson(json['style'] as Map), + maintainScrollPosition: json['maintainScrollPosition'], + ) + ..prototypeNodeUUID = json['prototypeNodeUUID'] as String + ..CLASS_NAME = json['CLASS_NAME'] as String + ..type = json['_class'] as String; +} + +Map _$PolygonToJson(Polygon instance) => { + 'booleanOperation': instance.booleanOperation, + 'exportOptions': instance.exportOptions, + 'flow': instance.flow, + 'isFixedToViewport': instance.isFixedToViewport, + 'isFlippedHorizontal': instance.isFlippedHorizontal, + 'isFlippedVertical': instance.isFlippedVertical, + 'isLocked': instance.isLocked, + 'layerListExpandedType': instance.layerListExpandedType, + 'name': instance.name, + 'nameIsFixed': instance.nameIsFixed, + 'resizingConstraint': instance.resizingConstraint, + 'resizingType': instance.resizingType, + 'rotation': instance.rotation, + 'sharedStyleID': instance.sharedStyleID, + 'shouldBreakMaskChain': instance.shouldBreakMaskChain, + 'hasClippingMask': instance.hasClippingMask, + 'clippingMaskMode': instance.clippingMaskMode, + 'userInfo': instance.userInfo, + 'maintainScrollPosition': instance.maintainScrollPosition, + 'prototypeNodeUUID': instance.prototypeNodeUUID, + 'edited': instance.edited, + 'isClosed': instance.isClosed, + 'pointRadiusBehaviour': instance.pointRadiusBehaviour, + 'points': instance.points, + 'CLASS_NAME': instance.CLASS_NAME, + 'frame': instance.boundaryRectangle, + 'do_objectID': instance.UUID, + '_class': instance.type, + 'isVisible': instance.isVisible, + 'style': instance.style, + }; diff --git a/lib/input/sketch/entities/layers/star.dart b/lib/input/sketch/entities/layers/star.dart new file mode 100644 index 00000000..73f93f7b --- /dev/null +++ b/lib/input/sketch/entities/layers/star.dart @@ -0,0 +1,127 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:parabeac_core/input/sketch/entities/abstract_sketch_node_factory.dart'; +import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; +import 'package:parabeac_core/input/sketch/entities/layers/abstract_shape_layer.dart'; +import 'package:parabeac_core/input/sketch/entities/layers/flow.dart'; +import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; +import 'package:parabeac_core/input/sketch/entities/style/style.dart'; +import 'package:parabeac_core/input/sketch/helper/svg_png_convertion.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/inherited_star.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; + +part 'star.g.dart'; + +// title: Star Layer +// description: Star layers are the result of adding an star shape to the canvas +@JsonSerializable(nullable: true) +class Star extends AbstractShapeLayer implements SketchNodeFactory { + @override + String CLASS_NAME = 'star'; + @override + @JsonKey(name: 'frame') + var boundaryRectangle; + + @override + @JsonKey(name: 'do_objectID') + String UUID; + + @override + @JsonKey(name: '_class') + String type; + + bool _isVisible; + + Style _style; + + @override + void set isVisible(bool _isVisible) => this._isVisible = _isVisible; + + @override + bool get isVisible => _isVisible; + + @override + void set style(_style) => this._style = _style; + + @override + Style get style => _style; + Star( + {bool edited, + bool isClosed, + pointRadiusBehaviour, + List points, + this.UUID, + booleanOperation, + exportOptions, + Frame this.boundaryRectangle, + Flow flow, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + isVisible, + layerListExpandedType, + name, + nameIsFixed, + resizingConstraint, + resizingType, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + Style style, + maintainScrollPosition}) + : _isVisible = isVisible, + _style = style, + super( + edited, + isClosed, + pointRadiusBehaviour, + points, + UUID, + booleanOperation, + exportOptions, + boundaryRectangle, + flow, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + isVisible, + layerListExpandedType, + name, + nameIsFixed, + resizingConstraint, + resizingType, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + style, + maintainScrollPosition); + + @override + SketchNode createSketchNode(Map json) { + var star = Star.fromJson(json); + return star; + } + + factory Star.fromJson(Map json) => _$StarFromJson(json); + @override + Map toJson() => _$StarToJson(this); + + @override + Future interpretNode(PBContext currentContext) async { + var image = await convertImageLocal( + UUID, boundaryRectangle.width, boundaryRectangle.height); + if (image == null) { + return null; + } + return Future.value( + InheritedStar(this, currentContext: currentContext, image: image)); + } +} diff --git a/lib/input/sketch/entities/layers/star.g.dart b/lib/input/sketch/entities/layers/star.g.dart new file mode 100644 index 00000000..8690c88d --- /dev/null +++ b/lib/input/sketch/entities/layers/star.g.dart @@ -0,0 +1,81 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'star.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Star _$StarFromJson(Map json) { + return Star( + edited: json['edited'] as bool, + isClosed: json['isClosed'] as bool, + pointRadiusBehaviour: json['pointRadiusBehaviour'], + points: json['points'] as List, + UUID: json['do_objectID'] as String, + booleanOperation: json['booleanOperation'], + exportOptions: json['exportOptions'], + boundaryRectangle: json['frame'] == null + ? null + : Frame.fromJson(json['frame'] as Map), + flow: json['flow'] == null + ? null + : Flow.fromJson(json['flow'] as Map), + isFixedToViewport: json['isFixedToViewport'], + isFlippedHorizontal: json['isFlippedHorizontal'], + isFlippedVertical: json['isFlippedVertical'], + isLocked: json['isLocked'], + isVisible: json['isVisible'], + layerListExpandedType: json['layerListExpandedType'], + name: json['name'], + nameIsFixed: json['nameIsFixed'], + resizingConstraint: json['resizingConstraint'], + resizingType: json['resizingType'], + rotation: json['rotation'], + sharedStyleID: json['sharedStyleID'], + shouldBreakMaskChain: json['shouldBreakMaskChain'], + hasClippingMask: json['hasClippingMask'], + clippingMaskMode: json['clippingMaskMode'], + userInfo: json['userInfo'], + style: json['style'] == null + ? null + : Style.fromJson(json['style'] as Map), + maintainScrollPosition: json['maintainScrollPosition'], + ) + ..prototypeNodeUUID = json['prototypeNodeUUID'] as String + ..CLASS_NAME = json['CLASS_NAME'] as String + ..type = json['_class'] as String; +} + +Map _$StarToJson(Star instance) => { + 'booleanOperation': instance.booleanOperation, + 'exportOptions': instance.exportOptions, + 'flow': instance.flow, + 'isFixedToViewport': instance.isFixedToViewport, + 'isFlippedHorizontal': instance.isFlippedHorizontal, + 'isFlippedVertical': instance.isFlippedVertical, + 'isLocked': instance.isLocked, + 'layerListExpandedType': instance.layerListExpandedType, + 'name': instance.name, + 'nameIsFixed': instance.nameIsFixed, + 'resizingConstraint': instance.resizingConstraint, + 'resizingType': instance.resizingType, + 'rotation': instance.rotation, + 'sharedStyleID': instance.sharedStyleID, + 'shouldBreakMaskChain': instance.shouldBreakMaskChain, + 'hasClippingMask': instance.hasClippingMask, + 'clippingMaskMode': instance.clippingMaskMode, + 'userInfo': instance.userInfo, + 'maintainScrollPosition': instance.maintainScrollPosition, + 'prototypeNodeUUID': instance.prototypeNodeUUID, + 'edited': instance.edited, + 'isClosed': instance.isClosed, + 'pointRadiusBehaviour': instance.pointRadiusBehaviour, + 'points': instance.points, + 'CLASS_NAME': instance.CLASS_NAME, + 'frame': instance.boundaryRectangle, + 'do_objectID': instance.UUID, + '_class': instance.type, + 'isVisible': instance.isVisible, + 'style': instance.style, + }; diff --git a/lib/input/sketch/entities/layers/triangle.dart b/lib/input/sketch/entities/layers/triangle.dart new file mode 100644 index 00000000..e8231f4e --- /dev/null +++ b/lib/input/sketch/entities/layers/triangle.dart @@ -0,0 +1,127 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:parabeac_core/input/sketch/entities/abstract_sketch_node_factory.dart'; +import 'package:parabeac_core/input/sketch/entities/layers/abstract_layer.dart'; +import 'package:parabeac_core/input/sketch/entities/layers/abstract_shape_layer.dart'; +import 'package:parabeac_core/input/sketch/entities/layers/flow.dart'; +import 'package:parabeac_core/input/sketch/entities/objects/frame.dart'; +import 'package:parabeac_core/input/sketch/entities/style/style.dart'; +import 'package:parabeac_core/input/sketch/helper/svg_png_convertion.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/inherited_triangle.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; + +part 'triangle.g.dart'; + +// title: Triangle Layer +// description: Triangle layers are the result of adding an triangle shape to the canvas +@JsonSerializable(nullable: true) +class Triangle extends AbstractShapeLayer implements SketchNodeFactory { + @override + String CLASS_NAME = 'triangle'; + @override + @JsonKey(name: 'frame') + var boundaryRectangle; + + @override + @JsonKey(name: 'do_objectID') + String UUID; + + @override + @JsonKey(name: '_class') + String type; + + bool _isVisible; + + Style _style; + + @override + void set isVisible(bool _isVisible) => this._isVisible = _isVisible; + + @override + bool get isVisible => _isVisible; + + @override + void set style(_style) => this._style = _style; + + @override + Style get style => _style; + Triangle( + {bool edited, + bool isClosed, + pointRadiusBehaviour, + List points, + this.UUID, + booleanOperation, + exportOptions, + Frame this.boundaryRectangle, + Flow flow, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + isVisible, + layerListExpandedType, + name, + nameIsFixed, + resizingConstraint, + resizingType, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + Style style, + maintainScrollPosition}) + : _isVisible = isVisible, + _style = style, + super( + edited, + isClosed, + pointRadiusBehaviour, + points, + UUID, + booleanOperation, + exportOptions, + boundaryRectangle, + flow, + isFixedToViewport, + isFlippedHorizontal, + isFlippedVertical, + isLocked, + isVisible, + layerListExpandedType, + name, + nameIsFixed, + resizingConstraint, + resizingType, + rotation, + sharedStyleID, + shouldBreakMaskChain, + hasClippingMask, + clippingMaskMode, + userInfo, + style, + maintainScrollPosition); + + @override + SketchNode createSketchNode(Map json) { + var triangle = Triangle.fromJson(json); + return triangle; + } + + factory Triangle.fromJson(Map json) => _$TriangleFromJson(json); + @override + Map toJson() => _$TriangleToJson(this); + + @override + Future interpretNode(PBContext currentContext) async { + var image = await convertImageLocal( + UUID, boundaryRectangle.width, boundaryRectangle.height); + if (image == null) { + return null; + } + return Future.value( + InheritedTriangle(this, currentContext: currentContext, image: image)); + } +} diff --git a/lib/input/sketch/entities/layers/triangle.g.dart b/lib/input/sketch/entities/layers/triangle.g.dart new file mode 100644 index 00000000..4164833a --- /dev/null +++ b/lib/input/sketch/entities/layers/triangle.g.dart @@ -0,0 +1,81 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'triangle.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Triangle _$TriangleFromJson(Map json) { + return Triangle( + edited: json['edited'] as bool, + isClosed: json['isClosed'] as bool, + pointRadiusBehaviour: json['pointRadiusBehaviour'], + points: json['points'] as List, + UUID: json['do_objectID'] as String, + booleanOperation: json['booleanOperation'], + exportOptions: json['exportOptions'], + boundaryRectangle: json['frame'] == null + ? null + : Frame.fromJson(json['frame'] as Map), + flow: json['flow'] == null + ? null + : Flow.fromJson(json['flow'] as Map), + isFixedToViewport: json['isFixedToViewport'], + isFlippedHorizontal: json['isFlippedHorizontal'], + isFlippedVertical: json['isFlippedVertical'], + isLocked: json['isLocked'], + isVisible: json['isVisible'], + layerListExpandedType: json['layerListExpandedType'], + name: json['name'], + nameIsFixed: json['nameIsFixed'], + resizingConstraint: json['resizingConstraint'], + resizingType: json['resizingType'], + rotation: json['rotation'], + sharedStyleID: json['sharedStyleID'], + shouldBreakMaskChain: json['shouldBreakMaskChain'], + hasClippingMask: json['hasClippingMask'], + clippingMaskMode: json['clippingMaskMode'], + userInfo: json['userInfo'], + style: json['style'] == null + ? null + : Style.fromJson(json['style'] as Map), + maintainScrollPosition: json['maintainScrollPosition'], + ) + ..prototypeNodeUUID = json['prototypeNodeUUID'] as String + ..CLASS_NAME = json['CLASS_NAME'] as String + ..type = json['_class'] as String; +} + +Map _$TriangleToJson(Triangle instance) => { + 'booleanOperation': instance.booleanOperation, + 'exportOptions': instance.exportOptions, + 'flow': instance.flow, + 'isFixedToViewport': instance.isFixedToViewport, + 'isFlippedHorizontal': instance.isFlippedHorizontal, + 'isFlippedVertical': instance.isFlippedVertical, + 'isLocked': instance.isLocked, + 'layerListExpandedType': instance.layerListExpandedType, + 'name': instance.name, + 'nameIsFixed': instance.nameIsFixed, + 'resizingConstraint': instance.resizingConstraint, + 'resizingType': instance.resizingType, + 'rotation': instance.rotation, + 'sharedStyleID': instance.sharedStyleID, + 'shouldBreakMaskChain': instance.shouldBreakMaskChain, + 'hasClippingMask': instance.hasClippingMask, + 'clippingMaskMode': instance.clippingMaskMode, + 'userInfo': instance.userInfo, + 'maintainScrollPosition': instance.maintainScrollPosition, + 'prototypeNodeUUID': instance.prototypeNodeUUID, + 'edited': instance.edited, + 'isClosed': instance.isClosed, + 'pointRadiusBehaviour': instance.pointRadiusBehaviour, + 'points': instance.points, + 'CLASS_NAME': instance.CLASS_NAME, + 'frame': instance.boundaryRectangle, + 'do_objectID': instance.UUID, + '_class': instance.type, + 'isVisible': instance.isVisible, + 'style': instance.style, + }; diff --git a/lib/interpret_and_optimize/entities/inherited_polygon.dart b/lib/interpret_and_optimize/entities/inherited_polygon.dart new file mode 100644 index 00000000..6a739792 --- /dev/null +++ b/lib/interpret_and_optimize/entities/inherited_polygon.dart @@ -0,0 +1,90 @@ +import 'dart:typed_data'; +import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/generation/generators/visual-widgets/pb_bitmap_gen.dart'; +import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_path.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_visual_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_image_reference_storage.dart'; +import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'inherited_polygon.g.dart'; + +@JsonSerializable(nullable: true) +class InheritedPolygon extends PBVisualIntermediateNode + implements PBInheritedIntermediate { + @override + var originalRef; + + @override + @JsonKey(ignore: true) + PrototypeNode prototypeNode; + @JsonKey(ignore: true) + Uint8List image; + + ///Name of the png file + String name; + + @override + String UUID; + + @JsonKey(ignore: true) + PBContext currentContext; + + Map size; + + String referenceImage; + + String widgetType = 'Bitmap'; + + InheritedPolygon(this.originalRef, {this.image, this.currentContext}) + : super( + Point(originalRef.boundaryRectangle.x, + originalRef.boundaryRectangle.y), + Point( + originalRef.boundaryRectangle.x + + originalRef.boundaryRectangle.width, + originalRef.boundaryRectangle.y + + originalRef.boundaryRectangle.height), + currentContext) { + if (originalRef is DesignNode && originalRef.prototypeNodeUUID != null) { + prototypeNode = PrototypeNode(originalRef?.prototypeNodeUUID); + } + generator = PBBitmapGenerator(); + + size = { + 'width': originalRef.boundaryRectangle.width, + 'height': originalRef.boundaryRectangle.height + }; + UUID = originalRef.UUID; + + name = originalRef.name; + + ImageReferenceStorage().addReferenceAndWrite( + UUID, '${MainInfo().outputPath}assets/images', image); + } + + @override + void addChild(PBIntermediateNode node) { + // Hopefully we converted the SVG correctly. Most likely this will get called to add the shapes but this is unnecessary. + if (node is InheritedShapePath) { + return; + } + assert(false, + 'Child with type ${node.runtimeType} could not be added as a child.'); + return; + } + + @override + void alignChild() { + // TODO: implement alignChild + } + + factory InheritedPolygon.fromJson(Map json) => + _$InheritedPolygonFromJson(json); + Map toJson() => _$InheritedPolygonToJson(this); +} diff --git a/lib/interpret_and_optimize/entities/inherited_polygon.g.dart b/lib/interpret_and_optimize/entities/inherited_polygon.g.dart new file mode 100644 index 00000000..1705c202 --- /dev/null +++ b/lib/interpret_and_optimize/entities/inherited_polygon.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'inherited_polygon.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +InheritedPolygon _$InheritedPolygonFromJson(Map json) { + return InheritedPolygon( + json['originalRef'], + ) + ..subsemantic = json['subsemantic'] as String + ..child = json['child'] + ..topLeftCorner = json['topLeftCorner'] == null + ? null + : Point.fromJson(json['topLeftCorner'] as Map) + ..bottomRightCorner = json['bottomRightCorner'] == null + ? null + : Point.fromJson(json['bottomRightCorner'] as Map) + ..borderInfo = json['borderInfo'] as Map + ..alignment = json['alignment'] as Map + ..color = json['color'] as String + ..name = json['name'] as String + ..UUID = json['UUID'] as String + ..size = json['size'] as Map + ..referenceImage = json['referenceImage'] as String + ..widgetType = json['widgetType'] as String; +} + +Map _$InheritedPolygonToJson(InheritedPolygon instance) => + { + 'subsemantic': instance.subsemantic, + 'child': instance.child, + 'topLeftCorner': instance.topLeftCorner, + 'bottomRightCorner': instance.bottomRightCorner, + 'borderInfo': instance.borderInfo, + 'alignment': instance.alignment, + 'color': instance.color, + 'originalRef': instance.originalRef, + 'name': instance.name, + 'UUID': instance.UUID, + 'size': instance.size, + 'referenceImage': instance.referenceImage, + 'widgetType': instance.widgetType, + }; diff --git a/lib/interpret_and_optimize/entities/inherited_star.dart b/lib/interpret_and_optimize/entities/inherited_star.dart new file mode 100644 index 00000000..5eea404a --- /dev/null +++ b/lib/interpret_and_optimize/entities/inherited_star.dart @@ -0,0 +1,90 @@ +import 'dart:typed_data'; +import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/generation/generators/visual-widgets/pb_bitmap_gen.dart'; +import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_path.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_visual_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_image_reference_storage.dart'; +import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'inherited_star.g.dart'; + +@JsonSerializable(nullable: true) +class InheritedStar extends PBVisualIntermediateNode + implements PBInheritedIntermediate { + @override + var originalRef; + + @override + @JsonKey(ignore: true) + PrototypeNode prototypeNode; + @JsonKey(ignore: true) + Uint8List image; + + ///Name of the png file + String name; + + @override + String UUID; + + @JsonKey(ignore: true) + PBContext currentContext; + + Map size; + + String referenceImage; + + String widgetType = 'Bitmap'; + + InheritedStar(this.originalRef, {this.image, this.currentContext}) + : super( + Point(originalRef.boundaryRectangle.x, + originalRef.boundaryRectangle.y), + Point( + originalRef.boundaryRectangle.x + + originalRef.boundaryRectangle.width, + originalRef.boundaryRectangle.y + + originalRef.boundaryRectangle.height), + currentContext) { + if (originalRef is DesignNode && originalRef.prototypeNodeUUID != null) { + prototypeNode = PrototypeNode(originalRef?.prototypeNodeUUID); + } + generator = PBBitmapGenerator(); + + size = { + 'width': originalRef.boundaryRectangle.width, + 'height': originalRef.boundaryRectangle.height + }; + UUID = originalRef.UUID; + + name = originalRef.name; + + ImageReferenceStorage().addReferenceAndWrite( + UUID, '${MainInfo().outputPath}assets/images', image); + } + + @override + void addChild(PBIntermediateNode node) { + // Hopefully we converted the SVG correctly. Most likely this will get called to add the shapes but this is unnecessary. + if (node is InheritedShapePath) { + return; + } + assert(false, + 'Child with type ${node.runtimeType} could not be added as a child.'); + return; + } + + @override + void alignChild() { + // TODO: implement alignChild + } + + factory InheritedStar.fromJson(Map json) => + _$InheritedStarFromJson(json); + Map toJson() => _$InheritedStarToJson(this); +} diff --git a/lib/interpret_and_optimize/entities/inherited_star.g.dart b/lib/interpret_and_optimize/entities/inherited_star.g.dart new file mode 100644 index 00000000..f21519a5 --- /dev/null +++ b/lib/interpret_and_optimize/entities/inherited_star.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'inherited_star.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +InheritedStar _$InheritedStarFromJson(Map json) { + return InheritedStar( + json['originalRef'], + ) + ..subsemantic = json['subsemantic'] as String + ..child = json['child'] + ..topLeftCorner = json['topLeftCorner'] == null + ? null + : Point.fromJson(json['topLeftCorner'] as Map) + ..bottomRightCorner = json['bottomRightCorner'] == null + ? null + : Point.fromJson(json['bottomRightCorner'] as Map) + ..borderInfo = json['borderInfo'] as Map + ..alignment = json['alignment'] as Map + ..color = json['color'] as String + ..name = json['name'] as String + ..UUID = json['UUID'] as String + ..size = json['size'] as Map + ..referenceImage = json['referenceImage'] as String + ..widgetType = json['widgetType'] as String; +} + +Map _$InheritedStarToJson(InheritedStar instance) => + { + 'subsemantic': instance.subsemantic, + 'child': instance.child, + 'topLeftCorner': instance.topLeftCorner, + 'bottomRightCorner': instance.bottomRightCorner, + 'borderInfo': instance.borderInfo, + 'alignment': instance.alignment, + 'color': instance.color, + 'originalRef': instance.originalRef, + 'name': instance.name, + 'UUID': instance.UUID, + 'size': instance.size, + 'referenceImage': instance.referenceImage, + 'widgetType': instance.widgetType, + }; diff --git a/lib/interpret_and_optimize/entities/inherited_triangle.dart b/lib/interpret_and_optimize/entities/inherited_triangle.dart new file mode 100644 index 00000000..c7a19c04 --- /dev/null +++ b/lib/interpret_and_optimize/entities/inherited_triangle.dart @@ -0,0 +1,90 @@ +import 'dart:typed_data'; +import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/design_logic/design_node.dart'; +import 'package:parabeac_core/generation/generators/visual-widgets/pb_bitmap_gen.dart'; +import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/inherited_shape_path.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_visual_intermediate_node.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_image_reference_storage.dart'; +import 'package:parabeac_core/interpret_and_optimize/value_objects/point.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'inherited_triangle.g.dart'; + +@JsonSerializable(nullable: true) +class InheritedTriangle extends PBVisualIntermediateNode + implements PBInheritedIntermediate { + @override + var originalRef; + + @override + @JsonKey(ignore: true) + PrototypeNode prototypeNode; + @JsonKey(ignore: true) + Uint8List image; + + ///Name of the png file + String name; + + @override + String UUID; + + @JsonKey(ignore: true) + PBContext currentContext; + + Map size; + + String referenceImage; + + String widgetType = 'Bitmap'; + + InheritedTriangle(this.originalRef, {this.image, this.currentContext}) + : super( + Point(originalRef.boundaryRectangle.x, + originalRef.boundaryRectangle.y), + Point( + originalRef.boundaryRectangle.x + + originalRef.boundaryRectangle.width, + originalRef.boundaryRectangle.y + + originalRef.boundaryRectangle.height), + currentContext) { + if (originalRef is DesignNode && originalRef.prototypeNodeUUID != null) { + prototypeNode = PrototypeNode(originalRef?.prototypeNodeUUID); + } + generator = PBBitmapGenerator(); + + size = { + 'width': originalRef.boundaryRectangle.width, + 'height': originalRef.boundaryRectangle.height + }; + UUID = originalRef.UUID; + + name = originalRef.name; + + ImageReferenceStorage().addReferenceAndWrite( + UUID, '${MainInfo().outputPath}assets/images', image); + } + + @override + void addChild(PBIntermediateNode node) { + // Hopefully we converted the SVG correctly. Most likely this will get called to add the shapes but this is unnecessary. + if (node is InheritedShapePath) { + return; + } + assert(false, + 'Child with type ${node.runtimeType} could not be added as a child.'); + return; + } + + @override + void alignChild() { + // TODO: implement alignChild + } + + factory InheritedTriangle.fromJson(Map json) => + _$InheritedTriangleFromJson(json); + Map toJson() => _$InheritedTriangleToJson(this); +} diff --git a/lib/interpret_and_optimize/entities/inherited_triangle.g.dart b/lib/interpret_and_optimize/entities/inherited_triangle.g.dart new file mode 100644 index 00000000..5c62452e --- /dev/null +++ b/lib/interpret_and_optimize/entities/inherited_triangle.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'inherited_triangle.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +InheritedTriangle _$InheritedTriangleFromJson(Map json) { + return InheritedTriangle( + json['originalRef'], + ) + ..subsemantic = json['subsemantic'] as String + ..child = json['child'] + ..topLeftCorner = json['topLeftCorner'] == null + ? null + : Point.fromJson(json['topLeftCorner'] as Map) + ..bottomRightCorner = json['bottomRightCorner'] == null + ? null + : Point.fromJson(json['bottomRightCorner'] as Map) + ..borderInfo = json['borderInfo'] as Map + ..alignment = json['alignment'] as Map + ..color = json['color'] as String + ..name = json['name'] as String + ..UUID = json['UUID'] as String + ..size = json['size'] as Map + ..referenceImage = json['referenceImage'] as String + ..widgetType = json['widgetType'] as String; +} + +Map _$InheritedTriangleToJson(InheritedTriangle instance) => + { + 'subsemantic': instance.subsemantic, + 'child': instance.child, + 'topLeftCorner': instance.topLeftCorner, + 'bottomRightCorner': instance.bottomRightCorner, + 'borderInfo': instance.borderInfo, + 'alignment': instance.alignment, + 'color': instance.color, + 'originalRef': instance.originalRef, + 'name': instance.name, + 'UUID': instance.UUID, + 'size': instance.size, + 'referenceImage': instance.referenceImage, + 'widgetType': instance.widgetType, + }; diff --git a/lib/main.dart b/lib/main.dart index c03dee50..b0d57f73 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,6 +29,18 @@ void main(List args) async { var path = ''; var projectName = ''; var designType = 'sketch'; + final _helpText = "Usage Options: \n" + + "-p \t Path to the sketch File \n" + + "-o \t Output Path\n" + + "-n \t Name of the project\n" + + "-c \t Path of the configuration file\n"; + + //Check if no args passed or only -h passed + //If arguments is empty or only has -h + if (args.length == 0 || args[0] == '-h') { + print(_helpText); + return; + } var configurationPath = 'lib/configurations/configurations.json'; var configurationType = 'default'; for (var i = 0; i < args.length; i += 2) { @@ -91,8 +103,11 @@ void main(List args) async { //Retrieving the Sketch PNGs from the design file await Directory('${MainInfo().outputPath}pngs').create(recursive: true); - await SketchController().convertSketchFile(pathToSketchFile, - MainInfo().outputPath + projectName, configurationPath, configurationType); + await SketchController().convertSketchFile( + pathToSketchFile, + MainInfo().outputPath + projectName, + configurationPath, + configurationType); process.kill(); } else if (designType == 'xd') { assert(false, 'We don\'t support Adobe XD.'); diff --git a/parabeac.dart b/parabeac.dart index 64e8fdc1..9ca17cf8 100644 --- a/parabeac.dart +++ b/parabeac.dart @@ -3,23 +3,29 @@ import 'dart:io'; main(List args) async { List arguments = ['lib/main.dart']; + final helpText = "Usage Options: \n" + "-url \n" + "-key \n" + "-Skey"; var url = ''; var key = ''; var sKey = ''; - for (var i = 0; i < args.length; i += 2) { - switch (args[i]) { - case '-url': - url = args[i + 1]; - break; - case '-key': - key = args[i + 1]; - break; - case '-Skey': - sKey = args[i + 1]; - break; - default: - arguments.addAll([args[i], args[i + 1]]); - break; + //If arguments is empty or only has -h + if (args.length == 0 || args[0] == '-h') { + print(helpText); + } else { + for (var i = 0; i < args.length; i += 2) { + switch (args[i]) { + case '-url': + url = args[i + 1]; + break; + case '-key': + key = args[i + 1]; + break; + case '-Skey': + sKey = args[i + 1]; + break; + default: + arguments.addAll([args[i], args[i + 1]]); + break; + } } } From a45a043977a39c51c6c4772c41e139f94ae4dcb0 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 1 Oct 2020 22:11:07 -0600 Subject: [PATCH 19/25] Update CONTRIBUTING.md (#75) (#80) Updated the Contribution Process Portion with HacktoberFest info (cherry picked from commit b0cb1c2ca9dbd2fd75d9259d05bb88bc2787725f) Co-authored-by: Ian Hudson --- CONTRIBUTING.md | 53 +++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41160f62..94570703 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,9 @@ # Contributing to Parbeac Core First and foremost, thanks for considering contribution here at Parabeac Core! -Below you'll find a set of guidelines around how to contribute here at Parabeac. These aren't rules set in stone, feel free to use your best guidance, and if you have any ideas feel to make a Pull Request and suggest changes. +Below you'll find a set of guidelines around how to contribute here at Parabeac. These aren't rules set in stone, feel free to use your best guidance, and if you have any ideas feel to make a Pull Request and suggest changes. We've also created an updated [Getting started with Contribution Guide](https://github.com/Parabeac/Parabeac-Core/wiki/Getting-Started-Contributor-Guide) on our wiki which we recommend for a brief overview and introduction to contributing here on Parabeac-Core. + +> :partying_face: **Special Shout out if you're here for #HacktoberFest! Double your swag by contributing to Parabeac as one of our first 100 contributors!** **Table Of Contents** @@ -88,35 +90,26 @@ When filing an issue with Parabeac Core please follow these steps so we can reso While we're dedicated to our community we are always looking at ways to improve our tool and tech. Feel free to leave suggestions that you would like to see in the future, we're constantly working to improve our process and make things easier going forward. ### Contributing Overview -#### How to get started -We're very happy to have any help we can get on our tool as those with the best feedback and input are usually the people using the tool. If you're looking to contribute there are a number of ways you can help: -* Feature Development -* Triage -* Helping others - -**Feature Development** -There are a number of new features and objectives we're hoping to reach and as a contributor, your work can help take us there. Please feel free to look over the Issues section of our GitHub and find any issues with the "Feature Work" Label. These issues are things we're looking to add going forward and are depending on the community to assist with. Feel free to join our [discord](https://discord.com/invite/qUrghes) and chat with us to determine the best course of action and to help with guidance. -**Triage** -As more people use and more features get implemented on Parabeac Core more issues are created. One of the best, and most straight forward, ways to help is by helping us solve bugs. Within the Issues section of our GitHub, you'll find a number of issues that have tags denoting an issue area of relevance. It may be defined by the service or more specifically the node/widget that's being affected. By stepping in and solving these issues you'll be able to speed up our development of features going forward. -**Helping Others** -One of the best ways to help is by not only by helping out in the code but also by helping out others that are having issues. Being a resource for support and guidance to developers that are having problems is the best way to keep the platform healthy and strong moving forward. You can do this by finding issues that have the "Help Wanted" label. Parabeac Advocates keep us going and allow us to drive the best changes we can. -#### Process -**Feature Development** -The following process should be kept in mind when doing feature development for Parabeac Core: -1. Be Kind and Courteous to Others -2. When Branching and determining which feature to work on make sure to join #ParabeacHackers channel on our [discord](https://discord.com/invite/qUrghes), you'll need to request the contributor role, to ensure there isn't duplicated work. -3. Make sure your Parabeac Core Developer Environment is configured to the correct version for the feature at hand. -4. Once you've finished working on the task, make a PR and reach out to one of the Discord Members that have the "Team" Role. -5. When performing a code review make sure all edge cases and test cases have been accounted for and that a Parabeac Team member is invited. If a Parabeac Team Member is not present during the code review, the PR will be automatically declined. -6. Keep talking and keep an open mind, the more teamwork the better. - -**Triage** -1. Be Kind and Courteous to Others -2. When picking which issues to work on make sure to join the #ParabeacHackers channel and the #ParabeacTriage channel on our [discord](https://discord.com/invite/qUrghes), you'll need to request the contributor role, to stay up to date on the latest progress and to ensure no duplicated work. -3. Make sure your development environment is up to date with the correct version in the Issue and make sure to read the corresponding page associated with the task at hand. -4. Once you've finished working on the task, make a PR and reach out to one of the Discord Members that have the "Team" Role. -5. When performing a code review make sure all edge cases and test cases have been accounted for and that a Parabeac Team member is invited. If a Parabeac Team Member is not present during the code review, the PR will be automatically declined. -6. Keep talking and keep an open mind, the more teamwork the better. + +#### Working on Issues + +When looking to contribute there are a few simple steps you can follow to make sure the work you do is prioritized and beneficial to Parabeac-Core. The following Process is how we manage the contribution flow here at Parabeac: + +1. Fork the Repository on Github. +2. Check the issues section on Github to see if an issue has already been made for the work to be completed: +* If it has, reach out to whoever was assigned said issue or, if that issue is not assigned to anyone contact us in the #dev_questions or #parabeac_hackers channels on our [Discord](https://discord.com/invite/qUrghes) to discuss taking the issue. +* If it has not, verify that the work is non-trivial and then create an issue on our Github issues section, make sure to reach out to the Team on [Discord](https://discord.com/invite/qUrghes) if this issue is pressing. You can put the tag proposal on the work you’re trying to do to help us identify and help with prioritization. +3. Create a branch off of the dev branch (if the issue is non-breaking) or the stable branch (if the issue is breaking) within your fork of the repo and implement your changes. Make sure to reach out to someone with the “Team” Role on our [Discord](https://discord.com/invite/qUrghes) to discuss your changes or ideas if you have any questions. +4. Submit this branch to the repo as a Pull Request. +5. Undergo code review. These reviews usually take the form of comments either on the PR on GitHub or within the Parabeac Core [Discord](https://discord.com/invite/qUrghes). More often than not a Parabeac Team Member or Committer will respond or comment to your PR within about 48 hours. If you haven’t heard from anyone by that time feel free to poke anyone on the Parabeac Team on our [Discord](https://discord.com/invite/qUrghes) (But especially our CEO @SiliconIvan). + +Once you have the appropriate sign offs, your final reviewer should merge your code but if they haven’t feel free to merge it in. + +While following these steps should you have any issues don’t hesitate to reach out to anyone on Team Parabeac on our [Discord](https://discord.com/invite/qUrghes) + +#### Pull Requests + +Pull Requests are how you bring the work you’ve done back into the Parabeac-Core codebase. By submitting a Pull Request (or PR) you’re able to merge the changes you've made on your own branch into either dev or stable(Depending on the work done). All PR’s must be reviewed before they can be merged into the codebase in order to ensure that the work being done follows our guidelines and does what it says it will. Code review is usually done within Github itself but in special cases with complex work we do recommend talking with the team directly in our [Discord](https://discord.com/invite/qUrghes). For Additional insight, check out or [Tree Hygiene](https://github.com/Parabeac/Parabeac-Core/wiki/Tree-Hygiene) Page on our Wiki! Contribution is the best way to make sure Parabeac Core keeps driving forward to its fullest potential and your contributions are the best way to get us there. From c65e4b2b34f6831e3e017b2bd6e9672f8996f012 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sun, 4 Oct 2020 15:17:00 -0600 Subject: [PATCH 20/25] Update README.md (#76) (#78) Added HacktoberFest Banner to the Readme (cherry picked from commit 93521f1d09b6040a5fd7d7d0ed36f64a8866b82e) # Conflicts: # README.md Co-authored-by: Ian Hudson Co-authored-by: Eddie --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 363c8ee5..ce4586b9 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,14 @@ Parabeac-Core is an open-source repository that converts design files into Flutt Dev.to + +> :partying_face: **Special Shout out if you're here for #HacktoberFest! Double your swag by contributing to Parabeac as one of our first 100 contributors!** + # What is Parabeac-Core? Parabeac-Core is an open-source repository that converts design files into Flutter code. The biggest challenge in code conversion is achieving quality code, but in a tool like this, there’s so much variability in what quality code should look like. So Parabeac-Core is built in a way not to promise quality code, but to be driven by the community so that you can configure & tweak to you or your teams liking. See our [Manifesto](https://github.com/Parabeac/Parabeac-Core/blob/stable/MANIFESTO.md). We welcome contributors to improve Parabeac-Core, create [Parabeac Eggs](https://github.com/Parabeac/parabeac-egg-template), & to join our [Discord](https://discord.com/invite/qUrghes) community! + + # Get Started If you have any trouble with getting Parabeac-Core running, check out this video! [![Parabeac-Core Getting Started](https://img.youtube.com/vi/e4CJgPMNCyo/0.jpg)](https://www.youtube.com/watch?v=e4CJgPMNCyo&feature=youtu.be) From 3b6efe98957e3287147ec5d7e830d19c3197dd2d Mon Sep 17 00:00:00 2001 From: x64Eddie Date: Mon, 5 Oct 2020 00:44:24 -0600 Subject: [PATCH 21/25] Fixed conflicts --- README.md | 4 +++- parabeac.dart | 19 +++++++++--------- pb-scripts/install.sh | 46 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 14 deletions(-) mode change 100644 => 100755 pb-scripts/install.sh diff --git a/README.md b/README.md index ce4586b9..f2587f93 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,15 @@ Parabeac-Core is an open-source repository that converts design files into Flutt · Understanding the code export · - Contribute + Contribute · Community · Dev.to +# What is Parabeac-Core? +Parabeac-Core is an open-source repository that converts design files into Flutter code. The biggest challenge in code conversion is achieving quality code, but in a tool like this, there’s so much variability in what quality code should look like. So Parabeac-Core is built in a way not to promise quality code, but to be driven by the community so that you can configure & tweak to you or your teams liking. See our [Manifesto](https://github.com/Parabeac/Parabeac-Core/blob/stable/MANIFESTO.md). We welcome contributors to improve Parabeac-Core, create [Parabeac Eggs](https://github.com/Parabeac/parabeac-egg-template), & to join our [Discord](https://discord.com/invite/qUrghes) community! > :partying_face: **Special Shout out if you're here for #HacktoberFest! Double your swag by contributing to Parabeac as one of our first 100 contributors!** diff --git a/parabeac.dart b/parabeac.dart index 9ca17cf8..238dfcc1 100644 --- a/parabeac.dart +++ b/parabeac.dart @@ -30,19 +30,20 @@ main(List args) async { } /// To install parabeac core - var install = await Process.start( + var install = Process.start( 'bash', [ '${Directory.current.path}/pb-scripts/install.sh', ], - ); - - await for (var event in install.stdout.transform(utf8.decoder)) { - print(event); - } - await for (var event in install.stderr.transform(utf8.decoder)) { - print(event); - } + ).then((process){ + stdout.addStream(process.stdout); + process.exitCode.then((exitCode) { + if(exitCode!=0) { + print('exit code: $exitCode'); + } + }); + }); + await install; /// To Download and merge the plugins on the codebase var result = await Process.start( diff --git a/pb-scripts/install.sh b/pb-scripts/install.sh old mode 100644 new mode 100755 index c02c7d15..d268cd97 --- a/pb-scripts/install.sh +++ b/pb-scripts/install.sh @@ -1,4 +1,42 @@ -echo "[INFO]: Installing Parabeac core and its dependencies" -dart pub get -cd SketchAssetConverter && npm i -echo "Installed Sketch Asset Converter dependencies" \ No newline at end of file +#!/bin/bash + +spin() +{ + text=$* + spinner=("[ ]" "[= ]" "[== ]" "[=== ]" "[ ===]" "[ ==]" "[ =]" "[ ]" "[ =]" "[ ==]" "[ ===]" "[====]" "[=== ]" "[== ]" "[= ]") + backspace="" + totalSize=$(expr ${#text} + 7) + for ((i=1;i<=totalSize;i++)) + do + backspace+="\010" + done + while : + do + for i in $(seq 0 ${#spinner}) + do + echo -e -n "\033[1;34m${spinner[i]}\033[0m $text" + echo -en ${backspace} + sleep 0.3 + done + done +} + +start_spin(){ + spin $* & + SPIN_PID=$! +} + +stop_spin(){ + kill -9 $SPIN_PID +} + + +start_spin "Installing Para-beac core and its dependencies" +tput civis # stop mouse pointer from blinking +cd ../SketchAssetConverter && npm i +pub get +stop_spin +tput cnorm # return mouse pointer +echo -e "\033[1;32m[====]\033[0m Installed Sketch Asset Converter dependencies" + + From 76112eeec8e4938ed9a56146a7997e2fb90fb42f Mon Sep 17 00:00:00 2001 From: Gulianrdgd <45941668+Gulianrdgd@users.noreply.github.com> Date: Mon, 5 Oct 2020 08:45:17 +0200 Subject: [PATCH 22/25] Added Activity Signifier in terminal when installing #60 (#83) * These changes allow for the usage of Polygon, Triangle, and Star in sketch * This adds the missing border thickness for rectangles (#45) * Update README.md Added brief intro paragraph under "What is Parabeac-Core" section. * Update README.md Updated Readme with new Contribution Link * Update README.md * Added Activity Signifier in terminal when installing #60 * fixed output of spinner not showing in dart output Co-authored-by: DepressoExpressoBoi Co-authored-by: GeniusVentures <71915886+GeniusVentures@users.noreply.github.com> Co-authored-by: Ivan Huerta Co-authored-by: Ian Hudson Co-authored-by: Eddie --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f2587f93..6bdaced0 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Parabeac-Core is an open-source repository that converts design files into Flutt # What is Parabeac-Core? Parabeac-Core is an open-source repository that converts design files into Flutter code. The biggest challenge in code conversion is achieving quality code, but in a tool like this, there’s so much variability in what quality code should look like. So Parabeac-Core is built in a way not to promise quality code, but to be driven by the community so that you can configure & tweak to you or your teams liking. See our [Manifesto](https://github.com/Parabeac/Parabeac-Core/blob/stable/MANIFESTO.md). We welcome contributors to improve Parabeac-Core, create [Parabeac Eggs](https://github.com/Parabeac/parabeac-egg-template), & to join our [Discord](https://discord.com/invite/qUrghes) community! + > :partying_face: **Special Shout out if you're here for #HacktoberFest! Double your swag by contributing to Parabeac as one of our first 100 contributors!** # What is Parabeac-Core? @@ -31,6 +32,7 @@ Parabeac-Core is an open-source repository that converts design files into Flutt + # Get Started If you have any trouble with getting Parabeac-Core running, check out this video! [![Parabeac-Core Getting Started](https://img.youtube.com/vi/e4CJgPMNCyo/0.jpg)](https://www.youtube.com/watch?v=e4CJgPMNCyo&feature=youtu.be) From 9b3cd1d7b93e3bbf2b2435d49db5d2070a342e4c Mon Sep 17 00:00:00 2001 From: Haardik Dharma Date: Mon, 5 Oct 2020 12:43:37 +0530 Subject: [PATCH 23/25] (fix:#51) Refactored PBParam to PBVariable (#87) * refactor PBParam to PBVariable * Downgraded build_runner to 1.10.0 Co-authored-by: Ivan <42812006+ivan-015@users.noreply.github.com> --- lib/generation/generators/pb_flutter_generator.dart | 10 +++++----- .../generators/{pb_param.dart => pb_variable.dart} | 8 ++++---- lib/generation/generators/pb_widget_manager.dart | 12 ++++++------ .../generators/symbols/pb_sym_mas_param_gen.dart | 4 ++-- pubspec.yaml | 1 - 5 files changed, 17 insertions(+), 18 deletions(-) rename lib/generation/generators/{pb_param.dart => pb_variable.dart} (56%) diff --git a/lib/generation/generators/pb_flutter_generator.dart b/lib/generation/generators/pb_flutter_generator.dart index e53b9eac..f1baea6f 100644 --- a/lib/generation/generators/pb_flutter_generator.dart +++ b/lib/generation/generators/pb_flutter_generator.dart @@ -1,4 +1,4 @@ -import 'package:parabeac_core/generation/generators/pb_param.dart'; +import 'package:parabeac_core/generation/generators/pb_variable.dart'; import 'package:parabeac_core/generation/generators/pb_widget_manager.dart'; import 'package:parabeac_core/generation/generators/util/pb_input_formatter.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/pb_shared_instance.dart'; @@ -73,8 +73,8 @@ class ${widgetName} extends StatelessWidget{ if (constructorVariables == null || constructorVariables.isEmpty) { return ''; } - List variables = []; - List optionalVariables = []; + List variables = []; + List optionalVariables = []; constructorVariables.forEach((param) { // Only accept constructor variable if they are // part of the variable instances @@ -169,10 +169,10 @@ class ${widgetName} extends StatelessWidget{ } @override - void addInstanceVariable(PBParam param) => instanceVariables.add(param); + void addInstanceVariable(PBVariable param) => instanceVariables.add(param); @override - void addConstructorVariable(PBParam param) => constructorVariables.add(param); + void addConstructorVariable(PBVariable param) => constructorVariables.add(param); @override void addImport(String value) => imports.add(value); diff --git a/lib/generation/generators/pb_param.dart b/lib/generation/generators/pb_variable.dart similarity index 56% rename from lib/generation/generators/pb_param.dart rename to lib/generation/generators/pb_variable.dart index 827208d8..e3f0e81f 100644 --- a/lib/generation/generators/pb_param.dart +++ b/lib/generation/generators/pb_variable.dart @@ -1,9 +1,9 @@ -class PBParam { +class PBVariable { String variableName; String type; bool isRequired; - PBParam( + PBVariable( this.variableName, this.type, this.isRequired, @@ -11,6 +11,6 @@ class PBParam { @override bool operator ==(Object other) => - (other as PBParam).variableName == variableName && - (other as PBParam).type == type; + (other as PBVariable).variableName == variableName && + (other as PBVariable).type == type; } diff --git a/lib/generation/generators/pb_widget_manager.dart b/lib/generation/generators/pb_widget_manager.dart index 4d90ab4f..8e52b32f 100644 --- a/lib/generation/generators/pb_widget_manager.dart +++ b/lib/generation/generators/pb_widget_manager.dart @@ -1,6 +1,6 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; import 'package:parabeac_core/generation/generators/pb_page_writer.dart'; -import 'package:parabeac_core/generation/generators/pb_param.dart'; +import 'package:parabeac_core/generation/generators/pb_variable.dart'; import 'package:parabeac_core/generation/generators/visual-widgets/pb_bitmap_gen.dart'; import 'package:parabeac_core/generation/generators/visual-widgets/pb_shape_group_gen.dart'; import 'package:parabeac_core/generation/generators/visual-widgets/pb_spacer_gen.dart'; @@ -8,7 +8,7 @@ import 'package:parabeac_core/generation/generators/visual-widgets/pb_text_gen.d import 'package:parabeac_core/interpret_and_optimize/helpers/pb_gen_cache.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; -import 'pb_param.dart'; +import 'pb_variable.dart'; /** * The caller of the method `generate()` is going to look at the configurations and decide if the page is @@ -37,8 +37,8 @@ abstract class PBGenerationManager { ///* Keep track of the instance variable a class may have /// I think the following three may be only for Flutter (?) - List constructorVariables = []; - List instanceVariables = []; + List constructorVariables = []; + List instanceVariables = []; Map dependencies = {}; PBGenerationManager( @@ -52,7 +52,7 @@ abstract class PBGenerationManager { String getPath(String uuid) => PBGenCache().getPath(uuid); - void addConstructorVariable(PBParam param); + void addConstructorVariable(PBVariable param); - void addInstanceVariable(PBParam variable); + void addInstanceVariable(PBVariable variable); } diff --git a/lib/generation/generators/symbols/pb_sym_mas_param_gen.dart b/lib/generation/generators/symbols/pb_sym_mas_param_gen.dart index 69ea32f3..cd63ec02 100644 --- a/lib/generation/generators/symbols/pb_sym_mas_param_gen.dart +++ b/lib/generation/generators/symbols/pb_sym_mas_param_gen.dart @@ -1,5 +1,5 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/pb_param.dart'; +import 'package:parabeac_core/generation/generators/pb_variable.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; class PBSymbolMasterParamGen extends PBGenerator { @@ -8,7 +8,7 @@ class PBSymbolMasterParamGen extends PBGenerator { @override String generate(PBIntermediateNode source) { //TODO: is PBParam correct here? - var name = (source as PBParam).variableName; + var name = (source as PBVariable).variableName; if (name == null) { return ''; diff --git a/pubspec.yaml b/pubspec.yaml index 729a8638..5f0a57a3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,4 +25,3 @@ dev_dependencies: pedantic: ^1.8.0 test: ^1.6.0 build_config: ^0.4.2 - # build_runner: ^1.10.0 From 5616c022b817f639781db381ebf514b5cc0e2c69 Mon Sep 17 00:00:00 2001 From: Vishal Kichloo <31816531+kichloo@users.noreply.github.com> Date: Mon, 5 Oct 2020 12:44:17 +0530 Subject: [PATCH 24/25] Update CONTRIBUTING.md (#93) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 94570703..2a7dfb4f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ Below you'll find a set of guidelines around how to contribute here at Parabeac. [Parabeac Eggs](#parabeac-eggs) ## Code of Conduct -Everthing and everyone within this project is governed by the [Parabeac Code Of Conduct](https://github.com/Parabeac/Parabeac-Core/blob/master/CODE_OF_CONDUCT.md). By participating in this project you are expected to follow this code. If there are any questions or you see any unnacceptable behavior please contact support@parabeac.com. +Everything and everyone within this project is governed by the [Parabeac Code Of Conduct](https://github.com/Parabeac/Parabeac-Core/blob/master/CODE_OF_CONDUCT.md). By participating in this project you are expected to follow this code. If there are any questions or you see any unacceptable behavior please contact support@parabeac.com. ## Getting Started ### What is Parabeac Core From 61762366581286661e39a86ad5c9264fbb9d4d5a Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Mon, 5 Oct 2020 01:33:09 -0600 Subject: [PATCH 25/25] Changed para-beac to parabeac --- pb-scripts/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pb-scripts/install.sh b/pb-scripts/install.sh index d268cd97..b36f8e68 100755 --- a/pb-scripts/install.sh +++ b/pb-scripts/install.sh @@ -31,7 +31,7 @@ stop_spin(){ } -start_spin "Installing Para-beac core and its dependencies" +start_spin "Installing Parabeac-core and its dependencies" tput civis # stop mouse pointer from blinking cd ../SketchAssetConverter && npm i pub get