Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: playcanvas/pcui
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v5.8.0
Choose a base ref
...
head repository: playcanvas/pcui
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v6.0.0
Choose a head ref
  • 4 commits
  • 12 files changed
  • 3 contributors

Commits on Feb 28, 2026

  1. feat!: decouple selection from DOM focus in TreeView and GridView (#512)

    * feat!: decouple selection from DOM focus in TreeView and GridView
    
    Move focus and blur calls out of the selected setter in TreeViewItem
    and GridViewItem so that selection is pure state with no DOM focus
    side effects. Focus is now handled explicitly by the interaction
    handlers (keyboard arrow keys) that need it, while click interactions
    rely on the browser native focus behavior.
    
    This follows the convention used by React Aria, Angular CDK and other
    major component libraries where selection state and DOM focus are
    independent concerns. It eliminates focus-stealing when selection is
    changed programmatically (e.g. syncing a tree panel with a grid panel).
    
    BREAKING CHANGE: Setting selected on TreeViewItem or GridViewItem
    no longer moves DOM focus. Consumers that relied on this implicit
    behavior must call item.focus() explicitly after setting selection.
    
    Made-with: Cursor
    
    * test: add focus/selection decoupling tests for TreeView and GridView
    
    Verify that setting selected programmatically does not move DOM focus,
    and that arrow key navigation still moves both selection and focus.
    
    Made-with: Cursor
    
    * test: expand focus tests to cover all arrow key directions
    
    TreeView: add ArrowUp, ArrowRight (into child), ArrowLeft (to parent),
    and ArrowLeft collapse (stays focused without moving selection).
    GridView: add ArrowLeft navigation.
    
    Made-with: Cursor
    
    * fix: remove unused variable in ArrowRight focus test
    
    Made-with: Cursor
    
    * fix: use treeView.dom directly instead of fragile root.dom.parentElement in test
    
    Made-with: Cursor
    willeastcott authored Feb 28, 2026
    Configuration menu
    Copy the full SHA
    b68339d View commit details
    Browse the repository at this point in the history

Commits on Mar 1, 2026

  1. feat: implement roving tabindex for TreeView and GridView (#513)

    * feat: implement roving tabindex for TreeView and GridView
    
    Each widget now acts as a single Tab stop with internal arrow key navigation (WAI-ARIA roving tabindex pattern). On keyboard Tab-in, the focused item is auto-selected using :focus-visible detection. A :focus-visible CSS rule mirrors the selected style so the active item is always visually apparent. Adds a tabindex.html example for manual testing.
    
    Made-with: Cursor
    
    * Update src/components/GridViewItem/style.scss
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * test: add roving tabindex tests for TreeView and GridView
    
    Covers single tabIndex=0 invariant, active item tracking selection, active item reassignment on removal, and focus-in-from-outside auto-selection. Also fixes GridView _onRemoveGridViewItem to find the next active item from remaining DOM children rather than the detached item's siblings.
    
    Made-with: Cursor
    
    * Update src/components/TreeView/index.ts
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * fix: preserve multi-selection on keyboard Tab-in for GridView
    
    Matches the TreeView fix: only select the focused item if it is not already selected, avoiding collapse of an existing multi-selection when tabbing back into the widget.
    
    Made-with: Cursor
    
    * fix: ensure _ensureActiveItem skips hidden and filtered-out items
    
    During filtering, non-filter-result items are now skipped. Outside filtering, explicitly hidden items are skipped. Uses item.hidden instead of offsetParent for jsdom compatibility.
    
    Made-with: Cursor
    
    * Update test/components/treeview.mjs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    willeastcott and Copilot authored Mar 1, 2026
    Configuration menu
    Copy the full SHA
    0469e2d View commit details
    Browse the repository at this point in the history
  2. chore(deps): update dependency globals to v17.4.0 (#514)

    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored Mar 1, 2026
    Configuration menu
    Copy the full SHA
    94b9b50 View commit details
    Browse the repository at this point in the history
  3. 6.0.0

    willeastcott committed Mar 1, 2026
    Configuration menu
    Copy the full SHA
    9e65950 View commit details
    Browse the repository at this point in the history
Loading