- Shipped
- September 5, 2026 at 10:53 PM UTC
- Author
- Kamo
- Commit
- 734f68c
Reported against /hr/overview, and the page itself is innocent — it declares no overflow at all. Its scroller is one line in app/hr/layout.tsx: <div className="w-full flex-1 min-h-0 overflow-auto flex flex-col"> Tailwind utilities in a className, not an object in `sx`. The codemod only ever parsed `sx` and `style`, so it walked past that div and forty-nine other files styled the same way — including this one, which is the scroller every page under /hr is rendered into. Half this app styles with `sx` and half with utility classes; a scroller is a scroller either way. Three gaps, all of them coverage rather than behaviour: - The codemod now reads className for Tailwind's overflow utilities, including responsive prefixes. Marking something that only scrolls at some breakpoints is safe: the overlay reads the COMPUTED overflow at runtime and draws nothing on an axis that cannot scroll, and the browser reserves no gutter for a bar that is not there. 55 elements. - It also honours an existing data-kamo-scrollbar opt-out, which it could not see before: a dashed JSX attribute name is not an Identifier, so the loop that read attribute names skipped straight over it. - MUI declares the overflow for DialogContent and TableContainer in its own stylesheet, so nothing in this app writes it and no marker can reach them — 281 scrollers between them. They join ag-Grid and the DataGrid in the list the layer scans by class, along with .kb-editor-pre, a code block styled from a plain CSS file. Menus, poppers and autocomplete listboxes are deliberately NOT on that list. A 32px bar down the side of a six-item dropdown would be most of the dropdown. Checked by measuring rather than by looking: the bar over a DialogContent lands at 240..460 x 768..800 against a content box of 240..460 x 200..800.