@fluentui/react-tree 9.4.12 → 9.4.14
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.
- package/CHANGELOG.md +30 -2
- package/lib/components/FlatTree/useFlatTree.js +13 -29
- package/lib/components/FlatTree/useFlatTree.js.map +1 -1
- package/lib/components/FlatTree/useHeadlessFlatTree.js +5 -23
- package/lib/components/FlatTree/useHeadlessFlatTree.js.map +1 -1
- package/lib/components/Tree/useNestedControllableCheckedItems.js.map +1 -1
- package/lib/components/Tree/useTree.js +26 -46
- package/lib/components/Tree/useTree.js.map +1 -1
- package/lib/{components/FlatTree → hooks}/useFlatTreeNavigation.js +35 -27
- package/lib/hooks/useFlatTreeNavigation.js.map +1 -0
- package/lib/hooks/useHTMLElementWalkerRef.js +17 -0
- package/lib/hooks/useHTMLElementWalkerRef.js.map +1 -0
- package/lib/hooks/useRootTree.js +24 -20
- package/lib/hooks/useRootTree.js.map +1 -1
- package/lib/hooks/useRovingTabIndexes.js +1 -1
- package/lib/hooks/useRovingTabIndexes.js.map +1 -1
- package/lib/hooks/useTreeNavigation.js +66 -0
- package/lib/hooks/useTreeNavigation.js.map +1 -0
- package/lib-commonjs/components/FlatTree/useFlatTree.js +13 -29
- package/lib-commonjs/components/FlatTree/useFlatTree.js.map +1 -1
- package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js +5 -23
- package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js.map +1 -1
- package/lib-commonjs/components/Tree/useTree.js +26 -46
- package/lib-commonjs/components/Tree/useTree.js.map +1 -1
- package/lib-commonjs/{components/FlatTree → hooks}/useFlatTreeNavigation.js +35 -26
- package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -0
- package/lib-commonjs/hooks/useHTMLElementWalkerRef.js +28 -0
- package/lib-commonjs/hooks/useHTMLElementWalkerRef.js.map +1 -0
- package/lib-commonjs/hooks/useRootTree.js +24 -20
- package/lib-commonjs/hooks/useRootTree.js.map +1 -1
- package/lib-commonjs/hooks/useRovingTabIndexes.js +1 -1
- package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
- package/lib-commonjs/hooks/useTreeNavigation.js +77 -0
- package/lib-commonjs/hooks/useTreeNavigation.js.map +1 -0
- package/package.json +7 -7
- package/lib/components/FlatTree/useFlatTreeNavigation.js.map +0 -1
- package/lib/components/Tree/useTreeNavigation.js +0 -52
- package/lib/components/Tree/useTreeNavigation.js.map +0 -1
- package/lib-commonjs/components/FlatTree/useFlatTreeNavigation.js.map +0 -1
- package/lib-commonjs/components/Tree/useTreeNavigation.js +0 -62
- package/lib-commonjs/components/Tree/useTreeNavigation.js.map +0 -1
|
@@ -8,29 +8,38 @@ Object.defineProperty(exports, "useFlatTreeNavigation", {
|
|
|
8
8
|
return useFlatTreeNavigation;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
const
|
|
11
|
+
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
12
12
|
const _reactutilities = require("@fluentui/react-utilities");
|
|
13
|
-
const _nextTypeAheadElement = require("
|
|
14
|
-
const _tokens = require("
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
13
|
+
const _nextTypeAheadElement = require("../utils/nextTypeAheadElement");
|
|
14
|
+
const _tokens = require("../utils/tokens");
|
|
15
|
+
const _useRovingTabIndexes = require("./useRovingTabIndexes");
|
|
16
|
+
const _getTreeItemValueFromElement = require("../utils/getTreeItemValueFromElement");
|
|
17
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
18
|
+
const _useHTMLElementWalkerRef = require("./useHTMLElementWalkerRef");
|
|
18
19
|
function useFlatTreeNavigation() {
|
|
19
|
-
const {
|
|
20
|
-
const { rove, initialize } = (0, _useRovingTabIndexes.useRovingTabIndex)(
|
|
21
|
-
|
|
22
|
-
if (
|
|
20
|
+
const { walkerRef, rootRef: walkerRootRef } = (0, _useHTMLElementWalkerRef.useHTMLElementWalkerRef)();
|
|
21
|
+
const { rove, initialize: initializeRovingTabIndex } = (0, _useRovingTabIndexes.useRovingTabIndex)();
|
|
22
|
+
const rootRefCallback = _react.useCallback((root)=>{
|
|
23
|
+
if (walkerRef.current && root) {
|
|
24
|
+
initializeRovingTabIndex(walkerRef.current);
|
|
25
|
+
}
|
|
26
|
+
}, [
|
|
27
|
+
initializeRovingTabIndex,
|
|
28
|
+
walkerRef
|
|
29
|
+
]);
|
|
30
|
+
function getNextElement(data) {
|
|
31
|
+
if (!walkerRef.current) {
|
|
23
32
|
return null;
|
|
24
33
|
}
|
|
25
34
|
switch(data.type){
|
|
26
35
|
case _tokens.treeDataTypes.Click:
|
|
27
36
|
return data.target;
|
|
28
37
|
case _tokens.treeDataTypes.TypeAhead:
|
|
29
|
-
|
|
30
|
-
return (0, _nextTypeAheadElement.nextTypeAheadElement)(
|
|
38
|
+
walkerRef.current.currentElement = data.target;
|
|
39
|
+
return (0, _nextTypeAheadElement.nextTypeAheadElement)(walkerRef.current, data.event.key);
|
|
31
40
|
case _tokens.treeDataTypes.ArrowLeft:
|
|
32
41
|
{
|
|
33
|
-
const nextElement = parentElement(data.parentValue,
|
|
42
|
+
const nextElement = parentElement(data.parentValue, walkerRef.current);
|
|
34
43
|
if (!nextElement && process.env.NODE_ENV !== 'production') {
|
|
35
44
|
// eslint-disable-next-line no-console
|
|
36
45
|
console.warn(`@fluentui/react-tree [useFlatTreeNavigation]:
|
|
@@ -41,8 +50,8 @@ No parent element found for the current element:`, data.target);
|
|
|
41
50
|
}
|
|
42
51
|
case _tokens.treeDataTypes.ArrowRight:
|
|
43
52
|
{
|
|
44
|
-
|
|
45
|
-
const nextElement = firstChild(data.target,
|
|
53
|
+
walkerRef.current.currentElement = data.target;
|
|
54
|
+
const nextElement = firstChild(data.target, walkerRef.current);
|
|
46
55
|
if (!nextElement && process.env.NODE_ENV !== 'production') {
|
|
47
56
|
const ariaLevel = Number(data.target.getAttribute('aria-level'));
|
|
48
57
|
// eslint-disable-next-line no-console
|
|
@@ -54,28 +63,28 @@ was found after the current element!`, data.target);
|
|
|
54
63
|
return nextElement;
|
|
55
64
|
}
|
|
56
65
|
case _tokens.treeDataTypes.End:
|
|
57
|
-
|
|
58
|
-
return
|
|
66
|
+
walkerRef.current.currentElement = walkerRef.current.root;
|
|
67
|
+
return walkerRef.current.lastChild();
|
|
59
68
|
case _tokens.treeDataTypes.Home:
|
|
60
|
-
|
|
61
|
-
return
|
|
69
|
+
walkerRef.current.currentElement = walkerRef.current.root;
|
|
70
|
+
return walkerRef.current.firstChild();
|
|
62
71
|
case _tokens.treeDataTypes.ArrowDown:
|
|
63
|
-
|
|
64
|
-
return
|
|
72
|
+
walkerRef.current.currentElement = data.target;
|
|
73
|
+
return walkerRef.current.nextElement();
|
|
65
74
|
case _tokens.treeDataTypes.ArrowUp:
|
|
66
|
-
|
|
67
|
-
return
|
|
75
|
+
walkerRef.current.currentElement = data.target;
|
|
76
|
+
return walkerRef.current.previousElement();
|
|
68
77
|
}
|
|
69
78
|
}
|
|
70
|
-
const navigate = (0, _reactutilities.useEventCallback)((data
|
|
71
|
-
const nextElement = getNextElement(data
|
|
79
|
+
const navigate = (0, _reactutilities.useEventCallback)((data)=>{
|
|
80
|
+
const nextElement = getNextElement(data);
|
|
72
81
|
if (nextElement) {
|
|
73
82
|
rove(nextElement);
|
|
74
83
|
}
|
|
75
84
|
});
|
|
76
85
|
return {
|
|
77
86
|
navigate,
|
|
78
|
-
|
|
87
|
+
rootRef: (0, _reactutilities.useMergedRefs)(walkerRootRef, rootRefCallback)
|
|
79
88
|
};
|
|
80
89
|
}
|
|
81
90
|
function firstChild(target, treeWalker) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useFlatTreeNavigation.js"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { dataTreeItemValueAttrName } from '../utils/getTreeItemValueFromElement';\nimport * as React from 'react';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalkerRef';\nexport function useFlatTreeNavigation() {\n const { walkerRef, rootRef: walkerRootRef } = useHTMLElementWalkerRef();\n const { rove, initialize: initializeRovingTabIndex } = useRovingTabIndex();\n const rootRefCallback = React.useCallback((root)=>{\n if (walkerRef.current && root) {\n initializeRovingTabIndex(walkerRef.current);\n }\n }, [\n initializeRovingTabIndex,\n walkerRef\n ]);\n function getNextElement(data) {\n if (!walkerRef.current) {\n return null;\n }\n switch(data.type){\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walkerRef.current.currentElement = data.target;\n return nextTypeAheadElement(walkerRef.current, data.event.key);\n case treeDataTypes.ArrowLeft:\n {\n const nextElement = parentElement(data.parentValue, walkerRef.current);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`@fluentui/react-tree [useFlatTreeNavigation]:\n\\'ArrowLeft\\' navigation was not possible.\nNo parent element found for the current element:`, data.target);\n }\n return nextElement;\n }\n case treeDataTypes.ArrowRight:\n {\n walkerRef.current.currentElement = data.target;\n const nextElement = firstChild(data.target, walkerRef.current);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n const ariaLevel = Number(data.target.getAttribute('aria-level'));\n // eslint-disable-next-line no-console\n console.warn(`@fluentui/react-tree [useFlatTreeNavigation]:\n\\'ArrowRight\\' navigation was not possible.\nNo element with \"aria-posinset=1\" and \"aria-level=${ariaLevel + 1}\"\nwas found after the current element!`, data.target);\n }\n return nextElement;\n }\n case treeDataTypes.End:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.lastChild();\n case treeDataTypes.Home:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.firstChild();\n case treeDataTypes.ArrowDown:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.nextElement();\n case treeDataTypes.ArrowUp:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.previousElement();\n }\n }\n const navigate = useEventCallback((data)=>{\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return {\n navigate,\n rootRef: useMergedRefs(walkerRootRef, rootRefCallback)\n };\n}\nfunction firstChild(target, treeWalker) {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\nfunction parentElement(parentValue, treeWalker) {\n if (parentValue === undefined) {\n return null;\n }\n return treeWalker.root.querySelector(`[${dataTreeItemValueAttrName}=\"${parentValue}\"]`);\n}\n"],"names":["useFlatTreeNavigation","walkerRef","rootRef","walkerRootRef","useHTMLElementWalkerRef","rove","initialize","initializeRovingTabIndex","useRovingTabIndex","rootRefCallback","React","useCallback","root","current","getNextElement","data","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","nextElement","parentElement","parentValue","process","env","NODE_ENV","console","warn","ArrowRight","firstChild","ariaLevel","Number","getAttribute","End","lastChild","Home","ArrowDown","ArrowUp","previousElement","navigate","useEventCallback","useMergedRefs","treeWalker","nextElementAriaPosInSet","nextElementAriaLevel","targetAriaLevel","undefined","querySelector","dataTreeItemValueAttrName"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useHTMLElementWalkerRef", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return useHTMLElementWalkerRef;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
13
|
+
const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
|
|
14
|
+
const _createHTMLElementWalker = require("../utils/createHTMLElementWalker");
|
|
15
|
+
const _treeItemFilter = require("../utils/treeItemFilter");
|
|
16
|
+
function useHTMLElementWalkerRef() {
|
|
17
|
+
const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
|
|
18
|
+
const walkerRef = _react.useRef();
|
|
19
|
+
const rootRef = _react.useCallback((root)=>{
|
|
20
|
+
walkerRef.current = targetDocument && root ? (0, _createHTMLElementWalker.createHTMLElementWalker)(root, targetDocument, _treeItemFilter.treeItemFilter) : undefined;
|
|
21
|
+
}, [
|
|
22
|
+
targetDocument
|
|
23
|
+
]);
|
|
24
|
+
return {
|
|
25
|
+
walkerRef,
|
|
26
|
+
rootRef
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useHTMLElementWalkerRef.js"],"sourcesContent":["import * as React from 'react';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { createHTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nexport function useHTMLElementWalkerRef() {\n const { targetDocument } = useFluent_unstable();\n const walkerRef = React.useRef();\n const rootRef = React.useCallback((root)=>{\n walkerRef.current = targetDocument && root ? createHTMLElementWalker(root, targetDocument, treeItemFilter) : undefined;\n }, [\n targetDocument\n ]);\n return {\n walkerRef,\n rootRef\n };\n}\n"],"names":["useHTMLElementWalkerRef","targetDocument","useFluent_unstable","walkerRef","React","useRef","rootRef","useCallback","root","current","createHTMLElementWalker","treeItemFilter","undefined"],"mappings":";;;;+BAIgBA;;;eAAAA;;;;iEAJO;qCACY;yCACK;gCACT;AACxB,SAASA;IACZ,MAAM,EAAEC,cAAc,EAAE,GAAGC,IAAAA,uCAAkB;IAC7C,MAAMC,YAAYC,OAAMC,MAAM;IAC9B,MAAMC,UAAUF,OAAMG,WAAW,CAAC,CAACC;QAC/BL,UAAUM,OAAO,GAAGR,kBAAkBO,OAAOE,IAAAA,gDAAuB,EAACF,MAAMP,gBAAgBU,8BAAc,IAAIC;IACjH,GAAG;QACCX;KACH;IACD,OAAO;QACHE;QACAG;IACJ;AACJ"}
|
|
@@ -24,29 +24,41 @@ function useRootTree(props, ref) {
|
|
|
24
24
|
const checkedItems = _react.useMemo(()=>(0, _createCheckedItems.createCheckedItems)(props.checkedItems), [
|
|
25
25
|
props.checkedItems
|
|
26
26
|
]);
|
|
27
|
-
const requestOpenChange = (
|
|
27
|
+
const requestOpenChange = (request)=>{
|
|
28
28
|
var _props_onOpenChange;
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const open = request.itemType === 'branch' && !openItems.has(request.value);
|
|
30
|
+
const nextOpenItems = (0, _useControllableOpenItems.createNextOpenItems)({
|
|
31
|
+
value: request.value,
|
|
32
|
+
open
|
|
33
|
+
}, openItems);
|
|
34
|
+
(_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, request.event, {
|
|
35
|
+
...request,
|
|
36
|
+
open,
|
|
32
37
|
openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()
|
|
33
38
|
});
|
|
34
39
|
};
|
|
35
|
-
const requestCheckedChange = (
|
|
40
|
+
const requestCheckedChange = (request)=>{
|
|
36
41
|
var _props_onCheckedChange;
|
|
37
|
-
|
|
42
|
+
if (selectionMode === 'none') {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
(_props_onCheckedChange = props.onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(props, request.event, {
|
|
46
|
+
...request,
|
|
47
|
+
selectionMode,
|
|
48
|
+
checkedItems: checkedItems.dangerouslyGetInternalMap_unstable()
|
|
49
|
+
});
|
|
38
50
|
};
|
|
39
|
-
const requestNavigation = (
|
|
51
|
+
const requestNavigation = (request)=>{
|
|
40
52
|
var _props_onNavigation;
|
|
41
|
-
(_props_onNavigation = props.onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(props,
|
|
42
|
-
switch(
|
|
53
|
+
(_props_onNavigation = props.onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(props, request.event, request);
|
|
54
|
+
switch(request.type){
|
|
43
55
|
case _tokens.treeDataTypes.ArrowDown:
|
|
44
56
|
case _tokens.treeDataTypes.ArrowUp:
|
|
45
57
|
case _tokens.treeDataTypes.Home:
|
|
46
58
|
case _tokens.treeDataTypes.End:
|
|
47
59
|
// stop the default behavior of the event
|
|
48
60
|
// which is to scroll the page
|
|
49
|
-
|
|
61
|
+
request.event.preventDefault();
|
|
50
62
|
}
|
|
51
63
|
};
|
|
52
64
|
const requestTreeResponse = (0, _reactutilities.useEventCallback)((request)=>{
|
|
@@ -54,17 +66,9 @@ function useRootTree(props, ref) {
|
|
|
54
66
|
case 'navigate':
|
|
55
67
|
return requestNavigation(request);
|
|
56
68
|
case 'open':
|
|
57
|
-
return requestOpenChange(
|
|
58
|
-
...request,
|
|
59
|
-
open: request.itemType === 'branch' && !openItems.has(request.value),
|
|
60
|
-
openItems: openItems.dangerouslyGetInternalSet_unstable()
|
|
61
|
-
});
|
|
69
|
+
return requestOpenChange(request);
|
|
62
70
|
case 'selection':
|
|
63
|
-
return requestCheckedChange(
|
|
64
|
-
...request,
|
|
65
|
-
selectionMode: selectionMode,
|
|
66
|
-
checkedItems: checkedItems.dangerouslyGetInternalMap_unstable()
|
|
67
|
-
});
|
|
71
|
+
return requestCheckedChange(request);
|
|
68
72
|
}
|
|
69
73
|
});
|
|
70
74
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useRootTree.js"],"sourcesContent":["import { getIntrinsicElementProps, useEventCallback, slot } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createOpenItems } from '../utils/createOpenItems';\nimport { createCheckedItems } from '../utils/createCheckedItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { createNextOpenItems } from './useControllableOpenItems';\n/**\n * Create the state required to render the root level tree.\n *\n * @param props - props from this instance of tree\n * @param ref - reference to root HTMLElement of tree\n */ export function useRootTree(props, ref) {\n warnIfNoProperPropsRootTree(props);\n const { appearance = 'subtle', size = 'medium', selectionMode = 'none' } = props;\n const openItems = React.useMemo(()=>createOpenItems(props.openItems), [\n props.openItems\n ]);\n const checkedItems = React.useMemo(()=>createCheckedItems(props.checkedItems), [\n props.checkedItems\n ]);\n const requestOpenChange = (
|
|
1
|
+
{"version":3,"sources":["useRootTree.js"],"sourcesContent":["import { getIntrinsicElementProps, useEventCallback, slot } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createOpenItems } from '../utils/createOpenItems';\nimport { createCheckedItems } from '../utils/createCheckedItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { createNextOpenItems } from './useControllableOpenItems';\n/**\n * Create the state required to render the root level tree.\n *\n * @param props - props from this instance of tree\n * @param ref - reference to root HTMLElement of tree\n */ export function useRootTree(props, ref) {\n warnIfNoProperPropsRootTree(props);\n const { appearance = 'subtle', size = 'medium', selectionMode = 'none' } = props;\n const openItems = React.useMemo(()=>createOpenItems(props.openItems), [\n props.openItems\n ]);\n const checkedItems = React.useMemo(()=>createCheckedItems(props.checkedItems), [\n props.checkedItems\n ]);\n const requestOpenChange = (request)=>{\n var _props_onOpenChange;\n const open = request.itemType === 'branch' && !openItems.has(request.value);\n const nextOpenItems = createNextOpenItems({\n value: request.value,\n open\n }, openItems);\n (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, request.event, {\n ...request,\n open,\n openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()\n });\n };\n const requestCheckedChange = (request)=>{\n var _props_onCheckedChange;\n if (selectionMode === 'none') {\n return;\n }\n (_props_onCheckedChange = props.onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(props, request.event, {\n ...request,\n selectionMode,\n checkedItems: checkedItems.dangerouslyGetInternalMap_unstable()\n });\n };\n const requestNavigation = (request)=>{\n var _props_onNavigation;\n (_props_onNavigation = props.onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(props, request.event, request);\n switch(request.type){\n case treeDataTypes.ArrowDown:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.Home:\n case treeDataTypes.End:\n // stop the default behavior of the event\n // which is to scroll the page\n request.event.preventDefault();\n }\n };\n const requestTreeResponse = useEventCallback((request)=>{\n switch(request.requestType){\n case 'navigate':\n return requestNavigation(request);\n case 'open':\n return requestOpenChange(request);\n case 'selection':\n return requestCheckedChange(request);\n }\n });\n return {\n components: {\n root: 'div'\n },\n contextType: 'root',\n selectionMode,\n open: true,\n appearance,\n size,\n level: 1,\n openItems,\n checkedItems,\n requestTreeResponse,\n root: slot.always(getIntrinsicElementProps('div', {\n // FIXME:\n // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`\n // but since it would be a breaking change to fix it, we are casting ref to it's proper type\n ref: ref,\n role: 'tree',\n 'aria-multiselectable': selectionMode === 'multiselect' ? true : undefined,\n ...props\n }), {\n elementType: 'div'\n })\n };\n}\nfunction warnIfNoProperPropsRootTree(props) {\n if (process.env.NODE_ENV === 'development') {\n if (!props['aria-label'] && !props['aria-labelledby']) {\n // eslint-disable-next-line no-console\n console.warn(`@fluentui/react-tree [useRootTree]:\nTree must have either a \\`aria-label\\` or \\`aria-labelledby\\` property defined`);\n }\n }\n}\n"],"names":["useRootTree","props","ref","warnIfNoProperPropsRootTree","appearance","size","selectionMode","openItems","React","useMemo","createOpenItems","checkedItems","createCheckedItems","requestOpenChange","request","_props_onOpenChange","open","itemType","has","value","nextOpenItems","createNextOpenItems","onOpenChange","call","event","dangerouslyGetInternalSet_unstable","requestCheckedChange","_props_onCheckedChange","onCheckedChange","dangerouslyGetInternalMap_unstable","requestNavigation","_props_onNavigation","onNavigation","type","treeDataTypes","ArrowDown","ArrowUp","Home","End","preventDefault","requestTreeResponse","useEventCallback","requestType","components","root","contextType","level","slot","always","getIntrinsicElementProps","role","undefined","elementType","process","env","NODE_ENV","console","warn"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "useRovingTabIndex", {
|
|
|
10
10
|
});
|
|
11
11
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
12
12
|
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
13
|
-
function useRovingTabIndex(
|
|
13
|
+
function useRovingTabIndex() {
|
|
14
14
|
const currentElementRef = _react.useRef();
|
|
15
15
|
const initialize = _react.useCallback((walker)=>{
|
|
16
16
|
walker.currentElement = walker.root;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useRovingTabIndexes.js"],"sourcesContent":["import * as React from 'react';\n/**\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */ export function useRovingTabIndex(
|
|
1
|
+
{"version":3,"sources":["useRovingTabIndexes.js"],"sourcesContent":["import * as React from 'react';\n/**\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */ export function useRovingTabIndex() {\n const currentElementRef = React.useRef();\n const initialize = React.useCallback((walker)=>{\n walker.currentElement = walker.root;\n let tabbableChild = walker.firstChild((element)=>element.tabIndex === 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);\n walker.currentElement = walker.root;\n tabbableChild !== null && tabbableChild !== void 0 ? tabbableChild : tabbableChild = walker.firstChild();\n if (!tabbableChild) {\n return;\n }\n tabbableChild.tabIndex = 0;\n currentElementRef.current = tabbableChild;\n let nextElement = null;\n while((nextElement = walker.nextElement()) && nextElement !== tabbableChild){\n nextElement.tabIndex = -1;\n }\n }, []);\n const rove = React.useCallback((nextElement)=>{\n if (!currentElementRef.current) {\n return;\n }\n currentElementRef.current.tabIndex = -1;\n nextElement.tabIndex = 0;\n nextElement.focus();\n currentElementRef.current = nextElement;\n }, []);\n return {\n rove,\n initialize\n };\n}\n"],"names":["useRovingTabIndex","currentElementRef","React","useRef","initialize","useCallback","walker","currentElement","root","tabbableChild","firstChild","element","tabIndex","NodeFilter","FILTER_ACCEPT","FILTER_SKIP","current","nextElement","rove","focus"],"mappings":";;;;+BAGoBA;;;eAAAA;;;;iEAHG;AAGZ,SAASA;IAChB,MAAMC,oBAAoBC,OAAMC,MAAM;IACtC,MAAMC,aAAaF,OAAMG,WAAW,CAAC,CAACC;QAClCA,OAAOC,cAAc,GAAGD,OAAOE,IAAI;QACnC,IAAIC,gBAAgBH,OAAOI,UAAU,CAAC,CAACC,UAAUA,QAAQC,QAAQ,KAAK,IAAIC,WAAWC,aAAa,GAAGD,WAAWE,WAAW;QAC3HT,OAAOC,cAAc,GAAGD,OAAOE,IAAI;QACnCC,kBAAkB,QAAQA,kBAAkB,KAAK,IAAIA,gBAAgBA,gBAAgBH,OAAOI,UAAU;QACtG,IAAI,CAACD,eAAe;YAChB;QACJ;QACAA,cAAcG,QAAQ,GAAG;QACzBX,kBAAkBe,OAAO,GAAGP;QAC5B,IAAIQ,cAAc;QAClB,MAAM,AAACA,CAAAA,cAAcX,OAAOW,WAAW,EAAC,KAAMA,gBAAgBR,cAAc;YACxEQ,YAAYL,QAAQ,GAAG,CAAC;QAC5B;IACJ,GAAG,EAAE;IACL,MAAMM,OAAOhB,OAAMG,WAAW,CAAC,CAACY;QAC5B,IAAI,CAAChB,kBAAkBe,OAAO,EAAE;YAC5B;QACJ;QACAf,kBAAkBe,OAAO,CAACJ,QAAQ,GAAG,CAAC;QACtCK,YAAYL,QAAQ,GAAG;QACvBK,YAAYE,KAAK;QACjBlB,kBAAkBe,OAAO,GAAGC;IAChC,GAAG,EAAE;IACL,OAAO;QACHC;QACAd;IACJ;AACJ"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useTreeNavigation", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return useTreeNavigation;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
12
|
+
const _nextTypeAheadElement = require("../utils/nextTypeAheadElement");
|
|
13
|
+
const _tokens = require("../utils/tokens");
|
|
14
|
+
const _useRovingTabIndexes = require("./useRovingTabIndexes");
|
|
15
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
16
|
+
const _useHTMLElementWalkerRef = require("./useHTMLElementWalkerRef");
|
|
17
|
+
const _reactutilities = require("@fluentui/react-utilities");
|
|
18
|
+
function useTreeNavigation() {
|
|
19
|
+
const { rove, initialize: initializeRovingTabIndex } = (0, _useRovingTabIndexes.useRovingTabIndex)();
|
|
20
|
+
const { walkerRef, rootRef: walkerRootRef } = (0, _useHTMLElementWalkerRef.useHTMLElementWalkerRef)();
|
|
21
|
+
const rootRefCallback = _react.useCallback((root)=>{
|
|
22
|
+
if (root && walkerRef.current) {
|
|
23
|
+
initializeRovingTabIndex(walkerRef.current);
|
|
24
|
+
}
|
|
25
|
+
}, [
|
|
26
|
+
walkerRef,
|
|
27
|
+
initializeRovingTabIndex
|
|
28
|
+
]);
|
|
29
|
+
const getNextElement = (data)=>{
|
|
30
|
+
if (!walkerRef.current) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
switch(data.type){
|
|
34
|
+
case _tokens.treeDataTypes.Click:
|
|
35
|
+
return data.target;
|
|
36
|
+
case _tokens.treeDataTypes.TypeAhead:
|
|
37
|
+
walkerRef.current.currentElement = data.target;
|
|
38
|
+
return (0, _nextTypeAheadElement.nextTypeAheadElement)(walkerRef.current, data.event.key);
|
|
39
|
+
case _tokens.treeDataTypes.ArrowLeft:
|
|
40
|
+
walkerRef.current.currentElement = data.target;
|
|
41
|
+
return walkerRef.current.parentElement();
|
|
42
|
+
case _tokens.treeDataTypes.ArrowRight:
|
|
43
|
+
walkerRef.current.currentElement = data.target;
|
|
44
|
+
return walkerRef.current.firstChild();
|
|
45
|
+
case _tokens.treeDataTypes.End:
|
|
46
|
+
walkerRef.current.currentElement = walkerRef.current.root;
|
|
47
|
+
return lastChildRecursive(walkerRef.current);
|
|
48
|
+
case _tokens.treeDataTypes.Home:
|
|
49
|
+
walkerRef.current.currentElement = walkerRef.current.root;
|
|
50
|
+
return walkerRef.current.firstChild();
|
|
51
|
+
case _tokens.treeDataTypes.ArrowDown:
|
|
52
|
+
walkerRef.current.currentElement = data.target;
|
|
53
|
+
return walkerRef.current.nextElement();
|
|
54
|
+
case _tokens.treeDataTypes.ArrowUp:
|
|
55
|
+
walkerRef.current.currentElement = data.target;
|
|
56
|
+
return walkerRef.current.previousElement();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
function navigate(data) {
|
|
60
|
+
const nextElement = getNextElement(data);
|
|
61
|
+
if (nextElement) {
|
|
62
|
+
rove(nextElement);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
navigate,
|
|
67
|
+
rootRef: (0, _reactutilities.useMergedRefs)(walkerRootRef, rootRefCallback)
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function lastChildRecursive(walker) {
|
|
71
|
+
let lastElement = null;
|
|
72
|
+
let nextElement = null;
|
|
73
|
+
while(nextElement = walker.lastChild()){
|
|
74
|
+
lastElement = nextElement;
|
|
75
|
+
}
|
|
76
|
+
return lastElement;
|
|
77
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useTreeNavigation.js"],"sourcesContent":["import { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport * as React from 'react';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalkerRef';\nimport { useMergedRefs } from '@fluentui/react-utilities';\nexport function useTreeNavigation() {\n const { rove, initialize: initializeRovingTabIndex } = useRovingTabIndex();\n const { walkerRef, rootRef: walkerRootRef } = useHTMLElementWalkerRef();\n const rootRefCallback = React.useCallback((root)=>{\n if (root && walkerRef.current) {\n initializeRovingTabIndex(walkerRef.current);\n }\n }, [\n walkerRef,\n initializeRovingTabIndex\n ]);\n const getNextElement = (data)=>{\n if (!walkerRef.current) {\n return null;\n }\n switch(data.type){\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walkerRef.current.currentElement = data.target;\n return nextTypeAheadElement(walkerRef.current, data.event.key);\n case treeDataTypes.ArrowLeft:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.parentElement();\n case treeDataTypes.ArrowRight:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.firstChild();\n case treeDataTypes.End:\n walkerRef.current.currentElement = walkerRef.current.root;\n return lastChildRecursive(walkerRef.current);\n case treeDataTypes.Home:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.firstChild();\n case treeDataTypes.ArrowDown:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.nextElement();\n case treeDataTypes.ArrowUp:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.previousElement();\n }\n };\n function navigate(data) {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return {\n navigate,\n rootRef: useMergedRefs(walkerRootRef, rootRefCallback)\n };\n}\nfunction lastChildRecursive(walker) {\n let lastElement = null;\n let nextElement = null;\n while(nextElement = walker.lastChild()){\n lastElement = nextElement;\n }\n return lastElement;\n}\n"],"names":["useTreeNavigation","rove","initialize","initializeRovingTabIndex","useRovingTabIndex","walkerRef","rootRef","walkerRootRef","useHTMLElementWalkerRef","rootRefCallback","React","useCallback","root","current","getNextElement","data","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","parentElement","ArrowRight","firstChild","End","lastChildRecursive","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","useMergedRefs","walker","lastElement","lastChild"],"mappings":";;;;+BAMgBA;;;eAAAA;;;;sCANqB;wBACP;qCACI;iEACX;yCACiB;gCACV;AACvB,SAASA;IACZ,MAAM,EAAEC,IAAI,EAAEC,YAAYC,wBAAwB,EAAE,GAAGC,IAAAA,sCAAiB;IACxE,MAAM,EAAEC,SAAS,EAAEC,SAASC,aAAa,EAAE,GAAGC,IAAAA,gDAAuB;IACrE,MAAMC,kBAAkBC,OAAMC,WAAW,CAAC,CAACC;QACvC,IAAIA,QAAQP,UAAUQ,OAAO,EAAE;YAC3BV,yBAAyBE,UAAUQ,OAAO;QAC9C;IACJ,GAAG;QACCR;QACAF;KACH;IACD,MAAMW,iBAAiB,CAACC;QACpB,IAAI,CAACV,UAAUQ,OAAO,EAAE;YACpB,OAAO;QACX;QACA,OAAOE,KAAKC,IAAI;YACZ,KAAKC,qBAAa,CAACC,KAAK;gBACpB,OAAOH,KAAKI,MAAM;YACtB,KAAKF,qBAAa,CAACG,SAAS;gBACxBf,UAAUQ,OAAO,CAACQ,cAAc,GAAGN,KAAKI,MAAM;gBAC9C,OAAOG,IAAAA,0CAAoB,EAACjB,UAAUQ,OAAO,EAAEE,KAAKQ,KAAK,CAACC,GAAG;YACjE,KAAKP,qBAAa,CAACQ,SAAS;gBACxBpB,UAAUQ,OAAO,CAACQ,cAAc,GAAGN,KAAKI,MAAM;gBAC9C,OAAOd,UAAUQ,OAAO,CAACa,aAAa;YAC1C,KAAKT,qBAAa,CAACU,UAAU;gBACzBtB,UAAUQ,OAAO,CAACQ,cAAc,GAAGN,KAAKI,MAAM;gBAC9C,OAAOd,UAAUQ,OAAO,CAACe,UAAU;YACvC,KAAKX,qBAAa,CAACY,GAAG;gBAClBxB,UAAUQ,OAAO,CAACQ,cAAc,GAAGhB,UAAUQ,OAAO,CAACD,IAAI;gBACzD,OAAOkB,mBAAmBzB,UAAUQ,OAAO;YAC/C,KAAKI,qBAAa,CAACc,IAAI;gBACnB1B,UAAUQ,OAAO,CAACQ,cAAc,GAAGhB,UAAUQ,OAAO,CAACD,IAAI;gBACzD,OAAOP,UAAUQ,OAAO,CAACe,UAAU;YACvC,KAAKX,qBAAa,CAACe,SAAS;gBACxB3B,UAAUQ,OAAO,CAACQ,cAAc,GAAGN,KAAKI,MAAM;gBAC9C,OAAOd,UAAUQ,OAAO,CAACoB,WAAW;YACxC,KAAKhB,qBAAa,CAACiB,OAAO;gBACtB7B,UAAUQ,OAAO,CAACQ,cAAc,GAAGN,KAAKI,MAAM;gBAC9C,OAAOd,UAAUQ,OAAO,CAACsB,eAAe;QAChD;IACJ;IACA,SAASC,SAASrB,IAAI;QAClB,MAAMkB,cAAcnB,eAAeC;QACnC,IAAIkB,aAAa;YACbhC,KAAKgC;QACT;IACJ;IACA,OAAO;QACHG;QACA9B,SAAS+B,IAAAA,6BAAa,EAAC9B,eAAeE;IAC1C;AACJ;AACA,SAASqB,mBAAmBQ,MAAM;IAC9B,IAAIC,cAAc;IAClB,IAAIN,cAAc;IAClB,MAAMA,cAAcK,OAAOE,SAAS,GAAG;QACnCD,cAAcN;IAClB;IACA,OAAOM;AACX"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluentui/react-tree",
|
|
3
|
-
"version": "9.4.
|
|
3
|
+
"version": "9.4.14",
|
|
4
4
|
"description": "Tree component for Fluent UI React",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@fluentui/keyboard-keys": "^9.0.7",
|
|
40
40
|
"@fluentui/react-aria": "^9.3.44",
|
|
41
|
-
"@fluentui/react-avatar": "^9.5.
|
|
42
|
-
"@fluentui/react-button": "^9.3.
|
|
43
|
-
"@fluentui/react-checkbox": "^9.
|
|
41
|
+
"@fluentui/react-avatar": "^9.5.47",
|
|
42
|
+
"@fluentui/react-button": "^9.3.56",
|
|
43
|
+
"@fluentui/react-checkbox": "^9.2.0",
|
|
44
44
|
"@fluentui/react-context-selector": "^9.1.42",
|
|
45
45
|
"@fluentui/react-icons": "^2.0.217",
|
|
46
|
-
"@fluentui/react-radio": "^9.1.
|
|
47
|
-
"@fluentui/react-shared-contexts": "^9.
|
|
48
|
-
"@fluentui/react-tabster": "^9.14.
|
|
46
|
+
"@fluentui/react-radio": "^9.1.57",
|
|
47
|
+
"@fluentui/react-shared-contexts": "^9.13.0",
|
|
48
|
+
"@fluentui/react-tabster": "^9.14.6",
|
|
49
49
|
"@fluentui/react-theme": "^9.1.16",
|
|
50
50
|
"@fluentui/react-utilities": "^9.15.2",
|
|
51
51
|
"@fluentui/react-jsx-runtime": "^9.0.19",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["useFlatTreeNavigation.ts"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../../Tree';\nimport { nextTypeAheadElement } from '../../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useRovingTabIndex } from '../../hooks/useRovingTabIndexes';\nimport { HTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { TreeItemValue } from '../../TreeItem';\nimport { dataTreeItemValueAttrName } from '../../utils/getTreeItemValueFromElement';\n\nexport function useFlatTreeNavigation() {\n const { targetDocument } = useFluent_unstable();\n const { rove, initialize } = useRovingTabIndex(treeItemFilter);\n\n function getNextElement(data: TreeNavigationData_unstable, walker: HTMLElementWalker) {\n if (!targetDocument) {\n return null;\n }\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walker.currentElement = data.target;\n return nextTypeAheadElement(walker, data.event.key);\n case treeDataTypes.ArrowLeft: {\n const nextElement = parentElement(data.parentValue, walker);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n /* #__DE-INDENT__ */ `\n @fluentui/react-tree [useFlatTreeNavigation]:\n \\'ArrowLeft\\' navigation was not possible.\n No parent element found for the current element:\n `,\n data.target,\n );\n }\n return nextElement;\n }\n case treeDataTypes.ArrowRight: {\n walker.currentElement = data.target;\n const nextElement = firstChild(data.target, walker);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n const ariaLevel = Number(data.target.getAttribute('aria-level'));\n // eslint-disable-next-line no-console\n console.warn(\n /* #__DE-INDENT__ */ `\n @fluentui/react-tree [useFlatTreeNavigation]:\n \\'ArrowRight\\' navigation was not possible.\n No element with \"aria-posinset=1\" and \"aria-level=${ariaLevel + 1}\"\n was found after the current element!\n `,\n data.target,\n );\n }\n return nextElement;\n }\n case treeDataTypes.End:\n walker.currentElement = walker.root;\n return walker.lastChild();\n case treeDataTypes.Home:\n walker.currentElement = walker.root;\n return walker.firstChild();\n case treeDataTypes.ArrowDown:\n walker.currentElement = data.target;\n return walker.nextElement();\n case treeDataTypes.ArrowUp:\n walker.currentElement = data.target;\n return walker.previousElement();\n }\n }\n const navigate = useEventCallback((data: TreeNavigationData_unstable, walker: HTMLElementWalker) => {\n const nextElement = getNextElement(data, walker);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return { navigate, initialize } as const;\n}\n\nfunction firstChild(target: HTMLElement, treeWalker: HTMLElementWalker): HTMLElement | null {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\n\nfunction parentElement(parentValue: TreeItemValue | undefined, treeWalker: HTMLElementWalker) {\n if (parentValue === undefined) {\n return null;\n }\n return treeWalker.root.querySelector<HTMLElement>(`[${dataTreeItemValueAttrName}=\"${parentValue}\"]`);\n}\n"],"names":["useFluent_unstable","useEventCallback","nextTypeAheadElement","treeDataTypes","treeItemFilter","useRovingTabIndex","dataTreeItemValueAttrName","useFlatTreeNavigation","targetDocument","rove","initialize","getNextElement","data","walker","type","Click","target","TypeAhead","currentElement","event","key","ArrowLeft","nextElement","parentElement","parentValue","process","env","NODE_ENV","console","warn","ArrowRight","firstChild","ariaLevel","Number","getAttribute","End","root","lastChild","Home","ArrowDown","ArrowUp","previousElement","navigate","treeWalker","nextElementAriaPosInSet","nextElementAriaLevel","targetAriaLevel","undefined","querySelector"],"mappings":"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"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { nextTypeAheadElement } from '../../utils/nextTypeAheadElement';
|
|
2
|
-
import { treeDataTypes } from '../../utils/tokens';
|
|
3
|
-
import { treeItemFilter } from '../../utils/treeItemFilter';
|
|
4
|
-
import { useRovingTabIndex } from '../../hooks/useRovingTabIndexes';
|
|
5
|
-
export function useTreeNavigation() {
|
|
6
|
-
const { rove, initialize } = useRovingTabIndex(treeItemFilter);
|
|
7
|
-
const getNextElement = (data, treeItemWalker)=>{
|
|
8
|
-
switch(data.type){
|
|
9
|
-
case treeDataTypes.Click:
|
|
10
|
-
return data.target;
|
|
11
|
-
case treeDataTypes.TypeAhead:
|
|
12
|
-
treeItemWalker.currentElement = data.target;
|
|
13
|
-
return nextTypeAheadElement(treeItemWalker, data.event.key);
|
|
14
|
-
case treeDataTypes.ArrowLeft:
|
|
15
|
-
treeItemWalker.currentElement = data.target;
|
|
16
|
-
return treeItemWalker.parentElement();
|
|
17
|
-
case treeDataTypes.ArrowRight:
|
|
18
|
-
treeItemWalker.currentElement = data.target;
|
|
19
|
-
return treeItemWalker.firstChild();
|
|
20
|
-
case treeDataTypes.End:
|
|
21
|
-
treeItemWalker.currentElement = treeItemWalker.root;
|
|
22
|
-
return lastChildRecursive(treeItemWalker);
|
|
23
|
-
case treeDataTypes.Home:
|
|
24
|
-
treeItemWalker.currentElement = treeItemWalker.root;
|
|
25
|
-
return treeItemWalker.firstChild();
|
|
26
|
-
case treeDataTypes.ArrowDown:
|
|
27
|
-
treeItemWalker.currentElement = data.target;
|
|
28
|
-
return treeItemWalker.nextElement();
|
|
29
|
-
case treeDataTypes.ArrowUp:
|
|
30
|
-
treeItemWalker.currentElement = data.target;
|
|
31
|
-
return treeItemWalker.previousElement();
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
function navigate(data, walker) {
|
|
35
|
-
const nextElement = getNextElement(data, walker);
|
|
36
|
-
if (nextElement) {
|
|
37
|
-
rove(nextElement);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
navigate,
|
|
42
|
-
initialize
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
function lastChildRecursive(walker) {
|
|
46
|
-
let lastElement = null;
|
|
47
|
-
let nextElement = null;
|
|
48
|
-
while(nextElement = walker.lastChild()){
|
|
49
|
-
lastElement = nextElement;
|
|
50
|
-
}
|
|
51
|
-
return lastElement;
|
|
52
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["useTreeNavigation.ts"],"sourcesContent":["import { TreeNavigationData_unstable } from './Tree.types';\nimport { nextTypeAheadElement } from '../../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useRovingTabIndex } from '../../hooks/useRovingTabIndexes';\nimport { HTMLElementWalker } from '../../utils/createHTMLElementWalker';\n\nexport function useTreeNavigation() {\n const { rove, initialize } = useRovingTabIndex(treeItemFilter);\n\n const getNextElement = (data: TreeNavigationData_unstable, treeItemWalker: HTMLElementWalker) => {\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n treeItemWalker.currentElement = data.target;\n return nextTypeAheadElement(treeItemWalker, data.event.key);\n case treeDataTypes.ArrowLeft:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.parentElement();\n case treeDataTypes.ArrowRight:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.firstChild();\n case treeDataTypes.End:\n treeItemWalker.currentElement = treeItemWalker.root;\n return lastChildRecursive(treeItemWalker);\n case treeDataTypes.Home:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.firstChild();\n case treeDataTypes.ArrowDown:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.nextElement();\n case treeDataTypes.ArrowUp:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.previousElement();\n }\n };\n function navigate(data: TreeNavigationData_unstable, walker: HTMLElementWalker) {\n const nextElement = getNextElement(data, walker);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return { navigate, initialize } as const;\n}\n\nfunction lastChildRecursive(walker: HTMLElementWalker) {\n let lastElement: HTMLElement | null = null;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.lastChild())) {\n lastElement = nextElement;\n }\n return lastElement;\n}\n"],"names":["nextTypeAheadElement","treeDataTypes","treeItemFilter","useRovingTabIndex","useTreeNavigation","rove","initialize","getNextElement","data","treeItemWalker","type","Click","target","TypeAhead","currentElement","event","key","ArrowLeft","parentElement","ArrowRight","firstChild","End","root","lastChildRecursive","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","walker","lastElement","lastChild"],"mappings":"AACA,SAASA,oBAAoB,QAAQ,mCAAmC;AACxE,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,cAAc,QAAQ,6BAA6B;AAC5D,SAASC,iBAAiB,QAAQ,kCAAkC;AAGpE,OAAO,SAASC;IACd,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAE,GAAGH,kBAAkBD;IAE/C,MAAMK,iBAAiB,CAACC,MAAmCC;QACzD,OAAQD,KAAKE,IAAI;YACf,KAAKT,cAAcU,KAAK;gBACtB,OAAOH,KAAKI,MAAM;YACpB,KAAKX,cAAcY,SAAS;gBAC1BJ,eAAeK,cAAc,GAAGN,KAAKI,MAAM;gBAC3C,OAAOZ,qBAAqBS,gBAAgBD,KAAKO,KAAK,CAACC,GAAG;YAC5D,KAAKf,cAAcgB,SAAS;gBAC1BR,eAAeK,cAAc,GAAGN,KAAKI,MAAM;gBAC3C,OAAOH,eAAeS,aAAa;YACrC,KAAKjB,cAAckB,UAAU;gBAC3BV,eAAeK,cAAc,GAAGN,KAAKI,MAAM;gBAC3C,OAAOH,eAAeW,UAAU;YAClC,KAAKnB,cAAcoB,GAAG;gBACpBZ,eAAeK,cAAc,GAAGL,eAAea,IAAI;gBACnD,OAAOC,mBAAmBd;YAC5B,KAAKR,cAAcuB,IAAI;gBACrBf,eAAeK,cAAc,GAAGL,eAAea,IAAI;gBACnD,OAAOb,eAAeW,UAAU;YAClC,KAAKnB,cAAcwB,SAAS;gBAC1BhB,eAAeK,cAAc,GAAGN,KAAKI,MAAM;gBAC3C,OAAOH,eAAeiB,WAAW;YACnC,KAAKzB,cAAc0B,OAAO;gBACxBlB,eAAeK,cAAc,GAAGN,KAAKI,MAAM;gBAC3C,OAAOH,eAAemB,eAAe;QACzC;IACF;IACA,SAASC,SAASrB,IAAiC,EAAEsB,MAAyB;QAC5E,MAAMJ,cAAcnB,eAAeC,MAAMsB;QACzC,IAAIJ,aAAa;YACfrB,KAAKqB;QACP;IACF;IACA,OAAO;QAAEG;QAAUvB;IAAW;AAChC;AAEA,SAASiB,mBAAmBO,MAAyB;IACnD,IAAIC,cAAkC;IACtC,IAAIL,cAAkC;IACtC,MAAQA,cAAcI,OAAOE,SAAS,GAAK;QACzCD,cAAcL;IAChB;IACA,OAAOK;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["useFlatTreeNavigation.js"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback } from '@fluentui/react-utilities';\nimport { nextTypeAheadElement } from '../../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useRovingTabIndex } from '../../hooks/useRovingTabIndexes';\nimport { dataTreeItemValueAttrName } from '../../utils/getTreeItemValueFromElement';\nexport function useFlatTreeNavigation() {\n const { targetDocument } = useFluent_unstable();\n const { rove, initialize } = useRovingTabIndex(treeItemFilter);\n function getNextElement(data, walker) {\n if (!targetDocument) {\n return null;\n }\n switch(data.type){\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walker.currentElement = data.target;\n return nextTypeAheadElement(walker, data.event.key);\n case treeDataTypes.ArrowLeft:\n {\n const nextElement = parentElement(data.parentValue, walker);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`@fluentui/react-tree [useFlatTreeNavigation]:\n\\'ArrowLeft\\' navigation was not possible.\nNo parent element found for the current element:`, data.target);\n }\n return nextElement;\n }\n case treeDataTypes.ArrowRight:\n {\n walker.currentElement = data.target;\n const nextElement = firstChild(data.target, walker);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n const ariaLevel = Number(data.target.getAttribute('aria-level'));\n // eslint-disable-next-line no-console\n console.warn(`@fluentui/react-tree [useFlatTreeNavigation]:\n\\'ArrowRight\\' navigation was not possible.\nNo element with \"aria-posinset=1\" and \"aria-level=${ariaLevel + 1}\"\nwas found after the current element!`, data.target);\n }\n return nextElement;\n }\n case treeDataTypes.End:\n walker.currentElement = walker.root;\n return walker.lastChild();\n case treeDataTypes.Home:\n walker.currentElement = walker.root;\n return walker.firstChild();\n case treeDataTypes.ArrowDown:\n walker.currentElement = data.target;\n return walker.nextElement();\n case treeDataTypes.ArrowUp:\n walker.currentElement = data.target;\n return walker.previousElement();\n }\n }\n const navigate = useEventCallback((data, walker)=>{\n const nextElement = getNextElement(data, walker);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return {\n navigate,\n initialize\n };\n}\nfunction firstChild(target, treeWalker) {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\nfunction parentElement(parentValue, treeWalker) {\n if (parentValue === undefined) {\n return null;\n }\n return treeWalker.root.querySelector(`[${dataTreeItemValueAttrName}=\"${parentValue}\"]`);\n}\n"],"names":["useFlatTreeNavigation","targetDocument","useFluent_unstable","rove","initialize","useRovingTabIndex","treeItemFilter","getNextElement","data","walker","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","nextElement","parentElement","parentValue","process","env","NODE_ENV","console","warn","ArrowRight","firstChild","ariaLevel","Number","getAttribute","End","root","lastChild","Home","ArrowDown","ArrowUp","previousElement","navigate","useEventCallback","treeWalker","nextElementAriaPosInSet","nextElementAriaLevel","targetAriaLevel","undefined","querySelector","dataTreeItemValueAttrName"],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "useTreeNavigation", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return useTreeNavigation;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _nextTypeAheadElement = require("../../utils/nextTypeAheadElement");
|
|
12
|
-
const _tokens = require("../../utils/tokens");
|
|
13
|
-
const _treeItemFilter = require("../../utils/treeItemFilter");
|
|
14
|
-
const _useRovingTabIndexes = require("../../hooks/useRovingTabIndexes");
|
|
15
|
-
function useTreeNavigation() {
|
|
16
|
-
const { rove, initialize } = (0, _useRovingTabIndexes.useRovingTabIndex)(_treeItemFilter.treeItemFilter);
|
|
17
|
-
const getNextElement = (data, treeItemWalker)=>{
|
|
18
|
-
switch(data.type){
|
|
19
|
-
case _tokens.treeDataTypes.Click:
|
|
20
|
-
return data.target;
|
|
21
|
-
case _tokens.treeDataTypes.TypeAhead:
|
|
22
|
-
treeItemWalker.currentElement = data.target;
|
|
23
|
-
return (0, _nextTypeAheadElement.nextTypeAheadElement)(treeItemWalker, data.event.key);
|
|
24
|
-
case _tokens.treeDataTypes.ArrowLeft:
|
|
25
|
-
treeItemWalker.currentElement = data.target;
|
|
26
|
-
return treeItemWalker.parentElement();
|
|
27
|
-
case _tokens.treeDataTypes.ArrowRight:
|
|
28
|
-
treeItemWalker.currentElement = data.target;
|
|
29
|
-
return treeItemWalker.firstChild();
|
|
30
|
-
case _tokens.treeDataTypes.End:
|
|
31
|
-
treeItemWalker.currentElement = treeItemWalker.root;
|
|
32
|
-
return lastChildRecursive(treeItemWalker);
|
|
33
|
-
case _tokens.treeDataTypes.Home:
|
|
34
|
-
treeItemWalker.currentElement = treeItemWalker.root;
|
|
35
|
-
return treeItemWalker.firstChild();
|
|
36
|
-
case _tokens.treeDataTypes.ArrowDown:
|
|
37
|
-
treeItemWalker.currentElement = data.target;
|
|
38
|
-
return treeItemWalker.nextElement();
|
|
39
|
-
case _tokens.treeDataTypes.ArrowUp:
|
|
40
|
-
treeItemWalker.currentElement = data.target;
|
|
41
|
-
return treeItemWalker.previousElement();
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
function navigate(data, walker) {
|
|
45
|
-
const nextElement = getNextElement(data, walker);
|
|
46
|
-
if (nextElement) {
|
|
47
|
-
rove(nextElement);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
navigate,
|
|
52
|
-
initialize
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
function lastChildRecursive(walker) {
|
|
56
|
-
let lastElement = null;
|
|
57
|
-
let nextElement = null;
|
|
58
|
-
while(nextElement = walker.lastChild()){
|
|
59
|
-
lastElement = nextElement;
|
|
60
|
-
}
|
|
61
|
-
return lastElement;
|
|
62
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["useTreeNavigation.js"],"sourcesContent":["import { nextTypeAheadElement } from '../../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useRovingTabIndex } from '../../hooks/useRovingTabIndexes';\nexport function useTreeNavigation() {\n const { rove, initialize } = useRovingTabIndex(treeItemFilter);\n const getNextElement = (data, treeItemWalker)=>{\n switch(data.type){\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n treeItemWalker.currentElement = data.target;\n return nextTypeAheadElement(treeItemWalker, data.event.key);\n case treeDataTypes.ArrowLeft:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.parentElement();\n case treeDataTypes.ArrowRight:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.firstChild();\n case treeDataTypes.End:\n treeItemWalker.currentElement = treeItemWalker.root;\n return lastChildRecursive(treeItemWalker);\n case treeDataTypes.Home:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.firstChild();\n case treeDataTypes.ArrowDown:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.nextElement();\n case treeDataTypes.ArrowUp:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.previousElement();\n }\n };\n function navigate(data, walker) {\n const nextElement = getNextElement(data, walker);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return {\n navigate,\n initialize\n };\n}\nfunction lastChildRecursive(walker) {\n let lastElement = null;\n let nextElement = null;\n while(nextElement = walker.lastChild()){\n lastElement = nextElement;\n }\n return lastElement;\n}\n"],"names":["useTreeNavigation","rove","initialize","useRovingTabIndex","treeItemFilter","getNextElement","data","treeItemWalker","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","parentElement","ArrowRight","firstChild","End","root","lastChildRecursive","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","walker","lastElement","lastChild"],"mappings":";;;;+BAIgBA;;;eAAAA;;;sCAJqB;wBACP;gCACC;qCACG;AAC3B,SAASA;IACZ,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAE,GAAGC,IAAAA,sCAAiB,EAACC,8BAAc;IAC7D,MAAMC,iBAAiB,CAACC,MAAMC;QAC1B,OAAOD,KAAKE,IAAI;YACZ,KAAKC,qBAAa,CAACC,KAAK;gBACpB,OAAOJ,KAAKK,MAAM;YACtB,KAAKF,qBAAa,CAACG,SAAS;gBACxBL,eAAeM,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOG,IAAAA,0CAAoB,EAACP,gBAAgBD,KAAKS,KAAK,CAACC,GAAG;YAC9D,KAAKP,qBAAa,CAACQ,SAAS;gBACxBV,eAAeM,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOJ,eAAeW,aAAa;YACvC,KAAKT,qBAAa,CAACU,UAAU;gBACzBZ,eAAeM,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOJ,eAAea,UAAU;YACpC,KAAKX,qBAAa,CAACY,GAAG;gBAClBd,eAAeM,cAAc,GAAGN,eAAee,IAAI;gBACnD,OAAOC,mBAAmBhB;YAC9B,KAAKE,qBAAa,CAACe,IAAI;gBACnBjB,eAAeM,cAAc,GAAGN,eAAee,IAAI;gBACnD,OAAOf,eAAea,UAAU;YACpC,KAAKX,qBAAa,CAACgB,SAAS;gBACxBlB,eAAeM,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOJ,eAAemB,WAAW;YACrC,KAAKjB,qBAAa,CAACkB,OAAO;gBACtBpB,eAAeM,cAAc,GAAGP,KAAKK,MAAM;gBAC3C,OAAOJ,eAAeqB,eAAe;QAC7C;IACJ;IACA,SAASC,SAASvB,IAAI,EAAEwB,MAAM;QAC1B,MAAMJ,cAAcrB,eAAeC,MAAMwB;QACzC,IAAIJ,aAAa;YACbzB,KAAKyB;QACT;IACJ;IACA,OAAO;QACHG;QACA3B;IACJ;AACJ;AACA,SAASqB,mBAAmBO,MAAM;IAC9B,IAAIC,cAAc;IAClB,IAAIL,cAAc;IAClB,MAAMA,cAAcI,OAAOE,SAAS,GAAG;QACnCD,cAAcL;IAClB;IACA,OAAOK;AACX"}
|