Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions docs/COMPONENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ Same names, properties and variants as MAUI, except:
| Carousel | Swipe, arrows, dots | Drag with the mouse or touch; the arrows are tab stops and Left / Right move while one has focus; with `AspectRatio="0"` set `Height` |
| Stepper | Shows the active step's view | Every step stays in the tree and only the active one is visible; reached steps are tab stops (Enter / Space) |
| Pagination | Labels hidden on phones | `ShowLabels` defaults to true; every page and arrow is a tab stop (Enter / Space) |
| DataTable | Tap a header to sort | Sortable headers are also tab stops (Enter / Space) and keep focus after sorting; a click on a row's checkbox does not raise `RowTapped` |
| Command | Enter picks the highlighted item (the first match) | Up / Down move the highlight and Enter picks it; `Value`, `Text` and the other strings are nullable; children are collected in `Groups` and `Items` |
| CommandPalette | Open it from code | Also `Hotkey`, a key gesture that toggles it anywhere in the window (Ctrl+K by default; `Hotkey="{x:Null}"` for none) |
| NavigationMenu | Tap an item to open its panel | Items are tab stops: Enter / Space / Down open a panel and Left / Right move between items; in a panel Up / Down move and Enter picks; children are collected in `Items` and `Links` |
Expand Down Expand Up @@ -1194,6 +1195,48 @@ Use star and fixed widths in `Columns`: every row is its own grid, so an `Auto`
per row. For long lists, put a `TableHeader` above a `CollectionView` whose item template is a
`TableRow` with the same `Columns` set on the row itself.

### Data Table
A `Table` filled from a list of objects, with a filter field, sortable column headers, optional
row selection and pages. Each column names the item property it shows.

```bash
shellui-native add data-table
```

**Properties (DataTable):** `ItemsSource` (any list; an `ObservableCollection` refreshes the
table as it changes), `ShowFilter` (true), `FilterPlaceholder`, `Filter` (the filter text),
`ShowPagination` (true), `PageSize` (10), `ShowSelection` (false: adds a checkbox column),
`EmptyText` ("No results."), `MinimumContentWidth`, `SelectedItems`, `Page`, `PageCount`
(read-only) · **Events:** `SelectionChanged` (the selected items), `RowTapped` (the row's item)
· **Methods:** `Refresh()`, `GoToPage(int)`, `SortBy(column, descending)`, `ClearSelection()`

**Properties (DataTableColumn):** `Header`, `Property` (the item property to show), `Format` (a
.NET format string such as `C` or `MMM d, yyyy`), `Width` (`*`, `2*` or a fixed number),
`IsSortable` (true), `IsBold`, `HorizontalTextAlignment`, `Value` (a function that reads the
value; set in code, replaces `Property`)

```xml
<ui:DataTable ItemsSource="{Binding Invoices}" ShowSelection="True" PageSize="5">
<ui:DataTableColumn Header="Invoice" Property="Number" IsBold="True" />
<ui:DataTableColumn Header="Status" Property="Status" />
<ui:DataTableColumn Header="Amount" Property="Amount" Format="C" Width="120" HorizontalTextAlignment="End" />
</ui:DataTable>
```

The filter matches every typed word against the text of any column. A sortable header cycles
ascending, descending and unsorted; numbers and dates sort by value. The header checkbox selects
every row that passes the filter, across pages. Cells show text only: for badges or buttons in
cells, build the rows yourself with `Table`.

`Property` is read by name at run time. In an app published with trimming or NativeAOT, set
`Value` in code instead, so the property is not trimmed away:

```csharp
InvoiceTable.Columns[0].Value = item => ((Invoice)item).Number;
```

---

### Carousel
One slide at a time in a rounded frame. Swipe, use the round arrow buttons or tap a dot to move.
Each child view is a slide.
Expand Down
10 changes: 6 additions & 4 deletions docs/COMPONENTS_ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Prioritized list of components to create for ShellUI Native, aligned with [Shell

Last revised: **2026-10-11** (second prerelease, `0.1.0-alpha.2`).

**Status at a glance:** P0–P6 ✅ done · P7 done except chart · `0.1.0-alpha.2`: 63 families, 94 CLI targets, each for MAUI and Avalonia · since then: button-group, input-group, menubar, command, navigation-menu.
**Status at a glance:** P0–P6 ✅ done · P7 done except chart · `0.1.0-alpha.2`: 63 families, 94 CLI targets, each for MAUI and Avalonia · since then: button-group, input-group, menubar, command, navigation-menu, data-table.

---

Expand Down Expand Up @@ -295,7 +295,9 @@ resizable, navbar, sidebar, date-range-picker and file-upload on both platforms

**After `0.1.0-alpha.2`, from ShellUI's Blazor set** (both platforms): button-group ✅,
input-group ✅ and menubar ✅ (2026-10-11), then command ✅ (with a command palette) and
navigation-menu ✅ (2026-10-12; 68 families, 99 CLI targets).
navigation-menu ✅, then data-table ✅ (client-side filter, sort, selection and pages;
2026-10-12; 69 families, 100 CLI targets).

**Backlog:** chart (P7); and the ShellUI Blazor targets not yet ported (data-table, chat,
form, image-viewer, qr-code, …).
**Backlog:** chart (P7); and the ShellUI Blazor targets not yet ported (chat, form,
image-viewer, qr-code, …). Not in the native data-table yet: row actions and server-side
paging.
11 changes: 7 additions & 4 deletions docs/DEVELOPMENT_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ into it, not directly into `main`.
main ← Phase 1 (PRs #1–#5), release 0.1.0-alpha.1 (PR #6), Phase 2 Avalonia (PRs #7–#13),
layout, navigation and pickers on both platforms (PR #14) merged
release 0.1.0-alpha.2 (PR #15), CI action bumps (PR #16), button-group,
input-group and menubar (PR #17) merged
└─ feat/command-navigation-menu ← second batch from ShellUI's Blazor set (active)
input-group and menubar (PR #17), command and navigation-menu (PR #18) merged
└─ feat/data-table ← data-table from ShellUI's Blazor set (active)
└─ feat/winui ← Phase 3 (conditional)
```

Expand All @@ -37,8 +37,8 @@ main ← Phase 1 (PRs #1–#5), release 0.1.0-alpha.1 (PR #6), Phase 2 Avaloni

| Branch | Base | Status | Purpose |
|--------|------|--------|---------|
| `main` | — | Phase 1, Phase 2 and PR #14 merged; released as `0.1.0-alpha.2`; PR #17 merged since | 97 registry entries (94 CLI targets, 63 families), each with MAUI and Avalonia content |
| `feat/command-navigation-menu` | `main` | **Active** | command (with a command palette) and navigation-menu for MAUI and Avalonia (102 registry entries, 99 CLI targets, 68 families) |
| `main` | — | Phase 1, Phase 2 and PR #14 merged; released as `0.1.0-alpha.2`; PRs #17 and #18 merged since | 97 registry entries (94 CLI targets, 63 families), each with MAUI and Avalonia content |
| `feat/data-table` | `main` | **Active** | data-table for MAUI and Avalonia (103 registry entries, 100 CLI targets, 69 families) |

---

Expand Down Expand Up @@ -529,6 +529,9 @@ Cross-desktop (Windows + macOS + Linux) from one XAML codebase.
CommandGroup, CommandItem, CommandSeparator and CommandPalette, which hosts a Command in a
`ShellOverlayHost`; Avalonia adds a window-wide hotkey) and navigation-menu (NavigationMenu,
NavigationMenuItem, NavigationMenuLink)
- [x] data-table (`feat/data-table`): DataTable + DataTableColumn on top of `table`, `input`,
`checkbox` and `button`; columns read item properties by name (reflection, with a `Value`
function for trimmed apps); no row actions or server-side paging yet
- [ ] Replace the generated `Icon.cs` with the `ShellIcons.Maui` / `ShellIcons.Avalonia` packages
once they are on NuGet. Their names already match (`IconName`, `Icon`, `Kind` on Avalonia), so
components change little: token tinting binds the package's `Color` (MAUI) or `Foreground`
Expand Down
Loading
Loading