@mantine/core 9.0.2 → 9.1.1

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 (207) 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/Card/Card.cjs +1 -1
  4. package/cjs/components/Card/Card.cjs.map +1 -1
  5. package/cjs/components/Combobox/ComboboxClearButton/ComboboxClearButton.cjs +1 -1
  6. package/cjs/components/Combobox/ComboboxClearButton/ComboboxClearButton.cjs.map +1 -1
  7. package/cjs/components/Combobox/ComboboxEventsTarget/ComboboxEventsTarget.cjs +1 -0
  8. package/cjs/components/Combobox/ComboboxEventsTarget/ComboboxEventsTarget.cjs.map +1 -1
  9. package/cjs/components/Combobox/ComboboxSearch/ComboboxSearch.cjs +2 -1
  10. package/cjs/components/Combobox/ComboboxSearch/ComboboxSearch.cjs.map +1 -1
  11. package/cjs/components/Combobox/ComboboxTarget/ComboboxTarget.cjs +1 -0
  12. package/cjs/components/Combobox/ComboboxTarget/ComboboxTarget.cjs.map +1 -1
  13. package/cjs/components/Combobox/use-combobox-target-props/use-combobox-target-props.cjs +18 -12
  14. package/cjs/components/Combobox/use-combobox-target-props/use-combobox-target-props.cjs.map +1 -1
  15. package/cjs/components/Flex/Flex.cjs +7 -2
  16. package/cjs/components/Flex/Flex.cjs.map +1 -1
  17. package/cjs/components/FloatingIndicator/FloatingIndicator.cjs +1 -2
  18. package/cjs/components/FloatingIndicator/FloatingIndicator.cjs.map +1 -1
  19. package/cjs/components/Highlight/highlighter/highlighter.cjs +3 -3
  20. package/cjs/components/Highlight/highlighter/highlighter.cjs.map +1 -1
  21. package/cjs/components/MaskInput/MaskInput.cjs +24 -0
  22. package/cjs/components/MaskInput/MaskInput.cjs.map +1 -0
  23. package/cjs/components/MaskInput/use-mask-input-props.cjs +29 -0
  24. package/cjs/components/MaskInput/use-mask-input-props.cjs.map +1 -0
  25. package/cjs/components/MultiSelect/MultiSelect.cjs.map +1 -1
  26. package/cjs/components/PasswordInput/PasswordInput.cjs +1 -1
  27. package/cjs/components/PasswordInput/PasswordInput.cjs.map +1 -1
  28. package/cjs/components/Popover/Popover.context.cjs.map +1 -1
  29. package/cjs/components/Popover/PopoverDropdown/PopoverDropdown.cjs +1 -1
  30. package/cjs/components/Popover/PopoverDropdown/PopoverDropdown.cjs.map +1 -1
  31. package/cjs/components/Radio/Radio.module.cjs.map +1 -1
  32. package/cjs/components/Rating/Rating.cjs +1 -2
  33. package/cjs/components/Rating/Rating.cjs.map +1 -1
  34. package/cjs/components/ScrollArea/ScrollArea.cjs +24 -10
  35. package/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
  36. package/cjs/components/Select/Select.cjs.map +1 -1
  37. package/cjs/components/SemiCircleProgress/SemiCircleProgress.cjs +2 -0
  38. package/cjs/components/SemiCircleProgress/SemiCircleProgress.cjs.map +1 -1
  39. package/cjs/components/Slider/Marks/Marks.cjs +3 -2
  40. package/cjs/components/Slider/Marks/Marks.cjs.map +1 -1
  41. package/cjs/components/Slider/Marks/is-mark-filled.cjs +2 -1
  42. package/cjs/components/Slider/Marks/is-mark-filled.cjs.map +1 -1
  43. package/cjs/components/Slider/Slider/Slider.cjs +12 -3
  44. package/cjs/components/Slider/Slider/Slider.cjs.map +1 -1
  45. package/cjs/components/Slider/Track/Track.cjs +3 -2
  46. package/cjs/components/Slider/Track/Track.cjs.map +1 -1
  47. package/cjs/components/Tabs/Tabs.cjs +3 -1
  48. package/cjs/components/Tabs/Tabs.cjs.map +1 -1
  49. package/cjs/components/Tabs/Tabs.context.cjs.map +1 -1
  50. package/cjs/components/Tabs/TabsPanel/TabsPanel.cjs +2 -1
  51. package/cjs/components/Tabs/TabsPanel/TabsPanel.cjs.map +1 -1
  52. package/cjs/components/Tree/FlatTreeNode.cjs +103 -0
  53. package/cjs/components/Tree/FlatTreeNode.cjs.map +1 -0
  54. package/cjs/components/Tree/Tree.cjs +12 -2
  55. package/cjs/components/Tree/Tree.cjs.map +1 -1
  56. package/cjs/components/Tree/Tree.module.cjs.map +1 -1
  57. package/cjs/components/Tree/TreeNode.cjs +70 -27
  58. package/cjs/components/Tree/TreeNode.cjs.map +1 -1
  59. package/cjs/components/Tree/filter-tree-data/filter-tree-data.cjs +23 -0
  60. package/cjs/components/Tree/filter-tree-data/filter-tree-data.cjs.map +1 -0
  61. package/cjs/components/Tree/flatten-tree-data/flatten-tree-data.cjs +28 -0
  62. package/cjs/components/Tree/flatten-tree-data/flatten-tree-data.cjs.map +1 -0
  63. package/cjs/components/Tree/get-children-nodes-values/get-children-nodes-values.cjs +1 -0
  64. package/cjs/components/Tree/merge-async-children/merge-async-children.cjs +32 -0
  65. package/cjs/components/Tree/merge-async-children/merge-async-children.cjs.map +1 -0
  66. package/cjs/components/Tree/move-tree-node/move-tree-node.cjs +78 -0
  67. package/cjs/components/Tree/move-tree-node/move-tree-node.cjs.map +1 -0
  68. package/cjs/components/Tree/use-tree-node-drag-drop.cjs +127 -0
  69. package/cjs/components/Tree/use-tree-node-drag-drop.cjs.map +1 -0
  70. package/cjs/components/Tree/use-tree.cjs +176 -26
  71. package/cjs/components/Tree/use-tree.cjs.map +1 -1
  72. package/cjs/core/Box/Box.cjs +6 -2
  73. package/cjs/core/Box/Box.cjs.map +1 -1
  74. package/cjs/core/InlineStyles/InlineStyles.cjs +14 -2
  75. package/cjs/core/InlineStyles/InlineStyles.cjs.map +1 -1
  76. package/cjs/core/InlineStyles/hash-styles.cjs +15 -0
  77. package/cjs/core/InlineStyles/hash-styles.cjs.map +1 -0
  78. package/cjs/core/MantineProvider/Mantine.context.cjs +4 -0
  79. package/cjs/core/MantineProvider/Mantine.context.cjs.map +1 -1
  80. package/cjs/core/MantineProvider/MantineProvider.cjs +3 -2
  81. package/cjs/core/MantineProvider/MantineProvider.cjs.map +1 -1
  82. package/cjs/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.cjs +2 -2
  83. package/cjs/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.cjs.map +1 -1
  84. package/cjs/index.cjs +16 -0
  85. package/esm/components/Blockquote/Blockquote.mjs +5 -6
  86. package/esm/components/Blockquote/Blockquote.mjs.map +1 -1
  87. package/esm/components/Card/Card.mjs +1 -1
  88. package/esm/components/Card/Card.mjs.map +1 -1
  89. package/esm/components/Combobox/ComboboxClearButton/ComboboxClearButton.mjs +1 -1
  90. package/esm/components/Combobox/ComboboxClearButton/ComboboxClearButton.mjs.map +1 -1
  91. package/esm/components/Combobox/ComboboxEventsTarget/ComboboxEventsTarget.mjs +1 -0
  92. package/esm/components/Combobox/ComboboxEventsTarget/ComboboxEventsTarget.mjs.map +1 -1
  93. package/esm/components/Combobox/ComboboxSearch/ComboboxSearch.mjs +2 -1
  94. package/esm/components/Combobox/ComboboxSearch/ComboboxSearch.mjs.map +1 -1
  95. package/esm/components/Combobox/ComboboxTarget/ComboboxTarget.mjs +1 -0
  96. package/esm/components/Combobox/ComboboxTarget/ComboboxTarget.mjs.map +1 -1
  97. package/esm/components/Combobox/use-combobox-target-props/use-combobox-target-props.mjs +18 -12
  98. package/esm/components/Combobox/use-combobox-target-props/use-combobox-target-props.mjs.map +1 -1
  99. package/esm/components/Flex/Flex.mjs +7 -2
  100. package/esm/components/Flex/Flex.mjs.map +1 -1
  101. package/esm/components/FloatingIndicator/FloatingIndicator.mjs +1 -2
  102. package/esm/components/FloatingIndicator/FloatingIndicator.mjs.map +1 -1
  103. package/esm/components/Highlight/highlighter/highlighter.mjs +3 -3
  104. package/esm/components/Highlight/highlighter/highlighter.mjs.map +1 -1
  105. package/esm/components/MaskInput/MaskInput.mjs +23 -0
  106. package/esm/components/MaskInput/MaskInput.mjs.map +1 -0
  107. package/esm/components/MaskInput/use-mask-input-props.mjs +28 -0
  108. package/esm/components/MaskInput/use-mask-input-props.mjs.map +1 -0
  109. package/esm/components/MultiSelect/MultiSelect.mjs.map +1 -1
  110. package/esm/components/PasswordInput/PasswordInput.mjs +1 -1
  111. package/esm/components/PasswordInput/PasswordInput.mjs.map +1 -1
  112. package/esm/components/Popover/Popover.context.mjs.map +1 -1
  113. package/esm/components/Popover/PopoverDropdown/PopoverDropdown.mjs +1 -1
  114. package/esm/components/Popover/PopoverDropdown/PopoverDropdown.mjs.map +1 -1
  115. package/esm/components/Radio/Radio.module.mjs.map +1 -1
  116. package/esm/components/Rating/Rating.mjs +1 -2
  117. package/esm/components/Rating/Rating.mjs.map +1 -1
  118. package/esm/components/ScrollArea/ScrollArea.mjs +25 -11
  119. package/esm/components/ScrollArea/ScrollArea.mjs.map +1 -1
  120. package/esm/components/Select/Select.mjs.map +1 -1
  121. package/esm/components/SemiCircleProgress/SemiCircleProgress.mjs +2 -0
  122. package/esm/components/SemiCircleProgress/SemiCircleProgress.mjs.map +1 -1
  123. package/esm/components/Slider/Marks/Marks.mjs +3 -2
  124. package/esm/components/Slider/Marks/Marks.mjs.map +1 -1
  125. package/esm/components/Slider/Marks/is-mark-filled.mjs +2 -1
  126. package/esm/components/Slider/Marks/is-mark-filled.mjs.map +1 -1
  127. package/esm/components/Slider/Slider/Slider.mjs +12 -3
  128. package/esm/components/Slider/Slider/Slider.mjs.map +1 -1
  129. package/esm/components/Slider/Track/Track.mjs +3 -2
  130. package/esm/components/Slider/Track/Track.mjs.map +1 -1
  131. package/esm/components/Tabs/Tabs.context.mjs.map +1 -1
  132. package/esm/components/Tabs/Tabs.mjs +3 -1
  133. package/esm/components/Tabs/Tabs.mjs.map +1 -1
  134. package/esm/components/Tabs/TabsPanel/TabsPanel.mjs +2 -1
  135. package/esm/components/Tabs/TabsPanel/TabsPanel.mjs.map +1 -1
  136. package/esm/components/Tree/FlatTreeNode.mjs +102 -0
  137. package/esm/components/Tree/FlatTreeNode.mjs.map +1 -0
  138. package/esm/components/Tree/Tree.mjs +13 -3
  139. package/esm/components/Tree/Tree.mjs.map +1 -1
  140. package/esm/components/Tree/Tree.module.mjs.map +1 -1
  141. package/esm/components/Tree/TreeNode.mjs +70 -27
  142. package/esm/components/Tree/TreeNode.mjs.map +1 -1
  143. package/esm/components/Tree/filter-tree-data/filter-tree-data.mjs +22 -0
  144. package/esm/components/Tree/filter-tree-data/filter-tree-data.mjs.map +1 -0
  145. package/esm/components/Tree/flatten-tree-data/flatten-tree-data.mjs +28 -0
  146. package/esm/components/Tree/flatten-tree-data/flatten-tree-data.mjs.map +1 -0
  147. package/esm/components/Tree/get-children-nodes-values/get-children-nodes-values.mjs +1 -1
  148. package/esm/components/Tree/merge-async-children/merge-async-children.mjs +32 -0
  149. package/esm/components/Tree/merge-async-children/merge-async-children.mjs.map +1 -0
  150. package/esm/components/Tree/move-tree-node/move-tree-node.mjs +78 -0
  151. package/esm/components/Tree/move-tree-node/move-tree-node.mjs.map +1 -0
  152. package/esm/components/Tree/use-tree-node-drag-drop.mjs +126 -0
  153. package/esm/components/Tree/use-tree-node-drag-drop.mjs.map +1 -0
  154. package/esm/components/Tree/use-tree.mjs +177 -27
  155. package/esm/components/Tree/use-tree.mjs.map +1 -1
  156. package/esm/core/Box/Box.mjs +7 -3
  157. package/esm/core/Box/Box.mjs.map +1 -1
  158. package/esm/core/InlineStyles/InlineStyles.mjs +14 -2
  159. package/esm/core/InlineStyles/InlineStyles.mjs.map +1 -1
  160. package/esm/core/InlineStyles/hash-styles.mjs +15 -0
  161. package/esm/core/InlineStyles/hash-styles.mjs.map +1 -0
  162. package/esm/core/MantineProvider/Mantine.context.mjs +4 -1
  163. package/esm/core/MantineProvider/Mantine.context.mjs.map +1 -1
  164. package/esm/core/MantineProvider/MantineProvider.mjs +3 -2
  165. package/esm/core/MantineProvider/MantineProvider.mjs.map +1 -1
  166. package/esm/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.mjs +2 -2
  167. package/esm/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.mjs.map +1 -1
  168. package/esm/index.mjs +9 -2
  169. package/lib/components/Combobox/ComboboxClearButton/ComboboxClearButton.d.ts +1 -1
  170. package/lib/components/Combobox/use-combobox-target-props/use-combobox-target-props.d.ts +3 -1
  171. package/lib/components/MaskInput/MaskInput.d.ts +68 -0
  172. package/lib/components/MaskInput/index.d.ts +7 -0
  173. package/lib/components/MaskInput/use-mask-input-props.d.ts +428 -0
  174. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  175. package/lib/components/Popover/Popover.context.d.ts +1 -1
  176. package/lib/components/Select/Select.d.ts +1 -1
  177. package/lib/components/Slider/Marks/Marks.d.ts +2 -1
  178. package/lib/components/Slider/Marks/is-mark-filled.d.ts +2 -1
  179. package/lib/components/Slider/Slider/Slider.d.ts +2 -0
  180. package/lib/components/Slider/Track/Track.d.ts +2 -1
  181. package/lib/components/Tabs/Tabs.context.d.ts +1 -0
  182. package/lib/components/Tabs/Tabs.d.ts +2 -0
  183. package/lib/components/Tree/FlatTreeNode.d.ts +31 -0
  184. package/lib/components/Tree/Tree.d.ts +31 -1
  185. package/lib/components/Tree/TreeNode.d.ts +9 -2
  186. package/lib/components/Tree/filter-tree-data/filter-tree-data.d.ts +4 -0
  187. package/lib/components/Tree/flatten-tree-data/flatten-tree-data.d.ts +15 -0
  188. package/lib/components/Tree/index.d.ts +10 -0
  189. package/lib/components/Tree/merge-async-children/merge-async-children.d.ts +2 -0
  190. package/lib/components/Tree/move-tree-node/move-tree-node.d.ts +11 -0
  191. package/lib/components/Tree/use-tree-node-drag-drop.d.ts +30 -0
  192. package/lib/components/Tree/use-tree.d.ts +19 -1
  193. package/lib/components/index.d.ts +1 -0
  194. package/lib/core/InlineStyles/InlineStyles.d.ts +2 -1
  195. package/lib/core/InlineStyles/hash-styles.d.ts +2 -0
  196. package/lib/core/InlineStyles/index.d.ts +1 -0
  197. package/lib/core/MantineProvider/Mantine.context.d.ts +2 -0
  198. package/lib/core/MantineProvider/MantineProvider.d.ts +3 -1
  199. package/lib/core/MantineProvider/index.d.ts +1 -1
  200. package/lib/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.d.ts +2 -2
  201. package/package.json +5 -5
  202. package/styles/Radio.css +3 -2
  203. package/styles/Radio.layer.css +3 -2
  204. package/styles/Tree.css +66 -0
  205. package/styles/Tree.layer.css +66 -0
  206. package/styles.css +69 -2
  207. package/styles.layer.css +69 -2
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  require("../../_virtual/_rolldown/runtime.cjs");
3
- const require_get_all_checked_nodes = require("./get-all-checked-nodes/get-all-checked-nodes.cjs");
4
3
  const require_get_children_nodes_values = require("./get-children-nodes-values/get-children-nodes-values.cjs");
4
+ const require_get_all_checked_nodes = require("./get-all-checked-nodes/get-all-checked-nodes.cjs");
5
5
  const require_is_node_checked = require("./is-node-checked/is-node-checked.cjs");
6
6
  const require_is_node_indeterminate = require("./is-node-indeterminate/is-node-indeterminate.cjs");
7
7
  let react = require("react");
@@ -16,21 +16,32 @@ function getInitialTreeExpandedState(initialState, data, value, acc = {}) {
16
16
  }
17
17
  function getTreeExpandedState(data, expandedNodesValues) {
18
18
  const state = getInitialTreeExpandedState({}, data, []);
19
- if (expandedNodesValues === "*") return Object.keys(state).reduce((acc, key) => ({
20
- ...acc,
21
- [key]: true
22
- }), {});
19
+ if (expandedNodesValues === "*") {
20
+ const result = {};
21
+ const keys = Object.keys(state);
22
+ for (let i = 0; i < keys.length; i++) result[keys[i]] = true;
23
+ return result;
24
+ }
23
25
  expandedNodesValues.forEach((node) => {
24
26
  state[node] = true;
25
27
  });
26
28
  return state;
27
29
  }
28
- function getInitialCheckedState(initialState, data) {
30
+ function getInitialCheckedState(initialState, data, checkStrictly) {
31
+ if (checkStrictly) return initialState;
29
32
  const acc = [];
30
33
  initialState.forEach((node) => acc.push(...require_get_children_nodes_values.getChildrenNodesValues(node, data)));
31
34
  return Array.from(new Set(acc));
32
35
  }
33
- function useTree({ initialSelectedState = [], expandedState, initialCheckedState = [], checkedState, initialExpandedState = {}, selectedState, multiple = false, onNodeCollapse, onNodeExpand, onCheckedStateChange, onSelectedStateChange, onExpandedStateChange } = {}) {
36
+ function getAllNodeValues(data) {
37
+ const acc = [];
38
+ for (const node of data) {
39
+ acc.push(node.value);
40
+ if (Array.isArray(node.children) && node.children.length > 0) acc.push(...getAllNodeValues(node.children));
41
+ }
42
+ return acc;
43
+ }
44
+ function useTree({ initialSelectedState = [], expandedState, initialCheckedState = [], checkedState, initialExpandedState = {}, selectedState, multiple = false, onNodeCollapse, onNodeExpand, onCheckedStateChange, onSelectedStateChange, onExpandedStateChange, onLoadChildren, checkStrictly = false } = {}) {
34
45
  const [data, setData] = (0, react.useState)([]);
35
46
  const [_expandedState, setExpandedState] = (0, _mantine_hooks.useUncontrolled)({
36
47
  value: expandedState,
@@ -51,14 +62,53 @@ function useTree({ initialSelectedState = [], expandedState, initialCheckedState
51
62
  onChange: onCheckedStateChange
52
63
  });
53
64
  const [anchorNode, setAnchorNode] = (0, react.useState)(null);
65
+ const loadingNodesRef = (0, react.useRef)(/* @__PURE__ */ new Set());
66
+ const loadedNodesRef = (0, react.useRef)(/* @__PURE__ */ new Set());
67
+ const [loadingNodes, setLoadingNodes] = (0, react.useState)([]);
68
+ const [loadErrors, setLoadErrors] = (0, react.useState)({});
54
69
  const initialize = (0, react.useCallback)((_data) => {
55
70
  setExpandedState(getInitialTreeExpandedState(_expandedState, _data, _selectedState));
56
- setCheckedState(getInitialCheckedState(_checkedState, _data));
71
+ setCheckedState(getInitialCheckedState(_checkedState, _data, checkStrictly));
57
72
  setData(_data);
58
73
  }, [
59
74
  _selectedState,
60
75
  _checkedState,
61
- _expandedState
76
+ _expandedState,
77
+ checkStrictly
78
+ ]);
79
+ const loadNodeImpl = (0, react.useCallback)(async (value) => {
80
+ if (!onLoadChildren) return;
81
+ if (loadingNodesRef.current.has(value) || loadedNodesRef.current.has(value)) return;
82
+ loadingNodesRef.current.add(value);
83
+ setLoadingNodes(Array.from(loadingNodesRef.current));
84
+ setLoadErrors((prev) => {
85
+ if (!(value in prev)) return prev;
86
+ const next = { ...prev };
87
+ delete next[value];
88
+ return next;
89
+ });
90
+ try {
91
+ await onLoadChildren(value);
92
+ loadedNodesRef.current.add(value);
93
+ } catch (error) {
94
+ const err = error instanceof Error ? error : new Error(String(error));
95
+ setLoadErrors((prev) => ({
96
+ ...prev,
97
+ [value]: err
98
+ }));
99
+ } finally {
100
+ loadingNodesRef.current.delete(value);
101
+ setLoadingNodes(Array.from(loadingNodesRef.current));
102
+ }
103
+ }, [onLoadChildren]);
104
+ const tryLoadAsync = (0, react.useCallback)((value) => {
105
+ if (!onLoadChildren) return;
106
+ const node = require_get_children_nodes_values.findTreeNode(value, data);
107
+ if (node && node.hasChildren && !Array.isArray(node.children)) loadNodeImpl(value);
108
+ }, [
109
+ onLoadChildren,
110
+ data,
111
+ loadNodeImpl
62
112
  ]);
63
113
  const toggleExpanded = (0, react.useCallback)((value) => {
64
114
  const nextState = {
@@ -66,11 +116,13 @@ function useTree({ initialSelectedState = [], expandedState, initialCheckedState
66
116
  [value]: !_expandedState[value]
67
117
  };
68
118
  nextState[value] ? onNodeExpand?.(value) : onNodeCollapse?.(value);
119
+ if (nextState[value]) tryLoadAsync(value);
69
120
  setExpandedState(nextState);
70
121
  }, [
71
122
  onNodeCollapse,
72
123
  onNodeExpand,
73
- _expandedState
124
+ _expandedState,
125
+ tryLoadAsync
74
126
  ]);
75
127
  const collapse = (0, react.useCallback)((value) => {
76
128
  if (_expandedState[value] !== false) onNodeCollapse?.(value);
@@ -81,18 +133,24 @@ function useTree({ initialSelectedState = [], expandedState, initialCheckedState
81
133
  }, [onNodeCollapse, _expandedState]);
82
134
  const expand = (0, react.useCallback)((value) => {
83
135
  if (_expandedState[value] !== true) onNodeExpand?.(value);
136
+ tryLoadAsync(value);
84
137
  setExpandedState({
85
138
  ..._expandedState,
86
139
  [value]: true
87
140
  });
88
- }, [onNodeExpand, _expandedState]);
141
+ }, [
142
+ onNodeExpand,
143
+ _expandedState,
144
+ tryLoadAsync
145
+ ]);
89
146
  const expandAllNodes = (0, react.useCallback)(() => {
90
147
  const nextState = { ..._expandedState };
91
148
  Object.keys(nextState).forEach((key) => {
92
149
  nextState[key] = true;
150
+ tryLoadAsync(key);
93
151
  });
94
152
  setExpandedState(nextState);
95
- }, [_expandedState]);
153
+ }, [_expandedState, tryLoadAsync]);
96
154
  const collapseAllNodes = (0, react.useCallback)(() => {
97
155
  const nextState = { ..._expandedState };
98
156
  Object.keys(nextState).forEach((key) => {
@@ -129,23 +187,80 @@ function useTree({ initialSelectedState = [], expandedState, initialCheckedState
129
187
  setAnchorNode(null);
130
188
  }, []);
131
189
  const checkNode = (0, react.useCallback)((value) => {
132
- const checkedNodes = require_get_children_nodes_values.getChildrenNodesValues(value, data);
133
- setCheckedState(Array.from(new Set([..._checkedState, ...checkedNodes])));
134
- }, [data, _checkedState]);
190
+ if (checkStrictly) {
191
+ if (!_checkedState.includes(value)) setCheckedState([..._checkedState, value]);
192
+ } else {
193
+ const checkedNodes = require_get_children_nodes_values.getChildrenNodesValues(value, data);
194
+ setCheckedState(Array.from(new Set([..._checkedState, ...checkedNodes])));
195
+ }
196
+ }, [
197
+ data,
198
+ _checkedState,
199
+ checkStrictly
200
+ ]);
135
201
  const uncheckNode = (0, react.useCallback)((value) => {
136
- const checkedNodes = require_get_children_nodes_values.getChildrenNodesValues(value, data);
137
- setCheckedState(_checkedState.filter((item) => !checkedNodes.includes(item)));
138
- }, [data, _checkedState]);
202
+ if (checkStrictly) setCheckedState(_checkedState.filter((item) => item !== value));
203
+ else {
204
+ const checkedNodes = require_get_children_nodes_values.getChildrenNodesValues(value, data);
205
+ setCheckedState(_checkedState.filter((item) => !checkedNodes.includes(item)));
206
+ }
207
+ }, [
208
+ data,
209
+ _checkedState,
210
+ checkStrictly
211
+ ]);
139
212
  const checkAllNodes = (0, react.useCallback)(() => {
140
- setCheckedState(require_get_children_nodes_values.getAllChildrenNodes(data));
141
- }, [data]);
213
+ if (checkStrictly) setCheckedState(getAllNodeValues(data));
214
+ else setCheckedState(require_get_children_nodes_values.getAllChildrenNodes(data));
215
+ }, [data, checkStrictly]);
142
216
  const uncheckAllNodes = (0, react.useCallback)(() => {
143
217
  setCheckedState([]);
144
218
  }, []);
145
- const getCheckedNodes = () => require_get_all_checked_nodes.getAllCheckedNodes(data, _checkedState).result;
146
- const isNodeChecked = (value) => require_is_node_checked.memoizedIsNodeChecked(value, data, _checkedState);
147
- const isNodeIndeterminate = (value) => require_is_node_indeterminate.memoizedIsNodeIndeterminate(value, data, _checkedState);
148
- return {
219
+ const getCheckedNodes = (0, react.useCallback)(() => {
220
+ if (checkStrictly) return _checkedState.map((value) => {
221
+ const node = require_get_children_nodes_values.findTreeNode(value, data);
222
+ return {
223
+ checked: true,
224
+ indeterminate: false,
225
+ value,
226
+ hasChildren: node ? Array.isArray(node.children) && node.children.length > 0 || !!node.hasChildren : false
227
+ };
228
+ });
229
+ return require_get_all_checked_nodes.getAllCheckedNodes(data, _checkedState).result;
230
+ }, [
231
+ checkStrictly,
232
+ _checkedState,
233
+ data
234
+ ]);
235
+ const isNodeChecked = (0, react.useCallback)((value) => {
236
+ if (checkStrictly) return _checkedState.includes(value);
237
+ return require_is_node_checked.memoizedIsNodeChecked(value, data, _checkedState);
238
+ }, [
239
+ checkStrictly,
240
+ _checkedState,
241
+ data
242
+ ]);
243
+ const isNodeIndeterminate = (0, react.useCallback)((value) => {
244
+ if (checkStrictly) return false;
245
+ return require_is_node_indeterminate.memoizedIsNodeIndeterminate(value, data, _checkedState);
246
+ }, [
247
+ checkStrictly,
248
+ _checkedState,
249
+ data
250
+ ]);
251
+ const isNodeLoading = (0, react.useCallback)((value) => loadingNodes.includes(value), [loadingNodes]);
252
+ const getNodeLoadError = (0, react.useCallback)((value) => loadErrors[value] || null, [loadErrors]);
253
+ const invalidateNode = (0, react.useCallback)((value) => {
254
+ loadedNodesRef.current.delete(value);
255
+ setLoadErrors((prev) => {
256
+ if (!(value in prev)) return prev;
257
+ const next = { ...prev };
258
+ delete next[value];
259
+ return next;
260
+ });
261
+ }, []);
262
+ return (0, react.useMemo)(() => ({
263
+ checkStrictly,
149
264
  multiple,
150
265
  expandedState: _expandedState,
151
266
  selectedState: _selectedState,
@@ -170,8 +285,43 @@ function useTree({ initialSelectedState = [], expandedState, initialCheckedState
170
285
  setSelectedState,
171
286
  getCheckedNodes,
172
287
  isNodeChecked,
173
- isNodeIndeterminate
174
- };
288
+ isNodeIndeterminate,
289
+ isNodeLoading,
290
+ getNodeLoadError,
291
+ loadNode: loadNodeImpl,
292
+ invalidateNode
293
+ }), [
294
+ checkStrictly,
295
+ multiple,
296
+ _expandedState,
297
+ _selectedState,
298
+ _checkedState,
299
+ anchorNode,
300
+ initialize,
301
+ toggleExpanded,
302
+ collapse,
303
+ expand,
304
+ expandAllNodes,
305
+ collapseAllNodes,
306
+ setExpandedState,
307
+ checkNode,
308
+ uncheckNode,
309
+ checkAllNodes,
310
+ uncheckAllNodes,
311
+ setCheckedState,
312
+ toggleSelected,
313
+ select,
314
+ deselect,
315
+ clearSelected,
316
+ setSelectedState,
317
+ getCheckedNodes,
318
+ isNodeChecked,
319
+ isNodeIndeterminate,
320
+ isNodeLoading,
321
+ getNodeLoadError,
322
+ loadNodeImpl,
323
+ invalidateNode
324
+ ]);
175
325
  }
176
326
  //#endregion
177
327
  exports.getTreeExpandedState = getTreeExpandedState;
@@ -1 +1 @@
1
- {"version":3,"file":"use-tree.cjs","names":["getChildrenNodesValues","getAllChildrenNodes","getAllCheckedNodes","memoizedIsNodeChecked","memoizedIsNodeIndeterminate"],"sources":["../../../src/components/Tree/use-tree.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useUncontrolled } from '@mantine/hooks';\nimport {\n CheckedNodeStatus,\n getAllCheckedNodes,\n} from './get-all-checked-nodes/get-all-checked-nodes';\nimport {\n getAllChildrenNodes,\n getChildrenNodesValues,\n} from './get-children-nodes-values/get-children-nodes-values';\nimport { memoizedIsNodeChecked } from './is-node-checked/is-node-checked';\nimport { memoizedIsNodeIndeterminate } from './is-node-indeterminate/is-node-indeterminate';\nimport type { TreeNodeData } from './Tree';\n\nexport type TreeExpandedState = Record<string, boolean>;\n\nfunction getInitialTreeExpandedState(\n initialState: TreeExpandedState,\n data: TreeNodeData[],\n value: string | string[] | undefined,\n acc: TreeExpandedState = {}\n) {\n data.forEach((node) => {\n acc[node.value] = node.value in initialState ? initialState[node.value] : node.value === value;\n\n if (Array.isArray(node.children)) {\n getInitialTreeExpandedState(initialState, node.children, value, acc);\n }\n });\n\n return acc;\n}\n\nexport function getTreeExpandedState(\n data: TreeNodeData[],\n expandedNodesValues: string[] | '*'\n): Record<string, boolean> {\n const state = getInitialTreeExpandedState({}, data, []);\n\n if (expandedNodesValues === '*') {\n return Object.keys(state).reduce((acc, key) => ({ ...acc, [key]: true }), {});\n }\n\n expandedNodesValues.forEach((node) => {\n state[node] = true;\n });\n\n return state;\n}\n\nfunction getInitialCheckedState(initialState: string[], data: TreeNodeData[]) {\n const acc: string[] = [];\n\n initialState.forEach((node) => acc.push(...getChildrenNodesValues(node, data)));\n\n return Array.from(new Set(acc));\n}\n\nexport interface UseTreeInput {\n /** Initial expanded state of all nodes, uncontrolled state */\n initialExpandedState?: TreeExpandedState;\n\n /** Expanded state of all nodes, controlled state */\n expandedState?: TreeExpandedState;\n\n /** Called when the tree expanded state changes */\n onExpandedStateChange?: (expandedState: TreeExpandedState) => void;\n\n /** Initial selected state of nodes */\n initialSelectedState?: string[];\n\n /** Selected state of all nodes, controlled state */\n selectedState?: string[];\n\n /** Called when the tree selected state changes */\n onSelectedStateChange?: (selectedState: string[]) => void;\n\n /** Initial checked state of nodes */\n initialCheckedState?: string[];\n\n /** Checked state of all nodes, controlled state */\n checkedState?: string[];\n\n /** Called when the tree checked state changes */\n onCheckedStateChange?: (checkedState: string[]) => void;\n\n /** Determines whether multiple node can be selected at a time */\n multiple?: boolean;\n\n /** Called with the node value when it is expanded */\n onNodeExpand?: (value: string) => void;\n\n /** Called with the node value when it is collapsed */\n onNodeCollapse?: (value: string) => void;\n}\n\nexport interface UseTreeReturnType {\n /** Determines whether multiple node can be selected at a time */\n multiple: boolean;\n\n /** A record of `node.value` and boolean values that represent nodes expanded state */\n expandedState: TreeExpandedState;\n\n /** An array of selected nodes values */\n selectedState: string[];\n\n /** An array of checked nodes values */\n checkedState: string[];\n\n /** A value of the node that was last clicked\n * Anchor node is used to determine range of selected nodes for multiple selection\n */\n anchorNode: string | null;\n\n /** Initializes tree state based on provided data, called automatically by the Tree component */\n initialize: (data: TreeNodeData[]) => void;\n\n /** Toggles expanded state of the node with provided value */\n toggleExpanded: (value: string) => void;\n\n /** Collapses node with provided value */\n collapse: (value: string) => void;\n\n /** Expands node with provided value */\n expand: (value: string) => void;\n\n /** Expands all nodes */\n expandAllNodes: () => void;\n\n /** Collapses all nodes */\n collapseAllNodes: () => void;\n\n /** Sets expanded state */\n setExpandedState: (value: TreeExpandedState) => void;\n\n /** Toggles selected state of the node with provided value */\n toggleSelected: (value: string) => void;\n\n /** Selects node with provided value */\n select: (value: string) => void;\n\n /** Deselects node with provided value */\n deselect: (value: string) => void;\n\n /** Clears selected state */\n clearSelected: () => void;\n\n /** Sets selected state */\n setSelectedState: (value: string[]) => void;\n\n /** Checks node with provided value */\n checkNode: (value: string) => void;\n\n /** Unchecks node with provided value */\n uncheckNode: (value: string) => void;\n\n /** Checks all nodes */\n checkAllNodes: () => void;\n\n /** Unchecks all nodes */\n uncheckAllNodes: () => void;\n\n /** Sets checked state */\n setCheckedState: (value: string[]) => void;\n\n /** Returns all checked nodes with status */\n getCheckedNodes: () => CheckedNodeStatus[];\n\n /** Returns `true` if node with provided value is checked */\n isNodeChecked: (value: string) => boolean;\n\n /** Returns `true` if node with provided value is indeterminate */\n isNodeIndeterminate: (value: string) => boolean;\n}\n\nexport function useTree({\n initialSelectedState = [],\n expandedState,\n initialCheckedState = [],\n checkedState,\n initialExpandedState = {},\n selectedState,\n multiple = false,\n onNodeCollapse,\n onNodeExpand,\n onCheckedStateChange,\n onSelectedStateChange,\n onExpandedStateChange,\n}: UseTreeInput = {}): UseTreeReturnType {\n const [data, setData] = useState<TreeNodeData[]>([]);\n const [_expandedState, setExpandedState] = useUncontrolled({\n value: expandedState,\n defaultValue: initialExpandedState,\n finalValue: {},\n onChange: onExpandedStateChange,\n });\n\n const [_selectedState, setSelectedState] = useUncontrolled({\n value: selectedState,\n defaultValue: initialSelectedState,\n finalValue: [],\n onChange: onSelectedStateChange,\n });\n\n const [_checkedState, setCheckedState] = useUncontrolled({\n value: checkedState,\n defaultValue: initialCheckedState,\n finalValue: [],\n onChange: onCheckedStateChange,\n });\n\n const [anchorNode, setAnchorNode] = useState<string | null>(null);\n\n const initialize = useCallback(\n (_data: TreeNodeData[]) => {\n setExpandedState(getInitialTreeExpandedState(_expandedState, _data, _selectedState));\n setCheckedState(getInitialCheckedState(_checkedState, _data));\n setData(_data);\n },\n [_selectedState, _checkedState, _expandedState]\n );\n\n const toggleExpanded = useCallback(\n (value: string) => {\n const nextState = { ..._expandedState, [value]: !_expandedState[value] };\n nextState[value] ? onNodeExpand?.(value) : onNodeCollapse?.(value);\n setExpandedState(nextState);\n },\n [onNodeCollapse, onNodeExpand, _expandedState]\n );\n\n const collapse = useCallback(\n (value: string) => {\n if (_expandedState[value] !== false) {\n onNodeCollapse?.(value);\n }\n\n setExpandedState({ ..._expandedState, [value]: false });\n },\n [onNodeCollapse, _expandedState]\n );\n\n const expand = useCallback(\n (value: string) => {\n if (_expandedState[value] !== true) {\n onNodeExpand?.(value);\n }\n\n setExpandedState({ ..._expandedState, [value]: true });\n },\n [onNodeExpand, _expandedState]\n );\n\n const expandAllNodes = useCallback(() => {\n const nextState = { ..._expandedState };\n Object.keys(nextState).forEach((key) => {\n nextState[key] = true;\n });\n\n setExpandedState(nextState);\n }, [_expandedState]);\n\n const collapseAllNodes = useCallback(() => {\n const nextState = { ..._expandedState };\n Object.keys(nextState).forEach((key) => {\n nextState[key] = false;\n });\n\n setExpandedState(nextState);\n }, [_expandedState]);\n\n const toggleSelected = useCallback(\n (value: string) => {\n if (!multiple) {\n if (_selectedState.includes(value)) {\n setAnchorNode(null);\n return [];\n }\n\n setAnchorNode(value);\n return [value];\n }\n\n if (_selectedState.includes(value)) {\n setAnchorNode(null);\n return _selectedState.filter((item) => item !== value);\n }\n\n setAnchorNode(value);\n setSelectedState([..._selectedState, value]);\n },\n [_selectedState]\n );\n\n const select = useCallback(\n (value: string) => {\n setAnchorNode(value);\n setSelectedState(\n multiple\n ? _selectedState.includes(value)\n ? _selectedState\n : [..._selectedState, value]\n : [value]\n );\n },\n [_selectedState]\n );\n\n const deselect = useCallback(\n (value: string) => {\n anchorNode === value && setAnchorNode(null);\n setSelectedState(_selectedState.filter((item) => item !== value));\n },\n [_selectedState]\n );\n\n const clearSelected = useCallback(() => {\n setSelectedState([]);\n setAnchorNode(null);\n }, []);\n\n const checkNode = useCallback(\n (value: string) => {\n const checkedNodes = getChildrenNodesValues(value, data);\n setCheckedState(Array.from(new Set([..._checkedState, ...checkedNodes])));\n },\n [data, _checkedState]\n );\n\n const uncheckNode = useCallback(\n (value: string) => {\n const checkedNodes = getChildrenNodesValues(value, data);\n setCheckedState(_checkedState.filter((item) => !checkedNodes.includes(item)));\n },\n [data, _checkedState]\n );\n\n const checkAllNodes = useCallback(() => {\n setCheckedState(getAllChildrenNodes(data));\n }, [data]);\n\n const uncheckAllNodes = useCallback(() => {\n setCheckedState([]);\n }, []);\n\n const getCheckedNodes = () => getAllCheckedNodes(data, _checkedState).result;\n const isNodeChecked = (value: string) => memoizedIsNodeChecked(value, data, _checkedState);\n const isNodeIndeterminate = (value: string) =>\n memoizedIsNodeIndeterminate(value, data, _checkedState);\n\n return {\n multiple,\n expandedState: _expandedState,\n selectedState: _selectedState,\n checkedState: _checkedState,\n anchorNode,\n initialize,\n\n toggleExpanded,\n collapse,\n expand,\n expandAllNodes,\n collapseAllNodes,\n setExpandedState,\n\n checkNode,\n uncheckNode,\n checkAllNodes,\n uncheckAllNodes,\n setCheckedState,\n\n toggleSelected,\n select,\n deselect,\n clearSelected,\n setSelectedState,\n\n getCheckedNodes,\n isNodeChecked,\n isNodeIndeterminate,\n };\n}\n\nexport type TreeController = ReturnType<typeof useTree>;\n"],"mappings":";;;;;;;;;AAgBA,SAAS,4BACP,cACA,MACA,OACA,MAAyB,EAAE,EAC3B;AACA,MAAK,SAAS,SAAS;AACrB,MAAI,KAAK,SAAS,KAAK,SAAS,eAAe,aAAa,KAAK,SAAS,KAAK,UAAU;AAEzF,MAAI,MAAM,QAAQ,KAAK,SAAS,CAC9B,6BAA4B,cAAc,KAAK,UAAU,OAAO,IAAI;GAEtE;AAEF,QAAO;;AAGT,SAAgB,qBACd,MACA,qBACyB;CACzB,MAAM,QAAQ,4BAA4B,EAAE,EAAE,MAAM,EAAE,CAAC;AAEvD,KAAI,wBAAwB,IAC1B,QAAO,OAAO,KAAK,MAAM,CAAC,QAAQ,KAAK,SAAS;EAAE,GAAG;GAAM,MAAM;EAAM,GAAG,EAAE,CAAC;AAG/E,qBAAoB,SAAS,SAAS;AACpC,QAAM,QAAQ;GACd;AAEF,QAAO;;AAGT,SAAS,uBAAuB,cAAwB,MAAsB;CAC5E,MAAM,MAAgB,EAAE;AAExB,cAAa,SAAS,SAAS,IAAI,KAAK,GAAGA,kCAAAA,uBAAuB,MAAM,KAAK,CAAC,CAAC;AAE/E,QAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC;;AAwHjC,SAAgB,QAAQ,EACtB,uBAAuB,EAAE,EACzB,eACA,sBAAsB,EAAE,EACxB,cACA,uBAAuB,EAAE,EACzB,eACA,WAAW,OACX,gBACA,cACA,sBACA,uBACA,0BACgB,EAAE,EAAqB;CACvC,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,UAAoC,EAAE,CAAC;CACpD,MAAM,CAAC,gBAAgB,qBAAA,GAAA,eAAA,iBAAoC;EACzD,OAAO;EACP,cAAc;EACd,YAAY,EAAE;EACd,UAAU;EACX,CAAC;CAEF,MAAM,CAAC,gBAAgB,qBAAA,GAAA,eAAA,iBAAoC;EACzD,OAAO;EACP,cAAc;EACd,YAAY,EAAE;EACd,UAAU;EACX,CAAC;CAEF,MAAM,CAAC,eAAe,oBAAA,GAAA,eAAA,iBAAmC;EACvD,OAAO;EACP,cAAc;EACd,YAAY,EAAE;EACd,UAAU;EACX,CAAC;CAEF,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,UAAyC,KAAK;CAEjE,MAAM,cAAA,GAAA,MAAA,cACH,UAA0B;AACzB,mBAAiB,4BAA4B,gBAAgB,OAAO,eAAe,CAAC;AACpF,kBAAgB,uBAAuB,eAAe,MAAM,CAAC;AAC7D,UAAQ,MAAM;IAEhB;EAAC;EAAgB;EAAe;EAAe,CAChD;CAED,MAAM,kBAAA,GAAA,MAAA,cACH,UAAkB;EACjB,MAAM,YAAY;GAAE,GAAG;IAAiB,QAAQ,CAAC,eAAe;GAAQ;AACxE,YAAU,SAAS,eAAe,MAAM,GAAG,iBAAiB,MAAM;AAClE,mBAAiB,UAAU;IAE7B;EAAC;EAAgB;EAAc;EAAe,CAC/C;CAED,MAAM,YAAA,GAAA,MAAA,cACH,UAAkB;AACjB,MAAI,eAAe,WAAW,MAC5B,kBAAiB,MAAM;AAGzB,mBAAiB;GAAE,GAAG;IAAiB,QAAQ;GAAO,CAAC;IAEzD,CAAC,gBAAgB,eAAe,CACjC;CAED,MAAM,UAAA,GAAA,MAAA,cACH,UAAkB;AACjB,MAAI,eAAe,WAAW,KAC5B,gBAAe,MAAM;AAGvB,mBAAiB;GAAE,GAAG;IAAiB,QAAQ;GAAM,CAAC;IAExD,CAAC,cAAc,eAAe,CAC/B;CAED,MAAM,kBAAA,GAAA,MAAA,mBAAmC;EACvC,MAAM,YAAY,EAAE,GAAG,gBAAgB;AACvC,SAAO,KAAK,UAAU,CAAC,SAAS,QAAQ;AACtC,aAAU,OAAO;IACjB;AAEF,mBAAiB,UAAU;IAC1B,CAAC,eAAe,CAAC;CAEpB,MAAM,oBAAA,GAAA,MAAA,mBAAqC;EACzC,MAAM,YAAY,EAAE,GAAG,gBAAgB;AACvC,SAAO,KAAK,UAAU,CAAC,SAAS,QAAQ;AACtC,aAAU,OAAO;IACjB;AAEF,mBAAiB,UAAU;IAC1B,CAAC,eAAe,CAAC;CAEpB,MAAM,kBAAA,GAAA,MAAA,cACH,UAAkB;AACjB,MAAI,CAAC,UAAU;AACb,OAAI,eAAe,SAAS,MAAM,EAAE;AAClC,kBAAc,KAAK;AACnB,WAAO,EAAE;;AAGX,iBAAc,MAAM;AACpB,UAAO,CAAC,MAAM;;AAGhB,MAAI,eAAe,SAAS,MAAM,EAAE;AAClC,iBAAc,KAAK;AACnB,UAAO,eAAe,QAAQ,SAAS,SAAS,MAAM;;AAGxD,gBAAc,MAAM;AACpB,mBAAiB,CAAC,GAAG,gBAAgB,MAAM,CAAC;IAE9C,CAAC,eAAe,CACjB;CAED,MAAM,UAAA,GAAA,MAAA,cACH,UAAkB;AACjB,gBAAc,MAAM;AACpB,mBACE,WACI,eAAe,SAAS,MAAM,GAC5B,iBACA,CAAC,GAAG,gBAAgB,MAAM,GAC5B,CAAC,MAAM,CACZ;IAEH,CAAC,eAAe,CACjB;CAED,MAAM,YAAA,GAAA,MAAA,cACH,UAAkB;AACjB,iBAAe,SAAS,cAAc,KAAK;AAC3C,mBAAiB,eAAe,QAAQ,SAAS,SAAS,MAAM,CAAC;IAEnE,CAAC,eAAe,CACjB;CAED,MAAM,iBAAA,GAAA,MAAA,mBAAkC;AACtC,mBAAiB,EAAE,CAAC;AACpB,gBAAc,KAAK;IAClB,EAAE,CAAC;CAEN,MAAM,aAAA,GAAA,MAAA,cACH,UAAkB;EACjB,MAAM,eAAeA,kCAAAA,uBAAuB,OAAO,KAAK;AACxD,kBAAgB,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC;IAE3E,CAAC,MAAM,cAAc,CACtB;CAED,MAAM,eAAA,GAAA,MAAA,cACH,UAAkB;EACjB,MAAM,eAAeA,kCAAAA,uBAAuB,OAAO,KAAK;AACxD,kBAAgB,cAAc,QAAQ,SAAS,CAAC,aAAa,SAAS,KAAK,CAAC,CAAC;IAE/E,CAAC,MAAM,cAAc,CACtB;CAED,MAAM,iBAAA,GAAA,MAAA,mBAAkC;AACtC,kBAAgBC,kCAAAA,oBAAoB,KAAK,CAAC;IACzC,CAAC,KAAK,CAAC;CAEV,MAAM,mBAAA,GAAA,MAAA,mBAAoC;AACxC,kBAAgB,EAAE,CAAC;IAClB,EAAE,CAAC;CAEN,MAAM,wBAAwBC,8BAAAA,mBAAmB,MAAM,cAAc,CAAC;CACtE,MAAM,iBAAiB,UAAkBC,wBAAAA,sBAAsB,OAAO,MAAM,cAAc;CAC1F,MAAM,uBAAuB,UAC3BC,8BAAAA,4BAA4B,OAAO,MAAM,cAAc;AAEzD,QAAO;EACL;EACA,eAAe;EACf,eAAe;EACf,cAAc;EACd;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACD"}
1
+ {"version":3,"file":"use-tree.cjs","names":["getChildrenNodesValues","findTreeNode","getAllChildrenNodes","getAllCheckedNodes","memoizedIsNodeChecked","memoizedIsNodeIndeterminate"],"sources":["../../../src/components/Tree/use-tree.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { useUncontrolled } from '@mantine/hooks';\nimport {\n CheckedNodeStatus,\n getAllCheckedNodes,\n} from './get-all-checked-nodes/get-all-checked-nodes';\nimport {\n findTreeNode,\n getAllChildrenNodes,\n getChildrenNodesValues,\n} from './get-children-nodes-values/get-children-nodes-values';\nimport { memoizedIsNodeChecked } from './is-node-checked/is-node-checked';\nimport { memoizedIsNodeIndeterminate } from './is-node-indeterminate/is-node-indeterminate';\nimport type { TreeNodeData } from './Tree';\n\nexport type TreeExpandedState = Record<string, boolean>;\n\nfunction getInitialTreeExpandedState(\n initialState: TreeExpandedState,\n data: TreeNodeData[],\n value: string | string[] | undefined,\n acc: TreeExpandedState = {}\n) {\n data.forEach((node) => {\n acc[node.value] = node.value in initialState ? initialState[node.value] : node.value === value;\n\n if (Array.isArray(node.children)) {\n getInitialTreeExpandedState(initialState, node.children, value, acc);\n }\n });\n\n return acc;\n}\n\nexport function getTreeExpandedState(\n data: TreeNodeData[],\n expandedNodesValues: string[] | '*'\n): Record<string, boolean> {\n const state = getInitialTreeExpandedState({}, data, []);\n\n if (expandedNodesValues === '*') {\n const result: Record<string, boolean> = {};\n const keys = Object.keys(state);\n for (let i = 0; i < keys.length; i++) {\n result[keys[i]] = true;\n }\n return result;\n }\n\n expandedNodesValues.forEach((node) => {\n state[node] = true;\n });\n\n return state;\n}\n\nfunction getInitialCheckedState(\n initialState: string[],\n data: TreeNodeData[],\n checkStrictly: boolean\n) {\n if (checkStrictly) {\n return initialState;\n }\n\n const acc: string[] = [];\n\n initialState.forEach((node) => acc.push(...getChildrenNodesValues(node, data)));\n\n return Array.from(new Set(acc));\n}\n\nfunction getAllNodeValues(data: TreeNodeData[]): string[] {\n const acc: string[] = [];\n for (const node of data) {\n acc.push(node.value);\n if (Array.isArray(node.children) && node.children.length > 0) {\n acc.push(...getAllNodeValues(node.children));\n }\n }\n return acc;\n}\n\nexport interface UseTreeInput {\n /** Initial expanded state of all nodes, uncontrolled state */\n initialExpandedState?: TreeExpandedState;\n\n /** Expanded state of all nodes, controlled state */\n expandedState?: TreeExpandedState;\n\n /** Called when the tree expanded state changes */\n onExpandedStateChange?: (expandedState: TreeExpandedState) => void;\n\n /** Initial selected state of nodes */\n initialSelectedState?: string[];\n\n /** Selected state of all nodes, controlled state */\n selectedState?: string[];\n\n /** Called when the tree selected state changes */\n onSelectedStateChange?: (selectedState: string[]) => void;\n\n /** Initial checked state of nodes */\n initialCheckedState?: string[];\n\n /** Checked state of all nodes, controlled state */\n checkedState?: string[];\n\n /** Called when the tree checked state changes */\n onCheckedStateChange?: (checkedState: string[]) => void;\n\n /** Determines whether multiple node can be selected at a time */\n multiple?: boolean;\n\n /** Called with the node value when it is expanded */\n onNodeExpand?: (value: string) => void;\n\n /** Called with the node value when it is collapsed */\n onNodeCollapse?: (value: string) => void;\n\n /** Called when a node with `hasChildren: true` is expanded for the first time.\n * The callback should update the tree data with loaded children.\n */\n onLoadChildren?: (nodeValue: string) => Promise<void>;\n\n /** When `true`, checking a parent does not affect children and vice versa.\n * Each node's checked state is fully independent. @default false\n */\n checkStrictly?: boolean;\n}\n\nexport interface UseTreeReturnType {\n /** When `true`, each node's checked state is independent (no parent-child cascading) */\n checkStrictly: boolean;\n\n /** Determines whether multiple node can be selected at a time */\n multiple: boolean;\n\n /** A record of `node.value` and boolean values that represent nodes expanded state */\n expandedState: TreeExpandedState;\n\n /** An array of selected nodes values */\n selectedState: string[];\n\n /** An array of checked nodes values */\n checkedState: string[];\n\n /** A value of the node that was last clicked\n * Anchor node is used to determine range of selected nodes for multiple selection\n */\n anchorNode: string | null;\n\n /** Initializes tree state based on provided data, called automatically by the Tree component */\n initialize: (data: TreeNodeData[]) => void;\n\n /** Toggles expanded state of the node with provided value */\n toggleExpanded: (value: string) => void;\n\n /** Collapses node with provided value */\n collapse: (value: string) => void;\n\n /** Expands node with provided value */\n expand: (value: string) => void;\n\n /** Expands all nodes */\n expandAllNodes: () => void;\n\n /** Collapses all nodes */\n collapseAllNodes: () => void;\n\n /** Sets expanded state */\n setExpandedState: (value: TreeExpandedState) => void;\n\n /** Toggles selected state of the node with provided value */\n toggleSelected: (value: string) => void;\n\n /** Selects node with provided value */\n select: (value: string) => void;\n\n /** Deselects node with provided value */\n deselect: (value: string) => void;\n\n /** Clears selected state */\n clearSelected: () => void;\n\n /** Sets selected state */\n setSelectedState: (value: string[]) => void;\n\n /** Checks node with provided value */\n checkNode: (value: string) => void;\n\n /** Unchecks node with provided value */\n uncheckNode: (value: string) => void;\n\n /** Checks all nodes */\n checkAllNodes: () => void;\n\n /** Unchecks all nodes */\n uncheckAllNodes: () => void;\n\n /** Sets checked state */\n setCheckedState: (value: string[]) => void;\n\n /** Returns all checked nodes with status */\n getCheckedNodes: () => CheckedNodeStatus[];\n\n /** Returns `true` if node with provided value is checked */\n isNodeChecked: (value: string) => boolean;\n\n /** Returns `true` if node with provided value is indeterminate */\n isNodeIndeterminate: (value: string) => boolean;\n\n /** Returns `true` if the node's children are currently being loaded */\n isNodeLoading: (value: string) => boolean;\n\n /** Returns the error from the last failed load attempt for the given node, or `null` */\n getNodeLoadError: (value: string) => Error | null;\n\n /** Programmatically triggers loading of a node's children */\n loadNode: (value: string) => Promise<void>;\n\n /** Clears the loaded cache for a node, causing it to re-fetch on next expand */\n invalidateNode: (value: string) => void;\n}\n\nexport function useTree({\n initialSelectedState = [],\n expandedState,\n initialCheckedState = [],\n checkedState,\n initialExpandedState = {},\n selectedState,\n multiple = false,\n onNodeCollapse,\n onNodeExpand,\n onCheckedStateChange,\n onSelectedStateChange,\n onExpandedStateChange,\n onLoadChildren,\n checkStrictly = false,\n}: UseTreeInput = {}): UseTreeReturnType {\n const [data, setData] = useState<TreeNodeData[]>([]);\n const [_expandedState, setExpandedState] = useUncontrolled({\n value: expandedState,\n defaultValue: initialExpandedState,\n finalValue: {},\n onChange: onExpandedStateChange,\n });\n\n const [_selectedState, setSelectedState] = useUncontrolled({\n value: selectedState,\n defaultValue: initialSelectedState,\n finalValue: [],\n onChange: onSelectedStateChange,\n });\n\n const [_checkedState, setCheckedState] = useUncontrolled({\n value: checkedState,\n defaultValue: initialCheckedState,\n finalValue: [],\n onChange: onCheckedStateChange,\n });\n\n const [anchorNode, setAnchorNode] = useState<string | null>(null);\n\n const loadingNodesRef = useRef(new Set<string>());\n const loadedNodesRef = useRef(new Set<string>());\n const [loadingNodes, setLoadingNodes] = useState<string[]>([]);\n const [loadErrors, setLoadErrors] = useState<Record<string, Error>>({});\n\n const initialize = useCallback(\n (_data: TreeNodeData[]) => {\n setExpandedState(getInitialTreeExpandedState(_expandedState, _data, _selectedState));\n setCheckedState(getInitialCheckedState(_checkedState, _data, checkStrictly));\n setData(_data);\n },\n [_selectedState, _checkedState, _expandedState, checkStrictly]\n );\n\n const loadNodeImpl = useCallback(\n async (value: string) => {\n if (!onLoadChildren) {\n return;\n }\n\n if (loadingNodesRef.current.has(value) || loadedNodesRef.current.has(value)) {\n return;\n }\n\n loadingNodesRef.current.add(value);\n setLoadingNodes(Array.from(loadingNodesRef.current));\n setLoadErrors((prev) => {\n if (!(value in prev)) {\n return prev;\n }\n\n const next = { ...prev };\n delete next[value];\n return next;\n });\n\n try {\n await onLoadChildren(value);\n loadedNodesRef.current.add(value);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setLoadErrors((prev) => ({ ...prev, [value]: err }));\n } finally {\n loadingNodesRef.current.delete(value);\n setLoadingNodes(Array.from(loadingNodesRef.current));\n }\n },\n [onLoadChildren]\n );\n\n const tryLoadAsync = useCallback(\n (value: string) => {\n if (!onLoadChildren) {\n return;\n }\n\n const node = findTreeNode(value, data);\n if (node && node.hasChildren && !Array.isArray(node.children)) {\n loadNodeImpl(value);\n }\n },\n [onLoadChildren, data, loadNodeImpl]\n );\n\n const toggleExpanded = useCallback(\n (value: string) => {\n const nextState = { ..._expandedState, [value]: !_expandedState[value] };\n nextState[value] ? onNodeExpand?.(value) : onNodeCollapse?.(value);\n if (nextState[value]) {\n tryLoadAsync(value);\n }\n setExpandedState(nextState);\n },\n [onNodeCollapse, onNodeExpand, _expandedState, tryLoadAsync]\n );\n\n const collapse = useCallback(\n (value: string) => {\n if (_expandedState[value] !== false) {\n onNodeCollapse?.(value);\n }\n\n setExpandedState({ ..._expandedState, [value]: false });\n },\n [onNodeCollapse, _expandedState]\n );\n\n const expand = useCallback(\n (value: string) => {\n if (_expandedState[value] !== true) {\n onNodeExpand?.(value);\n }\n\n tryLoadAsync(value);\n setExpandedState({ ..._expandedState, [value]: true });\n },\n [onNodeExpand, _expandedState, tryLoadAsync]\n );\n\n const expandAllNodes = useCallback(() => {\n const nextState = { ..._expandedState };\n Object.keys(nextState).forEach((key) => {\n nextState[key] = true;\n tryLoadAsync(key);\n });\n\n setExpandedState(nextState);\n }, [_expandedState, tryLoadAsync]);\n\n const collapseAllNodes = useCallback(() => {\n const nextState = { ..._expandedState };\n Object.keys(nextState).forEach((key) => {\n nextState[key] = false;\n });\n\n setExpandedState(nextState);\n }, [_expandedState]);\n\n const toggleSelected = useCallback(\n (value: string) => {\n if (!multiple) {\n if (_selectedState.includes(value)) {\n setAnchorNode(null);\n return [];\n }\n\n setAnchorNode(value);\n return [value];\n }\n\n if (_selectedState.includes(value)) {\n setAnchorNode(null);\n return _selectedState.filter((item) => item !== value);\n }\n\n setAnchorNode(value);\n setSelectedState([..._selectedState, value]);\n },\n [_selectedState]\n );\n\n const select = useCallback(\n (value: string) => {\n setAnchorNode(value);\n setSelectedState(\n multiple\n ? _selectedState.includes(value)\n ? _selectedState\n : [..._selectedState, value]\n : [value]\n );\n },\n [_selectedState]\n );\n\n const deselect = useCallback(\n (value: string) => {\n anchorNode === value && setAnchorNode(null);\n setSelectedState(_selectedState.filter((item) => item !== value));\n },\n [_selectedState]\n );\n\n const clearSelected = useCallback(() => {\n setSelectedState([]);\n setAnchorNode(null);\n }, []);\n\n const checkNode = useCallback(\n (value: string) => {\n if (checkStrictly) {\n if (!_checkedState.includes(value)) {\n setCheckedState([..._checkedState, value]);\n }\n } else {\n const checkedNodes = getChildrenNodesValues(value, data);\n setCheckedState(Array.from(new Set([..._checkedState, ...checkedNodes])));\n }\n },\n [data, _checkedState, checkStrictly]\n );\n\n const uncheckNode = useCallback(\n (value: string) => {\n if (checkStrictly) {\n setCheckedState(_checkedState.filter((item) => item !== value));\n } else {\n const checkedNodes = getChildrenNodesValues(value, data);\n setCheckedState(_checkedState.filter((item) => !checkedNodes.includes(item)));\n }\n },\n [data, _checkedState, checkStrictly]\n );\n\n const checkAllNodes = useCallback(() => {\n if (checkStrictly) {\n setCheckedState(getAllNodeValues(data));\n } else {\n setCheckedState(getAllChildrenNodes(data));\n }\n }, [data, checkStrictly]);\n\n const uncheckAllNodes = useCallback(() => {\n setCheckedState([]);\n }, []);\n\n const getCheckedNodes = useCallback((): CheckedNodeStatus[] => {\n if (checkStrictly) {\n return _checkedState.map((value) => {\n const node = findTreeNode(value, data);\n return {\n checked: true,\n indeterminate: false,\n value,\n hasChildren: node\n ? (Array.isArray(node.children) && node.children.length > 0) || !!node.hasChildren\n : false,\n };\n });\n }\n return getAllCheckedNodes(data, _checkedState).result;\n }, [checkStrictly, _checkedState, data]);\n\n const isNodeChecked = useCallback(\n (value: string) => {\n if (checkStrictly) {\n return _checkedState.includes(value);\n }\n return memoizedIsNodeChecked(value, data, _checkedState);\n },\n [checkStrictly, _checkedState, data]\n );\n\n const isNodeIndeterminate = useCallback(\n (value: string) => {\n if (checkStrictly) {\n return false;\n }\n return memoizedIsNodeIndeterminate(value, data, _checkedState);\n },\n [checkStrictly, _checkedState, data]\n );\n\n const isNodeLoading = useCallback(\n (value: string) => loadingNodes.includes(value),\n [loadingNodes]\n );\n\n const getNodeLoadError = useCallback((value: string) => loadErrors[value] || null, [loadErrors]);\n\n const invalidateNode = useCallback((value: string) => {\n loadedNodesRef.current.delete(value);\n setLoadErrors((prev) => {\n if (!(value in prev)) {\n return prev;\n }\n\n const next = { ...prev };\n delete next[value];\n return next;\n });\n }, []);\n\n return useMemo(\n () => ({\n checkStrictly,\n multiple,\n expandedState: _expandedState,\n selectedState: _selectedState,\n checkedState: _checkedState,\n anchorNode,\n initialize,\n\n toggleExpanded,\n collapse,\n expand,\n expandAllNodes,\n collapseAllNodes,\n setExpandedState,\n\n checkNode,\n uncheckNode,\n checkAllNodes,\n uncheckAllNodes,\n setCheckedState,\n\n toggleSelected,\n select,\n deselect,\n clearSelected,\n setSelectedState,\n\n getCheckedNodes,\n isNodeChecked,\n isNodeIndeterminate,\n\n isNodeLoading,\n getNodeLoadError,\n loadNode: loadNodeImpl,\n invalidateNode,\n }),\n [\n checkStrictly,\n multiple,\n _expandedState,\n _selectedState,\n _checkedState,\n anchorNode,\n initialize,\n toggleExpanded,\n collapse,\n expand,\n expandAllNodes,\n collapseAllNodes,\n setExpandedState,\n checkNode,\n uncheckNode,\n checkAllNodes,\n uncheckAllNodes,\n setCheckedState,\n toggleSelected,\n select,\n deselect,\n clearSelected,\n setSelectedState,\n getCheckedNodes,\n isNodeChecked,\n isNodeIndeterminate,\n isNodeLoading,\n getNodeLoadError,\n loadNodeImpl,\n invalidateNode,\n ]\n );\n}\n\nexport type TreeController = ReturnType<typeof useTree>;\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ const require_is_number_like = require("../utils/is-number-like/is-number-like.c
4
4
  const require_Mantine_context = require("../MantineProvider/Mantine.context.cjs");
5
5
  const require_MantineThemeProvider = require("../MantineProvider/MantineThemeProvider/MantineThemeProvider.cjs");
6
6
  const require_InlineStyles = require("../InlineStyles/InlineStyles.cjs");
7
+ const require_hash_styles = require("../InlineStyles/hash-styles.cjs");
7
8
  const require_extract_style_props = require("./style-props/extract-style-props/extract-style-props.cjs");
8
9
  const require_style_props_data = require("./style-props/style-props-data.cjs");
9
10
  const require_parse_style_props = require("./style-props/parse-style-props/parse-style-props.cjs");
@@ -20,12 +21,14 @@ function _Box({ component, style, __vars, className, variant, mod, size, hiddenF
20
21
  const Element = component || "div";
21
22
  const { styleProps, rest } = require_extract_style_props.extractStyleProps(others);
22
23
  const transformedSx = require_Mantine_context.useMantineSxTransform()?.()?.(styleProps.sx);
23
- const responsiveClassName = require_use_random_classname.useRandomClassName();
24
+ const randomClassName = require_use_random_classname.useRandomClassName();
24
25
  const parsedStyleProps = require_parse_style_props.parseStyleProps({
25
26
  styleProps,
26
27
  theme,
27
28
  data: require_style_props_data.STYlE_PROPS_DATA
28
29
  });
30
+ const deduplicateInlineStyles = require_Mantine_context.useMantineDeduplicateInlineStyles();
31
+ const responsiveClassName = deduplicateInlineStyles && parsedStyleProps.hasResponsiveStyles ? require_hash_styles.hashStyleProps(parsedStyleProps.styles, parsedStyleProps.media) : randomClassName;
29
32
  const props = {
30
33
  ref,
31
34
  style: require_get_box_style.getBoxStyle({
@@ -50,7 +53,8 @@ function _Box({ component, style, __vars, className, variant, mod, size, hiddenF
50
53
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [parsedStyleProps.hasResponsiveStyles && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_InlineStyles.InlineStyles, {
51
54
  selector: `.${responsiveClassName}`,
52
55
  styles: parsedStyleProps.styles,
53
- media: parsedStyleProps.media
56
+ media: parsedStyleProps.media,
57
+ deduplicate: deduplicateInlineStyles
54
58
  }), typeof renderRoot === "function" ? renderRoot(props) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Element, { ...props })] });
55
59
  }
56
60
  _Box.displayName = "@mantine/core/Box";
@@ -1 +1 @@
1
- {"version":3,"file":"Box.cjs","names":["useMantineTheme","extractStyleProps","useMantineSxTransform","useRandomClassName","parseStyleProps","STYlE_PROPS_DATA","getBoxStyle","isNumberLike","getBoxMod","InlineStyles","polymorphic"],"sources":["../../../src/core/Box/Box.tsx"],"sourcesContent":["import cx from 'clsx';\nimport { polymorphic } from '../factory';\nimport { InlineStyles } from '../InlineStyles';\nimport { MantineBreakpoint, useMantineSxTransform, useMantineTheme } from '../MantineProvider';\nimport { isNumberLike } from '../utils';\nimport type { CssVarsProp, MantineStyleProp } from './Box.types';\nimport { getBoxMod } from './get-box-mod/get-box-mod';\nimport { getBoxStyle } from './get-box-style/get-box-style';\nimport {\n extractStyleProps,\n MantineStyleProps,\n parseStyleProps,\n STYlE_PROPS_DATA,\n} from './style-props';\nimport { useRandomClassName } from './use-random-classname/use-random-classname';\n\nexport type Mod = Record<string, any> | string;\nexport type BoxMod = Mod | Mod[] | BoxMod[];\n\nexport interface BoxProps extends MantineStyleProps {\n /** Class added to the root element, if applicable */\n className?: string;\n\n /** Inline style added to root component element, can subscribe to theme defined on MantineProvider */\n style?: MantineStyleProp;\n\n /** CSS variables defined on root component element */\n __vars?: CssVarsProp;\n\n /** `size` property passed down the HTML element */\n __size?: string;\n\n /** Breakpoint above which the component is hidden with `display: none` */\n hiddenFrom?: MantineBreakpoint;\n\n /** Breakpoint below which the component is hidden with `display: none` */\n visibleFrom?: MantineBreakpoint;\n\n /** Determines whether component should be hidden in light color scheme with `display: none` */\n lightHidden?: boolean;\n\n /** Determines whether component should be hidden in dark color scheme with `display: none` */\n darkHidden?: boolean;\n\n /** Element modifiers transformed into `data-` attributes, for example, `{ 'data-size': 'xl' }`, falsy values are removed */\n mod?: BoxMod;\n}\n\nexport type ElementProps<\n ElementType extends React.ElementType,\n PropsToOmit extends string = never,\n> = Omit<React.ComponentProps<ElementType>, 'style' | PropsToOmit>;\n\nexport interface BoxComponentProps extends BoxProps {\n /** Variant passed from parent component, sets `data-variant` */\n variant?: string;\n\n /** Size passed from parent component, sets `data-size` if value is not number like */\n size?: string | number;\n}\n\nfunction _Box({\n component,\n style,\n __vars,\n className,\n variant,\n mod,\n size,\n hiddenFrom,\n visibleFrom,\n lightHidden,\n darkHidden,\n renderRoot,\n __size,\n ref,\n ...others\n}: BoxComponentProps & { component: any; className: string; renderRoot: any; ref: any }) {\n const theme = useMantineTheme();\n const Element = component || 'div';\n const { styleProps, rest } = extractStyleProps(others);\n const useSxTransform = useMantineSxTransform();\n const transformedSx = useSxTransform?.()?.(styleProps.sx);\n const responsiveClassName = useRandomClassName();\n const parsedStyleProps = parseStyleProps({\n styleProps,\n theme,\n data: STYlE_PROPS_DATA,\n });\n\n const props = {\n ref,\n style: getBoxStyle({\n theme,\n style,\n vars: __vars,\n styleProps: parsedStyleProps.inlineStyles,\n }),\n className: cx(className, transformedSx, {\n [responsiveClassName]: parsedStyleProps.hasResponsiveStyles,\n 'mantine-light-hidden': lightHidden,\n 'mantine-dark-hidden': darkHidden,\n [`mantine-hidden-from-${hiddenFrom}`]: hiddenFrom,\n [`mantine-visible-from-${visibleFrom}`]: visibleFrom,\n }),\n 'data-variant': variant,\n 'data-size': isNumberLike(size) ? undefined : size || undefined,\n size: __size,\n ...getBoxMod(mod),\n ...rest,\n };\n\n return (\n <>\n {parsedStyleProps.hasResponsiveStyles && (\n <InlineStyles\n selector={`.${responsiveClassName}`}\n styles={parsedStyleProps.styles}\n media={parsedStyleProps.media}\n />\n )}\n\n {typeof renderRoot === 'function' ? renderRoot(props) : <Element {...props} />}\n </>\n );\n}\n\n_Box.displayName = '@mantine/core/Box';\n\nexport const Box = polymorphic<'div', BoxComponentProps>(_Box);\n"],"mappings":";;;;;;;;;;;;;;;;;AA6DA,SAAS,KAAK,EACZ,WACA,OACA,QACA,WACA,SACA,KACA,MACA,YACA,aACA,aACA,YACA,YACA,QACA,KACA,GAAG,UACoF;CACvF,MAAM,QAAQA,6BAAAA,iBAAiB;CAC/B,MAAM,UAAU,aAAa;CAC7B,MAAM,EAAE,YAAY,SAASC,4BAAAA,kBAAkB,OAAO;CAEtD,MAAM,gBADiBC,wBAAAA,uBAAuB,IACN,GAAG,WAAW,GAAG;CACzD,MAAM,sBAAsBC,6BAAAA,oBAAoB;CAChD,MAAM,mBAAmBC,0BAAAA,gBAAgB;EACvC;EACA;EACA,MAAMC,yBAAAA;EACP,CAAC;CAEF,MAAM,QAAQ;EACZ;EACA,OAAOC,sBAAAA,YAAY;GACjB;GACA;GACA,MAAM;GACN,YAAY,iBAAiB;GAC9B,CAAC;EACF,YAAA,GAAA,KAAA,SAAc,WAAW,eAAe;IACrC,sBAAsB,iBAAiB;GACxC,wBAAwB;GACxB,uBAAuB;IACtB,uBAAuB,eAAe;IACtC,wBAAwB,gBAAgB;GAC1C,CAAC;EACF,gBAAgB;EAChB,aAAaC,uBAAAA,aAAa,KAAK,GAAG,KAAA,IAAY,QAAQ,KAAA;EACtD,MAAM;EACN,GAAGC,oBAAAA,UAAU,IAAI;EACjB,GAAG;EACJ;AAED,QACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,iBAAiB,uBAChB,iBAAA,GAAA,kBAAA,KAACC,qBAAAA,cAAD;EACE,UAAU,IAAI;EACd,QAAQ,iBAAiB;EACzB,OAAO,iBAAiB;EACxB,CAAA,EAGH,OAAO,eAAe,aAAa,WAAW,MAAM,GAAG,iBAAA,GAAA,kBAAA,KAAC,SAAD,EAAS,GAAI,OAAS,CAAA,CAC7E,EAAA,CAAA;;AAIP,KAAK,cAAc;AAEnB,MAAa,MAAMC,qCAAAA,YAAsC,KAAK"}
1
+ {"version":3,"file":"Box.cjs","names":["useMantineTheme","extractStyleProps","useMantineSxTransform","useRandomClassName","parseStyleProps","STYlE_PROPS_DATA","useMantineDeduplicateInlineStyles","hashStyleProps","getBoxStyle","isNumberLike","getBoxMod","InlineStyles","polymorphic"],"sources":["../../../src/core/Box/Box.tsx"],"sourcesContent":["import cx from 'clsx';\nimport { polymorphic } from '../factory';\nimport { hashStyleProps, InlineStyles } from '../InlineStyles';\nimport {\n MantineBreakpoint,\n useMantineDeduplicateInlineStyles,\n useMantineSxTransform,\n useMantineTheme,\n} from '../MantineProvider';\nimport { isNumberLike } from '../utils';\nimport type { CssVarsProp, MantineStyleProp } from './Box.types';\nimport { getBoxMod } from './get-box-mod/get-box-mod';\nimport { getBoxStyle } from './get-box-style/get-box-style';\nimport {\n extractStyleProps,\n MantineStyleProps,\n parseStyleProps,\n STYlE_PROPS_DATA,\n} from './style-props';\nimport { useRandomClassName } from './use-random-classname/use-random-classname';\n\nexport type Mod = Record<string, any> | string;\nexport type BoxMod = Mod | Mod[] | BoxMod[];\n\nexport interface BoxProps extends MantineStyleProps {\n /** Class added to the root element, if applicable */\n className?: string;\n\n /** Inline style added to root component element, can subscribe to theme defined on MantineProvider */\n style?: MantineStyleProp;\n\n /** CSS variables defined on root component element */\n __vars?: CssVarsProp;\n\n /** `size` property passed down the HTML element */\n __size?: string;\n\n /** Breakpoint above which the component is hidden with `display: none` */\n hiddenFrom?: MantineBreakpoint;\n\n /** Breakpoint below which the component is hidden with `display: none` */\n visibleFrom?: MantineBreakpoint;\n\n /** Determines whether component should be hidden in light color scheme with `display: none` */\n lightHidden?: boolean;\n\n /** Determines whether component should be hidden in dark color scheme with `display: none` */\n darkHidden?: boolean;\n\n /** Element modifiers transformed into `data-` attributes, for example, `{ 'data-size': 'xl' }`, falsy values are removed */\n mod?: BoxMod;\n}\n\nexport type ElementProps<\n ElementType extends React.ElementType,\n PropsToOmit extends string = never,\n> = Omit<React.ComponentProps<ElementType>, 'style' | PropsToOmit>;\n\nexport interface BoxComponentProps extends BoxProps {\n /** Variant passed from parent component, sets `data-variant` */\n variant?: string;\n\n /** Size passed from parent component, sets `data-size` if value is not number like */\n size?: string | number;\n}\n\nfunction _Box({\n component,\n style,\n __vars,\n className,\n variant,\n mod,\n size,\n hiddenFrom,\n visibleFrom,\n lightHidden,\n darkHidden,\n renderRoot,\n __size,\n ref,\n ...others\n}: BoxComponentProps & { component: any; className: string; renderRoot: any; ref: any }) {\n const theme = useMantineTheme();\n const Element = component || 'div';\n const { styleProps, rest } = extractStyleProps(others);\n const useSxTransform = useMantineSxTransform();\n const transformedSx = useSxTransform?.()?.(styleProps.sx);\n const randomClassName = useRandomClassName();\n const parsedStyleProps = parseStyleProps({\n styleProps,\n theme,\n data: STYlE_PROPS_DATA,\n });\n\n const deduplicateInlineStyles = useMantineDeduplicateInlineStyles();\n const responsiveClassName =\n deduplicateInlineStyles && parsedStyleProps.hasResponsiveStyles\n ? hashStyleProps(parsedStyleProps.styles, parsedStyleProps.media)\n : randomClassName;\n\n const props = {\n ref,\n style: getBoxStyle({\n theme,\n style,\n vars: __vars,\n styleProps: parsedStyleProps.inlineStyles,\n }),\n className: cx(className, transformedSx, {\n [responsiveClassName]: parsedStyleProps.hasResponsiveStyles,\n 'mantine-light-hidden': lightHidden,\n 'mantine-dark-hidden': darkHidden,\n [`mantine-hidden-from-${hiddenFrom}`]: hiddenFrom,\n [`mantine-visible-from-${visibleFrom}`]: visibleFrom,\n }),\n 'data-variant': variant,\n 'data-size': isNumberLike(size) ? undefined : size || undefined,\n size: __size,\n ...getBoxMod(mod),\n ...rest,\n };\n\n return (\n <>\n {parsedStyleProps.hasResponsiveStyles && (\n <InlineStyles\n selector={`.${responsiveClassName}`}\n styles={parsedStyleProps.styles}\n media={parsedStyleProps.media}\n deduplicate={deduplicateInlineStyles}\n />\n )}\n\n {typeof renderRoot === 'function' ? renderRoot(props) : <Element {...props} />}\n </>\n );\n}\n\n_Box.displayName = '@mantine/core/Box';\n\nexport const Box = polymorphic<'div', BoxComponentProps>(_Box);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkEA,SAAS,KAAK,EACZ,WACA,OACA,QACA,WACA,SACA,KACA,MACA,YACA,aACA,aACA,YACA,YACA,QACA,KACA,GAAG,UACoF;CACvF,MAAM,QAAQA,6BAAAA,iBAAiB;CAC/B,MAAM,UAAU,aAAa;CAC7B,MAAM,EAAE,YAAY,SAASC,4BAAAA,kBAAkB,OAAO;CAEtD,MAAM,gBADiBC,wBAAAA,uBAAuB,IACN,GAAG,WAAW,GAAG;CACzD,MAAM,kBAAkBC,6BAAAA,oBAAoB;CAC5C,MAAM,mBAAmBC,0BAAAA,gBAAgB;EACvC;EACA;EACA,MAAMC,yBAAAA;EACP,CAAC;CAEF,MAAM,0BAA0BC,wBAAAA,mCAAmC;CACnE,MAAM,sBACJ,2BAA2B,iBAAiB,sBACxCC,oBAAAA,eAAe,iBAAiB,QAAQ,iBAAiB,MAAM,GAC/D;CAEN,MAAM,QAAQ;EACZ;EACA,OAAOC,sBAAAA,YAAY;GACjB;GACA;GACA,MAAM;GACN,YAAY,iBAAiB;GAC9B,CAAC;EACF,YAAA,GAAA,KAAA,SAAc,WAAW,eAAe;IACrC,sBAAsB,iBAAiB;GACxC,wBAAwB;GACxB,uBAAuB;IACtB,uBAAuB,eAAe;IACtC,wBAAwB,gBAAgB;GAC1C,CAAC;EACF,gBAAgB;EAChB,aAAaC,uBAAAA,aAAa,KAAK,GAAG,KAAA,IAAY,QAAQ,KAAA;EACtD,MAAM;EACN,GAAGC,oBAAAA,UAAU,IAAI;EACjB,GAAG;EACJ;AAED,QACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,iBAAiB,uBAChB,iBAAA,GAAA,kBAAA,KAACC,qBAAAA,cAAD;EACE,UAAU,IAAI;EACd,QAAQ,iBAAiB;EACzB,OAAO,iBAAiB;EACxB,aAAa;EACb,CAAA,EAGH,OAAO,eAAe,aAAa,WAAW,MAAM,GAAG,iBAAA,GAAA,kBAAA,KAAC,SAAD,EAAS,GAAI,OAAS,CAAA,CAC7E,EAAA,CAAA;;AAIP,KAAK,cAAc;AAEnB,MAAa,MAAMC,qCAAAA,YAAsC,KAAK"}
@@ -4,12 +4,24 @@ const require_Mantine_context = require("../MantineProvider/Mantine.context.cjs"
4
4
  const require_styles_to_string = require("./styles-to-string/styles-to-string.cjs");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
6
  //#region packages/@mantine/core/src/core/InlineStyles/InlineStyles.tsx
7
- function InlineStyles(props) {
7
+ function simpleHash(str) {
8
+ let hash = 5381;
9
+ for (let i = 0; i < str.length; i++) hash = (hash << 5) + hash + str.charCodeAt(i) & 4294967295;
10
+ return (hash >>> 0).toString(36);
11
+ }
12
+ function InlineStyles({ deduplicate, ...props }) {
8
13
  const nonce = require_Mantine_context.useMantineStyleNonce();
14
+ const css = require_styles_to_string.stylesToString(props);
15
+ if (deduplicate) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", {
16
+ href: `mantine-${simpleHash(css)}`,
17
+ precedence: "mantine",
18
+ nonce: nonce?.(),
19
+ children: css
20
+ });
9
21
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", {
10
22
  "data-mantine-styles": "inline",
11
23
  nonce: nonce?.(),
12
- dangerouslySetInnerHTML: { __html: require_styles_to_string.stylesToString(props) }
24
+ dangerouslySetInnerHTML: { __html: css }
13
25
  });
14
26
  }
15
27
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"InlineStyles.cjs","names":["useMantineStyleNonce","stylesToString"],"sources":["../../../src/core/InlineStyles/InlineStyles.tsx"],"sourcesContent":["import { useMantineStyleNonce } from '../MantineProvider';\nimport { InlineStylesInput, stylesToString } from './styles-to-string/styles-to-string';\n\nexport interface InlineStylesProps\n extends InlineStylesInput, Omit<React.ComponentProps<'style'>, keyof InlineStylesInput> {}\n\nexport function InlineStyles(props: InlineStylesInput) {\n const nonce = useMantineStyleNonce();\n return (\n <style\n data-mantine-styles=\"inline\"\n nonce={nonce?.()}\n dangerouslySetInnerHTML={{ __html: stylesToString(props) }}\n />\n );\n}\n"],"mappings":";;;;;;AAMA,SAAgB,aAAa,OAA0B;CACrD,MAAM,QAAQA,wBAAAA,sBAAsB;AACpC,QACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;EACE,uBAAoB;EACpB,OAAO,SAAS;EAChB,yBAAyB,EAAE,QAAQC,yBAAAA,eAAe,MAAM,EAAE;EAC1D,CAAA"}
1
+ {"version":3,"file":"InlineStyles.cjs","names":["useMantineStyleNonce","stylesToString"],"sources":["../../../src/core/InlineStyles/InlineStyles.tsx"],"sourcesContent":["import { useMantineStyleNonce } from '../MantineProvider';\nimport { InlineStylesInput, stylesToString } from './styles-to-string/styles-to-string';\n\nexport interface InlineStylesProps\n extends InlineStylesInput, Omit<React.ComponentProps<'style'>, keyof InlineStylesInput> {\n deduplicate?: boolean;\n}\n\nfunction simpleHash(str: string): string {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) & 0xffffffff;\n }\n return (hash >>> 0).toString(36);\n}\n\nexport function InlineStyles({ deduplicate, ...props }: InlineStylesProps) {\n const nonce = useMantineStyleNonce();\n const css = stylesToString(props);\n\n if (deduplicate) {\n return (\n <style href={`mantine-${simpleHash(css)}`} precedence=\"mantine\" nonce={nonce?.()}>\n {css}\n </style>\n );\n }\n\n return (\n <style\n data-mantine-styles=\"inline\"\n nonce={nonce?.()}\n dangerouslySetInnerHTML={{ __html: css }}\n />\n );\n}\n"],"mappings":";;;;;;AAQA,SAAS,WAAW,KAAqB;CACvC,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,IAC9B,SAAS,QAAQ,KAAK,OAAO,IAAI,WAAW,EAAE,GAAI;AAEpD,SAAQ,SAAS,GAAG,SAAS,GAAG;;AAGlC,SAAgB,aAAa,EAAE,aAAa,GAAG,SAA4B;CACzE,MAAM,QAAQA,wBAAAA,sBAAsB;CACpC,MAAM,MAAMC,yBAAAA,eAAe,MAAM;AAEjC,KAAI,YACF,QACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;EAAO,MAAM,WAAW,WAAW,IAAI;EAAI,YAAW;EAAU,OAAO,SAAS;YAC7E;EACK,CAAA;AAIZ,QACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;EACE,uBAAoB;EACpB,OAAO,SAAS;EAChB,yBAAyB,EAAE,QAAQ,KAAK;EACxC,CAAA"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ const require_css_object_to_string = require("./css-object-to-string/css-object-to-string.cjs");
3
+ //#region packages/@mantine/core/src/core/InlineStyles/hash-styles.ts
4
+ function djb2Hash(str) {
5
+ let hash = 5381;
6
+ for (let i = 0; i < str.length; i++) hash = (hash << 5) + hash + str.charCodeAt(i) & 4294967295;
7
+ return (hash >>> 0).toString(36);
8
+ }
9
+ function hashStyleProps(styles, media) {
10
+ return `__mdi__-${djb2Hash(`${styles ? require_css_object_to_string.cssObjectToString(styles) : ""}|${Array.isArray(media) ? media.map((m) => `${m.query}:${require_css_object_to_string.cssObjectToString(m.styles)}`).join("|") : ""}`)}`;
11
+ }
12
+ //#endregion
13
+ exports.hashStyleProps = hashStyleProps;
14
+
15
+ //# sourceMappingURL=hash-styles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-styles.cjs","names":["cssObjectToString"],"sources":["../../../src/core/InlineStyles/hash-styles.ts"],"sourcesContent":["import { cssObjectToString } from './css-object-to-string/css-object-to-string';\nimport type { InlineStylesMediaQuery } from './styles-to-string/styles-to-string';\n\nfunction djb2Hash(str: string): string {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) & 0xffffffff;\n }\n return (hash >>> 0).toString(36);\n}\n\nexport function hashStyleProps(\n styles: React.CSSProperties | undefined,\n media: InlineStylesMediaQuery[] | undefined\n): string {\n const stylesStr = styles ? cssObjectToString(styles) : '';\n const mediaStr = Array.isArray(media)\n ? media.map((m) => `${m.query}:${cssObjectToString(m.styles)}`).join('|')\n : '';\n return `__mdi__-${djb2Hash(`${stylesStr}|${mediaStr}`)}`;\n}\n"],"mappings":";;;AAGA,SAAS,SAAS,KAAqB;CACrC,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,IAC9B,SAAS,QAAQ,KAAK,OAAO,IAAI,WAAW,EAAE,GAAI;AAEpD,SAAQ,SAAS,GAAG,SAAS,GAAG;;AAGlC,SAAgB,eACd,QACA,OACQ;AAKR,QAAO,WAAW,SAAS,GAJT,SAASA,6BAAAA,kBAAkB,OAAO,GAAG,GAIf,GAHvB,MAAM,QAAQ,MAAM,GACjC,MAAM,KAAK,MAAM,GAAG,EAAE,MAAM,GAAGA,6BAAAA,kBAAkB,EAAE,OAAO,GAAG,CAAC,KAAK,IAAI,GACvE,KACkD"}
@@ -32,11 +32,15 @@ function useMantineStylesTransform() {
32
32
  function useMantineEnv() {
33
33
  return useMantineContext().env || "default";
34
34
  }
35
+ function useMantineDeduplicateInlineStyles() {
36
+ return useMantineContext().deduplicateInlineStyles;
37
+ }
35
38
  //#endregion
36
39
  exports.MantineContext = MantineContext;
37
40
  exports.useMantineClassNamesPrefix = useMantineClassNamesPrefix;
38
41
  exports.useMantineContext = useMantineContext;
39
42
  exports.useMantineCssVariablesResolver = useMantineCssVariablesResolver;
43
+ exports.useMantineDeduplicateInlineStyles = useMantineDeduplicateInlineStyles;
40
44
  exports.useMantineEnv = useMantineEnv;
41
45
  exports.useMantineIsHeadless = useMantineIsHeadless;
42
46
  exports.useMantineStyleNonce = useMantineStyleNonce;
@@ -1 +1 @@
1
- {"version":3,"file":"Mantine.context.cjs","names":[],"sources":["../../../src/core/MantineProvider/Mantine.context.ts"],"sourcesContent":["import { createContext, use } from 'react';\nimport { ConvertCSSVariablesInput } from './convert-css-variables';\nimport type { MantineColorScheme, MantineTheme } from './theme.types';\n\nexport interface MantineStylesTransform {\n sx?: () => (sx: any) => string;\n styles?: () => (styles: any, payload: any) => Record<string, string>;\n}\n\ninterface MantineContextValue {\n colorScheme: MantineColorScheme;\n setColorScheme: (colorScheme: MantineColorScheme) => void;\n clearColorScheme: () => void;\n getRootElement: () => HTMLElement | undefined;\n classNamesPrefix: string;\n getStyleNonce?: () => string | undefined;\n cssVariablesResolver?: (theme: MantineTheme) => ConvertCSSVariablesInput;\n cssVariablesSelector: string;\n withStaticClasses: boolean;\n headless?: boolean;\n stylesTransform?: MantineStylesTransform;\n env?: 'default' | 'test';\n}\n\nexport const MantineContext = createContext<MantineContextValue | null>(null);\n\nexport function useMantineContext() {\n const ctx = use(MantineContext);\n\n if (!ctx) {\n throw new Error('[@mantine/core] MantineProvider was not found in tree');\n }\n\n return ctx;\n}\n\nexport function useMantineCssVariablesResolver() {\n return useMantineContext().cssVariablesResolver;\n}\n\nexport function useMantineClassNamesPrefix() {\n return useMantineContext().classNamesPrefix;\n}\n\nexport function useMantineStyleNonce() {\n return useMantineContext().getStyleNonce;\n}\n\nexport function useMantineWithStaticClasses() {\n return useMantineContext().withStaticClasses;\n}\n\nexport function useMantineIsHeadless() {\n return useMantineContext().headless;\n}\n\nexport function useMantineSxTransform() {\n return useMantineContext().stylesTransform?.sx;\n}\n\nexport function useMantineStylesTransform() {\n return useMantineContext().stylesTransform?.styles;\n}\n\nexport function useMantineEnv() {\n return useMantineContext().env || 'default';\n}\n"],"mappings":";;;;AAwBA,MAAa,kBAAA,GAAA,MAAA,eAA2D,KAAK;AAE7E,SAAgB,oBAAoB;CAClC,MAAM,OAAA,GAAA,MAAA,KAAU,eAAe;AAE/B,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,wDAAwD;AAG1E,QAAO;;AAGT,SAAgB,iCAAiC;AAC/C,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,6BAA6B;AAC3C,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,uBAAuB;AACrC,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,8BAA8B;AAC5C,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,uBAAuB;AACrC,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,wBAAwB;AACtC,QAAO,mBAAmB,CAAC,iBAAiB;;AAG9C,SAAgB,4BAA4B;AAC1C,QAAO,mBAAmB,CAAC,iBAAiB;;AAG9C,SAAgB,gBAAgB;AAC9B,QAAO,mBAAmB,CAAC,OAAO"}
1
+ {"version":3,"file":"Mantine.context.cjs","names":[],"sources":["../../../src/core/MantineProvider/Mantine.context.ts"],"sourcesContent":["import { createContext, use } from 'react';\nimport { ConvertCSSVariablesInput } from './convert-css-variables';\nimport type { MantineColorScheme, MantineTheme } from './theme.types';\n\nexport interface MantineStylesTransform {\n sx?: () => (sx: any) => string;\n styles?: () => (styles: any, payload: any) => Record<string, string>;\n}\n\ninterface MantineContextValue {\n colorScheme: MantineColorScheme;\n setColorScheme: (colorScheme: MantineColorScheme) => void;\n clearColorScheme: () => void;\n getRootElement: () => HTMLElement | undefined;\n classNamesPrefix: string;\n getStyleNonce?: () => string | undefined;\n cssVariablesResolver?: (theme: MantineTheme) => ConvertCSSVariablesInput;\n cssVariablesSelector: string;\n withStaticClasses: boolean;\n headless?: boolean;\n stylesTransform?: MantineStylesTransform;\n env?: 'default' | 'test';\n deduplicateInlineStyles?: boolean;\n}\n\nexport const MantineContext = createContext<MantineContextValue | null>(null);\n\nexport function useMantineContext() {\n const ctx = use(MantineContext);\n\n if (!ctx) {\n throw new Error('[@mantine/core] MantineProvider was not found in tree');\n }\n\n return ctx;\n}\n\nexport function useMantineCssVariablesResolver() {\n return useMantineContext().cssVariablesResolver;\n}\n\nexport function useMantineClassNamesPrefix() {\n return useMantineContext().classNamesPrefix;\n}\n\nexport function useMantineStyleNonce() {\n return useMantineContext().getStyleNonce;\n}\n\nexport function useMantineWithStaticClasses() {\n return useMantineContext().withStaticClasses;\n}\n\nexport function useMantineIsHeadless() {\n return useMantineContext().headless;\n}\n\nexport function useMantineSxTransform() {\n return useMantineContext().stylesTransform?.sx;\n}\n\nexport function useMantineStylesTransform() {\n return useMantineContext().stylesTransform?.styles;\n}\n\nexport function useMantineEnv() {\n return useMantineContext().env || 'default';\n}\n\nexport function useMantineDeduplicateInlineStyles() {\n return useMantineContext().deduplicateInlineStyles;\n}\n"],"mappings":";;;;AAyBA,MAAa,kBAAA,GAAA,MAAA,eAA2D,KAAK;AAE7E,SAAgB,oBAAoB;CAClC,MAAM,OAAA,GAAA,MAAA,KAAU,eAAe;AAE/B,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,wDAAwD;AAG1E,QAAO;;AAGT,SAAgB,iCAAiC;AAC/C,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,6BAA6B;AAC3C,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,uBAAuB;AACrC,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,8BAA8B;AAC5C,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,uBAAuB;AACrC,QAAO,mBAAmB,CAAC;;AAG7B,SAAgB,wBAAwB;AACtC,QAAO,mBAAmB,CAAC,iBAAiB;;AAG9C,SAAgB,4BAA4B;AAC1C,QAAO,mBAAmB,CAAC,iBAAiB;;AAG9C,SAAgB,gBAAgB;AAC9B,QAAO,mBAAmB,CAAC,OAAO;;AAGpC,SAAgB,oCAAoC;AAClD,QAAO,mBAAmB,CAAC"}
@@ -12,7 +12,7 @@ const require_MantineCssVariables = require("./MantineCssVariables/MantineCssVar
12
12
  const require_use_respect_reduce_motion = require("./use-respect-reduce-motion/use-respect-reduce-motion.cjs");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  //#region packages/@mantine/core/src/core/MantineProvider/MantineProvider.tsx
15
- function MantineProvider({ theme, children, getStyleNonce, withStaticClasses = true, withGlobalClasses = true, deduplicateCssVariables = true, withCssVariables = true, cssVariablesSelector, classNamesPrefix = "mantine", colorSchemeManager = require_local_storage_manager.localStorageColorSchemeManager(), defaultColorScheme = "light", getRootElement = () => document.documentElement, cssVariablesResolver, forceColorScheme, stylesTransform, env }) {
15
+ function MantineProvider({ theme, children, getStyleNonce, withStaticClasses = true, withGlobalClasses = true, deduplicateCssVariables = true, withCssVariables = true, cssVariablesSelector, classNamesPrefix = "mantine", colorSchemeManager = require_local_storage_manager.localStorageColorSchemeManager(), defaultColorScheme = "light", getRootElement = () => document.documentElement, cssVariablesResolver, forceColorScheme, stylesTransform, env, deduplicateInlineStyles = false }) {
16
16
  const { colorScheme, setColorScheme, clearColorScheme } = require_use_provider_color_scheme.useProviderColorScheme({
17
17
  defaultColorScheme,
18
18
  forceColorScheme,
@@ -35,7 +35,8 @@ function MantineProvider({ theme, children, getStyleNonce, withStaticClasses = t
35
35
  cssVariablesSelector: cssVariablesSelector ?? ":root",
36
36
  withStaticClasses,
37
37
  stylesTransform,
38
- env
38
+ env,
39
+ deduplicateInlineStyles
39
40
  },
40
41
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_MantineThemeProvider.MantineThemeProvider, {
41
42
  theme,
@@ -1 +1 @@
1
- {"version":3,"file":"MantineProvider.cjs","names":["localStorageColorSchemeManager","useProviderColorScheme","MantineContext","MantineThemeProvider","MantineCssVariables","MantineClasses"],"sources":["../../../src/core/MantineProvider/MantineProvider.tsx"],"sourcesContent":["import './baseline.css';\nimport './global.css';\nimport './default-css-variables.css';\n\nimport { localStorageColorSchemeManager, MantineColorSchemeManager } from './color-scheme-managers';\nimport { MantineContext, MantineStylesTransform } from './Mantine.context';\nimport { MantineClasses } from './MantineClasses';\nimport { CSSVariablesResolver, MantineCssVariables } from './MantineCssVariables';\nimport { MantineThemeProvider } from './MantineThemeProvider';\nimport type { MantineColorScheme, MantineThemeOverride } from './theme.types';\nimport { useProviderColorScheme } from './use-mantine-color-scheme';\nimport { useRespectReduceMotion } from './use-respect-reduce-motion';\n\nexport interface MantineProviderProps {\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Used to retrieve/set color scheme value in external storage, by default uses `window.localStorage` */\n colorSchemeManager?: MantineColorSchemeManager;\n\n /** Default color scheme value used when `colorSchemeManager` cannot retrieve value from external storage, `light` by default */\n defaultColorScheme?: MantineColorScheme;\n\n /** Forces color scheme value, if set, MantineProvider ignores `colorSchemeManager` and `defaultColorScheme` */\n forceColorScheme?: 'light' | 'dark';\n\n /** CSS selector to which CSS variables should be added, by default variables are applied to `:root` and `:host` */\n cssVariablesSelector?: string;\n\n /** Determines whether theme CSS variables should be added to given `cssVariablesSelector` @default true */\n withCssVariables?: boolean;\n\n /** Determines whether CSS variables should be deduplicated: if CSS variable has the same value as in default theme, it is not added in the runtime. @default true. */\n deduplicateCssVariables?: boolean;\n\n /** Function to resolve root element to set `data-mantine-color-scheme` attribute, must return undefined on server, `() => document.documentElement` by default */\n getRootElement?: () => HTMLElement | undefined;\n\n /** A prefix for components static classes (for example {selector}-Text-root), `mantine` by default */\n classNamesPrefix?: string;\n\n /** Function to generate nonce attribute added to all generated `style` tags */\n getStyleNonce?: () => string;\n\n /** Function to generate CSS variables based on theme object */\n cssVariablesResolver?: CSSVariablesResolver;\n\n /** Determines whether components should have static classes, for example, `mantine-Button-root`. @default true */\n withStaticClasses?: boolean;\n\n /** Determines whether global classes should be added with `<style />` tag. Global classes are required for `hiddenFrom`/`visibleFrom` and `lightHidden`/`darkHidden` props to work. @default true. */\n withGlobalClasses?: boolean;\n\n /** An object to transform `styles` and `sx` props into css classes, can be used with CSS-in-JS libraries */\n stylesTransform?: MantineStylesTransform;\n\n /** Your application */\n children?: React.ReactNode;\n\n /** Environment at which the provider is used, `'test'` environment disables all transitions and portals */\n env?: 'default' | 'test';\n}\n\nexport function MantineProvider({\n theme,\n children,\n getStyleNonce,\n withStaticClasses = true,\n withGlobalClasses = true,\n deduplicateCssVariables = true,\n withCssVariables = true,\n cssVariablesSelector,\n classNamesPrefix = 'mantine',\n colorSchemeManager = localStorageColorSchemeManager(),\n defaultColorScheme = 'light',\n getRootElement = () => document.documentElement,\n cssVariablesResolver,\n forceColorScheme,\n stylesTransform,\n env,\n}: MantineProviderProps) {\n const { colorScheme, setColorScheme, clearColorScheme } = useProviderColorScheme({\n defaultColorScheme,\n forceColorScheme,\n manager: colorSchemeManager,\n getRootElement,\n });\n\n useRespectReduceMotion({\n respectReducedMotion: theme?.respectReducedMotion || false,\n getRootElement,\n });\n\n return (\n <MantineContext\n value={{\n colorScheme,\n setColorScheme,\n clearColorScheme,\n getRootElement,\n classNamesPrefix,\n getStyleNonce,\n cssVariablesResolver,\n cssVariablesSelector: cssVariablesSelector ?? ':root',\n withStaticClasses,\n stylesTransform,\n env,\n }}\n >\n <MantineThemeProvider theme={theme}>\n {withCssVariables && (\n <MantineCssVariables\n cssVariablesSelector={cssVariablesSelector}\n deduplicateCssVariables={deduplicateCssVariables}\n />\n )}\n {withGlobalClasses && <MantineClasses />}\n {children}\n </MantineThemeProvider>\n </MantineContext>\n );\n}\n\nMantineProvider.displayName = '@mantine/core/MantineProvider';\n\nexport interface HeadlessMantineProviderProps {\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Your application */\n children?: React.ReactNode;\n\n /** Environment at which the provider is used, `'test'` environment disables all transitions and portals */\n env?: 'default' | 'test';\n}\n\nexport function HeadlessMantineProvider({ children, theme, env }: HeadlessMantineProviderProps) {\n return (\n <MantineContext\n value={{\n colorScheme: 'auto',\n setColorScheme: () => {},\n clearColorScheme: () => {},\n getRootElement: () => document.documentElement,\n classNamesPrefix: 'mantine',\n cssVariablesSelector: ':root',\n withStaticClasses: false,\n headless: true,\n env,\n }}\n >\n <MantineThemeProvider theme={theme}>{children}</MantineThemeProvider>\n </MantineContext>\n );\n}\n\nHeadlessMantineProvider.displayName = '@mantine/core/HeadlessMantineProvider';\n"],"mappings":";;;;;;;;;;;;;;AA+DA,SAAgB,gBAAgB,EAC9B,OACA,UACA,eACA,oBAAoB,MACpB,oBAAoB,MACpB,0BAA0B,MAC1B,mBAAmB,MACnB,sBACA,mBAAmB,WACnB,qBAAqBA,8BAAAA,gCAAgC,EACrD,qBAAqB,SACrB,uBAAuB,SAAS,iBAChC,sBACA,kBACA,iBACA,OACuB;CACvB,MAAM,EAAE,aAAa,gBAAgB,qBAAqBC,kCAAAA,uBAAuB;EAC/E;EACA;EACA,SAAS;EACT;EACD,CAAC;AAEF,mCAAA,uBAAuB;EACrB,sBAAsB,OAAO,wBAAwB;EACrD;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,gBAAD;EACE,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA,sBAAsB,wBAAwB;GAC9C;GACA;GACA;GACD;YAED,iBAAA,GAAA,kBAAA,MAACC,6BAAAA,sBAAD;GAA6B;aAA7B;IACG,oBACC,iBAAA,GAAA,kBAAA,KAACC,4BAAAA,qBAAD;KACwB;KACG;KACzB,CAAA;IAEH,qBAAqB,iBAAA,GAAA,kBAAA,KAACC,uBAAAA,gBAAD,EAAkB,CAAA;IACvC;IACoB;;EACR,CAAA;;AAIrB,gBAAgB,cAAc;AAa9B,SAAgB,wBAAwB,EAAE,UAAU,OAAO,OAAqC;AAC9F,QACE,iBAAA,GAAA,kBAAA,KAACH,wBAAAA,gBAAD;EACE,OAAO;GACL,aAAa;GACb,sBAAsB;GACtB,wBAAwB;GACxB,sBAAsB,SAAS;GAC/B,kBAAkB;GAClB,sBAAsB;GACtB,mBAAmB;GACnB,UAAU;GACV;GACD;YAED,iBAAA,GAAA,kBAAA,KAACC,6BAAAA,sBAAD;GAA6B;GAAQ;GAAgC,CAAA;EACtD,CAAA;;AAIrB,wBAAwB,cAAc"}
1
+ {"version":3,"file":"MantineProvider.cjs","names":["localStorageColorSchemeManager","useProviderColorScheme","MantineContext","MantineThemeProvider","MantineCssVariables","MantineClasses"],"sources":["../../../src/core/MantineProvider/MantineProvider.tsx"],"sourcesContent":["import './baseline.css';\nimport './global.css';\nimport './default-css-variables.css';\n\nimport { localStorageColorSchemeManager, MantineColorSchemeManager } from './color-scheme-managers';\nimport { MantineContext, MantineStylesTransform } from './Mantine.context';\nimport { MantineClasses } from './MantineClasses';\nimport { CSSVariablesResolver, MantineCssVariables } from './MantineCssVariables';\nimport { MantineThemeProvider } from './MantineThemeProvider';\nimport type { MantineColorScheme, MantineThemeOverride } from './theme.types';\nimport { useProviderColorScheme } from './use-mantine-color-scheme';\nimport { useRespectReduceMotion } from './use-respect-reduce-motion';\n\nexport interface MantineProviderProps {\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Used to retrieve/set color scheme value in external storage, by default uses `window.localStorage` */\n colorSchemeManager?: MantineColorSchemeManager;\n\n /** Default color scheme value used when `colorSchemeManager` cannot retrieve value from external storage, `light` by default */\n defaultColorScheme?: MantineColorScheme;\n\n /** Forces color scheme value, if set, MantineProvider ignores `colorSchemeManager` and `defaultColorScheme` */\n forceColorScheme?: 'light' | 'dark';\n\n /** CSS selector to which CSS variables should be added, by default variables are applied to `:root` and `:host` */\n cssVariablesSelector?: string;\n\n /** Determines whether theme CSS variables should be added to given `cssVariablesSelector` @default true */\n withCssVariables?: boolean;\n\n /** Determines whether CSS variables should be deduplicated: if CSS variable has the same value as in default theme, it is not added in the runtime. @default true. */\n deduplicateCssVariables?: boolean;\n\n /** Function to resolve root element to set `data-mantine-color-scheme` attribute, must return undefined on server, `() => document.documentElement` by default */\n getRootElement?: () => HTMLElement | undefined;\n\n /** A prefix for components static classes (for example {selector}-Text-root), `mantine` by default */\n classNamesPrefix?: string;\n\n /** Function to generate nonce attribute added to all generated `style` tags */\n getStyleNonce?: () => string;\n\n /** Function to generate CSS variables based on theme object */\n cssVariablesResolver?: CSSVariablesResolver;\n\n /** Determines whether components should have static classes, for example, `mantine-Button-root`. @default true */\n withStaticClasses?: boolean;\n\n /** Determines whether global classes should be added with `<style />` tag. Global classes are required for `hiddenFrom`/`visibleFrom` and `lightHidden`/`darkHidden` props to work. @default true. */\n withGlobalClasses?: boolean;\n\n /** An object to transform `styles` and `sx` props into css classes, can be used with CSS-in-JS libraries */\n stylesTransform?: MantineStylesTransform;\n\n /** 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 */\n deduplicateInlineStyles?: boolean;\n\n /** Your application */\n children?: React.ReactNode;\n\n /** Environment at which the provider is used, `'test'` environment disables all transitions and portals */\n env?: 'default' | 'test';\n}\n\nexport function MantineProvider({\n theme,\n children,\n getStyleNonce,\n withStaticClasses = true,\n withGlobalClasses = true,\n deduplicateCssVariables = true,\n withCssVariables = true,\n cssVariablesSelector,\n classNamesPrefix = 'mantine',\n colorSchemeManager = localStorageColorSchemeManager(),\n defaultColorScheme = 'light',\n getRootElement = () => document.documentElement,\n cssVariablesResolver,\n forceColorScheme,\n stylesTransform,\n env,\n deduplicateInlineStyles = false,\n}: MantineProviderProps) {\n const { colorScheme, setColorScheme, clearColorScheme } = useProviderColorScheme({\n defaultColorScheme,\n forceColorScheme,\n manager: colorSchemeManager,\n getRootElement,\n });\n\n useRespectReduceMotion({\n respectReducedMotion: theme?.respectReducedMotion || false,\n getRootElement,\n });\n\n return (\n <MantineContext\n value={{\n colorScheme,\n setColorScheme,\n clearColorScheme,\n getRootElement,\n classNamesPrefix,\n getStyleNonce,\n cssVariablesResolver,\n cssVariablesSelector: cssVariablesSelector ?? ':root',\n withStaticClasses,\n stylesTransform,\n env,\n deduplicateInlineStyles,\n }}\n >\n <MantineThemeProvider theme={theme}>\n {withCssVariables && (\n <MantineCssVariables\n cssVariablesSelector={cssVariablesSelector}\n deduplicateCssVariables={deduplicateCssVariables}\n />\n )}\n {withGlobalClasses && <MantineClasses />}\n {children}\n </MantineThemeProvider>\n </MantineContext>\n );\n}\n\nMantineProvider.displayName = '@mantine/core/MantineProvider';\n\nexport interface HeadlessMantineProviderProps {\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Your application */\n children?: React.ReactNode;\n\n /** Environment at which the provider is used, `'test'` environment disables all transitions and portals */\n env?: 'default' | 'test';\n}\n\nexport function HeadlessMantineProvider({ children, theme, env }: HeadlessMantineProviderProps) {\n return (\n <MantineContext\n value={{\n colorScheme: 'auto',\n setColorScheme: () => {},\n clearColorScheme: () => {},\n getRootElement: () => document.documentElement,\n classNamesPrefix: 'mantine',\n cssVariablesSelector: ':root',\n withStaticClasses: false,\n headless: true,\n env,\n }}\n >\n <MantineThemeProvider theme={theme}>{children}</MantineThemeProvider>\n </MantineContext>\n );\n}\n\nHeadlessMantineProvider.displayName = '@mantine/core/HeadlessMantineProvider';\n"],"mappings":";;;;;;;;;;;;;;AAkEA,SAAgB,gBAAgB,EAC9B,OACA,UACA,eACA,oBAAoB,MACpB,oBAAoB,MACpB,0BAA0B,MAC1B,mBAAmB,MACnB,sBACA,mBAAmB,WACnB,qBAAqBA,8BAAAA,gCAAgC,EACrD,qBAAqB,SACrB,uBAAuB,SAAS,iBAChC,sBACA,kBACA,iBACA,KACA,0BAA0B,SACH;CACvB,MAAM,EAAE,aAAa,gBAAgB,qBAAqBC,kCAAAA,uBAAuB;EAC/E;EACA;EACA,SAAS;EACT;EACD,CAAC;AAEF,mCAAA,uBAAuB;EACrB,sBAAsB,OAAO,wBAAwB;EACrD;EACD,CAAC;AAEF,QACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,gBAAD;EACE,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA,sBAAsB,wBAAwB;GAC9C;GACA;GACA;GACA;GACD;YAED,iBAAA,GAAA,kBAAA,MAACC,6BAAAA,sBAAD;GAA6B;aAA7B;IACG,oBACC,iBAAA,GAAA,kBAAA,KAACC,4BAAAA,qBAAD;KACwB;KACG;KACzB,CAAA;IAEH,qBAAqB,iBAAA,GAAA,kBAAA,KAACC,uBAAAA,gBAAD,EAAkB,CAAA;IACvC;IACoB;;EACR,CAAA;;AAIrB,gBAAgB,cAAc;AAa9B,SAAgB,wBAAwB,EAAE,UAAU,OAAO,OAAqC;AAC9F,QACE,iBAAA,GAAA,kBAAA,KAACH,wBAAAA,gBAAD;EACE,OAAO;GACL,aAAa;GACb,sBAAsB;GACtB,wBAAwB;GACxB,sBAAsB,SAAS;GAC/B,kBAAkB;GAClB,sBAAsB;GACtB,mBAAmB;GACnB,UAAU;GACV;GACD;YAED,iBAAA,GAAA,kBAAA,KAACC,6BAAAA,sBAAD;GAA6B;GAAQ;GAAgC,CAAA;EACtD,CAAA;;AAIrB,wBAAwB,cAAc"}
@@ -6,13 +6,13 @@ const require_MantineThemeProvider = require("../../MantineProvider/MantineTheme
6
6
  function useResolvedStylesApi({ classNames, styles, props, stylesCtx }) {
7
7
  const theme = require_MantineThemeProvider.useMantineTheme();
8
8
  return {
9
- resolvedClassNames: require_resolve_class_names.resolveClassNames({
9
+ resolvedClassNames: classNames === void 0 ? void 0 : require_resolve_class_names.resolveClassNames({
10
10
  theme,
11
11
  classNames,
12
12
  props,
13
13
  stylesCtx: stylesCtx || void 0
14
14
  }),
15
- resolvedStyles: require_resolve_styles.resolveStyles({
15
+ resolvedStyles: styles === void 0 ? void 0 : require_resolve_styles.resolveStyles({
16
16
  theme,
17
17
  styles,
18
18
  props,
@@ -1 +1 @@
1
- {"version":3,"file":"use-resolved-styles-api.cjs","names":["useMantineTheme","resolveClassNames","resolveStyles"],"sources":["../../../../src/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.ts"],"sourcesContent":["import { FactoryPayload } from '../../factory';\nimport { useMantineTheme } from '../../MantineProvider';\nimport { ClassNames, Styles } from '../styles-api.types';\nimport { resolveClassNames } from '../use-styles/get-class-name/resolve-class-names/resolve-class-names';\nimport { resolveStyles } from '../use-styles/get-style/resolve-styles/resolve-styles';\n\nexport interface UseResolvedStylesApiInput<Payload extends FactoryPayload> {\n classNames: ClassNames<Payload> | undefined;\n styles: Styles<Payload> | undefined;\n props: Record<string, any>;\n stylesCtx?: Record<string, any>;\n}\n\nexport function useResolvedStylesApi<Payload extends FactoryPayload>({\n classNames,\n styles,\n props,\n stylesCtx,\n}: UseResolvedStylesApiInput<Payload>) {\n const theme = useMantineTheme();\n\n return {\n resolvedClassNames: resolveClassNames({\n theme,\n classNames,\n props,\n stylesCtx: stylesCtx || undefined,\n }),\n\n resolvedStyles: resolveStyles({\n theme,\n styles,\n props,\n stylesCtx: stylesCtx || undefined,\n }),\n };\n}\n"],"mappings":";;;;;AAaA,SAAgB,qBAAqD,EACnE,YACA,QACA,OACA,aACqC;CACrC,MAAM,QAAQA,6BAAAA,iBAAiB;AAE/B,QAAO;EACL,oBAAoBC,4BAAAA,kBAAkB;GACpC;GACA;GACA;GACA,WAAW,aAAa,KAAA;GACzB,CAAC;EAEF,gBAAgBC,uBAAAA,cAAc;GAC5B;GACA;GACA;GACA,WAAW,aAAa,KAAA;GACzB,CAAC;EACH"}
1
+ {"version":3,"file":"use-resolved-styles-api.cjs","names":["useMantineTheme","resolveClassNames","resolveStyles"],"sources":["../../../../src/core/styles-api/use-resolved-styles-api/use-resolved-styles-api.ts"],"sourcesContent":["import { FactoryPayload } from '../../factory';\nimport { useMantineTheme } from '../../MantineProvider';\nimport { ClassNames, Styles } from '../styles-api.types';\nimport { resolveClassNames } from '../use-styles/get-class-name/resolve-class-names/resolve-class-names';\nimport { resolveStyles } from '../use-styles/get-style/resolve-styles/resolve-styles';\n\nexport interface UseResolvedStylesApiInput<Payload extends FactoryPayload> {\n classNames: ClassNames<Payload> | undefined;\n styles: Styles<Payload> | undefined;\n props: Record<string, any>;\n stylesCtx?: Record<string, any>;\n}\n\nexport function useResolvedStylesApi<Payload extends FactoryPayload>({\n classNames,\n styles,\n props,\n stylesCtx,\n}: UseResolvedStylesApiInput<Payload>) {\n const theme = useMantineTheme();\n\n return {\n resolvedClassNames:\n classNames === undefined\n ? undefined\n : resolveClassNames({\n theme,\n classNames,\n props,\n stylesCtx: stylesCtx || undefined,\n }),\n\n resolvedStyles:\n styles === undefined\n ? undefined\n : resolveStyles({\n theme,\n styles,\n props,\n stylesCtx: stylesCtx || undefined,\n }),\n };\n}\n"],"mappings":";;;;;AAaA,SAAgB,qBAAqD,EACnE,YACA,QACA,OACA,aACqC;CACrC,MAAM,QAAQA,6BAAAA,iBAAiB;AAE/B,QAAO;EACL,oBACE,eAAe,KAAA,IACX,KAAA,IACAC,4BAAAA,kBAAkB;GAChB;GACA;GACA;GACA,WAAW,aAAa,KAAA;GACzB,CAAC;EAER,gBACE,WAAW,KAAA,IACP,KAAA,IACAC,uBAAAA,cAAc;GACZ;GACA;GACA;GACA,WAAW,aAAa,KAAA;GACzB,CAAC;EACT"}