Skip to content

Update Routine updates - #252

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/routine-updates
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/routine-updates

Conversation

@renovate

@renovate renovate Bot commented Aug 3, 2026 •

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@convex-dev/batch-worker 0.3.3 → 0.3.6 age confidence
@convex-dev/eslint-plugin (source) 5.0.0 → 5.0.1 age confidence
@convex-dev/migrations 0.3.6 → 0.3.7 age confidence
@eslint/eslintrc 3.3.6 → 3.3.7 age confidence
@fast-check/vitest (source) 0.4.1 → 0.5.0 age confidence
@mantine/core (source) 9.5.0 → 9.7.5 age confidence
@mantine/emotion (source) 9.5.0 → 9.7.5 age confidence
@mantine/hooks (source) 9.5.0 → 9.7.5 age confidence
@mantine/notifications (source) 9.5.0 → 9.7.5 age confidence
@tabler/icons-react (source) 3.46.0 → 3.51.0 age confidence
@types/node (source) 22.20.1 → 22.20.5 age confidence
@types/react (source) 19.2.17 → 19.3.0 age confidence
@types/react-dom (source) 19.2.3 → 19.3.0 age confidence
@typescript-eslint/eslint-plugin (source) 8.65.0 → 8.72.1 age confidence
@typescript-eslint/parser (source) 8.65.0 → 8.72.1 age confidence
@vitejs/plugin-react (source) 6.0.4 → 6.2.1 age confidence
@vitest/coverage-v8 (source) 4.1.10 → 4.1.12 age confidence
@xyflow/react (source) 12.11.2 → 12.12.1 age confidence
convex (source) 1.46.0 → 1.49.0 age confidence
convex-helpers 0.1.128 → 0.1.134 age confidence
convex-test (source) 0.0.64 → 0.0.67 age confidence
eslint-plugin-react-refresh 0.5.3 → 0.5.7 age confidence
globals 17.8.0 → 17.14.0 age confidence
pkg-pr-new (source) 0.0.82 → 0.0.93 age confidence
prettier (source) 3.9.6 → 3.9.10 age confidence
react (source) 19.2.8 → 19.3.1 age confidence
react-dom (source) 19.2.8 → 19.3.1 age confidence
typescript-eslint (source) 8.65.0 → 8.72.1 age confidence
vite (source) 8.1.6 → 8.3.6 age confidence

Release Notes

get-convex/batch-worker (@​convex-dev/batch-worker)

v0.3.6

Compare Source

  • Updates the /test entrypoint for compatibility with convex-test's new
    defineTestApp capability.

v0.3.5

Compare Source

  • Improve the test entrypoint generics

v0.3.4

Compare Source

  • Remove the unnecessary react peer dependency and entrypoint
convex/convex-backend (@​convex-dev/eslint-plugin)

v5.0.1

  • Fix false positives in @convex-dev/no-collect-in-query with type-aware
    linting. In projects that include Convex's types, the rule reported every
    .collect() call, including ones on classes and objects unrelated to Convex.
    It now only reports .collect() on Convex queries. Thanks to
    @​stickerdaniel for the fix.
  • Fix false positives in @convex-dev/no-filter-in-query with type-aware
    linting. The rule recognized Convex queries partly by name, so it reported
    .filter() on unrelated types, such as a class whose predicate takes a
    parameter of a type named FilterBuilder, or a non-Convex db.query() result
    stored in a variable. It now only reports .filter() on Convex queries.
convex/migrations (@​convex-dev/migrations)

v0.3.7

Compare Source

  • Updates the /test entrypoint for compatibility with convex-test's new
    defineTestApp capability.
eslint/eslintrc (@​eslint/eslintrc)

v3.3.7

Compare Source

Bug Fixes
dubzzz/fast-check (@​fast-check/vitest)

v0.5.0

Support for plugins and for Vitest v5
[Code][Diff]

Features

  • (PR#7219) Support plugin API of fast-check
  • (PR#7244) Support Vitest 5

mantinedev/mantine (@​mantine/core)

v9.7.5

Compare Source

  • [@mantine/tiptap] Keep aria-pressed on toggle controls in both states (#​9376)
  • [@mantine/core] Indicator: Respect reduced motion in the processing animation (#​9375)
  • [@mantine/schedule] YearView: Fix multi-day events not showing when they start in the previous year (#​9374)
  • [@mantine/dates] Use dayjs to create years in YearsList and CalendarHeader (#​9372)
  • [@mantine/core] NumberInput: Fix inputMode prop being overridden (#​9371)
  • [@mantine/core] Tour: Add position="center" to Tour.Step to place the tooltip over the target (#​9369)
  • [@mantine/charts] BarChart: Fix waterfall type mutating the data prop (#​9365)
  • [@mantine/hooks] use-mask: Fix autofill keydown errors (#​9362)
  • [@mantine/core] Combobox: Fix hidden input dropping falsy values (#​9359)
  • [@mantine/core] Popover: Fix preventPositionChangeWhenVisible not locking dropdown side on open (#​9358)
  • [@mantine/hooks] use-move: End scrubbing when touch is canceled (#​9354)
  • [@mantine/hooks] use-focus-within: Keep focus within SVG descendants (#​9353)
  • [@mantine/hooks] use-window-event: Update event listener options (#​9352)
  • [@mantine/hooks] use-scroller: Track delayed and replaced containers (#​9351)
  • [@mantine/hooks] use-resize-observer: Prevent render loops with inline options (#​9350)
  • [@mantine/hooks] use-long-press: Prevent duplicate timers on overlapping presses (#​9349)
  • [@mantine/hooks] use-input-state: Fix setter type to accept callbacks (#​9347)
  • [@mantine/mcp-server] get_api: Resolve symbols documented in guide pages (#​9341) (#​9346)
  • [@mantine/core] Cascader: Fix keyboard navigation not being ignored during IME composition (#​9343)
  • [@mantine/core] MultiSelect, TreeSelect: Fix Backspace removing the last value during IME composition (#​9340)
  • [@mantine/hooks] use-scroll-into-view: Clamp animation progress before easing (#​9338)
  • [@mantine/hooks] use-timeout: Fix callback restarts and error recovery (#​9336)
  • [@mantine/schedule] MonthView: Fix ArrowLeft and ArrowRight not being mirrored in RTL (#​9335)
  • [@mantine/core] TreeSelect: Fix ArrowLeft and ArrowRight not being mirrored in RTL (#​9334)
  • [@mantine/core] Fix leading decimal values being treated as theme sizes (#​9333)
  • [@mantine/core] Menu: Keep explicit aria-disabled on items and Menubar targets (#​9332)
  • [@mantine/dates] Calendar: Fix ArrowLeft and ArrowRight not being mirrored in RTL (#​9330)
  • [@mantine/hooks] use-hash: Keep setter state consistent with the URL (#​9328)
  • [@mantine/core] Parse four-digit hex colors in color functions (#​9327)
  • [@mantine/schedule] Add eventTimeFormat prop support to AgendaView, MobileMonthView, DayView, WeekView, MonthView and Schedule components (#​9356)
  • [@mantine/core] Add loaderProps support to all input components

v9.7.4

Compare Source

  • [@mantine/schedule] Fix time slot labels showing wrong time on daylight saving time days in DayView, WeekView, ResourcesDayView, ResourcesWeekView (#​9320)
  • [@mantine/hooks] use-mask: Fix generatePattern output being rejected by browsers for masks with # token (#​9326)
  • [@mantine/core] NavLink: Add aria-expanded to links with children (#​9325)
  • [@mantine/core] Menu: Add aria-disabled to items and Menubar targets with data-disabled (#​9323)
  • [@mantine/core] Preserve zero alpha when converting hsla colors (#​9321)
  • [@mantine/schedule] DayView, WeekView: Fix events and current time indicator being positioned at wrong time on daylight saving time days (#​9317)
  • [@mantine/schedule] DayView: Fix multi-day events starting at midnigh… (#​9315)
  • [@mantine/core] ScrollArea: Stop thumb animation loop on cleanup (#​9314)
  • [@mantine/hooks] use-clipboard: Reset copied state on error (#​9310)
  • [@mantine/hooks] use-hover: Fix listeners not being removed when React detaches the ref (#​9309)
  • [@mantine/core] TagsInput: Fix readOnly not preventing value changes on paste (#​9308)
  • [@mantine/core] Tree: Fix ArrowLeft and ArrowRight not being mirrored in RTL (#​9307)
  • [@mantine/core] SegmentedControl: Fix readOnly prop description (#​9306)
  • [@mantine/core] Checkbox: Forward readOnly attribute to the input (#​9305)
  • [@mantine/core] AppShell: Keep the context value stable when the shell re-renders after mounting (#​9304)
  • [@mantine/core] Menu: Fix ArrowLeft and ArrowRight not being mirrored in RTL submenus (#​9302)
  • [@mantine/core] Menu: Fix focus not returning to the submenu target on ArrowLeft (#​9301)
  • [@mantine/hooks] use-local-storage: Fix stale value after key change (#​9298)
  • [@mantine/charts] Support Recharts legend position (#​9297)
  • [@mantine/hooks] use-fetch: Fix stale error and loading state when a request is replaced or aborted (#​9296)
  • [@mantine/core] SegmentedControl: Fix indicator position not being changed when data array is reordered

v9.7.3

Compare Source

  • [@mantine/schedule] Add slotLabelInterval prop to DayView and WeekView to display time labels more often than once per hour
  • [@mantine/schedule] Add option to customize business hours minutes and change colors
  • [@mantine/schedule] MobileMonthView: Add withWeekendDays prop
  • [@mantine/charts] Fix right Y axis children rendering (#​9295)
  • [@mantine/hooks] use-scroller: Fix next click being ignored after a drag ends by leaving the container (#​9294)
  • [@mantine/hooks] use-event-listener: Fix listener being removed after re-render when options object is passed inline (#​9292)
  • [@mantine/core] ScrollArea: Add --scrollarea-offset-size CSS variable (#​9290)
  • [@mantine/core] Cascader: Fix ArrowLeft and ArrowRight not being mirrored in RTL (#​9286)
  • [@mantine/hooks] use-throttled-callback: Handle reentrant calls (#​9284)
  • [@mantine/core] Radio, Chip: Fix readOnly prop not preventing value changes (#​9282)
  • [@mantine/core] Select: Fix onChange option argument type not including null (#​9281)
  • [@mantine/core] Switch: Fix readOnly prop not preventing toggle (#​9280)
  • [@mantine/core] Fix searchable inputs ignoring typing when rendered in another window or iframe (#​9278)
  • [@mantine/hooks] use-focus-trap: Fix focus not being fully trapped when used with macOS Full Keyboard Access off

v9.7.2

Compare Source

  • [@mantine/core] PinInput: Fix readOnly not preventing value changes on Delete, Backspace and paste (#​9258)
  • [@mantine/core] Divider: Add aria-orientation (#​9259)
  • [@mantine/core] Tooltip: Fix disabled tooltip setting aria-describedby on its target (#​9261)
  • [@mantine/core] Transition: Fix frames and callbacks running after unmount during the first frame (#​9263)
  • [@mantine/hooks] use-scroll-into-view: Reset start time on cancel (#​9265)
  • [@mantine/core] Fix Backspace removing the last value when readOnly is set in MultiSelect and TreeSelect components (#​9267)
  • [@mantine/schedule] ResourcesDayView: Fix sticky resource labels covering the time labels row (#​9268)
  • [@mantine/hooks] use-debounced-callback: Avoid repeating completed leading calls (#​9269)
  • [@mantine/schedule] MobileMonthView: Fix multi-day event time display on start, middle and end days (#​9272)
  • [@mantine/form] Add UseContextForm type export (#​9275)
  • [@mantine/form] Fix potential global prototype position
  • [@mantine/tiptap] Add option to handle images pasted with other rich text elements in the image extension (#​9270)

v9.7.1

Compare Source

  • [@mantine/schedule] Fix startScrollTime scroll position (#​9255)
  • [@mantine/core] RollingNumber: Fix sub-pixel digit misalignment at fractional zoom levels (#​9251)
  • [@mantine/core] Tree: Add aria-expanded to tree items with children (#​9247)
  • [@mantine/core] SegmentedControl: Do not call Math.random during render (#​9245)
  • [@mantine/core] Popover: Add capture prop to control events capturing phase (#​9243)
  • [@mantine/form] Fix clearing state of unrelated fields (#​9242)
  • [@mantine/core] AngleSlider: Set aria-disabled on thumb when disabled (#​9238)
  • [@mantine/core] Combobox: Set aria-disabled on disabled Combobox.Option (#​9236)
  • [@mantine/form] Fix reorderListItem moving errors of items whose index shares a prefix with the reordered index (#​9235)
  • [@mantine/schedule] MonthView: Fix quadratic row assignment for weeks with many events (#​9232)
  • [@mantine/hooks] use-pagination: Fix single page being replaced with dots on the right side (#​9229)
  • [@mantine/core] ScrollArea: Fix wheel listener on document blocking compositor scrolling for the whole page (#​9225)
  • [@mantine/dates] DateTimePicker: Fix time not being limited by minDate and maxDate (#​9221)
  • [@mantine/core] Select, MultiSelect, Autocomplete, TagsInput: Fix listbox aria-labelledby referencing a missing label element (#​9219) (#​9220)
  • [@mantine/hooks] use-debounced-state: Fix leading edge firing only once (#​9214)

v9.7.0: 😳

Compare Source

View changelog with demos on mantine.dev website

Support Mantine development

You can now sponsor Mantine development with OpenCollective.
All funds are used to improve Mantine and create new features and components.

@​mantine/mcp-server documentation coverage

@​mantine/mcp-server now exposes 406 documentation
pages instead of 164. Previously only components were indexed – hooks, @​mantine/form,
styling, theming, guides and help.mantine.dev FAQ pages are now included as
well. Changelog pages are deliberately excluded to keep search results focused on current APIs.

Documentation is now retrieved by section rather than by whole page. get_item_doc returns a page
outline (description, import statement and the list of section headings) by default, a single section
with the section argument, or the entire page with full: true. Requesting useForm this way returns
about 1KB instead of 9KB, and the largest pages drop from roughly 89KB to 4KB.

Other improvements:

  • New get_api tool – resolves a symbol such as useForm or useDisclosure to its TypeScript
    signature and exported types without knowing which page documents it
  • Ranked search – search_docs results point at the specific section that matched, so a query like
    "validate a form with zod" resolves to the zod section of the schema validation page
  • Search synonyms – queries now match the search keywords maintained in the documentation, so
    "command palette" finds Spotlight
  • More filters – list_items accepts group, category and package in addition to kind
  • Hook signatures – get_item_props returns the TypeScript signature for hooks, and points at the
    relevant section for pages that document their API in prose

The server was also migrated to the official Model Context Protocol SDK, so the protocol version is
negotiated with the client instead of being pinned.

For setup details, supported tools, and client-specific instructions, see Mantine with LLMs.

Tour component

New Tour component provides interactive step-by-step application onboarding.
It highlights target elements with a spotlight overlay and displays tooltips with navigation controls.
Supports both guided (sequential) and beacon (non-sequential) modes.

Toolbar component

New Toolbar component provides an accessible toolbar container with roving tabindex
keyboard navigation, toggle groups with single/multiple selection, visual grouping, and dividers.
Styling is similar to RichTextEditor toolbar.

Toggle component

New Toggle component is a button that can be toggled between active and inactive states:

JsonViewer component

New JsonViewer component can be used to display complex JSON
structures with expand/collapse, type indicators, copy to clipboard, and other features:

Light Checkbox and Radio variant

Checkbox and Radio components now support variant="light" –
the indicator uses a light background color with a colored icon, similar to the light variant
available in other components like Button:

import { Radio, Checkbox, Stack } from '@mantine/core';

function Demo() {
  return (
    <Stack gap={7}>
      <Checkbox variant="light" label="Light Checkbox" defaultChecked />
      <Checkbox variant="light" label="Light indeterminate Checkbox" indeterminate />
      <Radio variant="light" label="Light Radio" defaultChecked />
    </Stack>
  );
}

RichTextEditor image upload

RichTextEditor now supports image upload with loading states.
Images can be uploaded via toolbar button, drag and drop, or paste.
During upload, a local preview is shown with a loading indicator.

Configuring getUploadImageExtension is enough to enable uploads – onImageUpload and
onImageUploadError props of RichTextEditor are optional overrides for the toolbar control.
onImageUpload can resolve either to a string or to { src, alt, title } (new exported
ImageUploadResult type) to set alternative text on the uploaded image. Several files picked,
dropped or pasted together are inserted in the order they were selected and are undone as one step.

import TipTapImage from '@tiptap/extension-image';
import { useEditor } from '@tiptap/react';
import StarterKit from '@tiptap/starter-kit';
import { getUploadImageExtension, ImageUploadResult, RichTextEditor } from '@mantine/tiptap';

function handleImageUpload(file: File): Promise<ImageUploadResult> {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ src: URL.createObjectURL(file), alt: file.name });
    }, 3000);
  });
}

function Demo() {
  const editor = useEditor({
    shouldRerenderOnTransaction: true,
    extensions: [
      StarterKit,
      getUploadImageExtension(TipTapImage, { onImageUpload: handleImageUpload }),
    ],
    content: '<p>Click the image button in the toolbar, or drag & drop / paste an image into the editor.</p>',
  });

  return (
    <RichTextEditor editor={editor}>
      <RichTextEditor.Toolbar>
        <RichTextEditor.ControlsGroup>
          <RichTextEditor.Bold />
          <RichTextEditor.Italic />
        </RichTextEditor.ControlsGroup>

        <RichTextEditor.ControlsGroup>
          <RichTextEditor.ImageUpload />
        </RichTextEditor.ControlsGroup>
      </RichTextEditor.Toolbar>

      <RichTextEditor.Content />
    </RichTextEditor>
  );
}

Schedule event overlap mode

DayView and WeekView now support eventOverlapMode prop
that controls how events overlapping in time share the horizontal space. The default columns mode
splits the available width evenly between them, which becomes unreadable once a large number of events
overlap. The new cascade mode indents each event and stacks it over the previous one, so every event
keeps a readable width no matter how many of them overlap.

The indent shrinks automatically as the group grows, so the event on top always keeps at least 60% of
the available width. Covered events can still be read and used: rest the pointer on one and it is
raised above the events covering it, which also makes its resize handles reachable. Keyboard users get
the same result by focusing the event with Tab. eventOverlapRaiseDelay prop controls how long the
pointer must rest on an event before it is raised, in milliseconds (600 by default).

import { useState } from 'react';
import { SegmentedControl, Stack } from '@mantine/core';
import { ScheduleEventOverlapMode, WeekView } from '@mantine/schedule';
import { events } from './data';

function Demo() {
  const [mode, setMode] = useState<ScheduleEventOverlapMode>('cascade');

  return (
    <Stack>
      <SegmentedControl
        value={mode}
        onChange={(value) => setMode(value as ScheduleEventOverlapMode)}
        data={[
          { value: 'columns', label: 'columns' },
          { value: 'cascade', label: 'cascade' },
        ]}
      />

      <WeekView
        date={new Date()}
        events={events}
        startTime="08:00:00"
        endTime="14:00:00"
        eventOverlapMode={mode}
      />
    </Stack>
  );
}

Schedule drop validation

All Schedule views can now reject a drag or resize before it is committed,
based on where the event is being dropped rather than on which event is being dragged. Previously
canDragEvent and canResizeEvent only decided whether an event was draggable or resizable at all,
so the only way to prevent a double booking was to accept the drop, notice the conflict in the
handler and not update state – which produced a snap-back with no explanation:

  • preventEventOverlap rejects placements that would make the event overlap another event. Pass a
    function to decide per pair of events: return true to forbid that particular overlap.
  • canDropEvent and canResizeEventTo are called before a drop or resize is committed – return
    false to reject it.
  • canDropExternalEvent does the same for items dragged in from outside the schedule.
  • onEventPlacementRejected reports the rejection with the conflicting events and the reason.

The checks compose: a placement is allowed only when the overlap check passes and the matching
callback returns a value other than false. The overlap check runs first, so onEventPlacementRejected
can report conflicts without your code repeating the work. While the pointer is over an invalid
target the drag ghost and the resizing event get data-invalid, so the rejection is visible before the
pointer is released.

import { useState } from 'react';
import dayjs from 'dayjs';
import { Stack, Text } from '@mantine/core';
import { WeekView, ScheduleEventData } from '@mantine/schedule';

const startOfWeek = dayjs()
  .subtract((dayjs().day() + 6) % 7, 'day')
  .format('YYYY-MM-DD');

const initialEvents: ScheduleEventData[] = [
  {
    id: 1,
    title: 'Standup',
    start: `${startOfWeek} 09:00:00`,
    end: `${startOfWeek} 09:30:00`,
    color: 'blue',
  },
  {
    id: 2,
    title: 'Design review',
    start: `${startOfWeek} 11:00:00`,
    end: `${startOfWeek} 12:00:00`,
    color: 'grape',
  },
  {
    id: 3,
    title: 'Retro',
    start: `${startOfWeek} 14:00:00`,
    end: `${startOfWeek} 15:00:00`,
    color: 'teal',
  },
];

function Demo() {
  const [date, setDate] = useState(dayjs().format('YYYY-MM-DD'));
  const [events, setEvents] = useState(initialEvents);
  const [message, setMessage] = useState<string | null>(null);

  return (
    <Stack>
      <WeekView
        date={date}
        onDateChange={setDate}
        events={events}
        startTime="08:00:00"
        endTime="18:00:00"
        withEventsDragAndDrop
        withEventResize
        eventDragInterval={15}
        preventEventOverlap
        onEventDrop={({ eventId, newStart, newEnd }) => {
          setMessage(null);
          setEvents((prev) =>
            prev.map((event) =>
              event.id === eventId ? { ...event, start: newStart, end: newEnd } : event
            )
          );
        }}
        onEventResize={({ eventId, newStart, newEnd }) => {
          setMessage(null);
          setEvents((prev) =>
            prev.map((event) =>
              event.id === eventId ? { ...event, start: newStart, end: newEnd } : event
            )
          );
        }}
        onEventPlacementRejected={(data) => {
          if (data.action === 'external-drop') {
            return;
          }

          setMessage(
            `${data.event.title} cannot be ${data.action === 'drop' ? 'moved' : 'resized'} there – it would overlap ${data.conflicts
              .map((conflict) => conflict.title)
              .join(', ')}`
          );
        }}
      />

      {message && <Text c="red" size="sm">{message}</Text>}
    </Stack>
  );
}

In resource views the conflict set is scoped to the target
resource, so moving an event onto another resource row is checked against that row rather than the one
it came from:

import { useState } from 'react';
import dayjs from 'dayjs';
import { Stack, Text } from '@mantine/core';
import { ResourcesDayView, ScheduleEventData, ScheduleResourceData } from '@mantine/schedule';

const today = dayjs().format('YYYY-MM-DD');

const resources: ScheduleResourceData[] = [
  { id: 'room-a', label: 'Room A' },
  { id: 'room-b', label: 'Room B' },
  { id: 'room-c', label: 'Room C (large groups only)' },
];

const initialEvents: ScheduleEventData[] = [
  {
    id: 1,
    title: 'Interview (2 people)',
    start: `${today} 09:00:00`,
    end: `${today} 10:00:00`,
    color: 'blue',
    resourceId: 'room-a',
    payload: { attendees: 2 },
  },
  {
    id: 2,
    title: 'All-hands (40 people)',
    start: `${today} 11:00:00`,
    end: `${today} 12:00:00`,
    color: 'grape',
    resourceId: 'room-c',
    payload: { attendees: 40 },
  },
];

function Demo() {
  const [date, setDate] = useState(dayjs().format('YYYY-MM-DD'));
  const [events, setEvents] = useState(initialEvents);
  const [message, setMessage] = useState<string | null>(null);

  return (
    <Stack>
      <ResourcesDayView
        date={date}
        onDateChange={setDate}
        resources={resources}
        events={events}
        startTime="08:00:00"
        endTime="18:00:00"
        withEventsDragAndDrop
        preventEventOverlap
        canDropEvent={({ event, resourceId }) =>
          resourceId !== 'room-c' || (event.payload?.attendees ?? 0) >= 20
        }
        onEventDrop={({ eventId, newStart, newEnd, resourceId }) => {
          setMessage(null);
          setEvents((prev) =>
            prev.map((event) =>
              event.id === eventId
                ? { ...event, start: newStart, end: newEnd, resourceId }
                : event
            )
          );
        }}
        onEventPlacementRejected={(data) => {
          if (data.action === 'external-drop') {
            return;
          }

          setMessage(
            data.reason === 'overlap'
              ? `${data.event.title} would overlap ${data.conflicts.length} event(s) in that room`
              : 'Room C is reserved for meetings with 20 or more attendees'
          );
        }}
      />

      {message && <Text c="red" size="sm">{message}</Text>}
    </Stack>
  );
}

TreeSelect renderPill

TreeSelect now supports renderPill prop to customize how pills are rendered
for selected values in multiple and checkbox modes, similar to renderPill prop of
MultiSelect. The callback receives the tree node, so pills can use
nodeProps or the node structure, for example to show a different icon for parent and leaf nodes:

import { FileTextIcon, FolderSimpleIcon } from '@phosphor-icons/react';
import { Group, Pill, TreeSelect, TreeSelectProps } from '@mantine/core';
import { data } from './data';

const renderTreePill: TreeSelectProps['renderPill'] = ({ node, onRemove, disabled, readOnly }) => (
  <Pill withRemoveButton={!readOnly} onRemove={onRemove} disabled={disabled}>
    <Group gap={4} wrap="nowrap">
      {node.children || node.hasChildren ? (
        <FolderSimpleIcon size={12} />
      ) : (
        <FileTextIcon size={12} />
      )}
      {node.label}
    </Group>
  </Pill>
);

function Demo() {
  return (
    <TreeSelect
      mode="checkbox"
      checkedStrategy="parent"
      label="Categories"
      placeholder="Pick categories"
      data={data}
      defaultValue={['phones', 'headphones']}
      defaultExpandAll
      renderPill={renderTreePill}
    />
  );
}

Tooltip hideDetached

Tooltip now supports hideDetached prop, which works the same way as
Popover hideDetached. It is enabled by default: the tooltip is now
hidden when its target element is removed from the DOM, hidden with display: none, or scrolled out
of a container that clips it. Previously, the tooltip stayed in place, floating over unrelated
content. Set hideDetached={false} to restore the previous behavior. The prop has no effect on
Tooltip.Floating, which is positioned relative to the mouse pointer.

Note that jsdom reports zero-size rectangles for every element, so in Jest and Vitest every tooltip
is treated as detached and hidden unless the test wrapper sets env="test" on MantineProvider
(as described in the Jest and Vitest guides) or the component is
rendered with hideDetached={false}.

import { Box, Button, Group, Tooltip } from '@mantine/core';

function Demo() {
  return (
    <Box
      bd="1px solid var(--mantine-color-dimmed)"
      p="xl"
      w={{ base: 340, sm: 400 }}
      h={200}
      style={{ overflow: 'auto' }}
    >
      <Box w={1000} h={400}>
        <Group>
          <

> [!IMPORTANT]
> ✂ PR body was truncated to here.


</details>

---

### Configuration

📅 **Schedule**: (in timezone America/Los_Angeles)

- Branch creation
  - Monday through Friday (`* * * * 1-5`)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/convex/aggregate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zLjIiLCJ1cGRhdGVkSW5WZXIiOiI0NC4yMjguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

@pkg-pr-new

pkg-pr-new Bot commented Aug 3, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@convex-dev/aggregate@252

commit: ef68046

@renovate
renovate Bot force-pushed the renovate/routine-updates branch 9 times, most recently from 7f045c1 to cc27739 Compare August 9, 2026 17:15
@renovate
renovate Bot force-pushed the renovate/routine-updates branch 15 times, most recently from 22d5b18 to bae10f2 Compare August 18, 2026 21:55
@renovate
renovate Bot force-pushed the renovate/routine-updates branch 5 times, most recently from 6450e82 to e402576 Compare August 24, 2026 06:17
@renovate
renovate Bot force-pushed the renovate/routine-updates branch 5 times, most recently from ef68046 to 1a81ada Compare September 3, 2026 15:40
@renovate

renovate Bot commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: package-lock.json
npm error code ERESOLVE
npm error ERESOLVE could not resolve
npm error
npm error While resolving: @vitest/coverage-v8@4.1.12
npm error Found: vitest@4.1.10
npm error node_modules/vitest
npm error   dev vitest@"4.1.10" from the root project
npm error   peer vitest@"^4.1.0 || ^5.0.0" from @fast-check/vitest@0.5.0
npm error   node_modules/@fast-check/vitest
npm error     dev @fast-check/vitest@"0.5.0" from the root project
npm error
npm error Could not resolve dependency:
npm error peer vitest@"4.1.12" from @vitest/coverage-v8@4.1.12
npm error node_modules/@vitest/coverage-v8
npm error   dev @vitest/coverage-v8@"4.1.12" from the root project
npm error
npm error Conflicting peer dependency: vitest@4.1.12
npm error node_modules/vitest
npm error   peer vitest@"4.1.12" from @vitest/coverage-v8@4.1.12
npm error   node_modules/@vitest/coverage-v8
npm error     dev @vitest/coverage-v8@"4.1.12" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
npm error For a full report see:
npm error /runner/cache/others/npm/_logs/2026-11-11T20_28_19_697Z-eresolve-report.txt
npm error A complete log of this run can be found in: /runner/cache/others/npm/_logs/2026-11-11T20_28_19_697Z-debug-0.log

@renovate
renovate Bot force-pushed the renovate/routine-updates branch 10 times, most recently from 762ab77 to 0794da2 Compare September 10, 2026 17:55
@renovate
renovate Bot force-pushed the renovate/routine-updates branch 10 times, most recently from 3ca55d2 to 9e5930d Compare September 17, 2026 16:50
@renovate
renovate Bot force-pushed the renovate/routine-updates branch 3 times, most recently from 55a3577 to 87136d7 Compare September 20, 2026 06:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants