Skip to content

Reclaim Type List row width and read counts as a fraction - #1870

Merged
BryonLewis merged 1 commit into
mainfrom
type-list-density
Aug 29, 2026
Merged

Reclaim Type List row width and read counts as a fraction#1870
BryonLewis merged 1 commit into
mainfrom
type-list-density

Conversation

@PaulHax

@PaulHax PaulHax commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Reclaim Type List row width and read counts as a fraction

Follow-up to Bryon's #1867 review.

Deep hierarchy rows run out of room for the type name.

Changes

  • Tighten tree indentation, disclosure width, and checkbox spacing; flat rows are unchanged.
  • Fill the Type List's available height instead of leaving space below its rows.
  • Render counts as 3 / 12 red-snapper instead of 12 : 3 red-snapper.
  • Add Show Total Count and Show Frame Count settings, both on by default.
  • Let Compact Parents absorb the deepest unused shared ancestor.
  • Truncate breadcrumbs at the front so the most specific parent remains visible, while preserving
    character order for names containing digits or punctuation.
  • Skip per-frame count work when it is not needed for display, sorting, or filtering.
image

@PaulHax
PaulHax force-pushed the type-list-density branch 3 times, most recently from f7048aa to 857d470 Compare August 28, 2026 22:21
@PaulHax
PaulHax marked this pull request as ready for review August 28, 2026 22:22
@PaulHax
PaulHax force-pushed the type-list-density branch from 857d470 to e0d5743 Compare August 28, 2026 22:43
@PaulHax
PaulHax marked this pull request as draft August 28, 2026 22:43
@PaulHax
PaulHax force-pushed the type-list-density branch from e0d5743 to 46ee700 Compare August 28, 2026 22:49
@PaulHax
PaulHax changed the base branch from type-list-header-checkbox to main August 28, 2026 22:49
@PaulHax
PaulHax marked this pull request as ready for review August 28, 2026 22:49
Tree indentation, `total : frame` counts, and the row buttons share one 30px
row, and at the four and five levels a real taxonomy reaches, the type name is
the part that loses.

Indentation. The step drops from 16px to 12px and the disclosure column from
24px to 20px, which still clears the 16px chevron. Tree rows also give up the
checkbox's left padding, which the disclosure column already supplies, and
half of Vuetify's 8px gap between the checkbox and its label. A row at depth d
gets 4d + 16 pixels back. The step and the column width each had two
hard-coded copies, one driving the margin and one driving the label's ellipsis
budget; a constant now feeds each so truncation cannot drift from the visible
indent. Flat rows keep their padding and gap and have no disclosure column, so
datasets without a hierarchy render exactly as before.

Counts. A row read `12 : 3  red-snapper` - total, colon, frame count - where
the colon reads as a ratio or a label separator and nothing tells the reader
which side is which. They are now the fraction they are, part over whole:
`3 / 12  red-snapper`. The frame count is the total narrowed by the frame's
interval tree, per-frame suppression, and a keyframe test, so it is always a
subset; on multicam it is selected-camera scoped while the total counts each
logical track once, also a subset. The smaller number is therefore always the
numerator and the fraction needs no legend. A test asserts that invariant,
since it is an emergent property of two independently computed maps and a
break would print `13 / 12`.

Either count can be hidden from Type Settings, both switches defaulting on and
following `timelineCountSettings.totalCount` for naming and hydration. The
divider belongs to the fraction, so it survives only while both counts do; a
lone number is ambiguous, so the row tooltip names which count it is and the
header tooltip describes the format on screen. Sorting by either count is
independent of showing it. Building the rows also dereferenced frame counts
unconditionally, running an interval-tree search plus a suppression pass on
every frame advance; they now share the guard the model already used, so
hiding the frame count stops paying for it during playback.

Compaction. Compact Parents walked down the unused chain above the list and
stopped at the branch point without absorbing it, leaving the node whose
subtree is the whole list as a row that indents everything beneath it. That
node is where compaction is worth the most: unused and unconfigured, its
checkbox does what the header checkbox does, its rolled-up count is the list
total, and styling it changes no annotation because nothing displays as it.
It is absorbed now, with the guard that a used or configured ancestor keeps
its row, and the single-node threshold standing. Search still expands the breadcrumb wholesale. Subtrees and check state are
computed before compaction; header actionability is derived from the final
visible rows afterward.

The breadcrumb itself now truncates at the front. Its deepest entry is its
most specific and the one worth reading, and that was the end being cut. An
inner span holds character order steady, because the `direction: rtl` that
moves the ellipsis also runs the bidi algorithm over the names and would
reorder digit and punctuation runs.
@PaulHax
PaulHax force-pushed the type-list-density branch from 46ee700 to c5fa3f4 Compare August 29, 2026 01:15

@BryonLewis BryonLewis left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I'll handle in another PR the one comment I have about the changes from the PR with testing.

Comment on lines +1 to +2
// @vitest-environment jsdom
/// <reference types="vitest" />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think after this merges they may need to be updated to be more in line with #1872
I may just doa secondary PR.

@BryonLewis
BryonLewis merged commit 2ad74f0 into main Aug 29, 2026
3 checks passed
@BryonLewis
BryonLewis deleted the type-list-density branch August 29, 2026 18:30
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