├── materialdesign components
├── sourcecode
│ ├── ComponentReferences.json
│ ├── Connections
│ │ └── Connections.json
│ ├── Src
│ │ ├── TextInput.fx.yaml
│ │ ├── App.fx.yaml
│ │ ├── Screen1.fx.yaml
│ │ ├── Calendar.fx.yaml
│ │ ├── Bottom Navigation.fx.yaml
│ │ ├── ContrastChecker.fx.yaml
│ │ ├── EditorState
│ │ │ ├── App.editorstate.json
│ │ │ ├── TextInput.editorstate.json
│ │ │ ├── Screen1.editorstate.json
│ │ │ └── ContrastChecker.editorstate.json
│ │ ├── Components
│ │ │ ├── cmp_MD_Gallery.json
│ │ │ ├── cmp_MD_SideSheet.fx.yaml
│ │ │ ├── cmp_MD_Checkbox.fx.yaml
│ │ │ ├── cmp_MD_ProgressIndicator.fx.yaml
│ │ │ ├── cmp_MD_Toggle.fx.yaml
│ │ │ ├── cmp_MD_Toggle.json
│ │ │ ├── cmp_MD_ContrastChecker.fx.yaml
│ │ │ ├── cmp_MD_SideSheet.json
│ │ │ ├── cmp_MD_RadioButton.fx.yaml
│ │ │ ├── cmp_MD_AppBar_top.fx.yaml
│ │ │ ├── cmp_MD_Bottom_Navigation.json
│ │ │ ├── cmp_MD_RadioButton.json
│ │ │ ├── cmp_MD_Snackbar.fx.yaml
│ │ │ ├── cmp_MD_AppBar_top.json
│ │ │ ├── cmp_MD_Dialog.fx.yaml
│ │ │ ├── cmp_MD_Gallery.fx.yaml
│ │ │ ├── cmp_MD_Slider.json
│ │ │ ├── cmp_MD_Slider.fx.yaml
│ │ │ ├── cmp_MD_Bottom_Navigation.fx.yaml
│ │ │ ├── cmp_MD_Dropdown.json
│ │ │ └── cmp_MD_Banner.fx.yaml
│ │ ├── SVG-Icons.fx.yaml
│ │ ├── Snackbar.fx.yaml
│ │ ├── NavigateTo.fx.yaml
│ │ ├── Buttons.fx.yaml
│ │ └── SetupPage.fx.yaml
│ ├── DataSources
│ │ ├── 2.K3Mf9I2ZSkCceYWHGMs9oQ%3d%3d.colItems.json
│ │ ├── 15.K3Mf9I2ZSkCceYWHGMs9oQ%3d%3d.colItems.json
│ │ ├── RadioSample.json
│ │ ├── DropDownSample.json
│ │ └── CustomGallerySample.json
│ ├── Other
│ │ └── References
│ │ │ └── NamedValues.json
│ ├── Assets
│ │ └── SampleImage.json
│ ├── CanvasManifest.json
│ ├── Entropy
│ │ └── checksum.json
│ └── pkgs
│ │ ├── rectangle_2.3.0.xml
│ │ └── circle_2.3.0.xml
├── assets
│ ├── template.png
│ ├── cmp_MD_Slider.gif
│ ├── cmp_MD_Toggle.gif
│ ├── cmp_MD_banner.gif
│ ├── cmp_MD_button.png
│ ├── cmp_MD_dialog.gif
│ ├── cmp_MD_Checkbox.gif
│ ├── cmp_MD_Snackbar.gif
│ ├── cmp_MD_Snackbar.png
│ ├── cmp_MD_backdrop.gif
│ ├── cmp_MD_backdrop.png
│ ├── cmp_MD_snackbar.gif
│ ├── cmp_MD_SideSheet.png
│ ├── cmp_MD_appBarTop.gif
│ ├── cmp_MD_appBarTop.png
│ ├── cmp_MD_textinput.gif
│ ├── cmp_MD_textinput.png
│ ├── cmp_MD_timepicker.gif
│ ├── cmp_MD_BottomNavigation.png
│ ├── cmp_MD_button_examples.png
│ ├── cmp_MD_contrastchecker.png
│ ├── cmp_MD_navigationdrawer.gif
│ ├── cmp_MD_bottom_navigation.png
│ ├── cmp_MD_genericInputFrame.gif
│ ├── cmp_MD_progressindicator.gif
│ └── cmp_MD_textInputExamples.png
├── solution
│ ├── MD_Template_v1_1.msapp
│ ├── MD_Template_v1_2_experimental.msapp
│ ├── MaterialDesignCustomPage_1_0_0_3.zip
│ └── MaterialDesignComponentLibrary_1_0_0_8.zip
├── docs
│ ├── ContrastChecker.md
│ ├── Toggle.md
│ ├── ProgressIndicator.md
│ ├── Slider.md
│ ├── SideSheet.md
│ ├── BottomNavigation.md
│ ├── Checkbox.md
│ ├── Timepicker.md
│ ├── GenericInputFrame.md
│ ├── AppBarTop.md
│ ├── Dialog.md
│ ├── NavigationDrawer.md
│ ├── Snackbar.md
│ ├── Banner.md
│ ├── Button.md
│ ├── TextInput.md
│ └── Template.md
└── intro.md
├── docs
├── accessibility.md
└── design-consistency.md
├── LICENSE
└── README.md
/materialdesign components/sourcecode/ComponentReferences.json:
--------------------------------------------------------------------------------
1 | []
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Connections/Connections.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/TextInput.fx.yaml:
--------------------------------------------------------------------------------
1 | TextInput As screen:
2 |
3 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/App.fx.yaml:
--------------------------------------------------------------------------------
1 | App As appinfo:
2 | BackEnabled: =false
3 |
4 |
--------------------------------------------------------------------------------
/materialdesign components/assets/template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/template.png
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/Screen1.fx.yaml:
--------------------------------------------------------------------------------
1 | Screen1 As screen:
2 | Fill: =defaults.elementBackgroundColor
3 | Width: =1500
4 |
5 |
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_Slider.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_Slider.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_Toggle.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_Toggle.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_banner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_banner.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_button.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_dialog.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_dialog.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_Checkbox.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_Checkbox.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_Snackbar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_Snackbar.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_Snackbar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_Snackbar.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_backdrop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_backdrop.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_backdrop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_backdrop.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_snackbar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_snackbar.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_SideSheet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_SideSheet.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_appBarTop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_appBarTop.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_appBarTop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_appBarTop.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_textinput.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_textinput.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_textinput.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_textinput.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_timepicker.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_timepicker.gif
--------------------------------------------------------------------------------
/materialdesign components/solution/MD_Template_v1_1.msapp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/solution/MD_Template_v1_1.msapp
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_BottomNavigation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_BottomNavigation.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_button_examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_button_examples.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_contrastchecker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_contrastchecker.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_navigationdrawer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_navigationdrawer.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_bottom_navigation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_bottom_navigation.png
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_genericInputFrame.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_genericInputFrame.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_progressindicator.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_progressindicator.gif
--------------------------------------------------------------------------------
/materialdesign components/assets/cmp_MD_textInputExamples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/assets/cmp_MD_textInputExamples.png
--------------------------------------------------------------------------------
/materialdesign components/solution/MD_Template_v1_2_experimental.msapp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/solution/MD_Template_v1_2_experimental.msapp
--------------------------------------------------------------------------------
/materialdesign components/solution/MaterialDesignCustomPage_1_0_0_3.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/solution/MaterialDesignCustomPage_1_0_0_3.zip
--------------------------------------------------------------------------------
/materialdesign components/solution/MaterialDesignComponentLibrary_1_0_0_8.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pnp/powerapps-designtoolkit/HEAD/materialdesign components/solution/MaterialDesignComponentLibrary_1_0_0_8.zip
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/DataSources/2.K3Mf9I2ZSkCceYWHGMs9oQ%3d%3d.colItems.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "IsComponentScoped": true,
4 | "IsSampleData": false,
5 | "IsWritable": true,
6 | "Name": "2.K3Mf9I2ZSkCceYWHGMs9oQ==.colItems",
7 | "Type": "CollectionDataSourceInfo"
8 | }
9 | ]
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/DataSources/15.K3Mf9I2ZSkCceYWHGMs9oQ%3d%3d.colItems.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "IsComponentScoped": true,
4 | "IsSampleData": false,
5 | "IsWritable": true,
6 | "Name": "15.K3Mf9I2ZSkCceYWHGMs9oQ==.colItems",
7 | "Type": "CollectionDataSourceInfo"
8 | }
9 | ]
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/Calendar.fx.yaml:
--------------------------------------------------------------------------------
1 | Calendar As screen:
2 |
3 | cmp_MD_Calendar_1 As cmp_MD_Calendar:
4 | ZIndex: =1
5 |
6 | Label4 As label:
7 | Height: =70
8 | Size: =21
9 | Text: =cmp_MD_Calendar_1.selectedDate
10 | Width: =560
11 | X: =27
12 | Y: =987
13 | ZIndex: =2
14 |
15 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/Bottom Navigation.fx.yaml:
--------------------------------------------------------------------------------
1 | "'Bottom Navigation' As screen":
2 |
3 | Button2 As button:
4 | Fill: |-
5 | =ColorFade(ColorValue("#6200EE"), 50%)
6 | Height: =70
7 | Size: =24
8 | Text: ="Button"
9 | Width: =280
10 | X: =40
11 | Y: =40
12 | ZIndex: =2
13 |
14 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Other/References/NamedValues.json:
--------------------------------------------------------------------------------
1 | {
2 | "NamedValues": [
3 | {
4 | "Kind": "Page",
5 | "Name": "Custom Page Template",
6 | "Value": "custompage:cat_custompagetemplate_231d0"
7 | },
8 | {
9 | "Kind": "Page",
10 | "Name": "Page Kindergarten",
11 | "Value": "custompage:r2p_pagekindergarten_8cd51"
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Assets/SampleImage.json:
--------------------------------------------------------------------------------
1 | {
2 | "Content": "Image",
3 | "FileName": "/ctrllib/image/images/SampleImage.svg",
4 | "IsSampleData": true,
5 | "IsWritable": false,
6 | "Name": "SampleImage",
7 | "Path": "/ctrllib/image/images/SampleImage.svg",
8 | "ResourceKind": "Uri",
9 | "RootPath": "ms-appx:///ctrllib/image/images/SampleImage.svg",
10 | "Schema": "i",
11 | "Type": "ResourceInfo"
12 | }
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/DataSources/RadioSample.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "Data": "[{\"Value\":1},{\"Value\":2}]",
4 | "IsSampleData": true,
5 | "IsWritable": false,
6 | "Name": "RadioSample",
7 | "OrderedColumnNames": [
8 | "Value"
9 | ],
10 | "OriginalName": "RadioSample",
11 | "OriginalSchema": "*[Value:n]",
12 | "Schema": "*[Value:n]",
13 | "Type": "StaticDataSourceInfo"
14 | }
15 | ]
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/DataSources/DropDownSample.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "Data": "[{\"Value\":\"1\"},{\"Value\":\"2\"},{\"Value\":\"3\"}]",
4 | "IsSampleData": true,
5 | "IsWritable": false,
6 | "Name": "DropDownSample",
7 | "OrderedColumnNames": [
8 | "Value"
9 | ],
10 | "OriginalName": "DropDownSample",
11 | "OriginalSchema": "*[Value:s]",
12 | "Schema": "*[Value:s]",
13 | "Type": "StaticDataSourceInfo"
14 | }
15 | ]
--------------------------------------------------------------------------------
/docs/accessibility.md:
--------------------------------------------------------------------------------
1 | # Accessibility
2 |
3 | - is not a not a luxury, but the foundation of good user experience.
4 | - needs to be top of mind when developing applications
5 | - almost everyone has situational, temporary or permanent accessibility needs: [Inclusive Design]( https://www.microsoft.com/design/inclusive)
6 | - Requirements to fulfill special access needs are opportunities to to creatively solve challenges instead of thinking in constraints
7 | - Accessibility first fosters a culture that serves many as a result
8 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/ContrastChecker.fx.yaml:
--------------------------------------------------------------------------------
1 | ContrastChecker As screen:
2 |
3 | cmp_MD_ContrastChecker_1 As cmp_MD_ContrastChecker:
4 | backgroundColorHex: =varBackgroundColorHex
5 | Fill: =ColorValue(cmp_MD_ContrastChecker_1.backGroundColor)
6 | Height: =480
7 | primaryColorHex: =varPrimaryColorHex
8 | Y: =42
9 |
10 | cmp_MD_ContrastChecker_2 As cmp_MD_ContrastChecker:
11 | backgroundColorHex: =defaults.elementBackgroundColorHex
12 | Fill: =ColorValue(cmp_MD_ContrastChecker_2.backGroundColor)
13 | Height: =480
14 | Y: =576
15 | ZIndex: =2
16 |
17 |
--------------------------------------------------------------------------------
/materialdesign components/docs/ContrastChecker.md:
--------------------------------------------------------------------------------
1 | # Contrast Checker
2 |
3 | ## Description
4 |
5 | The contrast checker is not for active use in your app, but to make sure, that your color choices match W3.org accessability criteria.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | None
14 |
15 | ## Tips and Tricks
16 |
17 | * see Reference-link for further info
18 | * use this also to check other color combinations you use in your app
19 |
20 | ## Known limitations
21 |
22 | None
23 |
24 | ## Version
25 |
26 | | Version | description |
27 | | --- | --- |
28 | | 1.0.0 | First version |
29 |
30 | ## Reference
31 |
32 | https://www.m365princess.com/blogs/color-contrast-ratio-checker/
33 |
--------------------------------------------------------------------------------
/docs/design-consistency.md:
--------------------------------------------------------------------------------
1 | # Design Consistency
2 |
3 | One of the core principles of User Interface design is consistency. Consistency in UI design is concerned with making sure elements in a user interface are uniform. They’ll look and behave the same way. This helps constantly prove a user’s assumptions about the user interface right, creating a sense of control, familiarity, and reliability.
4 |
5 | ## positive implications
6 |
7 | - less friction
8 | - looks coherent
9 | - works harmoniously
10 | - helps with usability and learnability
11 | - seamless user experience
12 | - increases user satisfaction
13 | - improves DevX
14 | - enhances reusability
15 |
16 | Overall, design consistency help people using software intuitively.
17 |
18 | ## Visual Design consistency
19 |
20 | is achieved by matching
21 |
22 | - colors
23 | - typography
24 | - image styles
25 | - UI elements
26 |
27 | and more.
28 |
--------------------------------------------------------------------------------
/materialdesign components/docs/Toggle.md:
--------------------------------------------------------------------------------
1 | # Toggle
2 |
3 | ## Description
4 |
5 | Toggles allow users to select one or more items from a set. Toggles can turn an option on or off.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | default | `bool` default state of the checkbox |
16 | | onSelect | `behavioural property` formulas you want to execute when selecting the checkbox |
17 | | outsideMargin | `int` in px - margin to all sides of the checkbox, which allows easy spacing with other elements |
18 | | toggleSize | `int` in px - size of the toggle circle |
19 | | lineSize | `int` in px - width of the line |
20 |
21 | ## Tips and Tricks
22 |
23 | * It's a toggle - it toggles things, not more, not less!
24 |
25 | ## Known limitations
26 |
27 | * none
28 |
29 | ## Version
30 |
31 | | Version | description |
32 | | --- | --- |
33 | | 1.0.0 | First version |
34 |
--------------------------------------------------------------------------------
/materialdesign components/docs/ProgressIndicator.md:
--------------------------------------------------------------------------------
1 | # Progress Indicator
2 |
3 | ## Description
4 |
5 | The Progress indicator expresses an unspecified wait time.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | transitionStart| `bool` put your Visible-variable or `Self.Visible` in here to start the animation |
16 |
17 | ## Tips and Tricks
18 |
19 | * if you have functions, that take a few seconds to process use this indicator to show the user something is going on in the background
20 | * at the start of your code, set the indicator to visible, in the end set it to invisible
21 | * place the indicator right beneath your top bar
22 |
23 | ## Known limitations
24 |
25 | None
26 |
27 | ## Version
28 |
29 | | Version | description |
30 | | --- | --- |
31 | | 1.0.0 | First version |
32 |
33 | ## Reference
34 |
35 | https://m2.material.io/components/progress-indicators
36 |
--------------------------------------------------------------------------------
/materialdesign components/docs/Slider.md:
--------------------------------------------------------------------------------
1 | # Slider
2 |
3 | ## Description
4 |
5 | Sliders allow users to make selections from a range of values.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | valueDefault | `int` default position of the slider |
16 | | valueMin | `int` minimum selectable value |
17 | | valueMax | `int` maximum selectable value |
18 | | toggleSize | `int` in px - size of the toggle circle |
19 | | lineSize | `int` in px - strength of the line |
20 | | outsideMargin | `int` in px - margin to all sides of the button, which allows easy spacing with other elements (don't use 0, otherwise ) |
21 | | showInputLabel | `bool` show additional label to input text via keyboard |
22 | | showLabel | `bool` display current value on a label on top of the toggle |
23 |
24 | ## Known limitations
25 |
26 | * none
27 |
28 | ## Version
29 |
30 | | Version | description |
31 | | --- | --- |
32 | | 1.0.0 | First version |
33 |
34 | ## Reference
35 |
36 | https://m2.material.io/components/sliders
37 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Microsoft 365 Community
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/materialdesign components/docs/SideSheet.md:
--------------------------------------------------------------------------------
1 | # Side sheet
2 |
3 | ## Description
4 |
5 | Side sheets are surfaces containing supplementary content that are anchored to the right edge of the screen.
6 | You have to provide the content, buttons/text/input elements are not part of the component.
7 |
8 | ## Demo
9 |
10 | 
11 |
12 | ## Custom properties
13 |
14 | | property | description |
15 | | --- | --- |
16 | | onClose | `behavioural property` formulas you want to execute when clicking on the close icon |
17 | | iconSize | `int` in px - size of the close icon |
18 | | title | `string` title on top |
19 | | adjustPaddingLeft | `int` in px - use to adjust, if Icon & Text are off-center. You can use negative numbers to move everything left |
20 |
21 | ## Tips and Tricks
22 |
23 | * add your own content underneath the title
24 | * pack component & content into a container
25 |
26 | ## Known limitations
27 |
28 | * none
29 |
30 | ## Version
31 |
32 | | Version | description |
33 | | --- | --- |
34 | | 1.0.0 | First version |
35 |
36 | ## Reference
37 |
38 | https://m2.material.io/components/sheets-side
39 |
--------------------------------------------------------------------------------
/materialdesign components/docs/BottomNavigation.md:
--------------------------------------------------------------------------------
1 | # Bottom Navigation
2 |
3 | ## Description
4 |
5 | Navigate between screens on mobile devices.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | items | A `table` with the fields `id` (int), `svgIcon` (svg-Code as string), `title` (string) and `screen` (if you want to navigate) |
16 | | iconSize | `int` in px - size of the svg-Icons |
17 | | navigate | `bool` to control if a click on the menu items navigate to the specified screen |
18 | | onSelect | Everything else that should happen on the click of the menu item, best used with `Switch(ThisItem.id, 1, FirstButtonOnSelectAction, 2, ...)` |
19 |
20 | ## Tips and Tricks
21 |
22 | * switch between Navigation Drawer and Bottom Navigation on size breakpoints, when building responsive apps
23 | * don't use more than five items
24 |
25 | ## Known limitations
26 |
27 | * none
28 |
29 | ## Version
30 |
31 | | Version | description |
32 | | --- | --- |
33 | | 1.0.0 | First version |
34 |
35 | ## Reference
36 |
37 | https://m2.material.io/components/bottom-navigation
38 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/DataSources/CustomGallerySample.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "Data": "[{\"SampleHeading\":\"Lorem ipsum 1\",\"SampleImage\":\"/ctrllib/image/images/SampleImage.svg\",\"SampleText\":\"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\"},{\"SampleHeading\":\"Lorem ipsum 2\",\"SampleImage\":\"/ctrllib/image/images/SampleImage.svg\",\"SampleText\":\"Suspendisse enim metus, tincidunt quis lobortis a, fringilla dignissim neque.\"},{\"SampleHeading\":\"Lorem ipsum 3\",\"SampleImage\":\"/ctrllib/image/images/SampleImage.svg\",\"SampleText\":\"Ut pharetra a dolor ac vehicula.\"},{\"SampleHeading\":\"Lorem ipsum 4\",\"SampleImage\":\"/ctrllib/image/images/SampleImage.svg\",\"SampleText\":\"Vestibulum dui felis, fringilla nec mi sed, tristique dictum nisi.\"}]",
4 | "IsSampleData": true,
5 | "IsWritable": false,
6 | "Name": "CustomGallerySample",
7 | "OrderedColumnNames": [
8 | "SampleImage",
9 | "SampleHeading",
10 | "SampleText"
11 | ],
12 | "OriginalName": "CustomGallerySample",
13 | "OriginalSchema": "*[SampleHeading:s, SampleImage:i, SampleText:s]",
14 | "Schema": "*[SampleHeading:s, SampleImage:i, SampleText:s]",
15 | "Type": "StaticDataSourceInfo"
16 | }
17 | ]
--------------------------------------------------------------------------------
/materialdesign components/docs/Checkbox.md:
--------------------------------------------------------------------------------
1 | # Checkbox
2 |
3 | ## Description
4 |
5 | Checkboxes allow users to select one or more items from a set. Checkboxes can turn an option on or off.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | default | `bool` default state of the checkbox |
16 | | onSelect | `behavioural property` formulas you want to execute when selecting the checkbox |
17 | | outsideMargin | `int` in px - margin to all sides of the checkbox, which allows easy spacing with other elements |
18 | | svgIconFull | `string` icon in checked state - provide svg-code without fill, will be in primaryColor when checked |
19 | | svgIconEmpty | `string` icon in unchecked state - provide svg-code without fill, will be in disabledColor when unchecked |
20 |
21 | ## Tips and Tricks
22 |
23 | * the regular checkbox also looks pretty nice with the template
24 | * also use this for other icons (see examples above) - many icons have an outline version
25 |
26 | ## Known limitations
27 |
28 | * default-value doesn't work in demo app, but works in new projects 🤷
29 |
30 | ## Version
31 |
32 | | Version | description |
33 | | --- | --- |
34 | | 1.0.0 | First version |
35 |
36 | ## Reference
37 |
38 | https://m2.material.io/components/checkboxes
39 |
--------------------------------------------------------------------------------
/materialdesign components/docs/Timepicker.md:
--------------------------------------------------------------------------------
1 | # Timepicker
2 |
3 | ## Description
4 |
5 | Time pickers allow users to enter a specific time value. They can be used for a wide range of scenarios.
6 |
7 | Common use cases include:
8 |
9 | * Setting an alarm
10 | * Scheduling a meeting
11 | * Mobile time pickers are displayed in dialogs and can be used to select hours, minutes, and a period of time.
12 |
13 | ## Demo
14 |
15 | 
16 |
17 | ## Custom properties
18 |
19 | | property | description |
20 | | --- | --- |
21 | | header | `string` title above the timepicker |
22 | | action1/2text | `string` available actions, Material Design puts these in CAPITAL LETTERS, button width auto adjusts |
23 | | action1/2onSelect | `behavioural Property` - onSelect actions of the 2 buttons |
24 | | format | `int` enter `12` for AM/PM or `24` for a 24h input format |
25 | | defaultTime | `time` initial time displayed on the picker |
26 | | boxShadow | `bool` displays a subtle boxShadow around the picker |
27 | | selectedTime (output) | `time` outputs the selected time |
28 |
29 | ## Tips and Tricks
30 |
31 | * primarily for mobile use, but also helps on desktop
32 |
33 | ## Known limitations
34 |
35 | * none
36 |
37 | ## Version
38 |
39 | | Version | description |
40 | | --- | --- |
41 | | 1.0.0 | First version |
42 |
43 | ## Reference
44 |
45 | https://m2.material.io/components/time-pickers
46 |
--------------------------------------------------------------------------------
/materialdesign components/docs/GenericInputFrame.md:
--------------------------------------------------------------------------------
1 | # Generic Input Frame
2 |
3 | ## Description
4 |
5 | This is an element to create your own forms. This has to be paired with other input elements, that will sit on top of it.
6 | The input frame matches the outlined text input.
7 |
8 | ## Demo
9 |
10 | 
11 |
12 | ## Custom properties
13 |
14 | | property | description |
15 | | --- | --- |
16 | | labelText | `string` text in the top left corner of the outline - displayed in primaryColor |
17 | | helperText | `string` text underneath the outline - displayed in disabledColor |
18 | | errorText | `string` text displayed in case of isError - displayed in errorColor |
19 | | outsideMargin | `int` in px - margin to all sides of the button, which allows easy spacing with other elements (don't use 0, otherwise ) |
20 | | borderRadius | `int` in px - border radius of the outline |
21 | | isError | `bool` specify error condition in here |
22 | | showErrors | `bool` several colors turn to the specified errorColor, if isError AND showErrors are true |
23 |
24 | ## Tips and Tricks
25 |
26 | * use the isError property to store your error-condition and reuse in other parts of your app if necessary
27 | * set showErrors initially to `false` and only start showing, after the first blocked submit, so nobody is greeted by red fields
28 | * match the error-color to your input control (see example)
29 |
30 | ## Known limitations
31 |
32 | * none
33 |
34 | ## Version
35 |
36 | | Version | description |
37 | | --- | --- |
38 | | 1.0.0 | First version |
39 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/EditorState/App.editorstate.json:
--------------------------------------------------------------------------------
1 | {
2 | "ControlStates": {
3 | "App": {
4 | "AllowAccessToGlobals": true,
5 | "ControlPropertyState": [
6 | "MinScreenHeight",
7 | "MinScreenWidth",
8 | "ConfirmExit",
9 | "SizeBreakpoints",
10 | "BackEnabled"
11 | ],
12 | "IsAutoGenerated": false,
13 | "IsComponentDefinition": false,
14 | "IsDataControl": true,
15 | "IsFromScreenLayout": false,
16 | "IsGroupControl": false,
17 | "IsLocked": false,
18 | "LayoutName": "",
19 | "MetaDataIDKey": "",
20 | "Name": "App",
21 | "ParentIndex": 0,
22 | "PersistMetaDataIDKey": false,
23 | "Properties": [
24 | {
25 | "Category": "Data",
26 | "PropertyName": "ConfirmExit",
27 | "RuleProviderType": "Unknown"
28 | },
29 | {
30 | "Category": "Data",
31 | "PropertyName": "BackEnabled",
32 | "RuleProviderType": "Unknown"
33 | },
34 | {
35 | "Category": "Design",
36 | "PropertyName": "MinScreenHeight",
37 | "RuleProviderType": "Unknown"
38 | },
39 | {
40 | "Category": "Design",
41 | "PropertyName": "MinScreenWidth",
42 | "RuleProviderType": "Unknown"
43 | },
44 | {
45 | "Category": "ConstantData",
46 | "PropertyName": "SizeBreakpoints",
47 | "RuleProviderType": "Unknown"
48 | }
49 | ],
50 | "StyleName": "",
51 | "Type": "ControlInfo"
52 | }
53 | },
54 | "TopParentName": "App"
55 | }
--------------------------------------------------------------------------------
/materialdesign components/docs/AppBarTop.md:
--------------------------------------------------------------------------------
1 | # App bar top
2 |
3 | ## Description
4 |
5 | The top app bar provides content and actions related to the current screen. It’s used for branding, screen titles, navigation, and actions.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | titleText | `string` displayed text |
16 | | svgIcon1/2/3/4 | `string` but in svg-code from `` or `null` - use every svg, without setting the fill properties, it will automatically add color, if you leave an icon blank it will be invisible and the other icons adjust their position |
17 | | onSelectIcon1/2/3/4 | `behavioural property` formulas you want to execute on the icons (left to right) |
18 | | tooltipIcon1/2/3/4 | `string` tooltip of the icons |
19 | | iconSize | `int` in px - size of all the icons |
20 |
21 | ## Tips and Tricks
22 |
23 | * use the included icons from the template
24 | * use icon1 for a menu or back button
25 | * you can stack 2 bars on top of eachother to provide additional actions in a changed context (see gif)
26 | * don't use the top bar at all if there is no benefit at all from using it 😉
27 |
28 | ## Known limitations
29 |
30 | * Because there is a box shadow, you have to overlap this 10 px to the next control to the bottom.
31 | * Default-width is set to `App.DesignWidth`. Set to `Parent.Width` for repsonsive apps can't set this as a default, because this will cause "phantom errors" in the editor
32 |
33 | ## Version
34 |
35 | | Version | description |
36 | | --- | --- |
37 | | 1.0.0 | First version |
38 |
39 | ## Reference
40 |
41 | https://m2.material.io/components/app-bars-top
42 |
--------------------------------------------------------------------------------
/materialdesign components/docs/Dialog.md:
--------------------------------------------------------------------------------
1 | # Dialog
2 |
3 | ## Description
4 |
5 | We've all spent too much time building confirmation dialogs in Power Apps, so here is the ultimate component for that purpose. Following Material Design guidelines this always presents 2 options. The dialog centers itself in both directions and automatically adjusts the height to its content.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | header | `string` optional, if not used the component adjusts in height |
16 | | text | `string` main text of the dialog |
17 | | action1/2text | `string` available actions, Material Design puts these in CAPITAL LETTERS, button width auto adjusts |
18 | | action1/2onSelect | `behavioural Property` onSelect actions of the 2 buttons |
19 | | dialogWidth | `int` in px - width of the dialog, height auto adjusts |
20 | | boxShadow | `bool` places a subtle box shadow around the dialog |
21 | | focusedButton | `int` which button should be focused, when the dialog is set to visible 1 / 2 or 0 for no button |
22 |
23 |
24 | ## Tips and Tricks
25 |
26 | * put the visible property of the component to a local variable
27 | * don't forget to put the visibility to false on both buttons
28 | * use the dialog only when immediate action has to be taken by the user - other options are the snackbar and the banner, see the Material Design reference for more guidance how to use each of them
29 |
30 | ## Known limitations
31 |
32 | none
33 |
34 | ## Version
35 |
36 | | Version | description |
37 | | --- | --- |
38 | | 1.0.0 | First version |
39 |
40 | ## Reference
41 |
42 | https://m2.material.io/components/dialogs
43 |
--------------------------------------------------------------------------------
/materialdesign components/docs/NavigationDrawer.md:
--------------------------------------------------------------------------------
1 | # Navigation Drawer
2 |
3 | ## Description
4 |
5 | An expandable sidebar with your menu items, that can be repeated on every screen. If retracted only the icons show.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | items | A `table` with the fields `id` (int), `svgIcon` (svg-Code as string), `title` (string) and `screen` (if you want to navigate) |
16 | | expandSidebar | A `bool` that controls if you want to expand (show icon and text) or retract (show only icon) the drawer |
17 | | topMargin | `int` for the space you want before the menu items start. Can be used creatively, to place a container in the expanded state (see example)
18 | | navigate | `bool` to control if a click on the menu items navigate to the specified screen |
19 | | onSelect | Everything else that should happen on the click of the menu item, best used with `Switch(ThisItem.id, 1, FirstButtonOnSelectAction, 2, ...)` |
20 |
21 | ## Tips and Tricks
22 |
23 | * The top bar in the example with the button to expand/retract is not part of the component
24 | * if you want to use the `topMargin` only in expanded mode, look at the demo app how it is set up, don't hesitate to directly add it to your version of the component
25 | * you can also add a section with options beneath the navigation items (see the reference link for examples)
26 | * get creative!
27 |
28 | ## Known limitations
29 |
30 | None
31 |
32 | ## Version
33 |
34 | | Version | description |
35 | | --- | --- |
36 | | 1.0.0 | First version |
37 |
38 | ## Reference
39 |
40 | https://m2.material.io/components/navigation-drawer
41 |
--------------------------------------------------------------------------------
/materialdesign components/docs/Snackbar.md:
--------------------------------------------------------------------------------
1 | # Snackbar
2 |
3 | ## Description
4 |
5 | Snackbars inform users of a process that an app has performed or will perform. They appear temporarily, towards the bottom of the screen. They shouldn’t interrupt the user experience, and they don’t require user input to disappear.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | text | `string` main text of the snackbar |
16 | | twoButtons | `bool` true will show both buttons |
17 | | actionBeneath | `bool` true will show the buttons beneath the text (better for mobile apps) |
18 | | actionText | `string` available actions, Material Design puts these in CAPITAL LETTERS, button width auto adjusts |
19 | | actionOnSelect | `behavioural Property` - onSelect actions of the button |
20 | | onHide | `behavioural Property` - is triggered, as soon as the banner hides (optional) |
21 | | transitionAnimation| `bool` true will show an animation (putting this off can also be used for debug reasons) |
22 | | transitionTime| `int` duration of transition in milliseconds |
23 | | duration| `int` duration of the snackbar in milliseconds |
24 | | timerStart| `bool` put your Visible-variable or `Self.Visible` in here to start the animation |
25 | | textPaddingLeft | `int` in px - use to adjust the position of icon & text |
26 |
27 | ## Tips and Tricks
28 |
29 | * this is the only component, where the colors are inverted - the standards should work out
30 | * use this to undo actions by the user (e.g. delete something)
31 | * only one action is allowed
32 | * set visibility to false on `onHide` to prevent it overlapping anything
33 |
34 | ## Known limitations
35 |
36 | * none
37 |
38 | ## Version
39 |
40 | | Version | description |
41 | | --- | --- |
42 | | 1.0.0 | First version |
43 |
44 | ## Reference
45 |
46 | https://m2.material.io/components/snackbars
47 |
--------------------------------------------------------------------------------
/materialdesign components/intro.md:
--------------------------------------------------------------------------------
1 | # PowerApps - Material Design
2 |
3 | UI Toolkit for Microsoft Power Apps that aims to represent the look & feel of [Google Material Design](https://material.io/components).
4 |
5 | ## Components
6 |
7 | - [App bar](docs/AppBarTop.md)
8 | - [Banner](docs/Banner.md)
9 | - [Bottom Navigation](docs/BottomNavigation.md)
10 | - [Button](docs/Button.md)
11 | - [Checkbox](docs/Checkbox.md)
12 | - [Contrast Checker](docs/ContrastChecker.md)
13 | - [Dialog](docs/Dialog.md)
14 | - [Generic Input Frame](docs/GenericInputFrame.md)
15 | - [Navigation Drawer](docs/NavigationDrawer.md)
16 | - [Progress Indicator](docs/ProgressIndicator.md)
17 | - [Side Sheet](docs/SideSheet.md)
18 | - [Slider](docs/Slider.md)
19 | - [Snackbar](docs/Snackbar.md)
20 | - [Text Input](docs/TextInput.md)
21 | - [Time Picker](docs/Timepicker.md)
22 | - [Toggle](docs/Toggle.md)
23 |
24 | ## Setup
25 |
26 | Video explaining the setup process is following soon!
27 |
28 | 1. Import [Solution file](solution/MaterialDesignComponentLibrary_1_0_0_8.zip) to all environments you want to develop canvas apps using the components
29 | 2. Download [template file](solution/MD_Template_v1_1.msapp)
30 | 3. Read documentation of the [template](docs/Template.md)
31 | 4. Open msapp-template-file (create -> Dataverse -> open -> select file)
32 | 5. Select on Plus sign (Insert).
33 | 6. At the bottom of the screen , find option **Get more components**
34 | 7. Choose **MaterialDesign component library**. (This gets added from solution import done in step 1)
35 | 8. Material Design controls should appear under **Library components** (Under insert button)
36 | 9. Change the **OnStart**-properties to match your company branding
37 | 10. Build stunning apps in no time!
38 |
39 | ## Reference app
40 |
41 | The solution includes a demo app that features use cases and ideas for all components. Try it out!
42 | Don't start from the demo app, otherwise you probably won't be able to update components in the future.
43 |
44 | ## Update library & apps
45 |
46 | Import the newest solution to your environment. When editing your canvas apps a prompt should show up to review the update process.
47 |
--------------------------------------------------------------------------------
/materialdesign components/docs/Banner.md:
--------------------------------------------------------------------------------
1 | # Banner
2 |
3 | ## Description
4 |
5 | A banner displays an important, succinct message, and provides actions for users to address (or dismiss the banner). It requires a user action to be dismissed.
6 |
7 | ## Demo
8 |
9 | 
10 |
11 | ## Custom properties
12 |
13 | | property | description |
14 | | --- | --- |
15 | | text | `string` main text of the dialog |
16 | | twoButtons | `bool` true will show both buttons |
17 | | actionBeneath | `bool` true will show the buttons beneath the text (better for mobile apps) |
18 | | action1/2text | `string` available actions, Material Desing puts these in CAPITAL LETTERS, button width auto adjusts |
19 | | action1/2onSelect | `behavioural Property` - onSelect actions of the 2 buttons |
20 | | onHide | `behavioural Property` - is triggered, as soon as the banner hides (optional) |
21 | | transitionAnimation| `bool` true will show an animation (putting this off can also be used for debug reasons) |
22 | | transitionTime| `int` duration of transition in milliseconds |
23 | | timerStart| `bool` put your Visible-variable or `Self.Visible` in here to start the animation |
24 | | svgIcon | `string` but in svg-code from `` or `null` - use every svg, without setting the fill properties, it will automatically add color, if you put nothing in there it will automatically center the text |
25 | | textPaddingLeft | `int` in px - use to adjust the position of icon & text |
26 | | yPostion (output property) | `int` this changes during transition and allows you to move the content down during transition |
27 |
28 | ## Tips and Tricks
29 |
30 | * use the included icons from the template
31 | * don't stack banners
32 | * put the content of the page in a container and use the `yPostion`-property to get a transition effect
33 | * don't forget to reset the variable for the `Visible`-property on the `action1/2onSelect`
34 |
35 | ## Known limitations
36 |
37 | none
38 |
39 | ## Version
40 |
41 | | Version | description |
42 | | --- | --- |
43 | | 1.0.0 | First version |
44 |
45 | ## Reference
46 |
47 | https://m2.material.io/components/banners
48 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/EditorState/TextInput.editorstate.json:
--------------------------------------------------------------------------------
1 | {
2 | "ControlStates": {
3 | "TextInput": {
4 | "AllowAccessToGlobals": true,
5 | "ControlPropertyState": [
6 | "Fill",
7 | "ImagePosition",
8 | "Height",
9 | "Width",
10 | "Size",
11 | "Orientation",
12 | "LoadingSpinner",
13 | "LoadingSpinnerColor"
14 | ],
15 | "IsAutoGenerated": false,
16 | "IsComponentDefinition": false,
17 | "IsDataControl": false,
18 | "IsFromScreenLayout": false,
19 | "IsGroupControl": false,
20 | "IsLocked": false,
21 | "LayoutName": "",
22 | "MetaDataIDKey": "",
23 | "Name": "TextInput",
24 | "ParentIndex": 0,
25 | "PersistMetaDataIDKey": false,
26 | "Properties": [
27 | {
28 | "Category": "Design",
29 | "PropertyName": "Width",
30 | "RuleProviderType": "Unknown"
31 | },
32 | {
33 | "Category": "Design",
34 | "PropertyName": "Height",
35 | "RuleProviderType": "Unknown"
36 | },
37 | {
38 | "Category": "Design",
39 | "PropertyName": "ImagePosition",
40 | "RuleProviderType": "Unknown"
41 | },
42 | {
43 | "Category": "Design",
44 | "PropertyName": "Fill",
45 | "RuleProviderType": "Unknown"
46 | },
47 | {
48 | "Category": "Design",
49 | "PropertyName": "LoadingSpinner",
50 | "RuleProviderType": "Unknown"
51 | },
52 | {
53 | "Category": "Design",
54 | "PropertyName": "LoadingSpinnerColor",
55 | "RuleProviderType": "Unknown"
56 | },
57 | {
58 | "Category": "Design",
59 | "PropertyName": "Size",
60 | "RuleProviderType": "Unknown"
61 | },
62 | {
63 | "Category": "Design",
64 | "PropertyName": "Orientation",
65 | "RuleProviderType": "Unknown"
66 | }
67 | ],
68 | "StyleName": "defaultScreenStyle",
69 | "Type": "ControlInfo"
70 | }
71 | },
72 | "TopParentName": "TextInput"
73 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Power Apps Design Toolkit
2 |
3 | > The Power Apps Design Toolkit is a curated repository of Power Apps UI Guidance and Components that you can plug and play into your apps to transform your design.
4 |
5 | Our objective is to make it easier for makers to build design-consistent, performant and accessible Power Apps. To help you achieve this, you'll find
6 |
7 | - Curated high-quality component-libraries providing you with a complete set of UI elements ready to be used in your own canvas apps that follow a consistent design pattern
8 | - Guidance on industry standard design practices to advance your own development skills
9 | - See the art of the possible and get inspiration from different UI's
10 |
11 | ## Why does it matter?
12 |
13 | > Low Code should not mean low standards!
14 |
15 | We collected information on our main design goals:
16 |
17 | - [Accessibility](docs/accessibility.md)
18 | - [Design consistency](docs/design-consistency.md)
19 |
20 | ## Overview of component libraries
21 |
22 | - [Material Design component library](materialdesign%20components/../materialdesign%20components/intro.md) - built by [Luise Freese](https://twitter.com/LuiseFreese) | @LuiseFreese and [Robin Rosengrün](https://twitter.com/power_r2) | @power_r2
23 | - [AppBar](materialdesign%20components/docs/AppBarTop.md)
24 | - [Banner](materialdesign%20components/docs/Banner.md)
25 | - [Bottom Navigation](materialdesign%20components/docs/BottomNavigation.md)
26 | - [Button](materialdesign%20components/docs/Button.md)
27 | - [Checkbox](materialdesign%20components/docs/Checkbox.md)
28 | - [Contrast Checker](materialdesign%20components/docs/ContrastChecker.md)
29 | - [Dialog](materialdesign%20components/docs/Dialog.md)
30 | - [Generic Input Frame](materialdesign%20components/docs/GenericInputFrame.md)
31 | - [Navigation Drawer](materialdesign%20components/docs/NavigationDrawer.md)
32 | - [Progress Indicator](materialdesign%20components/docs/ProgressIndicator.md)
33 | - [Side Sheet](materialdesign%20components/docs/SideSheet.md)
34 | - [Slider](materialdesign%20components/docs/Slider.md)
35 | - [Snackbar](materialdesign%20components/docs/Snackbar.md)
36 | - [TextInput](materialdesign%20components/docs/TextInput.md)
37 | - [Toggle](materialdesign%20components/docs/Toggle.md)
38 |
39 | - More component libraries to come!
40 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/Components/cmp_MD_Gallery.json:
--------------------------------------------------------------------------------
1 | {
2 | "ComponentAllowCustomization": true,
3 | "ComponentChangedSinceFileImport": true,
4 | "ComponentManifest": {
5 | "AllowAccessToGlobals": false,
6 | "AllowCustomization": true,
7 | "Description": "",
8 | "Name": "cmp_MD_Gallery",
9 | "TemplateGuid": "1c509e00ff0f495fb39806fd53d653e4"
10 | },
11 | "ComponentType": "CanvasComponent",
12 | "CustomGroupControlTemplateName": "",
13 | "CustomProperties": [
14 | {
15 | "Category": 0,
16 | "DisplayName": "galleryContent",
17 | "Hidden": false,
18 | "Name": "galleryContent",
19 | "PropertyDataTypeKey": "Table",
20 | "Tooltip": "A custom property",
21 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Table\",\"EnumString\":\"\",\"Type\":[{\"Name\":\"id\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]},{\"Name\":\"image\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]},{\"Name\":\"width\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}]}}"
22 | },
23 | {
24 | "Category": 0,
25 | "DisplayName": "singleImageWidth",
26 | "Hidden": false,
27 | "Name": "singleImageWidth",
28 | "PropertyDataTypeKey": "Number",
29 | "Tooltip": "A custom property",
30 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
31 | },
32 | {
33 | "Category": 0,
34 | "DisplayName": "imagePadding",
35 | "Hidden": false,
36 | "Name": "imagePadding",
37 | "PropertyDataTypeKey": "Number",
38 | "Tooltip": "A custom property",
39 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
40 | }
41 | ],
42 | "FirstParty": true,
43 | "Id": "http://microsoft.com/appmagic/Component",
44 | "IsComponentLocked": false,
45 | "IsComponentTemplate": true,
46 | "IsCustomGroupControlTemplate": false,
47 | "IsPcfControl": false,
48 | "IsPremiumPcfControl": false,
49 | "IsWidgetTemplate": false,
50 | "LastModifiedTimestamp": "638006856266401714",
51 | "Name": "1c509e00ff0f495fb39806fd53d653e4",
52 | "OverridableProperties": {},
53 | "TemplateOriginalName": "c35d1e44b38a40df8cba786355cd3d10",
54 | "Version": "637971118065816948"
55 | }
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/SVG-Icons.fx.yaml:
--------------------------------------------------------------------------------
1 | "'SVG-Icons' As screen":
2 |
3 | Gallery3 As gallery.galleryVertical:
4 | Height: =653
5 | Items: =Filter(MaterialDesignIcons, TextInput1.Text in name Or IsBlank(TextInput1.Text))
6 | Layout: =Layout.Vertical
7 | TemplateFill: =If(ThisItem.IsSelected, ColorValue(defaults.primaryColorTransparentHex))
8 | TemplateSize: =90
9 | Y: =111
10 | ZIndex: =2
11 |
12 | Label5 As label:
13 | Color: =If(ThisItem.IsSelected, defaults.primaryColor, RGBA(0, 0, 0, 1))
14 | Height: =68
15 | OnSelect: =Select(Parent)
16 | Size: =21
17 | Text: =ThisItem.name
18 | Width: =476
19 | Y: =9
20 | ZIndex: =1
21 |
22 | Image4_2 As image:
23 | BorderColor: =Transparent
24 | DisabledBorderColor: =Transparent
25 | DisabledFill: =Transparent
26 | Height: =90
27 | Image: |-
28 | ="data:image/svg+xml;utf8, " & EncodeUrl(
29 | //Set Map svg text
30 | If(ThisItem.IsSelected, Substitute(ThisItem.svgPath, "
]]>
4 |
6 |
7 |
8 |
9 |
10 |
11 | = 0) && (viewState.displayMode() !== AppMagic.Constants.DisplayMode.Edit),
26 | 'aria-hidden': properties.TabIndex() < 0 && !properties.AccessibleLabel()
27 | }">
28 |
40 |
41 |
45 |
46 |
47 |
54 |
55 |
56 |
57 | ]]>
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/Components/cmp_MD_Dropdown.json:
--------------------------------------------------------------------------------
1 | {
2 | "ComponentAllowCustomization": true,
3 | "ComponentChangedSinceFileImport": true,
4 | "ComponentManifest": {
5 | "AllowAccessToGlobals": false,
6 | "AllowCustomization": true,
7 | "Description": "",
8 | "Name": "cmp_MD_Dropdown",
9 | "TemplateGuid": "c4118579fc384920ba1ed2754baf0afe"
10 | },
11 | "ComponentType": "CanvasComponent",
12 | "CustomGroupControlTemplateName": "",
13 | "CustomProperties": [
14 | {
15 | "Category": 0,
16 | "DisplayName": "outLined",
17 | "Hidden": false,
18 | "Name": "outLined",
19 | "PropertyDataTypeKey": "Boolean",
20 | "Tooltip": "A custom property",
21 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"_MinPrimitive\",\"EnumString\":\"\",\"Type\":[]}}"
22 | },
23 | {
24 | "Category": 0,
25 | "DisplayName": "checkAll",
26 | "Hidden": false,
27 | "Name": "checkAll",
28 | "PropertyDataTypeKey": "Boolean",
29 | "Tooltip": "A custom property",
30 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"_MinPrimitive\",\"EnumString\":\"\",\"Type\":[]}}"
31 | },
32 | {
33 | "Category": 0,
34 | "DisplayName": "multiselect",
35 | "Hidden": false,
36 | "Name": "multiselect",
37 | "PropertyDataTypeKey": "Boolean",
38 | "Tooltip": "A custom property",
39 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"_MinPrimitive\",\"EnumString\":\"\",\"Type\":[]}}"
40 | },
41 | {
42 | "Category": 0,
43 | "DisplayName": "iconSize",
44 | "Hidden": false,
45 | "Name": "iconSize",
46 | "PropertyDataTypeKey": "Number",
47 | "Tooltip": "A custom property",
48 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
49 | },
50 | {
51 | "Category": 0,
52 | "DisplayName": "labelText",
53 | "Hidden": false,
54 | "Name": "labelText",
55 | "PropertyDataTypeKey": "String",
56 | "Tooltip": "A custom property",
57 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}}"
58 | },
59 | {
60 | "Category": 0,
61 | "DisplayName": "selectedItem",
62 | "Hidden": true,
63 | "Name": "selectedItem",
64 | "PropertyDataTypeKey": "String",
65 | "Tooltip": "A custom property",
66 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}}"
67 | },
68 | {
69 | "Category": 0,
70 | "DisplayName": "borderRadius",
71 | "Hidden": false,
72 | "Name": "borderRadius",
73 | "PropertyDataTypeKey": "Number",
74 | "Tooltip": "A custom property",
75 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
76 | },
77 | {
78 | "Category": 0,
79 | "DisplayName": "labelFont",
80 | "Hidden": false,
81 | "Name": "labelFont",
82 | "PropertyDataTypeKey": "String",
83 | "Tooltip": "A custom property",
84 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}}"
85 | },
86 | {
87 | "Category": 0,
88 | "DisplayName": "outsideMargin",
89 | "Hidden": false,
90 | "Name": "outsideMargin",
91 | "PropertyDataTypeKey": "Number",
92 | "Tooltip": "A custom property",
93 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
94 | },
95 | {
96 | "Category": 0,
97 | "DisplayName": "fontSizeLabel",
98 | "Hidden": false,
99 | "Name": "fontSizeLabel",
100 | "PropertyDataTypeKey": "Number",
101 | "Tooltip": "A custom property",
102 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
103 | },
104 | {
105 | "Category": 0,
106 | "DisplayName": "fontWeightLabel",
107 | "Hidden": false,
108 | "Name": "fontWeightLabel",
109 | "PropertyDataTypeKey": "String",
110 | "Tooltip": "A custom property",
111 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}}"
112 | },
113 | {
114 | "Category": 0,
115 | "DisplayName": "primaryColor",
116 | "Hidden": false,
117 | "Name": "primaryColor",
118 | "PropertyDataTypeKey": "Color",
119 | "Tooltip": "A custom property",
120 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Color\",\"EnumString\":\"\",\"Type\":[]}}"
121 | },
122 | {
123 | "Category": 0,
124 | "DisplayName": "secondaryColor",
125 | "Hidden": false,
126 | "Name": "secondaryColor",
127 | "PropertyDataTypeKey": "Color",
128 | "Tooltip": "A custom property",
129 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Color\",\"EnumString\":\"\",\"Type\":[]}}"
130 | },
131 | {
132 | "Category": 0,
133 | "DisplayName": "textColor",
134 | "Hidden": false,
135 | "Name": "textColor",
136 | "PropertyDataTypeKey": "Color",
137 | "Tooltip": "A custom property",
138 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Color\",\"EnumString\":\"\",\"Type\":[]}}"
139 | },
140 | {
141 | "Category": 0,
142 | "DisplayName": "fontSizeInput",
143 | "Hidden": false,
144 | "Name": "fontSizeInput",
145 | "PropertyDataTypeKey": "Number",
146 | "Tooltip": "A custom property",
147 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]}}"
148 | },
149 | {
150 | "Category": 0,
151 | "DisplayName": "primaryColorText",
152 | "Hidden": false,
153 | "Name": "primaryColorText",
154 | "PropertyDataTypeKey": "String",
155 | "Tooltip": "A custom property",
156 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}}"
157 | },
158 | {
159 | "Category": 0,
160 | "DisplayName": "secondaryColorText",
161 | "Hidden": false,
162 | "Name": "secondaryColorText",
163 | "PropertyDataTypeKey": "String",
164 | "Tooltip": "A custom property",
165 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}}"
166 | },
167 | {
168 | "Category": 0,
169 | "DisplayName": "dropdownContent",
170 | "Hidden": false,
171 | "Name": "dropdownContent",
172 | "PropertyDataTypeKey": "Table",
173 | "Tooltip": "A custom property",
174 | "Type": "{\"Version\":\"1.326\",\"Type\":{\"Name\":\"Root\",\"Kind\":\"Table\",\"EnumString\":\"\",\"Type\":[{\"Name\":\"id\",\"Kind\":\"Number\",\"EnumString\":\"\",\"Type\":[]},{\"Name\":\"item\",\"Kind\":\"String\",\"EnumString\":\"\",\"Type\":[]}]}}"
175 | }
176 | ],
177 | "FirstParty": true,
178 | "Id": "http://microsoft.com/appmagic/Component",
179 | "IsComponentLocked": false,
180 | "IsComponentTemplate": true,
181 | "IsCustomGroupControlTemplate": false,
182 | "IsPcfControl": false,
183 | "IsPremiumPcfControl": false,
184 | "IsWidgetTemplate": false,
185 | "LastModifiedTimestamp": "638006856266544571",
186 | "Name": "c4118579fc384920ba1ed2754baf0afe",
187 | "OverridableProperties": {},
188 | "TemplateOriginalName": "20a0c2e9783746af9945aa66fbadb0ee",
189 | "Version": "637975426593518246"
190 | }
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/EditorState/ContrastChecker.editorstate.json:
--------------------------------------------------------------------------------
1 | {
2 | "ControlStates": {
3 | "cmp_MD_ContrastChecker_1": {
4 | "AllowAccessToGlobals": true,
5 | "ControlPropertyState": [
6 | "Fill",
7 | "Height",
8 | "Width",
9 | "X",
10 | "Y",
11 | "ZIndex",
12 | "primaryColorHex",
13 | "backgroundColorHex",
14 | "textColor",
15 | "font",
16 | "fontSize"
17 | ],
18 | "HasDynamicProperties": false,
19 | "IsAutoGenerated": false,
20 | "IsComponentDefinition": false,
21 | "IsDataControl": false,
22 | "IsFromScreenLayout": false,
23 | "IsGroupControl": false,
24 | "IsLocked": false,
25 | "LayoutName": "",
26 | "Metadata": {
27 | "AllowAccessToGlobals": false,
28 | "AllowCustomization": true,
29 | "Description": ""
30 | },
31 | "MetaDataIDKey": "",
32 | "Name": "cmp_MD_ContrastChecker_1",
33 | "ParentIndex": 0,
34 | "PersistMetaDataIDKey": false,
35 | "Properties": [
36 | {
37 | "Category": "Data",
38 | "PropertyName": "primaryColorHex",
39 | "RuleProviderType": "Unknown"
40 | },
41 | {
42 | "Category": "Data",
43 | "PropertyName": "backgroundColorHex",
44 | "RuleProviderType": "Unknown"
45 | },
46 | {
47 | "Category": "Data",
48 | "PropertyName": "textColor",
49 | "RuleProviderType": "System"
50 | },
51 | {
52 | "Category": "Data",
53 | "PropertyName": "font",
54 | "RuleProviderType": "System"
55 | },
56 | {
57 | "Category": "Data",
58 | "PropertyName": "fontSize",
59 | "RuleProviderType": "System"
60 | },
61 | {
62 | "Category": "Design",
63 | "PropertyName": "Width",
64 | "RuleProviderType": "Unknown"
65 | },
66 | {
67 | "Category": "Design",
68 | "PropertyName": "X",
69 | "RuleProviderType": "Unknown"
70 | },
71 | {
72 | "Category": "Design",
73 | "PropertyName": "Y",
74 | "RuleProviderType": "Unknown"
75 | },
76 | {
77 | "Category": "Design",
78 | "PropertyName": "ZIndex",
79 | "RuleProviderType": "Unknown"
80 | },
81 | {
82 | "Category": "Design",
83 | "PropertyName": "Height",
84 | "RuleProviderType": "Unknown"
85 | },
86 | {
87 | "Category": "Design",
88 | "PropertyName": "Fill",
89 | "RuleProviderType": "System"
90 | }
91 | ],
92 | "StyleName": "",
93 | "Type": "ControlInfo"
94 | },
95 | "cmp_MD_ContrastChecker_2": {
96 | "AllowAccessToGlobals": true,
97 | "ControlPropertyState": [
98 | "Fill",
99 | "Height",
100 | "Width",
101 | "X",
102 | "Y",
103 | "ZIndex",
104 | "primaryColorHex",
105 | "backgroundColorHex",
106 | "textColor",
107 | "font",
108 | "fontSize"
109 | ],
110 | "HasDynamicProperties": false,
111 | "IsAutoGenerated": false,
112 | "IsComponentDefinition": false,
113 | "IsDataControl": false,
114 | "IsFromScreenLayout": false,
115 | "IsGroupControl": false,
116 | "IsLocked": false,
117 | "LayoutName": "",
118 | "Metadata": {
119 | "AllowAccessToGlobals": false,
120 | "AllowCustomization": true,
121 | "Description": ""
122 | },
123 | "MetaDataIDKey": "",
124 | "Name": "cmp_MD_ContrastChecker_2",
125 | "ParentIndex": 1,
126 | "PersistMetaDataIDKey": false,
127 | "Properties": [
128 | {
129 | "Category": "Data",
130 | "PropertyName": "primaryColorHex",
131 | "RuleProviderType": "System"
132 | },
133 | {
134 | "Category": "Data",
135 | "PropertyName": "backgroundColorHex",
136 | "RuleProviderType": "Unknown"
137 | },
138 | {
139 | "Category": "Data",
140 | "PropertyName": "textColor",
141 | "RuleProviderType": "System"
142 | },
143 | {
144 | "Category": "Data",
145 | "PropertyName": "font",
146 | "RuleProviderType": "System"
147 | },
148 | {
149 | "Category": "Data",
150 | "PropertyName": "fontSize",
151 | "RuleProviderType": "System"
152 | },
153 | {
154 | "Category": "Design",
155 | "PropertyName": "Width",
156 | "RuleProviderType": "Unknown"
157 | },
158 | {
159 | "Category": "Design",
160 | "PropertyName": "X",
161 | "RuleProviderType": "Unknown"
162 | },
163 | {
164 | "Category": "Design",
165 | "PropertyName": "Y",
166 | "RuleProviderType": "Unknown"
167 | },
168 | {
169 | "Category": "Design",
170 | "PropertyName": "ZIndex",
171 | "RuleProviderType": "Unknown"
172 | },
173 | {
174 | "Category": "Design",
175 | "PropertyName": "Height",
176 | "RuleProviderType": "Unknown"
177 | },
178 | {
179 | "Category": "Design",
180 | "PropertyName": "Fill",
181 | "RuleProviderType": "System"
182 | }
183 | ],
184 | "StyleName": "",
185 | "Type": "ControlInfo"
186 | },
187 | "ContrastChecker": {
188 | "AllowAccessToGlobals": true,
189 | "ControlPropertyState": [
190 | "Fill",
191 | "ImagePosition",
192 | "Height",
193 | "Width",
194 | "Size",
195 | "Orientation",
196 | "LoadingSpinner",
197 | "LoadingSpinnerColor"
198 | ],
199 | "IsAutoGenerated": false,
200 | "IsComponentDefinition": false,
201 | "IsDataControl": false,
202 | "IsFromScreenLayout": false,
203 | "IsGroupControl": false,
204 | "IsLocked": false,
205 | "LayoutName": "",
206 | "MetaDataIDKey": "",
207 | "Name": "ContrastChecker",
208 | "ParentIndex": 0,
209 | "PersistMetaDataIDKey": false,
210 | "Properties": [
211 | {
212 | "Category": "Design",
213 | "PropertyName": "Width",
214 | "RuleProviderType": "Unknown"
215 | },
216 | {
217 | "Category": "Design",
218 | "PropertyName": "Height",
219 | "RuleProviderType": "Unknown"
220 | },
221 | {
222 | "Category": "Design",
223 | "PropertyName": "ImagePosition",
224 | "RuleProviderType": "Unknown"
225 | },
226 | {
227 | "Category": "Design",
228 | "PropertyName": "Fill",
229 | "RuleProviderType": "Unknown"
230 | },
231 | {
232 | "Category": "Design",
233 | "PropertyName": "LoadingSpinner",
234 | "RuleProviderType": "Unknown"
235 | },
236 | {
237 | "Category": "Design",
238 | "PropertyName": "LoadingSpinnerColor",
239 | "RuleProviderType": "Unknown"
240 | },
241 | {
242 | "Category": "Design",
243 | "PropertyName": "Size",
244 | "RuleProviderType": "Unknown"
245 | },
246 | {
247 | "Category": "Design",
248 | "PropertyName": "Orientation",
249 | "RuleProviderType": "Unknown"
250 | }
251 | ],
252 | "StyleName": "defaultScreenStyle",
253 | "Type": "ControlInfo"
254 | }
255 | },
256 | "TopParentName": "ContrastChecker"
257 | }
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/pkgs/circle_2.3.0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | TODO: Need license text here.]]>
4 |
6 |
7 |
8 |
9 |
10 |
11 | = 0) && (viewState.displayMode() !== AppMagic.Constants.DisplayMode.Edit),
26 | 'aria-hidden': properties.TabIndex() < 0 && !properties.AccessibleLabel()
27 | }">
28 |
41 |
48 |
49 |
50 |
60 |
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/Components/cmp_MD_Banner.fx.yaml:
--------------------------------------------------------------------------------
1 | cmp_MD_Banner As CanvasComponent:
2 | action1OnSelect: =true
3 | action1Text: ="CLOSE"
4 | action2OnSelect: =true
5 | action2Text: ="RETRY"
6 | actionBeneath: =false
7 | backgroundColor: =defaults.backgroundColor
8 | backgroundColorHex: =defaults.backgroundColorHex
9 | boxShadow: =true
10 | Fill: =Transparent
11 | font: =defaults.font
12 | fontSize: =20
13 | fontWeight: =FontWeight.Normal
14 | Height: |-
15 | =If(cmp_MD_Banner.actionBeneath,
16 | 150, 100)
17 | onHide: =true
18 | OnReset: =
19 | primaryColor: =defaults.primaryColor
20 | svgIcon: |-
21 | =""
22 | text: ="Ooops, that didn't work"
23 | textColor: =defaults.textColor
24 | textPaddingLeft: =20
25 | timerStart: =true
26 | transitionAnimation: =true
27 | transitionTime: =200
28 | twoButtons: =true
29 | Visible: =true
30 | Width: =600
31 | X: =0
32 | Y: =0
33 | yPosition: =(tim_bannerTransition.Value/cmp_MD_Banner.transitionTime-1)*Self.Height
34 | ZIndex: =1
35 |
36 | tim_bannerTransition As timer:
37 | Duration: =cmp_MD_Banner.transitionTime
38 | OnTimerEnd: =cmp_MD_Banner.onHide()
39 | Reset: =!cmp_MD_Banner.timerStart
40 | Start: =cmp_MD_Banner.timerStart
41 | Visible: =false
42 | X: =60
43 | Y: =50
44 | ZIndex: =2
45 |
46 | con_Banner As groupContainer.manualLayoutContainer:
47 | Fill: =Transparent
48 | Height: =Parent.Height
49 | Width: =Parent.Width
50 | Y: |-
51 | =If(
52 | cmp_MD_Banner.transitionAnimation,
53 | (tim_bannerTransition.Value/cmp_MD_Banner.transitionTime-1)*Self.Height,
54 | 0
55 | )
56 | ZIndex: =4
57 |
58 | rec_bannerBG As rectangle:
59 | BorderStyle: =BorderStyle.None
60 | Fill: =cmp_MD_Banner.backgroundColor
61 | Height: =Parent.Height-4
62 | Width: =Parent.Width
63 | ZIndex: =1
64 |
65 | html_bannerBoxshadow As htmlViewer:
66 | Fill: =Transparent
67 | Height: =cmp_MD_Banner.Height
68 | HtmlText: |-
69 | ="
77 |
78 |
79 |
80 | "
81 | PaddingBottom: =0
82 | PaddingLeft: =0
83 | PaddingRight: =0
84 | PaddingTop: =0
85 | Width: =cmp_MD_Banner.Width
86 | ZIndex: =2
87 |
88 | lbl_bannerText As label:
89 | AutoHeight: =true
90 | Color: =cmp_MD_Banner.textColor
91 | Height: =70
92 | PaddingLeft: =20
93 | Size: =cmp_MD_Banner.fontSize
94 | Text: =cmp_MD_Banner.text
95 | Width: |-
96 | =If(
97 | cmp_MD_Banner.actionBeneath, Parent.Width-Self.X-8,
98 | cmp_MD_Banner.twoButtons, Parent.Width-btn_action2.X-img_bannerIcon.X-img_bannerIcon.Width-8,
99 | btn_action1.X-Self.X-8)
100 | X: =cir_iconBG.X+If(Len(cmp_MD_Banner.svgIcon)>0,cir_iconBG.Width, 0)
101 | Y: =20
102 | ZIndex: =3
103 |
104 | cir_iconBG As circle:
105 | DisplayMode: =DisplayMode.View
106 | Fill: =cmp_MD_Banner.primaryColor
107 | Height: =50
108 | Visible: =img_bannerIcon.Visible
109 | Width: =50
110 | X: =cmp_MD_Banner.textPaddingLeft
111 | Y: =20
112 | ZIndex: =4
113 |
114 | img_bannerIcon As image:
115 | DisplayMode: =DisplayMode.View
116 | Fill: =
117 | Height: =40
118 | Image: |-
119 | =
120 | "data:image/svg+xml;utf8, " & EncodeUrl(
121 | //Set Map svg text
122 |
123 | Substitute(cmp_MD_Banner.svgIcon, "0
135 | Width: =40
136 | X: =cmp_MD_Banner.textPaddingLeft+5
137 | Y: =25
138 | ZIndex: =5
139 |
140 | btn_action1 As button:
141 | BorderStyle: =BorderStyle.None
142 | Color: =cmp_MD_Banner.primaryColor
143 | DisabledFill: =Transparent
144 | Fill: =Transparent
145 | Font: =cmp_MD_Banner.font
146 | FontWeight: =cmp_MD_Banner.fontWeight
147 | Height: =50
148 | HoverColor: =ColorFade(Self.Color, 30%)
149 | HoverFill: =Transparent
150 | OnSelect: =cmp_MD_Banner.action1OnSelect()
151 | PaddingBottom: =0
152 | PaddingLeft: =0
153 | PaddingRight: =0
154 | PaddingTop: =0
155 | PressedFill: =Transparent
156 | Size: =cmp_MD_Banner.fontSize
157 | Text: =cmp_MD_Banner.action1Text
158 | Width: =Len(Self.Text)*Self.Size*0.9+20
159 | X: =con_Banner.Width-Self.Width-8
160 | Y: =If(cmp_MD_Banner.actionBeneath, Parent.Height-Self.Height-5, 20)
161 | ZIndex: =6
162 |
163 | btn_action2 As button:
164 | BorderStyle: =BorderStyle.None
165 | Color: =cmp_MD_Banner.primaryColor
166 | DisabledFill: =Transparent
167 | Fill: =Transparent
168 | Font: =cmp_MD_Banner.font
169 | FontWeight: =cmp_MD_Banner.fontWeight
170 | Height: =50
171 | HoverColor: =ColorFade(Self.Color, 30%)
172 | HoverFill: =Transparent
173 | OnSelect: =cmp_MD_Banner.action2OnSelect()
174 | PaddingBottom: =0
175 | PaddingLeft: =0
176 | PaddingRight: =0
177 | PaddingTop: =0
178 | PressedFill: =Transparent
179 | Size: =cmp_MD_Banner.fontSize
180 | Text: =cmp_MD_Banner.action2Text
181 | Width: =Len(Self.Text)*Self.Size*0.9+20
182 | X: =btn_action1.X-Self.Width-8
183 | Y: =If(cmp_MD_Banner.actionBeneath, Parent.Height-Self.Height-5, 20)
184 | ZIndex: =7
185 |
186 |
--------------------------------------------------------------------------------
/materialdesign components/sourcecode/Src/SetupPage.fx.yaml:
--------------------------------------------------------------------------------
1 | SetupPage As screen:
2 | Height: =1000
3 | OnVisible: |-
4 | =Set(defaults,
5 | {
6 | primaryColor: ColorValue("#6200EE"),
7 | secondaryColor: ColorValue("#03DAC6"),
8 | disabledColor: Gray,
9 | backgroundColor: White,
10 | elementBackgroundColor: RGBA(240, 240, 240, 1),
11 | textColor: RGBA(0, 0, 0, 1),
12 | errorColor: ColorValue("#B00020"),
13 | font: "Roboto, 'Segoe UI'",
14 | fontSize: 14,
15 | borderRadius: 15
16 | }
17 | );
18 |
19 | Set(defaults,
20 | Patch(defaults,
21 | {
22 | primaryColorHex: Match(JSON(defaults.primaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
23 | primaryColorTransparentHex: Match(JSON(defaults.primaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch&"4d",
24 | secondaryColorHex: Match(JSON(defaults.secondaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
25 | disabledColorHex: Match(JSON(defaults.disabledColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
26 | backgroundColorHex: Match(JSON(defaults.backgroundColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
27 | errorColorHex: Match(JSON(defaults.errorColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
28 | elementBackgroundColorHex: Match(JSON(defaults.elementBackgroundColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch
29 | }
30 | )
31 | );
32 | Width: =1000
33 |
34 | cmp_MD_Button_1 As cmp_MD_Button:
35 | buttonText: ="DIALOG"
36 | Height: =93
37 | onSelect: |-
38 | =UpdateContext({locDialog: true});
39 | Reset(cmp_MD_Dialog_1)
40 | outlinedButton: =true
41 | Width: =333
42 | X: =300
43 | Y: =110
44 |
45 | Toggle2 As toggleSwitch:
46 | FalseText: ="24hour-Format"
47 | Height: =47
48 | Size: =21
49 | TrueText: ="12hour-Format"
50 | Visible: =locTimePicker
51 | Width: =348
52 | X: =297
53 | Y: =919
54 | ZIndex: =2
55 |
56 | cmp_MD_Button_2 As cmp_MD_Button:
57 | buttonText: ="NOW"
58 | Height: =87
59 | onSelect: |-
60 | =UpdateContext({locDefaultTime: Now()})
61 | outlinedButton: =true
62 | svgIcon: |-
63 | =""
64 | Width: =214
65 | X: =639
66 | Y: =265
67 | ZIndex: =3
68 |
69 | cmp_MD_Timepicker_2 As cmp_MD_Timepicker:
70 | action1OnSelect: |-
71 | =UpdateContext({locDefaultTime:Self.selectedTime, locTimePicker: false})
72 | action2OnSelect: |-
73 | =UpdateContext({locDefaultTime:Self.selectedTime, locTimePicker: false})
74 | defaultTime: |-
75 | =With({Time: locDefaultTime},
76 | Time(Hour(Time), Minute(Time), 0))
77 | format: =If(Toggle2.Value, 12, 24)
78 | Visible: =locTimePicker
79 | X: =285
80 | Y: =371
81 | ZIndex: =4
82 |
83 | cmp_MD_Button_3 As cmp_MD_Button:
84 | adjustPaddingLeft: =-20
85 | align: =Align.Right
86 | borderRadius: =50
87 | buttonText: ="SETUP"
88 | Height: =145
89 | iconSize: =0.5
90 | onSelect: |+
91 | =Set(defaults,
92 | {
93 | primaryColor: Purple,
94 | secondaryColor: Pink,
95 | disabledColor: Gray,
96 | backgroundColor: White,
97 | elementBackgroundColor: LightGray,
98 | textColor: RGBA(30, 30, 30, 1),
99 | errorColor: Red,
100 | font: "Roboto, 'Segoe UI'",
101 | fontSize: 14,
102 | borderRadius: 10
103 | }
104 | );
105 |
106 | Set(defaults,
107 | Patch(defaults,
108 | {
109 | primaryColorHex: Match(JSON(defaults.primaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
110 | primaryColorTransparentHex: Match(JSON(defaults.primaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch&"4d",
111 | secondaryColorHex: Match(JSON(defaults.secondaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
112 | disabledColorHex: Match(JSON(defaults.disabledColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
113 | backgroundColorHex: Match(JSON(defaults.backgroundColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
114 | errorColorHex: Match(JSON(defaults.errorColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch,
115 | elementBackgroundColorHex: Match(JSON(defaults.elementBackgroundColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch
116 | }
117 | )
118 | );
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | Set(varPrimaryColor, Purple);
127 | Set(varSecondaryColor, Pink);
128 | Set(varDisabledColor, Gray);
129 | Set(varBackgroundColor, White);
130 | Set(varTextColor, RGBA(30, 30, 30, 1));
131 |
132 | Set(varFont, "Roboto, 'Segoe UI'");
133 |
134 | //Calculate Hex Values of Colors
135 |
136 | Set(varPrimaryColorHex,Match(JSON(varPrimaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch);
137 | Set(varSecondaryColorHex,Match(JSON(varSecondaryColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch);
138 | Set(varDisabledColorHex,Match(JSON(varDisabledColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch);
139 | Set(varBackgroundColorHex,Match(JSON(varBackgroundColor,IgnoreUnsupportedTypes),"#[a-fA-F0-9]{6}").FullMatch);
140 |
141 | outsideMargin: =50
142 | svgIcon: |-
143 | ="
144 | "
145 | Width: =275
146 | X: =40
147 | Y: =77
148 | ZIndex: =5
149 |
150 | DatePicker1 As datepicker:
151 | Height: =70
152 | Size: =24
153 | Width: =575
154 | X: =141
155 | Y: =390
156 | ZIndex: =6
157 |
158 | cmp_MD_Dialog_1 As cmp_MD_Dialog:
159 | action1OnSelect: |-
160 | =UpdateContext({locDialog: false})
161 | action2OnSelect: |-
162 | =UpdateContext({locDialog: false})
163 | action2Text: ="AHA"
164 | header: ="Dialog with a 2 line header"
165 | text: ="Use this dialog for situations when the user immediately needs to take action and always provide 2 options."
166 | Visible: =locDialog
167 | ZIndex: =7
168 |
169 |
--------------------------------------------------------------------------------