yarn muuri 0.9.0
v0.9.0

latest releases: 0.9.5, 0.9.4, 0.9.3...
3 years ago

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 to block 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 its display property is still set to none 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 why layout.rounding is now by default disabled. The previous layout.rounding rounded layout's width and height as well as all the item dimensions with Math.round(). The new layout.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 from 100 to 150.
  • dragStartPredicate.handle removed and replaced with a new dragHandle 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 defined dragStartPredicate.handle. However, with dragHandle 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 from null to "xy". This actually should not break anything, but more of a "heads up" thing.
  • dragReleaseDuration -> dragRelease.duration.
  • dragReleaseEasing -> dragRelease.easing.
  • dragPlaceholder.easing and dragPlaceholder.duration removed. Placeholder now uses the layoutEasing and layoutDuration options' values always, which covers probably most of the use cases.
  • grid.refreshItems() and grid.refreshSortData() now requires the first optional argument to be an array of Muuri.Item instances.
  • grid.remove(), grid.show() and grid.hide() requires the first argument to be an array of Muuri.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.

Don't miss a new muuri release

NewReleases is sending notifications on new releases.