Created
May 22, 2025 16:32
-
-
Save sancarn/21ffd92731f9eb00d6ccbd12cf8310a2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Screens: | |
| SPS Checklist: | |
| Properties: | |
| LoadingSpinnerColor: =RGBA(56, 96, 178, 1) | |
| OnVisible: |- | |
| =ClearCollect(myResults, {ID: "", Title: "", Type: "", SortNum: 0, JSON: ""}); | |
| Remove(myResults, First(myResults)); | |
| UpdateContext({VisibleMode: Blank()}) | |
| Children: | |
| - EditPumpDetails: | |
| Control: GroupContainer@1.3.0 | |
| Variant: ManualLayout | |
| Properties: | |
| Fill: =RGBA(255, 255, 255, 1) | |
| Height: =1055 | |
| Visible: =VisibleMode = "EditPumpItem" | |
| Width: =640 | |
| Y: =81 | |
| Children: | |
| - inptPowerRating: | |
| Control: CanvasComponent | |
| ComponentName: TextInput | |
| Properties: | |
| Default: =ParseJSON(ThisPumpData).PowerRating | |
| - inptPumpPlate: | |
| Control: CanvasComponent | |
| ComponentName: ImageInput | |
| Properties: | |
| Default: |- | |
| =With( | |
| {img: ParseJSON(ThisPumpData).Image & ""}, | |
| If(img="",SampleImage, img) | |
| ) | |
| Description: ="" | |
| OnChange: |- | |
| ={ID: inptPumpPlate.ChangeID, Title: inptPumpPlate.Title, Value: {Name: "", DataURI: ""}} | |
| - btnSubmit: | |
| Control: Classic/Button@2.2.0 | |
| Properties: | |
| OnSelect: |- | |
| =PumpInfo.UpdateItem( | |
| ThisPumpIndex, | |
| JSON( | |
| { | |
| PowerRating: inptPowerRating.Value, | |
| Image: inptPumpPlate.GetValue().DataURI | |
| } | |
| ) | |
| ); | |
| Reset(inptPumpPlate); | |
| UpdateContext({VisibleMode: Blank()}); | |
| - btnCancel: | |
| Control: Classic/Button@2.2.0 | |
| Properties: | |
| OnSelect: |- | |
| =Reset(inptPumpPlate); | |
| UpdateContext({VisibleMode: Blank()}); | |
| - btnDelete: | |
| Control: Classic/Button@2.2.0 | |
| Properties: | |
| BorderColor: =ColorFade(Self.Fill, -15%) | |
| Color: =RGBA(255, 255, 255, 1) | |
| DisabledBorderColor: =RGBA(166, 166, 166, 1) | |
| Fill: =RGBA(168, 0, 0, 1) | |
| Font: =Font.'Open Sans' | |
| Height: =86 | |
| HoverBorderColor: =ColorFade(Self.BorderColor, 20%) | |
| HoverColor: =RGBA(255, 255, 255, 1) | |
| HoverFill: =ColorFade(RGBA(56, 96, 178, 1), -20%) | |
| OnSelect: |- | |
| =PumpInfo.DeleteItem( | |
| ThisPumpIndex | |
| ); | |
| Reset(inptPumpPlate); | |
| UpdateContext({VisibleMode: Blank()}); | |
| PressedBorderColor: =Self.Fill | |
| PressedColor: =Self.Fill | |
| PressedFill: =Self.Color | |
| Text: ="Delete" | |
| Width: =138 | |
| X: =22 | |
| Y: =859 | |
| - Questions: | |
| Control: GroupContainer@1.3.0 | |
| Variant: AutoLayout | |
| Properties: | |
| Height: =1055 | |
| LayoutDirection: =LayoutDirection.Vertical | |
| LayoutOverflowY: =LayoutOverflow.Scroll | |
| Visible: =IsBlank(VisibleMode) | |
| Width: =640 | |
| Y: =81 | |
| Children: | |
| - ... | |
| - PumpInfo: | |
| Control: CanvasComponent | |
| ComponentName: DynamicGalleryInput_2 | |
| Properties: | |
| ChangeID: =GUID() | |
| Description: ="Please add all pumps and assign power ratings and pictures of the pump plates." | |
| InputItems: |- | |
| =Table( | |
| [ | |
| { | |
| Type: "", | |
| ID: "", | |
| SortNum: 0, | |
| Title: "", | |
| Value: [ | |
| { | |
| Index: 0, | |
| Metadata: ParseJSON("") | |
| } | |
| ], | |
| JSON: "" | |
| } | |
| ] | |
| ) | |
| OnChange: |- | |
| =Patch( | |
| myResults, | |
| Coalesce(LookUp(myResults, ID = ThisResult.ID), Defaults(myResults)), | |
| { | |
| ID: ThisResult.ID, | |
| Title: ThisResult.Title, | |
| SortNum: ThisResult.SortNum, | |
| Type: ThisResult.Type, | |
| JSON: ThisResult.JSON | |
| } | |
| ) | |
| OnCreateItem: = | |
| OnSelect: |- | |
| =UpdateContext({ | |
| VisibleMode: "EditPumpItem", | |
| ThisPumpIndex: ThisItemIndex, | |
| ThisPumpData: ThisItemMetadata | |
| }) | |
| Render: |- | |
| =With( | |
| { | |
| image: Coalesce(ParseJSON(ThisItem).Image, Blank()), | |
| power: Coalesce(ParseJSON(ThisItem).PowerRating, Blank()) | |
| }, | |
| { | |
| Title: "Pump " & ThisItemIndex, | |
| Description: "PowerRating: " & If(IsBlank(power),"Unknown", power & "kw"), | |
| Image: If(IsBlank(image),"",image) | |
| } | |
| ) | |
| SortNum: =100 | |
| Title: ="Pump Information" | |
| Validation: |- | |
| =Table({Type: "Warn", Text: "Hello warning"}) | |
| isDescriptionHTML: =true | |
| - ... | |
| - AppTitle: | |
| Control: Label@2.5.1 | |
| Properties: | |
| Align: =Align.Center | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Color: =RGBA(255, 255, 255, 1) | |
| Fill: =RGBA(0, 18, 107, 1) | |
| Font: =Font.'Open Sans' | |
| Height: =81 | |
| Size: =30 | |
| Text: |- | |
| ="SPS CHECKLIST | |
| " | |
| Width: =640 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ComponentDefinitions: | |
| DynamicGalleryInput_2: | |
| DefinitionType: CanvasComponent | |
| CustomProperties: | |
| ChangeID: | |
| PropertyKind: Input | |
| DisplayName: ChangeID | |
| Description: ID to include in OnChange event | |
| DataType: Text | |
| Default: =GUID() | |
| DeleteItem: | |
| PropertyKind: Action | |
| DisplayName: DeleteItem | |
| Description: 'Delete an item at a position. Type: (index: number) => void' | |
| ReturnType: None | |
| Parameters: | |
| - Index: | |
| Description: The index to remove | |
| DataType: Number | |
| Default: =100 | |
| Description: | |
| PropertyKind: Input | |
| DisplayName: Description | |
| Description: A custom property | |
| DataType: Text | |
| Default: ="Text" | |
| InputItems: | |
| PropertyKind: Input | |
| DisplayName: Input Items | |
| Description: 'A table of JSON payloads to hold the record data. JSON strings are used to get around the strong type system of PowerApps. Type: Table([{raw: string}])' | |
| RaiseOnReset: true | |
| DataType: Table | |
| Default: |- | |
| =Table( | |
| [ | |
| { | |
| Type: "", | |
| ID: "", | |
| SortNum: 0, | |
| Title: "", | |
| Value: [ | |
| { | |
| Index: 0, | |
| Metadata: ParseJSON("") | |
| } | |
| ], | |
| JSON: "" | |
| } | |
| ] | |
| ) | |
| OnChange: | |
| PropertyKind: Event | |
| DisplayName: OnChange | |
| Description: Event raised whenever a change is made | |
| ReturnType: None | |
| Default: = | |
| Parameters: | |
| - ThisResult: | |
| Description: A parameter | |
| DataType: Record | |
| Default: |- | |
| =With( | |
| { | |
| cleanItems: ForAll( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| { | |
| Index: ThisRecord.index, | |
| Metadata: ParseJSON(ThisRecord.metadata) | |
| } | |
| ) | |
| }, | |
| { | |
| Type: "GalleryInput", | |
| ID: "", | |
| SortNum: 0, | |
| Title: "", | |
| Value: cleanItems, | |
| JSON: "" | |
| } | |
| ) | |
| OnCreateItem: | |
| PropertyKind: Event | |
| DisplayName: OnCreateItem | |
| Description: 'An event triggers when items added to the gallery. Record is always {} on create. Type: (Index: number)=>void' | |
| ReturnType: None | |
| Default: = | |
| Parameters: | |
| - ThisItemIndex: | |
| Description: The index of the item that was added | |
| DataType: Number | |
| Default: =100 | |
| OnSelect: | |
| PropertyKind: Event | |
| DisplayName: OnSelect | |
| Description: 'When an item is selected from the gallery. Type: (ThisRecord: string) => void' | |
| ReturnType: None | |
| Default: = | |
| Parameters: | |
| - ThisItemMetadata: | |
| Description: " The selected record" | |
| DataType: Text | |
| Default: ="Text" | |
| - ThisItemIndex: | |
| Description: The index of the selected row | |
| DataType: Number | |
| Default: =100 | |
| Render: | |
| PropertyKind: InputFunction | |
| DisplayName: Render | |
| Description: Returns rendering information | |
| DataType: Record | |
| Default: |- | |
| ={Title: "", Description: "", Image: ""} | |
| Parameters: | |
| - ThisItemIndex: | |
| Description: The index of the item | |
| DataType: Number | |
| Default: =100 | |
| - ThisItem: | |
| Description: A JSON payload containing data for the record | |
| DataType: Text | |
| Default: ="Text" | |
| SortNum: | |
| PropertyKind: Input | |
| DisplayName: SortNum | |
| Description: Index to sort result at | |
| DataType: Number | |
| Default: =100 | |
| Title: | |
| PropertyKind: Input | |
| DisplayName: Title | |
| Description: A custom property | |
| DataType: Text | |
| Default: ="Text" | |
| UpdateItem: | |
| PropertyKind: Action | |
| DisplayName: UpdateItem | |
| Description: 'Update an item in the gallery. Type: (index: number, Metadata: string) => void' | |
| ReturnType: None | |
| Parameters: | |
| - Index: | |
| Description: Index of item to update | |
| DataType: Number | |
| Default: =100 | |
| - Metadata: | |
| Description: Data of item to update item to | |
| DataType: Text | |
| Default: ="Text" | |
| Validation: | |
| PropertyKind: InputFunction | |
| DisplayName: Validation | |
| Description: A custom property | |
| DataType: Table | |
| Default: |- | |
| =Table({Type: "Warn", Text: "Hello warning"}) | |
| Parameters: | |
| - ThisItem: | |
| Description: A parameter | |
| DataType: Text | |
| Default: ="Text" | |
| isDescriptionHTML: | |
| PropertyKind: Input | |
| DisplayName: isDescriptionHTML | |
| Description: A custom property | |
| DataType: Boolean | |
| Default: =true | |
| Properties: | |
| DeleteItem: |- | |
| =// Remove the item at the specified index | |
| Remove( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| Index(_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, Index) | |
| ); | |
| // Clear and reindex the remaining items | |
| ClearCollect( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| ForAll( | |
| Sequence(CountRows(_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb)), | |
| Patch( | |
| Index(_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, Value), | |
| { index: Value } | |
| ) | |
| ) | |
| ); | |
| With( | |
| { | |
| cleanItems: ForAll( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| { | |
| Index: ThisRecord.index, | |
| Metadata: ParseJSON(ThisRecord.metadata) | |
| } | |
| ) | |
| }, | |
| With( | |
| { | |
| record: { | |
| Type: "GalleryInput", | |
| ID: DynamicGalleryInput_2.ChangeID, | |
| SortNum: DynamicGalleryInput_2.SortNum, | |
| Title: DynamicGalleryInput_2.Title, | |
| Value: cleanItems | |
| } | |
| }, | |
| DynamicGalleryInput_2.OnChange( | |
| Patch( | |
| record, | |
| {JSON: JSON(record)} | |
| ) | |
| ) | |
| ) | |
| ); | |
| OnReset: |+ | |
| =Clear(_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb); | |
| ForAll( | |
| Sequence(CountRows(DynamicGalleryInput_2.InputItems)), | |
| Collect( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| Patch( | |
| Index(DynamicGalleryInput_2.InputItems, Value), | |
| { index: Value} | |
| ) | |
| ) | |
| ) | |
| UpdateItem: |- | |
| =Patch( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| Index(_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, Index), | |
| {metadata: Metadata} | |
| ); | |
| With( | |
| { | |
| cleanItems: ForAll( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| { | |
| Index: ThisRecord.index, | |
| Metadata: ParseJSON(ThisRecord.metadata) | |
| } | |
| ) | |
| }, | |
| With( | |
| { | |
| record: { | |
| Type: "GalleryInput", | |
| ID: DynamicGalleryInput_2.ChangeID, | |
| SortNum: DynamicGalleryInput_2.SortNum, | |
| Title: DynamicGalleryInput_2.Title, | |
| Value: cleanItems | |
| } | |
| }, | |
| DynamicGalleryInput_2.OnChange( | |
| Patch( | |
| record, | |
| {JSON: JSON(record)} | |
| ) | |
| ) | |
| ) | |
| ); | |
| Children: | |
| - DynGalleryInput_Container_2: | |
| Control: GroupContainer@1.3.0 | |
| Variant: AutoLayout | |
| Properties: | |
| Height: =DynamicGalleryInput_2.Height | |
| LayoutDirection: =LayoutDirection.Vertical | |
| Width: =DynamicGalleryInput_2.Width | |
| Children: | |
| - DynGalleryInput_HorizCont_2: | |
| Control: GroupContainer@1.3.0 | |
| Variant: AutoLayout | |
| Properties: | |
| FillPortions: =0 | |
| Height: =160 | |
| LayoutDirection: =LayoutDirection.Horizontal | |
| Children: | |
| - DynGalleryInput_DescCont_2: | |
| Control: GroupContainer@1.3.0 | |
| Variant: AutoLayout | |
| Properties: | |
| FillPortions: =0 | |
| Height: =100 | |
| LayoutDirection: =LayoutDirection.Vertical | |
| LayoutJustifyContent: =LayoutJustifyContent.Center | |
| LayoutMinHeight: =60 | |
| Width: =DynGalleryInput_HorizCont_2.Width-DynGalleryInput_AddCont_2.Width | |
| Children: | |
| - DynGalleryInput_Title_2: | |
| Control: Label@2.5.1 | |
| Properties: | |
| AutoHeight: =true | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Font: =Font.'Open Sans' | |
| FontWeight: =FontWeight.Bold | |
| Text: =DynamicGalleryInput_2.Title | |
| Width: =DynGalleryInput_Container_2.Width | |
| X: =40 | |
| Y: =40 | |
| - DynGalleryInput_Description_2: | |
| Control: HtmlViewer@2.1.0 | |
| Properties: | |
| AutoHeight: =true | |
| Font: =Font.'Open Sans' | |
| HtmlText: =Substitute(If(DynamicGalleryInput_2.isDescriptionHTML, "$root", "<p>$root</p>"), "$root", DynamicGalleryInput_2.Description) | |
| Size: =14 | |
| Width: =DynGalleryInput_DescCont_2.Width | |
| X: =5 | |
| Y: =70 | |
| - DynGalleryInput_AddCont_2: | |
| Control: GroupContainer@1.3.0 | |
| Variant: AutoLayout | |
| Properties: | |
| FillPortions: =0 | |
| LayoutDirection: =LayoutDirection.Vertical | |
| LayoutJustifyContent: =LayoutJustifyContent.Center | |
| Width: =150 | |
| Children: | |
| - DynGalleryInput_AddBtn_2: | |
| Control: Classic/Icon@2.5.0 | |
| Properties: | |
| AlignInContainer: =AlignInContainer.Center | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Color: =RGBA(0, 18, 107, 1) | |
| Height: =DynGalleryInput_AddCont_2.Height | |
| Icon: =Icon.Add | |
| OnSelect: "=With(\n {newIndex: CountRows(_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb) + 1},\n Collect(\n _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb,\n {\n index: newIndex,\n metadata: \"{}\"\n }\n );\n DynamicGalleryInput_2.OnCreateItem(newIndex);\n \n);\nWith(\n {\n cleanItems: ForAll(\n _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb,\n {\n Index: ThisRecord.index,\n Metadata: ParseJSON(ThisRecord.metadata)\n }\n )\n },\n With(\n {\n record: {\n Type: \"GalleryInput\",\n ID: DynamicGalleryInput_2.ChangeID,\n SortNum: DynamicGalleryInput_2.SortNum,\n Title: DynamicGalleryInput_2.Title,\n Value: cleanItems\n }\n },\n DynamicGalleryInput_2.OnChange(\n Patch(\n record,\n {JSON: JSON(record)}\n )\n )\n )\n);\n" | |
| PressedFill: =RGBA(240,240,255,1) | |
| Width: =DynGalleryInput_AddCont_2.Width | |
| - DynGalleryInput_Gallery_2: | |
| Control: Gallery@2.15.0 | |
| Variant: BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Items: =_itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb | |
| OnSelect: =DynamicGalleryInput_2.OnSelect(ThisItem.metadata, ThisItem.index) | |
| Children: | |
| - DynGalleryItemIndex_2: | |
| Control: Label@2.5.1 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Color: =RGBA(166, 166, 166, 1) | |
| Font: =Font.'Open Sans' | |
| Height: =DynGalleryInput_Gallery_2.TemplateHeight | |
| OnSelect: =Select(Parent) | |
| Text: =ThisItem.index | |
| Width: =30 | |
| - DynGalleryItemName_2: | |
| Control: Label@2.5.1 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Font: =Font.'Open Sans' | |
| FontWeight: =FontWeight.Bold | |
| Height: =DynGalleryInput_Gallery_2.TemplateHeight/3 | |
| OnSelect: =Select(Parent) | |
| Size: =14 | |
| Text: =DynamicGalleryInput_2.Render(ThisItem.index, ThisItem.metadata).Title | |
| Underline: =true | |
| Width: =400 | |
| X: =DynGalleryItemIndex_2.X + DynGalleryItemIndex_2.Width | |
| - DynGalleryItemImage_2: | |
| Control: Image@2.2.3 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Height: =DynGalleryInput_Gallery_2.TemplateHeight | |
| Image: |- | |
| =With( | |
| {imageData: DynamicGalleryInput_2.Render(ThisItem.index, ThisItem.metadata).Image}, | |
| If(imageData<>"", imageData, SampleImage) | |
| ) | |
| OnSelect: =Select(Parent) | |
| Width: =150 | |
| X: =DynGalleryItemName_2.X+DynGalleryItemName_2.Width | |
| - DynGalleryItemEditBtn_2: | |
| Control: Classic/Icon@2.5.0 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Color: =RGBA(0, 18, 107, 1) | |
| Height: =DynGalleryInput_Gallery_2.TemplateHeight | |
| Icon: =Icon.NextArrow | |
| OnSelect: =Select(Parent) | |
| Width: =DynGalleryInput_Gallery_2.Width - (DynGalleryItemImage_2.X+DynGalleryItemImage_2.Width) | |
| X: =DynGalleryItemImage_2.X+DynGalleryItemImage_2.Width | |
| - DynGalleryItemDesc_2: | |
| Control: Label@2.5.1 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Font: =Font.'Open Sans' | |
| FontWeight: =FontWeight.Lighter | |
| Height: =DynGalleryInput_Gallery_2.TemplateHeight*2/3 | |
| OnSelect: =Select(Parent) | |
| Size: =14 | |
| Text: =DynamicGalleryInput_2.Render(ThisItem.index, ThisItem.metadata).Description | |
| VerticalAlign: =VerticalAlign.Top | |
| Width: =DynGalleryItemName_2.Width | |
| X: =DynGalleryItemName_2.X | |
| Y: =DynGalleryInput_Gallery_2.TemplateHeight/3 | |
| - DynGalleryItemSeperator_2: | |
| Control: Rectangle@2.3.0 | |
| Properties: | |
| BorderColor: =RGBA(0, 18, 107, 1) | |
| Fill: =RGBA(0, 18, 107, 1) | |
| Height: =1 | |
| OnSelect: =Select(Parent) | |
| Width: =Parent.TemplateWidth | |
| Y: =Parent.TemplateHeight - Self.Height | |
| - DynamicGalleryInput_AutoChange_2: | |
| Control: Timer@2.1.0 | |
| Properties: | |
| AutoStart: =true | |
| BorderColor: =ColorFade(Self.Fill, -15%) | |
| Color: =RGBA(255, 255, 255, 1) | |
| DisabledBorderColor: =ColorFade(Self.BorderColor, 70%) | |
| DisabledColor: =ColorFade(Self.Fill, 90%) | |
| DisabledFill: =ColorFade(Self.Fill, 70%) | |
| Duration: =10 | |
| Fill: =RGBA(56, 96, 178, 1) | |
| Font: =Font.'Open Sans' | |
| HoverBorderColor: =ColorFade(Self.BorderColor, 20%) | |
| HoverColor: =RGBA(255, 255, 255, 1) | |
| HoverFill: =ColorFade(RGBA(56, 96, 178, 1), -20%) | |
| OnTimerEnd: |- | |
| =With( | |
| { | |
| cleanItems: ForAll( | |
| _itemsDynamicGalleryInput56ca79336be24d748b7d975210c644bb, | |
| { | |
| Index: ThisRecord.index, | |
| Metadata: ParseJSON(ThisRecord.metadata) | |
| } | |
| ) | |
| }, | |
| With( | |
| { | |
| record: { | |
| Type: "GalleryInput", | |
| ID: DynamicGalleryInput_2.ChangeID, | |
| SortNum: DynamicGalleryInput_2.SortNum, | |
| Title: DynamicGalleryInput_2.Title, | |
| Value: cleanItems | |
| } | |
| }, | |
| DynamicGalleryInput_2.OnChange( | |
| Patch( | |
| record, | |
| {JSON: JSON(record)} | |
| ) | |
| ) | |
| ) | |
| ); | |
| PressedBorderColor: =Self.Fill | |
| PressedColor: =Self.Fill | |
| PressedFill: =Self.Color | |
| Visible: =false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment