From 928ac6adadf1ffeb972618a018378da4e1503b7d Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 26 Jan 2022 14:12:16 -0700 Subject: [PATCH 01/56] Change type to pbdlType --- lib/generation/generators/pb_flutter_generator.dart | 2 +- .../helpers/abstract_intermediate_node_factory.dart | 2 +- .../lib/interpret_and_optimize/services/interpret_test.dart | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/generation/generators/pb_flutter_generator.dart b/lib/generation/generators/pb_flutter_generator.dart index a55e9e07..49fa665d 100644 --- a/lib/generation/generators/pb_flutter_generator.dart +++ b/lib/generation/generators/pb_flutter_generator.dart @@ -62,7 +62,7 @@ class PBFlutterGenerator extends PBGenerationManager { var it = data.globalVariables; while (it.moveNext()) { param = it.current; - stringBuffer.write(param.type + + stringBuffer.write(param.pbdlType + ' ' + param.variableName + (param.defaultValue == null ? '' : ' = ${param.defaultValue}') + diff --git a/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart b/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart index 0a22a4b3..0d789d6b 100644 --- a/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart +++ b/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart @@ -23,7 +23,7 @@ import 'package:parabeac_core/interpret_and_optimize/helpers/pb_plugin_list_help import 'package:parabeac_core/tags/custom_tag/custom_tag.dart'; class AbstractIntermediateNodeFactory { - static final String INTERMEDIATE_TYPE = 'type'; + static final String INTERMEDIATE_TYPE = 'pbdlType'; static final Set _intermediateNodes = { InheritedBitmap('$InheritedBitmap', null), diff --git a/test/lib/interpret_and_optimize/services/interpret_test.dart b/test/lib/interpret_and_optimize/services/interpret_test.dart index ccd26774..e64b95f9 100644 --- a/test/lib/interpret_and_optimize/services/interpret_test.dart +++ b/test/lib/interpret_and_optimize/services/interpret_test.dart @@ -98,9 +98,9 @@ void main() { when(mockGroup.name).thenReturn('testGroup'); when(container.name).thenReturn('testContainer'); - when(artboard.type).thenReturn('artboard'); - when(mockGroup.type).thenReturn('group'); - when(container.type).thenReturn('text'); + when(artboard.pbdlType).thenReturn('artboard'); + when(mockGroup.pbdlType).thenReturn('group'); + when(container.pbdlType).thenReturn('text'); when(page.name).thenReturn('testName'); when(mockGroup.children).thenReturn([container]); From a2893347fbe9e0893026eced125b5e636bd21f94 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 26 Jan 2022 19:08:19 -0700 Subject: [PATCH 02/56] WIP Style --- .../pb_box_decoration_gen_helper.dart | 20 ++-- .../entities/inherited_circle.dart | 6 +- .../entities/inherited_container.dart | 2 - .../entities/inherited_container.g.dart | 2 - .../entities/inherited_text.dart | 24 ++--- .../entities/intermediate_border_info.dart | 35 ------- .../entities/intermediate_border_info.g.dart | 30 ------ .../entities/layouts/group/base_group.g.dart | 2 - .../entities/layouts/group/frame_group.dart | 43 ++++----- .../entities/layouts/group/frame_group.g.dart | 2 - .../entities/layouts/row.g.dart | 2 - .../helpers/pb_color.dart | 10 ++ .../intermediate_border.dart | 31 +++++++ .../intermediate_border.g.dart | 25 +++++ .../intermediate_border_info.dart | 36 ++++++++ .../intermediate_border_info.g.dart | 31 +++++++ .../intermediate_effect.dart | 38 ++++++++ .../intermediate_effect.g.dart | 71 +++++++++++++++ .../intermediate_fill.dart | 58 ++++++++++++ .../intermediate_fill.g.dart | 29 ++++++ .../intermediate_text_style.dart | 91 +++++++++++++++++++ .../intermediate_text_style.g.dart | 64 +++++++++++++ .../intermediate_auxillary_data.dart | 41 ++++++--- .../intermediate_auxillary_data.g.dart | 18 +++- 24 files changed, 573 insertions(+), 138 deletions(-) delete mode 100644 lib/interpret_and_optimize/entities/intermediate_border_info.dart delete mode 100644 lib/interpret_and_optimize/entities/intermediate_border_info.g.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.g.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.dart create mode 100644 lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.g.dart 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 74a35b85..8c3309af 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 @@ -19,21 +19,23 @@ class PBBoxDecorationHelper extends PBAttributesHelper { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } if (borderInfo != null) { - if (borderInfo.shape == 'circle') { + if (borderInfo.borders[0].type == 'circle') { buffer.write('shape: BoxShape.circle,'); - } else if (borderInfo.borderRadius != null) { + } else if (borderInfo.cornerRadius != null) { // Write border radius if it exists buffer.write( - 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.borderRadius})),'); + 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.cornerRadius})),'); // Write border outline properties if applicable - if (borderInfo.isBorderOutlineVisible && - (borderInfo.color != null || borderInfo.thickness != null)) { + if (borderInfo.borders[0].visible && + (borderInfo.borders[0].color != null || + borderInfo.strokeWeight != null)) { buffer.write('border: Border.all('); - if (borderInfo.color != null) { - buffer.write('color: Color(${borderInfo.color.toString()}),'); + if (borderInfo.borders[0].color != null) { + buffer.write( + 'color: Color(${borderInfo.borders[0].color.toString()}),'); } - if (borderInfo.thickness != null) { - buffer.write('width: ${borderInfo.thickness},'); + if (borderInfo.strokeWeight != null) { + buffer.write('width: ${borderInfo.strokeWeight},'); } buffer.write('),'); // end of Border.all( } diff --git a/lib/interpret_and_optimize/entities/inherited_circle.dart b/lib/interpret_and_optimize/entities/inherited_circle.dart index c7aff734..db86c369 100644 --- a/lib/interpret_and_optimize/entities/inherited_circle.dart +++ b/lib/interpret_and_optimize/entities/inherited_circle.dart @@ -3,7 +3,7 @@ import 'dart:math'; 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/interfaces/pb_inherited_intermediate.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/intermediate_border_info.dart'; +import 'package:parabeac_core/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/group/group.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; @@ -46,8 +46,8 @@ class InheritedCircle extends PBVisualIntermediateNode generator = PBBitmapGenerator(); childrenStrategy = TempChildrenStrategy('child'); - auxiliaryData.borderInfo = IntermediateBorderInfo(); - auxiliaryData.borderInfo.shape = 'circle'; + // auxiliaryData.borderInfo = IntermediateBorderInfo(); + // auxiliaryData.borderInfo.shape = 'circle'; auxiliaryData.alignment = alignX != null && alignY != null ? {'alignX': alignX, 'alignY': alignY} : null; diff --git a/lib/interpret_and_optimize/entities/inherited_container.dart b/lib/interpret_and_optimize/entities/inherited_container.dart index d875445b..0cf1a980 100644 --- a/lib/interpret_and_optimize/entities/inherited_container.dart +++ b/lib/interpret_and_optimize/entities/inherited_container.dart @@ -70,8 +70,6 @@ class InheritedContainer extends PBVisualIntermediateNode static PBIntermediateNode fromJson(Map json) { var container = _$InheritedContainerFromJson(json)..originalRef = json; - container.auxiliaryData.borderInfo.borderRadius = json['fixedRadius']; - return container; } diff --git a/lib/interpret_and_optimize/entities/inherited_container.g.dart b/lib/interpret_and_optimize/entities/inherited_container.g.dart index aba711eb..8b56989a 100644 --- a/lib/interpret_and_optimize/entities/inherited_container.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_container.g.dart @@ -46,8 +46,6 @@ Map _$InheritedContainerToJson(InheritedContainer instance) => 'prototypeNodeUUID': instance.prototypeNode, 'isBackgroundVisible': instance.isBackgroundVisible, 'type': instance.type, - 'showWidth': instance.showWidth, - 'showHeight': instance.showHeight, }; T _$enumDecode( diff --git a/lib/interpret_and_optimize/entities/inherited_text.dart b/lib/interpret_and_optimize/entities/inherited_text.dart index 32d08106..b3d48aec 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'package:parabeac_core/generation/generators/visual-widgets/pb_text_gen.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; @@ -6,17 +5,12 @@ import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inhe import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.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/align_strategy.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/child_strategy.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_auxillary_data.dart'; -import 'package:uuid/uuid.dart'; part 'inherited_text.g.dart'; @@ -91,16 +85,14 @@ class InheritedText extends PBVisualIntermediateNode } static PBIntermediateNode fromJson(Map json) => - _$InheritedTextFromJson(json) - ..originalRef = json - ..fontSize = InheritedTextPBDLHelper.fontSizeFromJson(json) - ..fontName = InheritedTextPBDLHelper.fontNameFromJson(json) - ..fontWeight = InheritedTextPBDLHelper.fontWeightFromJson(json) - ..fontStyle = InheritedTextPBDLHelper.fontStyleFromJson(json) - ..textAlignment = InheritedTextPBDLHelper.textAlignmentFromJson(json) - ..letterSpacing = InheritedTextPBDLHelper.letterSpacingFromJson(json) - ..auxiliaryData.color = - PBColor.fromJson(json['style']['textStyle']['fontColor']); + _$InheritedTextFromJson(json)..originalRef = json + // ..fontSize = InheritedTextPBDLHelper.fontSizeFromJson(json) + // ..fontName = InheritedTextPBDLHelper.fontNameFromJson(json) + // ..fontWeight = InheritedTextPBDLHelper.fontWeightFromJson(json) + // ..fontStyle = InheritedTextPBDLHelper.fontStyleFromJson(json) + // ..textAlignment = InheritedTextPBDLHelper.textAlignmentFromJson(json) + // ..letterSpacing = InheritedTextPBDLHelper.letterSpacingFromJson(json) + ; @override PBIntermediateNode createIntermediateNode(Map json, diff --git a/lib/interpret_and_optimize/entities/intermediate_border_info.dart b/lib/interpret_and_optimize/entities/intermediate_border_info.dart deleted file mode 100644 index acce94d0..00000000 --- a/lib/interpret_and_optimize/entities/intermediate_border_info.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; -import 'package:json_annotation/json_annotation.dart'; - -part 'intermediate_border_info.g.dart'; - -@JsonSerializable() -class IntermediateBorderInfo { - num borderRadius; - - PBColor color; - - num thickness; - - String shape; - - /// Whether `color`, `thickness` and `shape` are available. - /// - /// Note that `borderRadius` should always be enabled - @JsonKey(name: 'isEnabled') - bool isBorderOutlineVisible; - - IntermediateBorderInfo({ - this.borderRadius, - this.color, - this.thickness, - this.shape, - this.isBorderOutlineVisible, - }); - - factory IntermediateBorderInfo.fromJson(Map json) => - _$IntermediateBorderInfoFromJson(json); - - Map toJson() => _$IntermediateBorderInfoToJson(this); -} diff --git a/lib/interpret_and_optimize/entities/intermediate_border_info.g.dart b/lib/interpret_and_optimize/entities/intermediate_border_info.g.dart deleted file mode 100644 index 73d8fe2f..00000000 --- a/lib/interpret_and_optimize/entities/intermediate_border_info.g.dart +++ /dev/null @@ -1,30 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'intermediate_border_info.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -IntermediateBorderInfo _$IntermediateBorderInfoFromJson( - Map json) { - return IntermediateBorderInfo( - borderRadius: json['borderRadius'] as num, - color: json['color'] == null - ? null - : PBColor.fromJson(json['color'] as Map), - thickness: json['thickness'] as num, - shape: json['shape'] as String, - isBorderOutlineVisible: json['isEnabled'] as bool, - ); -} - -Map _$IntermediateBorderInfoToJson( - IntermediateBorderInfo instance) => - { - 'borderRadius': instance.borderRadius, - 'color': instance.color, - 'thickness': instance.thickness, - 'shape': instance.shape, - 'isEnabled': instance.isBorderOutlineVisible, - }; diff --git a/lib/interpret_and_optimize/entities/layouts/group/base_group.g.dart b/lib/interpret_and_optimize/entities/layouts/group/base_group.g.dart index 23fc0dec..fcd3d25b 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/base_group.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/base_group.g.dart @@ -27,7 +27,6 @@ BaseGroup _$BaseGroupFromJson(Map json) { ? null : IntermediateAuxiliaryData.fromJson( json['style'] as Map) - ..alignment = json['alignment'] as Map ..type = json['type'] as String; } @@ -42,7 +41,6 @@ Map _$BaseGroupToJson(BaseGroup instance) => { 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData, 'name': instance.name, - 'alignment': instance.alignment, 'prototypeNodeUUID': instance.prototypeNode, 'type': instance.type, }; diff --git a/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart b/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart index 83ac0bc0..a4f09b9c 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart @@ -1,7 +1,7 @@ import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/intermediate_border_info.dart'; +import 'package:parabeac_core/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/group/group.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; @@ -59,26 +59,27 @@ class FrameGroup extends Group name: json['name'], ); var gateKeeper = false; - if (json['style']['borderOptions']['cornerRadius'] != null) { - tempChild.auxiliaryData.borderInfo = IntermediateBorderInfo( - borderRadius: json['style']['borderOptions']['cornerRadius']); - tempChild.auxiliaryData.borderInfo.isBorderOutlineVisible = true; - gateKeeper = true; - } - if (json['style']['backgroundColor'] != null) { - tempChild.auxiliaryData.color = - PBColor.fromJson(json['style']['backgroundColor']); - gateKeeper = true; - } - if (json['style']['borders'][0]['isEnabled']) { - tempChild.auxiliaryData.borderInfo ??= IntermediateBorderInfo(); - tempChild.auxiliaryData.borderInfo.isBorderOutlineVisible = true; - tempChild.auxiliaryData.borderInfo.color = - PBColor.fromJson(json['style']['borders'][0]['color']); - tempChild.auxiliaryData.borderInfo.thickness = - json['style']['borders'][0]['thickness']; - gateKeeper = true; - } + // TODO: Fix + // if (json['style']['borderOptions']['cornerRadius'] != null) { + // tempChild.auxiliaryData.borderInfo = IntermediateBorderInfo( + // borderRadius: json['style']['borderOptions']['cornerRadius']); + // tempChild.auxiliaryData.borderInfo.isBorderOutlineVisible = true; + // gateKeeper = true; + // } + // if (json['style']['backgroundColor'] != null) { + // tempChild.auxiliaryData.color = + // PBColor.fromJson(json['style']['backgroundColor']); + // gateKeeper = true; + // } + // if (json['style']['borders'][0]['isEnabled']) { + // tempChild.auxiliaryData.borderInfo ??= IntermediateBorderInfo(); + // tempChild.auxiliaryData.borderInfo.isBorderOutlineVisible = true; + // tempChild.auxiliaryData.borderInfo.color = + // PBColor.fromJson(json['style']['borders'][0]['color']); + // tempChild.auxiliaryData.borderInfo.thickness = + // json['style']['borders'][0]['thickness']; + // gateKeeper = true; + // } return gateKeeper ? tempChild : null; } diff --git a/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart b/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart index b35c73cf..12844a62 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart @@ -27,7 +27,6 @@ FrameGroup _$FrameGroupFromJson(Map json) { ? null : IntermediateAuxiliaryData.fromJson( json['style'] as Map) - ..alignment = json['alignment'] as Map ..type = json['type'] as String; } @@ -43,7 +42,6 @@ Map _$FrameGroupToJson(FrameGroup instance) => 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData, 'name': instance.name, - 'alignment': instance.alignment, 'prototypeNodeUUID': instance.prototypeNode, 'type': instance.type, }; diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index 54b904ab..2cc89cb5 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -26,7 +26,6 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( ? null : IntermediateAuxiliaryData.fromJson( json['style'] as Map) - ..alignment = json['alignment'] as Map ..prototypeNode = json['prototypeNode'] == null ? null : PrototypeNode.fromJson(json['prototypeNode'] as Map) @@ -49,7 +48,6 @@ Map _$PBIntermediateRowLayoutToJson( 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData, 'name': instance.name, - 'alignment': instance.alignment, 'prototypeNode': instance.prototypeNode, 'autoLayoutOptions': instance.layoutProperties, 'type': instance.type, diff --git a/lib/interpret_and_optimize/helpers/pb_color.dart b/lib/interpret_and_optimize/helpers/pb_color.dart index 3bd77ee8..c9edd96d 100644 --- a/lib/interpret_and_optimize/helpers/pb_color.dart +++ b/lib/interpret_and_optimize/helpers/pb_color.dart @@ -69,4 +69,14 @@ class ColorUtils { } return null; } + + // static List getColorListFromJsonFIlls(List> json){ + // var tempList = []; + + // for(var fill in json){ + // tempList + // } + + // return tempList; + // } } diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.dart new file mode 100644 index 00000000..03bfa4e5 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.dart @@ -0,0 +1,31 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; + +part 'intermediate_border.g.dart'; + +@JsonSerializable(explicitToJson: true) +class PBBorder { + String blendMode; + + String type; + + PBColor color; + + @JsonKey(defaultValue: true) + bool visible; + + final pbdlType = 'border'; + + PBBorder({ + this.blendMode, + this.type, + this.color, + this.visible, + }); + + factory PBBorder.fromJson(Map json) { + return _$PBBorderFromJson(json); + } + @override + Map toJson() => _$PBBorderToJson(this); +} diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.g.dart new file mode 100644 index 00000000..09f592d6 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border.g.dart @@ -0,0 +1,25 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'intermediate_border.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PBBorder _$PBBorderFromJson(Map json) { + return PBBorder( + blendMode: json['blendMode'] as String, + type: json['type'] as String, + color: json['color'] == null + ? null + : PBColor.fromJson(json['color'] as Map), + visible: json['visible'] as bool ?? true, + ); +} + +Map _$PBBorderToJson(PBBorder instance) => { + 'blendMode': instance.blendMode, + 'type': instance.type, + 'color': instance.color?.toJson(), + 'visible': instance.visible, + }; diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart new file mode 100644 index 00000000..11557bde --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart @@ -0,0 +1,36 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'intermediate_border.dart'; + +part 'intermediate_border_info.g.dart'; + +@JsonSerializable(explicitToJson: true) +class PBBorderInfo { + List borders; + + num strokeWeight; + + String strokeAlign; + + String strokeJoin; + + List strokeDashes; + + num cornerRadius; + + final pbdlType = 'border_options'; + + PBBorderInfo({ + this.borders, + this.strokeWeight, + this.strokeAlign, + this.strokeJoin, + this.strokeDashes, + this.cornerRadius, + }); + + @override + factory PBBorderInfo.fromJson(Map json) => + _$PBBorderInfoFromJson(json); + @override + Map toJson() => _$PBBorderInfoToJson(this); +} diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart new file mode 100644 index 00000000..146cac49 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart @@ -0,0 +1,31 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'intermediate_border_info.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PBBorderInfo _$PBBorderInfoFromJson(Map json) { + return PBBorderInfo( + borders: (json['borders'] as List) + ?.map((e) => + e == null ? null : PBBorder.fromJson(e as Map)) + ?.toList(), + strokeWeight: json['strokeWeight'] as num, + strokeAlign: json['strokeAlign'] as String, + strokeJoin: json['strokeJoin'] as String, + strokeDashes: json['strokeDashes'] as List, + cornerRadius: json['cornerRadius'] as num, + ); +} + +Map _$PBBorderInfoToJson(PBBorderInfo instance) => + { + 'borders': instance.borders?.map((e) => e?.toJson())?.toList(), + 'strokeWeight': instance.strokeWeight, + 'strokeAlign': instance.strokeAlign, + 'strokeJoin': instance.strokeJoin, + 'strokeDashes': instance.strokeDashes, + 'cornerRadius': instance.cornerRadius, + }; diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart new file mode 100644 index 00000000..090fa4b7 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart @@ -0,0 +1,38 @@ +import 'package:pbdl/pbdl.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'intermediate_effect.g.dart'; + +@JsonSerializable(explicitToJson: true) +class PBEffect { + EffectType type; + bool visible; + num radius; + PBDLColor color; + String blendMode; + Map offset; + bool showShadowBehindNode; + + var pbdlType = 'effect'; + + PBEffect({ + this.type, + this.visible, + this.radius, + this.color, + this.blendMode, + this.offset, + this.showShadowBehindNode, + }); + + Map toJson() => _$PBEffectToJson(this); + factory PBEffect.fromJson(Map json) => + _$PBEffectFromJson(json); +} + +enum EffectType { + LAYER_BLUR, + DROP_SHADOW, + INNER_SHADOW, + BACKGROUND_BLUR, +} diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart new file mode 100644 index 00000000..bb58c5e9 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart @@ -0,0 +1,71 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'intermediate_effect.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PBEffect _$PBEffectFromJson(Map json) { + return PBEffect( + type: _$enumDecodeNullable(_$EffectTypeEnumMap, json['type']), + visible: json['visible'] as bool, + radius: json['radius'] as num, + color: json['color'] == null + ? null + : PBDLColor.fromJson(json['color'] as Map), + blendMode: json['blendMode'] as String, + offset: json['offset'] as Map, + showShadowBehindNode: json['showShadowBehindNode'] as bool, + )..pbdlType = json['pbdlType'] as String; +} + +Map _$PBEffectToJson(PBEffect instance) => { + 'type': _$EffectTypeEnumMap[instance.type], + 'visible': instance.visible, + 'radius': instance.radius, + 'color': instance.color?.toJson(), + 'blendMode': instance.blendMode, + 'offset': instance.offset, + 'showShadowBehindNode': instance.showShadowBehindNode, + 'pbdlType': instance.pbdlType, + }; + +T _$enumDecode( + Map enumValues, + dynamic source, { + T unknownValue, +}) { + if (source == null) { + throw ArgumentError('A value must be provided. Supported values: ' + '${enumValues.values.join(', ')}'); + } + + final value = enumValues.entries + .singleWhere((e) => e.value == source, orElse: () => null) + ?.key; + + if (value == null && unknownValue == null) { + throw ArgumentError('`$source` is not one of the supported values: ' + '${enumValues.values.join(', ')}'); + } + return value ?? unknownValue; +} + +T _$enumDecodeNullable( + Map enumValues, + dynamic source, { + T unknownValue, +}) { + if (source == null) { + return null; + } + return _$enumDecode(enumValues, source, unknownValue: unknownValue); +} + +const _$EffectTypeEnumMap = { + EffectType.LAYER_BLUR: 'LAYER_BLUR', + EffectType.DROP_SHADOW: 'DROP_SHADOW', + EffectType.INNER_SHADOW: 'INNER_SHADOW', + EffectType.BACKGROUND_BLUR: 'BACKGROUND_BLUR', +}; diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart new file mode 100644 index 00000000..af723796 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart @@ -0,0 +1,58 @@ +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; +import 'package:pbdl/src/pbdl/pbdl_color.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'intermediate_fill.g.dart'; + +@JsonSerializable(explicitToJson: true) +class PBFill { + // String that tidentifies the ID of the image + String imageRef; + + PBColor color; + + @JsonKey(defaultValue: 100) + num opacity; + + String blendMode; + + String type; + + @JsonKey(defaultValue: true) + bool isEnabled; + + final pbdlType = 'fill'; + + PBFill({ + this.opacity, + this.blendMode, + this.type, + this.isEnabled, + this.color, + this.imageRef, + }); + + @override + factory PBFill.fromJson(Map json) => _$PBFillFromJson(json); + + Map toJson() => _$PBFillToJson(this); +} + +// enum BlendMode { +// NORMAL, +// DARKEN, +// MULTIPLY, +// COLOR_BURN, +// LIGHTEN, +// SCREEN, +// COLOR_DODGE, +// OVERLAY, +// SOFT_LIGHT, +// HARD_LIGHT, +// DIFFERENCE, +// EXCLUSION, +// HUE, +// SATURATION, +// COLOR, +// LUMINOSITY, +// } diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart new file mode 100644 index 00000000..d2ea950c --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart @@ -0,0 +1,29 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'intermediate_fill.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PBFill _$PBFillFromJson(Map json) { + return PBFill( + opacity: json['opacity'] as num ?? 100, + blendMode: json['blendMode'] as String, + type: json['type'] as String, + isEnabled: json['isEnabled'] as bool ?? true, + color: json['color'] == null + ? null + : PBColor.fromJson(json['color'] as Map), + imageRef: json['imageRef'] as String, + ); +} + +Map _$PBFillToJson(PBFill instance) => { + 'imageRef': instance.imageRef, + 'color': instance.color?.toJson(), + 'opacity': instance.opacity, + 'blendMode': instance.blendMode, + 'type': instance.type, + 'isEnabled': instance.isEnabled, + }; diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.dart new file mode 100644 index 00000000..c4065086 --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.dart @@ -0,0 +1,91 @@ +import 'package:pbdl/pbdl.dart'; + +import 'package:json_annotation/json_annotation.dart'; + +part 'intermediate_text_style.g.dart'; + +@JsonSerializable(explicitToJson: true) +class PBTextStyle { + String fontFamily; + + String fontPostScriptName; + + @JsonKey(defaultValue: 0) + num paragraphSpacing; + + @JsonKey(defaultValue: 0) + num paragraphIndent; + + @JsonKey(defaultValue: 0) + num listSpacing; + + bool italics; + + num fontWeight; + + num fontSize; + + @JsonKey(defaultValue: 'ORIGINAL') + String textCase; + + @JsonKey(defaultValue: 'NONE') + String textDecoration; + + @JsonKey(defaultValue: 'NONE') + String textAutoResize; + + String textAlignHorizontal; + + String textAlignVertical; + + num letterSpacing; + + List fills; + + String hyperLink; + + @JsonKey(defaultValue: {}) + Map opentypeFlags; + + num lineHeightPx; + + @JsonKey(defaultValue: 100) + num lineHeightPercent; + + num lineHeightPercentFontSize; + + String lineHeightUnit; + + @override + final pbdlType = 'text_style'; + + PBTextStyle({ + this.fontFamily, + this.fontPostScriptName, + this.paragraphSpacing, + this.paragraphIndent, + this.listSpacing, + this.italics, + this.fontWeight, + this.fontSize, + this.textCase, + this.textDecoration, + this.textAutoResize, + this.textAlignHorizontal, + this.textAlignVertical, + this.letterSpacing, + this.fills, + this.hyperLink, + this.opentypeFlags, + this.lineHeightPx, + this.lineHeightPercent, + this.lineHeightPercentFontSize, + this.lineHeightUnit, + }); + + @override + factory PBTextStyle.fromJson(Map json) => + _$PBTextStyleFromJson(json); + @override + Map toJson() => _$PBTextStyleToJson(this); +} diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.g.dart new file mode 100644 index 00000000..acdbdccd --- /dev/null +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_text_style.g.dart @@ -0,0 +1,64 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'intermediate_text_style.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PBTextStyle _$PBTextStyleFromJson(Map json) { + return PBTextStyle( + fontFamily: json['fontFamily'] as String, + fontPostScriptName: json['fontPostScriptName'] as String, + paragraphSpacing: json['paragraphSpacing'] as num ?? 0, + paragraphIndent: json['paragraphIndent'] as num ?? 0, + listSpacing: json['listSpacing'] as num ?? 0, + italics: json['italics'] as bool, + fontWeight: json['fontWeight'] as num, + fontSize: json['fontSize'] as num, + textCase: json['textCase'] as String ?? 'ORIGINAL', + textDecoration: json['textDecoration'] as String ?? 'NONE', + textAutoResize: json['textAutoResize'] as String ?? 'NONE', + textAlignHorizontal: json['textAlignHorizontal'] as String, + textAlignVertical: json['textAlignVertical'] as String, + letterSpacing: json['letterSpacing'] as num, + fills: (json['fills'] as List) + ?.map((e) => + e == null ? null : PBDLFill.fromJson(e as Map)) + ?.toList(), + hyperLink: json['hyperLink'] as String, + opentypeFlags: (json['opentypeFlags'] as Map)?.map( + (k, e) => MapEntry(k, e as num), + ) ?? + {}, + lineHeightPx: json['lineHeightPx'] as num, + lineHeightPercent: json['lineHeightPercent'] as num ?? 100, + lineHeightPercentFontSize: json['lineHeightPercentFontSize'] as num, + lineHeightUnit: json['lineHeightUnit'] as String, + ); +} + +Map _$PBTextStyleToJson(PBTextStyle instance) => + { + 'fontFamily': instance.fontFamily, + 'fontPostScriptName': instance.fontPostScriptName, + 'paragraphSpacing': instance.paragraphSpacing, + 'paragraphIndent': instance.paragraphIndent, + 'listSpacing': instance.listSpacing, + 'italics': instance.italics, + 'fontWeight': instance.fontWeight, + 'fontSize': instance.fontSize, + 'textCase': instance.textCase, + 'textDecoration': instance.textDecoration, + 'textAutoResize': instance.textAutoResize, + 'textAlignHorizontal': instance.textAlignHorizontal, + 'textAlignVertical': instance.textAlignVertical, + 'letterSpacing': instance.letterSpacing, + 'fills': instance.fills?.map((e) => e?.toJson())?.toList(), + 'hyperLink': instance.hyperLink, + 'opentypeFlags': instance.opentypeFlags, + 'lineHeightPx': instance.lineHeightPx, + 'lineHeightPercent': instance.lineHeightPercent, + 'lineHeightPercentFontSize': instance.lineHeightPercentFontSize, + 'lineHeightUnit': instance.lineHeightUnit, + }; diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart index aba0e99b..8b952fa2 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart @@ -1,7 +1,11 @@ -import 'package:parabeac_core/interpret_and_optimize/entities/intermediate_border_info.dart'; +import 'package:parabeac_core/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; import 'package:json_annotation/json_annotation.dart'; +import 'auxilary_data_helpers/intermediate_effect.dart'; +import 'auxilary_data_helpers/intermediate_fill.dart'; +import 'auxilary_data_helpers/intermediate_text_style.dart'; + part 'intermediate_auxillary_data.g.dart'; @JsonSerializable(explicitToJson: true) @@ -9,24 +13,39 @@ class IntermediateAuxiliaryData { /// Info relating to the alignment of an element, currently just in a map format. Map alignment; + /// All colors that may be needed + List colors; + /// Info relating to a elements borders. @JsonKey(ignore: true) - IntermediateBorderInfo borderInfo; + PBBorderInfo borderInfo; + + /// Effect for widgets + List effects; + + /// Style for text + PBTextStyle intermediateTextStyle; + + @JsonKey(ignore: true) + PBColor get color => _getColor(); - /// The background color of the element. - @JsonKey(fromJson: ColorUtils.pbColorFromJsonFills, name: 'fills') - PBColor color; + PBColor _getColor() { + if (colors != null && colors.isNotEmpty) { + return colors.first.color; + } else { + return null; + } + } IntermediateAuxiliaryData({ - this.color, + this.colors, + this.borderInfo, + this.effects, + this.intermediateTextStyle, }); factory IntermediateAuxiliaryData.fromJson(Map json) => - _$IntermediateAuxiliaryDataFromJson(json) - ..borderInfo = json['borders'].isNotEmpty - ? IntermediateBorderInfo.fromJson(json['borders'][0]) - : IntermediateBorderInfo( - isBorderOutlineVisible: false, borderRadius: 0); + _$IntermediateAuxiliaryDataFromJson(json); Map toJson() => _$IntermediateAuxiliaryDataToJson(this); } diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart index b54d94c0..d6a197d6 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart @@ -9,8 +9,18 @@ part of 'intermediate_auxillary_data.dart'; IntermediateAuxiliaryData _$IntermediateAuxiliaryDataFromJson( Map json) { return IntermediateAuxiliaryData( - color: ColorUtils.pbColorFromJsonFills( - json['fills'] as List>), + colors: (json['colors'] as List) + ?.map((e) => + e == null ? null : PBFill.fromJson(e as Map)) + ?.toList(), + effects: (json['effects'] as List) + ?.map((e) => + e == null ? null : PBEffect.fromJson(e as Map)) + ?.toList(), + intermediateTextStyle: json['intermediateTextStyle'] == null + ? null + : PBTextStyle.fromJson( + json['intermediateTextStyle'] as Map), )..alignment = json['alignment'] as Map; } @@ -18,5 +28,7 @@ Map _$IntermediateAuxiliaryDataToJson( IntermediateAuxiliaryData instance) => { 'alignment': instance.alignment, - 'fills': instance.color?.toJson(), + 'colors': instance.colors?.map((e) => e?.toJson())?.toList(), + 'effects': instance.effects?.map((e) => e?.toJson())?.toList(), + 'intermediateTextStyle': instance.intermediateTextStyle?.toJson(), }; From 0e966f85693208ac45509c1049c24ab14dad61f5 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 31 Jan 2022 15:35:42 -0700 Subject: [PATCH 03/56] Get border info --- .../state_management/intermediate_auxillary_data.dart | 3 ++- .../state_management/intermediate_auxillary_data.g.dart | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart index 8b952fa2..1eb88d96 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart @@ -14,10 +14,11 @@ class IntermediateAuxiliaryData { Map alignment; /// All colors that may be needed + @JsonKey(name: 'fills') List colors; /// Info relating to a elements borders. - @JsonKey(ignore: true) + @JsonKey(name: 'borderOptions') PBBorderInfo borderInfo; /// Effect for widgets diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart index d6a197d6..1ece6305 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart @@ -9,10 +9,13 @@ part of 'intermediate_auxillary_data.dart'; IntermediateAuxiliaryData _$IntermediateAuxiliaryDataFromJson( Map json) { return IntermediateAuxiliaryData( - colors: (json['colors'] as List) + colors: (json['fills'] as List) ?.map((e) => e == null ? null : PBFill.fromJson(e as Map)) ?.toList(), + borderInfo: json['borderOptions'] == null + ? null + : PBBorderInfo.fromJson(json['borderOptions'] as Map), effects: (json['effects'] as List) ?.map((e) => e == null ? null : PBEffect.fromJson(e as Map)) @@ -28,7 +31,8 @@ Map _$IntermediateAuxiliaryDataToJson( IntermediateAuxiliaryData instance) => { 'alignment': instance.alignment, - 'colors': instance.colors?.map((e) => e?.toJson())?.toList(), + 'fills': instance.colors?.map((e) => e?.toJson())?.toList(), + 'borderOptions': instance.borderInfo?.toJson(), 'effects': instance.effects?.map((e) => e?.toJson())?.toList(), 'intermediateTextStyle': instance.intermediateTextStyle?.toJson(), }; From 6695d1b2c2b04f1ea96f5cb0f8da28b58ca85951 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 7 Feb 2022 13:51:46 -0700 Subject: [PATCH 04/56] Added blended color --- .../intermediate_auxillary_data.dart | 69 ++++++++++++++++--- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart index 1eb88d96..38479c53 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart @@ -27,26 +27,75 @@ class IntermediateAuxiliaryData { /// Style for text PBTextStyle intermediateTextStyle; + /// Blanded color @JsonKey(ignore: true) - PBColor get color => _getColor(); - - PBColor _getColor() { - if (colors != null && colors.isNotEmpty) { - return colors.first.color; - } else { - return null; - } - } + PBColor color; IntermediateAuxiliaryData({ this.colors, this.borderInfo, this.effects, this.intermediateTextStyle, - }); + }) { + color = _calculateBlendColor(); + } factory IntermediateAuxiliaryData.fromJson(Map json) => _$IntermediateAuxiliaryDataFromJson(json); Map toJson() => _$IntermediateAuxiliaryDataToJson(this); + + // Calculate just one color from all fills + PBColor _calculateBlendColor() { + var tempColor = []; + if (colors.isNotEmpty) { + colors.forEach((fill) { + if (fill.type == 'SOLID') { + if (tempColor.isEmpty) { + tempColor = _colorToList(fill); + } else { + var temp = _colorToList(fill); + tempColor = _addColors(tempColor, temp); + } + } + }); + return PBColor(tempColor[3], tempColor[0], tempColor[1], tempColor[2]); + } else { + return null; + } + } + + // This method takes two PBDL Colors in list form and adds them + List _addColors(List base, List added) { + var tempColor = []; + + var calculatedAlpha = 1 - (1 - added[3]) * (1 - base[3]); + + tempColor.add(((added[0] / 2) + (base[0] / 2)).roundToDouble()); + tempColor.add(((added[1] / 2) + (base[1] / 2)).roundToDouble()); + tempColor.add(((added[2] / 2) + (base[2] / 2)).roundToDouble()); + tempColor.add(calculatedAlpha); + + return tempColor; + } + + // Returns a pbdl fill to a list of double + List _colorToList(PBFill fill) { + var alpha = _getAlpha(fill.opacity); + var temp = []; + temp.add(fill.color.r); + temp.add(fill.color.g); + temp.add(fill.color.b); + temp.add(alpha); + return temp; + } + + // Calculates the alpha of a fill + double _getAlpha(num opacity) { + if (opacity > 1) { + return (opacity / 100).toDouble(); + } else { + return opacity.toDouble(); + } + } } From 0480070e4c2259edfecbe22a3ca26af801c163ab Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 7 Feb 2022 13:53:07 -0700 Subject: [PATCH 05/56] Re run .g file generator --- .../entities/layouts/group/frame_group.g.dart | 2 -- lib/interpret_and_optimize/entities/layouts/row.g.dart | 2 -- lib/interpret_and_optimize/entities/pb_shared_instance.g.dart | 2 -- .../entities/pb_shared_master_node.g.dart | 2 -- .../entities/subclasses/pb_intermediate_node.g.dart | 3 --- 5 files changed, 11 deletions(-) diff --git a/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart b/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart index 12844a62..f9c363e8 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart @@ -18,7 +18,6 @@ FrameGroup _$FrameGroupFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -32,7 +31,6 @@ FrameGroup _$FrameGroupFromJson(Map json) { Map _$FrameGroupToJson(FrameGroup instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index 2cc89cb5..ec5de067 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -11,7 +11,6 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( return PBIntermediateRowLayout( name: json['name'] as String, ) - ..subsemantic = json['subsemantic'] as String ..constraints = json['constraints'] == null ? null : PBIntermediateConstraints.fromJson( @@ -39,7 +38,6 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( Map _$PBIntermediateRowLayoutToJson( PBIntermediateRowLayout instance) => { - 'subsemantic': instance.subsemantic, 'constraints': instance.constraints, 'layoutMainAxisSizing': _$ParentLayoutSizingEnumMap[instance.layoutMainAxisSizing], diff --git a/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart b/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart index c712029a..063737c0 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart @@ -22,7 +22,6 @@ PBSharedInstanceIntermediateNode _$PBSharedInstanceIntermediateNodeFromJson( name: json['name'] as String, sharedNodeSetID: json['sharedNodeSetID'] as String, ) - ..subsemantic = json['subsemantic'] as String ..constraints = json['constraints'] == null ? null : PBIntermediateConstraints.fromJson( @@ -41,7 +40,6 @@ PBSharedInstanceIntermediateNode _$PBSharedInstanceIntermediateNodeFromJson( Map _$PBSharedInstanceIntermediateNodeToJson( PBSharedInstanceIntermediateNode instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart b/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart index 41d48be8..8789fff4 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart @@ -21,7 +21,6 @@ PBSharedMasterNode _$PBSharedMasterNodeFromJson(Map json) { componentSetName: json['componentSetName'] as String, sharedNodeSetID: json['sharedNodeSetID'] as String, ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -35,7 +34,6 @@ PBSharedMasterNode _$PBSharedMasterNodeFromJson(Map json) { Map _$PBSharedMasterNodeToJson(PBSharedMasterNode instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart index 2d452eca..671d8efd 100644 --- a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart +++ b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart @@ -8,7 +8,6 @@ part of 'pb_intermediate_node.dart'; Map _$PBIntermediateNodeToJson(PBIntermediateNode instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': @@ -18,8 +17,6 @@ Map _$PBIntermediateNodeToJson(PBIntermediateNode instance) => 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData?.toJson(), 'name': instance.name, - 'hashCode': instance.hashCode, - 'id': instance.id, }; const _$ParentLayoutSizingEnumMap = { From 5c5dbb51a1410744e20141df0eb3d028838ab3d1 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 7 Feb 2022 18:00:15 -0700 Subject: [PATCH 06/56] Made more robust color blend formula --- .../intermediate_auxillary_data.dart | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart index 38479c53..675b56d2 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart @@ -27,7 +27,7 @@ class IntermediateAuxiliaryData { /// Style for text PBTextStyle intermediateTextStyle; - /// Blanded color + /// Blended color @JsonKey(ignore: true) PBColor color; @@ -37,7 +37,9 @@ class IntermediateAuxiliaryData { this.effects, this.intermediateTextStyle, }) { - color = _calculateBlendColor(); + if (colors != null) { + color = _calculateBlendColor(); + } } factory IntermediateAuxiliaryData.fromJson(Map json) => @@ -50,7 +52,7 @@ class IntermediateAuxiliaryData { var tempColor = []; if (colors.isNotEmpty) { colors.forEach((fill) { - if (fill.type == 'SOLID') { + if (fill.type == 'SOLID' && fill.isEnabled) { if (tempColor.isEmpty) { tempColor = _colorToList(fill); } else { @@ -59,6 +61,9 @@ class IntermediateAuxiliaryData { } } }); + if (tempColor.isEmpty) { + return null; + } return PBColor(tempColor[3], tempColor[0], tempColor[1], tempColor[2]); } else { return null; @@ -69,11 +74,17 @@ class IntermediateAuxiliaryData { List _addColors(List base, List added) { var tempColor = []; + var calculatedPercentage = (added[3] + base[3]) / 100; + + var addedPercentage = (added[3] / calculatedPercentage) / 100; + + var basePercentage = (base[3] / calculatedPercentage) / 100; + var calculatedAlpha = 1 - (1 - added[3]) * (1 - base[3]); - tempColor.add(((added[0] / 2) + (base[0] / 2)).roundToDouble()); - tempColor.add(((added[1] / 2) + (base[1] / 2)).roundToDouble()); - tempColor.add(((added[2] / 2) + (base[2] / 2)).roundToDouble()); + tempColor.add((added[0] * addedPercentage) + (base[0] * basePercentage)); + tempColor.add((added[1] * addedPercentage) + (base[1] * basePercentage)); + tempColor.add((added[2] * addedPercentage) + (base[2] * basePercentage)); tempColor.add(calculatedAlpha); return tempColor; From 1f559733a0a2d2e93b4a35b2788ce0708c4fe7ae Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 10 Feb 2022 17:06:47 -0700 Subject: [PATCH 07/56] Updated box decoration --- .../pb_box_decoration_gen_helper.dart | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 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 8c3309af..f7a78145 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 @@ -1,9 +1,7 @@ import 'package:parabeac_core/generation/generators/attribute-helper/pb_attribute_gen_helper.dart'; import 'package:parabeac_core/generation/generators/attribute-helper/pb_color_gen_helper.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/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'; -import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; class PBBoxDecorationHelper extends PBAttributesHelper { @@ -19,25 +17,33 @@ class PBBoxDecorationHelper extends PBAttributesHelper { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } if (borderInfo != null) { - if (borderInfo.borders[0].type == 'circle') { - buffer.write('shape: BoxShape.circle,'); - } else if (borderInfo.cornerRadius != null) { + if (borderInfo.cornerRadius != null) { // Write border radius if it exists buffer.write( 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.cornerRadius})),'); - // Write border outline properties if applicable - if (borderInfo.borders[0].visible && - (borderInfo.borders[0].color != null || - borderInfo.strokeWeight != null)) { - buffer.write('border: Border.all('); - if (borderInfo.borders[0].color != null) { - buffer.write( - 'color: Color(${borderInfo.borders[0].color.toString()}),'); - } - if (borderInfo.strokeWeight != null) { + } else if (borderInfo.borders.isNotEmpty && + borderInfo.borders[0].type == 'circle') { + buffer.write('shape: BoxShape.circle,'); + } + + // Write border outline properties if applicable + if (borderInfo.borders.isNotEmpty && + borderInfo.strokeWeight != null && + borderInfo.strokeWeight > 0) { + for (var i = 0; i < borderInfo.borders.length; i++) { + // + if (!borderInfo.borders[i].visible) { + continue; + } else { + buffer.write('border: Border.all('); + if (borderInfo.borders[i].color != null) { + buffer.write( + 'color: Color(${borderInfo.borders[i].color.toString()}),'); + } buffer.write('width: ${borderInfo.strokeWeight},'); + buffer.write('),'); // end of Border.all( + break; } - buffer.write('),'); // end of Border.all( } } } From 8a6563399b06674bc929de8ef3d1bb098fe51bab Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 10 Feb 2022 17:06:56 -0700 Subject: [PATCH 08/56] Updated text style --- .../attribute-helper/pb_color_gen_helper.dart | 9 +++ .../visual-widgets/pb_text_gen.dart | 56 ++++++++++++++----- 2 files changed, 52 insertions(+), 13 deletions(-) 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 8bd98603..f12ce596 100644 --- a/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart @@ -2,6 +2,7 @@ import 'package:parabeac_core/generation/generators/attribute-helper/pb_attribut import 'package:parabeac_core/interpret_and_optimize/entities/inherited_container.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'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; class PBColorGenHelper extends PBAttributesHelper { @@ -41,6 +42,14 @@ class PBColorGenHelper extends PBAttributesHelper { } } + /// Get String from Color + String getHexColor(PBColor color) { + if (color == null) { + return ''; + } + return 'color : Color(${color.toString()}),'; + } + /// Finds default color based on common hex patterns. /// /// Returns `null` if no pattern was found diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index c97a657e..a98986cb 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -5,6 +5,7 @@ import 'package:parabeac_core/interpret_and_optimize/entities/inherited_text.dar import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/override_helper.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; +import 'package:parabeac_core/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart'; class PBTextGen extends PBGenerator { PBTextGen() : super(); @@ -14,6 +15,7 @@ class PBTextGen extends PBGenerator { @override String generate(PBIntermediateNode source, PBContext context) { if (source is InheritedText) { + var textStyle = source.auxiliaryData.intermediateTextStyle; var cleanText = cleanString(source.text); context.project.genProjectData.addDependencies('auto_size_text', '3.0.0'); @@ -40,29 +42,34 @@ class PBTextGen extends PBGenerator { } buffer.write('TextStyle(\n'); - if (source.fontName != null) { - buffer.write('fontFamily: \'${source.fontName}\',\n'); + if (textStyle.fontFamily != null) { + buffer.write('fontFamily: \'${textStyle.fontFamily}\',\n'); } - if (source.fontSize != null) { - buffer.write('fontSize: ${source.fontSize.toString()},\n'); + if (textStyle.fontSize != null) { + buffer.write('fontSize: ${textStyle.fontSize.toString()},\n'); } - if (source.fontWeight != null) { - buffer - .write('fontWeight: FontWeight.${source.fontWeight.toString()},\n'); + if (textStyle.fontWeight != null) { + buffer.write( + 'fontWeight: FontWeight.w${textStyle.fontWeight.toString()},\n'); } - if (source.fontStyle != null) { - buffer.write('fontStyle: FontStyle.${source.fontStyle},\n'); + if (textStyle.italics != null) { + buffer.write('fontStyle: FontStyle.${textStyle.italics},\n'); } - if (source.letterSpacing != null) { - buffer.write('letterSpacing: ${source.letterSpacing},\n'); + if (textStyle.letterSpacing != null) { + buffer.write('letterSpacing: ${textStyle.letterSpacing},\n'); } if (source.auxiliaryData.color != null) { buffer.write(PBColorGenHelper().generate(source, context)); } + if (source.auxiliaryData.effects != null) { + buffer.write(_getEffects(source.auxiliaryData.effects)); + } + buffer.write('),'); - if (source.textAlignment != null) { - buffer.write('textAlign: TextAlign.${source.textAlignment},\n'); + if (textStyle.textAlignHorizontal != null) { + buffer.write( + 'textAlign: TextAlign.${textStyle.textAlignHorizontal.toLowerCase()},\n'); } buffer.write('\n)'); @@ -70,4 +77,27 @@ class PBTextGen extends PBGenerator { } return ''; } + + String _getEffects(List effects) { + var shadows = ''; + effects.forEach((effect) { + if (effect.visible && effect.type.toLowerCase().contains('shadow')) { + shadows += ''' + Shadow( + ${PBColorGenHelper().getHexColor(effect.color)} + offset: Offset(${effect.offset['x']}, ${effect.offset['y']}), + blurRadius: ${effect.radius}, + ), + '''; + } + }); + if (shadows.isNotEmpty) { + return ''' + shadows: [ + $shadows + ], + '''; + } + return ''; + } } From 0180a657f168e2a7b7e5dc370f22b21e361d11ea Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 10 Feb 2022 17:07:45 -0700 Subject: [PATCH 09/56] Ran dart .g file generator --- .../entities/inherited_polygon.g.dart | 2 -- .../entities/inherited_scaffold.g.dart | 2 -- .../entities/injected_container.g.dart | 2 -- lib/interpret_and_optimize/entities/layouts/row.g.dart | 2 ++ .../entities/pb_shared_instance.g.dart | 2 ++ .../entities/pb_shared_master_node.dart | 1 + .../entities/pb_shared_master_node.g.dart | 6 ++++-- .../entities/subclasses/pb_intermediate_node.g.dart | 3 +++ 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/interpret_and_optimize/entities/inherited_polygon.g.dart b/lib/interpret_and_optimize/entities/inherited_polygon.g.dart index 798efeb3..59f2140d 100644 --- a/lib/interpret_and_optimize/entities/inherited_polygon.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_polygon.g.dart @@ -18,7 +18,6 @@ InheritedPolygon _$InheritedPolygonFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -32,7 +31,6 @@ InheritedPolygon _$InheritedPolygonFromJson(Map json) { Map _$InheritedPolygonToJson(InheritedPolygon instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart b/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart index c558535e..7ea77c08 100644 --- a/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart @@ -20,7 +20,6 @@ InheritedScaffold _$InheritedScaffoldFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -34,7 +33,6 @@ InheritedScaffold _$InheritedScaffoldFromJson(Map json) { Map _$InheritedScaffoldToJson(InheritedScaffold instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/injected_container.g.dart b/lib/interpret_and_optimize/entities/injected_container.g.dart index 35e8ad6b..18137ab3 100644 --- a/lib/interpret_and_optimize/entities/injected_container.g.dart +++ b/lib/interpret_and_optimize/entities/injected_container.g.dart @@ -23,7 +23,6 @@ InjectedContainer _$InjectedContainerFromJson(Map json) { showWidth: json['showWidth'] as bool, showHeight: json['showHeight'] as bool, ) - ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -36,7 +35,6 @@ InjectedContainer _$InjectedContainerFromJson(Map json) { Map _$InjectedContainerToJson(InjectedContainer instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index ec5de067..2cc89cb5 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -11,6 +11,7 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( return PBIntermediateRowLayout( name: json['name'] as String, ) + ..subsemantic = json['subsemantic'] as String ..constraints = json['constraints'] == null ? null : PBIntermediateConstraints.fromJson( @@ -38,6 +39,7 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( Map _$PBIntermediateRowLayoutToJson( PBIntermediateRowLayout instance) => { + 'subsemantic': instance.subsemantic, 'constraints': instance.constraints, 'layoutMainAxisSizing': _$ParentLayoutSizingEnumMap[instance.layoutMainAxisSizing], diff --git a/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart b/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart index 063737c0..c712029a 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_instance.g.dart @@ -22,6 +22,7 @@ PBSharedInstanceIntermediateNode _$PBSharedInstanceIntermediateNodeFromJson( name: json['name'] as String, sharedNodeSetID: json['sharedNodeSetID'] as String, ) + ..subsemantic = json['subsemantic'] as String ..constraints = json['constraints'] == null ? null : PBIntermediateConstraints.fromJson( @@ -40,6 +41,7 @@ PBSharedInstanceIntermediateNode _$PBSharedInstanceIntermediateNodeFromJson( Map _$PBSharedInstanceIntermediateNodeToJson( PBSharedInstanceIntermediateNode instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/pb_shared_master_node.dart b/lib/interpret_and_optimize/entities/pb_shared_master_node.dart index 52dc82b0..e0c053c5 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_master_node.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_master_node.dart @@ -110,6 +110,7 @@ class PBSharedMasterNode extends PBVisualIntermediateNode @JsonSerializable() class PBMasterOverride { + @JsonKey(name: 'pbdlType') final String type; @JsonKey(ignore: true) diff --git a/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart b/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart index 8789fff4..a39ac5e3 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_master_node.g.dart @@ -21,6 +21,7 @@ PBSharedMasterNode _$PBSharedMasterNodeFromJson(Map json) { componentSetName: json['componentSetName'] as String, sharedNodeSetID: json['sharedNodeSetID'] as String, ) + ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -34,6 +35,7 @@ PBSharedMasterNode _$PBSharedMasterNodeFromJson(Map json) { Map _$PBSharedMasterNodeToJson(PBSharedMasterNode instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': @@ -89,7 +91,7 @@ const _$ParentLayoutSizingEnumMap = { PBMasterOverride _$PBMasterOverrideFromJson(Map json) { return PBMasterOverride( - json['type'] as String, + json['pbdlType'] as String, PBMasterOverride._propertyNameFromJson(json['name'] as String), json['UUID'] as String, ); @@ -97,7 +99,7 @@ PBMasterOverride _$PBMasterOverrideFromJson(Map json) { Map _$PBMasterOverrideToJson(PBMasterOverride instance) => { - 'type': instance.type, + 'pbdlType': instance.type, 'name': instance.propertyName, 'UUID': instance.UUID, }; diff --git a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart index 671d8efd..2d452eca 100644 --- a/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart +++ b/lib/interpret_and_optimize/entities/subclasses/pb_intermediate_node.g.dart @@ -8,6 +8,7 @@ part of 'pb_intermediate_node.dart'; Map _$PBIntermediateNodeToJson(PBIntermediateNode instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints?.toJson(), 'layoutMainAxisSizing': @@ -17,6 +18,8 @@ Map _$PBIntermediateNodeToJson(PBIntermediateNode instance) => 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData?.toJson(), 'name': instance.name, + 'hashCode': instance.hashCode, + 'id': instance.id, }; const _$ParentLayoutSizingEnumMap = { From 4627a68b0946a2c14335f24aa7505e68efb1ff08 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 10 Feb 2022 17:07:56 -0700 Subject: [PATCH 10/56] Corrected textStyle name --- .../intermediate_auxillary_data.dart | 20 ++++++++++++------- .../intermediate_auxillary_data.g.dart | 7 +++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart index 675b56d2..9c3bd092 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart @@ -25,6 +25,7 @@ class IntermediateAuxiliaryData { List effects; /// Style for text + @JsonKey(name: 'textStyle') PBTextStyle intermediateTextStyle; /// Blended color @@ -52,20 +53,25 @@ class IntermediateAuxiliaryData { var tempColor = []; if (colors.isNotEmpty) { colors.forEach((fill) { - if (fill.type == 'SOLID' && fill.isEnabled) { - if (tempColor.isEmpty) { - tempColor = _colorToList(fill); - } else { - var temp = _colorToList(fill); - tempColor = _addColors(tempColor, temp); + if (fill.isEnabled) { + if (fill.type == 'SOLID') { + if (tempColor.isEmpty) { + tempColor = _colorToList(fill); + } else { + var temp = _colorToList(fill); + tempColor = _addColors(tempColor, temp); + } } } }); + // In case tempColor never gets data if (tempColor.isEmpty) { return null; } return PBColor(tempColor[3], tempColor[0], tempColor[1], tempColor[2]); - } else { + } + // In case colors is empty + else { return null; } } diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart index 1ece6305..81444442 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart @@ -20,10 +20,9 @@ IntermediateAuxiliaryData _$IntermediateAuxiliaryDataFromJson( ?.map((e) => e == null ? null : PBEffect.fromJson(e as Map)) ?.toList(), - intermediateTextStyle: json['intermediateTextStyle'] == null + intermediateTextStyle: json['textStyle'] == null ? null - : PBTextStyle.fromJson( - json['intermediateTextStyle'] as Map), + : PBTextStyle.fromJson(json['textStyle'] as Map), )..alignment = json['alignment'] as Map; } @@ -34,5 +33,5 @@ Map _$IntermediateAuxiliaryDataToJson( 'fills': instance.colors?.map((e) => e?.toJson())?.toList(), 'borderOptions': instance.borderInfo?.toJson(), 'effects': instance.effects?.map((e) => e?.toJson())?.toList(), - 'intermediateTextStyle': instance.intermediateTextStyle?.toJson(), + 'textStyle': instance.intermediateTextStyle?.toJson(), }; From 5f4cae3a34791103dcee17d95b91d14c01d73f1d Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 10 Feb 2022 17:08:19 -0700 Subject: [PATCH 11/56] Change effect enum to string --- .../intermediate_effect.dart | 13 ++---- .../intermediate_effect.g.dart | 45 ++----------------- 2 files changed, 6 insertions(+), 52 deletions(-) diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart index 090fa4b7..c22583bd 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.dart @@ -1,14 +1,14 @@ -import 'package:pbdl/pbdl.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; import 'package:json_annotation/json_annotation.dart'; part 'intermediate_effect.g.dart'; @JsonSerializable(explicitToJson: true) class PBEffect { - EffectType type; + String type; bool visible; num radius; - PBDLColor color; + PBColor color; String blendMode; Map offset; bool showShadowBehindNode; @@ -29,10 +29,3 @@ class PBEffect { factory PBEffect.fromJson(Map json) => _$PBEffectFromJson(json); } - -enum EffectType { - LAYER_BLUR, - DROP_SHADOW, - INNER_SHADOW, - BACKGROUND_BLUR, -} diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart index bb58c5e9..95c50ed4 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_effect.g.dart @@ -8,12 +8,12 @@ part of 'intermediate_effect.dart'; PBEffect _$PBEffectFromJson(Map json) { return PBEffect( - type: _$enumDecodeNullable(_$EffectTypeEnumMap, json['type']), + type: json['type'] as String, visible: json['visible'] as bool, radius: json['radius'] as num, color: json['color'] == null ? null - : PBDLColor.fromJson(json['color'] as Map), + : PBColor.fromJson(json['color'] as Map), blendMode: json['blendMode'] as String, offset: json['offset'] as Map, showShadowBehindNode: json['showShadowBehindNode'] as bool, @@ -21,7 +21,7 @@ PBEffect _$PBEffectFromJson(Map json) { } Map _$PBEffectToJson(PBEffect instance) => { - 'type': _$EffectTypeEnumMap[instance.type], + 'type': instance.type, 'visible': instance.visible, 'radius': instance.radius, 'color': instance.color?.toJson(), @@ -30,42 +30,3 @@ Map _$PBEffectToJson(PBEffect instance) => { 'showShadowBehindNode': instance.showShadowBehindNode, 'pbdlType': instance.pbdlType, }; - -T _$enumDecode( - Map enumValues, - dynamic source, { - T unknownValue, -}) { - if (source == null) { - throw ArgumentError('A value must be provided. Supported values: ' - '${enumValues.values.join(', ')}'); - } - - final value = enumValues.entries - .singleWhere((e) => e.value == source, orElse: () => null) - ?.key; - - if (value == null && unknownValue == null) { - throw ArgumentError('`$source` is not one of the supported values: ' - '${enumValues.values.join(', ')}'); - } - return value ?? unknownValue; -} - -T _$enumDecodeNullable( - Map enumValues, - dynamic source, { - T unknownValue, -}) { - if (source == null) { - return null; - } - return _$enumDecode(enumValues, source, unknownValue: unknownValue); -} - -const _$EffectTypeEnumMap = { - EffectType.LAYER_BLUR: 'LAYER_BLUR', - EffectType.DROP_SHADOW: 'DROP_SHADOW', - EffectType.INNER_SHADOW: 'INNER_SHADOW', - EffectType.BACKGROUND_BLUR: 'BACKGROUND_BLUR', -}; From dd48a58ba9629d7b7fc0ceaaaeae435a8b0fd3d5 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 10 Feb 2022 17:08:42 -0700 Subject: [PATCH 12/56] Removed unnecessary fields --- .../entities/inherited_text.dart | 27 +------------------ .../entities/inherited_text.g.dart | 2 -- 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/lib/interpret_and_optimize/entities/inherited_text.dart b/lib/interpret_and_optimize/entities/inherited_text.dart index b3d48aec..839514b1 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.dart @@ -35,18 +35,6 @@ class InheritedText extends PBVisualIntermediateNode @JsonKey(name: 'content') String text; - @JsonKey(ignore: true) - num fontSize; - @JsonKey(ignore: true) - String fontName; - @JsonKey(ignore: true) - String fontWeight; // one of the w100-w900 weights - @JsonKey(ignore: true) - String fontStyle; // normal, or italic - @JsonKey(ignore: true) - String textAlignment; - @JsonKey(ignore: true) - num letterSpacing; @override @JsonKey(ignore: true) @@ -58,15 +46,9 @@ class InheritedText extends PBVisualIntermediateNode this.originalRef, name, this.alignmenttype, - this.fontName, - this.fontSize, - this.fontStyle, - this.fontWeight, this.isTextParameter, - this.letterSpacing, this.prototypeNode, this.text, - this.textAlignment, }) : super( UUID, frame, @@ -85,14 +67,7 @@ class InheritedText extends PBVisualIntermediateNode } static PBIntermediateNode fromJson(Map json) => - _$InheritedTextFromJson(json)..originalRef = json - // ..fontSize = InheritedTextPBDLHelper.fontSizeFromJson(json) - // ..fontName = InheritedTextPBDLHelper.fontNameFromJson(json) - // ..fontWeight = InheritedTextPBDLHelper.fontWeightFromJson(json) - // ..fontStyle = InheritedTextPBDLHelper.fontStyleFromJson(json) - // ..textAlignment = InheritedTextPBDLHelper.textAlignmentFromJson(json) - // ..letterSpacing = InheritedTextPBDLHelper.letterSpacingFromJson(json) - ; + _$InheritedTextFromJson(json)..originalRef = json; @override PBIntermediateNode createIntermediateNode(Map json, diff --git a/lib/interpret_and_optimize/entities/inherited_text.g.dart b/lib/interpret_and_optimize/entities/inherited_text.g.dart index 71cea453..886e3adc 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.g.dart @@ -16,7 +16,6 @@ InheritedText _$InheritedTextFromJson(Map json) { json['prototypeNodeUUID'] as String), text: json['content'] as String, ) - ..subsemantic = json['subsemantic'] as String ..constraints = json['constraints'] == null ? null : PBIntermediateConstraints.fromJson( @@ -34,7 +33,6 @@ InheritedText _$InheritedTextFromJson(Map json) { Map _$InheritedTextToJson(InheritedText instance) => { - 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': From e1fe0f672caf86273801f5d7e10a35fa45fe88f2 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 16 Feb 2022 16:49:37 -0700 Subject: [PATCH 13/56] Corrected if statement --- .../attribute-helper/pb_box_decoration_gen_helper.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f7a78145..c31f6b4e 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 @@ -13,7 +13,8 @@ class PBBoxDecorationHelper extends PBAttributesHelper { final buffer = StringBuffer(); buffer.write('decoration: BoxDecoration('); var borderInfo = source.auxiliaryData.borderInfo; - if (source.auxiliaryData.color != null) { + if (source.auxiliaryData.colors != null && + source.auxiliaryData.colors.isNotEmpty) { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } if (borderInfo != null) { From dcf97f862225fb9b6d54f7396cb88e55387ca9a4 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 18 Feb 2022 12:32:44 -0700 Subject: [PATCH 14/56] Added gradient to box decoration --- .../pb_box_decoration_gen_helper.dart | 4 +-- .../attribute-helper/pb_color_gen_helper.dart | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 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 c31f6b4e..4c1f1206 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 @@ -13,8 +13,8 @@ class PBBoxDecorationHelper extends PBAttributesHelper { final buffer = StringBuffer(); buffer.write('decoration: BoxDecoration('); var borderInfo = source.auxiliaryData.borderInfo; - if (source.auxiliaryData.colors != null && - source.auxiliaryData.colors.isNotEmpty) { + var colors = source.auxiliaryData.colors; + if (colors != null && colors.isNotEmpty) { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } if (borderInfo != null) { 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 f12ce596..aa81e997 100644 --- a/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart @@ -4,6 +4,7 @@ import 'package:parabeac_core/interpret_and_optimize/entities/inherited_scaffold import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; +import 'package:parabeac_core/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart'; class PBColorGenHelper extends PBAttributesHelper { PBColorGenHelper() : super(); @@ -14,6 +15,13 @@ class PBColorGenHelper extends PBAttributesHelper { return ''; } + if (source.auxiliaryData.colors != null && + source.auxiliaryData.colors.first.type + .toLowerCase() + .contains('gradient')) { + return _gradientColor(source.auxiliaryData.colors.first); + } + var color = source.auxiliaryData.color?.toString(); if (color == null) { return ''; @@ -42,6 +50,34 @@ class PBColorGenHelper extends PBAttributesHelper { } } + /// Generate gradient for decoration box + String _gradientColor(PBFill gradient) { + var beginX = _roundNumber(gradient.gradientHandlePositions[0].x); + var beginY = _roundNumber(gradient.gradientHandlePositions[0].y); + var endX = _roundNumber(gradient.gradientHandlePositions[1].x); + var endY = _roundNumber(gradient.gradientHandlePositions[1].y); + + return ''' + gradient: LinearGradient( + begin: Alignment($beginX,$beginY), + end: Alignment($endX,$endY), + colors: [ + Color(${gradient.gradientStops[0].color.toString()}), + Color(${gradient.gradientStops[1].color.toString()}), + ], + stops: [ + ${gradient.gradientStops[0].position}, + ${gradient.gradientStops[1].position}, + ], + tileMode: TileMode.clamp, + ), + '''; + } + + num _roundNumber(num coordinate) { + return (2 * coordinate) - 1; + } + /// Get String from Color String getHexColor(PBColor color) { if (color == null) { From cc676658934bccdb4c99bbce628b48d0a1dd78a8 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 18 Feb 2022 12:32:57 -0700 Subject: [PATCH 15/56] Added missing gradient information --- .../intermediate_fill.dart | 57 ++++++++++++------- .../intermediate_fill.g.dart | 28 ++++++++- 2 files changed, 65 insertions(+), 20 deletions(-) diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart index af723796..687752fc 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.dart @@ -1,11 +1,15 @@ +import 'dart:math'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; -import 'package:pbdl/src/pbdl/pbdl_color.dart'; import 'package:json_annotation/json_annotation.dart'; part 'intermediate_fill.g.dart'; @JsonSerializable(explicitToJson: true) class PBFill { + List gradientStops; + @JsonKey(fromJson: _pointsFromJson, toJson: _pointsToJson) + List gradientHandlePositions; + // String that tidentifies the ID of the image String imageRef; @@ -36,23 +40,38 @@ class PBFill { factory PBFill.fromJson(Map json) => _$PBFillFromJson(json); Map toJson() => _$PBFillToJson(this); + + static List _pointsFromJson(List points) { + var objPoints = []; + for (var point in points) { + objPoints.add(Point(point['x'], point['y'])); + } + return objPoints; + } + + static List _pointsToJson(List points) { + var maps = []; + if (points != null) { + for (var p in points) { + maps.add({'x': p.x, 'y': p.y}); + } + } + return maps; + } } -// enum BlendMode { -// NORMAL, -// DARKEN, -// MULTIPLY, -// COLOR_BURN, -// LIGHTEN, -// SCREEN, -// COLOR_DODGE, -// OVERLAY, -// SOFT_LIGHT, -// HARD_LIGHT, -// DIFFERENCE, -// EXCLUSION, -// HUE, -// SATURATION, -// COLOR, -// LUMINOSITY, -// } +@JsonSerializable() +class PBGradientStop { + PBColor color; + num position; + + PBGradientStop({ + this.color, + this.position, + }); + + factory PBGradientStop.fromJson(Map json) => + _$PBGradientStopFromJson(json); + + Map toJson() => _$PBGradientStopToJson(this); +} diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart index d2ea950c..1f6052f4 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_fill.g.dart @@ -16,10 +16,21 @@ PBFill _$PBFillFromJson(Map json) { ? null : PBColor.fromJson(json['color'] as Map), imageRef: json['imageRef'] as String, - ); + ) + ..gradientStops = (json['gradientStops'] as List) + ?.map((e) => e == null + ? null + : PBGradientStop.fromJson(e as Map)) + ?.toList() + ..gradientHandlePositions = + PBFill._pointsFromJson(json['gradientHandlePositions'] as List); } Map _$PBFillToJson(PBFill instance) => { + 'gradientStops': + instance.gradientStops?.map((e) => e?.toJson())?.toList(), + 'gradientHandlePositions': + PBFill._pointsToJson(instance.gradientHandlePositions), 'imageRef': instance.imageRef, 'color': instance.color?.toJson(), 'opacity': instance.opacity, @@ -27,3 +38,18 @@ Map _$PBFillToJson(PBFill instance) => { 'type': instance.type, 'isEnabled': instance.isEnabled, }; + +PBGradientStop _$PBGradientStopFromJson(Map json) { + return PBGradientStop( + color: json['color'] == null + ? null + : PBColor.fromJson(json['color'] as Map), + position: json['position'] as num, + ); +} + +Map _$PBGradientStopToJson(PBGradientStop instance) => + { + 'color': instance.color, + 'position': instance.position, + }; From c96a7da39f99732a2692edfe604c141d80029758 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 18 Feb 2022 12:33:21 -0700 Subject: [PATCH 16/56] Re run .g generator --- lib/interpret_and_optimize/entities/inherited_polygon.g.dart | 2 ++ lib/interpret_and_optimize/entities/inherited_scaffold.g.dart | 2 ++ lib/interpret_and_optimize/entities/inherited_text.g.dart | 2 ++ lib/interpret_and_optimize/entities/injected_container.g.dart | 2 ++ .../entities/layouts/group/frame_group.g.dart | 2 ++ lib/interpret_and_optimize/entities/layouts/row.g.dart | 2 ++ 6 files changed, 12 insertions(+) diff --git a/lib/interpret_and_optimize/entities/inherited_polygon.g.dart b/lib/interpret_and_optimize/entities/inherited_polygon.g.dart index 59f2140d..798efeb3 100644 --- a/lib/interpret_and_optimize/entities/inherited_polygon.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_polygon.g.dart @@ -18,6 +18,7 @@ InheritedPolygon _$InheritedPolygonFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) + ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -31,6 +32,7 @@ InheritedPolygon _$InheritedPolygonFromJson(Map json) { Map _$InheritedPolygonToJson(InheritedPolygon instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart b/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart index 7ea77c08..c558535e 100644 --- a/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_scaffold.g.dart @@ -20,6 +20,7 @@ InheritedScaffold _$InheritedScaffoldFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) + ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -33,6 +34,7 @@ InheritedScaffold _$InheritedScaffoldFromJson(Map json) { Map _$InheritedScaffoldToJson(InheritedScaffold instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/inherited_text.g.dart b/lib/interpret_and_optimize/entities/inherited_text.g.dart index 886e3adc..71cea453 100644 --- a/lib/interpret_and_optimize/entities/inherited_text.g.dart +++ b/lib/interpret_and_optimize/entities/inherited_text.g.dart @@ -16,6 +16,7 @@ InheritedText _$InheritedTextFromJson(Map json) { json['prototypeNodeUUID'] as String), text: json['content'] as String, ) + ..subsemantic = json['subsemantic'] as String ..constraints = json['constraints'] == null ? null : PBIntermediateConstraints.fromJson( @@ -33,6 +34,7 @@ InheritedText _$InheritedTextFromJson(Map json) { Map _$InheritedTextToJson(InheritedText instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/injected_container.g.dart b/lib/interpret_and_optimize/entities/injected_container.g.dart index 18137ab3..35e8ad6b 100644 --- a/lib/interpret_and_optimize/entities/injected_container.g.dart +++ b/lib/interpret_and_optimize/entities/injected_container.g.dart @@ -23,6 +23,7 @@ InjectedContainer _$InjectedContainerFromJson(Map json) { showWidth: json['showWidth'] as bool, showHeight: json['showHeight'] as bool, ) + ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -35,6 +36,7 @@ InjectedContainer _$InjectedContainerFromJson(Map json) { Map _$InjectedContainerToJson(InjectedContainer instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart b/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart index f9c363e8..12844a62 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/frame_group.g.dart @@ -18,6 +18,7 @@ FrameGroup _$FrameGroupFromJson(Map json) { : PBIntermediateConstraints.fromJson( json['constraints'] as Map), ) + ..subsemantic = json['subsemantic'] as String ..layoutMainAxisSizing = _$enumDecodeNullable( _$ParentLayoutSizingEnumMap, json['layoutMainAxisSizing']) ..layoutCrossAxisSizing = _$enumDecodeNullable( @@ -31,6 +32,7 @@ FrameGroup _$FrameGroupFromJson(Map json) { Map _$FrameGroupToJson(FrameGroup instance) => { + 'subsemantic': instance.subsemantic, 'UUID': instance.UUID, 'constraints': instance.constraints, 'layoutMainAxisSizing': diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index 2cc89cb5..54b904ab 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -26,6 +26,7 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( ? null : IntermediateAuxiliaryData.fromJson( json['style'] as Map) + ..alignment = json['alignment'] as Map ..prototypeNode = json['prototypeNode'] == null ? null : PrototypeNode.fromJson(json['prototypeNode'] as Map) @@ -48,6 +49,7 @@ Map _$PBIntermediateRowLayoutToJson( 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData, 'name': instance.name, + 'alignment': instance.alignment, 'prototypeNode': instance.prototypeNode, 'autoLayoutOptions': instance.layoutProperties, 'type': instance.type, From b207269762c906841c1a3897c7feec7c01c696ec Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 18 Feb 2022 15:24:21 -0700 Subject: [PATCH 17/56] Injecting a container, may not be used anymore --- .../entities/layouts/group/frame_group.dart | 53 ++++++------------- 1 file changed, 16 insertions(+), 37 deletions(-) diff --git a/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart b/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart index a4f09b9c..bf975806 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart @@ -39,48 +39,27 @@ class FrameGroup extends Group PBIntermediateNode parent, PBIntermediateTree tree) { var tempFrame = _$FrameGroupFromJson(json); - var tempChild = injectAContainer(json, tempFrame.frame) - ..constraints = tempFrame.constraints.copyWith(); + // var tempChild = injectAContainer(json, tempFrame.frame); - if (tempChild != null) { - tree.addEdges(tempFrame, [tempChild]); - } + // if (tempChild != null) { + // tempChild.constraints = tempFrame.constraints.copyWith(); + // tree.addEdges(tempFrame, [tempChild]); + // } return tempFrame ..mapRawChildren(json, tree) ..originalRef = json; } - PBIntermediateNode injectAContainer( - Map json, Rectangle3D parentFrame) { - var tempChild = InjectedContainer( - null, - Rectangle3D(parentFrame.left, parentFrame.top, parentFrame.width, - parentFrame.height, 0), - name: json['name'], - ); - var gateKeeper = false; - // TODO: Fix - // if (json['style']['borderOptions']['cornerRadius'] != null) { - // tempChild.auxiliaryData.borderInfo = IntermediateBorderInfo( - // borderRadius: json['style']['borderOptions']['cornerRadius']); - // tempChild.auxiliaryData.borderInfo.isBorderOutlineVisible = true; - // gateKeeper = true; - // } - // if (json['style']['backgroundColor'] != null) { - // tempChild.auxiliaryData.color = - // PBColor.fromJson(json['style']['backgroundColor']); - // gateKeeper = true; - // } - // if (json['style']['borders'][0]['isEnabled']) { - // tempChild.auxiliaryData.borderInfo ??= IntermediateBorderInfo(); - // tempChild.auxiliaryData.borderInfo.isBorderOutlineVisible = true; - // tempChild.auxiliaryData.borderInfo.color = - // PBColor.fromJson(json['style']['borders'][0]['color']); - // tempChild.auxiliaryData.borderInfo.thickness = - // json['style']['borders'][0]['thickness']; - // gateKeeper = true; - // } + // PBIntermediateNode injectAContainer( + // Map json, Rectangle3D parentFrame) { + // var tempChild = InjectedContainer( + // null, + // Rectangle3D(parentFrame.left, parentFrame.top, parentFrame.width, + // parentFrame.height, 0), + // name: json['name'], + // ); + // var gateKeeper = false; - return gateKeeper ? tempChild : null; - } + // return gateKeeper ? tempChild : null; + // } } From b806a930f333dde361384e5e14459cc0d9bc843d Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 18 Feb 2022 15:24:39 -0700 Subject: [PATCH 18/56] Added name instead of UUID for image ref --- lib/interpret_and_optimize/entities/inherited_bitmap.dart | 3 ++- lib/interpret_and_optimize/entities/inherited_oval.dart | 3 ++- .../entities/inherited_polygon.dart | 3 ++- .../entities/inherited_shape_group.dart | 3 ++- .../entities/inherited_shape_path.dart | 8 +++++--- lib/interpret_and_optimize/entities/inherited_star.dart | 8 +++++--- .../entities/inherited_triangle.dart | 8 +++++--- 7 files changed, 23 insertions(+), 13 deletions(-) diff --git a/lib/interpret_and_optimize/entities/inherited_bitmap.dart b/lib/interpret_and_optimize/entities/inherited_bitmap.dart index 1f37eae1..787f28ee 100644 --- a/lib/interpret_and_optimize/entities/inherited_bitmap.dart +++ b/lib/interpret_and_optimize/entities/inherited_bitmap.dart @@ -1,4 +1,5 @@ import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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/interfaces/pb_inherited_intermediate.dart'; @@ -46,7 +47,7 @@ class InheritedBitmap extends PBVisualIntermediateNode childrenStrategy = NoChildStrategy(); if (name != null && name.isNotEmpty) { ImageReferenceStorage() - .addReference(UUID, '${MainInfo().outputPath}assets/images'); + .addReference(name, '${MainInfo().outputPath}assets/images'); } } diff --git a/lib/interpret_and_optimize/entities/inherited_oval.dart b/lib/interpret_and_optimize/entities/inherited_oval.dart index f513df95..3d7327c7 100644 --- a/lib/interpret_and_optimize/entities/inherited_oval.dart +++ b/lib/interpret_and_optimize/entities/inherited_oval.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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'; @@ -49,7 +50,7 @@ class InheritedOval extends PBVisualIntermediateNode generator = PBBitmapGenerator(); if (image != null) { ImageReferenceStorage().addReferenceAndWrite( - UUID, '${MainInfo().outputPath}assets/images', image); + name, '${MainInfo().outputPath}assets/images', image); } } diff --git a/lib/interpret_and_optimize/entities/inherited_polygon.dart b/lib/interpret_and_optimize/entities/inherited_polygon.dart index cdfe6c08..3d47b2f4 100644 --- a/lib/interpret_and_optimize/entities/inherited_polygon.dart +++ b/lib/interpret_and_optimize/entities/inherited_polygon.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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'; @@ -52,7 +53,7 @@ class InheritedPolygon extends PBVisualIntermediateNode if (image != null) { ImageReferenceStorage().addReferenceAndWrite( - UUID, '${MainInfo().outputPath}assets/images', image); + name, '${MainInfo().outputPath}assets/images', image); } } diff --git a/lib/interpret_and_optimize/entities/inherited_shape_group.dart b/lib/interpret_and_optimize/entities/inherited_shape_group.dart index d4f53063..f806521e 100644 --- a/lib/interpret_and_optimize/entities/inherited_shape_group.dart +++ b/lib/interpret_and_optimize/entities/inherited_shape_group.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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/interfaces/pb_inherited_intermediate.dart'; @@ -50,7 +51,7 @@ class InheritedShapeGroup extends PBVisualIntermediateNode childrenStrategy = NoChildStrategy(); if (image != null) { ImageReferenceStorage().addReferenceAndWrite( - UUID, p.join(MainInfo().outputPath, 'assets/images'), image); + name, p.join(MainInfo().outputPath, 'assets/images'), image); } } diff --git a/lib/interpret_and_optimize/entities/inherited_shape_path.dart b/lib/interpret_and_optimize/entities/inherited_shape_path.dart index 2806d38a..549e581b 100644 --- a/lib/interpret_and_optimize/entities/inherited_shape_path.dart +++ b/lib/interpret_and_optimize/entities/inherited_shape_path.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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/interfaces/pb_inherited_intermediate.dart'; @@ -49,9 +50,10 @@ class InheritedShapePath extends PBVisualIntermediateNode }) : super(UUID, frame, name, constraints: constraints) { generator = PBBitmapGenerator(); childrenStrategy = NoChildStrategy(); - - ImageReferenceStorage().addReferenceAndWrite( - UUID, '${MainInfo().outputPath}assets/images', image); + if (image != null) { + ImageReferenceStorage().addReferenceAndWrite( + name, '${MainInfo().outputPath}assets/images', image); + } // Detect shape path as container if applicable _detectLineAsContainer(); diff --git a/lib/interpret_and_optimize/entities/inherited_star.dart b/lib/interpret_and_optimize/entities/inherited_star.dart index 2aa6f7f7..3cebb00f 100644 --- a/lib/interpret_and_optimize/entities/inherited_star.dart +++ b/lib/interpret_and_optimize/entities/inherited_star.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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'; @@ -48,9 +49,10 @@ class InheritedStar extends PBVisualIntermediateNode }) : super(UUID, frame, name, constraints: constraints) { generator = PBBitmapGenerator(); childrenStrategy = NoChildStrategy(); - - ImageReferenceStorage().addReferenceAndWrite( - UUID, '${MainInfo().outputPath}assets/images', image); + if (image != null) { + ImageReferenceStorage().addReferenceAndWrite( + name, '${MainInfo().outputPath}assets/images', image); + } } static PBIntermediateNode fromJson(Map json) => diff --git a/lib/interpret_and_optimize/entities/inherited_triangle.dart b/lib/interpret_and_optimize/entities/inherited_triangle.dart index c6ee1bfd..fe5f8a99 100644 --- a/lib/interpret_and_optimize/entities/inherited_triangle.dart +++ b/lib/interpret_and_optimize/entities/inherited_triangle.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'dart:typed_data'; import 'package:parabeac_core/controllers/main_info.dart'; +import 'package:parabeac_core/generation/generators/util/pb_input_formatter.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'; @@ -49,9 +50,10 @@ class InheritedTriangle extends PBVisualIntermediateNode }) : super(UUID, frame, name, constraints: constraints) { generator = PBBitmapGenerator(); childrenStrategy = NoChildStrategy(); - - ImageReferenceStorage().addReferenceAndWrite( - UUID, '${MainInfo().outputPath}assets/images', image); + if (image != null) { + ImageReferenceStorage().addReferenceAndWrite( + name, '${MainInfo().outputPath}assets/images', image); + } } static PBIntermediateNode fromJson(Map json) => From b2c5d4960b8049e858f6a8185c6c0b39fb4a0d0f Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 18 Feb 2022 15:24:56 -0700 Subject: [PATCH 19/56] Centralized image name fomatting --- lib/generation/generators/writers/pb_flutter_writer.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generation/generators/writers/pb_flutter_writer.dart b/lib/generation/generators/writers/pb_flutter_writer.dart index 22739ef1..7b0c8fc2 100644 --- a/lib/generation/generators/writers/pb_flutter_writer.dart +++ b/lib/generation/generators/writers/pb_flutter_writer.dart @@ -127,7 +127,7 @@ class MyApp extends StatelessWidget { // Return names inside image reference storage return ImageReferenceStorage() .names - .map((imageName) => '${imageName.replaceAll(':', '_')}.png') + .map((imageName) => '${imageName}.png') .toList(); } catch (e) { return []; From 9b6a4b0a66c7b050126392be97987196f948e482 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 18 Feb 2022 17:57:36 -0700 Subject: [PATCH 20/56] Remove pbdl submodule --- .gitmodules | 3 --- pbdl | 1 - 2 files changed, 4 deletions(-) delete mode 160000 pbdl diff --git a/.gitmodules b/.gitmodules index e584bd51..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "pbdl"] - path = pbdl - url = https://github.com/Parabeac/pbdl diff --git a/pbdl b/pbdl deleted file mode 160000 index 39cb9497..00000000 --- a/pbdl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 39cb949751312d0e34a4a25c6b57949eef676ee1 From af5a89896592b2ceb7ff4e6fb427f61403ddeb9c Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 18 Feb 2022 18:13:20 -0700 Subject: [PATCH 21/56] Changed PBDL to use Git dependency --- pubspec.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index bd88919d..8e783507 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,7 +23,9 @@ dependencies: path: ^1.6.0 file: ^6.1.2 pbdl: - path: ./pbdl + git: + url: git@github.com:Parabeac/pbdl.git + ref: dev #TODO: Change this to stable once the PR on PBDL gets merged directed_graph: ^0.2.3 sentry: ^6.2.2 yaml_modify: ^1.0.1 From 19f566d71f5f5b7b3bdee4084b0df89117bcdfd2 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Sun, 20 Feb 2022 15:22:41 -0700 Subject: [PATCH 22/56] WIP: Components use StatefulTemplate generator. --- .../generators/symbols/pb_mastersym_gen.dart | 4 ++-- .../stateful_template_strategy.dart | 21 ++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/generation/generators/symbols/pb_mastersym_gen.dart b/lib/generation/generators/symbols/pb_mastersym_gen.dart index 94ed864b..15186342 100644 --- a/lib/generation/generators/symbols/pb_mastersym_gen.dart +++ b/lib/generation/generators/symbols/pb_mastersym_gen.dart @@ -1,12 +1,12 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; -import 'package:parabeac_core/generation/generators/value_objects/template_strategy/stateless_template_strategy.dart'; +import 'package:parabeac_core/generation/generators/value_objects/template_strategy/stateful_template_strategy.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 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; import 'package:quick_log/quick_log.dart'; class PBMasterSymbolGenerator extends PBGenerator { - PBMasterSymbolGenerator() : super(strategy: StatelessTemplateStrategy()); + PBMasterSymbolGenerator() : super(strategy: StatefulTemplateStrategy()); var log = Logger('Symbol Master Generator'); @override diff --git a/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart b/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart index 0ebb29bb..22110740 100644 --- a/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart +++ b/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart @@ -14,11 +14,30 @@ class StatefulTemplateStrategy extends TemplateStrategy { var constructorName = '$widgetName'; var returnStatement = node.generator.generate(node, generatorContext); + /// Represents the overrides for the constructor. + var overrides = ''; + + /// Represents the overrides for the class variables. + var overrideVars = ''; + + if (node is PBSharedMasterNode && node.overridableProperties.isNotEmpty) { + node.overridableProperties.forEach((prop) { + var overrideType = 'Widget?'; + if (prop.type == 'stringValue') { + overrideType = 'String?'; + } + overrides += 'this.${prop.propertyName}, '; + overrideVars += 'final $overrideType ${prop.propertyName};'; + }); + } + return ''' ${manager.generateImports()} class $widgetName extends StatefulWidget{ - const $widgetName({Key? key}) : super(key: key); + ${node is PBSharedMasterNode ? 'final constraints;' : ''} + $overrideVars + const $widgetName(${node is PBSharedMasterNode ? 'this.constraints,' : ''} {Key? key, $overrides}) : super(key: key); @override _$widgetName createState() => _$widgetName(); } From f8746d21443a75cfcff5b30912c3b762f17f18a3 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 21 Feb 2022 20:52:14 -0700 Subject: [PATCH 23/56] Added name to positioneds --- .../entities/alignments/injected_positioned.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/interpret_and_optimize/entities/alignments/injected_positioned.dart b/lib/interpret_and_optimize/entities/alignments/injected_positioned.dart index 735d11d0..c96507f1 100644 --- a/lib/interpret_and_optimize/entities/alignments/injected_positioned.dart +++ b/lib/interpret_and_optimize/entities/alignments/injected_positioned.dart @@ -11,7 +11,11 @@ class InjectedPositioned extends PBIntermediateNode @override ChildrenStrategy childrenStrategy = OneChildStrategy('child'); + @override + String name; + InjectedPositioned( + this.name, String UUID, Rectangle3D frame, { this.valueHolder, From 879292e8c7efc31531d1fbe267bd2170b3e5aa5a Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 21 Feb 2022 20:52:25 -0700 Subject: [PATCH 24/56] Removed imports --- lib/interpret_and_optimize/entities/layouts/stack.dart | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib/interpret_and_optimize/entities/layouts/stack.dart b/lib/interpret_and_optimize/entities/layouts/stack.dart index f6640245..7890cc30 100644 --- a/lib/interpret_and_optimize/entities/layouts/stack.dart +++ b/lib/interpret_and_optimize/entities/layouts/stack.dart @@ -1,17 +1,11 @@ -import 'dart:math'; - import 'package:parabeac_core/generation/generators/layouts/pb_stack_gen.dart'; import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/alignments/injected_positioned.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/rules/axis_comparison_rules.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/rules/layout_rule.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.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/interpret_and_optimize/helpers/align_strategy.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:path/path.dart'; -import 'package:uuid/uuid.dart'; ///Row contains nodes that are all `overlapping` to each other, without overlapping eachother From 7f27d21a8a76640bb6258e0677f93d3a3ef34b6e Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 21 Feb 2022 20:52:38 -0700 Subject: [PATCH 25/56] Added name to positioneds --- .../helpers/align_strategy.dart | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/interpret_and_optimize/helpers/align_strategy.dart b/lib/interpret_and_optimize/helpers/align_strategy.dart index bf255c61..80bcd367 100644 --- a/lib/interpret_and_optimize/helpers/align_strategy.dart +++ b/lib/interpret_and_optimize/helpers/align_strategy.dart @@ -89,15 +89,19 @@ class PositionedAlignment extends AlignStrategy { nodeChildren.forEach((child) { var centerY = false; var centerX = false; - var injectedPositioned = InjectedPositioned(null, child.frame, - constraints: child.constraints.copyWith(), - valueHolder: PositionedValueHolder( - top: child.frame.topLeft.y - node.frame.topLeft.y, - bottom: node.frame.bottomRight.y - child.frame.bottomRight.y, - left: child.frame.topLeft.x - node.frame.topLeft.x, - right: node.frame.bottomRight.x - child.frame.bottomRight.x, - width: child.frame.width, - height: child.frame.height)); + var injectedPositioned = InjectedPositioned( + child.name, + null, + child.frame, + constraints: child.constraints.copyWith(), + valueHolder: PositionedValueHolder( + top: child.frame.topLeft.y - node.frame.topLeft.y, + bottom: node.frame.bottomRight.y - child.frame.bottomRight.y, + left: child.frame.topLeft.x - node.frame.topLeft.x, + right: node.frame.bottomRight.x - child.frame.bottomRight.x, + width: child.frame.width, + height: child.frame.height), + ); if ((!child.constraints.pinLeft && !child.constraints.pinRight) && child.constraints.fixedWidth) { injectedPositioned.constraints.fixedWidth = false; From 085759ec3af80ebcfa8e8131246e815ab9882250 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 21 Feb 2022 20:52:58 -0700 Subject: [PATCH 26/56] Removed imports --- .../services/pb_alignment_generation_service.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart index 3805d13a..3b98310b 100644 --- a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart @@ -1,10 +1,7 @@ import 'package:parabeac_core/controllers/interpret.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/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_intermediate_node_tree.dart'; -import 'package:quick_log/quick_log.dart'; /// PBAlignmentGenerationService: /// Interpret the alignment relationship between a child node and a parent Visual or Layout Node. After interpretation, inject the proper alignment whether that’s Padding based or Flex-based. @@ -38,7 +35,7 @@ class PBAlignGenerationService extends AITHandler { } }); tree.rootNode.align(context); - + return Future.value(tree); } From b42b7cd2a09035a878e3db78441b42e877a34f51 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 21 Feb 2022 20:53:08 -0700 Subject: [PATCH 27/56] Added copy with --- .../pb_layout_generation_service.dart | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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 087abf77..0f96c36b 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -154,15 +154,16 @@ class PBLayoutGenerationService extends AITHandler { void _transformGroup(PBIntermediateTree tree) { tree.whereType().forEach((tempGroup) { tree.replaceNode( - tempGroup, - PBIntermediateStackLayout( - name: tempGroup.name, - constraints: tempGroup.constraints.copyWith(), - ) - ..frame = tempGroup.frame - ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing - ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing, - acceptChildren: true); + tempGroup, + PBIntermediateStackLayout( + name: tempGroup.name, + constraints: tempGroup.constraints.copyWith(), + ) + ..frame = tempGroup.frame.copyWith() + ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing + ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing, + acceptChildren: true, + ); }); } From 24fcffc546787ff1cdeaa2e7759ad503fb90845b Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Mon, 21 Feb 2022 20:53:17 -0700 Subject: [PATCH 28/56] Added copyWith --- lib/tags/custom_tag/custom_tag.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/tags/custom_tag/custom_tag.dart b/lib/tags/custom_tag/custom_tag.dart index 802d99e6..c95f42a3 100644 --- a/lib/tags/custom_tag/custom_tag.dart +++ b/lib/tags/custom_tag/custom_tag.dart @@ -1,4 +1,3 @@ -import 'package:directed_graph/directed_graph.dart'; import 'package:parabeac_core/controllers/main_info.dart'; import 'package:parabeac_core/generation/generators/import_generator.dart'; import 'package:parabeac_core/generation/generators/pb_generator.dart'; @@ -17,7 +16,6 @@ import 'package:parabeac_core/interpret_and_optimize/helpers/override_helper.dar 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/helpers/pb_intermediate_node_tree.dart'; -import 'package:parabeac_core/tags/custom_tag/custom_tag_bloc_generator.dart'; import 'package:uuid/uuid.dart'; import 'package:recase/recase.dart'; @@ -25,6 +23,9 @@ class CustomTag extends PBTag implements PBInjectedIntermediate { @override String semanticName = ''; + @override + String name; + @override ParentLayoutSizing layoutCrossAxisSizing; @override @@ -32,7 +33,7 @@ class CustomTag extends PBTag implements PBInjectedIntermediate { CustomTag( String UUID, Rectangle3D frame, - String name, { + this.name, { PBIntermediateConstraints constraints, this.layoutCrossAxisSizing, this.layoutMainAxisSizing, @@ -63,7 +64,7 @@ class CustomTag extends PBTag implements PBInjectedIntermediate { PBIntermediateTree tree) { return CustomTag( null, - frame, + frame.copyWith(), originalRef.name.replaceAll('', '').pascalCase + 'Custom', constraints: originalRef.constraints.copyWith(), layoutCrossAxisSizing: originalRef.layoutCrossAxisSizing, From 028668981a8a9a35ce3ac5f0c12efc0525ad56bb Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 23 Feb 2022 17:19:57 -0700 Subject: [PATCH 29/56] Only change top, bottom, left, and right, if they are the same value --- .../services/pb_alignment_generation_service.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart index 3b98310b..9f08476c 100644 --- a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart @@ -24,14 +24,18 @@ class PBAlignGenerationService extends AITHandler { if (element is PBIntermediateNode && (element.parent?.constraints?.fixedHeight ?? false)) { element.constraints.fixedHeight = true; - element.constraints.pinTop = true; - element.constraints.pinBottom = false; + if (element.constraints.pinTop == element.constraints.pinBottom) { + element.constraints.pinTop = true; + element.constraints.pinBottom = false; + } } if (element is PBIntermediateNode && (element.parent?.constraints?.fixedWidth ?? false)) { element.constraints.fixedWidth = true; - element.constraints.pinLeft = true; - element.constraints.pinRight = false; + if (element.constraints.pinLeft == element.constraints.pinBottom) { + element.constraints.pinLeft = true; + element.constraints.pinRight = false; + } } }); tree.rootNode.align(context); From 4fdb353bab514fee0cd818a35ce9dace75ace79d Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 24 Feb 2022 16:27:00 -0700 Subject: [PATCH 30/56] Removed unnecessary constraints logic --- .../services/pb_alignment_generation_service.dart | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart index 9f08476c..2b5cf525 100644 --- a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart @@ -24,18 +24,10 @@ class PBAlignGenerationService extends AITHandler { if (element is PBIntermediateNode && (element.parent?.constraints?.fixedHeight ?? false)) { element.constraints.fixedHeight = true; - if (element.constraints.pinTop == element.constraints.pinBottom) { - element.constraints.pinTop = true; - element.constraints.pinBottom = false; - } } if (element is PBIntermediateNode && (element.parent?.constraints?.fixedWidth ?? false)) { element.constraints.fixedWidth = true; - if (element.constraints.pinLeft == element.constraints.pinBottom) { - element.constraints.pinLeft = true; - element.constraints.pinRight = false; - } } }); tree.rootNode.align(context); From b72f76eeeb6b4be293dcf1a28a835f1d5a38d1ae Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 24 Feb 2022 17:30:54 -0700 Subject: [PATCH 31/56] Fixed issue with constraints on components --- .../services/pb_alignment_generation_service.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart index 2b5cf525..de823a7a 100644 --- a/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_alignment_generation_service.dart @@ -24,10 +24,18 @@ class PBAlignGenerationService extends AITHandler { if (element is PBIntermediateNode && (element.parent?.constraints?.fixedHeight ?? false)) { element.constraints.fixedHeight = true; + if (!element.constraints.pinTop && !element.constraints.pinBottom) { + element.constraints.pinTop = true; + element.constraints.pinBottom = false; + } } if (element is PBIntermediateNode && (element.parent?.constraints?.fixedWidth ?? false)) { element.constraints.fixedWidth = true; + if (!element.constraints.pinLeft && !element.constraints.pinRight) { + element.constraints.pinLeft = true; + element.constraints.pinRight = false; + } } }); tree.rootNode.align(context); From d353ece53341432d1ed277215ddf6f9e71f5a14d Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 25 Feb 2022 16:19:42 -0700 Subject: [PATCH 32/56] Add `LayoutBuilderStatefulValue` as Sizing option This option is the same as `LayoutBuilderValue`, except it is meant for widgets who inherit constraints from their parent `StatefulWidget` using the `widget.` prefix. --- .../generators/attribute-helper/pb_size_helper.dart | 11 +++++++++++ .../generators/symbols/pb_mastersym_gen.dart | 2 +- .../generators/visual-widgets/pb_positioned_gen.dart | 7 +++++++ lib/interpret_and_optimize/helpers/pb_context.dart | 3 +++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/generation/generators/attribute-helper/pb_size_helper.dart b/lib/generation/generators/attribute-helper/pb_size_helper.dart index 932ee7d6..1302f75f 100644 --- a/lib/generation/generators/attribute-helper/pb_size_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_size_helper.dart @@ -60,6 +60,17 @@ class PBSizeHelper extends PBAttributesHelper { heightString = 'height: constraints.maxHeight * ${relativeHeight.toStringAsFixed(3)},'; + } else if (context.sizingContext == + SizingValueContext.LayoutBuilderStatefulValue) { + relativeWidth = relativeWidth / screenWidth; + relativeHeight = relativeHeight / screenHeight; + + // Size for LayoutBuilder + widthString = + 'width: widget.constraints.maxWidth * ${relativeWidth.toStringAsFixed(3)},'; + + heightString = + 'height: widget.constraints.maxHeight * ${relativeHeight.toStringAsFixed(3)},'; } else { // Size for constants value widthString = 'width: ${relativeWidth.toStringAsFixed(3)},'; diff --git a/lib/generation/generators/symbols/pb_mastersym_gen.dart b/lib/generation/generators/symbols/pb_mastersym_gen.dart index 15186342..e3bd1aaa 100644 --- a/lib/generation/generators/symbols/pb_mastersym_gen.dart +++ b/lib/generation/generators/symbols/pb_mastersym_gen.dart @@ -11,7 +11,7 @@ class PBMasterSymbolGenerator extends PBGenerator { var log = Logger('Symbol Master Generator'); @override String generate(PBIntermediateNode source, PBContext context) { - context.sizingContext = SizingValueContext.LayoutBuilderValue; + context.sizingContext = SizingValueContext.LayoutBuilderStatefulValue; var children = context.tree.childrenOf(source); var sourceChild = children.isNotEmpty ? children.first : null; var buffer = StringBuffer(); diff --git a/lib/generation/generators/visual-widgets/pb_positioned_gen.dart b/lib/generation/generators/visual-widgets/pb_positioned_gen.dart index 1f9700a4..7047750b 100644 --- a/lib/generation/generators/visual-widgets/pb_positioned_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_positioned_gen.dart @@ -79,6 +79,13 @@ class PBPositionedGenerator extends PBGenerator { } else { return 'constraints.maxHeight *'; } + } else if (sizingValueContext == + SizingValueContext.LayoutBuilderStatefulValue) { + if (_positionedValue.isXAxis) { + return 'widget.constraints.maxWidth *'; + } else { + return 'widget.constraints.maxHeight *'; + } } if (_positionedValue.remainPointValue || diff --git a/lib/interpret_and_optimize/helpers/pb_context.dart b/lib/interpret_and_optimize/helpers/pb_context.dart index 1dcadf2e..aea2e69f 100644 --- a/lib/interpret_and_optimize/helpers/pb_context.dart +++ b/lib/interpret_and_optimize/helpers/pb_context.dart @@ -119,6 +119,9 @@ enum SizingValueContext { /// Should conform to the Layout Builder code, usually used when calling views. LayoutBuilderValue, + /// Same as LayoutBuilderValue, but gets constraints from the parent. + LayoutBuilderStatefulValue, + /// TODO: Remove AppBarChild, } From a52bf522ccd02dc1c73f38b0728f2ba59f502540 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 25 Feb 2022 16:21:52 -0700 Subject: [PATCH 33/56] Abstract the OverrideProperty generation a bit. The goal of the small refactor (although not fully complete) is so that, in the future, we can make the override generation more flexible for every type of override, if needed. --- lib/generation/generators/symbols/pb_instancesym_gen.dart | 1 - lib/generation/generators/visual-widgets/pb_bitmap_gen.dart | 6 ++---- lib/generation/generators/visual-widgets/pb_text_gen.dart | 4 ++-- .../entities/pb_shared_master_node.dart | 5 +++++ 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/generation/generators/symbols/pb_instancesym_gen.dart b/lib/generation/generators/symbols/pb_instancesym_gen.dart index b693fe75..b2084ba1 100644 --- a/lib/generation/generators/symbols/pb_instancesym_gen.dart +++ b/lib/generation/generators/symbols/pb_instancesym_gen.dart @@ -1,6 +1,5 @@ import 'package:parabeac_core/generation/generators/pb_generator.dart'; import 'package:parabeac_core/generation/generators/util/pb_input_formatter.dart'; -import 'package:parabeac_core/generation/generators/visual-widgets/pb_bitmap_gen.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/visual-widgets/pb_bitmap_gen.dart b/lib/generation/generators/visual-widgets/pb_bitmap_gen.dart index 77942a6d..b3ae872b 100644 --- a/lib/generation/generators/visual-widgets/pb_bitmap_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_bitmap_gen.dart @@ -2,12 +2,10 @@ import 'package:parabeac_core/controllers/main_info.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/layouts/column.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/inherited_bitmap.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/override_helper.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; -import 'package:path/path.dart' as p; class PBBitmapGenerator extends PBGenerator { var _sizehelper; @@ -24,14 +22,14 @@ class PBBitmapGenerator extends PBGenerator { var buffer = StringBuffer(); var imageOverride = OverrideHelper.getProperty(source.UUID, 'image'); if (imageOverride != null) { - buffer.write('${imageOverride.propertyName} ?? '); + buffer.write(imageOverride.generateOverride()); } buffer.write('Image.asset('); var styleOverride = OverrideHelper.getProperty(source.UUID, 'layerStyle'); if (styleOverride != null) { - buffer.write('${styleOverride.propertyName} ?? '); + buffer.write(styleOverride.generateOverride()); } var boxFit = _getBoxFit(source); diff --git a/lib/generation/generators/visual-widgets/pb_text_gen.dart b/lib/generation/generators/visual-widgets/pb_text_gen.dart index c97a657e..70c19ec5 100644 --- a/lib/generation/generators/visual-widgets/pb_text_gen.dart +++ b/lib/generation/generators/visual-widgets/pb_text_gen.dart @@ -29,14 +29,14 @@ class PBTextGen extends PBGenerator { var textOverride = OverrideHelper.getProperty(source.UUID, 'stringValue'); if (textOverride != null) { - buffer.write('${textOverride.propertyName} ?? '); + buffer.write(textOverride.generateOverride()); } buffer.write(('\'$cleanText\'') + ',\n'); } buffer.write('style: '); var styleOverride = OverrideHelper.getProperty(source.UUID, 'textStyle'); if (styleOverride != null) { - buffer.write('${styleOverride.propertyName} ?? '); + buffer.write(styleOverride.generateOverride()); } buffer.write('TextStyle(\n'); diff --git a/lib/interpret_and_optimize/entities/pb_shared_master_node.dart b/lib/interpret_and_optimize/entities/pb_shared_master_node.dart index 52dc82b0..4c9abe66 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_master_node.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_master_node.dart @@ -149,4 +149,9 @@ class PBMasterOverride { static String _propertyNameFromJson(String name) => name.replaceAll(RegExp(r'[^A-Za-z0-9]'), '').camelCase; + + /// Generated the given [PBMasterOverride] + String generateOverride() { + return 'widget.$propertyName ?? '; + } } From dcf27cb6ac64fae9fb38009a208306ef68fd7ae2 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Mon, 28 Feb 2022 17:25:01 -0700 Subject: [PATCH 34/56] Add ability for each tag to call its `handleIntermediateNode` method --- .../generators/plugins/pb_plugin_node.dart | 45 +++++++++++++++++- .../stateful_template_strategy.dart | 22 +++++++-- .../abstract_intermediate_node_factory.dart | 11 +---- lib/tags/custom_tag/custom_tag.dart | 46 ------------------- 4 files changed, 62 insertions(+), 62 deletions(-) diff --git a/lib/generation/generators/plugins/pb_plugin_node.dart b/lib/generation/generators/plugins/pb_plugin_node.dart index f8ecde7c..05b23d16 100644 --- a/lib/generation/generators/plugins/pb_plugin_node.dart +++ b/lib/generation/generators/plugins/pb_plugin_node.dart @@ -1,5 +1,7 @@ -import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.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 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_layout_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_intermediate_node_tree.dart'; @@ -29,4 +31,45 @@ abstract class PBTag extends PBVisualIntermediateNode { PBIntermediateTree tree); void extractInformation(PBIntermediateNode incomingNode); + + /// Handles `iNode` to convert into a [PBTag]. + /// + /// Returns the [PBIntermediateNode] that should go into the [PBIntermediateTree] + PBIntermediateNode handleIntermediateNode( + PBIntermediateNode iNode, + PBIntermediateNode parent, + PBTag tag, + PBIntermediateTree tree, + ) { + iNode.name = iNode.name.replaceAll(tag.semanticName, ''); + + // If `iNode` is [PBSharedMasterNode] we need to place the [CustomEgg] betweeen the + // [PBSharedMasterNode] and the [PBSharedMasterNode]'s children. That is why we are returing + // `iNode` at the end. + if (iNode is PBSharedMasterNode) { + return iNode; + } else if (iNode is PBSharedInstanceIntermediateNode) { + iNode.parent = parent; + + tree.replaceNode(iNode, tag); + + tree.addEdges(tag, [iNode]); + + return tag; + } else { + // [iNode] needs a parent and has not been added to the [tree] by [tree.addEdges] + iNode.parent = parent; + // If `iNode` has no children, it likely means we want to wrap `iNode` in [CustomEgg] + if (tree.childrenOf(iNode).isEmpty || iNode is PBLayoutIntermediateNode) { + /// Wrap `iNode` in `newTag` and make `newTag` child of `parent`. + tree.removeEdges(iNode.parent, [iNode]); + tree.addEdges(tag, [iNode]); + tree.addEdges(parent, [tag]); + return tag; + } + tree.replaceNode(iNode, tag, acceptChildren: true); + + return tag; + } + } } diff --git a/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart b/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart index 22110740..d3e2ce34 100644 --- a/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart +++ b/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart @@ -20,14 +20,26 @@ class StatefulTemplateStrategy extends TemplateStrategy { /// Represents the overrides for the class variables. var overrideVars = ''; + /// Represents the override name and how many times it appears on the list. + var ovrCount = {}; + if (node is PBSharedMasterNode && node.overridableProperties.isNotEmpty) { node.overridableProperties.forEach((prop) { - var overrideType = 'Widget?'; - if (prop.type == 'stringValue') { - overrideType = 'String?'; + /// Add the property to the overrides if not repeated. + /// + /// TODO: Add support for repeated properties. + /// The issue is that for instances, we cannot change the name from PBDL, + /// so we need a way to detect repeated overrides in a single place. + if (!ovrCount.containsKey(prop.propertyName)) { + ovrCount[prop.propertyName] = 0; + + var overrideType = 'Widget?'; + if (prop.type == 'stringValue') { + overrideType = 'String?'; + } + overrides += 'this.${prop.propertyName}, '; + overrideVars += 'final $overrideType ${prop.propertyName};'; } - overrides += 'this.${prop.propertyName}, '; - overrideVars += 'final $overrideType ${prop.propertyName};'; }); } diff --git a/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart b/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart index 0a22a4b3..7e87d5f2 100644 --- a/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart +++ b/lib/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart @@ -60,16 +60,7 @@ class AbstractIntermediateNodeFactory { PBPluginListHelper().returnAllowListNodeIfExists(iNode, tree); // Return tag if it exists if (tag != null) { - /// TODO: Each Tag could potentially implement how it should handle converting from PBIntermediate to a PBTag - if (tag is CustomTag) { - return tag.handleIntermediateNode(iNode, parent, tag, tree); - } else { - // [iNode] needs a parent and has not been added to the [tree] by [tree.addEdges] - iNode.parent = parent; - tree.replaceNode(iNode, tag, acceptChildren: true); - - return tag; - } + return tag.handleIntermediateNode(iNode, parent, tag, tree); } if (parent != null && iNode != null) { tree.addEdges(parent, [iNode]); diff --git a/lib/tags/custom_tag/custom_tag.dart b/lib/tags/custom_tag/custom_tag.dart index 802d99e6..376c2b4f 100644 --- a/lib/tags/custom_tag/custom_tag.dart +++ b/lib/tags/custom_tag/custom_tag.dart @@ -70,52 +70,6 @@ class CustomTag extends PBTag implements PBInjectedIntermediate { layoutMainAxisSizing: originalRef.layoutMainAxisSizing, ); } - - /// Handles `iNode` to convert into a [CustomTag]. - /// - /// Returns the [PBIntermediateNode] that should go into the [PBIntermediateTree] - PBIntermediateNode handleIntermediateNode( - PBIntermediateNode iNode, - PBIntermediateNode parent, - CustomTag tag, - PBIntermediateTree tree, - ) { - iNode.name = iNode.name.replaceAll('', ''); - - // If `iNode` is [PBSharedMasterNode] we need to place the [CustomEgg] betweeen the - // [PBSharedMasterNode] and the [PBSharedMasterNode]'s children. That is why we are returing - // `iNode` at the end. - if (iNode is PBSharedMasterNode) { - // TODO: temporal fix, uncomment later - // tree.addEdges( - // newTag, tree.childrenOf(iNode).cast>()); - - // tree.replaceChildrenOf(iNode, [tag]); - return iNode; - } else if (iNode is PBSharedInstanceIntermediateNode) { - iNode.parent = parent; - - tree.replaceNode(iNode, tag); - - tree.addEdges(tag, [iNode]); - - return tag; - } else { - // [iNode] needs a parent and has not been added to the [tree] by [tree.addEdges] - iNode.parent = parent; - // If `iNode` has no children, it likely means we want to wrap `iNode` in [CustomEgg] - if (tree.childrenOf(iNode).isEmpty || iNode is PBLayoutIntermediateNode) { - /// Wrap `iNode` in `newTag` and make `newTag` child of `parent`. - tree.removeEdges(iNode.parent, [iNode]); - tree.addEdges(tag, [iNode]); - tree.addEdges(parent, [tag]); - return tag; - } - tree.replaceNode(iNode, tag, acceptChildren: true); - - return tag; - } - } } class CustomTagGenerator extends PBGenerator { From 1eda482a039a66e333c7a631c5d44ea12111395a Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Mon, 28 Feb 2022 17:55:41 -0700 Subject: [PATCH 35/56] Changed PBDL ref to `master` --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 8e783507..8687c8ad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: pbdl: git: url: git@github.com:Parabeac/pbdl.git - ref: dev #TODO: Change this to stable once the PR on PBDL gets merged + ref: master directed_graph: ^0.2.3 sentry: ^6.2.2 yaml_modify: ^1.0.1 From 1144705550aea65678014fef1645dfd30b742747 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Mon, 28 Feb 2022 17:59:24 -0700 Subject: [PATCH 36/56] Updated README --- README.md | 92 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index b24a435c..b629699b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ ![Parabeac Logo](https://github.com/Parabeac/Parabeac-Core/blob/stable/repo_assets/parabeac_core_image.png?raw=true) - Parabeac-Core converts design files into isolated & responsive Flutter code, continuously. [![Discord Chat](https://img.shields.io/discord/308323056592486420.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/qUrghes) [![https://twitter.com/parabeac?lang=en](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&style=plastic)](https://twitter.com/parabeac?lang=en) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](https://github.com/Parabeac/Parabeac-Core/blob/stable/CODE_OF_CONDUCT.md) bravemaster619's DEV Profile @@ -23,83 +22,83 @@ Parabeac-Core converts design files into isolated & responsive Flutter code, con # Why are we here? + The handoff between designers & developers is one of the most costly and frustrating bottlenecks in app development. As design iteration becomes more critical in the execution of app development, this problem is increasingly important to solve. Parabeac-Core solves this by interpreting designs from tools like Figma and generating isolated & responsive Flutter code. By creating isolated UI, design changes & updates are supported forever. + # Table of Contents - * [Dependencies](#dependencies) - * [Cloning parabeac_core](#cloning-parabeac_core) - * [Running parabeac_core](#running-parabeac_core) - * [Figma](#figma) - * [Sketch](#sketch) - * [Running the generated code](#running-the-generated-code) - * [Running a Figma Frame/Screen](#running-a-figma-framescreen) - * [Running a Figma Component](#running-a-figma-component) - * [Other](#other) - * [Metrics](#metrics) + +- [Dependencies](#dependencies) +- [Cloning parabeac_core](#cloning-parabeac_core) +- [Running parabeac_core](#running-parabeac_core) + - [Figma](#figma) + - [Sketch](#sketch) +- [Running the generated code](#running-the-generated-code) + - [Running a Figma Frame/Screen](#running-a-figma-framescreen) + - [Running a Figma Component](#running-a-figma-component) +- [Other](#other) + - [Metrics](#metrics) # Get Started ### Dependencies - - [Dart](https://dart.dev/get-dart) - - [Flutter](https://flutter.dev/docs/get-started/install) - - [node.js](https://nodejs.org/en/download/) - - [Figma File](https://figma.com) - [Sample](https://www.figma.com/file/Ysnjcij14HaE98ucq1iwW1/Parabeac-Counter-App-Demo?node-id=0%3A1) - -## Cloning parabeac_core -Because parabeac-core contains submodules, it is easiest to clone using the following command: -``` -git clone --recurse-submodules https://github.com/Parabeac/Parabeac-Core.git -``` - -If you have already cloned you may need to pull the submodules: -``` -git submodule update --init -``` +- [Dart](https://dart.dev/get-dart) +- [Flutter](https://flutter.dev/docs/get-started/install) +- [node.js](https://nodejs.org/en/download/) +- [Figma File](https://figma.com) - [Sample](https://www.figma.com/file/Ysnjcij14HaE98ucq1iwW1/Parabeac-Counter-App-Demo?node-id=0%3A1) -**_Run the following command to update the submodules:_** - -``` -git pull --recurse-submodules -``` ## Running parabeac_core + ### Figma - In your terminal, change your directory to the root parabeac_core directory and run: -``` bash +In your terminal, change your directory to the root parabeac_core directory and run: + +```bash $ pub get - $ dart parabeac.dart -f -k -o + $ dart parabeac.dart -f -k -o ``` + #### Figma File ID (Required): -f + 1. Visit https://figma.com and log in. 2. Select your Design File -3. The file ID is contained in the URL of your design file immediately after figma.com/file/``/. - - *Example: The file ID for ```https://www.figma.com/file/Ysnjcij14HaE98ucq1iwW1/Parabeac-Counter-App-Demo``` is ```Ysnjcij14HaE98ucq1iwW1```* +3. The file ID is contained in the URL of your design file immediately after figma.com/file/``/. + + _Example: The file ID for `https://www.figma.com/file/Ysnjcij14HaE98ucq1iwW1/Parabeac-Counter-App-Demo` is `Ysnjcij14HaE98ucq1iwW1`_ + #### Figma API Key (Required): -k + 1. Visit https://figma.com and log in. 2. Navigate to your user profile and select `Settings` 3. Scroll Down to the "Create a new Personal Access Token" -4. Create a new Personal Access Token and copy your new API key. (It should look something like this: ```64522-a0e5509a-d5ce-47a8-880b-c295f9cb27ed```) +4. Create a new Personal Access Token and copy your new API key. (It should look something like this: `64522-a0e5509a-d5ce-47a8-880b-c295f9cb27ed`) #### Name (Optional): -n -Sets the name of the exported project. For instance, if you want to name your project "cool_project", set the `-n` flag to `cool_project`. *Note: parabeac_core can only use [valid Flutter project names](https://dart.dev/tools/pub/pubspec#name).* + +Sets the name of the exported project. For instance, if you want to name your project "cool_project", set the `-n` flag to `cool_project`. _Note: parabeac_core can only use [valid Flutter project names](https://dart.dev/tools/pub/pubspec#name)._ + #### Absolute Path (Optional): -o + Specifies the absolute path of the exported Flutter Project to be created. For instance, to export your Flutter project in the Documents folder, set your `-o` flag to `/Users/ParabeacUser/Documents/` Not setting this will export the project in the parabeac_core directory. ### Sketch -Due to the lack of requested support for Sketch and the major updates to this project, we temporarily stopped support for Sketch. +Due to the lack of requested support for Sketch and the major updates to this project, we temporarily stopped support for Sketch. # Running the generated code -We recommend following our [Hello World guide](https://docs.parabeac.com/docs/hello-world-guide) but if you feel experienced enough with Flutter, feel free to jump right in here: +We recommend following our [Hello World guide](https://docs.parabeac.com/docs/hello-world-guide) but if you feel experienced enough with Flutter, feel free to jump right in here: ### Running a Figma Frame/Screen + ![Figma Frame Example](https://github.com/Parabeac/Parabeac-Core/blob/stable/repo_assets/figma_frame_example.png?raw=true) + #### Steps + 1. Open your generated project (Will be at the absolute path you set or in the parabeac_core directory) 2. If your frame was designed to be a screen, you can quickly test it by editing the MaterialApp widget in main.dart like the following: -``` class MyApp extends StatelessWidget { + +```class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { @@ -112,12 +111,16 @@ We recommend following our [Hello World guide](https://docs.parabeac.com/docs/he } } ``` -3. Save `main.dart` and execute `flutter run` + +3. Save `main.dart` and execute `flutter run` + ### Running a Figma Component + ![Figma Component Example](https://github.com/Parabeac/Parabeac-Core/blob/master/repo_assets/figma_component_example.png?raw=true) 1. Navigate to a widget/screen where you can add in your component as a child. 2. Reference the component by providing a LayoutBuilder widget like the following: + ``` Container( child: LayoutBuilder(builder: (context, constraints) { @@ -127,8 +130,11 @@ Container( }) ) ``` + 1. Save the class and execute `flutter run` in your terminal & navigate your app to the expected location where the component should show up. # Other + ## Metrics + Parabeac-Core keeps track of a few data points to help us understand usage. Although we do not collect any personal information, you can turn off metrics at any time by creating the environment variable `PB_METRICS = "false"`. From 37a2fa898e3bd93b370ce7e4375982d69142b55a Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Tue, 1 Mar 2022 13:36:33 -0700 Subject: [PATCH 37/56] Add nullity check for yaml assets --- lib/generation/generators/writers/pb_flutter_writer.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/generation/generators/writers/pb_flutter_writer.dart b/lib/generation/generators/writers/pb_flutter_writer.dart index 7cd10a1f..fac6885e 100644 --- a/lib/generation/generators/writers/pb_flutter_writer.dart +++ b/lib/generation/generators/writers/pb_flutter_writer.dart @@ -99,7 +99,8 @@ class MyApp extends StatelessWidget { /// Add assets if (modifiableyaml.containsKey('flutter')) { /// Create `assets` entry if does not exist - if (!modifiableyaml['flutter'].containsKey('assets')) { + if (!modifiableyaml['flutter'].containsKey('assets') || + modifiableyaml['flutter']['assets'] == null) { modifiableyaml['flutter']['assets'] = []; } From 11268770f2a788fc684cd40cf69f6b5101e291f0 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Tue, 1 Mar 2022 17:03:52 -0700 Subject: [PATCH 38/56] Gradient now supports multiple gradients correctly --- .../attribute-helper/pb_color_gen_helper.dart | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) 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 aa81e997..d67d1cc4 100644 --- a/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart +++ b/lib/generation/generators/attribute-helper/pb_color_gen_helper.dart @@ -57,23 +57,35 @@ class PBColorGenHelper extends PBAttributesHelper { var endX = _roundNumber(gradient.gradientHandlePositions[1].x); var endY = _roundNumber(gradient.gradientHandlePositions[1].y); + var gradientInfo = _getGradientInfo(gradient); + return ''' gradient: LinearGradient( begin: Alignment($beginX,$beginY), end: Alignment($endX,$endY), colors: [ - Color(${gradient.gradientStops[0].color.toString()}), - Color(${gradient.gradientStops[1].color.toString()}), + ${gradientInfo[0]} ], stops: [ - ${gradient.gradientStops[0].position}, - ${gradient.gradientStops[1].position}, + ${gradientInfo[1]} ], tileMode: TileMode.clamp, ), '''; } + /// Gradient info is a list + /// 0 is for gradient color + /// 1 is for gradient stop position + List _getGradientInfo(PBFill gradient) { + var gradientInfo = ['', '']; + for (var stop in gradient.gradientStops) { + gradientInfo[0] += 'Color(${stop.color.toString()}),'; + gradientInfo[1] += '${stop.position},'; + } + return gradientInfo; + } + num _roundNumber(num coordinate) { return (2 * coordinate) - 1; } From 7e9fb56dce3326ef98ebb30fb4e46030dd43bbca Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Tue, 1 Mar 2022 17:03:57 -0700 Subject: [PATCH 39/56] Cleaned code --- .../entities/layouts/group/frame_group.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart b/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart index bf975806..e30c5058 100644 --- a/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart +++ b/lib/interpret_and_optimize/entities/layouts/group/frame_group.dart @@ -1,13 +1,10 @@ import 'package:parabeac_core/generation/prototyping/pb_prototype_node.dart'; -import 'package:parabeac_core/interpret_and_optimize/entities/injected_container.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/interfaces/pb_inherited_intermediate.dart'; -import 'package:parabeac_core/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/layouts/group/group.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_constraints.dart'; import 'package:parabeac_core/interpret_and_optimize/entities/subclasses/pb_intermediate_node.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/abstract_intermediate_node_factory.dart'; -import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; import 'package:parabeac_core/interpret_and_optimize/helpers/pb_intermediate_node_tree.dart'; import 'package:parabeac_core/interpret_and_optimize/state_management/intermediate_auxillary_data.dart'; From f66a74114f7b4a81cc4459322eba7e491fab46cb Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Tue, 1 Mar 2022 17:04:16 -0700 Subject: [PATCH 40/56] Wrap stack if it needs coloring --- .../pb_layout_generation_service.dart | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) 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 0f96c36b..38e72ea8 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -153,17 +153,29 @@ class PBLayoutGenerationService extends AITHandler { /// Transforming the [Group] into regular [PBLayoutIntermediateNode] void _transformGroup(PBIntermediateTree tree) { tree.whereType().forEach((tempGroup) { + var newStack = PBIntermediateStackLayout( + name: tempGroup.name, + constraints: tempGroup.constraints.copyWith(), + ) + ..auxiliaryData = tempGroup.auxiliaryData + ..frame = tempGroup.frame.copyWith() + ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing + ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing; + tree.replaceNode( tempGroup, - PBIntermediateStackLayout( - name: tempGroup.name, - constraints: tempGroup.constraints.copyWith(), - ) - ..frame = tempGroup.frame.copyWith() - ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing - ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing, + newStack, acceptChildren: true, ); + + if (tempGroup.auxiliaryData.colors != null) { + var tempContainer = InjectedContainer(null, tempGroup.frame.copyWith()) + ..auxiliaryData = tempGroup.auxiliaryData + ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing + ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing; + + tree.wrapNode(tempContainer, newStack); + } }); } From 9f20279b7732ca2e79a279f7a6a3554168436e7b Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Tue, 1 Mar 2022 21:24:46 -0700 Subject: [PATCH 41/56] Increased robustness of writing assets to yaml --- .../generators/writers/pb_flutter_writer.dart | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/generation/generators/writers/pb_flutter_writer.dart b/lib/generation/generators/writers/pb_flutter_writer.dart index fac6885e..2c270570 100644 --- a/lib/generation/generators/writers/pb_flutter_writer.dart +++ b/lib/generation/generators/writers/pb_flutter_writer.dart @@ -98,14 +98,7 @@ class MyApp extends StatelessWidget { /// Add assets if (modifiableyaml.containsKey('flutter')) { - /// Create `assets` entry if does not exist - if (!modifiableyaml['flutter'].containsKey('assets') || - modifiableyaml['flutter']['assets'] == null) { - modifiableyaml['flutter']['assets'] = []; - } - - var yamlAssets = - (modifiableyaml['flutter']['assets'] as List).cast(); + var yamlAssets = []; var assets = _getAssetFileNames(); @@ -116,6 +109,16 @@ class MyApp extends StatelessWidget { 'packages/${MainInfo().projectName}/assets/images/$assetName'); } } + + if (yamlAssets.isNotEmpty) { + /// Create `assets` entry if does not exist + if (!modifiableyaml['flutter'].containsKey('assets') || + modifiableyaml['flutter']['assets'] == null) { + modifiableyaml['flutter']['assets'] = yamlAssets; + } else { + modifiableyaml['flutter']['assets'].addAll(yamlAssets); + } + } } /// Write the new yaml file From bd069facb5973f2a80fcf65a36a118f3f1eeaef3 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Wed, 2 Mar 2022 17:08:58 -0700 Subject: [PATCH 42/56] Hotfix: Change pbdl URL Reference. This is to avoid having to have an SSH key, making it even easier to get the dependency. --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index e0bea4ba..0a2c6c9f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: file: ^6.1.2 pbdl: git: - url: git@github.com:Parabeac/pbdl.git + url: https://github.com/Parabeac/pbdl.git ref: master directed_graph: ^0.2.3 sentry: ^6.2.2 From 5b3c753c5298ca2a43b87ec9f11cb429c03f7fff Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 2 Mar 2022 22:12:16 -0700 Subject: [PATCH 43/56] Adding missing coma to widgetbook --- .../comp_isolation/widgetbook/entities/widgetbook_folder.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generation/flutter_project_builder/post_gen_tasks/comp_isolation/widgetbook/entities/widgetbook_folder.dart b/lib/generation/flutter_project_builder/post_gen_tasks/comp_isolation/widgetbook/entities/widgetbook_folder.dart index 3bc52d52..e6abb75e 100644 --- a/lib/generation/flutter_project_builder/post_gen_tasks/comp_isolation/widgetbook/entities/widgetbook_folder.dart +++ b/lib/generation/flutter_project_builder/post_gen_tasks/comp_isolation/widgetbook/entities/widgetbook_folder.dart @@ -15,7 +15,7 @@ class WidgetBookFolder extends IsolationNode { WidgetbookFolder( name: '$name', ${genWidgets.isNotEmpty ? 'widgets: [\n$genWidgets\n],\n' : ''} - ) + ), '''; } } From 8c92b1fca6166b6a5a92b0465030d874a53c8e57 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 2 Mar 2022 22:12:26 -0700 Subject: [PATCH 44/56] Added parent to shared master --- lib/interpret_and_optimize/entities/pb_shared_master_node.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/interpret_and_optimize/entities/pb_shared_master_node.dart b/lib/interpret_and_optimize/entities/pb_shared_master_node.dart index 4c9abe66..6728bc63 100644 --- a/lib/interpret_and_optimize/entities/pb_shared_master_node.dart +++ b/lib/interpret_and_optimize/entities/pb_shared_master_node.dart @@ -83,7 +83,8 @@ class PBSharedMasterNode extends PBVisualIntermediateNode PBIntermediateNode createIntermediateNode(Map json, PBIntermediateNode parent, PBIntermediateTree tree) { PBSharedMasterNode master = PBSharedMasterNode.fromJson(json) - ..mapRawChildren(json, tree); + ..mapRawChildren(json, tree) + ..parent = parent; /// Map overridableProperties which need parent and tree master.overridableProperties = (json['overrideProperties'] as List) From 2460179833f0f775b85a4f4ffe77ff318320ea73 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 2 Mar 2022 22:13:05 -0700 Subject: [PATCH 45/56] Change component tree screen to view --- lib/main.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index a5435362..d1ec724f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -227,7 +227,7 @@ Future> treeHasMaster(PBIntermediateTree tree) async { if (element is PBSharedMasterNode && element.parent != null) { var tempTree = PBIntermediateTree(name: element.name) ..rootNode = element - ..tree_type = TREE_TYPE.SCREEN + ..tree_type = TREE_TYPE.VIEW ..generationViewData = PBGenerationViewData(); var stack = []; @@ -401,7 +401,8 @@ void addToAmplitude() async { /// types of intake to parabeac-core bool hasTooManyArgs(ArgResults args) { var hasSketch = args['path'] != null; - var hasFigma = args['figKey'] != null || args['fig'] != null || args['oauth'] != null; + var hasFigma = + args['figKey'] != null || args['fig'] != null || args['oauth'] != null; var hasPbdl = args['pbdl-in'] != null; var hasAll = hasSketch && hasFigma && hasPbdl; From 72b08b2106ebeda72bb8dfcfab2368ffb67d201c Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Thu, 3 Mar 2022 11:05:19 -0700 Subject: [PATCH 46/56] Added shadow to containers --- .../pb_box_decoration_gen_helper.dart | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 4c1f1206..b2f687e4 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 @@ -13,6 +13,7 @@ class PBBoxDecorationHelper extends PBAttributesHelper { final buffer = StringBuffer(); buffer.write('decoration: BoxDecoration('); var borderInfo = source.auxiliaryData.borderInfo; + var effectsInfo = source.auxiliaryData.effects; var colors = source.auxiliaryData.colors; if (colors != null && colors.isNotEmpty) { buffer.write(PBColorGenHelper().generate(source, generatorContext)); @@ -48,6 +49,25 @@ class PBBoxDecorationHelper extends PBAttributesHelper { } } } + + if (effectsInfo != null && + effectsInfo.isNotEmpty && + effectsInfo.first.type.toLowerCase().contains('shadow')) { + buffer.write('boxShadow: ['); + + for (var effect in effectsInfo) { + buffer.write(''' + BoxShadow( + ${PBColorGenHelper().getHexColor(effect.color)} + spreadRadius: ${effect.radius}, + blurRadius: ${effect.radius}, + offset: Offset(${effect.offset['x']}, ${effect.offset['y']}), + ), + '''); + } + + buffer.write('],'); + } buffer.write('),'); return buffer.toString(); From 5512624e3c6c2f9fafdc39a1cabc89d6d2ae757c Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 4 Mar 2022 15:56:29 -0700 Subject: [PATCH 47/56] Fix yaml duplicate issue. --- .../generators/writers/pb_flutter_writer.dart | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/lib/generation/generators/writers/pb_flutter_writer.dart b/lib/generation/generators/writers/pb_flutter_writer.dart index 2c270570..0b20b536 100644 --- a/lib/generation/generators/writers/pb_flutter_writer.dart +++ b/lib/generation/generators/writers/pb_flutter_writer.dart @@ -98,26 +98,30 @@ class MyApp extends StatelessWidget { /// Add assets if (modifiableyaml.containsKey('flutter')) { - var yamlAssets = []; - var assets = _getAssetFileNames(); - /// Add dependency for each asset - for (var assetName in assets) { - if (!yamlAssets.any((str) => str.endsWith('/$assetName'))) { - yamlAssets.add( - 'packages/${MainInfo().projectName}/assets/images/$assetName'); - } + /// If there are no assets to add, simply return. + if (assets.isEmpty) { + return; } - if (yamlAssets.isNotEmpty) { - /// Create `assets` entry if does not exist - if (!modifiableyaml['flutter'].containsKey('assets') || - modifiableyaml['flutter']['assets'] == null) { - modifiableyaml['flutter']['assets'] = yamlAssets; - } else { - modifiableyaml['flutter']['assets'].addAll(yamlAssets); - } + /// Add only elements that are not already in the yaml + if (modifiableyaml['flutter'].containsKey('assets') && + modifiableyaml['flutter']['assets'] != null) { + var existingAssets = (modifiableyaml['flutter']['assets'] as List); + assets.forEach((asset) { + if (!existingAssets.any((e) => e.endsWith('/$asset'))) { + existingAssets + .add('packages/${MainInfo().projectName}/assets/images/$asset'); + } + }); + } + + /// Add all elements to the yaml + else { + modifiableyaml['flutter']['assets'] = assets + .map((e) => 'packages/${MainInfo().projectName}/assets/images/$e') + .toList(); } } From 6a89515e9a935391bb7ea62d71b875740c668852 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Sat, 5 Mar 2022 19:39:19 -0700 Subject: [PATCH 48/56] Fix name mismatch between Component and Instance --- .../template_strategy/stateful_template_strategy.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart b/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart index d3e2ce34..cea1b67c 100644 --- a/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart +++ b/lib/generation/generators/value_objects/template_strategy/stateful_template_strategy.dart @@ -3,6 +3,7 @@ import 'package:parabeac_core/generation/generators/value_objects/template_strat 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 'package:parabeac_core/interpret_and_optimize/helpers/pb_context.dart'; +import 'package:recase/recase.dart'; ///Generating a [StatefulWidget] class StatefulTemplateStrategy extends TemplateStrategy { @@ -10,7 +11,7 @@ class StatefulTemplateStrategy extends TemplateStrategy { String generateTemplate(PBIntermediateNode node, PBGenerationManager manager, PBContext generatorContext, {args}) { - var widgetName = retrieveNodeName(node); + var widgetName = retrieveNodeName(node.name.pascalCase); var constructorName = '$widgetName'; var returnStatement = node.generator.generate(node, generatorContext); From 93429b70f52937a87b6dbcf4fdd89d353f7eb15e Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Mon, 7 Mar 2022 18:00:45 -0700 Subject: [PATCH 49/56] Adjust Border Information for retrocompatibility. Ran JSON Serializable generator. --- .../pb_box_decoration_gen_helper.dart | 30 ++++-------- .../entities/layouts/column.g.dart | 2 - .../entities/layouts/row.g.dart | 2 - .../helpers/pb_configuration.g.dart | 13 +---- .../intermediate_border_info.dart | 48 ++++++++++++++----- .../intermediate_border_info.g.dart | 23 +++++---- .../intermediate_auxillary_data.dart | 2 +- .../intermediate_auxillary_data.g.dart | 3 +- pubspec.yaml | 6 +-- 9 files changed, 63 insertions(+), 66 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 b2f687e4..ad0534bc 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 @@ -19,34 +19,22 @@ class PBBoxDecorationHelper extends PBAttributesHelper { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } if (borderInfo != null) { - if (borderInfo.cornerRadius != null) { + if (borderInfo.borderRadius != null) { // Write border radius if it exists buffer.write( - 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.cornerRadius})),'); - } else if (borderInfo.borders.isNotEmpty && - borderInfo.borders[0].type == 'circle') { + 'borderRadius: BorderRadius.all(Radius.circular(${borderInfo.borderRadius})),'); + } else if (borderInfo.type == 'circle') { buffer.write('shape: BoxShape.circle,'); } // Write border outline properties if applicable - if (borderInfo.borders.isNotEmpty && - borderInfo.strokeWeight != null && - borderInfo.strokeWeight > 0) { - for (var i = 0; i < borderInfo.borders.length; i++) { - // - if (!borderInfo.borders[i].visible) { - continue; - } else { - buffer.write('border: Border.all('); - if (borderInfo.borders[i].color != null) { - buffer.write( - 'color: Color(${borderInfo.borders[i].color.toString()}),'); - } - buffer.write('width: ${borderInfo.strokeWeight},'); - buffer.write('),'); // end of Border.all( - break; - } + if (borderInfo.thickness > 0 && borderInfo.visible) { + buffer.write('border: Border.all('); + if (borderInfo.color != null) { + buffer.write('color: Color(${borderInfo.color.toString()}),'); } + buffer.write('width: ${borderInfo.thickness},'); + buffer.write('),'); // end of Border.all( } } diff --git a/lib/interpret_and_optimize/entities/layouts/column.g.dart b/lib/interpret_and_optimize/entities/layouts/column.g.dart index 16df64d6..2e933d6a 100644 --- a/lib/interpret_and_optimize/entities/layouts/column.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/column.g.dart @@ -28,7 +28,6 @@ PBIntermediateColumnLayout _$PBIntermediateColumnLayoutFromJson( ..prototypeNode = json['prototypeNode'] == null ? null : PrototypeNode.fromJson(json['prototypeNode'] as Map) - ..alignment = json['alignment'] as Map ..layoutProperties = json['autoLayoutOptions'] == null ? null : LayoutProperties.fromJson( @@ -49,7 +48,6 @@ Map _$PBIntermediateColumnLayoutToJson( 'style': instance.auxiliaryData, 'name': instance.name, 'prototypeNode': instance.prototypeNode, - 'alignment': instance.alignment, 'autoLayoutOptions': instance.layoutProperties, 'type': instance.type, }; diff --git a/lib/interpret_and_optimize/entities/layouts/row.g.dart b/lib/interpret_and_optimize/entities/layouts/row.g.dart index 54b904ab..2cc89cb5 100644 --- a/lib/interpret_and_optimize/entities/layouts/row.g.dart +++ b/lib/interpret_and_optimize/entities/layouts/row.g.dart @@ -26,7 +26,6 @@ PBIntermediateRowLayout _$PBIntermediateRowLayoutFromJson( ? null : IntermediateAuxiliaryData.fromJson( json['style'] as Map) - ..alignment = json['alignment'] as Map ..prototypeNode = json['prototypeNode'] == null ? null : PrototypeNode.fromJson(json['prototypeNode'] as Map) @@ -49,7 +48,6 @@ Map _$PBIntermediateRowLayoutToJson( 'boundaryRectangle': Rectangle3D.toJson(instance.frame), 'style': instance.auxiliaryData, 'name': instance.name, - 'alignment': instance.alignment, 'prototypeNode': instance.prototypeNode, 'autoLayoutOptions': instance.layoutProperties, 'type': instance.type, diff --git a/lib/interpret_and_optimize/helpers/pb_configuration.g.dart b/lib/interpret_and_optimize/helpers/pb_configuration.g.dart index 3565ed49..e364051f 100644 --- a/lib/interpret_and_optimize/helpers/pb_configuration.g.dart +++ b/lib/interpret_and_optimize/helpers/pb_configuration.g.dart @@ -8,13 +8,6 @@ part of 'pb_configuration.dart'; PBConfiguration _$PBConfigurationFromJson(Map json) { return PBConfiguration( - // Temporary Fix till null safety migration. - // json['widgetStyle'] as String ?? 'Material', - // json['widgetType'] as String ?? 'Stateless', - // json['widgetSpacing'] as String ?? 'Expanded', - // json['state-management'] as String ?? 'None', - // (json['layoutPrecedence'] as List)?.map((e) => e as String)?.toList() ?? - // ['column', 'row', 'stack'], json['breakpoints'] as Map, json['scaling'] as bool ?? true, json['enablePrototyping'] as bool ?? false, @@ -24,12 +17,8 @@ PBConfiguration _$PBConfigurationFromJson(Map json) { Map _$PBConfigurationToJson(PBConfiguration instance) => { - 'widgetStyle': instance.widgetStyle, 'scaling': instance.scaling, - 'widgetType': instance.widgetType, - 'widgetSpacing': instance.widgetSpacing, - 'state-management': instance.stateManagement, - 'layoutPrecedence': instance.layoutPrecedence, 'breakpoints': instance.breakpoints, 'enablePrototyping': instance.enablePrototyping, + 'componentIsolation': instance.componentIsolation, }; diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart index 11557bde..db9bb37e 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart @@ -1,13 +1,22 @@ import 'package:json_annotation/json_annotation.dart'; +import 'package:parabeac_core/interpret_and_optimize/helpers/pb_color.dart'; import 'intermediate_border.dart'; part 'intermediate_border_info.g.dart'; +/// Class that represents the border information for a node. +/// +/// We are operating under the assumption that every [PBIntermediateNode] +/// can only have a single border. @JsonSerializable(explicitToJson: true) -class PBBorderInfo { - List borders; +class IntermediateBorderInfo { + /// TODO: Consider removing this class and simplifying the structure of PBDL to + /// lay out all border options insde a single class. + @JsonKey(fromJson: _borderFromJson, name: 'borders') + PBBorder border; - num strokeWeight; + @JsonKey(name: 'strokeWeight') + num thickness; String strokeAlign; @@ -15,22 +24,37 @@ class PBBorderInfo { List strokeDashes; - num cornerRadius; + @JsonKey(name: 'cornerRadius') + num borderRadius; final pbdlType = 'border_options'; - PBBorderInfo({ - this.borders, - this.strokeWeight, + /// These gets are used in order to not break existing tag files + /// that use these attributes directly. We can deprecate these over time + /// or rethink the way borders is structured. + String get blendMode => border.blendMode; + + String get type => border.type; + + PBColor get color => border.color; + + bool get visible => border.visible; + + IntermediateBorderInfo({ + this.border, + this.thickness, this.strokeAlign, this.strokeJoin, this.strokeDashes, - this.cornerRadius, + this.borderRadius, }); @override - factory PBBorderInfo.fromJson(Map json) => - _$PBBorderInfoFromJson(json); - @override - Map toJson() => _$PBBorderInfoToJson(this); + factory IntermediateBorderInfo.fromJson(Map json) => + _$IntermediateBorderInfoFromJson(json); + + Map toJson() => _$IntermediateBorderInfoToJson(this); + + static PBBorder _borderFromJson(List borders) => + borders == null || borders.isEmpty ? null : PBBorder.fromJson(borders[0]); } diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart index 146cac49..06b42918 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.g.dart @@ -6,26 +6,25 @@ part of 'intermediate_border_info.dart'; // JsonSerializableGenerator // ************************************************************************** -PBBorderInfo _$PBBorderInfoFromJson(Map json) { - return PBBorderInfo( - borders: (json['borders'] as List) - ?.map((e) => - e == null ? null : PBBorder.fromJson(e as Map)) - ?.toList(), - strokeWeight: json['strokeWeight'] as num, +IntermediateBorderInfo _$IntermediateBorderInfoFromJson( + Map json) { + return IntermediateBorderInfo( + border: IntermediateBorderInfo._borderFromJson(json['borders'] as List), + thickness: json['strokeWeight'] as num, strokeAlign: json['strokeAlign'] as String, strokeJoin: json['strokeJoin'] as String, strokeDashes: json['strokeDashes'] as List, - cornerRadius: json['cornerRadius'] as num, + borderRadius: json['cornerRadius'] as num, ); } -Map _$PBBorderInfoToJson(PBBorderInfo instance) => +Map _$IntermediateBorderInfoToJson( + IntermediateBorderInfo instance) => { - 'borders': instance.borders?.map((e) => e?.toJson())?.toList(), - 'strokeWeight': instance.strokeWeight, + 'borders': instance.border?.toJson(), + 'strokeWeight': instance.thickness, 'strokeAlign': instance.strokeAlign, 'strokeJoin': instance.strokeJoin, 'strokeDashes': instance.strokeDashes, - 'cornerRadius': instance.cornerRadius, + 'cornerRadius': instance.borderRadius, }; diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart index 9c3bd092..eb6b0c3e 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.dart @@ -19,7 +19,7 @@ class IntermediateAuxiliaryData { /// Info relating to a elements borders. @JsonKey(name: 'borderOptions') - PBBorderInfo borderInfo; + IntermediateBorderInfo borderInfo; /// Effect for widgets List effects; diff --git a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart index 81444442..cc7f8834 100644 --- a/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart +++ b/lib/interpret_and_optimize/state_management/intermediate_auxillary_data.g.dart @@ -15,7 +15,8 @@ IntermediateAuxiliaryData _$IntermediateAuxiliaryDataFromJson( ?.toList(), borderInfo: json['borderOptions'] == null ? null - : PBBorderInfo.fromJson(json['borderOptions'] as Map), + : IntermediateBorderInfo.fromJson( + json['borderOptions'] as Map), effects: (json['effects'] as List) ?.map((e) => e == null ? null : PBEffect.fromJson(e as Map)) diff --git a/pubspec.yaml b/pubspec.yaml index 0a2c6c9f..2c5ab20a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,15 +11,15 @@ dependencies: archive: ^3.1.2 json_serializable: ^3.5.0 build_runner: ^1.10.0 - mockito: ^4.1.1 + mockito: ^5.0.7 hex: ^0.1.2 build: ^1.3.0 - logger: ^0.8.3 + logger: ^1.1.0 uuid: ^3.0.0 quick_log: ^1.1.3 http2: ^1.0.1 recase: "^3.0.0" - tuple: ^1.0.3 + tuple: ^2.0.0 path: ^1.6.0 file: ^6.1.2 pbdl: From 6304a8a3e4d8a0a904e0b66fdba385133b70559c Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Wed, 9 Mar 2022 13:54:28 -0700 Subject: [PATCH 50/56] Added null-checkers for border attributes --- .../attribute-helper/pb_box_decoration_gen_helper.dart | 2 +- .../auxilary_data_helpers/intermediate_border_info.dart | 8 ++++---- 2 files changed, 5 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 ad0534bc..708100b9 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 @@ -18,7 +18,7 @@ class PBBoxDecorationHelper extends PBAttributesHelper { if (colors != null && colors.isNotEmpty) { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } - if (borderInfo != null) { + if (borderInfo != null && borderInfo.border != null) { if (borderInfo.borderRadius != null) { // Write border radius if it exists buffer.write( diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart index db9bb37e..aafaecad 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart @@ -32,13 +32,13 @@ class IntermediateBorderInfo { /// These gets are used in order to not break existing tag files /// that use these attributes directly. We can deprecate these over time /// or rethink the way borders is structured. - String get blendMode => border.blendMode; + String get blendMode => border?.blendMode; - String get type => border.type; + String get type => border?.type; - PBColor get color => border.color; + PBColor get color => border?.color; - bool get visible => border.visible; + bool get visible => border?.visible; IntermediateBorderInfo({ this.border, From 32d61ec77302dd983b3e4b90e91f0327d645a8f2 Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Wed, 9 Mar 2022 17:21:48 -0700 Subject: [PATCH 51/56] Added name from referenceImage instead of name --- lib/interpret_and_optimize/entities/inherited_bitmap.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/interpret_and_optimize/entities/inherited_bitmap.dart b/lib/interpret_and_optimize/entities/inherited_bitmap.dart index 787f28ee..5ebf960b 100644 --- a/lib/interpret_and_optimize/entities/inherited_bitmap.dart +++ b/lib/interpret_and_optimize/entities/inherited_bitmap.dart @@ -46,8 +46,9 @@ class InheritedBitmap extends PBVisualIntermediateNode generator = PBBitmapGenerator(); childrenStrategy = NoChildStrategy(); if (name != null && name.isNotEmpty) { - ImageReferenceStorage() - .addReference(name, '${MainInfo().outputPath}assets/images'); + ImageReferenceStorage().addReference( + referenceImage.split('.').first.replaceAll('images/', ''), + '${MainInfo().outputPath}assets/images'); } } From 1967b4ff6d6667f074301322fce2332d43431f9e Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 11 Mar 2022 09:49:06 -0600 Subject: [PATCH 52/56] Give constraints correctly to Stacks. --- .../services/pb_layout_generation_service.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 38e72ea8..429a5f7e 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -169,7 +169,11 @@ class PBLayoutGenerationService extends AITHandler { ); if (tempGroup.auxiliaryData.colors != null) { - var tempContainer = InjectedContainer(null, tempGroup.frame.copyWith()) + var tempContainer = InjectedContainer( + null, + tempGroup.frame.copyWith(), + constraints: tempGroup.constraints.copyWith(), + ) ..auxiliaryData = tempGroup.auxiliaryData ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing; From e79fcf7ab331cdfeaa8ad4c70f9ec8e700ae426a Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 11 Mar 2022 12:52:20 -0700 Subject: [PATCH 53/56] Fix for bitmap naming --- lib/interpret_and_optimize/entities/inherited_bitmap.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/interpret_and_optimize/entities/inherited_bitmap.dart b/lib/interpret_and_optimize/entities/inherited_bitmap.dart index 5ebf960b..bffef89b 100644 --- a/lib/interpret_and_optimize/entities/inherited_bitmap.dart +++ b/lib/interpret_and_optimize/entities/inherited_bitmap.dart @@ -45,7 +45,7 @@ class InheritedBitmap extends PBVisualIntermediateNode }) : super(UUID, frame, name, constraints: constraints) { generator = PBBitmapGenerator(); childrenStrategy = NoChildStrategy(); - if (name != null && name.isNotEmpty) { + if (referenceImage != null && referenceImage.isNotEmpty) { ImageReferenceStorage().addReference( referenceImage.split('.').first.replaceAll('images/', ''), '${MainInfo().outputPath}assets/images'); From d9649576120882900fc8f163f436c74e494097cd Mon Sep 17 00:00:00 2001 From: Bryan Figueroa Date: Fri, 11 Mar 2022 12:52:49 -0700 Subject: [PATCH 54/56] Added name to injected container --- .../entities/layouts/auto_layout_align_strategy.dart | 1 + lib/interpret_and_optimize/helpers/align_strategy.dart | 1 + .../services/pb_layout_generation_service.dart | 7 ++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart b/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart index 6328e903..97bbb977 100644 --- a/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart +++ b/lib/interpret_and_optimize/entities/layouts/auto_layout_align_strategy.dart @@ -86,6 +86,7 @@ class AutoLayoutAlignStrategy extends AlignStrategy { var wrapper = InjectedContainer( null, child.frame, + name: child.name, pointValueHeight: isVertical ? child.layoutMainAxisSizing == ParentLayoutSizing.INHERIT : child.layoutCrossAxisSizing == ParentLayoutSizing.INHERIT, diff --git a/lib/interpret_and_optimize/helpers/align_strategy.dart b/lib/interpret_and_optimize/helpers/align_strategy.dart index 80bcd367..3711705e 100644 --- a/lib/interpret_and_optimize/helpers/align_strategy.dart +++ b/lib/interpret_and_optimize/helpers/align_strategy.dart @@ -125,6 +125,7 @@ class PositionedAlignment extends AlignStrategy { var container = InjectedContainer( null, child.frame.boundingBox(child.frame), + name: child.name, pointValueHeight: centerY, pointValueWidth: centerX, constraints: child.constraints.copyWith(), 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 38e72ea8..a0df5707 100644 --- a/lib/interpret_and_optimize/services/pb_layout_generation_service.dart +++ b/lib/interpret_and_optimize/services/pb_layout_generation_service.dart @@ -100,6 +100,7 @@ class PBLayoutGenerationService extends AITHandler { var wrapper = InjectedContainer( null, tempGroup.frame.copyWith(), + name: tempGroup.name, // Add padding padding: InjectedPadding( left: tempLayout.layoutProperties.leftPadding, @@ -169,7 +170,11 @@ class PBLayoutGenerationService extends AITHandler { ); if (tempGroup.auxiliaryData.colors != null) { - var tempContainer = InjectedContainer(null, tempGroup.frame.copyWith()) + var tempContainer = InjectedContainer( + null, + tempGroup.frame.copyWith(), + name: tempGroup.name, + ) ..auxiliaryData = tempGroup.auxiliaryData ..layoutCrossAxisSizing = tempGroup.layoutCrossAxisSizing ..layoutMainAxisSizing = tempGroup.layoutMainAxisSizing; From 49c0925c83990bd758afc13e302a209ab5069758 Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Fri, 11 Mar 2022 15:16:28 -0600 Subject: [PATCH 55/56] Fix border nullity issue --- .../attribute-helper/pb_box_decoration_gen_helper.dart | 2 +- .../auxilary_data_helpers/intermediate_border_info.dart | 2 +- 2 files changed, 2 insertions(+), 2 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 708100b9..ad0534bc 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 @@ -18,7 +18,7 @@ class PBBoxDecorationHelper extends PBAttributesHelper { if (colors != null && colors.isNotEmpty) { buffer.write(PBColorGenHelper().generate(source, generatorContext)); } - if (borderInfo != null && borderInfo.border != null) { + if (borderInfo != null) { if (borderInfo.borderRadius != null) { // Write border radius if it exists buffer.write( diff --git a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart index aafaecad..2bbf4e4b 100644 --- a/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart +++ b/lib/interpret_and_optimize/state_management/auxilary_data_helpers/intermediate_border_info.dart @@ -38,7 +38,7 @@ class IntermediateBorderInfo { PBColor get color => border?.color; - bool get visible => border?.visible; + bool get visible => border?.visible ?? false; IntermediateBorderInfo({ this.border, From c1ade51f16f199043c7b851cf696f8cff1f38fdd Mon Sep 17 00:00:00 2001 From: Ivan <42812006+ivan-015@users.noreply.github.com> Date: Sat, 12 Mar 2022 15:59:38 -0600 Subject: [PATCH 56/56] Changed version to 2.5.0 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 2c5ab20a..14754fca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: parabeac_core description: A starting point for Dart libraries or applications. -version: 2.4.0 +version: 2.5.0 # homepage: https://www.example.com environment: