@hitachivantara/uikit-react-core 5.66.6 → 5.66.8

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 (70) hide show
  1. package/dist/cjs/BaseDropdown/BaseDropdown.cjs +259 -241
  2. package/dist/cjs/BaseDropdown/BaseDropdownContext/BaseDropdownContext.cjs +6 -3
  3. package/dist/cjs/Button/Button.cjs +10 -2
  4. package/dist/cjs/Button/Button.styles.cjs +1 -1
  5. package/dist/cjs/Calendar/SingleCalendar/SingleCalendar.styles.cjs +0 -1
  6. package/dist/cjs/ColorPicker/ColorPicker.styles.cjs +2 -1
  7. package/dist/cjs/DropDownMenu/DropDownMenu.cjs +22 -5
  8. package/dist/cjs/DropDownMenu/DropDownMenu.styles.cjs +3 -1
  9. package/dist/cjs/Dropdown/List/List.cjs +2 -2
  10. package/dist/cjs/InlineEditor/InlineEditor.cjs +1 -1
  11. package/dist/cjs/MultiButton/MultiButton.styles.cjs +1 -6
  12. package/dist/cjs/TagsInput/TagsInput.cjs +1 -1
  13. package/dist/cjs/TimePicker/TimePicker.styles.cjs +0 -1
  14. package/dist/cjs/TreeView/TreeItem/TreeItem.cjs +2 -2
  15. package/dist/cjs/TreeView/TreeItem/TreeItem.styles.cjs +5 -3
  16. package/dist/cjs/TreeView/TreeItem/useHvTreeItem.cjs +23 -0
  17. package/dist/cjs/TreeView/internals/DescendantProvider.cjs +12 -16
  18. package/dist/cjs/VerticalNavigation/TreeView/TreeView.cjs +17 -24
  19. package/dist/cjs/VerticalNavigation/TreeView/TreeViewItem.cjs +4 -4
  20. package/dist/esm/BaseDropdown/BaseDropdown.js +261 -243
  21. package/dist/esm/BaseDropdown/BaseDropdown.js.map +1 -1
  22. package/dist/esm/BaseDropdown/BaseDropdownContext/BaseDropdownContext.js +8 -3
  23. package/dist/esm/BaseDropdown/BaseDropdownContext/BaseDropdownContext.js.map +1 -1
  24. package/dist/esm/Button/Button.js +11 -3
  25. package/dist/esm/Button/Button.js.map +1 -1
  26. package/dist/esm/Button/Button.styles.js +1 -1
  27. package/dist/esm/Button/Button.styles.js.map +1 -1
  28. package/dist/esm/Calendar/SingleCalendar/SingleCalendar.styles.js +0 -1
  29. package/dist/esm/Calendar/SingleCalendar/SingleCalendar.styles.js.map +1 -1
  30. package/dist/esm/CheckBox/CheckBox.js.map +1 -1
  31. package/dist/esm/CheckBoxGroup/CheckBoxGroup.js.map +1 -1
  32. package/dist/esm/ColorPicker/ColorPicker.styles.js +2 -1
  33. package/dist/esm/ColorPicker/ColorPicker.styles.js.map +1 -1
  34. package/dist/esm/DatePicker/DatePicker.js.map +1 -1
  35. package/dist/esm/DropDownMenu/DropDownMenu.js +23 -6
  36. package/dist/esm/DropDownMenu/DropDownMenu.js.map +1 -1
  37. package/dist/esm/DropDownMenu/DropDownMenu.styles.js +3 -1
  38. package/dist/esm/DropDownMenu/DropDownMenu.styles.js.map +1 -1
  39. package/dist/esm/Dropdown/Dropdown.js.map +1 -1
  40. package/dist/esm/Dropdown/List/List.js +3 -3
  41. package/dist/esm/Dropdown/List/List.js.map +1 -1
  42. package/dist/esm/InlineEditor/InlineEditor.js +1 -1
  43. package/dist/esm/InlineEditor/InlineEditor.js.map +1 -1
  44. package/dist/esm/MultiButton/MultiButton.styles.js +1 -6
  45. package/dist/esm/MultiButton/MultiButton.styles.js.map +1 -1
  46. package/dist/esm/SelectionList/SelectionList.js.map +1 -1
  47. package/dist/esm/Switch/Switch.js.map +1 -1
  48. package/dist/esm/TagsInput/TagsInput.js +1 -1
  49. package/dist/esm/TagsInput/TagsInput.js.map +1 -1
  50. package/dist/esm/TimePicker/TimePicker.js.map +1 -1
  51. package/dist/esm/TimePicker/TimePicker.styles.js +0 -1
  52. package/dist/esm/TimePicker/TimePicker.styles.js.map +1 -1
  53. package/dist/esm/TreeView/TreeItem/TreeItem.js +2 -2
  54. package/dist/esm/TreeView/TreeItem/TreeItem.js.map +1 -1
  55. package/dist/esm/TreeView/TreeItem/TreeItem.styles.js +5 -3
  56. package/dist/esm/TreeView/TreeItem/TreeItem.styles.js.map +1 -1
  57. package/dist/esm/TreeView/TreeItem/useHvTreeItem.js +4 -0
  58. package/dist/esm/TreeView/TreeItem/useHvTreeItem.js.map +1 -1
  59. package/dist/esm/TreeView/internals/DescendantProvider.js +12 -16
  60. package/dist/esm/TreeView/internals/DescendantProvider.js.map +1 -1
  61. package/dist/esm/VerticalNavigation/TreeView/TreeView.js +16 -23
  62. package/dist/esm/VerticalNavigation/TreeView/TreeView.js.map +1 -1
  63. package/dist/esm/VerticalNavigation/TreeView/TreeViewItem.js +2 -2
  64. package/dist/esm/VerticalNavigation/TreeView/TreeViewItem.js.map +1 -1
  65. package/dist/esm/hooks/useControlled.js.map +1 -1
  66. package/dist/types/index.d.ts +15 -11
  67. package/package.json +6 -6
  68. package/dist/cjs/VerticalNavigation/TreeView/descendants.cjs +0 -125
  69. package/dist/esm/VerticalNavigation/TreeView/descendants.js +0 -125
  70. package/dist/esm/VerticalNavigation/TreeView/descendants.js.map +0 -1
@@ -3,7 +3,7 @@ import { forwardRef, useRef, useState, useCallback, useMemo } from "react";
3
3
  import { useControlled } from "../../hooks/useControlled.js";
4
4
  import { useForkRef } from "../../hooks/useForkRef.js";
5
5
  import { useUniqueId } from "../../hooks/useUniqueId.js";
6
- import { DescendantProvider } from "./descendants.js";
6
+ import { DescendantProvider } from "../../TreeView/internals/DescendantProvider.js";
7
7
  import { useClasses } from "./TreeView.styles.js";
8
8
  import { staticClasses } from "./TreeView.styles.js";
9
9
  import { TreeViewControlContext, TreeViewStateContext } from "./TreeViewContext.js";
@@ -11,12 +11,7 @@ function isPrintableCharacter(string) {
11
11
  return string && string.length === 1 && string.match(/\S/);
12
12
  }
13
13
  function findNextFirstChar(firstChars, startIndex, char) {
14
- for (let i = startIndex; i < firstChars.length; i += 1) {
15
- if (char === firstChars[i]) {
16
- return i;
17
- }
18
- }
19
- return -1;
14
+ return firstChars.slice(startIndex).findIndex((c) => c === char);
20
15
  }
21
16
  function noopSelection() {
22
17
  return false;
@@ -100,7 +95,9 @@ const HvVerticalNavigationTreeView = forwardRef(
100
95
  const isChildSelected = useCallback(
101
96
  // the second part of the condition is to ensure that the id we're
102
97
  // looking at is actually of a child (ie, there's at least one "-")
103
- (id) => selected.startsWith(id) && selected.includes("-"),
98
+ (id) => {
99
+ return Array().concat(selected).some((s) => s.startsWith(id) && s.includes("-"));
100
+ },
104
101
  [selected]
105
102
  );
106
103
  const getChildrenIds = (id) => Object.keys(nodeMap.current).map((key) => {
@@ -258,12 +255,9 @@ const HvVerticalNavigationTreeView = forwardRef(
258
255
  };
259
256
  const toggleExpansion = useCallback(
260
257
  (event, value = focusedNodeId) => {
261
- let newExpanded;
262
- if (expanded.indexOf(value) !== -1) {
263
- newExpanded = expanded.filter((id) => id !== value);
264
- } else {
265
- newExpanded = [value].concat(expanded);
266
- }
258
+ if (!value)
259
+ return;
260
+ const newExpanded = expanded.includes(value) ? expanded.filter((id) => id !== value) : [value].concat(expanded);
267
261
  if (onToggle) {
268
262
  onToggle(event, newExpanded);
269
263
  }
@@ -293,7 +287,7 @@ const HvVerticalNavigationTreeView = forwardRef(
293
287
  };
294
288
  const handleRangeArrowSelect = useCallback(
295
289
  (event, nodes) => {
296
- let base = selected.slice();
290
+ let base = Array().concat(selected);
297
291
  const { start, next, current } = nodes;
298
292
  if (!next || !current) {
299
293
  return;
@@ -328,11 +322,11 @@ const HvVerticalNavigationTreeView = forwardRef(
328
322
  );
329
323
  const handleRangeSelect = useCallback(
330
324
  (event, nodes) => {
331
- let base = selected.slice();
325
+ let base = Array().concat(selected);
332
326
  const { start, end } = nodes;
333
327
  if (lastSelectionWasRange.current) {
334
328
  base = base.filter(
335
- (id) => currentRangeSelection.current.indexOf(id) === -1
329
+ (id) => !currentRangeSelection.current.includes(id)
336
330
  );
337
331
  }
338
332
  let range = getNodesInRange(start, end);
@@ -355,12 +349,7 @@ const HvVerticalNavigationTreeView = forwardRef(
355
349
  );
356
350
  const handleMultipleSelect = useCallback(
357
351
  (event, value) => {
358
- let newSelected;
359
- if (selected.indexOf(value) !== -1) {
360
- newSelected = selected.filter((id) => id !== value);
361
- } else {
362
- newSelected = [value].concat(selected);
363
- }
352
+ const newSelected = selected.includes(value) ? selected.filter((id) => id !== value) : [value].concat(selected);
364
353
  if (onChange) {
365
354
  onChange(
366
355
  event,
@@ -503,6 +492,8 @@ const HvVerticalNavigationTreeView = forwardRef(
503
492
  firstCharMap.current = newMap;
504
493
  }, []);
505
494
  const handleNextArrow = (event) => {
495
+ if (!focusedNodeId)
496
+ return false;
506
497
  if (isExpandable(focusedNodeId)) {
507
498
  if (isExpanded(focusedNodeId)) {
508
499
  focusNextNode(event, focusedNodeId);
@@ -513,6 +504,8 @@ const HvVerticalNavigationTreeView = forwardRef(
513
504
  return true;
514
505
  };
515
506
  const handlePreviousArrow = (event) => {
507
+ if (!focusedNodeId)
508
+ return false;
516
509
  if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {
517
510
  toggleExpansion(event, focusedNodeId);
518
511
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeView.js","sources":["../../../../src/VerticalNavigation/TreeView/TreeView.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { useControlled } from \"../../hooks/useControlled\";\nimport { useForkRef } from \"../../hooks/useForkRef\";\nimport { useUniqueId } from \"../../hooks/useUniqueId\";\nimport { ExtractNames } from \"../../utils/classes\";\nimport { DescendantProvider } from \"./descendants\";\nimport { staticClasses, useClasses } from \"./TreeView.styles\";\nimport {\n NavigationMode,\n TreeViewControlContext,\n TreeViewStateContext,\n} from \"./TreeViewContext\";\n\nexport { staticClasses as treeViewClasses };\n\nexport type HvVerticalNavigationTreeViewClasses = ExtractNames<\n typeof useClasses\n>;\n\nexport interface HvVerticalNavigationTreeViewProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationTreeViewClasses;\n /**\n * Modus operandi (role) of the widget instance.\n */\n mode?: NavigationMode;\n /**\n * Enables selection.\n * @default false\n */\n selectable?: boolean;\n /**\n * Enables the simultaneous selection of multiple items.\n * @default false\n */\n multiSelect?: boolean;\n /**\n * The selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n */\n selected?: string[] | string;\n /**\n * When uncontrolled, defines the initial selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n * @default []\n */\n defaultSelected?: string[] | string;\n /**\n * Can non-leaf nodes be collapsed / expanded.\n */\n collapsible?: boolean;\n /**\n * Callback fired when a tree item is selected.\n *\n * @param {object} event The event source of the callback.\n * @param {string} nodeId The id of the selected node.\n */\n onChange?: any;\n /**\n * Expanded nodes' ids.\n */\n expanded?: string[];\n /**\n * When uncontrolled, defines the initial expanded nodes' ids.\n * @default []\n */\n defaultExpanded?: string[];\n /**\n * Callback fired when tree items are expanded/collapsed.\n *\n * @param {object} event The event source of the callback.\n * @param {array} nodeIds The ids of the expanded nodes (old and new).\n */\n onToggle?: (event, nodeIds) => void;\n /**\n * If `true`, will allow focus on disabled items.\n * @default false\n */\n disabledItemsFocusable?: boolean;\n /**\n * @ignore\n */\n onFocus?: (event: React.FocusEvent<any>) => void;\n /**\n * @ignore\n */\n onBlur?: (event: any) => void;\n /**\n * @ignore\n */\n onKeyDown?: (event: KeyboardEvent) => void;\n /**\n * The content of the component.\n */\n children?: React.ReactNode;\n}\n\nfunction isPrintableCharacter(string) {\n return string && string.length === 1 && string.match(/\\S/);\n}\n\nfunction findNextFirstChar(firstChars, startIndex, char) {\n for (let i = startIndex; i < firstChars.length; i += 1) {\n if (char === firstChars[i]) {\n return i;\n }\n }\n return -1;\n}\n\nfunction noopSelection() {\n return false;\n}\n\nexport const HvVerticalNavigationTreeView = forwardRef(\n (props: HvVerticalNavigationTreeViewProps, ref) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n\n mode = \"treeview\",\n\n collapsible = false,\n expanded: expandedProp,\n defaultExpanded = [],\n onToggle,\n\n selectable = false,\n multiSelect: multiSelectProp = false,\n selected: selectedProp,\n defaultSelected = [],\n onChange,\n\n disabledItemsFocusable = false,\n\n onFocus,\n onBlur,\n onKeyDown,\n\n children,\n\n ...others\n } = props;\n\n const { classes, cx } = useClasses(classesProp);\n\n const treeviewMode = mode === \"treeview\";\n const multiSelect = selectable && multiSelectProp;\n\n const treeId = useUniqueId(idProp);\n const treeRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(treeRef, ref);\n\n const [expanded, setExpandedState] = useControlled(\n expandedProp,\n defaultExpanded,\n );\n\n const [selected, setSelectedState] = useControlled(\n selectedProp,\n defaultSelected,\n );\n\n const [focusedNodeId, setFocusedNodeId] = useState<string | null>(null);\n\n const nodeMap = useRef({});\n\n const firstCharMap = useRef({});\n\n /*\n * Status Helpers\n */\n const isExpanded = useCallback(\n (id) =>\n !collapsible ||\n (Array.isArray(expanded) ? expanded.indexOf(id) !== -1 : false),\n [collapsible, expanded],\n );\n\n const isExpandable = useCallback(\n (id) =>\n collapsible && nodeMap.current[id] && nodeMap.current[id].expandable,\n [collapsible],\n );\n\n const isSelected = useCallback(\n (id) =>\n selectable &&\n (Array.isArray(selected)\n ? selected.indexOf(id) !== -1\n : selected === id),\n [selectable, selected],\n );\n\n const isSelectable = useCallback(\n (id) =>\n selectable && nodeMap.current[id] && nodeMap.current[id].selectable,\n [selectable],\n );\n\n const isDisabled = useCallback((id) => {\n let node = nodeMap.current[id];\n\n // This can be called before the node has been added to the node map.\n if (!node) {\n return false;\n }\n\n if (node.disabled) {\n return true;\n }\n\n while (node.parentId != null) {\n node = nodeMap.current[node.parentId];\n if (node.disabled) {\n return true;\n }\n }\n\n return false;\n }, []);\n\n const isFocused = useCallback(\n (id) => focusedNodeId === id,\n [focusedNodeId],\n );\n\n const isChildSelected = useCallback(\n // the second part of the condition is to ensure that the id we're\n // looking at is actually of a child (ie, there's at least one \"-\")\n (id) => selected.startsWith(id) && selected.includes(\"-\"),\n [selected],\n );\n\n /*\n * Child Helpers\n */\n const getChildrenIds = (id: string | null) =>\n Object.keys(nodeMap.current)\n .map((key) => {\n return nodeMap.current[key];\n })\n .filter((node) => node.parentId === id)\n .sort((a, b) => a.index - b.index)\n .map((child) => child.id);\n\n const getNavigableChildrenIds = useCallback(\n (id: string | null) => {\n let childrenIds = getChildrenIds(id);\n\n if (!disabledItemsFocusable) {\n childrenIds = childrenIds.filter((node) => !isDisabled(node));\n }\n return childrenIds;\n },\n [disabledItemsFocusable, isDisabled],\n );\n\n /*\n * Node Helpers\n */\n const getNextNode = useCallback(\n (id: string) => {\n // If expanded get first child\n if (isExpanded(id) && getNavigableChildrenIds(id).length > 0) {\n return getNavigableChildrenIds(id)[0];\n }\n\n let node = nodeMap.current[id];\n while (node != null) {\n // Try to get next sibling\n const siblings = getNavigableChildrenIds(node.parentId);\n const nextSibling = siblings[siblings.indexOf(node.id) + 1];\n\n if (nextSibling) {\n return nextSibling;\n }\n\n // If the sibling does not exist, go up a level to the parent and try again.\n node = nodeMap.current[node.parentId];\n }\n\n return null;\n },\n [getNavigableChildrenIds, isExpanded],\n );\n\n const getPreviousNode = (id: string) => {\n const node = nodeMap.current[id];\n const siblings = getNavigableChildrenIds(node.parentId);\n const nodeIndex = siblings.indexOf(id);\n\n if (nodeIndex === 0) {\n return node.parentId;\n }\n\n let currentNode = siblings[nodeIndex - 1];\n while (\n isExpanded(currentNode) &&\n getNavigableChildrenIds(currentNode).length > 0\n ) {\n currentNode = getNavigableChildrenIds(currentNode).pop();\n }\n\n return currentNode;\n };\n\n const getLastNode = () => {\n let lastNode = getNavigableChildrenIds(null).pop();\n\n while (isExpanded(lastNode)) {\n lastNode = getNavigableChildrenIds(lastNode).pop();\n }\n return lastNode;\n };\n const getFirstNode = () => getNavigableChildrenIds(null)[0];\n const getParent = (id) => nodeMap.current[id].parentId;\n\n /**\n * This is used to determine the start and end of a selection range so\n * we can get the nodes between the two border nodes.\n *\n * It finds the nodes' common ancestor using\n * a naive implementation of a lowest common ancestor algorithm\n * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).\n * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB\n * so we can compare their indexes to work out which node comes first in a depth first search.\n * (https://en.wikipedia.org/wiki/Depth-first_search)\n *\n * Another way to put it is which node is shallower in a trémaux tree\n * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree\n */\n const findOrderInTremauxTree = useCallback(\n (nodeAId: string, nodeBId: string) => {\n if (nodeAId === nodeBId) {\n return [nodeAId, nodeBId];\n }\n\n const nodeA = nodeMap.current[nodeAId];\n const nodeB = nodeMap.current[nodeBId];\n\n if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {\n return nodeB.parentId === nodeA.id\n ? [nodeA.id, nodeB.id]\n : [nodeB.id, nodeA.id];\n }\n\n const aFamily = [nodeA.id];\n const bFamily = [nodeB.id];\n\n let aAncestor = nodeA.parentId;\n let bAncestor = nodeB.parentId;\n\n let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n\n let continueA = true;\n let continueB = true;\n\n while (!bAncestorIsCommon && !aAncestorIsCommon) {\n if (continueA) {\n aFamily.push(aAncestor);\n aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n continueA = aAncestor !== null;\n if (!aAncestorIsCommon && continueA) {\n aAncestor = nodeMap.current[aAncestor].parentId;\n }\n }\n\n if (continueB && !aAncestorIsCommon) {\n bFamily.push(bAncestor);\n bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n continueB = bAncestor !== null;\n if (!bAncestorIsCommon && continueB) {\n bAncestor = nodeMap.current[bAncestor].parentId;\n }\n }\n }\n\n const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;\n const ancestorFamily = getChildrenIds(commonAncestor);\n\n const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];\n const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];\n\n return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide)\n ? [nodeAId, nodeBId]\n : [nodeBId, nodeAId];\n },\n [],\n );\n\n const getNodesInRange = useCallback(\n (nodeA, nodeB) => {\n if (nodeA && nodeB) {\n const [first, last] = findOrderInTremauxTree(nodeA, nodeB);\n const nodes = [first];\n\n let current = first;\n\n while (current !== last) {\n current = getNextNode(current);\n nodes.push(current);\n }\n\n return nodes;\n }\n return [];\n },\n [findOrderInTremauxTree, getNextNode],\n );\n\n /*\n * Focus Helpers\n */\n const focus = (event, id) => {\n if (id) {\n setFocusedNodeId(id);\n\n if (nodeMap.current[id]?.onFocus) {\n nodeMap.current[id].onFocus(event);\n }\n }\n };\n\n const focusNextNode = (event, id) => focus(event, getNextNode(id));\n const focusPreviousNode = (event, id) => focus(event, getPreviousNode(id));\n const focusFirstNode = (event) => focus(event, getFirstNode());\n const focusLastNode = (event) => focus(event, getLastNode());\n\n const focusByFirstCharacter = (event, id, char) => {\n let start;\n let index;\n const lowercaseChar = char.toLowerCase();\n\n const firstCharIds: string[] = [];\n const firstChars: string[] = [];\n // This really only works since the ids are strings\n Object.keys(firstCharMap.current).forEach((nodeId) => {\n const firstChar = firstCharMap.current[nodeId];\n const map = nodeMap.current[nodeId];\n const visible = map.parentId ? isExpanded(map.parentId) : true;\n const shouldBeSkipped = disabledItemsFocusable\n ? false\n : isDisabled(nodeId);\n\n if (visible && !shouldBeSkipped) {\n firstCharIds.push(nodeId);\n firstChars.push(firstChar);\n }\n });\n\n // Get start index for search based on position of currentItem\n start = firstCharIds.indexOf(id) + 1;\n if (start >= firstCharIds.length) {\n start = 0;\n }\n\n // Check remaining slots in the menu\n index = findNextFirstChar(firstChars, start, lowercaseChar);\n\n // If not found in remaining slots, check from beginning\n if (index === -1) {\n index = findNextFirstChar(firstChars, 0, lowercaseChar);\n }\n\n // If match was found...\n if (index > -1) {\n focus(event, firstCharIds[index]);\n }\n };\n\n /*\n * Expansion Helpers\n */\n const toggleExpansion = useCallback(\n (event, value = focusedNodeId) => {\n let newExpanded;\n\n if (expanded.indexOf(value) !== -1) {\n newExpanded = expanded.filter((id) => id !== value);\n } else {\n newExpanded = [value].concat(expanded);\n }\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n\n setExpandedState(newExpanded);\n },\n [expanded, focusedNodeId, onToggle, setExpandedState],\n );\n\n const expandAllSiblings = (event, id) => {\n const map = nodeMap.current[id];\n const siblings = getChildrenIds(map.parentId);\n\n const diff = siblings.filter(\n (child) => isExpandable(child) && !isExpanded(child),\n );\n\n const newExpanded = expanded.concat(diff);\n\n if (diff.length > 0) {\n setExpandedState(newExpanded);\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n }\n };\n\n /*\n * Selection Helpers\n */\n const lastSelectedNode = useRef<HTMLDivElement | null>(null);\n const lastSelectionWasRange = useRef(false);\n const currentRangeSelection = useRef<HTMLDivElement[]>([]);\n\n const isDivElement = (element): element is HTMLDivElement => {\n return (element as HTMLDivElement).nodeType === 1;\n };\n\n const handleRangeArrowSelect = useCallback(\n (event, nodes: { start?; next?; current? }) => {\n let base = selected.slice();\n const { start, next, current } = nodes;\n\n if (!next || !current) {\n return;\n }\n\n if (\n isDivElement(current) &&\n currentRangeSelection.current.indexOf(current) === -1\n ) {\n currentRangeSelection.current = [];\n }\n\n if (lastSelectionWasRange.current) {\n if (\n isDivElement(next) &&\n currentRangeSelection.current.indexOf(next) !== -1\n ) {\n base = base.filter((id) => id === start || id !== current);\n currentRangeSelection.current =\n currentRangeSelection.current.filter(\n (id) => id === start || id !== current,\n );\n } else {\n base.push(next);\n currentRangeSelection.current.push(next);\n }\n } else {\n base.push(next);\n currentRangeSelection.current.push(current, next);\n }\n\n if (onChange) {\n onChange(\n event,\n base,\n base.map((id) => nodeMap.current[id]?.payload),\n );\n }\n\n setSelectedState(base);\n },\n [onChange, selected, setSelectedState],\n );\n\n const handleRangeSelect = useCallback(\n (event, nodes: { start?; end?; current? }) => {\n let base = selected.slice();\n const { start, end } = nodes;\n // If last selection was a range selection ignore nodes that were selected.\n if (lastSelectionWasRange.current) {\n base = base.filter(\n (id) => currentRangeSelection.current.indexOf(id) === -1,\n );\n }\n\n let range = getNodesInRange(start, end);\n range = range.filter((node) => !isDisabled(node));\n currentRangeSelection.current = range;\n let newSelected = base.concat(range);\n newSelected = newSelected.filter(\n (id, i) => newSelected.indexOf(id) === i,\n );\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload),\n );\n }\n\n setSelectedState(newSelected);\n },\n [getNodesInRange, isDisabled, onChange, selected, setSelectedState],\n );\n\n const handleMultipleSelect = useCallback(\n (event, value) => {\n let newSelected;\n if (selected.indexOf(value) !== -1) {\n newSelected = selected.filter((id) => id !== value);\n } else {\n newSelected = [value].concat(selected);\n }\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload),\n );\n }\n\n setSelectedState(newSelected);\n },\n [onChange, selected, setSelectedState],\n );\n\n const handleSingleSelect = useCallback(\n (event, value) => {\n const newSelected = multiSelect ? [value] : value;\n if (onChange) {\n const nodeValue = nodeMap.current[newSelected]?.payload;\n onChange(event, newSelected, multiSelect ? [nodeValue] : nodeValue);\n }\n\n setSelectedState(newSelected);\n },\n [multiSelect, onChange, setSelectedState],\n );\n\n const selectNode = useCallback(\n (event, id, multiple = false) => {\n if (id && isSelectable(id)) {\n if (multiple) {\n handleMultipleSelect(event, id);\n } else {\n handleSingleSelect(event, id);\n }\n lastSelectedNode.current = id;\n lastSelectionWasRange.current = false;\n currentRangeSelection.current = [];\n\n return true;\n }\n return false;\n },\n [handleMultipleSelect, handleSingleSelect, isSelectable],\n );\n\n const selectRange = useCallback(\n (\n event,\n nodes: { start?; end?; current?: HTMLDivElement | null },\n stacked = false,\n ) => {\n const { start = lastSelectedNode.current, end, current } = nodes;\n if (stacked) {\n handleRangeArrowSelect(event, { start, next: end, current });\n } else if (start != null && end != null) {\n handleRangeSelect(event, { start, end });\n }\n lastSelectionWasRange.current = true;\n },\n [handleRangeArrowSelect, handleRangeSelect],\n );\n\n const rangeSelectToFirst = (event, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getFirstNode(),\n });\n };\n\n const rangeSelectToLast = (event: any, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getLastNode(),\n });\n };\n\n const selectNextNode = (event, id) => {\n if (!isDisabled(getNextNode(id))) {\n selectRange(\n event,\n {\n end: getNextNode(id),\n current: id,\n },\n true,\n );\n }\n };\n\n const selectPreviousNode = (event, id) => {\n if (!isDisabled(getPreviousNode(id))) {\n selectRange(\n event,\n {\n end: getPreviousNode(id),\n current: id,\n },\n true,\n );\n }\n };\n\n const selectAllNodes = (event) => {\n selectRange(event, { start: getFirstNode(), end: getLastNode() });\n };\n\n /*\n * Mapping Helpers\n */\n const registerNode = useCallback((node) => {\n const {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n } = node;\n\n nodeMap.current[id] = {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n };\n }, []);\n\n const unregisterNode = useCallback((id) => {\n const newMap = { ...nodeMap.current };\n delete newMap[id];\n nodeMap.current = newMap;\n\n setFocusedNodeId((oldFocusedNodeId) => {\n if (\n oldFocusedNodeId === id &&\n treeRef.current &&\n treeRef.current ===\n (treeRef.current.ownerDocument || document).activeElement\n ) {\n return getChildrenIds(null)[0];\n }\n return oldFocusedNodeId;\n });\n }, []);\n\n const mapFirstChar = useCallback((id, firstChar) => {\n firstCharMap.current[id] = firstChar;\n }, []);\n\n const unMapFirstChar = useCallback((id) => {\n const newMap = { ...firstCharMap.current };\n delete newMap[id];\n firstCharMap.current = newMap;\n }, []);\n\n /**\n * Event handlers and Navigation\n */\n const handleNextArrow = (event) => {\n if (isExpandable(focusedNodeId)) {\n if (isExpanded(focusedNodeId)) {\n focusNextNode(event, focusedNodeId);\n } else if (!isDisabled(focusedNodeId)) {\n toggleExpansion(event);\n }\n }\n return true;\n };\n\n const handlePreviousArrow = (event) => {\n if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {\n toggleExpansion(event, focusedNodeId);\n return true;\n }\n\n const parent = getParent(focusedNodeId);\n if (parent) {\n focus(event, parent);\n return true;\n }\n return false;\n };\n\n const handleKeyDown = (event) => {\n let flag = false;\n const { key } = event;\n\n // If the tree is empty there will be no focused node\n if (\n event.altKey ||\n event.currentTarget !== event.target ||\n !focusedNodeId\n ) {\n return;\n }\n\n const ctrlPressed = event.ctrlKey || event.metaKey;\n switch (key) {\n case \" \":\n if (isSelectable(focusedNodeId) && !isDisabled(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n event.stopPropagation();\n break;\n case \"Enter\":\n if (!isDisabled(focusedNodeId)) {\n if (isExpandable(focusedNodeId)) {\n toggleExpansion(event);\n flag = true;\n } else if (isSelectable(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n }\n event.stopPropagation();\n break;\n case \"ArrowDown\":\n if (multiSelect && event.shiftKey) {\n selectNextNode(event, focusedNodeId);\n }\n focusNextNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowUp\":\n if (multiSelect && event.shiftKey) {\n selectPreviousNode(event, focusedNodeId);\n }\n focusPreviousNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowRight\":\n flag = handleNextArrow(event);\n break;\n case \"ArrowLeft\":\n flag = handlePreviousArrow(event);\n break;\n case \"Home\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToFirst(event, focusedNodeId);\n }\n focusFirstNode(event);\n flag = true;\n break;\n case \"End\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToLast(event, focusedNodeId);\n }\n focusLastNode(event);\n flag = true;\n break;\n default:\n if (key === \"*\") {\n expandAllSiblings(event, focusedNodeId);\n flag = true;\n } else if (multiSelect && ctrlPressed && key.toLowerCase() === \"a\") {\n selectAllNodes(event);\n flag = true;\n } else if (\n !ctrlPressed &&\n !event.shiftKey &&\n isPrintableCharacter(key)\n ) {\n focusByFirstCharacter(event, focusedNodeId, key);\n flag = true;\n }\n }\n\n if (flag) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n\n const handleFocus = (event) => {\n // if the event bubbled (which is React specific) we don't want to steal focus\n if (event.target === event.currentTarget) {\n const firstSelected = Array.isArray(selected) ? selected[0] : selected;\n focus(event, firstSelected || getNavigableChildrenIds(null)[0]);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const handleBlur = (event) => {\n setFocusedNodeId(null);\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const activeDescendant =\n focusedNodeId && nodeMap.current[focusedNodeId]\n ? nodeMap.current[focusedNodeId].idAttribute\n : null;\n\n const treeControlContext = useMemo(\n () => ({\n treeId,\n mode,\n collapsible,\n toggleExpansion,\n multiSelect,\n selectNode: selectable ? selectNode : noopSelection,\n selectRange: selectable ? selectRange : noopSelection,\n disabledItemsFocusable,\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n focus,\n }),\n [\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n toggleExpansion,\n selectable,\n selectNode,\n selectRange,\n mode,\n collapsible,\n multiSelect,\n disabledItemsFocusable,\n treeId,\n ],\n );\n\n const treeStateContext = useMemo(\n () => ({\n isExpanded,\n isSelected,\n isFocused,\n isDisabled,\n isChildSelected,\n }),\n [isDisabled, isExpanded, isFocused, isSelected, isChildSelected],\n );\n\n return (\n <TreeViewControlContext.Provider value={treeControlContext}>\n <TreeViewStateContext.Provider value={treeStateContext}>\n <DescendantProvider>\n <ul\n ref={handleRef}\n id={idProp}\n className={cx(classes.root, className)}\n {...(treeviewMode && {\n id: treeId,\n role: \"tree\",\n \"aria-multiselectable\": multiSelect,\n \"aria-activedescendant\": activeDescendant,\n tabIndex: 0,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n })}\n {...others}\n >\n {children}\n </ul>\n </DescendantProvider>\n </TreeViewStateContext.Provider>\n </TreeViewControlContext.Provider>\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeView.js","sources":["../../../../src/VerticalNavigation/TreeView/TreeView.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { useControlled } from \"../../hooks/useControlled\";\nimport { useForkRef } from \"../../hooks/useForkRef\";\nimport { useUniqueId } from \"../../hooks/useUniqueId\";\nimport { DescendantProvider } from \"../../TreeView/internals/DescendantProvider\";\nimport { ExtractNames } from \"../../utils/classes\";\nimport { staticClasses, useClasses } from \"./TreeView.styles\";\nimport {\n NavigationMode,\n TreeViewControlContext,\n TreeViewStateContext,\n} from \"./TreeViewContext\";\n\nexport { staticClasses as treeViewClasses };\n\nexport type HvVerticalNavigationTreeViewClasses = ExtractNames<\n typeof useClasses\n>;\n\nexport interface HvVerticalNavigationTreeViewProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvVerticalNavigationTreeViewClasses;\n /**\n * Modus operandi (role) of the widget instance.\n */\n mode?: NavigationMode;\n /**\n * Enables selection.\n * @default false\n */\n selectable?: boolean;\n /**\n * Enables the simultaneous selection of multiple items.\n * @default false\n */\n multiSelect?: boolean;\n /**\n * The selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n */\n selected?: string[] | string;\n /**\n * When uncontrolled, defines the initial selected nodes' ids.\n *\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n * @default []\n */\n defaultSelected?: string[] | string;\n /**\n * Can non-leaf nodes be collapsed / expanded.\n */\n collapsible?: boolean;\n /**\n * Callback fired when a tree item is selected.\n *\n * @param {object} event The event source of the callback.\n * @param {string} nodeId The id of the selected node.\n */\n onChange?: any;\n /**\n * Expanded nodes' ids.\n */\n expanded?: string[];\n /**\n * When uncontrolled, defines the initial expanded nodes' ids.\n * @default []\n */\n defaultExpanded?: string[];\n /**\n * Callback fired when tree items are expanded/collapsed.\n *\n * @param {object} event The event source of the callback.\n * @param {array} nodeIds The ids of the expanded nodes (old and new).\n */\n onToggle?: (event: any, nodeIds: string[]) => void;\n /**\n * If `true`, will allow focus on disabled items.\n * @default false\n */\n disabledItemsFocusable?: boolean;\n /**\n * @ignore\n */\n onFocus?: (event: React.FocusEvent<any>) => void;\n /**\n * @ignore\n */\n onBlur?: (event: any) => void;\n /**\n * @ignore\n */\n onKeyDown?: (event: KeyboardEvent) => void;\n /**\n * The content of the component.\n */\n children?: React.ReactNode;\n}\n\nfunction isPrintableCharacter(string: string) {\n return string && string.length === 1 && string.match(/\\S/);\n}\n\nfunction findNextFirstChar(\n firstChars: string[],\n startIndex: number,\n char: string,\n) {\n return firstChars.slice(startIndex).findIndex((c) => c === char);\n}\n\nfunction noopSelection() {\n return false;\n}\n\nexport const HvVerticalNavigationTreeView = forwardRef(\n (props: HvVerticalNavigationTreeViewProps, ref) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n\n mode = \"treeview\",\n\n collapsible = false,\n expanded: expandedProp,\n defaultExpanded = [],\n onToggle,\n\n selectable = false,\n multiSelect: multiSelectProp = false,\n selected: selectedProp,\n defaultSelected = [],\n onChange,\n\n disabledItemsFocusable = false,\n\n onFocus,\n onBlur,\n onKeyDown,\n\n children,\n\n ...others\n } = props;\n\n const { classes, cx } = useClasses(classesProp);\n\n const treeviewMode = mode === \"treeview\";\n const multiSelect = selectable && multiSelectProp;\n\n const treeId = useUniqueId(idProp);\n const treeRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(treeRef, ref);\n\n const [expanded, setExpandedState] = useControlled(\n expandedProp,\n defaultExpanded,\n );\n\n const [selected, setSelectedState] = useControlled(\n selectedProp,\n defaultSelected,\n );\n\n const [focusedNodeId, setFocusedNodeId] = useState<string | null>(null);\n\n const nodeMap = useRef<Record<string, any>>({});\n\n const firstCharMap = useRef<Record<string, any>>({});\n\n /*\n * Status Helpers\n */\n const isExpanded = useCallback(\n (id: string) =>\n !collapsible ||\n (Array.isArray(expanded) ? expanded.indexOf(id) !== -1 : false),\n [collapsible, expanded],\n );\n\n const isExpandable = useCallback(\n (id: string) =>\n collapsible && nodeMap.current[id] && nodeMap.current[id].expandable,\n [collapsible],\n );\n\n const isSelected = useCallback(\n (id: string) =>\n selectable &&\n (Array.isArray(selected)\n ? selected.indexOf(id) !== -1\n : selected === id),\n [selectable, selected],\n );\n\n const isSelectable = useCallback(\n (id: string) =>\n selectable && nodeMap.current[id] && nodeMap.current[id].selectable,\n [selectable],\n );\n\n const isDisabled = useCallback((id: string) => {\n let node = nodeMap.current[id];\n\n // This can be called before the node has been added to the node map.\n if (!node) {\n return false;\n }\n\n if (node.disabled) {\n return true;\n }\n\n while (node.parentId != null) {\n node = nodeMap.current[node.parentId];\n if (node.disabled) {\n return true;\n }\n }\n\n return false;\n }, []);\n\n const isFocused = useCallback(\n (id: string) => focusedNodeId === id,\n [focusedNodeId],\n );\n\n const isChildSelected = useCallback(\n // the second part of the condition is to ensure that the id we're\n // looking at is actually of a child (ie, there's at least one \"-\")\n (id: string) => {\n return Array<string>()\n .concat(selected)\n .some((s) => s.startsWith(id) && s.includes(\"-\"));\n },\n [selected],\n );\n\n /*\n * Child Helpers\n */\n const getChildrenIds = (id: string | null) =>\n Object.keys(nodeMap.current)\n .map((key) => {\n return nodeMap.current[key];\n })\n .filter((node) => node.parentId === id)\n .sort((a, b) => a.index - b.index)\n .map((child) => child.id);\n\n const getNavigableChildrenIds = useCallback(\n (id: string | null) => {\n let childrenIds = getChildrenIds(id);\n\n if (!disabledItemsFocusable) {\n childrenIds = childrenIds.filter((node) => !isDisabled(node));\n }\n return childrenIds;\n },\n [disabledItemsFocusable, isDisabled],\n );\n\n /*\n * Node Helpers\n */\n const getNextNode = useCallback(\n (id: string) => {\n // If expanded get first child\n if (isExpanded(id) && getNavigableChildrenIds(id).length > 0) {\n return getNavigableChildrenIds(id)[0];\n }\n\n let node = nodeMap.current[id];\n while (node != null) {\n // Try to get next sibling\n const siblings = getNavigableChildrenIds(node.parentId);\n const nextSibling = siblings[siblings.indexOf(node.id) + 1];\n\n if (nextSibling) {\n return nextSibling;\n }\n\n // If the sibling does not exist, go up a level to the parent and try again.\n node = nodeMap.current[node.parentId];\n }\n\n return null;\n },\n [getNavigableChildrenIds, isExpanded],\n );\n\n const getPreviousNode = (id: string) => {\n const node = nodeMap.current[id];\n const siblings = getNavigableChildrenIds(node.parentId);\n const nodeIndex = siblings.indexOf(id);\n\n if (nodeIndex === 0) {\n return node.parentId;\n }\n\n let currentNode = siblings[nodeIndex - 1];\n while (\n isExpanded(currentNode) &&\n getNavigableChildrenIds(currentNode).length > 0\n ) {\n currentNode = getNavigableChildrenIds(currentNode).pop();\n }\n\n return currentNode;\n };\n\n const getLastNode = () => {\n let lastNode = getNavigableChildrenIds(null).pop();\n\n while (isExpanded(lastNode)) {\n lastNode = getNavigableChildrenIds(lastNode).pop();\n }\n return lastNode;\n };\n const getFirstNode = () => getNavigableChildrenIds(null)[0];\n const getParent = (id) => nodeMap.current[id].parentId;\n\n /**\n * This is used to determine the start and end of a selection range so\n * we can get the nodes between the two border nodes.\n *\n * It finds the nodes' common ancestor using\n * a naive implementation of a lowest common ancestor algorithm\n * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).\n * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB\n * so we can compare their indexes to work out which node comes first in a depth first search.\n * (https://en.wikipedia.org/wiki/Depth-first_search)\n *\n * Another way to put it is which node is shallower in a trémaux tree\n * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree\n */\n const findOrderInTremauxTree = useCallback(\n (nodeAId: string, nodeBId: string) => {\n if (nodeAId === nodeBId) {\n return [nodeAId, nodeBId];\n }\n\n const nodeA = nodeMap.current[nodeAId];\n const nodeB = nodeMap.current[nodeBId];\n\n if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {\n return nodeB.parentId === nodeA.id\n ? [nodeA.id, nodeB.id]\n : [nodeB.id, nodeA.id];\n }\n\n const aFamily = [nodeA.id];\n const bFamily = [nodeB.id];\n\n let aAncestor = nodeA.parentId;\n let bAncestor = nodeB.parentId;\n\n let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n\n let continueA = true;\n let continueB = true;\n\n while (!bAncestorIsCommon && !aAncestorIsCommon) {\n if (continueA) {\n aFamily.push(aAncestor);\n aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n continueA = aAncestor !== null;\n if (!aAncestorIsCommon && continueA) {\n aAncestor = nodeMap.current[aAncestor].parentId;\n }\n }\n\n if (continueB && !aAncestorIsCommon) {\n bFamily.push(bAncestor);\n bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n continueB = bAncestor !== null;\n if (!bAncestorIsCommon && continueB) {\n bAncestor = nodeMap.current[bAncestor].parentId;\n }\n }\n }\n\n const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;\n const ancestorFamily = getChildrenIds(commonAncestor);\n\n const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];\n const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];\n\n return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide)\n ? [nodeAId, nodeBId]\n : [nodeBId, nodeAId];\n },\n [],\n );\n\n const getNodesInRange = useCallback(\n (nodeA, nodeB) => {\n if (nodeA && nodeB) {\n const [first, last] = findOrderInTremauxTree(nodeA, nodeB);\n const nodes = [first];\n\n let current = first;\n\n while (current !== last) {\n current = getNextNode(current);\n nodes.push(current);\n }\n\n return nodes;\n }\n return [];\n },\n [findOrderInTremauxTree, getNextNode],\n );\n\n /*\n * Focus Helpers\n */\n const focus = (event, id) => {\n if (id) {\n setFocusedNodeId(id);\n\n if (nodeMap.current[id]?.onFocus) {\n nodeMap.current[id].onFocus(event);\n }\n }\n };\n\n const focusNextNode = (event, id) => focus(event, getNextNode(id));\n const focusPreviousNode = (event, id) => focus(event, getPreviousNode(id));\n const focusFirstNode = (event) => focus(event, getFirstNode());\n const focusLastNode = (event) => focus(event, getLastNode());\n\n const focusByFirstCharacter = (event, id, char) => {\n let start;\n let index;\n const lowercaseChar = char.toLowerCase();\n\n const firstCharIds: string[] = [];\n const firstChars: string[] = [];\n // This really only works since the ids are strings\n Object.keys(firstCharMap.current).forEach((nodeId) => {\n const firstChar = firstCharMap.current[nodeId];\n const map = nodeMap.current[nodeId];\n const visible = map.parentId ? isExpanded(map.parentId) : true;\n const shouldBeSkipped = disabledItemsFocusable\n ? false\n : isDisabled(nodeId);\n\n if (visible && !shouldBeSkipped) {\n firstCharIds.push(nodeId);\n firstChars.push(firstChar);\n }\n });\n\n // Get start index for search based on position of currentItem\n start = firstCharIds.indexOf(id) + 1;\n if (start >= firstCharIds.length) {\n start = 0;\n }\n\n // Check remaining slots in the menu\n index = findNextFirstChar(firstChars, start, lowercaseChar);\n\n // If not found in remaining slots, check from beginning\n if (index === -1) {\n index = findNextFirstChar(firstChars, 0, lowercaseChar);\n }\n\n // If match was found...\n if (index > -1) {\n focus(event, firstCharIds[index]);\n }\n };\n\n /*\n * Expansion Helpers\n */\n const toggleExpansion = useCallback(\n (event, value = focusedNodeId) => {\n if (!value) return;\n\n const newExpanded = expanded.includes(value)\n ? expanded.filter((id) => id !== value)\n : [value].concat(expanded);\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n\n setExpandedState(newExpanded);\n },\n [expanded, focusedNodeId, onToggle, setExpandedState],\n );\n\n const expandAllSiblings = (event, id) => {\n const map = nodeMap.current[id];\n const siblings = getChildrenIds(map.parentId);\n\n const diff = siblings.filter(\n (child) => isExpandable(child) && !isExpanded(child),\n );\n\n const newExpanded = expanded.concat(diff);\n\n if (diff.length > 0) {\n setExpandedState(newExpanded);\n\n if (onToggle) {\n onToggle(event, newExpanded);\n }\n }\n };\n\n /*\n * Selection Helpers\n */\n const lastSelectedNode = useRef<HTMLDivElement | null>(null);\n const lastSelectionWasRange = useRef(false);\n const currentRangeSelection = useRef<HTMLDivElement[]>([]);\n\n const isDivElement = (element): element is HTMLDivElement => {\n return (element as HTMLDivElement).nodeType === 1;\n };\n\n const handleRangeArrowSelect = useCallback(\n (event, nodes: { start?; next?; current? }) => {\n let base = Array<string>().concat(selected);\n const { start, next, current } = nodes;\n\n if (!next || !current) {\n return;\n }\n\n if (\n isDivElement(current) &&\n currentRangeSelection.current.indexOf(current) === -1\n ) {\n currentRangeSelection.current = [];\n }\n\n if (lastSelectionWasRange.current) {\n if (\n isDivElement(next) &&\n currentRangeSelection.current.indexOf(next) !== -1\n ) {\n base = base.filter((id) => id === start || id !== current);\n currentRangeSelection.current =\n currentRangeSelection.current.filter(\n (id) => id === start || id !== current,\n );\n } else {\n base.push(next);\n currentRangeSelection.current.push(next);\n }\n } else {\n base.push(next);\n currentRangeSelection.current.push(current, next);\n }\n\n if (onChange) {\n onChange(\n event,\n base,\n base.map((id) => nodeMap.current[id]?.payload),\n );\n }\n\n setSelectedState(base);\n },\n [onChange, selected, setSelectedState],\n );\n\n const handleRangeSelect = useCallback(\n (event, nodes: { start?; end?; current? }) => {\n let base = Array<string>().concat(selected);\n const { start, end } = nodes;\n // If last selection was a range selection ignore nodes that were selected.\n if (lastSelectionWasRange.current) {\n base = base.filter(\n (id) => !currentRangeSelection.current.includes(id as any),\n );\n }\n\n let range = getNodesInRange(start, end);\n range = range.filter((node) => !isDisabled(node));\n currentRangeSelection.current = range;\n let newSelected = base.concat(range);\n newSelected = newSelected.filter(\n (id, i) => newSelected.indexOf(id) === i,\n );\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload),\n );\n }\n\n setSelectedState(newSelected);\n },\n [getNodesInRange, isDisabled, onChange, selected, setSelectedState],\n );\n\n const handleMultipleSelect = useCallback(\n (event, value) => {\n const newSelected = selected.includes(value)\n ? (selected as string[]).filter((id) => id !== value)\n : [value].concat(selected);\n\n if (onChange) {\n onChange(\n event,\n newSelected,\n newSelected.map((id) => nodeMap.current[id]?.payload),\n );\n }\n\n setSelectedState(newSelected);\n },\n [onChange, selected, setSelectedState],\n );\n\n const handleSingleSelect = useCallback(\n (event, value) => {\n const newSelected = multiSelect ? [value] : value;\n if (onChange) {\n const nodeValue = nodeMap.current[newSelected]?.payload;\n onChange(event, newSelected, multiSelect ? [nodeValue] : nodeValue);\n }\n\n setSelectedState(newSelected);\n },\n [multiSelect, onChange, setSelectedState],\n );\n\n const selectNode = useCallback(\n (event, id, multiple = false) => {\n if (id && isSelectable(id)) {\n if (multiple) {\n handleMultipleSelect(event, id);\n } else {\n handleSingleSelect(event, id);\n }\n lastSelectedNode.current = id;\n lastSelectionWasRange.current = false;\n currentRangeSelection.current = [];\n\n return true;\n }\n return false;\n },\n [handleMultipleSelect, handleSingleSelect, isSelectable],\n );\n\n const selectRange = useCallback(\n (\n event,\n nodes: { start?; end?; current?: HTMLDivElement | null },\n stacked = false,\n ) => {\n const { start = lastSelectedNode.current, end, current } = nodes;\n if (stacked) {\n handleRangeArrowSelect(event, { start, next: end, current });\n } else if (start != null && end != null) {\n handleRangeSelect(event, { start, end });\n }\n lastSelectionWasRange.current = true;\n },\n [handleRangeArrowSelect, handleRangeSelect],\n );\n\n const rangeSelectToFirst = (event, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getFirstNode(),\n });\n };\n\n const rangeSelectToLast = (event: any, id) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = id;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : id;\n\n selectRange(event, {\n start,\n end: getLastNode(),\n });\n };\n\n const selectNextNode = (event, id) => {\n if (!isDisabled(getNextNode(id))) {\n selectRange(\n event,\n {\n end: getNextNode(id),\n current: id,\n },\n true,\n );\n }\n };\n\n const selectPreviousNode = (event, id) => {\n if (!isDisabled(getPreviousNode(id))) {\n selectRange(\n event,\n {\n end: getPreviousNode(id),\n current: id,\n },\n true,\n );\n }\n };\n\n const selectAllNodes = (event) => {\n selectRange(event, { start: getFirstNode(), end: getLastNode() });\n };\n\n /*\n * Mapping Helpers\n */\n const registerNode = useCallback((node) => {\n const {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n } = node;\n\n nodeMap.current[id] = {\n id,\n index,\n parentId,\n expandable,\n idAttribute,\n disabled,\n selectable: nodeSelectable,\n onFocus: nodeOnFocus,\n payload,\n };\n }, []);\n\n const unregisterNode = useCallback((id) => {\n const newMap = { ...nodeMap.current };\n delete newMap[id];\n nodeMap.current = newMap;\n\n setFocusedNodeId((oldFocusedNodeId) => {\n if (\n oldFocusedNodeId === id &&\n treeRef.current &&\n treeRef.current ===\n (treeRef.current.ownerDocument || document).activeElement\n ) {\n return getChildrenIds(null)[0];\n }\n return oldFocusedNodeId;\n });\n }, []);\n\n const mapFirstChar = useCallback((id, firstChar) => {\n firstCharMap.current[id] = firstChar;\n }, []);\n\n const unMapFirstChar = useCallback((id) => {\n const newMap = { ...firstCharMap.current };\n delete newMap[id];\n firstCharMap.current = newMap;\n }, []);\n\n /**\n * Event handlers and Navigation\n */\n const handleNextArrow = (event) => {\n if (!focusedNodeId) return false;\n if (isExpandable(focusedNodeId)) {\n if (isExpanded(focusedNodeId)) {\n focusNextNode(event, focusedNodeId);\n } else if (!isDisabled(focusedNodeId)) {\n toggleExpansion(event);\n }\n }\n return true;\n };\n\n const handlePreviousArrow = (event) => {\n if (!focusedNodeId) return false;\n if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {\n toggleExpansion(event, focusedNodeId);\n return true;\n }\n\n const parent = getParent(focusedNodeId);\n if (parent) {\n focus(event, parent);\n return true;\n }\n return false;\n };\n\n const handleKeyDown = (event) => {\n let flag = false;\n const { key } = event;\n\n // If the tree is empty there will be no focused node\n if (\n event.altKey ||\n event.currentTarget !== event.target ||\n !focusedNodeId\n ) {\n return;\n }\n\n const ctrlPressed = event.ctrlKey || event.metaKey;\n switch (key) {\n case \" \":\n if (isSelectable(focusedNodeId) && !isDisabled(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n event.stopPropagation();\n break;\n case \"Enter\":\n if (!isDisabled(focusedNodeId)) {\n if (isExpandable(focusedNodeId)) {\n toggleExpansion(event);\n flag = true;\n } else if (isSelectable(focusedNodeId)) {\n if (multiSelect && event.shiftKey) {\n selectRange(event, { end: focusedNodeId });\n flag = true;\n } else if (multiSelect) {\n flag = selectNode(event, focusedNodeId, true);\n } else {\n flag = selectNode(event, focusedNodeId);\n }\n }\n }\n event.stopPropagation();\n break;\n case \"ArrowDown\":\n if (multiSelect && event.shiftKey) {\n selectNextNode(event, focusedNodeId);\n }\n focusNextNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowUp\":\n if (multiSelect && event.shiftKey) {\n selectPreviousNode(event, focusedNodeId);\n }\n focusPreviousNode(event, focusedNodeId);\n flag = true;\n break;\n case \"ArrowRight\":\n flag = handleNextArrow(event);\n break;\n case \"ArrowLeft\":\n flag = handlePreviousArrow(event);\n break;\n case \"Home\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToFirst(event, focusedNodeId);\n }\n focusFirstNode(event);\n flag = true;\n break;\n case \"End\":\n if (\n multiSelect &&\n ctrlPressed &&\n event.shiftKey &&\n !isDisabled(focusedNodeId)\n ) {\n rangeSelectToLast(event, focusedNodeId);\n }\n focusLastNode(event);\n flag = true;\n break;\n default:\n if (key === \"*\") {\n expandAllSiblings(event, focusedNodeId);\n flag = true;\n } else if (multiSelect && ctrlPressed && key.toLowerCase() === \"a\") {\n selectAllNodes(event);\n flag = true;\n } else if (\n !ctrlPressed &&\n !event.shiftKey &&\n isPrintableCharacter(key)\n ) {\n focusByFirstCharacter(event, focusedNodeId, key);\n flag = true;\n }\n }\n\n if (flag) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n\n const handleFocus = (event) => {\n // if the event bubbled (which is React specific) we don't want to steal focus\n if (event.target === event.currentTarget) {\n const firstSelected = Array.isArray(selected) ? selected[0] : selected;\n focus(event, firstSelected || getNavigableChildrenIds(null)[0]);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const handleBlur = (event) => {\n setFocusedNodeId(null);\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const activeDescendant =\n focusedNodeId && nodeMap.current[focusedNodeId]\n ? nodeMap.current[focusedNodeId].idAttribute\n : null;\n\n const treeControlContext = useMemo(\n () => ({\n treeId,\n mode,\n collapsible,\n toggleExpansion,\n multiSelect,\n selectNode: selectable ? selectNode : noopSelection,\n selectRange: selectable ? selectRange : noopSelection,\n disabledItemsFocusable,\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n focus,\n }),\n [\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n toggleExpansion,\n selectable,\n selectNode,\n selectRange,\n mode,\n collapsible,\n multiSelect,\n disabledItemsFocusable,\n treeId,\n ],\n );\n\n const treeStateContext = useMemo(\n () => ({\n isExpanded,\n isSelected,\n isFocused,\n isDisabled,\n isChildSelected,\n }),\n [isDisabled, isExpanded, isFocused, isSelected, isChildSelected],\n );\n\n return (\n <TreeViewControlContext.Provider value={treeControlContext}>\n <TreeViewStateContext.Provider value={treeStateContext}>\n <DescendantProvider>\n <ul\n ref={handleRef}\n id={idProp}\n className={cx(classes.root, className)}\n {...(treeviewMode && {\n id: treeId,\n role: \"tree\",\n \"aria-multiselectable\": multiSelect,\n \"aria-activedescendant\": activeDescendant,\n tabIndex: 0,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n })}\n {...others}\n >\n {children}\n </ul>\n </DescendantProvider>\n </TreeViewStateContext.Provider>\n </TreeViewControlContext.Provider>\n );\n },\n);\n"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@ import { forwardRef, useContext, useState, useRef, useMemo, useEffect, useCallba
3
3
  import { DropUpXS, DropDownXS } from "@hitachivantara/uikit-react-icons";
4
4
  import { useDefaultProps } from "../../hooks/useDefaultProps.js";
5
5
  import { useForkRef } from "../../hooks/useForkRef.js";
6
+ import { useDescendant, DescendantProvider } from "../../TreeView/internals/DescendantProvider.js";
6
7
  import { setId } from "../../utils/setId.js";
7
8
  import { VerticalNavigationContext } from "../VerticalNavigationContext.js";
8
- import { useDescendant, DescendantProvider } from "./descendants.js";
9
9
  import { TreeViewControlContext, TreeViewStateContext } from "./TreeViewContext.js";
10
10
  import { useClasses } from "./TreeViewItem.styles.js";
11
11
  import { staticClasses } from "./TreeViewItem.styles.js";
@@ -64,7 +64,7 @@ const HvVerticalNavigationTreeViewItem = forwardRef(
64
64
  } else if (treeId && nodeId) {
65
65
  id = `${treeId}-${nodeId}`;
66
66
  }
67
- const [treeitemElement, setTreeitemElement] = useState(null);
67
+ const [treeitemElement, setTreeitemElement] = useState();
68
68
  const contentRef = useRef(null);
69
69
  const handleRef = useForkRef(setTreeitemElement, ref);
70
70
  const descendant = useMemo(
@@ -1 +1 @@
1
- {"version":3,"file":"TreeViewItem.js","sources":["../../../../src/VerticalNavigation/TreeView/TreeViewItem.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { DropDownXS, DropUpXS } from \"@hitachivantara/uikit-react-icons\";\n\nimport { useDefaultProps } from \"../../hooks/useDefaultProps\";\nimport { useForkRef } from \"../../hooks/useForkRef\";\nimport { HvOverflowTooltip } from \"../../OverflowTooltip\";\nimport { HvTooltip } from \"../../Tooltip\";\nimport { HvTypography } from \"../../Typography\";\nimport { ExtractNames } from \"../../utils/classes\";\nimport { setId } from \"../../utils/setId\";\nimport { VerticalNavigationContext } from \"../VerticalNavigationContext\";\nimport { DescendantProvider, useDescendant } from \"./descendants\";\nimport { IconWrapper } from \"./IconWrapper\";\nimport {\n TreeViewControlContext,\n TreeViewStateContext,\n} from \"./TreeViewContext\";\nimport { staticClasses, useClasses } from \"./TreeViewItem.styles\";\n\nexport { staticClasses as treeViewItemClasses };\n\nexport type HvVerticalNavigationTreeViewItemClasses = ExtractNames<\n typeof useClasses\n>;\n\nexport interface HvVerticalNavigationTreeViewItemProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the Radio button.\n */\n classes?: HvVerticalNavigationTreeViewItemClasses;\n /**\n * Is the node disabled.\n */\n disabled?: boolean;\n /**\n * Can the node be selected.\n */\n selectable?: boolean;\n /**\n * The id of the node.\n */\n nodeId?: string;\n /**\n * The icon to display next to the node's label.\n */\n icon?: React.ReactNode;\n /**\n * The item label.\n */\n label?: React.ReactNode;\n /**\n * The url for the link.\n */\n href?: string;\n /**\n * The behavior when opening a link.\n */\n target?: string;\n /**\n * The node payload.\n */\n payload?: any;\n /**\n * @ignore\n */\n onClick?: any;\n /**\n * @ignore\n */\n onMouseDown?: any;\n /**\n * @ignore\n */\n onFocus?: any;\n /**\n * The content of the component.\n */\n children?: React.ReactNode;\n /**\n * @ignore\n */\n onMouseEnter?: any;\n /**\n * Disables the appearence of a tooltip on hovering an element ( Only applicable when the in collapsed mode)\n */\n disableTooltip?: boolean;\n}\n\nconst preventSelection = (event, disabled) => {\n if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {\n // Prevent text selection\n event.preventDefault();\n }\n};\n\nexport const HvVerticalNavigationTreeViewItem = forwardRef(\n (props: HvVerticalNavigationTreeViewItemProps, ref) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n\n disabled: disabledProp = false,\n\n selectable: selectableProp,\n\n nodeId,\n icon = null,\n label,\n href,\n target,\n payload,\n\n onClick,\n onMouseDown,\n onFocus,\n\n children,\n\n disableTooltip,\n\n ...others\n } = useDefaultProps(\"HvVerticalNavigationTreeViewItem\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const treeViewControlContext = useContext(TreeViewControlContext);\n const { isExpanded, isSelected, isFocused, isDisabled, isChildSelected } =\n useContext(TreeViewStateContext);\n\n const {\n treeId,\n mode,\n collapsible,\n toggleExpansion,\n multiSelect,\n selectNode,\n selectRange,\n disabledItemsFocusable,\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n focus,\n } = treeViewControlContext;\n\n const treeviewMode = mode === \"treeview\";\n\n let id: string | null = null;\n\n if (idProp != null) {\n id = idProp;\n } else if (treeId && nodeId) {\n id = `${treeId}-${nodeId}`;\n }\n\n const [treeitemElement, setTreeitemElement] = useState(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(setTreeitemElement, ref);\n\n const descendant = useMemo(\n () => ({\n element: treeitemElement,\n id: nodeId,\n }),\n [nodeId, treeitemElement],\n );\n\n const { isOpen, useIcons } = useContext(VerticalNavigationContext);\n\n const { index, parentId, level } = useDescendant(descendant);\n\n const expandable = collapsible && Array.isArray(children);\n const expanded = isExpanded ? isExpanded(nodeId) : false;\n const focused = isFocused ? isFocused(nodeId) : false;\n const selected = isSelected ? isSelected(nodeId) : false;\n const disabled = isDisabled ? isDisabled(nodeId) : false;\n\n const selectable =\n selectableProp != null\n ? selectableProp\n : !collapsible || !expandable || !isOpen;\n\n useEffect(() => {\n // On the first render a node's index will be -1. We want to wait for the real index.\n if (registerNode && unregisterNode && index !== -1) {\n registerNode({\n id: nodeId,\n idAttribute: id,\n index,\n parentId,\n selectable,\n expandable,\n disabled: disabledProp,\n onFocus,\n payload,\n });\n\n return () => {\n unregisterNode(nodeId);\n };\n }\n\n return undefined;\n }, [\n registerNode,\n unregisterNode,\n parentId,\n index,\n nodeId,\n expandable,\n disabledProp,\n id,\n selectable,\n onFocus,\n payload,\n ]);\n\n useEffect(() => {\n if (\n mapFirstChar &&\n unMapFirstChar &&\n label &&\n contentRef.current?.textContent\n ) {\n mapFirstChar(\n nodeId,\n contentRef.current?.textContent.substring(0, 1).toLowerCase(),\n );\n\n return () => {\n unMapFirstChar(nodeId);\n };\n }\n return undefined;\n }, [mapFirstChar, unMapFirstChar, nodeId, label]);\n\n let ariaSelected;\n if (multiSelect) {\n ariaSelected = selected;\n } else if (selected) {\n /* single-selection trees unset aria-selected on un-selected items.\n *\n * If the tree does not support multiple selection, aria-selected\n * is set to true for the selected node and it is not present on any other node in the tree.\n * Source: https://www.w3.org/TR/wai-aria-practices/#TreeView\n */\n ariaSelected = true;\n }\n\n const handleFocus = useCallback(\n (event) => {\n // DOM focus stays on the tree which manages focus with aria-activedescendant\n if (event.target === event.currentTarget) {\n (event.target.ownerDocument || document)\n .getElementById(treeId)\n .focus({ preventScroll: true });\n }\n\n const unfocusable = !disabledItemsFocusable && disabled;\n if (\n !focused &&\n event.currentTarget === event.target &&\n !unfocusable &&\n focus\n ) {\n focus(event, nodeId);\n }\n },\n [disabled, disabledItemsFocusable, focus, focused, nodeId, treeId],\n );\n\n const handleExpansion = useCallback(\n (event) => {\n if (!disabled) {\n if (treeviewMode && !focused && focus) {\n focus(event, nodeId);\n }\n\n const multiple =\n multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n // If already expanded and trying to toggle selection don't close\n if (\n expandable &&\n isOpen &&\n !(multiple && isExpanded && isExpanded(nodeId))\n ) {\n if (toggleExpansion) toggleExpansion(event, nodeId);\n }\n }\n },\n [\n disabled,\n expandable,\n focus,\n focused,\n isExpanded,\n multiSelect,\n nodeId,\n toggleExpansion,\n treeviewMode,\n isOpen,\n ],\n );\n\n const handleSelection = useCallback(\n (event) => {\n if (selectable && !disabled) {\n if (treeviewMode && !focused && focus) {\n focus(event, nodeId);\n }\n\n const multiple =\n multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n if (multiple) {\n if (event.shiftKey) {\n if (selectRange) return selectRange(event, { end: nodeId });\n } else if (selectNode) return selectNode(event, nodeId, true);\n } else if (selectNode) return selectNode(event, nodeId);\n } else {\n return false;\n }\n },\n [\n disabled,\n focus,\n focused,\n multiSelect,\n nodeId,\n selectNode,\n selectRange,\n selectable,\n treeviewMode,\n ],\n );\n\n const handleMouseDown = useCallback(\n (event) => {\n preventSelection(event, disabled);\n\n if (onMouseDown) {\n onMouseDown(event);\n }\n },\n [disabled, onMouseDown],\n );\n\n const handleClick = useCallback(\n (event) => {\n if (!disabled) {\n if (expandable && isOpen) {\n handleExpansion(event);\n }\n\n if (selectable) {\n handleSelection(event);\n }\n }\n\n if (onClick) {\n onClick(event);\n }\n },\n [\n disabled,\n expandable,\n handleExpansion,\n handleSelection,\n onClick,\n selectable,\n isOpen,\n ],\n );\n\n const handleKeyDown = useCallback(\n (event) => {\n let isEventHandled = false;\n const { key } = event;\n\n if (\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.currentTarget !== event.target\n ) {\n return;\n }\n if (contentRef.current === event.currentTarget) {\n if (key === \"Enter\" || key === \" \") {\n if (expandable && isOpen) {\n isEventHandled = handleExpansion(event) as unknown as boolean;\n }\n\n if (selectable) {\n isEventHandled = handleSelection(event) as boolean;\n }\n }\n\n if (isEventHandled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n [expandable, handleExpansion, handleSelection, selectable, isOpen],\n );\n\n const renderedContent = useMemo(() => {\n const buttonLinkProps = {\n href,\n target,\n };\n\n const hasChildren = !!children;\n const showTooltip = !hasChildren && !isOpen && !disableTooltip;\n\n const isLink = href !== undefined && !disabled;\n\n return (\n <HvTooltip placement=\"right\" title={showTooltip && label}>\n <HvTypography\n id={setId(id, \"button\")}\n component={isLink ? \"a\" : \"div\"}\n {...(isLink ? buttonLinkProps : null)}\n ref={contentRef}\n className={cx(classes.content, {\n [classes.link]: isLink,\n [classes.minimized]: !isOpen,\n })}\n variant=\"body\"\n disabled={disabled}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n style={{\n paddingLeft:\n (useIcons || !isOpen ? 0 : 10) +\n level * (collapsible ? 16 : 10),\n }}\n role={isLink ? undefined : \"button\"}\n {...(treeviewMode\n ? {\n tabIndex: -1,\n onFocus: handleFocus,\n }\n : {\n tabIndex: selectable || expandable ? 0 : -1,\n onKeyDown: handleKeyDown,\n \"aria-current\":\n (selectable && selected) ||\n (!isOpen && isChildSelected?.(nodeId))\n ? href\n ? \"page\"\n : true\n : undefined,\n \"aria-expanded\": expandable ? expanded : undefined,\n \"aria-controls\":\n isOpen && expandable ? setId(id, \"group\") : undefined,\n \"aria-label\": payload?.label,\n })}\n >\n <IconWrapper\n icon={useIcons && icon}\n label={payload?.label}\n hasChildren={hasChildren}\n showAvatar={!icon && useIcons}\n isOpen={isOpen}\n />\n\n {isOpen && (\n <div\n className={cx(classes.label, {\n [classes.labelIcon]: useIcons,\n [classes.labelExpandable]: !!expandable,\n })}\n >\n <HvOverflowTooltip data={label} />\n </div>\n )}\n\n {isOpen && expandable && (expanded ? <DropUpXS /> : <DropDownXS />)}\n </HvTypography>\n </HvTooltip>\n );\n }, [\n id,\n href,\n target,\n cx,\n classes.content,\n classes.link,\n classes.minimized,\n classes.label,\n classes.labelIcon,\n classes.labelExpandable,\n disabled,\n handleClick,\n handleMouseDown,\n expandable,\n icon,\n level,\n collapsible,\n treeviewMode,\n handleFocus,\n selectable,\n handleKeyDown,\n selected,\n expanded,\n label,\n disableTooltip,\n payload?.label,\n children,\n isOpen,\n useIcons,\n isChildSelected,\n nodeId,\n ]);\n\n const renderedChildren = useMemo(\n () =>\n children && (\n <ul\n id={setId(id, \"group\")}\n className={classes.group}\n role={treeviewMode ? \"group\" : undefined}\n >\n {children}\n </ul>\n ),\n [children, classes?.group, id, treeviewMode],\n );\n\n return (\n <li\n ref={handleRef}\n id={id ?? undefined}\n className={cx(classes.node, {\n [classes.disabled]: disabled,\n [classes.expandable]: expandable,\n [classes.collapsed]: expandable && !expanded,\n [classes.expanded]: expandable && expanded,\n [classes.selectable]: selectable && !disabled,\n [classes.unselectable]: !disabled && !selectable,\n [classes.selected]:\n (!disabled && selectable && selected) ||\n (!isOpen && useIcons && isChildSelected && isChildSelected(nodeId)),\n [classes.unselected]: !disabled && selectable && !selected,\n [classes.focused]: focused,\n [classes.hide]: !isOpen && !useIcons,\n className,\n })}\n data-hasicon={icon != null ? true : undefined}\n {...(mode === \"treeview\" && {\n role: \"treeitem\",\n \"aria-selected\": ariaSelected,\n \"aria-expanded\": expandable ? expanded : undefined,\n \"aria-disabled\": disabled ? true : undefined,\n })}\n {...others}\n >\n {renderedContent}\n {isOpen && (\n <DescendantProvider id={nodeId} level={level + 1}>\n {renderedChildren}\n </DescendantProvider>\n )}\n </li>\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeViewItem.js","sources":["../../../../src/VerticalNavigation/TreeView/TreeViewItem.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { DropDownXS, DropUpXS } from \"@hitachivantara/uikit-react-icons\";\n\nimport { useDefaultProps } from \"../../hooks/useDefaultProps\";\nimport { useForkRef } from \"../../hooks/useForkRef\";\nimport { HvOverflowTooltip } from \"../../OverflowTooltip\";\nimport { HvTooltip } from \"../../Tooltip\";\nimport {\n DescendantProvider,\n useDescendant,\n} from \"../../TreeView/internals/DescendantProvider\";\nimport { HvTypography } from \"../../Typography\";\nimport { ExtractNames } from \"../../utils/classes\";\nimport { setId } from \"../../utils/setId\";\nimport { VerticalNavigationContext } from \"../VerticalNavigationContext\";\nimport { IconWrapper } from \"./IconWrapper\";\nimport {\n TreeViewControlContext,\n TreeViewStateContext,\n} from \"./TreeViewContext\";\nimport { staticClasses, useClasses } from \"./TreeViewItem.styles\";\n\nexport { staticClasses as treeViewItemClasses };\n\nexport type HvVerticalNavigationTreeViewItemClasses = ExtractNames<\n typeof useClasses\n>;\n\nexport interface HvVerticalNavigationTreeViewItemProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Class names to be applied.\n */\n className?: string;\n /**\n * A Jss Object used to override or extend the styles applied to the Radio button.\n */\n classes?: HvVerticalNavigationTreeViewItemClasses;\n /**\n * Is the node disabled.\n */\n disabled?: boolean;\n /**\n * Can the node be selected.\n */\n selectable?: boolean;\n /**\n * The id of the node.\n */\n nodeId?: string;\n /**\n * The icon to display next to the node's label.\n */\n icon?: React.ReactNode;\n /**\n * The item label.\n */\n label?: React.ReactNode;\n /**\n * The url for the link.\n */\n href?: string;\n /**\n * The behavior when opening a link.\n */\n target?: string;\n /**\n * The node payload.\n */\n payload?: any;\n /**\n * @ignore\n */\n onClick?: any;\n /**\n * @ignore\n */\n onMouseDown?: any;\n /**\n * @ignore\n */\n onFocus?: any;\n /**\n * The content of the component.\n */\n children?: React.ReactNode;\n /**\n * @ignore\n */\n onMouseEnter?: any;\n /**\n * Disables the appearence of a tooltip on hovering an element ( Only applicable when the in collapsed mode)\n */\n disableTooltip?: boolean;\n}\n\nconst preventSelection = (event, disabled) => {\n if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {\n // Prevent text selection\n event.preventDefault();\n }\n};\n\nexport const HvVerticalNavigationTreeViewItem = forwardRef(\n (props: HvVerticalNavigationTreeViewItemProps, ref) => {\n const {\n id: idProp,\n className,\n classes: classesProp,\n\n disabled: disabledProp = false,\n\n selectable: selectableProp,\n\n nodeId,\n icon = null,\n label,\n href,\n target,\n payload,\n\n onClick,\n onMouseDown,\n onFocus,\n\n children,\n\n disableTooltip,\n\n ...others\n } = useDefaultProps(\"HvVerticalNavigationTreeViewItem\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const treeViewControlContext = useContext(TreeViewControlContext);\n const { isExpanded, isSelected, isFocused, isDisabled, isChildSelected } =\n useContext(TreeViewStateContext);\n\n const {\n treeId,\n mode,\n collapsible,\n toggleExpansion,\n multiSelect,\n selectNode,\n selectRange,\n disabledItemsFocusable,\n registerNode,\n unregisterNode,\n mapFirstChar,\n unMapFirstChar,\n focus,\n } = treeViewControlContext;\n\n const treeviewMode = mode === \"treeview\";\n\n let id: string | null = null;\n\n if (idProp != null) {\n id = idProp;\n } else if (treeId && nodeId) {\n id = `${treeId}-${nodeId}`;\n }\n\n const [treeitemElement, setTreeitemElement] = useState<HTMLLIElement>();\n const contentRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(setTreeitemElement, ref);\n\n const descendant = useMemo(\n () => ({\n element: treeitemElement!,\n id: nodeId!,\n }),\n [nodeId, treeitemElement],\n );\n\n const { isOpen, useIcons } = useContext(VerticalNavigationContext);\n\n const { index, parentId, level } = useDescendant(descendant);\n\n const expandable = collapsible && Array.isArray(children);\n const expanded = isExpanded ? isExpanded(nodeId) : false;\n const focused = isFocused ? isFocused(nodeId) : false;\n const selected = isSelected ? isSelected(nodeId) : false;\n const disabled = isDisabled ? isDisabled(nodeId) : false;\n\n const selectable =\n selectableProp != null\n ? selectableProp\n : !collapsible || !expandable || !isOpen;\n\n useEffect(() => {\n // On the first render a node's index will be -1. We want to wait for the real index.\n if (registerNode && unregisterNode && index !== -1) {\n registerNode({\n id: nodeId,\n idAttribute: id,\n index,\n parentId,\n selectable,\n expandable,\n disabled: disabledProp,\n onFocus,\n payload,\n });\n\n return () => {\n unregisterNode(nodeId);\n };\n }\n\n return undefined;\n }, [\n registerNode,\n unregisterNode,\n parentId,\n index,\n nodeId,\n expandable,\n disabledProp,\n id,\n selectable,\n onFocus,\n payload,\n ]);\n\n useEffect(() => {\n if (\n mapFirstChar &&\n unMapFirstChar &&\n label &&\n contentRef.current?.textContent\n ) {\n mapFirstChar(\n nodeId,\n contentRef.current?.textContent.substring(0, 1).toLowerCase(),\n );\n\n return () => {\n unMapFirstChar(nodeId);\n };\n }\n return undefined;\n }, [mapFirstChar, unMapFirstChar, nodeId, label]);\n\n let ariaSelected;\n if (multiSelect) {\n ariaSelected = selected;\n } else if (selected) {\n /* single-selection trees unset aria-selected on un-selected items.\n *\n * If the tree does not support multiple selection, aria-selected\n * is set to true for the selected node and it is not present on any other node in the tree.\n * Source: https://www.w3.org/TR/wai-aria-practices/#TreeView\n */\n ariaSelected = true;\n }\n\n const handleFocus = useCallback(\n (event) => {\n // DOM focus stays on the tree which manages focus with aria-activedescendant\n if (event.target === event.currentTarget) {\n (event.target.ownerDocument || document)\n .getElementById(treeId)\n .focus({ preventScroll: true });\n }\n\n const unfocusable = !disabledItemsFocusable && disabled;\n if (\n !focused &&\n event.currentTarget === event.target &&\n !unfocusable &&\n focus\n ) {\n focus(event, nodeId);\n }\n },\n [disabled, disabledItemsFocusable, focus, focused, nodeId, treeId],\n );\n\n const handleExpansion = useCallback(\n (event) => {\n if (!disabled) {\n if (treeviewMode && !focused && focus) {\n focus(event, nodeId);\n }\n\n const multiple =\n multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n // If already expanded and trying to toggle selection don't close\n if (\n expandable &&\n isOpen &&\n !(multiple && isExpanded && isExpanded(nodeId))\n ) {\n if (toggleExpansion) toggleExpansion(event, nodeId);\n }\n }\n },\n [\n disabled,\n expandable,\n focus,\n focused,\n isExpanded,\n multiSelect,\n nodeId,\n toggleExpansion,\n treeviewMode,\n isOpen,\n ],\n );\n\n const handleSelection = useCallback(\n (event) => {\n if (selectable && !disabled) {\n if (treeviewMode && !focused && focus) {\n focus(event, nodeId);\n }\n\n const multiple =\n multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n if (multiple) {\n if (event.shiftKey) {\n if (selectRange) return selectRange(event, { end: nodeId });\n } else if (selectNode) return selectNode(event, nodeId, true);\n } else if (selectNode) return selectNode(event, nodeId);\n } else {\n return false;\n }\n },\n [\n disabled,\n focus,\n focused,\n multiSelect,\n nodeId,\n selectNode,\n selectRange,\n selectable,\n treeviewMode,\n ],\n );\n\n const handleMouseDown = useCallback(\n (event) => {\n preventSelection(event, disabled);\n\n if (onMouseDown) {\n onMouseDown(event);\n }\n },\n [disabled, onMouseDown],\n );\n\n const handleClick = useCallback(\n (event) => {\n if (!disabled) {\n if (expandable && isOpen) {\n handleExpansion(event);\n }\n\n if (selectable) {\n handleSelection(event);\n }\n }\n\n if (onClick) {\n onClick(event);\n }\n },\n [\n disabled,\n expandable,\n handleExpansion,\n handleSelection,\n onClick,\n selectable,\n isOpen,\n ],\n );\n\n const handleKeyDown = useCallback(\n (event) => {\n let isEventHandled = false;\n const { key } = event;\n\n if (\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.currentTarget !== event.target\n ) {\n return;\n }\n if (contentRef.current === event.currentTarget) {\n if (key === \"Enter\" || key === \" \") {\n if (expandable && isOpen) {\n isEventHandled = handleExpansion(event) as unknown as boolean;\n }\n\n if (selectable) {\n isEventHandled = handleSelection(event) as boolean;\n }\n }\n\n if (isEventHandled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n [expandable, handleExpansion, handleSelection, selectable, isOpen],\n );\n\n const renderedContent = useMemo(() => {\n const buttonLinkProps = {\n href,\n target,\n };\n\n const hasChildren = !!children;\n const showTooltip = !hasChildren && !isOpen && !disableTooltip;\n\n const isLink = href !== undefined && !disabled;\n\n return (\n <HvTooltip placement=\"right\" title={showTooltip && label}>\n <HvTypography\n id={setId(id, \"button\")}\n component={isLink ? \"a\" : \"div\"}\n {...(isLink ? buttonLinkProps : null)}\n ref={contentRef}\n className={cx(classes.content, {\n [classes.link]: isLink,\n [classes.minimized]: !isOpen,\n })}\n variant=\"body\"\n disabled={disabled}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n style={{\n paddingLeft:\n (useIcons || !isOpen ? 0 : 10) +\n level * (collapsible ? 16 : 10),\n }}\n role={isLink ? undefined : \"button\"}\n {...(treeviewMode\n ? {\n tabIndex: -1,\n onFocus: handleFocus,\n }\n : {\n tabIndex: selectable || expandable ? 0 : -1,\n onKeyDown: handleKeyDown,\n \"aria-current\":\n (selectable && selected) ||\n (!isOpen && isChildSelected?.(nodeId))\n ? href\n ? \"page\"\n : true\n : undefined,\n \"aria-expanded\": expandable ? expanded : undefined,\n \"aria-controls\":\n isOpen && expandable ? setId(id, \"group\") : undefined,\n \"aria-label\": payload?.label,\n })}\n >\n <IconWrapper\n icon={useIcons && icon}\n label={payload?.label}\n hasChildren={hasChildren}\n showAvatar={!icon && useIcons}\n isOpen={isOpen}\n />\n\n {isOpen && (\n <div\n className={cx(classes.label, {\n [classes.labelIcon]: useIcons,\n [classes.labelExpandable]: !!expandable,\n })}\n >\n <HvOverflowTooltip data={label} />\n </div>\n )}\n\n {isOpen && expandable && (expanded ? <DropUpXS /> : <DropDownXS />)}\n </HvTypography>\n </HvTooltip>\n );\n }, [\n id,\n href,\n target,\n cx,\n classes.content,\n classes.link,\n classes.minimized,\n classes.label,\n classes.labelIcon,\n classes.labelExpandable,\n disabled,\n handleClick,\n handleMouseDown,\n expandable,\n icon,\n level,\n collapsible,\n treeviewMode,\n handleFocus,\n selectable,\n handleKeyDown,\n selected,\n expanded,\n label,\n disableTooltip,\n payload?.label,\n children,\n isOpen,\n useIcons,\n isChildSelected,\n nodeId,\n ]);\n\n const renderedChildren = useMemo(\n () =>\n children && (\n <ul\n id={setId(id, \"group\")}\n className={classes.group}\n role={treeviewMode ? \"group\" : undefined}\n >\n {children}\n </ul>\n ),\n [children, classes?.group, id, treeviewMode],\n );\n\n return (\n <li\n ref={handleRef}\n id={id ?? undefined}\n className={cx(classes.node, {\n [classes.disabled]: disabled,\n [classes.expandable]: expandable,\n [classes.collapsed]: expandable && !expanded,\n [classes.expanded]: expandable && expanded,\n [classes.selectable]: selectable && !disabled,\n [classes.unselectable]: !disabled && !selectable,\n [classes.selected]:\n (!disabled && selectable && selected) ||\n (!isOpen && useIcons && isChildSelected && isChildSelected(nodeId)),\n [classes.unselected]: !disabled && selectable && !selected,\n [classes.focused]: focused,\n [classes.hide]: !isOpen && !useIcons,\n className,\n })}\n data-hasicon={icon != null ? true : undefined}\n {...(mode === \"treeview\" && {\n role: \"treeitem\",\n \"aria-selected\": ariaSelected,\n \"aria-expanded\": expandable ? expanded : undefined,\n \"aria-disabled\": disabled ? true : undefined,\n })}\n {...others}\n >\n {renderedContent}\n {isOpen && (\n <DescendantProvider id={nodeId} level={level + 1}>\n {renderedChildren}\n </DescendantProvider>\n )}\n </li>\n );\n },\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useControlled.js","sources":["../../../src/hooks/useControlled.ts"],"sourcesContent":["// based in https://raw.githubusercontent.com/mui-org/material-ui/next/packages/material-ui/src/utils/useControlled.js\n// modifications:\n// 1. renamed default to initialState, to convey the same meaning of the useState hook.\n// 2. removed the console error when initialState changes; that is acceptable and just ignored, like in useState.\n// 3. the console error regarding switching from controlled to uncontrolled (or vice-versa) is sent synchronously\n// so the stacktrace shows the caller\n// 4. given that, the hook signature was simplified, no need for metadata\n\nimport { SetStateAction, useCallback, useRef, useState } from \"react\";\n\nexport const useControlled = (controlledProp: any, initialState: any) => {\n const { current: isControlled } = useRef(controlledProp !== undefined);\n const [valueState, setValue] = useState(initialState);\n const value = isControlled ? controlledProp : valueState;\n\n if (import.meta.env.DEV && isControlled !== (controlledProp !== undefined)) {\n // eslint-disable-next-line no-console\n console.error(\n [\n `A component is changing the ${\n isControlled ? \"\" : \"un\"\n }controlled state to be ${isControlled ? \"un\" : \"\"}controlled.`,\n \"Elements should not switch from uncontrolled to controlled (or vice versa).\",\n \"Decide between using a controlled or uncontrolled element for the lifetime of the component.\",\n \"The nature of the state is determined during the first render, it's considered controlled if the value is not `undefined`.\",\n ].join(\"\\n\"),\n );\n }\n\n const setValueIfUncontrolled = useCallback(\n (newValue: SetStateAction<any>) => {\n if (!isControlled) {\n setValue(newValue);\n }\n },\n [isControlled],\n );\n\n return [value, setValueIfUncontrolled];\n};\n"],"names":[],"mappings":";AAUa,MAAA,gBAAgB,CAAC,gBAAqB,iBAAsB;AACvE,QAAM,EAAE,SAAS,aAAiB,IAAA,OAAO,mBAAmB,MAAS;AACrE,QAAM,CAAC,YAAY,QAAQ,IAAI,SAAS,YAAY;AAC9C,QAAA,QAAQ,eAAe,iBAAiB;AAgB9C,QAAM,yBAAyB;AAAA,IAC7B,CAAC,aAAkC;AACjC,UAAI,CAAC,cAAc;AACjB,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAGR,SAAA,CAAC,OAAO,sBAAsB;AACvC;"}
1
+ {"version":3,"file":"useControlled.js","sources":["../../../src/hooks/useControlled.ts"],"sourcesContent":["// based in https://raw.githubusercontent.com/mui-org/material-ui/next/packages/material-ui/src/utils/useControlled.js\n// modifications:\n// 1. renamed default to initialState, to convey the same meaning of the useState hook.\n// 2. removed the console error when initialState changes; that is acceptable and just ignored, like in useState.\n// 3. the console error regarding switching from controlled to uncontrolled (or vice-versa) is sent synchronously\n// so the stacktrace shows the caller\n// 4. given that, the hook signature was simplified, no need for metadata\n\nimport { useCallback, useRef, useState } from \"react\";\n\nexport const useControlled = <T>(\n controlledProp: T | undefined,\n initialState: T | (() => T),\n) => {\n const { current: isControlled } = useRef(controlledProp !== undefined);\n const [valueState, setValue] = useState(initialState);\n const value = isControlled ? (controlledProp as T) : valueState;\n\n if (import.meta.env.DEV && isControlled !== (controlledProp !== undefined)) {\n // eslint-disable-next-line no-console\n console.error(\n [\n `A component is changing the ${\n isControlled ? \"\" : \"un\"\n }controlled state to be ${isControlled ? \"un\" : \"\"}controlled.`,\n \"Elements should not switch from uncontrolled to controlled (or vice versa).\",\n \"Decide between using a controlled or uncontrolled element for the lifetime of the component.\",\n \"The nature of the state is determined during the first render, it's considered controlled if the value is not `undefined`.\",\n ].join(\"\\n\"),\n );\n }\n\n const setValueIfUncontrolled = useCallback(\n (newValue: React.SetStateAction<T>) => {\n if (!isControlled) {\n setValue(newValue);\n }\n },\n [isControlled],\n );\n\n return [value, setValueIfUncontrolled] as const;\n};\n"],"names":[],"mappings":";AAUa,MAAA,gBAAgB,CAC3B,gBACA,iBACG;AACH,QAAM,EAAE,SAAS,aAAiB,IAAA,OAAO,mBAAmB,MAAS;AACrE,QAAM,CAAC,YAAY,QAAQ,IAAI,SAAS,YAAY;AAC9C,QAAA,QAAQ,eAAgB,iBAAuB;AAgBrD,QAAM,yBAAyB;AAAA,IAC7B,CAAC,aAAsC;AACrC,UAAI,CAAC,cAAc;AACjB,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EAAA;AAGR,SAAA,CAAC,OAAO,sBAAsB;AACvC;"}
@@ -79,6 +79,7 @@ import { RefAttributes } from 'react';
79
79
  import { RefObject } from 'react';
80
80
  import { Renderer } from 'react-table';
81
81
  import { Row } from 'react-table';
82
+ import { SetStateAction } from 'react';
82
83
  import { SlideProps } from '@mui/material/Slide';
83
84
  import { SliderProps } from 'rc-slider';
84
85
  import { SliderRef } from 'rc-slider';
@@ -630,8 +631,8 @@ export declare const datePickerClasses: {
630
631
  icon: "HvDatePicker-icon";
631
632
  inputText: "HvDatePicker-inputText";
632
633
  action: "HvDatePicker-action";
633
- error: "HvDatePicker-error";
634
634
  dropdown: "HvDatePicker-dropdown";
635
+ error: "HvDatePicker-error";
635
636
  labelContainer: "HvDatePicker-labelContainer";
636
637
  actionContainer: "HvDatePicker-actionContainer";
637
638
  dropdownHeaderInvalid: "HvDatePicker-dropdownHeaderInvalid";
@@ -850,9 +851,9 @@ export declare const dropdownClasses: {
850
851
  disabled: "HvDropdown-disabled";
851
852
  readOnly: "HvDropdown-readOnly";
852
853
  placeholderClosed: "HvDropdown-placeholderClosed";
854
+ dropdown: "HvDropdown-dropdown";
853
855
  error: "HvDropdown-error";
854
856
  arrow: "HvDropdown-arrow";
855
- dropdown: "HvDropdown-dropdown";
856
857
  labelContainer: "HvDropdown-labelContainer";
857
858
  selectionDisabled: "HvDropdown-selectionDisabled";
858
859
  dropdownHeader: "HvDropdown-dropdownHeader";
@@ -4142,6 +4143,8 @@ export declare type HvInlineEditorClasses = ExtractNames<typeof useClasses_81>;
4142
4143
  export declare interface HvInlineEditorProps extends HvBaseProps<HTMLDivElement, "onBlur" | "onChange"> {
4143
4144
  /** The value of the form element. */
4144
4145
  value?: string;
4146
+ /** The default value of the form element. */
4147
+ defaultValue?: string;
4145
4148
  /** Whether the Edit icon should always be visible */
4146
4149
  showIcon?: boolean;
4147
4150
  /** Component to use as the input. The component "inherit" from `HvBaseInput` (such as `HvInput` or `HvTextArea`) */
@@ -7578,7 +7581,7 @@ export declare interface HvVerticalNavigationTreeViewProps {
7578
7581
  * @param {object} event The event source of the callback.
7579
7582
  * @param {array} nodeIds The ids of the expanded nodes (old and new).
7580
7583
  */
7581
- onToggle?: (event: any, nodeIds: any) => void;
7584
+ onToggle?: (event: any, nodeIds: string[]) => void;
7582
7585
  /**
7583
7586
  * If `true`, will allow focus on disabled items.
7584
7587
  * @default false
@@ -7810,8 +7813,8 @@ export declare const multiButtonClasses: {
7810
7813
  primaryGhost: "HvMultiButton-primaryGhost";
7811
7814
  splitGroup: "HvMultiButton-splitGroup";
7812
7815
  splitGroupDisabled: "HvMultiButton-splitGroupDisabled";
7813
- primarySubtle: "HvMultiButton-primarySubtle";
7814
7816
  splitContainer: "HvMultiButton-splitContainer";
7817
+ primarySubtle: "HvMultiButton-primarySubtle";
7815
7818
  firstButton: "HvMultiButton-firstButton";
7816
7819
  lastButton: "HvMultiButton-lastButton";
7817
7820
  };
@@ -9996,7 +9999,7 @@ declare const useClasses_56: (classesProp?: Partial<Record<"root" | "sortDropdow
9996
9999
  cx: (...args: any) => string;
9997
10000
  };
9998
10001
 
9999
- declare const useClasses_57: (classesProp?: Partial<Record<"description" | "label" | "root" | "placeholder" | "disabled" | "readOnly" | "placeholderClosed" | "error" | "arrow" | "dropdown" | "labelContainer" | "selectionDisabled" | "dropdownHeader" | "dropdownHeaderInvalid" | "dropdownHeaderOpen" | "dropdownListContainer" | "rootList", string>>, addStatic?: boolean) => {
10002
+ declare const useClasses_57: (classesProp?: Partial<Record<"description" | "label" | "root" | "placeholder" | "disabled" | "readOnly" | "placeholderClosed" | "dropdown" | "error" | "arrow" | "labelContainer" | "selectionDisabled" | "dropdownHeader" | "dropdownHeaderInvalid" | "dropdownHeaderOpen" | "dropdownListContainer" | "rootList", string>>, addStatic?: boolean) => {
10000
10003
  classes: {
10001
10004
  description: string;
10002
10005
  label: string;
@@ -10005,9 +10008,9 @@ declare const useClasses_57: (classesProp?: Partial<Record<"description" | "labe
10005
10008
  disabled: string;
10006
10009
  readOnly: string;
10007
10010
  placeholderClosed: string;
10011
+ dropdown: string;
10008
10012
  error: string;
10009
10013
  arrow: string;
10010
- dropdown: string;
10011
10014
  labelContainer: string;
10012
10015
  selectionDisabled: string;
10013
10016
  dropdownHeader: string;
@@ -10041,7 +10044,7 @@ declare const useClasses_58: (classesProp?: Partial<Record<"selection" | "select
10041
10044
  cx: (...args: any) => string;
10042
10045
  };
10043
10046
 
10044
- declare const useClasses_59: (classesProp?: Partial<Record<"description" | "label" | "root" | "panel" | "icon" | "inputText" | "action" | "error" | "dropdown" | "labelContainer" | "actionContainer" | "dropdownHeaderInvalid" | "dropdownHeaderOpen" | "leftContainer" | "rightContainer" | "dateText", string>>, addStatic?: boolean) => {
10047
+ declare const useClasses_59: (classesProp?: Partial<Record<"description" | "label" | "root" | "panel" | "icon" | "inputText" | "action" | "dropdown" | "error" | "labelContainer" | "actionContainer" | "dropdownHeaderInvalid" | "dropdownHeaderOpen" | "leftContainer" | "rightContainer" | "dateText", string>>, addStatic?: boolean) => {
10045
10048
  classes: {
10046
10049
  description: string;
10047
10050
  label: string;
@@ -10050,8 +10053,8 @@ declare const useClasses_59: (classesProp?: Partial<Record<"description" | "labe
10050
10053
  icon: string;
10051
10054
  inputText: string;
10052
10055
  action: string;
10053
- error: string;
10054
10056
  dropdown: string;
10057
+ error: string;
10055
10058
  labelContainer: string;
10056
10059
  actionContainer: string;
10057
10060
  dropdownHeaderInvalid: string;
@@ -10574,7 +10577,7 @@ declare const useClasses_87: (classesProp?: Partial<Record<"root" | "formContain
10574
10577
  cx: (...args: any) => string;
10575
10578
  };
10576
10579
 
10577
- declare const useClasses_88: (classesProp?: Partial<Record<"secondary" | "primary" | "vertical" | "split" | "root" | "secondarySubtle" | "selected" | "button" | "secondaryGhost" | "splitDisabled" | "multiple" | "primaryGhost" | "splitGroup" | "splitGroupDisabled" | "primarySubtle" | "splitContainer" | "firstButton" | "lastButton", string>>, addStatic?: boolean) => {
10580
+ declare const useClasses_88: (classesProp?: Partial<Record<"secondary" | "primary" | "vertical" | "split" | "root" | "secondarySubtle" | "selected" | "button" | "secondaryGhost" | "splitDisabled" | "multiple" | "primaryGhost" | "splitGroup" | "splitGroupDisabled" | "splitContainer" | "primarySubtle" | "firstButton" | "lastButton", string>>, addStatic?: boolean) => {
10578
10581
  classes: {
10579
10582
  secondary: string;
10580
10583
  primary: string;
@@ -10590,8 +10593,8 @@ declare const useClasses_88: (classesProp?: Partial<Record<"secondary" | "primar
10590
10593
  primaryGhost: string;
10591
10594
  splitGroup: string;
10592
10595
  splitGroupDisabled: string;
10593
- primarySubtle: string;
10594
10596
  splitContainer: string;
10597
+ primarySubtle: string;
10595
10598
  firstButton: string;
10596
10599
  lastButton: string;
10597
10600
  };
@@ -10806,7 +10809,7 @@ export declare const useClickOutside: <T extends HTMLElement = HTMLElement>(ref:
10806
10809
 
10807
10810
  export declare const useComputation: (valueFn: any, valueFallback?: any) => any[];
10808
10811
 
10809
- export declare const useControlled: (controlledProp: any, initialState: any) => any[];
10812
+ export declare const useControlled: <T>(controlledProp: T | undefined, initialState: T | (() => T)) => readonly [T, (newValue: SetStateAction<T>) => void];
10810
10813
 
10811
10814
  export declare function useCss(): {
10812
10815
  css: {
@@ -11100,6 +11103,7 @@ export declare interface UseHvTableStylesTableRowProps {
11100
11103
 
11101
11104
  export declare function useHvTreeItem(nodeId: string): {
11102
11105
  instance: (UseTreeViewNodesInstance & UseTreeViewExpansionInstance & UseTreeViewSelectionInstance & UseTreeViewFocusInstance & UseTreeViewKeyboardNavigationInstance) | null;
11106
+ level: number;
11103
11107
  disabled: boolean;
11104
11108
  expanded: boolean;
11105
11109
  selected: boolean;