diff --git a/README.md b/README.md index 565a9efe9..3c5cd2181 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ V1 released July 18, 2023 ### _Quickly Create React Data Tables with Mantine_ -### __Built with [Mantine V7](https://mantine.dev/) and [TanStack Table V8](https://tanstack.com/table/v8)__ +### __Built with [Mantine V8](https://mantine.dev/) and [TanStack Table V8](https://tanstack.com/table/v8)__ MRT diff --git a/apps/mantine-react-table-docs/examples/editing-crud-tree/index.tsx b/apps/mantine-react-table-docs/examples/editing-crud-tree/index.tsx index f4f4a608b..969fb0e03 100644 --- a/apps/mantine-react-table-docs/examples/editing-crud-tree/index.tsx +++ b/apps/mantine-react-table-docs/examples/editing-crud-tree/index.tsx @@ -3,12 +3,13 @@ import Example from './sandbox/src/TS'; const TS = require('!!raw-loader!./sandbox/src/TS.tsx').default; -const ExampleTable = () => { +const ExampleTable = ({ showTopRow = true }) => { return ( ); }; diff --git a/apps/mantine-react-table-docs/package.json b/apps/mantine-react-table-docs/package.json index 9714692c3..d738e388b 100644 --- a/apps/mantine-react-table-docs/package.json +++ b/apps/mantine-react-table-docs/package.json @@ -18,11 +18,11 @@ "@fortawesome/fontawesome-svg-core": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/react-fontawesome": "^0.2.2", - "@mantine/code-highlight": "7.13.2", - "@mantine/core": "7.13.2", - "@mantine/dates": "7.13.2", - "@mantine/hooks": "7.13.2", - "@mantine/modals": "7.13.2", + "@mantine/code-highlight": "^8.3.2", + "@mantine/core": "^8.3.2", + "@mantine/dates": "^8.3.2", + "@mantine/hooks": "^8.3.2", + "@mantine/modals": "^8.3.2", "@mdx-js/loader": "^3.0.1", "@mdx-js/react": "^3.0.1", "@next/mdx": "^14.2.15", @@ -50,7 +50,7 @@ "eslint-config-next": "14.2.15", "next-plausible": "^3.12.2", "postcss": "^8.4.47", - "postcss-preset-mantine": "^1.17.0", + "postcss-preset-mantine": "^1.18.0", "postcss-simple-vars": "^7.0.1", "raw-loader": "^4.0.2", "typescript": "5.6.3" diff --git a/apps/mantine-react-table-docs/pages/docs/getting-started/install.mdx b/apps/mantine-react-table-docs/pages/docs/getting-started/install.mdx index e4425ec87..3e945518a 100644 --- a/apps/mantine-react-table-docs/pages/docs/getting-started/install.mdx +++ b/apps/mantine-react-table-docs/pages/docs/getting-started/install.mdx @@ -5,20 +5,20 @@ import { Alert } from '@mantine/core'; import { IconInfoCircle } from '@tabler/icons-react'; - {'Installation - Mantine React Table Docs V2'} + {'Installation - Mantine React Table Docs V3'} -> This is the install guide for `mantine-react-table` **V2** and `@mantine/` packages **V7**. MRT V2 will not work with Mantine V6. +> This is the install guide for `mantine-react-table` **V3** and `@mantine/` packages **V8**. MRT V3 will not work with Mantine V6 / V7. }> - Mantine React Table V2 is still a work in progress, but we are making good + Mantine React Table V3 is still a work in progress, but we are making good progress every day. ## Installation -> `mantine-react-table` V2 requires **Mantine V7.3+** packages as dependencies in your project. +> `mantine-react-table` V3 requires **Mantine V8+** packages as dependencies in your project. > > If you are already using Mantine, you probably already have most of these peer dependencies installed. > @@ -34,13 +34,13 @@ import { IconInfoCircle } from '@tabler/icons-react'; ### Quick Install -The Quick Install instructions here assume you already have Mantine V7 installed and correctly configured with postcss in your project. +The Quick Install instructions here assume you already have Mantine V8 installed and correctly configured with postcss in your project. ### Install With Required Peer Dependencies (Recommended) -It is best to refer to the [Mantine V7 installation guide](https://mantine.dev/getting-started/) for the most up-to-date instructions on how to install Mantine V7 for your specific React meta framework. (Next.js, Remix, Vite, etc.) +It is best to refer to the [Mantine V8 installation guide](https://mantine.dev/getting-started/) for the most up-to-date instructions on how to install Mantine V8 for your specific React meta framework. (Next.js, Remix, Vite, etc.) #### Install Mantine React Table with Mantine required peer dependencies: @@ -53,7 +53,7 @@ It is best to refer to the [Mantine V7 installation guide](https://mantine.dev/g #### Install PostCSS dev dependencies (Optional) -If you are using Mantine V7, it is common to use CSS modules for advanced custom styling. You may want to install and configure PostCSS like down below, but it is not required if you are using a different styling solution. +If you are using Mantine V8, it is common to use CSS modules for advanced custom styling. You may want to install and configure PostCSS like down below, but it is not required if you are using a different styling solution.
@@ -81,7 +81,7 @@ module.exports = { ### Setup Mantine Theme -The [Mantine V7 installation guide](https://mantine.dev/getting-started/) has much better instructions for how to set up your Mantine theme, but you should have something like this in your project: +The [Mantine V8 installation guide](https://mantine.dev/getting-started/) has much better instructions for how to set up your Mantine theme, but you should have something like this in your project: ```tsx import { MantineProvider, createTheme } from '@mantine/core'; @@ -104,7 +104,7 @@ function Demo() { After you install mantine-react-table, you will need to import the CSS styles from `mantine-react-table/styles.css` at the root of your project. (Where you import your other Mantine CSS styles.) ```js -import '@mantine/core/styles.css'; //import Mantine V7 styles needed by MRT +import '@mantine/core/styles.css'; //import Mantine V8 styles needed by MRT import '@mantine/dates/styles.css'; //if using mantine date picker features import 'mantine-react-table/styles.css'; //import MRT styles ``` diff --git a/packages/mantine-react-table/README.md b/packages/mantine-react-table/README.md index 565a9efe9..3c5cd2181 100644 --- a/packages/mantine-react-table/README.md +++ b/packages/mantine-react-table/README.md @@ -29,7 +29,7 @@ V1 released July 18, 2023 ### _Quickly Create React Data Tables with Mantine_ -### __Built with [Mantine V7](https://mantine.dev/) and [TanStack Table V8](https://tanstack.com/table/v8)__ +### __Built with [Mantine V8](https://mantine.dev/) and [TanStack Table V8](https://tanstack.com/table/v8)__ MRT diff --git a/packages/mantine-react-table/package.json b/packages/mantine-react-table/package.json index 231a14a5e..d36451156 100644 --- a/packages/mantine-react-table/package.json +++ b/packages/mantine-react-table/package.json @@ -82,9 +82,9 @@ "@babel/core": "^7.25.8", "@babel/preset-react": "^7.25.7", "@faker-js/faker": "^9.0.3", - "@mantine/core": "7.13.2", - "@mantine/dates": "7.13.2", - "@mantine/hooks": "7.13.2", + "@mantine/core": "^8.0.0", + "@mantine/dates": "^8.0.0", + "@mantine/hooks": "^8.0.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.3.0", "@rollup/plugin-typescript": "^11.1.6", @@ -138,9 +138,9 @@ "@tanstack/react-virtual": "3.11.2" }, "peerDependencies": { - "@mantine/core": "^7.17.7", - "@mantine/dates": "^7.17.7", - "@mantine/hooks": "^7.17.7", + "@mantine/core": "^8.3.5", + "@mantine/dates": "^8.3.5", + "@mantine/hooks": "^8.3.5", "@tabler/icons-react": ">=2.23.0", "clsx": ">=2", "dayjs": ">=1.11", diff --git a/packages/mantine-react-table/src/components/head/MRT_TableHeadCell.tsx b/packages/mantine-react-table/src/components/head/MRT_TableHeadCell.tsx index c3f456995..9e9a3024f 100644 --- a/packages/mantine-react-table/src/components/head/MRT_TableHeadCell.tsx +++ b/packages/mantine-react-table/src/components/head/MRT_TableHeadCell.tsx @@ -5,7 +5,6 @@ import classes from './MRT_TableHeadCell.module.css'; import { type CSSProperties, type DragEventHandler, - type MutableRefObject, type ReactNode, useMemo, useState, @@ -207,9 +206,7 @@ export const MRT_TableHeadCell = ({ ref={(node: HTMLTableCellElement) => { if (node) { tableHeadCellRefs.current[column.id] = node; - ( - isHoveredHeadCellRef as MutableRefObject - ).current = node; + isHoveredHeadCellRef(node); if (columnDefType !== 'group') { columnVirtualizer?.measureElement?.(node); } diff --git a/packages/mantine-react-table/src/components/head/MRT_TableHeadCellFilterContainer.tsx b/packages/mantine-react-table/src/components/head/MRT_TableHeadCellFilterContainer.tsx index fb62eac9c..ff54c2a45 100644 --- a/packages/mantine-react-table/src/components/head/MRT_TableHeadCellFilterContainer.tsx +++ b/packages/mantine-react-table/src/components/head/MRT_TableHeadCellFilterContainer.tsx @@ -1,5 +1,7 @@ import classes from './MRT_TableHeadCellFilterContainer.module.css'; +import { useRef } from 'react'; + import { ActionIcon, Collapse, @@ -50,6 +52,10 @@ export const MRT_TableHeadCellFilterContainer = ({ const currentFilterOption = columnDef._filterFn; const allowedColumnFilterOptions = columnDef?.columnFilterModeOptions ?? columnFilterModeOptions; + const isCollapseOpen = + showColumnFilters || columnFilterDisplayMode === 'popover'; +const collapseRef = useRef(null); + const showChangeModeButton = enableColumnFilterModes && columnDef.enableColumnFilterModes !== false && @@ -57,7 +63,26 @@ export const MRT_TableHeadCellFilterContainer = ({ !!allowedColumnFilterOptions?.length); return ( - + ( +
{ + if (typeof ref === 'function') { + ref(element); + } else if (ref) { + ref.current = element; + } + collapseRef.current = element; + }} + style={{ + ...style, + overflow: isCollapseOpen ? 'visible' : style?.overflow, + }} + /> + )} + > {columnDef.filterVariant === 'checkbox' ? ( diff --git a/packages/mantine-react-table/src/fns/filterFns.ts b/packages/mantine-react-table/src/fns/filterFns.ts index 474009dee..78d0ce421 100644 --- a/packages/mantine-react-table/src/fns/filterFns.ts +++ b/packages/mantine-react-table/src/fns/filterFns.ts @@ -11,6 +11,71 @@ import { type MRT_RowData, } from '../types'; +const parseComparableNumber = (value: unknown): null | number => { + if (value === null || value === undefined || value === '') { + return null; + } + + if (typeof value === 'number') { + return Number.isNaN(value) ? null : value; + } + + if (value instanceof Date) { + const timestamp = value.getTime(); + return Number.isNaN(timestamp) ? null : timestamp; + } + + if (typeof value === 'string') { + const trimmed = value.trim(); + if (!trimmed) { + return null; + } + + const asNumber = Number(trimmed); + if (!Number.isNaN(asNumber)) { + return asNumber; + } + + const timestamp = Date.parse(trimmed); + if (!Number.isNaN(timestamp)) { + return timestamp; + } + + return null; + } + + if (typeof value === 'object') { + const primitive = (value as { valueOf?: () => unknown }).valueOf?.(); + if (primitive !== undefined && primitive !== value) { + return parseComparableNumber(primitive); + } + } + + return null; +}; + +const normalizeStringValue = (value: unknown): string => + value?.toString?.().toLowerCase().trim() ?? ''; + +const compareValues = (a: unknown, b: unknown): number => { + const aNumber = parseComparableNumber(a); + const bNumber = parseComparableNumber(b); + + if (aNumber !== null && bNumber !== null) { + if (aNumber === bNumber) return 0; + return aNumber > bNumber ? 1 : -1; + } + + const aString = normalizeStringValue(a); + const bString = normalizeStringValue(b); + + if (aString === bString) return 0; + return aString > bString ? 1 : -1; +}; + +const isNullishFilterValue = (value: unknown) => + value === undefined || value === null || value === ''; + const fuzzy = ( row: Row, columnId: string, @@ -31,12 +96,9 @@ const contains = ( id: string, filterValue: number | string, ) => - row - .getValue(id) - ?.toString() - .toLowerCase() - .trim() - .includes(filterValue.toString().toLowerCase().trim()); + normalizeStringValue(row.getValue(id)).includes( + normalizeStringValue(filterValue), + ); contains.autoRemove = (val: any) => !val; @@ -45,12 +107,9 @@ const startsWith = ( id: string, filterValue: number | string, ) => - row - .getValue(id) - ?.toString() - .toLowerCase() - .trim() - .startsWith(filterValue.toString().toLowerCase().trim()); + normalizeStringValue(row.getValue(id)).startsWith( + normalizeStringValue(filterValue), + ); startsWith.autoRemove = (val: any) => !val; @@ -59,12 +118,9 @@ const endsWith = ( id: string, filterValue: number | string, ) => - row - .getValue(id) - ?.toString() - .toLowerCase() - .trim() - .endsWith(filterValue.toString().toLowerCase().trim()); + normalizeStringValue(row.getValue(id)).endsWith( + normalizeStringValue(filterValue), + ); endsWith.autoRemove = (val: any) => !val; @@ -72,9 +128,7 @@ const equals = ( row: Row, id: string, filterValue: number | string, -) => - row.getValue(id)?.toString().toLowerCase().trim() === - filterValue?.toString().toLowerCase().trim(); +) => compareValues(row.getValue(id), filterValue) === 0; equals.autoRemove = (val: any) => !val; @@ -82,9 +136,7 @@ const notEquals = ( row: Row, id: string, filterValue: number | string, -) => - row.getValue(id)?.toString().toLowerCase().trim() !== - filterValue.toString().toLowerCase().trim(); +) => normalizeStringValue(row.getValue(id)) !== normalizeStringValue(filterValue); notEquals.autoRemove = (val: any) => !val; @@ -92,11 +144,7 @@ const greaterThan = ( row: Row, id: string, filterValue: number | string, -) => - !isNaN(+filterValue) && !isNaN(+row.getValue(id)) - ? +row.getValue(id) > +filterValue - : row.getValue(id)?.toString().toLowerCase().trim() > - filterValue?.toString().toLowerCase().trim(); +) => compareValues(row.getValue(id), filterValue) > 0; greaterThan.autoRemove = (val: any) => !val; @@ -104,7 +152,7 @@ const greaterThanOrEqualTo = ( row: Row, id: string, filterValue: number | string, -) => equals(row, id, filterValue) || greaterThan(row, id, filterValue); +) => compareValues(row.getValue(id), filterValue) >= 0; greaterThanOrEqualTo.autoRemove = (val: any) => !val; @@ -112,11 +160,7 @@ const lessThan = ( row: Row, id: string, filterValue: number | string, -) => - !isNaN(+filterValue) && !isNaN(+row.getValue(id)) - ? +row.getValue(id) < +filterValue - : row.getValue(id)?.toString().toLowerCase().trim() < - filterValue?.toString().toLowerCase().trim(); +) => compareValues(row.getValue(id), filterValue) < 0; lessThan.autoRemove = (val: any) => !val; @@ -124,7 +168,7 @@ const lessThanOrEqualTo = ( row: Row, id: string, filterValue: number | string, -) => equals(row, id, filterValue) || lessThan(row, id, filterValue); +) => compareValues(row.getValue(id), filterValue) <= 0; lessThanOrEqualTo.autoRemove = (val: any) => !val; @@ -132,14 +176,23 @@ const between = ( row: Row, id: string, filterValues: [number | string, number | string], -) => - ((['', undefined] as any[]).includes(filterValues[0]) || - greaterThan(row, id, filterValues[0])) && - ((!isNaN(+filterValues[0]) && - !isNaN(+filterValues[1]) && - +filterValues[0] > +filterValues[1]) || - (['', undefined] as any[]).includes(filterValues[1]) || - lessThan(row, id, filterValues[1])); +) => { + const [min, max] = filterValues; + + if (isNullishFilterValue(min) && isNullishFilterValue(max)) { + return true; + } + + if (!isNullishFilterValue(min) && compareValues(row.getValue(id), min) <= 0) { + return false; + } + + if (!isNullishFilterValue(max) && compareValues(row.getValue(id), max) >= 0) { + return false; + } + + return true; +}; between.autoRemove = (val: any) => !val; @@ -147,14 +200,29 @@ const betweenInclusive = ( row: Row, id: string, filterValues: [number | string, number | string], -) => - ((['', undefined] as any[]).includes(filterValues[0]) || - greaterThanOrEqualTo(row, id, filterValues[0])) && - ((!isNaN(+filterValues[0]) && - !isNaN(+filterValues[1]) && - +filterValues[0] > +filterValues[1]) || - (['', undefined] as any[]).includes(filterValues[1]) || - lessThanOrEqualTo(row, id, filterValues[1])); +) => { + const [min, max] = filterValues; + + if (isNullishFilterValue(min) && isNullishFilterValue(max)) { + return true; + } + + if ( + !isNullishFilterValue(min) && + compareValues(row.getValue(id), min) < 0 + ) { + return false; + } + + if ( + !isNullishFilterValue(max) && + compareValues(row.getValue(id), max) > 0 + ) { + return false; + } + + return true; +}; betweenInclusive.autoRemove = (val: any) => !val; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b43db592..c28249602 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + importers: .: @@ -29,20 +33,20 @@ importers: specifier: ^0.2.2 version: 0.2.2(@fortawesome/fontawesome-svg-core@6.6.0)(react@18.3.1) '@mantine/code-highlight': - specifier: 7.13.2 - version: 7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(react-dom@18.3.1)(react@18.3.1) + specifier: ^8.3.2 + version: 8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(react-dom@18.3.1)(react@18.3.1) '@mantine/core': - specifier: 7.13.2 - version: 7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + specifier: ^8.3.2 + version: 8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@mantine/dates': - specifier: 7.13.2 - version: 7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1) + specifier: ^8.3.2 + version: 8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1) '@mantine/hooks': - specifier: 7.13.2 - version: 7.13.2(react@18.3.1) + specifier: ^8.3.2 + version: 8.3.2(react@18.3.1) '@mantine/modals': - specifier: 7.13.2 - version: 7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(react-dom@18.3.1)(react@18.3.1) + specifier: ^8.3.2 + version: 8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(react-dom@18.3.1)(react@18.3.1) '@mdx-js/loader': specifier: ^3.0.1 version: 3.0.1(acorn@8.14.1)(webpack@5.99.9) @@ -120,8 +124,8 @@ importers: specifier: ^8.4.47 version: 8.4.47 postcss-preset-mantine: - specifier: ^1.17.0 - version: 1.17.0(postcss@8.4.47) + specifier: ^1.18.0 + version: 1.18.0(postcss@8.4.47) postcss-simple-vars: specifier: ^7.0.1 version: 7.0.1(postcss@8.4.47) @@ -154,14 +158,14 @@ importers: specifier: ^9.0.3 version: 9.0.3 '@mantine/core': - specifier: 7.13.2 - version: 7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + specifier: ^8.0.0 + version: 8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@mantine/dates': - specifier: 7.13.2 - version: 7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1) + specifier: ^8.0.0 + version: 8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1) '@mantine/hooks': - specifier: 7.13.2 - version: 7.13.2(react@18.3.1) + specifier: ^8.0.0 + version: 8.3.2(react@18.3.1) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.25.8)(rollup@4.24.0) @@ -239,7 +243,7 @@ importers: version: 3.8.0(eslint@8.57.0)(typescript@5.6.3) mantine-contextmenu: specifier: ^7.12.2 - version: 7.12.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(clsx@2.1.1)(react@18.3.1) + version: 7.12.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(clsx@2.1.1)(react@18.3.1) postcss: specifier: ^8.4.47 version: 8.4.47 @@ -1532,41 +1536,41 @@ packages: engines: {node: '>=18.0.0', npm: '>=9.0.0'} deprecated: Please update to a newer version - /@floating-ui/core@1.7.0: - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} + /@floating-ui/core@1.7.3: + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} dependencies: - '@floating-ui/utils': 0.2.9 + '@floating-ui/utils': 0.2.10 - /@floating-ui/dom@1.7.0: - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} + /@floating-ui/dom@1.7.4: + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} dependencies: - '@floating-ui/core': 1.7.0 - '@floating-ui/utils': 0.2.9 + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 - /@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + /@floating-ui/react-dom@2.1.6(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.7.0 + '@floating-ui/dom': 1.7.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - /@floating-ui/react@0.26.28(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} + /@floating-ui/react@0.27.16(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==} peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: '>=17.0.0' + react-dom: '>=17.0.0' dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) - '@floating-ui/utils': 0.2.9 + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/utils': 0.2.10 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 - /@floating-ui/utils@0.2.9: - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + /@floating-ui/utils@0.2.10: + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} /@fortawesome/fontawesome-common-types@6.6.0: resolution: {integrity: sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==} @@ -1680,74 +1684,73 @@ packages: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - /@mantine/code-highlight@7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-gBZvsECENELXsAeCuk86/vpOnxqdOXx9e6iNbQKyiGxcmcHli0+OgnZLL4WP4xt0pd6jTni+B+kJP2g9WfJQtA==} + /@mantine/code-highlight@8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-0pQg4AMSTfnzjt78Wc7KQc1PBOKdReGPZPUYCmfRPRfPw8MHwHedQiZ3ziK+DC/ghADgs4odJyUsfXGd5JLjrA==} peerDependencies: - '@mantine/core': 7.13.2 - '@mantine/hooks': 7.13.2 - react: ^18.2.0 - react-dom: ^18.2.0 + '@mantine/core': 8.3.2 + '@mantine/hooks': 8.3.2 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x dependencies: - '@mantine/core': 7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@mantine/core': 8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@mantine/hooks': 8.3.2(react@18.3.1) clsx: 2.1.1 - highlight.js: 11.11.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@mantine/core@7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-nD8oKIal+KdthqF074+ZG21035QBEAKso2zK9D6zWxRTLVCjLCNSc5JSXrXLrdBTnvPQGY26yunX4+MEPlmrHg==} + /@mantine/core@8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-uIHC9ooEZ9E+/pw8ag4f8pi0GmwSQ1DYnETjr4a4ZNVKJHfVv5NSkjprBxPrKJq9oox/SdcrAWy5XlKTwBzRag==} peerDependencies: - '@mantine/hooks': 7.13.2 - react: ^18.2.0 - react-dom: ^18.2.0 + '@mantine/hooks': 8.3.2 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x dependencies: - '@floating-ui/react': 0.26.28(react-dom@18.3.1)(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@floating-ui/react': 0.27.16(react-dom@18.3.1)(react@18.3.1) + '@mantine/hooks': 8.3.2(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-number-format: 5.4.4(react-dom@18.3.1)(react@18.3.1) - react-remove-scroll: 2.7.0(@types/react@18.3.11)(react@18.3.1) - react-textarea-autosize: 8.5.3(@types/react@18.3.11)(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@18.3.11)(react@18.3.1) + react-textarea-autosize: 8.5.9(@types/react@18.3.11)(react@18.3.1) type-fest: 4.41.0 transitivePeerDependencies: - '@types/react' - /@mantine/dates@7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-FSLGTM5s47mmHnIudRxrMXjE1EO56Qp01nATa9OwqVgVYVxxJ5xvS1ys5yxSGSE1jQk+3kyYQXHyLFcqbFhIVA==} + /@mantine/dates@8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(dayjs@1.11.13)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-qO9Aft+icFGSeLFTbbHfef/UIKpmUzwujsYuRFw8o6cqOqhqjlC9ObE/3DATxvS+vK9BxODUZYGtE2sI4XUO3Q==} peerDependencies: - '@mantine/core': 7.13.2 - '@mantine/hooks': 7.13.2 + '@mantine/core': 8.3.2 + '@mantine/hooks': 8.3.2 dayjs: '>=1.0.0' - react: ^18.2.0 - react-dom: ^18.2.0 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x dependencies: - '@mantine/core': 7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@mantine/core': 8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@mantine/hooks': 8.3.2(react@18.3.1) clsx: 2.1.1 dayjs: 1.11.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - /@mantine/hooks@7.13.2(react@18.3.1): - resolution: {integrity: sha512-NKfGl2sKZw6zF//AfAFJrVDftjg7DKCn0h8rwJBIZCKi9axhwlV0Mvlqe2dep8QuM7O/uLLJSymSKIv1gaxIJg==} + /@mantine/hooks@8.3.2(react@18.3.1): + resolution: {integrity: sha512-urDgQJNAs2t2mAyGaA+7uNsBMRn9U/ccvi+ZUl5ef3/Wzfv5KYHe9LA9DBNhn24BTSewxrI27W0EFpFxv/Jsbg==} peerDependencies: - react: ^18.2.0 + react: ^18.x || ^19.x dependencies: react: 18.3.1 - /@mantine/modals@7.13.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-rKkXss1ZYAbkSi9ZcUsBY/HyGjgKk+bT8TXzLoClBRgg6uyto+/2lT9M5e4Nao+2PsjsRnWI/ZgddNZKiSaNgQ==} + /@mantine/modals@8.3.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-1Of0KP27bAo8HTfsO7p5wy26+aUrb8h1w3mftoVlw463f/NYABm6ax+aZDx5NZdcqime2mnHasHaOWbHDfIk1A==} peerDependencies: - '@mantine/core': 7.13.2 - '@mantine/hooks': 7.13.2 - react: ^18.2.0 - react-dom: ^18.2.0 + '@mantine/core': 8.3.2 + '@mantine/hooks': 8.3.2 + react: ^18.x || ^19.x + react-dom: ^18.x || ^19.x dependencies: - '@mantine/core': 7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@mantine/core': 8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@mantine/hooks': 8.3.2(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false @@ -3123,6 +3126,7 @@ packages: /@types/raf@3.4.3: resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} + requiresBuild: true dev: false optional: true @@ -3978,6 +3982,7 @@ packages: /base64-arraybuffer@1.0.2: resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} engines: {node: '>= 0.6.0'} + requiresBuild: true dev: false optional: true @@ -4319,6 +4324,7 @@ packages: /css-line-break@2.1.0: resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} + requiresBuild: true dependencies: utrie: 1.0.2 dev: false @@ -4592,6 +4598,7 @@ packages: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} hasBin: true + requiresBuild: true dev: true optional: true @@ -5934,11 +5941,6 @@ packages: '@types/hast': 3.0.4 dev: false - /highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} - engines: {node: '>=12.0.0'} - dev: false - /html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -5975,6 +5977,7 @@ packages: /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: safer-buffer: 2.1.2 dev: true @@ -6639,7 +6642,7 @@ packages: semver: 6.3.1 dev: true - /mantine-contextmenu@7.12.2(@mantine/core@7.13.2)(@mantine/hooks@7.13.2)(clsx@2.1.1)(react@18.3.1): + /mantine-contextmenu@7.12.2(@mantine/core@8.3.2)(@mantine/hooks@8.3.2)(clsx@2.1.1)(react@18.3.1): resolution: {integrity: sha512-HD/xrGTGkq51WIVOh97gG1C0Z+PgV6gBPzALrPmv14R4t8iBUEJEY1A9CUvnV/yNjxBas+AA+2flXMAc0wyBxw==} peerDependencies: '@mantine/core': '>=7.12' @@ -6647,8 +6650,8 @@ packages: clsx: '>=2' react: '>=18.2' dependencies: - '@mantine/core': 7.13.2(@mantine/hooks@7.13.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@mantine/hooks': 7.13.2(react@18.3.1) + '@mantine/core': 8.3.2(@mantine/hooks@8.3.2)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@mantine/hooks': 8.3.2(react@18.3.1) clsx: 2.1.1 react: 18.3.1 dev: true @@ -7261,6 +7264,7 @@ packages: /node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + requiresBuild: true dev: true optional: true @@ -7526,6 +7530,7 @@ packages: /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + requiresBuild: true dev: false optional: true @@ -7544,6 +7549,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + requiresBuild: true dev: true optional: true @@ -7736,6 +7742,19 @@ packages: postcss-selector-parser: 6.1.2 dev: true + /postcss-mixins@12.1.2(postcss@8.4.47): + resolution: {integrity: sha512-90pSxmZVfbX9e5xCv7tI5RV1mnjdf16y89CJKbf/hD7GyOz1FCxcYMl8ZYA8Hc56dbApTKKmU9HfvgfWdCxlwg==} + engines: {node: ^20.0 || ^22.0 || >=24.0} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.47 + postcss-js: 4.0.1(postcss@8.4.47) + postcss-simple-vars: 7.0.1(postcss@8.4.47) + sugarss: 5.0.1(postcss@8.4.47) + tinyglobby: 0.2.14 + dev: true + /postcss-mixins@9.0.4(postcss@8.4.47): resolution: {integrity: sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==} engines: {node: '>=14.0'} @@ -7816,6 +7835,16 @@ packages: postcss-selector-parser: 6.1.2 dev: true + /postcss-nested@7.0.2(postcss@8.4.47): + resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.47 + postcss-selector-parser: 7.1.0 + dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.47): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} @@ -7928,6 +7957,16 @@ packages: postcss-nested: 6.2.0(postcss@8.4.47) dev: true + /postcss-preset-mantine@1.18.0(postcss@8.4.47): + resolution: {integrity: sha512-sP6/s1oC7cOtBdl4mw/IRKmKvYTuzpRrH/vT6v9enMU/EQEQ31eQnHcWtFghOXLH87AAthjL/Q75rLmin1oZoA==} + peerDependencies: + postcss: '>=8.0.0' + dependencies: + postcss: 8.4.47 + postcss-mixins: 12.1.2(postcss@8.4.47) + postcss-nested: 7.0.2(postcss@8.4.47) + dev: true + /postcss-reduce-initial@5.1.2(postcss@8.4.47): resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} @@ -8071,6 +8110,7 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + requiresBuild: true dev: true optional: true @@ -8091,6 +8131,7 @@ packages: /raf@3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + requiresBuild: true dependencies: performance-now: 2.1.0 dev: false @@ -8229,8 +8270,8 @@ packages: react-style-singleton: 2.2.3(@types/react@18.3.11)(react@18.3.1) tslib: 2.7.0 - /react-remove-scroll@2.7.0(@types/react@18.3.11)(react@18.3.1): - resolution: {integrity: sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==} + /react-remove-scroll@2.7.1(@types/react@18.3.11)(react@18.3.1): + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} engines: {node: '>=10'} peerDependencies: '@types/react': '*' @@ -8262,11 +8303,11 @@ packages: react: 18.3.1 tslib: 2.7.0 - /react-textarea-autosize@8.5.3(@types/react@18.3.11)(react@18.3.1): - resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} + /react-textarea-autosize@8.5.9(@types/react@18.3.11)(react@18.3.1): + resolution: {integrity: sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==} engines: {node: '>=10'} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 dependencies: '@babel/runtime': 7.27.3 react: 18.3.1 @@ -8359,6 +8400,7 @@ packages: /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + requiresBuild: true dev: false optional: true @@ -8487,6 +8529,7 @@ packages: /rgbcolor@1.0.1: resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} engines: {node: '>= 0.8.15'} + requiresBuild: true dev: false optional: true @@ -8659,6 +8702,7 @@ packages: /sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + requiresBuild: true dev: true optional: true @@ -8692,6 +8736,7 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true + requiresBuild: true dev: true optional: true @@ -8888,6 +8933,7 @@ packages: /stackblur-canvas@2.7.0: resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==} engines: {node: '>=0.1.14'} + requiresBuild: true dev: false optional: true @@ -9135,6 +9181,15 @@ packages: postcss: 8.4.47 dev: true + /sugarss@5.0.1(postcss@8.4.47): + resolution: {integrity: sha512-ctS5RYCBVvPoZAnzIaX5QSShK8ZiZxD5HUqSxlusvEMC+QZQIPCPOIJg6aceFX+K2rf4+SH89eu++h1Zmsr2nw==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.3.3 + dependencies: + postcss: 8.4.47 + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -9156,6 +9211,7 @@ packages: /svg-pathdata@6.0.3: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} + requiresBuild: true dev: false optional: true @@ -9221,6 +9277,7 @@ packages: /text-segmentation@1.0.3: resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} + requiresBuild: true dependencies: utrie: 1.0.2 dev: false @@ -9694,6 +9751,7 @@ packages: /utrie@1.0.2: resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} + requiresBuild: true dependencies: base64-arraybuffer: 1.0.2 dev: false