Skip to content

connections: sticky self-scrolling sidebar, flush folder rows, selection feedback - #271

Closed
jseifeddine wants to merge 1 commit into
sol1:mainfrom
jseifeddine:ux/connections-sidebar-scroll-selection
Closed

jseifeddine wants to merge 1 commit into
sol1:mainfrom
jseifeddine:ux/connections-sidebar-scroll-selection

Conversation

@jseifeddine

@jseifeddine jseifeddine commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Based on current main on its own: one commit, nothing from any other open PR. The sidebar work does not need the live refresh (#270). Part 1/3 of #254.

Part 1/3 of #254.

The sidebar scrolls on its own with a thin scrollbar, leaf rows start right after the accent bar (no hidden chevron placeholder), the name, count pill and scope glyph share one line; selecting a folder jumps to the entries header, replays a title slide-in, shows a skeleton table while entries load, and updates the count badge in place instead of rebuilding the whole sidebar.

Testing

  • Browser: connections-sidebar.spec.mjs.
  • Manual: 25 tenant folders in a short window: scroll the list to the end without the page moving; pick a far folder: the row is marked and stays in view.

…ion feedback

connections: sticky self-scrolling sidebar, flush-left folder rows (sol1#254)

With 20+ customer folders the sidebar shared the page scroll with the
entries table, so picking a folder far down the list changed content off
screen, and every leaf row was pushed ~90px in by a hidden chevron
placeholder while names were ellipsised.

- .sidebar is position: sticky with its own thin scrollbar and
  max-height tied to the viewport; .main keeps scrolling with the page.
- The FOLDERS header is wrapped in .sidebar-pin together with a new
  empty #sidebar-tools slot, both pinned at the top of the sidebar.
- buildFolderNode() renders a .tree-chevron only for folders with
  children; leaves get no placeholder (removed the .tree-chevron.leaf
  rule), so rows start right after the 3px accent bar.
- Name, entry-count pill (.folder-count, now just the number with a
  data-count attribute and "N entries" title) and a smaller scope glyph
  share one line; description sits beneath at --fz-xs; rows are ~40px.
- Nested .tree-children indent 14px behind the existing dashed guide.

All new CSS is in one block at the end of the page's <style>.

connections: selection feedback and in-place sidebar updates (sol1#254)

With a long folder list, clicking a folder appeared to do nothing: the
entries table was off screen, the only loading state was a text swap,
and nothing drew the eye to the changed title. loadEntries() also
called renderFolders() just to update one count badge, rebuilding the
whole sidebar on every click.

- Jump to the entries header when the shown folder changes (smooth,
  'auto' under prefers-reduced-motion); never on initial load, live
  refresh, forceRefresh after a mutation or search clear.
- .changed on #entries-header replays a 350ms title slide-in and an
  accent underline flash on the action bar; cleared on animationend.
- Skeleton table (4 shimmering rows, same geometry as the real table)
  while entries are fetched from the server; the cached path renders
  immediately with no skeleton.
- updateFolderCount() swaps the number in the existing .folder-count
  badge in place; renderFolders() only as a fallback when the badge
  does not exist yet.
- renderFolders() is wrapped (not edited) to preserve the sidebar
  scroll position across rebuilds and to reveal the selected row within
  the sidebar (nearest, no page scroll) when the selection changes or
  after loadFolders() rebuilds the tree.

tests: sidebar scrolls on its own, selected folder marked and kept in view (sol1#254)
@davekempe

Copy link
Copy Markdown
Member

Merged into main as 1421665 8d25871 79e2036 thanks Jad. Looks good on our canary.

@davekempe davekempe closed this Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants