Panel improvements
Dialogs for fields
Fields can now define their own dialogs on the backend:
- Fields with array definition:
return [ 'props' => [ // ... ], 'dialogs' => function () { return [ [ 'pattern' => 'delete', 'load' => function () {}, 'submit' => function () {}, ] ]; } ]; - Field classes:
class MyField extends FieldClass { public function dialogs(): array { return [ [ 'pattern' => 'delete', 'load' => function () {}, 'submit' => function () {}, ] ]; } } 
The route patterns for field dialogs are automatically prefixed with the following scheme:
dialogs/$modelPath/fields/$fieldName/$pattern
Here's an example:
dialogs/pages/blog/fields/blocks/delete
In a field component, the dialog can be opened by using the field endpoint:
this.$dialog(this.endpoints.field + "/delete")
Customization of the layout selector
The layout selector is now customizable with the size (small, medium, large, huge) and columns options via the new selector prop:
layout:
  type: layout
  layouts:
    ...
  selector:
    # `small`, `medium`, `large` or `huge`
    size: huge
    columns: 6
More improvements
- Disabled buttons can receive focus (tab) which allows them to be read out by screenreaders.
 - Structure fields donβt disregard content changes anymore when clicking outside the form (now drawer).
 - Correct autofocus handling for blocks, layout, structure, picker fields and dropdowns
 - Improved focus styles for links and the flag preview in tables
 - All minified panel assets now add 
.minto the filename. This will avoid auto-minification in Cloudflare and possibly other environments. - Improved text overflow behavior for links in tables
 - Increase the font size for help text in sections and fields
 - The multiselect and tag dropdowns now offer more space to not cut off longer options.
 - Slug field: respect custom slug allowlist from the 
Strclass - Pages section: new 
templatesIgnoreoption #5322 - Users field: set 
default: trueto always use the currently logged in user as default - New items size 
full 
New Icons
We've added new icons to our Panel iconset: anchor, clear, lab, merge and split.
New Components
<k-alpha-input><k-browser><k-code><k-color-frame><k-coloroptions-input><k-colorname-input><k-dialog-body><k-dialog-box><k-dialog-buttons><k-dialog-fields><k-dialog-footer><k-dialog-form><k-dialog-notification><k-dialog-search><k-dialog-text><k-drawer-body><k-drawer-fields><k-drawer-header><k-drawer-notification><k-drawer-tabs><k-file-browser><k-frame>,<k-icon-frame>and<k-image-frame><k-hue-input><k-navigate><k-notification><k-page-tree><k-search-input><k-stat><k-text-drawer><k-tree>
New helpers
$helper.focus(element)$helper.object.length(object)$helper.string.isEmpty(string)$helper.url.base$helper.url.buildQuery$helper.url.buildUrl$helper.url.isAbsolute$helper.url.isSameOrigin$helper.url.isUrl$helper.url.makeAbsolute$helper.url.toObject$library.colors
New JS error classes
RequestErrorJsonRequestError
And so much more
We've tweaked the Panel extensively with too many improvements to name them all. But here are some more:
- Load Panel area views dynamically with the new 
whenprop - Each Panel area can now define additional requests for simple data endpoints or actions
 - Syntax highlighting in the 
k-codewith Prism - Text fields: new 
font: monospaceoption panel.cssandpanel.jsconfig options now also support arrays with multiple entries as well as absolute URLsk-paginationcan always be navigated by keys (no extra prop needed anymore)- Notifications: support for custom icons
 k-tagsupports an image/icon frame- New 
disabledproperty for thek-options-dropdowncomponent - New 
selectedproperty fork-buttonto set thearia-selectedattribute