# Upgrading ## From 2.1.0 to 2.2.0 - **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`** 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 `