# Mantine 9.2.0 — 9.2.0 🔥 - Product: Mantine (https://whatsnew.fyi/product/mantine) - Vendor: Mantine - Date: 2026-05-11 - Version: 9.2.0 - Original notes: https://github.com/mantinedev/mantine/releases/tag/9.2.0 - Permalink: https://whatsnew.fyi/product/mantine/releases/9.2.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — TreeSelect component for picking one or more values from hierarchical tree data with single, multiple, and checkbox selection modes - **added** — use-drag hook for handling pointer drag gestures with movement tracking, velocity, direction and axis constraints - **added** — InlineDateTimePicker component that renders a calendar with a time picker inline without a dropdown - **changed** — Notifications now support dismissing by dragging left or right, and with horizontal scroll swipe while hovered - **changed** — DateTimePicker now supports type="range" to select a date and time range with two time inputs - **added** — Combobox examples for building tree select components with connecting lines, expand/collapse chevrons, and proper indentation [View changelog with demos on mantine.dev website](https://mantine.dev/changelog/9-2-0) ##### Support Mantine development You can now sponsor Mantine development with [OpenCollective](https://opencollective.com/mantinedev). All funds are used to improve Mantine and create new features and components. ##### TreeSelect component New [TreeSelect](https://mantine.dev/core/tree-select) component allows picking one or more values from hierarchical tree data. It supports three selection modes: single, multiple, and checkbox (with parent-child cascade): ```tsx import { TreeSelect } from '@mantine/core'; import { data } from './data'; function Demo() { return ( ); } ``` ##### Tree select Combobox examples New [Combobox examples](https://mantine.dev/combobox?e=TreeSelectCombobox) showing how to build tree select components from Combobox primitives with connecting lines, expand/collapse chevrons, and proper indentation: - [Tree select](https://mantine.dev/combobox?e=TreeSelectCombobox) – basic single-value tree select - [Tree multi select](https://mantine.dev/combobox?e=TreeMultiSelectCombobox) – multi select with checkbox cascade - [Searchable tree select](https://mantine.dev/combobox?e=TreeSelectSearchable) – tree select with search filtering - [Tree select with checkboxes](https://mantine.dev/combobox?e=TreeSelectCheckbox) – single select with expand-on-click - [Virtualized tree select](https://mantine.dev/combobox?e=TreeSelectVirtualized) – large tree (~500 nodes) with @tanstack/react-virtual ##### Notifications swipe dismissal [@mantine/notifications](https://mantine.dev/x/notifications) now supports dismissing notifications by dragging them left or right, and with horizontal scroll swipe while hovered. Both interactions can be disabled on `Notifications`, and individual items can opt out with `allowClose: false`. ```tsx import { Button } from '@mantine/core'; import { notifications } from '@mantine/notifications'; function Demo() { return ( ); } ``` ##### use-drag hook New [use-drag](https://mantine.dev/hooks/use-drag) hook handles pointer drag gestures with movement tracking, velocity, direction and axis constraints. It uses the Pointer Events API and works with both mouse and touch input: ```tsx import { useState } from 'react'; import { Button, Group, Paper, Text } from '@mantine/core'; import { useDrag } from '@mantine/hooks'; interface NotificationItem { id: number; text: string; } function SwipeNotification({ notification, onDismiss, }: { notification: NotificationItem; onDismiss: (id: number) => void; }) { const [offset, setOffset] = useState(0); const [dismissed, setDismissed] = useState(false); const { ref, active } = useDrag( (state) => { if (state.last) { const shouldDismiss = Math.abs(state.movement[0]) > 120 || state.velocity[0] > 0.5; if (shouldDismiss) { setDismissed(true); setTimeout(() => onDismiss(notification.id), 300); } else { setOffset(0); } } else { setOffset(state.movement[0]); } }, { axis: 'x', threshold: 5, filterTaps: true } ); return ( 0 ? 400 : -400}px)` : `translateX(${offset}px)`, opacity: dismissed ? 0 : 1 - Math.min(Math.abs(offset) / 200, 1) * 0.6, transition: active ? 'none' : 'transform 300ms ease, op _[Truncated at 4000 characters — full notes: https://github.com/mantinedev/mantine/releases/tag/9.2.0]_