# Upgrading ## From 2.1.0 to 2.1.1 - **Run `php artisan view:clear` after upgrading.** The components are no longer registered under a view namespace named after a hash of their folder, which only views compiled before 1.0.1 still named; such a view shows the tag as text until it is compiled again. - **`DesignGuard`** no longer reports the 1.x package's own names (`text-meta`, `focus-ring`, `rounded-corner-lg`, `shadow-elevation-2`, `type-body-md`, `ease-spatial-fast`) with their 2.0.0 replacement. A colour utility on a 1.x ink is still reported, as a colour of the application's own theme; the rest compile to nothing and pass unnoticed. - **``** redraws when a script sets its input's `value`, as before, but no longer when it sets `valueAsNumber`; write `value` instead. - **The showcase's stylesheet** is served from `assets/css/showcase.{hash}.css`, prebuilt in `resources/dist/`, and the error page inlines prebuilt bundles too. `Stylesheets::bundle()` and `Stylesheets::resetCache()` are gone; nothing outside the package called them. - **`$store.rail.toggle()`** flips what the first rail on the page draws, as its menu button does. With nothing stored, ``'s rail is drawn collapsed from 840 to 1199px whatever `rail.default` says, and `toggle()` collapsed it again, so the first press of an application's shortcut changed nothing; it now expands the rail. Below 840px, where there is no room to expand it in the layout, `toggle()` opens and closes the modal rail (`show()`, `hide()`) instead of changing a choice nothing draws there. A shortcut that pressed the rail's menu button to get this can call `$store.rail.toggle()` again. - **`DesignGuard`** no longer reads a Markdown mail component's classes as Tailwind: a view under `mail.markdown.paths` (`resources/views/vendor/mail` by default) is drawn by the mail theme, whose `table`, `button` and `panel` share Tailwind's names, so only its icon names, the directives in its component tags and the application's own bans are checked there. A mail theme stylesheet under that path is no longer checked for literal values, and its classes no longer exempt the same names in the application's other views. A filter an application wrote around such a finding can go. - **`DesignGuard`** reports a colour utility on a colour the application's own Tailwind theme named (`bg-brand`, `text-sport-run`, `from-brand`, `border-l-zone-4`, `bg-brand/8`) in a class list, with `var(--…)` of the application's own as its replacement, unless the application's CSS declares the class. None of them has compiled since 2.0.0, and they were the leftovers its count never showed. Tailwind's other utilities on the same prefixes are named by their own family now too: `border-collapse`, `border-spacing-*`, `from-10%`, `via-none`, `fill-none`, `stroke-*`, `text-shadow-*`, `text-inherit`, and Tailwind 4.2's `mauve`, `olive`, `mist` and `taupe` palettes. A test that expects no findings may fail on them. - **`DesignGuard`** counts a row written by hand. `data-md-list-row` on an `
  • `, a `
    `, a `` or `` takes its hover, focus and press state layer and its selected fill from `components/list-item.css`, but `missingStylesheets()` and `unusedStylesheets()` read only tags and `->links()`: an application had the stylesheet through `table.css` or ``, lost it without a finding when the last of those left its views, and an `@import` of `list-item.css` for its own rows was reported unused. A view of the application that writes `data-md-list-row` on anything but ``, whose row card.css draws, now needs `list-item.css`; a selector such as `[data-md-list-row]` and the package's own views do not count. A test that expects no findings may name the `@import` to add, and a filter written around the unused report can go. - **A selected row written by hand** — `data-md-list-row` with `data-md-selected` on an `
  • `, a `
    ` or a ``, not `` or `` — is drawn in `secondary-container` with `on-secondary-container` ink again, as 1.x's `data-list-row` with `data-selected` was; 2.0.0 dropped the fill without saying so. Hover, focus and press now tint the fill instead of hiding it. In `` a plain row takes `data-md-selected` too, beside `aria-selected="true"`. A card still takes no selected fill. - **67 Material Symbols** in each cut (`auto_awesome`, `insights`, `tips_and_updates`, `battery_50` …) are drawn whole at every size. Google publishes them in 24 units (20 in the 20 cut) with a width and height but no viewBox, and the package dropped the size, so they fitted only at exactly 24px and were cut off or misplaced at any other — the 20 cut every small button draws from included. Nothing to change. - **A focused text field keeps its focus edge under the pointer.** The hover rule outweighed focus, so a focused field the pointer rested on drew a 2px `on-surface` edge instead of `primary`, and a field in error `on-error-container` instead of `error` — in the filled variant too, and on a customizable `` while its menu is open. An open select in error now draws `error` rather than `primary`. A test that read the hover colour off a focused field reads `primary` now. - **Escape closes one layer.** A dialog, menu, customizable select or searchable choice opened over or inside a modal ``, `` or modal navigation rail — or a sheet opened from a sheet, or inside `` — closed the layer under it on the same Escape, since each sheet closed on any Escape the window heard. Now only the topmost layer closes; a sheet with `close-on-escape` off still keeps the Escape from closing what is under it. A dialog or sheet opened from a modal sheet but rendered elsewhere on the page was also hidden from screen readers by the sheet's `aria-hidden`, and Tab could not move inside the dialog; both work now. An application's own guard around a sheet's Escape can go. - **A standard `` sticks under the top safe area** (`--material-safe-top`, else the device's inset) instead of at the window's edge, so its head and close button no longer slide under an installed app's status bar as the page scrolls; inside `` it also sticks under a sticky `` in the `top` slot, which covered it. It is as tall as the window below that, and every side sheet keeps the bottom safe area inside its bottom padding. - **A standard `` takes its place from the first paint.** Until Alpine started, a closed standard sheet was a zero-wide item that still cost its row one gap, and a sheet bound to an open Livewire property had no width yet, so the content beside them changed width when the script ran. A standard sheet is now out of the row until then, and one whose `wire:model` property is open is rendered open and stands at its width. One opened from an Alpine scope alone still appears when Alpine starts, which only the script can know. - **A long value in `` ends before the arrow, with an ellipsis.** Where the browser has the customizable select (Chrome, Safari), the closed select drew its value in a box of its own that took neither `text-overflow` nor a width from the select, so a long option in a narrow field, or at `size="sm"` and `xs`, ran on under the arrow; the native select (Firefox) cut it at the arrow with no ellipsis. The select's first child is now a `