Repository navigation
feat: P5/P6 components : table, context menu, carousel, stepper and 12 more - #4
Merged
Merged
Conversation
- table: header, rows with hover / selection / tap, caption, and sideways scrolling below a minimum width. Columns are Grid widths shared by every row. - context-menu: opens at the pointer on right-click and under the trigger on long-press; items take an icon, a shortcut hint and a destructive style. - carousel: swipe, arrow buttons, dots, loop and auto-play. - stepper: numbered steps with active / completed states, per-step content and built-in Previous / Next / Confirm navigation. - ShellPortal popups can open at a point inside their anchor (AnchorPoint). - Demo sections, docs and roadmap updated; DEVELOPMENT_PLAN records Phase 1c/1d as merged (PR #3) and opens Phase 1e.
Found on a Pixel 7 / API 34 emulator pass over the last three batches: - Popups (combobox, time picker, ...) were first laid out under the status bar, got padded for it, and kept that padding after being moved. They now start inside the safe area. - Long-press did not open the context menu: the trigger's own gesture handling took the touch stream first. The listener now sits on the trigger content. - The toast stack opts out of automatic safe-area padding, so it is no longer offset twice from the bottom.
MAUI on Windows cannot draw some elliptical arcs: the radius-0.25 arcs in the "activity" icon made the Win2D shape renderer throw from its draw callback, which takes the whole app down. generate-icons.py now rewrites every arc as cubic Beziers, so icon paths only use M, L, C and Z and draw the same way on every platform.
…t-card, timeline and wrap-layout - toggle-group: a row of toggles with single or multiple selection. - number-input: decimal field with - / + buttons, clamped to min / max. - tag-input: chips with remove; Enter, comma or semicolon commits a tag. - kbd: keyboard key hint. - stat-card: metric with trend pill, description and icon. - timeline: dot or icon markers joined by a line. - wrap-layout: wrapping layout that measures each child once per pass (used by tag-input and the demo's button rows).
A single page holding every component needs more layout passes on Windows than WinUI allows (250), so the demo crashed at startup once the newest sections were added. The header now stays put with a category switcher (Buttons, Forms, Feedback, Overlays, Navigation, Data) and only the selected group is laid out. Button rows use WrapLayout; adds sections for the new components.
… and height - ShellPortal always wraps the page content, even when it is already a Grid. Adopting a Grid root put the layer inside its safe-area padding, so the status-bar strip was drawn over the page header. - tag-input: adding a tag with Enter keeps the field focused and the soft keyboard open, and the field is 40dp tall like other inputs (Android gave the text field a 44dp minimum). Found on a Pixel 7 / API 34 emulator pass over toggle-group, number-input, tag-input, stat-card and timeline.
… and aspect-ratio - multi-select: searchable select for several options; picks show as removable chips in the trigger and the panel stays open while picking. - tree-view: nested expandable rows with selection. - copy-button: copies text to the clipboard and confirms with a check. - link-card: tappable card with icon, title and description; can open a URL. - aspect-ratio: keeps content at a fixed width / height ratio. Demo sections and docs included. Run on Windows and on a Pixel 7 / API 34 emulator.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Second component pass for MAUI: the remaining data-display and advanced tiers from the
roadmap, plus the form and utility components ShellUI Blazor already has. 16 components and a
wrap layout, two Windows crashes fixed, and a full Android pass.
New components (76 → 92 in the registry)
Each family ships as one template (
tableholds Table, TableHeader, TableRow, TableHead andTableCell) rather than one template per part.
Fixes
Windows
generate-icons.pynow converts every arc to Bézier curves. MAUI's Windows shaperenderer could not draw the small arcs in the
activityicon and the failure took the app down.with a fixed header. A single page holding every component exceeded WinUI's 250 layout
passes and crashed at startup. Documented under "Long pages on Windows" in
COMPONENTS.md.Android
Gridpage root the status-barstrip was drawn over the page header.
Shared
ShellPortalpopups can open at a point inside their anchor (AnchorPoint).Testing
dotnet build ShellUI.Native.slnx— 0 warnings, 0 errors (Windows and Android targets)dotnet test— 488 passedand the previous PR's open items re-checked in light and dark.
group, multi select, tree view and copy button clicked through.
Not verified
Urlnot exercised on either platform.Follow-ups