((_props, ref) => {
step: step!,
precision,
});
- setValue(nextValue);
+ setValue(
+ restrictToMarks && marks?.length
+ ? findClosestNumber(
+ nextValue,
+ marks.map((mark) => mark.value)
+ )
+ : nextValue
+ );
valueRef.current = nextValue;
}
},
- [disabled, min, max, step, precision, setValue]
+ [disabled, min, max, step, precision, setValue, marks, restrictToMarks]
);
const { ref: container, active } = useMove(
handleChange,
- { onScrubEnd: () => onChangeEnd?.(valueRef.current) },
+ {
+ onScrubEnd: () =>
+ onChangeEnd?.(
+ restrictToMarks && marks?.length
+ ? findClosestNumber(
+ valueRef.current,
+ marks.map((mark) => mark.value)
+ )
+ : valueRef.current
+ ),
+ },
dir
);
diff --git a/packages/@mantine/core/src/components/Tree/Tree.story.tsx b/packages/@mantine/core/src/components/Tree/Tree.story.tsx
index 618e45047ee..6ab03069a6d 100644
--- a/packages/@mantine/core/src/components/Tree/Tree.story.tsx
+++ b/packages/@mantine/core/src/components/Tree/Tree.story.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
import { IconChevronDown } from '@tabler/icons-react';
import { Button } from '../Button';
import { Group } from '../Group';
@@ -58,7 +59,10 @@ export function Usage() {
}
export function Controller() {
- const tree = useTree();
+ const tree = useTree({
+ onNodeCollapse: (value) => console.log('Node collapsed:', value),
+ onNodeExpand: (value) => console.log('Node expanded:', value),
+ });
return (
diff --git a/packages/@mantine/core/src/components/Tree/get-children-nodes-values/get-children-nodes-values.ts b/packages/@mantine/core/src/components/Tree/get-children-nodes-values/get-children-nodes-values.ts
index 260398172c4..352944a5710 100644
--- a/packages/@mantine/core/src/components/Tree/get-children-nodes-values/get-children-nodes-values.ts
+++ b/packages/@mantine/core/src/components/Tree/get-children-nodes-values/get-children-nodes-values.ts
@@ -42,3 +42,15 @@ export function getChildrenNodesValues(
return acc;
}
+
+export function getAllChildrenNodes(data: TreeNodeData[]) {
+ return data.reduce((acc, node) => {
+ if (Array.isArray(node.children) && node.children.length > 0) {
+ acc.push(...getAllChildrenNodes(node.children));
+ } else {
+ acc.push(node.value);
+ }
+
+ return acc;
+ }, [] as string[]);
+}
diff --git a/packages/@mantine/core/src/components/Tree/index.ts b/packages/@mantine/core/src/components/Tree/index.ts
index 223c0e88c2e..02f7549ff1d 100644
--- a/packages/@mantine/core/src/components/Tree/index.ts
+++ b/packages/@mantine/core/src/components/Tree/index.ts
@@ -1,5 +1,5 @@
export { Tree } from './Tree';
-export { useTree } from './use-tree';
+export { useTree, getTreeExpandedState } from './use-tree';
export type {
TreeCssVariables,
TreeFactory,
diff --git a/packages/@mantine/core/src/components/Tree/use-tree.ts b/packages/@mantine/core/src/components/Tree/use-tree.ts
index 136c712a0cd..816b180598a 100644
--- a/packages/@mantine/core/src/components/Tree/use-tree.ts
+++ b/packages/@mantine/core/src/components/Tree/use-tree.ts
@@ -3,14 +3,17 @@ import {
CheckedNodeStatus,
getAllCheckedNodes,
} from './get-all-checked-nodes/get-all-checked-nodes';
-import { getChildrenNodesValues } from './get-children-nodes-values/get-children-nodes-values';
+import {
+ getAllChildrenNodes,
+ getChildrenNodesValues,
+} from './get-children-nodes-values/get-children-nodes-values';
import { memoizedIsNodeChecked } from './is-node-checked/is-node-checked';
import { memoizedIsNodeIndeterminate } from './is-node-indeterminate/is-node-indeterminate';
import type { TreeNodeData } from './Tree';
export type TreeExpandedState = Record;
-function getInitialExpandedState(
+function getInitialTreeExpandedState(
initialState: TreeExpandedState,
data: TreeNodeData[],
value: string | string[] | undefined,
@@ -20,19 +23,33 @@ function getInitialExpandedState(
acc[node.value] = node.value in initialState ? initialState[node.value] : node.value === value;
if (Array.isArray(node.children)) {
- getInitialExpandedState(initialState, node.children, value, acc);
+ getInitialTreeExpandedState(initialState, node.children, value, acc);
}
});
return acc;
}
+export function getTreeExpandedState(data: TreeNodeData[], expandedNodesValues: string[] | '*') {
+ const state = getInitialTreeExpandedState({}, data, []);
+
+ if (expandedNodesValues === '*') {
+ return Object.keys(state).reduce((acc, key) => ({ ...acc, [key]: true }), {});
+ }
+
+ expandedNodesValues.forEach((node) => {
+ state[node] = true;
+ });
+
+ return state;
+}
+
function getInitialCheckedState(initialState: string[], data: TreeNodeData[]) {
const acc: string[] = [];
initialState.forEach((node) => acc.push(...getChildrenNodesValues(node, data)));
- return acc;
+ return Array.from(new Set(acc));
}
export interface UseTreeInput {
@@ -47,6 +64,12 @@ export interface UseTreeInput {
/** Determines whether multiple node can be selected at a time */
multiple?: boolean;
+
+ /** Called with the node value when it is expanded */
+ onNodeExpand?: (value: string) => void;
+
+ /** Called with the node value when it is collapsed */
+ onNodeCollapse?: (value: string) => void;
}
export interface UseTreeReturnType {
@@ -115,6 +138,15 @@ export interface UseTreeReturnType {
/** Unchecks node with provided value */
uncheckNode: (value: string) => void;
+ /** Checks all nodes */
+ checkAllNodes: () => void;
+
+ /** Unchecks all nodes */
+ uncheckAllNodes: () => void;
+
+ /** Sets checked state */
+ setCheckedState: React.Dispatch>;
+
/** Returns all checked nodes with status */
getCheckedNodes: () => CheckedNodeStatus[];
@@ -130,6 +162,8 @@ export function useTree({
initialCheckedState = [],
initialExpandedState = {},
multiple = false,
+ onNodeCollapse,
+ onNodeExpand,
}: UseTreeInput = {}): UseTreeReturnType {
const [data, setData] = useState([]);
const [expandedState, setExpandedState] = useState(initialExpandedState);
@@ -140,24 +174,49 @@ export function useTree({
const initialize = useCallback(
(_data: TreeNodeData[]) => {
- setExpandedState((current) => getInitialExpandedState(current, _data, selectedState));
+ setExpandedState((current) => getInitialTreeExpandedState(current, _data, selectedState));
setCheckedState((current) => getInitialCheckedState(current, _data));
setData(_data);
},
[selectedState, checkedState]
);
- const toggleExpanded = useCallback((value: string) => {
- setExpandedState((current) => ({ ...current, [value]: !current[value] }));
- }, []);
+ const toggleExpanded = useCallback(
+ (value: string) => {
+ setExpandedState((current) => {
+ const nextState = { ...current, [value]: !current[value] };
+ nextState[value] ? onNodeExpand?.(value) : onNodeCollapse?.(value);
+ return nextState;
+ });
+ },
+ [onNodeCollapse, onNodeExpand]
+ );
- const collapse = useCallback((value: string) => {
- setExpandedState((current) => ({ ...current, [value]: false }));
- }, []);
+ const collapse = useCallback(
+ (value: string) => {
+ setExpandedState((current) => {
+ if (current[value] !== false) {
+ onNodeCollapse?.(value);
+ }
- const expand = useCallback((value: string) => {
- setExpandedState((current) => ({ ...current, [value]: true }));
- }, []);
+ return { ...current, [value]: false };
+ });
+ },
+ [onNodeCollapse]
+ );
+
+ const expand = useCallback(
+ (value: string) => {
+ setExpandedState((current) => {
+ if (current[value] !== true) {
+ onNodeExpand?.(value);
+ }
+
+ return { ...current, [value]: true };
+ });
+ },
+ [onNodeExpand]
+ );
const expandAllNodes = useCallback(() => {
setExpandedState((current) => {
@@ -239,6 +298,14 @@ export function useTree({
[data]
);
+ const checkAllNodes = useCallback(() => {
+ setCheckedState(() => getAllChildrenNodes(data));
+ }, [data]);
+
+ const uncheckAllNodes = useCallback(() => {
+ setCheckedState([]);
+ }, []);
+
const getCheckedNodes = () => getAllCheckedNodes(data, checkedState).result;
const isNodeChecked = (value: string) => memoizedIsNodeChecked(value, data, checkedState);
const isNodeIndeterminate = (value: string) =>
@@ -258,8 +325,12 @@ export function useTree({
expandAllNodes,
collapseAllNodes,
setExpandedState,
+
checkNode,
uncheckNode,
+ checkAllNodes,
+ uncheckAllNodes,
+ setCheckedState,
toggleSelected,
select,
diff --git a/packages/@mantine/core/src/components/index.ts b/packages/@mantine/core/src/components/index.ts
index 8ee06b5d6b5..6b90a60210e 100644
--- a/packages/@mantine/core/src/components/index.ts
+++ b/packages/@mantine/core/src/components/index.ts
@@ -21,6 +21,7 @@ export * from './Accordion';
export * from './Affix';
export * from './Alert';
export * from './Anchor';
+export * from './AngleSlider';
export * from './AppShell';
export * from './AspectRatio';
export * from './Autocomplete';
diff --git a/packages/@mantine/core/src/core/utils/find-closest-number/find-closest-number.test.ts b/packages/@mantine/core/src/core/utils/find-closest-number/find-closest-number.test.ts
new file mode 100644
index 00000000000..2ccbf22b154
--- /dev/null
+++ b/packages/@mantine/core/src/core/utils/find-closest-number/find-closest-number.test.ts
@@ -0,0 +1,33 @@
+import { findClosestNumber } from './find-closest-number';
+
+describe('@mantine/core/find-closes-number', () => {
+ it('returns the exact number if it exists in the array', () => {
+ const result = findClosestNumber(5, [1, 3, 5, 7, 9]);
+ expect(result).toBe(5);
+ });
+
+ it('returns the closest number when the exact number does not exist', () => {
+ const result = findClosestNumber(6, [1, 3, 5, 7, 9]);
+ expect(result).toBe(5);
+ });
+
+ it('returns the smaller number when two numbers are equally close', () => {
+ const result = findClosestNumber(6, [1, 4, 8, 10]);
+ expect(result).toBe(4);
+ });
+
+ it('handles negative numbers correctly', () => {
+ const result = findClosestNumber(-2, [-10, -5, 0, 3, 5]);
+ expect(result).toBe(0);
+ });
+
+ it('returns the only number if the array contains just one number', () => {
+ const result = findClosestNumber(10, [7]);
+ expect(result).toBe(7);
+ });
+
+ it('returns value when the array is empty', () => {
+ const result = findClosestNumber(10, []);
+ expect(result).toBe(10);
+ });
+});
diff --git a/packages/@mantine/core/src/core/utils/find-closest-number/find-closest-number.ts b/packages/@mantine/core/src/core/utils/find-closest-number/find-closest-number.ts
new file mode 100644
index 00000000000..5dcf92fb5b6
--- /dev/null
+++ b/packages/@mantine/core/src/core/utils/find-closest-number/find-closest-number.ts
@@ -0,0 +1,9 @@
+export function findClosestNumber(value: number, numbers: number[]): number {
+ if (numbers.length === 0) {
+ return value;
+ }
+
+ return numbers.reduce((prev, curr) =>
+ Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev
+ );
+}
diff --git a/packages/@mantine/core/src/core/utils/index.ts b/packages/@mantine/core/src/core/utils/index.ts
index 079156598ee..d78f9e1f108 100644
--- a/packages/@mantine/core/src/core/utils/index.ts
+++ b/packages/@mantine/core/src/core/utils/index.ts
@@ -30,4 +30,5 @@ export { useHovered } from './use-hovered/use-hovered';
export { createUseExternalEvents } from './create-use-external-events/create-use-external-events';
export { getEnv } from './get-env/get-env';
export { memoize } from './memoize/memoize';
+export { findClosestNumber } from './find-closest-number/find-closest-number';
export { getRefProp } from './get-ref-prop/get-ref-prop';
diff --git a/packages/@mantine/dates/package.json b/packages/@mantine/dates/package.json
index 81bef14a53a..40549d37824 100644
--- a/packages/@mantine/dates/package.json
+++ b/packages/@mantine/dates/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/dates",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Calendars, date and time pickers based on Mantine components",
"homepage": "https://mantine.dev/dates/getting-started/",
"license": "MIT",
@@ -45,8 +45,8 @@
"directory": "packages/@mantine/dates"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"dayjs": ">=1.0.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
diff --git a/packages/@mantine/dropzone/package.json b/packages/@mantine/dropzone/package.json
index ea1c42af111..69cacd69c69 100644
--- a/packages/@mantine/dropzone/package.json
+++ b/packages/@mantine/dropzone/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/dropzone",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Dropzone component built with Mantine theme and components",
"homepage": "https://mantine.dev/x/dropzone/",
"license": "MIT",
@@ -44,8 +44,8 @@
"directory": "packages/@mantine/dropzone"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
},
diff --git a/packages/@mantine/emotion/package.json b/packages/@mantine/emotion/package.json
index 98793d7bb20..de1b79f90eb 100644
--- a/packages/@mantine/emotion/package.json
+++ b/packages/@mantine/emotion/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/emotion",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Emotion bindings for Mantine",
"homepage": "https://mantine.dev/",
"license": "MIT",
@@ -35,8 +35,8 @@
"@emotion/react": "^11.11.4",
"@emotion/serialize": "^1.1.4",
"@emotion/utils": "^1.2.1",
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
},
diff --git a/packages/@mantine/form/package.json b/packages/@mantine/form/package.json
index 144665d9b7b..d750dca3b42 100644
--- a/packages/@mantine/form/package.json
+++ b/packages/@mantine/form/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/form",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Mantine form management library",
"homepage": "https://mantine.dev",
"license": "MIT",
diff --git a/packages/@mantine/form/src/hooks/use-form-list/use-form-list.ts b/packages/@mantine/form/src/hooks/use-form-list/use-form-list.ts
index 1392252f44a..a34defbffff 100644
--- a/packages/@mantine/form/src/hooks/use-form-list/use-form-list.ts
+++ b/packages/@mantine/form/src/hooks/use-form-list/use-form-list.ts
@@ -1,7 +1,7 @@
import { useCallback } from 'react';
import { changeErrorIndices, reorderErrors } from '../../lists';
-import { insertPath, removePath, reorderPath } from '../../paths';
-import { InsertListItem, RemoveListItem, ReorderListItem } from '../../types';
+import { insertPath, removePath, reorderPath, replacePath } from '../../paths';
+import { InsertListItem, RemoveListItem, ReorderListItem, ReplaceListItem } from '../../types';
import type { $FormErrors } from '../use-form-errors/use-form-errors';
import type { $FormStatus } from '../use-form-status/use-form-status';
import type { $FormValues } from '../use-form-values/use-form-values';
@@ -44,5 +44,13 @@ export function useFormList>({
});
}, []);
- return { reorderListItem, removeListItem, insertListItem };
+ const replaceListItem: ReplaceListItem = useCallback((path, index, item) => {
+ $status.clearFieldDirty(path);
+ $values.setValues({
+ values: replacePath(path, item, index, $values.refValues.current),
+ updateState: true,
+ });
+ }, []);
+
+ return { reorderListItem, removeListItem, insertListItem, replaceListItem };
}
diff --git a/packages/@mantine/form/src/paths/index.ts b/packages/@mantine/form/src/paths/index.ts
index 57391835606..155a9cf7437 100644
--- a/packages/@mantine/form/src/paths/index.ts
+++ b/packages/@mantine/form/src/paths/index.ts
@@ -4,3 +4,4 @@ export { reorderPath } from './reorder-path';
export { insertPath } from './insert-path';
export { removePath } from './remove-path';
export { getDataPath } from './get-data-path';
+export { replacePath } from './replace-path';
diff --git a/packages/@mantine/form/src/paths/replace-path.test.ts b/packages/@mantine/form/src/paths/replace-path.test.ts
new file mode 100644
index 00000000000..04cd3180a6b
--- /dev/null
+++ b/packages/@mantine/form/src/paths/replace-path.test.ts
@@ -0,0 +1,17 @@
+import { replacePath } from './replace-path';
+
+describe('@mantine/form/replace-path', () => {
+ it('replaces item at specified index in array', () => {
+ expect(replacePath('field', 'new', 1, { field: ['old', 'old'] })).toEqual({
+ field: ['old', 'new'],
+ });
+ });
+
+ it('does nothing if path is not an array', () => {
+ expect(replacePath('field', 'new', 1, { field: 'old' })).toEqual({ field: 'old' });
+ });
+
+ it('does nothing if index is out of bounds', () => {
+ expect(replacePath('field', 'new', 2, { field: ['old'] })).toEqual({ field: ['old'] });
+ });
+});
diff --git a/packages/@mantine/form/src/paths/replace-path.ts b/packages/@mantine/form/src/paths/replace-path.ts
new file mode 100644
index 00000000000..a20fc53291d
--- /dev/null
+++ b/packages/@mantine/form/src/paths/replace-path.ts
@@ -0,0 +1,19 @@
+import { getPath } from './get-path';
+import { setPath } from './set-path';
+
+export function replacePath(path: unknown, item: unknown, index: number, values: T) {
+ const currentValue = getPath(path, values);
+
+ if (!Array.isArray(currentValue)) {
+ return values;
+ }
+
+ if (currentValue.length <= index) {
+ return values;
+ }
+
+ const cloned = [...currentValue];
+ cloned[index] = item;
+
+ return setPath(path, cloned, values);
+}
diff --git a/packages/@mantine/form/src/tests/use-form/replaceListItem.test.ts b/packages/@mantine/form/src/tests/use-form/replaceListItem.test.ts
new file mode 100644
index 00000000000..6532bd8f36f
--- /dev/null
+++ b/packages/@mantine/form/src/tests/use-form/replaceListItem.test.ts
@@ -0,0 +1,22 @@
+import { act, renderHook } from '@testing-library/react';
+import { FormMode } from '../../types';
+import { useForm } from '../../use-form';
+
+function tests(mode: FormMode) {
+ it('replaces items at given list', () => {
+ const hook = renderHook(() =>
+ useForm({ mode, initialValues: { a: [{ b: 1 }, { b: 2 }, { b: 3 }] } })
+ );
+
+ act(() => hook.result.current.replaceListItem('a', 0, { b: 100 }));
+ expect(hook.result.current.getValues()).toStrictEqual({ a: [{ b: 100 }, { b: 2 }, { b: 3 }] });
+ });
+}
+
+describe('@mantine/form/replaceListItem-controlled', () => {
+ tests('controlled');
+});
+
+describe('@mantine/form/replaceListItem-uncontrolled', () => {
+ tests('uncontrolled');
+});
diff --git a/packages/@mantine/form/src/types.ts b/packages/@mantine/form/src/types.ts
index 1dc69c6e669..b8a8568e786 100644
--- a/packages/@mantine/form/src/types.ts
+++ b/packages/@mantine/form/src/types.ts
@@ -145,6 +145,12 @@ export type InsertListItem = >(
index?: number
) => void;
+export type ReplaceListItem = >(
+ path: Field,
+ index: number,
+ item: unknown
+) => void;
+
export type RemoveListItem = >(
path: Field,
index: number
@@ -222,6 +228,7 @@ export interface UseFormReturnType<
validateField: ValidateField;
reorderListItem: ReorderListItem;
removeListItem: RemoveListItem;
+ replaceListItem: ReplaceListItem;
insertListItem: InsertListItem;
getInputProps: GetInputProps;
onSubmit: OnSubmit;
diff --git a/packages/@mantine/form/src/use-form.ts b/packages/@mantine/form/src/use-form.ts
index 4f5e5f93b70..4d9e2b4b678 100644
--- a/packages/@mantine/form/src/use-form.ts
+++ b/packages/@mantine/form/src/use-form.ts
@@ -265,6 +265,7 @@ export function useForm<
reorderListItem: $list.reorderListItem,
insertListItem: $list.insertListItem,
removeListItem: $list.removeListItem,
+ replaceListItem: $list.replaceListItem,
reset,
validate,
diff --git a/packages/@mantine/hooks/package.json b/packages/@mantine/hooks/package.json
index 70703e8b980..daaa2f07dba 100644
--- a/packages/@mantine/hooks/package.json
+++ b/packages/@mantine/hooks/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/hooks",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "A collection of 50+ hooks for state and UI management",
"homepage": "https://mantine.dev",
"license": "MIT",
diff --git a/packages/@mantine/modals/package.json b/packages/@mantine/modals/package.json
index daa0aed5d8a..716f2f228a6 100644
--- a/packages/@mantine/modals/package.json
+++ b/packages/@mantine/modals/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/modals",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Modals manager based on Mantine components",
"homepage": "https://mantine.dev/x/modals/",
"license": "MIT",
@@ -39,8 +39,8 @@
"directory": "packages/@mantine/modals"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
},
diff --git a/packages/@mantine/notifications/package.json b/packages/@mantine/notifications/package.json
index 600c62ba174..85fc23fcc99 100644
--- a/packages/@mantine/notifications/package.json
+++ b/packages/@mantine/notifications/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/notifications",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Mantine notifications system",
"homepage": "https://mantine.dev",
"license": "MIT",
@@ -44,13 +44,13 @@
"directory": "packages/@mantine/notifications"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
},
"dependencies": {
- "@mantine/store": "7.13.5",
+ "@mantine/store": "7.14.0",
"react-transition-group": "4.4.5"
},
"devDependencies": {
diff --git a/packages/@mantine/nprogress/package.json b/packages/@mantine/nprogress/package.json
index 760c58a8ed7..0c7c19c1b38 100644
--- a/packages/@mantine/nprogress/package.json
+++ b/packages/@mantine/nprogress/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/nprogress",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Navigation progress bar",
"homepage": "https://mantine.dev/x/nprogress/",
"license": "MIT",
@@ -43,13 +43,13 @@
"directory": "packages/@mantine/nprogress"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
},
"dependencies": {
- "@mantine/store": "7.13.5"
+ "@mantine/store": "7.14.0"
},
"devDependencies": {
"@mantine-tests/core": "workspace:*",
diff --git a/packages/@mantine/spotlight/package.json b/packages/@mantine/spotlight/package.json
index f6b4340d280..6ae7374d848 100644
--- a/packages/@mantine/spotlight/package.json
+++ b/packages/@mantine/spotlight/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/spotlight",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Command center components for react and Mantine",
"homepage": "https://mantine.dev",
"license": "MIT",
@@ -41,13 +41,13 @@
"directory": "packages/@mantine/spotlight"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x"
},
"dependencies": {
- "@mantine/store": "7.13.5"
+ "@mantine/store": "7.14.0"
},
"devDependencies": {
"@mantine-tests/core": "workspace:*",
diff --git a/packages/@mantine/store/package.json b/packages/@mantine/store/package.json
index 55e145d0ea9..8ef61fafca8 100644
--- a/packages/@mantine/store/package.json
+++ b/packages/@mantine/store/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/store",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "A library to sync external React state updates",
"homepage": "https://mantine.dev",
"license": "MIT",
diff --git a/packages/@mantine/tiptap/package.json b/packages/@mantine/tiptap/package.json
index fe732489a4b..440eacfb59f 100644
--- a/packages/@mantine/tiptap/package.json
+++ b/packages/@mantine/tiptap/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/tiptap",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Rich text editor based on tiptap",
"homepage": "https://mantine.dev/x/tiptap",
"license": "MIT",
@@ -44,8 +44,8 @@
"directory": "packages/@mantine/tiptap"
},
"peerDependencies": {
- "@mantine/core": "7.13.5",
- "@mantine/hooks": "7.13.5",
+ "@mantine/core": "7.14.0",
+ "@mantine/hooks": "7.14.0",
"@tiptap/extension-link": ">=2.1.12",
"@tiptap/react": ">=2.1.12",
"react": "^18.x || ^19.x",
diff --git a/packages/@mantine/vanilla-extract/package.json b/packages/@mantine/vanilla-extract/package.json
index de4da39aa69..23b5c797dff 100644
--- a/packages/@mantine/vanilla-extract/package.json
+++ b/packages/@mantine/vanilla-extract/package.json
@@ -1,6 +1,6 @@
{
"name": "@mantine/vanilla-extract",
- "version": "7.13.5",
+ "version": "7.14.0",
"description": "Vanilla Extract integration for Mantine theme",
"homepage": "https://mantine.dev",
"license": "MIT",
@@ -35,6 +35,6 @@
"directory": "packages/@mantine/vanilla-extract"
},
"peerDependencies": {
- "@mantine/core": "7.13.5"
+ "@mantine/core": "7.14.0"
}
}
diff --git a/packages/@mantinex/mantine-meta/src/versions.ts b/packages/@mantinex/mantine-meta/src/versions.ts
index e79179364a8..9ab07f14072 100644
--- a/packages/@mantinex/mantine-meta/src/versions.ts
+++ b/packages/@mantinex/mantine-meta/src/versions.ts
@@ -12,6 +12,13 @@ export interface Version {
}
export const allVersions = [
+ {
+ version: '7.14.0',
+ date: 'November 12, 2024',
+ github: 'https://github.com/mantinedev/mantine/releases/tag/7.14.0',
+ link: 'https://mantine.dev/changelog/7-14-0',
+ patches: [],
+ },
{
version: '7.13.0',
date: 'September 26, 2024',
@@ -26,6 +33,18 @@ export const allVersions = [
version: '7.13.2',
date: 'October 3, 2024',
},
+ {
+ version: '7.13.3',
+ date: 'October 17, 2024',
+ },
+ {
+ version: '7.13.4',
+ date: 'October 23, 2024',
+ },
+ {
+ version: '7.13.5',
+ date: 'November 8, 2024',
+ },
],
},
{
diff --git a/packages/@mantinex/shiki/src/themes.ts b/packages/@mantinex/shiki/src/themes.ts
index 4ea1b9b236b..bdcfbaa6279 100644
--- a/packages/@mantinex/shiki/src/themes.ts
+++ b/packages/@mantinex/shiki/src/themes.ts
@@ -583,600 +583,657 @@ export const light = {
};
export const dark = {
+ type: 'dark',
colors: {
- 'activityBar.activeBorder': '#f78166',
- 'activityBar.background': '#0d1117',
- 'activityBar.border': '#30363d',
- 'activityBar.foreground': '#e6edf3',
- 'activityBar.inactiveForeground': '#7d8590',
- 'activityBarBadge.background': '#1f6feb',
- 'activityBarBadge.foreground': '#ffffff',
- 'badge.background': '#1f6feb',
- 'badge.foreground': '#ffffff',
- 'breadcrumb.activeSelectionForeground': '#7d8590',
- 'breadcrumb.focusForeground': '#e6edf3',
- 'breadcrumb.foreground': '#7d8590',
- 'breadcrumbPicker.background': '#161b22',
- 'button.background': '#238636',
- 'button.foreground': '#ffffff',
- 'button.hoverBackground': '#2ea043',
- 'button.secondaryBackground': '#282e33',
- 'button.secondaryForeground': '#c9d1d9',
- 'button.secondaryHoverBackground': '#30363d',
- 'checkbox.background': '#161b22',
- 'checkbox.border': '#30363d',
- 'debugConsole.errorForeground': '#ffa198',
- 'debugConsole.infoForeground': '#8b949e',
- 'debugConsole.sourceForeground': '#e3b341',
- 'debugConsole.warningForeground': '#d29922',
- 'debugConsoleInputIcon.foreground': '#bc8cff',
- 'debugIcon.breakpointForeground': '#f85149',
- 'debugTokenExpression.boolean': '#56d364',
- 'debugTokenExpression.error': '#ffa198',
- 'debugTokenExpression.name': '#79c0ff',
- 'debugTokenExpression.number': '#56d364',
- 'debugTokenExpression.string': '#a5d6ff',
- 'debugTokenExpression.value': '#a5d6ff',
- 'debugToolBar.background': '#161b22',
- descriptionForeground: '#7d8590',
- 'diffEditor.insertedLineBackground': '#23863626',
- 'diffEditor.insertedTextBackground': '#3fb9504d',
- 'diffEditor.removedLineBackground': '#da363326',
- 'diffEditor.removedTextBackground': '#ff7b724d',
- 'dropdown.background': '#161b22',
- 'dropdown.border': '#30363d',
- 'dropdown.foreground': '#e6edf3',
- 'dropdown.listBackground': '#161b22',
- 'editor.background': '#0d1117',
- 'editor.findMatchBackground': '#9e6a03',
- 'editor.findMatchHighlightBackground': '#f2cc6080',
- 'editor.focusedStackFrameHighlightBackground': '#2ea04366',
- 'editor.foldBackground': '#6e76811a',
- 'editor.foreground': '#e6edf3',
- 'editor.lineHighlightBackground': '#6e76811a',
- 'editor.linkedEditingBackground': '#2f81f712',
- 'editor.selectionHighlightBackground': '#3fb95040',
- 'editor.stackFrameHighlightBackground': '#bb800966',
- 'editor.wordHighlightBackground': '#6e768180',
- 'editor.wordHighlightBorder': '#6e768199',
- 'editor.wordHighlightStrongBackground': '#6e76814d',
- 'editor.wordHighlightStrongBorder': '#6e768199',
- 'editorBracketHighlight.foreground1': '#79c0ff',
- 'editorBracketHighlight.foreground2': '#56d364',
- 'editorBracketHighlight.foreground3': '#e3b341',
- 'editorBracketHighlight.foreground4': '#ffa198',
- 'editorBracketHighlight.foreground5': '#ff9bce',
- 'editorBracketHighlight.foreground6': '#d2a8ff',
- 'editorBracketHighlight.unexpectedBracket.foreground': '#7d8590',
- 'editorBracketMatch.background': '#3fb95040',
- 'editorBracketMatch.border': '#3fb95099',
- 'editorCursor.foreground': '#2f81f7',
- 'editorGroup.border': '#30363d',
- 'editorGroupHeader.tabsBackground': '#010409',
- 'editorGroupHeader.tabsBorder': '#30363d',
- 'editorGutter.addedBackground': '#2ea04366',
- 'editorGutter.deletedBackground': '#f8514966',
- 'editorGutter.modifiedBackground': '#bb800966',
- 'editorIndentGuide.activeBackground': '#e6edf33d',
- 'editorIndentGuide.background': '#e6edf31f',
- 'editorInlayHint.background': '#8b949e33',
- 'editorInlayHint.foreground': '#7d8590',
- 'editorInlayHint.paramBackground': '#8b949e33',
- 'editorInlayHint.paramForeground': '#7d8590',
- 'editorInlayHint.typeBackground': '#8b949e33',
- 'editorInlayHint.typeForeground': '#7d8590',
- 'editorLineNumber.activeForeground': '#e6edf3',
- 'editorLineNumber.foreground': '#6e7681',
- 'editorOverviewRuler.border': '#010409',
- 'editorWhitespace.foreground': '#484f58',
- 'editorWidget.background': '#161b22',
- errorForeground: '#f85149',
- focusBorder: '#1f6feb',
- foreground: '#e6edf3',
- 'gitDecoration.addedResourceForeground': '#3fb950',
- 'gitDecoration.conflictingResourceForeground': '#db6d28',
- 'gitDecoration.deletedResourceForeground': '#f85149',
- 'gitDecoration.ignoredResourceForeground': '#6e7681',
- 'gitDecoration.modifiedResourceForeground': '#d29922',
- 'gitDecoration.submoduleResourceForeground': '#7d8590',
- 'gitDecoration.untrackedResourceForeground': '#3fb950',
- 'icon.foreground': '#7d8590',
- 'input.background': '#0d1117',
- 'input.border': '#30363d',
- 'input.foreground': '#e6edf3',
- 'input.placeholderForeground': '#6e7681',
- 'keybindingLabel.foreground': '#e6edf3',
- 'list.activeSelectionBackground': '#6e768166',
- 'list.activeSelectionForeground': '#e6edf3',
- 'list.focusBackground': '#388bfd26',
- 'list.focusForeground': '#e6edf3',
- 'list.highlightForeground': '#2f81f7',
- 'list.hoverBackground': '#6e76811a',
- 'list.hoverForeground': '#e6edf3',
- 'list.inactiveFocusBackground': '#388bfd26',
- 'list.inactiveSelectionBackground': '#6e768166',
- 'list.inactiveSelectionForeground': '#e6edf3',
- 'minimapSlider.activeBackground': '#8b949e47',
- 'minimapSlider.background': '#8b949e33',
- 'minimapSlider.hoverBackground': '#8b949e3d',
- 'notificationCenterHeader.background': '#161b22',
- 'notificationCenterHeader.foreground': '#7d8590',
- 'notifications.background': '#161b22',
- 'notifications.border': '#30363d',
- 'notifications.foreground': '#e6edf3',
- 'notificationsErrorIcon.foreground': '#f85149',
- 'notificationsInfoIcon.foreground': '#2f81f7',
- 'notificationsWarningIcon.foreground': '#d29922',
- 'panel.background': '#010409',
- 'panel.border': '#30363d',
- 'panelInput.border': '#30363d',
- 'panelTitle.activeBorder': '#f78166',
- 'panelTitle.activeForeground': '#e6edf3',
- 'panelTitle.inactiveForeground': '#7d8590',
- 'peekViewEditor.background': '#6e76811a',
- 'peekViewEditor.matchHighlightBackground': '#bb800966',
- 'peekViewResult.background': '#0d1117',
- 'peekViewResult.matchHighlightBackground': '#bb800966',
- 'pickerGroup.border': '#30363d',
- 'pickerGroup.foreground': '#7d8590',
- 'progressBar.background': '#1f6feb',
- 'quickInput.background': '#161b22',
- 'quickInput.foreground': '#e6edf3',
- 'scrollbar.shadow': '#484f5833',
- 'scrollbarSlider.activeBackground': '#8b949e47',
- 'scrollbarSlider.background': '#8b949e33',
- 'scrollbarSlider.hoverBackground': '#8b949e3d',
- 'settings.headerForeground': '#e6edf3',
- 'settings.modifiedItemIndicator': '#bb800966',
- 'sideBar.background': '#010409',
- 'sideBar.border': '#30363d',
- 'sideBar.foreground': '#e6edf3',
- 'sideBarSectionHeader.background': '#010409',
- 'sideBarSectionHeader.border': '#30363d',
- 'sideBarSectionHeader.foreground': '#e6edf3',
- 'sideBarTitle.foreground': '#e6edf3',
- 'statusBar.background': '#0d1117',
- 'statusBar.border': '#30363d',
- 'statusBar.debuggingBackground': '#da3633',
- 'statusBar.debuggingForeground': '#ffffff',
- 'statusBar.focusBorder': '#1f6feb80',
- 'statusBar.foreground': '#7d8590',
- 'statusBar.noFolderBackground': '#0d1117',
- 'statusBarItem.activeBackground': '#e6edf31f',
- 'statusBarItem.focusBorder': '#1f6feb',
- 'statusBarItem.hoverBackground': '#e6edf314',
- 'statusBarItem.prominentBackground': '#6e768166',
- 'statusBarItem.remoteBackground': '#30363d',
- 'statusBarItem.remoteForeground': '#e6edf3',
- 'symbolIcon.arrayForeground': '#f0883e',
- 'symbolIcon.booleanForeground': '#58a6ff',
- 'symbolIcon.classForeground': '#f0883e',
- 'symbolIcon.colorForeground': '#79c0ff',
- 'symbolIcon.constantForeground': [
- '#aff5b4',
- '#7ee787',
- '#56d364',
- '#3fb950',
- '#2ea043',
- '#238636',
- '#196c2e',
- '#0f5323',
- '#033a16',
- '#04260f',
- ],
- 'symbolIcon.constructorForeground': '#d2a8ff',
- 'symbolIcon.enumeratorForeground': '#f0883e',
- 'symbolIcon.enumeratorMemberForeground': '#58a6ff',
- 'symbolIcon.eventForeground': '#6e7681',
- 'symbolIcon.fieldForeground': '#f0883e',
- 'symbolIcon.fileForeground': '#d29922',
- 'symbolIcon.folderForeground': '#d29922',
- 'symbolIcon.functionForeground': '#bc8cff',
- 'symbolIcon.interfaceForeground': '#f0883e',
- 'symbolIcon.keyForeground': '#58a6ff',
- 'symbolIcon.keywordForeground': '#ff7b72',
- 'symbolIcon.methodForeground': '#bc8cff',
- 'symbolIcon.moduleForeground': '#ff7b72',
- 'symbolIcon.namespaceForeground': '#ff7b72',
- 'symbolIcon.nullForeground': '#58a6ff',
- 'symbolIcon.numberForeground': '#3fb950',
- 'symbolIcon.objectForeground': '#f0883e',
- 'symbolIcon.operatorForeground': '#79c0ff',
- 'symbolIcon.packageForeground': '#f0883e',
- 'symbolIcon.propertyForeground': '#f0883e',
- 'symbolIcon.referenceForeground': '#58a6ff',
- 'symbolIcon.snippetForeground': '#58a6ff',
- 'symbolIcon.stringForeground': '#79c0ff',
- 'symbolIcon.structForeground': '#f0883e',
- 'symbolIcon.textForeground': '#79c0ff',
- 'symbolIcon.typeParameterForeground': '#79c0ff',
- 'symbolIcon.unitForeground': '#58a6ff',
- 'symbolIcon.variableForeground': '#f0883e',
- 'tab.activeBackground': '#0d1117',
- 'tab.activeBorder': '#0d1117',
- 'tab.activeBorderTop': '#f78166',
- 'tab.activeForeground': '#e6edf3',
- 'tab.border': '#30363d',
- 'tab.hoverBackground': '#0d1117',
- 'tab.inactiveBackground': '#010409',
- 'tab.inactiveForeground': '#7d8590',
- 'tab.unfocusedActiveBorder': '#0d1117',
- 'tab.unfocusedActiveBorderTop': '#30363d',
- 'tab.unfocusedHoverBackground': '#6e76811a',
- 'terminal.ansiBlack': '#484f58',
- 'terminal.ansiBlue': '#58a6ff',
- 'terminal.ansiBrightBlack': '#6e7681',
- 'terminal.ansiBrightBlue': '#79c0ff',
- 'terminal.ansiBrightCyan': '#56d4dd',
- 'terminal.ansiBrightGreen': '#56d364',
- 'terminal.ansiBrightMagenta': '#d2a8ff',
- 'terminal.ansiBrightRed': '#ffa198',
- 'terminal.ansiBrightWhite': '#ffffff',
- 'terminal.ansiBrightYellow': '#e3b341',
- 'terminal.ansiCyan': '#39c5cf',
- 'terminal.ansiGreen': '#3fb950',
- 'terminal.ansiMagenta': '#bc8cff',
- 'terminal.ansiRed': '#ff7b72',
- 'terminal.ansiWhite': '#b1bac4',
- 'terminal.ansiYellow': '#d29922',
- 'terminal.foreground': '#e6edf3',
- 'textBlockQuote.background': '#010409',
- 'textBlockQuote.border': '#30363d',
- 'textCodeBlock.background': '#6e768166',
- 'textLink.activeForeground': '#2f81f7',
- 'textLink.foreground': '#2f81f7',
- 'textPreformat.foreground': '#7d8590',
- 'textSeparator.foreground': '#21262d',
- 'titleBar.activeBackground': '#0d1117',
- 'titleBar.activeForeground': '#7d8590',
- 'titleBar.border': '#30363d',
- 'titleBar.inactiveBackground': '#010409',
- 'titleBar.inactiveForeground': '#7d8590',
- 'tree.indentGuidesStroke': '#21262d',
- 'welcomePage.buttonBackground': '#21262d',
- 'welcomePage.buttonHoverBackground': '#30363d',
+ 'dropdown.background': '#525252',
+ 'list.activeSelectionBackground': '#707070',
+ 'quickInputList.focusBackground': '#707070',
+ 'list.inactiveSelectionBackground': '#4e4e4e',
+ 'list.hoverBackground': '#444444',
+ 'list.highlightForeground': '#e58520',
+ 'button.background': '#565656',
+ 'editor.background': '#1e1e1e',
+ 'editor.foreground': '#c5c8c6',
+ 'editor.selectionBackground': '#676b7180',
+ 'minimap.selectionHighlight': '#676b7180',
+ 'editor.selectionHighlightBackground': '#575b6180',
+ 'editor.lineHighlightBackground': '#303030',
+ 'editorLineNumber.activeForeground': '#949494',
+ 'editor.wordHighlightBackground': '#4747a180',
+ 'editor.wordHighlightStrongBackground': '#6767ce80',
+ 'editorCursor.foreground': '#c07020',
+ 'editorWhitespace.foreground': '#505037',
+ 'editorIndentGuide.background': '#505037',
+ 'editorIndentGuide.activeBackground': '#707057',
+ 'editorGroupHeader.tabsBackground': '#282828',
+ 'tab.inactiveBackground': '#404040',
+ 'tab.border': '#303030',
+ 'tab.inactiveForeground': '#d8d8d8',
+ 'tab.lastPinnedBorder': '#505050',
+ 'peekView.border': '#3655b5',
+ 'panelTitle.activeForeground': '#ffffff',
+ 'statusBar.background': '#505050',
+ 'statusBar.debuggingBackground': '#505050',
+ 'statusBar.noFolderBackground': '#505050',
+ 'titleBar.activeBackground': '#505050',
+ 'statusBarItem.remoteBackground': '#3655b5',
+ 'ports.iconRunningProcessForeground': '#CCCCCC',
+ 'activityBar.background': '#353535',
+ 'activityBar.foreground': '#ffffff',
+ 'activityBarBadge.background': '#3655b5',
+ 'sideBar.background': '#272727',
+ 'sideBarSectionHeader.background': '#505050',
+ 'menu.background': '#272727',
+ 'menu.foreground': '#CCCCCC',
+ 'pickerGroup.foreground': '#b0b0b0',
+ 'inputOption.activeBorder': '#3655b5',
+ focusBorder: '#3655b5',
+ 'terminal.ansiBlack': '#1e1e1e',
+ 'terminal.ansiRed': '#C4265E', // the bright color with ~75% transparent on the background
+ 'terminal.ansiGreen': '#86B42B',
+ 'terminal.ansiYellow': '#B3B42B',
+ 'terminal.ansiBlue': '#6A7EC8',
+ 'terminal.ansiMagenta': '#8C6BC8',
+ 'terminal.ansiCyan': '#56ADBC',
+ 'terminal.ansiWhite': '#e3e3dd',
+ 'terminal.ansiBrightBlack': '#666666',
+ 'terminal.ansiBrightRed': '#f92672',
+ 'terminal.ansiBrightGreen': '#A6E22E',
+ 'terminal.ansiBrightYellow': '#e2e22e', // hue shifted #A6E22E
+ 'terminal.ansiBrightBlue': '#819aff', // hue shifted #AE81FF
+ 'terminal.ansiBrightMagenta': '#AE81FF',
+ 'terminal.ansiBrightCyan': '#66D9EF',
+ 'terminal.ansiBrightWhite': '#f8f8f2',
+ 'terminal.inactiveSelectionBackground': '#676b7140',
},
- displayName: 'GitHub Dark Default',
- semanticHighlighting: true,
tokenColors: [
{
- scope: ['comment', 'punctuation.definition.comment', 'string.comment'],
settings: {
- foreground: '#8b949e',
+ foreground: '#C5C8C6',
},
},
{
- scope: ['constant.other.placeholder', 'constant.character'],
+ scope: ['meta.embedded', 'source.groovy.embedded', 'variable.legacy.builtin.python'],
settings: {
- foreground: '#ff7b72',
+ foreground: '#C5C8C6',
},
},
{
- scope: [
- 'constant',
- 'entity.name.constant',
- 'variable.other.constant',
- 'variable.other.enummember',
- 'variable.language',
- 'entity',
- ],
+ name: 'Comment',
+ scope: 'comment',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#9A9B99',
},
},
{
- scope: ['entity.name', 'meta.export.default', 'meta.definition.variable'],
+ name: 'String',
+ scope: 'string',
settings: {
- foreground: '#ffa657',
+ fontStyle: '',
+ foreground: '#9AA83A',
},
},
{
- scope: [
- 'variable.parameter.function',
- 'meta.jsx.children',
- 'meta.block',
- 'meta.tag.attributes',
- 'entity.name.constant',
- 'meta.object.member',
- 'meta.embedded.expression',
- ],
+ name: 'String Embedded Source',
+ scope: 'string source',
settings: {
- foreground: '#e6edf3',
+ fontStyle: '',
+ foreground: '#D08442',
},
},
{
- scope: 'entity.name.function',
+ name: 'Number',
+ scope: 'constant.numeric',
settings: {
- foreground: '#d2a8ff',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: ['entity.name.tag', 'support.class.component'],
+ name: 'Built-in constant',
+ scope: 'constant.language',
settings: {
- foreground: '#7ee787',
+ fontStyle: '',
+ foreground: '#408080',
},
},
{
+ name: 'User-defined constant',
+ scope: 'constant.character, constant.other',
+ settings: {
+ fontStyle: '',
+ foreground: '#8080FF',
+ },
+ },
+ {
+ name: 'Keyword',
scope: 'keyword',
settings: {
- foreground: '#ff7b72',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: ['storage', 'storage.type'],
+ name: 'Support',
+ scope: 'support',
settings: {
- foreground: '#ff7b72',
+ fontStyle: '',
+ foreground: '#C7444A',
},
},
{
- scope: ['storage.modifier.package', 'storage.modifier.import', 'storage.type.java'],
+ name: 'Storage',
+ scope: 'storage',
settings: {
- foreground: '#e6edf3',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
- scope: ['string', 'string punctuation.section.embedded source'],
+ name: 'Class name',
+ scope:
+ 'entity.name.class, entity.name.type, entity.name.namespace, entity.name.scope-resolution',
settings: {
- foreground: '#a5d6ff',
+ fontStyle: '',
+ foreground: '#9B0000',
},
},
{
- scope: 'support',
+ name: 'Inherited class',
+ scope: 'entity.other.inherited-class',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#C7444A',
},
},
{
- scope: 'meta.property-name',
+ name: 'Function name',
+ scope: 'entity.name.function',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#CE6700',
},
},
{
- scope: 'variable',
+ name: 'Function argument',
+ scope: 'variable.parameter',
settings: {
- foreground: '#ffa657',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: 'variable.other',
+ name: 'Tag name',
+ scope: 'entity.name.tag',
settings: {
- foreground: '#e6edf3',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
- scope: 'invalid.broken',
+ name: 'Tag attribute',
+ scope: 'entity.other.attribute-name',
settings: {
- fontStyle: 'italic',
- foreground: '#ffa198',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
- scope: 'invalid.deprecated',
+ name: 'Library function',
+ scope: 'support.function',
settings: {
- fontStyle: 'italic',
- foreground: '#ffa198',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
- scope: 'invalid.illegal',
+ name: 'Keyword',
+ scope: 'keyword',
settings: {
- fontStyle: 'italic',
- foreground: '#ffa198',
+ fontStyle: '',
+ foreground: '#676867',
},
},
{
- scope: 'invalid.unimplemented',
+ name: 'Class Variable',
+ scope: 'variable.other, variable.js, punctuation.separator.variable',
settings: {
- fontStyle: 'italic',
- foreground: '#ffa198',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: 'carriage-return',
+ name: 'Meta Brace',
+ scope:
+ 'punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html',
settings: {
- background: '#ff7b72',
- content: '^M',
- fontStyle: 'italic underline',
- foreground: '#f0f6fc',
+ fontStyle: '',
+ foreground: '#008200',
},
},
{
- scope: 'message.error',
+ name: 'Invalid',
+ scope: 'invalid',
settings: {
- foreground: '#ffa198',
+ fontStyle: '',
+ foreground: '#FF0B00',
},
},
{
- scope: 'string variable',
+ name: 'Normal Variable',
+ scope: 'variable.other.php, variable.other.normal',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: ['source.regexp', 'string.regexp'],
+ name: 'Function Object',
+ scope: 'meta.function-call.object',
settings: {
- foreground: '#a5d6ff',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
+ name: 'Function Call Variable',
+ scope: 'variable.other.property',
+ settings: {
+ fontStyle: '',
+ foreground: '#9872A2',
+ },
+ },
+ {
+ name: 'Keyword Control / Special',
scope: [
- 'string.regexp.character-class',
- 'string.regexp constant.character.escape',
- 'string.regexp source.ruby.embedded',
- 'string.regexp string.regexp.arbitrary-repitition',
+ 'keyword.control',
+ 'keyword.operator.new.cpp',
+ 'keyword.operator.delete.cpp',
+ 'keyword.other.using',
+ 'keyword.other.directive.using',
+ 'keyword.other.operator',
],
settings: {
- foreground: '#a5d6ff',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
- scope: 'string.regexp constant.character.escape',
+ name: 'Tag',
+ scope: 'meta.tag',
settings: {
- fontStyle: 'bold',
- foreground: '#7ee787',
+ fontStyle: '',
+ foreground: '#D0B344',
},
},
{
- scope: 'support.constant',
+ name: 'Tag Name',
+ scope: 'entity.name.tag',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: 'support.variable',
+ name: 'Doctype',
+ scope: 'meta.doctype, meta.tag.sgml-declaration.doctype, meta.tag.sgml.doctype',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#9AA83A',
},
},
{
- scope: 'support.type.property-name.json',
+ name: 'Tag Inline Source',
+ scope: 'meta.tag.inline source, text.html.php.source',
settings: {
- foreground: '#7ee787',
+ fontStyle: '',
+ foreground: '#9AA83A',
},
},
{
- scope: 'meta.module-reference',
+ name: 'Tag Other',
+ scope:
+ 'meta.tag.other, entity.name.tag.style, entity.name.tag.script, meta.tag.block.script, source.js.embedded punctuation.definition.tag.html, source.css.embedded punctuation.definition.tag.html',
settings: {
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#9872A2',
},
},
{
- scope: 'punctuation.definition.list.begin.markdown',
+ name: 'Tag Attribute',
+ scope: 'entity.other.attribute-name, meta.tag punctuation.definition.string',
settings: {
- foreground: '#ffa657',
+ fontStyle: '',
+ foreground: '#D0B344',
},
},
{
- scope: ['markup.heading', 'markup.heading entity.name'],
+ name: 'Tag Value',
+ scope: 'meta.tag string -source -punctuation, text source text meta.tag string -punctuation',
settings: {
- fontStyle: 'bold',
- foreground: '#79c0ff',
+ fontStyle: '',
+ foreground: '#6089B4',
},
},
{
- scope: 'markup.quote',
+ name: 'Meta Brace',
+ scope:
+ 'punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html',
settings: {
- foreground: '#7ee787',
+ fontStyle: '',
+ foreground: '#D0B344',
},
},
{
- scope: 'markup.italic',
+ name: 'HTML ID',
+ scope: 'meta.toc-list.id',
+ settings: {
+ foreground: '#9AA83A',
+ },
+ },
+ {
+ name: 'HTML String',
+ scope:
+ 'string.quoted.double.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html, punctuation.definition.string.end.html source, string.quoted.double.html source',
+ settings: {
+ fontStyle: '',
+ foreground: '#9AA83A',
+ },
+ },
+ {
+ name: 'HTML Tags',
+ scope:
+ 'punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end',
+ settings: {
+ fontStyle: '',
+ foreground: '#6089B4',
+ },
+ },
+ {
+ name: 'CSS ID',
+ scope: 'meta.selector entity.other.attribute-name.id',
+ settings: {
+ fontStyle: '',
+ foreground: '#9872A2',
+ },
+ },
+ {
+ name: 'CSS Property Name',
+ scope: 'source.css support.type.property-name',
+ settings: {
+ fontStyle: '',
+ foreground: '#676867',
+ },
+ },
+ {
+ name: 'CSS Property Value',
+ scope:
+ 'meta.property-group support.constant.property-value, meta.property-value support.constant.property-value',
+ settings: {
+ fontStyle: '',
+ foreground: '#C7444A',
+ },
+ },
+ {
+ name: 'JavaScript Variable',
+ scope: 'variable.language.js',
+ settings: {
+ foreground: '#CC555A',
+ },
+ },
+ {
+ name: 'Template Definition',
+ scope: ['punctuation.definition.template-expression', 'punctuation.section.embedded.coffee'],
+ settings: {
+ foreground: '#D08442',
+ },
+ },
+ {
+ name: 'Reset JavaScript string interpolation expression',
+ scope: ['meta.template.expression'],
+ settings: {
+ foreground: '#C5C8C6',
+ },
+ },
+ {
+ name: 'PHP Function Call',
+ scope: 'meta.function-call.object.php',
+ settings: {
+ fontStyle: '',
+ foreground: '#D0B344',
+ },
+ },
+ {
+ name: 'PHP Single Quote HMTL Fix',
+ scope: 'punctuation.definition.string.end.php, punctuation.definition.string.begin.php',
+ settings: {
+ foreground: '#9AA83A',
+ },
+ },
+ {
+ name: 'PHP Parenthesis HMTL Fix',
+ scope: 'source.php.embedded.line.html',
+ settings: {
+ foreground: '#676867',
+ },
+ },
+ {
+ name: 'PHP Punctuation Embedded',
+ scope: 'punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php',
+ settings: {
+ fontStyle: '',
+ foreground: '#D08442',
+ },
+ },
+ {
+ name: 'Ruby Symbol',
+ scope: 'constant.other.symbol.ruby',
+ settings: {
+ fontStyle: '',
+ foreground: '#9AA83A',
+ },
+ },
+ {
+ name: 'Ruby Variable',
+ scope: 'variable.language.ruby',
+ settings: {
+ fontStyle: '',
+ foreground: '#D0B344',
+ },
+ },
+ {
+ name: 'Ruby Special Method',
+ scope: 'keyword.other.special-method.ruby',
+ settings: {
+ fontStyle: '',
+ foreground: '#D9B700',
+ },
+ },
+ {
+ name: 'Ruby Embedded Source',
+ scope: ['punctuation.section.embedded.begin.ruby', 'punctuation.section.embedded.end.ruby'],
+ settings: {
+ foreground: '#D08442',
+ },
+ },
+ {
+ name: 'SQL',
+ scope: 'keyword.other.DML.sql',
+ settings: {
+ fontStyle: '',
+ foreground: '#D0B344',
+ },
+ },
+ {
+ name: 'diff: header',
+ scope: 'meta.diff, meta.diff.header',
settings: {
fontStyle: 'italic',
- foreground: '#e6edf3',
+ foreground: '#E0EDDD',
},
},
{
- scope: 'markup.bold',
+ name: 'diff: deleted',
+ scope: 'markup.deleted',
settings: {
- fontStyle: 'bold',
- foreground: '#e6edf3',
+ fontStyle: '',
+ foreground: '#dc322f',
},
},
{
- scope: ['markup.underline'],
+ name: 'diff: changed',
+ scope: 'markup.changed',
settings: {
- fontStyle: 'underline',
+ fontStyle: '',
+ foreground: '#cb4b16',
},
},
{
- scope: ['markup.strikethrough'],
+ name: 'diff: inserted',
+ scope: 'markup.inserted',
settings: {
- fontStyle: 'strikethrough',
+ foreground: '#219186',
},
},
{
- scope: 'markup.inline.raw',
+ name: 'Markup Quote',
+ scope: 'markup.quote',
settings: {
- foreground: '#79c0ff',
+ foreground: '#9872A2',
},
},
{
- scope: ['markup.deleted', 'meta.diff.header.from-file', 'punctuation.definition.deleted'],
+ name: 'Markup Lists',
+ scope: 'markup.list',
settings: {
- background: '#490202',
- foreground: '#ffa198',
+ foreground: '#9AA83A',
},
},
{
- scope: ['punctuation.section.embedded'],
+ name: 'Markup Styling',
+ scope: 'markup.bold, markup.italic',
settings: {
- foreground: '#ff7b72',
+ foreground: '#6089B4',
},
},
{
- scope: ['markup.inserted', 'meta.diff.header.to-file', 'punctuation.definition.inserted'],
+ name: 'Markup Inline',
+ scope: 'markup.inline.raw',
settings: {
- background: '#04260f',
- foreground: '#7ee787',
+ fontStyle: '',
+ foreground: '#FF0080',
},
},
{
- scope: ['markup.changed', 'punctuation.definition.changed'],
+ name: 'Markup Headings',
+ scope: 'markup.heading',
settings: {
- background: '#5a1e02',
- foreground: '#ffa657',
+ foreground: '#D0B344',
},
},
{
- scope: ['markup.ignored', 'markup.untracked'],
+ name: 'Markup Setext Header',
+ scope: 'markup.heading.setext',
settings: {
- background: '#79c0ff',
- foreground: '#161b22',
+ fontStyle: '',
+ foreground: '#D0B344',
},
},
{
- scope: 'meta.diff.range',
+ name: 'Markdown Headings',
+ scope: 'markup.heading.markdown',
settings: {
fontStyle: 'bold',
- foreground: '#d2a8ff',
},
},
{
- scope: 'meta.diff.header',
+ name: 'Markdown Quote',
+ scope: 'markup.quote.markdown',
settings: {
- foreground: '#79c0ff',
+ fontStyle: 'italic',
+ foreground: '',
},
},
{
- scope: 'meta.separator',
+ name: 'Markdown Bold',
+ scope: 'markup.bold.markdown',
settings: {
fontStyle: 'bold',
- foreground: '#79c0ff',
},
},
{
- scope: 'meta.output',
+ name: 'Markdown Link Title/Description',
+ scope: 'string.other.link.title.markdown,string.other.link.description.markdown',
settings: {
- foreground: '#79c0ff',
+ foreground: '#AE81FF',
},
},
{
- scope: [
- 'brackethighlighter.tag',
- 'brackethighlighter.curly',
- 'brackethighlighter.round',
- 'brackethighlighter.square',
- 'brackethighlighter.angle',
- 'brackethighlighter.quote',
- ],
+ name: 'Markdown Underline Link/Image',
+ scope: 'markup.underline.link.markdown,markup.underline.link.image.markdown',
settings: {
- foreground: '#8b949e',
+ foreground: '',
},
},
{
- scope: 'brackethighlighter.unmatched',
+ name: 'Markdown Emphasis',
+ scope: 'markup.italic.markdown',
settings: {
- foreground: '#ffa198',
+ fontStyle: 'italic',
},
},
{
- scope: ['constant.other.reference.link', 'string.other.link'],
+ scope: 'markup.strikethrough',
+ settings: {
+ fontStyle: 'strikethrough',
+ },
+ },
+ {
+ name: 'Markdown Punctuation Definition Link',
+ scope: 'markup.list.unnumbered.markdown, markup.list.numbered.markdown',
settings: {
- foreground: '#a5d6ff',
+ foreground: '',
+ },
+ },
+ {
+ name: 'Markdown List Punctuation',
+ scope: ['punctuation.definition.list.begin.markdown'],
+ settings: {
+ foreground: '',
+ },
+ },
+ {
+ scope: 'token.info-token',
+ settings: {
+ foreground: '#6796e6',
+ },
+ },
+ {
+ scope: 'token.warn-token',
+ settings: {
+ foreground: '#cd9731',
+ },
+ },
+ {
+ scope: 'token.error-token',
+ settings: {
+ foreground: '#f44747',
+ },
+ },
+ {
+ scope: 'token.debug-token',
+ settings: {
+ foreground: '#b267e6',
+ },
+ },
+ {
+ name: 'this.self',
+ scope: 'variable.language',
+ settings: {
+ foreground: '#c7444a',
},
},
],
- type: 'dark',
+ semanticHighlighting: true,
};
diff --git a/scripts/docs/format-changelogs.ts b/scripts/docs/format-changelogs.ts
index fd252eb8f0a..c5e0525641b 100644
--- a/scripts/docs/format-changelogs.ts
+++ b/scripts/docs/format-changelogs.ts
@@ -8,6 +8,11 @@ const files = fs.readdirSync(changelogFolder).filter((file) => file.endsWith('.m
files.forEach((file) => {
const content = fs.readFileSync(path.join(changelogFolder, file), 'utf8');
+
+ if (content.includes(' component`);
+ }
+
const replacedLinks = content.replaceAll('](/', '](https://mantine.dev/');
fs.writeFileSync(path.join(changelogFolder, file), replacedLinks);
});
diff --git a/yarn.lock b/yarn.lock
index 01aba1af1cb..896e53a574c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4037,8 +4037,8 @@ __metadata:
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
embla-carousel-react: ">=7.0.0"
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
@@ -4053,8 +4053,8 @@ __metadata:
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
recharts: ^2.13.3
@@ -4071,8 +4071,8 @@ __metadata:
clsx: "npm:^2.1.1"
highlight.js: "npm:^11.10.0"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4099,7 +4099,7 @@ __metadata:
react-textarea-autosize: "npm:8.5.4"
type-fest: "npm:^4.26.1"
peerDependencies:
- "@mantine/hooks": 7.13.5
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4115,8 +4115,8 @@ __metadata:
"@mantine/hooks": "workspace:*"
clsx: "npm:^2.1.1"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
dayjs: ">=1.0.0"
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
@@ -4132,8 +4132,8 @@ __metadata:
"@mantine/hooks": "workspace:*"
react-dropzone-esm: "npm:15.0.1"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4152,8 +4152,8 @@ __metadata:
"@emotion/react": ^11.11.4
"@emotion/serialize": ^1.1.4
"@emotion/utils": ^1.2.1
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4185,8 +4185,8 @@ __metadata:
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4199,11 +4199,11 @@ __metadata:
"@mantine-tests/core": "workspace:*"
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
- "@mantine/store": "npm:7.13.5"
+ "@mantine/store": "npm:7.14.0"
react-transition-group: "npm:4.4.5"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4216,10 +4216,10 @@ __metadata:
"@mantine-tests/core": "workspace:*"
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
- "@mantine/store": "npm:7.13.5"
+ "@mantine/store": "npm:7.14.0"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
@@ -4232,16 +4232,16 @@ __metadata:
"@mantine-tests/core": "workspace:*"
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
- "@mantine/store": "npm:7.13.5"
+ "@mantine/store": "npm:7.14.0"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
languageName: unknown
linkType: soft
-"@mantine/store@npm:7.13.5, @mantine/store@workspace:*, @mantine/store@workspace:packages/@mantine/store":
+"@mantine/store@npm:7.14.0, @mantine/store@workspace:*, @mantine/store@workspace:packages/@mantine/store":
version: 0.0.0-use.local
resolution: "@mantine/store@workspace:packages/@mantine/store"
peerDependencies:
@@ -4257,8 +4257,8 @@ __metadata:
"@mantine/core": "workspace:*"
"@mantine/hooks": "workspace:*"
peerDependencies:
- "@mantine/core": 7.13.5
- "@mantine/hooks": 7.13.5
+ "@mantine/core": 7.14.0
+ "@mantine/hooks": 7.14.0
"@tiptap/extension-link": ">=2.1.12"
"@tiptap/react": ">=2.1.12"
react: ^18.x || ^19.x
@@ -4270,7 +4270,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@mantine/vanilla-extract@workspace:packages/@mantine/vanilla-extract"
peerDependencies:
- "@mantine/core": 7.13.5
+ "@mantine/core": 7.14.0
languageName: unknown
linkType: soft
@@ -16950,11 +16950,11 @@ __metadata:
linkType: hard
"npm-run-path@npm:^5.1.0":
- version: 5.3.0
- resolution: "npm-run-path@npm:5.3.0"
+ version: 5.1.0
+ resolution: "npm-run-path@npm:5.1.0"
dependencies:
path-key: "npm:^4.0.0"
- checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba
+ checksum: 10c0/ff6d77514489f47fa1c3b1311d09cd4b6d09a874cc1866260f9dea12cbaabda0436ed7f8c2ee44d147bf99a3af29307c6f63b0f83d242b0b6b0ab25dff2629e3
languageName: node
linkType: hard