Skip to content

RavenDB-27557 Collapse @system collection group by default - #23659

Open
mateuszbartosik wants to merge 2 commits into
ravendb:v7.2from
mateuszbartosik:RavenDB-27557
Open

mateuszbartosik wants to merge 2 commits into
ravendb:v7.2from
mateuszbartosik:RavenDB-27557

Conversation

@mateuszbartosik

Copy link
Copy Markdown
Contributor

Issue link

https://issues.hibernatingrhinos.com/issue/RavenDB-27557

Additional description

The @system collection group in the Studio sidebar now starts collapsed instead of expanded, and the toggle is animated.

Collapsed by default

collectionsTracker.systemCollectionsExpanded now defaults to false. The state lives in memory on the collectionsTracker singleton and is not persisted, so it resets to collapsed on page reload (expanding it persists across database switches within a session, as before).

Animated toggle

The group previously used <!-- ko if: systemCollectionsExpanded -->, which removes the list from the DOM entirely — that makes an exit animation impossible. It is replaced with a wrapper that stays mounted and collapses via grid-template-rows: 0fr -> 1fr:

  • The extra inner div is needed because overflow: hidden directly on the <ul> would clip the tree-line ::before pseudo-elements, which sit at left: -2px. The <ul>'s own margin-left keeps them inside the inner box.
  • The chevron is now a single icon-arrow-filled-right rotated 90deg rather than swapping between icon-arrow-filled-down / icon-arrow-filled-right, reusing the transform 0.15s ease-out transition already established for menu icons in _main-menu.scss.
  • prefers-reduced-motion: reduce disables both transitions, matching the existing pattern in _reboot.scss, SegmentedControl.scss and AnalysisProgress.scss.

Two small additions that came with keeping the list mounted:

  • aria-expanded on the group header, since the expanded state is now real DOM state.
  • visibility: hidden while collapsed, so the hidden collection links stay out of the tab order.

No motion usage here — the sidebar is Knockout, and motion is only wired up in this codebase as motion/react.

Type of change

  • Bug fix
  • Regression bug fix
  • Optimization
  • New feature

How risky is the change?

  • Low
  • Moderate
  • High
  • Not relevant

Backward compatibility

  • Non breaking change
  • Ensured. Please explain how has it been implemented?
  • Breaking change
  • Not relevant

Is it platform specific issue?

  • Yes. Please list the affected platforms.
  • No

Documentation update

  • This change requires a documentation update. Please mark the issue on YouTrack using Documentation Required tag.
  • No documentation update is needed

Testing by Contributor

  • Tests have been added that prove the fix is effective or that the feature works
  • Internal classes added to the test class (e.g. entity or index definition classes) have the lowest possible access modifier (preferable private)
  • It has been verified by manual testing
  • Existing tests verify the correct behavior

Testing by RavenDB QA team

  • This change requires a special QA testing due to possible performance or resources usage implications (CPU, memory, IO). Please mark the issue on YouTrack using QA Required tag.
  • No special testing by RavenDB QA team is needed

Is there any existing behavior change of other features due to this change?

  • Yes. Please list the affected features/subsystems and provide appropriate explanation
  • No

UI work

  • It requires further work in the Studio. Please mark the issue on YouTrack using Studio Required tag.
  • No UI work is needed

Replace the ko if with a CSS grid wrapper so the group animates
open/closed, and rotate a single chevron instead of swapping icons.
Comment on lines +275 to +277
@media (prefers-reduced-motion: reduce) {
transition: none;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't we specify it globally?

@mateuszbartosik mateuszbartosik Sep 18, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in e4e12b0.

There was nothing global to hook into — $enable-reduced-motion was overridden to
false in bs5variables.scss, while Bootstrap's own default is true. Restored
it and put the rule at the top level of _bs5.scss. It has to sit outside the
.bs5 { } block, otherwise it compiles to .bs5 * and never reaches #main-menu.

0.01ms rather than none is deliberate — we have transitionend /
animationend listeners in notificationCenter.ts and viewHelpers.ts.

Restore Bootstrap's own $enable-reduced-motion default instead of
overriding it to false, and add the rule at the top level of _bs5.scss so
individual components no longer need to guard their own transitions.

It has to sit outside the `.bs5 { }` block: _reboot.scss is imported
inside it, which would scope the rule to `.bs5 *` and never reach
#main-menu, which is imported outside that block.

Durations collapse to 0.01ms rather than none so that transitionend and
animationend listeners still fire.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants