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)
- Overview & Entry Point
powerapps-bible.md - Known Bad Patterns
known-bad-patterns.md - Verified Control Reference
verified-control-reference.md - Control Defaults (Fresh-Control Lab)
powerapps-control-defaults.md - External Research: ChatGPT Property Matrix (context + precedence rule)
external-research-notes.md - ChatGPT Control Property Matrix (2026-07-05, docs-derived, unverified)
external/powerapps_canvas_control_bible_v0_1.md - Live Build Lessons
live-build-lessons.md - Real Build Quirks
real-build-quirks.md - UI Patterns
ui-patterns.md - Power Fx Patterns
powerfx-patterns.md - SharePoint & Office365Users
sharepoint-office365users.md - YAML Validation Checklist
yaml-validation-checklist.md - Builder System
builder-system.md - Project Repo Workflow
project-repo-workflow.md - Guide Authoring Rules
guide-authoring-rules.md - Output Format
output-format.md - Future Guide Template
future-guide-template.md - Reference Pack README
README.md
Overview & Entry Point
PowerApps Bible
Last checked: 2026-06-20
This is the entry point for the local Power Apps knowledge base.
Layers
- Microsoft source mirror under
.sources/ powerapps-docspower-platform- Not published to GitHub Pages.
-
Updated with
tools/update-msdocs.sh. -
Search index under
.cache/powerapps-bible.sqlite - Built with
python3 tools/index-msdocs.py --rebuild. -
Queried with
python3 tools/index-msdocs.py "Combo box ItemDisplayText". -
Curated local reference pack under
reference/ - Human-friendly rules.
- Real build quirks from the Training Tracker app.
- Lab-derived fresh-control defaults from the live Power Apps editor.
-
Corrections discovered while building future guides.
-
Audit tooling under
tools/ - 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
- SharePoint list names with spaces must be wrapped in single quotes, for example
'TT Personnel'. - Layer order matters: background/card/panel/gallery-row controls must sit behind the controls they support.
- Temporary red-line formula errors must be called out when a later control, collection, or variable resolves them.
- Property tables should distinguish required changes from default/safety-check values.
- Use
powerapps-control-defaults.mdbefore adding visual/default property lists to guide rows. - Sort order must use full enum names, for example
SortOrder.Ascending, not bareAscending. - Modern Combo box hint text uses
InputTextPlaceholder, notPlaceholder. - Modern Combo box display text must be explicit with
ItemDisplayText. - In the Training Tracker day-filtering formulas, preserve the exact working day-unit spelling from the live editor. If the app accepted
"Days"and rejected bareDays, do not normalize it away. - Modern Toggle state is handled with
Checkedin this guide family. - Office365Users connector casing differs by operation. Preserve the exact field casing used by the verified operation.
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
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
Copilot answer (preview)modern control. User directive 2026-07-05: do not propose, verify, or insert this control anywhere, in any Power Apps project across this whole family — not a "low priority, verify later" item, an outright blacklist. Reason given: likely government/organisational cost or licensing tier attached to AI/Copilot features at work. Do not suggest it as an option even when a feature genuinely sounds like a good fit for it.Headermodern control (ModernHeader). Verified 2026-07-05 against Microsoft's own docs: "Unsupported capabilities: Customization of colors, App navigation." It only exposesTitle/Logo/IsProfilePictureVisible— no way to add custom action buttons (Save/Close/Delete etc.) or nav links. Cannot replace a hand-built action-bar top bar. Don't propose it for that purpose again.Cardmodern control (ModernCard@1.0.0). Verified 2026-07-05: fixed, non-composable template (Title/Subtitle/Description/Image+ a singleOnSelectfor the whole card). Does not support layering independent action buttons (edit/delete icons, "Open in App") on top of a full-card click target — the pattern every link/dashboard card in this app family actually needs. Don't propose it as a replacement for hand-built card patterns.ModernTabList(TabListCanvas) / Tabs modern control. User directive 2026-07-06: blacklisted, do not use in any project. Confirmed broken even by Microsoft's own standard — pasting Microsoft's own published example markup for this control straight from their docs into the browser editor throws errors, it's not a Policy Tracker-specific formula mistake. Don't propose it as a segmented-tab/filter replacement for hand-built tab rows.
Control Properties
-
GroupContainer@1.5.0(bothManualLayoutandAutoLayoutvariants) hasDropShadowON by default when the property is left unset. Not a visible/obvious default — you have to explicitly writeDropShadow: =DropShadow.Noneon every single container to turn it off, or every card/row/panel in a whole screen gets an unwanted shadow. Confirmed the hard way on Policy TrackerViewItem_1: every container across the whole screen had a stray drop shadow because this was never set, and it had to be manually stripped from each one after the fact. Always setDropShadow: =DropShadow.Noneexplicitly on everyGroupContainerunless a shadow is actually wanted for that specific one (e.g. a modal card popping over a dimmed background) — never rely on the unset/default state being "no shadow." -
Modern Combo box with
Placeholder. UseInputTextPlaceholder. - Modern Combo box with record-shaped
Itemsand no explicitItemDisplayText. Use the field that exists inItems, for exampleThisItem.DisplayNamefor Office365Users search rows. ModernComboboxdropdown panel renders as an empty/"ghost" outline with no list content — after ruling out every formula-level cause. Confirmed on Policy TrackerViewItem_1'scmb_Owner1: the three invalid properties documented above (FontWeight: ="",Appearance.FilledLighter,AllowExternalSelectedItems) were fixed,DefaultSelectedItemscorrectly pre-selected a real value, and theItemsformula (Office365Users.SearchUserV2({...isSearchTermRequired: false...}).value) already matched every commonly-documented working pattern — yet the dropdown list still opened empty and typing did nothing. This is a Microsoft-acknowledged platform limitation, not a fixable formula bug: on an official Power Platform community thread about a Modern dropdown-family control going blank, a Microsoft employee's own reply states verbatim: "Modern controls are not that stable, it displays blank dropdown menu from time to time." Do not keep iterating on ModernCombobox formulas/properties once the above are ruled out — revert to the ClassicComboBox@0.0.51control instead. That control is not visually "classic-ugly" by default — it supportsBorderRadius(rounded corners) andAppearance: ='ComboboxCanvas.Appearance'.FilledLighter, so it can be styled to match a modern design without the ModernCombobox instability. It needsComboBoxDataField@1.5.0children (set via the Data/"Edit fields" panel, not hand-typed) to define which fields — e.g.DisplayName,Mail— are searchable/displayed, whichModernComboboxdoesn't require (ItemDisplayTextreplaces that need on the Modern version). 2026-07-05.ModernCombobox(ComboboxCanvas) completely unresponsive — can't type in the search box, dropdown arrow does nothing, looks present but dead. Checked against Microsoft's current official docs property-by-property (not a guess) and found three invalid values causing it:FontWeight: =""(onlyFontWeight.Bold/Semibold/Normal/Lighterare valid — bare""isn't a real enum value and can stop the control initializing at all),Appearance: =Appearance.FilledLighter(not a real enum member — onlyAppearance.Filled,Appearance.FilledDarker,Appearance.Outlineexist), andAllowExternalSelectedItems(not a documented property of this control at all). Fix: deleteFontWeightandAllowExternalSelectedItemsentirely (or setFontWeightto a real enum value), and changeAppearancetoAppearance.Filledor.FilledDarker. Also confirmed while investigating: this control's oldTriggerOutputproperty was renamed toDelayOutputin a recent Microsoft update (TriggerOutput = "FocusOut"→DelayOutput = true) — if a paste still hasTriggerOutput, that's stale, not the unresponsiveness cause itself. Policy TrackerViewItem_1'scmb_Owner1, 2026-07-05.- Modern Text input with
HintText. UsePlaceholder. - Modern Toggle read as
.Value. Use.Checked. - Modern Toggle caption set with
Text. UseLabel. - Modern Toggle initial state set with
Defaultin this guide family. UseChecked. - Multi-select Combo box preselection with
Default. UseDefaultSelectedItems. - Modern Dropdown with table-shaped
Itemsbut no explicitItemDisplayText. ModernDropdown.Defaultbuilt as a hand-constructedWith({_v: ...}, {Value: _v})literal record — no visible pre-selection on load, even with a real matching value and no PA2108 error. This is the documented fix for the Value/Value1 collision (see the entry below), and it avoids the paste-time error, but the resulting bare{Value: "..."}record apparently isn't always recognized as "the selected item" by the control at render time — the dropdown just shows blank/placeholder despite a legitimate underlying value. Confirmed: Policy TrackerViewItem_1'sradApproval1("Approved For Release By") showed empty on a record that genuinely had an approver set. Fix: useLookUp(Items, Value = targetValue)instead of constructing the record by hand — e.g.Default: =LookUp(Choices('List'.'Field'), Value = Coalesce(varRecord.'Field'.Value, "fallback")). This returns the actual matching row object fromItems, guaranteeing structural equality rather than a look-alike literal. 2026-07-05.- Modern Dropdown
Defaultset as a plain string. Must be a record:{Value: “...”}. A plain string causes the dropdown to appear blank on load. - Any property copied from a similar control without checking that control's Microsoft Learn page.
SizeonToggle@1.1.5. Toggle does not expose font-size. Confirmed PA2108 in live editor 2026-06-20.FontWeightonModernButton@1.0.0. Modern Button does not expose FontWeight. Confirmed by cross-check against user's working Screens.txt (which uses BasePaletteColor, Color, Size but never FontWeight) 2026-06-20.- Radius properties (
RadiusTopLeft,RadiusTopRight,RadiusBottomLeft,RadiusBottomRight) onLabel@2.5.1ORRectangle@2.3.0— neither exposes them. Confirmed PA2108 twice: Label 2026-06-23, and again on both Label and Rectangle 2026-07-04 (Policy Tracker Main_1 issue #7 — repeated the exact same mistake the Bible already documented, on nine separate controls in one file, because the file wasn't re-checked before writing). Verified alternatives, both confirmed real:Classic/Button@2.2.0(DisplayMode: =DisplayMode.View,Text: ="", radius on the button itself — the original documented fix, best for pure shapes/dots with no text) orModernText@1.0.0(supportsRadiusTopLeftetc. natively per Microsoft's modern-control docs, and already used live in this exact app'sMain.yamlfor pill-style badges — best when the element is text-bearing, e.g. a coloured pill label). Before writing ANY new screen YAML with rounded corners on something that looks like a Label or Rectangle, grep this exact rule first — don't re-derive it from scratch or guess. - Light or pastel
BasePaletteColoronModernButton. Fluent 2 overrides it with a dark fill. Use dark, saturated colours only. - Conditional
BasePaletteColoronModernButton(e.g.If(varTab="X", lightColour, darkColour)). The light state always renders dark. Use Classic Button for any conditional colour states. Coloroverride on aModernButtonto compensate for a wrongBasePaletteColor. Pick a darker seed instead.- Trying to match an exact brand hex on a
ModernButton. Work with Fluent 2 — pick the closest dark seed and let the framework derive the final shade. Text: =(bare, nothing after the equals) in YAML. Must beText: =””.LayoutOverflowYon a ManualLayout GroupContainer causes PA2108 (“Unknown property 'LayoutOverflowY' for control type 'GroupContainer@1.5.0' and variant 'ManualLayout'”).LayoutOverflowYis only valid onVariant: AutoLayoutcontainers. If you need a scrollable region in a ManualLayout screen, wrap the scrollable content in an inner AutoLayout GroupContainer withLayoutDirection: VerticalandLayoutOverflowY: =LayoutOverflow.Scroll. Confirmed: ViewItem V2.1 conForm (495,13).- Any YAML property value that contains
:(colon-space) must use a|-block scalar. If a formula like=UpdateContext({locFoo: true})is written inline, YAML parses the{locFoo: true}as a mapping and throwsYamlInvalidSyntax: While scanning a plain scalar value, found invalid mapping. This applies to any inline formula containing{key: value}, record literals, or any colon-space sequence. Always use|-for these. Confirmed: ViewItem V2.1,OnSelect: =UpdateContext({locDisplayDeletePopUp: true})at (363,66). HtmlText(and any non-event-handler property) with inline CSS or other:in the string literal.|-is NOT allowed onHtmlText(PA1001) — so the|-rule above cannot apply. Instead, wrap the entire YAML value in single quotes and escape any literal single quotes inside by doubling them (''). Example:HtmlText: '="<div style=""border: 1px solid red;"">..."'where a'Open Sans'font reference becomes''Open Sans''. The YAML parser then treats the content as a quoted scalar and never sees the:as a mapping separator. Confirmed: ViewItem V3.5,HtmlTextwith CSS properties (border: 1px,padding: 14px,font-family: 'Open Sans') at (1205,56).%QUALIFIED_DATACARD_FIELD_VALUE.ID%in a Form cardDefault. This is a broken placeholder — replace with the actual field expression, e.g.ThisItem.DateCompleted.- YAML properties on a control generated from the guide's intent without running an audit against
verified-control-reference.md. Always audit before publishing. FillPortions: =1(or any value >0) on a fixed-height container inside aVariant: AutoLayoutparent — the "Flexible height" toggle in the property panel. A child withFillPortions > 0grows to claim a share of the parent's remaining main-axis space, ignoring its ownHeightproperty entirely — this is the AutoLayout equivalent of CSS flex-grow, not a hint. Confirmed: Policy TrackerViewItem_1—conTopBar1,conWarningBar1,conCompactStepper1and other fixed-height (64/64/44px) containers rendered many times taller than authored because "Flexible height" was ticked (FillPortions: =1) instead of off (FillPortions: =0). Symptom: a ManualLayout or AutoLayout container with an explicitHeightrenders drastically oversized when placed inside a verticalAutoLayoutstack, while sibling containers with actualFillPortions: =1correctly expand to fill remaining space. Fix: setFillPortions: =0(or omit the property, if0is the default in this control version) on every container that must hold to its authored fixedHeight; reserveFillPortions: =1+ only for the one container genuinely meant to stretch and fill the leftover space (e.g. a scrollable body region below a fixed header). Do not confuse this withAlignInContainer: Stretch— that only affects cross-axis sizing (width, in a vertical layout) and was tried first as a fix here; it didn't address the actual bug, which was the main-axis (height)FillPortionssetting. CheckFillPortionsbeforeAlignInContainerwhen a container renders the wrong height in an AutoLayout stack. 2026-07-05.
Power Fx
ScreenTransition.Back. UseBack()or a validScreenTransitionenum.Set(varName, Blank())as the only or first-encountered assignment for a global variable. ThrowsNo type found for variable 'varName'. Ensure that it is Set to a non-Blank value somewhere in the app— even if the same variable genuinely is set to a real typed value elsewhere (e.g.Set(varName, someTextExpression)). Power Fx's type inference isn't reliably finding the typed assignment first. Fix: replaceBlank()with a properly-typed empty value that matches the real assignment —""for Text, notBlank(), at every call site for that variable (reset/clear points, not just the first one). Confirmed: Policy TrackerViewItem_1'svarLinkDisplayNamePrefill(also set tovarFileName, a Text value, elsewhere) — 6 separateSet(..., Blank())call sites all needed changing toSet(..., ""). 2026-07-05.- Bare
AscendingorDescending. UseSortOrder.AscendingorSortOrder.Descending. - Bare
Days,Months,Yearsetc. orTimeUnit.Daysas the unit argument toDateAdd/DateDiff. Always use quoted strings:”Days”,”Months”,”Years”. Confirmed broken in live builds (Training Tracker + Policy Tracker). - Schema-less
[]where Power Apps must infer collection shape. AddColumns(table, "ColumnName", formula)with a quoted string for the new column name argument. The column name must be a bare identifier:AddColumns(table, ColumnName, formula). This rule applies only to the column name — other string arguments in the same formula (e.g."Days"inDateAdd) remain quoted as normal. Confirmed in Overview build.- Gallery row index formulas. Use
ThisItem.ItemIndex— it shifts when the gallery filters or sorts. ThisItem.IDinside collection-backed galleries unless the collection explicitly containsID.Switch()/If()used inside aFilter()'s predicate against a SharePoint data source — silently breaks delegation and gives wrong/inconsistent results, even though the identical set of conditions works fine whenSwitchinstead picks between whole separateFilter()calls. This app's ownHeaderGallery.Itemsalready does it the safe way (Switch(varSelectedState, "Current", Sort(...Filter('Policy Proof Tracker', conditionA)...), "Future", Sort(...Filter(..., conditionB)...), ...)— one plain-booleanFilterper branch,Switchonly ever chooses which whole expression to run). A per-chip live-count formula instead putSwitch(varSelectedState, "Current", condA, "Future", condB, ...) && ownerCond && typeCondas the single predicate passed to oneFilter()call — same conditions, wrong shape. Confirmed live on Policy TrackerMain: chip counts summed to 25 with the "Issues" tab selected, while that tab's own real item count was 0, which is only possible if the count formula wasn't actually gating on the tab at all. Fix: never nestSwitch/Ifinside a singleFilter's predicate against a delegable data source — expand it inline as(state = "X" && condA) || (state = "Y" && condB) || ...instead, matching the shape every other workingFilterin this app already uses. 2026-07-06.- Nested formulas that rely on ambiguous
ThisItem; capture the row withWithor useAsaliases. - Referencing an outer
AddColumnsrow identifier (e.g.ValuefromSequence) inside a nestedFilterpredicate. InsideFilter(innerTable, predicate), the predicate is evaluated withinnerTable's row scope. IfinnerTabledoesn't have aValuecolumn the identifier falls through, but if there's any ambiguity PowerApps resolves it to blank — makingDateAdd(varBase, (Value-1)*7, "Days")evaluate to the same date for every row. Always useWithto capture outer-scope identifiers before entering the Filter:With({weekDate: DateAdd(varBase, (Value-1)*7, "Days")}, Filter(innerTable, DateField = weekDate)). Confirmed: all 4 Overview columns showed identical data becauseValueinside the nested Filter was blank, computing the same date for all 4 columns. 2026-06-25. - A nested Gallery's
Itemsproperty cannot evaluate the outer gallery'sThisItem. TheItemsformula of a child gallery is evaluated at screen scope, not template scope — soThisItem.ColumningalWeekItems.Itemsis always blank regardless of whether the gallery is inside a GroupContainer or a direct child. Labels and other non-gallery controls DO correctly resolveThisItemin their properties. The correct pattern: pre-compute the inner data as a column in the outer gallery'sItemsformula usingAddColumns, then set the inner gallery'sItems = ThisItem.PreComputedColumn. This is the same pattern asgalHeaders → ThisItem.GroupedItemsin Main.yaml. Always collect the source data into a local collection first (ClearCollect(colName, Filter(...))) so theFilterinsideAddColumnsruns client-side. Confirmed: all four failure modes tested in Policy Tracker Overview 2026-06-24/25. - Bare
DisplayMode=View. UseDisplayMode=DisplayMode.Viewor set the property value toDisplayMode.View. \xB7or any\xescape sequence in Power Apps strings. UseChar(decimal)instead. Middle dot isChar(183).IsOdd()— does not exist in Power Apps. UseMod(value, 2) = 1.SortByColumnson a SharePoint Choice field. UseSort(..., Field.Value, SortOrder.Ascending)to unwrap the Choice record.”value” in MultiChoiceFieldfor multi-select Choice filtering. UseCountIf(MultiChoiceField, Value = “value”) > 0.Launch(url)withoutLaunchTarget.New— reuses current tab. UseLaunch(url, {}, LaunchTarget.New).ScrollTo(gallery, item)in screenOnVisibleor any behavior formula.ScrollTois not universally supported in canvas apps — confirmed "unknown or unsupported function" in live build (Policy Tracker). Remove it entirely; restore scroll position via Navigate to the screen instead, or accept the gallery always resets to the top.SortByColumns(AddColumns(table, "SortKey", formula), "SortKey", ...)pattern inside a nested gallery'sItemsproperty (wheretable = ThisItem.GroupedItems). The dynamically added column is not reliably resolved bySortByColumnsin this context — confirmed error "column 'SortKey' does not exist" (Policy Tracker). UseSort(ThisItem.GroupedItems, formula, SortOrder.Ascending)instead, referencing fields directly by bare name inside the formula.- Referencing a SharePoint field in YAML that has not been confirmed to exist in the list. Before using any field name in card/form YAML, verify it is in the live SP list. Confirmed error when
Status.Valuewas used but the SP list only hadPublished(boolean) — Policy Tracker. ForAll(cmbControl.SelectedItems As T, {Value: T.Value})for patching multi-select Choice. PreferForAll(cmbControl.SelectedItems, {Value: Value})— the alias form can cause type mismatches.- Assuming
Default/DefaultSelectedItemsre-evaluates reactively when the source variable changes after the control already exists. It doesn't — confirmed via Microsoft's ownReset()function docs and multiple community threads: these properties are read once, at control creation, to seed the initial value. If a screen setsvarSelectedRecord(or similar) inOnVisibleand expects an already-rendered dropdown/combobox/checkbox to pick it up, it won't — the control was created before (or in the same tick as) the variable being set, so it captured whatever value existed at that moment (often blank). Fix: explicitlyReset(controlName)for every Default-driven input, at the very end ofOnVisible, after all the data-loading Sets/ClearCollects have run. This applies toModernDropdown.Default,ComboBox.DefaultSelectedItems,Classic/CheckBox.Default,DatePicker.SelectedDatewhen treated as an initial value, etc. — not just Modern controls. Confirmed: Policy TrackerViewItem_1—drpDocType1,radApproval1,cmb_Owner1all showed blank/unselected on a record with real data, even after fixing theDefaultformula itself (see theLookUpentry above) — the formula was correct, the control just never re-read it. 2026-07-05. - EXCEPTION — do not call
Reset()onModernCombobox. Microsoft's own changelog for this control states: "Reset() includes SearchText: The Reset() function now clears both the selection and the search text." For this control specifically,Reset()was changed to also blank the selection — it does not just restoreDefaultSelectedItemsthe wayReset()does for every other control. Confirmed: Policy TrackerViewItem_1'scmb_Owner1had a correctly-computedDefaultSelectedItems(set earlier in the sameOnVisible, in the right order) that was then immediately wiped back to blank by the screen's ownReset(cmb_Owner1);call, applying the general advice above. Fix: skipReset()forModernComboboxcontrols entirely — ifDefaultSelectedItemsis set before the control is created (i.e., earlier in the sameOnVisible/before first render), it doesn't need aReset()nudge the wayDefault-driven controls do. 2026-07-05. - Notify-first validation pattern (checking fields then calling Notify before running Patch). Use Set-error-vars-then-If-guard pattern instead.
- Calling
Reset(Self)inside a control's ownOnChange, when that control's value property is itself bound to a live formula (e.g.DatePicker.SelectedDate: =varSelectedRecord.Field).Reset()forces the control to re-run its bound formula immediately — which just puts back the old/blank value, silently destroying whatever the user just picked. This was being used as an ad-hoc validation trick ("if the picked date isn't a Thursday, reset it") but it fires on every non-matching pick, not just invalid saves, so it reads as "the field randomly clears itself" rather than a deterministic rule. Confirmed on Policy TrackerViewItem'sdpkPublishDate1: any non-Thursday click silently reverted tovarSelectedRelease.'Planned Publish Date'. Fix: neverReset(Self)for input validation on a formula-bound value control. JustNotify()the warning (the invalid value stays visible/selected) and enforce the real rule at Save time instead, e.g. gate the Save button's validation onWeekday(control.SelectedDate, StartOfWeek.Monday) <> 4so a bad value blocks the save rather than getting silently erased before the user even reaches Save. 2026-07-06. &cannot concatenate two tables — it's the text/scalar concatenation operator only (accepts Text/Number/Date/Time/DateTimeNoTimeZone/DateTime/Boolean/ViewValue/Dynamic — that exact list is what the error names).Table({...}) & existingCollectionthrows "Invalid argument type. Expecting one of the following: Text, Number, Date, ..." because Power Fx is trying to coerce both tables down to a scalar for&, not concatenating them as tables. To prepend/append a record to an existing collection, don't try to build the combined table in one formula — mutate the collection itself:ClearCollect(coll, {newRow})thenCollect(coll, ForAll(source, {...}))(or justCollect(coll, {newRow})if not rebuilding from scratch). Confirmed on Policy TrackerMain, trying to inject a synthetic "All types" chip row ahead ofcolChoiceColorsfor a type-filter gallery. 2026-07-06.- In the browser editor's manual Insert-panel workflow (not YAML paste),
LayoutDirectionandLayoutGapare not settable via the property formula bar at all, even though both are completely valid, workingGroupContainer@1.5.0YAML properties (confirmed throughout this app's exported YAML —DashboardContainer,ScreenContainer1, etc. all use them). The Insert panel exposes three distinct container choices — Container (blank/ManualLayout), Horizontal container, Vertical container (both AutoLayout) — and picking one fixes the direction permanently at creation time; there is no property in the formula-bar "add property" list to change it afterward. Gap between children is set via a dedicated Gap stepper control in the properties pane (next to the alignment icons), not a formula. Every other AutoLayout property (Fill,Height,Width, padding,DropShadow) is a normal formula-bar property — only direction and gap are insert-time/UI-only. When writing a guide for someone building manually in the browser (as opposed to a YAML paste), say "insert a Horizontal/Vertical container" and "set Gap via the properties pane stepper" — never "set LayoutDirection/LayoutGap via formula." Confirmed by direct user correction on Policy TrackerMain, 2026-07-06. - The confirmed real YAML property name for "wrap children to a new row" on a
Variant: AutoLayoutGroupContainer@1.5.0isLayoutWrap(boolean, e.g.LayoutWrap: =true) — this is settable via the formula bar, unlikeLayoutDirection/LayoutGapabove. Confirmed live in Policy TrackerMain'sTypeFilterBarexport. Don't hedge this one as "check the properties pane" the wayLayoutDirection/Gapneed to be —LayoutWrapis a normal property. - Manual
X/Yproperties on a control whose immediate parent isVariant: AutoLayoutare unreliable/likely ignored — AutoLayout positions children by flow order (plus padding/gap/alignment), not by coordinates. Confirmed the hard way: a guide gave explicitYvalues forTitleinsideContainer5(anAutoLayoutLayoutDirection.Horizontalcontainer), and the user's real, working, live-tested build leftTitle.Ycompletely unchanged from its pre-AutoLayout value — changing it had no visible effect, exactly as it would if the property were being ignored. Only give manual X/Y instructions for controls whose direct parent isVariant: ManualLayout. For a control inside anAutoLayoutparent, describe the change in terms of order/alignment/padding/gap instead, or explicitly flag "this parent is AutoLayout, X/Y may not apply — verify live." Policy TrackerMain,ReleaseGallerycard thinning, 2026-07-07.
Architecture
- Loading collections only in
App.OnStartand not reloading in screenOnVisible. Collections go stale when data is added in a different screen or session. - Not initialising
varViewingForSelfat the top ofOnVisible. If it is blank, a self-view/team-view screen will show nothing. - Hard-coding
Set(varViewingForSelf, true)in a gallery rowOnSelect. This breaks team-member viewing. - Not calling
ResetForm(frmCert)in a form screen'sOnVisible. The form shows stale data on revisit. - Not resetting error border variables (
Set(varErrX, false)) when opening an edit panel. Red borders from a previous failed save linger. - Assuming a field exists in
varCoursebecause it exists in SharePoint. The field only exists invarCourseif theForAllprojection that builtcolMyTrainingincluded it. - A global collection populated with
AddColumns(computing an extra field) in one place, and a plainClearCollect/Filter(without that sameAddColumns) in another. Causes a visible flicker: whichever population runs last wins, and if the plain one runs after the computed one, every row loses the computed field and any UI reading it (e.g. an iconSwitchon the computed column) falls back to its default/error branch — looking like the correct data displayed briefly then "broke". Confirmed: Policy TrackerViewItem_1— the link gallery's file-type icons flickered from correct (PDF/Word/Excel) to a generic fallback icon on load, because the link-modal's "reload after edit" success handler computesFileExtviaAddColumns, but the screen's ownOnVisiblerepopulates the same collection with a plainFilterand noAddColumnsat all. Fix: every population point for a given collection must compute the same derived columns, not just the one call site that happened to need it first. 2026-07-05. - Using Badge control to render repeating pills. Badge cannot loop over a collection — use Gallery + Classic Button.
YAML File Structure
- Any screen YAML that does not start with
Screens:\n ScreenName:. The pa-yaml-wrap tool and PowerApps Studio paste both require this exact top-level format. Never use- ScreenName:(list item). Always use the dict form:Screens:at col 0, screen name at col 2,Properties:andChildren:at col 4. GroupContainer@1.5.0without aVariant:keyword. Every GroupContainer requiresVariant: ManualLayout(orVariant: AutoLayout) betweenControl:andProperties:. Omitting it causes PA1011 on paste. Confirmed broken in Overview build.LayoutMode: =LayoutMode.ManualLayoutinside a GroupContainer's Properties block. Do not set LayoutMode as a property —Variant: ManualLayoutalready implies it. Including it causes PA2108. Remove the property entirely.Gallery@2.15.0without aVariant:keyword. Every Gallery requiresVariant:betweenControl:andProperties:. UseVariant: Verticalfor vertical galleries,Variant: Horizontalfor horizontal galleries,Variant: VariableHeightfor variable-height galleries. Confirmed PA1011 in Overview build.Layout: =Layout.HorizontalorLayout: =Layout.Verticalinside a Gallery's Properties block. Do not set Layout as a property — the Variant already implies it. PA2108 if present. Same rule as LayoutMode on GroupContainers. Confirmed in Overview build.Image@2.2.0— stale. Always useImage@2.2.3. PA2105 warns it may produce errors.SelectedDateas a settable property onModernDatePicker@x.x.x— do not use, in any version. Confirmed broken on both1.0.0and1.0.1in this environment:PA2108: Unknown property 'SelectedDate', identical error, same lines, after bumping the declared version (see the now-corrected theory below). Microsoft's own docs page listsSelectedDateas a real property of the control family, and it genuinely works as a read (Self.SelectedDateinside the control's ownOnChange, orotherControl.SelectedDatefrom elsewhere) — but it is not a valid key to author in the YAMLProperties:block for this control, at least not in the version(s) tested. Do not attempt a version bump as the fix (already disproven — see below). UseDatePicker@0.0.46instead (a different, non-"Modern"-prefixed control family) — confirmed live and working in Policy Tracker's realViewItem.yaml/ViewItem_1.yaml, which setsSelectedDatesuccessfully on that control tag with a full property set (BorderColor,BorderStyle,BorderThickness,Fill,Font,FontSize,Format,Height,IsEditable,OnChange,SelectedDate,StartOfWeek,Width). It is not Classic-prefixed and renders with the same rounded/modern look as the rest of the app, so it satisfies "no Classic-style sharp corners" without theModernDatePickerschema problems.- Corrected theory (originally recorded here, then disproven): the first hypothesis was that
ModernDatePicker@1.0.0's declared version was simply stale — the same paste'sPA2105warning named1.0.1as current, so the version was bumped to1.0.1expecting that to fix it. It did not; the identicalPA2108error recurred against1.0.1. Lesson: aPA2105version-mismatch warning appearing alongside aPA2108unknown-property error does not mean the version bump will fix the error — they can be two independent issues. Don't assume a version bump resolves a property error without re-testing; if it doesn't, stop iterating on that control and switch to a proven alternative rather than guessing a third property name or version. Policy TrackerViewItem_1, 2026-07-05. - Recurred 2026-07-08, via a different path — manually rebuilding the field in the browser editor's Insert panel, not a YAML paste.
dpkPublishDate1on the realViewItemended up back onModernDatePicker@1.0.1(someone picked "Modern Date picker" from Insert instead of the plain "Date picker"), withDefaultDateinstead ofSelectedDateandFontWeight: =""/Placeholder(neither a real property on the Classic control). Symptom:Format: =Text(Self.SelectedDate, "d mmmm yyyy")rendered as a squashed "2 Jul26 2026" instead of "2 July 2026". - Actual root cause, found by the user directly, not by guesswork —
ModernDatePicker.Formatdoes not support the 4-m"mmmm"token (full month name) the wayDatePicker@0.0.46.Formatdoes. With fourms, the control silently mis-renders instead of erroring — no PA error, no warning, just garbled output ("2 Jul26 2026"). Fix confirmed live: drop to threems,"d mmm yyyy", and the exact sameModernDatePicker@1.0.1control renders correctly ("2 Jul 2026") — no control swap needed at all. This means the SelectedDate-authoring bug earlier in this entry and the Format 4-mbug are two separate, independent problems with this control, not the same root cause — don't assume the whole control is unusable just because one specific property has a known issue; test the actual failing property in isolation (here, just the format string) before reaching for a full control replacement. Getting this wrong meant recommending a disruptive full-control swap (with a guide page and a GitHub issue reply) for a one-character fix. Policy TrackerViewItem, 2026-07-08. DatePicker@0.0.46's two syntax quirks worth remembering if a control swap is ever genuinely needed for a different reason:SelectedDate(notDefaultDate) is the settable property, andStartOfWeektakes a plain quoted string (="Monday"), not theStartOfWeek.MondayenumModernDatePickeruses.
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.
- Horizontal container "Horizontal Overflow" property — likely YAML name
LayoutOverflowX, valueLayoutOverflow.Scroll/LayoutOverflow.Hide. Per Microsoft's Horizontal container control doc page: "Horizontal Overflow - Defines whether the container shows scrollbars or remove content when it is too large to fit. Scroll and Hide." This is presented as a properties-pane UI setting (like Gap/Direction), not necessarily a formula-bar property — same insert-time/UI-only pattern already confirmed forLayoutDirection/LayoutGapon this control family. Parallels the already-confirmedLayoutOverflowY(vertical AutoLayout scroll, in the main Control Properties section above) closely enough to be plausible, but not tested live here. Before relying on this: check the properties pane for an "Overflow" setting near Gap/Direction on the Horizontal container in question.
Guide-Writing
- “Same as above.”
- “Duplicate the previous screen.”
- “Use the same technique.”
- Long inline control paragraphs that hide exact properties.
- Background/card/panel/gallery-row controls without a layer-order note when they can cover other controls.
- Formulas that may temporarily red-line without a reassurance note explaining what later control/collection/variable resolves it.
- Grouping instructions that hide layer-order requirements or fail to list exactly which controls are included/excluded.
- Long property lists that mix actual changes with default values without marking which are defaults.
- Repeating fresh-control defaults from
powerapps-control-defaults.mdas if the user must manually change them. - Repeating
Fill=RGBA(0,0,0,0)on normal Label controls as if it must be manually changed. - Repeating
BorderThickness=0on normal Label controls as if it must be manually changed. - Repeating
SelectMultiple=trueon modern Combo box controls as if it must be manually changed. - Repeating
ItemDisplayText=ThisItem.Valueon modern Combo box simple value tables as if it must be manually changed. - Treating a property omitted from the fresh-control export as a guaranteed literal default value.
- Control rows that say only “see formula below” when the formula can be placed in a collapsed copyable block beside the control.
- Any instruction that depends on visual guessing rather than exact control names and properties.
- Re-pasting full screen YAML to fix a single property. Targeted property changes are always safer and preserve existing customisations.
Verified Control Reference
Verified Control Reference
Last checked: 2026-07-05
Sources:
- Modern control updates: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-updates
- Modern controls reference (full index of all modern controls): https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-reference
- Modern Text input: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text-input
- Modern Combo box: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-combobox
- Modern Dropdown: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-dropdown
- Modern Toggle: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-toggle
- Modern Button: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-button
- Modern Progress bar: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-progress-bar
- Modern Avatar: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-avatar
- Modern Badge: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-badge
- Modern Checkbox: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-checkbox
- Modern Date picker: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-date-picker
- Modern Number input: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-number-input
- Modern Radio group: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-radio-group
- Modern Slider: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-slider
- Modern Spinner: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-spinner
- Modern Tab List: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-tabs-or-tabs-list
- Modern Header: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-controls-header
- Modern Link: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-link
- Modern Info button: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-info-button
- Modern Text: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-text
- Modern Card (preview): https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/modern-controls/modern-control-card
- Classic Button: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-button
- Gallery: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-gallery
- Icon/shape controls: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-shapes-icons
- Edit form: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-form-detail
- Core properties: https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/properties-core
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:
Default- initial text value.Text- current entered text, used in formulas.Placeholder- hint text when empty.Type- use enum values such asTextInputType.SingleLine,TextInputType.Multiline,TextInputType.Password,TextInputType.Search.TriggerOutput- use enum values such asTriggerOutput.Keypress,TriggerOutput.FocusOut,TriggerOutput.Delayed.Required,ValidationState,DisplayMode,Visible.- Layout/style:
X,Y,Width,Height,Align,PaddingTop,PaddingBottom,PaddingLeft,PaddingRight,Font,Size,Color,FontWeight,Italic,Underline,Strikethrough,Fill,BorderColor,BorderStyle,BorderThickness,RadiusTopLeft,RadiusTopRight,RadiusBottomLeft,RadiusBottomRight.
Do not use:
HintTextfor modern Text input. UsePlaceholder.FontSizeif the current updated modern Text input control exposesSize; older guide rows may still useFontSizeand should be checked in the live editor before final publishing.
Modern Combo Box
Use for searchable selection, especially multi-select.
Verified key properties:
ItemsItemDisplayText- formula that determines the visible text for each item. UseThisItemto reference the current row.DefaultSelectedItemsSelectMultipleInputTextPlaceholder- hint text in the input field.AccessibleLabel,IsSearchable,Visible,DisplayMode- Layout/style properties including
X,Y,Width,Height, padding, color, font, fill, border, and radius properties as exposed by the current modern control.
Do not use:
Placeholderfor modern Combo box. UseInputTextPlaceholder.- Missing
ItemDisplayTextwhenItemsis record-shaped and the display field is notValue. Office365Users search rows in this guide useThisItem.DisplayName. Defaultfor multi-select preselection. UseDefaultSelectedItems..SelectedwhenSelectMultiple=trueand the formula needs all values. Use.SelectedItems.
Known build note:
- In the user's current Power Apps editor,
SelectMultiple=trueis the default for modern Combo box. SetSelectMultiple=falseexplicitly for single-selection Combo boxes. - In the user's current Power Apps editor,
ItemDisplayText=ThisItem.Valueis the default for modern Combo box simple value tables. Do not list it as a manual step unless it is a labelled default/safety check. ItemDisplayTextmust match the shape ofItems.ThisItem.Valueonly works whenItemsis a simple value table or SharePoint choice-style table with aValuefield.
Modern Dropdown
Use for a single fixed selection. Microsoft recommends Combo box for multi-select.
Verified key properties:
ItemsItemDisplayText- formula that determines the visible text for each item. For a table like{Label: "...", Months: 12}, useThisItem.Label.DefaultOnChangeValidationStateRequiredAccessibleLabelVisible,DisplayMode- Style/layout properties including
Appearance,BasePaletteColor,Font,Size,Color,FontWeight,Italic,Underline,Strikethrough,Fill,BorderColor,BorderStyle,BorderThickness, radius and padding properties.
Do not use:
DefaultSelectedItems; that belongs to Combo box style selection, not modern Dropdown.- Multi-select patterns; use Combo box instead.
- Old "display/value field" wording for table-shaped items. State
ItemDisplayTextexplicitly.
Modern Toggle
Use for true/false state.
Verified key properties:
Checked- initial/current boolean state used by this guide pattern.Label- caption text beside the toggle.OnCheck,OnUncheck,OnSelect.AccessibleLabel,Visible,DisplayMode.
Do not use:
.Valueto read a modern Toggle in this guide. Use.Checked.Textfor the visible caption. UseLabel.Defaultfor the initial state in this guide. UseChecked.
Modern Button
Use for real clickable commands.
Common verified properties:
TextOnSelectDisplayModeVisibleBasePaletteColorX,Y,Width,Height- Font and style properties exposed by the current modern Button control.
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:
Text=""DisplayMode=DisplayMode.ViewFill=<panel color>HoverFill=<same panel color>PressedFill=<same panel color>BorderColor,BorderThicknessRadiusTopLeft,RadiusTopRight,RadiusBottomLeft,RadiusBottomRight
Do not use:
- Rectangle control for rounded panels. In this guide family, rounded panels are classic Buttons.
Classic Gallery
Use for lists of records and repeated row layouts.
Verified core properties:
Items- Template sizing and child controls.
- Formula context supports
ThisItem. - For nested formulas, use
Asaliases or captureThisItemfirst withWith.
Do not assume:
- A row index property exists.
ThisItem.IDexists in a collection unless the collection explicitly containsID.
Classic Icon
Use for action icons where Power Apps provides built-in icon shapes.
Verified core properties:
- Appearance, size, position, and
OnSelect.
Do not use:
- Icons as a substitute for accessible labelled buttons unless the guide includes a clear accessible label or nearby text.
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:
DataSourceItem- form mode actions such as
NewForm,EditForm,SubmitForm,ResetForm.
Do not replace with:
- A modern-only control pattern unless attachments have been reverified in the target tenant/editor.
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:
Value– number, 0 toMax. Only applies whenIndeterminate = false.Max– the number that represents 100%. Not required to be 100 — set it to a real count (e.g.CountRows(...)) and skip doing percentage math yourself.Indeterminate–true/false. Whentrue,Value/Maxare ignored (animated loading state).ProgressColor– plain string literal, not a typed enum:="Brand",="Success",="Error", or="Warning". Confirmed live via a real control paste 2026-07-05 (="Square"shown in the formula bar) — do not assume this follows the same'XCanvas.Y'.Zenum pattern as Badge below; it doesn't.Shape– plain string literal:="Square"or="Rounded".Thickness– plain string literal:="Medium"or="Large".BasePaletteColor– only matters if you want a colour outside the fourProgressColorpresets.- No
Minproperty. NoFill/BorderColor— colour is controlled only viaProgressColor/BasePaletteColor.
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):
Name– drives the initials shown when there's no image.Image– photo, e.g.ThisItem.Owner.PictureorOffice365Users.UserPhotoV2(...).Badge– small status decoration.Shape– Circular or Square.Appearance–Brand(theme colour),Neutral(grayscale), orColorful(hash-of-Name colour — useful for auto-varied owner colours without hand-picking a palette).BasePaletteColor, standard Font* properties,Out of office(adjusts the badge icon).
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:
- Read/set state via
Checked, not.Valueand notDefault. Labelis the caption text (notText).OnCheck/OnUncheck/OnSelect.
Modern Date Picker
Format–Short/LongAbbreviated/YearMonth/Custom(custom takes a format string like"dd/mm/yyyy"). Exact literal syntax (typed enum vs string) unconfirmed — verify live before use.SelectedDate– the output property (local time).StartDate/EndDate– bounds.StartOfWeek,IsEditable,Required.ValidationState–Error/None, red border onError.PlaceHolder,OnChange.
Modern Number Input (ModernNumberInput@1.0.0)
Default(input, initial value) vs.Value(output, read-only) — same input/output split pattern as Modern Slider below. Don't try to setValuedirectly.Min/Max/Step(default step is 1).Precision– typed enumDecimalPrecision.Auto/DecimalPrecision.'0'/'1'/'2'/'3'(note the quoted numeral syntax).Appearance– typed enumAppearance.Filled/Appearance.FilledDarker(default) /Appearance.Outline.ValidationState–ValidationState.None/ValidationState.Error.OnChangefires on blur/step-click, not every keystroke.- Recent rename history (already-migrated apps may have old names):
FontColor→Color,FontSize→Size,FontItalic→Italic,FontStrikethrough→Strikethrough,FontUnderline→Underline,BorderRadius→ four separateRadiusTopLeft/Right/BottomLeft/Right.TriggerOutputremoved entirely.
Modern Radio Group (ModernRadio@1.0.0)
Items,ItemDisplayText(formula usingThisItem),Default,Selected(output),OnChange.Layout– typed enumLayout.Vertical(default) /Layout.Horizontal.- Best for 2-7 mutually exclusive options; use Combo Box beyond that.
- Same Font* property renames as Number Input above apply here too — this whole modern-control generation was refactored together, expect the same rename list on any control touched in the same wave.
Modern Slider (ModernSlider@1.0.0)
Default(input, initial value) vs.Value(output, read-only) — this was a breaking rename: the old version tookValueas the input property; the new version reservesValuefor output only and usesDefaultfor the initial value. If copying an old example from a blog, this will silently misbehave rather than error.Min(default 0) /Max(default 100).LayoutDirection– typed enumLayoutDirection.Horizontal(default) /LayoutDirection.Vertical. Previously a plain string"Horizontal"/"Vertical"— another breaking enum-format change.Size– typed enumSliderSize.Small/SliderSize.Medium(default) /SliderSize.Large. Previously a plain string.OnChange,Tooltip,AccessibleLabel.
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.
Label,LabelPosition,SpinnerSize.Appearance– Primary or Inverted.AccessibleLabel,DisplayMode,OnChange.
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.
Items,Default,Selected(output — drive content visibility off this, e.g.ContentSection.Visible = TabList1.Selected.Value = "Overview").OnChange(fires on tab switch) vs.OnSelect(fires on any tab click, including re-clicking the active one).Appearance– typed enumTabListAppearance.Transparent/.Subtle/.Underline/.Filled.Alignment– typed enumTabListAlignment.Start/.Center(default) /.End— this is the whole tab list's position, distinct fromAlign(individual tab text alignment).- 2-7 tabs recommended; no auto horizontal scroll if too many tabs are added.
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.
Title,IsTitleVisible,Logo,IsLogoVisible,LogoMaxHeight,LogoToolTip,OnSelectLogo,IsProfilePictureVisible,Style,TitleFontSize.
Modern Link (ModernLink@1.0.0)
Text,Url(blocks unsafe schemes likejavascript:),Wrap(default true).Type– typed enumLinkAppearance.Default/LinkAppearance.Subtle. Renamed fromAppearancein an earlier version.- Standard Font/Border/Radius* properties.
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).
Content(flyout text),IconColor,OnSelect.- Default size 32x32 — docs explicitly recommend not going smaller for tap targets.
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.
Text,Size,Color,FontWeight,Align,VerticalAlign(default is now Middle),Wrap,AutoHeight.Fill,BorderColor,BorderThickness,RadiusTopLeft/Right/BottomLeft/Right— this control CAN look like a pill/badge on its own (fill + border + radius), which is exactly how the real app already uses it for the release-card pills.DisplayModewas removed from the properties panel in a recent update — the property still technically exists for backward compatibility but has no visible effect. Don't rely on it to lock down aModernTextcontrol; useVisibleinstead if it needs to disappear.OnSelectnow exists (didn't used to) — aModernTextcan be a clickable label directly now, no need to layer an invisible Button on top purely for click behaviour (though the full-card-click pattern documented inknown-bad-patterns.md/live-build-lessons may still prefer a Rectangle/Button for other reasons — this doesn't override that, just noting the option exists).
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.
Title,Subtitle,Description,Image,ImageAltText,HeaderImage,HeaderImageAltText.Direction(prose) /LayoutDirection(example) — same naming inconsistency as above,LayoutDirection.Horizontalis what the actual YAML examples use.Fillauto-contrasts title/subtitle/description text colour unlessTitleColor/SubtitleColor/DescriptionColorare set explicitly.- Could be a real upgrade path for Policy Tracker's hand-built release-list item cards eventually, but not until this control's real property names are confirmed live — don't use it in a full-paste screen override until then.
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
- Classic fresh-control lab:
.sources/default-lab/LabClassic.txt(18 parsed controls) - Modern fresh-control lab:
.sources/default-lab/LabModern.txt(49 parsed controls)
Interpretation Rules
- Treat these as observed defaults from the user's tenant/editor, not universal Microsoft documentation.
- A serialized property means the fresh control export explicitly contained that property.
- An omitted property means the fresh control did not serialize it; do not invent a literal default value from absence alone.
XandYcame from the repeated insert positions in the lab. Do not use them as default evidence.Width,Height, theme colors, font values, generated gallery children, and generated template formulas can be useful evidence, but still check whether the guide is intentionally changing behavior.- Future guide rows should use this file to remove or label default-only properties as
leave defaultordefault/safety check.
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
- Path:
Label3 - Depth:
0
| 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
- Path:
Button6 - Depth:
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
- Path:
Gallery4 - Depth:
0
| 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
- Path:
Gallery5 - Depth:
0
| 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
- Path:
Gallery6 - Depth:
0
| 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
- Path:
Form2 - Depth:
0
| 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
- Path:
FormViewer1 - Depth:
0
| 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
- Path:
TextInput3 - Depth:
0
| 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 |
Dropdown1 - Classic/DropDown@2.3.1
- Path:
Dropdown1 - Depth:
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) |
|
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
- Path:
ComboBox1 - Depth:
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
- Path:
DataTable1 - Depth:
0
| 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
- Path:
DatePicker2 - Depth:
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
- Path:
Checkbox1 - Depth:
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
- Path:
Radio2 - Depth:
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
- Path:
Toggle2 - Depth:
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
- Path:
Slider2 - Depth:
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
- Path:
Rating1 - Depth:
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
- Path:
Icon2 - Depth:
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
- Path:
Container1 - Depth:
0
| 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
- Path:
Container1 > Container2 - Depth:
1
| 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
- Path:
Container1 > Container2 > Container3 - Depth:
2
| 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
- Path:
Container1 > Container2 > Container3 > Container4 - Depth:
3
| Property | Observed fresh value | Note |
|---|---|---|
LayoutMinHeight |
=16 |
|
LayoutMinWidth |
=16 |
Gallery1 - Gallery@2.15.0 - variant BrowseLayout_Vertical_TwoTextOneImageVariant_ver5.0
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 - Depth:
4
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 > Image1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 > Title1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 > Subtitle1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 > NextArrow1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 > Separator1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery1 > Rectangle1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery2 - Depth:
4
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery2 > Image2 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery2 > Title2 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery2 > Subtitle2 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery3 - Depth:
4
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery3 > ProfileImage1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery3 > Title3 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery3 > Image3 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Gallery3 > Body1 - Depth:
5
| 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
- Path:
Container1 > Container2 > Container3 > Container4 > Header1 - Depth:
4
| 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
- Path:
Form1 - Depth:
0
| 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
- Path:
Button5 - Depth:
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
- Path:
TextInput2 - Depth:
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
- Path:
NumberInput1 - Depth:
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
- Path:
modernDropdown2 - Depth:
0
| 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
- Path:
Combobox3 - Depth:
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
- Path:
DatePicker1 - Depth:
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
- Path:
CheckboxCanvas1 - Depth:
0
| 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
- Path:
Radio1 - Depth:
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
- Path:
Toggle1 - Depth:
0
| 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
- Path:
PenInput1 - Depth:
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
- Path:
TabList1 - Depth:
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
- Path:
Slider1 - Depth:
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
- Path:
ListBox1 - Depth:
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
- Path:
RichTextEditor1 - Depth:
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
- Path:
Text1 - Depth:
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
- Path:
InformationButton1 - Depth:
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
- Path:
Icon1 - Depth:
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
- Path:
Avatar1 - Depth:
0
| 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
- Path:
BadgeCanvas1 - Depth:
0
| 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
- Path:
Card1 - Depth:
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
- Path:
Progress1 - Depth:
0
| 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
- Path:
Spinner1 - Depth:
0
| 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
- Path:
Link1 - Depth:
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
- Path:
Timer1 - Depth:
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
- Path:
HtmlText1 - Depth:
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
- Path:
Image4 - Depth:
0
| 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
- Path:
PdfViewer1 - Depth:
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: 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)
microsoft/power-platform-skillsissue 101 — hidden/generated properties (e.g.SearchItemson searchable controls) that don't show up viadescribe_control/standard tooling. Worth checking if a control ever seems to have an internal property we can't find documented anywhere.microsoft/power-platform-skillsissue 146 —PowerBIIntegration, a runtime-injected host object, not a normal insertable control — can surprise an offline schema/compiler if ever encountered.
Full raw files: bible.md ·
property matrix (CSV) ·
schema (JSON)
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 inventory: classic, legacy, structural and related objects
| 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. |
Recommended harvesting workflow
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
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.
PA2109 — Gallery Variant Names Are Case-Sensitive
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:
VerticalHorizontalVariableHeight
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:
- Included in the
colMyTrainingForAll projection, or - 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:
- Unmark Required in SharePoint: Go to the list → Column settings → Edit → set "Require that this column contains information" to No.
- 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
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:
- card backgrounds
- panel backgrounds
- gallery row backgrounds
- indentation strips
- progress-bar backgrounds
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:
- build the visible controls first, then create/send the panel background to the back, or
- build the panel first, then send it to the back after the visible controls are added.
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:
- Group after the controls work and layer order is correct.
- Do not let grouping hide which background control must sit behind visible controls.
- Grouping normally preserves control names, so formulas like
txtEditCourse.Textstill work. - Avoid unnecessary nested groups during the first build because they can make selection and send-to-back/front operations harder to follow.
- If a group controls visibility, still make sure the guide explains which variable drives it and whether that variable may temporarily red-line.
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:
Office365Users.SearchUserV2(...).value:.DisplayName,.MailOffice365Users.UserProfileV2(...):.displayName,.jobTitle,.mail
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
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.
Pill Badge Gallery (Repeating Coloured Pills)
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)
External Link Button (Opens New Tab)
- 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.
Power Fx Patterns
Power Fx Patterns
Last checked: 2026-06-20
Sources:
- Formula reference: https://learn.microsoft.com/en-us/power-platform/power-fx/formula-reference-canvas-apps
- Sort and SortByColumns: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-sort
- Patch: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-patch
- Filter, Search, LookUp: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-filter-lookup
- Distinct: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-distinct
- GroupBy/Ungroup/AddColumns examples: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-groupby
- UpdateContext: https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-updatecontext
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))
)
Navigation
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")
Sort Gallery by Status Priority
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) )
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
- [ ] Every formula value starts with
=prefix — no bare values on formula properties - [ ] [PA1001]
|-is only allowed on event handlers and Items —OnSelect,OnChange,OnVisible,OnCheck,OnUncheck,Items. All other properties (Fill,Color,Visible,Text,DisabledFill,HoverFill,BorderColor, etc.) must use a single-line formula.|-on style/visual properties causes PA1001 even with structurally valid YAML. - [ ] [PA1001] No inline multi-line formulas — for every
Key: =Something(line, count(vs). If open > closed, it must use|-. But since|-is restricted to handlers/Items, the formula itself must be collapsed to a single line for any other property type. - [ ] [PA1001] Every
|-block's first content line starts with=— event handlers and Items only. Missing=causes PA1001 "Power Fx expressions must start with '='". - [ ] [PA1001] Inside
|-blocks, closing parens follow paren depth — outer)sits at the same indent as=If(. A double-)at the same indent level is wrong. - [ ] Indent is exactly 2 spaces — no tabs anywhere
- [ ] Control names follow the naming convention (
btn,lbl,txt,cmb,drp,gal,rec,ico,tgl,frm) - [ ] No trailing spaces on any line
- [ ] [PA1006] Screen-copy YAML starts with
Screens:— do not start with- scrName:. A bare top-level list item can cause PA1006 "Empty or invalid value for Control" at line 1, column 3 even whenControl: Screenexists. - [ ] [PA1001] Screen nodes under
Screens:do not haveControl:—Screens:→scrName:→Properties:is the valid shape.Control: Screenat this level causes "Property 'Control' not found on type ... ScreenInstance" at line 3, column 5. - [ ] [YAML parser] Quote single-line formulas containing
:— examples:Default: '={Value: "New to MoD/Branch"}'andText: '=If(IsBlank(varRole), "Role not set", "Role: " & varRole)'. This keepsyaml.safe_loadvalid while preserving the parsed Power Fx formula. - [ ] [YAML parser]
HtmlTextand other non-event-handler properties with inline CSS —|-is blocked (PA1001) on these properties, so the block-scalar escape is not available. Use YAML single-quote wrapping instead:HtmlText: '="<div style=""border: 1px solid ..."">"'. Any literal single quotes inside (e.g.'Open Sans') must be doubled:''Open Sans''. Triggers on any CSS property value (border:,padding:,margin:,font-family:,font-size:, etc.) embedded in a PowerFX string literal on a non-handler property. - [ ]
Control:andVariant:values use exact version strings (see version list below) - [ ] [PA2109] Gallery variants are exact and case-sensitive — for
Gallery@2.15.0, useVariant: Vertical,Variant: Horizontal, orVariant: VariableHeight; neververticalGallery. - [ ] [PA2108] Labels do not support radius properties — never put
RadiusTopLeft,RadiusTopRight,RadiusBottomLeft, orRadiusBottomRightonLabel@2.5.1. Use Classic Button for rounded pills/badges. - [ ] Screen copy pages show a visible first-lines payload preview and refuse to copy stale
Control: Screenscreen payloads - [ ] Index links to generated screen pages include the current version query string, for example
screens/scrDashboard.html?v=1.9
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:
- [ ] Background panels (
recPanel,recHeader,recCard) are listed FIRST - [ ] Error border controls are listed IMMEDIATELY BEFORE the field they highlight (so they appear behind it)
- [ ] Overlay panels (edit/add panels) are listed LAST — they cover everything below
- [ ] Gallery row backgrounds are listed FIRST inside gallery Children
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:
- [ ] No
\xB7or\uXXXXescape sequences → useChar(183)for middle dot - [ ] No
IsOdd()function → useMod(value, 2) = 1 - [ ] No
SortByColumnson a SharePoint Choice field → useSort(..., Field.Value, SortOrder.Ascending) - [ ] No
"value" in MultiChoiceField→ useCountIf(field, Value = "value") > 0 - [ ] No
Launch(url)withoutLaunchTarget.New→ useLaunch(url, {}, LaunchTarget.New) - [ ] No
ForAll(items As T, {Value: T.Value})for patching → useForAll(items, {Value: Value}) - [ ] No
Text: =bare → any empty text must beText: ="" - [ ] No
%QUALIFIED_DATACARD_FIELD_VALUE%placeholder anywhere — replace with actual expression - [ ] No
ScreenTransition.Back→ useBack()or a valid ScreenTransition enum - [ ] No bare
Ascending/Descending→ useSortOrder.Ascending/SortOrder.Descending - [ ] No
ThisItem.ItemIndexin alternating row colours → useMod(ThisItem.ID, 2)or stable field - [ ] No Notify-first validation pattern → use Set-error-vars-then-If-guard (see
builder-system.mdPhase 7) - [ ]
LookUpby SharePoint ID through a collection: wrap withValue()→LookUp('List', ID = Value(varRow.StoredID)) - [ ] [Value1 collision]
ModernDropdown.Defaultmust never use{Value: expr.Value}→ useWith({_v: Coalesce(expr.Value, "")}, {Value: _v})instead. The{Value: …Value}nesting causes PA to rename the accessor toValue1, breaking the formula. - [ ] [PA2108] No
.Value1on SharePoint Choice fields → always use.Value..Value1is an internal artifact, not the choice string, and will error. - [ ] [Expected Boolean / Incompatible types] Toggle bound to a SharePoint Choice field → use
field.Value = "Yes"forChecked,Visible,If(), andLabel; patch with{Value: "Yes"}/{Value: "No"}. Iffield = truecauses "Incompatible types: Record, Boolean", the column is a Choice, not a Yes/No — switch to.Value = "Yes"throughout.
5. Architecture Checks
- [ ] Screen OnVisible reloads all collections this screen reads
- [ ] If
varViewingForSelfis used:If(IsBlank(varViewingForSelf), Set(varViewingForSelf, true))is at the top of OnVisible - [ ] If a Form control exists on this screen:
ResetForm(frmXxx)is in OnVisible - [ ] Error border vars are reset when opening any edit/add panel
- [ ] Every field read from
varSelectedorvarCoursewas included in theForAllprojection that built the collection, OR is looked up directly from SharePoint in the formula
6. SharePoint Integration
- [ ] All list names with spaces wrapped in single quotes in every formula:
'TT Personnel' - [ ] Choice fields accessed as
.Value:record.Status.Valuenotrecord.Status - [ ] Multi-select Choice patched with no-alias ForAll:
ForAll(cmbControl.SelectedItems, {Value: Value}) - [ ] URL fields are Single line of text (not SharePoint Hyperlink type) — accessed as plain string
- [ ] Person/Group fields accessed via the correct sub-field (check
sharepoint-office365users.md)
7. ModernButton Colour Check
For every ModernButton in the YAML:
- [ ]
BasePaletteColoris dark and saturated — if you can read white text on it, it will work - [ ]
BasePaletteColoris a static value — not a conditional expression - [ ] If the button needs active/inactive states → it must be a Classic Button, not ModernButton
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
- [ ] App.OnStart formulas are NOT embedded in any screen YAML
- [ ] Every variable that screen formulas read is initialised in App.OnStart
- [ ]
varMyEmailis set as the first line of App.OnStart
9. Delivery Readiness
- [ ] All screens are complete — no screen ends with TODO, placeholder, or missing formula
- [ ] Screen count matches what was agreed with the user
- [ ] GitHub Pages site has a page for every screen
- [ ] Index page shows screens in correct paste order
- [ ] Issues tracker URL is known and ready to report
- [ ] Every screen HTML page carries a version and build timestamp — pass
--version vX.Ytopa-yaml-wrapon every output. Re-wrap every screen on every push, even if only one screen changed, so timestamps update uniformly. - [ ]
docs/index.htmlcarries the same version and local build timestamp — inline after the<h1>title. Without this, the user cannot tell whether GitHub Pages has served the latest push when refreshing.
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
- List names, column names, column types — design these yourself in Phase 1.
- How many lists are needed — derive this from the workflow answers.
- What Choice option strings to use — propose sensible defaults and confirm only if the domain is specialised.
- Screen names or navigation structure — design these yourself in Phase 2.
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 |
| 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
- Prefix all related lists with the app abbreviation:
TT Personnel,TT Courses, etc. - List names with spaces must be wrapped in single quotes in Power Fx:
'TT Personnel' - Never reference a list without the prefix in formulas.
- Use 2–3 character abbreviation that won't clash with existing lists.
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
- Use
scrprefix:scrMyTraining,scrCourseDetail,scrAdminManage - Name by function, not visual layout
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
- Panel backgrounds / card backgrounds
- Gallery row backgrounds (alternating colour, status stripe)
- Tab navigation (active/inactive colour states)
- Visual dividers
- Error border highlights
Use Modern Button for
- Actual clickable actions (Save, Add, Archive, Go to course)
- Set
BasePaletteColorto one dark seed and leave it alone — do not fight Fluent 2 - Primary action: app primary colour (default
RGBA(0,78,66,1)) - Secondary / cancel:
RGBA(120,120,120,1) - Destructive:
RGBA(163,45,45,1) - Never set
BasePaletteColorconditionally on a ModernButton — the light state will always render dark - Never add a
Coloroverride to try to fix a badBasePaletteColor— find a darker seed instead - For anything needing conditional colour states (tab nav, active/inactive), use Classic Button instead
Use Modern Text Input for
- Single-line text entry
- Multi-line text entry (set
Type = TextInputType.Multiline) - Search inputs (set
Type = TextInputType.Search)
Use Modern Combo Box for
- Multi-select (default —
SelectMultiple=true) - Single-select searchable (set
SelectMultiple=false) - People picker (bind to
Office365Users.SearchUserV2)
Use Modern Dropdown for
- Fixed single-select lists
- Always set
Default = {Value: "..."}— never a plain string
Use Modern Toggle for
- Boolean flags
- Filter toggles (e.g. "Non-compliant only")
- Read state with
.Checked, not.Value
Use Classic Gallery for
- All lists of records
- Pill badge rows (via WrapCount)
Use Classic Edit Form for
- Any screen that needs SharePoint Attachments
- Date pickers bound to SharePoint date fields
Phase 6 — YAML Generation Rules
Format requirements
- 2-space indent
- CRLF line endings (the
pa-yaml-wraptool handles this) - All formula values prefixed with
= - Multi-line formulas use
|-block scalar - Control version strings must match known versions from this reference pack
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
- Background panels and cards (recPanel, recHeader)
- Gallery controls
- Input controls and labels
- Overlay panels (edit panels, add panels — placed after the controls they cover)
- 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)
FontWeightonModernButton@1.0.0— causes PA2108SizeonToggle@1.1.5— causes PA2108PlaceholderonModernCombobox— useInputTextPlaceholderHintTexton any modern control — usePlaceholder(ModernTextInput) orInputTextPlaceholder(ModernCombobox)Text: =(bare) — must beText: =""Defaultfor multi-select preselection on ModernCombobox — useDefaultSelectedItemsScreenTransition.Back— useBack()
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:
- Run the YAML validation checklist in
yaml-validation-checklist.mdbefore generating any YAML. - Deliver output in this order:
- SharePoint setup checklist (tables)
- Data connections list
- App.OnStart as a separate code block — NEVER in screen YAML
- GitHub Pages link for screen YAMLs
- Create the per-project repo under
PhadeDev:bash gh repo create PhadeDev/app-slug --description "Power Apps canvas app — App Name" --private --add-readme - Create the
docs/structure and push screens viapa-yaml-wrap:bash pa-yaml-wrap /tmp/scrHome.yaml /var/home/Phaderon/PowerApps-Apps/app-slug/docs/screens/scrHome.html --version v1.0 - Confirm every generated screen page shows the visible payload preview and that it starts
Screens:->scrName:->Properties:. - Build the
docs/index.htmlfrom the template inproject-repo-workflow.md; screen links must include the current version query string, e.g.screens/scrHome.html?v=1.0. - Commit and push to the project repo, enable GitHub Pages from
/docs. - Report: live URL, screen paste order, issues tracker URL, and the exact version stamp to look for.
- 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));
Filter gallery with search + type dropdown
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
)
Navigate with context variable
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 gallery by status priority
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
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 |
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)
- Reference lists that never change mid-session:
colCourses,colPersonnel,colCategories - These are static reference tables — not the user's live data
Collections that go in screen OnVisible (reload each visit)
- Anything the user can edit:
colMyRecords,colAllRecords, filtered lists - Rule: if the user can Patch into it, reload it in OnVisible
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
App.OnStartformulas- Connection references or connector calls that belong at app level
- Variable initialisation that applies to all screens
%QUALIFIED_DATACARD_FIELD_VALUE%or any template placeholder — these are bugs, not YAML
Final Delivery Checklist
Before reporting "done" to the user, verify:
- [ ] SharePoint checklist is complete (all lists, all columns, all types, all Choice options)
- [ ] Data connections listed (every SharePoint list, any connectors)
- [ ] App.OnStart is a separate code block, not in any screen YAML
- [ ] Each screen YAML has a copy-button page on the project GitHub Pages
- [ ] GitHub Pages index shows all screens in paste order
- [ ] Issues tracker URL reported
- [ ] Library card added to
Phaderon/PowerAppsindex.html (or confirm with user first)
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
- Version panel
- Current version.
- Last checked date.
-
Known tenant/editor assumptions.
-
Overview
- What the app does.
- Who uses it.
-
What problem it solves.
-
Data model
- SharePoint lists or Dataverse tables.
- Required columns.
-
Column types and exact internal/display names where known.
-
App setup
- Canvas app type.
- Data connections.
- Theme/colors.
-
App-level formulas.
-
Screens
- Purpose.
- Controls table.
- Formulas.
-
Validation notes.
-
Critical technical notes
- Control/property traps.
- Connector casing traps.
-
SharePoint field-shape traps.
-
Final audit checklist
- Run
python3 tools/audit-guide.py guide-folder/index.html. - Run
git diff --check. - Browser preview.
- Responsive check.
- 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:
- Never omit modern/classic from control type where both families exist.
- Do not write long inline paragraphs for controls when a table is clearer.
- Use code tags for formulas, enum values, and exact strings.
- If a property is unverified, do not include it as an instruction.
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>
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:
- Microsoft Learn source pages linked in each reference file.
- Real corrections found while building the Training Tracker guide.
- Local audit rules in
../tools/audit-guide.py.
Files
powerapps-bible.md- entry point for the local Microsoft docs mirror, search index, curated quirks, and audit workflow.real-build-quirks.md- live Power Apps editor fixes discovered while building Training Tracker.verified-control-reference.md- modern/classic controls currently used by the guide style.powerapps-control-defaults.md- lab-derived fresh-control serialized defaults from the user's Power Apps editor.powerfx-patterns.md- formula patterns, source links, and traps.sharepoint-office365users.md- SharePoint field-shape and Office365Users connector notes.guide-authoring-rules.md- required workflow for future guide creation.future-guide-template.md- guide structure and landing-page card pattern.known-bad-patterns.md- recurring mistakes to block before publishing.
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.