d209d2ce2a
* fix(web): align operator column across sidebar filter rows Dimension select was `flex-1`, which made the op column drift horizontally between rows — especially on boolean dimensions where the value input is omitted. Fix by pinning the dimension and op selects to fixed widths so only the value column flexes, keeping the middle "is/in/not in" aligned across every row. * feat(web): group workflow steps by workflow in sidebar filter dropdowns The Workflow step filter previously flattened steps from every workflow into one unlabelled list, making it impossible to tell which workflow a step belonged to. Tag each step option with its workflow name and render the single- and multi-select dropdowns with a labelled group + separator per workflow. Other enum dimensions stay flat (backward-compatible via an optional `group` field on the option). * refactor(web): extract shared helper for sidebar filter option groups Both the single- and multi-select value dropdowns built group buckets with the same consecutive-key loop, which implicitly assumed options of the same group arrived back-to-back. Extract a `buildOptionGroups` helper backed by a Map so the adjacency assumption goes away and the rendering call sites shrink to one line each. Also include the stable `option.value` in the cmdk `CommandItem` value so same-titled steps inside one workflow don't collide on identity/search. * fix(web): truncate sidebar filter single-select value within popover The single-select value trigger and the free-text input were `flex-1` without `min-w-0`, so a long value (e.g. repository slug) pushed the row wider than the popover and bled the remove button past the right edge. The multi-select trigger already had `min-w-0`, which is why the "in" operator rendered correctly. Add `min-w-0` to both so the flex items can shrink and the built-in SelectValue `line-clamp-1` ellipsis engages.