🎉 Features
New page create dialog features
The page create dialog now allows to hide the title
and/or slug
field by defining a string template that will be used instead
create:
title: "{{ page.location }} – {{ page.date.toDate('M Y') }}"
slug: "{{ page.location.slug }}-{{ page.date.toDate('Y-m-d') }}"
Custom fields from the create dialog will be accessible through Kirby query starting with page.
(in this example the fields location
and date
. If no custom fields are defined, the create dialog will be skipped and the page immediately created. #6154
Color field: query and API support for options
myColorField:
type: color
options:
type: query
query: kirby.option('my.colors')
// only values
return [
'my' => [
'colors' => [
'#3e3e3e',
'#aaa',
'#ddd',
]
]
];
// values -> labels
return [
'my' => [
'colors' => [
'#3e3e3e' => 'Color A' ,
'#aaa' => 'Color B',
'#ddd' => 'Color C',
]
]
];
New sharpen option for thumbnails
When resizing images, you can now sharpen them. This often enhances the image quality when downscaling images.
$page->image('my-image.jpg')->thumb([
'width' => 300,
'height' => 200,
'sharpen' => true
]);
You can also pass an integer value to control the sharpening effect. Higher numbers create sharper images. The default is 50.
$page->image('my-image.jpg')->thumb([
'width' => 300,
'height' => 200,
'sharpen' => 25
]);
Thank you very much to @dgsiegel for implementing this feature. #6164
Link Field Previews
The link field now has proper previews in structure and object fields #5262
And more …
- Stats section supports new
icon
option #6006 - New
A::implode()
method that also handles nested arrays #6059
✨ Enhancements
- Upgrade to Vite 5 #5984
- Page and files section with table layout will now try to infer the column type from the blueprint of the first model when no type has been provided explicitly #6147
- When a block fieldset doesn't set a
name
, thelabel
is now used as fallback #6137 - The search type can now be pre-defined when opening the search dialog #6158
panel.dialog.open({
component: "k-search-dialog",
props: {
type: "pages"
}
});
- Extensive block examples in the lab #6160
- Added support for emojis and other multi-byte characters in mysql database connections. Thanks to @degoya #6168
- Improved lab examples with better source code view #6170
🐛 Bug fixes
- Link field: fixed default type if
url
option not available #6145 - Fixed renewal date formatting in the license dialog when using a custom date handler #6138
- Fix Panel menu button centering #6051
- Writer toolbar: fix when implicitly inline #6069
- Support dimensions for
avif
images #6141 - Table layout: columns marked as
mobile: true
are shown again in narrow viewports #6106 - Respect custom allowed slug characters from
Str
class in slug field #6049 $store.content
: fix consistent id pattern #6057- Structure field: clone row on duplicate #6073
field.isVisible()
: fix if statement #6098- Many objects are serializable again #6072
Helpers::handleErrors()
correctly restores the original error handler even if an exception is thrown in the action #6105- Fixed PHP warning for structure fields without subfields #6059
- Fixed PHP warning for
F::size()
with non-existing file #6059 - Fixed PHP warning for unserializing
Session
data #6059 - Fixed PHP warning for
V::message()
with nested arrays #6059 - Fix fallbacks in the
Kirby/Api/Api
andKirby/Form/Form
classes when no app object is loaded - The CLI detection also works for processes not attached to a terminal (e.g. externally called from another script)
- Fix
$store.content.id
when deleting page #6111 - Fix handling
image: false
in blueprint for Panel preview images #6020 - Fixes overflow in narrow layout field columns when using a block with
preview: fields
#6128 - Blocks: fixed disabled field preview #5818
- Language argument now gets passed reliably to hooks from dialogs/areas #6117
- Improve link kirbytag behavior when uuid point to non-existing page #6083
- Files section: fixed
NaN
value after sorting files #6067 - Page create dialog: custom fields in dialogs are prefilled with default values #6137
- Page create dialog: no error is thrown when directly publishing page with required fields that have a default value #6119
- Fixed Panel column block gap #5935
- Consistent disabled state and styling for all block types #5100
- It is possible again to use the field names
field
,options
,parent
,siblings
andparams
inside structure fields #6181 $field->toStructure()->field()
now returns a copy of the structure field object as intended #6181file
KirbyTag that references a non-existing file does not throw an exception anymore, when nottext
attribute passed #6177- New text and html props for the
k-tag
component #5834 - New
cancel-small
icon version #5834 - New
$helper.link
#5834 - Upload of the identical file should not change the UUID #5730
- Add missing link field id #6169
♻️ Refactored
- New
this.$helper.array.
functions:fromObject
,sortBy
,split
,wrap
#6140 - The license file included in the Kirby repo is now formatted correctly on GitHub #6060
- PHPUnit test provider methods are now static
FileActionsTest
: static provider methods #6092
- Prepare for Vue 3
- Remove input theme field mentions #6102
- Use more PHP arrow functions #6125
- DRY tests with
Kirby\TestCase
#6124 - Blocks and layouts reuse props across components #5818
- Color field: options should be written as
$value => $name
, e.g. #6152
options:
"#F8B195": "Sunny rays"
"#F67280": "First-love blush"
"#C06C84": "Cherry blossom"
"#6C5B7B": "Morning gloom"
"#355C7D": "Midnight rain"
- Improved performance due to caching blueprint section objects #6175
☠️ Deprecated
- Color field: writing options as
$name => value
has been deprecated #6152 $helper.object.clone()
has been deprecated. Use the nativestructuredClone
function instead. #6086Array.fromObject()
has been deprecated. Usethis.$helper.array.fromObject()
instead.Array.wrap()
has been deprecated. Usethis.$helper.array.wrap()
instead.myArray.sortBy()
has been deprecated. Usethis.$helper.array.sortBy(myArray)
instead.myArray.split()
has been deprecated. Usethis.$helper.array.split(myArray)
instead.
🧹 Housekeeping
- Upgraded unit testing to PHPUnit 10
- Our PHPUnit tests can now be run individually with process isolation
- New internal PHPUnit extension to manage constants and the temporary folder
- Refactor PHPUnit tests to use a global tmp directory that is properly cleaned up
- Running the PHPUnit tests no longer spills files outside the repo path
- Delete temporary testing files from the repo
- Load mock classes at the beginning of PHPUnit test runs
- Raise
ecmaVersion
for eslint parse #6174