@mantine/core 9.0.1 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/cjs/components/Blockquote/Blockquote.cjs +5 -6
  2. package/cjs/components/Blockquote/Blockquote.cjs.map +1 -1
  3. package/cjs/components/Flex/Flex.cjs +7 -2
  4. package/cjs/components/Flex/Flex.cjs.map +1 -1
  5. package/cjs/components/FloatingIndicator/FloatingIndicator.cjs +1 -2
  6. package/cjs/components/FloatingIndicator/FloatingIndicator.cjs.map +1 -1
  7. package/cjs/components/MaskInput/MaskInput.cjs +24 -0
  8. package/cjs/components/MaskInput/MaskInput.cjs.map +1 -0
  9. package/cjs/components/MaskInput/use-mask-input-props.cjs +29 -0
  10. package/cjs/components/MaskInput/use-mask-input-props.cjs.map +1 -0
  11. package/cjs/components/Rating/Rating.cjs +1 -2
  12. package/cjs/components/Rating/Rating.cjs.map +1 -1
  13. package/cjs/components/SemiCircleProgress/SemiCircleProgress.cjs +2 -0
  14. package/cjs/components/SemiCircleProgress/SemiCircleProgress.cjs.map +1 -1
  15. package/cjs/components/Slider/Marks/Marks.cjs +3 -2
  16. package/cjs/components/Slider/Marks/Marks.cjs.map +1 -1
  17. package/cjs/components/Slider/Marks/is-mark-filled.cjs +2 -1
  18. package/cjs/components/Slider/Marks/is-mark-filled.cjs.map +1 -1
  19. package/cjs/components/Slider/Slider/Slider.cjs +12 -3
  20. package/cjs/components/Slider/Slider/Slider.cjs.map +1 -1
  21. package/cjs/components/Slider/Track/Track.cjs +3 -2
  22. package/cjs/components/Slider/Track/Track.cjs.map +1 -1
  23. package/cjs/components/Tabs/Tabs.cjs +3 -1
  24. package/cjs/components/Tabs/Tabs.cjs.map +1 -1
  25. package/cjs/components/Tabs/Tabs.context.cjs.map +1 -1
  26. package/cjs/components/Tabs/TabsPanel/TabsPanel.cjs +2 -1
  27. package/cjs/components/Tabs/TabsPanel/TabsPanel.cjs.map +1 -1
  28. package/cjs/components/Textarea/Autosize.cjs +1 -0
  29. package/cjs/components/Textarea/Autosize.cjs.map +1 -1
  30. package/cjs/components/Tree/FlatTreeNode.cjs +102 -0
  31. package/cjs/components/Tree/FlatTreeNode.cjs.map +1 -0
  32. package/cjs/components/Tree/Tree.cjs +10 -2
  33. package/cjs/components/Tree/Tree.cjs.map +1 -1
  34. package/cjs/components/Tree/Tree.module.cjs.map +1 -1
  35. package/cjs/components/Tree/TreeNode.cjs +65 -27
  36. package/cjs/components/Tree/TreeNode.cjs.map +1 -1
  37. package/cjs/components/Tree/filter-tree-data/filter-tree-data.cjs +23 -0
  38. package/cjs/components/Tree/filter-tree-data/filter-tree-data.cjs.map +1 -0
  39. package/cjs/components/Tree/flatten-tree-data/flatten-tree-data.cjs +28 -0
  40. package/cjs/components/Tree/flatten-tree-data/flatten-tree-data.cjs.map +1 -0
  41. package/cjs/components/Tree/get-children-nodes-values/get-children-nodes-values.cjs +1 -0
  42. package/cjs/components/Tree/merge-async-children/merge-async-children.cjs +32 -0
  43. package/cjs/components/Tree/merge-async-children/merge-async-children.cjs.map +1 -0
  44. package/cjs/components/Tree/move-tree-node/move-tree-node.cjs +78 -0
  45. package/cjs/components/Tree/move-tree-node/move-tree-node.cjs.map +1 -0
  46. package/cjs/components/Tree/use-tree-node-drag-drop.cjs +96 -0
  47. package/cjs/components/Tree/use-tree-node-drag-drop.cjs.map +1 -0
  48. package/cjs/components/Tree/use-tree.cjs +176 -26
  49. package/cjs/components/Tree/use-tree.cjs.map +1 -1
  50. package/cjs/core/Box/Box.cjs +6 -2
  51. package/cjs/core/Box/Box.cjs.map +1 -1
  52. package/cjs/core/InlineStyles/InlineStyles.cjs +14 -2
  53. package/cjs/core/InlineStyles/InlineStyles.cjs.map +1 -1
  54. package/cjs/core/InlineStyles/hash-styles.cjs +15 -0
  55. package/cjs/core/InlineStyles/hash-styles.cjs.map +1 -0
  56. package/cjs/core/MantineProvider/Mantine.context.cjs +4 -0
  57. package/cjs/core/MantineProvider/Mantine.context.cjs.map +1 -1
  58. package/cjs/core/MantineProvider/MantineProvider.cjs +3 -2
  59. package/cjs/core/MantineProvider/MantineProvider.cjs.map +1 -1
  60. package/cjs/core/MantineProvider/color-functions/default-variant-colors-resolver/default-variant-colors-resolver.cjs +3 -4
  61. package/cjs/core/MantineProvider/color-functions/default-variant-colors-resolver/default-variant-colors-resolver.cjs.map +1 -1
  62. package/cjs/index.cjs +16 -0
  63. package/esm/components/Blockquote/Blockquote.mjs +5 -6
  64. package/esm/components/Blockquote/Blockquote.mjs.map +1 -1
  65. package/esm/components/Flex/Flex.mjs +7 -2
  66. package/esm/components/Flex/Flex.mjs.map +1 -1
  67. package/esm/components/FloatingIndicator/FloatingIndicator.mjs +1 -2
  68. package/esm/components/FloatingIndicator/FloatingIndicator.mjs.map +1 -1
  69. package/esm/components/MaskInput/MaskInput.mjs +23 -0
  70. package/esm/components/MaskInput/MaskInput.mjs.map +1 -0
  71. package/esm/components/MaskInput/use-mask-input-props.mjs +28 -0
  72. package/esm/components/MaskInput/use-mask-input-props.mjs.map +1 -0
  73. package/esm/components/Rating/Rating.mjs +1 -2
  74. package/esm/components/Rating/Rating.mjs.map +1 -1
  75. package/esm/components/SemiCircleProgress/SemiCircleProgress.mjs +2 -0
  76. package/esm/components/SemiCircleProgress/SemiCircleProgress.mjs.map +1 -1
  77. package/esm/components/Slider/Marks/Marks.mjs +3 -2
  78. package/esm/components/Slider/Marks/Marks.mjs.map +1 -1
  79. package/esm/components/Slider/Marks/is-mark-filled.mjs +2 -1
  80. package/esm/components/Slider/Marks/is-mark-filled.mjs.map +1 -1
  81. package/esm/components/Slider/Slider/Slider.mjs +12 -3
  82. package/esm/components/Slider/Slider/Slider.mjs.map +1 -1
  83. package/esm/components/Slider/Track/Track.mjs +3 -2
  84. package/esm/components/Slider/Track/Track.mjs.map +1 -1
  85. package/esm/components/Tabs/Tabs.context.mjs.map +1 -1
  86. package/esm/components/Tabs/Tabs.mjs +3 -1
  87. package/esm/components/Tabs/Tabs.mjs.map +1 -1
  88. package/esm/components/Tabs/TabsPanel/TabsPanel.mjs +2 -1
  89. package/esm/components/Tabs/TabsPanel/TabsPanel.mjs.map +1 -1
  90. package/esm/components/Textarea/Autosize.mjs +1 -0
  91. package/esm/components/Textarea/Autosize.mjs.map +1 -1
  92. package/esm/components/Tree/FlatTreeNode.mjs +101 -0
  93. package/esm/components/Tree/FlatTreeNode.mjs.map +1 -0
  94. package/esm/components/Tree/Tree.mjs +11 -3
  95. package/esm/components/Tree/Tree.mjs.map +1 -1
  96. package/esm/components/Tree/Tree.module.mjs.map +1 -1
  97. package/esm/components/Tree/TreeNode.mjs +65 -27
  98. package/esm/components/Tree/TreeNode.mjs.map +1 -1
  99. package/esm/components/Tree/filter-tree-data/filter-tree-data.mjs +22 -0
  100. package/esm/components/Tree/filter-tree-data/filter-tree-data.mjs.map +1 -0
  101. package/esm/components/Tree/flatten-tree-data/flatten-tree-data.mjs +28 -0
  102. package/esm/components/Tree/flatten-tree-data/flatten-tree-data.mjs.map +1 -0
  103. package/esm/components/Tree/get-children-nodes-values/get-children-nodes-values.mjs +1 -1
  104. package/esm/components/Tree/merge-async-children/merge-async-children.mjs +32 -0
  105. package/esm/components/Tree/merge-async-children/merge-async-children.mjs.map +1 -0
  106. package/esm/components/Tree/move-tree-node/move-tree-node.mjs +78 -0
  107. package/esm/components/Tree/move-tree-node/move-tree-node.mjs.map +1 -0
  108. package/esm/components/Tree/use-tree-node-drag-drop.mjs +96 -0
  109. package/esm/components/Tree/use-tree-node-drag-drop.mjs.map +1 -0
  110. package/esm/components/Tree/use-tree.mjs +177 -27
  111. package/esm/components/Tree/use-tree.mjs.map +1 -1
  112. package/esm/core/Box/Box.mjs +7 -3
  113. package/esm/core/Box/Box.mjs.map +1 -1
  114. package/esm/core/InlineStyles/InlineStyles.mjs +14 -2
  115. package/esm/core/InlineStyles/InlineStyles.mjs.map +1 -1
  116. package/esm/core/InlineStyles/hash-styles.mjs +15 -0
  117. package/esm/core/InlineStyles/hash-styles.mjs.map +1 -0
  118. package/esm/core/MantineProvider/Mantine.context.mjs +4 -1
  119. package/esm/core/MantineProvider/Mantine.context.mjs.map +1 -1
  120. package/esm/core/MantineProvider/MantineProvider.mjs +3 -2
  121. package/esm/core/MantineProvider/MantineProvider.mjs.map +1 -1
  122. package/esm/core/MantineProvider/color-functions/default-variant-colors-resolver/default-variant-colors-resolver.mjs +3 -4
  123. package/esm/core/MantineProvider/color-functions/default-variant-colors-resolver/default-variant-colors-resolver.mjs.map +1 -1
  124. package/esm/index.mjs +9 -2
  125. package/lib/components/MaskInput/MaskInput.d.ts +68 -0
  126. package/lib/components/MaskInput/index.d.ts +7 -0
  127. package/lib/components/MaskInput/use-mask-input-props.d.ts +428 -0
  128. package/lib/components/Slider/Marks/Marks.d.ts +2 -1
  129. package/lib/components/Slider/Marks/is-mark-filled.d.ts +2 -1
  130. package/lib/components/Slider/Slider/Slider.d.ts +2 -0
  131. package/lib/components/Slider/Track/Track.d.ts +2 -1
  132. package/lib/components/Tabs/Tabs.context.d.ts +1 -0
  133. package/lib/components/Tabs/Tabs.d.ts +2 -0
  134. package/lib/components/Tree/FlatTreeNode.d.ts +31 -0
  135. package/lib/components/Tree/Tree.d.ts +21 -1
  136. package/lib/components/Tree/TreeNode.d.ts +6 -2
  137. package/lib/components/Tree/filter-tree-data/filter-tree-data.d.ts +4 -0
  138. package/lib/components/Tree/flatten-tree-data/flatten-tree-data.d.ts +15 -0
  139. package/lib/components/Tree/index.d.ts +9 -0
  140. package/lib/components/Tree/merge-async-children/merge-async-children.d.ts +2 -0
  141. package/lib/components/Tree/move-tree-node/move-tree-node.d.ts +11 -0
  142. package/lib/components/Tree/use-tree-node-drag-drop.d.ts +18 -0
  143. package/lib/components/Tree/use-tree.d.ts +19 -1
  144. package/lib/components/index.d.ts +1 -0
  145. package/lib/core/InlineStyles/InlineStyles.d.ts +2 -1
  146. package/lib/core/InlineStyles/hash-styles.d.ts +2 -0
  147. package/lib/core/InlineStyles/index.d.ts +1 -0
  148. package/lib/core/MantineProvider/Mantine.context.d.ts +2 -0
  149. package/lib/core/MantineProvider/MantineProvider.d.ts +3 -1
  150. package/lib/core/MantineProvider/index.d.ts +1 -1
  151. package/package.json +5 -5
  152. package/styles/Tree.css +66 -0
  153. package/styles/Tree.layer.css +66 -0
  154. package/styles.css +66 -0
  155. package/styles.layer.css +66 -0
@@ -0,0 +1,15 @@
1
+ import type { TreeNodeData } from '../Tree';
2
+ import type { TreeExpandedState } from '../use-tree';
3
+ export interface FlattenedTreeNodeData {
4
+ /** Node data from tree data */
5
+ node: TreeNodeData;
6
+ /** Nesting level of the node, starts at 1 */
7
+ level: number;
8
+ /** Value of the parent node, `null` for root nodes */
9
+ parent: string | null;
10
+ /** Whether the node has children */
11
+ hasChildren: boolean;
12
+ /** Whether the node is expanded */
13
+ expanded: boolean;
14
+ }
15
+ export declare function flattenTreeData(data: TreeNodeData[], expandedState: TreeExpandedState): FlattenedTreeNodeData[];
@@ -3,4 +3,13 @@ import type { RenderTreeNodePayload, TreeCssVariables, TreeFactory, TreeNodeData
3
3
  import type { UseTreeInput, UseTreeReturnType } from './use-tree';
4
4
  export { Tree } from './Tree';
5
5
  export { useTree, getTreeExpandedState } from './use-tree';
6
+ export { mergeAsyncChildren } from './merge-async-children/merge-async-children';
7
+ export { moveTreeNode } from './move-tree-node/move-tree-node';
8
+ export { filterTreeData, defaultTreeNodeFilter } from './filter-tree-data/filter-tree-data';
9
+ export { flattenTreeData } from './flatten-tree-data/flatten-tree-data';
10
+ export { FlatTreeNode } from './FlatTreeNode';
6
11
  export type { TreeProps, TreeStylesNames, TreeFactory, TreeCssVariables, TreeNodeData, RenderTreeNodePayload, UseTreeInput, UseTreeReturnType, CheckedNodeStatus, };
12
+ export type { TreeNodeFilter } from './filter-tree-data/filter-tree-data';
13
+ export type { TreeDragDropPosition, TreeDragDropPayload } from './move-tree-node/move-tree-node';
14
+ export type { FlattenedTreeNodeData } from './flatten-tree-data/flatten-tree-data';
15
+ export type { FlatTreeNodeProps } from './FlatTreeNode';
@@ -0,0 +1,2 @@
1
+ import type { TreeNodeData } from '../Tree';
2
+ export declare function mergeAsyncChildren(data: TreeNodeData[], parentValue: string, children: TreeNodeData[]): TreeNodeData[];
@@ -0,0 +1,11 @@
1
+ import type { TreeNodeData } from '../Tree';
2
+ export type TreeDragDropPosition = 'before' | 'after' | 'inside';
3
+ export interface TreeDragDropPayload {
4
+ /** Value of the dragged node */
5
+ draggedNode: string;
6
+ /** Value of the target node */
7
+ targetNode: string;
8
+ /** Position relative to the target node */
9
+ position: TreeDragDropPosition;
10
+ }
11
+ export declare function moveTreeNode(data: TreeNodeData[], payload: TreeDragDropPayload): TreeNodeData[];
@@ -0,0 +1,18 @@
1
+ import type { TreeDragDropPayload } from './move-tree-node/move-tree-node';
2
+ import type { TreeDragState, TreeNodeData } from './Tree';
3
+ interface UseTreeNodeDragDropInput {
4
+ nodeValue: string;
5
+ hasChildren: boolean;
6
+ data: TreeNodeData[];
7
+ onDragDrop: ((payload: TreeDragDropPayload) => void) | undefined;
8
+ dragStateRef: React.RefObject<TreeDragState>;
9
+ }
10
+ export declare function useTreeNodeDragDrop({ nodeValue, hasChildren, data, onDragDrop, dragStateRef, }: UseTreeNodeDragDropInput): Record<string, never> | {
11
+ draggable: true;
12
+ onDragStart: (event: React.DragEvent) => void;
13
+ onDragOver: (event: React.DragEvent) => void;
14
+ onDragLeave: (event: React.DragEvent) => void;
15
+ onDrop: (event: React.DragEvent) => void;
16
+ onDragEnd: (event: React.DragEvent) => void;
17
+ };
18
+ export {};
@@ -27,8 +27,18 @@ export interface UseTreeInput {
27
27
  onNodeExpand?: (value: string) => void;
28
28
  /** Called with the node value when it is collapsed */
29
29
  onNodeCollapse?: (value: string) => void;
30
+ /** Called when a node with `hasChildren: true` is expanded for the first time.
31
+ * The callback should update the tree data with loaded children.
32
+ */
33
+ onLoadChildren?: (nodeValue: string) => Promise<void>;
34
+ /** When `true`, checking a parent does not affect children and vice versa.
35
+ * Each node's checked state is fully independent. @default false
36
+ */
37
+ checkStrictly?: boolean;
30
38
  }
31
39
  export interface UseTreeReturnType {
40
+ /** When `true`, each node's checked state is independent (no parent-child cascading) */
41
+ checkStrictly: boolean;
32
42
  /** Determines whether multiple node can be selected at a time */
33
43
  multiple: boolean;
34
44
  /** A record of `node.value` and boolean values that represent nodes expanded state */
@@ -81,6 +91,14 @@ export interface UseTreeReturnType {
81
91
  isNodeChecked: (value: string) => boolean;
82
92
  /** Returns `true` if node with provided value is indeterminate */
83
93
  isNodeIndeterminate: (value: string) => boolean;
94
+ /** Returns `true` if the node's children are currently being loaded */
95
+ isNodeLoading: (value: string) => boolean;
96
+ /** Returns the error from the last failed load attempt for the given node, or `null` */
97
+ getNodeLoadError: (value: string) => Error | null;
98
+ /** Programmatically triggers loading of a node's children */
99
+ loadNode: (value: string) => Promise<void>;
100
+ /** Clears the loaded cache for a node, causing it to re-fetch on next expand */
101
+ invalidateNode: (value: string) => void;
84
102
  }
85
- export declare function useTree({ initialSelectedState, expandedState, initialCheckedState, checkedState, initialExpandedState, selectedState, multiple, onNodeCollapse, onNodeExpand, onCheckedStateChange, onSelectedStateChange, onExpandedStateChange, }?: UseTreeInput): UseTreeReturnType;
103
+ export declare function useTree({ initialSelectedState, expandedState, initialCheckedState, checkedState, initialExpandedState, selectedState, multiple, onNodeCollapse, onNodeExpand, onCheckedStateChange, onSelectedStateChange, onExpandedStateChange, onLoadChildren, checkStrictly, }?: UseTreeInput): UseTreeReturnType;
86
104
  export type TreeController = ReturnType<typeof useTree>;
@@ -60,6 +60,7 @@ export * from './List';
60
60
  export * from './LoadingOverlay';
61
61
  export * from './Mark';
62
62
  export * from './Marquee';
63
+ export * from './MaskInput';
63
64
  export * from './Menu';
64
65
  export * from './Modal';
65
66
  export * from './MultiSelect';
@@ -1,4 +1,5 @@
1
1
  import { InlineStylesInput } from './styles-to-string/styles-to-string';
2
2
  export interface InlineStylesProps extends InlineStylesInput, Omit<React.ComponentProps<'style'>, keyof InlineStylesInput> {
3
+ deduplicate?: boolean;
3
4
  }
4
- export declare function InlineStyles(props: InlineStylesInput): import("react/jsx-runtime").JSX.Element;
5
+ export declare function InlineStyles({ deduplicate, ...props }: InlineStylesProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { InlineStylesMediaQuery } from './styles-to-string/styles-to-string';
2
+ export declare function hashStyleProps(styles: React.CSSProperties | undefined, media: InlineStylesMediaQuery[] | undefined): string;
@@ -1,4 +1,5 @@
1
1
  export { InlineStyles } from './InlineStyles';
2
+ export { hashStyleProps } from './hash-styles';
2
3
  export { stylesToString } from './styles-to-string/styles-to-string';
3
4
  export type { InlineStylesInput, InlineStylesMediaQuery, } from './styles-to-string/styles-to-string';
4
5
  export type { InlineStylesProps } from './InlineStyles';
@@ -17,6 +17,7 @@ interface MantineContextValue {
17
17
  headless?: boolean;
18
18
  stylesTransform?: MantineStylesTransform;
19
19
  env?: 'default' | 'test';
20
+ deduplicateInlineStyles?: boolean;
20
21
  }
21
22
  export declare const MantineContext: import("react").Context<MantineContextValue | null>;
22
23
  export declare function useMantineContext(): MantineContextValue;
@@ -28,4 +29,5 @@ export declare function useMantineIsHeadless(): boolean | undefined;
28
29
  export declare function useMantineSxTransform(): (() => (sx: any) => string) | undefined;
29
30
  export declare function useMantineStylesTransform(): (() => (styles: any, payload: any) => Record<string, string>) | undefined;
30
31
  export declare function useMantineEnv(): "default" | "test";
32
+ export declare function useMantineDeduplicateInlineStyles(): boolean | undefined;
31
33
  export {};
@@ -34,12 +34,14 @@ export interface MantineProviderProps {
34
34
  withGlobalClasses?: boolean;
35
35
  /** An object to transform `styles` and `sx` props into css classes, can be used with CSS-in-JS libraries */
36
36
  stylesTransform?: MantineStylesTransform;
37
+ /** Determines whether inline styles with identical content should be deduplicated using React 19 style hoisting. When enabled, components with the same responsive style props share a single `<style />` tag instead of each generating their own. @default false */
38
+ deduplicateInlineStyles?: boolean;
37
39
  /** Your application */
38
40
  children?: React.ReactNode;
39
41
  /** Environment at which the provider is used, `'test'` environment disables all transitions and portals */
40
42
  env?: 'default' | 'test';
41
43
  }
42
- export declare function MantineProvider({ theme, children, getStyleNonce, withStaticClasses, withGlobalClasses, deduplicateCssVariables, withCssVariables, cssVariablesSelector, classNamesPrefix, colorSchemeManager, defaultColorScheme, getRootElement, cssVariablesResolver, forceColorScheme, stylesTransform, env, }: MantineProviderProps): import("react/jsx-runtime").JSX.Element;
44
+ export declare function MantineProvider({ theme, children, getStyleNonce, withStaticClasses, withGlobalClasses, deduplicateCssVariables, withCssVariables, cssVariablesSelector, classNamesPrefix, colorSchemeManager, defaultColorScheme, getRootElement, cssVariablesResolver, forceColorScheme, stylesTransform, env, deduplicateInlineStyles, }: MantineProviderProps): import("react/jsx-runtime").JSX.Element;
43
45
  export declare namespace MantineProvider {
44
46
  var displayName: string;
45
47
  }
@@ -6,7 +6,7 @@ export * from './ColorSchemeScript';
6
6
  export { DEFAULT_THEME } from './default-theme';
7
7
  export { validateMantineTheme, mergeMantineTheme } from './merge-mantine-theme';
8
8
  export { MantineProvider, HeadlessMantineProvider } from './MantineProvider';
9
- export { MantineContext, useMantineContext, useMantineClassNamesPrefix, useMantineStyleNonce, useMantineCssVariablesResolver, useMantineWithStaticClasses, useMantineIsHeadless, useMantineSxTransform, useMantineStylesTransform, useMantineEnv, } from './Mantine.context';
9
+ export { MantineContext, useMantineContext, useMantineClassNamesPrefix, useMantineStyleNonce, useMantineCssVariablesResolver, useMantineWithStaticClasses, useMantineIsHeadless, useMantineSxTransform, useMantineStylesTransform, useMantineEnv, useMantineDeduplicateInlineStyles, } from './Mantine.context';
10
10
  export { useMantineTheme, useSafeMantineTheme, MantineThemeContext, MantineThemeProvider, } from './MantineThemeProvider';
11
11
  export type { MantineThemeProviderProps } from './MantineThemeProvider';
12
12
  export type { MantineProviderProps, HeadlessMantineProviderProps } from './MantineProvider';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/core",
3
- "version": "9.0.1",
3
+ "version": "9.1.0",
4
4
  "description": "React components library focused on usability, accessibility and developer experience",
5
5
  "homepage": "https://mantine.dev/",
6
6
  "license": "MIT",
@@ -43,7 +43,7 @@
43
43
  "directory": "packages/@mantine/core"
44
44
  },
45
45
  "peerDependencies": {
46
- "@mantine/hooks": "9.0.1",
46
+ "@mantine/hooks": "9.1.0",
47
47
  "react": "^19.2.0",
48
48
  "react-dom": "^19.2.0"
49
49
  },
@@ -52,12 +52,12 @@
52
52
  "clsx": "^2.1.1",
53
53
  "react-number-format": "^5.4.5",
54
54
  "react-remove-scroll": "^2.7.2",
55
- "type-fest": "^5.5.0"
55
+ "type-fest": "^5.6.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@mantine-tests/core": "workspace:*",
59
59
  "@mantine/hooks": "workspace:*",
60
- "react": "19.2.4",
61
- "react-dom": "19.2.4"
60
+ "react": "19.2.5",
61
+ "react-dom": "19.2.5"
62
62
  }
63
63
  }
package/styles/Tree.css CHANGED
@@ -1,5 +1,7 @@
1
1
  .m_f698e191 {
2
2
  --level-offset: var(--mantine-spacing-lg);
3
+ --tree-line-width: calc(0.0625rem * var(--mantine-scale));
4
+ --tree-line-color: var(--mantine-color-default-border);
3
5
  margin: 0;
4
6
  padding: 0;
5
7
  user-select: none;
@@ -24,6 +26,7 @@
24
26
  }
25
27
 
26
28
  .m_dc283425 {
29
+ position: relative;
27
30
  padding-inline-start: var(--label-offset);
28
31
  }
29
32
 
@@ -34,3 +37,66 @@
34
37
  :where([data-mantine-color-scheme='dark']) .m_dc283425:where([data-selected]) {
35
38
  background-color: var(--mantine-color-dark-5);
36
39
  }
40
+
41
+ .m_dc283425:where([data-dragging]) {
42
+ opacity: 0.4;
43
+ }
44
+
45
+ .m_dc283425:where([data-drag-over='before'])::before {
46
+ content: '';
47
+ position: absolute;
48
+ top: -1px;
49
+ inset-inline-start: var(--label-offset, 0);
50
+ inset-inline-end: 0;
51
+ height: 2px;
52
+ background-color: var(--mantine-primary-color-filled);
53
+ pointer-events: none;
54
+ z-index: 1;
55
+ }
56
+
57
+ .m_dc283425:where([data-drag-over='after'])::after {
58
+ content: '';
59
+ position: absolute;
60
+ bottom: -1px;
61
+ inset-inline-start: var(--label-offset, 0);
62
+ inset-inline-end: 0;
63
+ height: 2px;
64
+ background-color: var(--mantine-primary-color-filled);
65
+ pointer-events: none;
66
+ z-index: 1;
67
+ }
68
+
69
+ .m_dc283425:where([data-drag-over='inside']) {
70
+ background-color: var(--mantine-primary-color-light);
71
+ }
72
+
73
+ :where([data-with-lines]) .m_f6970eb1 {
74
+ position: relative;
75
+ }
76
+
77
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::before {
78
+ content: '';
79
+ position: absolute;
80
+ top: calc(0.75rem * var(--mantine-scale));
81
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
82
+ width: calc(var(--level-offset) / 2);
83
+ height: 0;
84
+ border-top: var(--tree-line-width) solid var(--tree-line-color);
85
+ pointer-events: none;
86
+ }
87
+
88
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::after {
89
+ content: '';
90
+ position: absolute;
91
+ top: 0;
92
+ bottom: 0;
93
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
94
+ width: 0;
95
+ border-inline-start: var(--tree-line-width) solid var(--tree-line-color);
96
+ pointer-events: none;
97
+ }
98
+
99
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1:last-child::after {
100
+ bottom: auto;
101
+ height: calc(0.75rem * var(--mantine-scale));
102
+ }
@@ -1,5 +1,7 @@
1
1
  @layer mantine {.m_f698e191 {
2
2
  --level-offset: var(--mantine-spacing-lg);
3
+ --tree-line-width: calc(0.0625rem * var(--mantine-scale));
4
+ --tree-line-color: var(--mantine-color-default-border);
3
5
  margin: 0;
4
6
  padding: 0;
5
7
  user-select: none;
@@ -24,6 +26,7 @@
24
26
  }
25
27
 
26
28
  .m_dc283425 {
29
+ position: relative;
27
30
  padding-inline-start: var(--label-offset);
28
31
  }
29
32
 
@@ -34,4 +37,67 @@
34
37
  :where([data-mantine-color-scheme='dark']) .m_dc283425:where([data-selected]) {
35
38
  background-color: var(--mantine-color-dark-5);
36
39
  }
40
+
41
+ .m_dc283425:where([data-dragging]) {
42
+ opacity: 0.4;
43
+ }
44
+
45
+ .m_dc283425:where([data-drag-over='before'])::before {
46
+ content: '';
47
+ position: absolute;
48
+ top: -1px;
49
+ inset-inline-start: var(--label-offset, 0);
50
+ inset-inline-end: 0;
51
+ height: 2px;
52
+ background-color: var(--mantine-primary-color-filled);
53
+ pointer-events: none;
54
+ z-index: 1;
55
+ }
56
+
57
+ .m_dc283425:where([data-drag-over='after'])::after {
58
+ content: '';
59
+ position: absolute;
60
+ bottom: -1px;
61
+ inset-inline-start: var(--label-offset, 0);
62
+ inset-inline-end: 0;
63
+ height: 2px;
64
+ background-color: var(--mantine-primary-color-filled);
65
+ pointer-events: none;
66
+ z-index: 1;
67
+ }
68
+
69
+ .m_dc283425:where([data-drag-over='inside']) {
70
+ background-color: var(--mantine-primary-color-light);
71
+ }
72
+
73
+ :where([data-with-lines]) .m_f6970eb1 {
74
+ position: relative;
75
+ }
76
+
77
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::before {
78
+ content: '';
79
+ position: absolute;
80
+ top: calc(0.75rem * var(--mantine-scale));
81
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
82
+ width: calc(var(--level-offset) / 2);
83
+ height: 0;
84
+ border-top: var(--tree-line-width) solid var(--tree-line-color);
85
+ pointer-events: none;
86
+ }
87
+
88
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::after {
89
+ content: '';
90
+ position: absolute;
91
+ top: 0;
92
+ bottom: 0;
93
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
94
+ width: 0;
95
+ border-inline-start: var(--tree-line-width) solid var(--tree-line-color);
96
+ pointer-events: none;
97
+ }
98
+
99
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1:last-child::after {
100
+ bottom: auto;
101
+ height: calc(0.75rem * var(--mantine-scale));
102
+ }
37
103
  }
package/styles.css CHANGED
@@ -7972,6 +7972,8 @@ fieldset:disabled .m_38aeed47:where(:not([data-inverted])),
7972
7972
 
7973
7973
  .m_f698e191 {
7974
7974
  --level-offset: var(--mantine-spacing-lg);
7975
+ --tree-line-width: calc(0.0625rem * var(--mantine-scale));
7976
+ --tree-line-color: var(--mantine-color-default-border);
7975
7977
  margin: 0;
7976
7978
  padding: 0;
7977
7979
  user-select: none;
@@ -7996,6 +7998,7 @@ fieldset:disabled .m_38aeed47:where(:not([data-inverted])),
7996
7998
  }
7997
7999
 
7998
8000
  .m_dc283425 {
8001
+ position: relative;
7999
8002
  padding-inline-start: var(--label-offset);
8000
8003
  }
8001
8004
 
@@ -8007,6 +8010,69 @@ fieldset:disabled .m_38aeed47:where(:not([data-inverted])),
8007
8010
  background-color: var(--mantine-color-dark-5);
8008
8011
  }
8009
8012
 
8013
+ .m_dc283425:where([data-dragging]) {
8014
+ opacity: 0.4;
8015
+ }
8016
+
8017
+ .m_dc283425:where([data-drag-over='before'])::before {
8018
+ content: '';
8019
+ position: absolute;
8020
+ top: calc(-0.0625rem * var(--mantine-scale));
8021
+ inset-inline-start: var(--label-offset, 0);
8022
+ inset-inline-end: 0;
8023
+ height: calc(0.125rem * var(--mantine-scale));
8024
+ background-color: var(--mantine-primary-color-filled);
8025
+ pointer-events: none;
8026
+ z-index: 1;
8027
+ }
8028
+
8029
+ .m_dc283425:where([data-drag-over='after'])::after {
8030
+ content: '';
8031
+ position: absolute;
8032
+ bottom: calc(-0.0625rem * var(--mantine-scale));
8033
+ inset-inline-start: var(--label-offset, 0);
8034
+ inset-inline-end: 0;
8035
+ height: calc(0.125rem * var(--mantine-scale));
8036
+ background-color: var(--mantine-primary-color-filled);
8037
+ pointer-events: none;
8038
+ z-index: 1;
8039
+ }
8040
+
8041
+ .m_dc283425:where([data-drag-over='inside']) {
8042
+ background-color: var(--mantine-primary-color-light);
8043
+ }
8044
+
8045
+ :where([data-with-lines]) .m_f6970eb1 {
8046
+ position: relative;
8047
+ }
8048
+
8049
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::before {
8050
+ content: '';
8051
+ position: absolute;
8052
+ top: calc(0.75rem * var(--mantine-scale));
8053
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
8054
+ width: calc(var(--level-offset) / 2);
8055
+ height: 0;
8056
+ border-top: var(--tree-line-width) solid var(--tree-line-color);
8057
+ pointer-events: none;
8058
+ }
8059
+
8060
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::after {
8061
+ content: '';
8062
+ position: absolute;
8063
+ top: 0;
8064
+ bottom: 0;
8065
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
8066
+ width: 0;
8067
+ border-inline-start: var(--tree-line-width) solid var(--tree-line-color);
8068
+ pointer-events: none;
8069
+ }
8070
+
8071
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1:last-child::after {
8072
+ bottom: auto;
8073
+ height: calc(0.75rem * var(--mantine-scale));
8074
+ }
8075
+
8010
8076
  .m_d08caa0 :first-child {
8011
8077
  margin-top: 0;
8012
8078
  }
package/styles.layer.css CHANGED
@@ -7972,6 +7972,8 @@ fieldset:disabled .m_38aeed47:where(:not([data-inverted])),
7972
7972
 
7973
7973
  .m_f698e191 {
7974
7974
  --level-offset: var(--mantine-spacing-lg);
7975
+ --tree-line-width: calc(0.0625rem * var(--mantine-scale));
7976
+ --tree-line-color: var(--mantine-color-default-border);
7975
7977
  margin: 0;
7976
7978
  padding: 0;
7977
7979
  user-select: none;
@@ -7996,6 +7998,7 @@ fieldset:disabled .m_38aeed47:where(:not([data-inverted])),
7996
7998
  }
7997
7999
 
7998
8000
  .m_dc283425 {
8001
+ position: relative;
7999
8002
  padding-inline-start: var(--label-offset);
8000
8003
  }
8001
8004
 
@@ -8007,6 +8010,69 @@ fieldset:disabled .m_38aeed47:where(:not([data-inverted])),
8007
8010
  background-color: var(--mantine-color-dark-5);
8008
8011
  }
8009
8012
 
8013
+ .m_dc283425:where([data-dragging]) {
8014
+ opacity: 0.4;
8015
+ }
8016
+
8017
+ .m_dc283425:where([data-drag-over='before'])::before {
8018
+ content: '';
8019
+ position: absolute;
8020
+ top: calc(-0.0625rem * var(--mantine-scale));
8021
+ inset-inline-start: var(--label-offset, 0);
8022
+ inset-inline-end: 0;
8023
+ height: calc(0.125rem * var(--mantine-scale));
8024
+ background-color: var(--mantine-primary-color-filled);
8025
+ pointer-events: none;
8026
+ z-index: 1;
8027
+ }
8028
+
8029
+ .m_dc283425:where([data-drag-over='after'])::after {
8030
+ content: '';
8031
+ position: absolute;
8032
+ bottom: calc(-0.0625rem * var(--mantine-scale));
8033
+ inset-inline-start: var(--label-offset, 0);
8034
+ inset-inline-end: 0;
8035
+ height: calc(0.125rem * var(--mantine-scale));
8036
+ background-color: var(--mantine-primary-color-filled);
8037
+ pointer-events: none;
8038
+ z-index: 1;
8039
+ }
8040
+
8041
+ .m_dc283425:where([data-drag-over='inside']) {
8042
+ background-color: var(--mantine-primary-color-light);
8043
+ }
8044
+
8045
+ :where([data-with-lines]) .m_f6970eb1 {
8046
+ position: relative;
8047
+ }
8048
+
8049
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::before {
8050
+ content: '';
8051
+ position: absolute;
8052
+ top: calc(0.75rem * var(--mantine-scale));
8053
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
8054
+ width: calc(var(--level-offset) / 2);
8055
+ height: 0;
8056
+ border-top: var(--tree-line-width) solid var(--tree-line-color);
8057
+ pointer-events: none;
8058
+ }
8059
+
8060
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1::after {
8061
+ content: '';
8062
+ position: absolute;
8063
+ top: 0;
8064
+ bottom: 0;
8065
+ inset-inline-start: calc(var(--label-offset) - var(--level-offset) / 2);
8066
+ width: 0;
8067
+ border-inline-start: var(--tree-line-width) solid var(--tree-line-color);
8068
+ pointer-events: none;
8069
+ }
8070
+
8071
+ :where([data-with-lines]) .m_75f3ecf > .m_f6970eb1:last-child::after {
8072
+ bottom: auto;
8073
+ height: calc(0.75rem * var(--mantine-scale));
8074
+ }
8075
+
8010
8076
  .m_d08caa0 :first-child {
8011
8077
  margin-top: 0;
8012
8078
  }