diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml index df6622984508..92d538ee67b5 100644 --- a/.github/workflows/pull-requests.yml +++ b/.github/workflows/pull-requests.yml @@ -255,7 +255,7 @@ jobs: issue-number: ${{ github.event.pull_request.number }} edit-mode: replace body: | - ## [Try me](https://${{ secrets.STAGING_SERVER }}/p/?accessLevel=public&branch_name=${{ steps.extract_branch.outputs.branch }}) + ## [Try me](https://${{ secrets.STAGING_SERVER }}/p/?accessLevel=public&clone=concrete-utopia/hydrogen-editions-24&branch_name=${{ steps.extract_branch.outputs.branch }}) performance-test: name: Run Performance Tests diff --git a/editor/src/components/canvas/__snapshots__/ui-jsx-canvas-bugs.spec.tsx.snap b/editor/src/components/canvas/__snapshots__/ui-jsx-canvas-bugs.spec.tsx.snap index d01c0243995a..df7eef693210 100644 --- a/editor/src/components/canvas/__snapshots__/ui-jsx-canvas-bugs.spec.tsx.snap +++ b/editor/src/components/canvas/__snapshots__/ui-jsx-canvas-bugs.spec.tsx.snap @@ -232,8 +232,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -383,8 +398,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", diff --git a/editor/src/components/canvas/__snapshots__/ui-jsx-canvas.spec.tsx.snap b/editor/src/components/canvas/__snapshots__/ui-jsx-canvas.spec.tsx.snap index 1300f2829a97..be17ed60714a 100644 --- a/editor/src/components/canvas/__snapshots__/ui-jsx-canvas.spec.tsx.snap +++ b/editor/src/components/canvas/__snapshots__/ui-jsx-canvas.spec.tsx.snap @@ -273,8 +273,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -447,8 +462,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -916,8 +946,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -1234,8 +1279,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -1407,8 +1467,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -1580,8 +1655,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -1753,8 +1843,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -2031,8 +2136,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -2205,8 +2325,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -2485,8 +2620,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -2762,8 +2912,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -2936,8 +3101,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -3090,8 +3270,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -3385,8 +3580,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -3559,8 +3769,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -3940,8 +4165,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -4287,8 +4527,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -4489,8 +4744,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -4657,8 +4927,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -4859,8 +5144,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -5027,8 +5327,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -5229,8 +5544,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -5397,8 +5727,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -5743,8 +6088,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -5917,8 +6277,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -6519,8 +6894,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -7087,8 +7477,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -7495,8 +7900,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -7869,8 +8289,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -8091,8 +8526,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -8279,8 +8729,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -8501,8 +8966,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -8689,8 +9169,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -8911,8 +9406,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -9099,8 +9609,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -9507,8 +10032,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -9881,8 +10421,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -10103,8 +10658,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -10291,8 +10861,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -10513,8 +11098,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -10701,8 +11301,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -10923,8 +11538,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -11111,8 +11741,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -11519,8 +12164,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -11893,8 +12553,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -12115,8 +12790,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -12303,8 +12993,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -12525,8 +13230,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -12713,8 +13433,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -12935,8 +13670,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -13123,8 +13873,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -13412,8 +14177,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -13586,8 +14366,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -13801,163 +14596,23 @@ Object { "y": 0, }, "padding": Object {}, - "parentFlexDirection": null, - "parentFlexGap": 0, - "parentHugsOnMainAxis": false, - "parentJustifyContent": null, - "parentLayoutSystem": "flow", - "parentPadding": Object {}, - "parentTextDirection": "ltr", - "position": null, - "providesBoundsForAbsoluteChildren": false, - "renderedChildrenCount": 0, - "rowGap": null, - "textBounds": null, - "textDecorationLine": null, - "usesParentBounds": false, - }, - "textContent": null, - }, - "utopia-storyboard-uid/scene-aaa/app-entity:zzz/aaa": Object { - "assignedToProp": null, - "attributeMetadata": Object {}, - "componentInstance": true, - "computedStyle": Object {}, - "conditionValue": "not-a-conditional", - "earlyReturn": null, - "element": Object { - "type": "RIGHT", - "value": Object { - "children": Array [], - "name": Object { - "baseVariable": "Thing", - "propertyPath": Object { - "propertyElements": Array [], - }, - }, - "props": Array [ - Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "key": "data-uid", - "type": "JSX_ATTRIBUTES_ENTRY", - "value": Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "type": "ATTRIBUTE_VALUE", - "uid": "", - "value": "aaa", - }, - }, - ], - "type": "JSX_ELEMENT", - "uid": "", - }, - }, - "elementPath": Object { - "parts": Array [ - Array [ - "utopia-storyboard-uid", - "scene-aaa", - "app-entity", - ], - Array [ - "zzz", - "aaa", - ], - ], - "type": "elementpath", - }, - "globalFrame": null, - "importInfo": Object { - "filePath": "test.js", - "type": "SAME_FILE_ORIGIN", - "variableName": "Thing", - }, - "isEmotionOrStyledComponent": false, - "label": null, - "nonRoundedGlobalFrame": null, - "specialSizeMeasurements": Object { - "alignContent": null, - "alignItems": null, - "alignSelf": null, - "borderRadius": null, - "clientHeight": 0, - "clientWidth": 0, - "closestOffsetParentPath": Object { - "parts": Array [], - "type": "elementpath", - }, - "columnGap": null, - "computedHugProperty": Object { - "height": null, - "width": null, - }, - "containerGridProperties": Object { + "parentContainerGridProperties": Object { "gridAutoColumns": null, "gridAutoFlow": null, "gridAutoRows": null, "gridTemplateColumns": null, "gridTemplateRows": null, }, - "containerGridPropertiesFromProps": Object { + "parentContainerGridPropertiesFromProps": Object { "gridAutoColumns": null, "gridAutoFlow": null, "gridAutoRows": null, "gridTemplateColumns": null, "gridTemplateRows": null, }, - "coordinateSystemBounds": null, - "display": "initial", - "elementGridProperties": Object { - "gridColumnEnd": null, - "gridColumnStart": null, - "gridRowEnd": null, - "gridRowStart": null, - }, - "elementGridPropertiesFromProps": Object { - "gridColumnEnd": null, - "gridColumnStart": null, - "gridRowEnd": null, - "gridRowStart": null, - }, - "flexDirection": null, - "float": "none", - "fontSize": null, - "fontStyle": null, - "fontWeight": null, - "gap": null, - "globalContentBoxForChildren": null, - "globalFrameWithTextContent": null, - "gridCellGlobalFrames": null, - "hasPositionOffset": false, - "hasTransform": false, - "htmlElementName": "div", - "immediateParentBounds": Object { - "height": 0, - "width": 0, - "x": 0, - "y": 0, - }, - "immediateParentProvidesLayout": true, - "justifyContent": null, - "justifySelf": null, - "layoutSystemForChildren": null, - "layoutSystemForChildrenInherited": false, - "margin": Object {}, - "naturalHeight": null, - "naturalWidth": null, - "offset": Object { - "x": 0, - "y": 0, - }, - "padding": Object {}, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -13973,7 +14628,7 @@ Object { }, "textContent": null, }, - "utopia-storyboard-uid/scene-aaa/app-entity:zzz/bbb": Object { + "utopia-storyboard-uid/scene-aaa/app-entity:zzz/aaa": Object { "assignedToProp": null, "attributeMetadata": Object {}, "componentInstance": true, @@ -14005,7 +14660,7 @@ Object { }, "type": "ATTRIBUTE_VALUE", "uid": "", - "value": "bbb", + "value": "aaa", }, }, ], @@ -14022,7 +14677,7 @@ Object { ], Array [ "zzz", - "bbb", + "aaa", ], ], "type": "elementpath", @@ -14111,8 +14766,193 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, + "parentHugsOnMainAxis": false, + "parentJustifyContent": null, + "parentLayoutSystem": "flow", + "parentPadding": Object {}, + "parentTextDirection": "ltr", + "position": null, + "providesBoundsForAbsoluteChildren": false, + "renderedChildrenCount": 0, + "rowGap": null, + "textBounds": null, + "textDecorationLine": null, + "usesParentBounds": false, + }, + "textContent": null, + }, + "utopia-storyboard-uid/scene-aaa/app-entity:zzz/bbb": Object { + "assignedToProp": null, + "attributeMetadata": Object {}, + "componentInstance": true, + "computedStyle": Object {}, + "conditionValue": "not-a-conditional", + "earlyReturn": null, + "element": Object { + "type": "RIGHT", + "value": Object { + "children": Array [], + "name": Object { + "baseVariable": "Thing", + "propertyPath": Object { + "propertyElements": Array [], + }, + }, + "props": Array [ + Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "key": "data-uid", + "type": "JSX_ATTRIBUTES_ENTRY", + "value": Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "type": "ATTRIBUTE_VALUE", + "uid": "", + "value": "bbb", + }, + }, + ], + "type": "JSX_ELEMENT", + "uid": "", + }, + }, + "elementPath": Object { + "parts": Array [ + Array [ + "utopia-storyboard-uid", + "scene-aaa", + "app-entity", + ], + Array [ + "zzz", + "bbb", + ], + ], + "type": "elementpath", + }, + "globalFrame": null, + "importInfo": Object { + "filePath": "test.js", + "type": "SAME_FILE_ORIGIN", + "variableName": "Thing", + }, + "isEmotionOrStyledComponent": false, + "label": null, + "nonRoundedGlobalFrame": null, + "specialSizeMeasurements": Object { + "alignContent": null, + "alignItems": null, + "alignSelf": null, + "borderRadius": null, + "clientHeight": 0, + "clientWidth": 0, + "closestOffsetParentPath": Object { + "parts": Array [], + "type": "elementpath", + }, + "columnGap": null, + "computedHugProperty": Object { + "height": null, + "width": null, + }, + "containerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "containerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "coordinateSystemBounds": null, + "display": "initial", + "elementGridProperties": Object { + "gridColumnEnd": null, + "gridColumnStart": null, + "gridRowEnd": null, + "gridRowStart": null, + }, + "elementGridPropertiesFromProps": Object { + "gridColumnEnd": null, + "gridColumnStart": null, + "gridRowEnd": null, + "gridRowStart": null, + }, + "flexDirection": null, + "float": "none", + "fontSize": null, + "fontStyle": null, + "fontWeight": null, + "gap": null, + "globalContentBoxForChildren": null, + "globalFrameWithTextContent": null, + "gridCellGlobalFrames": null, + "hasPositionOffset": false, + "hasTransform": false, + "htmlElementName": "div", + "immediateParentBounds": Object { + "height": 0, + "width": 0, + "x": 0, + "y": 0, + }, + "immediateParentProvidesLayout": true, + "justifyContent": null, + "justifySelf": null, + "layoutSystemForChildren": null, + "layoutSystemForChildrenInherited": false, + "margin": Object {}, + "naturalHeight": null, + "naturalWidth": null, + "offset": Object { + "x": 0, + "y": 0, + }, + "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentFlexDirection": null, + "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -14388,8 +15228,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -14562,8 +15417,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -14829,8 +15699,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -15124,8 +16009,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -15298,8 +16198,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -15696,8 +16611,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -16059,8 +16989,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -16281,8 +17226,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -16503,8 +17463,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -16725,8 +17700,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -17020,8 +18010,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -17194,8 +18199,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -17592,8 +18612,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -17955,8 +18990,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -18177,8 +19227,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -18399,8 +19464,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -18621,8 +19701,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -18910,8 +20005,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -19084,8 +20194,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -19299,8 +20424,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -19454,8 +20594,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -19609,8 +20764,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -19898,8 +21068,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -20072,8 +21257,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -20392,8 +21592,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -20678,8 +21893,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -20834,8 +22064,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -20990,8 +22235,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -21295,8 +22555,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -21484,8 +22759,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -21952,8 +23242,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -22239,8 +23544,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -22543,8 +23863,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -22732,8 +24067,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -23200,8 +24550,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -23487,8 +24852,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -23792,8 +25172,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -23981,8 +25376,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -24500,8 +25910,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -24838,8 +26263,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -25143,8 +26583,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -25332,8 +26787,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -25851,8 +27321,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -26189,8 +27674,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -26465,8 +27965,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -26639,8 +28154,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -26793,8 +28323,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -27192,8 +28737,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -27366,8 +28926,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -29298,8 +30873,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -30776,8 +32366,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -32220,8 +33825,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -32846,8 +34466,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -33200,8 +34835,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -33826,8 +35476,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -34180,8 +35845,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -34806,8 +36486,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -35160,8 +36855,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -35824,8 +37534,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -36220,8 +37945,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -36884,8 +38624,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -37280,8 +39035,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -37944,8 +39714,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -38340,8 +40125,23 @@ export var storyboard = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -38639,8 +40439,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -38813,8 +40628,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -39062,8 +40892,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -39234,8 +41079,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -39406,8 +41266,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -39684,8 +41559,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -39858,8 +41748,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -40079,8 +41984,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -40356,8 +42276,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -40530,8 +42465,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -40855,8 +42805,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -41178,8 +43143,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -41352,8 +43332,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -41634,8 +43629,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -41865,8 +43875,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -42045,8 +44070,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -42350,8 +44390,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -42539,8 +44594,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -42898,8 +44968,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -43079,8 +45164,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -43537,8 +45637,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -43726,8 +45841,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -44087,8 +46217,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -44268,8 +46413,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -44657,8 +46817,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -44830,8 +47005,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -45628,8 +47818,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -45784,8 +47989,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -45940,8 +48160,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -46096,8 +48331,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -46254,8 +48504,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -46410,8 +48675,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -46566,8 +48846,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -46722,8 +49017,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -46946,8 +49256,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -47131,8 +49456,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -47289,8 +49629,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -47445,8 +49800,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -47601,8 +49971,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -47757,8 +50142,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -47913,8 +50313,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -48069,8 +50484,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -48225,8 +50655,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -48381,8 +50826,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -48537,8 +50997,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -48693,8 +51168,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -48849,8 +51339,23 @@ export var App = (props) => { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -49144,8 +51649,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -49318,8 +51838,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -49716,8 +52251,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -50079,8 +52629,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -50301,8 +52866,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -50523,8 +53103,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -50745,8 +53340,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -51040,8 +53650,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -51214,8 +53839,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -51611,8 +54251,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -51973,230 +54628,23 @@ Object { "y": 0, }, "padding": Object {}, - "parentFlexDirection": null, - "parentFlexGap": 0, - "parentHugsOnMainAxis": false, - "parentJustifyContent": null, - "parentLayoutSystem": "flow", - "parentPadding": Object {}, - "parentTextDirection": "ltr", - "position": null, - "providesBoundsForAbsoluteChildren": false, - "renderedChildrenCount": 0, - "rowGap": null, - "textBounds": null, - "textDecorationLine": null, - "usesParentBounds": false, - }, - "textContent": null, - }, - "utopia-storyboard-uid/scene-aaa/app-entity:aaa/fc8/bbb~~~1": Object { - "assignedToProp": null, - "attributeMetadata": Object {}, - "componentInstance": true, - "computedStyle": Object {}, - "conditionValue": "not-a-conditional", - "earlyReturn": null, - "element": Object { - "type": "RIGHT", - "value": Object { - "children": Array [], - "name": Object { - "baseVariable": "MyCard", - "propertyPath": Object { - "propertyElements": Array [], - }, - }, - "props": Array [ - Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "key": "data-uid", - "type": "JSX_ATTRIBUTES_ENTRY", - "value": Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "type": "ATTRIBUTE_VALUE", - "uid": "", - "value": "bbb~~~1", - }, - }, - Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "key": "title", - "type": "JSX_ATTRIBUTES_ENTRY", - "value": Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "definedElsewhere": Array [ - "div", - ], - "elementsWithin": Object {}, - "javascriptWithUIDs": "'n' + div;", - "originalJavascript": "'n' + div", - "params": Array [], - "sourceMap": Object { - "file": "code.tsx", - "mappings": "OAQ+CA,MAADC,GAACD", - "names": Array [ - "n", - "'", - ], - "sources": Array [ - "code.tsx", - ], - "sourcesContent": Array [ - " - import * as React from \\"react\\" - import { View, Storyboard, Scene } from 'utopia-api' - - const MyCard = (props) =>
{props.title}
- export var App = props => { - return - {[1,2,3].map(div => ( - - ))} - - } - export var storyboard = (props) => { - return ( - - - - - - ) - } - ", - ], - "version": 3, - }, - "transpiledJavascript": "return 'n' + div;", - "type": "ATTRIBUTE_OTHER_JAVASCRIPT", - "uid": "", - }, - }, - ], - "type": "JSX_ELEMENT", - "uid": "", - }, - }, - "elementPath": Object { - "parts": Array [ - Array [ - "utopia-storyboard-uid", - "scene-aaa", - "app-entity", - ], - Array [ - "aaa", - "fc8", - "bbb~~~1", - ], - ], - "type": "elementpath", - }, - "globalFrame": null, - "importInfo": Object { - "filePath": "test.js", - "type": "SAME_FILE_ORIGIN", - "variableName": "MyCard", - }, - "isEmotionOrStyledComponent": false, - "label": null, - "nonRoundedGlobalFrame": null, - "specialSizeMeasurements": Object { - "alignContent": null, - "alignItems": null, - "alignSelf": null, - "borderRadius": null, - "clientHeight": 0, - "clientWidth": 0, - "closestOffsetParentPath": Object { - "parts": Array [], - "type": "elementpath", - }, - "columnGap": null, - "computedHugProperty": Object { - "height": null, - "width": null, - }, - "containerGridProperties": Object { + "parentContainerGridProperties": Object { "gridAutoColumns": null, "gridAutoFlow": null, "gridAutoRows": null, "gridTemplateColumns": null, "gridTemplateRows": null, }, - "containerGridPropertiesFromProps": Object { + "parentContainerGridPropertiesFromProps": Object { "gridAutoColumns": null, "gridAutoFlow": null, "gridAutoRows": null, "gridTemplateColumns": null, "gridTemplateRows": null, }, - "coordinateSystemBounds": null, - "display": "initial", - "elementGridProperties": Object { - "gridColumnEnd": null, - "gridColumnStart": null, - "gridRowEnd": null, - "gridRowStart": null, - }, - "elementGridPropertiesFromProps": Object { - "gridColumnEnd": null, - "gridColumnStart": null, - "gridRowEnd": null, - "gridRowStart": null, - }, - "flexDirection": null, - "float": "none", - "fontSize": null, - "fontStyle": null, - "fontWeight": null, - "gap": null, - "globalContentBoxForChildren": null, - "globalFrameWithTextContent": null, - "gridCellGlobalFrames": null, - "hasPositionOffset": false, - "hasTransform": false, - "htmlElementName": "div", - "immediateParentBounds": Object { - "height": 0, - "width": 0, - "x": 0, - "y": 0, - }, - "immediateParentProvidesLayout": true, - "justifyContent": null, - "justifySelf": null, - "layoutSystemForChildren": null, - "layoutSystemForChildrenInherited": false, - "margin": Object {}, - "naturalHeight": null, - "naturalWidth": null, - "offset": Object { - "x": 0, - "y": 0, - }, - "padding": Object {}, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -52212,7 +54660,244 @@ Object { }, "textContent": null, }, - "utopia-storyboard-uid/scene-aaa/app-entity:aaa/fc8/bbb~~~2": Object { + "utopia-storyboard-uid/scene-aaa/app-entity:aaa/fc8/bbb~~~1": Object { + "assignedToProp": null, + "attributeMetadata": Object {}, + "componentInstance": true, + "computedStyle": Object {}, + "conditionValue": "not-a-conditional", + "earlyReturn": null, + "element": Object { + "type": "RIGHT", + "value": Object { + "children": Array [], + "name": Object { + "baseVariable": "MyCard", + "propertyPath": Object { + "propertyElements": Array [], + }, + }, + "props": Array [ + Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "key": "data-uid", + "type": "JSX_ATTRIBUTES_ENTRY", + "value": Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "type": "ATTRIBUTE_VALUE", + "uid": "", + "value": "bbb~~~1", + }, + }, + Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "key": "title", + "type": "JSX_ATTRIBUTES_ENTRY", + "value": Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "definedElsewhere": Array [ + "div", + ], + "elementsWithin": Object {}, + "javascriptWithUIDs": "'n' + div;", + "originalJavascript": "'n' + div", + "params": Array [], + "sourceMap": Object { + "file": "code.tsx", + "mappings": "OAQ+CA,MAADC,GAACD", + "names": Array [ + "n", + "'", + ], + "sources": Array [ + "code.tsx", + ], + "sourcesContent": Array [ + " + import * as React from \\"react\\" + import { View, Storyboard, Scene } from 'utopia-api' + + const MyCard = (props) =>
{props.title}
+ export var App = props => { + return + {[1,2,3].map(div => ( + + ))} + + } + export var storyboard = (props) => { + return ( + + + + + + ) + } + ", + ], + "version": 3, + }, + "transpiledJavascript": "return 'n' + div;", + "type": "ATTRIBUTE_OTHER_JAVASCRIPT", + "uid": "", + }, + }, + ], + "type": "JSX_ELEMENT", + "uid": "", + }, + }, + "elementPath": Object { + "parts": Array [ + Array [ + "utopia-storyboard-uid", + "scene-aaa", + "app-entity", + ], + Array [ + "aaa", + "fc8", + "bbb~~~1", + ], + ], + "type": "elementpath", + }, + "globalFrame": null, + "importInfo": Object { + "filePath": "test.js", + "type": "SAME_FILE_ORIGIN", + "variableName": "MyCard", + }, + "isEmotionOrStyledComponent": false, + "label": null, + "nonRoundedGlobalFrame": null, + "specialSizeMeasurements": Object { + "alignContent": null, + "alignItems": null, + "alignSelf": null, + "borderRadius": null, + "clientHeight": 0, + "clientWidth": 0, + "closestOffsetParentPath": Object { + "parts": Array [], + "type": "elementpath", + }, + "columnGap": null, + "computedHugProperty": Object { + "height": null, + "width": null, + }, + "containerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "containerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "coordinateSystemBounds": null, + "display": "initial", + "elementGridProperties": Object { + "gridColumnEnd": null, + "gridColumnStart": null, + "gridRowEnd": null, + "gridRowStart": null, + }, + "elementGridPropertiesFromProps": Object { + "gridColumnEnd": null, + "gridColumnStart": null, + "gridRowEnd": null, + "gridRowStart": null, + }, + "flexDirection": null, + "float": "none", + "fontSize": null, + "fontStyle": null, + "fontWeight": null, + "gap": null, + "globalContentBoxForChildren": null, + "globalFrameWithTextContent": null, + "gridCellGlobalFrames": null, + "hasPositionOffset": false, + "hasTransform": false, + "htmlElementName": "div", + "immediateParentBounds": Object { + "height": 0, + "width": 0, + "x": 0, + "y": 0, + }, + "immediateParentProvidesLayout": true, + "justifyContent": null, + "justifySelf": null, + "layoutSystemForChildren": null, + "layoutSystemForChildrenInherited": false, + "margin": Object {}, + "naturalHeight": null, + "naturalWidth": null, + "offset": Object { + "x": 0, + "y": 0, + }, + "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentFlexDirection": null, + "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, + "parentHugsOnMainAxis": false, + "parentJustifyContent": null, + "parentLayoutSystem": "flow", + "parentPadding": Object {}, + "parentTextDirection": "ltr", + "position": null, + "providesBoundsForAbsoluteChildren": false, + "renderedChildrenCount": 0, + "rowGap": null, + "textBounds": null, + "textDecorationLine": null, + "usesParentBounds": false, + }, + "textContent": null, + }, + "utopia-storyboard-uid/scene-aaa/app-entity:aaa/fc8/bbb~~~2": Object { "assignedToProp": null, "attributeMetadata": Object {}, "componentInstance": true, @@ -52417,8 +55102,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -52639,8 +55339,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -52934,8 +55649,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -53108,8 +55838,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -53549,8 +56294,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -53955,8 +56715,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -54177,230 +56952,23 @@ Object { "y": 0, }, "padding": Object {}, - "parentFlexDirection": null, - "parentFlexGap": 0, - "parentHugsOnMainAxis": false, - "parentJustifyContent": null, - "parentLayoutSystem": "flow", - "parentPadding": Object {}, - "parentTextDirection": "ltr", - "position": null, - "providesBoundsForAbsoluteChildren": false, - "renderedChildrenCount": 0, - "rowGap": null, - "textBounds": null, - "textDecorationLine": null, - "usesParentBounds": false, - }, - "textContent": null, - }, - "utopia-storyboard-uid/scene-aaa/app-entity:aaa/032/bbb~~~2": Object { - "assignedToProp": null, - "attributeMetadata": Object {}, - "componentInstance": true, - "computedStyle": Object {}, - "conditionValue": "not-a-conditional", - "earlyReturn": null, - "element": Object { - "type": "RIGHT", - "value": Object { - "children": Array [], - "name": Object { - "baseVariable": "MyCard", - "propertyPath": Object { - "propertyElements": Array [], - }, - }, - "props": Array [ - Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "key": "data-uid", - "type": "JSX_ATTRIBUTES_ENTRY", - "value": Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "type": "ATTRIBUTE_VALUE", - "uid": "", - "value": "bbb~~~2", - }, - }, - Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "key": "title", - "type": "JSX_ATTRIBUTES_ENTRY", - "value": Object { - "comments": Object { - "leadingComments": Array [], - "trailingComments": Array [], - }, - "definedElsewhere": Array [ - "n", - ], - "elementsWithin": Object {}, - "javascriptWithUIDs": "'n' + n;", - "originalJavascript": "'n' + n", - "params": Array [], - "sourceMap": Object { - "file": "code.tsx", - "mappings": "OAS+CA,MAADC,CAACD", - "names": Array [ - "n", - "'", - ], - "sources": Array [ - "code.tsx", - ], - "sourcesContent": Array [ - " - import * as React from \\"react\\" - import { View, Storyboard, Scene } from 'utopia-api' - - const MyCard = (props) =>
{props.title}
- export var App = props => { - const nestedThings = [ {a: { b: { c: [ 1 ] } } }, {a: { b: { c: [ 2 ] } } }, {a: { b: { c: [ 3 ] } } } ] - return - {nestedThings.map(({ a: { b: { c: [ n ] } } }) => ( - - ))} - - } - export var storyboard = (props) => { - return ( - - - - - - ) - }", - ], - "version": 3, - }, - "transpiledJavascript": "return 'n' + n;", - "type": "ATTRIBUTE_OTHER_JAVASCRIPT", - "uid": "", - }, - }, - ], - "type": "JSX_ELEMENT", - "uid": "", - }, - }, - "elementPath": Object { - "parts": Array [ - Array [ - "utopia-storyboard-uid", - "scene-aaa", - "app-entity", - ], - Array [ - "aaa", - "032", - "bbb~~~2", - ], - ], - "type": "elementpath", - }, - "globalFrame": null, - "importInfo": Object { - "filePath": "test.js", - "type": "SAME_FILE_ORIGIN", - "variableName": "MyCard", - }, - "isEmotionOrStyledComponent": false, - "label": null, - "nonRoundedGlobalFrame": null, - "specialSizeMeasurements": Object { - "alignContent": null, - "alignItems": null, - "alignSelf": null, - "borderRadius": null, - "clientHeight": 0, - "clientWidth": 0, - "closestOffsetParentPath": Object { - "parts": Array [], - "type": "elementpath", - }, - "columnGap": null, - "computedHugProperty": Object { - "height": null, - "width": null, - }, - "containerGridProperties": Object { + "parentContainerGridProperties": Object { "gridAutoColumns": null, "gridAutoFlow": null, "gridAutoRows": null, "gridTemplateColumns": null, "gridTemplateRows": null, }, - "containerGridPropertiesFromProps": Object { + "parentContainerGridPropertiesFromProps": Object { "gridAutoColumns": null, "gridAutoFlow": null, "gridAutoRows": null, "gridTemplateColumns": null, "gridTemplateRows": null, }, - "coordinateSystemBounds": null, - "display": "initial", - "elementGridProperties": Object { - "gridColumnEnd": null, - "gridColumnStart": null, - "gridRowEnd": null, - "gridRowStart": null, - }, - "elementGridPropertiesFromProps": Object { - "gridColumnEnd": null, - "gridColumnStart": null, - "gridRowEnd": null, - "gridRowStart": null, - }, - "flexDirection": null, - "float": "none", - "fontSize": null, - "fontStyle": null, - "fontWeight": null, - "gap": null, - "globalContentBoxForChildren": null, - "globalFrameWithTextContent": null, - "gridCellGlobalFrames": null, - "hasPositionOffset": false, - "hasTransform": false, - "htmlElementName": "div", - "immediateParentBounds": Object { - "height": 0, - "width": 0, - "x": 0, - "y": 0, - }, - "immediateParentProvidesLayout": true, - "justifyContent": null, - "justifySelf": null, - "layoutSystemForChildren": null, - "layoutSystemForChildrenInherited": false, - "margin": Object {}, - "naturalHeight": null, - "naturalWidth": null, - "offset": Object { - "x": 0, - "y": 0, - }, - "padding": Object {}, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -54416,7 +56984,244 @@ Object { }, "textContent": null, }, - "utopia-storyboard-uid/scene-aaa/app-entity:aaa/032/bbb~~~3": Object { + "utopia-storyboard-uid/scene-aaa/app-entity:aaa/032/bbb~~~2": Object { + "assignedToProp": null, + "attributeMetadata": Object {}, + "componentInstance": true, + "computedStyle": Object {}, + "conditionValue": "not-a-conditional", + "earlyReturn": null, + "element": Object { + "type": "RIGHT", + "value": Object { + "children": Array [], + "name": Object { + "baseVariable": "MyCard", + "propertyPath": Object { + "propertyElements": Array [], + }, + }, + "props": Array [ + Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "key": "data-uid", + "type": "JSX_ATTRIBUTES_ENTRY", + "value": Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "type": "ATTRIBUTE_VALUE", + "uid": "", + "value": "bbb~~~2", + }, + }, + Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "key": "title", + "type": "JSX_ATTRIBUTES_ENTRY", + "value": Object { + "comments": Object { + "leadingComments": Array [], + "trailingComments": Array [], + }, + "definedElsewhere": Array [ + "n", + ], + "elementsWithin": Object {}, + "javascriptWithUIDs": "'n' + n;", + "originalJavascript": "'n' + n", + "params": Array [], + "sourceMap": Object { + "file": "code.tsx", + "mappings": "OAS+CA,MAADC,CAACD", + "names": Array [ + "n", + "'", + ], + "sources": Array [ + "code.tsx", + ], + "sourcesContent": Array [ + " + import * as React from \\"react\\" + import { View, Storyboard, Scene } from 'utopia-api' + + const MyCard = (props) =>
{props.title}
+ export var App = props => { + const nestedThings = [ {a: { b: { c: [ 1 ] } } }, {a: { b: { c: [ 2 ] } } }, {a: { b: { c: [ 3 ] } } } ] + return + {nestedThings.map(({ a: { b: { c: [ n ] } } }) => ( + + ))} + + } + export var storyboard = (props) => { + return ( + + + + + + ) + }", + ], + "version": 3, + }, + "transpiledJavascript": "return 'n' + n;", + "type": "ATTRIBUTE_OTHER_JAVASCRIPT", + "uid": "", + }, + }, + ], + "type": "JSX_ELEMENT", + "uid": "", + }, + }, + "elementPath": Object { + "parts": Array [ + Array [ + "utopia-storyboard-uid", + "scene-aaa", + "app-entity", + ], + Array [ + "aaa", + "032", + "bbb~~~2", + ], + ], + "type": "elementpath", + }, + "globalFrame": null, + "importInfo": Object { + "filePath": "test.js", + "type": "SAME_FILE_ORIGIN", + "variableName": "MyCard", + }, + "isEmotionOrStyledComponent": false, + "label": null, + "nonRoundedGlobalFrame": null, + "specialSizeMeasurements": Object { + "alignContent": null, + "alignItems": null, + "alignSelf": null, + "borderRadius": null, + "clientHeight": 0, + "clientWidth": 0, + "closestOffsetParentPath": Object { + "parts": Array [], + "type": "elementpath", + }, + "columnGap": null, + "computedHugProperty": Object { + "height": null, + "width": null, + }, + "containerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "containerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "coordinateSystemBounds": null, + "display": "initial", + "elementGridProperties": Object { + "gridColumnEnd": null, + "gridColumnStart": null, + "gridRowEnd": null, + "gridRowStart": null, + }, + "elementGridPropertiesFromProps": Object { + "gridColumnEnd": null, + "gridColumnStart": null, + "gridRowEnd": null, + "gridRowStart": null, + }, + "flexDirection": null, + "float": "none", + "fontSize": null, + "fontStyle": null, + "fontWeight": null, + "gap": null, + "globalContentBoxForChildren": null, + "globalFrameWithTextContent": null, + "gridCellGlobalFrames": null, + "hasPositionOffset": false, + "hasTransform": false, + "htmlElementName": "div", + "immediateParentBounds": Object { + "height": 0, + "width": 0, + "x": 0, + "y": 0, + }, + "immediateParentProvidesLayout": true, + "justifyContent": null, + "justifySelf": null, + "layoutSystemForChildren": null, + "layoutSystemForChildrenInherited": false, + "margin": Object {}, + "naturalHeight": null, + "naturalWidth": null, + "offset": Object { + "x": 0, + "y": 0, + }, + "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentFlexDirection": null, + "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, + "parentHugsOnMainAxis": false, + "parentJustifyContent": null, + "parentLayoutSystem": "flow", + "parentPadding": Object {}, + "parentTextDirection": "ltr", + "position": null, + "providesBoundsForAbsoluteChildren": false, + "renderedChildrenCount": 0, + "rowGap": null, + "textBounds": null, + "textDecorationLine": null, + "usesParentBounds": false, + }, + "textContent": null, + }, + "utopia-storyboard-uid/scene-aaa/app-entity:aaa/032/bbb~~~3": Object { "assignedToProp": null, "attributeMetadata": Object {}, "componentInstance": true, @@ -54621,8 +57426,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -54922,8 +57742,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -55111,8 +57946,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -55379,8 +58229,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -55560,8 +58425,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -55839,8 +58719,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -55990,8 +58885,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -56189,8 +59099,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -56350,8 +59275,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -56511,8 +59451,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -56777,8 +59732,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -56928,8 +59898,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -57185,8 +60170,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -57384,8 +60384,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -57546,8 +60561,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -57800,8 +60830,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -57951,8 +60996,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -58218,8 +61278,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -58394,8 +61469,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -58648,8 +61738,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -58799,8 +61904,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -58953,8 +62073,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -59215,8 +62350,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -59366,8 +62516,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -59598,8 +62763,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -59779,8 +62959,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -60035,8 +63230,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -60186,8 +63396,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -60515,8 +63740,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -60710,8 +63950,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -60905,8 +64160,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -61160,8 +64430,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -61311,8 +64596,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -61482,8 +64782,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -61782,8 +65097,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -61956,8 +65286,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -62467,8 +65812,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -62628,8 +65988,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -62903,8 +66278,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -63176,8 +66566,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -63373,8 +66778,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -63568,8 +66988,23 @@ export var storyboard = ( "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -63850,8 +67285,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -64024,8 +67474,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -64227,8 +67692,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -64399,8 +67879,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -64679,8 +68174,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -64853,8 +68363,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -65007,8 +68532,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -65317,8 +68857,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -65491,8 +69046,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -65914,8 +69484,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -66302,8 +69887,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -66538,8 +70138,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -66744,8 +70359,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -66916,8 +70546,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -67152,8 +70797,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -67358,8 +71018,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -67530,8 +71205,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -67766,8 +71456,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -67972,8 +71677,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -68144,8 +71864,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -68423,8 +72158,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -68597,8 +72347,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -68751,8 +72516,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -69040,8 +72820,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -69214,8 +73009,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -69436,8 +73246,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -69628,8 +73453,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", @@ -69790,8 +73630,23 @@ Object { "y": 0, }, "padding": Object {}, + "parentContainerGridProperties": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, + "parentContainerGridPropertiesFromProps": Object { + "gridAutoColumns": null, + "gridAutoFlow": null, + "gridAutoRows": null, + "gridTemplateColumns": null, + "gridTemplateRows": null, + }, "parentFlexDirection": null, "parentFlexGap": 0, + "parentGridCellGlobalFrames": null, "parentHugsOnMainAxis": false, "parentJustifyContent": null, "parentLayoutSystem": "flow", diff --git a/editor/src/components/canvas/canvas-strategies/strategies/absolute-reparent-strategy.tsx b/editor/src/components/canvas/canvas-strategies/strategies/absolute-reparent-strategy.tsx index 504a642b1f0d..587de432e8c3 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/absolute-reparent-strategy.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/absolute-reparent-strategy.tsx @@ -37,6 +37,7 @@ import type { InteractionSession, UpdatedPathMap } from '../interaction-state' import { absoluteMoveStrategy } from './absolute-move-strategy' import { honoursPropsPosition, shouldKeepMovingDraggedGroupChildren } from './absolute-utils' import { replaceFragmentLikePathsWithTheirChildrenRecursive } from './fragment-like-helpers' +import type { ShouldAddContainLayout } from './reparent-helpers/reparent-helpers' import { ifAllowedToReparent, isAllowedToReparent } from './reparent-helpers/reparent-helpers' import type { ForcePins } from './reparent-helpers/reparent-property-changes' import { getAbsoluteReparentPropertyChanges } from './reparent-helpers/reparent-property-changes' @@ -184,6 +185,12 @@ export function applyAbsoluteReparent( projectContents, nodeModules, 'force-pins', + shouldAddContainLayout( + canvasState.startingMetadata, + canvasState.startingAllElementProps, + canvasState.startingElementPathTree, + newParent.intendedParentPath, + ), ), selectedElements, ) @@ -254,6 +261,7 @@ export function createAbsoluteReparentAndOffsetCommands( projectContents: ProjectContentTreeRoot, nodeModules: NodeModules, forcePins: ForcePins, + willContainLayoutBeAdded: ShouldAddContainLayout, ) { const reparentResult = getReparentOutcome( metadata, @@ -271,12 +279,13 @@ export function createAbsoluteReparentAndOffsetCommands( if (reparentResult == null) { return null } else { - const offsetCommands = replaceFragmentLikePathsWithTheirChildrenRecursive( + const replacedPaths = replaceFragmentLikePathsWithTheirChildrenRecursive( metadata, elementProps, pathTree, [target], - ).flatMap((p) => { + ) + const offsetCommands = replacedPaths.flatMap((p) => { return getAbsoluteReparentPropertyChanges( p, newParent.intendedParentPath, @@ -284,6 +293,7 @@ export function createAbsoluteReparentAndOffsetCommands( metadata, projectContents, forcePins, + willContainLayoutBeAdded, ) }) @@ -296,12 +306,12 @@ export function createAbsoluteReparentAndOffsetCommands( } } -function maybeAddContainLayout( +export function shouldAddContainLayout( metadata: ElementInstanceMetadataMap, allElementProps: AllElementProps, pathTrees: ElementPathTrees, path: ElementPath, -): CanvasCommand[] { +): ShouldAddContainLayout { const closestNonFragmentParent = MetadataUtils.getClosestNonFragmentParent( metadata, allElementProps, @@ -310,14 +320,23 @@ function maybeAddContainLayout( ) if (EP.isStoryboardPath(closestNonFragmentParent)) { - return [] + return 'dont-add-contain-layout' } const parentProvidesBoundsForAbsoluteChildren = MetadataUtils.findElementByElementPath(metadata, closestNonFragmentParent) ?.specialSizeMeasurements.providesBoundsForAbsoluteChildren === true - return parentProvidesBoundsForAbsoluteChildren - ? [] - : [setProperty('always', path, PP.create('style', 'contain'), 'layout')] + return parentProvidesBoundsForAbsoluteChildren ? 'dont-add-contain-layout' : 'add-contain-layout' +} + +function maybeAddContainLayout( + metadata: ElementInstanceMetadataMap, + allElementProps: AllElementProps, + pathTrees: ElementPathTrees, + path: ElementPath, +): CanvasCommand[] { + return shouldAddContainLayout(metadata, allElementProps, pathTrees, path) === 'add-contain-layout' + ? [setProperty('always', path, PP.create('style', 'contain'), 'layout')] + : [] } diff --git a/editor/src/components/canvas/canvas-strategies/strategies/absolute-resize-bounding-box-strategy.tsx b/editor/src/components/canvas/canvas-strategies/strategies/absolute-resize-bounding-box-strategy.tsx index 8942da7ab335..0409ecb7a166 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/absolute-resize-bounding-box-strategy.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/absolute-resize-bounding-box-strategy.tsx @@ -482,7 +482,7 @@ function getConstrainedSizes( constraints.right || constraints.width - const localFrame = MetadataUtils.getLocalFrame(element.elementPath, jsxMetadata) + const localFrame = MetadataUtils.getLocalFrame(element.elementPath, jsxMetadata, null) if ( isConstrained && localFrame != null && diff --git a/editor/src/components/canvas/canvas-strategies/strategies/convert-to-absolute-and-move-strategy.tsx b/editor/src/components/canvas/canvas-strategies/strategies/convert-to-absolute-and-move-strategy.tsx index 422708377163..eb8bf8f0b0dc 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/convert-to-absolute-and-move-strategy.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/convert-to-absolute-and-move-strategy.tsx @@ -44,7 +44,6 @@ import { getFullFrame } from '../../../frame' import { stylePropPathMappingFn } from '../../../inspector/common/property-path-hooks' import type { CanvasFrameAndTarget } from '../../canvas-types' import type { CanvasCommand } from '../../commands/commands' -import { convertToAbsolute } from '../../commands/convert-to-absolute-command' import type { SetCssLengthProperty } from '../../commands/set-css-length-command' import { setCssLengthProperty, diff --git a/editor/src/components/canvas/canvas-strategies/strategies/draw-to-insert-strategy.spec.browser2.tsx b/editor/src/components/canvas/canvas-strategies/strategies/draw-to-insert-strategy.spec.browser2.tsx index 9c26194be566..07f3ec449d2c 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/draw-to-insert-strategy.spec.browser2.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/draw-to-insert-strategy.spec.browser2.tsx @@ -16,9 +16,15 @@ import { import { RightMenuTab } from '../../../editor/store/editor-state' import { FOR_TESTS_setNextGeneratedUid } from '../../../../core/model/element-template-utils.test-utils' import type { WindowPoint } from '../../../../core/shared/math-utils' -import { windowPoint } from '../../../../core/shared/math-utils' +import { + nullIfInfinity, + rectangleContainsRectangle, + windowPoint, +} from '../../../../core/shared/math-utils' import { selectComponentsForTest } from '../../../../utils/utils.test-utils' import CanvasActions from '../../canvas-actions' +import { MetadataUtils } from '../../../../core/model/element-metadata-utils' +import { forceNotNull } from '../../../../core/shared/optional-utils' function slightlyOffsetWindowPointBecauseVeryWeirdIssue(point: { x: number; y: number }) { // FIXME when running in headless chrome, the result of getBoundingClientRect will be slightly @@ -201,6 +207,109 @@ export var storyboard = ( ) +` + + const projectWithGridContent = `import * as React from 'react' +import { Scene, Storyboard } from 'utopia-api' + +export var storyboard = ( + + +
+
+
+
+
+
+
+
+
+
+
+ + +) ` it('can click to insert into a grid', async () => { @@ -377,5 +486,66 @@ export var storyboard = ( width: '20px', }) }) + + it('can draw to insert into an element in a grid', async () => { + const editor = await renderTestEditorWithCode( + projectWithGridContent, + 'await-first-dom-report', + ) + + await selectComponentsForTest(editor, [EP.fromString('sb/scene/grid/grid-item-8')]) + + await pressKey('d') + ensureInInsertMode(editor) + + const gridItem = editor.renderedDOM.getByTestId('grid-item-8') + const gridBB = gridItem.getBoundingClientRect() + + const target: WindowPoint = windowPoint({ + x: gridBB.x + 5, + y: gridBB.y + 5, + }) + + const canvasControlsLayer = editor.renderedDOM.getByTestId(CanvasControlsContainerID) + + await mouseMoveToPoint(canvasControlsLayer, target) + await mouseDragFromPointToPoint(canvasControlsLayer, target, { + x: target.x + 40, + y: target.y + 60, + }) + await editor.getDispatchFollowUpActionsFinished() + + const child = gridItem.firstChild + if (child == null) { + throw new Error('Draw to insert should be able to insert an element') + } + + const { position, top, left, width, height } = (child as HTMLElement).style + + expect({ position, top, left, width, height }).toEqual({ + position: 'absolute', + left: '6px', + top: '6px', + width: '40px', + height: '60px', + }) + + const gridItem8Metadata = + editor.getEditorState().editor.jsxMetadata['sb/scene/grid/grid-item-8'] + const gridItem8GlobalFrame = forceNotNull( + 'Item 8 should have a global frame.', + nullIfInfinity(gridItem8Metadata.globalFrame), + ) + const gridItem8Children = MetadataUtils.getChildrenUnordered( + editor.getEditorState().editor.jsxMetadata, + EP.fromString('sb/scene/grid/grid-item-8'), + ) + const gridItem8Child = forceNotNull('Could not find child.', gridItem8Children.at(0)) + const gridItem8ChildGlobalFrame = forceNotNull( + 'Child of item 8 should have a global frame.', + nullIfInfinity(gridItem8Child.globalFrame), + ) + expect(rectangleContainsRectangle(gridItem8GlobalFrame, gridItem8ChildGlobalFrame)).toBe(true) + }) }) }) diff --git a/editor/src/components/canvas/canvas-strategies/strategies/forced-absolute-reparent-strategies.spec.browser2.tsx b/editor/src/components/canvas/canvas-strategies/strategies/forced-absolute-reparent-strategies.spec.browser2.tsx index 7c9ec0953a84..a9712b9857f4 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/forced-absolute-reparent-strategies.spec.browser2.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/forced-absolute-reparent-strategies.spec.browser2.tsx @@ -281,7 +281,7 @@ describe('Fallback Absolute Reparent Strategies', () => {
{
!EP.pathsEqual(s.elementPath, selectedElement)) .map( (s, index): SortableGridElementProperties => ({ @@ -152,14 +144,15 @@ export function runGridRearrangeMove( const moveType = getGridMoveType({ elementPath: targetElement, - originalElementMetadata: originalElementMetadata, + originalElementMetadata: originalElement, possiblyReorderIndex: possiblyReorderIndex, cellsSortedByPosition: cellsSortedByPosition, + isReparent: isReparent, }) const updateGridControlsCommand = showGridControls( 'mid-interaction', - grid.elementPath, + gridPath, targetCellData?.gridCellCoordinates ?? null, gridCellCoordinates(row, column), ) @@ -171,14 +164,14 @@ export function runGridRearrangeMove( } const absoluteMoveCommands = gridChildAbsoluteMoveCommands( MetadataUtils.findElementByElementPath(jsxMetadata, targetElement), - MetadataUtils.getFrameOrZeroRectInCanvasCoords(grid.elementPath, jsxMetadata), + MetadataUtils.getFrameOrZeroRectInCanvasCoords(gridPath, jsxMetadata), interactionData, ) return [...absoluteMoveCommands, updateGridControlsCommand] } case 'rearrange': { const targetRootCell = gridCellCoordinates(row, column) - const canvasRect = getGlobalFrameOfGridCell(grid, targetRootCell) + const canvasRect = getGlobalFrameOfGridCell(gridCellGlobalFrames, targetRootCell) const absoluteMoveCommands = canvasRect == null || isReparent ? [] @@ -249,14 +242,14 @@ export function setGridPropsCommands( const rowStart = gridPositionToValue(gridProps.gridRowStart) const rowEnd = gridPositionToValue(gridProps.gridRowEnd) - const areaColumnStart = asMaybeNamedAreaOrValue(gridTemplate, 'column', columnStart) - const areaColumnEnd = asMaybeNamedAreaOrValue(gridTemplate, 'column', columnEnd) - const areaRowStart = asMaybeNamedAreaOrValue(gridTemplate, 'row', rowStart) - const areaRowEnd = asMaybeNamedAreaOrValue(gridTemplate, 'row', rowEnd) + const lineColumnStart = asMaybeNamedLineOrValue(gridTemplate, 'column', columnStart) + const lineColumnEnd = asMaybeNamedLineOrValue(gridTemplate, 'column', columnEnd) + const lineRowStart = asMaybeNamedLineOrValue(gridTemplate, 'row', rowStart) + const lineRowEnd = asMaybeNamedLineOrValue(gridTemplate, 'row', rowEnd) if (columnStart != null && columnStart === columnEnd) { commands.push( - setProperty('always', elementPath, PP.create('style', 'gridColumn'), areaColumnStart), + setProperty('always', elementPath, PP.create('style', 'gridColumn'), lineColumnStart), ) } else if ( columnStart != null && @@ -266,23 +259,23 @@ export function setGridPropsCommands( columnStart === columnEnd - 1 ) { commands.push( - setProperty('always', elementPath, PP.create('style', 'gridColumn'), areaColumnStart), + setProperty('always', elementPath, PP.create('style', 'gridColumn'), lineColumnStart), ) } else { if (columnStart != null) { commands.push( - setProperty('always', elementPath, PP.create('style', 'gridColumnStart'), areaColumnStart), + setProperty('always', elementPath, PP.create('style', 'gridColumnStart'), lineColumnStart), ) } if (columnEnd != null) { commands.push( - setProperty('always', elementPath, PP.create('style', 'gridColumnEnd'), areaColumnEnd), + setProperty('always', elementPath, PP.create('style', 'gridColumnEnd'), lineColumnEnd), ) } } if (rowStart != null && rowStart === rowEnd) { - commands.push(setProperty('always', elementPath, PP.create('style', 'gridRow'), areaRowStart)) + commands.push(setProperty('always', elementPath, PP.create('style', 'gridRow'), lineRowStart)) } else if ( rowStart != null && typeof rowStart === 'number' && @@ -290,16 +283,16 @@ export function setGridPropsCommands( typeof rowEnd === 'number' && rowStart === rowEnd - 1 ) { - commands.push(setProperty('always', elementPath, PP.create('style', 'gridRow'), areaRowStart)) + commands.push(setProperty('always', elementPath, PP.create('style', 'gridRow'), lineRowStart)) } else { if (rowStart != null) { commands.push( - setProperty('always', elementPath, PP.create('style', 'gridRowStart'), areaRowStart), + setProperty('always', elementPath, PP.create('style', 'gridRowStart'), lineRowStart), ) } if (rowEnd != null) { commands.push( - setProperty('always', elementPath, PP.create('style', 'gridRowEnd'), areaRowEnd), + setProperty('always', elementPath, PP.create('style', 'gridRowEnd'), lineRowEnd), ) } } @@ -352,7 +345,7 @@ function getCellCoordsDelta( return gridCellCoordinates(rowDiff, columnDiff) } -function asMaybeNamedAreaOrValue( +function asMaybeNamedLineOrValue( grid: GridContainerProperties, axis: 'row' | 'column', value: number | string | null, @@ -362,9 +355,9 @@ function asMaybeNamedAreaOrValue( } else if (typeof value === 'number') { const template = axis === 'row' ? grid.gridTemplateRows : grid.gridTemplateColumns if (template?.type === 'DIMENSIONS') { - const maybeAreaStart = template.dimensions.at(value - 1) - if (maybeAreaStart != null && maybeAreaStart.areaName != null) { - return maybeAreaStart.areaName + const maybeLineStart = template.dimensions.at(value - 1) + if (maybeLineStart != null && maybeLineStart.lineName != null) { + return maybeLineStart.lineName } } return value === 0 ? 1 : value @@ -459,9 +452,11 @@ function getGridMoveType(params: { originalElementMetadata: ElementInstanceMetadata | null possiblyReorderIndex: number cellsSortedByPosition: SortableGridElementProperties[] + isReparent: boolean }): GridMoveType { const specialSizeMeasurements = params.originalElementMetadata?.specialSizeMeasurements if ( + !params.isReparent && specialSizeMeasurements != null && MetadataUtils.isPositionAbsolute(params.originalElementMetadata) ) { @@ -530,7 +525,7 @@ function getGridPositionIndex(props: { export type GridCellGlobalFrames = Array> -export function getGlobalFrameOfGridCell( +export function getGlobalFrameOfGridCellFromMetadata( grid: ElementInstanceMetadata, coords: GridCellCoordinates, ): CanvasRectangle | null { @@ -539,6 +534,13 @@ export function getGlobalFrameOfGridCell( return null } + return getGlobalFrameOfGridCell(gridCellGlobalFrames, coords) +} + +export function getGlobalFrameOfGridCell( + gridCellGlobalFrames: GridCellGlobalFrames, + coords: GridCellCoordinates, +): CanvasRectangle | null { return gridCellGlobalFrames[coords.row - 1]?.[coords.column - 1] ?? null } @@ -602,12 +604,12 @@ function alterGridTemplateDimensions(params: { if (before.length + after.length === 0) { return null } - return gridCSSRepeat(dim.times, [...before, ...after], dim.areaName) + return gridCSSRepeat(dim.times, [...before, ...after], dim.lineName) case 'REPLACE': return gridCSSRepeat( dim.times, [...before, params.patch.newValue, ...after], - dim.areaName, + dim.lineName, ) default: assertNever(params.patch) @@ -719,9 +721,7 @@ export function getGridRelatedIndexes(params: { function getOriginalElementGridConfiguration( gridCellGlobalFrames: GridCellGlobalFrames, interactionData: DragInteractionData, - jsxMetadata: ElementInstanceMetadataMap, - selectedElement: ElementPath, - grid: ElementInstanceMetadata, + originalElement: ElementInstanceMetadata, ) { const draggingFromCellCoords = getClosestGridCellToPoint( gridCellGlobalFrames, @@ -731,23 +731,15 @@ function getOriginalElementGridConfiguration( return null } - const originalElementMetadata = MetadataUtils.findElementByElementPath( - jsxMetadata, - selectedElement, - ) - if (originalElementMetadata == null) { - return null - } - // measured cell coord bounds on the canvas, this is the default when the cell position is not explicitly set const originalElementCellCoordsOnCanvas = getGridChildCellCoordBoundsFromCanvas( - originalElementMetadata, - grid, + originalElement, + gridCellGlobalFrames, ) // get the bounds from the props, or the canvas, or just default to the cell of the starting mouse position const originalCellBounds = getGridChildCellCoordBoundsFromProps( - originalElementMetadata, + originalElement, originalElementCellCoordsOnCanvas ?? draggingFromCellCoords, ) @@ -758,7 +750,6 @@ function getOriginalElementGridConfiguration( ) return { - originalElementMetadata, originalCellBounds, mouseCellPosInOriginalElement, } @@ -788,3 +779,12 @@ export function findOriginalGrid( return findOriginalGrid(metadata, parentPath) } + +// Returns whether the given dimensions are made of just one item, being a CSS keyword with value "auto". +export function isJustAutoGridDimension(dimensions: GridDimension[]): boolean { + return ( + dimensions.length === 1 && + dimensions[0].type === 'KEYWORD' && + dimensions[0].value.value === 'auto' + ) +} diff --git a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-keyboard-strategy.ts b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-keyboard-strategy.ts index e6e33673de48..8952cee616b8 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-keyboard-strategy.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-keyboard-strategy.ts @@ -3,11 +3,7 @@ import * as EP from '../../../../core/shared/element-path' import type { GridPositionValue } from '../../../../core/shared/element-template' import { gridPositionValue } from '../../../../core/shared/element-template' import { controlsForGridPlaceholders } from '../../controls/grid-controls-for-strategies' -import type { - CanvasStrategy, - CustomStrategyState, - InteractionCanvasState, -} from '../canvas-strategy-types' +import type { CanvasStrategy, InteractionCanvasState } from '../canvas-strategy-types' import { emptyStrategyApplicationResult, getTargetPathsFromInteractionTarget, @@ -21,7 +17,6 @@ import { accumulatePresses } from './shared-keyboard-strategy-helpers' export function gridRearrangeResizeKeyboardStrategy( canvasState: InteractionCanvasState, interactionSession: InteractionSession | null, - customState: CustomStrategyState, ): CanvasStrategy | null { if ( interactionSession?.activeControl.type !== 'KEYBOARD_CATCHER_CONTROL' || @@ -48,13 +43,13 @@ export function gridRearrangeResizeKeyboardStrategy( const parentGridPath = EP.parentPath(target) - const grid = MetadataUtils.findElementByElementPath(canvasState.startingMetadata, parentGridPath) - if (grid == null) { - return null - } - const gridTemplate = grid.specialSizeMeasurements.containerGridProperties + const gridTemplate = cell.specialSizeMeasurements.parentContainerGridProperties + const gridCellGlobalFrames = cell.specialSizeMeasurements.parentGridCellGlobalFrames - const initialCellBounds = getGridChildCellCoordBoundsFromCanvas(cell, grid) + const initialCellBounds = + gridCellGlobalFrames != null + ? getGridChildCellCoordBoundsFromCanvas(cell, gridCellGlobalFrames) + : null if (initialCellBounds == null) { return null } diff --git a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-duplicate-strategy.ts b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-duplicate-strategy.ts index 255426c99f09..91d3e60875ee 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-duplicate-strategy.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-duplicate-strategy.ts @@ -72,21 +72,28 @@ export const gridRearrangeMoveDuplicateStrategy: CanvasStrategyFactory = ( const targetElement = EP.appendToPath(EP.parentPath(selectedElement), newUid) - const grid = MetadataUtils.findElementByElementPath( + const selectedElementMetadata = MetadataUtils.findElementByElementPath( canvasState.startingMetadata, - EP.parentPath(selectedElement), + selectedElement, ) - if (grid == null) { + if (selectedElementMetadata == null) { return emptyStrategyApplicationResult } - const moveCommands = runGridRearrangeMove( - targetElement, - selectedElement, - canvasState.startingMetadata, - interactionSession.interactionData, - grid, - ) + const { parentGridCellGlobalFrames, parentContainerGridProperties } = + selectedElementMetadata.specialSizeMeasurements + + const moveCommands = + parentGridCellGlobalFrames != null + ? runGridRearrangeMove( + targetElement, + selectedElement, + canvasState.startingMetadata, + interactionSession.interactionData, + parentGridCellGlobalFrames, + parentContainerGridProperties, + ) + : [] if (moveCommands.length === 0) { return emptyStrategyApplicationResult } diff --git a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.spec.browser2.tsx b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.spec.browser2.tsx index 31d979dd8cc7..e293d4cd572d 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.spec.browser2.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.spec.browser2.tsx @@ -36,6 +36,26 @@ describe('grid rearrange move strategy', () => { }) }) + it('can rearrange elements in a grid component', async () => { + const editor = await renderTestEditorWithCode( + ProjectCodeGridComponent, + 'await-first-dom-report', + ) + + const testId = 'aaa' + const { gridRowStart, gridRowEnd, gridColumnStart, gridColumnEnd } = await runMoveTest(editor, { + scale: 1, + pathString: `sb/scene/grid/${testId}`, + testId: testId, + }) + expect({ gridRowStart, gridRowEnd, gridColumnStart, gridColumnEnd }).toEqual({ + gridColumnEnd: '7', + gridColumnStart: '3', + gridRowEnd: '4', + gridRowStart: '2', + }) + }) + it('can not rearrange multicell element out of the grid', async () => { const editor = await renderTestEditorWithCode(ProjectCode, 'await-first-dom-report') @@ -908,6 +928,105 @@ export var storyboard = ( ) ` +const ProjectCodeGridComponent = `import * as React from 'react' +import { Scene, Storyboard, Placeholder } from 'utopia-api' + +export var storyboard = ( + + + +
+
+ + + + + +) + +export function Grid(props) { + return ( +
+ {props.children} +
+ ) +} +` + const ProjectCodeReorder = `import * as React from 'react' import { Scene, Storyboard } from 'utopia-api' diff --git a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.ts b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.ts index d798a5d4ee05..430007657cc5 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/grid-rearrange-move-strategy.ts @@ -145,21 +145,28 @@ function getCommandsAndPatchForGridRearrange( return { commands: [], elementsToRerender: [] } } - const grid = MetadataUtils.findElementByElementPath( + const selectedElementMetadata = MetadataUtils.findElementByElementPath( canvasState.startingMetadata, - EP.parentPath(selectedElement), + selectedElement, ) - if (grid == null) { + if (selectedElementMetadata == null) { return { commands: [], elementsToRerender: [] } } - const commands = runGridRearrangeMove( - selectedElement, - selectedElement, - canvasState.startingMetadata, - interactionData, - grid, - ) + const { parentGridCellGlobalFrames, parentContainerGridProperties } = + selectedElementMetadata.specialSizeMeasurements + + const commands = + parentGridCellGlobalFrames != null + ? runGridRearrangeMove( + selectedElement, + selectedElement, + canvasState.startingMetadata, + interactionData, + parentGridCellGlobalFrames, + parentContainerGridProperties, + ) + : [] return { commands: commands, diff --git a/editor/src/components/canvas/canvas-strategies/strategies/grid-reparent-strategy.tsx b/editor/src/components/canvas/canvas-strategies/strategies/grid-reparent-strategy.tsx index 50aed2f5ed0d..2f8ee083020b 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/grid-reparent-strategy.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/grid-reparent-strategy.tsx @@ -163,15 +163,6 @@ export function applyGridReparent( return emptyStrategyApplicationResult } - const grid = MetadataUtils.findElementByElementPath( - canvasState.startingMetadata, - newParent.intendedParentPath, - ) - - if (grid == null) { - return strategyApplicationResult([], [newParent.intendedParentPath]) - } - const allowedToReparent = selectedElements.every((selectedElement) => { return isAllowedToReparent( canvasState.projectContents, @@ -197,7 +188,6 @@ export function applyGridReparent( selectedElement, newParent, interactionData, - grid, ), selectedElements, ) @@ -254,7 +244,6 @@ function gridReparentCommands( target: ElementPath, newParent: InsertionPath, interactionData: DragInteractionData, - grid: ElementInstanceMetadata, ) { const reparentResult = getReparentOutcome( jsxMetadata, @@ -275,14 +264,25 @@ function gridReparentCommands( const { commands: reparentCommands, newPath } = reparentResult - const gridPropsCommands = runGridRearrangeMove( - target, - target, + const targetParent = MetadataUtils.findElementByElementPath( jsxMetadata, - interactionData, - grid, - newPath, + newParent.intendedParentPath, ) + const gridCellGlobalFrames = targetParent?.specialSizeMeasurements.gridCellGlobalFrames ?? null + const gridTemplate = targetParent?.specialSizeMeasurements.containerGridProperties ?? null + + const gridPropsCommands = + gridCellGlobalFrames != null && gridTemplate != null + ? runGridRearrangeMove( + target, + target, + jsxMetadata, + interactionData, + gridCellGlobalFrames, + gridTemplate, + newPath, + ) + : [] const removeAbsolutePositioningPropsCommands = removeAbsolutePositioningProps('always', newPath) diff --git a/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-helpers.ts b/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-helpers.ts index c9600a2094ca..67dc8834143f 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-helpers.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-helpers.ts @@ -75,6 +75,8 @@ import type { ReparentTargetForPaste } from '../reparent-utils' import { cleanSteganoTextData } from '../../../../../core/shared/stegano-text' import { assertNever } from '../../../../../core/shared/utils' +export type ShouldAddContainLayout = 'add-contain-layout' | 'dont-add-contain-layout' + export function isAllowedToReparent( projectContents: ProjectContentTreeRoot, startingMetadata: ElementInstanceMetadataMap, @@ -531,7 +533,7 @@ export function absolutePositionForReparent( } const localFrame = zeroRectIfNullOrInfinity( - MetadataUtils.getLocalFrame(targetParent, metadata.currentMetadata) ?? null, + MetadataUtils.getLocalFrame(targetParent, metadata.currentMetadata, null) ?? null, ) // offset the element with the target parent's offset, since the target parent doesn't diff --git a/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-changes.ts b/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-changes.ts index 307d87ad479b..f8053cd0a8f6 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-changes.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-changes.ts @@ -67,6 +67,7 @@ import { treatElementAsFragmentLike, } from '../fragment-like-helpers' import type { OldPathToNewPathMapping } from '../../post-action-options/post-action-paste' +import type { ShouldAddContainLayout } from './reparent-helpers' const propertiesToRemove: Array = [ PP.create('style', 'left'), @@ -90,6 +91,7 @@ export function getAbsoluteReparentPropertyChanges( newParentStartingMetadata: ElementInstanceMetadataMap, projectContents: ProjectContentTreeRoot, forcePins: ForcePins, + willContainLayoutBeAdded: ShouldAddContainLayout, ): Array { const element: JSXElement | null = getJSXElementFromProjectContents(target, projectContents) @@ -108,7 +110,10 @@ export function getAbsoluteReparentPropertyChanges( const currentParentContentBox = MetadataUtils.getGlobalContentBoxForChildren(originalParentInstance) - const newParentContentBox = MetadataUtils.getGlobalContentBoxForChildren(newParentInstance) + const newParentContentBox = + willContainLayoutBeAdded === 'add-contain-layout' + ? nullIfInfinity(newParentInstance.globalFrame) + : MetadataUtils.getGlobalContentBoxForChildren(newParentInstance) if (currentParentContentBox == null || newParentContentBox == null) { return [] @@ -349,6 +354,7 @@ export function getReparentPropertyChanges( currentMetadata, projectContents, 'force-pins', + 'dont-add-contain-layout', ) const strategyCommands = runReparentPropertyStrategies([ diff --git a/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-strategies.ts b/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-strategies.ts index 39c06c04f062..526cb7d73a83 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-strategies.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/reparent-helpers/reparent-property-strategies.ts @@ -313,6 +313,7 @@ export const convertFragmentLikeChildrenToVisualSize = metadata.currentMetadata, projectContents, 'force-pins', + 'dont-add-contain-layout', ) } else { const directions = singleAxisAutoLayoutContainerDirections( diff --git a/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.spec.browser2.tsx b/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.spec.browser2.tsx index f086926e2bc6..a8bc6730953f 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.spec.browser2.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.spec.browser2.tsx @@ -5,7 +5,12 @@ import { CanvasControlsContainerID } from '../../controls/new-canvas-controls' import { mouseDownAtPoint, mouseMoveToPoint, mouseUpAtPoint } from '../../event-helpers.test-utils' import { canvasPoint } from '../../../../core/shared/math-utils' -const makeTestProject = (columns: string, rows: string) => ` +const makeTestProject = (params: { + columns: string | null + rows: string | null + shorthand: string | null + height?: number | string +}) => ` import * as React from 'react' import { Storyboard } from 'utopia-api' @@ -21,10 +26,10 @@ export var storyboard = ( display: 'grid', gap: 10, width: 600, - height: 600, - gridTemplateColumns: '${columns}', - gridTemplateRows: '${rows}', - height: 'max-content', + height: ${params.height ?? "'max-content'"}, + ${params.columns != null ? `gridTemplateColumns: '${params.columns}',` : ''} + ${params.rows != null ? `gridTemplateRows: '${params.rows}',` : ''} + ${params.shorthand != null ? `gridTemplate: '${params.shorthand}',` : ''} }} >
{ it('update a fractionally sized column', async () => { const renderResult = await renderTestEditorWithCode( - makeTestProject('2.4fr 1fr 1fr', '99px 109px 90px'), + makeTestProject({ columns: '2.4fr 1fr 1fr', rows: '99px 109px 90px', shorthand: null }), 'await-first-dom-report', ) const target = EP.fromString(`sb/grid/row-1-column-2`) @@ -171,10 +176,9 @@ export var storyboard = ( display: 'grid', gap: 10, width: 600, - height: 600, + height: 'max-content', gridTemplateColumns: '2.4fr 1.8fr 1fr', gridTemplateRows: '99px 109px 90px', - height: 'max-content', }} >
{[1, 2, 3].map((n) => { @@ -310,7 +313,7 @@ export var storyboard = ( it('update a pixel sized row', async () => { const renderResult = await renderTestEditorWithCode( - makeTestProject('2.4fr 1fr 1fr', '99px 109px 90px'), + makeTestProject({ columns: '2.4fr 1fr 1fr', rows: '99px 109px 90px', shorthand: null }), 'await-first-dom-report', ) const target = EP.fromString(`sb/grid/row-1-column-2`) @@ -349,10 +352,9 @@ export var storyboard = ( display: 'grid', gap: 10, width: 600, - height: 600, + height: 'max-content', gridTemplateColumns: '2.4fr 1fr 1fr', gridTemplateRows: '99px 129px 90px', - height: 'max-content', }} >
{ const renderResult = await renderTestEditorWithCode( - makeTestProject('repeat(3, 1fr)', '99px 109px 90px'), + makeTestProject({ columns: 'repeat(3, 1fr)', rows: '99px 109px 90px', shorthand: null }), 'await-first-dom-report', ) const target = EP.fromString(`sb/grid/row-1-column-2`) @@ -465,10 +467,247 @@ export var storyboard = ( display: 'grid', gap: 10, width: 600, - height: 600, + height: 'max-content', gridTemplateColumns: 'repeat(3, 1.5fr)', gridTemplateRows: '99px 109px 90px', + }} + > +
+
+
+
+
+
+
+
+
+
+ +) +`) + }) + + describe('shorthand handling', () => { + it('removes the shorthand and adds the longhand for both the other axii', async () => { + const renderResult = await renderTestEditorWithCode( + makeTestProject({ + shorthand: '99px 109px 90px / 2.4fr 1fr 1fr', + columns: null, + rows: null, + }), + 'await-first-dom-report', + ) + const target = EP.fromString(`sb/grid/row-1-column-2`) + await renderResult.dispatch(selectComponents([target], false), true) + await renderResult.getDispatchFollowUpActionsFinished() + const canvasControlsLayer = renderResult.renderedDOM.getByTestId(CanvasControlsContainerID) + const resizeControl = renderResult.renderedDOM.getByTestId(`grid-column-handle-1`) + const resizeControlRect = resizeControl.getBoundingClientRect() + const startPoint = canvasPoint({ + x: resizeControlRect.x + resizeControlRect.width / 2, + y: resizeControlRect.y + resizeControlRect.height / 2, + }) + const endPoint = canvasPoint({ + x: startPoint.x + 100, + y: startPoint.y, + }) + await mouseMoveToPoint(resizeControl, startPoint) + await mouseDownAtPoint(resizeControl, startPoint) + await mouseMoveToPoint(canvasControlsLayer, endPoint) + await mouseUpAtPoint(canvasControlsLayer, endPoint) + await renderResult.getDispatchFollowUpActionsFinished() + + expect(getPrintedUiJsCode(renderResult.getEditorState())) + .toEqual(`import * as React from 'react' +import { Storyboard } from 'utopia-api' + +export var storyboard = ( + +
+
+
+
+
+
+
+
+
+
+
+ +) +`) + }) + it("removes the shorthand without adding the longhand if it's auto", async () => { + const renderResult = await renderTestEditorWithCode( + makeTestProject({ + shorthand: 'auto / 2.4fr 1fr 1fr', + columns: null, + rows: null, + height: 600, + }), + 'await-first-dom-report', + ) + const target = EP.fromString(`sb/grid/row-1-column-2`) + await renderResult.dispatch(selectComponents([target], false), true) + await renderResult.getDispatchFollowUpActionsFinished() + const canvasControlsLayer = renderResult.renderedDOM.getByTestId(CanvasControlsContainerID) + const resizeControl = renderResult.renderedDOM.getByTestId(`grid-column-handle-1`) + const resizeControlRect = resizeControl.getBoundingClientRect() + const startPoint = canvasPoint({ + x: resizeControlRect.x + resizeControlRect.width / 2, + y: resizeControlRect.y + resizeControlRect.height / 2, + }) + const endPoint = canvasPoint({ + x: startPoint.x + 100, + y: startPoint.y, + }) + await mouseMoveToPoint(resizeControl, startPoint) + await mouseDownAtPoint(resizeControl, startPoint) + await mouseMoveToPoint(canvasControlsLayer, endPoint) + await mouseUpAtPoint(canvasControlsLayer, endPoint) + await renderResult.getDispatchFollowUpActionsFinished() + + expect(getPrintedUiJsCode(renderResult.getEditorState())) + .toEqual(`import * as React from 'react' +import { Storyboard } from 'utopia-api' + +export var storyboard = ( + +
) `) + }) + it("does not add the other longhand if the shorthand is not defined and the other longhand it's auto", async () => { + const renderResult = await renderTestEditorWithCode( + makeTestProject({ + shorthand: 'auto / 2.4fr 1fr 1fr', + columns: null, + rows: null, + height: 600, + }), + 'await-first-dom-report', + ) + const target = EP.fromString(`sb/grid/row-1-column-2`) + await renderResult.dispatch(selectComponents([target], false), true) + await renderResult.getDispatchFollowUpActionsFinished() + const canvasControlsLayer = renderResult.renderedDOM.getByTestId(CanvasControlsContainerID) + const resizeControl = renderResult.renderedDOM.getByTestId(`grid-column-handle-1`) + const resizeControlRect = resizeControl.getBoundingClientRect() + const startPoint = canvasPoint({ + x: resizeControlRect.x + resizeControlRect.width / 2, + y: resizeControlRect.y + resizeControlRect.height / 2, + }) + const endPoint = canvasPoint({ + x: startPoint.x + 100, + y: startPoint.y, + }) + await mouseMoveToPoint(resizeControl, startPoint) + await mouseDownAtPoint(resizeControl, startPoint) + await mouseMoveToPoint(canvasControlsLayer, endPoint) + await mouseUpAtPoint(canvasControlsLayer, endPoint) + await renderResult.getDispatchFollowUpActionsFinished() + + expect(getPrintedUiJsCode(renderResult.getEditorState())) + .toEqual(`import * as React from 'react' +import { Storyboard } from 'utopia-api' + +export var storyboard = ( + +
+
+
+
+
+
+
+
+
+
+
+ +) +`) + }) }) }) diff --git a/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.ts b/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.ts index bf89f6246649..e3242fdd3f97 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/resize-grid-strategy.ts @@ -7,7 +7,12 @@ import { import { MetadataUtils } from '../../../../core/model/element-metadata-utils' import * as EP from '../../../../core/shared/element-path' import * as PP from '../../../../core/shared/property-path' -import { setProperty } from '../../commands/set-property-command' +import type { PropertyToUpdate } from '../../commands/set-property-command' +import { + propertyToDelete, + propertyToSet, + updateBulkProperties, +} from '../../commands/set-property-command' import { controlsForGridPlaceholders, GridRowColumnResizingControls, @@ -30,17 +35,19 @@ import { printArrayGridDimensions, } from '../../../../components/inspector/common/css-utils' import { toFirst } from '../../../../core/shared/optics/optic-utilities' -import type { Either } from '../../../../core/shared/either' -import { foldEither, isLeft, isRight } from '../../../../core/shared/either' -import { roundTo, roundToNearestWhole } from '../../../../core/shared/math-utils' +import { isLeft } from '../../../../core/shared/either' +import { roundToNearestWhole } from '../../../../core/shared/math-utils' import type { GridAutoOrTemplateBase } from '../../../../core/shared/element-template' import { expandGridDimensions, findOriginalGrid, + isJustAutoGridDimension, replaceGridTemplateDimensionAtIndex, } from './grid-helpers' import { setCursorCommand } from '../../commands/set-cursor-command' import { CSSCursor } from '../../canvas-types' +import type { CanvasCommand } from '../../commands/commands' +import type { Axis } from '../../gap-utils' export const resizeGridStrategy: CanvasStrategyFactory = ( canvasState: InteractionCanvasState, @@ -116,6 +123,12 @@ export const resizeGridStrategy: CanvasStrategyFactory = ( ? gridSpecialSizeMeasurements.containerGridProperties.gridTemplateColumns : gridSpecialSizeMeasurements.containerGridProperties.gridTemplateRows + const otherAxis: Axis = control.axis === 'column' ? 'row' : 'column' + const otherAxisValues = + otherAxis === 'column' + ? gridSpecialSizeMeasurements.containerGridPropertiesFromProps.gridTemplateColumns + : gridSpecialSizeMeasurements.containerGridPropertiesFromProps.gridTemplateRows + if ( calculatedValues == null || calculatedValues.type !== 'DIMENSIONS' || @@ -165,7 +178,7 @@ export const resizeGridStrategy: CanvasStrategyFactory = ( const isFractional = mergedUnit.value === 'fr' const precision = modifiers.cmd ? 'coarse' : 'precise' - const areaName = mergedValues.dimensions[control.columnOrRow]?.areaName ?? null + const lineName = mergedValues.dimensions[control.columnOrRow]?.lineName ?? null const newValue = Math.max( 0, @@ -181,21 +194,36 @@ export const resizeGridStrategy: CanvasStrategyFactory = ( originalValues.dimensions, expandedOriginalValues, control.columnOrRow, - gridCSSNumber(cssNumber(newValue, mergedUnit.value), areaName), + gridCSSNumber(cssNumber(newValue, mergedUnit.value), lineName), ) const propertyValueAsString = printArrayGridDimensions(newDimensions) - const commands = [ - setProperty( - 'always', - originalGridPath, - PP.create( - 'style', - control.axis === 'column' ? 'gridTemplateColumns' : 'gridTemplateRows', - ), - propertyValueAsString, - ), + const propertyAxis = PP.create( + 'style', + control.axis === 'column' ? 'gridTemplateColumns' : 'gridTemplateRows', + ) + let propertiesToUpdate: PropertyToUpdate[] = [ + propertyToSet(propertyAxis, propertyValueAsString), + propertyToDelete(PP.create('style', 'gridTemplate')), // delete the shorthand in favor of the longhands + ] + + if ( + otherAxisValues?.type === 'DIMENSIONS' && + otherAxisValues.dimensions.length > 0 && + !isJustAutoGridDimension(otherAxisValues.dimensions) + ) { + // if the other axis has dimensions, serialize them in their longhand + const propertyOtherAxis = PP.create( + 'style', + otherAxis === 'column' ? 'gridTemplateColumns' : 'gridTemplateRows', + ) + const otherAxisValueAsString = printArrayGridDimensions(otherAxisValues.dimensions) + propertiesToUpdate.push(propertyToSet(propertyOtherAxis, otherAxisValueAsString)) + } + + let commands: CanvasCommand[] = [ + updateBulkProperties('always', originalGridPath, propertiesToUpdate), setCursorCommand(control.axis === 'column' ? CSSCursor.ColResize : CSSCursor.RowResize), ] diff --git a/editor/src/components/canvas/canvas-strategies/strategies/set-padding-strategy.tsx b/editor/src/components/canvas/canvas-strategies/strategies/set-padding-strategy.tsx index bb69d4fc2a7c..607524af53b9 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/set-padding-strategy.tsx +++ b/editor/src/components/canvas/canvas-strategies/strategies/set-padding-strategy.tsx @@ -72,10 +72,6 @@ import { elementHasOnlyTextChildren } from '../../canvas-utils' import type { Modifiers } from '../../../../utils/modifiers' import type { Axis } from '../../../inspector/inspector-common' import { detectFillHugFixedState, isHuggingFixedHugFill } from '../../../inspector/inspector-common' -import { - AdjustCssLengthProperties, - adjustCssLengthProperties, -} from '../../commands/adjust-css-length-command' import type { ElementPathTrees } from '../../../../core/shared/element-path-tree' import { activeFrameTargetPath, setActiveFrames } from '../../commands/set-active-frames-command' diff --git a/editor/src/components/canvas/canvas-strategies/strategies/shared-absolute-resize-strategy-helpers.ts b/editor/src/components/canvas/canvas-strategies/strategies/shared-absolute-resize-strategy-helpers.ts index 17c7d5f55b7e..a70ebc28d65c 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/shared-absolute-resize-strategy-helpers.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/shared-absolute-resize-strategy-helpers.ts @@ -40,11 +40,6 @@ import { EdgePositionBottom, } from '../../canvas-types' import { pickPointOnRect, snapPoint } from '../../canvas-utils' -import type { AdjustCssLengthProperties } from '../../commands/adjust-css-length-command' -import { - adjustCssLengthProperties, - lengthPropertyToAdjust, -} from '../../commands/adjust-css-length-command' import { pointGuidelineToBoundsEdge } from '../../controls/guideline-helpers' import type { AbsolutePin } from './resize-helpers' import { ensureAtLeastTwoPinsForEdgePosition, resizeBoundingBox } from './resize-helpers' diff --git a/editor/src/components/canvas/canvas-strategies/strategies/shared-move-strategies-helpers.ts b/editor/src/components/canvas/canvas-strategies/strategies/shared-move-strategies-helpers.ts index 4f93b1e1f635..7ec32d192246 100644 --- a/editor/src/components/canvas/canvas-strategies/strategies/shared-move-strategies-helpers.ts +++ b/editor/src/components/canvas/canvas-strategies/strategies/shared-move-strategies-helpers.ts @@ -31,6 +31,7 @@ import { } from '../../../../core/shared/math-utils' import type { ElementPath } from '../../../../core/shared/project-file-types' +import type { AllElementProps } from '../../../editor/store/editor-state' import { getJSXElementFromProjectContents } from '../../../editor/store/editor-state' import { stylePropPathMappingFn } from '../../../inspector/common/property-path-hooks' import { determineConstrainedDragAxis } from '../../canvas-controls-frame' @@ -78,6 +79,7 @@ import { } from '../../commands/set-css-length-command' import type { ActiveFrame, ActiveFrameAction } from '../../commands/set-active-frames-command' import { activeFrameTargetRect, setActiveFrames } from '../../commands/set-active-frames-command' +import type { ElementPathTrees } from '../../../../core/shared/element-path-tree' export interface MoveCommandsOptions { ignoreLocalFrame?: boolean @@ -227,6 +229,8 @@ function getAppropriateLocalFrame( export function getDirectMoveCommandsForSelectedElement( projectContents: ProjectContentTreeRoot, startingMetadata: ElementInstanceMetadataMap, + startingAllElementProps: AllElementProps, + startingElementPathTree: ElementPathTrees, selectedElement: ElementPath, mappedPath: ElementPath, leftOrTop: 'left' | 'top', @@ -246,6 +250,8 @@ export function getDirectMoveCommandsForSelectedElement( return getMoveCommandsForSelectedElement( projectContents, startingMetadata, + startingAllElementProps, + startingElementPathTree, selectedElement, mappedPath, drag, @@ -255,6 +261,8 @@ export function getDirectMoveCommandsForSelectedElement( export function getMoveCommandsForSelectedElement( projectContents: ProjectContentTreeRoot, startingMetadata: ElementInstanceMetadataMap, + startingAllElementProps: AllElementProps, + startingElementPathTree: ElementPathTrees, selectedElement: ElementPath, mappedPath: ElementPath, drag: CanvasVector, @@ -273,14 +281,34 @@ export function getMoveCommandsForSelectedElement( selectedElement, ) + const closestNonFragmentParent = MetadataUtils.getClosestNonFragmentParent( + startingMetadata, + startingAllElementProps, + startingElementPathTree, + EP.parentPath(mappedPath), + ) + const closestNonFragmentParentMetadata = MetadataUtils.findElementByElementPath( + startingMetadata, + closestNonFragmentParent, + ) + const providesBoundsForAbsoluteChildren = + closestNonFragmentParentMetadata?.specialSizeMeasurements.providesBoundsForAbsoluteChildren ?? + false + const elementParentBounds = - elementMetadata?.specialSizeMeasurements.coordinateSystemBounds ?? null + elementMetadata?.specialSizeMeasurements.coordinateSystemBounds ?? + (providesBoundsForAbsoluteChildren + ? nullIfInfinity(closestNonFragmentParentMetadata?.globalFrame) + : null) ?? + null const globalFrame = nullIfInfinity( MetadataUtils.getFrameInCanvasCoords(selectedElement, startingMetadata), ) - const localFrame = nullIfInfinity(MetadataUtils.getLocalFrame(selectedElement, startingMetadata)) + const localFrame = nullIfInfinity( + MetadataUtils.getLocalFrame(selectedElement, startingMetadata, EP.parentPath(mappedPath)), + ) if (element == null) { return { commands: [], intendedBounds: [] } @@ -330,6 +358,8 @@ export function getInteractionMoveCommandsForSelectedElement( return getMoveCommandsForSelectedElement( canvasState.projectContents, canvasState.startingMetadata, + canvasState.startingAllElementProps, + canvasState.startingElementPathTree, selectedElement, mappedPath, drag, @@ -339,6 +369,8 @@ export function getInteractionMoveCommandsForSelectedElement( export function moveInspectorStrategy( metadata: ElementInstanceMetadataMap, + allElementProps: AllElementProps, + elementPathTree: ElementPathTrees, selectedElementPaths: ElementPath[], projectContents: ProjectContentTreeRoot, movement: CanvasVector, @@ -352,6 +384,8 @@ export function moveInspectorStrategy( const moveCommandsResult = getMoveCommandsForSelectedElement( projectContents, metadata, + allElementProps, + elementPathTree, selectedPath, selectedPath, movement, @@ -368,6 +402,8 @@ export function moveInspectorStrategy( export function directMoveInspectorStrategy( metadata: ElementInstanceMetadataMap, + allElementProps: AllElementProps, + elementPathTree: ElementPathTrees, selectedElementPaths: ElementPath[], projectContents: ProjectContentTreeRoot, leftOrTop: 'left' | 'top', @@ -382,6 +418,8 @@ export function directMoveInspectorStrategy( const moveCommandsResult = getDirectMoveCommandsForSelectedElement( projectContents, metadata, + allElementProps, + elementPathTree, selectedPath, selectedPath, leftOrTop, diff --git a/editor/src/components/canvas/canvas-utils.ts b/editor/src/components/canvas/canvas-utils.ts index 50b5f71e9ac6..2bfd96433fdc 100644 --- a/editor/src/components/canvas/canvas-utils.ts +++ b/editor/src/components/canvas/canvas-utils.ts @@ -63,7 +63,12 @@ import type { HighlightBoundsForUids, ExportsDetail, } from '../../core/shared/project-file-types' -import { isExportDefault, isParseSuccess, isTextFile } from '../../core/shared/project-file-types' +import { + importsEquals, + isExportDefault, + isParseSuccess, + isTextFile, +} from '../../core/shared/project-file-types' import { applyUtopiaJSXComponentsChanges, getDefaultExportedTopLevelElement, @@ -140,7 +145,11 @@ import { getStoryboardUID } from '../../core/model/scene-utils' import { optionalMap } from '../../core/shared/optional-utils' import { assertNever, fastForEach } from '../../core/shared/utils' import type { ProjectContentTreeRoot } from '../assets' -import { getProjectFileByFilePath } from '../assets' +import { + getProjectFileByFilePath, + isProjectContentDirectory, + isProjectContentFile, +} from '../assets' import type { CSSNumber } from '../inspector/common/css-utils' import { parseCSSLengthPercent, printCSSNumber } from '../inspector/common/css-utils' import { getTopLevelName, importedFromWhere } from '../editor/import-utils' @@ -347,6 +356,7 @@ export function updateFramesOfScenesAndComponents( const localFrame = MetadataUtils.getLocalFrame( frameAndTarget.target, workingEditorState.jsxMetadata, + null, ) const valueFromDOM = getObservableValueForLayoutProp( elementMetadata, @@ -430,7 +440,7 @@ export function updateFramesOfScenesAndComponents( frameAndTarget.frame, ) const currentLocalFrame = nullIfInfinity( - MetadataUtils.getLocalFrame(target, workingEditorState.jsxMetadata), + MetadataUtils.getLocalFrame(target, workingEditorState.jsxMetadata, null), ) const currentFullFrame = optionalMap(Frame.getFullFrame, currentLocalFrame) const fullFrame = Frame.getFullFrame(newLocalFrame) @@ -926,7 +936,7 @@ export function collectGuidelines( } const instance = MetadataUtils.findElementByElementPath(metadata, selectedView) - const localFrame = MetadataUtils.getLocalFrame(selectedView, metadata) + const localFrame = MetadataUtils.getLocalFrame(selectedView, metadata, null) if ( instance != null && MetadataUtils.isImg(instance) && @@ -2180,3 +2190,73 @@ export function canvasPanelOffsets(): { right: inspector?.clientWidth ?? 0, } } + +export function projectContentsSameForRefreshRequire( + oldProjectContents: ProjectContentTreeRoot, + newProjectContents: ProjectContentTreeRoot, +): boolean { + if (oldProjectContents === newProjectContents) { + // Identical references, so the imports are the same. + return true + } else { + for (const [filename, oldProjectTree] of Object.entries(oldProjectContents)) { + const newProjectTree = newProjectContents[filename] + // No need to check these further if they have the same reference. + if (oldProjectTree === newProjectTree) { + continue + } + // If the file can't be found in the other tree, the imports are not the same. + if (newProjectTree == null) { + return false + } + if (isProjectContentFile(oldProjectTree) && isProjectContentFile(newProjectTree)) { + // Both entries are files. + const oldContent = oldProjectTree.content + const newContent = newProjectTree.content + if (isTextFile(oldContent) || isTextFile(newContent)) { + if (isTextFile(oldContent) && isTextFile(newContent)) { + const oldParsed = oldContent.fileContents.parsed + const newParsed = newContent.fileContents.parsed + if (isParseSuccess(oldParsed) || isParseSuccess(newParsed)) { + if (isParseSuccess(oldParsed) && isParseSuccess(newParsed)) { + if ( + !importsEquals(oldParsed.imports, newParsed.imports) || + oldParsed.combinedTopLevelArbitraryBlock !== + newParsed.combinedTopLevelArbitraryBlock || + oldParsed.exportsDetail !== newParsed.exportsDetail + ) { + // For the same file the imports, combined top + // level arbitrary block or exports have changed. + return false + } + } else { + // One of the files is a parse success but the other is not. + return false + } + } + } else { + // One of the files is a text file but the other is not. + return false + } + } + } else if ( + isProjectContentDirectory(oldProjectTree) && + isProjectContentDirectory(newProjectTree) + ) { + // Both entries are directories. + if ( + !projectContentsSameForRefreshRequire(oldProjectTree.children, newProjectTree.children) + ) { + // The imports of the subdirectories differ. + return false + } + } else { + // One of the entries is a file and the other is a directory. + return false + } + } + } + + // If nothing differs, return true. + return true +} diff --git a/editor/src/components/canvas/commands/add-contain-layout-if-needed-command.ts b/editor/src/components/canvas/commands/add-contain-layout-if-needed-command.ts index 19364723ad6d..f9d67d83cb80 100644 --- a/editor/src/components/canvas/commands/add-contain-layout-if-needed-command.ts +++ b/editor/src/components/canvas/commands/add-contain-layout-if-needed-command.ts @@ -2,11 +2,10 @@ import { MetadataUtils } from '../../../core/model/element-metadata-utils' import * as EP from '../../../core/shared/element-path' import { emptyComments, jsExpressionValue } from '../../../core/shared/element-template' import type { ElementPath } from '../../../core/shared/project-file-types' -import { PropertyPath } from '../../../core/shared/project-file-types' import * as PP from '../../../core/shared/property-path' import type { EditorState } from '../../editor/store/editor-state' -import { applyValuesAtPath } from './adjust-number-command' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' +import { applyValuesAtPath } from './utils/property-utils' export interface AddContainLayoutIfNeeded extends BaseCommand { type: 'ADD_CONTAIN_LAYOUT_IF_NEEDED' diff --git a/editor/src/components/canvas/commands/adjust-css-length-command.ts b/editor/src/components/canvas/commands/adjust-css-length-command.ts index 90daf3c850e6..c7186760ec23 100644 --- a/editor/src/components/canvas/commands/adjust-css-length-command.ts +++ b/editor/src/components/canvas/commands/adjust-css-length-command.ts @@ -22,8 +22,8 @@ import { modifyUnderlyingForOpenFile } from '../../editor/store/editor-state' import type { CSSNumber, FlexDirection } from '../../inspector/common/css-utils' import { parseCSSPercent, parseCSSPx, printCSSNumber } from '../../inspector/common/css-utils' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' -import { deleteValuesAtPath } from './delete-properties-command' import { patchParseSuccessAtElementPath } from './patch-utils' +import { deleteValuesAtPath } from './utils/property-utils' export type CreateIfNotExistant = 'create-if-not-existing' | 'do-not-create-if-doesnt-exist' @@ -416,7 +416,7 @@ function getConflictingPropertiesToDelete( return propertiesToDelete } -export function deleteConflictingPropsForWidthHeightFromAttributes( +function deleteConflictingPropsForWidthHeightFromAttributes( attributes: JSXAttributes, propertyPath: PropertyPath, parentFlexDirection: FlexDirection | null, diff --git a/editor/src/components/canvas/commands/adjust-number-command.spec.tsx b/editor/src/components/canvas/commands/adjust-number-command.spec.tsx deleted file mode 100644 index 41ac2e58d9f5..000000000000 --- a/editor/src/components/canvas/commands/adjust-number-command.spec.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import update from 'immutability-helper' -import { styleStringInArray } from '../../../utils/common-constants' -import { createBuiltInDependenciesList } from '../../../core/es-modules/package-manager/built-in-dependencies-list' -import * as EP from '../../../core/shared/element-path' -import { getNumberPropertyFromProps } from '../../../core/shared/jsx-attributes' -import { complexDefaultProjectPreParsed } from '../../../sample-projects/sample-project-utils.test-utils' -import { withUnderlyingTargetFromEditorState } from '../../editor/store/editor-state' -import { stylePropPathMappingFn } from '../../inspector/common/property-path-hooks' -import { - DefaultStartingFeatureSwitches, - makeTestProjectCodeWithSnippet, - renderTestEditorWithCode, - renderTestEditorWithModel, -} from '../ui-jsx.test-utils' -import { adjustNumberProperty, runAdjustNumberProperty } from './adjust-number-command' -import { updateEditorStateWithPatches } from './commands' -import { isJSXElement } from '../../../core/shared/element-template' - -describe('adjustNumberProperty', () => { - it('works for left style prop', async () => { - const renderResult = await renderTestEditorWithModel( - complexDefaultProjectPreParsed(), - 'dont-await-first-dom-report', - DefaultStartingFeatureSwitches, - createBuiltInDependenciesList(null), - ) - - const cardInstancePath = EP.elementPath([ - ['storyboard-entity', 'scene-1-entity', 'app-entity'], - ['app-outer-div', 'card-instance'], - ]) - - const originalEditorState = renderResult.getEditorState().editor - - const originalLeftStyleProp = withUnderlyingTargetFromEditorState( - cardInstancePath, - originalEditorState, - null, - (success, element, underlyingTarget, underlyingFilePath) => { - if (isJSXElement(element)) { - return getNumberPropertyFromProps( - element.props, - stylePropPathMappingFn('left', styleStringInArray), - ) - } else { - return null - } - }, - )! - - const delta = 10 - - const adjustNumberPropertyCommand = adjustNumberProperty( - 'always', - cardInstancePath, - stylePropPathMappingFn('left', styleStringInArray), - delta, - true, - ) - - const result = runAdjustNumberProperty( - renderResult.getEditorState().editor, - adjustNumberPropertyCommand, - ) - - const patchedEditor = updateEditorStateWithPatches( - renderResult.getEditorState().editor, - result.editorStatePatches, - ) - - const updatedLeftStyleProp = withUnderlyingTargetFromEditorState( - cardInstancePath, - patchedEditor, - null, - (success, element, underlyingTarget, underlyingFilePath) => { - if (isJSXElement(element)) { - return getNumberPropertyFromProps( - element.props, - stylePropPathMappingFn('left', styleStringInArray), - ) - } else { - return null - } - }, - ) - - expect(updatedLeftStyleProp).toEqual(originalLeftStyleProp + delta) - }) - it('works for missing left style prop', async () => { - const renderResult = await renderTestEditorWithCode( - makeTestProjectCodeWithSnippet(` - - `), - 'dont-await-first-dom-report', - ) - - const elementPath = EP.elementPath([ - ['scene-aaa', 'app-entity'], - ['parent', 'child'], - ]) - - const delta = 10 - - // left prop is missing, it should be just set to the delta value - const adjustNumberPropertyCommand = adjustNumberProperty( - 'always', - elementPath, - stylePropPathMappingFn('left', styleStringInArray), - delta, - true, - ) - - const result = runAdjustNumberProperty( - renderResult.getEditorState().editor, - adjustNumberPropertyCommand, - ) - - const patchedEditor = updateEditorStateWithPatches( - renderResult.getEditorState().editor, - result.editorStatePatches, - ) - const updatedLeftStyleProp = withUnderlyingTargetFromEditorState( - elementPath, - patchedEditor, - null, - (success, element, underlyingTarget, underlyingFilePath) => { - if (isJSXElement(element)) { - return getNumberPropertyFromProps( - element.props, - stylePropPathMappingFn('left', styleStringInArray), - ) - } else { - return null - } - }, - ) - - expect(updatedLeftStyleProp).toEqual(delta) - }) -}) diff --git a/editor/src/components/canvas/commands/adjust-number-command.ts b/editor/src/components/canvas/commands/adjust-number-command.ts deleted file mode 100644 index 6750b8a0b328..000000000000 --- a/editor/src/components/canvas/commands/adjust-number-command.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { foldEither } from '../../../core/shared/either' -import * as EP from '../../../core/shared/element-path' -import type { JSXElement } from '../../../core/shared/element-template' -import { - emptyComments, - isJSXElement, - jsExpressionValue, -} from '../../../core/shared/element-template' -import type { ValueAtPath } from '../../../core/shared/jsx-attributes' -import { - getNumberPropertyFromProps, - setJSXValuesAtPaths, -} from '../../../core/shared/jsx-attributes' -import type { ElementPath, PropertyPath } from '../../../core/shared/project-file-types' -import * as PP from '../../../core/shared/property-path' -import type { EditorState, EditorStatePatch } from '../../editor/store/editor-state' -import { - modifyUnderlyingElementForOpenFile, - withUnderlyingTargetFromEditorState, -} from '../../editor/store/editor-state' -import type { BaseCommand, CommandFunction, WhenToRun } from './commands' -import { patchParseSuccessAtElementPath } from './patch-utils' - -export interface AdjustNumberProperty extends BaseCommand { - type: 'ADJUST_NUMBER_PROPERTY' - target: ElementPath - property: PropertyPath - value: number | AdjustNumberInequalityCondition - createIfNonExistant: boolean -} - -export function adjustNumberProperty( - whenToRun: WhenToRun, - target: ElementPath, - property: PropertyPath, - value: number | AdjustNumberInequalityCondition, - createIfNonExistant: boolean, -): AdjustNumberProperty { - return { - type: 'ADJUST_NUMBER_PROPERTY', - whenToRun: whenToRun, - target: target, - property: property, - value: value, - createIfNonExistant: createIfNonExistant, - } -} - -export type AdjustNumberCondition = 'less-than' | 'greater-than' - -export interface AdjustNumberInequalityCondition { - property: PropertyPath - condition: AdjustNumberCondition -} - -export function adjustNumberInequalityCondition( - property: PropertyPath, - condition: AdjustNumberCondition, -): AdjustNumberInequalityCondition { - return { - property: property, - condition: condition, - } -} - -export const runAdjustNumberProperty: CommandFunction = ( - editorState: EditorState, - command: AdjustNumberProperty, -) => { - // Handle updating the existing value, treating a value that can't be parsed - // as zero. - let newValue: number = 0 - - // Identify the current value, whatever that may be. - let targetPropertyNonExistant: boolean = false - let inequalityValue: number | null = null - const currentValue = withUnderlyingTargetFromEditorState( - command.target, - editorState, - null, - (success, element, underlyingTarget, underlyingFilePath) => { - if (isJSXElement(element)) { - // Check for the inequality adjustment target while we're here. - if (typeof command.value !== 'number') { - inequalityValue = getNumberPropertyFromProps(element.props, command.value.property) - } - - // Try the property we're updating. - const fromProperty = getNumberPropertyFromProps(element.props, command.property) - if (fromProperty == null) { - targetPropertyNonExistant = true - } else { - return fromProperty - } - } - return null - }, - ) - - if (targetPropertyNonExistant && !command.createIfNonExistant) { - return { - editorStatePatches: [], - commandDescription: `Adjust Number Prop: ${EP.toUid(command.target)}/${PP.toString( - command.property, - )} not applied as the property does not exist.`, - } - } else { - if (typeof command.value === 'number') { - if (currentValue != null) { - newValue += currentValue - } - - // Change the value. - newValue += command.value - } else { - if (currentValue != null && inequalityValue != null) { - switch (command.value.condition) { - case 'less-than': - if (inequalityValue <= currentValue) { - return { - editorStatePatches: [], - commandDescription: `Adjust Number Prop: ${EP.toUid(command.target)}/${PP.toString( - command.property, - )} not applied as value is large enough already.`, - } - } else { - newValue = inequalityValue - } - break - case 'greater-than': - if (inequalityValue >= currentValue) { - return { - editorStatePatches: [], - commandDescription: `Adjust Number Prop: ${EP.toUid(command.target)}/${PP.toString( - command.property, - )} not applied as value is small enough already.`, - } - } else { - newValue = inequalityValue - } - break - default: - const _exhaustiveCheck: never = command.value.condition - throw new Error(`Unhandled command condition of ${JSON.stringify(command.value)}`) - } - } - } - - const propsToUpdate: Array = [ - { - path: command.property, - value: jsExpressionValue(newValue, emptyComments), - }, - ] - - // Apply the update to the properties. - const { editorStatePatch: propertyUpdatePatch } = applyValuesAtPath( - editorState, - command.target, - propsToUpdate, - ) - - return { - editorStatePatches: [propertyUpdatePatch], - commandDescription: `Adjust Number Prop: ${EP.toUid(command.target)}/${PP.toString( - command.property, - )} by ${command.value}`, - } - } -} - -export function applyValuesAtPath( - editorState: EditorState, - target: ElementPath, - jsxValuesAndPathsToSet: ValueAtPath[], -): { editorStateWithChanges: EditorState; editorStatePatch: EditorStatePatch } { - const workingEditorState = modifyUnderlyingElementForOpenFile( - target, - editorState, - (element: JSXElement) => { - return foldEither( - () => { - return element - }, - (updatedProps) => { - return { - ...element, - props: updatedProps, - } - }, - setJSXValuesAtPaths(element.props, jsxValuesAndPathsToSet), - ) - }, - ) - - const editorStatePatch = patchParseSuccessAtElementPath(target, workingEditorState, (success) => { - return { - topLevelElements: { - $set: success.topLevelElements, - }, - imports: { - $set: success.imports, - }, - } - }) - - return { - editorStateWithChanges: workingEditorState, - editorStatePatch: editorStatePatch, - } -} diff --git a/editor/src/components/canvas/commands/commands.ts b/editor/src/components/canvas/commands/commands.ts index cf7428ce5209..816ad0c558cd 100644 --- a/editor/src/components/canvas/commands/commands.ts +++ b/editor/src/components/canvas/commands/commands.ts @@ -6,8 +6,6 @@ import type { EditorState, EditorStatePatch } from '../../editor/store/editor-st import type { CommandDescription } from '../canvas-strategies/interaction-state' import type { AdjustCssLengthProperties } from './adjust-css-length-command' import { runAdjustCssLengthProperties } from './adjust-css-length-command' -import type { AdjustNumberProperty } from './adjust-number-command' -import { runAdjustNumberProperty } from './adjust-number-command' import type { ConvertToAbsolute } from './convert-to-absolute-command' import { runConvertToAbsolute } from './convert-to-absolute-command' import type { ReorderElement } from './reorder-element-command' @@ -47,8 +45,6 @@ import type { InsertElementInsertionSubject } from './insert-element-insertion-s import { runInsertElementInsertionSubject } from './insert-element-insertion-subject' import type { AddElement } from './add-element-command' import { runAddElement } from './add-element-command' -import type { UpdatePropIfExists } from './update-prop-if-exists-command' -import { runUpdatePropIfExists } from './update-prop-if-exists-command' import type { HighlightElementsCommand } from './highlight-element-command' import { runHighlightElementsCommand } from './highlight-element-command' import type { InteractionLifecycle } from '../canvas-strategies/canvas-strategy-types' @@ -102,7 +98,6 @@ export type CanvasCommand = | WildcardPatch | UpdateFunctionCommand | StrategySwitched - | AdjustNumberProperty | AdjustCssLengthProperties | ReparentElement | DuplicateElement @@ -119,7 +114,6 @@ export type CanvasCommand = | PushIntendedBoundsAndUpdateHuggingElements | DeleteProperties | SetProperty - | UpdatePropIfExists | AddImportsToFile | AddToReparentedToPaths | InsertElementInsertionSubject @@ -151,8 +145,6 @@ export function runCanvasCommand( return runUpdateFunctionCommand(editorState, command, commandLifecycle) case 'STRATEGY_SWITCHED': return runStrategySwitchedCommand(command) - case 'ADJUST_NUMBER_PROPERTY': - return runAdjustNumberProperty(editorState, command) case 'ADJUST_CSS_LENGTH_PROPERTY': return runAdjustCssLengthProperties(editorState, command) case 'REPARENT_ELEMENT': @@ -187,8 +179,6 @@ export function runCanvasCommand( return runSetProperty(editorState, command) case 'UPDATE_BULK_PROPERTIES': return runBulkUpdateProperties(editorState, command) - case 'UPDATE_PROP_IF_EXISTS': - return runUpdatePropIfExists(editorState, command) case 'ADD_IMPORTS_TO_FILE': return runAddImportsToFile(editorState, command) case 'ADD_TO_REPARENTED_TO_PATHS': diff --git a/editor/src/components/canvas/commands/convert-css-percent-to-px-command.ts b/editor/src/components/canvas/commands/convert-css-percent-to-px-command.ts index 990dbc2ac63c..8b77cf92a033 100644 --- a/editor/src/components/canvas/commands/convert-css-percent-to-px-command.ts +++ b/editor/src/components/canvas/commands/convert-css-percent-to-px-command.ts @@ -16,8 +16,8 @@ import type { EditorState } from '../../editor/store/editor-state' import { withUnderlyingTargetFromEditorState } from '../../editor/store/editor-state' import type { CSSNumber } from '../../inspector/common/css-utils' import { parseCSSPercent, printCSSNumber } from '../../inspector/common/css-utils' -import { applyValuesAtPath } from './adjust-number-command' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' +import { applyValuesAtPath } from './utils/property-utils' export interface ConvertCssPercentToPx extends BaseCommand { type: 'CONVERT_CSS_PERCENT_TO_PX' diff --git a/editor/src/components/canvas/commands/convert-to-absolute-command.ts b/editor/src/components/canvas/commands/convert-to-absolute-command.ts index 7ecb5b1726ab..2effb0eef891 100644 --- a/editor/src/components/canvas/commands/convert-to-absolute-command.ts +++ b/editor/src/components/canvas/commands/convert-to-absolute-command.ts @@ -7,8 +7,8 @@ import type { ValueAtPath } from '../../../core/shared/jsx-attributes' import type { ElementPath } from '../../../core/shared/project-file-types' import type { EditorState, EditorStatePatch } from '../../editor/store/editor-state' import { stylePropPathMappingFn } from '../../inspector/common/property-path-hooks' -import { applyValuesAtPath } from './adjust-number-command' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' +import { applyValuesAtPath } from './utils/property-utils' export interface ConvertToAbsolute extends BaseCommand { type: 'CONVERT_TO_ABSOLUTE' diff --git a/editor/src/components/canvas/commands/delete-properties-command.ts b/editor/src/components/canvas/commands/delete-properties-command.ts index f1d8501385b3..65565b21d922 100644 --- a/editor/src/components/canvas/commands/delete-properties-command.ts +++ b/editor/src/components/canvas/commands/delete-properties-command.ts @@ -1,13 +1,9 @@ -import type { JSXElement } from '../../../core/shared/element-template' -import type { EditorState, EditorStatePatch } from '../../../components/editor/store/editor-state' -import { modifyUnderlyingElementForOpenFile } from '../../../components/editor/store/editor-state' -import { foldEither } from '../../../core/shared/either' -import { unsetJSXValuesAtPaths } from '../../../core/shared/jsx-attributes' +import type { EditorState } from '../../../components/editor/store/editor-state' import type { ElementPath, PropertyPath } from '../../../core/shared/project-file-types' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' import * as EP from '../../../core/shared/element-path' import * as PP from '../../../core/shared/property-path' -import { patchParseSuccessAtElementPath } from './patch-utils' +import { deleteValuesAtPath } from './utils/property-utils' export interface DeleteProperties extends BaseCommand { type: 'DELETE_PROPERTIES' @@ -46,43 +42,3 @@ export const runDeleteProperties: CommandFunction = ( .join(',')} on ${EP.toUid(command.element)}`, } } - -export function deleteValuesAtPath( - editorState: EditorState, - target: ElementPath, - properties: Array, -): { editorStateWithChanges: EditorState; editorStatePatch: EditorStatePatch } { - const workingEditorState = modifyUnderlyingElementForOpenFile( - target, - editorState, - (element: JSXElement) => { - return foldEither( - () => { - return element - }, - (updatedProps) => { - return { - ...element, - props: updatedProps, - } - }, - unsetJSXValuesAtPaths(element.props, properties), - ) - }, - ) - - const editorStatePatch = patchParseSuccessAtElementPath(target, workingEditorState, (success) => { - return { - topLevelElements: { - $set: success.topLevelElements, - }, - imports: { - $set: success.imports, - }, - } - }) - return { - editorStateWithChanges: workingEditorState, - editorStatePatch: editorStatePatch, - } -} diff --git a/editor/src/components/canvas/commands/set-css-length-command.ts b/editor/src/components/canvas/commands/set-css-length-command.ts index cde200d644a5..0a4bafc4d315 100644 --- a/editor/src/components/canvas/commands/set-css-length-command.ts +++ b/editor/src/components/canvas/commands/set-css-length-command.ts @@ -25,9 +25,9 @@ import { } from '../../inspector/common/css-utils' import type { CreateIfNotExistant } from './adjust-css-length-command' import { deleteConflictingPropsForWidthHeight } from './adjust-css-length-command' -import { applyValuesAtPath } from './adjust-number-command' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' import { addToastPatch } from './show-toast-command' +import { applyValuesAtPath } from './utils/property-utils' type CssNumberOrKeepOriginalUnit = | { type: 'EXPLICIT_CSS_NUMBER'; value: CSSNumber | CSSKeyword } diff --git a/editor/src/components/canvas/commands/set-property-command.ts b/editor/src/components/canvas/commands/set-property-command.ts index a7b06f27de13..ca791fd81306 100644 --- a/editor/src/components/canvas/commands/set-property-command.ts +++ b/editor/src/components/canvas/commands/set-property-command.ts @@ -8,9 +8,8 @@ import type { } from '../../../core/shared/project-file-types' import * as PP from '../../../core/shared/property-path' import type { EditorState } from '../../editor/store/editor-state' -import { applyValuesAtPath } from './adjust-number-command' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' -import { deleteValuesAtPath } from './delete-properties-command' +import { applyValuesAtPath, deleteValuesAtPath } from './utils/property-utils' type PositionProp = 'left' | 'top' | 'right' | 'bottom' | 'width' | 'height' diff --git a/editor/src/components/canvas/commands/update-class-list-command.ts b/editor/src/components/canvas/commands/update-class-list-command.ts index 208c80719ec8..1643ccbeea3c 100644 --- a/editor/src/components/canvas/commands/update-class-list-command.ts +++ b/editor/src/components/canvas/commands/update-class-list-command.ts @@ -14,8 +14,8 @@ import { import { getTailwindConfigCached } from '../../../core/tailwind/tailwind-compilation' import { getClassNameAttribute } from '../../../core/tailwind/tailwind-options' import { getElementFromProjectContents, type EditorState } from '../../editor/store/editor-state' -import { applyValuesAtPath } from './adjust-number-command' import type { BaseCommand, CommandFunction, WhenToRun } from './commands' +import { applyValuesAtPath } from './utils/property-utils' export interface UpdateClassList extends BaseCommand { type: 'UPDATE_CLASS_LIST' diff --git a/editor/src/components/canvas/commands/update-prop-if-exists-command.ts b/editor/src/components/canvas/commands/update-prop-if-exists-command.ts deleted file mode 100644 index 3f8677579462..000000000000 --- a/editor/src/components/canvas/commands/update-prop-if-exists-command.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { foldEither, isRight } from '../../../core/shared/either' -import * as EP from '../../../core/shared/element-path' -import { - emptyComments, - modifiableAttributeIsAttributeNotFound, - isJSXElement, - jsExpressionValue, -} from '../../../core/shared/element-template' -import { getModifiableJSXAttributeAtPath } from '../../../core/shared/jsx-attribute-utils' -import type { ElementPath, PropertyPath } from '../../../core/shared/project-file-types' -import * as PP from '../../../core/shared/property-path' -import type { EditorState } from '../../editor/store/editor-state' -import { withUnderlyingTargetFromEditorState } from '../../editor/store/editor-state' -import { applyValuesAtPath } from './adjust-number-command' -import type { BaseCommand, CommandFunction, WhenToRun } from './commands' - -export interface UpdatePropIfExists extends BaseCommand { - type: 'UPDATE_PROP_IF_EXISTS' - element: ElementPath - property: PropertyPath - value: string -} - -export function updatePropIfExists( - whenToRun: WhenToRun, - element: ElementPath, - property: PropertyPath, - value: string, -): UpdatePropIfExists { - return { - type: 'UPDATE_PROP_IF_EXISTS', - whenToRun: whenToRun, - element: element, - property: property, - value: value, - } -} - -export const runUpdatePropIfExists: CommandFunction = ( - editorState: EditorState, - command: UpdatePropIfExists, -) => { - // check if the prop exists - const propertyExists = withUnderlyingTargetFromEditorState( - command.element, - editorState, - false, - (_, element) => { - if (isJSXElement(element)) { - return foldEither( - () => false, - (value) => !modifiableAttributeIsAttributeNotFound(value), - getModifiableJSXAttributeAtPath(element.props, command.property), - ) - } else { - return false - } - }, - ) - - if (propertyExists) { - // Apply the update to the properties. - const { editorStatePatch: propertyUpdatePatch } = applyValuesAtPath( - editorState, - command.element, - [{ path: command.property, value: jsExpressionValue(command.value, emptyComments) }], - ) - - return { - editorStatePatches: [propertyUpdatePatch], - commandDescription: `Update Prop if Exists ${PP.toString(command.property)}=${JSON.stringify( - command.property, - null, - 2, - )} on ${EP.toUid(command.element)}`, - } - } else { - // no op return to prevent updating a nonexistant prop. if you want to set a prop regardless whether it exists or not, use the setPropertyCommand - return { - editorStatePatches: [], - commandDescription: `Update Prop if Exists did not find existing prop for ${PP.toString( - command.property, - )}`, - } - } -} diff --git a/editor/src/components/canvas/commands/utils/property-utils.ts b/editor/src/components/canvas/commands/utils/property-utils.ts new file mode 100644 index 000000000000..0198ad74bcc7 --- /dev/null +++ b/editor/src/components/canvas/commands/utils/property-utils.ts @@ -0,0 +1,88 @@ +import type { ElementPath, JSXElement, PropertyPath } from 'utopia-shared/src/types' +import { foldEither } from '../../../../core/shared/either' +import type { ValueAtPath } from '../../../../core/shared/jsx-attributes' +import { setJSXValuesAtPaths, unsetJSXValuesAtPaths } from '../../../../core/shared/jsx-attributes' +import type { EditorState, EditorStatePatch } from '../../../editor/store/editor-state' +import { modifyUnderlyingElementForOpenFile } from '../../../editor/store/editor-state' +import { patchParseSuccessAtElementPath } from '../patch-utils' + +export function applyValuesAtPath( + editorState: EditorState, + target: ElementPath, + jsxValuesAndPathsToSet: ValueAtPath[], +): { editorStateWithChanges: EditorState; editorStatePatch: EditorStatePatch } { + const workingEditorState = modifyUnderlyingElementForOpenFile( + target, + editorState, + (element: JSXElement) => { + return foldEither( + () => { + return element + }, + (updatedProps) => { + return { + ...element, + props: updatedProps, + } + }, + setJSXValuesAtPaths(element.props, jsxValuesAndPathsToSet), + ) + }, + ) + + const editorStatePatch = patchParseSuccessAtElementPath(target, workingEditorState, (success) => { + return { + topLevelElements: { + $set: success.topLevelElements, + }, + imports: { + $set: success.imports, + }, + } + }) + + return { + editorStateWithChanges: workingEditorState, + editorStatePatch: editorStatePatch, + } +} + +export function deleteValuesAtPath( + editorState: EditorState, + target: ElementPath, + properties: Array, +): { editorStateWithChanges: EditorState; editorStatePatch: EditorStatePatch } { + const workingEditorState = modifyUnderlyingElementForOpenFile( + target, + editorState, + (element: JSXElement) => { + return foldEither( + () => { + return element + }, + (updatedProps) => { + return { + ...element, + props: updatedProps, + } + }, + unsetJSXValuesAtPaths(element.props, properties), + ) + }, + ) + + const editorStatePatch = patchParseSuccessAtElementPath(target, workingEditorState, (success) => { + return { + topLevelElements: { + $set: success.topLevelElements, + }, + imports: { + $set: success.imports, + }, + } + }) + return { + editorStateWithChanges: workingEditorState, + editorStatePatch: editorStatePatch, + } +} diff --git a/editor/src/components/canvas/controls/grid-controls.tsx b/editor/src/components/canvas/controls/grid-controls.tsx index 756944ad8a37..2cb226ce961e 100644 --- a/editor/src/components/canvas/controls/grid-controls.tsx +++ b/editor/src/components/canvas/controls/grid-controls.tsx @@ -63,7 +63,7 @@ import { import type { GridCellCoordinates } from '../canvas-strategies/strategies/grid-cell-bounds' import { gridCellTargetId } from '../canvas-strategies/strategies/grid-cell-bounds' import { - getGlobalFrameOfGridCell, + getGlobalFrameOfGridCellFromMetadata, getGridRelatedIndexes, } from '../canvas-strategies/strategies/grid-helpers' import { canResizeGridTemplate } from '../canvas-strategies/strategies/resize-grid-strategy' @@ -309,7 +309,7 @@ const GridResizingStripedIndicator = React.memo((props: GridResizingControlProps }} > {when( - props.dimension.areaName != null, + props.dimension.lineName != null,
- {props.dimension.areaName} + {props.dimension.lineName}
, )}
, @@ -1153,7 +1153,7 @@ const AbsoluteDistanceIndicators = React.memo( if (gridMetadata == null || props.targetRootCell == null) { return null } - return getGlobalFrameOfGridCell(gridMetadata, props.targetRootCell) + return getGlobalFrameOfGridCellFromMetadata(gridMetadata, props.targetRootCell) }, [props.targetRootCell, gridMetadata]) const distanceTop = @@ -1460,7 +1460,7 @@ function useCellAnimation(params: { return null } - return getGlobalFrameOfGridCell(gridMetadata, targetRootCell) + return getGlobalFrameOfGridCellFromMetadata(gridMetadata, targetRootCell) }, [gridMetadata, targetRootCell]) React.useEffect(() => { diff --git a/editor/src/components/canvas/controls/select-mode/flex-gap-control.test-utils.tsx b/editor/src/components/canvas/controls/select-mode/flex-gap-control.test-utils.tsx index a17811afdd54..a5d6243d21ae 100644 --- a/editor/src/components/canvas/controls/select-mode/flex-gap-control.test-utils.tsx +++ b/editor/src/components/canvas/controls/select-mode/flex-gap-control.test-utils.tsx @@ -38,6 +38,7 @@ export async function checkFlexGapHandlesPositionedCorrectly( const localFrame = MetadataUtils.getLocalFrame( selectedElement.elementPath, editorState.jsxMetadata, + null, ) const selectedElementFrame = zeroRectIfNullOrInfinity(localFrame) // If this is a flex element and it has a gap specified. diff --git a/editor/src/components/canvas/controls/select-mode/flex-gap-control.tsx b/editor/src/components/canvas/controls/select-mode/flex-gap-control.tsx index 950974fdf078..f210ec1e0621 100644 --- a/editor/src/components/canvas/controls/select-mode/flex-gap-control.tsx +++ b/editor/src/components/canvas/controls/select-mode/flex-gap-control.tsx @@ -178,7 +178,7 @@ export const FlexGapControl = controlForStrategyMemoized((p const bounds = boundingRectangleArray( mapDropNulls((c) => { - const localFrame = MetadataUtils.getLocalFrame(c.elementPath, metadata) + const localFrame = MetadataUtils.getLocalFrame(c.elementPath, metadata, null) return localFrame != null && isFiniteRectangle(localFrame) ? localFrame : null }, children), ) diff --git a/editor/src/components/canvas/dom-walker.ts b/editor/src/components/canvas/dom-walker.ts index 60f3d3c5f1ab..05c167799c1d 100644 --- a/editor/src/components/canvas/dom-walker.ts +++ b/editor/src/components/canvas/dom-walker.ts @@ -64,7 +64,7 @@ import { } from '../../core/model/utopia-constants' import { emptySet } from '../../core/shared/set-utils' import { getDeepestPathOnDomElement, getPathStringsOnDomElement } from '../../core/shared/uid-utils' -import { forceNotNull } from '../../core/shared/optional-utils' +import { forceNotNull, optionalMap } from '../../core/shared/optional-utils' import { fastForEach } from '../../core/shared/utils' import type { EditorState, EditorStorePatched } from '../editor/store/editor-state' import { shallowEqual } from '../../core/shared/equality-utils' @@ -921,10 +921,25 @@ function getSpecialMeasurements( ? padding.value : sides(undefined, undefined, undefined, undefined) + const pathStr = element.getAttribute(UTOPIA_PATH_KEY) + const path = optionalMap(EP.fromString, pathStr) + const gridCellGlobalFrames = - layoutSystemForChildren === 'grid' + path != null && layoutSystemForChildren === 'grid' ? measureGlobalFramesOfGridCellsFromControl( - element, + path, + scale, + containerRectLazy, + elementCanvasRectangleCache, + ) + : null + + const parentGridCellGlobalFrames = + element.parentElement != null && + elementLayoutSystem(parentElementStyle) === 'grid' && + path != null + ? measureGlobalFramesOfGridCellsFromControl( + EP.parentPath(path), scale, containerRectLazy, elementCanvasRectangleCache, @@ -932,6 +947,7 @@ function getSpecialMeasurements( : null const containerGridPropertiesFromProps = getGridContainerProperties(element.style) + const parentContainerGridPropertiesFromProps = getGridContainerProperties(parentElementStyle) const containerGridProperties = getGridContainerProperties(elementStyle, { dynamicCols: isDynamicGridTemplate(containerGridPropertiesFromProps.gridTemplateColumns), dynamicRows: isDynamicGridTemplate(containerGridPropertiesFromProps.gridTemplateRows), @@ -993,12 +1009,15 @@ function getSpecialMeasurements( textBounds, computedHugProperty, containerGridProperties, + parentContainerGridProperties, containerElementProperties, containerGridPropertiesFromProps, + parentContainerGridPropertiesFromProps, containerElementPropertiesFromProps, rowGap, columnGap, gridCellGlobalFrames, + parentGridCellGlobalFrames, justifySelf, alignSelf, ) @@ -1063,46 +1082,42 @@ function getClosestOffsetParent(element: HTMLElement): Element | null { } function measureGlobalFramesOfGridCellsFromControl( - grid: HTMLElement, + gridPath: ElementPath, scale: number, containerRectLazy: CanvasPoint | (() => CanvasPoint), elementCanvasRectangleCache: ElementCanvasRectangleCache, ): GridCellGlobalFrames | null { - const path = grid.getAttribute(UTOPIA_PATH_KEY) - let gridCellGlobalFrames: Array> | null = null - if (path != null) { - const gridControlElement = document.getElementById( - GridMeasurementHelperKey(EP.fromString(path)), - ) - if (gridControlElement != null) { - gridCellGlobalFrames = [] - for (const cell of gridControlElement.children) { - if (!(cell instanceof HTMLElement)) { - continue - } - const rowIndexAttr = cell.getAttribute('data-grid-row') - const columnIndexAttr = cell.getAttribute('data-grid-column') - if (rowIndexAttr == null || columnIndexAttr == null) { - continue - } - const rowIndex = parseInt(rowIndexAttr) - const columnIndex = parseInt(columnIndexAttr) - if (!isFinite(rowIndex) || !isFinite(columnIndex)) { - continue - } - const row = gridCellGlobalFrames[rowIndex - 1] - if (row == null) { - gridCellGlobalFrames[rowIndex - 1] = [] - } - gridCellGlobalFrames[rowIndex - 1][columnIndex - 1] = globalFrameForElement( - cell, - scale, - containerRectLazy, - 'without-text-content', - 'nearest-half', - elementCanvasRectangleCache, - ) + const path = EP.toString(gridPath) + let gridCellGlobalFrames: GridCellGlobalFrames | null = null + const gridControlElement = document.getElementById(GridMeasurementHelperKey(EP.fromString(path))) + if (gridControlElement != null) { + gridCellGlobalFrames = [] + for (const cell of gridControlElement.children) { + if (!(cell instanceof HTMLElement)) { + continue + } + const rowIndexAttr = cell.getAttribute('data-grid-row') + const columnIndexAttr = cell.getAttribute('data-grid-column') + if (rowIndexAttr == null || columnIndexAttr == null) { + continue } + const rowIndex = parseInt(rowIndexAttr) + const columnIndex = parseInt(columnIndexAttr) + if (!isFinite(rowIndex) || !isFinite(columnIndex)) { + continue + } + const row = gridCellGlobalFrames[rowIndex - 1] + if (row == null) { + gridCellGlobalFrames[rowIndex - 1] = [] + } + gridCellGlobalFrames[rowIndex - 1][columnIndex - 1] = globalFrameForElement( + cell, + scale, + containerRectLazy, + 'without-text-content', + 'nearest-half', + elementCanvasRectangleCache, + ) } } return gridCellGlobalFrames diff --git a/editor/src/components/canvas/ui-jsx-canvas-renderer/ui-jsx-canvas-code-execution.spec.browser2.tsx b/editor/src/components/canvas/ui-jsx-canvas-renderer/ui-jsx-canvas-code-execution.spec.browser2.tsx index f59ebb86be40..bf8132dc9f15 100644 --- a/editor/src/components/canvas/ui-jsx-canvas-renderer/ui-jsx-canvas-code-execution.spec.browser2.tsx +++ b/editor/src/components/canvas/ui-jsx-canvas-renderer/ui-jsx-canvas-code-execution.spec.browser2.tsx @@ -215,13 +215,18 @@ describe('Re-mounting is avoided when', () => { await switchToLiveMode(renderResult) + function checkClicky(expectedContentText: string): void { + const clicky = renderResult.renderedDOM.getByTestId('clicky') + expect(clicky.innerText).toEqual(expectedContentText) + } + // Ensure we can find the original text - expect(renderResult.renderedDOM.queryByText('Clicked 0 times')).not.toBeNull() + checkClicky('Clicked 0 times') await clickButton(renderResult) // Ensure it has been updated - expect(renderResult.renderedDOM.queryByText('Clicked 1 times')).not.toBeNull() + checkClicky('Clicked 1 times') // Update the top level arbitrary JS block await updateCode( @@ -231,7 +236,7 @@ describe('Re-mounting is avoided when', () => { ) // Check that it has updated without resetting the state - expect(renderResult.renderedDOM.queryByText('Clicked: 1 times')).not.toBeNull() + checkClicky('Clicked: 1 times') // Update the component itself await updateCode( @@ -241,7 +246,7 @@ describe('Re-mounting is avoided when', () => { ) // Check again that it has updated without resetting the state - expect(renderResult.renderedDOM.queryByText('Clicked: 1 times!')).not.toBeNull() + checkClicky('Clicked: 1 times!') }) it('arbitrary JS or a component is edited in a remix project', async () => { diff --git a/editor/src/components/canvas/ui-jsx-canvas.tsx b/editor/src/components/canvas/ui-jsx-canvas.tsx index 85239c3dce47..5912a6c1ca57 100644 --- a/editor/src/components/canvas/ui-jsx-canvas.tsx +++ b/editor/src/components/canvas/ui-jsx-canvas.tsx @@ -75,7 +75,11 @@ import { } from './ui-jsx-canvas-renderer/ui-jsx-canvas-execution-scope' import { applyUIDMonkeyPatch } from '../../utils/canvas-react-utils' import type { RemixValidPathsGenerationContext } from './canvas-utils' -import { getParseSuccessForFilePath, getValidElementPaths } from './canvas-utils' +import { + projectContentsSameForRefreshRequire, + getParseSuccessForFilePath, + getValidElementPaths, +} from './canvas-utils' import { arrayEqualsByValue, fastForEach, NO_OP } from '../../core/shared/utils' import { AlwaysFalse, @@ -360,20 +364,13 @@ export const UiJsxCanvas = React.memo((props) useClearSpyMetadataOnRemount(props.invalidatedCanvasData, isRemounted, metadataContext) - const elementsToRerenderRef = React.useRef(ElementsToRerenderGLOBAL.current) - const shouldRerenderRef = React.useRef(false) - shouldRerenderRef.current = - ElementsToRerenderGLOBAL.current === 'rerender-all-elements' || - elementsToRerenderRef.current === 'rerender-all-elements' || // TODO this means the first drag frame will still be slow, figure out a nicer way to immediately switch to true. probably this should live in a dedicated a function - !arrayEqualsByValue( - ElementsToRerenderGLOBAL.current, - elementsToRerenderRef.current, - EP.pathsEqual, - ) // once we get here, we know that both `ElementsToRerenderGLOBAL.current` and `elementsToRerenderRef.current` are arrays - elementsToRerenderRef.current = ElementsToRerenderGLOBAL.current - const maybeOldProjectContents = React.useRef(projectContents) - if (shouldRerenderRef.current) { + + const projectContentsSimilarEnough = projectContentsSameForRefreshRequire( + maybeOldProjectContents.current, + projectContents, + ) + if (!projectContentsSimilarEnough) { maybeOldProjectContents.current = projectContents } @@ -498,7 +495,7 @@ export const UiJsxCanvas = React.memo((props) const executionScope = scope - useTailwindCompilation(customRequire) + useTailwindCompilation() const topLevelElementsMap = useKeepReferenceEqualityIfPossible(new Map(topLevelJsxComponents)) diff --git a/editor/src/components/common/shared-strategies/convert-to-flex-strategy.ts b/editor/src/components/common/shared-strategies/convert-to-flex-strategy.ts index 812fd1f10dc7..f1963d1ee0c4 100644 --- a/editor/src/components/common/shared-strategies/convert-to-flex-strategy.ts +++ b/editor/src/components/common/shared-strategies/convert-to-flex-strategy.ts @@ -174,7 +174,7 @@ function convertThreeElementGroupRow( ).map((element) => { return { ...element, - localFrame: MetadataUtils.getLocalFrame(element.elementPath, metadata), + localFrame: MetadataUtils.getLocalFrame(element.elementPath, metadata, null), } }) if (childrenMetadata.length === 3) { diff --git a/editor/src/components/editor/actions/action-utils.ts b/editor/src/components/editor/actions/action-utils.ts index d15065eceaae..21bf6e0852ba 100644 --- a/editor/src/components/editor/actions/action-utils.ts +++ b/editor/src/components/editor/actions/action-utils.ts @@ -373,7 +373,6 @@ export function getElementsToNormalizeFromCommands(commands: CanvasCommand[]): E switch (command.type) { case 'ADJUST_CSS_LENGTH_PROPERTY': case 'SET_CSS_LENGTH_PROPERTY': - case 'ADJUST_NUMBER_PROPERTY': case 'CONVERT_CSS_PERCENT_TO_PX': case 'CONVERT_TO_ABSOLUTE': return command.target diff --git a/editor/src/components/editor/actions/actions.tsx b/editor/src/components/editor/actions/actions.tsx index f818fc1e1f79..090d109b6898 100644 --- a/editor/src/components/editor/actions/actions.tsx +++ b/editor/src/components/editor/actions/actions.tsx @@ -547,10 +547,7 @@ import { replaceWithElementsWrappedInFragmentBehaviour, } from '../store/insertion-path' import { getConditionalCaseCorrespondingToBranchPath } from '../../../core/model/conditionals' -import { - deleteProperties, - deleteValuesAtPath, -} from '../../canvas/commands/delete-properties-command' +import { deleteProperties } from '../../canvas/commands/delete-properties-command' import { treatElementAsFragmentLike } from '../../canvas/canvas-strategies/strategies/fragment-like-helpers' import { fixParentContainingBlockSettings, @@ -631,7 +628,6 @@ import { isReplaceKeepChildrenAndStyleTarget } from '../../navigator/navigator-i import { canCondenseJSXElementChild } from '../../../utils/can-condense' import { getNavigatorTargetsFromEditorState } from '../../navigator/navigator-utils' import { getParseCacheOptions } from '../../../core/shared/parse-cache-utils' -import { applyValuesAtPath } from '../../canvas/commands/adjust-number-command' import { styleP } from '../../inspector/inspector-common' import { getUpdateOperationResult } from '../../../core/shared/import/import-operation-service' import { @@ -640,6 +636,7 @@ import { updateRequirements, } from '../../../core/shared/import/proejct-health-check/utopia-requirements-service' import { RequirementResolutionResult } from '../../../core/shared/import/proejct-health-check/utopia-requirements-types' +import { applyValuesAtPath, deleteValuesAtPath } from '../../canvas/commands/utils/property-utils' export const MIN_CODE_PANE_REOPEN_WIDTH = 100 @@ -1145,7 +1142,7 @@ function deleteElements( if (metadata == null || isLeft(metadata.element)) { return null } - const frame = MetadataUtils.getLocalFrame(path, editor.jsxMetadata) + const frame = MetadataUtils.getLocalFrame(path, editor.jsxMetadata, null) if (frame == null || !isFiniteRectangle(frame)) { return null } @@ -3385,7 +3382,7 @@ export const UPDATE_FNS = { }, RESET_PINS: (action: ResetPins, editor: EditorModel): EditorModel => { const target = action.target - const frame = MetadataUtils.getLocalFrame(target, editor.jsxMetadata) + const frame = MetadataUtils.getLocalFrame(target, editor.jsxMetadata, null) if (frame == null || isInfinityRectangle(frame)) { return editor @@ -3413,7 +3410,7 @@ export const UPDATE_FNS = { } }, UPDATE_FRAME_DIMENSIONS: (action: UpdateFrameDimensions, editor: EditorModel): EditorModel => { - const initialFrame = MetadataUtils.getLocalFrame(action.element, editor.jsxMetadata) + const initialFrame = MetadataUtils.getLocalFrame(action.element, editor.jsxMetadata, null) if (initialFrame == null || isInfinityRectangle(initialFrame)) { return editor @@ -5592,6 +5589,7 @@ export const UPDATE_FNS = { const localFrame = MetadataUtils.getLocalFrame( action.insertionPath.intendedParentPath, editor.jsxMetadata, + null, ) if (group != null && localFrame != null) { switch (element.type) { diff --git a/editor/src/components/editor/defaults.ts b/editor/src/components/editor/defaults.ts index 1652011c6c3e..d3584072378b 100644 --- a/editor/src/components/editor/defaults.ts +++ b/editor/src/components/editor/defaults.ts @@ -98,11 +98,12 @@ export function defaultRectangleElementStyle(): JSExpression { export function defaultRectangleElement(uid: string): JSXElement { return jsxElement( - jsxElementName('Rectangle', []), + jsxElementName('div', []), uid, jsxAttributesFromMap({ style: defaultRectangleElementStyle(), 'data-uid': jsExpressionValue(uid, emptyComments), + 'data-label': jsExpressionValue('Rectangle', emptyComments), }), [], ) diff --git a/editor/src/components/editor/global-shortcuts.tsx b/editor/src/components/editor/global-shortcuts.tsx index ef19ed9c7287..d752adab41a5 100644 --- a/editor/src/components/editor/global-shortcuts.tsx +++ b/editor/src/components/editor/global-shortcuts.tsx @@ -653,9 +653,7 @@ export function handleKeyDown( EditorActions.enableInsertModeForJSXElement( defaultRectangleElement(newUID), newUID, - { - 'utopia-api': importDetails(null, [importAlias('Rectangle')], null), - }, + {}, null, ), modifiers, diff --git a/editor/src/components/editor/one-shot-insertion-strategies/insert-as-absolute-strategy.tsx b/editor/src/components/editor/one-shot-insertion-strategies/insert-as-absolute-strategy.tsx index db58c7c4a590..4358eeae2143 100644 --- a/editor/src/components/editor/one-shot-insertion-strategies/insert-as-absolute-strategy.tsx +++ b/editor/src/components/editor/one-shot-insertion-strategies/insert-as-absolute-strategy.tsx @@ -72,6 +72,7 @@ export const insertAsAbsoluteStrategy = ( metadata, state.projectContents, 'force-pins', + 'dont-add-contain-layout', ), setProperty('always', result.newPath, PP.create('style', 'position'), 'absolute'), ], diff --git a/editor/src/components/editor/one-shot-unwrap-strategies/reparent-to-unwrap-as-absolute-strategy.tsx b/editor/src/components/editor/one-shot-unwrap-strategies/reparent-to-unwrap-as-absolute-strategy.tsx index f6fa75be2874..1734b52a4b1d 100644 --- a/editor/src/components/editor/one-shot-unwrap-strategies/reparent-to-unwrap-as-absolute-strategy.tsx +++ b/editor/src/components/editor/one-shot-unwrap-strategies/reparent-to-unwrap-as-absolute-strategy.tsx @@ -48,6 +48,7 @@ export const reparentToUnwrapAsAbsoluteStrategy = ( projectContents, nodeModules, 'do-not-force-pins', + 'dont-add-contain-layout', ) if (result == null) { diff --git a/editor/src/components/editor/store/store-deep-equality-instances-3.spec.ts b/editor/src/components/editor/store/store-deep-equality-instances-3.spec.ts index 3efbf85ed95b..d4b0f00ce07c 100644 --- a/editor/src/components/editor/store/store-deep-equality-instances-3.spec.ts +++ b/editor/src/components/editor/store/store-deep-equality-instances-3.spec.ts @@ -302,6 +302,13 @@ describe('SpecialSizeMeasurementsKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -315,6 +322,13 @@ describe('SpecialSizeMeasurementsKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -324,6 +338,7 @@ describe('SpecialSizeMeasurementsKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, } @@ -425,6 +440,13 @@ describe('SpecialSizeMeasurementsKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -438,6 +460,13 @@ describe('SpecialSizeMeasurementsKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -447,6 +476,7 @@ describe('SpecialSizeMeasurementsKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, } @@ -603,6 +633,13 @@ describe('ElementInstanceMetadataKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -616,6 +653,13 @@ describe('ElementInstanceMetadataKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -625,6 +669,7 @@ describe('ElementInstanceMetadataKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, }, @@ -758,6 +803,13 @@ describe('ElementInstanceMetadataKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -771,6 +823,13 @@ describe('ElementInstanceMetadataKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -780,6 +839,7 @@ describe('ElementInstanceMetadataKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, }, @@ -938,6 +998,13 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -951,6 +1018,13 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -960,6 +1034,7 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, }, @@ -1095,6 +1170,13 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -1108,6 +1190,13 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -1117,6 +1206,7 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, }, @@ -1252,6 +1342,13 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridProperties: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridProperties: { gridColumnStart: null, gridColumnEnd: null, @@ -1265,6 +1362,13 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { gridAutoRows: null, gridAutoFlow: null, }, + parentContainerGridPropertiesFromProps: { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, elementGridPropertiesFromProps: { gridColumnStart: null, gridColumnEnd: null, @@ -1274,6 +1378,7 @@ describe('ElementInstanceMetadataMapKeepDeepEquality', () => { rowGap: null, columnGap: null, gridCellGlobalFrames: null, + parentGridCellGlobalFrames: null, justifySelf: null, alignSelf: null, }, diff --git a/editor/src/components/editor/store/store-deep-equality-instances.ts b/editor/src/components/editor/store/store-deep-equality-instances.ts index 524e55741061..912ab4eb153c 100644 --- a/editor/src/components/editor/store/store-deep-equality-instances.ts +++ b/editor/src/components/editor/store/store-deep-equality-instances.ts @@ -1986,7 +1986,7 @@ export const GridCSSNumberKeepDeepEquality: KeepDeepEqualityCall combine2EqualityCalls( (p) => p.value, CSSNumberKeepDeepEquality, - (p) => p.areaName, + (p) => p.lineName, NullableStringKeepDeepEquality, gridCSSNumber, ) @@ -1995,7 +1995,7 @@ export const GridCSSKeywordKeepDeepEquality: KeepDeepEqualityCall p.value, createCallWithTripleEquals(), - (p) => p.areaName, + (p) => p.lineName, NullableStringKeepDeepEquality, gridCSSKeyword, ) @@ -2039,7 +2039,7 @@ export const GridCSSRepeatKeepDeepEquality: KeepDeepEqualityCall createCallWithTripleEquals(), (p) => p.value, arrayDeepEquality(GridDimensionKeepDeepEquality), - (p) => p.areaName, + (p) => p.lineName, NullableStringKeepDeepEquality, gridCSSRepeat, ) @@ -2073,7 +2073,7 @@ export const GridCSSMinmaxKeepDeepEquality: KeepDeepEqualityCall GridCSSNumberOrKeywordKeepDeepEquality, (p) => p.max, GridCSSNumberOrKeywordKeepDeepEquality, - (p) => p.areaName, + (p) => p.lineName, NullableStringKeepDeepEquality, gridCSSMinmax, ) @@ -2256,6 +2256,10 @@ export function SpecialSizeMeasurementsKeepDeepEquality(): KeepDeepEqualityCall< oldSize.containerGridProperties, newSize.containerGridProperties, ).areEqual + const parentGridContainerPropertiesEqual = GridContainerPropertiesKeepDeepEquality()( + oldSize.parentContainerGridProperties, + newSize.parentContainerGridProperties, + ).areEqual const gridElementPropertiesEqual = GridElementPropertiesKeepDeepEquality()( oldSize.elementGridProperties, newSize.elementGridProperties, @@ -2265,6 +2269,10 @@ export function SpecialSizeMeasurementsKeepDeepEquality(): KeepDeepEqualityCall< oldSize.containerGridPropertiesFromProps, newSize.containerGridPropertiesFromProps, ).areEqual + const parentGridContainerPropertiesFromPropsEqual = GridContainerPropertiesKeepDeepEquality()( + oldSize.parentContainerGridPropertiesFromProps, + newSize.parentContainerGridPropertiesFromProps, + ).areEqual const gridElementPropertiesFromPropsEqual = GridElementPropertiesKeepDeepEquality()( oldSize.elementGridPropertiesFromProps, newSize.elementGridPropertiesFromProps, @@ -2279,6 +2287,13 @@ export function SpecialSizeMeasurementsKeepDeepEquality(): KeepDeepEqualityCall< const justifySelfEquals = oldSize.justifySelf === newSize.justifySelf const alignSelfEquals = oldSize.alignSelf === newSize.alignSelf + const gridCellGlobalFramesEqual = nullableDeepEquality( + arrayDeepEquality(arrayDeepEquality(CanvasRectangleKeepDeepEquality)), + )(oldSize.gridCellGlobalFrames, newSize.gridCellGlobalFrames).areEqual + const parentGridCellGlobalFramesEqual = nullableDeepEquality( + arrayDeepEquality(arrayDeepEquality(CanvasRectangleKeepDeepEquality)), + )(oldSize.gridCellGlobalFrames, newSize.gridCellGlobalFrames).areEqual + const areEqual = offsetResult.areEqual && coordinateSystemBoundsResult.areEqual && @@ -2323,13 +2338,17 @@ export function SpecialSizeMeasurementsKeepDeepEquality(): KeepDeepEqualityCall< textBoundsEqual && computedHugPropertyEqual && gridContainerPropertiesEqual && + parentGridContainerPropertiesEqual && gridElementPropertiesEqual && gridContainerPropertiesFromPropsEqual && + parentGridContainerPropertiesFromPropsEqual && gridElementPropertiesFromPropsEqual && rowGapEquals && columnGapEquals && justifySelfEquals && - alignSelfEquals + alignSelfEquals && + gridCellGlobalFramesEqual && + parentGridCellGlobalFramesEqual if (areEqual) { return keepDeepEqualityResult(oldSize, true) } else { @@ -2378,12 +2397,15 @@ export function SpecialSizeMeasurementsKeepDeepEquality(): KeepDeepEqualityCall< newSize.textBounds, newSize.computedHugProperty, newSize.containerGridProperties, + newSize.parentContainerGridProperties, newSize.elementGridProperties, newSize.containerGridPropertiesFromProps, + newSize.parentContainerGridPropertiesFromProps, newSize.elementGridPropertiesFromProps, newSize.rowGap, newSize.columnGap, newSize.gridCellGlobalFrames, + newSize.parentGridCellGlobalFrames, newSize.justifySelf, newSize.alignSelf, ) diff --git a/editor/src/components/inspector/common/css-utils.ts b/editor/src/components/inspector/common/css-utils.ts index 82b0ddcfd882..a275e06c50ec 100644 --- a/editor/src/components/inspector/common/css-utils.ts +++ b/editor/src/components/inspector/common/css-utils.ts @@ -574,6 +574,10 @@ const CSSNumberUnits: Array = [ '%', ] +export function isFR(unit: CSSNumberUnit): unit is 'fr' { + return unit === 'fr' +} + export interface CSSNumber { value: number unit: CSSNumberUnit | null @@ -583,7 +587,7 @@ export type GridCSSNumberUnit = LengthUnit | ResolutionUnit | PercentUnit | 'fr' const GridCSSNumberUnits: Array = [...LengthUnits, ...ResolutionUnits, '%', 'fr'] type BaseGridDimension = { - areaName: string | null + lineName: string | null } export type GridCSSNumber = BaseGridDimension & { @@ -630,17 +634,17 @@ export function gridDimensionsAreEqual(a: GridDimension, b: GridDimension): bool type BaseGridCSSRepeat = { type: 'REPEAT' value: Array - areaName: string | null + lineName: string | null } function baseGridCSSRepeat( value: Array, - areaName: string | null, + lineName: string | null, ): BaseGridCSSRepeat { return { type: 'REPEAT', value: value, - areaName: areaName, + lineName: lineName, } } @@ -651,10 +655,10 @@ type GridCSSRepeatStatic = BaseGridCSSRepeat & { function gridCSSRepeatStatic( times: number, value: Array, - areaName: string | null, + lineName: string | null, ): GridCSSRepeatStatic { return { - ...baseGridCSSRepeat(value, areaName), + ...baseGridCSSRepeat(value, lineName), times: times, } } @@ -666,10 +670,10 @@ type GridCSSRepeatDynamic = BaseGridCSSRepeat & { function gridCSSRepeatDynamic( times: CSSKeyword<'auto-fill' | 'auto-fit'>, value: Array, - areaName: string | null, + lineName: string | null, ): GridCSSRepeatDynamic { return { - ...baseGridCSSRepeat(value, areaName), + ...baseGridCSSRepeat(value, lineName), times: times, } } @@ -713,24 +717,24 @@ export function isGridCSSKeyword(dim: GridDimension): dim is GridCSSKeyword { export function gridCSSKeyword( value: CSSKeyword, - areaName: string | null, + lineName: string | null, ): GridCSSKeyword { return { type: 'KEYWORD', value: value, - areaName: areaName, + lineName: lineName, } } export function gridCSSRepeat( times: GridCSSRepeatTimes, value: GridDimension[], - areaName: string | null, + lineName: string | null, ): GridCSSRepeat { if (typeof times === 'number') { - return gridCSSRepeatStatic(times, value, areaName) + return gridCSSRepeatStatic(times, value, lineName) } else { - return gridCSSRepeatDynamic(times, value, areaName) + return gridCSSRepeatDynamic(times, value, lineName) } } @@ -749,21 +753,21 @@ export function isGridCSSMinmax(dim: GridDimension): dim is GridCSSMinmax { export function gridCSSMinmax( min: GridCSSNumber | GridCSSKeyword, max: GridCSSNumber | GridCSSKeyword, - areaName: string | null, + lineName: string | null, ): GridCSSMinmax { return { type: 'MINMAX', min: min, max: max, - areaName: areaName, + lineName: lineName, } } -export function gridCSSNumber(value: CSSNumber, areaName: string | null): GridCSSNumber { +export function gridCSSNumber(value: CSSNumber, lineName: string | null): GridCSSNumber { return { type: 'NUMBER', value: value, - areaName: areaName, + lineName: lineName, } } @@ -949,8 +953,8 @@ export function printCSSNumber( } export function printGridDimensionCSS(dimension: GridDimension): string { - const areaName = dimension.areaName != null ? `[${dimension.areaName}] ` : '' - return areaName + stringifyGridDimension(dimension) + const lineName = dimension.lineName != null ? `[${dimension.lineName}] ` : '' + return lineName + stringifyGridDimension(dimension) } export function stringifyGridDimension(dimension: GridDimension): string { @@ -1083,19 +1087,19 @@ export function parseToCSSGridDimension(input: unknown): Either { return { ...value, - areaName: value.type === 'REPEAT' ? null : areaName, + lineName: value.type === 'REPEAT' ? null : lineName, } as GridDimension }, parseCSSGrid(inputToParse)) } @@ -1128,7 +1132,7 @@ export function parseGridPosition( const referenceTemplate = axis === 'row' ? container.gridTemplateRows : container.gridTemplateColumns if (referenceTemplate?.type === 'DIMENSIONS') { - const maybeArea = referenceTemplate.dimensions.findIndex((dim) => dim.areaName === input) + const maybeArea = referenceTemplate.dimensions.findIndex((dim) => dim.lineName === input) if (maybeArea >= 0) { let value = gridPositionValue(maybeArea + 1) if ( @@ -1236,12 +1240,12 @@ export function parseGridAutoOrTemplateBase( export function parseGridChildren( children: csstree.List, ): Either { - let nextAreaName: string | null = null + let nextLineName: string | null = null - function getAreaName() { - const currentAreaName = nextAreaName != null ? `${nextAreaName}` : null - nextAreaName = null - return currentAreaName + function getLineName() { + const currentLineName = nextLineName != null ? `${nextLineName}` : null + nextLineName = null + return currentLineName } let dimensions: GridDimension[] = [] @@ -1250,7 +1254,7 @@ export function parseGridChildren( case 'Dimension': { const parsedDimension = parseCSSNumber(`${child.value}${child.unit}`, 'AnyValid') if (isRight(parsedDimension)) { - dimensions.push(gridCSSNumber(parsedDimension.value, getAreaName())) + dimensions.push(gridCSSNumber(parsedDimension.value, getLineName())) } else { return left('Invalid grid CSS dimension.') } @@ -1258,7 +1262,7 @@ export function parseGridChildren( } case 'Identifier': { if (isValidGridDimensionKeyword(child.name)) { - dimensions.push(gridCSSKeyword(cssKeyword(child.name), getAreaName())) + dimensions.push(gridCSSKeyword(cssKeyword(child.name), getLineName())) } else { return left('Invalid grid CSS keyword.') } @@ -1274,7 +1278,7 @@ export function parseGridChildren( return left('Invalid grid CSS repeat times.') } - const areaName = getAreaName() + const lineName = getLineName() const values = new csstree.List().fromArray( otherChildren.filter( @@ -1287,7 +1291,7 @@ export function parseGridChildren( ) const parsedDimensions = parseGridChildren(values) if (isRight(parsedDimensions)) { - dimensions.push(gridCSSRepeat(times, parsedDimensions.value, areaName)) + dimensions.push(gridCSSRepeat(times, parsedDimensions.value, lineName)) } else { return left('Invalid grid CSS repeat values.') } @@ -1311,7 +1315,7 @@ export function parseGridChildren( ) { return left('Invalid minmax arguments.') } - dimensions.push(gridCSSMinmax(min, max, getAreaName())) + dimensions.push(gridCSSMinmax(min, max, getLineName())) } break } @@ -1321,8 +1325,8 @@ export function parseGridChildren( break } case 'Brackets': { - // The next child will get this area name - nextAreaName = child.children.toArray().find((c) => c.type === 'Identifier')?.name ?? null + // The next child will get this line name + nextLineName = child.children.toArray().find((c) => c.type === 'Identifier')?.name ?? null break } default: @@ -4620,6 +4624,11 @@ const flexAlignmentsParser: Parser = isOneOfTheseParser([ FlexAlignment.Center, FlexAlignment.FlexEnd, FlexAlignment.Stretch, + FlexAlignment.Baseline, + FlexAlignment.FirstBaseline, + FlexAlignment.LastBaseline, + FlexAlignment.SafeCenter, + FlexAlignment.UnsafeCenter, ]) const flexJustifyContentParser: Parser = isOneOfTheseParser([ @@ -4629,6 +4638,10 @@ const flexJustifyContentParser: Parser = isOneOfTheseParser( FlexJustifyContent.SpaceAround, FlexJustifyContent.SpaceBetween, FlexJustifyContent.SpaceEvenly, + FlexJustifyContent.Stretch, + FlexJustifyContent.Normal, + FlexJustifyContent.SafeCenter, + FlexJustifyContent.UnsafeCenter, ]) export type CSSPosition = '-webkit-sticky' | 'absolute' | 'fixed' | 'relative' | 'static' | 'sticky' diff --git a/editor/src/components/inspector/controls/advanced-grid-modal.tsx b/editor/src/components/inspector/controls/advanced-grid-modal.tsx index 463dd8ff574e..f42b93c157c9 100644 --- a/editor/src/components/inspector/controls/advanced-grid-modal.tsx +++ b/editor/src/components/inspector/controls/advanced-grid-modal.tsx @@ -14,7 +14,7 @@ import { separatorRadixSelectOption, } from '../../../uuiui/radix-components' import { optionalMap } from '../../../core/shared/optional-utils' -import { FlexAlignment } from 'utopia-api/core' +import { AllFlexAlignments, AllFlexJustifyContents, FlexAlignment } from 'utopia-api/core' import { FlexJustifyContent } from 'utopia-api/core' import { GridAutoColsOrRowsControlInner } from '../grid-auto-cols-or-rows-control' import { Substores, useEditorState, useRefEditorState } from '../../editor/store/store-hook' @@ -82,13 +82,27 @@ export const AdvancedGridModal = React.memo((props: AdvancedGridModalProps) => { const justifyOptions = [ unsetSelectOption, separatorRadixSelectOption(), - ...Object.values(FlexJustifyContent).map(selectOption), + ...[ + FlexJustifyContent.FlexStart, + FlexJustifyContent.Center, + FlexJustifyContent.FlexEnd, + FlexJustifyContent.SpaceAround, + FlexJustifyContent.SpaceBetween, + FlexJustifyContent.SpaceEvenly, + FlexJustifyContent.Stretch, + ].map(selectOption), ] const alignOptions = [ unsetSelectOption, separatorRadixSelectOption(), - ...Object.values(FlexAlignment).map(selectOption), + ...[ + FlexAlignment.Auto, + FlexAlignment.FlexStart, + FlexAlignment.Center, + FlexAlignment.FlexEnd, + FlexAlignment.Stretch, + ].map(selectOption), ] const onSubmitJustifyContent = React.useCallback( @@ -200,6 +214,7 @@ export const AdvancedGridModal = React.memo((props: AdvancedGridModalProps) => { zIndex: 1, }} onOpenChange={toggleJustifyContentDropdown} + allowedValues={AllFlexJustifyContents} /> { zIndex: 1, }} onOpenChange={toggleAlignContentDropdown} + allowedValues={AllFlexAlignments} /> diff --git a/editor/src/components/inspector/flex-section.spec.browser2.tsx b/editor/src/components/inspector/flex-section.spec.browser2.tsx index fb151839b8b8..e7c1749b892c 100644 --- a/editor/src/components/inspector/flex-section.spec.browser2.tsx +++ b/editor/src/components/inspector/flex-section.spec.browser2.tsx @@ -12,7 +12,7 @@ describe('flex section', () => { const control = await screen.findByTestId('grid-dimension-column-0') await typeIntoField(control, '200px') const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] 200px 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] 200px 1fr 1fr 1fr 1fr') }) it('can type a number without unit for dimension', async () => { const renderResult = await renderTestEditorWithCode(gridProject, 'await-first-dom-report') @@ -20,7 +20,7 @@ describe('flex section', () => { const control = await screen.findByTestId('grid-dimension-column-0') await typeIntoField(control, '2') const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] 2fr 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] 2fr 1fr 1fr 1fr 1fr') }) it('can type a fractional number for dimension', async () => { const renderResult = await renderTestEditorWithCode(gridProject, 'await-first-dom-report') @@ -28,7 +28,7 @@ describe('flex section', () => { const control = await screen.findByTestId('grid-dimension-column-0') await typeIntoField(control, '2fr') const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] 2fr 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] 2fr 1fr 1fr 1fr 1fr') }) it('can type a keyword for dimension', async () => { const renderResult = await renderTestEditorWithCode(gridProject, 'await-first-dom-report') @@ -36,7 +36,7 @@ describe('flex section', () => { const control = await screen.findByTestId('grid-dimension-column-0') await typeIntoField(control, 'min-content') const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] min-content 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] min-content 1fr 1fr 1fr 1fr') }) it('ignores a typed invalid keyword for dimension', async () => { const renderResult = await renderTestEditorWithCode(gridProject, 'await-first-dom-report') @@ -44,7 +44,7 @@ describe('flex section', () => { const control = await screen.findByTestId('grid-dimension-column-0') await typeIntoField(control, 'not-a-keyword') const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] 1fr 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] 1fr 1fr 1fr 1fr 1fr') }) it('defaults to auto if empty', async () => { const renderResult = await renderTestEditorWithCode(gridProject, 'await-first-dom-report') @@ -52,7 +52,7 @@ describe('flex section', () => { const control = await screen.findByTestId('grid-dimension-column-0') await typeIntoField(control, null) const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] auto 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] auto 1fr 1fr 1fr 1fr') }) it('updates a repeat expression', async () => { const renderResult = await renderTestEditorWithCode( @@ -64,15 +64,15 @@ describe('flex section', () => { const grid = await renderResult.renderedDOM.findByTestId('grid') const input: HTMLInputElement = await screen.findByTestId('grid-dimension-column-1') await typeIntoField(input, 'repeat(2, 0.5fr 42px)') - expect(grid.style.gridTemplateColumns).toEqual('[area1] 1fr repeat(2, 0.5fr 42px) 2fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] 1fr repeat(2, 0.5fr 42px) 2fr') expect(input.value).toBe('repeat(2, 0.5fr 42px)') }) - it('does not show area names in the input', async () => { + it('does not show line names in the input', async () => { const renderResult = await renderTestEditorWithCode(gridProject, 'await-first-dom-report') await selectComponentsForTest(renderResult, [EP.fromString('sb/grid')]) const control: HTMLInputElement = await screen.findByTestId('grid-dimension-column-0') const grid = await renderResult.renderedDOM.findByTestId('grid') - expect(grid.style.gridTemplateColumns).toEqual('[area1] 1fr 1fr 1fr 1fr 1fr') + expect(grid.style.gridTemplateColumns).toEqual('[line1] 1fr 1fr 1fr 1fr 1fr') expect(control.value).toBe('1fr') }) }) @@ -142,7 +142,7 @@ export var storyboard = ( style={{ display: 'grid', gridTemplateRows: '80px 1fr 1fr', - gridTemplateColumns: '[area1] 1fr 1fr 1fr 1fr 1fr', + gridTemplateColumns: '[line1] 1fr 1fr 1fr 1fr 1fr', gridGap: 10, height: 322, width: 364, @@ -166,7 +166,7 @@ export var storyboard = ( width: 41, height: 23, border: '1px solid #000', - gridColumn: 'area1', + gridColumn: 'line1', gridRow: 1, backgroundColor: '#09f', }} @@ -223,7 +223,7 @@ export var storyboard = ( width: 41, height: 23, border: '1px solid #000', - gridColumn: 'area1', + gridColumn: 'line1', gridRow: 1, backgroundColor: '#09f', }} @@ -258,7 +258,7 @@ export var storyboard = ( style={{ display: 'grid', gridTemplateRows: '80px 1fr 1fr', - gridTemplateColumns: '[area1] 1fr repeat(2, 10px 30px) 2fr', + gridTemplateColumns: '[line1] 1fr repeat(2, 10px 30px) 2fr', gridGap: 10, height: 322, width: 364, @@ -282,7 +282,7 @@ export var storyboard = ( width: 41, height: 23, border: '1px solid #000', - gridColumn: 'area1', + gridColumn: 'line1', gridRow: 1, backgroundColor: '#09f', }} diff --git a/editor/src/components/inspector/flex-section.tsx b/editor/src/components/inspector/flex-section.tsx index 5114495c30a3..5b5410823dc0 100644 --- a/editor/src/components/inspector/flex-section.tsx +++ b/editor/src/components/inspector/flex-section.tsx @@ -4,7 +4,7 @@ import { jsx } from '@emotion/react' import React from 'react' import { createSelector } from 'reselect' -import { unless, when } from '../../utils/react-conditionals' +import { when } from '../../utils/react-conditionals' import { Substores, useEditorState, useRefEditorState } from '../editor/store/store-hook' import { AddRemoveLayoutSystemControl } from './add-remove-layout-system-control' import { FlexDirectionToggle } from './flex-direction-control' @@ -66,7 +66,10 @@ import { type ElementInstanceMetadata, type GridElementProperties, } from '../../core/shared/element-template' -import { setGridPropsCommands } from '../canvas/canvas-strategies/strategies/grid-helpers' +import { + isJustAutoGridDimension, + setGridPropsCommands, +} from '../canvas/canvas-strategies/strategies/grid-helpers' import { type CanvasCommand } from '../canvas/commands/commands' import type { DropdownMenuItem } from '../../uuiui/radix-components' import { @@ -387,22 +390,22 @@ const TemplateDimensionControl = React.memo( if (dimensions?.type !== 'DIMENSIONS') { return } - const currentAreaName = dimensions.dimensions[index]?.areaName ?? undefined + const currentLineName = dimensions.dimensions[index]?.lineName ?? undefined - const rawNewAreaName = window.prompt('Area name:', currentAreaName)?.trim() - if (rawNewAreaName == null) { + const rawNewLineName = window.prompt('Line name:', currentLineName)?.trim() + if (rawNewLineName == null) { return } - const newAreaName: string | null = - rawNewAreaName.length === 0 ? null : sanitizeAreaName(rawNewAreaName) + const newLineName: string | null = + rawNewLineName.length === 0 ? null : sanitizeLineName(rawNewLineName) const left = template.dimensions.slice(0, index) const right = template.dimensions.slice(index + 1) const newValues = [ ...left, - { ...values[index], areaName: newAreaName } as GridDimension, + { ...values[index], lineName: newLineName } as GridDimension, ...right, ] @@ -415,13 +418,13 @@ const TemplateDimensionControl = React.memo( ), ] - // replace the area name in the template and update the grid children so they - // reference the new area name, if they used to reference the previous one - const adjustedGridTemplate = renameAreaInTemplateAtIndex( + // replace the line name in the template and update the grid children so they + // reference the new line name, if they used to reference the previous one + const adjustedGridTemplate = renameLineInTemplateAtIndex( container, axis, index, - newAreaName, + newLineName, ) const children = MetadataUtils.getChildrenUnordered(metadataRef.current, grid.elementPath) for (const child of children) { @@ -480,11 +483,7 @@ const TemplateDimensionControl = React.memo( template.dimensions.length === 0 || (autoTemplate?.type === 'DIMENSIONS' && autoTemplate.dimensions.length > 0 && - !( - autoTemplate.dimensions.length === 1 && - autoTemplate.dimensions[0].type === 'KEYWORD' && - autoTemplate.dimensions[0].value.value === 'auto' - )) + !isJustAutoGridDimension(autoTemplate.dimensions)) ) }, [template, autoTemplate]) @@ -554,9 +553,15 @@ function AxisDimensionControl({ opener: (isOpen: boolean) => React.ReactElement }) { const testId = `grid-dimension-${axis}-${index}` - const [isOpen, setIsOpen] = React.useState(false) - const onOpenChange = React.useCallback((isDropdownOpen: boolean) => { - setIsOpen(isDropdownOpen) + const [isDotsMenuOpen, setDotsMenuOpen] = React.useState(false) + const [isTitleMenuOpen, setTitleMenuOpen] = React.useState(false) + + const onOpenChangeDotsMenu = React.useCallback((isDropdownOpen: boolean) => { + setDotsMenuOpen(isDropdownOpen) + }, []) + + const onOpenChangeTitleMenu = React.useCallback(() => { + setTitleMenuOpen(false) }, []) const isDynamic = React.useMemo(() => { @@ -569,9 +574,9 @@ function AxisDimensionControl({ const title = React.useMemo(() => { if (isDynamic) { - return value.areaName ?? dynamicIndexTitle + return value.lineName ?? dynamicIndexTitle } - return value.areaName ?? indexFrom + return value.lineName ?? indexFrom }, [value, indexFrom, isDynamic, dynamicIndexTitle]) const gridExpressionInputFocused = useGridExpressionInputFocused() @@ -584,6 +589,14 @@ function AxisDimensionControl({ setIsHovered(false) }, []) + const onContextMenuTitle = React.useCallback((e: React.MouseEvent) => { + e.preventDefault() + e.stopPropagation() + setTitleMenuOpen(true) + }, []) + + const invisibleOpener = React.useCallback(() => null, []) + return (
{title} + {when( - (isHovered && !gridExpressionInputFocused.focused) || isOpen, + (isHovered && !gridExpressionInputFocused.focused) || isDotsMenuOpen, - + , )}
@@ -667,17 +693,17 @@ function removeTemplateValueAtIndex( } } -function renameAreaInTemplateAtIndex( +function renameLineInTemplateAtIndex( original: GridContainerProperties, axis: 'column' | 'row', index: number, - newAreaName: string | null, + newLineName: string | null, ): GridContainerProperties { function renameDimension(dimension: GridDimension, idx: number): GridDimension { return idx === index ? ({ ...dimension, - areaName: dimension.type === 'REPEAT' ? null : newAreaName, + lineName: dimension.type === 'REPEAT' ? null : newLineName, } as GridDimension) : dimension } @@ -707,8 +733,8 @@ function renameAreaInTemplateAtIndex( const reAlphanumericDashUnderscore = /[^0-9a-z\-_]+/gi -function sanitizeAreaName(areaName: string): string { - return areaName.replace(reAlphanumericDashUnderscore, '-') +function sanitizeLineName(lineName: string): string { + return lineName.replace(reAlphanumericDashUnderscore, '-') } function serializeValue(v: CSSNumber) { diff --git a/editor/src/components/inspector/grid-helpers.ts b/editor/src/components/inspector/grid-helpers.ts index 8e5f2b967156..ef8be9bff817 100644 --- a/editor/src/components/inspector/grid-helpers.ts +++ b/editor/src/components/inspector/grid-helpers.ts @@ -33,12 +33,12 @@ export function parseGridDimensionInput( currentValue != null && isGridCSSNumber(currentValue) ? currentValue.value.unit : null return gridCSSNumber( cssNumber(value.value, value.unit ?? maybeUnit), - currentValue?.areaName ?? null, + currentValue?.lineName ?? null, ) } else if (isCSSKeyword(value)) { - return gridCSSKeyword(value, currentValue?.areaName ?? null) + return gridCSSKeyword(value, currentValue?.lineName ?? null) } else if (isEmptyInputValue(value)) { - return gridCSSKeyword(cssKeyword('auto'), currentValue?.areaName ?? null) + return gridCSSKeyword(cssKeyword('auto'), currentValue?.lineName ?? null) } else { return null } diff --git a/editor/src/components/inspector/inspector-common.ts b/editor/src/components/inspector/inspector-common.ts index decc614de98c..e06101e7d485 100644 --- a/editor/src/components/inspector/inspector-common.ts +++ b/editor/src/components/inspector/inspector-common.ts @@ -1245,7 +1245,7 @@ export function setParentToFixedIfHugCommands( return [] } - const globalFrame = MetadataUtils.getLocalFrame(parentPath, metadata) + const globalFrame = MetadataUtils.getLocalFrame(parentPath, metadata, null) if (globalFrame == null || isInfinityRectangle(globalFrame)) { return [] } @@ -1458,7 +1458,7 @@ export function getConvertIndividualElementToAbsoluteCommandsFromMetadata( jsxMetadata: ElementInstanceMetadataMap, elementPathTree: ElementPathTrees, ): Array { - const localFrame = MetadataUtils.getLocalFrame(target, jsxMetadata) + const localFrame = MetadataUtils.getLocalFrame(target, jsxMetadata, null) if (localFrame == null || isInfinityRectangle(localFrame)) { return [] } diff --git a/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.spec.browser2.tsx b/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.spec.browser2.tsx index 3321e3df30c6..4ae0d9813c11 100644 --- a/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.spec.browser2.tsx +++ b/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.spec.browser2.tsx @@ -142,6 +142,7 @@ describe('Frame updating layout section', () => { const actualLocalFrame = MetadataUtils.getLocalFrame( metadataForElement.elementPath, metadataMap, + null, ) expect(actualLocalFrame).toEqual(expectedFrame) } diff --git a/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx b/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx index 92d1aaa6f306..d5187fa60c8e 100644 --- a/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx +++ b/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx @@ -36,7 +36,12 @@ import { import { InspectorContextMenuWrapper } from '../../../../context-menu-wrapper' import { useDispatch } from '../../../../editor/store/dispatch-context' import { Substores, useEditorState, useRefEditorState } from '../../../../editor/store/store-hook' -import { metadataSelector, selectedViewsSelector } from '../../../../inspector/inpector-selectors' +import { + allElementPropsSelector, + metadataSelector, + pathTreesSelector, + selectedViewsSelector, +} from '../../../../inspector/inpector-selectors' import { unsetPropertyMenuItem } from '../../../common/context-menu-items' import { cssNumber, @@ -93,6 +98,8 @@ interface LTWHPixelValues { export const FrameUpdatingLayoutSection = React.memo(() => { const dispatch = useDispatch() const metadataRef = useRefEditorState(metadataSelector) + const allElementPropsRef = useRefEditorState(allElementPropsSelector) + const elementPathTreesRef = useRefEditorState(pathTreesSelector) const selectedViewsRef = useRefEditorState(selectedViewsSelector) const projectContentsRef = useRefEditorState((store) => store.editor.projectContents) const originalGlobalFrame: CanvasRectangle = useEditorState( @@ -182,6 +189,7 @@ export const FrameUpdatingLayoutSection = React.memo(() => { const maybeInfinityLocalFrame = MetadataUtils.getLocalFrame( selectedView, store.editor.jsxMetadata, + null, ) if (maybeInfinityLocalFrame == null || isInfinityRectangle(maybeInfinityLocalFrame)) { result.left.push(0) @@ -217,6 +225,8 @@ export const FrameUpdatingLayoutSection = React.memo(() => { [ moveInspectorStrategy( metadataRef.current, + allElementPropsRef.current, + elementPathTreesRef.current, selectedViewsRef.current, projectContentsRef.current, frameUpdate.edgeMovement, @@ -252,6 +262,8 @@ export const FrameUpdatingLayoutSection = React.memo(() => { [ directMoveInspectorStrategy( metadataRef.current, + allElementPropsRef.current, + elementPathTreesRef.current, selectedViewsRef.current, projectContentsRef.current, leftOrTop, @@ -282,7 +294,15 @@ export const FrameUpdatingLayoutSection = React.memo(() => { assertNever(frameUpdate) } }, - [dispatch, metadataRef, originalGlobalFrame, projectContentsRef, selectedViewsRef], + [ + allElementPropsRef, + dispatch, + elementPathTreesRef, + metadataRef, + originalGlobalFrame, + projectContentsRef, + selectedViewsRef, + ], ) const disableXYControls = React.useMemo(() => { diff --git a/editor/src/components/inspector/sections/style-section/container-subsection/grid-cell-subsection.tsx b/editor/src/components/inspector/sections/style-section/container-subsection/grid-cell-subsection.tsx index 4550fb33fef7..6cfcc258cb5e 100644 --- a/editor/src/components/inspector/sections/style-section/container-subsection/grid-cell-subsection.tsx +++ b/editor/src/components/inspector/sections/style-section/container-subsection/grid-cell-subsection.tsx @@ -190,12 +190,12 @@ const DimensionsControls = React.memo( ? gridPositionValue(e.value) : cssKeyword(e.value) - const maybeAreaValue = maybeValueFromAreaName( + const maybeLineValue = maybeValueFromLineName( value, dimension === 'gridColumnStart' || dimension === 'width' ? columnLabels : rowLabels, ) - if (maybeAreaValue != null) { - value = maybeAreaValue + if (maybeLineValue != null) { + value = maybeLineValue } let newValues = { @@ -277,8 +277,8 @@ const DimensionsControls = React.memo( onSubmitValue={onSubmitPosition('gridColumnStart')} value={columnStartValue.value} valueAlias={columnStartValue.alias} - keywords={keywordsForPosition(columnLabels.map((l) => l.areaName))} - keywordTypeCheck={isValidGridPositionKeyword(columnLabels.map((l) => l.areaName))} + keywords={keywordsForPosition(columnLabels.map((l) => l.lineName))} + keywordTypeCheck={isValidGridPositionKeyword(columnLabels.map((l) => l.lineName))} labelInner={{ category: 'inspector-element', type: 'gridColumn', @@ -290,8 +290,8 @@ const DimensionsControls = React.memo( onSubmitValue={onSubmitPosition('gridRowStart')} value={rowStartValue.value} valueAlias={rowStartValue.alias} - keywords={keywordsForPosition(rowLabels.map((l) => l.areaName))} - keywordTypeCheck={isValidGridPositionKeyword(rowLabels.map((l) => l.areaName))} + keywords={keywordsForPosition(rowLabels.map((l) => l.lineName))} + keywordTypeCheck={isValidGridPositionKeyword(rowLabels.map((l) => l.lineName))} labelInner={{ category: 'inspector-element', type: 'gridRow', @@ -354,14 +354,14 @@ const BoundariesControls = React.memo( ? gridPositionValue(e.value) : cssKeyword(e.value) - const maybeAreaValue = maybeValueFromAreaName( + const maybeLineValue = maybeValueFromLineName( value, dimension === 'gridColumnStart' || dimension === 'gridColumnEnd' ? columnLabels : rowLabels, ) - if (maybeAreaValue != null) { - value = maybeAreaValue + if (maybeLineValue != null) { + value = maybeLineValue } const newValues = { @@ -418,8 +418,8 @@ const BoundariesControls = React.memo( type: 'gridColumn-start', color: 'on-highlight-secondary', }} - keywords={keywordsForPosition(columnLabels.map((l) => l.areaName))} - keywordTypeCheck={isValidGridPositionKeyword(columnLabels.map((l) => l.areaName))} + keywords={keywordsForPosition(columnLabels.map((l) => l.lineName))} + keywordTypeCheck={isValidGridPositionKeyword(columnLabels.map((l) => l.lineName))} /> l.areaName))} - keywordTypeCheck={isValidGridPositionKeyword(rowLabels.map((l) => l.areaName))} + keywords={keywordsForPosition(rowLabels.map((l) => l.lineName))} + keywordTypeCheck={isValidGridPositionKeyword(rowLabels.map((l) => l.lineName))} />
@@ -449,8 +449,8 @@ const BoundariesControls = React.memo( type: 'gridColumn-end', color: 'on-highlight-secondary', }} - keywords={keywordsForPosition(columnLabels.map((l) => l.areaName))} - keywordTypeCheck={isValidGridPositionKeyword(columnLabels.map((l) => l.areaName))} + keywords={keywordsForPosition(columnLabels.map((l) => l.lineName))} + keywordTypeCheck={isValidGridPositionKeyword(columnLabels.map((l) => l.lineName))} /> l.areaName))} - keywordTypeCheck={isValidGridPositionKeyword(rowLabels.map((l) => l.areaName))} + keywords={keywordsForPosition(rowLabels.map((l) => l.lineName))} + keywordTypeCheck={isValidGridPositionKeyword(rowLabels.map((l) => l.lineName))} /> @@ -496,10 +496,10 @@ function getLabelsFromTemplate(gridTemplate: GridContainerProperties) { return [] } return mapDropNulls((d, index) => { - if (d.areaName == null) { + if (d.lineName == null) { return null } - return { areaName: d.areaName, position: index + 1 } + return { lineName: d.lineName, position: index + 1 } }, template.dimensions) } const columnLabels = getAxisLabels('gridTemplateColumns') @@ -523,28 +523,28 @@ function keywordsForPosition(labels: string[]) { return items } -function maybeValueFromAreaName( +function maybeValueFromLineName( value: GridPosition, - labels: { areaName: string; position: number }[], + labels: { lineName: string; position: number }[], ): GridPositionValue | null { if (!isCSSKeyword(value)) { return null } - const areaMatch = labels.find((l) => l.areaName === value.value) - if (areaMatch != null) { - return gridPositionValue(areaMatch.position) + const lineMatch = labels.find((l) => l.lineName === value.value) + if (lineMatch != null) { + return gridPositionValue(lineMatch.position) } return null } function getValueWithAlias( position: GridPosition | null, - labels: { areaName: string; position: number }[], + labels: { lineName: string; position: number }[], ) { const value = getValue(position) ?? cssKeyword('auto') if (isCSSKeyword(value)) { return { value: value } } - const areaName = labels.find((l) => l.position === value.value) - return { value: value, alias: areaName?.areaName } + const lineName = labels.find((l) => l.position === value.value) + return { value: value, alias: lineName?.lineName } } diff --git a/editor/src/components/text-editor/text-handling.ts b/editor/src/components/text-editor/text-handling.ts index 45797293ed43..bf953188a747 100644 --- a/editor/src/components/text-editor/text-handling.ts +++ b/editor/src/components/text-editor/text-handling.ts @@ -280,7 +280,7 @@ export function getLocalRectangleWithFixedWidthHandlingText( pathTrees: ElementPathTrees, elementPath: ElementPath, ): MaybeInfinityLocalRectangle | null { - const localFrame = MetadataUtils.getLocalFrame(elementPath, metadata) + const localFrame = MetadataUtils.getLocalFrame(elementPath, metadata, null) if ( localFrame == null || diff --git a/editor/src/core/layout/layout-utils.ts b/editor/src/core/layout/layout-utils.ts index 940ce6a8e875..f3730d112d5e 100644 --- a/editor/src/core/layout/layout-utils.ts +++ b/editor/src/core/layout/layout-utils.ts @@ -148,7 +148,7 @@ export function switchPinnedChildToFlex( newParentMainAxis: 'horizontal' | 'vertical' | null, propertyTarget: ReadonlyArray, ): SwitchLayoutTypeResult { - const currentFrame = MetadataUtils.getLocalFrame(target, targetOriginalContextMetadata) + const currentFrame = MetadataUtils.getLocalFrame(target, targetOriginalContextMetadata, null) const newParent = findJSXElementAtPath(newParentPath, components) const element = findJSXElementAtPath(target, components) diff --git a/editor/src/core/model/element-metadata-utils.ts b/editor/src/core/model/element-metadata-utils.ts index f5f4fc0aca1f..0c5ece97bed1 100644 --- a/editor/src/core/model/element-metadata-utils.ts +++ b/editor/src/core/model/element-metadata-utils.ts @@ -1342,7 +1342,7 @@ export const MetadataUtils = { Utils.fastForEach(targets, (target) => { const instance = MetadataUtils.findElementByElementPath(metadata, target) if (instance != null && this.isImg(instance)) { - const componentFrame = MetadataUtils.getLocalFrame(target, metadata) + const componentFrame = MetadataUtils.getLocalFrame(target, metadata, null) if (componentFrame != null && isFiniteRectangle(componentFrame)) { const imageSize = getImageSize(allElementProps, instance) const widthMultiplier = imageSize.width / componentFrame.width @@ -1535,6 +1535,7 @@ export const MetadataUtils = { getLocalFrame( path: ElementPath, metadata: ElementInstanceMetadataMap, + parentToTarget: ElementPath | null, ): MaybeInfinityLocalRectangle | null { function getNonRootParent(parentOf: ElementPath): ElementPath { // If the target is the root element of an instance (`a/b/c:root`), then we want to instead @@ -1553,7 +1554,7 @@ export const MetadataUtils = { } const targetGlobalFrame = MetadataUtils.getFrameInCanvasCoords(path, metadata) - const parentPath = getNonRootParent(path) + const parentPath = parentToTarget ?? getNonRootParent(path) const parentGlobalFrame = MetadataUtils.getFrameInCanvasCoords(parentPath, metadata) if (targetGlobalFrame == null || parentGlobalFrame == null) { return null @@ -1619,7 +1620,7 @@ export const MetadataUtils = { return aabb }, getFrameOrZeroRect(path: ElementPath, metadata: ElementInstanceMetadataMap): LocalRectangle { - const frame = MetadataUtils.getLocalFrame(path, metadata) + const frame = MetadataUtils.getLocalFrame(path, metadata, null) return zeroRectIfNullOrInfinity(frame) }, getFrameRelativeTo( @@ -1632,7 +1633,7 @@ export const MetadataUtils = { } else { const paths = EP.allPathsForLastPart(parent) const parentFrames: Array = Utils.stripNulls( - paths.map((path) => this.getLocalFrame(path, metadata)), + paths.map((path) => this.getLocalFrame(path, metadata, null)), ) return parentFrames.reduce((working, next) => { if (isInfinityRectangle(next)) { @@ -2846,7 +2847,7 @@ export function propertyHasSimpleValue( } // This function creates a fake metadata for the given element -// Useful when metadata is needed before the real on is created. +// Useful when metadata is needed before the real one is created. export function createFakeMetadataForElement( path: ElementPath, element: JSXElementChild, diff --git a/editor/src/core/shared/element-template.ts b/editor/src/core/shared/element-template.ts index 6e054876f9cf..24cdf8dea6ce 100644 --- a/editor/src/core/shared/element-template.ts +++ b/editor/src/core/shared/element-template.ts @@ -4,12 +4,7 @@ import type { StaticElementPathPart, ElementPath, } from './project-file-types' -import type { - CanvasRectangle, - LocalPoint, - MaybeInfinityCanvasRectangle, - MaybeInfinityLocalRectangle, -} from './math-utils' +import type { CanvasRectangle, LocalPoint, MaybeInfinityCanvasRectangle } from './math-utils' import { zeroCanvasRect } from './math-utils' import type { Either } from './either' import { flatMapEither, isRight, left, mapEither, right } from './either' @@ -212,6 +207,7 @@ import { emptyAttributeMetadata, simpleFunctionWrap, } from 'utopia-shared/src/types/element-template' +import type { GridCellGlobalFrames } from '../../components/canvas/canvas-strategies/strategies/grid-helpers' export { emptyComments, emptyComputedStyle, emptyAttributeMetadata } export function isParsedCommentsEmpty(comments: ParsedComments): boolean { @@ -2667,7 +2663,7 @@ export function gridPositionValue(numericalPosition: number | null): GridPositio export const validGridPositionKeywords = ['auto'] -export type ValidGridPositionKeyword = string // using because valid keywords are also area names we cannot know in advance +export type ValidGridPositionKeyword = string // using because valid keywords are also line names we cannot know in advance export type GridPosition = GridPositionValue | CSSKeyword @@ -2834,12 +2830,15 @@ export interface SpecialSizeMeasurements { textDecorationLine: string | null computedHugProperty: HugPropertyWidthHeight containerGridProperties: GridContainerProperties + parentContainerGridProperties: GridContainerProperties elementGridProperties: GridElementProperties containerGridPropertiesFromProps: GridContainerProperties + parentContainerGridPropertiesFromProps: GridContainerProperties elementGridPropertiesFromProps: GridElementProperties rowGap: number | null columnGap: number | null - gridCellGlobalFrames: Array> | null + gridCellGlobalFrames: GridCellGlobalFrames | null + parentGridCellGlobalFrames: GridCellGlobalFrames | null } export function specialSizeMeasurements( @@ -2887,12 +2886,15 @@ export function specialSizeMeasurements( textBounds: CanvasRectangle | null, computedHugProperty: HugPropertyWidthHeight, containerGridProperties: GridContainerProperties, + parentContainerGridProperties: GridContainerProperties, elementGridProperties: GridElementProperties, containerGridPropertiesFromProps: GridContainerProperties, + parentContainerGridPropertiesFromProps: GridContainerProperties, elementGridPropertiesFromProps: GridElementProperties, rowGap: number | null, columnGap: number | null, - gridCellGlobalFrames: Array> | null, + gridCellGlobalFrames: GridCellGlobalFrames | null, + parentGridCellGlobalFrames: GridCellGlobalFrames | null, justifySelf: SelfAlignment | null, alignSelf: SelfAlignment | null, ): SpecialSizeMeasurements { @@ -2941,12 +2943,15 @@ export function specialSizeMeasurements( textDecorationLine, computedHugProperty, containerGridProperties, + parentContainerGridProperties, elementGridProperties, containerGridPropertiesFromProps, + parentContainerGridPropertiesFromProps, elementGridPropertiesFromProps, rowGap, columnGap, gridCellGlobalFrames, + parentGridCellGlobalFrames, justifySelf, alignSelf, } @@ -3006,6 +3011,13 @@ export const emptySpecialSizeMeasurements = specialSizeMeasurements( gridAutoRows: null, gridAutoFlow: null, }, + { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, { gridColumnStart: null, gridColumnEnd: null, @@ -3019,6 +3031,13 @@ export const emptySpecialSizeMeasurements = specialSizeMeasurements( gridAutoRows: null, gridAutoFlow: null, }, + { + gridTemplateColumns: null, + gridTemplateRows: null, + gridAutoColumns: null, + gridAutoRows: null, + gridAutoFlow: null, + }, { gridColumnStart: null, gridColumnEnd: null, @@ -3030,6 +3049,7 @@ export const emptySpecialSizeMeasurements = specialSizeMeasurements( null, null, null, + null, ) export function walkElement( diff --git a/editor/src/core/tailwind/tailwind-compilation.ts b/editor/src/core/tailwind/tailwind-compilation.ts index 972fee42cc9c..b71edcc1b587 100644 --- a/editor/src/core/tailwind/tailwind-compilation.ts +++ b/editor/src/core/tailwind/tailwind-compilation.ts @@ -1,9 +1,8 @@ import React from 'react' import type { TailwindConfig, Tailwindcss } from '@mhsdesign/jit-browser-tailwindcss' import { createTailwindcss } from '@mhsdesign/jit-browser-tailwindcss' -import type { ProjectContentTreeRoot, TextFile, TextFileContents } from 'utopia-shared/src/types' +import type { ProjectContentTreeRoot } from 'utopia-shared/src/types' import { getProjectFileByFilePath, walkContentsTree } from '../../components/assets' -import { interactionSessionIsActive } from '../../components/canvas/canvas-strategies/interaction-state' import { CanvasContainerID } from '../../components/canvas/canvas-types' import { Substores, @@ -18,6 +17,8 @@ import { ElementsToRerenderGLOBAL } from '../../components/canvas/ui-jsx-canvas' import { isFeatureEnabled } from '../../utils/feature-switches' import type { Config } from 'tailwindcss/types/config' import type { EditorState } from '../../components/editor/store/editor-state' +import { createSelector } from 'reselect' +import type { ProjectContentSubstate } from '../../components/editor/store/store-hook-substore-types' const LatestConfig: { current: { code: string; config: Config } | null } = { current: null } export function getTailwindConfigCached(editorState: EditorState): Config | null { @@ -87,45 +88,80 @@ function generateTailwindClasses(projectContents: ProjectContentTreeRoot, requir void generateTailwindStyles(tailwindCss, allCSSFiles) } -export const useTailwindCompilation = (requireFn: RequireFn) => { - const projectContents = useEditorState( - Substores.projectContents, - (store) => store.editor.projectContents, - 'useTailwindCompilation projectContents', +function runTailwindClassGenerationOnDOMMutation( + mutations: MutationRecord[], + projectContents: ProjectContentTreeRoot, + isInteractionActive: boolean, + requireFn: RequireFn, +) { + const updateHasNewTailwindData = mutations.some( + (m) => + m.addedNodes.length > 0 || // new DOM element was added with potentially new classes + m.attributeName === 'class', // potentially new classes were added to the class attribute of an element + ) + if ( + !updateHasNewTailwindData || + isInteractionActive || + ElementsToRerenderGLOBAL.current !== 'rerender-all-elements' // implies that an interaction is in progress) + ) { + return + } + generateTailwindClasses(projectContents, requireFn) +} + +const tailwindConfigSelector = createSelector( + (store: ProjectContentSubstate) => store.editor.projectContents, + (projectContents) => getProjectFileByFilePath(projectContents, TailwindConfigPath), +) + +export const useTailwindCompilation = () => { + const requireFnRef = useRefEditorState((store) => { + const requireFn = store.editor.codeResultCache.curriedRequireFn(store.editor.projectContents) + return (importOrigin: string, toImport: string) => requireFn(importOrigin, toImport, false) + }) + const projectContentsRef = useRefEditorState((store) => store.editor.projectContents) + + const isInteractionActiveRef = useRefEditorState( + (store) => store.editor.canvas.interactionSession != null, ) - const isInteractionActiveRef = useRefEditorState((store) => - interactionSessionIsActive(store.editor.canvas.interactionSession), + // this is not a ref, beacuse we want to re-compile the Tailwind classes when the tailwind config changes + const tailwindConfig = useEditorState( + Substores.projectContents, + tailwindConfigSelector, + 'useTailwindCompilation tailwindConfig', ) - const observerCallback = React.useCallback(() => { + React.useEffect(() => { + const canvasContainer = document.getElementById(CanvasContainerID) if ( - isInteractionActiveRef.current || - ElementsToRerenderGLOBAL.current !== 'rerender-all-elements' || // implies that an interaction is in progress + tailwindConfig == null || // TODO: read this from the utopia key in package.json + canvasContainer == null || !isFeatureEnabled('Tailwind') ) { return } - generateTailwindClasses(projectContents, requireFn) - }, [isInteractionActiveRef, projectContents, requireFn]) - React.useEffect(() => { - const tailwindConfigFile = getProjectFileByFilePath(projectContents, TailwindConfigPath) - if (tailwindConfigFile == null || tailwindConfigFile.type !== 'TEXT_FILE') { - return // we consider tailwind to be enabled if there's a tailwind config file in the project - } - const observer = new MutationObserver(observerCallback) + const observer = new MutationObserver((mutations) => { + runTailwindClassGenerationOnDOMMutation( + mutations, + projectContentsRef.current, + isInteractionActiveRef.current, + requireFnRef.current, + ) + }) - observer.observe(document.getElementById(CanvasContainerID)!, { + observer.observe(canvasContainer, { attributes: true, childList: true, subtree: true, }) - observerCallback() + // run the initial tailwind class generation + generateTailwindClasses(projectContentsRef.current, requireFnRef.current) return () => { observer.disconnect() } - }, [isInteractionActiveRef, observerCallback, projectContents, requireFn]) + }, [isInteractionActiveRef, projectContentsRef, requireFnRef, tailwindConfig]) } diff --git a/editor/src/core/tailwind/tailwind.spec.browser2.tsx b/editor/src/core/tailwind/tailwind.spec.browser2.tsx index b95956046c32..91b3eb6447a0 100644 --- a/editor/src/core/tailwind/tailwind.spec.browser2.tsx +++ b/editor/src/core/tailwind/tailwind.spec.browser2.tsx @@ -1,5 +1,13 @@ +import { mouseClickAtPoint } from '../../components/canvas/event-helpers.test-utils' +import type { EditorRenderResult } from '../../components/canvas/ui-jsx.test-utils' import { renderTestEditorWithModel } from '../../components/canvas/ui-jsx.test-utils' +import { switchEditorMode } from '../../components/editor/actions/action-creators' +import { EditorModes } from '../../components/editor/editor-modes' +import { StoryboardFilePath } from '../../components/editor/store/editor-state' +import { createModifiedProject } from '../../sample-projects/sample-project-utils.test-utils' import { setFeatureForBrowserTestsUseInDescribeBlockOnly } from '../../utils/utils.test-utils' +import { windowPoint } from '../shared/math-utils' +import { TailwindConfigPath } from './tailwind-config' import { Project } from './tailwind.test-utils' describe('rendering tailwind projects in the editor', () => { @@ -133,4 +141,166 @@ describe('rendering tailwind projects in the editor', () => { }) } }) + + describe('Remix', () => { + const projectWithMultipleRoutes = createModifiedProject({ + [StoryboardFilePath]: `import * as React from 'react' + import { RemixScene, Storyboard } from 'utopia-api' + + export var storyboard = ( + + + + ) + `, + ['/app/root.js']: `import React from 'react' + import { Outlet } from '@remix-run/react' + + export default function Root() { + return ( +
+ I am Root! + +
+ ) + } + `, + ['/app/routes/_index.js']: `import React from 'react' + import { Link } from '@remix-run/react' + + export default function Index() { + return ( +
+ Index page + About +
+ ) + } + `, + ['/app/routes/about.js']: `import React from 'react' + + export default function About() { + return ( +
+ About page +
+ ) + } + `, + '/src/app.css': ` + @tailwind base; + @tailwind components; + @tailwind utilities; + `, + [TailwindConfigPath]: ` + const Tailwind = { + theme: { + colors: { + transparent: 'transparent', + current: 'currentColor', + white: '#ffffff', + purple: '#3f3cbb', + midnight: '#121063', + metal: '#565584', + tahiti: '#3ab7bf', + silver: '#ecebff', + 'bubble-gum': '#ff77e9', + bermuda: '#78dcca', + }, + }, + plugins: [ + function ({ addUtilities }) { + const newUtilities = { + '.text-shadow': { + textShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)', + }, + '.text-shadow-md': { + textShadow: '3px 3px 6px rgba(0, 0, 0, 0.2)', + }, + '.text-shadow-lg': { + textShadow: '4px 4px 8px rgba(0, 0, 0, 0.3)', + }, + '.text-shadow-none': { + textShadow: 'none', + }, + } + + addUtilities(newUtilities, ['responsive', 'hover']) + }, + ], + } + export default Tailwind`, + }) + + it('can render content in a RemixScene', async () => { + const editor = await renderTestEditorWithModel( + projectWithMultipleRoutes, + 'await-first-dom-report', + ) + { + const root = editor.renderedDOM.getByTestId('root') + const { backgroundColor, display, flexDirection, gap, fontSize } = getComputedStyle(root) + expect({ backgroundColor, display, flexDirection, gap, fontSize }).toEqual({ + backgroundColor: 'rgba(0, 0, 0, 0)', + display: 'flex', + flexDirection: 'column', + fontSize: '24px', + gap: '40px', + }) + } + { + const index = editor.renderedDOM.getByTestId('index') + const { display, flexDirection, gap } = getComputedStyle(index) + expect({ display, flexDirection, gap }).toEqual({ + display: 'flex', + flexDirection: 'column', + gap: '32px', + }) + } + }) + it('can render content after navigating to a different page', async () => { + const editor = await renderTestEditorWithModel( + projectWithMultipleRoutes, + 'await-first-dom-report', + ) + await switchToLiveMode(editor) + await clickRemixLink(editor) + + { + const about = editor.renderedDOM.getByTestId('about') + const { display, flexDirection, gap, padding } = getComputedStyle(about) + expect({ display, flexDirection, gap, padding }).toEqual({ + display: 'flex', + flexDirection: 'row', + gap: '24px', + padding: '16px', + }) + } + { + const aboutText = editor.renderedDOM.getByTestId('about-text') + const { textShadow } = getComputedStyle(aboutText) + expect(textShadow).toEqual('rgba(0, 0, 0, 0.2) 3px 3px 6px') + } + }) + }) }) + +const switchToLiveMode = (editor: EditorRenderResult) => + editor.dispatch([switchEditorMode(EditorModes.liveMode())], true) + +async function clickLinkWithTestId(editor: EditorRenderResult, testId: string) { + const targetElement = editor.renderedDOM.queryAllByTestId(testId)[0] + const targetElementBounds = targetElement.getBoundingClientRect() + + const clickPoint = windowPoint({ x: targetElementBounds.x + 5, y: targetElementBounds.y + 5 }) + await mouseClickAtPoint(targetElement, clickPoint) +} + +async function clickRemixLink(editor: EditorRenderResult) { + await clickLinkWithTestId(editor, 'remix-link') + await editor.getDispatchFollowUpActionsFinished() +} diff --git a/editor/src/core/third-party/utopia-api-components.ts b/editor/src/core/third-party/utopia-api-components.ts index fb6cb8893f6e..43ea91c7d030 100644 --- a/editor/src/core/third-party/utopia-api-components.ts +++ b/editor/src/core/third-party/utopia-api-components.ts @@ -18,6 +18,43 @@ import { jsxElementWithoutUID, } from '../shared/element-template' +const IntrinsicComponentDescriptor = ( + name: string, + insertMenuLabel: string, + supportsChildren: boolean, + styleProp: () => JSExpression, +): ComponentDescriptor => { + return { + properties: { + style: { + control: 'style-controls', + }, + }, + supportsChildren: supportsChildren, + preferredChildComponents: [], + variants: [ + { + insertMenuLabel: insertMenuLabel, + importsToAdd: {}, + elementToInsert: () => + jsxElementWithoutUID( + name, + [ + jsxAttributesEntry('style', styleProp(), emptyComments), + jsxAttributesEntry( + 'data-label', + jsExpressionValue('Rectangle', emptyComments), + emptyComments, + ), + ], + [], + ), + }, + ], + source: defaultComponentDescriptor(), + ...ComponentDescriptorDefaults, + } +} const BasicUtopiaComponentDescriptor = ( name: string, supportsChildren: boolean, @@ -106,7 +143,7 @@ const BasicUtopiaSceneDescriptor = ( export const UtopiaApiComponents: ComponentDescriptorsForFile = { Ellipse: BasicUtopiaComponentDescriptor('Ellipse', false, defaultElementStyle), - Rectangle: BasicUtopiaComponentDescriptor('Rectangle', false, defaultRectangleElementStyle), + Rectangle: IntrinsicComponentDescriptor('div', 'Rectangle', false, defaultRectangleElementStyle), View: BasicUtopiaComponentDescriptor('View', true, defaultElementStyle), FlexRow: BasicUtopiaComponentDescriptor('FlexRow', true, defaultFlexRowOrColStyle), FlexCol: BasicUtopiaComponentDescriptor('FlexCol', true, defaultFlexRowOrColStyle), diff --git a/editor/src/uuiui/inputs/grid-expression-input.tsx b/editor/src/uuiui/inputs/grid-expression-input.tsx index f4a82b1d7f4b..12a8cbaddcb1 100644 --- a/editor/src/uuiui/inputs/grid-expression-input.tsx +++ b/editor/src/uuiui/inputs/grid-expression-input.tsx @@ -3,9 +3,11 @@ import { jsx } from '@emotion/react' import type { CSSProperties } from 'react' import React from 'react' +import type { CSSNumberUnit } from '../../components/inspector/common/css-utils' import { cssKeyword, gridDimensionsAreEqual, + isFR, isGridCSSNumber, isValidGridDimensionKeyword, parseCSSNumber, @@ -27,7 +29,10 @@ import { import { Icons, SmallerIcons } from '../icons' import { NO_OP } from '../../core/shared/utils' import { unless } from '../../utils/react-conditionals' -import { useColorTheme } from '../styles/theme' +import { useColorTheme, UtopiaTheme } from '../styles/theme' +import type { Optic } from '../../core/shared/optics/optics' +import { fromField, fromTypeGuard, notNull } from '../../core/shared/optics/optic-creators' +import { exists, modify } from '../../core/shared/optics/optic-utilities' interface GridExpressionInputProps { testId: string @@ -43,6 +48,8 @@ interface GridExpressionInputProps { const DropdownWidth = 25 +const ArrowKeyFractionalIncrement = 0.1 + export const GridExpressionInput = React.memo( ({ testId, @@ -66,32 +73,56 @@ export const GridExpressionInput = React.memo( const onKeyDown = React.useCallback( (e: React.KeyboardEvent) => { - if (e.key !== 'Enter') { - return - } - if (isValidGridDimensionKeyword(printValue)) { - return onUpdateNumberOrKeyword(cssKeyword(printValue)) - } + switch (e.key) { + case 'Enter': + if (isValidGridDimensionKeyword(printValue)) { + return onUpdateNumberOrKeyword(cssKeyword(printValue)) + } - const defaultUnit = isGridCSSNumber(value) ? value.value.unit : 'px' - const maybeNumber = parseCSSNumber(printValue, 'AnyValid', defaultUnit) - if (isRight(maybeNumber)) { - return onUpdateNumberOrKeyword(maybeNumber.value) - } + const defaultUnit = isGridCSSNumber(value) ? value.value.unit : 'px' + const maybeNumber = parseCSSNumber(printValue, 'AnyValid', defaultUnit) + if (isRight(maybeNumber)) { + return onUpdateNumberOrKeyword(maybeNumber.value) + } - const maybeMinmax = parseGridCSSMinmaxOrRepeat(printValue) - if (maybeMinmax != null) { - return onUpdateDimension({ - ...maybeMinmax, - areaName: value.areaName, - } as GridDimension) - } + const maybeMinmax = parseGridCSSMinmaxOrRepeat(printValue) + if (maybeMinmax != null) { + return onUpdateDimension({ + ...maybeMinmax, + lineName: value.lineName, + } as GridDimension) + } - if (printValue === '') { - return onUpdateNumberOrKeyword(cssKeyword('auto')) - } + if (printValue === '') { + return onUpdateNumberOrKeyword(cssKeyword('auto')) + } - setPrintValue(stringifyGridDimension(value)) + setPrintValue(stringifyGridDimension(value)) + break + case 'ArrowUp': + case 'ArrowDown': + e.preventDefault() + const gridNumberValueOptic: Optic = fromTypeGuard( + isGridCSSNumber, + ).compose(fromField('value')) + const valueUnitOptic: Optic = gridNumberValueOptic + .compose(fromField('unit')) + .compose(notNull()) + .compose(fromTypeGuard(isFR)) + const gridNumberNumberOptic: Optic = + gridNumberValueOptic.compose(fromField('value')) + if (exists(valueUnitOptic, value)) { + function updateFractional(fractionalValue: number): number { + return ( + fractionalValue + + (e.key === 'ArrowUp' ? ArrowKeyFractionalIncrement : -ArrowKeyFractionalIncrement) + ) + } + const updatedDimension = modify(gridNumberNumberOptic, updateFractional, value) + onUpdateDimension(updatedDimension) + } + break + } }, [printValue, onUpdateNumberOrKeyword, onUpdateDimension, value], ) @@ -164,23 +195,25 @@ export const GridExpressionInput = React.memo( return gridDimensionsAreEqual(value, defaultValue) }, [value, defaultValue]) + const highlightBorder = dropdownOpen || inputFocused + return (
{unless( inputFocused, diff --git a/editor/src/uuiui/inputs/string-input.tsx b/editor/src/uuiui/inputs/string-input.tsx index c38c162bb491..5cddfd0d280e 100644 --- a/editor/src/uuiui/inputs/string-input.tsx +++ b/editor/src/uuiui/inputs/string-input.tsx @@ -3,6 +3,7 @@ import { jsx } from '@emotion/react' import styled from '@emotion/styled' import composeRefs from '@seznam/compose-react-refs' +import type { CSSProperties } from 'react' import React from 'react' import type { ControlStatus } from '../../components/inspector/common/control-status' import type { ControlStyles } from '../../components/inspector/common/control-styles' @@ -34,6 +35,7 @@ export interface StringInputProps pasteHandler?: boolean showBorder?: boolean innerStyle?: React.CSSProperties + ellipsize?: boolean } export const StringInput = React.memo( @@ -49,6 +51,7 @@ export const StringInput = React.memo( DEPRECATED_labelBelow: labelBelow, testId, showBorder, + ellipsize, ...inputProps }, propsRef, @@ -88,6 +91,13 @@ export const StringInput = React.memo( const placeholder = getControlStylesAwarePlaceholder(controlStyles) ?? initialPlaceHolder + let inputStyle: CSSProperties = {} + if (ellipsize) { + inputStyle.textOverflow = 'ellipsis' + inputStyle.whiteSpace = 'nowrap' + inputStyle.overflow = 'hidden' + } + return (
{labelBelow == null ? null : ( diff --git a/editor/src/uuiui/radix-components.tsx b/editor/src/uuiui/radix-components.tsx index 86ed787124af..77feb64fe1db 100644 --- a/editor/src/uuiui/radix-components.tsx +++ b/editor/src/uuiui/radix-components.tsx @@ -11,6 +11,8 @@ import { Icons, SmallerIcons } from './icons' import { when } from '../utils/react-conditionals' import { Icn, type IcnProps } from './icn' import { forceNotNull } from '../core/shared/optional-utils' +import { usePropControlledStateV2 } from '../components/inspector/common/inspector-utils' +import { assertNever } from '../core/shared/utils' // Keep this in sync with the radix-components-portal div in index.html. export const RadixComponentsPortalId = 'radix-components-portal' @@ -90,6 +92,7 @@ export interface DropdownMenuProps { alignOffset?: number onOpenChange?: (open: boolean) => void style?: CSSProperties + forceOpen?: boolean } export const ItemContainerTestId = (id: string) => `item-container-${id}` @@ -103,7 +106,7 @@ export const DropdownMenu = React.memo((props) => { }, []) const onEscapeKeyDown = React.useCallback((e: KeyboardEvent) => e.stopPropagation(), []) - const [open, setOpen] = React.useState(false) + const [open, setOpen] = usePropControlledStateV2(props.forceOpen || false) const shouldShowCheckboxes = props.items.some( (i) => !isSeparatorDropdownMenuItem(i) && i.checked != null, @@ -254,6 +257,29 @@ export function separatorRadixSelectOption(): Separator { export type RadixSelectOption = RegularRadixSelectOption | Separator +function equalRadixSelectOptions( + a: RadixSelectOption | null, + b: RadixSelectOption | null, +): boolean { + if (a == null && b == null) { + return true + } + if (a == null || b == null) { + return false + } + switch (a.type) { + case 'REGULAR': + if (b.type !== 'REGULAR') { + return false + } + return a.value === b.value && a.label === b.label + case 'SEPARATOR': + return b.type === 'SEPARATOR' + default: + assertNever(a) + } +} + function optionLabelToString( option: RegularRadixSelectOption | null, isOpen: boolean, @@ -278,6 +304,7 @@ export const RadixSelect = React.memo( onValueChange?: (value: string) => void contentClassName?: string onOpenChange?: (open: boolean) => void + allowedValues?: string[] }) => { const stopPropagation = React.useCallback((e: React.KeyboardEvent) => { e.stopPropagation() @@ -294,7 +321,27 @@ export const RadixSelect = React.memo( [propsOnOpenChange], ) - const valueLabel = optionLabelToString(props.value ?? null, isOpen, props.value?.value ?? null) + const valueLabel = React.useMemo(() => { + return optionLabelToString(props.value ?? null, isOpen, props.value?.value ?? null) + }, [props.value, isOpen]) + + const options = React.useMemo(() => { + let fullOptions = [...props.options] + + if ( + // the value is not null + props.value != null && + // the value is allowed for this dropdown + props.allowedValues?.some((allowed) => allowed === props.value?.value) && + // the options don't contain the value already + !fullOptions.some((opt) => equalRadixSelectOptions(opt, props.value)) + ) { + // add the given option + separator at the top of the options + fullOptions.unshift(...[props.value, separatorDropdownMenuItem('unknown-dropdown-value')]) + } + + return fullOptions + }, [props.options, props.value, props.allowedValues]) return ( - {props.options.map((option, index) => { + {options.map((option, index) => { if (option.type === 'SEPARATOR') { return ( = [ @@ -206,6 +211,11 @@ export const AllFlexAlignments: Array = [ FlexAlignment.Center, FlexAlignment.FlexEnd, FlexAlignment.Stretch, + FlexAlignment.Baseline, + FlexAlignment.FirstBaseline, + FlexAlignment.LastBaseline, + FlexAlignment.SafeCenter, + FlexAlignment.UnsafeCenter, ] export enum FlexJustifyContent { @@ -216,6 +226,9 @@ export enum FlexJustifyContent { SpaceBetween = 'space-between', SpaceEvenly = 'space-evenly', Stretch = 'stretch', + Normal = 'normal', + SafeCenter = 'safe center', + UnsafeCenter = 'unsafe center', } export const AllFlexJustifyContents: Array = [ @@ -226,6 +239,9 @@ export const AllFlexJustifyContents: Array = [ FlexJustifyContent.SpaceBetween, FlexJustifyContent.SpaceEvenly, FlexJustifyContent.Stretch, + FlexJustifyContent.Normal, + FlexJustifyContent.SafeCenter, + FlexJustifyContent.UnsafeCenter, ] export enum FlexDirection {