← Reference pack
Single Point of Truth

Power Apps Bible — Consolidated Database

Every reference document in this repo, concatenated onto one page in reading order, so any future session — human or AI — can fetch this single URL and have the entire accumulated Power Apps knowledge base for this project family, instead of guessing which of 16 separate files to check. Each section is tagged with its source filename — edit that file directly, then re-run the consolidation build to republish this page.

Contents (in order below)

  1. Overview & Entry Point powerapps-bible.md
  2. Known Bad Patterns known-bad-patterns.md
  3. Verified Control Reference verified-control-reference.md
  4. Control Defaults (Fresh-Control Lab) powerapps-control-defaults.md
  5. External Research: ChatGPT Property Matrix (context + precedence rule) external-research-notes.md
  6. ChatGPT Control Property Matrix (2026-07-05, docs-derived, unverified) external/powerapps_canvas_control_bible_v0_1.md
  7. Live Build Lessons live-build-lessons.md
  8. Real Build Quirks real-build-quirks.md
  9. UI Patterns ui-patterns.md
  10. Power Fx Patterns powerfx-patterns.md
  11. SharePoint & Office365Users sharepoint-office365users.md
  12. YAML Validation Checklist yaml-validation-checklist.md
  13. Builder System builder-system.md
  14. Project Repo Workflow project-repo-workflow.md
  15. Guide Authoring Rules guide-authoring-rules.md
  16. Output Format output-format.md
  17. Future Guide Template future-guide-template.md
  18. Reference Pack README README.md
powerapps-bible.md

Overview & Entry Point

PowerApps Bible

Last checked: 2026-06-20

This is the entry point for the local Power Apps knowledge base.

Layers

  1. Microsoft source mirror under .sources/
  2. powerapps-docs
  3. power-platform
  4. Not published to GitHub Pages.
  5. Updated with tools/update-msdocs.sh.

  6. Search index under .cache/powerapps-bible.sqlite

  7. Built with python3 tools/index-msdocs.py --rebuild.
  8. Queried with python3 tools/index-msdocs.py "Combo box ItemDisplayText".

  9. Curated local reference pack under reference/

  10. Human-friendly rules.
  11. Real build quirks from the Training Tracker app.
  12. Lab-derived fresh-control defaults from the live Power Apps editor.
  13. Corrections discovered while building future guides.

  14. Audit tooling under tools/

  15. Blocks known bad guide patterns before publishing.

Non-Negotiable Accuracy Rule

Do not write guide instructions from memory when the property, connector field, or formula behavior is risky. Search the local Microsoft docs mirror and the curated reference pack first. If the answer is not present, verify with current Microsoft Learn or live Power Apps behavior, then add the result to the curated reference pack.

Reference Pack Reading Order

For building a new app from scratch: 1. builder-system.md — requirements gathering, naming conventions, YAML generation rules, Patch templates, publishing workflow 2. real-build-quirks.md — live editor confirmed quirks 3. live-build-lessons.md — lessons from Training Tracker GitHub issues (bugs diagnosed and fixed in production) 4. ui-patterns.md — reusable YAML patterns (panels, tab nav, error borders, pill galleries, status colours) 5. verified-control-reference.md — exact property lists per control 6. powerfx-patterns.md — formula reference 7. known-bad-patterns.md — patterns that must never appear 8. sharepoint-office365users.md — SharePoint list and connector patterns

Real Build Quirks To Preserve

Common Searches

python3 tools/index-msdocs.py "Combo box ItemDisplayText"
python3 tools/index-msdocs.py "Text input Placeholder"
python3 tools/index-msdocs.py "SortOrder.Ascending"
python3 tools/index-msdocs.py "Office365Users SearchUserV2"
python3 tools/index-msdocs.py "DateDiff TimeUnit Days"
python3 tools/index-msdocs.py "Patch SharePoint choice Value"
python3 tools/index-msdocs.py "ModernCombobox fresh-control defaults"

Start Here For Quirks

Read real-build-quirks.md before changing formulas or control rows in Training Tracker.

Refresh Lab Defaults

If the user exports a new untouched defaults lab, copy it into .sources/default-lab/ and run:

python3 tools/generate-control-defaults.py
python3 tools/index-msdocs.py --rebuild

known-bad-patterns.md

Known Bad Patterns

Known Bad Patterns

Last checked: 2026-07-08

These are mistakes that must not reappear in this guide family.

Read this before generalizing any entry below into "avoid this whole control." Every entry here documents ONE specific broken property or pattern on a control, not a blanket verdict on the control itself. A control having one confirmed bug is not evidence that a different symptom on that same control shares the same root cause. Before recommending a full control swap because "this control is already known to be broken," re-check that the specific property causing the current symptom is the same one named in the entry — if it isn't, diagnose the new symptom fresh, don't reach for the existing fix. (This rule exists because a full ModernDatePicker swap got recommended for a one-character Format string bug, off the back of an entry below about a completely unrelated SelectedDate bug on the same control — see feedback_minimal_fix_before_destructive in memory.)

Blacklisted Controls — Do Not Use, In Any Project

Control Properties

Power Fx

Architecture

YAML File Structure

Unverified — Found in Microsoft Docs, Not Yet Empirically Confirmed In This App

Per user directive 2026-07-06 ("don't just search Microsoft documents, Bible is the Bible... if it's not in the Bible, put it in there"): Microsoft Learn is no longer a default first-resort source for this app family — it has already been the direct source of confirmed-wrong claims here (ModernDatePicker.SelectedDate, ModernCombobox instability). Anything below was found via Learn/WebSearch, not by pasting it into the real editor, and must be moved out of this section into the main body (with the app/screen/date it was confirmed on) the first time it's actually verified working live — or deleted if it turns out wrong.

Guide-Writing


verified-control-reference.md

Verified Control Reference

Verified Control Reference

Last checked: 2026-07-05

Sources:

Full Modern Control Catalogue (2026-07-05)

Microsoft's index page lists 23 modern controls total. Not all are documented in depth below yet — only the ones verified/used or likely to matter for this app family. Full list for reference: Avatar, Badge, Button, Card (preview), Checkbox, Combobox, Copilot answer (preview), Data Grid (preview), Date picker, Dropdown (preview), Header, Info button, Link, Number input, Progress bar, Radio group, Spinner, Slider, Stream (preview), Table (preview), Tabs/tab list, Text, Text input, Toggle. Copilot answer, Data Grid, Table, and Stream skipped below as niche/preview and not yet needed by any app in this family — fetch their pages the same way if a future build needs them.

Baseline Warning

Microsoft's modern controls are in active change. Microsoft Learn notes that modern controls received updated versions from February 2026 with new property names, enum values, and behavior changes. Recheck Microsoft Learn before using a control not listed here or before changing a property convention.

Modern Text Input

Use for single-line, multi-line, password, and search text entry.

Verified key properties:

Do not use:

Modern Combo Box

Use for searchable selection, especially multi-select.

Verified key properties:

Do not use:

Known build note:

Modern Dropdown

Use for a single fixed selection. Microsoft recommends Combo box for multi-select.

Verified key properties:

Do not use:

Modern Toggle

Use for true/false state.

Verified key properties:

Do not use:

Modern Button

Use for real clickable commands.

Common verified properties:

Do not use modern Button as a rounded static card unless the live editor supports all needed view/hover styling. The Training Tracker guide uses classic Button for static rounded panels.

Classic Button As Rounded Panel

Use this established Training Tracker pattern for cards and rounded panels.

Required properties:

Do not use:

Use for lists of records and repeated row layouts.

Verified core properties:

Do not assume:

Classic Icon

Use for action icons where Power Apps provides built-in icon shapes.

Verified core properties:

Do not use:

Classic Edit Form And Attachments

Use classic Edit form when SharePoint attachments are required. The Training Tracker certificate upload depends on the classic Attachments card pattern.

Verified core properties:

Do not replace with:

Modern Progress Bar (Progress@1.1.34)

Displays determinate (Value/Max) or indeterminate (loading) progress. No native ProgressBar control name exists — the real control type is Progress.

Verified key properties:

Full property list (from the properties panel, confirmed 2026-07-05): AccessibleLabel, BasePaletteColor, ContentLanguage, DisplayMode, Height, Indeterminate, Max, OnChange, ProgressColor, Shape, Thickness, Value, Visible, Width, X, Y.

Why this entry exists: built for the Policy Tracker Main screen redesign's readiness bar and Release Pipeline widget — first went in as hand-rolled Rectangle pairs (track + coloured fill) because this control wasn't in this file yet, and its exact syntax couldn't be safely guessed for a full-screen YAML paste. Real control export from the user's own tenant is what unblocked it.

Modern Badge (Badge@0.0.24)

Already in live use in Main.yaml (Version control) — confirmed real formulas, not just docs:

Appearance: ='BadgeCanvas.Appearance'.Tint
ThemeColor: ='BadgeCanvas.ThemeColor'.Success
Shape: ='BadgeCanvas.Shape'.Rounded

Contrast this with Progress bar above: Badge uses typed 'XCanvas.Y'.Z enums, Progress bar uses plain string literals for what look like equivalent style properties (Shape, colour state). The two controls do NOT share a syntax convention — always verify per-control, never assume.

Other properties (per docs, not yet confirmed live): Content, ThemeColor (docs list brand/danger/important/informative/severe/subtle/success/warning — note the real app uses .Success capitalised as a typed enum member, and Tint appears as a real Appearance value that isn't in the docs' filled/outline/ghost/inverted list, so the docs are incomplete here — trust the live export over the prose), BasePaletteColor, standard Font* properties, AccessibleLabel, DisplayMode.

Modern Avatar (ModernAvatar, exact version unconfirmed)

Not yet used in any app in this family — worth using instead of hand-rolled initials-circle Labels (the pattern currently used for owner avatars on Policy Tracker's Main screen cards).

Verified key properties (per docs, not live-confirmed):

Get a live export before using in a full-screen paste — exact enum syntax (typed vs. string literal) unconfirmed, same caveat as everything below not yet used live in this app family.

Modern Checkbox

Same trap as Modern Toggle above:

Modern Date Picker

Modern Number Input (ModernNumberInput@1.0.0)

Modern Radio Group (ModernRadio@1.0.0)

Modern Slider (ModernSlider@1.0.0)

This control is the single clearest illustration of the Baseline Warning at the top of this file — same control name, completely different formula syntax (string → typed enum, input/output property swap) between versions. Never trust an old example without checking the current docs' "Recent updates" section first.

Modern Spinner

For loading states (page/table loading), distinct from Progress Bar's indeterminate mode — Spinner has no track/value concept at all, it's a pure animated icon + optional label.

Modern Tab List (ModernTabList@1.0.0)

Directly relevant to this app family — this is the real control for what Policy Tracker's Main_1 redesign hand-built as a GroupContainer + Classic/Button row (the segmented dashboard tab strip). Worth revisiting as a real upgrade once its exact live syntax is confirmed.

Modern Header

A prebuilt app-header control (logo + title + user photo). Deliberately NOT used as a replacement for this app family's fully custom top bars — it explicitly does not support colour customisation or app navigation, and doesn't auto-replicate across screens (must be added per screen manually). Documented here so it isn't reached for by mistake when a "modern header" is wanted; the custom conTopBar/conHeader pattern already used across Main/ViewItem/Main_1/ViewItem_1 remains the right approach for this app family.

Modern Info Button (ModernInformationButton@1.0.0)

Inline "?" help icon that opens a flyout on click/hover — good candidate for field-level hint text instead of a separate hidden lblHint Label pattern already used elsewhere in this app family (e.g. lblHighPriorityHint in ViewItem.yaml).

Modern Text (ModernText@1.0.0)

Already in live use throughout Main.yaml (the Published/ReadyForRelease/ApprovedBy/LinkCount pill labels on release cards) — confirmed real control, not just docs.

Modern Card (ModernCard@1.0.0, preview)

Preview control — treat with extra suspicion in a full-screen YAML paste. The prose docs and the code examples on the same page don't even agree with each other: prose says the image-position property is ImagePosition, but every YAML example on the page uses ImagePlacement instead. That kind of doc/example mismatch is exactly the sort of thing that has broken pastes in this app before — get a live export before trusting either name.


powerapps-control-defaults.md

Control Defaults (Fresh-Control Lab)

Power Apps Control Defaults

Last checked: 2026-06-20

This reference is generated from fresh controls inserted into the live Power Apps editor without manual edits.

Source Evidence

Interpretation Rules

Quick Summary

Source Control Example Variant/Layout Serialized properties excluding X/Y
Classic fresh-control lab Label@2.5.1 Label3 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'
Classic fresh-control lab Classic/Button@2.2.0 Button6 - BorderColor -> =ColorFade(Self.Fill, -15%); Color -> =RGBA(255, 255, 255, 1); DisabledBorderColor -> =RGBA(166, 166, 166, 1); 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%); PressedBorderColor -> =Self.Fill; PressedColor -> =Self.Fill; PressedFill -> =Self.Color
Classic fresh-control lab Gallery@2.15.0 Gallery4 Vertical BorderColor -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Gallery@2.15.0 Gallery5 Horizontal BorderColor -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Gallery@2.15.0 Gallery6 VariableHeight BorderColor -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Form@2.4.4 Form2 Classic, Vertical BorderColor -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab FormViewer@2.3.4 FormViewer1 Vertical BorderColor -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Classic/TextInput@2.3.2 TextInput3 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'; HoverBorderColor -> =RGBA(0, 18, 107, 1); HoverFill -> =RGBA(186, 202, 226, 1)
Classic fresh-control lab Classic/DropDown@2.3.1 Dropdown1 - BorderColor -> =RGBA(0, 18, 107, 1); ChevronBackground -> =RGBA(56, 96, 178, 1); ChevronFill -> =RGBA(255, 255, 255, 1); ChevronHoverBackground -> =ColorFade(RGBA(56, 96, 178, 1), -20%); ChevronHoverFill -> =RGBA(255, 255, 255, 1); Font -> =Font.'Open Sans'; HoverFill -> =RGBA(186, 202, 226, 1); Items.Value -> =Value; PressedColor -> =RGBA(255, 255, 255, 1); PressedFill -> =RGBA(0, 18, 107, 1); SelectionColor -> =RGBA(255, 255, 255, 1); SelectionFill -> =RGBA(56, 96, 178, 1)
Classic fresh-control lab Classic/ComboBox@2.4.0 ComboBox1 - BorderColor -> =RGBA(0, 18, 107, 1); ChevronBackground -> =RGBA(56, 96, 178, 1); ChevronFill -> =RGBA(255, 255, 255, 1); ChevronHoverBackground -> =ColorFade(RGBA(56, 96, 178, 1), -20%); ChevronHoverFill -> =RGBA(255, 255, 255, 1); Font -> =Font.'Open Sans'; HoverFill -> =RGBA(186, 202, 226, 1); PressedColor -> =RGBA(255, 255, 255, 1); PressedFill -> =RGBA(0, 18, 107, 1); SelectionColor -> =RGBA(255, 255, 255, 1); SelectionFill -> =RGBA(56, 96, 178, 1)
Classic fresh-control lab DataTable@1.0.3 DataTable1 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'; HeadingColor -> =RGBA(255, 255, 255, 1); HeadingFill -> =RGBA(56, 96, 178, 1); HeadingFont -> =Font.'Open Sans'; HoverFill -> =RGBA(186, 202, 226, .2); SelectedFill -> =RGBA(56, 96, 178, .2)
Classic fresh-control lab Classic/DatePicker@2.6.0 DatePicker2 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'; IconBackground -> =RGBA(56, 96, 178, 1); IconFill -> =RGBA(255, 255, 255, 1)
Classic fresh-control lab Classic/CheckBox@2.1.0 Checkbox1 - BorderColor -> =RGBA(0, 18, 107, 1); CheckboxBorderColor -> =RGBA(0, 18, 107, 1); CheckmarkFill -> =RGBA(0, 0, 0, 1); Font -> =Font.'Open Sans'; HoverColor -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Classic/Radio@2.3.0 Radio2 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'; HoverColor -> =RGBA(0, 18, 107, 1); Items.Value -> =Value; RadioBorderColor -> =RGBA(0, 18, 107, 1); RadioSelectionFill -> =RGBA(0, 0, 0, 1)
Classic fresh-control lab Classic/Toggle@2.1.0 Toggle2 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'; TrueFill -> =RGBA(56, 96, 178, 1)
Classic fresh-control lab Classic/Slider@2.1.0 Slider2 - BorderColor -> =RGBA(0, 18, 107, 1); ValueFill -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Rating@2.1.0 Rating1 - BorderColor -> =RGBA(0, 18, 107, 1); RatingFill -> =RGBA(0, 18, 107, 1)
Classic fresh-control lab Classic/Icon@2.5.0 Icon2 - BorderColor -> =RGBA(0, 18, 107, 1); Color -> =RGBA(0, 18, 107, 1); Icon -> =Icon.Alarm
Modern fresh-control lab GroupContainer@1.5.0 Container1 ManualLayout none beyond placement
Modern fresh-control lab GroupContainer@1.5.0 Container2 AutoLayout LayoutAlignItems -> =LayoutAlignItems.Center; LayoutDirection -> =LayoutDirection.Horizontal; PaddingBottom -> =8; PaddingLeft -> =8; PaddingRight -> =8; PaddingTop -> =8
Modern fresh-control lab GroupContainer@1.5.0 Container3 AutoLayout LayoutAlignItems -> =LayoutAlignItems.Center; LayoutDirection -> =LayoutDirection.Vertical; LayoutMinHeight -> =16; LayoutMinWidth -> =16; PaddingBottom -> =8; PaddingLeft -> =8; PaddingRight -> =8; PaddingTop -> =8
Modern fresh-control lab GroupContainer@1.5.0 Container4 GridLayout LayoutMinHeight -> =16; LayoutMinWidth -> =16
Modern fresh-control lab Gallery@2.15.0 Gallery1 BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0 BorderColor -> =RGBA(0, 18, 107, 1); Height -> =168; Width -> =468
Modern fresh-control lab Image@2.2.3 Image1 - BorderColor -> =RGBA(0, 18, 107, 1); Height -> =72; OnSelect -> =Select(Parent); RadiusBottomLeft -> =8; RadiusBottomRight -> =8; RadiusTopLeft -> =8; RadiusTopRight -> =8; Width -> =72
Modern fresh-control lab Label@2.5.1 Title1 - BorderColor -> =RGBA(0, 0, 0, 1); Color -> =RGBA(50, 49, 48, 1); Font -> =Font.'Open Sans'; FontWeight -> =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal); Height -> =Self.Size * 1.8; OnSelect -> =Select(Parent); PaddingBottom -> =0; PaddingLeft -> =0; PaddingRight -> =0; PaddingTop -> =0; Size -> =14; Text -> =ThisItem.SampleHeading; VerticalAlign -> =VerticalAlign.Top; Width -> =Parent.TemplateWidth - 173
Modern fresh-control lab Label@2.5.1 Subtitle1 - BorderColor -> =RGBA(0, 0, 0, 1); Font -> =Font.'Open Sans'; FontWeight -> =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal); Height -> =Self.Size * 1.8; OnSelect -> =Select(Parent); PaddingBottom -> =0; PaddingLeft -> =0; PaddingRight -> =0; PaddingTop -> =0; Size -> =12; Text -> =ThisItem.SampleText; VerticalAlign -> =VerticalAlign.Top; Width -> =Title1.Width
Modern fresh-control lab Classic/Icon@2.5.0 NextArrow1 - AccessibleLabel -> =Self.Tooltip; BorderColor -> =RGBA(0, 0, 0, 1); Color -> =RGBA(166, 166, 166, 1); DisabledBorderColor -> =RGBA(56, 56, 56, 1); DisabledColor -> =RGBA(119, 119, 119, 1); Height -> =50; Icon -> =Icon.ChevronRight; OnSelect -> =Select(Parent); PaddingBottom -> =16; PaddingLeft -> =16; PaddingRight -> =16; PaddingTop -> =16; Tooltip -> ="View item details"; Width -> =50
Modern fresh-control lab Rectangle@2.3.0 Separator1 - BorderColor -> =RGBA(0, 18, 107, 1); Fill -> =RGBA(255, 255, 255, 1); Height -> =8; OnSelect -> =Select(Parent); Width -> =Parent.TemplateWidth
Modern fresh-control lab Rectangle@2.3.0 Rectangle1 - BorderColor -> =RGBA(0, 18, 107, 1); Fill -> =RGBA(0, 18, 107, 1); Height -> =Parent.TemplateHeight - Separator1.Height; OnSelect -> =Select(Parent); Visible -> =ThisItem.IsSelected; Width -> =1
Modern fresh-control lab Gallery@2.15.0 Gallery2 BrowseLayout_Horizontal_TwoTextOneImageVariant_ver5.0 BorderColor -> =RGBA(0, 18, 107, 1); Height -> =168; Width -> =468
Modern fresh-control lab Image@2.2.3 Image2 - BorderColor -> =RGBA(0, 18, 107, 1); Height -> =72; ImagePosition -> =ImagePosition.Fill; OnSelect -> =Select(Parent); RadiusBottomLeft -> =8; RadiusBottomRight -> =8; RadiusTopLeft -> =8; RadiusTopRight -> =8; Width -> =Parent.TemplateWidth - 32
Modern fresh-control lab Label@2.5.1 Title2 - BorderColor -> =RGBA(0, 0, 0, 1); Color -> =RGBA(50, 49, 48, 1); Font -> =Font.'Open Sans'; FontWeight -> =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal); Height -> =Self.Size * 1.8; OnSelect -> =Select(Parent); PaddingBottom -> =0; PaddingLeft -> =0; PaddingRight -> =0; PaddingTop -> =0; Size -> =14; Text -> =ThisItem.SampleHeading; VerticalAlign -> =VerticalAlign.Top; Width -> =Parent.TemplateWidth - 64
Modern fresh-control lab Label@2.5.1 Subtitle2 - BorderColor -> =RGBA(0, 0, 0, 1); Font -> =Font.'Open Sans'; FontWeight -> =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal); Height -> =Self.Size * 1.8; OnSelect -> =Select(Parent); PaddingBottom -> =0; PaddingLeft -> =0; PaddingRight -> =0; PaddingTop -> =0; Size -> =12; Text -> =ThisItem.SampleText; VerticalAlign -> =VerticalAlign.Top; Width -> =Title2.Width
Modern fresh-control lab Gallery@2.15.0 Gallery3 BrowseLayout_Flexible_SocialFeed_ver5.0 BorderColor -> =RGBA(0, 18, 107, 1); Height -> =168; Width -> =468
Modern fresh-control lab Image@2.2.3 ProfileImage1 - BorderColor -> =RGBA(0, 18, 107, 1); Height -> =12; ImagePosition -> =ImagePosition.Fill; OnSelect -> =Select(Parent); RadiusBottomLeft -> =8; RadiusBottomRight -> =8; RadiusTopLeft -> =8; RadiusTopRight -> =8; Width -> =64
Modern fresh-control lab Label@2.5.1 Title3 - BorderColor -> =RGBA(0, 0, 0, 1); Color -> =RGBA(50, 49, 48, 1); Font -> =Font.'Open Sans'; FontWeight -> =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal); Height -> =12; OnSelect -> =Select(Parent); PaddingBottom -> =0; PaddingLeft -> =0; PaddingRight -> =0; PaddingTop -> =0; Size -> =14; Text -> =ThisItem.SampleHeading; VerticalAlign -> =VerticalAlign.Top; Width -> =Parent.TemplateWidth - 112
Modern fresh-control lab Image@2.2.3 Image3 - BorderColor -> =RGBA(0, 18, 107, 1); Height -> =Min(Self.Width, Parent.TemplateHeight - 180); ImagePosition -> =ImagePosition.Fill; OnSelect -> =Select(Parent); RadiusBottomLeft -> =8; RadiusBottomRight -> =8; RadiusTopLeft -> =8; RadiusTopRight -> =8; Width -> =Parent.TemplateWidth - 32
Modern fresh-control lab Label@2.5.1 Body1 - AutoHeight -> =true; BorderColor -> =RGBA(0, 0, 0, 1); Font -> =Font.'Open Sans'; FontWeight -> =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal); Height -> =12; OnSelect -> =Select(Parent); PaddingBottom -> =0; PaddingLeft -> =0; PaddingRight -> =0; PaddingTop -> =0; Size -> =12; Text -> =ThisItem.SampleText; VerticalAlign -> =VerticalAlign.Top; Width -> =Parent.TemplateWidth - 32
Modern fresh-control lab Header@0.0.44 Header1 - none beyond placement
Modern fresh-control lab Form@2.4.4 Form1 Vertical BorderColor -> =RGBA(0, 18, 107, 1)
Modern fresh-control lab ModernButton@1.0.0 Button5 - none beyond placement
Modern fresh-control lab ModernTextInput@1.1.0 TextInput2 - none beyond placement
Modern fresh-control lab ModernNumberInput@1.1.0 NumberInput1 - none beyond placement
Modern fresh-control lab ModernDropdown@1.0.1 modernDropdown2 - none beyond placement
Modern fresh-control lab ModernCombobox@1.1.0 Combobox3 - none beyond placement
Modern fresh-control lab ModernDatePicker@1.0.0 DatePicker1 - none beyond placement
Modern fresh-control lab CheckBox@0.0.30 CheckboxCanvas1 - none beyond placement
Modern fresh-control lab ModernRadio@1.0.0 Radio1 - none beyond placement
Modern fresh-control lab Toggle@1.1.5 Toggle1 - none beyond placement
Modern fresh-control lab PenInput@2.3.0 PenInput1 - BorderColor -> =RGBA(0, 18, 107, 1)
Modern fresh-control lab ModernTabList@1.0.0 TabList1 - none beyond placement
Modern fresh-control lab ModernSlider@1.0.0 Slider1 - none beyond placement
Modern fresh-control lab ListBox@2.2.0 ListBox1 - BorderColor -> =RGBA(0, 18, 107, 1); Font -> =Font.'Open Sans'; HoverFill -> =RGBA(186, 202, 226, 1); Items.Value -> =Value; PressedColor -> =RGBA(255, 255, 255, 1); PressedFill -> =RGBA(0, 18, 107, 1); SelectionColor -> =RGBA(255, 255, 255, 1); SelectionFill -> =RGBA(56, 96, 178, 1)
Modern fresh-control lab RichTextEditor@2.7.0 RichTextEditor1 - BorderColor -> =RGBA(0, 18, 107, 1)
Modern fresh-control lab ModernText@1.0.0 Text1 - none beyond placement
Modern fresh-control lab ModernInformationButton@1.0.0 InformationButton1 - none beyond placement
Modern fresh-control lab ModernIcon@1.1.0 Icon1 - none beyond placement
Modern fresh-control lab Avatar@1.0.40 Avatar1 - none beyond placement
Modern fresh-control lab Badge@0.0.24 BadgeCanvas1 - none beyond placement
Modern fresh-control lab ModernCard@1.2.0 Card1 - none beyond placement
Modern fresh-control lab Progress@1.1.34 Progress1 - none beyond placement
Modern fresh-control lab Spinner@1.4.6 Spinner1 - none beyond placement
Modern fresh-control lab ModernLink@1.0.0 Link1 - none beyond placement
Modern fresh-control lab Timer@2.1.0 Timer1 - 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%); 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%); PressedBorderColor -> =Self.Fill; PressedColor -> =Self.Fill; PressedFill -> =Self.Color
Modern fresh-control lab HtmlViewer@2.1.0 HtmlText1 - Font -> =Font.'Open Sans'
Modern fresh-control lab Image@2.2.3 Image4 - BorderColor -> =RGBA(0, 18, 107, 1)
Modern fresh-control lab PDFViewer@2.5.0 PdfViewer1 - none beyond placement

Full Parsed Details

Classic fresh-control lab

Label3 - Label@2.5.1

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
X =40 placement from lab insert order; ignore as default evidence
Y =40 placement from lab insert order; ignore as default evidence

Button6 - Classic/Button@2.2.0

Property Observed fresh value Note
BorderColor =ColorFade(Self.Fill, -15%)
Color =RGBA(255, 255, 255, 1)
DisabledBorderColor =RGBA(166, 166, 166, 1)
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%)
PressedBorderColor =Self.Fill
PressedColor =Self.Fill
PressedFill =Self.Color
X =60 placement from lab insert order; ignore as default evidence
Y =60 placement from lab insert order; ignore as default evidence

Gallery4 - Gallery@2.15.0 - variant Vertical

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =80 placement from lab insert order; ignore as default evidence
Y =80 placement from lab insert order; ignore as default evidence

Gallery5 - Gallery@2.15.0 - variant Horizontal

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =100 placement from lab insert order; ignore as default evidence
Y =100 placement from lab insert order; ignore as default evidence

Gallery6 - Gallery@2.15.0 - variant VariableHeight

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =120 placement from lab insert order; ignore as default evidence
Y =120 placement from lab insert order; ignore as default evidence

Form2 - Form@2.4.4 - variant Classic - layout Vertical

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =140 placement from lab insert order; ignore as default evidence
Y =140 placement from lab insert order; ignore as default evidence

FormViewer1 - FormViewer@2.3.4 - layout Vertical

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =160 placement from lab insert order; ignore as default evidence
Y =160 placement from lab insert order; ignore as default evidence

TextInput3 - Classic/TextInput@2.3.2

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
HoverBorderColor =RGBA(0, 18, 107, 1)
HoverFill =RGBA(186, 202, 226, 1)
X =180 placement from lab insert order; ignore as default evidence
Y =180 placement from lab insert order; ignore as default evidence
Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
ChevronBackground =RGBA(56, 96, 178, 1)
ChevronFill =RGBA(255, 255, 255, 1)
ChevronHoverBackground =ColorFade(RGBA(56, 96, 178, 1), -20%)
ChevronHoverFill =RGBA(255, 255, 255, 1)
Font =Font.'Open Sans'
HoverFill =RGBA(186, 202, 226, 1)
Items.Value =Value
PressedColor =RGBA(255, 255, 255, 1)
PressedFill =RGBA(0, 18, 107, 1)
SelectionColor =RGBA(255, 255, 255, 1)
SelectionFill =RGBA(56, 96, 178, 1)
X =200 placement from lab insert order; ignore as default evidence
Y =200 placement from lab insert order; ignore as default evidence

ComboBox1 - Classic/ComboBox@2.4.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
ChevronBackground =RGBA(56, 96, 178, 1)
ChevronFill =RGBA(255, 255, 255, 1)
ChevronHoverBackground =ColorFade(RGBA(56, 96, 178, 1), -20%)
ChevronHoverFill =RGBA(255, 255, 255, 1)
Font =Font.'Open Sans'
HoverFill =RGBA(186, 202, 226, 1)
PressedColor =RGBA(255, 255, 255, 1)
PressedFill =RGBA(0, 18, 107, 1)
SelectionColor =RGBA(255, 255, 255, 1)
SelectionFill =RGBA(56, 96, 178, 1)
X =220 placement from lab insert order; ignore as default evidence
Y =220 placement from lab insert order; ignore as default evidence

DataTable1 - DataTable@1.0.3

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
HeadingColor =RGBA(255, 255, 255, 1)
HeadingFill =RGBA(56, 96, 178, 1)
HeadingFont =Font.'Open Sans'
HoverFill =RGBA(186, 202, 226, .2)
SelectedFill =RGBA(56, 96, 178, .2)
X =240 placement from lab insert order; ignore as default evidence
Y =240 placement from lab insert order; ignore as default evidence

DatePicker2 - Classic/DatePicker@2.6.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
IconBackground =RGBA(56, 96, 178, 1)
IconFill =RGBA(255, 255, 255, 1)
X =260 placement from lab insert order; ignore as default evidence
Y =260 placement from lab insert order; ignore as default evidence

Checkbox1 - Classic/CheckBox@2.1.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
CheckboxBorderColor =RGBA(0, 18, 107, 1)
CheckmarkFill =RGBA(0, 0, 0, 1)
Font =Font.'Open Sans'
HoverColor =RGBA(0, 18, 107, 1)
X =280 placement from lab insert order; ignore as default evidence
Y =280 placement from lab insert order; ignore as default evidence

Radio2 - Classic/Radio@2.3.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
HoverColor =RGBA(0, 18, 107, 1)
Items.Value =Value
RadioBorderColor =RGBA(0, 18, 107, 1)
RadioSelectionFill =RGBA(0, 0, 0, 1)
X =300 placement from lab insert order; ignore as default evidence
Y =300 placement from lab insert order; ignore as default evidence

Toggle2 - Classic/Toggle@2.1.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
TrueFill =RGBA(56, 96, 178, 1)
X =320 placement from lab insert order; ignore as default evidence
Y =320 placement from lab insert order; ignore as default evidence

Slider2 - Classic/Slider@2.1.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
ValueFill =RGBA(0, 18, 107, 1)
X =340 placement from lab insert order; ignore as default evidence
Y =340 placement from lab insert order; ignore as default evidence

Rating1 - Rating@2.1.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
RatingFill =RGBA(0, 18, 107, 1)
X =360 placement from lab insert order; ignore as default evidence
Y =360 placement from lab insert order; ignore as default evidence

Icon2 - Classic/Icon@2.5.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Color =RGBA(0, 18, 107, 1)
Icon =Icon.Alarm
X =380 placement from lab insert order; ignore as default evidence
Y =380 placement from lab insert order; ignore as default evidence

Modern fresh-control lab

Container1 - GroupContainer@1.5.0 - variant ManualLayout

Property Observed fresh value Note
X =40 placement from lab insert order; ignore as default evidence
Y =40 placement from lab insert order; ignore as default evidence

Container2 - GroupContainer@1.5.0 - variant AutoLayout

Property Observed fresh value Note
LayoutAlignItems =LayoutAlignItems.Center
LayoutDirection =LayoutDirection.Horizontal
PaddingBottom =8
PaddingLeft =8
PaddingRight =8
PaddingTop =8

Container3 - GroupContainer@1.5.0 - variant AutoLayout

Property Observed fresh value Note
LayoutAlignItems =LayoutAlignItems.Center
LayoutDirection =LayoutDirection.Vertical
LayoutMinHeight =16
LayoutMinWidth =16
PaddingBottom =8
PaddingLeft =8
PaddingRight =8
PaddingTop =8

Container4 - GroupContainer@1.5.0 - variant GridLayout

Property Observed fresh value Note
LayoutMinHeight =16
LayoutMinWidth =16

Gallery1 - Gallery@2.15.0 - variant BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =168
Width =468
X =40 placement from lab insert order; ignore as default evidence
Y =40 placement from lab insert order; ignore as default evidence

Image1 - Image@2.2.3

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =72
OnSelect =Select(Parent)
RadiusBottomLeft =8
RadiusBottomRight =8
RadiusTopLeft =8
RadiusTopRight =8
Width =72
Y =(Parent.TemplateHeight / 2) - (Self.Height / 2) placement from lab insert order; ignore as default evidence

Title1 - Label@2.5.1

Property Observed fresh value Note
BorderColor =RGBA(0, 0, 0, 1)
Color =RGBA(50, 49, 48, 1)
Font =Font.'Open Sans'
FontWeight =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height =Self.Size * 1.8
OnSelect =Select(Parent)
PaddingBottom =0
PaddingLeft =0
PaddingRight =0
PaddingTop =0
Size =14
Text =ThisItem.SampleHeading
VerticalAlign =VerticalAlign.Top
Width =Parent.TemplateWidth - 173
X =1 placement from lab insert order; ignore as default evidence
Y =(Parent.TemplateHeight - (Self.Size * 1.8 + Subtitle1.Size * 1.8)) / 2 placement from lab insert order; ignore as default evidence

Subtitle1 - Label@2.5.1

Property Observed fresh value Note
BorderColor =RGBA(0, 0, 0, 1)
Font =Font.'Open Sans'
FontWeight =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height =Self.Size * 1.8
OnSelect =Select(Parent)
PaddingBottom =0
PaddingLeft =0
PaddingRight =0
PaddingTop =0
Size =12
Text =ThisItem.SampleText
VerticalAlign =VerticalAlign.Top
Width =Title1.Width
X =1 placement from lab insert order; ignore as default evidence
Y =Title1.Y + Title1.Height placement from lab insert order; ignore as default evidence

NextArrow1 - Classic/Icon@2.5.0

Property Observed fresh value Note
AccessibleLabel =Self.Tooltip
BorderColor =RGBA(0, 0, 0, 1)
Color =RGBA(166, 166, 166, 1)
DisabledBorderColor =RGBA(56, 56, 56, 1)
DisabledColor =RGBA(119, 119, 119, 1)
Height =50
Icon =Icon.ChevronRight
OnSelect =Select(Parent)
PaddingBottom =16
PaddingLeft =16
PaddingRight =16
PaddingTop =16
Tooltip ="View item details"
Width =50
Y =(Parent.TemplateHeight / 2) - (Self.Height / 2) placement from lab insert order; ignore as default evidence

Separator1 - Rectangle@2.3.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Fill =RGBA(255, 255, 255, 1)
Height =8
OnSelect =Select(Parent)
Width =Parent.TemplateWidth
Y =Parent.TemplateHeight - Self.Height placement from lab insert order; ignore as default evidence

Rectangle1 - Rectangle@2.3.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Fill =RGBA(0, 18, 107, 1)
Height =Parent.TemplateHeight - Separator1.Height
OnSelect =Select(Parent)
Visible =ThisItem.IsSelected
Width =1

Gallery2 - Gallery@2.15.0 - variant BrowseLayout_Horizontal_TwoTextOneImageVariant_ver5.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =168
Width =468
X =40 placement from lab insert order; ignore as default evidence
Y =40 placement from lab insert order; ignore as default evidence

Image2 - Image@2.2.3

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =72
ImagePosition =ImagePosition.Fill
OnSelect =Select(Parent)
RadiusBottomLeft =8
RadiusBottomRight =8
RadiusTopLeft =8
RadiusTopRight =8
Width =Parent.TemplateWidth - 32
X =(Parent.TemplateWidth / 2) - (Self.Width / 2) placement from lab insert order; ignore as default evidence

Title2 - Label@2.5.1

Property Observed fresh value Note
BorderColor =RGBA(0, 0, 0, 1)
Color =RGBA(50, 49, 48, 1)
Font =Font.'Open Sans'
FontWeight =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height =Self.Size * 1.8
OnSelect =Select(Parent)
PaddingBottom =0
PaddingLeft =0
PaddingRight =0
PaddingTop =0
Size =14
Text =ThisItem.SampleHeading
VerticalAlign =VerticalAlign.Top
Width =Parent.TemplateWidth - 64
X =1 placement from lab insert order; ignore as default evidence
Y =47 placement from lab insert order; ignore as default evidence

Subtitle2 - Label@2.5.1

Property Observed fresh value Note
BorderColor =RGBA(0, 0, 0, 1)
Font =Font.'Open Sans'
FontWeight =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height =Self.Size * 1.8
OnSelect =Select(Parent)
PaddingBottom =0
PaddingLeft =0
PaddingRight =0
PaddingTop =0
Size =12
Text =ThisItem.SampleText
VerticalAlign =VerticalAlign.Top
Width =Title2.Width
X =1 placement from lab insert order; ignore as default evidence
Y =51 placement from lab insert order; ignore as default evidence

Gallery3 - Gallery@2.15.0 - variant BrowseLayout_Flexible_SocialFeed_ver5.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =168
Width =468
X =40 placement from lab insert order; ignore as default evidence
Y =40 placement from lab insert order; ignore as default evidence

ProfileImage1 - Image@2.2.3

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =12
ImagePosition =ImagePosition.Fill
OnSelect =Select(Parent)
RadiusBottomLeft =8
RadiusBottomRight =8
RadiusTopLeft =8
RadiusTopRight =8
Width =64

Title3 - Label@2.5.1

Property Observed fresh value Note
BorderColor =RGBA(0, 0, 0, 1)
Color =RGBA(50, 49, 48, 1)
Font =Font.'Open Sans'
FontWeight =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height =12
OnSelect =Select(Parent)
PaddingBottom =0
PaddingLeft =0
PaddingRight =0
PaddingTop =0
Size =14
Text =ThisItem.SampleHeading
VerticalAlign =VerticalAlign.Top
Width =Parent.TemplateWidth - 112
X =1 placement from lab insert order; ignore as default evidence

Image3 - Image@2.2.3

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Height =Min(Self.Width, Parent.TemplateHeight - 180)
ImagePosition =ImagePosition.Fill
OnSelect =Select(Parent)
RadiusBottomLeft =8
RadiusBottomRight =8
RadiusTopLeft =8
RadiusTopRight =8
Width =Parent.TemplateWidth - 32
X =1 placement from lab insert order; ignore as default evidence
Y =12 placement from lab insert order; ignore as default evidence

Body1 - Label@2.5.1

Property Observed fresh value Note
AutoHeight =true
BorderColor =RGBA(0, 0, 0, 1)
Font =Font.'Open Sans'
FontWeight =If(ThisItem.IsSelected, FontWeight.Semibold, FontWeight.Normal)
Height =12
OnSelect =Select(Parent)
PaddingBottom =0
PaddingLeft =0
PaddingRight =0
PaddingTop =0
Size =12
Text =ThisItem.SampleText
VerticalAlign =VerticalAlign.Top
Width =Parent.TemplateWidth - 32
X =1 placement from lab insert order; ignore as default evidence

Header1 - Header@0.0.44

Property Observed fresh value Note
X =40 placement from lab insert order; ignore as default evidence
Y =40 placement from lab insert order; ignore as default evidence

Form1 - Form@2.4.4 - layout Vertical

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =60 placement from lab insert order; ignore as default evidence
Y =60 placement from lab insert order; ignore as default evidence

Button5 - ModernButton@1.0.0

Property Observed fresh value Note
X =80 placement from lab insert order; ignore as default evidence
Y =80 placement from lab insert order; ignore as default evidence

TextInput2 - ModernTextInput@1.1.0

Property Observed fresh value Note
X =100 placement from lab insert order; ignore as default evidence
Y =100 placement from lab insert order; ignore as default evidence

NumberInput1 - ModernNumberInput@1.1.0

Property Observed fresh value Note
X =120 placement from lab insert order; ignore as default evidence
Y =120 placement from lab insert order; ignore as default evidence

modernDropdown2 - ModernDropdown@1.0.1

Property Observed fresh value Note
X =140 placement from lab insert order; ignore as default evidence
Y =140 placement from lab insert order; ignore as default evidence

Combobox3 - ModernCombobox@1.1.0

Property Observed fresh value Note
X =160 placement from lab insert order; ignore as default evidence
Y =160 placement from lab insert order; ignore as default evidence

DatePicker1 - ModernDatePicker@1.0.0

Property Observed fresh value Note
X =180 placement from lab insert order; ignore as default evidence
Y =180 placement from lab insert order; ignore as default evidence

CheckboxCanvas1 - CheckBox@0.0.30

Property Observed fresh value Note
X =200 placement from lab insert order; ignore as default evidence
Y =200 placement from lab insert order; ignore as default evidence

Radio1 - ModernRadio@1.0.0

Property Observed fresh value Note
X =220 placement from lab insert order; ignore as default evidence
Y =220 placement from lab insert order; ignore as default evidence

Toggle1 - Toggle@1.1.5

Property Observed fresh value Note
X =240 placement from lab insert order; ignore as default evidence
Y =240 placement from lab insert order; ignore as default evidence

PenInput1 - PenInput@2.3.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =260 placement from lab insert order; ignore as default evidence
Y =260 placement from lab insert order; ignore as default evidence

TabList1 - ModernTabList@1.0.0

Property Observed fresh value Note
X =280 placement from lab insert order; ignore as default evidence
Y =280 placement from lab insert order; ignore as default evidence

Slider1 - ModernSlider@1.0.0

Property Observed fresh value Note
X =300 placement from lab insert order; ignore as default evidence
Y =300 placement from lab insert order; ignore as default evidence

ListBox1 - ListBox@2.2.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
Font =Font.'Open Sans'
HoverFill =RGBA(186, 202, 226, 1)
Items.Value =Value
PressedColor =RGBA(255, 255, 255, 1)
PressedFill =RGBA(0, 18, 107, 1)
SelectionColor =RGBA(255, 255, 255, 1)
SelectionFill =RGBA(56, 96, 178, 1)
X =320 placement from lab insert order; ignore as default evidence
Y =320 placement from lab insert order; ignore as default evidence

RichTextEditor1 - RichTextEditor@2.7.0

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =340 placement from lab insert order; ignore as default evidence
Y =340 placement from lab insert order; ignore as default evidence

Text1 - ModernText@1.0.0

Property Observed fresh value Note
X =360 placement from lab insert order; ignore as default evidence
Y =360 placement from lab insert order; ignore as default evidence

InformationButton1 - ModernInformationButton@1.0.0

Property Observed fresh value Note
X =380 placement from lab insert order; ignore as default evidence
Y =380 placement from lab insert order; ignore as default evidence

Icon1 - ModernIcon@1.1.0

Property Observed fresh value Note
X =400 placement from lab insert order; ignore as default evidence
Y =400 placement from lab insert order; ignore as default evidence

Avatar1 - Avatar@1.0.40

Property Observed fresh value Note
X =420 placement from lab insert order; ignore as default evidence
Y =420 placement from lab insert order; ignore as default evidence

BadgeCanvas1 - Badge@0.0.24

Property Observed fresh value Note
X =440 placement from lab insert order; ignore as default evidence
Y =440 placement from lab insert order; ignore as default evidence

Card1 - ModernCard@1.2.0

Property Observed fresh value Note
X =460 placement from lab insert order; ignore as default evidence
Y =460 placement from lab insert order; ignore as default evidence

Progress1 - Progress@1.1.34

Property Observed fresh value Note
X =480 placement from lab insert order; ignore as default evidence
Y =480 placement from lab insert order; ignore as default evidence

Spinner1 - Spinner@1.4.6

Property Observed fresh value Note
X =500 placement from lab insert order; ignore as default evidence
Y =500 placement from lab insert order; ignore as default evidence

Link1 - ModernLink@1.0.0

Property Observed fresh value Note
X =520 placement from lab insert order; ignore as default evidence
Y =520 placement from lab insert order; ignore as default evidence

Timer1 - Timer@2.1.0

Property Observed fresh value Note
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%)
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%)
PressedBorderColor =Self.Fill
PressedColor =Self.Fill
PressedFill =Self.Color
X =540 placement from lab insert order; ignore as default evidence
Y =540 placement from lab insert order; ignore as default evidence

HtmlText1 - HtmlViewer@2.1.0

Property Observed fresh value Note
Font =Font.'Open Sans'
X =560 placement from lab insert order; ignore as default evidence
Y =560 placement from lab insert order; ignore as default evidence

Image4 - Image@2.2.3

Property Observed fresh value Note
BorderColor =RGBA(0, 18, 107, 1)
X =580 placement from lab insert order; ignore as default evidence
Y =580 placement from lab insert order; ignore as default evidence

PdfViewer1 - PDFViewer@2.5.0

Property Observed fresh value Note
X =600 placement from lab insert order; ignore as default evidence
Y =288 placement from lab insert order; ignore as default evidence

external-research-notes.md

External Research: ChatGPT Property Matrix (context + precedence rule)

External Research: ChatGPT Control Property Matrix (2026-07-05)

Three files landed in reference/external/ from a separate ChatGPT research pass: powerapps_canvas_control_bible_v0_1.md (curated summary, ~870 lines), powerapps_canvas_control_property_matrix_v0_1.csv (raw property matrix, 412 rows), and powerapps_canvas_control_bible_schema_v0_1.json (the CSV's column schema).

What this is good for

Much broader property-name coverage than this Bible had compiled by hand — 412 property rows across every Modern and Classic control Microsoft documents, including controls this project hasn't touched yet (e.g. it flagged a Rating modern control that was missing from CONTROL_VERIFICATION_CHECKLIST.md in the Policy Tracker repo — added there now). Use it as a property-name dictionary: if you're not sure whether a property exists on a control, check here first before guessing.

What this is NOT

It is honest about its own limits (its own intro says exactly this): it's derived from Microsoft's documentation pages, the same source class that has been wrong or incomplete multiple times in this project's actual live builds — ModernDatePicker. SelectedDate not being settable, ModernCombobox.Reset() clearing the selection instead of restoring it, Required not suppressing the clear-X on ModernDropdown, GroupContainer.DropShadow defaulting on. None of those specific facts would have been caught by more thorough documentation scraping, because the documentation itself doesn't mention them — they were only found by touching the real, running control.

Its own confidence levels reflect this: of the 412 rows, ~171 are "High" (from an individual control's docs page), ~180 are "Medium" (inferred/shared, not verified per control), and the rest are "Gap flagged" (property list not even fully harvested yet). None are independently runtime-verified.

Precedence rule

When this external research conflicts with known-bad-patterns.md or live-build-lessons.md, this project's own empirically-confirmed entries win, every time. This matrix is a starting point for coverage on controls we haven't verified yet, not a correction to anything we've already confirmed the hard way.

Two genuinely useful pointers surfaced by this research (not yet followed up)

Full raw files: bible.md · property matrix (CSV) · schema (JSON)


external/powerapps_canvas_control_bible_v0_1.md

ChatGPT Control Property Matrix (2026-07-05, docs-derived, unverified)

Power Apps Canvas Control Bible v0.1

A local, source-backed reference for Power Apps canvas controls, classic and modern. Built from the research session on 5 July 2026. This is deliberately honest: it separates confirmed Microsoft documentation from inferred/common properties and known gaps. It is useful now, but it is not pretending Microsoft has published a perfect canonical metadata dump.

Status

Area Status Notes
Control inventory Strong Modern and classic/legacy documented control pages are listed from Microsoft Learn and the MicrosoftDocs GitHub tree.
Property dictionary Strong for shared/common properties Core, text, accessibility, size/location, colour/border and behaviour properties are normalised.
Full per-control property lists Partial Text input and Button are captured in detail for both classic and modern. Other controls are inventoried and marked for extraction/verification.
Enums and dropdown values Partial Some enum families are known, but exact accepted values vary by control/version. These must be checked in the individual page or Studio.
Hidden/generated/runtime properties Known gap SearchItems, PowerBIIntegration and hostControl-style objects need live/tooling verification.

Source map

Source URL
Microsoft Learn, controls and properties in canvas apps https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/reference-properties
Microsoft Learn, modern controls reference https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-reference
Microsoft Learn, modern control updates https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-updates
Microsoft Learn, core properties https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/properties-core
Microsoft Learn, text properties https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/properties-text
Microsoft Learn, accessibility properties https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/properties-accessibility
Microsoft Learn, size and location properties https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/properties-size-location
Microsoft Learn, color and border properties https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/properties-color-border
Microsoft Learn, code view https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/code-view
Microsoft Learn, .pa.yaml source files https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/power-apps-yaml
Microsoft Docs GitHub repo, classic controls folder https://github.com/MicrosoftDocs/powerapps-docs/tree/main/powerapps-docs/maker/canvas-apps/controls
Microsoft Docs GitHub repo, modern controls folder https://github.com/MicrosoftDocs/powerapps-docs/tree/main/powerapps-docs/maker/canvas-apps/controls/modern-controls
Power Platform Skills issue 101, hidden/generated property gap https://github.com/microsoft/power-platform-skills/issues/101
Power Platform Skills issue 146, PowerBIIntegration host control gap https://github.com/microsoft/power-platform-skills/issues/146
Hardit Bhatia, The Power Addict modern control posts https://thepoweraddict.com/text-input-everything-you-want-to-know-about-modern-control-21/

Control inventory: modern controls

Control Page slug Notes
Avatar modern-control-avatar Modern control. Public summary page lists it. Exact complete property list should be harvested from the individual page/code view.
Badge modern-control-badge Modern control. Used for compact status/metadata labels.
Button modern-control-button Modern control. Full property list captured from research report.
Card modern-control-card Modern control. Separate page found in repo/docs.
Checkbox modern-control-checkbox Modern control. Boolean input.
Combobox modern-control-combobox Modern control. Choice picker with search, single or multiple selection depending configuration.
Copilot answer modern-control-copilot-answer Modern control. AI response display/control. Preview and tenant availability can vary.
Data Grid modern-control-data-grid Modern control. Page dated June 2026 in research. Uses Data Grid Column subcontrols.
Date picker modern-control-date-picker Modern control. Date input.
Dropdown modern-control-dropdown Modern control. Updated 2026 property naming noted in research.
Header modern-control-header Modern control. App/page header.
Icon modern-control-icon Modern control. Dedicated page found although not always listed on summary page.
Info button modern-control-info-button Modern control. Contextual help flyout/info.
Link modern-control-link Modern control. Hyperlink/clickable text.
Number input modern-control-number-input Modern control. Numeric input.
Progress bar modern-control-progress-bar Modern control. Progress/status display.
Radio group modern-controls-radio-group Modern control. Single selection from list.
Rating modern-control-rating Modern control. Dedicated page found although not always listed on summary page.
Slider modern-control-slider Modern control. Numeric range selector.
Spinner modern-control-spinner Modern control. Loading/progress indicator.
Stream modern-control-stream Modern control. Stream video/media integration.
Table modern-control-table Modern control. Preview status noted by Microsoft search snippet in research.
Tabs or tab list modern-control-tabs-or-tabs-list Modern control. Tabbed navigation/selection.
Text modern-control-text Modern control. Display text.
Text input modern-control-text-input Modern control. Full property list captured from research report.
Toggle modern-control-toggle Modern control. Boolean on/off input.
Control/object Page slug Notes
Add picture control-add-picture Image upload/capture style input.
Attachments control-attachments Dataverse/SharePoint attachment editing control.
Audio control-audio-video Media playback.
Barcode reader control-barcodereader Modern-ish scanner experience in canvas apps, device dependent.
Barcode scanner control-new-barcode-scanner Legacy scanner control, platform dependent.
Button control-button Classic action button. Full list captured.
Camera control-camera Device camera capture. Platform limitations apply.
Card control-card Form card structural object, not normal top-level insertable in the same sense as Button.
Check box control-check-box Classic boolean input.
Column chart control-column-line-chart Chart display.
Line chart control-column-line-chart Chart display.
Column control-column Data table column subcontrol/object.
Combo box control-combo-box Classic searchable choice picker.
Container control-container Manual layout container.
Data table control-data-table Legacy data table display/editing surface with known limitations.
Date Picker control-date-picker Classic date input.
Drop down control-drop-down Classic single selection list.
Export control-export-import Export data from collections.
Import control-export-import Import data into collections.
Display form control-form-detail Read-only form.
Edit form control-form-detail Editable form.
Gallery control-gallery Repeated layout/control template for records.
Grid container control-grid-layout Layout container.
Horizontal container control-horizontal-container Auto-layout container.
HTML text control-html-text HTML rendering control.
Image control-image Image display.
List Box control-list-box List selector.
Microphone control-microphone Audio recording input.
PDF viewer control-pdf-viewer PDF display.
Pen input control-pen-input Ink/drawing input.
Pie chart control-pie-chart Chart display.
Power BI tile control-power-bi-tile Power BI embed tile.
Radio control-radio Classic single selection.
Rating control-rating Classic rating input/display.
Rich text editor control-richtexteditor HTML rich text input.
Screen control-screen Canvas screen object.
Shape control-shapes-icons Visual shape.
Icon control-shapes-icons Classic icon.
Label control-text-box Classic display text label.
Slider control-slider Numeric range selector.
Text input control-text-input Classic text input. Full list captured.
Timer control-timer Timer for delayed/repeated actions.
Toggle control-toggle Classic boolean toggle.
Vertical container control-vertical-container Auto-layout container.
Video control-audio-video Media playback.

Reliability labels used in this Bible

Label Meaning
High Directly listed in Microsoft docs or captured in the research report from a Microsoft page.
Medium Supported by Microsoft docs/repo structure, but exact per-control applicability still needs verification.
Gap flagged Control exists, but full property list has not yet been harvested.
Community/tooling gap Known through community issue, MCP/tooling behaviour, or runtime host object behaviour.
Studio verification required Must be checked by inserting the control into a current canvas app and using code view or exported .pa.yaml.

Master property dictionary

Property What it does Applies to Value/options notes Source confidence
Default Initial value for an input/control before user interaction or reset. Input controls, many classic and modern controls Value type depends on control: text, number, Boolean, date, record, or table. Official/shared
Text Displayed text or current typed text, depending on control. Labels, buttons, text input, text modern control, links For Text input, Text is output/current value, Default is initial value. Official/control-specific
Value Current numeric/Boolean/rating value. Slider, toggle, rating, timer-like and numeric controls Often output/readable. Some controls use Checked or Selected instead. Official/shared
Items Table/list of records or values displayed by a selector/data control. Gallery, dropdown, combo box, list box, radio, data table, table Usually a table formula. Column names and Selected shape depend on control. Official/shared
Selected Currently selected record/item. Gallery, dropdown, radio, table, data table Shape depends on Items. Often read-only output. Official/shared
SelectedItems Selected records when multi-select is enabled. Combo box and multi-select controls Usually a table of records. Official/control-specific
DefaultSelectedItems Initial selected records for multi-select controls. Combo box Must match Items record shape. Official/control-specific
DisplayFields Fields shown in list/search results. Combo box Array/table of field names depending syntax. Official/control-specific
SearchFields Fields searched by user input. Combo box Array/table of field names. Delegation can matter. Official/control-specific
SearchText Current search text entered into searchable selector. Combo box Output style property, not always shown by tooling. Needs Studio verification
SearchItems Auto-generated searchable item table used internally by some combo/search controls. Combo box and searchable controls Community issue indicates describe_control may omit it. Treat as generated/hidden. Community/tooling gap
OnSelect Formula run when user selects/clicks/taps a control. Button, gallery, icons, labels, many controls Behaviour property. Can contain Power Fx actions. Official/shared
OnChange Formula run when a value changes. Input controls Modern Text input changed: fires on blur, with TriggerOutput controlling downstream updates. Official/update
OnCheck Formula run when a checkbox/toggle becomes true. Classic check box/toggle Some modern controls use OnChange instead. Official/control-specific
OnUncheck Formula run when a checkbox/toggle becomes false. Classic check box/toggle Some modern controls use OnChange instead. Official/control-specific
OnTimerStart Formula run when a timer starts. Timer Behaviour. Official/control-specific
OnTimerEnd Formula run when a timer ends. Timer Behaviour. Official/control-specific
Reset When true, resets control to default value. Many classic inputs; not all modern controls Modern controls often lack Reset property; use Reset(control) where available. Official/community
DisplayMode Interaction state of control. Most interactive controls Common values: Edit, View, Disabled. Official/shared
Visible Whether the control is shown. Almost all controls Boolean formula. Hidden controls usually do not receive input. Official/shared
X Horizontal position. Most visual controls Number in canvas units. Official/size-location
Y Vertical position. Most visual controls Number in canvas units. Official/size-location
Width Control width. Most visual controls Number in canvas units. Official/size-location
Height Control height. Most visual controls Number in canvas units. Official/size-location
PaddingTop Internal top spacing. Many controls Number. Modern controls use same split padding names. Official/size-location
PaddingBottom Internal bottom spacing. Many controls Number. Official/size-location
PaddingLeft Internal left spacing. Many controls Number. Official/size-location
PaddingRight Internal right spacing. Many controls Number. Official/size-location
RadiusTopLeft Top-left corner radius. Buttons, inputs, modern controls Modern updates replaced some BorderRadius use with per-corner radius. Official/update
RadiusTopRight Top-right corner radius. Buttons, inputs, modern controls Number. Official/update
RadiusBottomLeft Bottom-left corner radius. Buttons, inputs, modern controls Number. Official/update
RadiusBottomRight Bottom-right corner radius. Buttons, inputs, modern controls Number. Official/update
BorderColor Border colour. Many visual controls Colour formula or theme token depending control. Official/color-border
BorderStyle Border line style. Many visual controls Common values include Solid, Dashed, Dotted, None depending control/version. Official/color-border
BorderThickness Border width. Many visual controls Number. Official/color-border
Fill Background fill colour. Many visual controls Colour formula. Official/color-border
Color Text/foreground colour. Textual controls, modern controls Modern update renamed FontColor to Color. Official/update
Font Font family. Textual controls Text enum/name. Official/text
Size Text size. Textual controls Modern update renamed FontSize to Size. Official/update
FontWeight Weight of text. Textual controls Common values: Lighter, Normal, Semibold, Bold. Official/text
Italic Italic text. Textual controls Boolean. Modern update renamed FontItalic to Italic. Official/update
Underline Underlined text. Textual controls Boolean. Modern update renamed FontUnderline to Underline. Official/update
Strikethrough Strikethrough text. Textual controls Boolean. Modern update renamed FontStrikethrough to Strikethrough. Official/update
Align Horizontal text/content alignment. Textual controls, buttons, inputs Common values: Left, Center, Right, Justify depending control. Official/text
VerticalAlign Vertical text/content alignment. Buttons/labels and some controls Common values: Top, Middle, Bottom. Official/text
LineHeight Height of each text line. Text input, labels, rich text-like controls Number. Official/control-specific
AccessibleLabel Screen-reader label. Most interactive/non-text controls Required for accessibility if visible text is not enough. Official/accessibility
Tooltip Hover/help text. Many controls Can improve accessibility and usability. Official/shared
TabIndex Keyboard navigation order. Interactive classic controls Modern controls may differ. Values <= -1 can remove from tab order in classic docs. Official/accessibility
ContentLanguage Language tag for control content. Textual controls and modern controls Useful for screen readers/language handling. Official/accessibility
FocusedBorderColor Border colour when focused. Classic controls Classic styling property. Modern controls may not expose same property. Official/color-border
FocusedBorderThickness Border thickness when focused. Classic controls Classic styling property. Official/color-border
HoverColor Foreground colour on hover. Classic buttons and inputs Classic interaction styling. Official/color-border
HoverFill Background colour on hover. Classic buttons and inputs Classic interaction styling. Official/color-border
HoverBorderColor Border colour on hover. Classic controls Classic interaction styling. Official/color-border
PressedColor Foreground colour when pressed. Classic buttons/icons Classic interaction styling. Official/color-border
PressedFill Background when pressed. Classic buttons/icons Classic interaction styling. Official/color-border
PressedBorderColor Border colour when pressed. Classic buttons/icons Classic interaction styling. Official/color-border
DisabledColor Foreground colour when disabled. Classic controls Classic disabled styling. Official/color-border
DisabledFill Background when disabled. Classic controls Classic disabled styling. Official/color-border
DisabledBorderColor Border when disabled. Classic controls Classic disabled styling. Official/color-border
Appearance Modern visual style variant. Modern controls Enum-based after 2026 updates. Values vary by control, e.g. Primary/Secondary/Subtle/Transparent style families. Verify per control. Official/update, verify
BasePaletteColor Modern theme palette base colour. Modern controls Theme/palette value. Exact accepted values should be validated in Studio. Official/modern
Icon Icon name or icon value. Classic Icon, modern Icon, modern Button, Badge maybe Modern Icon page says Fluent icon library, approximately 180 icons. Official/modern
IconStyle Modern icon style. Modern Button/Icon-like controls Enum. Exact values vary and should be harvested from individual page. Official/update
IconRotation Rotation applied to icon. Modern Button/Icon-like controls Number/enum depending control. Verify. Official/modern
Layout Arrangement of icon/text or options. Modern Button, radio, tabs, containers Enum values vary by control. Official/update
Type Input type. Modern Text input Enum TextInputType. E.g. text/password/email/number style values should be verified from docs/Studio. Official/control-specific
TriggerOutput When Text input outputs updates to dependent formulas. Modern Text input Controls live vs delayed updates after 2026 behaviour changes. Official/update
ValidationState Validation visual state. Modern inputs/dropdowns Enum, typically None/Error/Success/Warning style. Verify exact values. Official/modern
Required Whether input is required. Modern input controls Boolean. Used for validation visuals, not always data enforcement alone. Official/modern
Placeholder Placeholder text. Modern Text input and similar inputs Modern equivalent to HintText in many cases. Official/modern
HintText Placeholder/hint text. Classic Text input, dropdown/search controls Classic text property. Official/text
MaxLength Maximum text length. Text input controls Number. 0 or blank semantics should be verified. Official/control-specific
Mode Control mode. Classic Text input and others For Text input: single-line, multi-line, password style options depending version. Official/control-specific
Format Data/text format. Text input, date picker, numeric controls Enum/control-specific. Official/control-specific
Clear Shows clear button. Classic Text input Boolean. Official/control-specific
DelayOutput Delay text output until user pauses typing. Classic Text input Boolean. Modern equivalent is not identical, see TriggerOutput. Official/control-specific
EnableSpellCheck Spellchecking. Classic Text input Boolean. Browser/platform dependent. Official/control-specific
VirtualKeyboardMode Mobile virtual keyboard preference. Classic Text input Enum/control-specific. Official/control-specific
AutoDisableOnSelect Temporarily disables button while OnSelect runs. Classic Button Boolean. Helps prevent double-submit. Official/control-specific
Pressed Whether a button/control is being pressed. Classic Button and some controls Output Boolean. Official/control-specific
Start Starts timer/media/camera behaviour depending control. Timer, media controls Control-specific. Official/control-specific
Duration Timer duration. Timer Milliseconds. Official/control-specific
Repeat Repeats timer. Timer Boolean. Official/control-specific
AutoStart Starts automatically when visible/screen opens. Timer/media controls Boolean. Official/control-specific
AutoPause Pauses media automatically. Audio/video Boolean. Official/control-specific
Media Media file/stream source. Audio, Video, Image Type varies. Official/control-specific
Image Image source. Image, Add picture, Avatar Media/image value. Official/control-specific
Camera Selected device camera index. Camera control Number/device dependent. Official/control-specific
Photo Captured camera/photo output. Camera/Add picture Media output. Official/control-specific
Stream Live camera/video stream. Camera Media stream output. Official/control-specific
BarcodeType Barcode type/symbology. Barcode controls Enum/control-specific. Device support varies. Official/control-specific
DataSource Connected data source. Forms, galleries, data table, attachments Table/data source reference. Official/control-specific
Item Current record. Forms, cards, galleries Record. Official/control-specific
Updates Record of changes to submit. Edit form/Data card Record. Official/control-specific
Valid Whether form/card data is valid. Forms/cards Boolean output. Official/control-specific
Error Current validation/data error. Forms/cards Text output. Official/control-specific
ErrorKind Kind/category of error. Forms Enum output. Official/control-specific
SubmitForm Function, not property. Submits an Edit form. Forms Include in Bible because form controls depend on it. Official/function
ResetForm Function, not property. Resets an Edit form. Forms Include in Bible because form controls depend on it. Official/function

Confirmed full property maps

Classic Text input

Captured from the classic Text input control page in the research report. | Property | | --- | | Default | | Text | | AccessibleLabel | | Align | | BorderColor | | BorderStyle | | BorderThickness | | Clear | | Color | | DelayOutput | | DisplayMode | | DisabledBorderColor | | DisabledColor | | DisabledFill | | EnableSpellCheck | | Fill | | FocusedBorderColor | | FocusedBorderThickness | | Font | | FontWeight | | Format | | Height | | HintText | | HoverBorderColor | | HoverColor | | HoverFill | | Italic | | LineHeight | | MaxLength | | Mode | | OnChange | | OnSelect | | PaddingBottom | | PaddingLeft | | PaddingRight | | PaddingTop | | PressedBorderColor | | PressedColor | | PressedFill | | RadiusBottomLeft | | RadiusBottomRight | | RadiusTopLeft | | RadiusTopRight | | Reset | | Size | | Strikethrough | | TabIndex | | Tooltip | | Underline | | VirtualKeyboardMode | | Visible | | Width | | X | | Y |

Modern Text input

Captured from the modern Text input page and modern updates page in the research report. | Property | | --- | | Default | | Text | | Placeholder | | Visible | | OnChange | | OnSelect | | Type | | TriggerOutput | | MaxLength | | Required | | ValidationState | | DisplayMode | | Align | | X | | Y | | Width | | Height | | PaddingTop | | PaddingBottom | | PaddingLeft | | PaddingRight | | Appearance | | BasePaletteColor | | Font | | Size | | Color | | FontWeight | | Italic | | Underline | | Strikethrough | | Fill | | BorderColor | | BorderStyle | | BorderThickness | | RadiusTopLeft | | RadiusTopRight | | RadiusBottomLeft | | RadiusBottomRight | | AccessibleLabel | | ContentLanguage |

Classic Button

Captured from the classic Button control page in the research report. | Property | | --- | | OnSelect | | Text | | Align | | AutoDisableOnSelect | | BorderColor | | BorderStyle | | BorderThickness | | Color | | ContentLanguage | | DisplayMode | | DisabledBorderColor | | DisabledColor | | DisabledFill | | FocusedBorderColor | | FocusedBorderThickness | | Fill | | Font | | FontWeight | | Height | | HoverBorderColor | | HoverColor | | HoverFill | | Italic | | PaddingBottom | | PaddingLeft | | PaddingRight | | PaddingTop | | Pressed | | PressedBorderColor | | PressedColor | | PressedFill | | RadiusBottomLeft | | RadiusBottomRight | | RadiusTopLeft | | RadiusTopRight | | Size | | Strikethrough | | TabIndex | | Tooltip | | Underline | | VerticalAlign | | Visible | | Width | | X | | Y |

Modern Button

Captured from the modern Button page and modern updates page in the research report. | Property | | --- | | Text | | Visible | | OnSelect | | DisplayMode | | X | | Y | | Width | | Height | | Align | | VerticalAlign | | PaddingTop | | PaddingBottom | | PaddingLeft | | PaddingRight | | Appearance | | BasePaletteColor | | Icon | | IconStyle | | IconRotation | | Layout | | Font | | Size | | Color | | FontWeight | | Italic | | Underline | | Strikethrough | | BorderColor | | BorderStyle | | BorderThickness | | RadiusTopLeft | | RadiusTopRight | | RadiusBottomLeft | | RadiusBottomRight | | AccessibleLabel | | Tooltip | | ContentLanguage |

Current per-control property matrix

This is the practical working matrix. Rows marked as gaps are not safe to treat as exhaustive yet. | Family | Control | Property | Meaning | Confidence | Primary source | | --- | --- | --- | --- | --- | --- | | Modern | Avatar | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-avatar | | Modern | Badge | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-badge | | Modern | Button | Text | Displayed text or current typed text, depending on control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Visible | Whether the control is shown. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | OnSelect | Formula run when user selects/clicks/taps a control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | DisplayMode | Interaction state of control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | X | Horizontal position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Y | Vertical position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Width | Control width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Height | Control height. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Align | Horizontal text/content alignment. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | VerticalAlign | Vertical text/content alignment. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | PaddingTop | Internal top spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | PaddingBottom | Internal bottom spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | PaddingLeft | Internal left spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | PaddingRight | Internal right spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Appearance | Modern visual style variant. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | BasePaletteColor | Modern theme palette base colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Icon | Icon name or icon value. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | IconStyle | Modern icon style. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | IconRotation | Rotation applied to icon. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Layout | Arrangement of icon/text or options. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Font | Font family. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Size | Text size. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Color | Text/foreground colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | FontWeight | Weight of text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Italic | Italic text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Underline | Underlined text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Strikethrough | Strikethrough text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | BorderColor | Border colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | BorderStyle | Border line style. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | BorderThickness | Border width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | RadiusTopLeft | Top-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | RadiusTopRight | Top-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | RadiusBottomLeft | Bottom-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | RadiusBottomRight | Bottom-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | AccessibleLabel | Screen-reader label. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | Tooltip | Hover/help text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Button | ContentLanguage | Language tag for control content. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button | | Modern | Card | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-card | | Modern | Checkbox | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-checkbox | | Modern | Combobox | Items | Table/list of records or values displayed by a selector/data control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | DefaultSelectedItems | Initial selected records for multi-select controls. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | Selected | Currently selected record/item. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | SelectedItems | Selected records when multi-select is enabled. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | DisplayFields | Fields shown in list/search results. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | SearchFields | Fields searched by user input. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | SearchText | Current search text entered into searchable selector. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | ValidationState | Validation visual state. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Combobox | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox | | Modern | Copilot answer | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-copilot-answer | | Modern | Data Grid | Items | Table/list of records or values displayed by a selector/data control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | Selected | Currently selected record/item. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | OnSelect | Formula run when user selects/clicks/taps a control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | ReflowBehavior | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Data Grid | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-data-grid | | Modern | Date picker | SelectedDate | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | DefaultSelectedDate | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | MinDate | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | MaxDate | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | Format | Data/text format. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | ValidationState | Validation visual state. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Date picker | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-date-picker | | Modern | Dropdown | Items | Table/list of records or values displayed by a selector/data control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Default | Initial value for an input/control before user interaction or reset. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Selected | Currently selected record/item. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | ValidationState | Validation visual state. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Dropdown | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown | | Modern | Header | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-header | | Modern | Icon | Icon | Icon name or icon value. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | IconStyle | Modern icon style. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | IconRotation | Rotation applied to icon. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | Color | Text/foreground colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | Tooltip | Hover/help text. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Icon | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-icon | | Modern | Info button | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-info-button | | Modern | Link | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-link | | Modern | Number input | Value | Current numeric/Boolean/rating value. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Default | Initial value for an input/control before user interaction or reset. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Min | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Max | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Step | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | ValidationState | Validation visual state. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Number input | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input | | Modern | Progress bar | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-progress-bar | | Modern | Radio group | Items | Table/list of records or values displayed by a selector/data control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Selected | Currently selected record/item. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Default | Initial value for an input/control before user interaction or reset. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Layout | Arrangement of icon/text or options. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | ValidationState | Validation visual state. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Radio group | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group | | Modern | Rating | Value | Current numeric/Boolean/rating value. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Default | Initial value for an input/control before user interaction or reset. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Max | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Precision | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Icon | Icon name or icon value. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Rating | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-rating | | Modern | Slider | Value | Current numeric/Boolean/rating value. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Default | Initial value for an input/control before user interaction or reset. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Min | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Max | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Step | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Slider | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider | | Modern | Spinner | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-spinner | | Modern | Stream | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-stream | | Modern | Table | Items | Table/list of records or values displayed by a selector/data control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | Selected | Currently selected record/item. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | OnSelect | Formula run when user selects/clicks/taps a control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | ReflowBehavior | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Table | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-table | | Modern | Tabs or tab list | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-tabs-or-tabs-list | | Modern | Text | Text | Displayed text or current typed text, depending on control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Size | Text size. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Color | Text/foreground colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Font | Font family. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | FontWeight | Weight of text. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Italic | Italic text. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Underline | Underlined text. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Strikethrough | Strikethrough text. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Align | Horizontal text/content alignment. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text | | Modern | Text input | Default | Initial value for an input/control before user interaction or reset. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Text | Displayed text or current typed text, depending on control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Placeholder | Placeholder text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Visible | Whether the control is shown. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | OnChange | Formula run when a value changes. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | OnSelect | Formula run when user selects/clicks/taps a control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Type | Input type. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | TriggerOutput | When Text input outputs updates to dependent formulas. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | MaxLength | Maximum text length. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Required | Whether input is required. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | ValidationState | Validation visual state. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | DisplayMode | Interaction state of control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Align | Horizontal text/content alignment. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | X | Horizontal position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Y | Vertical position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Width | Control width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Height | Control height. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | PaddingTop | Internal top spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | PaddingBottom | Internal bottom spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | PaddingLeft | Internal left spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | PaddingRight | Internal right spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Appearance | Modern visual style variant. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | BasePaletteColor | Modern theme palette base colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Font | Font family. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Size | Text size. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Color | Text/foreground colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | FontWeight | Weight of text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Italic | Italic text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Underline | Underlined text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Strikethrough | Strikethrough text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | Fill | Background fill colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | BorderColor | Border colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | BorderStyle | Border line style. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | BorderThickness | Border width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | RadiusTopLeft | Top-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | RadiusTopRight | Top-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | RadiusBottomLeft | Bottom-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | RadiusBottomRight | Bottom-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | AccessibleLabel | Screen-reader label. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Text input | ContentLanguage | Language tag for control content. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input | | Modern | Toggle | Checked | Control-specific property. Definition should be verified against the current control page or Studio code view. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | Default | Initial value for an input/control before user interaction or reset. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | OnChange | Formula run when a value changes. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | DisplayMode | Interaction state of control. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | Visible | Whether the control is shown. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | X | Horizontal position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | Y | Vertical position. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | Width | Control width. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | Height | Control height. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | AccessibleLabel | Screen-reader label. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | ContentLanguage | Language tag for control content. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | Appearance | Modern visual style variant. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Modern | Toggle | BasePaletteColor | Modern theme palette base colour. | Medium, needs per-control verification | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle | | Classic | Add picture | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-add-picture | | Classic | Attachments | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-attachments | | Classic | Audio | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-audio-video | | Classic | Barcode reader | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-barcodereader | | Classic | Barcode scanner | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-new-barcode-scanner | | Classic | Button | OnSelect | Formula run when user selects/clicks/taps a control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Text | Displayed text or current typed text, depending on control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Align | Horizontal text/content alignment. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | AutoDisableOnSelect | Temporarily disables button while OnSelect runs. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | BorderColor | Border colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | BorderStyle | Border line style. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | BorderThickness | Border width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Color | Text/foreground colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | ContentLanguage | Language tag for control content. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | DisplayMode | Interaction state of control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | DisabledBorderColor | Border when disabled. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | DisabledColor | Foreground colour when disabled. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | DisabledFill | Background when disabled. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | FocusedBorderColor | Border colour when focused. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | FocusedBorderThickness | Border thickness when focused. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Fill | Background fill colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Font | Font family. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | FontWeight | Weight of text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Height | Control height. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | HoverBorderColor | Border colour on hover. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | HoverColor | Foreground colour on hover. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | HoverFill | Background colour on hover. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Italic | Italic text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PaddingBottom | Internal bottom spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PaddingLeft | Internal left spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PaddingRight | Internal right spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PaddingTop | Internal top spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Pressed | Whether a button/control is being pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PressedBorderColor | Border colour when pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PressedColor | Foreground colour when pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | PressedFill | Background when pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | RadiusBottomLeft | Bottom-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | RadiusBottomRight | Bottom-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | RadiusTopLeft | Top-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | RadiusTopRight | Top-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Size | Text size. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Strikethrough | Strikethrough text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | TabIndex | Keyboard navigation order. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Tooltip | Hover/help text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Underline | Underlined text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | VerticalAlign | Vertical text/content alignment. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Visible | Whether the control is shown. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Width | Control width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | X | Horizontal position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Button | Y | Vertical position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button | | Classic | Camera | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-camera | | Classic | Card | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-card | | Classic | Check box | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-check-box | | Classic | Column chart | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-column-line-chart | | Classic | Line chart | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-column-line-chart | | Classic | Column | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-column | | Classic | Combo box | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-combo-box | | Classic | Container | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-container | | Classic | Data table | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-data-table | | Classic | Date Picker | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-date-picker | | Classic | Drop down | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-drop-down | | Classic | Export | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-export-import | | Classic | Import | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-export-import | | Classic | Display form | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-form-detail | | Classic | Edit form | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-form-detail | | Classic | Gallery | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-gallery | | Classic | Grid container | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-grid-layout | | Classic | Horizontal container | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-horizontal-container | | Classic | HTML text | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-html-text | | Classic | Image | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-image | | Classic | List Box | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-list-box | | Classic | Microphone | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-microphone | | Classic | PDF viewer | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-pdf-viewer | | Classic | Pen input | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-pen-input | | Classic | Pie chart | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-pie-chart | | Classic | Power BI tile | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-power-bi-tile | | Classic | Radio | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-radio | | Classic | Rating | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-rating | | Classic | Rich text editor | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-richtexteditor | | Classic | Screen | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-screen | | Classic | Shape | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-shapes-icons | | Classic | Icon | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-shapes-icons | | Classic | Label | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-box | | Classic | Slider | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-slider | | Classic | Text input | Default | Initial value for an input/control before user interaction or reset. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Text | Displayed text or current typed text, depending on control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | AccessibleLabel | Screen-reader label. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Align | Horizontal text/content alignment. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | BorderColor | Border colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | BorderStyle | Border line style. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | BorderThickness | Border width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Clear | Shows clear button. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Color | Text/foreground colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | DelayOutput | Delay text output until user pauses typing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | DisplayMode | Interaction state of control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | DisabledBorderColor | Border when disabled. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | DisabledColor | Foreground colour when disabled. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | DisabledFill | Background when disabled. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | EnableSpellCheck | Spellchecking. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Fill | Background fill colour. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | FocusedBorderColor | Border colour when focused. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | FocusedBorderThickness | Border thickness when focused. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Font | Font family. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | FontWeight | Weight of text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Format | Data/text format. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Height | Control height. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | HintText | Placeholder/hint text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | HoverBorderColor | Border colour on hover. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | HoverColor | Foreground colour on hover. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | HoverFill | Background colour on hover. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Italic | Italic text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | LineHeight | Height of each text line. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | MaxLength | Maximum text length. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Mode | Control mode. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | OnChange | Formula run when a value changes. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | OnSelect | Formula run when user selects/clicks/taps a control. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PaddingBottom | Internal bottom spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PaddingLeft | Internal left spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PaddingRight | Internal right spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PaddingTop | Internal top spacing. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PressedBorderColor | Border colour when pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PressedColor | Foreground colour when pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | PressedFill | Background when pressed. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | RadiusBottomLeft | Bottom-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | RadiusBottomRight | Bottom-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | RadiusTopLeft | Top-left corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | RadiusTopRight | Top-right corner radius. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Reset | When true, resets control to default value. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Size | Text size. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Strikethrough | Strikethrough text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | TabIndex | Keyboard navigation order. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Tooltip | Hover/help text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Underline | Underlined text. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | VirtualKeyboardMode | Mobile virtual keyboard preference. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Visible | Whether the control is shown. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Width | Control width. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | X | Horizontal position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Text input | Y | Vertical position. | High | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-text-input | | Classic | Timer | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-timer | | Classic | Toggle | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-toggle | | Classic | Vertical container | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-vertical-container | | Classic | Video | PROPERTY SET NOT YET FULLY HARVESTED | Individual Microsoft page exists or is inferred from docs tree, but exact property list needs extraction from Learn/GitHub and Studio code view. | Gap flagged | https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-audio-video |

Known gaps and traps

Gap Why it matters How to verify/fill it
Modern controls summary is not a complete index Research found Icon and Rating dedicated pages even though the summary list can omit them. Use the MicrosoftDocs repo tree as the inventory, not only the Learn summary page.
Shared property pages are separate from control pages A control page may not make every shared property obvious. Join control pages with core, text, accessibility, size/location and colour/border property pages.
Modern 2026 property renames Older blogs/screenshots may use names such as FontColor, FontSize, FontItalic, BorderRadius. Map old names to Color, Size, Italic, Radius* etc using modern-control-updates.
Modern Text input OnChange behaviour changed Older assumptions about per-keystroke OnChange can be wrong. Use TriggerOutput and test in Studio.
SearchItems and generated properties Tooling issue reports hidden/generated properties not exposed by describe_control. Export .pa.yaml and compare Studio code view against authoring tooling.
PowerBIIntegration host control Runtime-injected object, not normal insertable control, can break offline compiler schema. Keep runtime/host controls in a separate section.
Custom components Properties are maker-defined, so there is no universal list. Document component schema and each component separately from built-in controls.
Preview/tenant-gated controls Controls such as Copilot-related or table/grid variants can vary by environment. Record environment, Studio version, feature flags and tenant settings.

Use this workflow to turn v0.1 into a genuinely brutal local knowledge base. | Step | Action | Output | | --- | --- | --- | | 1 | Clone or download MicrosoftDocs/powerapps-docs controls folder and modern-controls subfolder. | Local markdown source cache. | | 2 | Parse every markdown page for Properties, Key properties, Additional properties and Applies to tables. | Raw property rows. | | 3 | Merge shared property pages into every control where the page says the property applies. | Normalised property matrix. | | 4 | Insert every control into a blank canvas app, open Code view, copy YAML, then export .msapp/.pa.yaml. | Studio-observed property baseline. | | 5 | Compare docs properties vs Studio properties vs .pa.yaml. | Gap report: missing, renamed, hidden, generated, runtime-only. | | 6 | Add community/tooling issues as annotations only, not as official truth. | Confidence notes. | | 7 | Regenerate Markdown, CSV and optional DOCX monthly or before major builds. | Versioned local Bible. |

Copy/paste prompt for Claude or Codex to continue the extraction

Use this as a build prompt if you want an agent to complete the harvester against a local clone:

Build a Power Apps canvas control documentation harvester. Use the local MicrosoftDocs/powerapps-docs repository. Parse powerapps-docs/maker/canvas-apps/controls and controls/modern-controls. For every markdown file that represents a control, extract control name, classic/modern family, page path, description, key properties, additional properties, enum/value notes, deprecation/preview notes, and source line references where possible. Then parse shared property pages properties-core, properties-text, properties-accessibility, properties-size-location, and properties-color-border, and join shared properties to controls where the docs say they apply. Emit powerapps_controls.json, powerapps_properties.csv, gap_report.md, and bible.md. Mark each property confidence as direct, shared-inferred, community, runtime-only, or needs-studio-verification. Do not invent missing enum values.

Version notes

v0.1 is a grounded starter Bible, not a final canonical dump. It prioritises truthfulness over fake completeness. The next version should automate extraction from the docs repository and then validate by Studio Code View.


live-build-lessons.md

Live Build Lessons

Live Build Lessons

Last checked: 2026-06-23

These are lessons learned from the Training Tracker live build — real bugs hit and diagnosed in the Power Apps editor and via GitHub issue threads. They supplement real-build-quirks.md. Do not overrule them based on what seems logical; they are ground truth.


Character Escapes Don't Work in Power Apps Strings

Power Apps formula strings do not support \x or \u escape sequences. Writing \xB7 outputs the literal characters \, x, B, 7 — not the middle dot ·.

Use Char(decimal) instead:

Char(183)

This produces · (U+00B7, middle dot / interpunct). This is the correct approach for any Unicode character by decimal code point.

Common ones used in Training Tracker:

Character Char()
· (interpunct) Char(183)

Never write \xB7, ·, or any escape sequence in a Power Apps string literal.


Version Stamps Are Mandatory on Every Screen Page and Index

Every pa-yaml-wrap call and every docs/index.html must carry a version label and a build timestamp. Without them, the user cannot tell whether GitHub Pages has served the latest push — F5 refreshes look identical.

For screen pages, always pass --version:

pa-yaml-wrap scrHome.yaml docs/screens/scrHome.html --version v1.2

The stamp appears bottom-right in small monospace text: v1.2 — Built 23 Jun 2026 10:55 BST

For docs/index.html, add the version inline after the <h1> title and a build timestamp line below it. Use date '+%-d %b %Y %H:%M %Z' to get the local time string.

Version convention: start at v1.0, bump minor for each fix/push (v1.1, v1.2), bump major for structural changes. Every push that modifies screen content increments the version so the stamp visibly changes.


PA1006/PA1001 — Screen YAML Uses Screens: Root, Not Screen-Level Control

Error: (1,3) : error PA1006 : Empty or invalid value for Control.

Screen paste YAML must use the Source Code schema root:

Screens:
  scrDashboard:

Do not paste a bare top-level list item such as - scrDashboard:. If the paste starts with - scrDashboard:, Power Apps reports the error at line 1, column 3 even when Control: Screen is present, because the screen is not under the Screens: schema root.

Once the screen is under Screens:, do not add Control: Screen. SchemaV3 screen instances do not expose a Control property. Adding it causes:

(3,5) : error PA1001 : YamlInvalidSyntax: Property 'Control' not found on type 'Microsoft.PowerPlatform.PowerApps.Persistence.PaYaml.Models.SchemaV3.ScreenInstance'.

Wrong:

- scrDashboard:
    Control: Screen
    Properties:
      Fill: =RGBA(248,248,248,1)

Correct:

Screens:
  scrDashboard:
    Properties:
      Fill: =RGBA(248,248,248,1)

Child controls under Children: still need normal Control: values such as Label@2.5.1 or Classic/Button@2.2.0. The no-Control rule applies only to the screen node under Screens:.

When checking with a standard YAML parser such as yaml.safe_load, quote any single-line Power Fx formulas that contain YAML-significant : text, for example record literals or labels with colons:

Default: '={Value: "New to MoD/Branch"}'
Text: '=If(IsBlank(varRole), "Role not set", "Role: " & varRole)'

The quotes are YAML syntax only; the parsed Power Fx value still starts with =.


Copy Pages Must Show and Guard the Actual Clipboard Payload

A repeated paste error can be caused by stale browser page content or stale clipboard text even after the repository has the corrected YAML. Version stamps alone are not enough proof that the copied payload is the corrected payload.

Every generated screen copy page should visibly show the first lines of the exact YAML string that the Copy button will write. For screen YAML, the preview must start:

Screens:
  scrName:
    Properties:

The copy script should refuse to copy known-invalid screen payloads, especially:

Screens:
  scrName:
    Control: Screen

If Power Apps reports (3,5) Property 'Control' not found on type ... ScreenInstance, the pasted clipboard text still contains a screen-level Control: Screen. Check the visible payload preview on the live copy page before changing YAML again.

Use versioned or cache-busted links from index pages, for example screens/scrDashboard.html?v=1.9, so the browser does not reuse an older generated screen page.


Error: (255,9) : error PA2109 : Unknown variant 'verticalGallery' for control type 'Gallery@2.15.0'.

For classic Gallery@2.15.0, use the verified variant names from the exported working screens and fresh-control defaults:

Control: Gallery@2.15.0
Variant: Vertical

Do not use generated/web-style names such as:

Variant: verticalGallery

Known valid classic gallery variants include:

The variant value is case-sensitive and schema-checked before Power Fx formulas are evaluated, so a wrong variant blocks the entire screen paste.


PA2108 — Labels Do Not Support Radius Properties

Error:

error PA2108 : Unknown property 'RadiusTopLeft' for control type 'Label@2.5.1'.
error PA2108 : Unknown property 'RadiusTopRight' for control type 'Label@2.5.1'.
error PA2108 : Unknown property 'RadiusBottomLeft' for control type 'Label@2.5.1'.
error PA2108 : Unknown property 'RadiusBottomRight' for control type 'Label@2.5.1'.

Label@2.5.1 can use Fill, Color, Align, VerticalAlign, and text styling, but it does not expose radius properties in the PaYaml schema. Do not use Label controls for rounded pills/badges.

For rounded badges or status pills, use the established Classic Button pattern with DisplayMode=DisplayMode.View:

- btnStatusPill:
    Control: Classic/Button@2.2.0
    Properties:
      Text: ="Active"
      DisplayMode: =DisplayMode.View
      Fill: =RGBA(220,238,234,1)
      HoverFill: =Self.Fill
      PressedFill: =Self.Fill
      Color: =RGBA(0,78,66,1)
      BorderThickness: =0
      RadiusTopLeft: =12
      RadiusTopRight: =12
      RadiusBottomLeft: =12
      RadiusBottomRight: =12

If a label already exists and the rounded shape is not critical, remove the four radius properties rather than blocking the whole paste.


PA1001 — |- Block Scalars Are Only Safe on Event Handlers and Items

PaYaml (PowerApps' YAML dialect) does not reliably support |- block scalars on visual or style properties. Using |- on Fill, Color, Visible, Text, DisabledFill, HoverFill, or any similar property causes PA1001 YamlInvalidSyntax even when the YAML is structurally valid and passes a standard YAML parser.

Properties where |- is safe: - OnSelect, OnChange, OnVisible, OnCheck, OnUncheck — event handlers - Items — gallery/dropdown data source

Properties where |- must NOT be used — use a single-line formula instead: - Fill, HoverFill, PressedFill, DisabledFill - Color, HoverColor, PressedColor - Visible - Text - BorderColor, BasePaletteColor - Any other visual/style property

Wrong:

Fill: |-
  =If(
      ThisItem.Complete,
      RGBA(34,139,34,1),
      RGBA(163,100,0,1)
  )
Visible: |-
  =varSelectedRecord.'Movement Type'.Value = "Leaving Branch" ||
  varSelectedRecord.'Movement Type'.Value = "Leaving MoD"

Correct:

Fill: =If(ThisItem.Complete, RGBA(34,139,34,1), RGBA(163,100,0,1))
Visible: =varSelectedRecord.'Movement Type'.Value = "Leaving Branch" || varSelectedRecord.'Movement Type'.Value = "Leaving MoD"

Even a long single-line formula is safe. Multi-line with |- on style properties is not.


PA1001 — Three Rules for |- Block Scalars (All Must Hold)

All three errors share the code PA1001 YamlInvalidSyntax. They are distinct causes and must be checked independently.


Rule 1 — Any multi-line formula must use |-, never inline

Error message: While parsing a block mapping, did not find expected key.

YAML cannot span an unquoted scalar value across multiple lines in a block mapping. If a formula opens a parenthesis on the key line without closing it, the next line is parsed as a new key — which fails.

Wrong:

Fill: =If(
    ThisItem.Complete,
    RGBA(34,139,34,1),
    RGBA(163,100,0,1)
)

Correct:

Fill: |-
  =If(
      ThisItem.Complete,
      RGBA(34,139,34,1),
      RGBA(163,100,0,1)
  )

Pre-output scan: For every Key: = line, count ( and ) on that line. If open count > closed count, the formula continues onto the next line — it must use |-. Applies to every property: Fill, Color, DisabledFill, HoverFill, Text, Visible, OnSelect, and all others.


Rule 2 — Every |- block's first content line must start with =

Error message: Power Fx expressions must start with '='

The = prefix marks the value as a Power Fx formula. It is required on the first content line only — continuation lines do not get it. This applies to every property that uses |- without exception: event handlers (OnSelect, OnChange, OnVisible, OnCheck, OnUncheck) and data properties (Items, Fill, Color, Visible, Text, etc.).

Wrong:

OnSelect: |-
  Patch('MyList', varRecord, {Field: Today()});
  Navigate(scrRecord)

Correct:

OnSelect: |-
  =Patch('MyList', varRecord, {Field: Today()});
  Navigate(scrRecord)

Pre-output scan: For every |- in the YAML, check that the immediately following non-empty line starts with =.


Rule 3 — Inside a |- block, indentation must follow paren depth

Error message: While parsing a block mapping, did not find expected key. (same as Rule 1, different cause)

When a |- block contains a nested formula like If(condition, If(...)), each line's indentation must match its logical paren depth. A common mistake when converting inline formulas to |- is to carry over original whitespace mechanically — this places the outer closing ) at the wrong indent level, making the YAML parser see it as a key instead of formula continuation.

Wrong (outer ) at wrong indent — both ) at the same level):

Fill: |-
  =If(
      ThisItem.Complete,
      RGBA(34,139,34,1),
      If(
          condition,
          RGBA(163,100,0,1),
          RGBA(0,78,66,1)
      )
      )

Correct (outer ) at the same indent as =If():

Fill: |-
  =If(
      ThisItem.Complete,
      RGBA(34,139,34,1),
      If(
          condition,
          RGBA(163,100,0,1),
          RGBA(0,78,66,1)
      )
  )

Rule: The closing ) of the outermost function must be at the same indent as =If( — that is, content indent (key indent + 2). Each nested level adds 4 spaces. Use paren depth to derive correct indentation, not the original source whitespace.

Depth formula: - Content base = key indent + 2 spaces - Each ( that doesn't close on the same line increases depth by 1 → add 4 spaces per depth level - Each unmatched ) decreases depth before placing the line


IsOdd Does Not Exist

IsOdd() is not a Power Apps function. It causes a formula error.

Use Mod() instead:

Mod(value, 2) = 1

Full alternating row colour pattern:

If(Mod(ThisItem.ID, 2) = 0, RGBA(255,255,255,1), RGBA(247,249,252,1))

ThisItem.ItemIndex Is Unreliable for Alternating Row Colours

ItemIndex reflects the visual position in the gallery at render time. It shifts when the gallery filters or sorts, causing rows to flash between colours or flip incorrectly.

Use a stable identifier instead.

SharePoint-backed gallery (items from 'TT Personnel', 'TT Courses', etc.):

If(Mod(ThisItem.ID, 2) = 0, RGBA(255,255,255,1), RGBA(247,249,252,1))

Collection-backed gallery with a numeric course ID (e.g. galMyTraining bound to colMyTraining):

If(Mod(ThisItem.CourseID, 2) = 0, RGBA(255,255,255,1), RGBA(247,249,252,1))

Collection-backed gallery with no numeric ID (e.g. galMyChain keyed by email):

If(Mod(Len(ThisItem.Email), 2) = 0, RGBA(255,255,255,1), RGBA(247,249,252,1))

Never use ThisItem.ItemIndex in production alternating row formulas.


ModernButton BasePaletteColor — Don't Fight It

BasePaletteColor on a ModernButton is a Fluent 2 seed colour — the framework derives fill, text, and hover colours from it internally. You do not control the exact output shade; Fluent 2 does.

The correct approach: pick one dark, saturated seed per button role and leave it alone. Don't try to match a specific brand hex precisely, don't set it conditionally, don't add a Color override to compensate. Work with Fluent 2, not against it.

Rule: BasePaletteColor must be a dark, saturated colour. If you can imagine reading white text on it, it will probably work. If it's a pastel or near-white, Fluent 2 treats it as a low-contrast accent and overrides it with a dark fill regardless.

Standard roles for new apps (using army dark green as primary): - Primary action: RGBA(0,78,66,1) — app primary colour - Secondary / cancel: RGBA(120,120,120,1) — neutral dark grey - Destructive: RGBA(163,45,45,1) — dark red

Confirmed broken — all render wrong regardless of what you set: - Any near-white or pastel (RGBA(244,246,248,1), RGBA(230,241,251,1), RGBA(255,240,240,1), etc.) - Conditional expressions like If(varTab="X", RGBA(34,139,80,1), RGBA(228,236,248,1)) — the light inactive state will always render dark

If you need conditional colour states (active/inactive tab buttons, toggle-style buttons), don't use ModernButton. Use Classic Button with Fill, HoverFill, and PressedFill set directly. See ui-patterns.md — Tab Navigation Bar.


Tab Navigation Buttons Must Be Classic Buttons

ModernButton BasePaletteColor does not support conditional light/dark fills for active/inactive tab states. Attempting to set BasePaletteColor conditionally based on a tab variable will not produce distinct active/inactive visual states when light colours are involved.

Use Classic buttons for tab navigation. Classic buttons expose Fill, HoverFill, and PressedFill directly, giving full colour control.

Standard tab button pattern (two tabs: "People" and "Courses"):

btnTabPeople — Classic/Button:

Fill         = If(varTab="People", RGBA(34,139,80,1), RGBA(255,255,255,1))
Color        = If(varTab="People", RGBA(255,255,255,1), RGBA(24,95,165,1))
HoverFill    = If(varTab="People", RGBA(28,115,65,1), RGBA(235,241,250,1))
PressedFill  = If(varTab="People", RGBA(22,95,55,1), RGBA(210,225,245,1))
BorderColor  = RGBA(24,95,165,1)
BorderThickness = 1
RadiusTopLeft = RadiusTopRight = RadiusBottomLeft = RadiusBottomRight = 8
OnSelect     = Set(varTab, "People")

Same pattern for btnTabCourses with varTab="Courses".


SortByColumns Fails on SharePoint Choice Fields

SortByColumns(source, "FieldName", SortOrder.Ascending) breaks when the field is a SharePoint Choice type. SharePoint returns Choice fields as records {Value: "..."}, not plain strings. SortByColumns cannot sort on a record expression.

Use Sort() with .Value to unwrap the Choice record:

Sort(source, Status.Value, SortOrder.Ascending)

For double-sort (status then title):

Sort(
    Sort(source, Title, SortOrder.Ascending),
    Status.Value, SortOrder.Ascending
)

Do not use SortByColumns on a column that is a SharePoint Choice field.


Multi-Select Choice Field: in Operator Fails Silently

The in operator checks for a full record match. A SharePoint multi-select Choice field returns a table of records {Value: "..."}. Writing "Army" in ApplicableTo checks whether the string "Army" matches an entire record — it never will, so it always returns false silently.

Use CountIf to check if any value in the table matches:

CountIf(ApplicableTo, Value = drpFilter.Selected.Value) > 0

This correctly counts how many rows in the multi-select field have the matching value string.

Example in a Filter:

Filter(colCourses,
    (IsBlank(drpPeopleType.Selected.Value) ||
     drpPeopleType.Selected.Value = "All types" ||
     CountIf(ApplicableTo, Value = drpPeopleType.Selected.Value) > 0)
)

Launch() Reuses the Current Browser Tab

Launch(url) navigates the current tab away from the Power Apps app. Users lose their place.

Always use LaunchTarget.New as the third argument to open in a new tab:

Launch(varCourse.CourseURL, {}, LaunchTarget.New)

The second argument {} is a required empty record placeholder.

Never write Launch(url) alone for any URL that should leave the app running in the background.


Classic Dropdown Always Has a Selection

A Classic Dropdown (not ModernDropdown) always selects the first item on load. Its .Selected value is never blank. There is no way to make it empty.

Do not add required-field validation for Classic Dropdown controls — IsBlank(drpControl.Selected.Value) will always be false and the validation will never trigger.

If required validation on a dropdown is needed, use ModernDropdown with a placeholder, or add a deliberate "Select..." first item and validate against that string.


Collection IDs Are Text; SharePoint IDs Are Numeric

When a collection is built with ForAll and stores SharePoint IDs as CourseID: C.ID, the value may be stored as text depending on how the formula evaluated. SharePoint TT Courses.ID is a numeric Integer field.

A LookUp('TT Courses', ID = ThisItem.CourseID) may silently return blank if the types don't match.

Wrap the collection ID with Value() to force numeric comparison:

LookUp('TT Courses', ID = Value(varCourse.CourseID))

Use this whenever looking up a SharePoint record by an ID that was previously stored in a collection.


varCourse vs varFullCourse — Two-Variable Pattern for Detail Screens

When a gallery row sets varCourse to ThisItem (the collection row), and the detail screen needs SharePoint-only fields not included in the collection's ForAll projection, those fields will be blank on the detail screen.

The clean pattern: keep varCourse as the gallery row (for training status, expiry, dates), and look up SP-only fields directly on the detail screen:

LookUp('TT Courses', ID = Value(varCourse.CourseID), CourseHost.Value)
LookUp('TT Courses', ID = Value(varCourse.CourseID), CourseDescription)
LookUp('TT Courses', ID = Value(varCourse.CourseID), CourseURL)

For multi-value fields like ApplicableTo:

With(
    {courseRow: LookUp('TT Courses', ID = Value(varCourse.CourseID))},
    "Applies to: " & Concat(courseRow.ApplicableTo, Value, ", ")
)

Avoid putting all fields into varCourse by attempting a merged record in OnSelect — the schema mismatch between the collection row and the SharePoint record causes CanEdit and other collection-only fields to be unrecognized.

Avoid keeping a varFullCourse variable set in OnSelect and then using it with fallbacks on the detail screen — that pattern quickly accumulates fallback formula debt when fields aren't available in both sources.


Collection Projections Must Include Every Field a Downstream Screen Reads

If scrCourseDetail reads varCourse.CourseURL, varCourse.CourseHost, varCourse.CourseDescription, and varCourse.ApplicableTo, those fields must be either:

  1. Included in the colMyTraining ForAll projection, or
  2. Looked up directly on the detail screen from the SharePoint source.

If you pick option 1, add all of them explicitly. If you add a new field to SharePoint later, you must also add it to the ForAll projection or it will be blank on the detail screen.

If you pick option 2, use the LookUp('TT Courses', ID = Value(varCourse.CourseID), FieldName) pattern described above.

Never assume a field is in varCourse because it exists in SharePoint — it is only there if the ForAll included it.


OnStart Collections Go Stale — Reload on Each Screen's OnVisible

App.OnStart loads collections once at app launch. If a user adds data in one screen and navigates to another, the collections are still the launch-time snapshot.

Add a ClearCollect reload at the top of OnVisible for any screen that depends on fresh data:

ClearCollect(colCourses, 'TT Courses');
ClearCollect(colMyRecords,
    Filter('TT TrainingRecords', Lower(PersonEmail) = varMyEmail));

This is especially important for scrMyTraining — without it, newly added courses won't appear until the app is relaunched.


varViewingForSelf Must Be Initialised on Screen Load

If scrMyTraining.OnVisible checks If(varViewingForSelf, ...) and varViewingForSelf is blank (never set), the entire block is skipped and the gallery is empty.

Always initialise at the top of OnVisible:

If(IsBlank(varViewingForSelf), Set(varViewingForSelf, true));

This ensures self-view is the default the first time the screen opens, without interfering with team-view navigation from scrTeamMember.

Never hard-code Set(varViewingForSelf, true) inside galMyTraining.OnSelect. That forces self-view every time a course row is tapped, which breaks team-member viewing (the context switches away from the team member before the screen loads).


Form Doesn't Reset Between Visits — OnVisible Must ResetForm

When a screen contains a Form control (frmCert), navigating away and back does not automatically reset the form. The previous record's data stays loaded.

Add to the screen's OnVisible:

ResetForm(frmCert)

Without this, revisiting the screen after viewing one course and tapping a different course can show stale data or cause form submission to patch the wrong record.


Line Manager Relationship Is Directional

To allow Person A to upload training for Person B: - Person B's TT Personnel record must have Person A's email in the LineManagerEmail field. - Setting Person A's record to have Person B as manager only allows Person B to upload for Person A.

The relationship reads: "My manager can upload for me."

This is a common point of confusion. The guide must state it clearly when describing the team management feature.


SharePoint Column Required Field Causes Network Error in Patch

If a SharePoint column is marked Required and the Patch formula sends a blank value for it, Power Apps returns:

Network error when using Patch function: Field 'FieldName' is required.

This is a SharePoint-level enforcement, not a Power Apps formula error. Two resolution paths:

  1. Unmark Required in SharePoint: Go to the list → Column settings → Edit → set "Require that this column contains information" to No.
  2. Add app-level validation before Patch: Use the Set-error-vars-then-If-guard pattern (see ui-patterns.md) to validate before the Patch call runs, preventing the network error from ever occurring.

Option 2 is preferred because it gives users a clear UI-level error message rather than a vague network error.


ForAll SelectedItems: Alias vs No Alias for Multi-Select Choice Patch

Two valid ways to patch a multi-select Choice column from a Combo box:

With alias (can fail in some contexts):

ApplicableTo: ForAll(cmbNewApplic.SelectedItems As T, {Value: T.Value})

Without alias (more reliable):

ApplicableTo: ForAll(cmbNewApplic.SelectedItems, {Value: Value})

The alias form As T can cause a type mismatch in some Power Apps versions. The no-alias form is more reliable. Prefer the no-alias form in new guides.


YAML Text: = Is Invalid

A bare Text: = with nothing after it is not valid YAML or a valid Power Fx expression. It typically appears when YAML is copied from a partial source or generated incorrectly.

Always use:

Text: =""

Any property that should be visually empty needs an empty string expression, not a bare =.


%QUALIFIED_DATACARD_FIELD_VALUE.ID% Is a Broken Placeholder

This string sometimes appears in Form card Default properties when YAML is exported incompletely or generated without the correct qualified field value. It is not valid Power Fx.

Replace it with the correct expression. For a DateCompleted data card:

=ThisItem.DateCompleted

For any data card, the correct Default is the field the card is bound to:

=ThisItem.FieldName

If you see this placeholder in YAML, treat it as a required fix before pasting.


ModernButton Does Not Accept FontWeight

ModernButton@1.0.0 does not expose FontWeight. Setting it causes a PA2108 error in the live editor.

Remove FontWeight from any ModernButton control. The button's font weight is controlled internally by the Fluent 2 system.

Other confirmed missing properties on ModernButton: none yet — but always audit against verified-control-reference.md before publishing YAML.

Confirmed missing on Toggle (Toggle@1.1.5): Size (font size). Toggle does not expose font size.


Badge Control Cannot Repeat From a Collection

The Badge control from the insert menu is designed as a single status indicator. It cannot loop over a table to produce multiple pills.

To render a list of pill badges (e.g. ApplicableTo values), use a Gallery with Classic Button pill controls inside it:

- galApplicableTo:
    Control: Gallery@2.15.0
    Variant: Vertical
    Properties:
      Height: =36
      Items: =LookUp('TT Courses', ID = Value(varCourse.CourseID)).ApplicableTo
      TemplatePadding: =0
      TemplateSize: =90
      WrapCount: =5
      Width: =500
    Children:
      - btnApplyPill:
          Control: Classic/Button@2.2.0
          Properties:
            DisplayMode: =DisplayMode.View
            Fill: =RGBA(24,95,165,1)
            HoverFill: =Self.Fill
            PressedFill: =Self.Fill
            Color: =RGBA(255,255,255,1)
            HoverColor: =RGBA(255,255,255,1)
            PressedColor: =RGBA(255,255,255,1)
            BorderThickness: =0
            Height: =28
            Width: =84
            RadiusTopLeft: =14
            RadiusTopRight: =14
            RadiusBottomLeft: =14
            RadiusBottomRight: =14
            Size: =10
            Text: =ThisItem.Value
            Y: =4

Key settings: - WrapCount controls how many pills appear per row before wrapping. - TemplateSize is the width slot per pill — increase if values like "Civil Service Learning" are clipped. - HoverFill = Self.Fill and PressedFill = Self.Fill make the pill non-interactive visually. - DisplayMode = DisplayMode.View prevents click responses.

For coloured pills by value:

Fill = Switch(
    ThisItem.Value,
    "Civil Servant", RGBA(56,152,220,1),
    "Army",          RGBA(59,109,17,1),
    "Contractor",    RGBA(239,159,39,1),
    RGBA(108,117,125,1)
)

Strings in the Switch must match the SharePoint Choice values exactly, including capitalisation.


SharePoint Rich Text Fields Return HTML — Always Wrap in PlainText()

A SharePoint "Multiple lines of text" column set to Rich Text or Enhanced Rich Text returns raw HTML when read through the Power Apps connector:

<div class="ExternalClass..."><div style="font-family:Calibri...">Your text here.</div></div>

Displaying this directly in a ModernTextInput.Default or Label.Text shows the raw HTML markup to the user instead of the note content.

Fix: Always wrap the field in PlainText() for any text input or label that displays notes, descriptions, or any multi-line text field:

Default: =PlainText(varSelectedRecord.Notes)

PlainText() strips all HTML tags and decodes HTML entities, returning the readable text. PlainText(Blank()) safely returns "".

When the user edits and saves ({Notes: Self.Text}), the value is saved back as plain text — removing the rich text formatting permanently. This is acceptable for a notes field. If rich text round-tripping is required, use HtmlViewer@2.1.0 for display instead.

Apply to every multi-line text field in Default properties on ModernTextInput and Text properties on Label.


ModernDropdown Default — Never Use {Value: expr.Value} (Value/Value1 Collision)

Error (in Power Apps Studio after paste): Formula bar shows Value1 instead of Value; dropdown errors when the formula tries to run.

Cause: When the Default property of a ModernDropdown@1.0.1 contains {Value: someRecord.SomeField.Value}, Power Apps sees a naming collision between the record literal key (Value) and the property accessor (.Value) on the right-hand side. It renames one to Value1, breaking the formula.

Wrong — triggers the collision:

Default: '=If(IsBlank(varSelectedRecord.''Movement Type''), {Value: ""}, {Value: varSelectedRecord.''Movement Type''.Value})'

Fix — use With() to extract the string into a local variable first:

Default: '=With({_v: Coalesce(varSelectedRecord.''Movement Type''.Value, "")}, {Value: _v})'

_v is a plain string variable. {Value: _v} has no .Value on the right-hand side, so there is no collision. Coalesce(..., "") handles the blank case (records that predate the column).

Apply this pattern to every ModernDropdown.Default that reads from a SharePoint Choice field via varSelectedRecord.FieldName.Value. This affects all edit/view panels where the dropdown pre-populates from a selected record.

The With() pattern is safe: it evaluates to the correct {Value: "choice string"} record that ModernDropdown expects, without triggering the rename.


SharePoint Choice Fields Always Use .Value — Never .Value1

When accessing a SharePoint Choice field in a formula, always use .Value:

ThisItem.'Movement Type'.Value
varSelectedRecord.'Position Type'.Value

Do not use .Value1. SharePoint's data connector exposes .Value (the selected choice string) and may also surface .Value1 as an internal artifact on some field configurations, but .Value1 is not the choice string and will error.

This applies to all single-select Choice fields everywhere: gallery labels, filter conditions, dropdown defaults, patch records, and visibility formulas.


Toggle Bound to a SharePoint Choice Field — Use .Value = "Yes", Not Boolean

Toggle@1.1.5 Checked requires a strict Boolean. If the underlying SharePoint column is a Choice type (not a true Yes/No checkbox), the data connector returns a Record {Value: "Yes"} or {Value: "No"} — comparing that Record to true throws:

Incompatible types for comparison. These types can't be compared: Record, Boolean.

How to tell: If field = true causes the above error, the field is a Choice, not a Yes/No.

Fix for every formula touching the field:

Checked: =varSelectedRecord.FieldName.Value = "Yes"
Visible: =varSelectedRecord.FieldName.Value = "Yes"
Label:   =If(varSelectedRecord.FieldName.Value = "Yes", "Yes — upgrade needed", "No upgrade needed")

Fix for Patch in OnCheck / OnUncheck:

OnCheck: |-
  =Patch('List', varRecord, {FieldName: {Value: "Yes"}});
  ...
OnUncheck: |-
  =Patch('List', varRecord, {FieldName: {Value: "No"}});
  ...

Blank().Value returns blank (empty string), so .Value = "Yes" is safe for records where the field has never been set — it returns false, which is what the toggle needs.

Do not use field = true or bare field for a SharePoint Choice field regardless of the column's display name. Check how the connector returns it before writing the formula.


real-build-quirks.md

Real Build Quirks

Real Build Quirks

Last checked: 2026-06-20

These are issues found while building the Training Tracker app in the live Power Apps editor. Preserve them even when a generic Microsoft Learn example looks different, unless the live editor is rechecked and the guide is updated deliberately.

SharePoint List Names With Spaces

Power Fx formulas must wrap SharePoint list names containing spaces in single quotes:

'TT Personnel'
'TT Courses'
'TT TrainingRecords'

Do not write unquoted list names in formulas.

Layer Order

Layer order is a build requirement, not a cosmetic note.

Any classic Button used as a visual background must sit behind the controls it supports:

In guide tables, place background controls before the controls that sit on top of them, and add a highlighted layer note when the order matters. If a background covers labels, inputs, icons or buttons in Power Apps, use Send to back or move it to the bottom/back of that screen, group, or gallery template before continuing.

For user-facing build guides, do not rely on table order alone. If a panel background appears first in a properties table, add a "Recommended build order" note that tells the builder to either:

For progress bars, the background bar must sit behind the fill bar:

recBarBack behind recBarFill

Temporary Formula Errors

Power Apps can show red-line formula errors while the builder is still partway through a phase and referenced controls, variables, or collections do not exist yet.

Future guides must call this out explicitly near the formula. Use this wording pattern:

Temporary red-line note: this formula may complain until [control/collection/variable] exists. Finish this phase first, then recheck.

If a formula still red-lines after every control and formula in that phase is complete, treat it as a real issue.

Grouping Controls

Groups are useful for clear sections such as tab bodies (grpPeople, grpCourses) and can make the tree tidier.

Use them carefully:

Default Values

Do not make the builder waste time hunting for properties that are already correct by default.

Guide rows should focus on properties that must be changed. If a default value is included because it is a useful safety check, label it clearly as default/safety check.

Use Microsoft Learn defaults where documented. If Microsoft Learn does not document a default for a property/control, do not claim one from memory.

Fresh Label controls in the user's live editor do not need Fill=RGBA(0,0,0,0) set manually when the goal is a normal transparent label over the screen/card background. The defaults lab did not serialize Fill for a fresh standalone Label, and the user confirmed the live editor already shows the intended default state. Future guide rows should omit label Fill=RGBA(0,0,0,0) unless transparency is a safety-critical reminder, in which case label it leave default or default/safety check.

Fresh Label controls in the user's live editor also default to BorderThickness=0. The defaults lab did not serialize BorderThickness for a fresh standalone Label, and the user confirmed the live editor shows 0. Do not make BorderThickness=0 a manual Label step unless it is a labelled safety check.

Sort Order Enum

Use:

SortOrder.Ascending
SortOrder.Descending

Do not use bare Ascending or Descending.

DateAdd Day Filters

In the Training Tracker expiring-soon formulas, the live editor accepted the day unit as a quoted string:

DateAdd(Today(), 60, "Days")

Do not normalize this to bare Days. Do not change it to TimeUnit.Days in this guide unless the live editor is rechecked.

Modern Combo Box

Modern Combo box rows need placeholder fields made explicit:

InputTextPlaceholder="Applies to..."

In the user's live editor, modern Combo box ItemDisplayText=ThisItem.Value is already the default. Do not make ItemDisplayText=ThisItem.Value a manual step for simple value tables unless it is labelled leave default or default/safety check.

For Office365Users search results:

ItemDisplayText=ThisItem.DisplayName

Do not use Placeholder for modern Combo box.

Still set ItemDisplayText explicitly when the Items row shape does not display from a Value field, for example Office365Users search rows.

In the user's live editor, modern Combo box SelectMultiple=true is already the default. Do not make SelectMultiple=true a manual step unless it is labelled leave default or default/safety check. For single-select Combo boxes, set SelectMultiple=false explicitly.

Modern Dropdown With Table Items

When a modern Dropdown uses a table of records, state the display formula explicitly:

ItemDisplayText=ThisItem.Label

For Training Tracker recurrence dropdowns, keep reading the numeric recurrence from:

drpNewRecur.Selected.Months
drpEditRecur.Selected.Months

Modern Toggle

Use Checked for state and Label for caption text in this guide family. Do not use .Value to read modern Toggle state.

Office365Users Casing

Preserve operation-specific casing:

ModernButton BasePaletteColor — Light Colours Always Render Dark

BasePaletteColor is a Fluent 2 seed, not a fill. The framework derives fill, text, and hover colours from it. Light and pastel seeds are treated as low-contrast accents and overrides them with dark fills.

Use only dark, saturated colours: - Navy: RGBA(24,95,165,1) - Dark green: RGBA(34,139,80,1) or RGBA(34,139,80,1) - Dark grey: RGBA(120,120,120,1) - Dark red: RGBA(163,45,45,1)

For any button that needs a light or white fill (tab nav active/inactive, etc.), switch to Classic Button and use Fill, HoverFill, PressedFill directly.

Tab Buttons Must Be Classic Buttons

Modern Button cannot conditionally switch between light and dark fills for active/inactive tab states. Replace any ModernButton used as a tab navigation button with a Classic/Button and set Fill conditionally.

IsOdd Does Not Exist

IsOdd() is not a Power Apps function. Use Mod(value, 2) = 1.

\xB7 Prints as Literal Text

Power Apps strings do not support \x or \u escape sequences. \xB7 outputs the four characters \xB7 literally. Use Char(183) for the middle dot ·.

SortByColumns Fails on Choice Fields

SortByColumns cannot sort on a Choice column because the column returns a record. Use Sort(source, ChoiceField.Value, SortOrder.Ascending) to unwrap the Choice record to a string first.

Multi-Select Choice: in Operator Silently Returns Nothing

"Army" in ApplicableTo checks for a full record match against a string — it always returns false. Use CountIf(ApplicableTo, Value = "Army") > 0.

Launch Opens in Current Tab

Launch(url) reuses the current tab. Use Launch(url, {}, LaunchTarget.New) to open in a new tab.

Collection Projections Must Include All Downstream Fields

If a detail screen reads varCourse.CourseHost, varCourse.CourseURL, etc., those fields must either be in the ForAll projection that built colMyTraining, or the detail screen must look them up directly from SharePoint. They do not flow through automatically.

varViewingForSelf Must Be Initialised

Add If(IsBlank(varViewingForSelf), Set(varViewingForSelf, true)) to the top of any screen OnVisible that branches on this variable. If it is never set, the screen body is skipped entirely.

Form Does Not Reset Between Visits

Add ResetForm(frmCert) to a form screen's OnVisible. Without it, the form shows the previous record's data when the user navigates back and taps a different item.

SharePoint Required Column Causes Network Error

A Patch against a SharePoint column marked Required with a blank value returns "Network error: Field 'X' is required." Unmark the column as Required in SharePoint, or add app-level validation to prevent Patch from running when the field is blank.

Notify-First Validation Pattern Breaks Error Borders

If validation calls Notify(...) before setting error variables, the Notify message appears but the error borders (Visible driven by error variables) never show because the success path immediately clears everything. Set all error variables first, then check them in an If guard. See ui-patterns.md for the correct pattern.


ui-patterns.md

UI Patterns

UI Patterns

Last checked: 2026-06-23

Reusable UI patterns verified in the Training Tracker live build. Use these as the basis for equivalent constructs in any future app.


Rounded Panel Card (Classic Button)

Use a Classic Button as a rounded white card background. Do not use Rectangle controls — they don't support the same radius properties in this guide family.

- recPanel:
    Control: Classic/Button@2.2.0
    Properties:
      Text: =""
      DisplayMode: =DisplayMode.View
      Fill: =RGBA(255,255,255,1)
      HoverFill: =RGBA(255,255,255,1)
      PressedFill: =RGBA(255,255,255,1)
      BorderColor: =RGBA(221,227,234,1)
      BorderThickness: =1
      RadiusTopLeft: =12
      RadiusTopRight: =12
      RadiusBottomLeft: =12
      RadiusBottomRight: =12
      X: =283
      Y: =80
      Width: =800
      Height: =120

Layer rule: this control must be listed BEFORE (lower in Children) any controls that sit on top of it. In Power Apps, controls listed later in the Children array appear in front.


Tab Navigation Bar (Two Tabs)

Classic buttons give full conditional Fill control. ModernButton cannot render light-coloured inactive states reliably (see live-build-lessons.md).

- btnTabPeople:
    Control: Classic/Button@2.2.0
    Properties:
      Text: ="People"
      Fill: =If(varTab="People", RGBA(34,139,80,1), RGBA(255,255,255,1))
      Color: =If(varTab="People", RGBA(255,255,255,1), RGBA(24,95,165,1))
      HoverFill: =If(varTab="People", RGBA(28,115,65,1), RGBA(235,241,250,1))
      PressedFill: =If(varTab="People", RGBA(22,95,55,1), RGBA(210,225,245,1))
      HoverColor: =Self.Color
      PressedColor: =Self.Color
      BorderColor: =RGBA(24,95,165,1)
      BorderThickness: =1
      RadiusTopLeft: =8
      RadiusTopRight: =8
      RadiusBottomLeft: =8
      RadiusBottomRight: =8
      OnSelect: =Set(varTab, "People")
      X: =672
      Y: =48
      Width: =120
      Height: =36

- btnTabCourses:
    Control: Classic/Button@2.2.0
    Properties:
      Text: ="Courses"
      Fill: =If(varTab="Courses", RGBA(34,139,80,1), RGBA(255,255,255,1))
      Color: =If(varTab="Courses", RGBA(255,255,255,1), RGBA(24,95,165,1))
      HoverFill: =If(varTab="Courses", RGBA(28,115,65,1), RGBA(235,241,250,1))
      PressedFill: =If(varTab="Courses", RGBA(22,95,55,1), RGBA(210,225,245,1))
      HoverColor: =Self.Color
      PressedColor: =Self.Color
      BorderColor: =RGBA(24,95,165,1)
      BorderThickness: =1
      RadiusTopLeft: =8
      RadiusTopRight: =8
      RadiusBottomLeft: =8
      RadiusBottomRight: =8
      OnSelect: =Set(varTab, "Courses")
      X: =800
      Y: =48
      Width: =120
      Height: =36

Tab body controls use Visible: =varTab = "People" or Visible: =varTab = "Courses".

Initialise in App.OnStart or screen OnVisible:

Set(varTab, "People")

Error Border Pattern (Validation Highlight)

A red Classic Button positioned behind an input field simulates a red border. Place it before the input in the Children list so it appears behind.

Template (replace txtMyField with the actual control name, varErrMyField with the error variable):

- recErrMyField:
    Control: Classic/Button@2.2.0
    Properties:
      Text: =""
      DisplayMode: =DisplayMode.View
      Fill: =RGBA(163,45,45,1)
      HoverFill: =Self.Fill
      PressedFill: =Self.Fill
      BorderThickness: =0
      RadiusTopLeft: =8
      RadiusTopRight: =8
      RadiusBottomLeft: =8
      RadiusBottomRight: =8
      Height: =txtMyField.Height + 4
      Width: =txtMyField.Width + 4
      X: =txtMyField.X - 2
      Y: =txtMyField.Y - 2
      Visible: =varErrMyField

The +4 height/width and -2 X/Y creates a 2px overhang on each side — it reads as a red border, not a red fill.

If the field moves, the error border moves with it because it references the field's X/Y/Width/Height.


Validation Pattern (Set Error Vars Then If Guard)

Do not use the Notify-first pattern for form validation. Notify fires before the error variables are set, so red borders don't appear.

Use this pattern for every save button that validates required fields:

Set(varErrTitle,  IsBlank(Trim(txtTitle.Text)));
Set(varErrApplic, CountRows(cmbApplic.SelectedItems) = 0);
Set(varErrHost,   IsBlank(drpHost.Selected.Value) || drpHost.Selected.Value = "Select...");
Set(varErrURL,    IsBlank(txtURL.Text));

If(
    varErrTitle || varErrApplic || varErrHost || varErrURL,
    false,
    Patch(DataSource, BaseRecord,
        {
            Title:      Trim(txtTitle.Text),
            ApplicableTo: ForAll(cmbApplic.SelectedItems, {Value: Value}),
            Host:       {Value: drpHost.Selected.Value},
            URL:        txtURL.Text
        }
    );
    Set(varErrTitle, false);
    Set(varErrApplic, false);
    Set(varErrHost, false);
    Set(varErrURL, false);
    Notify("Saved.", NotificationType.Success);
    ClearCollect(colData, DataSource)
)

Key rules: - All Set(varErrX, ...) calls run unconditionally at the top, before the If. - The If guard checks all error variables together. - On success, all error variables are reset to false inside the success block. - The Patch only runs if no errors are set.


Clearing Error Borders When User Starts Correcting

Add OnChange to each validated input to clear the error variable as soon as the user types or changes the field:

txtTitle.OnChange:   Set(varErrTitle, false)
cmbApplic.OnChange:  Set(varErrApplic, false)
drpHost.OnChange:    Set(varErrHost, false)
txtURL.OnChange:     Set(varErrURL, false)

Resetting Error Borders When Opening Edit Panel

Error variables linger from the previous save attempt. When the user opens an edit panel (e.g. clicking a pencil icon), reset all error variables:

Add to the pencil/edit button's OnSelect:

Set(varErrTitle, false);
Set(varErrURL, false);
Set(varErrApplic, false);
Set(varErrHost, false)

Without this, red borders from a previous failed save remain visible when the edit panel opens.


Use a Gallery + Classic Button. The Badge control cannot loop over a collection.

- galPills:
    Control: Gallery@2.15.0
    Variant: Vertical
    Properties:
      Items: =sourceTable
      TemplatePadding: =0
      TemplateSize: =90
      WrapCount: =5
      Height: =36
      Width: =500
      Visible: =CountRows(sourceTable) > 0
    Children:
      - btnPill:
          Control: Classic/Button@2.2.0
          Properties:
            Text: =ThisItem.Value
            DisplayMode: =DisplayMode.View
            Fill: =RGBA(24,95,165,1)
            HoverFill: =Self.Fill
            PressedFill: =Self.Fill
            Color: =RGBA(255,255,255,1)
            HoverColor: =RGBA(255,255,255,1)
            PressedColor: =RGBA(255,255,255,1)
            BorderThickness: =0
            Height: =28
            Width: =84
            RadiusTopLeft: =14
            RadiusTopRight: =14
            RadiusBottomLeft: =14
            RadiusBottomRight: =14
            Size: =10
            Y: =4

Replace sourceTable with the actual table expression. For a SharePoint multi-select Choice field via LookUp:

Items: =LookUp('TT Courses', ID = Value(varCourse.CourseID)).ApplicableTo

For colour-coded pills by value (e.g. staff type):

Fill: =Switch(
    ThisItem.Value,
    "Civil Servant", RGBA(56,152,220,1),
    "Army",          RGBA(59,109,17,1),
    "Contractor",    RGBA(239,159,39,1),
    RGBA(108,117,125,1)
)

Increase TemplateSize and btnPill.Width together if long values like "Civil Service Learning" are clipped.


Screen Header Bar

Full-width blue header with a back icon and title:

- recHeader:
    Control: Classic/Button@2.2.0
    Properties:
      Text: =""
      DisplayMode: =DisplayMode.View
      Fill: =RGBA(24,95,165,1)
      HoverFill: =RGBA(24,95,165,1)
      PressedFill: =RGBA(24,95,165,1)
      BorderThickness: =0
      RadiusTopLeft: =0
      RadiusTopRight: =0
      RadiusBottomLeft: =0
      RadiusBottomRight: =0
      X: =0
      Y: =0
      Width: =1366
      Height: =72

- icoBack:
    Control: Classic/Icon@2.5.0
    Properties:
      Icon: =Icon.ChevronLeft
      Color: =RGBA(230,241,251,1)
      BorderColor: =RGBA(0,18,107,1)
      OnSelect: =Back()
      X: =16
      Y: =24
      Width: =24
      Height: =24

- lblScreenTitle:
    Control: Label@2.5.1
    Properties:
      Text: ="Screen Title"
      Color: =RGBA(255,255,255,1)
      FontWeight: =FontWeight.Bold
      Size: =16
      Font: =Font.'Open Sans'
      X: =52
      Y: =4
      Width: =900
      Height: =44

- lblScreenSub:
    Control: Label@2.5.1
    Properties:
      Text: ="Subtitle or context"
      Color: =RGBA(181,212,244,1)
      Size: =11
      Font: =Font.'Open Sans'
      X: =52
      Y: =44
      Width: =900
      Height: =24

Training Status Colour Coding

Consistent colour values for status labels and fills across the app:

Status Fill Text
Expired RGBA(163,45,45,1) RGBA(255,255,255,1)
Not Started RGBA(108,117,125,1) RGBA(255,255,255,1)
Expiring Soon RGBA(180,100,0,1) RGBA(255,255,255,1)
In Date RGBA(59,109,17,1) RGBA(255,255,255,1)
Complete RGBA(59,109,17,1) RGBA(255,255,255,1)

Switch formula for Fill:

Switch(ThisItem.TrainingStatus,
    "Expired",       RGBA(163,45,45,1),
    "Not Started",   RGBA(108,117,125,1),
    "Expiring Soon", RGBA(180,100,0,1),
    "In Date",       RGBA(59,109,17,1),
    "Complete",      RGBA(59,109,17,1),
    RGBA(108,117,125,1)
)

Days Remaining / Overdue Label

Show urgency text below a date label. Separate label, colour-coded.

Text = If(
    IsBlank(ThisItem.ExpiresOn),
    "",
    If(
        ThisItem.ExpiresOn >= Today(),
        Text(DateDiff(Today(), ThisItem.ExpiresOn, TimeUnit.Days)) & " days remaining",
        "Overdue by " & Text(DateDiff(ThisItem.ExpiresOn, Today(), TimeUnit.Days)) & " days"
    )
)

Color = If(
    IsBlank(ThisItem.ExpiresOn),
    RGBA(136,135,128,1),
    ThisItem.ExpiresOn < Today(), RGBA(163,45,45,1),
    DateDiff(Today(), ThisItem.ExpiresOn, TimeUnit.Days) <= 60, RGBA(180,100,0,1),
    RGBA(59,109,17,1)
)

Visible = !IsBlank(ThisItem.ExpiresOn)

Visible = !IsBlank(ThisItem.ExpiresOn) is critical — without it the label appears for courses with no expiry date.


Date + Middle Dot Separator Label

A date label with · as a separator between date and expiry:

If(
    IsBlank(ThisItem.DateDone),
    "Not yet completed",
    "Completed " & Text(ThisItem.DateDone, "dd mmm yyyy") &
    If(
        IsBlank(ThisItem.ExpiresOn),
        "",
        " " & Char(183) & " expires " & Text(ThisItem.ExpiresOn, "dd mmm yyyy")
    )
)

Char(183) is the only correct way to produce · in a Power Apps string. Never use \xB7.


Context-Aware Search and Filter (Shared Controls, Multiple Tabs)

When a search input and a dropdown filter are shared between two gallery tabs, wire each gallery's Items to the same controls and make the search placeholder context-aware.

Search placeholder:

txtSearch.Placeholder = If(varTab = "People", "Search name or email...", "Search course name...")

People gallery filter:

SortByColumns(
    Filter(
        'TT Personnel',
        Active = true &&
        (IsBlank(txtSearch.Text) ||
         txtSearch.Text in Title ||
         txtSearch.Text in Email) &&
        (IsBlank(drpTypeFilter.Selected.Value) ||
         drpTypeFilter.Selected.Value = "All types" ||
         StaffType.Value = drpTypeFilter.Selected.Value)
    ),
    "Title", SortOrder.Ascending
)

Courses gallery filter (multi-select Choice on ApplicableTo):

Sort(
    Sort(
        Filter(
            colCourses,
            (IsBlank(txtSearch.Text) ||
             txtSearch.Text in Title) &&
            (IsBlank(drpTypeFilter.Selected.Value) ||
             drpTypeFilter.Selected.Value = "All types" ||
             CountIf(ApplicableTo, Value = drpTypeFilter.Selected.Value) > 0)
        ),
        Title, SortOrder.Ascending
    ),
    Status.Value, SortOrder.Ascending
)

ModernDropdown Default — Record Format

A ModernDropdown Default must be a record matching the Items row shape, not a plain string.

For Items bound to a simple string array:

Default = {Value: "All types"}

For Items bound to a table with a Label column:

Default = {Label: "Every year", Months: 12}

A plain string like Default = "All types" will cause the dropdown to show blank on load, and Filter formulas that check .Selected.Value will return no results.


Non-Compliant Filter Toggle

Add a modern Toggle to let admins quickly filter to only staff with outstanding training:

tglNonCompliantOnly.Label = "Non-compliant only"

In the gallery Items filter, add as the last condition:

(!tglNonCompliantOnly.Checked || Outstanding > 0)

When the toggle is off (unchecked), !false = true, so the condition passes for all rows. When on, only rows with Outstanding > 0 pass.


TeamMember Drill-Down: Setting Context for Viewing Another Person's Training

When navigating from a team gallery to view someone else's training:

Set(varViewingPerson, LookUp('TT Personnel', Lower(Email) = Lower(ThisItem.Email)));
Set(varViewingForSelf, false);
ClearCollect(colViewRecords, Filter(colAllRecords, Lower(PersonEmail) = Lower(ThisItem.Email)));

Then build colViewTraining the same way as colMyTraining but using the selected person's email and staff type.

On scrMyTraining, switch the gallery source:

galMyTraining.Items = If(varViewingForSelf, colMyTraining, colViewTraining)

And update the greeting label:

If(varViewingForSelf,
    "Hello, " & First(Split(varMe.Title," ")).Value,
    "Viewing: " & varViewingPerson.Title)

- btnGoToCourse:
    Control: ModernButton@1.0.0
    Properties:
      Text: ="Go to course →"
      BasePaletteColor: =RGBA(24,95,165,1)
      OnSelect: =Launch(LookUp('TT Courses', ID = Value(varCourse.CourseID), CourseURL), {}, LaunchTarget.New)
      Visible: =!IsBlank(LookUp('TT Courses', ID = Value(varCourse.CourseID), CourseURL))
      Width: =200
      Height: =30

Always use LaunchTarget.New as the third argument. The second argument must be {} (empty record).


My Team Button (Auto-Hides When No Direct Reports)

- btnMyTeam:
    Control: ModernButton@1.0.0
    Properties:
      Text: ="My team"
      BasePaletteColor: =RGBA(46,110,145,1)
      Visible: =CountRows(Filter('TT Personnel', Lower(LineManagerEmail) = varMyEmail && Active = true)) > 0
      OnSelect: =Navigate(scrTeamMember, ScreenTransition.Cover)
      X: =1086
      Y: =16
      Width: =124
      Height: =40

The button is invisible when the current user has no active direct reports. No additional logic needed.


powerfx-patterns.md

Power Fx Patterns

Power Fx Patterns

Last checked: 2026-06-20

Sources:

Sorting

Use full enum values:

SortByColumns(Source, "Title", SortOrder.Ascending)
SortByColumns(Source, "Created", SortOrder.Descending)

Do not use bare Ascending or Descending.

DateAdd / DateDiff Unit Argument — Always a Quoted String

Hard rule (confirmed broken in live builds — Training Tracker and Policy Tracker):

The time-unit argument to DateAdd and DateDiff must be a quoted string, not a bare identifier or enum:

// CORRECT
DateAdd(Today(), 7, "Days")
DateAdd(Today(), Mod(5 - Weekday(Today()) + 7, 7), "Days")
DateDiff(Today(), ExpiryDate, "Days")

// WRONG — causes runtime error in canvas apps
DateAdd(Today(), 7, Days)
DateAdd(Today(), 7, TimeUnit.Days)

Microsoft Learn sometimes documents TimeUnit.Days but this does not work in the canvas app formula bar. Always use quoted string literals: "Days", "Months", "Years", "Hours", "Minutes", "Seconds".

Filtering And Lookup

Use Filter for many records and LookUp for the first matching record.

Filter('TT Personnel', Active = true)
LookUp('TT Personnel', Lower(Email) = varMyEmail)

Use As aliases in nested formulas:

Filter(colPeople As P, Lower(P.ManagerEmail) = varMyEmail)

Patch

Use Patch(DataSource, BaseRecord, ChangeRecord) to update records. Use Defaults(DataSource) to create records.

Patch('TT Courses', Defaults('TT Courses'), {Title: txtCourse.Text})
Patch('TT Courses', varEditCourse, {Title: txtEditCourse.Text})

For SharePoint Choice columns, patch records with a Value field:

{Status: {Value: "Active"}}

For multi-choice columns, patch a table of {Value: ...} records:

{ApplicableTo: ForAll(cmbApplic.SelectedItems As T, {Value: T.Value})}

Collections

Prefer explicit shape when initializing collections that will be patched or reused later. Avoid schema-less empty table literals in guide formulas.

Good:

ClearCollect(colCourses, 'TT Courses')

Avoid:

ClearCollect(colCourses, [])

Record Scope

When a formula is inside a gallery and also uses nested ForAll, Filter, AddColumns, or With, capture the selected gallery row first:

With(
    {selectedPerson: ThisItem},
    Filter(colRecords, Lower(PersonEmail) = Lower(selectedPerson.Email))
)

Do not use ScreenTransition.Back. For browser-like back behavior, use:

Back()

For navigation transitions, use valid enum values such as:

Navigate(scrHome, ScreenTransition.Fade)
Navigate(scrHome, ScreenTransition.None)

Launch (Open URL in New Tab)

Launch(url) alone reuses the current browser tab, navigating away from the app.

Always use LaunchTarget.New to open in a new tab:

Launch(urlValue, {}, LaunchTarget.New)

The second argument must be {} (empty record placeholder).

Alternating Row Colours

Do not use ThisItem.ItemIndex — it shifts when the gallery filters or sorts.

For SharePoint-backed galleries (items have ThisItem.ID):

If(Mod(ThisItem.ID, 2) = 0, RGBA(255,255,255,1), RGBA(247,249,252,1))

For collection-backed galleries with a numeric course or record ID:

If(Mod(ThisItem.CourseID, 2) = 0, RGBA(255,255,255,1), RGBA(247,249,252,1))

Multi-Select Choice Field Filter

The in operator checks full record equality. A multi-select Choice column holds a table of {Value: "..."} records — "Army" in ApplicableTo always returns false.

Use CountIf:

CountIf(ApplicableTo, Value = drpFilter.Selected.Value) > 0

Inside a Filter:

Filter(source,
    IsBlank(drpFilter.Selected.Value) ||
    drpFilter.Selected.Value = "All" ||
    CountIf(ApplicableTo, Value = drpFilter.Selected.Value) > 0
)

Sort Choice Field

SortByColumns on a SharePoint Choice field fails because the field returns a record.

Use Sort() with .Value to unwrap:

Sort(source, Status.Value, SortOrder.Ascending)

Double-sort (e.g. active before archived, then alphabetical):

Sort(
    Sort(source, Title, SortOrder.Ascending),
    Status.Value, SortOrder.Ascending
)

Special Characters in Strings

Power Apps does not support \x or \u escape sequences. Use Char(decimal):

Char(183)   // · middle dot / interpunct

Training Status Calculation

Standard pattern used across the Training Tracker:

If(IsBlank(rec.DateCompleted), "Not Started",
   C.RecurrenceMonths = 0, "Complete",
   DateAdd(rec.DateCompleted, C.RecurrenceMonths, TimeUnit.Months) < Today(), "Expired",
   DateAdd(rec.DateCompleted, C.RecurrenceMonths, TimeUnit.Months) <= DateAdd(Today(), 60, "Days"), "Expiring Soon",
   "In Date")

Add a numeric sort key then sort twice:

Sort(
    Sort(source, CourseName, SortOrder.Ascending),
    Switch(TrainingStatus,
        "Expired",       1,
        "Not Started",   2,
        "Expiring Soon", 3,
        "In Date",       4,
        "Complete",      5,
        99),
    SortOrder.Ascending
)

Or use AddColumns:

SortByColumns(
    AddColumns(
        source,
        SortKey, Switch(TrainingStatus,
            "Expired",       1,
            "Not Started",   2,
            "Expiring Soon", 3,
            "In Date",       4,
            "Complete",      5)
    ),
    "SortKey", SortOrder.Ascending,
    "CourseName", SortOrder.Ascending
)

Concat Multi-Select Choice for Display

Concat(record.ApplicableTo, Value, ", ")

ForAll Multi-Select Choice Patch

Prefer the no-alias form — the As T alias can cause type mismatches in some versions:

ApplicableTo: ForAll(cmbApplic.SelectedItems, {Value: Value})

Collection ID vs SharePoint ID Type Mismatch

When a collection stores an ID that was originally from SharePoint (numeric), use Value() to force numeric comparison in LookUp:

LookUp('TT Courses', ID = Value(varCourse.CourseID))

Days Remaining / Overdue

If(
    ExpiresOn >= Today(),
    Text(DateDiff(Today(), ExpiresOn, TimeUnit.Days)) & " days remaining",
    "Overdue by " & Text(DateDiff(ExpiresOn, Today(), TimeUnit.Days)) & " days"
)

Visible Guard for Optional Date Fields

Any label or pill that only makes sense when an expiry date exists:

Visible = !IsBlank(ThisItem.ExpiresOn)

If Chain Validation Before Patch

Do not use Notify-first. Set all error variables first, then gate the Patch:

```powerfx Set(varErrTitle, IsBlank(Trim(txtTitle.Text))); Set(varErrURL, IsBlank(txtURL.Text));

If( varErrTitle || varErrURL, false, Patch(...); Set(varErrTitle, false); Set(varErrURL, false); Notify("Saved.", NotificationType.Success) )


sharepoint-office365users.md

SharePoint & Office365Users

SharePoint And Office365Users Reference

Last checked: 2026-06-20

Sources:

SharePoint List Names

List names containing spaces must be quoted in formulas:

'TT Personnel'
'TT Courses'
'TT TrainingRecords'

Do not write unquoted names such as TT Personnel.

SharePoint Choice Fields

Single choice fields use a record shape:

{Status: {Value: "Active"}}

Multi-choice fields use a table of choice records:

{ApplicableTo: ForAll(cmbApplicable.SelectedItems As T, {Value: T.Value})}

SharePoint IDs

SharePoint-backed galleries usually expose ThisItem.ID. Collections only expose ID if the collection was built from data that includes it. Do not use ThisItem.ID in a collection-based gallery unless the collection schema is explicit.

Office365Users

The connector has inconsistent casing across operations in the Training Tracker build.

Observed and preserved in this guide:

Do not normalize these names by instinct. Verify the exact connector output for the operation used.

People Search Combo Box

For a modern Combo box searching users:

Office365Users.SearchUserV2({searchTerm: cmbNewPerson.SearchText, top: 15}).value

Set display text to the returned display-name field:

ItemDisplayText=ThisItem.DisplayName

Set single-select explicitly where needed:

SelectMultiple=false

Use InputTextPlaceholder, not Placeholder, for the modern Combo box hint text.


yaml-validation-checklist.md

YAML Validation Checklist

YAML Pre-Output Validation Checklist

Last checked: 2026-06-23

Run through this checklist mentally before generating or outputting ANY screen YAML. Do not skip items based on "this section won't apply here" — check every item every time. A single missed property causes a PA2108 error that breaks the entire paste.


1. YAML Structure

Known valid version strings

Label@2.5.1
  Do not use radius properties on Label@2.5.1
Classic/Button@2.2.0
Classic/Icon@2.5.0
Gallery@2.15.0
  Valid classic variants: Vertical, Horizontal, VariableHeight
Classic/TextInput@2.3.2
Classic/DropDown@2.3.1
Classic/ComboBox@2.4.0
Classic/DatePicker@2.6.0
Classic/CheckBox@2.1.0
Classic/Toggle@2.1.0
Form@2.4.4
ModernButton@1.0.0
ModernTextInput@1.1.0
ModernDropdown@1.0.1
ModernCombobox@1.1.0
Toggle@1.1.5
ModernDatePicker@1.0.0
GroupContainer@1.5.0
Rectangle@2.3.0
Image@2.2.3
Timer@2.1.0
HtmlViewer@2.1.0

2. Z-Order

Controls appear in the order listed — later = on top. Verify:


3. Property Blocklist — Check Every Control

ModernButton@1.0.0 — do not generate these: - [ ] FontWeight — not exposed; causes PA2108 - [ ] Color as a workaround for BasePaletteColor — remove and fix the seed colour instead - [ ] Conditional BasePaletteColor with light/pastel branches — use Classic Button instead - [ ] Light or pastel BasePaletteColor (anything that reads like a pastel) — pick a darker seed

Toggle@1.1.5 — do not generate: - [ ] Size (font size) — not exposed; causes PA2108 - [ ] Default for initial state — use Checked - [ ] .Value to read state — use .Checked - [ ] Text for label — use Label

ModernCombobox@1.1.0 — do not generate: - [ ] Placeholder — use InputTextPlaceholder - [ ] HintText — use InputTextPlaceholder - [ ] Default for multi-select preselection — use DefaultSelectedItems

ModernTextInput@1.1.0 — do not generate: - [ ] HintText — use Placeholder

ModernDropdown@1.0.1 — verify: - [ ] Default is a record {Value: "..."} not a plain string — a plain string causes blank display on load - [ ] If Items is table-shaped, ItemDisplayText is set explicitly


4. Power Fx Formula Checks

For every formula in the YAML, check:


5. Architecture Checks


6. SharePoint Integration


7. ModernButton Colour Check

For every ModernButton in the YAML:

Standard approved seeds: - Primary action: =RGBA(0,78,66,1) (army dark green) - Secondary / cancel: =RGBA(120,120,120,1) - Destructive: =RGBA(163,45,45,1)


8. App.OnStart Separation


9. Delivery Readiness


builder-system.md

Builder System

App Builder System

Last checked: 2026-06-23

This document defines the conventions, naming rules, and workflow for generating a complete new Power Apps canvas app from scratch. When asked to build a new app, follow this document before writing a single line of YAML.


Phase 0 — Consultation Q&A (Do This First, Always)

When the user requests a new app, do NOT start building immediately. Run a proper consultation phase first.

Step 0a — First Response

When the user describes an app they want: 1. Acknowledge what they've told you. 2. Think through the use case and identify every gap, edge case, and design decision that needs clarifying. 3. Ask all your questions in a single message — grouped by topic, clearly numbered. Do not drip-feed questions one by one. 4. Be thorough. It is better to ask 10 questions now than to build something wrong and need to redesign it later.

The consultation is a proper design session — treat it like a requirements meeting. The user knows the business domain; you know the technical implications. Ask enough questions to design the data model, access rules, workflow, and screens with confidence before touching any code.

Question Topics to Cover (derive specific questions from these)

Purpose and scope: - What does this app need to do, exactly? What is the core task a user performs? - Who uses it and what are their different roles? - Are there any roles that can do things other roles cannot? - How many users roughly?

Workflow — standard user: - Walk me through what a standard user does when they open the app. - What are the key actions they take? (add, edit, view, search, filter, submit) - Is there any concept of "my records" vs "all records"?

Workflow — manager/admin: - What can a manager or admin do that a standard user cannot? - Can managers see or edit other people's records? - Is there any kind of approval or sign-off flow?

Business rules: - Are there any date-driven rules? (expiry, deadlines, renewal intervals, overdue logic) - What does a record look like when it is "complete" vs "incomplete" vs "overdue"? - Are there any status values a record can have? What triggers a status change? - Are there any mandatory fields? (These become the validation rules in the app)

Data relationships: - Are there different categories or types of thing being tracked? (e.g. different course types, asset categories) - Does a person have a line manager relationship? Can managers update on behalf of others? - Are there any lists of reference data that don't change often? (e.g. list of departments, list of roles)

Edge cases: - What happens when someone leaves / is deactivated? - What happens if a record needs to be deleted vs archived? - Are there any records that should be read-only to most users?

Notifications and reporting: - Does anyone need to be notified when something changes, expires, or is submitted? - Does anyone need to export or report on the data?

Branding: - Is the primary colour the default army dark green (#004e42), or a different colour? - Any specific app name?

Technical: - Are all users on the same M365 tenant? - Is there an existing SharePoint site to use, or a new one?

What NOT to ask the user

Step 0b — Follow-Up Questions

After the user answers, review their responses critically. If any answer raises new questions or reveals a gap, ask those as a short follow-up — still in one message.

It is acceptable to do up to 3 rounds of questions if the app is complex. Never build until you are confident you understand every part of the workflow.

Step 0c — Confirm Before Building

When you have enough information to design the complete app, present a brief summary: - App name - Roles and what each can do - Core screens (just names and one-line purpose) - Key business rules

Then end with:

Ready to build? Any final changes before I go ahead?

Wait for the user to say "build" or ask more questions. Do not start Phase 1 until the user explicitly confirms.


Phase 1 — SharePoint List Design (Builder's Responsibility)

Based on the workflow the user described, design all SharePoint lists completely. Present the full design to the user as a setup checklist — column by column — so they can create it in SharePoint without needing to make any decisions.

Output format to the user

For each list, produce a table like this:

List name: AB ListName

Column name Type Options / Notes
Title Single line of text Built-in — rename to meaningful label if needed
Status Choice Active, Archived
Email Single line of text Store email in lowercase
... ... ...

Tell the user: exact column names (they must match in Power Fx), exact type to select in SharePoint, exact Choice option strings with their capitalisation, which columns to mark as Not Required (all of them — enforce required in the app).

List name rules

Column type rules

Intended use SharePoint column type Power Fx access
Short text Single line of text record.ColumnName
Long text Multiple lines of text (plain) record.ColumnName
Number Number record.ColumnName
Date Date and Time (Date Only) record.ColumnName, use Text(date, "dd mmm yyyy")
Single choice Choice record.ColumnName.Value
Multi-select choice Choice (Allow multiple selections) table of {Value: "..."} records
Yes/No Yes/No record.ColumnName (boolean)
Person/Group Person or Group returns a record; use specific sub-fields
URL Single line of text record.ColumnName — NOT SharePoint Hyperlink type
Attachment Built-in (on SharePoint list) accessed via Edit Form Attachments card only

Required field rule

Mark ALL columns as Not Required in SharePoint. Enforce required fields in the app using the Set-error-vars-then-If-guard pattern (see ui-patterns.md). This gives users a clear red-border error instead of a vague network error from SharePoint.


Phase 2 — Variable and Collection Naming

Global variables (Set)

Prefix Purpose Example
var Any global variable varMyEmail, varTab, varEditCourse
varMe Current user's record from the people list varMe
varErr Validation error flag (boolean) varErrTitle, varErrURL
varViewing Context for viewing another user's data varViewingPerson, varViewingForSelf
varSelected Currently selected record for a detail screen varSelectedCourse, varRecord
varEdit Record being edited in an edit panel varEditCourse, varEditPerson

Collections (ClearCollect)

Prefix Purpose Example
col Any collection colCourses, colMyRecords
colMy Current user's records colMyTraining, colMyRecords
colView Records for the person being viewed colViewTraining, colViewRecords
colAll All records (admin context) colAllRecords, colAllPersonnel
colCompliance Computed compliance summary colCompliance

Control naming

Prefix Control type
btn Button (Classic or Modern)
lbl Label
txt Text input (Modern)
cmb Combo box (Modern)
drp Dropdown (Modern or Classic)
gal Gallery
rec Classic Button used as a panel/background
ico Icon
tgl Toggle (Modern)
frm Form
img Image
tim Timer

Phase 3 — App.OnStart Template

Every app starts with these:

Set(varMyEmail, Lower(User().Email));
Set(varMe, LookUp('AppName Personnel', Lower(Email) = varMyEmail));
Set(varTab, "DefaultTab");
ClearCollect(colMainList, 'AppName MainList');

Add ClearCollect calls for every list the app needs at startup. Always use Lower() when comparing email addresses.


Phase 4 — Screen Architecture

Standard screens

Every app should have at minimum:

Screen Purpose
scrStart Loading / login check / route to correct home
scrHome Main user-facing screen
scrDetail Detail / record view for a selected item
scrAdmin Admin management screen (if admin role exists)

Add screens for team management, profile pages, archive views, etc. as needed.

Screen naming convention

Screen OnVisible template

Every screen that shows data from a collection should reload that collection at the top of OnVisible:

ClearCollect(colCourses, 'TT Courses');
ClearCollect(colMyRecords,
    Filter('TT TrainingRecords', Lower(PersonEmail) = varMyEmail));

For screens that can show self-view or team-member view, add the initialisation guard:

If(IsBlank(varViewingForSelf), Set(varViewingForSelf, true));

Phase 5 — Control Patterns

Use Classic Button for

Use Modern Button for

Use Modern Text Input for

Use Modern Combo Box for

Use Modern Dropdown for

Use Modern Toggle for

Use Classic Edit Form for


Phase 6 — YAML Generation Rules

Format requirements

Z-order rule

Controls listed LATER in the Children array appear IN FRONT. Background panels must be listed BEFORE the controls they sit behind.

Children order

  1. Background panels and cards (recPanel, recHeader)
  2. Gallery controls
  3. Input controls and labels
  4. Overlay panels (edit panels, add panels — placed after the controls they cover)
  5. Error border controls (immediately before the field they highlight — lower z-order)

Wait — error borders must appear BEHIND their field. Since later = in front, error borders must be listed BEFORE the field they highlight.

Correct order for a field with an error border:

Children:
  - recErrTitle:       # error border — listed first = behind
      ...
  - txtTitle:          # field — listed after = in front
      ...

Known invalid properties (do not generate)

Audit before pushing

Run:

python3 tools/audit-guide.py path/to/guide.html
rg -n "FontWeight" screens/ScreenName.yaml
rg -n "Toggle.*Size|Size.*Toggle" screens/ScreenName.yaml

Phase 7 — Patch Formula Template

For an Add form (creates new record):

Set(varErrField1, IsBlank(Trim(txtField1.Text)));
Set(varErrField2, CountRows(cmbField2.SelectedItems) = 0);

If(
    varErrField1 || varErrField2,
    false,
    Patch('List Name', Defaults('List Name'),
        {
            Title:   Trim(txtField1.Text),
            Field2:  ForAll(cmbField2.SelectedItems, {Value: Value}),
            Status:  {Value: "Active"}
        }
    );
    Set(varErrField1, false);
    Set(varErrField2, false);
    Notify("Added.", NotificationType.Success);
    Reset(txtField1);
    Reset(cmbField2);
    ClearCollect(colData, 'List Name')
)

For an Edit form (updates existing record):

Set(varErrField1, IsBlank(Trim(txtField1.Text)));
Set(varErrField2, CountRows(cmbField2.SelectedItems) = 0);

If(
    varErrField1 || varErrField2,
    false,
    Patch('List Name', varEditRecord,
        {
            Title:  Trim(txtField1.Text),
            Field2: ForAll(cmbField2.SelectedItems, {Value: Value})
        }
    );
    Set(varErrField1, false);
    Set(varErrField2, false);
    Notify("Saved.", NotificationType.Success);
    ClearCollect(colData, 'List Name');
    Set(varEditRecord, Blank())
)

Phase 8 — Publishing Workflow

For a new app, always use the per-project repo system — do NOT push screen YAML into the Phaderon/PowerApps guide library repo.

See output-format.md for the exact delivery sequence and project-repo-workflow.md for the full GitHub repo setup procedure.

Summary for a new app:

  1. Run the YAML validation checklist in yaml-validation-checklist.md before generating any YAML.
  2. Deliver output in this order:
  3. SharePoint setup checklist (tables)
  4. Data connections list
  5. App.OnStart as a separate code block — NEVER in screen YAML
  6. GitHub Pages link for screen YAMLs
  7. Create the per-project repo under PhadeDev: bash gh repo create PhadeDev/app-slug --description "Power Apps canvas app — App Name" --private --add-readme
  8. Create the docs/ structure and push screens via pa-yaml-wrap: bash pa-yaml-wrap /tmp/scrHome.yaml /var/home/Phaderon/PowerApps-Apps/app-slug/docs/screens/scrHome.html --version v1.0
  9. Confirm every generated screen page shows the visible payload preview and that it starts Screens: -> scrName: -> Properties:.
  10. Build the docs/index.html from the template in project-repo-workflow.md; screen links must include the current version query string, e.g. screens/scrHome.html?v=1.0.
  11. Commit and push to the project repo, enable GitHub Pages from /docs.
  12. Report: live URL, screen paste order, issues tracker URL, and the exact version stamp to look for.
  13. Ask user's permission to add a library card to Phaderon/PowerApps/index.html.

App.OnStart separation rule — non-negotiable: App.OnStart is ALWAYS delivered as a separate code block. If a formula belongs in App.OnStart, it does NOT appear anywhere in the screen YAML. No exceptions.


Quick Reference: Common Formula Patterns

Get current user

Set(varMyEmail, Lower(User().Email));
Set(varMe, LookUp('AppName Personnel', Lower(Email) = varMyEmail));
SortByColumns(
    Filter(
        'DataSource',
        (IsBlank(txtSearch.Text) || txtSearch.Text in Title) &&
        (IsBlank(drpType.Selected.Value) ||
         drpType.Selected.Value = "All" ||
         StaffType.Value = drpType.Selected.Value)
    ),
    "Title", SortOrder.Ascending
)
Set(varSelectedRecord, ThisItem);
Navigate(scrDetail, ScreenTransition.Cover)

TrainingStatus calculation

If(IsBlank(rec.DateCompleted), "Not Started",
   C.RecurrenceMonths = 0, "Complete",
   DateAdd(rec.DateCompleted, C.RecurrenceMonths, TimeUnit.Months) < Today(), "Expired",
   DateAdd(rec.DateCompleted, C.RecurrenceMonths, TimeUnit.Months) <= DateAdd(Today(), 60, "Days"), "Expiring Soon",
   "In Date")
Sort(
    Sort(source, CourseName, SortOrder.Ascending),
    Switch(TrainingStatus,
        "Expired",       1,
        "Not Started",   2,
        "Expiring Soon", 3,
        "In Date",       4,
        "Complete",      5,
        99),
    SortOrder.Ascending
)

Open URL in new tab

Launch(urlValue, {}, LaunchTarget.New)

Concat multi-select Choice for display

Concat(record.ApplicableTo, Value, ", ")

Filter by multi-select Choice

CountIf(ApplicableTo, Value = drpFilter.Selected.Value) > 0

project-repo-workflow.md

Project Repo Workflow

Per-Project GitHub Repo Workflow

Last checked: 2026-06-23

When a new app is agreed upon, create a dedicated GitHub repository under the PhadeDev organisation. This gives the project its own issues tracker, its own GitHub Pages for screen YAML copy pages, and keeps it cleanly separate from the guide library at Phaderon/PowerApps.


Step 1 — Agree on App Name

Confirm the app name with the user before creating the repo. The name should be: - Descriptive and short: "Staff Tracker", "Coffee Break Tracker", "Asset Register" - The repo slug is the kebab-case version: staff-tracker, coffee-break-tracker, asset-register


Step 2 — Create the Repo

gh repo create PhadeDev/APP-SLUG \
  --description "Power Apps canvas app — APP FULL NAME" \
  --private \
  --add-readme

Then enable Issues (on by default), and configure GitHub Pages:

# Create the docs/ folder structure
mkdir -p /var/home/Phaderon/PowerApps-Apps/APP-SLUG/docs/screens

# Create the initial index.html (from the app index template — see below)
# Copy the template and fill in app-specific content

# Initialise git and push
cd /var/home/Phaderon/PowerApps-Apps/APP-SLUG
git init
git remote add origin https://github.com/PhadeDev/APP-SLUG.git
git add .
git commit -m "Initial commit: Power Apps canvas app project"
git push -u origin main

Enable GitHub Pages from the repo Settings → Pages → Source: main branch, /docs folder.

Pages URL: https://phadedev.github.io/APP-SLUG/


Step 3 — Create Screen HTML Pages

For each screen YAML, write the YAML to a temp file, then wrap it with pa-yaml-wrap. Always pass --version — this stamps the version and local build time onto every page so the user can tell at a glance whether GitHub Pages has served the latest push.

pa-yaml-wrap /tmp/scrHome.yaml /var/home/Phaderon/PowerApps-Apps/APP-SLUG/docs/screens/scrHome.html --version v1.0

The tool adds CRLF enforcement, produces a standalone copy-button HTML page, and stamps the bottom-right corner with e.g. v1.0 — Built 23 Jun 2026 11:02 BST using the system local time.

The generated page must also show the visible "Clipboard payload preview" block. For screen YAML, the first three preview lines must be:

Screens:
  scrHome:
    Properties:

If the preview shows Control: Screen under the screen name, do not paste it and do not push it. SchemaV3 screen instances do not allow a screen-level Control property.

Version convention: - Start every app at v1.0 - Bump the minor number (v1.1, v1.2) for bug fixes and field-level changes - Bump the major number (v2.0) for structural redesigns or added screens - Every push that changes screen content must re-wrap with the new version so the stamp changes

Also stamp docs/index.html with the same version. Add directly below the <h1>:

<h1>APP_FULL_NAME <span style="font-size:0.65em;font-weight:400;color:#666;vertical-align:middle;margin-left:8px;">vX.Y</span></h1>
<p style="font-size:0.75rem;color:#3a3a55;font-family:'Cascadia Code','Consolas',monospace;margin-bottom:4px;">Built DD Mon YYYY  HH:MM TZ</p>

Screen links in docs/index.html must include the same version query string to avoid stale browser pages:

<a class="screen-card" href="screens/scrHome.html?v=1.0">

Use date '+%-d %b %Y %H:%M %Z' in the terminal to get the correct local timestamp string to paste in.


Step 4 — Create the Project Index Page

The docs/index.html is the main GitHub Pages page for the app. It shows: - App name and description - SharePoint setup checklist - App.OnStart copy block - Ordered screen cards (with links to the copy pages)

Use the app index template below to generate it. The user navigates to this page first, reads the setup steps, then clicks each screen card to copy the YAML.


App Index HTML Template

Save as docs/index.html and replace all APP_* placeholders:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>APP_FULL_NAME — PowerApps</title>
  <style>
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
    body {
      font-family: 'Segoe UI', system-ui, sans-serif;
      background: #0f0f1a;
      color: #e8e8f0;
      max-width: 900px;
      margin: 0 auto;
      padding: 40px 24px 80px;
    }
    h1 { font-size: 1.8rem; font-weight: 600; color: #c8b8ff; margin-bottom: 8px; }
    .subtitle { color: #888; font-size: 0.95rem; margin-bottom: 40px; }
    h2 { font-size: 1.2rem; color: #a0c0e0; margin: 40px 0 16px; border-bottom: 1px solid #2a2a3a; padding-bottom: 8px; }
    h3 { font-size: 1rem; color: #e8e8f0; margin: 24px 0 8px; }
    p { color: #aaa; line-height: 1.6; margin-bottom: 12px; }
    table { width: 100%; border-collapse: collapse; font-size: 0.85rem; margin-bottom: 24px; }
    th { background: #1a1a2e; color: #c8b8ff; text-align: left; padding: 8px 12px; border: 1px solid #2a2a3a; }
    td { padding: 8px 12px; border: 1px solid #2a2a3a; color: #d0d0e0; vertical-align: top; }
    tr:nth-child(even) td { background: #131320; }
    .code-block { position: relative; margin: 12px 0 24px; }
    pre {
      background: #1a1a2e;
      color: #c8d8f0;
      padding: 16px;
      border-radius: 8px;
      font-family: 'Cascadia Code', 'Consolas', monospace;
      font-size: 0.82rem;
      line-height: 1.55;
      overflow-x: auto;
      white-space: pre;
    }
    .copy-btn {
      position: absolute;
      top: 8px;
      right: 8px;
      padding: 4px 12px;
      background: #7c4dff;
      color: white;
      border: none;
      border-radius: 6px;
      cursor: pointer;
      font-size: 0.78rem;
      transition: background 0.15s;
    }
    .copy-btn:hover { background: #6a3de8; }
    .copy-btn.ok { background: #2a7d4e; }
    .screen-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; margin-top: 16px; }
    .screen-card {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      background: #1a1a2e;
      border: 1px solid #2a2a3a;
      border-radius: 12px;
      padding: 20px;
      text-decoration: none;
      color: inherit;
      transition: border-color 0.15s, background 0.15s;
    }
    .screen-card:hover { border-color: #7c4dff; background: #1e1e35; }
    .screen-number { font-size: 0.75rem; color: #666; margin-bottom: 8px; }
    .screen-name { font-size: 1rem; font-weight: 600; color: #c8b8ff; margin-bottom: 6px; }
    .screen-desc { font-size: 0.82rem; color: #888; line-height: 1.4; }
    .screen-cta { margin-top: 16px; font-size: 0.82rem; color: #7c4dff; }
    .note { background: #1a2a1a; border-left: 3px solid #2a7d4e; padding: 12px 16px; border-radius: 4px; font-size: 0.85rem; color: #aaa; margin: 16px 0; }
    .warning { background: #2a1a1a; border-left: 3px solid #7d2a2a; padding: 12px 16px; border-radius: 4px; font-size: 0.85rem; color: #aaa; margin: 16px 0; }
    ol { padding-left: 24px; color: #aaa; font-size: 0.9rem; line-height: 2; }
    a.back { font-size: 0.82rem; color: #666; text-decoration: none; display: inline-block; margin-bottom: 32px; }
    a.back:hover { color: #999; }
  </style>
</head>
<body>

<a class="back" href="https://phaderon.github.io/PowerApps/">← Guide Library</a>
<h1>APP_FULL_NAME</h1>
<p class="subtitle">APP_DESCRIPTION</p>

<h2>Before You Start</h2>
<ol>
  <li>Create the SharePoint lists below (all columns, exact names).</li>
  <li>Open Power Apps Studio → New blank canvas app.</li>
  <li>Add all data sources listed below (Data panel → Add data).</li>
  <li>Set App → OnStart using the code block below.</li>
  <li>Create one blank screen per screen in the list, then paste each YAML.</li>
</ol>

<h2>Data Connections</h2>
<p>Add these in the Data panel before pasting any YAML:</p>
APP_DATA_CONNECTIONS

<h2>SharePoint Lists</h2>
APP_SHAREPOINT_TABLES

<div class="warning">Mark every column <strong>Not Required</strong> in SharePoint. Required fields cause network errors — validation is handled in the app.</div>

<h2>App.OnStart</h2>
<p>Paste into <strong>App → OnStart</strong> in Power Apps Studio.</p>
<div class="code-block">
  <button class="copy-btn" onclick="copyBlock(this, 'on-start')">Copy</button>
  <pre id="on-start">APP_ON_START_FORMULA</pre>
</div>

<h2>Screens</h2>
<p>Paste each screen in order. Create a new blank screen first, then paste.</p>
<div class="screen-grid">
APP_SCREEN_CARDS
</div>

<h2>Issues</h2>
<p>Found a problem? <a href="https://github.com/PhadeDev/APP-SLUG/issues" style="color:#7c4dff">Report it here</a>.</p>

<script>
async function copyBlock(btn, id) {
  const text = document.getElementById(id).textContent;
  try {
    await navigator.clipboard.writeText(text);
    btn.textContent = '✓ Copied!';
    btn.className = 'copy-btn ok';
    setTimeout(() => { btn.textContent = 'Copy'; btn.className = 'copy-btn'; }, 3000);
  } catch (e) {
    btn.textContent = 'Failed';
  }
}
</script>
</body>
</html>

Screen card HTML snippet (repeat per screen):

<a class="screen-card" href="screens/scrXxx.html">
  <div>
    <div class="screen-number">Screen N</div>
    <div class="screen-name">scrXxx</div>
    <div class="screen-desc">What this screen does in one sentence.</div>
  </div>
  <div class="screen-cta">Open and copy →</div>
</a>

SharePoint table HTML snippet (repeat per list):

<h3>List: <code>XX ListName</code></h3>
<table>
  <thead><tr><th>Column name</th><th>Type</th><th>Notes</th></tr></thead>
  <tbody>
    <tr><td>Title</td><td>Single line of text</td><td>Built-in — rename to meaningful label</td></tr>
    <tr><td>Status</td><td>Choice</td><td>Options: Active, Archived</td></tr>
  </tbody>
</table>

Step 5 — Add Library Card

Add a card to the main PowerApps guide library at /var/home/Phaderon/PowerApps/index.html. Confirm with the user before doing this if the app is still in progress.

<a class="guide-card" href="https://phadedev.github.io/APP-SLUG/">
  <div class="guide-top">
    <span class="guide-kicker">Canvas app</span>
    <h2>APP FULL NAME</h2>
    <p>SHORT_APP_DESCRIPTION</p>
  </div>
  <div>
    <div class="guide-meta">
      <span class="pill">N screens</span>
      <span class="pill">SharePoint</span>
      <span class="pill">YYYY-MM-DD</span>
    </div>
    <span class="open-row">Open app guide <span aria-hidden="true">→</span></span>
  </div>
</a>

Step 6 — Commit and Push

cd /var/home/Phaderon/PowerApps-Apps/APP-SLUG
git add docs/
git commit -m "Add all screens and index page"
git push origin main

Wait ~60 seconds for GitHub Pages to build. Then verify the live URL.


App Directory

All per-project repos are cloned or initialised at:

/var/home/Phaderon/PowerApps-Apps/
  APP-SLUG/
    docs/
      index.html
      screens/
        scrHome.html
        scrDetail.html
        ...

The PowerApps-Apps/ directory is a sibling of PowerApps/ (the guide library repo).


Quick Reference

What Where
Guide library repo Phaderon/PowerApps at /var/home/Phaderon/PowerApps/
Guide library Pages https://phaderon.github.io/PowerApps/
New app repos PhadeDev/APP-SLUG at /var/home/Phaderon/PowerApps-Apps/APP-SLUG/
New app Pages https://phadedev.github.io/APP-SLUG/
Issues https://github.com/PhadeDev/APP-SLUG/issues

guide-authoring-rules.md

Guide Authoring Rules

Guide Authoring Rules

Last checked: 2026-06-20

Use this file before creating or changing any future Power Apps guide in this repo.

Accuracy Standard

No guessed Power Apps properties. No plausible formulas unless verified. Every risky instruction must come from one of:

If something is uncertain, mark it as unverified and do not publish it as a build instruction.

Required Workflow

  1. Define the app purpose, users, data sources, roles, and screens.
  2. Create or update SharePoint schema notes before writing formulas.
  3. Choose controls from verified-control-reference.md.
  4. For every control table row, include exact control type: modern or classic.
  5. For every property in a row, verify that the property belongs to that control family.
  6. Check powerapps-control-defaults.md before listing default visual properties.
  7. For formulas, use powerfx-patterns.md and source-linked Microsoft Learn pages.
  8. Add any new verified fact to this reference pack.
  9. Run python3 tools/audit-guide.py path/to/index.html.
  10. Run git diff --check.
  11. Preview locally and test responsive layout and copy buttons.

Defaults Standard

Future guides should separate required changes from defaults.

Rules:

Inline Formula Standard

When a control row needs an OnSelect, Items, OnChange, or similar formula, place a collapsed copyable formula block directly beside or immediately below that control's properties. A separate formula section may remain for scanning, but the builder should not have to scroll away from the control row to copy the formula.

Row Tracking Standard

Interactive guide tables should mark the row currently being worked on when the builder clicks a copyable pill or formula copy button. The active row should be clearly highlighted, previously copied rows should be visually muted, and each marked row should include a small clear button for accidental clicks.

GitHub Pages Layout

The root index.html is a guide library menu. Each guide lives in its own child folder with an index.html.

Pattern:

PowerApps/
  index.html
  training-tracker/index.html
  future-app-name/index.html
  reference/index.html
  reference/*.md
  tools/audit-guide.py

Every child guide should include a visible link back to ../.

Visual Standard

Reuse the Training Tracker guide style unless there is a clear reason not to:

Layer Order Standard

When a control is a visual background, card, panel, row fill, indentation strip, or progress-bar background, the guide must say so before the user builds on top of it.

Rules:

Temporary Error Standard

If a formula might red-line because a referenced control, collection, variable, flow, or data source is created later in the same phase, add a note directly before that formula.

The note must say:

Grouping Standard

Use groups for meaningful sections, especially tab bodies and repeated screen sections. Do not over-group during initial build instructions.

When recommending a group:

Landing Page Rule

When adding a new guide, add exactly one new card to root index.html:


output-format.md

Output Format

App Delivery Output Format

Last checked: 2026-06-23

This document defines the exact format for delivering a complete Power Apps app build. Follow this order every time. Never mix App.OnStart into screen YAML.


Delivery Order

When delivering a completed app, present output in this exact sequence:

1. SharePoint Setup Checklist

A table per list showing every column the user needs to create. They copy this directly to SharePoint. See builder-system.md Phase 1 for the table format.

Present this first so the user can create all lists before opening Power Apps Studio.

2. Data Connections

List the data connections the user must add in Power Apps Studio before pasting any YAML:

Add these data sources in Power Apps Studio (Data panel → Add data):
- 'XX ListName'   (SharePoint → your site → XX ListName)
- 'XX OtherList'  (SharePoint → your site → XX OtherList)

If Office365Users is needed:

- Office365Users  (Office 365 Users connector)

3. App.OnStart — Separate Code Block

Never embed App.OnStart formulas inside screen YAML. Always deliver it as a standalone Power Fx code block.

Example format:

## App.OnStart

Paste this into App → OnStart in the Power Apps Studio:
```powerfx
Set(varMyEmail, Lower(User().Email));
Set(varMe, LookUp('XX Personnel', Lower(Email) = varMyEmail));
Set(varTab, "Home");
ClearCollect(colPersonnel, 'XX Personnel')

The user pastes this into the App object's OnStart property, not into any screen.

### 4. GitHub Pages — Screen YAML

After creating the GitHub Pages site for the project (see `project-repo-workflow.md`), report:

Your app screens are ready at: https://phadedev.github.io/APP-NAME/

Paste order: 1. Open Power Apps Studio → New screen (blank) for each screen below 2. Open each link, click "Copy YAML", then paste into the new screen

Screen 1 — scrHome: https://phadedev.github.io/APP-NAME/screens/scrHome.html Screen 2 — scrDetail: https://phadedev.github.io/APP-NAME/screens/scrDetail.html Screen 3 — scrAdmin: https://phadedev.github.io/APP-NAME/screens/scrAdmin.html


Screens are pasted one at a time. Each screen replaces the blank screen content.

### 5. Issues Tracker

Report the issues URL:

Report any problems here: https://github.com/PhadeDev/APP-NAME/issues


---

## App.OnStart Rules

- App.OnStart is ALWAYS a separate code block — never part of a screen's YAML
- App.OnStart must initialise every variable every screen may read
- App.OnStart loads initial collections that all screens share
- Screen OnVisible reloads screen-specific collections (see `builder-system.md` Phase 4)
- Screens must never depend on a variable that App.OnStart does not set

### Variables that must always be in App.OnStart

```powerfx
Set(varMyEmail, Lower(User().Email));

This is the identity anchor used by every filter, every permission check, every context load. It must come first.

Collections that go in App.OnStart (load once)

Collections that go in screen OnVisible (reload each visit)


Non-Screen Code Blocks

Some formulas belong to specific controls rather than the screen or app, but are too long to embed clearly in YAML. If a formula is over 8 lines, consider delivering it as a separate labelled code block alongside the YAML:

### Formula: galHome → Items
Paste into the gallery's Items property:
```powerfx
SortByColumns(
  Filter( ...

```

Always make clear: control name, property name, and that this replaces the entire property value.


What Never Goes in Screen YAML


Final Delivery Checklist

Before reporting "done" to the user, verify:


future-guide-template.md

Future Guide Template

Future Guide Template

Last checked: 2026-06-20

Use this structure for new app guides.

Folder

new-app-guide/
  index.html

Required Guide Sections

  1. Version panel
  2. Current version.
  3. Last checked date.
  4. Known tenant/editor assumptions.

  5. Overview

  6. What the app does.
  7. Who uses it.
  8. What problem it solves.

  9. Data model

  10. SharePoint lists or Dataverse tables.
  11. Required columns.
  12. Column types and exact internal/display names where known.

  13. App setup

  14. Canvas app type.
  15. Data connections.
  16. Theme/colors.
  17. App-level formulas.

  18. Screens

  19. Purpose.
  20. Controls table.
  21. Formulas.
  22. Validation notes.

  23. Critical technical notes

  24. Control/property traps.
  25. Connector casing traps.
  26. SharePoint field-shape traps.

  27. Final audit checklist

  28. Run python3 tools/audit-guide.py guide-folder/index.html.
  29. Run git diff --check.
  30. Browser preview.
  31. Responsive check.
  32. Copy button check.

Control Table Columns

Use this table shape:

<table>
<thead>
<tr>
<th>Control</th>
<th>Type</th>
<th>Key properties</th>
</tr>
</thead>
<tbody>
<tr>
<td>txtExample</td>
<td>Text input (modern)</td>
<td>X=32,Y=120,W=400,H=40, Placeholder=<code>"Enter text"</code>, Text: read with <code>txtExample.Text</code></td>
</tr>
</tbody>
</table>

Rules:

Landing Page Card Template

<a class="guide-card" href="new-guide/">
  <div class="guide-top">
    <span class="guide-kicker">Draft</span>
    <h2>New Guide Name</h2>
    <p>Short app purpose, user group, and data source summary.</p>
  </div>
  <div>
    <div class="guide-meta">
      <span class="pill">Canvas app</span>
      <span class="pill">SharePoint lists</span>
      <span class="pill">Reference checked</span>
    </div>
    <span class="open-row">Open guide <span aria-hidden="true">→</span></span>
  </div>
</a>

README.md

Reference Pack README

Power Apps Reference Pack

Last checked: 2026-06-20

Purpose: reusable, source-linked guidance for building future Power Apps guide pages with the same visual standard as the Training Tracker guide, without guessing control properties or formula patterns.

This is not a copied mirror of Microsoft Learn. It is a practical local reference pack built from:

Files

Rule

If a future guide needs a control, connector, or formula pattern that is not in this pack, verify it from Microsoft Learn or live Power Apps behavior first. Add the result here before using it in the guide.

Use powerapps-control-defaults.md before writing long property lists. Do not ask the builder to change properties that are already fresh-control defaults unless the row labels them as leave default or default/safety check.

Local Microsoft Docs Mirror

Use:

tools/update-msdocs.sh
python3 tools/index-msdocs.py --rebuild
python3 tools/index-msdocs.py "Combo box ItemDisplayText"

The mirror lives in .sources/ and the SQLite index lives in .cache/; both are intentionally gitignored and not published.