Keep a switch's track whole beside long text in a row

`[data-md-toggle] { min-width: 0 }` let the switch's root shrink below
its 52px track as a flex item. In `<x-row justify="between">` beside a
paragraph, flex shrinking weighs each item by its width, so the root of
a bare switch gave up a share of its 52px, and a switch with a long
label of its own gave its label a column one word wide and less; the
track, which does not shrink inside the root, ran out of it and past a
card's edge on a phone. `<x-checkbox>`'s root did the same with its box.

Both roots now keep their automatic minimum, the control and, beside a
label, its longest word, so the text beside the control, or the
control's own label, wraps instead. The toggle's docblock and the skill
say so.

A browser test lays a bare switch, a labelled switch and a bare
checkbox beside long text in rows on a 393px window and checks each
control's size and that it stays inside its row, and that the switch's
own label wraps inside its root; it fails without the change in Chrome,
Firefox and Safari.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Andreas Reinhold / reini
2026-09-17 06:55:36 +02:00
co-authored by Claude Opus 5
parent 1885c3e54e
commit cf63f11bfb
6 changed files with 69 additions and 3 deletions
+6 -1
View File
@@ -23,8 +23,13 @@
@import './icon.css';
@layer material.components {
/* In a flex row, a setting's text beside its switch, the root keeps its automatic minimum:
the track, and beside a label the track, the gap and the label's longest word. So the text
beside a bare switch, or the switch's own label, wraps before the track gives way; a root
free to shrink below 52px left the track running out of it, and off a card's edge on a
phone. */
[data-md-toggle] {
min-width: 0;
min-width: auto;
}
/* The positions below are the handle's centres less half its size, measured inside the track's