npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mantine-calendar-rows

v0.8.0

Published

Drop-in wrappers around @mantine/dates Calendar / DatePicker components that add a numberOfRows prop, allowing multi-row grid layouts (e.g. 4 months as 2x2 instead of 1x4) without forking Mantine.

Readme

Quadux IT Logo

mantine-calendar-rows

npm version GitHub License: Apache 2.0

English | Deutsch

Drop-in wrappers around @mantine/dates calendar components that add a numberOfRows prop, allowing multi-row grid layouts — for example a 4-month calendar rendered as a 2×2 grid instead of 1×4.

Why?

@mantine/dates supports numberOfColumns out of the box, which lays months / years / decades next to each other in a single horizontal row. That works fine for 2–3 months, but falls apart visually and spatially for 6, 8 or 12 months. The natural fix is a numberOfRows prop that reshapes the existing levels into a grid.

There is an upstream PR for this but it has not been merged. mantine-calendar-rows gives you the feature today without forking Mantine — it depends on the unmodified upstream @mantine/dates as a peer dependency, so you always stay on the latest official release.

Approach

Instead of patching Mantine internals, the wrapper uses Mantine's public API:

  1. It asks the original component to render numberOfColumns × numberOfRows levels by passing the product as numberOfColumns.
  2. It overrides the inner levelsGroup slot via the standard StylesApi, switching its default display: flex to display: grid with numberOfColumns actual columns.

From Mantine's perspective there is still exactly one logical row of N levels, so its withNext / withPrevious / navigation-chevron logic keeps working correctly. Only the visual layout is rearranged.

No DOM patching, no forks, no portal hacks, no internal imports.

When numberOfRows is 1 (or omitted), the wrapped component is a pure pass-through and adds zero runtime overhead.

Installation

npm install mantine-calendar-rows
# or
yarn add mantine-calendar-rows

@mantine/dates, @mantine/core and react are peer dependencies — they are expected to be installed by the host application.

Usage

Just replace your @mantine/dates import with mantine-calendar-rows for the components that should support the new prop:

// Before
import { Calendar, DatePickerInput } from "@mantine/dates";

// After
import { Calendar, DatePickerInput } from "mantine-calendar-rows";

export function Demo() {
  return (
    <>
      {/* 4 months as a 2x2 grid */}
      <Calendar numberOfColumns={2} numberOfRows={2} />

      {/* 6 months as a 3x2 grid inside a popover input */}
      <DatePickerInput
        type="range"
        numberOfColumns={3}
        numberOfRows={2}
        placeholder="Pick range"
      />
    </>
  );
}

All existing @mantine/dates props are forwarded verbatim — you do not lose anything by switching imports.

Exported components

Each wrapper accepts the same props as its @mantine/dates counterpart plus an optional numberOfRows?: number.

| Component | Notes | | ------------------ | -------------------------------------------------- | | Calendar | Inline calendar — month / year / decade levels | | DatePicker | Inline date picker | | DatePickerInput | Text input with popover calendar | | DateInput | Formatted text input with popover calendar | | DateTimePicker | Date + time input | | MonthPicker | Inline month picker | | MonthPickerInput | Month picker with input + popover | | YearPicker | Inline year picker | | YearPickerInput | Year picker with input + popover | | MonthLevelGroup | Low-level level group | | YearLevelGroup | Low-level level group | | DecadeLevelGroup | Low-level level group |

Wrap your own components

For anything not in the list above — a custom component that internally renders a Mantine calendar, for example — use the withNumberOfRows HOC:

import { withNumberOfRows } from "mantine-calendar-rows";
import { SomeCalendarComponent } from "somewhere";

const SomeCalendarWithRows = withNumberOfRows(
  SomeCalendarComponent,
  "SomeCalendarComponent",
);

The target component needs to accept numberOfColumns and styles in the shape of Mantine's StylesApi (i.e. styles.levelsGroup).

Requirements

  • @mantine/dates >= 8 (tested against 9.x)
  • @mantine/core >= 8
  • react >= 18

Links

Feedback & Contributing

Bug reports, feature requests and feedback are very welcome. The best place is the issue tracker — no template needed, just describe what you ran into or what you would like to see. Pull requests are also welcome; for larger changes please open an issue first so we can align on the approach.

License

Apache 2.0 — see LICENSE.