Skip to content

Commit 759c228

Browse files
authored
Merge pull request #143 from Katerina-Chernevskaya/a-puzzle-a-day
A puzzle a day
2 parents 5b54067 + f712f98 commit 759c228

14 files changed

+372
-0
lines changed

samples/a-puzzle-a-day/README.md

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# A Puzzle a Day
2+
3+
## Summary
4+
5+
A **Puzzle a Day** is a clever twist on the classic tangram concept. You’re given 8 colorful, irregular shapes and a game board that resembles a 7×7 grid - but with a catch: some cells are blocked and unusable, which changes how the pieces fit.
6+
Your goal: place all the pieces so that they don’t overlap, and exactly two valid cells remain empty - one for the month, and one for the day.
7+
8+
Behind the scenes, the entire game is powered by Named Formulas and User Defined Functions - a modern, maintainable approach to building logic in Power Apps. This design dramatically reduces code duplication, standardizes all calculations, and improves code redability by keeping the logic declarative and modular. Every shape move, rotation, or board update is calculated cleanly and efficiently.
9+
10+
![Game completed](./assets/a-puzzle-a-day.png)
11+
![Game](./assets/a-puzzle-a-day-video.gif)
12+
13+
## Applies to
14+
15+
![Power Apps](https://img.shields.io/badge/Power%20Apps-Yes-green "Yes")
16+
![Power Automate](https://img.shields.io/badge/Power%20Automate-No-red "No")
17+
![Power BI](https://img.shields.io/badge/Power%20BI-No-red "No")
18+
![Power Pages](https://img.shields.io/badge/Power%20Pages-No-red "No")
19+
![Power Virtual Agents](https://img.shields.io/badge/Power%20Virtual%20Agents-No-red "No")
20+
![Dataverse](https://img.shields.io/badge/Dataverse-No-red "No")
21+
![AI Builder](https://img.shields.io/badge/AI%20Builder-No-red "No")
22+
![Custom Connectors](https://img.shields.io/badge/Custom%20Connectors-No-red "No")
23+
![Power Fx](https://img.shields.io/badge/Power%20Fx-Yes-green "Yes")
24+
25+
## Compatibility
26+
27+
![Premium License](https://img.shields.io/badge/Premium%20License-Not%20Required-red.svg "Premium license not required")
28+
![Experimental Features](https://img.shields.io/badge/Experimental%20Features-Yes-green.svg "Rely on experimental features")
29+
30+
## Contributors
31+
32+
* [Katerina Chernevskaya](https://github.com/Katerina-Chernevskaya)
33+
34+
## Version history
35+
36+
Version|Date|Comments
37+
-------|----|--------
38+
1.0|April 17, 2025|Initial release
39+
40+
## Prerequisites
41+
42+
Make sure that experimental features are enabled:
43+
- User-defined functions
44+
- User-defined types
45+
![experimental-features](./assets/experimental-features.png)
46+
47+
## Minimal path to awesome
48+
49+
### Using the solution zip
50+
51+
* [Download](./solution/a-puzzle-a-day.zip) the `.zip` from the `solution` folder
52+
* Within **Power Apps Studio**, import the solution `.zip` file using **Solutions** > **Import Solution** and select the `.zip` file you just packed.
53+
54+
### Using the source code
55+
56+
You can also use the [Power Apps CLI](https://docs.microsoft.com/powerapps/developer/data-platform/powerapps-cli) to pack the source code by following these steps:
57+
58+
* Clone the repository to a local drive
59+
* Pack the source files back into a solution `.zip` file:
60+
61+
```bash
62+
pac solution pack --zipfile pathtodestinationfile --folder pathtosourcefolder --processCanvasApps
63+
```
64+
65+
Making sure to replace `pathtosourcefolder` to point to the path to this sample's `sourcecode` folder, and `pathtodestinationfile` to point to the path of this solution's `.zip` file (located under the `solution` folder)
66+
* Within **Power Apps Studio**, import the solution `.zip` file using **Solutions** > **Import Solution** and select the `.zip` file you just packed.
67+
68+
## Features
69+
70+
- Fully declarative Power Fx architecture: no Power Automate, no connectors - built entirely with Named Formulas, User Defined Functions, and native Power Apps logic.
71+
- Named Formulas as data model:
72+
- `nfCanva` — generates the board with titles and coordinates
73+
- `nfShapesDefault` — stores default shape geometry, rotations, positions
74+
- `nfForbiddenCells` — defines blocked cells on the board
75+
- User Defined Functions (UDFs) for all game logic:
76+
- `udfShape(shapeName)` — central lookup returning all dynamic shape parameters
77+
- `udfShapeCanvaCells(shapeName)` — calculates absolute positions of shape cells based on position and rotation
78+
- `udfMovementAvailability(shapeName)` — returns movement availability in all four directions using smart collision detection
79+
- Modular gameplay functions:
80+
- `udfMove(...)`, `udfRotate(...)`, `udfRemoveShape(...)` — all actions update both shape position and the board status (_canva)
81+
- `udfUpdateCanva(...)` — modular board painter used consistently for all shape actions
82+
83+
## Help
84+
85+
We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues.
86+
87+
If you encounter any issues while using this sample, you can [create a new issue](https://github.com/pnp/powerapps-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=bug-report.yml&sample=a-puzzle-a-day&authors=@Katerina-Chernevskaya&title=a-puzzle-a-day%20-%20).
88+
89+
For questions regarding this sample, [create a new question](https://github.com/pnp/powerapps-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=question.yml&sample=a-puzzle-a-day&authors=@Katerina-Chernevskaya&title=a-puzzle-a-day%20-%20).
90+
91+
Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/powerapps-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=suggestion.yml&sample=a-puzzle-a-day&authors=@Katerina-Chernevskaya&title=a-puzzle-a-day%20-%20).
92+
93+
## Disclaimer
94+
95+
**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.**
96+
97+
<img src="https://m365-visitor-stats.azurewebsites.net/powerplatform-samples/samples/a-puzzle-a-day" aria-hidden="true" />
3.13 MB
Loading
1.32 MB
Loading
74.1 KB
Loading
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
[
2+
{
3+
"name": "pnp-powerplatform-samples-a-puzzle-a-day",
4+
"source": "pnp",
5+
"title": "A Puzzle a Day",
6+
"shortDescription": "A **Puzzle a Day** is a clever twist on the classic tangram concept. You’re given 8 colorful, irregular shapes and a game board that resembles a 7×7 grid - but with a catch: some cells are blocked and unusable, which changes how the pieces fit. Your goal: place all the pieces so that they don’t overlap, and exactly two valid cells remain empty - one for the month, and one for the day.",
7+
"url": "https://github.com/pnp/powerplatform-samples/tree/main/samples/a-puzzle-a-day",
8+
"downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/powerplatform-samples/tree/main/samples/a-puzzle-a-day",
9+
"longDescription": [
10+
"A **Puzzle a Day** is a clever twist on the classic tangram concept. You’re given 8 colorful, irregular shapes and a game board that resembles a 7×7 grid - but with a catch: some cells are blocked and unusable, which changes how the pieces fit. Your goal: place all the pieces so that they don’t overlap, and exactly two valid cells remain empty - one for the month, and one for the day. Behind the scenes, the entire game is powered by Named Formulas and User Defined Functions - a modern, maintainable approach to building logic in Power Apps. This design dramatically reduces code duplication, standardizes all calculations, and improves code redability by keeping the logic declarative and modular. Every shape move, rotation, or board update is calculated cleanly and efficiently."
11+
],
12+
"creationDateTime": "2025-04-17",
13+
"updateDateTime": "2025-04-17",
14+
"products": [
15+
"Power Apps",
16+
"Power Fx",
17+
"Power Platform"
18+
],
19+
"tags": [
20+
"tangram",
21+
"puzzle"
22+
],
23+
"categories": [
24+
"CANVAS"
25+
],
26+
"metadata": [
27+
{
28+
"key": "POWERAPPS-EXPERIMENTAL",
29+
"value": "Yes"
30+
},
31+
{
32+
"key": "POWERAPPS-PREMIUM",
33+
"value": "No"
34+
},
35+
{
36+
"key": "POWERAPPS-ONPREM",
37+
"value": "No"
38+
},
39+
{
40+
"key": "POWERAPPS-CUSTOMCONNECTOR",
41+
"value": "No"
42+
}
43+
],
44+
"thumbnails": [
45+
{
46+
"type": "image",
47+
"order": 100,
48+
"url": "https://raw.githubusercontent.com/Katerina-Chernevskaya/powerplatform-samples/f3a795e60197f190ca4470ce93da435c40b267b3/samples/a-puzzle-a-day/assets/a-puzzle-a-day.png",
49+
"alt": "App preview"
50+
},
51+
{
52+
"type": "video",
53+
"order": 101,
54+
"url": "https://www.youtube.com/embed/dmCXzPfsIto",
55+
"alt": "A Puzzle a Day"
56+
}
57+
],
58+
"authors": [
59+
{
60+
"gitHubAccount": "Katerina-Chernevskaya",
61+
"pictureUrl": "https://github.com/Katerina-Chernevskaya.png",
62+
"name": "Katerina Chernevskaya"
63+
}
64+
],
65+
"references": [
66+
{
67+
"name": "Microsoft Power Platform documentation",
68+
"description": "Discover how to make the most of Microsoft Power Platform products with online training courses, docs, and videos covering product capabilities and how-to guides.",
69+
"url": "https://learn.microsoft.com/power-platform/"
70+
}
71+
]
72+
}
73+
]
538 KB
Binary file not shown.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# msbuild output directories
4+
/bin
5+
/obj
6+
7+
# MSBuild Binary and Structured Log
8+
*.binlog
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<PowerAppsTargetsPath>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\PowerApps</PowerAppsTargetsPath>
5+
</PropertyGroup>
6+
7+
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
8+
<Import Project="$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.props" Condition="Exists('$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.props')" />
9+
10+
<PropertyGroup>
11+
<ProjectGuid>d0103190-eae1-4b68-b056-61f2047883f8</ProjectGuid>
12+
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
13+
<!--Remove TargetFramework when this is available in 16.1-->
14+
<TargetFramework>net462</TargetFramework>
15+
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
16+
<SolutionRootPath>src</SolutionRootPath>
17+
</PropertyGroup>
18+
19+
<!--
20+
Solution Packager overrides, un-comment to use: SolutionPackagerType (Managed, Unmanaged, Both)
21+
Solution Localization Control, if you want to enabled localization of your solution, un-comment SolutionPackageEnableLocalization and set the value to true. - Requires use of -loc flag on Solution Clone or Sync
22+
-->
23+
<!--
24+
<PropertyGroup>
25+
<SolutionPackageType>Managed</SolutionPackageType>
26+
<SolutionPackageEnableLocalization>false</SolutionPackageEnableLocalization>
27+
</PropertyGroup>
28+
-->
29+
30+
<ItemGroup>
31+
<PackageReference Include="Microsoft.PowerApps.MSBuild.Solution" Version="1.*" />
32+
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
33+
</ItemGroup>
34+
35+
<ItemGroup>
36+
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\.gitignore" />
37+
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\bin\**" />
38+
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\obj\**" />
39+
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\*.cdsproj" />
40+
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\*.cdsproj.user" />
41+
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\*.sln" />
42+
</ItemGroup>
43+
44+
<ItemGroup>
45+
<None Include="$(MSBuildThisFileDirectory)\**" Exclude="@(ExcludeDirectories)" />
46+
<Content Include="$(SolutionPackageZipFilePath)">
47+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
48+
</Content>
49+
</ItemGroup>
50+
51+
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
52+
<Import Project="$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.targets" Condition="Exists('$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.targets')" />
53+
54+
</Project>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<CanvasApp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3+
<Name>kch_apuzzleaday_72426</Name>
4+
<AppVersion>2025-04-17T16:20:51Z</AppVersion>
5+
<Status>Ready</Status>
6+
<CreatedByClientVersion>3.25042.3.0</CreatedByClientVersion>
7+
<MinClientVersion>3.25042.3.0</MinClientVersion>
8+
<Tags>{"primaryDeviceWidth":"1366","primaryDeviceHeight":"768","supportsPortrait":"true","supportsLandscape":"true","primaryFormFactor":"Tablet","publisherVersion":"3.25042.3","minimumRequiredApiVersion":"2.2.0","hasComponent":"true","hasUnlockedComponent":"true","isUnifiedRootApp":"false","sienaVersion":"20250417T102635Z-3.25042.3.0","showStatusBar":"false"}</Tags>
9+
<IsCdsUpgraded>0</IsCdsUpgraded>
10+
<GalleryItemId xsi:nil="true"></GalleryItemId>
11+
<BackgroundColor>RGBA(0,176,240,1)</BackgroundColor>
12+
<DisplayName>A Puzzle A Day</DisplayName>
13+
<Description>Engage your mind with A Puzzle A Day. This app offers an interactive experience where users can manipulate shapes to solve puzzles, enhancing cognitive skills and providing daily mental challenges.</Description>
14+
<CommitMessage>ready for testing</CommitMessage>
15+
<Publisher></Publisher>
16+
<AuthorizationReferences>[]</AuthorizationReferences>
17+
<ConnectionReferences>{}</ConnectionReferences>
18+
<DatabaseReferences>{}</DatabaseReferences>
19+
<AppComponents>[]</AppComponents>
20+
<AppComponentDependencies>[]</AppComponentDependencies>
21+
<CanConsumeAppPass>1</CanConsumeAppPass>
22+
<CanvasAppType>0</CanvasAppType>
23+
<BypassConsent>0</BypassConsent>
24+
<AdminControlBypassConsent>0</AdminControlBypassConsent>
25+
<EmbeddedApp xsi:nil="true"></EmbeddedApp>
26+
<IntroducedVersion>1.0</IntroducedVersion>
27+
<CdsDependencies>{"cdsdependencies":[]}</CdsDependencies>
28+
<IsCustomizable>1</IsCustomizable>
29+
<BackgroundImageUri>/CanvasApps/kch_apuzzleaday_72426_BackgroundImageUri</BackgroundImageUri>
30+
<DocumentUri>/CanvasApps/kch_apuzzleaday_72426_DocumentUri.msapp</DocumentUri>
31+
<AdditionalUris>
32+
<AdditionalUri>/CanvasApps/kch_apuzzleaday_72426_AdditionalUris0_identity.json</AdditionalUri>
33+
</AdditionalUris>
34+
</CanvasApp>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"__Version":"0.1","App":"804be729-5d49-40c0-9037-b56a8d2fe82e","Test_7F478737223C4B69":"d022519a-dd59-4968-a2c8-e2d80551651a","Host":"e7862d44-e63a-4fdb-9671-dcbec8a14074","BlockA":"b1b0ab6f-6019-43e6-bbd6-ccaf147b16fd","GalleryA":"072fc18c-550d-478a-9d54-07ef41734db4","galleryTemplate2_2":"da3f6211-d10b-4c4e-9b2c-f006da36a552","HtmlTextA":"8db71e56-75d6-4d7c-ac7e-0bc503d8efb5","BlockC":"baaa8cba-001f-408c-8367-be40c27cd0cd","GalleryC":"7cf49779-c937-4ac8-90fb-3eb82d814d95","galleryTemplate2_3":"ca077ffe-75f3-475e-b853-37086fe38884","HtmlTextC":"a9473104-68bd-49e7-828a-c49db8a55a6e","BlockB":"77725804-5422-4742-b652-37bcade40977","GalleryB":"53857c7d-b58d-4035-a8ab-6700514ff46e","galleryTemplate2_1":"da3c8bac-75e6-4bb8-9f3d-bb3428f69f16","HtmlTextB":"87065bae-769e-4a8d-ade7-4f89a2e29de2","BlockD":"a0e517f9-6f32-46be-964f-0450c4b63bd3","GalleryD":"4fdf5a5b-cb54-4f63-88d9-fbb5c316e730","galleryTemplate2_4":"a0a91bb2-c3bc-403e-88ff-7ea614937aee","HtmlTextD":"fc33bf6d-e3b0-4699-8e18-3290350f3b1c","BlockE":"2d4cb210-9255-4ef0-ab5b-3569b47c5ffb","GalleryE":"3a2b8811-aa62-4050-a8cb-454ce10f9402","galleryTemplate2_5":"01039793-a02d-4e0e-bdfa-ab2acf507122","HtmlTextE":"49804de7-3e5b-4324-914e-3af6cd463090","BlockF":"0c4cc834-6039-44e3-9827-d394ba825208","GalleryF":"cdc3349f-ca9f-4d0d-9e4e-1ae8cb366a5a","galleryTemplate2_6":"ca51f746-3c80-4f3b-8180-a27633131cab","HtmlTextF":"aba47681-fabd-4a7d-baec-e9dfac0aa24c","BlockG":"de858a4e-e264-48fd-aaa4-b3226c6ad370","GalleryG":"7d351c91-47ca-47fc-965a-8fb396ae5ce6","galleryTemplate2_7":"f3eb98be-39c5-431b-861b-f967a3afd12a","HtmlTextG":"624fd849-956b-4c86-80b7-b1192c04ae8e","BlockH":"d5dab8f4-483f-4363-b410-86d95ae72325","GalleryH":"0cc6fcf8-4cec-4b59-8c9d-cacec4c69e22","galleryTemplate2_8":"96817d7e-7c51-40f1-8204-e1f7097fef6a","HtmlTextH":"d843cb1d-f598-4452-ae5a-aeced33419f2","Screen1":"d72df754-b7e4-48bf-b9e7-43ab714392e1","HtmlText2_3":"557dbcad-ac58-4d95-8905-d9778e0e1bd6","HtmlText2_2":"9e2ff7d3-40ed-4e1d-81a9-a255fe64e8fc","HtmlText2_1":"b0bb39ac-babc-472a-ae1d-578b31cbe311","Image2":"2192a416-d660-4d63-92ba-7958b3012bc1","Shape C Container":"d85ae98f-aca5-4fb7-8341-cf8e44a9be72","Shape C":"a4d8033b-6a89-4567-b6ae-6bad92bd025d","Shape C - select":"6c1bbfc5-1111-4da4-bc1c-d7f4066920ae","Shape D Container":"2669219d-c5fe-4650-8ca0-d0e6054412ce","Shape D":"e03df611-305f-4bd9-8315-4e3836808110","Shape D - select":"2aae77d5-2459-4d2a-93d2-ba702564f6ce","Shape B Container":"c1f03a5c-1225-40cb-9552-7ecccfd62288","Shape B":"c8325493-ff99-4271-bb8f-308e8bcd2645","Shape B - select":"39f9b93a-4b4b-4a80-9f5d-16c10fb40113","Image4":"662423be-a4bd-42b7-a7a0-3ca6363b48f6","Image4_1":"fde9641e-a645-4878-8dc5-5989e821ff84","Shape E Container":"9a402c6e-3e85-4daa-b9e5-7580378d32b2","Shape E":"521a0b5f-66a8-4a9a-9649-746ea5a0cb5e","Shape E - select":"7c01e020-7864-4c4b-9cde-6d4da1adac92","Canva":"1f6e77b2-d92a-47b5-9b1a-08ce46aa8d88","Canva Gallery":"58248e55-c36d-48f2-ae9f-ae0c6958c07d","galleryTemplate1":"6d686063-61a4-4d6c-b6aa-547273a35100","title":"cec4a6be-505c-448e-b1bb-dec2083a9f85","unlocked date and month":"6c2c6149-b761-4857-8ce4-2f068f936938","warning alert":"714545be-51f5-418c-9fbb-aecc216b8a15","Timer - HtmlText":"57b41bca-ca97-4cb6-b2ab-5423d52f95cb","Timer1":"a83762a8-f2cb-4328-8b80-4f17fd8fa094","Shape F Container":"8216bfba-4a66-4a52-a74f-fddc3701d48c","Shape F":"ec200c41-852a-4d8e-93c6-e55b44ecbf2d","Shape F - select":"465ab09c-7473-45b9-9c98-c7ff18c1068d","Start over - HtmlText":"a8e2af0d-ff4f-46dc-bed2-5a69b145cb08","Remove shape - HtmlText":"004f2a2e-52d3-433d-a9a3-9eb9cef115c3","Start over - Button":"db08e2de-b9ca-4522-8092-ef3e093193c0","Remove shape - Button":"c6ee76b3-cbc3-4956-900b-11629f1f9970","Remove shape - Icon":"e6478d06-583f-4d02-b2b9-1f7c8df7e41b","Start over - Icon":"ac96c97c-e53d-4318-8fe1-93e3119e3838","Shape A Container":"fd6d09d8-cd0e-4591-99a8-97992e98a86b","Shape A":"2e3b6ef0-449b-40a9-957b-2b1080c40570","Shape A - select":"9e342a60-c6bd-43a2-b392-286cd90425ec","Shape G Container":"c9f5fddb-25e1-4290-91f5-84dfae14670d","Shape G":"111ffe2c-cecb-48f7-b1d6-9dc5bb772a4b","Shape G - select":"a5fa05d5-2736-4edd-87a1-c11acefa3f94","Up - HtmlText":"323137ef-0b7d-492a-a8a2-716816a92266","Up":"983ac256-5929-44a8-a83b-3a5e8a988189","Up - Icon":"b18c0605-7676-4724-8052-5eda3337f983","Shape H Container":"0a915b0d-fd15-4ad2-9163-7cee60a57132","Shape H":"47e2862a-d5a1-4b48-800f-148c159e371f","Shape H - select":"88a50646-9052-4296-bd48-67d977bb5a1c","Left - HtmlText":"b080d674-04b8-4e15-b740-9d8f2f5e7f45","Rotate - HtmlText":"0241420f-f03e-444d-a8f1-db8452c7ffbc","Right - HtmlText":"bb762491-a436-4bbf-98bf-0e4e911c6154","Left":"dbc0a87b-bd7f-422a-bdd8-24d9a00fbbbf","Rotate":"2aabb410-0f63-42be-876e-ad5d40c0f267","Right":"b6cb77dc-aeaf-48a1-9693-8f77a5ca35c3","Left - Icon":"dfb86831-1524-4cb7-b6ce-c6fc5ec88e12","Rotate - Icon":"1fa214d8-fb45-438c-9412-2149ae1514e0","Right - Icon":"c82de033-86f6-41bf-bca4-8ab080a59f6f","Down - HtmlText":"4b3e293b-ca71-4e3b-a90d-75b347e6aaf2","Down":"4cd3ebd5-c6b4-4ce5-9956-0a66e27a532b","Down - Icon":"720c33b4-eb50-400a-b15e-408770eead2e","Label1":"34e8ab2e-b04b-4831-9868-2e5af98e3830","Start over - Group":"e239dec4-21f9-4ef3-b1c4-9fd509cd50bf","Remove shape - Group":"92c032fa-a6a2-40ff-ba60-d0e856804895","Up - Group":"000e6aab-e895-4132-875c-283187c8268f","Left - Group":"47fcc8c5-1700-49f0-8cee-77a2a6b4b43b","Rotate - Group":"457d450e-4805-47c4-92d6-359cba166002","Right - Group":"b76b2a03-9da9-4230-9ab1-d6072be40b6e","Down - Group":"94117ab2-566e-431b-bd95-4ec120265b55"}

0 commit comments

Comments
 (0)