diff --git a/CHANGELOG.md b/CHANGELOG.md
index 362abce..da6c4dd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,10 @@
The following is a list of notable changes to the Mantine DataTable component.
Minor versions that are not listed in the changelog are bug fixes and small improvements.
+## 6.0.6 (2023-12-23)
+
+- Implement column drag-to-reorder, toggling and resizing features (see PR [#9](https://github.com/icflorescu/mantine-datatable-v6/pull/9) by [Giovambattista Fazioli](https://github.com/gfazioli))
+
## 6.0.5 (2023-11-07)
- Implement `pinLastColumn` feature
diff --git a/docs/components/homePage/HomePageSubtitle.tsx b/docs/components/homePage/HomePageSubtitle.tsx
index 306859d..c1edb32 100644
--- a/docs/components/homePage/HomePageSubtitle.tsx
+++ b/docs/components/homePage/HomePageSubtitle.tsx
@@ -1,6 +1,6 @@
import { Anchor, Text, createStyles } from '@mantine/core';
import { IconArrowDown, IconDiscountCheck, IconExclamationCircle } from '@tabler/icons-react';
-import InternalLink from '../InternalLink';
+import ExternalLink from '../ExternalLink';
const useStyles = createStyles((theme) => ({
root: {
@@ -56,8 +56,13 @@ export default function HomePageSubtitle() {
- supports Mantine V6 ; support for Mantine V7 is{' '}
- under development ⏳
+ This version supports Mantine V6 .
+
+ If you use Mantine V7 , check out{' '}
+
+ Mantine DataTable V7
+
+ .
diff --git a/docs/config.ts b/docs/config.ts
index 4f098be..69105cc 100644
--- a/docs/config.ts
+++ b/docs/config.ts
@@ -126,6 +126,16 @@ export const PAGES: ({ external?: true; title: string; color?: MantineColor; des
title: 'Sorting',
description: 'Example: sorting data with Mantine DataTable',
},
+ {
+ path: 'dragging-toggling',
+ title: 'Dragging & Toggling',
+ description: `Example: dragging & toggling columns with Mantine DataTable`,
+ },
+ {
+ path: 'resizing',
+ title: 'Column resizing',
+ description: `Example: resizing Mantine DataTable columns`,
+ },
{
path: 'infinite-scrolling',
title: 'Implementing infinite scrolling',
diff --git a/docs/examples/DraggingExample.tsx b/docs/examples/DraggingExample.tsx
new file mode 100644
index 0000000..8f15c98
--- /dev/null
+++ b/docs/examples/DraggingExample.tsx
@@ -0,0 +1,27 @@
+import { DataTable, useDataTableColumns } from 'mantine-datatable';
+import { companies, type Company } from '~/data';
+
+import { Button, Group, Stack } from '@mantine/core';
+
+export default function DraggingExample() {
+ const key = 'draggable-example';
+
+ const { effectiveColumns, resetColumnsOrder } = useDataTableColumns({
+ key,
+ columns: [
+ { accessor: 'name', width: '40%', draggable: true },
+ { accessor: 'streetAddress', width: '60%', draggable: true },
+ { accessor: 'city', width: 160, ellipsis: true, draggable: true },
+ { accessor: 'state' },
+ ],
+ });
+
+ return (
+
+
+
+ Reset Column Order
+
+
+ );
+}
diff --git a/docs/examples/DraggingTogglingComplexExample.tsx b/docs/examples/DraggingTogglingComplexExample.tsx
new file mode 100644
index 0000000..ffaaac0
--- /dev/null
+++ b/docs/examples/DraggingTogglingComplexExample.tsx
@@ -0,0 +1,57 @@
+import { IconColumnRemove, IconColumns1 } from '@tabler/icons-react';
+import sortBy from 'lodash/sortBy';
+import { DataTable, DataTableSortStatus, useDataTableColumns } from 'mantine-datatable';
+import { useEffect, useState } from 'react';
+import { companies, type Company } from '~/data';
+
+export default function DraggingTogglingComplexExample() {
+ const key = 'draggable-toggleable-complex-example';
+
+ const [sortStatus, setSortStatus] = useState({
+ columnAccessor: 'name',
+ direction: 'asc',
+ });
+
+ const [records, setRecords] = useState(sortBy(companies, 'name'));
+
+ useEffect(() => {
+ const data = sortBy(companies, sortStatus.columnAccessor) as Company[];
+ setRecords(sortStatus.direction === 'desc' ? data.reverse() : data);
+ }, [sortStatus]);
+
+ const { effectiveColumns, resetColumnsOrder, resetColumnsToggle } = useDataTableColumns({
+ key,
+ columns: [
+ { accessor: 'name', width: '40%', toggleable: true, draggable: true, sortable: true },
+ { accessor: 'streetAddress', width: '60%', toggleable: true, draggable: true },
+ { accessor: 'city', width: 160, ellipsis: true, toggleable: true, draggable: true },
+ { accessor: 'state' },
+ ],
+ });
+
+ return (
+ [
+ {
+ key: 'reset-columns.toggled',
+ icon: ,
+ onClick: resetColumnsToggle,
+ },
+ {
+ key: 'reset-columns-order',
+ icon: ,
+ onClick: resetColumnsOrder,
+ },
+ ],
+ }}
+ />
+ );
+}
diff --git a/docs/examples/DraggingTogglingResetExample.tsx b/docs/examples/DraggingTogglingResetExample.tsx
new file mode 100644
index 0000000..386a46c
--- /dev/null
+++ b/docs/examples/DraggingTogglingResetExample.tsx
@@ -0,0 +1,41 @@
+import { IconColumnRemove, IconColumns1 } from '@tabler/icons-react';
+import { DataTable, useDataTableColumns } from 'mantine-datatable';
+import { companies } from '~/data';
+
+export default function DraggingTogglingResetExample() {
+ const key = 'toggleable-reset-example';
+
+ const { effectiveColumns, resetColumnsOrder, resetColumnsToggle } = useDataTableColumns({
+ key,
+ columns: [
+ { accessor: 'name', width: '40%', toggleable: true, draggable: true },
+ { accessor: 'streetAddress', width: '60%', toggleable: true, draggable: true },
+ { accessor: 'city', width: 160, ellipsis: true, toggleable: true, draggable: true },
+ { accessor: 'state' },
+ ],
+ });
+
+ return (
+ [
+ {
+ key: 'reset-columns.toggled',
+ icon: ,
+ onClick: resetColumnsToggle,
+ },
+ {
+ key: 'reset-columns-order',
+ icon: ,
+ onClick: resetColumnsOrder,
+ },
+ ],
+ }}
+ />
+ );
+}
diff --git a/docs/examples/ResizingComplexExample.tsx b/docs/examples/ResizingComplexExample.tsx
new file mode 100644
index 0000000..c24dd6d
--- /dev/null
+++ b/docs/examples/ResizingComplexExample.tsx
@@ -0,0 +1,83 @@
+import { Button, Group, Stack, Switch } from '@mantine/core';
+import { sortBy } from 'lodash';
+import { DataTable, DataTableSortStatus, useDataTableColumns } from 'mantine-datatable';
+import { useEffect, useState } from 'react';
+import { companies, type Company } from '~/data';
+
+export default function ResizingComplexExample() {
+ const key = 'resize-complex-example';
+
+ const [withTableBorder, setWithTableBorder] = useState(true);
+
+ const [withColumnBorders, setWithColumnBorders] = useState(true);
+
+ const props = {
+ resizable: true,
+ sortable: true,
+ toggleable: true,
+ draggable: true,
+ };
+
+ const { effectiveColumns, resetColumnsWidth, resetColumnsOrder, resetColumnsToggle } = useDataTableColumns({
+ key,
+ columns: [
+ { accessor: 'name', ...props },
+ { accessor: 'streetAddress', ...props },
+ { accessor: 'city', ...props },
+ { accessor: 'state', ...props },
+ ],
+ });
+
+ const [sortStatus, setSortStatus] = useState({
+ columnAccessor: 'name',
+ direction: 'asc',
+ });
+
+ const [records, setRecords] = useState(sortBy(companies, 'name'));
+
+ useEffect(() => {
+ const data = sortBy(companies, sortStatus.columnAccessor) as Company[];
+ setRecords(sortStatus.direction === 'desc' ? data.reverse() : data);
+ }, [sortStatus]);
+
+ return (
+
+
+
+
+ setWithTableBorder(event.currentTarget.checked)}
+ labelPosition="left"
+ label="Table Border"
+ />
+ setWithColumnBorders(event.currentTarget.checked)}
+ labelPosition="left"
+ label="Column Borders"
+ />
+
+
+
+ Reset Column Width
+
+
+ Reset Column Order
+
+
+ Reset Column Toggle
+
+
+
+
+ );
+}
diff --git a/docs/examples/ResizingExample.tsx b/docs/examples/ResizingExample.tsx
new file mode 100644
index 0000000..833ebc8
--- /dev/null
+++ b/docs/examples/ResizingExample.tsx
@@ -0,0 +1,52 @@
+import { Button, Group, Stack, Switch } from '@mantine/core';
+import { DataTable, useDataTableColumns } from 'mantine-datatable';
+import { useState } from 'react';
+import { companies, type Company } from '~/data';
+
+export default function ResizingExample() {
+ const key = 'resize-example';
+
+ const [withTableBorder, setWithTableBorder] = useState(true);
+ const [withColumnBorders, setWithColumnBorders] = useState(true);
+
+ const { effectiveColumns, resetColumnsWidth } = useDataTableColumns({
+ key,
+ columns: [
+ { accessor: 'name', width: 100, resizable: true },
+ { accessor: 'streetAddress', resizable: true },
+ { accessor: 'city', resizable: true },
+ { accessor: 'state' },
+ ],
+ });
+
+ return (
+
+
+
+
+ setWithTableBorder(event.currentTarget.checked)}
+ labelPosition="left"
+ label="Table Border"
+ />
+ setWithColumnBorders(event.currentTarget.checked)}
+ labelPosition="left"
+ label="Column Borders"
+ />
+
+
+ Reset Column Width
+
+
+
+ );
+}
diff --git a/docs/examples/TogglingExample.tsx b/docs/examples/TogglingExample.tsx
new file mode 100644
index 0000000..0670058
--- /dev/null
+++ b/docs/examples/TogglingExample.tsx
@@ -0,0 +1,26 @@
+import { Button, Group, Stack } from '@mantine/core';
+import { DataTable, useDataTableColumns } from 'mantine-datatable';
+import { companies } from '~/data';
+
+export default function TogglingExample() {
+ const key = 'toggleable-example';
+
+ const { effectiveColumns, resetColumnsToggle } = useDataTableColumns({
+ key,
+ columns: [
+ { accessor: 'name', width: '40%', toggleable: true },
+ { accessor: 'streetAddress', width: '60%', toggleable: true },
+ { accessor: 'city', width: 160, toggleable: true },
+ { accessor: 'state' },
+ ],
+ });
+
+ return (
+
+
+
+ Reset Column Toggled
+
+
+ );
+}
diff --git a/docs/package.json b/docs/package.json
index 62ee5cc..7899c86 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "mantine-datatable-docs",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Docs website for mantine-datatable; see ../package/package.json for more info",
"private": true,
"scripts": {
@@ -10,10 +10,10 @@
},
"dependencies": {
"@docsearch/react": "^3.5.2",
- "@ducanh2912/next-pwa": "^9.7.2",
+ "@ducanh2912/next-pwa": "^10.0.0",
"@emotion/react": "^11.11.1",
"@emotion/server": "^11.11.0",
- "@faker-js/faker": "^8.2.0",
+ "@faker-js/faker": "^8.3.1",
"@formkit/auto-animate": "^0.8.1",
"@mantine/core": "^6.0.21",
"@mantine/dates": "^6.0.21",
@@ -22,21 +22,21 @@
"@mantine/next": "^6.0.21",
"@mantine/notifications": "^6.0.21",
"@mantine/prism": "^6.0.21",
- "@tabler/icons-react": "^2.40.0",
+ "@tabler/icons-react": "^2.44.0",
"@tanstack/react-query": "^4.36.1",
"dayjs": "^1.11.10",
"lodash": "^4.17.21",
"mantine-datatable": "*",
- "next": "^14.0.1",
+ "next": "^14.0.4",
"next-sitemap": "^4.2.3",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
- "@types/lodash": "^4.14.200",
- "@types/node": "^20.8.10",
- "@types/react": "^18.2.36",
- "typescript": "^5.2.2",
+ "@types/lodash": "^4.14.202",
+ "@types/node": "^20.10.5",
+ "@types/react": "^18.2.45",
+ "typescript": "^5.3.3",
"webpack": "^5.89.0"
}
}
diff --git a/docs/pages/examples/dragging-toggling.tsx b/docs/pages/examples/dragging-toggling.tsx
new file mode 100644
index 0000000..3964a05
--- /dev/null
+++ b/docs/pages/examples/dragging-toggling.tsx
@@ -0,0 +1,86 @@
+import { Code, Container } from '@mantine/core';
+import { GetStaticProps, InferGetStaticPropsType } from 'next';
+import CodeBlock from '~/components/CodeBlock';
+import PageNavigation from '~/components/PageNavigation';
+import PageSubtitle from '~/components/PageSubtitle';
+import PageText from '~/components/PageText';
+import PageTitle from '~/components/PageTitle';
+import DraggingExample from '~/examples/DraggingExample';
+import DraggingTogglingComplexExample from '~/examples/DraggingTogglingComplexExample';
+import DraggingTogglingResetExample from '~/examples/DraggingTogglingResetExample';
+import TogglingExample from '~/examples/TogglingExample';
+import allPromiseProps from '~/lib/allPromiseProps';
+import readCodeExample from '~/lib/readCodeExample';
+
+const PATH = 'examples/dragging-toggling';
+
+export const getStaticProps: GetStaticProps<{
+ code: Record<'default' | 'toggling' | 'reset' | 'complex', string>;
+}> = async () => ({
+ props: {
+ code: await allPromiseProps({
+ default: readCodeExample('examples/DraggingExample.tsx') as Promise,
+ toggling: readCodeExample('examples/TogglingExample.tsx') as Promise,
+ reset: readCodeExample('examples/DraggingTogglingResetExample.tsx') as Promise,
+ complex: readCodeExample('examples/DraggingTogglingComplexExample.tsx') as Promise,
+ }),
+ },
+});
+
+export default function Page({ code }: InferGetStaticPropsType) {
+ return (
+
+
+
+
+ In order to enable Dragging you’ll have to:
+
+
+ add a storeColumnsKey: your_key
property to the DataTable;
+
+
+ add a draggable: true
property to each Dragging candidate column;
+
+
+ use the useDataTableColumns()
hook to get the sorted columns.
+
+
+
+
+
+ The default order of the columns is the order in which they are defined in the columns
prop.
+
+
+
+
+
+
+
+ In order to enable Toggling you’ll have to:
+
+
+ add a storeColumnsKey: your_key
property to the DataTable;
+
+
+ add a toggleable: true
property to each Toggling candidate column;
+
+
+ use the useDataTableColumns()
hook to get the sorted columns.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/docs/pages/examples/resizing.tsx b/docs/pages/examples/resizing.tsx
new file mode 100644
index 0000000..db1fe57
--- /dev/null
+++ b/docs/pages/examples/resizing.tsx
@@ -0,0 +1,67 @@
+import { Code, Container } from '@mantine/core';
+import { GetStaticProps, InferGetStaticPropsType } from 'next';
+import CodeBlock from '~/components/CodeBlock';
+import PageNavigation from '~/components/PageNavigation';
+import PageSubtitle from '~/components/PageSubtitle';
+import PageText from '~/components/PageText';
+import PageTitle from '~/components/PageTitle';
+import ResizingComplexExample from '~/examples/ResizingComplexExample';
+import ResizingExample from '~/examples/ResizingExample';
+import allPromiseProps from '~/lib/allPromiseProps';
+import readCodeExample from '~/lib/readCodeExample';
+
+const PATH = 'examples/resizing';
+
+export const getStaticProps: GetStaticProps<{
+ code: Record<'default' | 'complex', string>;
+}> = async () => ({
+ props: {
+ code: await allPromiseProps({
+ default: readCodeExample('examples/ResizingExample.tsx') as Promise,
+ complex: readCodeExample('examples/ResizingComplexExample.tsx') as Promise,
+ }),
+ },
+});
+
+export default function Page({ code }: InferGetStaticPropsType) {
+ return (
+
+
+
+
+ In order to enable column resizing you’ll have to:
+
+
+ add a storeColumnsKey: your_key
property to the DataTable (since the order of the columns is
+ persisted in the local storage);
+
+
+ add a resizable: true
property to each resizing candidate column;
+
+
+ use the useDataTableColumns()
hook to get the effective columns.
+
+
+
+
+
+
+ The default width of the columns is the width
in which they are defined in the columns
{' '}
+ prop.
+
+
+
+ Of course, you can reset the column width to the default value by using the resetColumnsWidth()
{' '}
+ function.
+
+ You may also set up the column with to initial
by double-clicking on the resize handle.
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/docs/pages/mantine-v7-support.tsx b/docs/pages/mantine-v7-support.tsx
index b948b0d..2fb02a2 100644
--- a/docs/pages/mantine-v7-support.tsx
+++ b/docs/pages/mantine-v7-support.tsx
@@ -3,7 +3,7 @@ import ExternalLink from '~/components/ExternalLink';
import PageNavigation from '~/components/PageNavigation';
import PageText from '~/components/PageText';
import PageTitle from '~/components/PageTitle';
-import { MANTINE_LINK, SPONSOR_LINK } from '~/config';
+import { MANTINE_LINK } from '~/config';
const PATH = 'mantine-v7-support';
@@ -11,14 +11,14 @@ export default function Page() {
return (
+
+ If you are using Mantine V7 , please use{' '}
+ Mantine DataTable V7 .
+
Mantine DataTable V6 supports Mantine V6 .
- Mantine V7 support is under development. You can help speed up
- the process by sponsoring me on GitHub .
-
-
- If you are using Mantine V7 , please use{' '}
+ Mantine V7 is supported by{' '}
Mantine DataTable V7 .
diff --git a/package.json b/package.json
index 1d1d957..7cacabc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "mantine-datatable-turborepo",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Monorepo for mantine-datatable; see package/package.json for more info",
"private": true,
"workspaces": [
@@ -19,25 +19,25 @@
"test:watch": "turbo run test:watch"
},
"devDependencies": {
- "@babel/preset-react": "^7.22.15",
- "@babel/preset-typescript": "^7.23.2",
- "@faker-js/faker": "^8.2.0",
- "@testing-library/jest-dom": "^6.1.4",
- "@testing-library/react": "^14.0.0",
+ "@babel/preset-react": "^7.23.3",
+ "@babel/preset-typescript": "^7.23.3",
+ "@faker-js/faker": "^8.3.1",
+ "@testing-library/jest-dom": "^6.1.5",
+ "@testing-library/react": "^14.1.2",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "^14.5.1",
- "@types/jest": "^29.5.7",
- "@typescript-eslint/eslint-plugin": "^6.10.0",
- "@typescript-eslint/parser": "^6.10.0",
+ "@types/jest": "^29.5.11",
+ "@typescript-eslint/eslint-plugin": "^6.15.0",
+ "@typescript-eslint/parser": "^6.15.0",
"babel-jest": "^29.7.0",
- "eslint": "^8.53.0",
- "eslint-config-next": "^14.0.1",
- "eslint-config-prettier": "^9.0.0",
+ "eslint": "^8.56.0",
+ "eslint-config-next": "^14.0.4",
+ "eslint-config-prettier": "^9.1.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "prettier": "^3.0.3",
- "turbo": "^1.10.16",
- "typescript": "^5.2.2"
+ "prettier": "^3.1.1",
+ "turbo": "^1.11.2",
+ "typescript": "^5.3.3"
},
"engines": {
"npm": ">=9.5.1",
diff --git a/package/DataTable.tsx b/package/DataTable.tsx
index a8df8d3..741902b 100644
--- a/package/DataTable.tsx
+++ b/package/DataTable.tsx
@@ -1,4 +1,14 @@
-import { Box, MantineSize, Portal, Table, createStyles, packSx, px, type MantineTheme } from '@mantine/core';
+import {
+ Box,
+ MantineSize,
+ Portal,
+ Table,
+ createStyles,
+ getStylesRef,
+ packSx,
+ px,
+ type MantineTheme,
+} from '@mantine/core';
import { useMergedRef } from '@mantine/hooks';
import {
useCallback,
@@ -9,6 +19,7 @@ import {
type Key,
type MouseEventHandler,
} from 'react';
+import { DataTableDragToggleColumnsProvider } from './DataTableDragToggleColumnsProvider';
import DataTableEmptyRow from './DataTableEmptyRow';
import DataTableEmptyState from './DataTableEmptyState';
import DataTableFooter from './DataTableFooter';
@@ -20,7 +31,13 @@ import DataTableRowMenu from './DataTableRowMenu';
import DataTableRowMenuDivider from './DataTableRowMenuDivider';
import DataTableRowMenuItem from './DataTableRowMenuItem';
import DataTableScrollArea from './DataTableScrollArea';
-import { useElementOuterSize, useLastSelectionChangeIndex, useRowContextMenu, useRowExpansion } from './hooks';
+import {
+ useDataTableColumns,
+ useElementOuterSize,
+ useLastSelectionChangeIndex,
+ useRowContextMenu,
+ useRowExpansion,
+} from './hooks';
import type { DataTableProps } from './types';
import { differenceBy, getRecordId, humanize, uniqBy, useIsomorphicLayoutEffect } from './utils';
@@ -74,6 +91,11 @@ const useStyles = createStyles(
tableWithBorder: {
border: `1px solid ${borderColorValue}`,
},
+ resizableColumnHeaderKnobTransparent: {
+ [`& .${getStylesRef('resizableColumnHeaderKnob')}`]: {
+ background: 'transparent',
+ },
+ },
tableWithColumnBorders: {
'&&': {
'th, td': {
@@ -154,6 +176,7 @@ export default function DataTable({
verticalAlignment = 'center',
fetching,
columns,
+ storeColumnsKey,
groups,
pinLastColumn,
defaultColumnProps,
@@ -238,6 +261,11 @@ export default function DataTable({
return groups?.flatMap((group) => group.columns) ?? columns!;
}, [columns, groups]);
+ const dragToggle = useDataTableColumns({
+ key: storeColumnsKey,
+ columns: effectiveColumns,
+ });
+
const { ref: headerRef, height: headerHeight } = useElementOuterSize();
const { ref: tableRef, width: tableWidth, height: tableHeight } = useElementOuterSize();
const { ref: footerRef, height: footerHeight } = useElementOuterSize();
@@ -350,259 +378,269 @@ export default function DataTable({
const styleProperties = typeof styles === 'function' ? styles(theme, EMPTY_OBJECT, EMPTY_OBJECT) : styles;
return (
- ({
- borderRadius: theme.radius[borderRadius as MantineSize] || borderRadius,
- boxShadow: theme.shadows[shadow as MantineSize] || shadow,
- height,
- minHeight,
- }),
- ...packSx(sx),
- ]}
- style={{ ...styleProperties?.root, ...style } as CSSProperties}
- >
-
+ ({
+ borderRadius: theme.radius[borderRadius as MantineSize] || borderRadius,
+ boxShadow: theme.shadows[shadow as MantineSize] || shadow,
+ height,
+ minHeight,
+ }),
+ ...packSx(sx),
+ ]}
+ style={{ ...styleProperties?.root, ...style } as CSSProperties}
>
-
- {withoutHeader ? null : (
-
- ref={headerRef}
- className={classNames?.header}
- style={styleProperties?.header}
- columns={effectiveColumns}
- defaultColumnProps={defaultColumnProps}
- groups={groups}
- sortStatus={sortStatus}
- sortIcons={sortIcons}
- onSortStatusChange={onSortStatusChange}
- selectionVisible={selectionColumnVisible}
- selectionChecked={allSelectableRecordsSelected}
- selectionIndeterminate={someRecordsSelected && !allSelectableRecordsSelected}
- onSelectionChange={handleHeaderSelectionChange}
- selectionCheckboxProps={allRecordsSelectionCheckboxProps}
- leftShadowVisible={selectionVisibleAndNotScrolledToLeft}
- />
- )}
-
- {recordsLength ? (
- records.map((record, recordIndex) => {
- const recordId = getRecordId(record, idAccessor);
- const isSelected = selectedRecordIds?.includes(recordId) || false;
+
+ {withoutHeader ? null : (
+
+ ref={headerRef}
+ className={classNames?.header}
+ style={styleProperties?.header}
+ columns={effectiveColumns}
+ defaultColumnProps={defaultColumnProps}
+ groups={groups}
+ sortStatus={sortStatus}
+ sortIcons={sortIcons}
+ onSortStatusChange={onSortStatusChange}
+ selectionVisible={selectionColumnVisible}
+ selectionChecked={allSelectableRecordsSelected}
+ selectionIndeterminate={someRecordsSelected && !allSelectableRecordsSelected}
+ onSelectionChange={handleHeaderSelectionChange}
+ selectionCheckboxProps={allRecordsSelectionCheckboxProps}
+ leftShadowVisible={selectionVisibleAndNotScrolledToLeft}
+ />
+ )}
+
+ {recordsLength ? (
+ records.map((record, recordIndex) => {
+ const recordId = getRecordId(record, idAccessor);
+ const isSelected = selectedRecordIds?.includes(recordId) || false;
- let showContextMenuOnClick = false;
- let showContextMenuOnRightClick = false;
- if (rowContextMenu) {
- const { hidden } = rowContextMenu;
- if (!hidden || !(typeof hidden === 'function' ? hidden(record, recordIndex) : hidden)) {
- if (rowContextMenu.trigger === 'click') {
- showContextMenuOnClick = true;
- } else {
- showContextMenuOnRightClick = true;
+ let showContextMenuOnClick = false;
+ let showContextMenuOnRightClick = false;
+ if (rowContextMenu) {
+ const { hidden } = rowContextMenu;
+ if (!hidden || !(typeof hidden === 'function' ? hidden(record, recordIndex) : hidden)) {
+ if (rowContextMenu.trigger === 'click') {
+ showContextMenuOnClick = true;
+ } else {
+ showContextMenuOnRightClick = true;
+ }
}
}
- }
- let handleSelectionChange: ChangeEventHandler | undefined;
- if (onSelectedRecordsChange && selectedRecords) {
- handleSelectionChange = (e) => {
- if ((e.nativeEvent as PointerEvent).shiftKey && lastSelectionChangeIndex !== null) {
- const targetRecords = records.filter(
- recordIndex > lastSelectionChangeIndex
- ? (r, index) =>
- index >= lastSelectionChangeIndex &&
- index <= recordIndex &&
- (isRecordSelectable ? isRecordSelectable(r, index) : true)
- : (r, index) =>
- index >= recordIndex &&
- index <= lastSelectionChangeIndex &&
- (isRecordSelectable ? isRecordSelectable(r, index) : true)
- );
- onSelectedRecordsChange(
- isSelected
- ? differenceBy(selectedRecords, targetRecords, (r) => getRecordId(r, idAccessor))
- : uniqBy([...selectedRecords, ...targetRecords], (r) => getRecordId(r, idAccessor))
- );
- } else {
- onSelectedRecordsChange(
- isSelected
- ? selectedRecords.filter((record) => getRecordId(record, idAccessor) !== recordId)
- : uniqBy([...selectedRecords, record], (record) => getRecordId(record, idAccessor))
- );
- }
- setLastSelectionChangeIndex(recordIndex);
- };
- }
+ let handleSelectionChange: ChangeEventHandler | undefined;
+ if (onSelectedRecordsChange && selectedRecords) {
+ handleSelectionChange = (e) => {
+ if ((e.nativeEvent as PointerEvent).shiftKey && lastSelectionChangeIndex !== null) {
+ const targetRecords = records.filter(
+ recordIndex > lastSelectionChangeIndex
+ ? (r, index) =>
+ index >= lastSelectionChangeIndex &&
+ index <= recordIndex &&
+ (isRecordSelectable ? isRecordSelectable(r, index) : true)
+ : (r, index) =>
+ index >= recordIndex &&
+ index <= lastSelectionChangeIndex &&
+ (isRecordSelectable ? isRecordSelectable(r, index) : true)
+ );
+ onSelectedRecordsChange(
+ isSelected
+ ? differenceBy(selectedRecords, targetRecords, (r) => getRecordId(r, idAccessor))
+ : uniqBy([...selectedRecords, ...targetRecords], (r) => getRecordId(r, idAccessor))
+ );
+ } else {
+ onSelectedRecordsChange(
+ isSelected
+ ? selectedRecords.filter((record) => getRecordId(record, idAccessor) !== recordId)
+ : uniqBy([...selectedRecords, record], (record) => getRecordId(record, idAccessor))
+ );
+ }
+ setLastSelectionChangeIndex(recordIndex);
+ };
+ }
- let handleClick: MouseEventHandler | undefined;
- if (showContextMenuOnClick) {
- handleClick = (e) => {
- setRowContextMenuInfo({ y: e.clientY, x: e.clientX, record, recordIndex });
- onRowClick?.(record, recordIndex, e);
- };
- } else if (onRowClick) {
- handleClick = (e) => {
- onRowClick(record, recordIndex, e);
- };
- }
+ let handleClick: MouseEventHandler | undefined;
+ if (showContextMenuOnClick) {
+ handleClick = (e) => {
+ setRowContextMenuInfo({ y: e.clientY, x: e.clientX, record, recordIndex });
+ onRowClick?.(record, recordIndex, e);
+ };
+ } else if (onRowClick) {
+ handleClick = (e) => {
+ onRowClick(record, recordIndex, e);
+ };
+ }
- let handleContextMenu: MouseEventHandler | undefined;
- if (showContextMenuOnRightClick) {
- handleContextMenu = (e) => {
- e.preventDefault();
- setRowContextMenuInfo({ y: e.clientY, x: e.clientX, record, recordIndex });
- };
- }
+ let handleContextMenu: MouseEventHandler | undefined;
+ if (showContextMenuOnRightClick) {
+ handleContextMenu = (e) => {
+ e.preventDefault();
+ setRowContextMenuInfo({ y: e.clientY, x: e.clientX, record, recordIndex });
+ };
+ }
- return (
-
- key={recordId as Key}
- record={record}
- recordIndex={recordIndex}
- columns={effectiveColumns}
- defaultColumnProps={defaultColumnProps}
- defaultColumnRender={defaultColumnRender}
- selectionVisible={selectionColumnVisible}
- selectionChecked={isSelected}
- onSelectionChange={handleSelectionChange}
- isRecordSelectable={isRecordSelectable}
- getSelectionCheckboxProps={getRecordSelectionCheckboxProps}
- onClick={handleClick}
- onCellClick={onCellClick}
- onContextMenu={handleContextMenu}
- contextMenuVisible={
- rowContextMenuInfo ? getRecordId(rowContextMenuInfo.record, idAccessor) === recordId : false
- }
- expansion={rowExpansionInfo}
- className={rowClassName}
- style={rowStyle}
- sx={rowSx}
- customAttributes={customRowAttributes}
- leftShadowVisible={selectionVisibleAndNotScrolledToLeft}
- />
- );
- })
- ) : (
-
+ return (
+
+ key={recordId as Key}
+ record={record}
+ recordIndex={recordIndex}
+ columns={effectiveColumns}
+ defaultColumnProps={defaultColumnProps}
+ defaultColumnRender={defaultColumnRender}
+ selectionVisible={selectionColumnVisible}
+ selectionChecked={isSelected}
+ onSelectionChange={handleSelectionChange}
+ isRecordSelectable={isRecordSelectable}
+ getSelectionCheckboxProps={getRecordSelectionCheckboxProps}
+ onClick={handleClick}
+ onCellClick={onCellClick}
+ onContextMenu={handleContextMenu}
+ contextMenuVisible={
+ rowContextMenuInfo ? getRecordId(rowContextMenuInfo.record, idAccessor) === recordId : false
+ }
+ expansion={rowExpansionInfo}
+ className={rowClassName}
+ style={rowStyle}
+ sx={rowSx}
+ customAttributes={customRowAttributes}
+ leftShadowVisible={selectionVisibleAndNotScrolledToLeft}
+ />
+ );
+ })
+ ) : (
+
+ )}
+
+ {effectiveColumns.some(({ footer }) => footer) && (
+
+ ref={footerRef}
+ className={classNames?.footer}
+ style={styleProperties?.footer}
+ borderColor={borderColor}
+ columns={effectiveColumns}
+ defaultColumnProps={defaultColumnProps}
+ selectionVisible={selectionColumnVisible}
+ leftShadowVisible={selectionVisibleAndNotScrolledToLeft}
+ scrollDiff={tableHeight - scrollViewportHeight}
+ />
)}
-
- {effectiveColumns.some(({ footer }) => footer) && (
-
- ref={footerRef}
- className={classNames?.footer}
- style={styleProperties?.footer}
- borderColor={borderColor}
- columns={effectiveColumns}
- defaultColumnProps={defaultColumnProps}
- selectionVisible={selectionColumnVisible}
- leftShadowVisible={selectionVisibleAndNotScrolledToLeft}
- scrollDiff={tableHeight - scrollViewportHeight}
- />
- )}
-
-
- {page && (
-
+
+ {page && (
+
+ )}
+
- )}
-
-
- {emptyState}
-
- {rowContextMenu && rowContextMenuInfo && (
-
- setRowContextMenuInfo(null)}
- >
- {rowContextMenu
- .items(rowContextMenuInfo.record, rowContextMenuInfo.recordIndex)
- .map(({ divider, key, title, icon, color, hidden, disabled, onClick }) =>
- divider ? (
-
- ) : hidden ? null : (
- {
- setRowContextMenuInfo(null);
- onClick();
- }}
- />
- )
- )}
-
-
- )}
-
+
+ {emptyState}
+
+ {rowContextMenu && rowContextMenuInfo && (
+
+ setRowContextMenuInfo(null)}
+ >
+ {rowContextMenu
+ .items(rowContextMenuInfo.record, rowContextMenuInfo.recordIndex)
+ .map(({ divider, key, title, icon, color, hidden, disabled, onClick }) =>
+ divider ? (
+
+ ) : hidden ? null : (
+ {
+ setRowContextMenuInfo(null);
+ onClick();
+ }}
+ />
+ )
+ )}
+
+
+ )}
+
+
);
}
diff --git a/package/DataTableDragToggleColumns.context.ts b/package/DataTableDragToggleColumns.context.ts
new file mode 100644
index 0000000..69ef998
--- /dev/null
+++ b/package/DataTableDragToggleColumns.context.ts
@@ -0,0 +1,31 @@
+import { createSafeContext } from '@mantine/utils';
+import { Dispatch, SetStateAction } from 'react';
+import { DataTableColumnToggle } from './hooks';
+
+interface DataTableDragToggleColumnsContext {
+ // accessor of the column which is currently dragged
+ sourceColumn: string;
+ setSourceColumn: Dispatch>;
+
+ // accessor of the column which is currently hovered
+ targetColumn: string;
+ setTargetColumn: Dispatch>;
+
+ // swap the source column with the target column
+ swapColumns: () => void;
+
+ // reset to the default columns order
+ resetColumnsOrder: () => void;
+
+ columnsToggle: DataTableColumnToggle[];
+ setColumnsToggle: Dispatch>;
+ resetColumnsToggle: () => void;
+
+ setColumnWidth: (accessor: string, width: string | number) => void;
+ resetColumnsWidth: () => void;
+}
+
+export const [DataTableDragToggleColumnsContextProvider, useDataTableDragToggleColumnsContext] =
+ createSafeContext(
+ 'useDataTableDragToggleColumnsContext must be used within DataTableDragToggleColumnOrdersProvider'
+ );
diff --git a/package/DataTableDragToggleColumnsProvider.tsx b/package/DataTableDragToggleColumnsProvider.tsx
new file mode 100644
index 0000000..780808f
--- /dev/null
+++ b/package/DataTableDragToggleColumnsProvider.tsx
@@ -0,0 +1,76 @@
+import { Dispatch, SetStateAction, useState } from 'react';
+import { DataTableDragToggleColumnsContextProvider } from './DataTableDragToggleColumns.context';
+import { DataTableColumnToggle } from './hooks';
+
+type DataTableDragToggleColumnsProviderProps = {
+ // React children
+ children: React.ReactNode;
+
+ columnsOrder: string[];
+ setColumnsOrder: Dispatch>;
+ resetColumnsOrder: () => void;
+
+ columnsToggle: DataTableColumnToggle[];
+ setColumnsToggle: Dispatch>;
+ resetColumnsToggle: () => void;
+
+ setColumnWidth: (accessor: string, width: string | number) => void;
+ resetColumnsWidth: () => void;
+};
+
+export const DataTableDragToggleColumnsProvider = (props: DataTableDragToggleColumnsProviderProps) => {
+ const {
+ children,
+ columnsOrder,
+ setColumnsOrder,
+ columnsToggle,
+ setColumnsToggle,
+
+ resetColumnsOrder,
+ resetColumnsToggle,
+
+ setColumnWidth,
+ resetColumnsWidth,
+ } = props;
+
+ const [sourceColumn, setSourceColumn] = useState('');
+
+ const [targetColumn, setTargetColumn] = useState('');
+
+ const swapColumns = () => {
+ if (!columnsOrder || !setColumnsOrder || !sourceColumn || !targetColumn) {
+ return;
+ }
+ const sourceIndex = columnsOrder.indexOf(sourceColumn);
+ const targetIndex = columnsOrder.indexOf(targetColumn);
+
+ if (sourceIndex !== -1 && targetIndex !== -1) {
+ const removedColumn = columnsOrder.splice(sourceIndex, 1)[0];
+
+ columnsOrder.splice(targetIndex, 0, removedColumn);
+
+ // update the columns order
+ setColumnsOrder([...columnsOrder]);
+ }
+ };
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/package/DataTableHeader.tsx b/package/DataTableHeader.tsx
index 174350c..aa3eb87 100644
--- a/package/DataTableHeader.tsx
+++ b/package/DataTableHeader.tsx
@@ -78,7 +78,7 @@ export default forwardRef(function DataTableHeader(
)}
{!groups && allRecordsSelectorCell}
- {columns.map(({ hidden, ...columnProps }) => {
+ {columns.map(({ hidden, ...columnProps }, index) => {
if (hidden) return null;
const {
@@ -88,6 +88,9 @@ export default forwardRef(function DataTableHeader(
width,
title,
sortable,
+ draggable,
+ toggleable,
+ resizable,
titleClassName,
titleStyle,
titleSx,
@@ -107,6 +110,11 @@ export default forwardRef(function DataTableHeader(
width={width}
title={title}
sortable={sortable}
+ draggable={draggable}
+ // we won't display the resize handle for the last column
+ // to avoid overflow render issues
+ resizable={resizable && index < columns.length - 1}
+ toggleable={toggleable}
sortStatus={sortStatus}
sortIcons={sortIcons}
onSortStatusChange={onSortStatusChange}
diff --git a/package/DataTableHeaderCell.tsx b/package/DataTableHeaderCell.tsx
index 3da4f7c..ea0239f 100644
--- a/package/DataTableHeaderCell.tsx
+++ b/package/DataTableHeaderCell.tsx
@@ -1,7 +1,23 @@
-import { Box, Center, Group, createStyles, type MantineTheme, type Sx } from '@mantine/core';
-import { IconArrowUp, IconArrowsVertical } from '@tabler/icons-react';
-import type { BaseSyntheticEvent, CSSProperties, ReactNode } from 'react';
+import {
+ ActionIcon,
+ Box,
+ Center,
+ Checkbox,
+ Flex,
+ Group,
+ Popover,
+ Stack,
+ createStyles,
+ getStylesRef,
+ type MantineTheme,
+ type Sx,
+} from '@mantine/core';
+import { IconArrowUp, IconArrowsVertical, IconGripVertical, IconX } from '@tabler/icons-react';
+import { useRef, useState, type BaseSyntheticEvent, type CSSProperties, type ReactNode } from 'react';
+import { useDataTableDragToggleColumnsContext } from './DataTableDragToggleColumns.context';
import DataTableHeaderCellFilter from './DataTableHeaderCellFilter';
+import { DataTableResizableHeaderHandle } from './DataTableResizableHeaderHandle';
+import { DataTableColumnToggle } from './hooks';
import type { DataTableColumn, DataTableSortProps } from './types';
import { humanize, useMediaQueryStringOrFunction } from './utils';
@@ -13,6 +29,42 @@ const useStyles = createStyles((theme) => ({
background: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[0],
},
},
+ draggableColumnHeader: {
+ cursor: 'grab',
+ borderRadius: 6,
+ transition: 'all 0.2s',
+ '&:active': {
+ cursor: 'grabbing',
+ },
+ '&:hover:not(:has(button:hover))': {
+ background: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[2],
+ },
+ },
+ draggableColumnHeaderIcon: {
+ cursor: 'inherit',
+ margin: '-2px 2px 0',
+ },
+ draggableColumnHeaderOver: {
+ background: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[2],
+ },
+ toggleableColumnHeaderIcon: {
+ ref: getStylesRef('toggleableColumnHeaderIcon'),
+ transition: 'opacity 0.2s',
+ opacity: '0.1',
+ },
+ toggleableColumnHeader: {
+ '&:hover': {
+ [`& .${getStylesRef('toggleableColumnHeaderIcon')}`]: {
+ opacity: 1,
+ },
+ },
+ },
+ resizableColumnHeader: {
+ position: 'relative',
+ },
+ resizableColumnHeaderKnob: {
+ position: 'relative',
+ },
sortableColumnHeaderGroup: {
gap: '0.25em',
},
@@ -49,7 +101,18 @@ type DataTableHeaderCellProps = {
sortStatus: DataTableSortProps['sortStatus'];
sortIcons: DataTableSortProps['sortIcons'];
onSortStatusChange: DataTableSortProps['onSortStatusChange'];
-} & Pick, 'accessor' | 'sortable' | 'textAlignment' | 'width' | 'filter' | 'filtering'>;
+} & Pick<
+ DataTableColumn,
+ | 'accessor'
+ | 'sortable'
+ | 'draggable'
+ | 'toggleable'
+ | 'resizable'
+ | 'textAlignment'
+ | 'width'
+ | 'filter'
+ | 'filtering'
+>;
export default function DataTableHeaderCell({
className,
@@ -59,6 +122,9 @@ export default function DataTableHeaderCell({
visibleMediaQuery,
title,
sortable,
+ draggable,
+ toggleable,
+ resizable,
sortIcons,
textAlignment,
width,
@@ -67,10 +133,23 @@ export default function DataTableHeaderCell({
filter,
filtering,
}: DataTableHeaderCellProps) {
+ const { setSourceColumn, setTargetColumn, swapColumns, columnsToggle, setColumnsToggle } =
+ useDataTableDragToggleColumnsContext();
+
+ const [dragOver, setDragOver] = useState(false);
+
+ const columnRef = useRef(null);
+
+ const [columnsPopoverOpened, setColumnsPopoverOpened] = useState(false);
+
const { cx, classes } = useStyles();
+
if (!useMediaQueryStringOrFunction(visibleMediaQuery)) return null;
+
const text = title ?? humanize(accessor);
+
const tooltip = typeof text === 'string' ? text : undefined;
+
const sortAction =
sortable && onSortStatusChange
? (e?: BaseSyntheticEvent) => {
@@ -87,16 +166,62 @@ export default function DataTableHeaderCell({
});
}
: undefined;
+
+ const handleColumnDragStart = (e: React.DragEvent) => {
+ e.stopPropagation();
+ setSourceColumn(accessor as string);
+ setDragOver(false);
+ };
+
+ const handleColumnDragOver = (e: React.DragEvent) => {
+ e.preventDefault();
+ setTargetColumn(accessor as string);
+ setDragOver(true);
+ };
+
+ const handleColumnDrop = () => {
+ setTargetColumn(accessor as string);
+ setDragOver(false);
+ swapColumns();
+ };
+
+ const handleColumnDragEnter = () => {
+ setDragOver(true);
+ };
+
+ const handleColumnDragLeave = () => {
+ setDragOver(false);
+ };
+
+ const handleColumnToggle = (e: React.MouseEvent) => {
+ e.stopPropagation();
+
+ setColumnsToggle((columnsToggle) =>
+ columnsToggle.map((c) => {
+ if (c.accessor === accessor) {
+ return { ...c, toggled: false };
+ }
+ return c;
+ })
+ );
+ };
+
return (
({
role={sortable ? 'button' : undefined}
tabIndex={sortable ? 0 : undefined}
onClick={sortAction}
+ onContextMenu={(e) => {
+ if (toggleable) {
+ e.preventDefault();
+ setColumnsPopoverOpened(true);
+ }
+ }}
onKeyDown={(e) => e.key === 'Enter' && sortAction?.()}
+ ref={columnRef}
>
-
- {text}
-
+
+
+
+ {draggable ? (
+
+ ) => {
+ e.stopPropagation();
+ }}
+ >
+
+
+
+ ) : null}
+
+
+ {text}
+
+
+
+
+
+ {columnsToggle
+ .filter((column) => column.toggleable)
+ .map((column: DataTableColumnToggle) => {
+ return (
+
+ {
+ setColumnsToggle(
+ columnsToggle.map((c: DataTableColumnToggle) => {
+ if (c.accessor === column.accessor) {
+ return { ...c, toggled: e.currentTarget.checked };
+ }
+ return c;
+ })
+ );
+ }}
+ />
+
+ );
+ })}
+
+
+
+ {toggleable ? (
+
+
+
+
+
+ ) : null}
+
{sortable || sortStatus?.columnAccessor === accessor ? (
<>
{sortStatus?.columnAccessor === accessor ? (
@@ -131,6 +339,7 @@ export default function DataTableHeaderCell({
) : null}
{filter ? {filter} : null}
+ {resizable ? : null}
);
}
diff --git a/package/DataTableResizableHeaderHandle.tsx b/package/DataTableResizableHeaderHandle.tsx
new file mode 100644
index 0000000..cc7a009
--- /dev/null
+++ b/package/DataTableResizableHeaderHandle.tsx
@@ -0,0 +1,118 @@
+import { createStyles, getStylesRef } from '@mantine/core';
+import { MutableRefObject, useRef, useState } from 'react';
+import { useDataTableDragToggleColumnsContext } from './DataTableDragToggleColumns.context';
+
+type DataTableResizableHeaderHandleProps = {
+ accessor: string;
+ columnRef: MutableRefObject;
+};
+
+const useStyles = createStyles((theme) => ({
+ resizableColumnHeaderHandle: {
+ ref: getStylesRef('resizableColumnHeaderHandle'),
+ position: 'absolute',
+ cursor: 'col-resize',
+ top: 0,
+ bottom: 0,
+ width: '7px',
+ transform: 'translateX(4px)',
+ zIndex: 1,
+ '::after': {
+ content: '""',
+ position: 'absolute',
+ top: '1px',
+ left: '2px',
+ bottom: '1px',
+ background: 'inherit',
+ borderLeft: `3px dotted ${theme.colorScheme === 'dark' ? theme.colors.dark[3] : theme.colors.gray[3]}`,
+ opacity: 0,
+ },
+ '&:hover::after': {
+ borderLeftColor: theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 6 : 4],
+ },
+ 'tr:hover &::after': {
+ opacity: 1,
+ },
+ },
+}));
+
+export const DataTableResizableHeaderHandle = (props: DataTableResizableHeaderHandleProps) => {
+ const { accessor, columnRef } = props;
+
+ const { classes } = useStyles();
+
+ const dragRef = useRef(null);
+
+ const [deltaX, setDeltaX] = useState(0);
+
+ const { setColumnWidth } = useDataTableDragToggleColumnsContext();
+
+ const handleDragStart = (event: React.DragEvent) => {
+ event.preventDefault();
+ event.stopPropagation();
+
+ document.addEventListener('mousemove', handleMouseMove);
+ document.addEventListener('mouseup', handleMouseUp);
+
+ document.body.style.cursor = 'col-resize';
+ };
+
+ const handleMouseMove = (event: MouseEvent) => {
+ if (!columnRef.current) return;
+
+ const delta = event.clientX - columnRef.current.getBoundingClientRect().right;
+
+ const width = columnRef.current.getBoundingClientRect().width + delta;
+
+ const widthString = `${width}px`;
+
+ columnRef.current.style.width = widthString;
+
+ // we have to set (store) the width in the context and in the
+ // local storage, otherwise the resizing won't work for small sizes
+ setColumnWidth(accessor, columnRef.current.style.width as string);
+
+ setDeltaX(-delta);
+ };
+
+ const handleMouseUp = () => {
+ if (!columnRef.current) return;
+
+ document.removeEventListener('mousemove', handleMouseMove);
+ document.removeEventListener('mouseup', handleMouseUp);
+
+ document.body.style.cursor = 'initial';
+
+ setColumnWidth(accessor, columnRef.current.style.width as string);
+
+ columnRef.current.style.width = '';
+
+ setDeltaX(0);
+ };
+
+ /**
+ * Reset the column width to the default value
+ */
+ const handleDoubleClick = () => {
+ if (!columnRef.current) return;
+
+ columnRef.current.style.maxWidth = 'initial';
+ columnRef.current.style.minWidth = 'initial';
+ columnRef.current.style.width = 'initial';
+
+ setColumnWidth(accessor, 'initial');
+ };
+
+ return (
+ event.stopPropagation()}
+ onMouseDown={handleDragStart}
+ onDoubleClick={handleDoubleClick}
+ className={classes.resizableColumnHeaderHandle}
+ style={{
+ right: deltaX,
+ }}
+ >
+ );
+};
diff --git a/package/hooks.ts b/package/hooks.ts
index a8dce25..4941b45 100644
--- a/package/hooks.ts
+++ b/package/hooks.ts
@@ -1,6 +1,6 @@
-import { useResizeObserver, useTimeout } from '@mantine/hooks';
-import { useEffect, useState, type Key } from 'react';
-import type { DataTableRowExpansionProps } from './types';
+import { useLocalStorage, useResizeObserver, useTimeout } from '@mantine/hooks';
+import { useEffect, useMemo, useState, type Key } from 'react';
+import type { DataTableColumn, DataTableRowExpansionProps } from './types';
import { getRecordId } from './utils';
export function useLastSelectionChangeIndex(recordIds: unknown[] | undefined) {
@@ -106,3 +106,124 @@ export function useElementOuterSize() {
const { width, height } = ref.current?.getBoundingClientRect() || { width: 0, height: 0 };
return { ref, width, height };
}
+
+export type DataTableColumnToggle = {
+ accessor: string | undefined;
+ defaultToggle: boolean;
+ toggleable: boolean;
+ toggled: boolean;
+};
+
+type DataTableColumnWidth = Record;
+
+export const useDataTableColumns = ({
+ key,
+ columns = [],
+}: {
+ key: string | undefined;
+ columns: DataTableColumn[];
+}) => {
+ // Default columns id ordered is the order of the columns in the array
+ const defaultColumnsOrder = (columns && columns.map((column) => column.accessor)) || [];
+
+ // create an array of object with key = accessor and value = width
+ const defaultColumnsWidth =
+ (columns && columns.map((column) => ({ [column.accessor]: column.width ?? 'auto' }))) || [];
+
+ // Default columns id toggled is the array of columns which have the toggleable property set to true
+ const defaultColumnsToggle =
+ columns &&
+ columns.map((column) => ({
+ accessor: column.accessor,
+ defaultToggle: column.defaultToggle || true,
+ toggleable: column.toggleable,
+ toggled: column.defaultToggle || true,
+ }));
+
+ // Store the columns order in localStorage
+ const [columnsOrder, setColumnsOrder] = useLocalStorage({
+ key: `${key}-columns-order`,
+ defaultValue: defaultColumnsOrder as string[],
+ getInitialValueInEffect: true,
+ });
+
+ // Store the columns toggle in localStorage
+ const [columnsToggle, setColumnsToggle] = useLocalStorage({
+ key: `${key}-columns-toggle`,
+ defaultValue: defaultColumnsToggle as DataTableColumnToggle[],
+ getInitialValueInEffect: true,
+ });
+
+ // Store the columns with in localStorage
+ const [columnsWidth, setColumnsWidth] = useLocalStorage({
+ key: `${key}-columns-width`,
+ defaultValue: defaultColumnsWidth as DataTableColumnWidth[],
+ getInitialValueInEffect: true,
+ });
+
+ // we won't use the "remove" function from useLocalStorage() because
+ // we got issue with rendering
+ const resetColumnsOrder = () => setColumnsOrder(defaultColumnsOrder as string[]);
+
+ const resetColumnsToggle = () => setColumnsToggle(defaultColumnsToggle as DataTableColumnToggle[]);
+
+ const resetColumnsWidth = () => setColumnsWidth(defaultColumnsWidth as DataTableColumnWidth[]);
+
+ const effectiveColumns = useMemo(() => {
+ if (!columnsOrder) {
+ return columns;
+ }
+
+ const result = columnsOrder
+ .map((order) => columns.find((column) => column.accessor === order))
+ .filter((column) => {
+ return columnsToggle.find((toggle) => {
+ return toggle.accessor === column?.accessor;
+ })?.toggled;
+ });
+
+ const newWith = result.map((column) => {
+ return {
+ ...column,
+ width: columnsWidth.find((width) => {
+ return width[column?.accessor as string];
+ })?.[column?.accessor as string],
+ };
+ });
+
+ return newWith;
+ }, [columns, columnsOrder, columnsToggle, columnsWidth]);
+
+ const setColumnWidth = (accessor: string, width: string | number) => {
+ const newColumnsWidth = columnsWidth.map((column) => {
+ if (!column[accessor]) {
+ return column;
+ }
+ return {
+ [accessor]: width,
+ };
+ });
+
+ setColumnsWidth(newColumnsWidth);
+ };
+
+ return {
+ effectiveColumns: effectiveColumns as DataTableColumn[],
+
+ // Order handling
+ setColumnsOrder,
+ columnsOrder: columnsOrder as string[],
+ resetColumnsOrder,
+
+ // Toggle handling
+ columnsToggle: columnsToggle as DataTableColumnToggle[],
+ setColumnsToggle,
+ resetColumnsToggle,
+
+ // Resize handling
+ columnsWidth,
+ setColumnsWidth,
+ setColumnWidth,
+ resetColumnsWidth,
+ } as const;
+};
diff --git a/package/index.ts b/package/index.ts
index 8bbc378..2c15942 100644
--- a/package/index.ts
+++ b/package/index.ts
@@ -1,3 +1,4 @@
export { default as DataTable } from './DataTable';
+export { useDataTableColumns } from './hooks';
export * from './types';
export { differenceBy, getValueAtPath, humanize, uniqBy } from './utils';
diff --git a/package/package.json b/package/package.json
index 8a99bbf..0463406 100644
--- a/package/package.json
+++ b/package/package.json
@@ -1,6 +1,6 @@
{
"name": "mantine-datatable",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "The dependency-free datatable component for Mantine UI, featuring asynchronous data loading support, pagination, multple rows selection, column sorting, custom cell data rendering, row context menu, row expansion and more",
"keywords": [
"mantine",
@@ -58,12 +58,12 @@
"devDependencies": {
"@mantine/core": "^6.0.21",
"@mantine/hooks": "^6.0.21",
- "@tabler/icons-react": "^2.40.0",
- "@types/react": "^18.2.36",
- "@types/react-dom": "^18.2.14",
- "esbuild": "^0.19.5",
+ "@tabler/icons-react": "^2.44.0",
+ "@types/react": "^18.2.45",
+ "@types/react-dom": "^18.2.18",
+ "esbuild": "^0.19.10",
"react": "^18.2.0",
- "typescript": "^5.2.2"
+ "typescript": "^5.3.3"
},
"peerDependencies": {
"@mantine/core": ">=6 <=6.0.17 || >=6.0.19 < 7",
diff --git a/package/types/DataTableColumn.ts b/package/types/DataTableColumn.ts
index 9d67b8c..164f174 100644
--- a/package/types/DataTableColumn.ts
+++ b/package/types/DataTableColumn.ts
@@ -31,13 +31,33 @@ export type DataTableColumn = {
*/
sortable?: boolean;
+ /**
+ * If set to true, the column can be dragged.
+ */
+ draggable?: boolean;
+
+ /**
+ * If set to true, the column can be toggled.
+ */
+ toggleable?: boolean;
+
+ /**
+ * If set to true, the column can be resized.
+ */
+ resizable?: boolean;
+
+ /**
+ * If set to true, the column will be toggled by default.
+ */
+ defaultToggle?: boolean;
+
/**
* Optional node providing the user with filtering options.
* If present, a filter button will be added to the column's header. Upon clicking that button,
* a pop-over showing the provided node will be opened.
*
* Alternatively, a function returning a node can be provided. The function receives props with a `close`
- * method which allows programatically closing the pop-over.
+ * method which allows programmatically closing the pop-over.
*
* ```tsx
* // …
diff --git a/package/types/DataTableProps.ts b/package/types/DataTableProps.ts
index bedb227..52929bd 100644
--- a/package/types/DataTableProps.ts
+++ b/package/types/DataTableProps.ts
@@ -74,6 +74,12 @@ export type DataTableProps = {
*/
defaultColumnProps?: DataTableDefaultColumnProps;
+ /**
+ * If you want to use drag and drop as well as toggle to reorder and toggle columns
+ * provide a unique key which will be used to store the column order in localStorage.
+ */
+ storeColumnsKey?: string | undefined;
+
/**
* A default render function for all columns; accepts the current record, its index in `records`
* and the column accessor
diff --git a/yarn.lock b/yarn.lock
index 9c3899e..0edb116 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -168,6 +168,14 @@
"@babel/highlight" "^7.22.10"
chalk "^2.4.2"
+"@babel/code-frame@^7.22.13":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
+ dependencies:
+ "@babel/highlight" "^7.23.4"
+ chalk "^2.4.2"
+
"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
version "7.22.9"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
@@ -229,32 +237,32 @@
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-create-class-features-plugin@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4"
- integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==
+"@babel/helper-create-class-features-plugin@^7.22.5":
+ version "7.22.10"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3"
+ integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.22.5"
"@babel/helper-environment-visitor" "^7.22.5"
"@babel/helper-function-name" "^7.22.5"
- "@babel/helper-member-expression-to-functions" "^7.22.15"
+ "@babel/helper-member-expression-to-functions" "^7.22.5"
"@babel/helper-optimise-call-expression" "^7.22.5"
"@babel/helper-replace-supers" "^7.22.9"
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
semver "^6.3.1"
-"@babel/helper-create-class-features-plugin@^7.22.5":
- version "7.22.10"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3"
- integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==
+"@babel/helper-create-class-features-plugin@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953"
+ integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==
dependencies:
"@babel/helper-annotate-as-pure" "^7.22.5"
- "@babel/helper-environment-visitor" "^7.22.5"
- "@babel/helper-function-name" "^7.22.5"
- "@babel/helper-member-expression-to-functions" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-member-expression-to-functions" "^7.23.0"
"@babel/helper-optimise-call-expression" "^7.22.5"
- "@babel/helper-replace-supers" "^7.22.9"
+ "@babel/helper-replace-supers" "^7.22.20"
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
semver "^6.3.1"
@@ -297,6 +305,14 @@
"@babel/template" "^7.22.5"
"@babel/types" "^7.22.5"
+"@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
"@babel/helper-hoist-variables@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
@@ -318,6 +334,13 @@
dependencies:
"@babel/types" "^7.22.5"
+"@babel/helper-member-expression-to-functions@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
+ integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
+ dependencies:
+ "@babel/types" "^7.23.0"
+
"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
@@ -343,10 +366,10 @@
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/helper-validator-identifier" "^7.22.5"
-"@babel/helper-module-transforms@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
- integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
+"@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-module-imports" "^7.22.15"
@@ -375,6 +398,15 @@
"@babel/helper-environment-visitor" "^7.22.5"
"@babel/helper-wrap-function" "^7.22.9"
+"@babel/helper-replace-supers@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793"
+ integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-member-expression-to-functions" "^7.22.15"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+
"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9":
version "7.22.9"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779"
@@ -410,6 +442,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
+
"@babel/helper-validator-identifier@^7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044"
@@ -462,11 +499,25 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
+"@babel/parser@^7.22.15":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
+ integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e"
@@ -565,6 +616,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
+"@babel/plugin-syntax-jsx@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473"
+ integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
@@ -621,7 +679,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2":
+"@babel/plugin-syntax-typescript@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f"
+ integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-typescript@^7.7.2":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272"
integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==
@@ -825,12 +890,12 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-simple-access" "^7.22.5"
-"@babel/plugin-transform-modules-commonjs@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481"
- integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==
+"@babel/plugin-transform-modules-commonjs@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4"
+ integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==
dependencies:
- "@babel/helper-module-transforms" "^7.23.0"
+ "@babel/helper-module-transforms" "^7.23.3"
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-simple-access" "^7.22.5"
@@ -951,10 +1016,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-react-display-name@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b"
- integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==
+"@babel/plugin-transform-react-display-name@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200"
+ integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
@@ -987,10 +1052,10 @@
"@babel/plugin-syntax-jsx" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/plugin-transform-react-pure-annotations@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0"
- integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==
+"@babel/plugin-transform-react-pure-annotations@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c"
+ integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==
dependencies:
"@babel/helper-annotate-as-pure" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
@@ -1046,15 +1111,15 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-typescript@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127"
- integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==
+"@babel/plugin-transform-typescript@^7.23.3":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c"
+ integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.22.5"
- "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-create-class-features-plugin" "^7.23.6"
"@babel/helper-plugin-utils" "^7.22.5"
- "@babel/plugin-syntax-typescript" "^7.22.5"
+ "@babel/plugin-syntax-typescript" "^7.23.3"
"@babel/plugin-transform-unicode-escapes@^7.22.10":
version "7.22.10"
@@ -1182,28 +1247,28 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/preset-react@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc"
- integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==
+"@babel/preset-react@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709"
+ integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-validator-option" "^7.22.15"
- "@babel/plugin-transform-react-display-name" "^7.22.5"
+ "@babel/plugin-transform-react-display-name" "^7.23.3"
"@babel/plugin-transform-react-jsx" "^7.22.15"
"@babel/plugin-transform-react-jsx-development" "^7.22.5"
- "@babel/plugin-transform-react-pure-annotations" "^7.22.5"
+ "@babel/plugin-transform-react-pure-annotations" "^7.23.3"
-"@babel/preset-typescript@^7.23.2":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz#c8de488130b7081f7e1482936ad3de5b018beef4"
- integrity sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==
+"@babel/preset-typescript@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913"
+ integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-validator-option" "^7.22.15"
- "@babel/plugin-syntax-jsx" "^7.22.5"
- "@babel/plugin-transform-modules-commonjs" "^7.23.0"
- "@babel/plugin-transform-typescript" "^7.22.15"
+ "@babel/plugin-syntax-jsx" "^7.23.3"
+ "@babel/plugin-transform-modules-commonjs" "^7.23.3"
+ "@babel/plugin-transform-typescript" "^7.23.3"
"@babel/regjsgen@^0.8.0":
version "0.8.0"
@@ -1217,6 +1282,15 @@
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/template@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
+ integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
+ dependencies:
+ "@babel/code-frame" "^7.22.13"
+ "@babel/parser" "^7.22.15"
+ "@babel/types" "^7.22.15"
+
"@babel/template@^7.22.5", "@babel/template@^7.3.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
@@ -1260,6 +1334,15 @@
"@babel/helper-validator-identifier" "^7.22.15"
to-fast-properties "^2.0.0"
+"@babel/types@^7.23.0":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
+ integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1285,13 +1368,13 @@
"@docsearch/css" "3.5.2"
algoliasearch "^4.19.1"
-"@ducanh2912/next-pwa@^9.7.2":
- version "9.7.2"
- resolved "https://registry.yarnpkg.com/@ducanh2912/next-pwa/-/next-pwa-9.7.2.tgz#72160e294e787cf5df5c59de2bfa8d9807e025ee"
- integrity sha512-KNdWIr8297L6TRyEeJQUzZqgP+m10GmaV6tacZ6wIcON9J+b6Nz34eLx6B5Q5mQKxqbYHTDayVoMRc2uuA/Ahg==
+"@ducanh2912/next-pwa@^10.0.0":
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/@ducanh2912/next-pwa/-/next-pwa-10.0.0.tgz#d56c92c32ab74a7eff0af8e367c49791fc2e1a6c"
+ integrity sha512-6VWpF0IzP9Az9n0jmqL9XH8iWA6LYJrC72b8GDEn7Swfi1mR+hYPItNFKJnraqwJheIqeeZXIHAqs5/VdyDF5A==
dependencies:
clean-webpack-plugin "4.0.0"
- fast-glob "3.3.1"
+ fast-glob "3.3.2"
semver "7.5.4"
terser-webpack-plugin "5.3.9"
workbox-build "7.0.0"
@@ -1397,115 +1480,120 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
-"@esbuild/android-arm64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz#276c5f99604054d3dbb733577e09adae944baa90"
- integrity sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==
-
-"@esbuild/android-arm@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.5.tgz#4a3cbf14758166abaae8ba9c01a80e68342a4eec"
- integrity sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==
-
-"@esbuild/android-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.5.tgz#21a3d11cd4613d2d3c5ccb9e746c254eb9265b0a"
- integrity sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==
-
-"@esbuild/darwin-arm64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz#714cb839f467d6a67b151ee8255886498e2b9bf6"
- integrity sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==
-
-"@esbuild/darwin-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz#2c553e97a6d2b4ae76a884e35e6cbab85a990bbf"
- integrity sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==
-
-"@esbuild/freebsd-arm64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz#d554f556718adb31917a0da24277bf84b6ee87f3"
- integrity sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==
-
-"@esbuild/freebsd-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz#288f7358a3bb15d99e73c65c9adaa3dabb497432"
- integrity sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==
-
-"@esbuild/linux-arm64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz#95933ae86325c93cb6b5e8333d22120ecfdc901b"
- integrity sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==
-
-"@esbuild/linux-arm@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz#0acef93aa3e0579e46d33b666627bddb06636664"
- integrity sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==
-
-"@esbuild/linux-ia32@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz#b6e5c9e80b42131cbd6b1ddaa48c92835f1ed67f"
- integrity sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==
-
-"@esbuild/linux-loong64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz#e5f0cf95a180158b01ff5f417da796a1c09dfbea"
- integrity sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==
-
-"@esbuild/linux-mips64el@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz#ae36fb86c7d5f641f3a0c8472e83dcb6ea36a408"
- integrity sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==
-
-"@esbuild/linux-ppc64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz#7960cb1666f0340ddd9eef7b26dcea3835d472d0"
- integrity sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==
-
-"@esbuild/linux-riscv64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz#32207df26af60a3a9feea1783fc21b9817bade19"
- integrity sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==
-
-"@esbuild/linux-s390x@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz#b38d5681db89a3723862dfa792812397b1510a7d"
- integrity sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==
-
-"@esbuild/linux-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz#46feba2ad041a241379d150f415b472fe3885075"
- integrity sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==
-
-"@esbuild/netbsd-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz#3b5c1fb068f26bfc681d31f682adf1bea4ef0702"
- integrity sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==
-
-"@esbuild/openbsd-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz#ca6830316ca68056c5c88a875f103ad3235e00db"
- integrity sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==
-
-"@esbuild/sunos-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz#9efc4eb9539a7be7d5a05ada52ee43cda0d8e2dd"
- integrity sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==
-
-"@esbuild/win32-arm64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz#29f8184afa7a02a956ebda4ed638099f4b8ff198"
- integrity sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==
-
-"@esbuild/win32-ia32@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz#f3de07afb292ecad651ae4bb8727789de2d95b05"
- integrity sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==
-
-"@esbuild/win32-x64@0.19.5":
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz#faad84c41ba12e3a0acb52571df9bff37bee75f6"
- integrity sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==
+"@esbuild/aix-ppc64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz#fb3922a0183d27446de00cf60d4f7baaadf98d84"
+ integrity sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==
+
+"@esbuild/android-arm64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz#ef31015416dd79398082409b77aaaa2ade4d531a"
+ integrity sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==
+
+"@esbuild/android-arm@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.10.tgz#1c23c7e75473aae9fb323be5d9db225142f47f52"
+ integrity sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==
+
+"@esbuild/android-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.10.tgz#df6a4e6d6eb8da5595cfce16d4e3f6bc24464707"
+ integrity sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==
+
+"@esbuild/darwin-arm64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz#8462a55db07c1b2fad61c8244ce04469ef1043be"
+ integrity sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==
+
+"@esbuild/darwin-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz#d1de20bfd41bb75b955ba86a6b1004539e8218c1"
+ integrity sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==
+
+"@esbuild/freebsd-arm64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz#16904879e34c53a2e039d1284695d2db3e664d57"
+ integrity sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==
+
+"@esbuild/freebsd-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz#8ad9e5ca9786ca3f1ef1411bfd10b08dcd9d4cef"
+ integrity sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==
+
+"@esbuild/linux-arm64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz#d82cf2c590faece82d28bbf1cfbe36f22ae25bd2"
+ integrity sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==
+
+"@esbuild/linux-arm@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz#477b8e7c7bcd34369717b04dd9ee6972c84f4029"
+ integrity sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==
+
+"@esbuild/linux-ia32@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz#d55ff822cf5b0252a57112f86857ff23be6cab0e"
+ integrity sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==
+
+"@esbuild/linux-loong64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz#a9ad057d7e48d6c9f62ff50f6f208e331c4543c7"
+ integrity sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==
+
+"@esbuild/linux-mips64el@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz#b011a96924773d60ebab396fbd7a08de66668179"
+ integrity sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==
+
+"@esbuild/linux-ppc64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz#5d8b59929c029811e473f2544790ea11d588d4dd"
+ integrity sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==
+
+"@esbuild/linux-riscv64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz#292b06978375b271bd8bc0a554e0822957508d22"
+ integrity sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==
+
+"@esbuild/linux-s390x@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz#d30af63530f8d4fa96930374c9dd0d62bf59e069"
+ integrity sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==
+
+"@esbuild/linux-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz#898c72eeb74d9f2fb43acf316125b475548b75ce"
+ integrity sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==
+
+"@esbuild/netbsd-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz#fd473a5ae261b43eab6dad4dbd5a3155906e6c91"
+ integrity sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==
+
+"@esbuild/openbsd-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz#96eb8992e526717b5272321eaad3e21f3a608e46"
+ integrity sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==
+
+"@esbuild/sunos-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz#c16ee1c167f903eaaa6acf7372bee42d5a89c9bc"
+ integrity sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==
+
+"@esbuild/win32-arm64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz#7e417d1971dbc7e469b4eceb6a5d1d667b5e3dcc"
+ integrity sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==
+
+"@esbuild/win32-ia32@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz#2b52dfec6cd061ecb36171c13bae554888b439e5"
+ integrity sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==
+
+"@esbuild/win32-x64@0.19.10":
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz#bd123a74f243d2f3a1f046447bb9b363ee25d072"
+ integrity sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
version "4.4.0"
@@ -1519,10 +1607,10 @@
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8"
integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==
-"@eslint/eslintrc@^2.1.3":
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d"
- integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
@@ -1534,15 +1622,15 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.53.0":
- version "8.53.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d"
- integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==
+"@eslint/js@8.56.0":
+ version "8.56.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
+ integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
-"@faker-js/faker@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.2.0.tgz#d4656d2cb485fe6ec4e7b340da9f16fac2c36c4a"
- integrity sha512-VacmzZqVxdWdf9y64lDOMZNDMM/FQdtM9IsaOPKOm2suYwEatb8VkdHqOzXcDnZbk7YDE2BmsJmy/2Hmkn563g==
+"@faker-js/faker@^8.3.1":
+ version "8.3.1"
+ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.3.1.tgz#7753df0cb88d7649becf984a96dd1bd0a26f43e3"
+ integrity sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==
"@floating-ui/core@^1.4.1":
version "1.4.1"
@@ -1954,67 +2042,67 @@
resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-6.0.21.tgz#6185506e91cba3e308aaa8ea9ababc8e767995d6"
integrity sha512-33RVDRop5jiWFao3HKd3Yp7A9mEq4HAJxJPTuYm1NkdqX6aTKOQK7wT8v8itVodBp+sb4cJK6ZVdD1UurK/txQ==
-"@next/env@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-14.0.1.tgz#7d03c9042c205a320aef2ea3f83c2d16b6825563"
- integrity sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A==
+"@next/env@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.0.4.tgz#d5cda0c4a862d70ae760e58c0cd96a8899a2e49a"
+ integrity sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==
"@next/env@^13.4.3":
version "13.4.13"
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.13.tgz#50250cec7626904b93a4a934933d6a747763259d"
integrity sha512-fwz2QgVg08v7ZL7KmbQBLF2PubR/6zQdKBgmHEl3BCyWTEDsAQEijjw2gbFhI1tcKfLdOOJUXntz5vZ4S0Polg==
-"@next/eslint-plugin-next@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.1.tgz#6e587b76588a02d77267945b5d1f059a6c8fd9ca"
- integrity sha512-bLjJMwXdzvhnQOnxvHoTTUh/+PYk6FF/DCgHi4BXwXCINer+o1ZYfL9aVeezj/oI7wqGJOqwGIXrlBvPbAId3w==
+"@next/eslint-plugin-next@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz#474fd88d92209270021186043513fbdc4203f5ec"
+ integrity sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==
dependencies:
glob "7.1.7"
-"@next/swc-darwin-arm64@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz#75a5f872c4077ecd536d7496bc24f3d312d5dcd0"
- integrity sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==
-
-"@next/swc-darwin-x64@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz#7d8498fc680cc8b4d5181bee336818c63779bc5e"
- integrity sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==
-
-"@next/swc-linux-arm64-gnu@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz#184286794e67bed192de7dbb10d7f040c996f965"
- integrity sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==
-
-"@next/swc-linux-arm64-musl@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz#e8121b860ebc97a8d2a9113e5a42878430e749d5"
- integrity sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==
-
-"@next/swc-linux-x64-gnu@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz#cdc4276b11a10c892fd1cb7dd31e024064db9c3b"
- integrity sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==
-
-"@next/swc-linux-x64-musl@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz#4a194a484ceb34fd370e8d1af571493859fb2542"
- integrity sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==
-
-"@next/swc-win32-arm64-msvc@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz#71923debee50f98ef166b28cdb3ad7e7463e6598"
- integrity sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==
-
-"@next/swc-win32-ia32-msvc@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz#b8f46da899c279fd65db76f0951849290c480ef9"
- integrity sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==
-
-"@next/swc-win32-x64-msvc@14.0.1":
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz#be3dd8b3729ec51c99ff04b51e2b235756d02b6e"
- integrity sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==
+"@next/swc-darwin-arm64@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz#27b1854c2cd04eb1d5e75081a1a792ad91526618"
+ integrity sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==
+
+"@next/swc-darwin-x64@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz#9940c449e757d0ee50bb9e792d2600cc08a3eb3b"
+ integrity sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==
+
+"@next/swc-linux-arm64-gnu@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz#0eafd27c8587f68ace7b4fa80695711a8434de21"
+ integrity sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==
+
+"@next/swc-linux-arm64-musl@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz#2b0072adb213f36dada5394ea67d6e82069ae7dd"
+ integrity sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==
+
+"@next/swc-linux-x64-gnu@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz#68c67d20ebc8e3f6ced6ff23a4ba2a679dbcec32"
+ integrity sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==
+
+"@next/swc-linux-x64-musl@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz#67cd81b42fb2caf313f7992fcf6d978af55a1247"
+ integrity sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==
+
+"@next/swc-win32-arm64-msvc@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz#be06585906b195d755ceda28f33c633e1443f1a3"
+ integrity sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==
+
+"@next/swc-win32-ia32-msvc@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz#e76cabefa9f2d891599c3d85928475bd8d3f6600"
+ integrity sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==
+
+"@next/swc-win32-x64-msvc@14.0.4":
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz#e74892f1a9ccf41d3bf5979ad6d3d77c07b9cba1"
+ integrity sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -2205,18 +2293,18 @@
dependencies:
tslib "^2.4.0"
-"@tabler/icons-react@^2.40.0":
- version "2.40.0"
- resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-2.40.0.tgz#14efb60f0d841689c1ddf5691646dbfc3fa01901"
- integrity sha512-C+dDOZowFbwI3LGQP0fdua+hOPkGkW7XeMcRXTSdEKc5fD75W6zRO5nXnWivIMRKsi/Y26EDmnQo15N8JX378w==
+"@tabler/icons-react@^2.44.0":
+ version "2.44.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-2.44.0.tgz#8119d3b6321ebaf98400fba7932e280d008125f8"
+ integrity sha512-10qwrqJ/QBNgY4YYer9PjWmCwm3wv9aVK8kGAkFKkwu6UJURVLZ2ea+oFh5j6vSXnA1zMtUG+X8anR5fZ67Isw==
dependencies:
- "@tabler/icons" "2.40.0"
+ "@tabler/icons" "2.44.0"
prop-types "^15.7.2"
-"@tabler/icons@2.40.0":
- version "2.40.0"
- resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-2.40.0.tgz#96cecc990a03412b88194ce3765280d2e63c1be6"
- integrity sha512-VqKsBSX159cLFTnCzkCmGhZtSPJHNN0lM2sC4xe0HPOfPUnjiex7rDHDdut4oe4iKRecDDpwXwM9BcU6xCPlCg==
+"@tabler/icons@2.44.0":
+ version "2.44.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-2.44.0.tgz#9f3cf86150b23e84a6eaf9d29ab2b2aaa8c7eed6"
+ integrity sha512-WPPtihDcAwEm1QZM9MXQw6+r/R2/qx7KMU1eegsi9DsqBLAb0W2kbt6e/syvd6j9c+6XNpRVBW1ziGqSWQAWOg==
"@tanstack/query-core@4.36.1":
version "4.36.1"
@@ -2245,10 +2333,10 @@
lz-string "^1.5.0"
pretty-format "^27.0.2"
-"@testing-library/jest-dom@^6.1.4":
- version "6.1.4"
- resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz#cf0835c33bc5ef00befb9e672b1e3e6a710e30e3"
- integrity sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==
+"@testing-library/jest-dom@^6.1.5":
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.1.5.tgz#0a635d0ad4a1a880089d967299d94e9cfc81fbe1"
+ integrity sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==
dependencies:
"@adobe/css-tools" "^4.3.1"
"@babel/runtime" "^7.9.2"
@@ -2267,10 +2355,10 @@
"@babel/runtime" "^7.12.5"
react-error-boundary "^3.1.0"
-"@testing-library/react@^14.0.0":
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c"
- integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==
+"@testing-library/react@^14.1.2":
+ version "14.1.2"
+ resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.1.2.tgz#a2b9e9ee87721ec9ed2d7cfc51cc04e474537c32"
+ integrity sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==
dependencies:
"@babel/runtime" "^7.12.5"
"@testing-library/dom" "^9.0.0"
@@ -2384,10 +2472,10 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@^29.5.7":
- version "29.5.7"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.7.tgz#2c0dafe2715dd958a455bc10e2ec3e1ec47b5036"
- integrity sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==
+"@types/jest@^29.5.11":
+ version "29.5.11"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c"
+ integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==
dependencies:
expect "^29.0.0"
pretty-format "^29.0.0"
@@ -2411,10 +2499,10 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
-"@types/lodash@^4.14.200":
- version "4.14.200"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.200.tgz#435b6035c7eba9cdf1e039af8212c9e9281e7149"
- integrity sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==
+"@types/lodash@^4.14.202":
+ version "4.14.202"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
+ integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
"@types/minimatch@*":
version "5.1.2"
@@ -2426,10 +2514,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f"
integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==
-"@types/node@^20.8.10":
- version "20.8.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e"
- integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==
+"@types/node@^20.10.5":
+ version "20.10.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
+ integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
dependencies:
undici-types "~5.26.4"
@@ -2450,10 +2538,10 @@
dependencies:
"@types/react" "*"
-"@types/react-dom@^18.2.14":
- version "18.2.14"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.14.tgz#c01ba40e5bb57fc1dc41569bb3ccdb19eab1c539"
- integrity sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==
+"@types/react-dom@^18.2.18":
+ version "18.2.18"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd"
+ integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==
dependencies:
"@types/react" "*"
@@ -2466,10 +2554,10 @@
"@types/scheduler" "*"
csstype "^3.0.2"
-"@types/react@^18.2.36":
- version "18.2.36"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.36.tgz#bc68ffb4408e5d0c419b0760b2eaeec70aeeedb3"
- integrity sha512-o9XFsHYLLZ4+sb9CWUYwHqFVoG61SesydF353vFMMsQziiyRu8np4n2OYMUSDZ8XuImxDr9c5tR7gidlH29Vnw==
+"@types/react@^18.2.45":
+ version "18.2.45"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c"
+ integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -2519,16 +2607,16 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@^6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz#cfe2bd34e26d2289212946b96ab19dcad64b661a"
- integrity sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==
+"@typescript-eslint/eslint-plugin@^6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz#b0b3e15fa8c3e67ed4386b765cc0ba98ad3a303b"
+ integrity sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==
dependencies:
"@eslint-community/regexpp" "^4.5.1"
- "@typescript-eslint/scope-manager" "6.10.0"
- "@typescript-eslint/type-utils" "6.10.0"
- "@typescript-eslint/utils" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
+ "@typescript-eslint/scope-manager" "6.15.0"
+ "@typescript-eslint/type-utils" "6.15.0"
+ "@typescript-eslint/utils" "6.15.0"
+ "@typescript-eslint/visitor-keys" "6.15.0"
debug "^4.3.4"
graphemer "^1.4.0"
ignore "^5.2.4"
@@ -2547,24 +2635,24 @@
"@typescript-eslint/visitor-keys" "6.3.0"
debug "^4.3.4"
-"@typescript-eslint/parser@^6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.10.0.tgz#578af79ae7273193b0b6b61a742a2bc8e02f875a"
- integrity sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==
+"@typescript-eslint/parser@^6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.15.0.tgz#1af69741cfa314a13c1434d0bdd5a0c3096699d7"
+ integrity sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==
dependencies:
- "@typescript-eslint/scope-manager" "6.10.0"
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/typescript-estree" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
+ "@typescript-eslint/scope-manager" "6.15.0"
+ "@typescript-eslint/types" "6.15.0"
+ "@typescript-eslint/typescript-estree" "6.15.0"
+ "@typescript-eslint/visitor-keys" "6.15.0"
debug "^4.3.4"
-"@typescript-eslint/scope-manager@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz#b0276118b13d16f72809e3cecc86a72c93708540"
- integrity sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==
+"@typescript-eslint/scope-manager@6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz#40e5214a3e9e048aca55ce33381bc61b6b51c32a"
+ integrity sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==
dependencies:
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
+ "@typescript-eslint/types" "6.15.0"
+ "@typescript-eslint/visitor-keys" "6.15.0"
"@typescript-eslint/scope-manager@6.3.0":
version "6.3.0"
@@ -2574,33 +2662,33 @@
"@typescript-eslint/types" "6.3.0"
"@typescript-eslint/visitor-keys" "6.3.0"
-"@typescript-eslint/type-utils@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz#1007faede067c78bdbcef2e8abb31437e163e2e1"
- integrity sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==
+"@typescript-eslint/type-utils@6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz#c22261bd00566821a300d08f4632533a8f9bed01"
+ integrity sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==
dependencies:
- "@typescript-eslint/typescript-estree" "6.10.0"
- "@typescript-eslint/utils" "6.10.0"
+ "@typescript-eslint/typescript-estree" "6.15.0"
+ "@typescript-eslint/utils" "6.15.0"
debug "^4.3.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/types@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.10.0.tgz#f4f0a84aeb2ac546f21a66c6e0da92420e921367"
- integrity sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==
+"@typescript-eslint/types@6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.15.0.tgz#a9f7b006aee52b0948be6e03f521814bf435ddd5"
+ integrity sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==
"@typescript-eslint/types@6.3.0":
version "6.3.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.3.0.tgz#84517f1427923e714b8418981e493b6635ab4c9d"
integrity sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==
-"@typescript-eslint/typescript-estree@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz#667381eed6f723a1a8ad7590a31f312e31e07697"
- integrity sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==
+"@typescript-eslint/typescript-estree@6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz#2f8a513df1ce5e6e1ba8e5c6aa52f392ae023fc5"
+ integrity sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==
dependencies:
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
+ "@typescript-eslint/types" "6.15.0"
+ "@typescript-eslint/visitor-keys" "6.15.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
@@ -2620,25 +2708,25 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/utils@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.10.0.tgz#4d76062d94413c30e402c9b0df8c14aef8d77336"
- integrity sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==
+"@typescript-eslint/utils@6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.15.0.tgz#f80dbb79f3b0f569077a8711dd44186a8933fa4c"
+ integrity sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@types/json-schema" "^7.0.12"
"@types/semver" "^7.5.0"
- "@typescript-eslint/scope-manager" "6.10.0"
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/typescript-estree" "6.10.0"
+ "@typescript-eslint/scope-manager" "6.15.0"
+ "@typescript-eslint/types" "6.15.0"
+ "@typescript-eslint/typescript-estree" "6.15.0"
semver "^7.5.4"
-"@typescript-eslint/visitor-keys@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz#b9eaf855a1ac7e95633ae1073af43d451e8f84e3"
- integrity sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==
+"@typescript-eslint/visitor-keys@6.15.0":
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz#5baf97a7bfeec6f4894d400437055155a46b2330"
+ integrity sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==
dependencies:
- "@typescript-eslint/types" "6.10.0"
+ "@typescript-eslint/types" "6.15.0"
eslint-visitor-keys "^3.4.1"
"@typescript-eslint/visitor-keys@6.3.0":
@@ -3931,33 +4019,34 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
-esbuild@^0.19.5:
- version "0.19.5"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.5.tgz#53a0e19dfbf61ba6c827d51a80813cf071239a8c"
- integrity sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==
+esbuild@^0.19.10:
+ version "0.19.10"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.10.tgz#55e83e4a6b702e3498b9f872d84bfb4ebcb6d16e"
+ integrity sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==
optionalDependencies:
- "@esbuild/android-arm" "0.19.5"
- "@esbuild/android-arm64" "0.19.5"
- "@esbuild/android-x64" "0.19.5"
- "@esbuild/darwin-arm64" "0.19.5"
- "@esbuild/darwin-x64" "0.19.5"
- "@esbuild/freebsd-arm64" "0.19.5"
- "@esbuild/freebsd-x64" "0.19.5"
- "@esbuild/linux-arm" "0.19.5"
- "@esbuild/linux-arm64" "0.19.5"
- "@esbuild/linux-ia32" "0.19.5"
- "@esbuild/linux-loong64" "0.19.5"
- "@esbuild/linux-mips64el" "0.19.5"
- "@esbuild/linux-ppc64" "0.19.5"
- "@esbuild/linux-riscv64" "0.19.5"
- "@esbuild/linux-s390x" "0.19.5"
- "@esbuild/linux-x64" "0.19.5"
- "@esbuild/netbsd-x64" "0.19.5"
- "@esbuild/openbsd-x64" "0.19.5"
- "@esbuild/sunos-x64" "0.19.5"
- "@esbuild/win32-arm64" "0.19.5"
- "@esbuild/win32-ia32" "0.19.5"
- "@esbuild/win32-x64" "0.19.5"
+ "@esbuild/aix-ppc64" "0.19.10"
+ "@esbuild/android-arm" "0.19.10"
+ "@esbuild/android-arm64" "0.19.10"
+ "@esbuild/android-x64" "0.19.10"
+ "@esbuild/darwin-arm64" "0.19.10"
+ "@esbuild/darwin-x64" "0.19.10"
+ "@esbuild/freebsd-arm64" "0.19.10"
+ "@esbuild/freebsd-x64" "0.19.10"
+ "@esbuild/linux-arm" "0.19.10"
+ "@esbuild/linux-arm64" "0.19.10"
+ "@esbuild/linux-ia32" "0.19.10"
+ "@esbuild/linux-loong64" "0.19.10"
+ "@esbuild/linux-mips64el" "0.19.10"
+ "@esbuild/linux-ppc64" "0.19.10"
+ "@esbuild/linux-riscv64" "0.19.10"
+ "@esbuild/linux-s390x" "0.19.10"
+ "@esbuild/linux-x64" "0.19.10"
+ "@esbuild/netbsd-x64" "0.19.10"
+ "@esbuild/openbsd-x64" "0.19.10"
+ "@esbuild/sunos-x64" "0.19.10"
+ "@esbuild/win32-arm64" "0.19.10"
+ "@esbuild/win32-ia32" "0.19.10"
+ "@esbuild/win32-x64" "0.19.10"
escalade@^3.1.1:
version "3.1.1"
@@ -3990,12 +4079,12 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-config-next@^14.0.1:
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.1.tgz#4e59cbaa1c1c72f6d7c4d9110b0902630493ef56"
- integrity sha512-QfIFK2WD39H4WOespjgf6PLv9Bpsd7KGGelCtmq4l67nGvnlsGpuvj0hIT+aIy6p5gKH+lAChYILsyDlxP52yg==
+eslint-config-next@^14.0.4:
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.4.tgz#7cd2c0a3b310203d41cf0dbf9d31f9b0a6235b4a"
+ integrity sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==
dependencies:
- "@next/eslint-plugin-next" "14.0.1"
+ "@next/eslint-plugin-next" "14.0.4"
"@rushstack/eslint-patch" "^1.3.3"
"@typescript-eslint/parser" "^5.4.2 || ^6.0.0"
eslint-import-resolver-node "^0.3.6"
@@ -4005,10 +4094,10 @@ eslint-config-next@^14.0.1:
eslint-plugin-react "^7.33.2"
eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
-eslint-config-prettier@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f"
- integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==
+eslint-config-prettier@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
+ integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==
eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:
version "0.3.9"
@@ -4137,15 +4226,15 @@ eslint-visitor-keys@^3.4.3:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-eslint@^8.53.0:
- version "8.53.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce"
- integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==
+eslint@^8.56.0:
+ version "8.56.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
+ integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
- "@eslint/eslintrc" "^2.1.3"
- "@eslint/js" "8.53.0"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.56.0"
"@humanwhocodes/config-array" "^0.11.13"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
@@ -4282,7 +4371,18 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@3.3.1, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1:
+fast-glob@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
@@ -4585,7 +4685,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -5911,28 +6011,29 @@ next-sitemap@^4.2.3:
fast-glob "^3.2.12"
minimist "^1.2.8"
-next@^14.0.1:
- version "14.0.1"
- resolved "https://registry.yarnpkg.com/next/-/next-14.0.1.tgz#1375d94c5dc7af730234af48401be270e975cb22"
- integrity sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==
+next@^14.0.4:
+ version "14.0.4"
+ resolved "https://registry.yarnpkg.com/next/-/next-14.0.4.tgz#bf00b6f835b20d10a5057838fa2dfced1d0d84dc"
+ integrity sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==
dependencies:
- "@next/env" "14.0.1"
+ "@next/env" "14.0.4"
"@swc/helpers" "0.5.2"
busboy "1.6.0"
caniuse-lite "^1.0.30001406"
+ graceful-fs "^4.2.11"
postcss "8.4.31"
styled-jsx "5.1.1"
watchpack "2.4.0"
optionalDependencies:
- "@next/swc-darwin-arm64" "14.0.1"
- "@next/swc-darwin-x64" "14.0.1"
- "@next/swc-linux-arm64-gnu" "14.0.1"
- "@next/swc-linux-arm64-musl" "14.0.1"
- "@next/swc-linux-x64-gnu" "14.0.1"
- "@next/swc-linux-x64-musl" "14.0.1"
- "@next/swc-win32-arm64-msvc" "14.0.1"
- "@next/swc-win32-ia32-msvc" "14.0.1"
- "@next/swc-win32-x64-msvc" "14.0.1"
+ "@next/swc-darwin-arm64" "14.0.4"
+ "@next/swc-darwin-x64" "14.0.4"
+ "@next/swc-linux-arm64-gnu" "14.0.4"
+ "@next/swc-linux-arm64-musl" "14.0.4"
+ "@next/swc-linux-x64-gnu" "14.0.4"
+ "@next/swc-linux-x64-musl" "14.0.4"
+ "@next/swc-win32-arm64-msvc" "14.0.4"
+ "@next/swc-win32-ia32-msvc" "14.0.4"
+ "@next/swc-win32-x64-msvc" "14.0.4"
node-int64@^0.4.0:
version "0.4.0"
@@ -6220,10 +6321,10 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prettier@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643"
- integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==
+prettier@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848"
+ integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==
pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
version "5.6.0"
@@ -7158,47 +7259,47 @@ tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
-turbo-darwin-64@1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.10.16.tgz#5a8717c1372f2a75e8cfe0b4b6455119ce410b19"
- integrity sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==
-
-turbo-darwin-arm64@1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz#19b5b63acf7ee0fce7e1fe5850e093c2ac9c73f5"
- integrity sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==
-
-turbo-linux-64@1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.10.16.tgz#ee97c0011553a96bd7995e7bcc6e65aab8996798"
- integrity sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==
-
-turbo-linux-arm64@1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.10.16.tgz#2723cc2a846d89df7484002161b25673f4f04009"
- integrity sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==
-
-turbo-windows-64@1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.10.16.tgz#87c46a78502a86dec73634b255a6b3471285969b"
- integrity sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==
-
-turbo-windows-arm64@1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.10.16.tgz#a6208c2bc27e5e6ef0aa4a3e64389c4285c3f274"
- integrity sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==
-
-turbo@^1.10.16:
- version "1.10.16"
- resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.10.16.tgz#51601a65a3aa56d1b9d9cb9a2ab3a5a2eab41e19"
- integrity sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==
+turbo-darwin-64@1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.11.2.tgz#fc3d4d74b325a27aef11b6a52a61f07d466846b9"
+ integrity sha512-toFmRG/adriZY3hOps7nYCfqHAS+Ci6xqgX3fbo82kkLpC6OBzcXnleSwuPqjHVAaRNhVoB83L5njcE9Qwi2og==
+
+turbo-darwin-arm64@1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.11.2.tgz#583a4d0025bc3f953a9eeb7065cb173f481a9965"
+ integrity sha512-FCsEDZ8BUSFYEOSC3rrARQrj7x2VOrmVcfrMUIhexTxproRh4QyMxLfr6LALk4ymx6jbDCxWa6Szal8ckldFbA==
+
+turbo-linux-64@1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.11.2.tgz#55ef996d856cb397b9fb2855a554ccef1cee9dd7"
+ integrity sha512-Vzda/o/QyEske5CxLf0wcu7UUS+7zB90GgHZV4tyN+WZtoouTvbwuvZ3V6b5Wgd3OJ/JwWR0CXDK7Sf4VEMr7A==
+
+turbo-linux-arm64@1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.11.2.tgz#64d6093c9a2f32f410624564fd10685c847d947e"
+ integrity sha512-bRLwovQRz0yxDZrM4tQEAYV0fBHEaTzUF0JZ8RG1UmZt/CqtpnUrJpYb1VK8hj1z46z9YehARpYCwQ2K0qU4yw==
+
+turbo-windows-64@1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.11.2.tgz#f4164be9c42796c86ca3929e27f1992a4310b9ed"
+ integrity sha512-LgTWqkHAKgyVuLYcEPxZVGPInTjjeCnN5KQMdJ4uQZ+xMDROvMFS2rM93iQl4ieDJgidwHCxxCxaU9u8c3d/Kg==
+
+turbo-windows-arm64@1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.11.2.tgz#ca1b4d7ac6fe8c931baef1a270ac07bbd924277b"
+ integrity sha512-829aVBU7IX0c/B4G7g1VI8KniAGutHhIupkYMgF6xPkYVev2G3MYe6DMS/vsLt9GGM9ulDtdWxWrH5P2ngK8IQ==
+
+turbo@^1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.11.2.tgz#7bae6df12c210e9b12973aad8f0e7b077039d4ce"
+ integrity sha512-jPC7LVQJzebs5gWf8FmEvsvXGNyKbN+O9qpvv98xpNaM59aS0/Irhd0H0KbcqnXfsz7ETlzOC3R+xFWthC4Z8A==
optionalDependencies:
- turbo-darwin-64 "1.10.16"
- turbo-darwin-arm64 "1.10.16"
- turbo-linux-64 "1.10.16"
- turbo-linux-arm64 "1.10.16"
- turbo-windows-64 "1.10.16"
- turbo-windows-arm64 "1.10.16"
+ turbo-darwin-64 "1.11.2"
+ turbo-darwin-arm64 "1.11.2"
+ turbo-linux-64 "1.11.2"
+ turbo-linux-arm64 "1.11.2"
+ turbo-windows-64 "1.11.2"
+ turbo-windows-arm64 "1.11.2"
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
@@ -7266,10 +7367,10 @@ typed-array-length@^1.0.4:
for-each "^0.3.3"
is-typed-array "^1.1.9"
-typescript@^5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
- integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
+typescript@^5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
+ integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
unbox-primitive@^1.0.2:
version "1.0.2"