The milestone: https://github.com/haltu/muuri/milestone/7
A huge step forward for Muuri. There are so many breaking changes that you really should consider this as a new major version (Muuri still needs to get to 1.0.0 version to start bumping the major versions).
In a quick summary:
- A lot of bug fixes all around the place ๐
- Quite significant performance optimizations โก
- Autoscrolling while dragging โ๏ธ
- Asynchronous layout calculations ๐งต
- Typescript typings ๐
Unfortunately, there are also some breaking changes ๐ข :
- The item element
display
style is no longer set toblock
by Muuri automatically when item is shown. This means that you can use whatever display style in your CSS for the item elements. When item is hidden itsdisplay
property is still set tonone
by Muuri. - There was a critical bug in the default layout algorithm, which was essentially a rounding issue. After fixing it there should be no need to use
layout.rounding
anymore (at least in most cases). This is whylayout.rounding
is now by default disabled. The previouslayout.rounding
rounded layout's width and height as well as all the item dimensions withMath.round()
. The newlayout.rounding
only rounds item dimensions and does it with a bit more involved algorithm:Math.floor(Math.round(widthOrHeight * 1000) / 10) / 100
. layout.onResize
option's default value changed from100
to150
.dragStartPredicate.handle
removed and replaced with a newdragHandle
option, which works a bit differently (but in a good way). Previously there was no way to set the drag related event listeners to another element, even if you defineddragStartPredicate.handle
. However, withdragHandle
the drag related event listeners are now bound to the drag handle element so it gets much easier to to e.g . disable drag by hiding the handle via CSS.dragAxis
option default value changed fromnull
to"xy"
. This actually should not break anything, but more of a "heads up" thing.dragReleaseDuration
->dragRelease.duration
.dragReleaseEasing
->dragRelease.easing
.dragPlaceholder.easing
anddragPlaceholder.duration
removed. Placeholder now uses thelayoutEasing
andlayoutDuration
options' values always, which covers probably most of the use cases.grid.refreshItems()
andgrid.refreshSortData()
now requires the first optional argument to be an array ofMuuri.Item
instances.grid.remove()
,grid.show()
andgrid.hide()
requires the first argument to be an array ofMuuri.Item
instances.- As Muuri now supports asynchronous layouts we utilize the new feature by spinning up two web workers for layout calculations by default. Building support for async layouts required some heavy-handed internal refactoring, but surprisingly few public API changes. The first thing you have to keep in mind from now on is that the layout might or might not be computed asynchronously, so when upgrading to this version make sure to review any code that assumes the layout to happen synchronously. Related to this change there were breaking changes in layout function API.