@neovici/cosmoz-treenode-navigator 8.5.0 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +6 -0
- package/README.md +143 -48
- package/dist/cosmoz-treenode-button-view.js +12 -1
- package/dist/cosmoz-treenode-button-view.js.map +1 -1
- package/dist/cosmoz-treenode-button-view.styles.d.ts.map +1 -1
- package/dist/cosmoz-treenode-button-view.styles.js +34 -15
- package/dist/cosmoz-treenode-button-view.styles.js.map +1 -1
- package/dist/cosmoz-treenode-navigator.d.ts +1 -1
- package/dist/cosmoz-treenode-navigator.d.ts.map +1 -1
- package/dist/cosmoz-treenode-navigator.js +128 -267
- package/dist/cosmoz-treenode-navigator.js.map +1 -1
- package/dist/cosmoz-treenode-navigator.styles.d.ts.map +1 -1
- package/dist/cosmoz-treenode-navigator.styles.js +59 -76
- package/dist/cosmoz-treenode-navigator.styles.js.map +1 -1
- package/dist/hooks/useNodes.d.ts.map +1 -1
- package/dist/hooks/useNodes.js +2 -1
- package/dist/hooks/useNodes.js.map +1 -1
- package/dist/hooks/useSourceTree.d.ts +33 -0
- package/dist/hooks/useSourceTree.d.ts.map +1 -0
- package/dist/hooks/useSourceTree.js +102 -0
- package/dist/hooks/useSourceTree.js.map +1 -0
- package/dist/tree-view/flatten.d.ts +29 -0
- package/dist/tree-view/flatten.d.ts.map +1 -0
- package/dist/tree-view/flatten.js +88 -0
- package/dist/tree-view/flatten.js.map +1 -0
- package/dist/tree-view/render.d.ts +22 -0
- package/dist/tree-view/render.d.ts.map +1 -0
- package/dist/tree-view/render.js +85 -0
- package/dist/tree-view/render.js.map +1 -0
- package/dist/tree-view/styles.d.ts +3 -0
- package/dist/tree-view/styles.d.ts.map +1 -0
- package/dist/tree-view/styles.js +134 -0
- package/dist/tree-view/styles.js.map +1 -0
- package/dist/tree-view/tree-view.d.ts +25 -0
- package/dist/tree-view/tree-view.d.ts.map +1 -0
- package/dist/tree-view/tree-view.js +27 -0
- package/dist/tree-view/tree-view.js.map +1 -0
- package/dist/tree-view/types.d.ts +59 -0
- package/dist/tree-view/types.d.ts.map +1 -0
- package/dist/tree-view/types.js +2 -0
- package/dist/tree-view/types.js.map +1 -0
- package/dist/tree-view/use-tree-view.d.ts +18 -0
- package/dist/tree-view/use-tree-view.d.ts.map +1 -0
- package/dist/tree-view/use-tree-view.js +175 -0
- package/dist/tree-view/use-tree-view.js.map +1 -0
- package/dist/util/source-tree.d.ts +26 -0
- package/dist/util/source-tree.d.ts.map +1 -0
- package/dist/util/source-tree.js +91 -0
- package/dist/util/source-tree.js.map +1 -0
- package/dist/util/source.d.ts.map +1 -1
- package/dist/util/source.js +4 -1
- package/dist/util/source.js.map +1 -1
- package/package.json +9 -8
|
@@ -1,109 +1,92 @@
|
|
|
1
1
|
import { css } from '@pionjs/pion';
|
|
2
2
|
export default css `
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
.header a {
|
|
9
|
-
text-decoration: none;
|
|
10
|
-
color: inherit;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.icon {
|
|
14
|
-
display: inline-block;
|
|
15
|
-
position: relative;
|
|
16
|
-
padding: 8px;
|
|
17
|
-
outline: none;
|
|
18
|
-
user-select: none;
|
|
19
|
-
cursor: pointer;
|
|
20
|
-
z-index: 0;
|
|
21
|
-
line-height: 1;
|
|
22
|
-
width: 40px;
|
|
23
|
-
height: 40px;
|
|
24
|
-
box-sizing: border-box;
|
|
25
|
-
color: var(--cosmoz-treenode-navigator-icon-color, currentColor);
|
|
3
|
+
:host {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
gap: calc(var(--cz-spacing) * 3);
|
|
7
|
+
min-width: 0;
|
|
26
8
|
}
|
|
27
9
|
|
|
28
|
-
.
|
|
29
|
-
|
|
10
|
+
.header {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: calc(var(--cz-spacing) * 2);
|
|
14
|
+
margin: 0 calc(var(--cz-spacing) * 5);
|
|
30
15
|
}
|
|
31
16
|
|
|
32
17
|
.path {
|
|
33
18
|
display: flex;
|
|
34
|
-
align-items: center;
|
|
35
19
|
flex-wrap: wrap;
|
|
36
|
-
|
|
20
|
+
align-items: center;
|
|
21
|
+
gap: 2px;
|
|
22
|
+
min-height: var(--cz-text-sm-line-height);
|
|
23
|
+
font-size: var(--cz-text-sm);
|
|
24
|
+
line-height: var(--cz-text-sm-line-height);
|
|
25
|
+
color: var(--cz-color-text-tertiary);
|
|
37
26
|
}
|
|
38
27
|
|
|
39
28
|
.slash {
|
|
40
|
-
|
|
29
|
+
color: var(--cz-color-text-quaternary);
|
|
41
30
|
}
|
|
42
31
|
|
|
43
|
-
.
|
|
32
|
+
.crumb {
|
|
33
|
+
all: unset;
|
|
44
34
|
cursor: pointer;
|
|
35
|
+
padding: 0 4px;
|
|
36
|
+
border-radius: var(--cz-radius-xs);
|
|
37
|
+
font-weight: var(--cz-font-weight-medium);
|
|
45
38
|
}
|
|
46
39
|
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
overflow-y: auto;
|
|
40
|
+
.crumb:hover {
|
|
41
|
+
color: var(--cz-color-text-secondary-hover);
|
|
42
|
+
background: var(--cz-color-bg-primary-hover);
|
|
51
43
|
}
|
|
52
44
|
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
padding: 5px;
|
|
45
|
+
.crumb:focus-visible {
|
|
46
|
+
box-shadow: var(--cz-focus-ring);
|
|
56
47
|
}
|
|
57
48
|
|
|
58
|
-
.
|
|
59
|
-
|
|
49
|
+
.crumb[aria-current] {
|
|
50
|
+
color: var(--cz-color-text-primary);
|
|
51
|
+
font-weight: var(--cz-font-weight-semibold);
|
|
60
52
|
}
|
|
61
53
|
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
font-size: 16px;
|
|
66
|
-
font-weight: 400;
|
|
67
|
-
color: var(--cz-text-color, inherit);
|
|
68
|
-
height: 40px;
|
|
69
|
-
line-height: 24px;
|
|
70
|
-
padding: 6px 12px 6px 16px;
|
|
71
|
-
cursor: pointer;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.name {
|
|
75
|
-
flex: auto;
|
|
54
|
+
.items {
|
|
55
|
+
height: var(--cosmoz-treenode-navigator-list-height, min(44dvh, 24rem));
|
|
56
|
+
margin: 0 8px;
|
|
76
57
|
}
|
|
77
58
|
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
);
|
|
83
|
-
|
|
59
|
+
.status {
|
|
60
|
+
margin: 0 calc(var(--cz-spacing) * 5);
|
|
61
|
+
min-height: var(--cz-text-sm-line-height);
|
|
62
|
+
padding-block: 0 calc(var(--cz-spacing) * 3);
|
|
63
|
+
color: var(--cz-color-text-tertiary);
|
|
64
|
+
font-size: var(--cz-text-sm);
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: calc(var(--cz-spacing) * 2);
|
|
84
68
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
fill: var(
|
|
88
|
-
--cosmoz-treenode-navigator-select-node-icon-color,
|
|
89
|
-
var(--cz-color-fg-secondary)
|
|
90
|
-
);
|
|
91
|
-
transition: color 0.8s ease-out;
|
|
69
|
+
.status:empty {
|
|
70
|
+
display: none;
|
|
92
71
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
72
|
+
.retry {
|
|
73
|
+
border: 0;
|
|
74
|
+
padding: 0;
|
|
75
|
+
background: none;
|
|
76
|
+
font: inherit;
|
|
77
|
+
color: var(--cz-color-text-brand-primary);
|
|
78
|
+
cursor: pointer;
|
|
96
79
|
text-decoration: underline;
|
|
97
80
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
81
|
+
.retry:focus-visible {
|
|
82
|
+
outline: none;
|
|
83
|
+
box-shadow: var(--cz-focus-ring);
|
|
101
84
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
85
|
+
@media (max-width: 480px) {
|
|
86
|
+
.header,
|
|
87
|
+
.status {
|
|
88
|
+
margin-inline: calc(var(--cz-spacing) * 4);
|
|
89
|
+
}
|
|
107
90
|
}
|
|
108
91
|
`;
|
|
109
92
|
//# sourceMappingURL=cosmoz-treenode-navigator.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmoz-treenode-navigator.styles.js","sourceRoot":"","sources":["../src/cosmoz-treenode-navigator.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,eAAe,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"cosmoz-treenode-navigator.styles.js","sourceRoot":"","sources":["../src/cosmoz-treenode-navigator.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNodes.d.ts","sourceRoot":"","sources":["../../src/hooks/useNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GACpB,MAAM,MAAM,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EACpC,MAAM,OAAO,EAAE;;;;
|
|
1
|
+
{"version":3,"file":"useNodes.d.ts","sourceRoot":"","sources":["../../src/hooks/useNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GACpB,MAAM,MAAM,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EACpC,MAAM,OAAO,EAAE;;;;CAgCf,CAAC"}
|
package/dist/hooks/useNodes.js
CHANGED
|
@@ -13,7 +13,8 @@ export const useNodes = (load, deps) => {
|
|
|
13
13
|
const [error, setError] = useState();
|
|
14
14
|
const request = useRef(0);
|
|
15
15
|
useEffect(() => {
|
|
16
|
-
const id =
|
|
16
|
+
const id = (request.current ?? 0) + 1;
|
|
17
|
+
request.current = id;
|
|
17
18
|
setLoading(true);
|
|
18
19
|
setError(undefined);
|
|
19
20
|
Promise.resolve()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNodes.js","sourceRoot":"","sources":["../../src/hooks/useNodes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAoC,EACpC,IAAe,EACd,EAAE;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAW,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"useNodes.js","sourceRoot":"","sources":["../../src/hooks/useNodes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAoC,EACpC,IAAe,EACd,EAAE;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAW,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QAErB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpB,OAAO,CAAC,OAAO,EAAE;aACf,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,CACJ,CAAC,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO;YACnC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACvB,UAAU,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,KAAK,OAAO,CAAC,OAAO;gBAAE,OAAO;YACnC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CACD,CAAC;IACJ,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Node } from '@neovici/cosmoz-tree';
|
|
2
|
+
import type { NodeSource } from '../util/source';
|
|
3
|
+
export declare const useSourceTree: (source: NodeSource, path: string, opened?: boolean) => {
|
|
4
|
+
model: {
|
|
5
|
+
subscribe: (listener: () => void) => () => void;
|
|
6
|
+
roots: () => Node[];
|
|
7
|
+
getChildren: (node: Node) => Node[];
|
|
8
|
+
hasChildren: (node: Node) => boolean;
|
|
9
|
+
pending: Map<string, Promise<void>>;
|
|
10
|
+
errors: Set<string>;
|
|
11
|
+
loadPath: (path: string) => Promise<Node[]>;
|
|
12
|
+
loadLevel: (path: string) => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
expanded: readonly string[];
|
|
15
|
+
setExpanded: import("@pionjs/pion").StateUpdater<readonly string[]>;
|
|
16
|
+
highlighted: string;
|
|
17
|
+
setHighlighted: import("@pionjs/pion").StateUpdater<string>;
|
|
18
|
+
error: boolean;
|
|
19
|
+
loading: boolean;
|
|
20
|
+
retry: () => void;
|
|
21
|
+
};
|
|
22
|
+
export declare const useSearchTree: (source: NodeSource, query: string) => {
|
|
23
|
+
found: {
|
|
24
|
+
matches: number;
|
|
25
|
+
roots: Node[];
|
|
26
|
+
getChildren: (node: Node) => Node[];
|
|
27
|
+
expanded: string[];
|
|
28
|
+
} | undefined;
|
|
29
|
+
loading: boolean;
|
|
30
|
+
error: boolean;
|
|
31
|
+
retry: () => void;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=useSourceTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSourceTree.d.ts","sourceRoot":"","sources":["../../src/hooks/useSourceTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,eAAO,MAAM,aAAa,GACzB,QAAQ,UAAU,EAClB,MAAM,MAAM,EACZ,SAAS,OAAO;;;;;;;;;;;;;;;;;;CAiEhB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,UAAU,EAAE,OAAO,MAAM;;;;;;;;;;CAsC9D,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { useEffect, useMemo, useState } from '@pionjs/pion';
|
|
2
|
+
import { searchTree, sourceTree } from '../util/source-tree';
|
|
3
|
+
export const useSourceTree = (source, path, opened) => {
|
|
4
|
+
const [, refresh] = useState(0);
|
|
5
|
+
const model = useMemo(() => sourceTree(source), [source, opened]);
|
|
6
|
+
const [expanded, setExpanded] = useState([]);
|
|
7
|
+
const [highlighted, setHighlighted] = useState('');
|
|
8
|
+
const [error, setError] = useState(false);
|
|
9
|
+
const [loading, setLoading] = useState(false);
|
|
10
|
+
const [attempt, setAttempt] = useState(0);
|
|
11
|
+
useEffect(() => model.subscribe(() => refresh((value) => value + 1)), [model]);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
setHighlighted('');
|
|
14
|
+
setExpanded([]);
|
|
15
|
+
if (opened === false)
|
|
16
|
+
return;
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
setLoading(true);
|
|
19
|
+
setError(false);
|
|
20
|
+
const initial = path ? model.loadPath(path) : Promise.resolve([]);
|
|
21
|
+
initial
|
|
22
|
+
.then(async (parts) => {
|
|
23
|
+
if (controller.signal.aborted)
|
|
24
|
+
return;
|
|
25
|
+
const current = parts[parts.length - 1];
|
|
26
|
+
setExpanded(parts.map((node) => node.pathLocator));
|
|
27
|
+
setHighlighted(current?.pathLocator === path ? path : '');
|
|
28
|
+
if (current) {
|
|
29
|
+
await Promise.all(parts
|
|
30
|
+
.filter((node) => source.hasChildren(node) !== false)
|
|
31
|
+
.map((node) => model.loadLevel(node.pathLocator)));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
await model.loadLevel('');
|
|
35
|
+
if (controller.signal.aborted)
|
|
36
|
+
return;
|
|
37
|
+
const roots = model.roots();
|
|
38
|
+
setExpanded(roots.map((node) => node.pathLocator));
|
|
39
|
+
await Promise.all(roots
|
|
40
|
+
.filter((node) => source.hasChildren(node) !== false)
|
|
41
|
+
.map((node) => model.loadLevel(node.pathLocator)));
|
|
42
|
+
}
|
|
43
|
+
}, () => {
|
|
44
|
+
if (!controller.signal.aborted)
|
|
45
|
+
setError(true);
|
|
46
|
+
})
|
|
47
|
+
.finally(() => {
|
|
48
|
+
if (!controller.signal.aborted)
|
|
49
|
+
setLoading(false);
|
|
50
|
+
});
|
|
51
|
+
return () => controller.abort();
|
|
52
|
+
}, [model, path, attempt]);
|
|
53
|
+
return {
|
|
54
|
+
model,
|
|
55
|
+
expanded,
|
|
56
|
+
setExpanded,
|
|
57
|
+
highlighted,
|
|
58
|
+
setHighlighted,
|
|
59
|
+
error,
|
|
60
|
+
loading,
|
|
61
|
+
retry: () => setAttempt((value) => value + 1),
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export const useSearchTree = (source, query) => {
|
|
65
|
+
const [found, setFound] = useState();
|
|
66
|
+
const [loading, setLoading] = useState(false);
|
|
67
|
+
const [error, setError] = useState(false);
|
|
68
|
+
const [attempt, setAttempt] = useState(0);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
const controller = new AbortController();
|
|
71
|
+
setError(false);
|
|
72
|
+
if (!query) {
|
|
73
|
+
setFound(undefined);
|
|
74
|
+
setLoading(false);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
setLoading(true);
|
|
78
|
+
setFound(undefined);
|
|
79
|
+
searchTree(source, query)
|
|
80
|
+
.then((result) => {
|
|
81
|
+
if (!controller.signal.aborted)
|
|
82
|
+
setFound(result);
|
|
83
|
+
}, () => {
|
|
84
|
+
if (!controller.signal.aborted) {
|
|
85
|
+
setFound(undefined);
|
|
86
|
+
setError(true);
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
.finally(() => {
|
|
90
|
+
if (!controller.signal.aborted)
|
|
91
|
+
setLoading(false);
|
|
92
|
+
});
|
|
93
|
+
return () => controller.abort();
|
|
94
|
+
}, [source, query, attempt]);
|
|
95
|
+
return {
|
|
96
|
+
found,
|
|
97
|
+
loading,
|
|
98
|
+
error,
|
|
99
|
+
retry: () => setAttempt((value) => value + 1),
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=useSourceTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSourceTree.js","sourceRoot":"","sources":["../../src/hooks/useSourceTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Row, TreeViewAccessors } from './types';
|
|
2
|
+
export declare const defaultGetId: (node: unknown) => string;
|
|
3
|
+
export declare const defaultGetLabel: (node: unknown) => string;
|
|
4
|
+
export declare const defaultGetChildren: (node: unknown) => readonly unknown[] | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* The rows a reader sees: roots, and the children of every expanded node,
|
|
7
|
+
* depth first. Only expanded branches are walked, so a node with a huge
|
|
8
|
+
* number of children costs nothing until it is opened.
|
|
9
|
+
*/
|
|
10
|
+
export declare const flatten: <T>(items: readonly T[] | null | undefined, expanded: ReadonlySet<string>, { getId, getChildren, hasChildren: canExpand, }?: TreeViewAccessors<T>) => Row<T>[];
|
|
11
|
+
export type KeyAction = {
|
|
12
|
+
type: 'focus';
|
|
13
|
+
index: number;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'expand';
|
|
16
|
+
id: string;
|
|
17
|
+
} | {
|
|
18
|
+
type: 'collapse';
|
|
19
|
+
id: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* What a navigation key does on the row at `index`, following the WAI-ARIA
|
|
23
|
+
* tree pattern. Returns nothing when the key has no effect there, so the
|
|
24
|
+
* caller can leave the event alone (and native scrolling working).
|
|
25
|
+
*/
|
|
26
|
+
export declare const keyAction: <T>(rows: readonly Row<T>[], index: number, key: string) => KeyAction | undefined;
|
|
27
|
+
/** `expanded` with `id` added or removed. */
|
|
28
|
+
export declare const toggleId: (expanded: readonly string[], id: string, open?: boolean) => string[];
|
|
29
|
+
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/tree-view/flatten.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAItD,eAAO,MAAM,YAAY,GAAI,MAAM,OAAO,WAA8B,CAAC;AAEzE,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,WACa,CAAC;AAE3D,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,KACpB,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EACxB,OAAO,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,UAAU,WAAW,CAAC,MAAM,CAAC,EAC7B,kDAMG,iBAAiB,CAAC,CAAC,CAAM,KAC1B,GAAG,CAAC,CAAC,CAAC,EA4BR,CAAC;AAEF,MAAM,MAAM,SAAS,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EAC1B,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EACvB,OAAO,MAAM,EACb,KAAK,MAAM,KACT,SAAS,GAAG,SAmCd,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,QAAQ,GACpB,UAAU,SAAS,MAAM,EAAE,EAC3B,IAAI,MAAM,EACV,cAA6B,KAC3B,MAAM,EAIR,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export const defaultGetId = (node) => String(node.id);
|
|
2
|
+
export const defaultGetLabel = (node) => String(node.label ?? node.name ?? '');
|
|
3
|
+
export const defaultGetChildren = (node) => node.children;
|
|
4
|
+
/**
|
|
5
|
+
* The rows a reader sees: roots, and the children of every expanded node,
|
|
6
|
+
* depth first. Only expanded branches are walked, so a node with a huge
|
|
7
|
+
* number of children costs nothing until it is opened.
|
|
8
|
+
*/
|
|
9
|
+
export const flatten = (items, expanded, { getId = defaultGetId, getChildren = defaultGetChildren, hasChildren: canExpand, } = {}) => {
|
|
10
|
+
const rows = [];
|
|
11
|
+
const visit = (nodes, level, parentId) => {
|
|
12
|
+
const setsize = nodes.length;
|
|
13
|
+
nodes.forEach((node, i) => {
|
|
14
|
+
const id = getId(node);
|
|
15
|
+
const children = getChildren(node);
|
|
16
|
+
const hasChildren = canExpand?.(node) ?? (children?.length ?? 0) > 0;
|
|
17
|
+
const isExpanded = hasChildren && expanded.has(id);
|
|
18
|
+
rows.push({
|
|
19
|
+
node,
|
|
20
|
+
id,
|
|
21
|
+
level,
|
|
22
|
+
posinset: i + 1,
|
|
23
|
+
setsize,
|
|
24
|
+
parentId,
|
|
25
|
+
hasChildren,
|
|
26
|
+
expanded: isExpanded,
|
|
27
|
+
});
|
|
28
|
+
if (isExpanded) {
|
|
29
|
+
visit(children ?? [], level + 1, id);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
if (items?.length) {
|
|
34
|
+
visit(items, 1);
|
|
35
|
+
}
|
|
36
|
+
return rows;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* What a navigation key does on the row at `index`, following the WAI-ARIA
|
|
40
|
+
* tree pattern. Returns nothing when the key has no effect there, so the
|
|
41
|
+
* caller can leave the event alone (and native scrolling working).
|
|
42
|
+
*/
|
|
43
|
+
export const keyAction = (rows, index, key) => {
|
|
44
|
+
const row = rows[index];
|
|
45
|
+
if (!row) {
|
|
46
|
+
return rows.length > 0 ? { type: 'focus', index: 0 } : undefined;
|
|
47
|
+
}
|
|
48
|
+
switch (key) {
|
|
49
|
+
case 'ArrowDown':
|
|
50
|
+
return index < rows.length - 1
|
|
51
|
+
? { type: 'focus', index: index + 1 }
|
|
52
|
+
: undefined;
|
|
53
|
+
case 'ArrowUp':
|
|
54
|
+
return index > 0 ? { type: 'focus', index: index - 1 } : undefined;
|
|
55
|
+
case 'Home':
|
|
56
|
+
return index > 0 ? { type: 'focus', index: 0 } : undefined;
|
|
57
|
+
case 'End':
|
|
58
|
+
return index < rows.length - 1
|
|
59
|
+
? { type: 'focus', index: rows.length - 1 }
|
|
60
|
+
: undefined;
|
|
61
|
+
case 'ArrowRight':
|
|
62
|
+
if (!row.hasChildren)
|
|
63
|
+
return undefined;
|
|
64
|
+
if (!row.expanded)
|
|
65
|
+
return { type: 'expand', id: row.id };
|
|
66
|
+
return rows[index + 1]?.parentId === row.id
|
|
67
|
+
? { type: 'focus', index: index + 1 }
|
|
68
|
+
: undefined;
|
|
69
|
+
case 'ArrowLeft': {
|
|
70
|
+
if (row.expanded)
|
|
71
|
+
return { type: 'collapse', id: row.id };
|
|
72
|
+
if (row.parentId == null)
|
|
73
|
+
return undefined;
|
|
74
|
+
const parent = rows.findIndex((r, i) => i < index && r.id === row.parentId);
|
|
75
|
+
return parent >= 0 ? { type: 'focus', index: parent } : undefined;
|
|
76
|
+
}
|
|
77
|
+
default:
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
/** `expanded` with `id` added or removed. */
|
|
82
|
+
export const toggleId = (expanded, id, open = !expanded.includes(id)) => {
|
|
83
|
+
const has = expanded.includes(id);
|
|
84
|
+
if (open === has)
|
|
85
|
+
return [...expanded];
|
|
86
|
+
return open ? [...expanded, id] : expanded.filter((e) => e !== id);
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=flatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../src/tree-view/flatten.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RangeChangedEvent } from '@lit-labs/virtualizer/events.js';
|
|
2
|
+
import { type VirtualizerHostElement } from '@lit-labs/virtualizer/virtualize.js';
|
|
3
|
+
import type { Props, Row } from './types';
|
|
4
|
+
interface State<T> {
|
|
5
|
+
rows: Row<T>[];
|
|
6
|
+
selected?: string;
|
|
7
|
+
tabStopId?: string;
|
|
8
|
+
scrollerRef: {
|
|
9
|
+
current: VirtualizerHostElement | undefined;
|
|
10
|
+
};
|
|
11
|
+
toggle: (id: string) => void;
|
|
12
|
+
select: (row: Row<T>) => void;
|
|
13
|
+
activate: (row: Row<T>) => void;
|
|
14
|
+
onKeyDown: (e: KeyboardEvent) => void;
|
|
15
|
+
treeTabIndex: number;
|
|
16
|
+
focusActiveItem: () => void;
|
|
17
|
+
onRowFocus: (row: Row<T>) => void;
|
|
18
|
+
onRangeChanged: (event: RangeChangedEvent) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare const render: <T>({ label, renderIcon, getLabel }: Props<T>, { rows, selected, tabStopId, scrollerRef, toggle, select, activate, onKeyDown, treeTabIndex, focusActiveItem, onRowFocus, onRangeChanged, }: State<T>) => import("lit-html").TemplateResult<1>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/tree-view/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE1C,UAAU,KAAK,CAAC,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QAAE,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAA;KAAE,CAAC;IAC7D,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACnD;AAID,eAAO,MAAM,MAAM,GAAI,CAAC,EACvB,iCAAmD,KAAK,CAAC,CAAC,CAAC,EAC3D,6IAaG,KAAK,CAAC,CAAC,CAAC,yCA+EX,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { virtualize, } from '@lit-labs/virtualizer/virtualize.js';
|
|
2
|
+
import { chevronRightIcon } from '@neovici/cosmoz-icons/untitled';
|
|
3
|
+
import { html, nothing } from 'lit-html';
|
|
4
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import { ref } from 'lit-html/directives/ref.js';
|
|
6
|
+
import { defaultGetLabel } from './flatten';
|
|
7
|
+
const stop = (e) => e.stopPropagation();
|
|
8
|
+
export const render = ({ label, renderIcon, getLabel = defaultGetLabel }, { rows, selected, tabStopId, scrollerRef, toggle, select, activate, onKeyDown, treeTabIndex, focusActiveItem, onRowFocus, onRangeChanged, }) => {
|
|
9
|
+
const renderRow = (row) => {
|
|
10
|
+
// While the rows shrink, the virtualizer can render once from its
|
|
11
|
+
// previous range and hand us indexes past the end.
|
|
12
|
+
if (!row)
|
|
13
|
+
return html ``;
|
|
14
|
+
const isSelected = row.id === selected;
|
|
15
|
+
return html `<div
|
|
16
|
+
role="treeitem"
|
|
17
|
+
class="row"
|
|
18
|
+
part="row"
|
|
19
|
+
data-id=${row.id}
|
|
20
|
+
aria-level=${row.level}
|
|
21
|
+
aria-posinset=${row.posinset}
|
|
22
|
+
aria-setsize=${row.setsize}
|
|
23
|
+
aria-expanded=${row.hasChildren ? String(row.expanded) : nothing}
|
|
24
|
+
aria-selected=${String(isSelected)}
|
|
25
|
+
tabindex=${row.id === tabStopId ? 0 : -1}
|
|
26
|
+
@focus=${() => onRowFocus(row)}
|
|
27
|
+
@click=${() => select(row)}
|
|
28
|
+
@dblclick=${() => activate(row)}
|
|
29
|
+
>
|
|
30
|
+
${Array.from({ length: row.level - 1 }, () => html `<span class="guide" part="guide"></span>`)}
|
|
31
|
+
<span class="content" part="content">
|
|
32
|
+
<span
|
|
33
|
+
class="toggle"
|
|
34
|
+
part="toggle"
|
|
35
|
+
aria-hidden="true"
|
|
36
|
+
@click=${row.hasChildren
|
|
37
|
+
? (e) => {
|
|
38
|
+
stop(e);
|
|
39
|
+
toggle(row.id);
|
|
40
|
+
}
|
|
41
|
+
: nothing}
|
|
42
|
+
@dblclick=${stop}
|
|
43
|
+
>${row.hasChildren
|
|
44
|
+
? chevronRightIcon({ width: '16', height: '16' })
|
|
45
|
+
: nothing}</span
|
|
46
|
+
>${renderIcon
|
|
47
|
+
? html `<span class="icon" part="icon"
|
|
48
|
+
>${renderIcon(row.node, {
|
|
49
|
+
expanded: row.expanded,
|
|
50
|
+
selected: isSelected,
|
|
51
|
+
hasChildren: row.hasChildren,
|
|
52
|
+
level: row.level,
|
|
53
|
+
})}</span
|
|
54
|
+
>`
|
|
55
|
+
: nothing}<span class="label" part="label"
|
|
56
|
+
>${getLabel(row.node)}</span
|
|
57
|
+
>
|
|
58
|
+
</span>
|
|
59
|
+
</div>`;
|
|
60
|
+
};
|
|
61
|
+
return html `<div
|
|
62
|
+
role="tree"
|
|
63
|
+
class="tree"
|
|
64
|
+
part="tree"
|
|
65
|
+
aria-label=${ifDefined(label)}
|
|
66
|
+
tabindex=${treeTabIndex}
|
|
67
|
+
@rangeChanged=${onRangeChanged}
|
|
68
|
+
@focus=${(event) => {
|
|
69
|
+
if (event.target === event.currentTarget)
|
|
70
|
+
focusActiveItem();
|
|
71
|
+
}}
|
|
72
|
+
@keydown=${onKeyDown}
|
|
73
|
+
${ref((el) => {
|
|
74
|
+
scrollerRef.current = el;
|
|
75
|
+
})}
|
|
76
|
+
>
|
|
77
|
+
${virtualize({
|
|
78
|
+
items: rows,
|
|
79
|
+
renderItem: renderRow,
|
|
80
|
+
keyFunction: (row, index) => row?.id ?? index,
|
|
81
|
+
scroller: true,
|
|
82
|
+
})}
|
|
83
|
+
</div>`;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tree-view/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/tree-view/styles.ts"],"names":[],"mappings":";AAKA,wBAgIE"}
|