@mantine/core 9.4.3-alpha.0 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/cjs/components/Accordion/Accordion.cjs +5 -2
  2. package/cjs/components/Accordion/Accordion.cjs.map +1 -1
  3. package/cjs/components/AngleSlider/AngleSlider.cjs +4 -1
  4. package/cjs/components/AngleSlider/AngleSlider.cjs.map +1 -1
  5. package/cjs/components/Avatar/AvatarGroup/AvatarGroup.cjs +15 -14
  6. package/cjs/components/Avatar/AvatarGroup/AvatarGroup.cjs.map +1 -1
  7. package/cjs/components/Cascader/Cascader.cjs +371 -0
  8. package/cjs/components/Cascader/Cascader.cjs.map +1 -0
  9. package/cjs/components/Cascader/Cascader.module.cjs +18 -0
  10. package/cjs/components/Cascader/Cascader.module.cjs.map +1 -0
  11. package/cjs/components/Cascader/CascaderColumns.cjs +136 -0
  12. package/cjs/components/Cascader/CascaderColumns.cjs.map +1 -0
  13. package/cjs/components/Cascader/flatten-cascader-paths.cjs +26 -0
  14. package/cjs/components/Cascader/flatten-cascader-paths.cjs.map +1 -0
  15. package/cjs/components/Cascader/get-cascader-columns.cjs +30 -0
  16. package/cjs/components/Cascader/get-cascader-columns.cjs.map +1 -0
  17. package/cjs/components/Cascader/get-cascader-path-options.cjs +19 -0
  18. package/cjs/components/Cascader/get-cascader-path-options.cjs.map +1 -0
  19. package/cjs/components/Cascader/use-cascader.cjs +135 -0
  20. package/cjs/components/Cascader/use-cascader.cjs.map +1 -0
  21. package/cjs/components/ColorPicker/converters/converters.cjs +5 -0
  22. package/cjs/components/ColorPicker/converters/parsers.cjs +5 -0
  23. package/cjs/components/Combobox/use-combobox/use-combobox.cjs +6 -2
  24. package/cjs/components/Combobox/use-combobox/use-combobox.cjs.map +1 -1
  25. package/cjs/components/ComboboxPopover/ComboboxPopover.cjs +2 -1
  26. package/cjs/components/ComboboxPopover/ComboboxPopover.cjs.map +1 -1
  27. package/cjs/components/Drawer/DrawerStack.cjs +1 -1
  28. package/cjs/components/Drawer/DrawerStack.cjs.map +1 -1
  29. package/cjs/components/FloatingIndicator/FloatingIndicator.cjs +2 -1
  30. package/cjs/components/FloatingIndicator/FloatingIndicator.cjs.map +1 -1
  31. package/cjs/components/FloatingWindow/FloatingWindow.cjs +31 -10
  32. package/cjs/components/FloatingWindow/FloatingWindow.cjs.map +1 -1
  33. package/cjs/components/FloatingWindow/FloatingWindow.context.cjs +8 -0
  34. package/cjs/components/FloatingWindow/FloatingWindow.context.cjs.map +1 -0
  35. package/cjs/components/FloatingWindow/FloatingWindow.module.cjs.map +1 -1
  36. package/cjs/components/FloatingWindow/FloatingWindowResizeHandle.cjs +161 -0
  37. package/cjs/components/FloatingWindow/FloatingWindowResizeHandle.cjs.map +1 -0
  38. package/cjs/components/Modal/ModalStack.cjs +1 -1
  39. package/cjs/components/Modal/ModalStack.cjs.map +1 -1
  40. package/cjs/components/OverflowList/OverflowList.cjs +2 -1
  41. package/cjs/components/OverflowList/OverflowList.cjs.map +1 -1
  42. package/cjs/components/Pagination/PaginationEdges/PaginationEdges.cjs +1 -0
  43. package/cjs/components/ScrollArea/ScrollArea.cjs +7 -2
  44. package/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
  45. package/cjs/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  46. package/cjs/components/ScrollArea/ScrollAreaCorner/ScrollAreaCorner.cjs +1 -0
  47. package/cjs/components/ScrollArea/ScrollAreaScrollbar/Scrollbar.cjs +8 -4
  48. package/cjs/components/ScrollArea/ScrollAreaScrollbar/Scrollbar.cjs.map +1 -1
  49. package/cjs/components/ScrollArea/ScrollAreaThumb/ScrollAreaThumb.cjs +3 -1
  50. package/cjs/components/ScrollArea/ScrollAreaThumb/ScrollAreaThumb.cjs.map +1 -1
  51. package/cjs/components/SimpleGrid/SimpleGridVariables.cjs +1 -1
  52. package/cjs/components/SimpleGrid/SimpleGridVariables.cjs.map +1 -1
  53. package/cjs/components/Slider/RangeSlider/RangeSlider.cjs +18 -11
  54. package/cjs/components/Slider/RangeSlider/RangeSlider.cjs.map +1 -1
  55. package/cjs/components/Table/Table.components.cjs +1 -0
  56. package/cjs/components/TagsInput/TagsInput.cjs +2 -1
  57. package/cjs/components/TagsInput/TagsInput.cjs.map +1 -1
  58. package/cjs/components/Timeline/Timeline.cjs +5 -1
  59. package/cjs/components/Timeline/Timeline.cjs.map +1 -1
  60. package/cjs/components/Timeline/Timeline.module.cjs +2 -1
  61. package/cjs/components/Timeline/Timeline.module.cjs.map +1 -1
  62. package/cjs/components/Timeline/TimelineItem/TimelineItem.cjs +31 -20
  63. package/cjs/components/Timeline/TimelineItem/TimelineItem.cjs.map +1 -1
  64. package/cjs/components/Tree/TreeNode.cjs.map +1 -1
  65. package/cjs/components/Tree/use-tree.cjs +1 -1
  66. package/cjs/components/Tree/use-tree.cjs.map +1 -1
  67. package/cjs/components/TreeSelect/TreeSelect.cjs +3 -2
  68. package/cjs/components/TreeSelect/TreeSelect.cjs.map +1 -1
  69. package/cjs/core/Box/get-box-mod/get-box-mod.cjs +1 -0
  70. package/cjs/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.cjs +6 -5
  71. package/cjs/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.cjs.map +1 -1
  72. package/cjs/core/MantineProvider/merge-mantine-theme/merge-mantine-theme.cjs +2 -0
  73. package/cjs/core/MantineProvider/use-matches/use-matches.cjs +3 -2
  74. package/cjs/core/MantineProvider/use-matches/use-matches.cjs.map +1 -1
  75. package/cjs/index.cjs +7 -1
  76. package/esm/components/Accordion/Accordion.mjs +5 -2
  77. package/esm/components/Accordion/Accordion.mjs.map +1 -1
  78. package/esm/components/AngleSlider/AngleSlider.mjs +4 -1
  79. package/esm/components/AngleSlider/AngleSlider.mjs.map +1 -1
  80. package/esm/components/Avatar/AvatarGroup/AvatarGroup.mjs +15 -14
  81. package/esm/components/Avatar/AvatarGroup/AvatarGroup.mjs.map +1 -1
  82. package/esm/components/Cascader/Cascader.mjs +371 -0
  83. package/esm/components/Cascader/Cascader.mjs.map +1 -0
  84. package/esm/components/Cascader/Cascader.module.mjs +18 -0
  85. package/esm/components/Cascader/Cascader.module.mjs.map +1 -0
  86. package/esm/components/Cascader/CascaderColumns.mjs +135 -0
  87. package/esm/components/Cascader/CascaderColumns.mjs.map +1 -0
  88. package/esm/components/Cascader/flatten-cascader-paths.mjs +26 -0
  89. package/esm/components/Cascader/flatten-cascader-paths.mjs.map +1 -0
  90. package/esm/components/Cascader/get-cascader-columns.mjs +28 -0
  91. package/esm/components/Cascader/get-cascader-columns.mjs.map +1 -0
  92. package/esm/components/Cascader/get-cascader-path-options.mjs +19 -0
  93. package/esm/components/Cascader/get-cascader-path-options.mjs.map +1 -0
  94. package/esm/components/Cascader/use-cascader.mjs +135 -0
  95. package/esm/components/Cascader/use-cascader.mjs.map +1 -0
  96. package/esm/components/ColorPicker/converters/converters.mjs +1 -1
  97. package/esm/components/ColorPicker/converters/parsers.mjs +1 -1
  98. package/esm/components/Combobox/use-combobox/use-combobox.mjs +6 -2
  99. package/esm/components/Combobox/use-combobox/use-combobox.mjs.map +1 -1
  100. package/esm/components/ComboboxPopover/ComboboxPopover.mjs +2 -1
  101. package/esm/components/ComboboxPopover/ComboboxPopover.mjs.map +1 -1
  102. package/esm/components/Drawer/DrawerStack.mjs +1 -1
  103. package/esm/components/Drawer/DrawerStack.mjs.map +1 -1
  104. package/esm/components/FloatingIndicator/FloatingIndicator.mjs +2 -1
  105. package/esm/components/FloatingIndicator/FloatingIndicator.mjs.map +1 -1
  106. package/esm/components/FloatingWindow/FloatingWindow.context.mjs +8 -0
  107. package/esm/components/FloatingWindow/FloatingWindow.context.mjs.map +1 -0
  108. package/esm/components/FloatingWindow/FloatingWindow.mjs +32 -11
  109. package/esm/components/FloatingWindow/FloatingWindow.mjs.map +1 -1
  110. package/esm/components/FloatingWindow/FloatingWindow.module.mjs.map +1 -1
  111. package/esm/components/FloatingWindow/FloatingWindowResizeHandle.mjs +161 -0
  112. package/esm/components/FloatingWindow/FloatingWindowResizeHandle.mjs.map +1 -0
  113. package/esm/components/Modal/ModalStack.mjs +1 -1
  114. package/esm/components/Modal/ModalStack.mjs.map +1 -1
  115. package/esm/components/OverflowList/OverflowList.mjs +2 -1
  116. package/esm/components/OverflowList/OverflowList.mjs.map +1 -1
  117. package/esm/components/Pagination/PaginationEdges/PaginationEdges.mjs +1 -1
  118. package/esm/components/ScrollArea/ScrollArea.mjs +7 -2
  119. package/esm/components/ScrollArea/ScrollArea.mjs.map +1 -1
  120. package/esm/components/ScrollArea/ScrollArea.module.mjs.map +1 -1
  121. package/esm/components/ScrollArea/ScrollAreaCorner/ScrollAreaCorner.mjs +1 -1
  122. package/esm/components/ScrollArea/ScrollAreaScrollbar/Scrollbar.mjs +8 -4
  123. package/esm/components/ScrollArea/ScrollAreaScrollbar/Scrollbar.mjs.map +1 -1
  124. package/esm/components/ScrollArea/ScrollAreaThumb/ScrollAreaThumb.mjs +3 -2
  125. package/esm/components/ScrollArea/ScrollAreaThumb/ScrollAreaThumb.mjs.map +1 -1
  126. package/esm/components/SimpleGrid/SimpleGridVariables.mjs +1 -1
  127. package/esm/components/SimpleGrid/SimpleGridVariables.mjs.map +1 -1
  128. package/esm/components/Slider/RangeSlider/RangeSlider.mjs +18 -11
  129. package/esm/components/Slider/RangeSlider/RangeSlider.mjs.map +1 -1
  130. package/esm/components/Table/Table.components.mjs +1 -1
  131. package/esm/components/TagsInput/TagsInput.mjs +2 -1
  132. package/esm/components/TagsInput/TagsInput.mjs.map +1 -1
  133. package/esm/components/Timeline/Timeline.mjs +5 -1
  134. package/esm/components/Timeline/Timeline.mjs.map +1 -1
  135. package/esm/components/Timeline/Timeline.module.mjs +2 -1
  136. package/esm/components/Timeline/Timeline.module.mjs.map +1 -1
  137. package/esm/components/Timeline/TimelineItem/TimelineItem.mjs +31 -20
  138. package/esm/components/Timeline/TimelineItem/TimelineItem.mjs.map +1 -1
  139. package/esm/components/Tree/TreeNode.mjs.map +1 -1
  140. package/esm/components/Tree/use-tree.mjs +1 -1
  141. package/esm/components/Tree/use-tree.mjs.map +1 -1
  142. package/esm/components/TreeSelect/TreeSelect.mjs +3 -2
  143. package/esm/components/TreeSelect/TreeSelect.mjs.map +1 -1
  144. package/esm/core/Box/get-box-mod/get-box-mod.mjs +1 -1
  145. package/esm/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.mjs +6 -5
  146. package/esm/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.mjs.map +1 -1
  147. package/esm/core/MantineProvider/merge-mantine-theme/merge-mantine-theme.mjs +1 -1
  148. package/esm/core/MantineProvider/use-matches/use-matches.mjs +3 -2
  149. package/esm/core/MantineProvider/use-matches/use-matches.mjs.map +1 -1
  150. package/esm/index.mjs +5 -2
  151. package/lib/components/Accordion/Accordion.d.ts +2 -0
  152. package/lib/components/Cascader/Cascader.d.ts +114 -0
  153. package/lib/components/Cascader/CascaderColumns.d.ts +36 -0
  154. package/lib/components/Cascader/flatten-cascader-paths.d.ts +12 -0
  155. package/lib/components/Cascader/get-cascader-columns.d.ts +4 -0
  156. package/lib/components/Cascader/get-cascader-path-options.d.ts +2 -0
  157. package/lib/components/Cascader/index.d.ts +12 -0
  158. package/lib/components/Cascader/use-cascader.d.ts +25 -0
  159. package/lib/components/FloatingWindow/FloatingWindow.context.d.ts +21 -0
  160. package/lib/components/FloatingWindow/FloatingWindow.d.ts +10 -5
  161. package/lib/components/FloatingWindow/FloatingWindowResizeHandle.d.ts +11 -0
  162. package/lib/components/FloatingWindow/index.d.ts +2 -0
  163. package/lib/components/ScrollArea/ScrollArea.d.ts +5 -0
  164. package/lib/components/Timeline/TimelineItem/TimelineItem.d.ts +5 -1
  165. package/lib/components/index.d.ts +1 -0
  166. package/package.json +3 -3
  167. package/styles/Cascader.css +215 -0
  168. package/styles/Cascader.layer.css +216 -0
  169. package/styles/FloatingWindow.css +2 -0
  170. package/styles/FloatingWindow.layer.css +2 -0
  171. package/styles/ScrollArea.css +58 -0
  172. package/styles/ScrollArea.layer.css +58 -0
  173. package/styles/Timeline.css +88 -14
  174. package/styles/Timeline.layer.css +88 -14
  175. package/styles.css +364 -14
  176. package/styles.layer.css +364 -14
@@ -1 +1 @@
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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"}
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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"}
@@ -228,7 +228,7 @@ const TreeSelect = require_factory.genericFactory((_props) => {
228
228
  else {
229
229
  const childLeaves = require_get_children_nodes_values.getChildrenNodesValues(val, data);
230
230
  if (nodeChecked) newInternalChecked = internalChecked.filter((v) => !childLeaves.includes(v));
231
- else newInternalChecked = [...new Set([...internalChecked, ...childLeaves])];
231
+ else newInternalChecked = [.../* @__PURE__ */ new Set([...internalChecked, ...childLeaves])];
232
232
  }
233
233
  const newValue = require_get_checked_values_by_strategy.checkedToValue(newInternalChecked, data, checkedStrategy);
234
234
  if (!nodeChecked && newValue.length > (maxValues ?? Infinity)) return;
@@ -337,7 +337,8 @@ const TreeSelect = require_factory.genericFactory((_props) => {
337
337
  onRemove: () => {
338
338
  if (isCheckbox) {
339
339
  const childLeaves = checkStrictly ? [item] : require_get_children_nodes_values.getChildrenNodesValues(item, data);
340
- setValue(require_get_checked_values_by_strategy.checkedToValue(internalChecked.filter((v) => !childLeaves.includes(v)), data, checkedStrategy));
340
+ const newInternal = internalChecked.filter((v) => !childLeaves.includes(v));
341
+ setValue(require_get_checked_values_by_strategy.checkedToValue(newInternal, data, checkedStrategy));
341
342
  } else setValue(_value.filter((v) => v !== item));
342
343
  onRemove?.(item);
343
344
  },
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSelect.cjs","names":["genericFactory","useProps","useCombobox","getTreeExpandedState","findTreeNode","expandToLeafChecked","filterTreeData","flattenTreeSelectData","useStyles","useResolvedStylesApi","extractStyleProps","isNodeChecked","getChildrenNodesValues","checkedToValue","Combobox","Pill","isNodeIndeterminate","TreeSelectOption","classes","ScrollArea","PillsInput","InputBase"],"sources":["../../../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useId, useUncontrolled } from '@mantine/hooks';\nimport {\n BoxProps,\n ElementProps,\n extractStyleProps,\n Factory,\n genericFactory,\n MantineColor,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '../../core';\nimport { Combobox, ComboboxLikeStylesNames, useCombobox } from '../Combobox';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n ClearSectionMode,\n InputClearButtonProps,\n InputVariant,\n} from '../Input';\nimport { InputBase } from '../InputBase';\nimport { Pill } from '../Pill';\nimport { PillsInput } from '../PillsInput';\nimport { ScrollArea, ScrollAreaProps } from '../ScrollArea';\nimport type { TreeNodeData } from '../Tree';\nimport { filterTreeData } from '../Tree/filter-tree-data/filter-tree-data';\nimport {\n findTreeNode,\n getChildrenNodesValues,\n} from '../Tree/get-children-nodes-values/get-children-nodes-values';\nimport { isNodeChecked } from '../Tree/is-node-checked/is-node-checked';\nimport { isNodeIndeterminate } from '../Tree/is-node-indeterminate/is-node-indeterminate';\nimport { getTreeExpandedState, TreeExpandedState } from '../Tree/use-tree';\nimport { flattenTreeSelectData } from './flatten-tree-select-data';\nimport {\n CheckedStrategy,\n checkedToValue,\n expandToLeafChecked,\n} from './get-checked-values-by-strategy';\nimport {\n TreeSelectChevronAriaLabels,\n TreeSelectOption,\n TreeSelectRenderNodePayload,\n} from './TreeSelectOption';\nimport classes from './TreeSelect.module.css';\n\nexport type TreeSelectStylesNames =\n | __InputStylesNames\n | ComboboxLikeStylesNames\n | 'pill'\n | 'pillsList'\n | 'inputField';\n\nexport type TreeSelectMode = 'single' | 'multiple' | 'checkbox';\n\nexport type TreeSelectValue<Mode extends TreeSelectMode> = Mode extends 'single'\n ? string | null\n : string[];\n\nexport interface TreeSelectProps<Mode extends TreeSelectMode = 'single'>\n extends\n BoxProps,\n __BaseInputProps,\n StylesApiProps<TreeSelectFactory>,\n ElementProps<'input', 'size' | 'value' | 'defaultValue' | 'onChange'> {\n /** Tree data */\n data: TreeNodeData[];\n\n /** Selection mode: 'single', 'multiple', or 'checkbox' (with cascade) @default 'single' */\n mode?: Mode;\n\n /** Controlled value */\n value?: TreeSelectValue<Mode>;\n\n /** Default value */\n defaultValue?: TreeSelectValue<Mode>;\n\n /** Called when value changes */\n onChange?: (value: TreeSelectValue<Mode>) => void;\n\n /** Disables parent-child cascade in checkbox mode @default false */\n checkStrictly?: boolean;\n\n /** Controls which checked nodes appear in value/pills in checkbox mode @default 'child' */\n checkedStrategy?: CheckedStrategy;\n\n /** Default expanded node values */\n defaultExpandedValues?: string[];\n\n /** Expand all nodes by default @default false */\n defaultExpandAll?: boolean;\n\n /** Controlled expanded state */\n expandedValues?: string[];\n\n /** Called when expanded state changes */\n onExpandedChange?: (values: string[]) => void;\n\n /** Also toggle expand when clicking a parent node (not just the chevron). In `single` and `multiple` modes, parent clicks only expand; only leaves can be selected. In `checkbox` mode, parent clicks both check and expand. @default false */\n expandOnClick?: boolean;\n\n /** Enables search filtering @default false */\n searchable?: boolean;\n\n /** Controlled search value */\n searchValue?: string;\n\n /** Default search value */\n defaultSearchValue?: string;\n\n /** Called when search changes */\n onSearchChange?: (value: string) => void;\n\n /** Custom filter function */\n filter?: (query: string, node: TreeNodeData) => boolean;\n\n /** Message when no nodes match search */\n nothingFoundMessage?: React.ReactNode;\n\n /** Allows deselecting in single mode @default true */\n allowDeselect?: boolean;\n\n /** Shows clear button @default false */\n clearable?: boolean;\n\n /** Determines how the clear button and rightSection are rendered @default 'both' */\n clearSectionMode?: ClearSectionMode;\n\n /** Props for the clear button */\n clearButtonProps?: InputClearButtonProps;\n\n /** Maximum selectable values (multiple/checkbox mode) */\n maxValues?: number;\n\n /** Maximum displayed pills before \"+N more\" */\n maxDisplayedValues?: number;\n\n /** Content shown when values overflow maxDisplayedValues */\n maxDisplayedValuesContent?: React.ReactNode | ((overflow: number) => React.ReactNode);\n\n /** Called with removed value in multiple/checkbox mode */\n onRemove?: (value: string) => void;\n\n /** Called when clear button is clicked */\n onClear?: () => void;\n\n /** Custom node rendering in the dropdown */\n renderNode?: (payload: TreeSelectRenderNodePayload) => React.ReactNode;\n\n /** Show tree connection lines between parent and child nodes @default true */\n withLines?: boolean;\n\n /** Props for the hidden input */\n hiddenInputProps?: Omit<React.ComponentProps<'input'>, 'value'>;\n\n /** Divider for hidden input values @default ',' */\n hiddenInputValuesDivider?: string;\n\n /** Props for the ScrollArea in the dropdown */\n scrollAreaProps?: ScrollAreaProps;\n\n /** Controls the default chevron color */\n chevronColor?: MantineColor;\n\n /** Max dropdown height @default 220 */\n maxDropdownHeight?: number | string;\n\n /** Controlled dropdown state */\n dropdownOpened?: boolean;\n\n /** Default dropdown state */\n defaultDropdownOpened?: boolean;\n\n /** Called when dropdown opens */\n onDropdownOpen?: () => void;\n\n /** Called when dropdown closes */\n onDropdownClose?: () => void;\n\n /** Props passed to the underlying Combobox */\n comboboxProps?: Record<string, any>;\n\n /** Clear search on selection change @default true */\n clearSearchOnChange?: boolean;\n\n /** Opens dropdown on focus (searchable mode) @default true */\n openOnFocus?: boolean;\n\n /** aria-label values for the expand/collapse chevron button */\n chevronAriaLabels?: TreeSelectChevronAriaLabels;\n}\n\nexport type TreeSelectFactory = Factory<{\n props: TreeSelectProps;\n ref: HTMLInputElement;\n stylesNames: TreeSelectStylesNames;\n variant: InputVariant;\n signature: <Mode extends TreeSelectMode = 'single'>(\n props: TreeSelectProps<Mode>\n ) => React.JSX.Element;\n}>;\n\nconst defaultProps = {\n mode: 'single',\n allowDeselect: true,\n checkedStrategy: 'child',\n maxValues: Infinity,\n hiddenInputValuesDivider: ',',\n clearSearchOnChange: true,\n openOnFocus: true,\n size: 'sm',\n withLines: true,\n} satisfies Partial<TreeSelectProps<TreeSelectMode>>;\n\nconst clearSectionOffset: Record<string, number> = {\n xs: 41,\n sm: 50,\n md: 60,\n lg: 72,\n xl: 89,\n};\n\nfunction getAncestorsToNode(value: string, nodes: TreeNodeData[]): string[] | null {\n for (const node of nodes) {\n if (node.value === value) {\n return [];\n }\n if (Array.isArray(node.children)) {\n const path = getAncestorsToNode(value, node.children);\n if (path !== null) {\n return [node.value, ...path];\n }\n }\n }\n return null;\n}\n\nexport const TreeSelect = genericFactory<TreeSelectFactory>((_props) => {\n const props = useProps(['Input', 'InputWrapper', 'TreeSelect'], defaultProps as any, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n size,\n data,\n mode,\n value,\n defaultValue,\n onChange,\n checkStrictly,\n checkedStrategy,\n defaultExpandedValues,\n defaultExpandAll,\n expandedValues,\n onExpandedChange,\n expandOnClick,\n searchable,\n searchValue,\n defaultSearchValue,\n onSearchChange,\n filter,\n nothingFoundMessage,\n allowDeselect,\n clearable,\n clearSectionMode,\n clearButtonProps,\n maxValues,\n maxDisplayedValues,\n maxDisplayedValuesContent,\n onRemove,\n onClear,\n renderNode,\n withLines,\n hiddenInputProps,\n hiddenInputValuesDivider,\n scrollAreaProps,\n chevronColor,\n maxDropdownHeight,\n dropdownOpened,\n defaultDropdownOpened,\n onDropdownOpen,\n onDropdownClose,\n comboboxProps,\n clearSearchOnChange,\n openOnFocus,\n chevronAriaLabels,\n variant,\n onKeyDown,\n onFocus,\n onBlur,\n onClick,\n readOnly,\n disabled,\n radius,\n rightSection,\n rightSectionWidth,\n rightSectionPointerEvents,\n rightSectionProps,\n leftSection,\n leftSectionWidth,\n leftSectionPointerEvents,\n leftSectionProps,\n inputContainer,\n inputWrapperOrder,\n withAsterisk,\n labelProps,\n descriptionProps,\n errorProps,\n successProps,\n wrapperProps,\n description,\n label,\n error,\n success,\n withErrorStyles,\n withSuccessStyles,\n name,\n form,\n id,\n placeholder,\n required,\n mod,\n attributes,\n ...others\n } = props;\n\n const isMulti = mode === 'multiple' || mode === 'checkbox';\n const isCheckbox = mode === 'checkbox';\n const _id = useId(id);\n\n const combobox = useCombobox({\n opened: dropdownOpened,\n defaultOpened: defaultDropdownOpened,\n onDropdownOpen: () => {\n onDropdownOpen?.();\n combobox.updateSelectedOptionIndex('active', { scrollIntoView: true });\n },\n onDropdownClose: () => {\n onDropdownClose?.();\n combobox.resetSelectedOption();\n },\n });\n\n const initialExpanded = useMemo(() => {\n if (defaultExpandAll) {\n return getTreeExpandedState(data, '*');\n }\n if (defaultExpandedValues) {\n return getTreeExpandedState(data, defaultExpandedValues);\n }\n return getTreeExpandedState(data, []);\n }, []);\n\n const expandedToRecord = useCallback(\n (values: string[] | undefined): TreeExpandedState | undefined => {\n if (!values) {\n return undefined;\n }\n return getTreeExpandedState(data, values);\n },\n [data]\n );\n\n const [_expandedState, setExpandedState] = useUncontrolled<TreeExpandedState>({\n value: expandedToRecord(expandedValues),\n defaultValue: initialExpanded,\n finalValue: {},\n onChange: (val) => {\n if (onExpandedChange) {\n onExpandedChange(\n Object.entries(val)\n .filter(([, v]) => v)\n .map(([k]) => k)\n );\n }\n },\n });\n\n const toggleExpand = useCallback(\n (nodeValue: string) => {\n setExpandedState({ ..._expandedState, [nodeValue]: !_expandedState[nodeValue] });\n },\n [_expandedState]\n );\n\n const initialSearchValue = useMemo(() => {\n if (mode !== 'single' || !defaultValue) {\n return '';\n }\n const node = findTreeNode(defaultValue as string, data);\n return node ? (typeof node.label === 'string' ? node.label : '') : '';\n }, []);\n\n const [_searchValue, setSearchValue] = useUncontrolled({\n value: searchValue,\n defaultValue: defaultSearchValue,\n finalValue: initialSearchValue,\n onChange: onSearchChange,\n });\n\n const handleSearchChange = (val: string) => {\n setSearchValue(val);\n combobox.resetSelectedOption();\n };\n\n const [_value, setValue] = useUncontrolled({\n value: value as any,\n defaultValue: defaultValue as any,\n finalValue: isMulti ? [] : null,\n onChange,\n });\n\n const internalChecked = useMemo(() => {\n if (!isCheckbox || !_value || !Array.isArray(_value)) {\n return [];\n }\n if (checkStrictly) {\n return _value;\n }\n return expandToLeafChecked(_value, data);\n }, [isCheckbox, _value, data, checkStrictly]);\n\n const filteredData = useMemo(() => {\n if (!searchable || !_searchValue) {\n return data;\n }\n if (mode === 'single' && _value) {\n const node = findTreeNode(_value as string, data);\n if (node && _searchValue === (typeof node.label === 'string' ? node.label : '')) {\n return data;\n }\n }\n return filterTreeData(data, _searchValue, filter);\n }, [data, _searchValue, filter, searchable, mode, _value]);\n\n const expandedForRender = useMemo(() => {\n if (_searchValue && filteredData !== data) {\n const expanded = { ..._expandedState };\n const expandFilteredParents = (nodes: TreeNodeData[]) => {\n for (const node of nodes) {\n if (Array.isArray(node.children) && node.children.length > 0) {\n expanded[node.value] = true;\n expandFilteredParents(node.children);\n }\n }\n };\n expandFilteredParents(filteredData);\n return expanded;\n }\n return _expandedState;\n }, [filteredData, _expandedState, _searchValue, data]);\n\n const flatNodes = useMemo(\n () => flattenTreeSelectData(filteredData, expandedForRender),\n [filteredData, expandedForRender]\n );\n\n const flatNodesRef = useRef(flatNodes);\n flatNodesRef.current = flatNodes;\n\n const nodeLookup = useMemo(() => {\n const lookup: Record<string, TreeNodeData> = {};\n const walk = (nodes: TreeNodeData[]) => {\n for (const node of nodes) {\n lookup[node.value] = node;\n if (Array.isArray(node.children)) {\n walk(node.children);\n }\n }\n };\n walk(data);\n return lookup;\n }, [data]);\n\n const getNodeLabel = (nodeValue: string): string => {\n const node = nodeLookup[nodeValue];\n if (!node) {\n return nodeValue;\n }\n return typeof node.label === 'string' ? node.label : nodeValue;\n };\n\n const getStyles = useStyles<TreeSelectFactory>({\n name: 'TreeSelect',\n classes: {} as any,\n props: props as any,\n classNames,\n styles,\n unstyled,\n attributes,\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<TreeSelectFactory>({\n props,\n styles,\n classNames,\n });\n\n const {\n styleProps,\n rest: { type, autoComplete, ...rest },\n } = extractStyleProps(others);\n\n const handleOptionSubmit = (val: string) => {\n if (mode === 'single') {\n if (expandOnClick) {\n const node = findTreeNode(val, data);\n if (node && Array.isArray(node.children) && node.children.length > 0) {\n toggleExpand(val);\n return;\n }\n }\n const nextValue = allowDeselect && val === _value ? null : val;\n setValue(nextValue);\n combobox.closeDropdown();\n if (clearSearchOnChange) {\n handleSearchChange(nextValue ? getNodeLabel(nextValue) : '');\n }\n } else if (mode === 'multiple') {\n if (expandOnClick) {\n const node = findTreeNode(val, data);\n if (node && Array.isArray(node.children) && node.children.length > 0) {\n toggleExpand(val);\n return;\n }\n }\n const arr = (_value as string[]) || [];\n if (arr.includes(val)) {\n setValue(arr.filter((v: string) => v !== val));\n onRemove?.(val);\n } else if (arr.length < (maxValues ?? Infinity)) {\n setValue([...arr, val]);\n } else {\n return;\n }\n if (clearSearchOnChange) {\n setSearchValue('');\n }\n } else if (mode === 'checkbox') {\n const nodeChecked = checkStrictly\n ? internalChecked.includes(val)\n : isNodeChecked(val, data, internalChecked);\n\n let newInternalChecked: string[];\n if (checkStrictly) {\n newInternalChecked = nodeChecked\n ? internalChecked.filter((v) => v !== val)\n : [...internalChecked, val];\n } else {\n const childLeaves = getChildrenNodesValues(val, data);\n if (nodeChecked) {\n newInternalChecked = internalChecked.filter((v) => !childLeaves.includes(v));\n } else {\n newInternalChecked = [...new Set([...internalChecked, ...childLeaves])];\n }\n }\n\n const newValue = checkedToValue(newInternalChecked, data, checkedStrategy!);\n if (!nodeChecked && newValue.length > (maxValues ?? Infinity)) {\n return;\n }\n setValue(newValue);\n if (clearSearchOnChange) {\n setSearchValue('');\n }\n\n if (expandOnClick) {\n const node = findTreeNode(val, data);\n if (node && Array.isArray(node.children) && node.children.length > 0) {\n if (!_expandedState[val]) {\n toggleExpand(val);\n }\n }\n }\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (event.key === ' ' && !searchable && isMulti) {\n event.preventDefault();\n combobox.toggleDropdown();\n }\n\n if (event.key === 'Backspace' && _searchValue.length === 0 && isMulti) {\n const arr = (_value as string[]) || [];\n if (arr.length > 0) {\n const removed = arr[arr.length - 1];\n onRemove?.(removed);\n setValue(arr.slice(0, -1));\n }\n }\n\n if (!combobox.dropdownOpened) {\n return;\n }\n\n const index = combobox.getSelectedOptionIndex();\n if (index < 0 || index >= flatNodesRef.current.length) {\n return;\n }\n\n const currentNode = flatNodesRef.current[index];\n\n if (event.key === 'ArrowRight') {\n if (currentNode.hasChildren && !currentNode.expanded) {\n event.preventDefault();\n toggleExpand(currentNode.node.value);\n }\n }\n\n if (event.key === 'ArrowLeft') {\n if (currentNode.hasChildren && currentNode.expanded) {\n event.preventDefault();\n toggleExpand(currentNode.node.value);\n } else if (currentNode.parent) {\n event.preventDefault();\n const parentIndex = flatNodesRef.current.findIndex(\n (n) => n.node.value === currentNode.parent\n );\n if (parentIndex >= 0) {\n combobox.selectOption(parentIndex);\n }\n }\n }\n };\n\n useEffect(() => {\n if (mode !== 'single' || !searchable) {\n return;\n }\n if (value === null) {\n handleSearchChange('');\n } else if (typeof value === 'string') {\n handleSearchChange(getNodeLabel(value));\n }\n }, [value]);\n\n const prevDropdownOpenedRef = useRef(false);\n useEffect(() => {\n if (combobox.dropdownOpened && !prevDropdownOpenedRef.current && searchable && _value) {\n const targets = Array.isArray(_value) ? _value : [_value];\n const newExpanded = { ..._expandedState };\n let changed = false;\n for (const target of targets) {\n const ancestors = getAncestorsToNode(target as string, data);\n if (ancestors) {\n for (const a of ancestors) {\n if (!newExpanded[a]) {\n newExpanded[a] = true;\n changed = true;\n }\n }\n }\n }\n if (changed) {\n setExpandedState(newExpanded);\n requestAnimationFrame(() => {\n combobox.updateSelectedOptionIndex('active', { scrollIntoView: true });\n });\n }\n }\n prevDropdownOpenedRef.current = combobox.dropdownOpened;\n });\n\n const clearButton = (\n <Combobox.ClearButton\n {...clearButtonProps}\n onClear={() => {\n onClear?.();\n setValue(isMulti ? [] : null);\n handleSearchChange('');\n combobox.focusTarget();\n }}\n />\n );\n\n const hasValue = isMulti\n ? Array.isArray(_value) && _value.length > 0\n : _value != null && _value !== '';\n const _clearable = clearable && hasValue && !disabled && !readOnly;\n\n const singleDisplayLabel = useMemo(() => {\n if (mode !== 'single' || !_value) {\n return '';\n }\n return getNodeLabel(_value as string);\n }, [mode, _value, nodeLookup]);\n\n const displayValues = useMemo(() => {\n if (!isMulti || !Array.isArray(_value)) {\n return [];\n }\n return _value as string[];\n }, [isMulti, _value]);\n\n const pillsListStyle =\n _clearable && isMulti\n ? { paddingInlineEnd: clearSectionOffset[size as string] ?? clearSectionOffset.sm }\n : undefined;\n\n const visiblePills =\n maxDisplayedValues != null ? displayValues.slice(0, maxDisplayedValues) : displayValues;\n\n const overflowCount =\n maxDisplayedValues != null ? Math.max(0, displayValues.length - maxDisplayedValues) : 0;\n\n const pills = visiblePills.map((item, index) => (\n <Pill\n key={`${item}-${index}`}\n withRemoveButton={!readOnly}\n onRemove={() => {\n if (isCheckbox) {\n const childLeaves = checkStrictly ? [item] : getChildrenNodesValues(item, data);\n const newInternal = internalChecked.filter((v) => !childLeaves.includes(v));\n setValue(checkedToValue(newInternal, data, checkedStrategy!));\n } else {\n setValue((_value as string[]).filter((v: string) => v !== item));\n }\n onRemove?.(item);\n }}\n unstyled={unstyled}\n disabled={disabled}\n {...getStyles('pill')}\n >\n {getNodeLabel(item)}\n </Pill>\n ));\n\n if (overflowCount > 0) {\n const overflowContent =\n typeof maxDisplayedValuesContent === 'function'\n ? maxDisplayedValuesContent(overflowCount)\n : maxDisplayedValuesContent || `+${overflowCount} more`;\n pills.push(\n <Pill key=\"__overflow\" unstyled={unstyled} disabled={disabled} {...getStyles('pill')}>\n {overflowContent}\n </Pill>\n );\n }\n\n const isEmpty = flatNodes.length === 0;\n\n const options = flatNodes.map((flatNode) => {\n const isSelected =\n mode === 'single'\n ? _value === flatNode.node.value\n : mode === 'multiple'\n ? ((_value as string[]) || []).includes(flatNode.node.value)\n : false;\n\n const nodeChecked = isCheckbox\n ? checkStrictly\n ? internalChecked.includes(flatNode.node.value)\n : isNodeChecked(flatNode.node.value, data, internalChecked)\n : false;\n\n const nodeIndeterminate =\n isCheckbox && !checkStrictly\n ? isNodeIndeterminate(flatNode.node.value, data, internalChecked)\n : false;\n\n return (\n <TreeSelectOption\n key={flatNode.node.value}\n node={flatNode.node}\n level={flatNode.level}\n expanded={flatNode.expanded}\n hasChildren={flatNode.hasChildren}\n selected={isSelected}\n checked={nodeChecked}\n indeterminate={nodeIndeterminate}\n showCheckbox={isCheckbox}\n isLastChild={flatNode.isLastChild}\n lineGuides={flatNode.lineGuides}\n withLines={!!withLines}\n onToggleExpand={toggleExpand}\n renderNode={renderNode}\n chevronAriaLabels={chevronAriaLabels}\n />\n );\n });\n\n const dropdown = (\n <Combobox.Dropdown hidden={readOnly || disabled}>\n <Combobox.Options\n className={classes.optionsWrapper}\n aria-multiselectable={isMulti || undefined}\n >\n <ScrollArea.Autosize\n mah={maxDropdownHeight ?? 220}\n type=\"scroll\"\n scrollbarSize=\"var(--combobox-padding)\"\n offsetScrollbars=\"y\"\n {...scrollAreaProps}\n >\n {options}\n </ScrollArea.Autosize>\n {isEmpty && nothingFoundMessage && <Combobox.Empty>{nothingFoundMessage}</Combobox.Empty>}\n </Combobox.Options>\n </Combobox.Dropdown>\n );\n\n if (isMulti) {\n return (\n <>\n <Combobox\n store={combobox}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n size={size}\n readOnly={readOnly}\n __staticSelector=\"TreeSelect\"\n attributes={attributes}\n onOptionSubmit={handleOptionSubmit}\n {...comboboxProps}\n >\n <Combobox.DropdownTarget>\n <PillsInput\n {...styleProps}\n __staticSelector=\"TreeSelect\"\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n size={size}\n className={className}\n style={style}\n variant={variant}\n disabled={disabled}\n radius={radius}\n __defaultRightSection={\n <Combobox.Chevron\n size={size}\n error={error}\n unstyled={unstyled}\n color={chevronColor}\n />\n }\n __clearSection={clearButton}\n __clearable={_clearable}\n __clearSectionMode={clearSectionMode}\n rightSection={rightSection}\n rightSectionPointerEvents={rightSectionPointerEvents || 'none'}\n rightSectionWidth={rightSectionWidth}\n rightSectionProps={rightSectionProps}\n leftSection={leftSection}\n leftSectionWidth={leftSectionWidth}\n leftSectionPointerEvents={leftSectionPointerEvents}\n leftSectionProps={leftSectionProps}\n inputContainer={inputContainer}\n inputWrapperOrder={inputWrapperOrder}\n withAsterisk={withAsterisk}\n labelProps={labelProps}\n descriptionProps={descriptionProps}\n errorProps={errorProps}\n successProps={successProps}\n wrapperProps={wrapperProps}\n description={description}\n label={label}\n error={error}\n success={success}\n withErrorStyles={withErrorStyles}\n withSuccessStyles={withSuccessStyles}\n __stylesApiProps={{\n ...props,\n rightSectionPointerEvents: rightSectionPointerEvents || 'none',\n multiline: true,\n }}\n pointer={!searchable}\n onClick={() => (searchable ? combobox.openDropdown() : combobox.toggleDropdown())}\n data-expanded={combobox.dropdownOpened || undefined}\n id={_id}\n required={required}\n mod={mod}\n attributes={attributes}\n >\n <Pill.Group\n attributes={attributes}\n disabled={disabled}\n unstyled={unstyled}\n {...getStyles('pillsList', { style: pillsListStyle })}\n >\n {pills}\n <Combobox.EventsTarget autoComplete={autoComplete}>\n <PillsInput.Field\n {...rest}\n id={_id}\n placeholder={placeholder}\n type={!searchable && !placeholder ? 'hidden' : 'visible'}\n {...getStyles('inputField')}\n unstyled={unstyled}\n onFocus={(event) => {\n onFocus?.(event);\n if (openOnFocus && searchable) {\n combobox.openDropdown();\n }\n }}\n onBlur={(event) => {\n onBlur?.(event);\n combobox.closeDropdown();\n handleSearchChange('');\n }}\n onKeyDown={handleKeyDown}\n value={_searchValue}\n onChange={(event) => {\n handleSearchChange(event.currentTarget.value);\n if (searchable) {\n combobox.openDropdown();\n }\n }}\n disabled={disabled}\n readOnly={readOnly || !searchable}\n pointer={!searchable}\n />\n </Combobox.EventsTarget>\n </Pill.Group>\n </PillsInput>\n </Combobox.DropdownTarget>\n {dropdown}\n </Combobox>\n <Combobox.HiddenInput\n name={name}\n valuesDivider={hiddenInputValuesDivider}\n value={_value}\n form={form}\n disabled={disabled}\n {...hiddenInputProps}\n />\n </>\n );\n }\n\n return (\n <>\n <Combobox\n store={combobox}\n __staticSelector=\"TreeSelect\"\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n readOnly={readOnly}\n size={size}\n attributes={attributes}\n onOptionSubmit={handleOptionSubmit}\n {...comboboxProps}\n >\n <Combobox.Target targetType={searchable ? 'input' : 'button'} autoComplete={autoComplete}>\n <InputBase\n id={_id}\n __defaultRightSection={\n <Combobox.Chevron\n size={size}\n error={error}\n unstyled={unstyled}\n color={chevronColor}\n />\n }\n __clearSection={clearButton}\n __clearable={_clearable}\n __clearSectionMode={clearSectionMode}\n rightSection={rightSection}\n rightSectionPointerEvents={rightSectionPointerEvents || 'none'}\n {...rest}\n {...styleProps}\n size={size}\n __staticSelector=\"TreeSelect\"\n disabled={disabled}\n readOnly={readOnly || !searchable}\n value={searchable ? _searchValue : singleDisplayLabel}\n onChange={(event) => {\n handleSearchChange(event.currentTarget.value);\n combobox.openDropdown();\n }}\n onFocus={(event) => {\n if (openOnFocus && searchable) {\n combobox.openDropdown();\n }\n onFocus?.(event);\n }}\n onBlur={(event) => {\n if (searchable) {\n combobox.closeDropdown();\n }\n handleSearchChange(_value ? getNodeLabel(_value as string) : '');\n onBlur?.(event);\n }}\n onClick={(event) => {\n searchable ? combobox.openDropdown() : combobox.toggleDropdown();\n onClick?.(event);\n }}\n onKeyDown={handleKeyDown}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n pointer={!searchable}\n error={error}\n success={success}\n attributes={attributes}\n className={className}\n style={style}\n variant={variant}\n radius={radius}\n leftSection={leftSection}\n leftSectionWidth={leftSectionWidth}\n leftSectionPointerEvents={leftSectionPointerEvents}\n leftSectionProps={leftSectionProps}\n rightSectionWidth={rightSectionWidth}\n rightSectionProps={rightSectionProps}\n inputContainer={inputContainer}\n inputWrapperOrder={inputWrapperOrder}\n withAsterisk={withAsterisk}\n labelProps={labelProps}\n descriptionProps={descriptionProps}\n errorProps={errorProps}\n successProps={successProps}\n wrapperProps={wrapperProps}\n description={description}\n label={label}\n withErrorStyles={withErrorStyles}\n withSuccessStyles={withSuccessStyles}\n placeholder={placeholder}\n required={required}\n mod={mod}\n />\n </Combobox.Target>\n {dropdown}\n </Combobox>\n <Combobox.HiddenInput\n value={_value}\n name={name}\n form={form}\n disabled={disabled}\n {...hiddenInputProps}\n />\n </>\n );\n});\n\nTreeSelect.classes = { ...InputBase.classes, ...Combobox.classes };\nTreeSelect.displayName = '@mantine/core/TreeSelect';\n"],"mappings":"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"}
1
+ {"version":3,"file":"TreeSelect.cjs","names":["genericFactory","useProps","useCombobox","getTreeExpandedState","findTreeNode","expandToLeafChecked","filterTreeData","flattenTreeSelectData","useStyles","useResolvedStylesApi","extractStyleProps","isNodeChecked","getChildrenNodesValues","checkedToValue","Combobox","Pill","isNodeIndeterminate","TreeSelectOption","classes","ScrollArea","PillsInput","InputBase"],"sources":["../../../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useId, useUncontrolled } from '@mantine/hooks';\nimport {\n BoxProps,\n ElementProps,\n extractStyleProps,\n Factory,\n genericFactory,\n MantineColor,\n StylesApiProps,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '../../core';\nimport { Combobox, ComboboxLikeStylesNames, useCombobox } from '../Combobox';\nimport {\n __BaseInputProps,\n __InputStylesNames,\n ClearSectionMode,\n InputClearButtonProps,\n InputVariant,\n} from '../Input';\nimport { InputBase } from '../InputBase';\nimport { Pill } from '../Pill';\nimport { PillsInput } from '../PillsInput';\nimport { ScrollArea, ScrollAreaProps } from '../ScrollArea';\nimport type { TreeNodeData } from '../Tree';\nimport { filterTreeData } from '../Tree/filter-tree-data/filter-tree-data';\nimport {\n findTreeNode,\n getChildrenNodesValues,\n} from '../Tree/get-children-nodes-values/get-children-nodes-values';\nimport { isNodeChecked } from '../Tree/is-node-checked/is-node-checked';\nimport { isNodeIndeterminate } from '../Tree/is-node-indeterminate/is-node-indeterminate';\nimport { getTreeExpandedState, TreeExpandedState } from '../Tree/use-tree';\nimport { flattenTreeSelectData } from './flatten-tree-select-data';\nimport {\n CheckedStrategy,\n checkedToValue,\n expandToLeafChecked,\n} from './get-checked-values-by-strategy';\nimport {\n TreeSelectChevronAriaLabels,\n TreeSelectOption,\n TreeSelectRenderNodePayload,\n} from './TreeSelectOption';\nimport classes from './TreeSelect.module.css';\n\nexport type TreeSelectStylesNames =\n | __InputStylesNames\n | ComboboxLikeStylesNames\n | 'pill'\n | 'pillsList'\n | 'inputField';\n\nexport type TreeSelectMode = 'single' | 'multiple' | 'checkbox';\n\nexport type TreeSelectValue<Mode extends TreeSelectMode> = Mode extends 'single'\n ? string | null\n : string[];\n\nexport interface TreeSelectProps<Mode extends TreeSelectMode = 'single'>\n extends\n BoxProps,\n __BaseInputProps,\n StylesApiProps<TreeSelectFactory>,\n ElementProps<'input', 'size' | 'value' | 'defaultValue' | 'onChange'> {\n /** Tree data */\n data: TreeNodeData[];\n\n /** Selection mode: 'single', 'multiple', or 'checkbox' (with cascade) @default 'single' */\n mode?: Mode;\n\n /** Controlled value */\n value?: TreeSelectValue<Mode>;\n\n /** Default value */\n defaultValue?: TreeSelectValue<Mode>;\n\n /** Called when value changes */\n onChange?: (value: TreeSelectValue<Mode>) => void;\n\n /** Disables parent-child cascade in checkbox mode @default false */\n checkStrictly?: boolean;\n\n /** Controls which checked nodes appear in value/pills in checkbox mode @default 'child' */\n checkedStrategy?: CheckedStrategy;\n\n /** Default expanded node values */\n defaultExpandedValues?: string[];\n\n /** Expand all nodes by default @default false */\n defaultExpandAll?: boolean;\n\n /** Controlled expanded state */\n expandedValues?: string[];\n\n /** Called when expanded state changes */\n onExpandedChange?: (values: string[]) => void;\n\n /** Also toggle expand when clicking a parent node (not just the chevron). In `single` and `multiple` modes, parent clicks only expand; only leaves can be selected. In `checkbox` mode, parent clicks both check and expand. @default false */\n expandOnClick?: boolean;\n\n /** Enables search filtering @default false */\n searchable?: boolean;\n\n /** Controlled search value */\n searchValue?: string;\n\n /** Default search value */\n defaultSearchValue?: string;\n\n /** Called when search changes */\n onSearchChange?: (value: string) => void;\n\n /** Custom filter function */\n filter?: (query: string, node: TreeNodeData) => boolean;\n\n /** Message when no nodes match search */\n nothingFoundMessage?: React.ReactNode;\n\n /** Allows deselecting in single mode @default true */\n allowDeselect?: boolean;\n\n /** Shows clear button @default false */\n clearable?: boolean;\n\n /** Determines how the clear button and rightSection are rendered @default 'both' */\n clearSectionMode?: ClearSectionMode;\n\n /** Props for the clear button */\n clearButtonProps?: InputClearButtonProps;\n\n /** Maximum selectable values (multiple/checkbox mode) */\n maxValues?: number;\n\n /** Maximum displayed pills before \"+N more\" */\n maxDisplayedValues?: number;\n\n /** Content shown when values overflow maxDisplayedValues */\n maxDisplayedValuesContent?: React.ReactNode | ((overflow: number) => React.ReactNode);\n\n /** Called with removed value in multiple/checkbox mode */\n onRemove?: (value: string) => void;\n\n /** Called when clear button is clicked */\n onClear?: () => void;\n\n /** Custom node rendering in the dropdown */\n renderNode?: (payload: TreeSelectRenderNodePayload) => React.ReactNode;\n\n /** Show tree connection lines between parent and child nodes @default true */\n withLines?: boolean;\n\n /** Props for the hidden input */\n hiddenInputProps?: Omit<React.ComponentProps<'input'>, 'value'>;\n\n /** Divider for hidden input values @default ',' */\n hiddenInputValuesDivider?: string;\n\n /** Props for the ScrollArea in the dropdown */\n scrollAreaProps?: ScrollAreaProps;\n\n /** Controls the default chevron color */\n chevronColor?: MantineColor;\n\n /** Max dropdown height @default 220 */\n maxDropdownHeight?: number | string;\n\n /** Controlled dropdown state */\n dropdownOpened?: boolean;\n\n /** Default dropdown state */\n defaultDropdownOpened?: boolean;\n\n /** Called when dropdown opens */\n onDropdownOpen?: () => void;\n\n /** Called when dropdown closes */\n onDropdownClose?: () => void;\n\n /** Props passed to the underlying Combobox */\n comboboxProps?: Record<string, any>;\n\n /** Clear search on selection change @default true */\n clearSearchOnChange?: boolean;\n\n /** Opens dropdown on focus (searchable mode) @default true */\n openOnFocus?: boolean;\n\n /** aria-label values for the expand/collapse chevron button */\n chevronAriaLabels?: TreeSelectChevronAriaLabels;\n}\n\nexport type TreeSelectFactory = Factory<{\n props: TreeSelectProps;\n ref: HTMLInputElement;\n stylesNames: TreeSelectStylesNames;\n variant: InputVariant;\n signature: <Mode extends TreeSelectMode = 'single'>(\n props: TreeSelectProps<Mode>\n ) => React.JSX.Element;\n}>;\n\nconst defaultProps = {\n mode: 'single',\n allowDeselect: true,\n checkedStrategy: 'child',\n maxValues: Infinity,\n hiddenInputValuesDivider: ',',\n clearSearchOnChange: true,\n openOnFocus: true,\n size: 'sm',\n withLines: true,\n} satisfies Partial<TreeSelectProps<TreeSelectMode>>;\n\nconst clearSectionOffset: Record<string, number> = {\n xs: 41,\n sm: 50,\n md: 60,\n lg: 72,\n xl: 89,\n};\n\nfunction getAncestorsToNode(value: string, nodes: TreeNodeData[]): string[] | null {\n for (const node of nodes) {\n if (node.value === value) {\n return [];\n }\n if (Array.isArray(node.children)) {\n const path = getAncestorsToNode(value, node.children);\n if (path !== null) {\n return [node.value, ...path];\n }\n }\n }\n return null;\n}\n\nexport const TreeSelect = genericFactory<TreeSelectFactory>((_props) => {\n const props = useProps(['Input', 'InputWrapper', 'TreeSelect'], defaultProps as any, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n size,\n data,\n mode,\n value,\n defaultValue,\n onChange,\n checkStrictly,\n checkedStrategy,\n defaultExpandedValues,\n defaultExpandAll,\n expandedValues,\n onExpandedChange,\n expandOnClick,\n searchable,\n searchValue,\n defaultSearchValue,\n onSearchChange,\n filter,\n nothingFoundMessage,\n allowDeselect,\n clearable,\n clearSectionMode,\n clearButtonProps,\n maxValues,\n maxDisplayedValues,\n maxDisplayedValuesContent,\n onRemove,\n onClear,\n renderNode,\n withLines,\n hiddenInputProps,\n hiddenInputValuesDivider,\n scrollAreaProps,\n chevronColor,\n maxDropdownHeight,\n dropdownOpened,\n defaultDropdownOpened,\n onDropdownOpen,\n onDropdownClose,\n comboboxProps,\n clearSearchOnChange,\n openOnFocus,\n chevronAriaLabels,\n variant,\n onKeyDown,\n onFocus,\n onBlur,\n onClick,\n readOnly,\n disabled,\n radius,\n rightSection,\n rightSectionWidth,\n rightSectionPointerEvents,\n rightSectionProps,\n leftSection,\n leftSectionWidth,\n leftSectionPointerEvents,\n leftSectionProps,\n inputContainer,\n inputWrapperOrder,\n withAsterisk,\n labelProps,\n descriptionProps,\n errorProps,\n successProps,\n wrapperProps,\n description,\n label,\n error,\n success,\n withErrorStyles,\n withSuccessStyles,\n name,\n form,\n id,\n placeholder,\n required,\n mod,\n attributes,\n ...others\n } = props;\n\n const isMulti = mode === 'multiple' || mode === 'checkbox';\n const isCheckbox = mode === 'checkbox';\n const _id = useId(id);\n\n const combobox = useCombobox({\n opened: dropdownOpened,\n defaultOpened: defaultDropdownOpened,\n onDropdownOpen: () => {\n onDropdownOpen?.();\n combobox.updateSelectedOptionIndex('active', { scrollIntoView: true });\n },\n onDropdownClose: () => {\n onDropdownClose?.();\n combobox.resetSelectedOption();\n },\n });\n\n const initialExpanded = useMemo(() => {\n if (defaultExpandAll) {\n return getTreeExpandedState(data, '*');\n }\n if (defaultExpandedValues) {\n return getTreeExpandedState(data, defaultExpandedValues);\n }\n return getTreeExpandedState(data, []);\n }, []);\n\n const expandedToRecord = useCallback(\n (values: string[] | undefined): TreeExpandedState | undefined => {\n if (!values) {\n return undefined;\n }\n return getTreeExpandedState(data, values);\n },\n [data]\n );\n\n const [_expandedState, setExpandedState] = useUncontrolled<TreeExpandedState>({\n value: expandedToRecord(expandedValues),\n defaultValue: initialExpanded,\n finalValue: {},\n onChange: (val) => {\n if (onExpandedChange) {\n onExpandedChange(\n Object.entries(val)\n .filter(([, v]) => v)\n .map(([k]) => k)\n );\n }\n },\n });\n\n const toggleExpand = useCallback(\n (nodeValue: string) => {\n setExpandedState({ ..._expandedState, [nodeValue]: !_expandedState[nodeValue] });\n },\n [_expandedState]\n );\n\n const initialSearchValue = useMemo(() => {\n if (mode !== 'single' || !defaultValue) {\n return '';\n }\n const node = findTreeNode(defaultValue as string, data);\n return node ? (typeof node.label === 'string' ? node.label : '') : '';\n }, []);\n\n const [_searchValue, setSearchValue] = useUncontrolled({\n value: searchValue,\n defaultValue: defaultSearchValue,\n finalValue: initialSearchValue,\n onChange: onSearchChange,\n });\n\n const handleSearchChange = (val: string) => {\n setSearchValue(val);\n combobox.resetSelectedOption();\n };\n\n const [_value, setValue] = useUncontrolled({\n value: value as any,\n defaultValue: defaultValue as any,\n finalValue: isMulti ? [] : null,\n onChange,\n });\n\n const internalChecked = useMemo(() => {\n if (!isCheckbox || !_value || !Array.isArray(_value)) {\n return [];\n }\n if (checkStrictly) {\n return _value;\n }\n return expandToLeafChecked(_value, data);\n }, [isCheckbox, _value, data, checkStrictly]);\n\n const filteredData = useMemo(() => {\n if (!searchable || !_searchValue) {\n return data;\n }\n if (mode === 'single' && _value) {\n const node = findTreeNode(_value as string, data);\n if (node && _searchValue === (typeof node.label === 'string' ? node.label : '')) {\n return data;\n }\n }\n return filterTreeData(data, _searchValue, filter);\n }, [data, _searchValue, filter, searchable, mode, _value]);\n\n const expandedForRender = useMemo(() => {\n if (_searchValue && filteredData !== data) {\n const expanded = { ..._expandedState };\n const expandFilteredParents = (nodes: TreeNodeData[]) => {\n for (const node of nodes) {\n if (Array.isArray(node.children) && node.children.length > 0) {\n expanded[node.value] = true;\n expandFilteredParents(node.children);\n }\n }\n };\n expandFilteredParents(filteredData);\n return expanded;\n }\n return _expandedState;\n }, [filteredData, _expandedState, _searchValue, data]);\n\n const flatNodes = useMemo(\n () => flattenTreeSelectData(filteredData, expandedForRender),\n [filteredData, expandedForRender]\n );\n\n const flatNodesRef = useRef(flatNodes);\n flatNodesRef.current = flatNodes;\n\n const nodeLookup = useMemo(() => {\n const lookup: Record<string, TreeNodeData> = {};\n const walk = (nodes: TreeNodeData[]) => {\n for (const node of nodes) {\n lookup[node.value] = node;\n if (Array.isArray(node.children)) {\n walk(node.children);\n }\n }\n };\n walk(data);\n return lookup;\n }, [data]);\n\n const getNodeLabel = (nodeValue: string): string => {\n const node = nodeLookup[nodeValue];\n if (!node) {\n return nodeValue;\n }\n return typeof node.label === 'string' ? node.label : nodeValue;\n };\n\n const getStyles = useStyles<TreeSelectFactory>({\n name: 'TreeSelect',\n classes: {} as any,\n props: props as any,\n classNames,\n styles,\n unstyled,\n attributes,\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<TreeSelectFactory>({\n props,\n styles,\n classNames,\n });\n\n const {\n styleProps,\n rest: { type, autoComplete, ...rest },\n } = extractStyleProps(others);\n\n const handleOptionSubmit = (val: string) => {\n if (mode === 'single') {\n if (expandOnClick) {\n const node = findTreeNode(val, data);\n if (node && Array.isArray(node.children) && node.children.length > 0) {\n toggleExpand(val);\n return;\n }\n }\n const nextValue = allowDeselect && val === _value ? null : val;\n setValue(nextValue);\n combobox.closeDropdown();\n if (clearSearchOnChange) {\n handleSearchChange(nextValue ? getNodeLabel(nextValue) : '');\n }\n } else if (mode === 'multiple') {\n if (expandOnClick) {\n const node = findTreeNode(val, data);\n if (node && Array.isArray(node.children) && node.children.length > 0) {\n toggleExpand(val);\n return;\n }\n }\n const arr = (_value as string[]) || [];\n if (arr.includes(val)) {\n setValue(arr.filter((v: string) => v !== val));\n onRemove?.(val);\n } else if (arr.length < (maxValues ?? Infinity)) {\n setValue([...arr, val]);\n } else {\n return;\n }\n if (clearSearchOnChange) {\n setSearchValue('');\n }\n } else if (mode === 'checkbox') {\n const nodeChecked = checkStrictly\n ? internalChecked.includes(val)\n : isNodeChecked(val, data, internalChecked);\n\n let newInternalChecked: string[];\n if (checkStrictly) {\n newInternalChecked = nodeChecked\n ? internalChecked.filter((v) => v !== val)\n : [...internalChecked, val];\n } else {\n const childLeaves = getChildrenNodesValues(val, data);\n if (nodeChecked) {\n newInternalChecked = internalChecked.filter((v) => !childLeaves.includes(v));\n } else {\n newInternalChecked = [...new Set([...internalChecked, ...childLeaves])];\n }\n }\n\n const newValue = checkedToValue(newInternalChecked, data, checkedStrategy!);\n if (!nodeChecked && newValue.length > (maxValues ?? Infinity)) {\n return;\n }\n setValue(newValue);\n if (clearSearchOnChange) {\n setSearchValue('');\n }\n\n if (expandOnClick) {\n const node = findTreeNode(val, data);\n if (node && Array.isArray(node.children) && node.children.length > 0) {\n if (!_expandedState[val]) {\n toggleExpand(val);\n }\n }\n }\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (event.key === ' ' && !searchable && isMulti) {\n event.preventDefault();\n combobox.toggleDropdown();\n }\n\n if (event.key === 'Backspace' && _searchValue.length === 0 && isMulti) {\n const arr = (_value as string[]) || [];\n if (arr.length > 0) {\n const removed = arr[arr.length - 1];\n onRemove?.(removed);\n setValue(arr.slice(0, -1));\n }\n }\n\n if (!combobox.dropdownOpened) {\n return;\n }\n\n const index = combobox.getSelectedOptionIndex();\n if (index < 0 || index >= flatNodesRef.current.length) {\n return;\n }\n\n const currentNode = flatNodesRef.current[index];\n\n if (event.key === 'ArrowRight') {\n if (currentNode.hasChildren && !currentNode.expanded) {\n event.preventDefault();\n toggleExpand(currentNode.node.value);\n }\n }\n\n if (event.key === 'ArrowLeft') {\n if (currentNode.hasChildren && currentNode.expanded) {\n event.preventDefault();\n toggleExpand(currentNode.node.value);\n } else if (currentNode.parent) {\n event.preventDefault();\n const parentIndex = flatNodesRef.current.findIndex(\n (n) => n.node.value === currentNode.parent\n );\n if (parentIndex >= 0) {\n combobox.selectOption(parentIndex);\n }\n }\n }\n };\n\n useEffect(() => {\n if (mode !== 'single' || !searchable) {\n return;\n }\n if (value === null) {\n handleSearchChange('');\n } else if (typeof value === 'string') {\n handleSearchChange(getNodeLabel(value));\n }\n }, [value]);\n\n const prevDropdownOpenedRef = useRef(false);\n useEffect(() => {\n if (combobox.dropdownOpened && !prevDropdownOpenedRef.current && searchable && _value) {\n const targets = Array.isArray(_value) ? _value : [_value];\n const newExpanded = { ..._expandedState };\n let changed = false;\n for (const target of targets) {\n const ancestors = getAncestorsToNode(target as string, data);\n if (ancestors) {\n for (const a of ancestors) {\n if (!newExpanded[a]) {\n newExpanded[a] = true;\n changed = true;\n }\n }\n }\n }\n if (changed) {\n setExpandedState(newExpanded);\n requestAnimationFrame(() => {\n combobox.updateSelectedOptionIndex('active', { scrollIntoView: true });\n });\n }\n }\n prevDropdownOpenedRef.current = combobox.dropdownOpened;\n });\n\n const clearButton = (\n <Combobox.ClearButton\n {...clearButtonProps}\n onClear={() => {\n onClear?.();\n setValue(isMulti ? [] : null);\n handleSearchChange('');\n combobox.focusTarget();\n }}\n />\n );\n\n const hasValue = isMulti\n ? Array.isArray(_value) && _value.length > 0\n : _value != null && _value !== '';\n const _clearable = clearable && hasValue && !disabled && !readOnly;\n\n const singleDisplayLabel = useMemo(() => {\n if (mode !== 'single' || !_value) {\n return '';\n }\n return getNodeLabel(_value as string);\n }, [mode, _value, nodeLookup]);\n\n const displayValues = useMemo(() => {\n if (!isMulti || !Array.isArray(_value)) {\n return [];\n }\n return _value as string[];\n }, [isMulti, _value]);\n\n const pillsListStyle =\n _clearable && isMulti\n ? { paddingInlineEnd: clearSectionOffset[size as string] ?? clearSectionOffset.sm }\n : undefined;\n\n const visiblePills =\n maxDisplayedValues != null ? displayValues.slice(0, maxDisplayedValues) : displayValues;\n\n const overflowCount =\n maxDisplayedValues != null ? Math.max(0, displayValues.length - maxDisplayedValues) : 0;\n\n const pills = visiblePills.map((item, index) => (\n <Pill\n key={`${item}-${index}`}\n withRemoveButton={!readOnly}\n onRemove={() => {\n if (isCheckbox) {\n const childLeaves = checkStrictly ? [item] : getChildrenNodesValues(item, data);\n const newInternal = internalChecked.filter((v) => !childLeaves.includes(v));\n setValue(checkedToValue(newInternal, data, checkedStrategy!));\n } else {\n setValue((_value as string[]).filter((v: string) => v !== item));\n }\n onRemove?.(item);\n }}\n unstyled={unstyled}\n disabled={disabled}\n {...getStyles('pill')}\n >\n {getNodeLabel(item)}\n </Pill>\n ));\n\n if (overflowCount > 0) {\n const overflowContent =\n typeof maxDisplayedValuesContent === 'function'\n ? maxDisplayedValuesContent(overflowCount)\n : maxDisplayedValuesContent || `+${overflowCount} more`;\n pills.push(\n <Pill key=\"__overflow\" unstyled={unstyled} disabled={disabled} {...getStyles('pill')}>\n {overflowContent}\n </Pill>\n );\n }\n\n const isEmpty = flatNodes.length === 0;\n\n const options = flatNodes.map((flatNode) => {\n const isSelected =\n mode === 'single'\n ? _value === flatNode.node.value\n : mode === 'multiple'\n ? ((_value as string[]) || []).includes(flatNode.node.value)\n : false;\n\n const nodeChecked = isCheckbox\n ? checkStrictly\n ? internalChecked.includes(flatNode.node.value)\n : isNodeChecked(flatNode.node.value, data, internalChecked)\n : false;\n\n const nodeIndeterminate =\n isCheckbox && !checkStrictly\n ? isNodeIndeterminate(flatNode.node.value, data, internalChecked)\n : false;\n\n return (\n <TreeSelectOption\n key={flatNode.node.value}\n node={flatNode.node}\n level={flatNode.level}\n expanded={flatNode.expanded}\n hasChildren={flatNode.hasChildren}\n selected={isSelected}\n checked={nodeChecked}\n indeterminate={nodeIndeterminate}\n showCheckbox={isCheckbox}\n isLastChild={flatNode.isLastChild}\n lineGuides={flatNode.lineGuides}\n withLines={!!withLines}\n onToggleExpand={toggleExpand}\n renderNode={renderNode}\n chevronAriaLabels={chevronAriaLabels}\n />\n );\n });\n\n const dropdown = (\n <Combobox.Dropdown hidden={readOnly || disabled}>\n <Combobox.Options\n className={classes.optionsWrapper}\n aria-multiselectable={isMulti || undefined}\n >\n <ScrollArea.Autosize\n mah={maxDropdownHeight ?? 220}\n type=\"scroll\"\n scrollbarSize=\"var(--combobox-padding)\"\n offsetScrollbars=\"y\"\n {...scrollAreaProps}\n >\n {options}\n </ScrollArea.Autosize>\n {isEmpty && nothingFoundMessage && <Combobox.Empty>{nothingFoundMessage}</Combobox.Empty>}\n </Combobox.Options>\n </Combobox.Dropdown>\n );\n\n if (isMulti) {\n return (\n <>\n <Combobox\n store={combobox}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n size={size}\n readOnly={readOnly}\n __staticSelector=\"TreeSelect\"\n attributes={attributes}\n onOptionSubmit={handleOptionSubmit}\n {...comboboxProps}\n >\n <Combobox.DropdownTarget>\n <PillsInput\n {...styleProps}\n __staticSelector=\"TreeSelect\"\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n size={size}\n className={className}\n style={style}\n variant={variant}\n disabled={disabled}\n radius={radius}\n __defaultRightSection={\n <Combobox.Chevron\n size={size}\n error={error}\n unstyled={unstyled}\n color={chevronColor}\n />\n }\n __clearSection={clearButton}\n __clearable={_clearable}\n __clearSectionMode={clearSectionMode}\n rightSection={rightSection}\n rightSectionPointerEvents={rightSectionPointerEvents || 'none'}\n rightSectionWidth={rightSectionWidth}\n rightSectionProps={rightSectionProps}\n leftSection={leftSection}\n leftSectionWidth={leftSectionWidth}\n leftSectionPointerEvents={leftSectionPointerEvents}\n leftSectionProps={leftSectionProps}\n inputContainer={inputContainer}\n inputWrapperOrder={inputWrapperOrder}\n withAsterisk={withAsterisk}\n labelProps={labelProps}\n descriptionProps={descriptionProps}\n errorProps={errorProps}\n successProps={successProps}\n wrapperProps={wrapperProps}\n description={description}\n label={label}\n error={error}\n success={success}\n withErrorStyles={withErrorStyles}\n withSuccessStyles={withSuccessStyles}\n __stylesApiProps={{\n ...props,\n rightSectionPointerEvents: rightSectionPointerEvents || 'none',\n multiline: true,\n }}\n pointer={!searchable}\n onClick={() => (searchable ? combobox.openDropdown() : combobox.toggleDropdown())}\n data-expanded={combobox.dropdownOpened || undefined}\n id={_id}\n required={required}\n mod={mod}\n attributes={attributes}\n >\n <Pill.Group\n attributes={attributes}\n disabled={disabled}\n unstyled={unstyled}\n {...getStyles('pillsList', { style: pillsListStyle })}\n >\n {pills}\n <Combobox.EventsTarget autoComplete={autoComplete}>\n <PillsInput.Field\n {...rest}\n id={_id}\n placeholder={placeholder}\n type={!searchable && !placeholder ? 'hidden' : 'visible'}\n {...getStyles('inputField')}\n unstyled={unstyled}\n onFocus={(event) => {\n onFocus?.(event);\n if (openOnFocus && searchable) {\n combobox.openDropdown();\n }\n }}\n onBlur={(event) => {\n onBlur?.(event);\n combobox.closeDropdown();\n handleSearchChange('');\n }}\n onKeyDown={handleKeyDown}\n value={_searchValue}\n onChange={(event) => {\n handleSearchChange(event.currentTarget.value);\n if (searchable) {\n combobox.openDropdown();\n }\n }}\n disabled={disabled}\n readOnly={readOnly || !searchable}\n pointer={!searchable}\n />\n </Combobox.EventsTarget>\n </Pill.Group>\n </PillsInput>\n </Combobox.DropdownTarget>\n {dropdown}\n </Combobox>\n <Combobox.HiddenInput\n name={name}\n valuesDivider={hiddenInputValuesDivider}\n value={_value}\n form={form}\n disabled={disabled}\n {...hiddenInputProps}\n />\n </>\n );\n }\n\n return (\n <>\n <Combobox\n store={combobox}\n __staticSelector=\"TreeSelect\"\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n readOnly={readOnly}\n size={size}\n attributes={attributes}\n onOptionSubmit={handleOptionSubmit}\n {...comboboxProps}\n >\n <Combobox.Target targetType={searchable ? 'input' : 'button'} autoComplete={autoComplete}>\n <InputBase\n id={_id}\n __defaultRightSection={\n <Combobox.Chevron\n size={size}\n error={error}\n unstyled={unstyled}\n color={chevronColor}\n />\n }\n __clearSection={clearButton}\n __clearable={_clearable}\n __clearSectionMode={clearSectionMode}\n rightSection={rightSection}\n rightSectionPointerEvents={rightSectionPointerEvents || 'none'}\n {...rest}\n {...styleProps}\n size={size}\n __staticSelector=\"TreeSelect\"\n disabled={disabled}\n readOnly={readOnly || !searchable}\n value={searchable ? _searchValue : singleDisplayLabel}\n onChange={(event) => {\n handleSearchChange(event.currentTarget.value);\n combobox.openDropdown();\n }}\n onFocus={(event) => {\n if (openOnFocus && searchable) {\n combobox.openDropdown();\n }\n onFocus?.(event);\n }}\n onBlur={(event) => {\n if (searchable) {\n combobox.closeDropdown();\n }\n handleSearchChange(_value ? getNodeLabel(_value as string) : '');\n onBlur?.(event);\n }}\n onClick={(event) => {\n searchable ? combobox.openDropdown() : combobox.toggleDropdown();\n onClick?.(event);\n }}\n onKeyDown={handleKeyDown}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n unstyled={unstyled}\n pointer={!searchable}\n error={error}\n success={success}\n attributes={attributes}\n className={className}\n style={style}\n variant={variant}\n radius={radius}\n leftSection={leftSection}\n leftSectionWidth={leftSectionWidth}\n leftSectionPointerEvents={leftSectionPointerEvents}\n leftSectionProps={leftSectionProps}\n rightSectionWidth={rightSectionWidth}\n rightSectionProps={rightSectionProps}\n inputContainer={inputContainer}\n inputWrapperOrder={inputWrapperOrder}\n withAsterisk={withAsterisk}\n labelProps={labelProps}\n descriptionProps={descriptionProps}\n errorProps={errorProps}\n successProps={successProps}\n wrapperProps={wrapperProps}\n description={description}\n label={label}\n withErrorStyles={withErrorStyles}\n withSuccessStyles={withSuccessStyles}\n placeholder={placeholder}\n required={required}\n mod={mod}\n />\n </Combobox.Target>\n {dropdown}\n </Combobox>\n <Combobox.HiddenInput\n value={_value}\n name={name}\n form={form}\n disabled={disabled}\n {...hiddenInputProps}\n />\n </>\n );\n});\n\nTreeSelect.classes = { ...InputBase.classes, ...Combobox.classes };\nTreeSelect.displayName = '@mantine/core/TreeSelect';\n"],"mappings":"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"}
@@ -22,5 +22,6 @@ function getBoxMod(mod) {
22
22
  }
23
23
  //#endregion
24
24
  exports.getBoxMod = getBoxMod;
25
+ exports.getMod = getMod;
25
26
 
26
27
  //# sourceMappingURL=get-box-mod.cjs.map
@@ -13,12 +13,13 @@ function useMantineTheme() {
13
13
  }
14
14
  function MantineThemeProvider({ theme, children, inherit = true }) {
15
15
  const parentTheme = useSafeMantineTheme();
16
+ const mergedTheme = (0, react.useMemo)(() => require_merge_mantine_theme.mergeMantineTheme(inherit ? parentTheme : require_default_theme.DEFAULT_THEME, theme), [
17
+ theme,
18
+ parentTheme,
19
+ inherit
20
+ ]);
16
21
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MantineThemeContext, {
17
- value: (0, react.useMemo)(() => require_merge_mantine_theme.mergeMantineTheme(inherit ? parentTheme : require_default_theme.DEFAULT_THEME, theme), [
18
- theme,
19
- parentTheme,
20
- inherit
21
- ]),
22
+ value: mergedTheme,
22
23
  children
23
24
  });
24
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MantineThemeProvider.cjs","names":["DEFAULT_THEME","mergeMantineTheme"],"sources":["../../../../src/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.tsx"],"sourcesContent":["import { createContext, use, useMemo } from 'react';\nimport { DEFAULT_THEME } from '../default-theme';\nimport { mergeMantineTheme } from '../merge-mantine-theme';\nimport { MantineTheme, MantineThemeOverride } from '../theme.types';\n\nexport const MantineThemeContext = createContext<MantineTheme | null>(null);\n\nexport const useSafeMantineTheme = () => use(MantineThemeContext) || DEFAULT_THEME;\n\nexport function useMantineTheme() {\n const ctx = use(MantineThemeContext);\n if (!ctx) {\n throw new Error(\n '@mantine/core: MantineProvider was not found in component tree, make sure you have it in your app'\n );\n }\n\n return ctx;\n}\n\nexport interface MantineThemeProviderProps {\n /** Determines whether theme should be inherited from parent MantineProvider @default true */\n inherit?: boolean;\n\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Your application or part of the application that requires different theme */\n children?: React.ReactNode;\n}\n\nexport function MantineThemeProvider({\n theme,\n children,\n inherit = true,\n}: MantineThemeProviderProps) {\n const parentTheme = useSafeMantineTheme();\n const mergedTheme = useMemo(\n () => mergeMantineTheme(inherit ? parentTheme : DEFAULT_THEME, theme),\n [theme, parentTheme, inherit]\n );\n\n return <MantineThemeContext value={mergedTheme}>{children}</MantineThemeContext>;\n}\n\nMantineThemeProvider.displayName = '@mantine/core/MantineThemeProvider';\n"],"mappings":";;;;;;AAKA,MAAa,uBAAA,GAAA,MAAA,cAAA,CAAyD,IAAI;AAE1E,MAAa,6BAAA,GAAA,MAAA,IAAA,CAAgC,mBAAmB,KAAKA,sBAAAA;AAErE,SAAgB,kBAAkB;CAChC,MAAM,OAAA,GAAA,MAAA,IAAA,CAAU,mBAAmB;CACnC,IAAI,CAAC,KACH,MAAM,IAAI,MACR,mGACF;CAGF,OAAO;AACT;AAaA,SAAgB,qBAAqB,EACnC,OACA,UACA,UAAU,QACkB;CAC5B,MAAM,cAAc,oBAAoB;CAMxC,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAD;EAAqB,QAAA,GAAA,MAAA,QAAA,OAJpBC,4BAAAA,kBAAkB,UAAU,cAAcD,sBAAAA,eAAe,KAAK,GACpE;GAAC;GAAO;GAAa;EAAO,CAGe;EAAI;CAA8B,CAAA;AACjF;AAEA,qBAAqB,cAAc"}
1
+ {"version":3,"file":"MantineThemeProvider.cjs","names":["DEFAULT_THEME","mergeMantineTheme"],"sources":["../../../../src/core/MantineProvider/MantineThemeProvider/MantineThemeProvider.tsx"],"sourcesContent":["import { createContext, use, useMemo } from 'react';\nimport { DEFAULT_THEME } from '../default-theme';\nimport { mergeMantineTheme } from '../merge-mantine-theme';\nimport { MantineTheme, MantineThemeOverride } from '../theme.types';\n\nexport const MantineThemeContext = createContext<MantineTheme | null>(null);\n\nexport const useSafeMantineTheme = () => use(MantineThemeContext) || DEFAULT_THEME;\n\nexport function useMantineTheme() {\n const ctx = use(MantineThemeContext);\n if (!ctx) {\n throw new Error(\n '@mantine/core: MantineProvider was not found in component tree, make sure you have it in your app'\n );\n }\n\n return ctx;\n}\n\nexport interface MantineThemeProviderProps {\n /** Determines whether theme should be inherited from parent MantineProvider @default true */\n inherit?: boolean;\n\n /** Theme override object */\n theme?: MantineThemeOverride;\n\n /** Your application or part of the application that requires different theme */\n children?: React.ReactNode;\n}\n\nexport function MantineThemeProvider({\n theme,\n children,\n inherit = true,\n}: MantineThemeProviderProps) {\n const parentTheme = useSafeMantineTheme();\n const mergedTheme = useMemo(\n () => mergeMantineTheme(inherit ? parentTheme : DEFAULT_THEME, theme),\n [theme, parentTheme, inherit]\n );\n\n return <MantineThemeContext value={mergedTheme}>{children}</MantineThemeContext>;\n}\n\nMantineThemeProvider.displayName = '@mantine/core/MantineThemeProvider';\n"],"mappings":";;;;;;AAKA,MAAa,uBAAA,GAAA,MAAA,cAAA,CAAyD,IAAI;AAE1E,MAAa,6BAAA,GAAA,MAAA,IAAA,CAAgC,mBAAmB,KAAKA,sBAAAA;AAErE,SAAgB,kBAAkB;CAChC,MAAM,OAAA,GAAA,MAAA,IAAA,CAAU,mBAAmB;CACnC,IAAI,CAAC,KACH,MAAM,IAAI,MACR,mGACF;CAGF,OAAO;AACT;AAaA,SAAgB,qBAAqB,EACnC,OACA,UACA,UAAU,QACkB;CAC5B,MAAM,cAAc,oBAAoB;CACxC,MAAM,eAAA,GAAA,MAAA,QAAA,OACEC,4BAAAA,kBAAkB,UAAU,cAAcD,sBAAAA,eAAe,KAAK,GACpE;EAAC;EAAO;EAAa;CAAO,CAC9B;CAEA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAD;EAAqB,OAAO;EAAc;CAA8B,CAAA;AACjF;AAEA,qBAAqB,cAAc"}
@@ -27,6 +27,8 @@ function mergeMantineTheme(currentTheme, themeOverride) {
27
27
  return result;
28
28
  }
29
29
  //#endregion
30
+ exports.INVALID_PRIMARY_COLOR_ERROR = INVALID_PRIMARY_COLOR_ERROR;
31
+ exports.INVALID_PRIMARY_SHADE_ERROR = INVALID_PRIMARY_SHADE_ERROR;
30
32
  exports.mergeMantineTheme = mergeMantineTheme;
31
33
  exports.validateMantineTheme = validateMantineTheme;
32
34
 
@@ -23,13 +23,14 @@ function getFirstMatchingBreakpoint(matches) {
23
23
  }
24
24
  function useMatches(payload, options) {
25
25
  const theme = require_MantineThemeProvider.useMantineTheme();
26
- return getFirstMatchingValue(payload, BREAKPOINTS[getFirstMatchingBreakpoint([
26
+ const firstMatchingBreakpointIndex = getFirstMatchingBreakpoint([
27
27
  (0, _mantine_hooks.useMediaQuery)(`(min-width: ${theme.breakpoints.xs})`, false, options),
28
28
  (0, _mantine_hooks.useMediaQuery)(`(min-width: ${theme.breakpoints.sm})`, false, options),
29
29
  (0, _mantine_hooks.useMediaQuery)(`(min-width: ${theme.breakpoints.md})`, false, options),
30
30
  (0, _mantine_hooks.useMediaQuery)(`(min-width: ${theme.breakpoints.lg})`, false, options),
31
31
  (0, _mantine_hooks.useMediaQuery)(`(min-width: ${theme.breakpoints.xl})`, false, options)
32
- ])]);
32
+ ]);
33
+ return getFirstMatchingValue(payload, BREAKPOINTS[firstMatchingBreakpointIndex]);
33
34
  }
34
35
  //#endregion
35
36
  exports.useMatches = useMatches;
@@ -1 +1 @@
1
- {"version":3,"file":"use-matches.cjs","names":["useMantineTheme"],"sources":["../../../../src/core/MantineProvider/use-matches/use-matches.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '@mantine/hooks';\nimport { useMantineTheme } from '../MantineThemeProvider';\nimport { MantineBreakpoint } from '../theme.types';\n\ntype UseMatchesInput<T> = Partial<Record<MantineBreakpoint, T>>;\n\nconst BREAKPOINTS = ['xs', 'sm', 'md', 'lg', 'xl'];\n\nfunction getFirstMatchingValue<T>(\n value: UseMatchesInput<T>,\n biggestMatch: MantineBreakpoint | undefined\n): T {\n if (!biggestMatch) {\n return value.base!;\n }\n\n let index = BREAKPOINTS.indexOf(biggestMatch);\n\n while (index >= 0) {\n if (BREAKPOINTS[index] in value) {\n return value[BREAKPOINTS[index]]!;\n }\n index -= 1;\n }\n\n return value.base!;\n}\n\nfunction getFirstMatchingBreakpoint(matches: (boolean | undefined)[]) {\n return matches.findLastIndex((v) => v);\n}\n\nexport function useMatches<T>(payload: UseMatchesInput<T>, options?: UseMediaQueryOptions) {\n const theme = useMantineTheme();\n const xsMatches = useMediaQuery(`(min-width: ${theme.breakpoints.xs})`, false, options);\n const smMatches = useMediaQuery(`(min-width: ${theme.breakpoints.sm})`, false, options);\n const mdMatches = useMediaQuery(`(min-width: ${theme.breakpoints.md})`, false, options);\n const lgMatches = useMediaQuery(`(min-width: ${theme.breakpoints.lg})`, false, options);\n const xlMatches = useMediaQuery(`(min-width: ${theme.breakpoints.xl})`, false, options);\n\n const breakpoints = [xsMatches, smMatches, mdMatches, lgMatches, xlMatches];\n const firstMatchingBreakpointIndex = getFirstMatchingBreakpoint(breakpoints);\n return getFirstMatchingValue(payload, BREAKPOINTS[firstMatchingBreakpointIndex]);\n}\n"],"mappings":";;;;AAMA,MAAM,cAAc;CAAC;CAAM;CAAM;CAAM;CAAM;AAAI;AAEjD,SAAS,sBACP,OACA,cACG;CACH,IAAI,CAAC,cACH,OAAO,MAAM;CAGf,IAAI,QAAQ,YAAY,QAAQ,YAAY;CAE5C,OAAO,SAAS,GAAG;EACjB,IAAI,YAAY,UAAU,OACxB,OAAO,MAAM,YAAY;EAE3B,SAAS;CACX;CAEA,OAAO,MAAM;AACf;AAEA,SAAS,2BAA2B,SAAkC;CACpE,OAAO,QAAQ,eAAe,MAAM,CAAC;AACvC;AAEA,SAAgB,WAAc,SAA6B,SAAgC;CACzF,MAAM,QAAQA,6BAAAA,gBAAgB;CAS9B,OAAO,sBAAsB,SAAS,YADD,2BAA2B;oCAPhC,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAMlD;oCALG,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAKvC;oCAJR,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAI5B;oCAHnB,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAGjB;oCAF9B,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAEN;CACC,CACG,EAAE;AACjF"}
1
+ {"version":3,"file":"use-matches.cjs","names":["useMantineTheme"],"sources":["../../../../src/core/MantineProvider/use-matches/use-matches.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '@mantine/hooks';\nimport { useMantineTheme } from '../MantineThemeProvider';\nimport { MantineBreakpoint } from '../theme.types';\n\ntype UseMatchesInput<T> = Partial<Record<MantineBreakpoint, T>>;\n\nconst BREAKPOINTS = ['xs', 'sm', 'md', 'lg', 'xl'];\n\nfunction getFirstMatchingValue<T>(\n value: UseMatchesInput<T>,\n biggestMatch: MantineBreakpoint | undefined\n): T {\n if (!biggestMatch) {\n return value.base!;\n }\n\n let index = BREAKPOINTS.indexOf(biggestMatch);\n\n while (index >= 0) {\n if (BREAKPOINTS[index] in value) {\n return value[BREAKPOINTS[index]]!;\n }\n index -= 1;\n }\n\n return value.base!;\n}\n\nfunction getFirstMatchingBreakpoint(matches: (boolean | undefined)[]) {\n return matches.findLastIndex((v) => v);\n}\n\nexport function useMatches<T>(payload: UseMatchesInput<T>, options?: UseMediaQueryOptions) {\n const theme = useMantineTheme();\n const xsMatches = useMediaQuery(`(min-width: ${theme.breakpoints.xs})`, false, options);\n const smMatches = useMediaQuery(`(min-width: ${theme.breakpoints.sm})`, false, options);\n const mdMatches = useMediaQuery(`(min-width: ${theme.breakpoints.md})`, false, options);\n const lgMatches = useMediaQuery(`(min-width: ${theme.breakpoints.lg})`, false, options);\n const xlMatches = useMediaQuery(`(min-width: ${theme.breakpoints.xl})`, false, options);\n\n const breakpoints = [xsMatches, smMatches, mdMatches, lgMatches, xlMatches];\n const firstMatchingBreakpointIndex = getFirstMatchingBreakpoint(breakpoints);\n return getFirstMatchingValue(payload, BREAKPOINTS[firstMatchingBreakpointIndex]);\n}\n"],"mappings":";;;;AAMA,MAAM,cAAc;CAAC;CAAM;CAAM;CAAM;CAAM;AAAI;AAEjD,SAAS,sBACP,OACA,cACG;CACH,IAAI,CAAC,cACH,OAAO,MAAM;CAGf,IAAI,QAAQ,YAAY,QAAQ,YAAY;CAE5C,OAAO,SAAS,GAAG;EACjB,IAAI,YAAY,UAAU,OACxB,OAAO,MAAM,YAAY;EAE3B,SAAS;CACX;CAEA,OAAO,MAAM;AACf;AAEA,SAAS,2BAA2B,SAAkC;CACpE,OAAO,QAAQ,eAAe,MAAM,CAAC;AACvC;AAEA,SAAgB,WAAc,SAA6B,SAAgC;CACzF,MAAM,QAAQA,6BAAAA,gBAAgB;CAQ9B,MAAM,+BAA+B,2BAA2B;oCAPhC,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAMlD;oCALG,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAKvC;oCAJR,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAI5B;oCAHnB,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAGjB;oCAF9B,eAAe,MAAM,YAAY,GAAG,IAAI,OAAO,OAEN;CACC,CAAC;CAC3E,OAAO,sBAAsB,SAAS,YAAY,6BAA6B;AACjF"}
package/cjs/index.cjs CHANGED
@@ -59,11 +59,11 @@ const require_MantineThemeProvider = require("./core/MantineProvider/MantineThem
59
59
  const require_convert_css_variables = require("./core/MantineProvider/convert-css-variables/convert-css-variables.cjs");
60
60
  const require_get_css_color_variables = require("./core/MantineProvider/MantineCssVariables/get-css-color-variables.cjs");
61
61
  const require_default_css_variables_resolver = require("./core/MantineProvider/MantineCssVariables/default-css-variables-resolver.cjs");
62
+ const require_v8_css_variables_resolver = require("./core/MantineProvider/MantineCssVariables/v8-css-variables-resolver.cjs");
62
63
  const require_MantineProvider = require("./core/MantineProvider/MantineProvider.cjs");
63
64
  const require_use_props = require("./core/MantineProvider/use-props/use-props.cjs");
64
65
  const require_create_theme = require("./core/MantineProvider/create-theme/create-theme.cjs");
65
66
  const require_merge_theme_overrides = require("./core/MantineProvider/merge-theme-overrides/merge-theme-overrides.cjs");
66
- const require_v8_css_variables_resolver = require("./core/MantineProvider/MantineCssVariables/v8-css-variables-resolver.cjs");
67
67
  const require_use_matches = require("./core/MantineProvider/use-matches/use-matches.cjs");
68
68
  const require_mantine_html_props = require("./core/MantineProvider/mantine-html-props.cjs");
69
69
  const require_use_resolved_styles_api = require("./core/styles-api/use-resolved-styles-api/use-resolved-styles-api.cjs");
@@ -198,6 +198,9 @@ const require_ButtonGroupSection = require("./components/Button/ButtonGroupSecti
198
198
  const require_Button = require("./components/Button/Button.cjs");
199
199
  const require_CardSection = require("./components/Card/CardSection/CardSection.cjs");
200
200
  const require_Card = require("./components/Card/Card.cjs");
201
+ const require_flatten_cascader_paths = require("./components/Cascader/flatten-cascader-paths.cjs");
202
+ const require_get_cascader_path_options = require("./components/Cascader/get-cascader-path-options.cjs");
203
+ const require_Cascader = require("./components/Cascader/Cascader.cjs");
201
204
  const require_Center = require("./components/Center/Center.cjs");
202
205
  const require_ChipGroup = require("./components/Chip/ChipGroup/ChipGroup.cjs");
203
206
  const require_Chip = require("./components/Chip/Chip.cjs");
@@ -415,6 +418,7 @@ exports.ButtonGroup = require_ButtonGroup.ButtonGroup;
415
418
  exports.ButtonGroupSection = require_ButtonGroupSection.ButtonGroupSection;
416
419
  exports.Card = require_Card.Card;
417
420
  exports.CardSection = require_CardSection.CardSection;
421
+ exports.Cascader = require_Cascader.Cascader;
418
422
  exports.Center = require_Center.Center;
419
423
  exports.CheckIcon = require_CheckIcon.CheckIcon;
420
424
  exports.Checkbox = require_Checkbox.Checkbox;
@@ -703,6 +707,7 @@ exports.findClosestNumber = require_find_closest_number.findClosestNumber;
703
707
  exports.findElementAncestor = require_find_element_ancestor.findElementAncestor;
704
708
  exports.findElementBySelector = require_find_element_in_shadow_dom.findElementBySelector;
705
709
  exports.findElementsBySelector = require_find_element_in_shadow_dom.findElementsBySelector;
710
+ exports.flattenCascaderPaths = require_flatten_cascader_paths.flattenCascaderPaths;
706
711
  exports.flattenTreeData = require_flatten_tree_data.flattenTreeData;
707
712
  exports.genericFactory = require_factory.genericFactory;
708
713
  exports.getArrowMergeDropdownStyles = require_get_arrow_position_styles.getArrowMergeDropdownStyles;
@@ -710,6 +715,7 @@ exports.getAutoContrastValue = require_get_auto_contrast_value.getAutoContrastVa
710
715
  exports.getBaseValue = require_get_base_value.getBaseValue;
711
716
  exports.getBreakpointValue = require_get_breakpoint_value.getBreakpointValue;
712
717
  exports.getCSSColorVariables = require_get_css_color_variables.getCSSColorVariables;
718
+ exports.getCascaderPathOptions = require_get_cascader_path_options.getCascaderPathOptions;
713
719
  exports.getContextItemIndex = require_get_context_item_index.getContextItemIndex;
714
720
  exports.getContrastColor = require_get_contrast_color.getContrastColor;
715
721
  exports.getDefaultZIndex = require_get_default_z_index.getDefaultZIndex;
@@ -20,6 +20,7 @@ const defaultProps = {
20
20
  multiple: false,
21
21
  loop: true,
22
22
  disableChevronRotation: false,
23
+ disableCollapse: false,
23
24
  chevronPosition: "right",
24
25
  variant: "default",
25
26
  chevronSize: "auto",
@@ -33,7 +34,7 @@ const varsResolver = createVarsResolver((_, { transitionDuration, chevronSize, r
33
34
  } }));
34
35
  const Accordion = genericFactory((_props) => {
35
36
  const props = useProps("Accordion", defaultProps, _props);
36
- const { classNames, className, style, styles, unstyled, vars, children, multiple, value, defaultValue, onChange, id, loop, transitionDuration, disableChevronRotation, chevronPosition, chevronSize, order, chevron, variant, radius, chevronIconSize, attributes, keepMounted, keepMountedMode, ...others } = props;
37
+ const { classNames, className, style, styles, unstyled, vars, children, multiple, value, defaultValue, onChange, id, loop, transitionDuration, disableChevronRotation, disableCollapse, chevronPosition, chevronSize, order, chevron, variant, radius, chevronIconSize, attributes, keepMounted, keepMountedMode, ...others } = props;
37
38
  const uid = useId(id);
38
39
  const [_value, handleChange] = useUncontrolled({
39
40
  value,
@@ -43,7 +44,9 @@ const Accordion = genericFactory((_props) => {
43
44
  });
44
45
  const isItemActive = (itemValue) => Array.isArray(_value) ? _value.includes(itemValue) : itemValue === _value;
45
46
  const handleItemChange = (itemValue) => {
46
- handleChange(Array.isArray(_value) ? _value.includes(itemValue) ? _value.filter((selectedValue) => selectedValue !== itemValue) : [..._value, itemValue] : itemValue === _value ? null : itemValue);
47
+ if (!Array.isArray(_value) && disableCollapse && itemValue === _value) return;
48
+ const nextValue = Array.isArray(_value) ? _value.includes(itemValue) ? _value.filter((selectedValue) => selectedValue !== itemValue) : [..._value, itemValue] : itemValue === _value ? null : itemValue;
49
+ handleChange(nextValue);
47
50
  };
48
51
  const getStyles = useStyles({
49
52
  name: "Accordion",
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.mjs","names":["classes"],"sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { useId, useUncontrolled } from '@mantine/hooks';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n Factory,\n genericFactory,\n getRadius,\n getSafeId,\n MantineRadius,\n rem,\n StylesApiProps,\n useProps,\n useStyles,\n} from '../../core';\nimport { AccordionProvider } from './Accordion.context';\nimport { AccordionChevronPosition, AccordionHeadingOrder, AccordionValue } from './Accordion.types';\nimport { AccordionChevron } from './AccordionChevron';\nimport { AccordionControl, type AccordionControlProps } from './AccordionControl/AccordionControl';\nimport { AccordionItem, type AccordionItemProps } from './AccordionItem/AccordionItem';\nimport { AccordionPanel, type AccordionPanelProps } from './AccordionPanel/AccordionPanel';\nimport classes from './Accordion.module.css';\nimport type { AccordionItemContextValue } from './AccordionItem.context';\nexport type AccordionStylesNames =\n | 'root'\n | 'content'\n | 'item'\n | 'panel'\n | 'icon'\n | 'chevron'\n | 'label'\n | 'itemTitle'\n | 'control';\n\nexport type AccordionVariant = 'default' | 'contained' | 'filled' | 'separated';\nexport type AccordionCssVariables = {\n root: '--accordion-transition-duration' | '--accordion-chevron-size' | '--accordion-radius';\n};\n\nexport interface AccordionProps<Multiple extends boolean = false>\n extends\n BoxProps,\n StylesApiProps<AccordionFactory>,\n ElementProps<'div', 'value' | 'defaultValue' | 'onChange'> {\n /** If set, multiple items can be opened at the same time @default false */\n multiple?: Multiple;\n\n /** Controlled component value */\n value?: AccordionValue<Multiple>;\n\n /** Uncontrolled component default value */\n defaultValue?: AccordionValue<Multiple>;\n\n /** Called when value changes, payload type depends on `multiple` prop */\n onChange?: (value: AccordionValue<Multiple>) => void;\n\n /** If set, arrow keys loop through items (first to last and last to first) @default true */\n loop?: boolean;\n\n /** Transition duration in ms @default 200 */\n transitionDuration?: number;\n\n /** If set, chevron rotation is disabled @default false */\n disableChevronRotation?: boolean;\n\n /** Position of the chevron relative to the item label @default right */\n chevronPosition?: AccordionChevronPosition;\n\n /** Size of the chevron icon container @default auto */\n chevronSize?: number | string;\n\n /** Size of the default chevron icon. Ignored when `chevron` prop is set. Use `chevronSize` instead when using custom chevron. @default 16 */\n chevronIconSize?: number | string;\n\n /** Sets heading level (h2-h6) for `Accordion.Control` elements. Wraps each control in the corresponding heading tag, recommended to meet WAI-ARIA accessibility requirements. Has no visual effect. */\n order?: AccordionHeadingOrder;\n\n /** Custom chevron icon */\n chevron?: React.ReactNode;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius. Numbers are converted to rem. @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set to `false`, panels are unmounted when collapsed. By default, panels stay mounted when collapsed. @default true */\n keepMounted?: boolean;\n\n /** Controls how inactive panels content is hidden when `keepMounted` is `true`, `'activity'` – hidden with `Activity` component, `'display-none'` – hidden with `display: none` styles @default 'activity' */\n keepMountedMode?: 'activity' | 'display-none';\n}\n\nexport type AccordionFactory = Factory<{\n props: AccordionProps;\n ref: HTMLDivElement;\n stylesNames: AccordionStylesNames;\n vars: AccordionCssVariables;\n variant: AccordionVariant;\n signature: <Multiple extends boolean = false>(\n props: AccordionProps<Multiple>\n ) => React.JSX.Element;\n staticComponents: {\n Item: typeof AccordionItem;\n Panel: typeof AccordionPanel;\n Control: typeof AccordionControl;\n Chevron: typeof AccordionChevron;\n };\n}>;\n\nconst defaultProps = {\n multiple: false,\n loop: true,\n disableChevronRotation: false,\n chevronPosition: 'right',\n variant: 'default',\n chevronSize: 'auto',\n chevronIconSize: 16,\n keepMountedMode: 'activity',\n} satisfies Partial<AccordionProps>;\n\nconst varsResolver = createVarsResolver<AccordionFactory>(\n (_, { transitionDuration, chevronSize, radius }) => ({\n root: {\n '--accordion-transition-duration':\n transitionDuration === undefined ? undefined : `${transitionDuration}ms`,\n '--accordion-chevron-size': chevronSize === undefined ? undefined : rem(chevronSize),\n '--accordion-radius': radius === undefined ? undefined : getRadius(radius),\n },\n })\n);\n\nexport const Accordion = genericFactory<AccordionFactory>((_props) => {\n const props = useProps('Accordion', defaultProps as any, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n children,\n multiple,\n value,\n defaultValue,\n onChange,\n id,\n loop,\n transitionDuration,\n disableChevronRotation,\n chevronPosition,\n chevronSize,\n order,\n chevron,\n variant,\n radius,\n chevronIconSize,\n attributes,\n keepMounted,\n keepMountedMode,\n ...others\n } = props;\n\n const uid = useId(id);\n const [_value, handleChange] = useUncontrolled({\n value,\n defaultValue,\n finalValue: multiple ? ([] as any) : null,\n onChange,\n });\n\n const isItemActive = (itemValue: string) =>\n Array.isArray(_value) ? _value.includes(itemValue) : itemValue === _value;\n\n const handleItemChange = (itemValue: string) => {\n const nextValue = Array.isArray(_value)\n ? _value.includes(itemValue)\n ? _value.filter((selectedValue) => selectedValue !== itemValue)\n : [..._value, itemValue]\n : itemValue === _value\n ? null\n : (itemValue as any);\n\n handleChange(nextValue);\n };\n\n const getStyles = useStyles<AccordionFactory>({\n name: 'Accordion',\n classes,\n props: props as AccordionProps,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n return (\n <AccordionProvider\n value={{\n isItemActive,\n onChange: handleItemChange,\n getControlId: getSafeId(\n `${uid}-control`,\n 'Accordion.Item component was rendered with invalid value or without value'\n ),\n getRegionId: getSafeId(\n `${uid}-panel`,\n 'Accordion.Item component was rendered with invalid value or without value'\n ),\n chevron: chevron === null ? null : chevron || <AccordionChevron size={chevronIconSize} />,\n transitionDuration,\n disableChevronRotation,\n chevronPosition,\n order,\n loop,\n getStyles,\n variant,\n unstyled,\n keepMounted,\n keepMountedMode,\n }}\n >\n <Box {...getStyles('root')} id={uid} {...others} variant={variant} data-accordion>\n {children}\n </Box>\n </AccordionProvider>\n );\n});\n\nAccordion.classes = classes;\nAccordion.varsResolver = varsResolver;\nAccordion.displayName = '@mantine/core/Accordion';\nAccordion.Item = AccordionItem;\nAccordion.Panel = AccordionPanel;\nAccordion.Control = AccordionControl;\nAccordion.Chevron = AccordionChevron;\n\nexport namespace Accordion {\n export type Props = AccordionProps;\n export type StylesNames = AccordionStylesNames;\n export type CssVariables = AccordionCssVariables;\n export type Factory = AccordionFactory;\n export type Variant = AccordionVariant;\n\n export namespace Control {\n export type Props = AccordionControlProps;\n }\n\n export namespace Item {\n export type Props = AccordionItemProps;\n export type Context = AccordionItemContextValue;\n }\n\n export namespace Panel {\n export type Props = AccordionPanelProps;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4GA,MAAM,eAAe;CACnB,UAAU;CACV,MAAM;CACN,wBAAwB;CACxB,iBAAiB;CACjB,SAAS;CACT,aAAa;CACb,iBAAiB;CACjB,iBAAiB;AACnB;AAEA,MAAM,eAAe,oBAClB,GAAG,EAAE,oBAAoB,aAAa,cAAc,EACnD,MAAM;CACJ,mCACE,uBAAuB,KAAA,IAAY,KAAA,IAAY,GAAG,mBAAmB;CACvE,4BAA4B,gBAAgB,KAAA,IAAY,KAAA,IAAY,IAAI,WAAW;CACnF,sBAAsB,WAAW,KAAA,IAAY,KAAA,IAAY,UAAU,MAAM;AAC3E,EACF,EACF;AAEA,MAAa,YAAY,gBAAkC,WAAW;CACpE,MAAM,QAAQ,SAAS,aAAa,cAAqB,MAAM;CAC/D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,UACA,UACA,OACA,cACA,UACA,IACA,MACA,oBACA,wBACA,iBACA,aACA,OACA,SACA,SACA,QACA,iBACA,YACA,aACA,iBACA,GAAG,WACD;CAEJ,MAAM,MAAM,MAAM,EAAE;CACpB,MAAM,CAAC,QAAQ,gBAAgB,gBAAgB;EAC7C;EACA;EACA,YAAY,WAAY,CAAC,IAAY;EACrC;CACF,CAAC;CAED,MAAM,gBAAgB,cACpB,MAAM,QAAQ,MAAM,IAAI,OAAO,SAAS,SAAS,IAAI,cAAc;CAErE,MAAM,oBAAoB,cAAsB;EAS9C,aARkB,MAAM,QAAQ,MAAM,IAClC,OAAO,SAAS,SAAS,IACvB,OAAO,QAAQ,kBAAkB,kBAAkB,SAAS,IAC5D,CAAC,GAAG,QAAQ,SAAS,IACvB,cAAc,SACZ,OACC,SAEe;CACxB;CAEA,MAAM,YAAY,UAA4B;EAC5C,MAAM;EACN,SAAA;EACO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,OACE,oBAAC,mBAAD;EACE,OAAO;GACL;GACA,UAAU;GACV,cAAc,UACZ,GAAG,IAAI,WACP,2EACF;GACA,aAAa,UACX,GAAG,IAAI,SACP,2EACF;GACA,SAAS,YAAY,OAAO,OAAO,WAAW,oBAAC,kBAAD,EAAkB,MAAM,gBAAkB,CAAA;GACxF;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;YAEA,oBAAC,KAAD;GAAK,GAAI,UAAU,MAAM;GAAG,IAAI;GAAK,GAAI;GAAiB;GAAS,kBAAA;GAChE;EACE,CAAA;CACY,CAAA;AAEvB,CAAC;AAED,UAAU,UAAUA;AACpB,UAAU,eAAe;AACzB,UAAU,cAAc;AACxB,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB,UAAU,UAAU;AACpB,UAAU,UAAU"}
1
+ {"version":3,"file":"Accordion.mjs","names":["classes"],"sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import { useId, useUncontrolled } from '@mantine/hooks';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n Factory,\n genericFactory,\n getRadius,\n getSafeId,\n MantineRadius,\n rem,\n StylesApiProps,\n useProps,\n useStyles,\n} from '../../core';\nimport { AccordionProvider } from './Accordion.context';\nimport { AccordionChevronPosition, AccordionHeadingOrder, AccordionValue } from './Accordion.types';\nimport { AccordionChevron } from './AccordionChevron';\nimport { AccordionControl, type AccordionControlProps } from './AccordionControl/AccordionControl';\nimport { AccordionItem, type AccordionItemProps } from './AccordionItem/AccordionItem';\nimport { AccordionPanel, type AccordionPanelProps } from './AccordionPanel/AccordionPanel';\nimport classes from './Accordion.module.css';\nimport type { AccordionItemContextValue } from './AccordionItem.context';\nexport type AccordionStylesNames =\n | 'root'\n | 'content'\n | 'item'\n | 'panel'\n | 'icon'\n | 'chevron'\n | 'label'\n | 'itemTitle'\n | 'control';\n\nexport type AccordionVariant = 'default' | 'contained' | 'filled' | 'separated';\nexport type AccordionCssVariables = {\n root: '--accordion-transition-duration' | '--accordion-chevron-size' | '--accordion-radius';\n};\n\nexport interface AccordionProps<Multiple extends boolean = false>\n extends\n BoxProps,\n StylesApiProps<AccordionFactory>,\n ElementProps<'div', 'value' | 'defaultValue' | 'onChange'> {\n /** If set, multiple items can be opened at the same time @default false */\n multiple?: Multiple;\n\n /** Controlled component value */\n value?: AccordionValue<Multiple>;\n\n /** Uncontrolled component default value */\n defaultValue?: AccordionValue<Multiple>;\n\n /** Called when value changes, payload type depends on `multiple` prop */\n onChange?: (value: AccordionValue<Multiple>) => void;\n\n /** If set, arrow keys loop through items (first to last and last to first) @default true */\n loop?: boolean;\n\n /** Transition duration in ms @default 200 */\n transitionDuration?: number;\n\n /** If set, chevron rotation is disabled @default false */\n disableChevronRotation?: boolean;\n\n /** If set, the open item cannot be collapsed by clicking it again, so one item always stays open. Only applies when `multiple` is `false`. @default false */\n disableCollapse?: boolean;\n\n /** Position of the chevron relative to the item label @default right */\n chevronPosition?: AccordionChevronPosition;\n\n /** Size of the chevron icon container @default auto */\n chevronSize?: number | string;\n\n /** Size of the default chevron icon. Ignored when `chevron` prop is set. Use `chevronSize` instead when using custom chevron. @default 16 */\n chevronIconSize?: number | string;\n\n /** Sets heading level (h2-h6) for `Accordion.Control` elements. Wraps each control in the corresponding heading tag, recommended to meet WAI-ARIA accessibility requirements. Has no visual effect. */\n order?: AccordionHeadingOrder;\n\n /** Custom chevron icon */\n chevron?: React.ReactNode;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius. Numbers are converted to rem. @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set to `false`, panels are unmounted when collapsed. By default, panels stay mounted when collapsed. @default true */\n keepMounted?: boolean;\n\n /** Controls how inactive panels content is hidden when `keepMounted` is `true`, `'activity'` – hidden with `Activity` component, `'display-none'` – hidden with `display: none` styles @default 'activity' */\n keepMountedMode?: 'activity' | 'display-none';\n}\n\nexport type AccordionFactory = Factory<{\n props: AccordionProps;\n ref: HTMLDivElement;\n stylesNames: AccordionStylesNames;\n vars: AccordionCssVariables;\n variant: AccordionVariant;\n signature: <Multiple extends boolean = false>(\n props: AccordionProps<Multiple>\n ) => React.JSX.Element;\n staticComponents: {\n Item: typeof AccordionItem;\n Panel: typeof AccordionPanel;\n Control: typeof AccordionControl;\n Chevron: typeof AccordionChevron;\n };\n}>;\n\nconst defaultProps = {\n multiple: false,\n loop: true,\n disableChevronRotation: false,\n disableCollapse: false,\n chevronPosition: 'right',\n variant: 'default',\n chevronSize: 'auto',\n chevronIconSize: 16,\n keepMountedMode: 'activity',\n} satisfies Partial<AccordionProps>;\n\nconst varsResolver = createVarsResolver<AccordionFactory>(\n (_, { transitionDuration, chevronSize, radius }) => ({\n root: {\n '--accordion-transition-duration':\n transitionDuration === undefined ? undefined : `${transitionDuration}ms`,\n '--accordion-chevron-size': chevronSize === undefined ? undefined : rem(chevronSize),\n '--accordion-radius': radius === undefined ? undefined : getRadius(radius),\n },\n })\n);\n\nexport const Accordion = genericFactory<AccordionFactory>((_props) => {\n const props = useProps('Accordion', defaultProps as any, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n children,\n multiple,\n value,\n defaultValue,\n onChange,\n id,\n loop,\n transitionDuration,\n disableChevronRotation,\n disableCollapse,\n chevronPosition,\n chevronSize,\n order,\n chevron,\n variant,\n radius,\n chevronIconSize,\n attributes,\n keepMounted,\n keepMountedMode,\n ...others\n } = props;\n\n const uid = useId(id);\n const [_value, handleChange] = useUncontrolled({\n value,\n defaultValue,\n finalValue: multiple ? ([] as any) : null,\n onChange,\n });\n\n const isItemActive = (itemValue: string) =>\n Array.isArray(_value) ? _value.includes(itemValue) : itemValue === _value;\n\n const handleItemChange = (itemValue: string) => {\n if (!Array.isArray(_value) && disableCollapse && itemValue === _value) {\n return;\n }\n\n const nextValue = Array.isArray(_value)\n ? _value.includes(itemValue)\n ? _value.filter((selectedValue) => selectedValue !== itemValue)\n : [..._value, itemValue]\n : itemValue === _value\n ? null\n : (itemValue as any);\n\n handleChange(nextValue);\n };\n\n const getStyles = useStyles<AccordionFactory>({\n name: 'Accordion',\n classes,\n props: props as AccordionProps,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n });\n\n return (\n <AccordionProvider\n value={{\n isItemActive,\n onChange: handleItemChange,\n getControlId: getSafeId(\n `${uid}-control`,\n 'Accordion.Item component was rendered with invalid value or without value'\n ),\n getRegionId: getSafeId(\n `${uid}-panel`,\n 'Accordion.Item component was rendered with invalid value or without value'\n ),\n chevron: chevron === null ? null : chevron || <AccordionChevron size={chevronIconSize} />,\n transitionDuration,\n disableChevronRotation,\n chevronPosition,\n order,\n loop,\n getStyles,\n variant,\n unstyled,\n keepMounted,\n keepMountedMode,\n }}\n >\n <Box {...getStyles('root')} id={uid} {...others} variant={variant} data-accordion>\n {children}\n </Box>\n </AccordionProvider>\n );\n});\n\nAccordion.classes = classes;\nAccordion.varsResolver = varsResolver;\nAccordion.displayName = '@mantine/core/Accordion';\nAccordion.Item = AccordionItem;\nAccordion.Panel = AccordionPanel;\nAccordion.Control = AccordionControl;\nAccordion.Chevron = AccordionChevron;\n\nexport namespace Accordion {\n export type Props = AccordionProps;\n export type StylesNames = AccordionStylesNames;\n export type CssVariables = AccordionCssVariables;\n export type Factory = AccordionFactory;\n export type Variant = AccordionVariant;\n\n export namespace Control {\n export type Props = AccordionControlProps;\n }\n\n export namespace Item {\n export type Props = AccordionItemProps;\n export type Context = AccordionItemContextValue;\n }\n\n export namespace Panel {\n export type Props = AccordionPanelProps;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA+GA,MAAM,eAAe;CACnB,UAAU;CACV,MAAM;CACN,wBAAwB;CACxB,iBAAiB;CACjB,iBAAiB;CACjB,SAAS;CACT,aAAa;CACb,iBAAiB;CACjB,iBAAiB;AACnB;AAEA,MAAM,eAAe,oBAClB,GAAG,EAAE,oBAAoB,aAAa,cAAc,EACnD,MAAM;CACJ,mCACE,uBAAuB,KAAA,IAAY,KAAA,IAAY,GAAG,mBAAmB;CACvE,4BAA4B,gBAAgB,KAAA,IAAY,KAAA,IAAY,IAAI,WAAW;CACnF,sBAAsB,WAAW,KAAA,IAAY,KAAA,IAAY,UAAU,MAAM;AAC3E,EACF,EACF;AAEA,MAAa,YAAY,gBAAkC,WAAW;CACpE,MAAM,QAAQ,SAAS,aAAa,cAAqB,MAAM;CAC/D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,UACA,UACA,OACA,cACA,UACA,IACA,MACA,oBACA,wBACA,iBACA,iBACA,aACA,OACA,SACA,SACA,QACA,iBACA,YACA,aACA,iBACA,GAAG,WACD;CAEJ,MAAM,MAAM,MAAM,EAAE;CACpB,MAAM,CAAC,QAAQ,gBAAgB,gBAAgB;EAC7C;EACA;EACA,YAAY,WAAY,CAAC,IAAY;EACrC;CACF,CAAC;CAED,MAAM,gBAAgB,cACpB,MAAM,QAAQ,MAAM,IAAI,OAAO,SAAS,SAAS,IAAI,cAAc;CAErE,MAAM,oBAAoB,cAAsB;EAC9C,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,mBAAmB,cAAc,QAC7D;EAGF,MAAM,YAAY,MAAM,QAAQ,MAAM,IAClC,OAAO,SAAS,SAAS,IACvB,OAAO,QAAQ,kBAAkB,kBAAkB,SAAS,IAC5D,CAAC,GAAG,QAAQ,SAAS,IACvB,cAAc,SACZ,OACC;EAEP,aAAa,SAAS;CACxB;CAEA,MAAM,YAAY,UAA4B;EAC5C,MAAM;EACN,SAAA;EACO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,OACE,oBAAC,mBAAD;EACE,OAAO;GACL;GACA,UAAU;GACV,cAAc,UACZ,GAAG,IAAI,WACP,2EACF;GACA,aAAa,UACX,GAAG,IAAI,SACP,2EACF;GACA,SAAS,YAAY,OAAO,OAAO,WAAW,oBAAC,kBAAD,EAAkB,MAAM,gBAAkB,CAAA;GACxF;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;YAEA,oBAAC,KAAD;GAAK,GAAI,UAAU,MAAM;GAAG,IAAI;GAAK,GAAI;GAAiB;GAAS,kBAAA;GAChE;EACE,CAAA;CACY,CAAA;AAEvB,CAAC;AAED,UAAU,UAAUA;AACpB,UAAU,eAAe;AACzB,UAAU,cAAc;AACxB,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB,UAAU,UAAU;AACpB,UAAU,UAAU"}
@@ -30,7 +30,10 @@ const AngleSlider = factory((_props) => {
30
30
  onChange
31
31
  });
32
32
  const update = (val) => {
33
- if (rootRef.current && !disabled) setValue(restrictToMarks && Array.isArray(marks) ? findClosestNumber(val, marks.map((mark) => mark.value)) : val);
33
+ if (rootRef.current && !disabled) {
34
+ const newValue = restrictToMarks && Array.isArray(marks) ? findClosestNumber(val, marks.map((mark) => mark.value)) : val;
35
+ setValue(newValue);
36
+ }
34
37
  };
35
38
  const { ref: radialMoveRef } = useRadialMove(update, {
36
39
  step,