Skip to content

v2.2.1 - Scheduling boards you can steer, and amounts you can actually type

Choose a tag to compare

@Banzamel Banzamel released this 20 Aug 09:56
· 23 commits to main since this release

Seven fixes and additions that came out of building a real scheduling app on top of the framework: the timeline board can now be moved from code and used to mark time by dragging, the calendar board can stop opening a day popover you do not want, and the currency field finally accepts grosze.

What changed

  • Fixed: MInputCurrency ate the decimal separator. Typing 45,50 left to right produced 4550, so an hourly rate with grosze could only be set outside the app. The field now keeps its own display buffer, so a half-typed amount survives the round-trip through your state instead of coming back rounded. Clearing the field emits null instead of snapping to 0, the caret stays where you put it, and a controlled numeric value is displayed formatted rather than as a raw 45.5.
  • New: MTimelineBoard takes a ref. The handle gives you scrollToTime(time, {align}), scrollToNow() and getVisibleRange(). Because the board draws its window around centerAt, an event at 19:30 was not simply off to the side — it was not drawn at all — and nothing in the public API moved the axis after mount. One call now opens the board on "now", or on the first lesson of the day.
  • New: horizontal wheel and trackpad panning on the same board (wheelPan, on by default). A sideways two-finger swipe used to scroll the page instead, which left an out-of-frame event unreachable without the keyboard.
  • New: emptySlotSelectable + onEmptySlotSelect(rowId, startAt, endAt). Press, drag sideways across a free stretch of a row, release — you get the row and the range, snapped to dragSnapMinutes. That is the gesture behind "mark this lecturer unavailable" without opening a modal for it. While the opt-in is on, a drag on the canvas selects instead of panning; the day strip, the wheel and the arrow keys still pan.
  • Fixed: a bar starting before the visible range lost its label. A blockade running 00:00-23:59 on a board showing 07:00-20:00 rendered its time, title and icon off-screen, leaving an anonymous stripe across the row — which is exactly the shape of the most common case, a full-day holiday or sick leave. The label now stays pinned to the left edge of the view while any part of the bar is visible.
  • Fixed: MTimelineBoardUnavailableSlot and MTimelineBoardUnavailableKind existed as types but were never exported, so anyone using unavailableSlots had to redeclare the shape by hand in every file. Both are exported now, together with MTimelineBoardEventOverride, MTimelineBoardHandle and MTimelineBoardScrollAlign.
  • New: MCalendarBoard accepts detailsMode="none". When the selected day's agenda already sits next to the grid, the day popover repeated it and covered the grid you clicked through — and showTimeline={false} only removed the hour axis inside the popover, not the popover. With none the day stays clickable and selected, onDayClick still fires, and nothing opens.
  • Changed: message is optional in MToastOptions. A toast whose title says everything ("Availability saved") no longer needs a filler second line.
  • Changed: MSelect falls back to "Select..." instead of the literal "MSelect..." when no placeholder is given. Still pass one.