@neovici/cosmoz-treenode-navigator 6.0.1 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +4 -12
  2. package/dist/cosmoz-treenode-button-view.d.ts +2 -0
  3. package/dist/cosmoz-treenode-button-view.d.ts.map +1 -0
  4. package/dist/cosmoz-treenode-button-view.js +203 -0
  5. package/dist/cosmoz-treenode-button-view.js.map +1 -0
  6. package/dist/cosmoz-treenode-button-view.styles.d.ts +3 -0
  7. package/dist/cosmoz-treenode-button-view.styles.d.ts.map +1 -0
  8. package/dist/cosmoz-treenode-button-view.styles.js +218 -0
  9. package/dist/cosmoz-treenode-button-view.styles.js.map +1 -0
  10. package/dist/cosmoz-treenode-navigator.d.ts +2 -0
  11. package/dist/cosmoz-treenode-navigator.d.ts.map +1 -0
  12. package/dist/cosmoz-treenode-navigator.js +233 -0
  13. package/dist/cosmoz-treenode-navigator.js.map +1 -0
  14. package/dist/cosmoz-treenode-navigator.styles.d.ts +3 -0
  15. package/dist/cosmoz-treenode-navigator.styles.d.ts.map +1 -0
  16. package/{cosmoz-treenode-navigator.styles.js → dist/cosmoz-treenode-navigator.styles.js} +12 -4
  17. package/dist/cosmoz-treenode-navigator.styles.js.map +1 -0
  18. package/dist/hooks/useKeyDown.d.ts +2 -0
  19. package/dist/hooks/useKeyDown.d.ts.map +1 -0
  20. package/dist/hooks/useKeyDown.js +16 -0
  21. package/dist/hooks/useKeyDown.js.map +1 -0
  22. package/dist/util/helpers.d.ts +51 -0
  23. package/dist/util/helpers.d.ts.map +1 -0
  24. package/dist/util/helpers.js +123 -0
  25. package/dist/util/helpers.js.map +1 -0
  26. package/package.json +61 -16
  27. package/test/data/basicTree.js +34 -34
  28. package/test/data/rtlTest.js +6 -7
  29. package/cosmoz-treenode-button-view.js +0 -445
  30. package/cosmoz-treenode-navigator.js +0 -297
  31. package/helpers.js +0 -124
  32. package/test/cosmoz-treenode-button-view.test.js +0 -52
  33. package/test/cosmoz-treenode-navigator.test.js +0 -102
@@ -0,0 +1,233 @@
1
+ import { component, useCallback, useEffect, useMemo, useProperty, useRef, useState, } from '@pionjs/pion';
2
+ import { html, nothing } from 'lit-html';
3
+ import { when } from 'lit-html/directives/when.js';
4
+ import { guard } from 'lit-html/directives/guard.js';
5
+ import { ref } from 'lit-html/directives/ref.js';
6
+ import { virtualize } from '@lit-labs/virtualizer/virtualize.js';
7
+ import '@neovici/cosmoz-input';
8
+ import { useMeta } from '@neovici/cosmoz-utils/hooks/use-meta';
9
+ import { computeDataPlane, computeRowClass, getParentPath, onNodeDblClicked, } from './util/helpers';
10
+ import style from './cosmoz-treenode-navigator.styles';
11
+ import { useHost } from '@neovici/cosmoz-utils/hooks/use-host';
12
+ import { notifyProperty } from '@neovici/cosmoz-utils/hooks/use-notify-property';
13
+ const NodeNavigator = ({
14
+ /**
15
+ * The main node structure
16
+ */
17
+ tree,
18
+ /**
19
+ * Placeholder for search field.
20
+ */
21
+ searchPlaceholder,
22
+ /**
23
+ * Text displayed when local search has finished
24
+ * to suggest a search on the entire tree
25
+ */
26
+ searchGlobalPlaceholder,
27
+ /**
28
+ * Minimum length of searchValue to trigger a search
29
+ */
30
+ searchMinLength, opened, }) => {
31
+ const listRef = useRef();
32
+ const host = useHost();
33
+ const [highlightedNode, setHighlightedNode] = useProperty('highlightedNode');
34
+ const [searchValue, setSearchValue] = useState('');
35
+ const [openNodePath, setOpenNodePath] = useState('');
36
+ const search = useMemo(() => (searchValue?.length > (searchMinLength ?? 2) - 1 && searchValue) ||
37
+ undefined, [searchValue, searchMinLength]);
38
+ const dataPlane = useMemo(() => computeDataPlane(tree, search, openNodePath), [tree, search, openNodePath]);
39
+ /**
40
+ * Opens a node (renderLevel) based on a given path
41
+ * @param clickedNode - The clicked node
42
+ * @return undefined
43
+ */
44
+ const onNodeClick = useCallback((clickedNode) => {
45
+ setOpenNodePath(clickedNode?.pathLocator || '');
46
+ setSearchValue('');
47
+ setHighlightedNode(null);
48
+ }, [tree]);
49
+ useEffect(() => {
50
+ if (!openNodePath) {
51
+ return;
52
+ }
53
+ notifyProperty(host, 'highlightedNodePath', '');
54
+ notifyProperty(host, 'nodesOnNodePath', []);
55
+ }, [openNodePath]);
56
+ useEffect(() => {
57
+ notifyProperty(host, 'highlightedNodePath', highlightedNode?.pathLocator || '');
58
+ }, [highlightedNode]);
59
+ const meta = useMeta({
60
+ dataPlane,
61
+ highlightedNode: highlightedNode ?? null,
62
+ onNodeClick,
63
+ });
64
+ useEffect(() => {
65
+ if (!opened) {
66
+ return;
67
+ }
68
+ const getVlist = () => {
69
+ const list = listRef.current;
70
+ if (!list)
71
+ return null;
72
+ return list[Object.getOwnPropertySymbols(list)[0]];
73
+ };
74
+ // autoscroll to highlighted node
75
+ const vlist = getVlist();
76
+ if (vlist && meta.highlightedNode) {
77
+ const index = meta.dataPlane?.indexOf(meta.highlightedNode);
78
+ if (index !== undefined && index >= 0) {
79
+ vlist.scrollToIndex = {
80
+ index,
81
+ position: 'center',
82
+ };
83
+ }
84
+ }
85
+ const handler = (e) => {
86
+ if ((e.ctrlKey && e.altKey) || e.defaultPrevented) {
87
+ return;
88
+ }
89
+ const { dataPlane: items, highlightedNode: node, onNodeClick: open, } = meta;
90
+ const vlist = getVlist();
91
+ if (!vlist)
92
+ return;
93
+ const currentIndex = items.findIndex((i) => i.pathLocator === node?.pathLocator);
94
+ const navigateToIndex = (newIndex, position) => {
95
+ if (newIndex >= 0 && newIndex < items.length) {
96
+ setHighlightedNode(items[newIndex]);
97
+ // check if scrolling is needed
98
+ const needsScroll = position === 'start'
99
+ ? newIndex < vlist._firstVisible
100
+ : newIndex > vlist._lastVisible;
101
+ if (needsScroll) {
102
+ vlist.scrollToIndex = { index: newIndex, position };
103
+ }
104
+ return true;
105
+ }
106
+ return false;
107
+ };
108
+ switch (e.key) {
109
+ case 'Up':
110
+ case 'ArrowUp': {
111
+ e.preventDefault();
112
+ navigateToIndex(Math.max(currentIndex - 1, 0), 'start');
113
+ break;
114
+ }
115
+ case 'Down':
116
+ case 'ArrowDown': {
117
+ e.preventDefault();
118
+ if (currentIndex < items.length - 1) {
119
+ navigateToIndex(currentIndex + 1, 'end');
120
+ }
121
+ break;
122
+ }
123
+ case 'Enter':
124
+ e.preventDefault();
125
+ if (node) {
126
+ host.dispatchEvent(new CustomEvent('node-dblclicked'));
127
+ }
128
+ break;
129
+ case 'Right':
130
+ case 'ArrowRight':
131
+ e.preventDefault();
132
+ if (node && tree.hasChildren(node)) {
133
+ open(node);
134
+ }
135
+ break;
136
+ default:
137
+ break;
138
+ }
139
+ };
140
+ document.addEventListener('keydown', handler, true);
141
+ return () => document.removeEventListener('keydown', handler, true);
142
+ }, [opened, meta]);
143
+ const renderItem = (node, index) => {
144
+ if (!node) {
145
+ return nothing;
146
+ }
147
+ return html ` <div class="item">
148
+ ${((parentPath) => when(search &&
149
+ (index === 0 ||
150
+ parentPath !== getParentPath(tree, dataPlane[index - 1])), () => html `
151
+ <div class="section">
152
+ ${tree.getPathString(parentPath, tree.searchProperty)}
153
+ </div>
154
+ `))(getParentPath(tree, node))}
155
+ <div
156
+ class=${computeRowClass('node', node, highlightedNode)}
157
+ @click=${() => setHighlightedNode(node)}
158
+ @dblclick=${(e) => onNodeDblClicked(e, host)}
159
+ >
160
+ <div class="name">${node[tree.searchProperty]}</div>
161
+ ${when(tree.hasChildren(node), () => html `
162
+ <span class="icon" @click=${() => onNodeClick(node)}>
163
+ <svg
164
+ viewBox="0 0 24 24"
165
+ preserveAspectRatio="xMidYMid meet"
166
+ focusable="false"
167
+ style="pointer-events: none; display: block; width: 100%; height: 100%;"
168
+ >
169
+ <g>
170
+ <path
171
+ d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"
172
+ ></path>
173
+ </g>
174
+ </svg>
175
+ </span>
176
+ `)}
177
+ </div>
178
+ </div>`;
179
+ };
180
+ return html `
181
+ <div class="header">
182
+ <h3 class="path">
183
+ <span class="icon" @click=${() => onNodeClick()}>
184
+ <svg
185
+ viewBox="0 0 24 24"
186
+ preserveAspectRatio="xMidYMid meet"
187
+ focusable="false"
188
+ style="pointer-events: none; display: block; width: 100%; height: 100%;"
189
+ >
190
+ <g><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"></path></g>
191
+ </svg>
192
+ </span>
193
+ ${guard([tree, openNodePath], () => ((openNodePath && tree?.getPathNodes(openNodePath)) || [])
194
+ .filter((node) => node !== undefined)
195
+ .map((node) => html `
196
+ <span class="slash">/</span>
197
+ <span
198
+ class="pointer"
199
+ tabindex="0"
200
+ @click=${() => onNodeClick(node)}
201
+ >${node[tree.searchProperty]}</span
202
+ >
203
+ `))}
204
+ </h3>
205
+ <cosmoz-input
206
+ tabindex="0"
207
+ .value=${searchValue}
208
+ .placeholder=${searchPlaceholder}
209
+ @input=${(e) => setSearchValue(e.target.value)}
210
+ />
211
+ </div>
212
+ ${when(tree, () => html ` <div
213
+ class="items"
214
+ ${ref((el) => (listRef.current = el))}
215
+ >
216
+ <div virtualizer-sizer></div>
217
+ ${virtualize({
218
+ items: dataPlane,
219
+ renderItem,
220
+ scroller: true,
221
+ })}
222
+ </div>`)}
223
+ ${when(search && openNodePath, () => html `
224
+ <button class="btn-ghost" @click=${() => setOpenNodePath('')}>
225
+ ${searchGlobalPlaceholder}
226
+ </button>
227
+ `)}
228
+ `;
229
+ };
230
+ customElements.define('cosmoz-treenode-navigator', component(NodeNavigator, {
231
+ styleSheets: [style],
232
+ }));
233
+ //# sourceMappingURL=cosmoz-treenode-navigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmoz-treenode-navigator.js","sourceRoot":"","sources":["../src/cosmoz-treenode-navigator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const _default: string;
2
+ export default _default;
3
+ //# sourceMappingURL=cosmoz-treenode-navigator.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmoz-treenode-navigator.styles.d.ts","sourceRoot":"","sources":["../src/cosmoz-treenode-navigator.styles.ts"],"names":[],"mappings":";AAEA,wBA4HE"}
@@ -1,6 +1,5 @@
1
- import { tagged as css } from '@neovici/cosmoz-utils';
2
-
3
- export default css`
1
+ import { css } from '@pionjs/pion';
2
+ export default css `
4
3
  :host {
5
4
  --cosmoz-treenode-navigator-select-node-icon-color: var(
6
5
  --primary-color,
@@ -36,6 +35,7 @@ export default css`
36
35
  display: flex;
37
36
  align-items: center;
38
37
  flex-wrap: wrap;
38
+ margin: 0;
39
39
  }
40
40
 
41
41
  .slash {
@@ -71,12 +71,14 @@ export default css`
71
71
  font-weight: 400;
72
72
  height: 40px;
73
73
  line-height: 24px;
74
- padding: 6px 12px;
74
+ padding: 6px 12px 6px 16px;
75
75
  cursor: pointer;
76
76
  }
77
+
77
78
  .name {
78
79
  flex: auto;
79
80
  }
81
+
80
82
  .icon {
81
83
  box-sizing: border-box;
82
84
  cursor: pointer;
@@ -116,4 +118,10 @@ export default css`
116
118
  font-size: 14px;
117
119
  font-family: inherit;
118
120
  }
121
+
122
+ .path > .pointer:hover,
123
+ .path > .pointer:has(~ .pointer:hover) {
124
+ text-decoration: underline;
125
+ }
119
126
  `;
127
+ //# sourceMappingURL=cosmoz-treenode-navigator.styles.js.map
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4HjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const useKeyDown: (key: string, callback: () => void) => void;
2
+ //# sourceMappingURL=useKeyDown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyDown.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyDown.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,IAAI,KAAG,IAe9D,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { useEffect } from '@pionjs/pion';
2
+ export const useKeyDown = (key, callback) => {
3
+ const onKeyDown = (e) => {
4
+ if (e.key === key && callback instanceof Function) {
5
+ e.preventDefault();
6
+ return callback();
7
+ }
8
+ };
9
+ useEffect(() => {
10
+ document.addEventListener('keydown', onKeyDown);
11
+ return () => {
12
+ document.removeEventListener('keydown', onKeyDown);
13
+ };
14
+ });
15
+ };
16
+ //# sourceMappingURL=useKeyDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyDown.js","sourceRoot":"","sources":["../../src/hooks/useKeyDown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAoB,EAAQ,EAAE;IACrE,MAAM,SAAS,GAAG,CAAC,CAAgB,EAAQ,EAAE;QAC5C,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;YACnD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO,QAAQ,EAAE,CAAC;QACnB,CAAC;IACF,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhD,OAAO,GAAG,EAAE;YACX,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Node, Tree } from '@neovici/cosmoz-tree';
2
+ export declare const //
3
+ getParentPath: (tree: Tree, node: Node) => string,
4
+ /**
5
+ * Returns a node array with the children of a node on the given path
6
+ * If the node doesn't have children, the node gets returned
7
+ * @param tree - The main tree
8
+ * @param pathLocator - The separated address parts of a node
9
+ * @return - Nodes
10
+ */
11
+ renderLevel: (tree: Tree, pathLocator: string) => Node[] | Node | null | undefined,
12
+ /**
13
+ * Returns the found nodes based on a search string and a given tree to be searched
14
+ * @param tree - The main tree
15
+ * @param search - The search string
16
+ * @param pathLocator - The separated address parts of a node
17
+ * @return - The found nodes
18
+ */
19
+ computeDataPlane: (tree: Tree, search: string | undefined, pathLocator: string) => Node[],
20
+ /**
21
+ * Returns the classes of a row based its selection state
22
+ * @param classes - The default classes
23
+ * @param node - Node to check
24
+ * @param highlightedNode - Currently highlighted node
25
+ * @return - The CSS classes
26
+ */
27
+ computeRowClass: (classes: string, node: Node, highlightedNode?: Node | null) => string,
28
+ /**
29
+ * Selects the doubled clicked node and dispatches a node-dblclicked event.
30
+ * @param event The triggering event
31
+ * @param host Host
32
+ * @return undefined
33
+ */
34
+ onNodeDblClicked: (event: Event, host: HTMLElement) => void,
35
+ /**
36
+ * Returns the nodes on a path specified by a given path locator
37
+ * @param pathLocator - The separated address parts of a node
38
+ * @param tree - The main tree
39
+ * @return - The found nodes or empty array
40
+ */
41
+ getTreePathParts: (pathLocator: string, tree: Tree) => Node[],
42
+ /**
43
+ * Returns a node based on a given path locator.
44
+ * If pathLocator is empty or not defined, null gets returned.
45
+ * If pathLocator is only partly valid, the last valid node gets returned.
46
+ * @param pathLocator - The separated address parts of a node
47
+ * @param tree - The main tree
48
+ * @return - The found node
49
+ */
50
+ getNode: (pathLocator: string, tree: Tree) => Node | null;
51
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/util/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,EAAE;AACd,aAAa,GAAI,MAAM,IAAI,EAAE,MAAM,IAAI,KAAG,MAOzC;AACD;;;;;;GAMG;AACH,WAAW,GACV,MAAM,IAAI,EACV,aAAa,MAAM,KACjB,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,SA6BzB;AACD;;;;;;GAMG;AACH,gBAAgB,GACf,MAAM,IAAI,EACV,QAAQ,MAAM,GAAG,SAAS,EAC1B,aAAa,MAAM,KACjB,IAAI,EAQN;AACD;;;;;;GAMG;AACH,eAAe,GACd,SAAS,MAAM,EACf,MAAM,IAAI,EACV,kBAAkB,IAAI,GAAG,IAAI,KAC3B,MASF;AACD;;;;;GAKG;AACH,gBAAgB,GAAI,OAAO,KAAK,EAAE,MAAM,WAAW,KAAG,IAQrD;AACD;;;;;GAKG;AACH,gBAAgB,GAAI,aAAa,MAAM,EAAE,MAAM,IAAI,KAAG,IAAI,EAOzD;AACD;;;;;;;GAOG;AACH,OAAO,GAAI,aAAa,MAAM,EAAE,MAAM,IAAI,KAAG,IAAI,GAAG,IAcnD,CAAC"}
@@ -0,0 +1,123 @@
1
+ export const //
2
+ getParentPath = (tree, node) => {
3
+ const path = node.pathLocator || node.path || '';
4
+ const { pathLocatorSeparator } = tree;
5
+ return path.includes(pathLocatorSeparator)
6
+ ? path.substring(0, path.lastIndexOf(pathLocatorSeparator))
7
+ : path;
8
+ },
9
+ /**
10
+ * Returns a node array with the children of a node on the given path
11
+ * If the node doesn't have children, the node gets returned
12
+ * @param tree - The main tree
13
+ * @param pathLocator - The separated address parts of a node
14
+ * @return - Nodes
15
+ */
16
+ renderLevel = (tree, pathLocator) => {
17
+ if (!tree) {
18
+ return undefined;
19
+ }
20
+ const node = tree.getNodeByPathLocator(pathLocator), children = node ? tree.getChildren(node) : [], { searchProperty } = tree, sortFunc = (a, b) => {
21
+ // First sort based on "folder" status (containing children)
22
+ if (tree.hasChildren(a)) {
23
+ if (!tree.hasChildren(b)) {
24
+ return -1;
25
+ }
26
+ }
27
+ else if (tree.hasChildren(b)) {
28
+ return 1;
29
+ }
30
+ // Then sort on searchProperty
31
+ const val1 = a[searchProperty], val2 = b[searchProperty];
32
+ if (val1 > val2) {
33
+ return 1;
34
+ }
35
+ if (val1 < val2) {
36
+ return -1;
37
+ }
38
+ return 0;
39
+ };
40
+ return children.length > 0 ? children.sort(sortFunc) : node;
41
+ },
42
+ /**
43
+ * Returns the found nodes based on a search string and a given tree to be searched
44
+ * @param tree - The main tree
45
+ * @param search - The search string
46
+ * @param pathLocator - The separated address parts of a node
47
+ * @return - The found nodes
48
+ */
49
+ computeDataPlane = (tree, search, pathLocator) => {
50
+ if (!tree) {
51
+ return [];
52
+ }
53
+ const nodes = renderLevel(tree, pathLocator);
54
+ return search
55
+ ? tree.searchNodes(search, nodes, false)
56
+ : nodes;
57
+ },
58
+ /**
59
+ * Returns the classes of a row based its selection state
60
+ * @param classes - The default classes
61
+ * @param node - Node to check
62
+ * @param highlightedNode - Currently highlighted node
63
+ * @return - The CSS classes
64
+ */
65
+ computeRowClass = (classes, node, highlightedNode) => {
66
+ let selected = false;
67
+ if (highlightedNode) {
68
+ selected =
69
+ node === highlightedNode ||
70
+ (node.id && node.id === highlightedNode.id) ||
71
+ node.pathLocator === highlightedNode.pathLocator;
72
+ }
73
+ return selected ? `${classes} selected` : classes;
74
+ },
75
+ /**
76
+ * Selects the doubled clicked node and dispatches a node-dblclicked event.
77
+ * @param event The triggering event
78
+ * @param host Host
79
+ * @return undefined
80
+ */
81
+ onNodeDblClicked = (event, host) => {
82
+ host.dispatchEvent(new CustomEvent('node-dblclicked', {
83
+ detail: {
84
+ model: event.model,
85
+ },
86
+ }));
87
+ },
88
+ /**
89
+ * Returns the nodes on a path specified by a given path locator
90
+ * @param pathLocator - The separated address parts of a node
91
+ * @param tree - The main tree
92
+ * @return - The found nodes or empty array
93
+ */
94
+ getTreePathParts = (pathLocator, tree) => {
95
+ if (!tree || !pathLocator) {
96
+ return [];
97
+ }
98
+ return tree
99
+ .getPathNodes(pathLocator)
100
+ .filter((node) => node !== undefined);
101
+ },
102
+ /**
103
+ * Returns a node based on a given path locator.
104
+ * If pathLocator is empty or not defined, null gets returned.
105
+ * If pathLocator is only partly valid, the last valid node gets returned.
106
+ * @param pathLocator - The separated address parts of a node
107
+ * @param tree - The main tree
108
+ * @return - The found node
109
+ */
110
+ getNode = (pathLocator, tree) => {
111
+ if (!tree || !pathLocator) {
112
+ return null;
113
+ }
114
+ const node = tree.getNodeByPathLocator(pathLocator);
115
+ let nodes;
116
+ if (!node) {
117
+ nodes = tree.getPathNodes(pathLocator).filter((n) => n != null);
118
+ }
119
+ return nodes && nodes.length > 0
120
+ ? nodes.pop() || null
121
+ : node || null;
122
+ };
123
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/util/helpers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-treenode-navigator",
3
- "version": "6.0.1",
4
- "description": "A Polymer component that lets you navigate and search through hierarchically structured data-nodes and select one of them.",
3
+ "version": "7.0.0",
4
+ "type": "module",
5
+ "description": "A Pion component that lets you navigate and search through hierarchically structured data-nodes and select one of them.",
5
6
  "keywords": [
6
- "polymer",
7
+ "pion",
8
+ "pionjs",
9
+ "haunted",
10
+ "lit-html",
7
11
  "web-components"
8
12
  ],
9
13
  "homepage": "https://github.com/neovici/cosmoz-treenode-navigator#readme",
@@ -16,21 +20,28 @@
16
20
  },
17
21
  "license": "Apache-2.0",
18
22
  "author": "",
19
- "main": "cosmoz-treenode-navigator.js",
23
+ "main": "dist/cosmoz-treenode-navigator.js",
24
+ "types": "dist/cosmoz-treenode-navigator.d.ts",
20
25
  "directories": {
21
26
  "test": "test"
22
27
  },
23
28
  "files": [
24
- "cosmoz-*.js",
25
- "helpers.js",
29
+ "dist",
26
30
  "test/data"
27
31
  ],
28
32
  "scripts": {
29
- "lint": "eslint --cache --ext .js .",
30
- "start": "wds",
33
+ "lint": "eslint --cache --ext .js,.ts .",
34
+ "start": "npm run storybook:start",
31
35
  "test": "wtr --coverage",
32
36
  "test:watch": "wtr --watch",
33
- "prepare": "husky install"
37
+ "prepare": "husky install && npm run build",
38
+ "prettier": "prettier --write \"**/*.{js,ts,json,css,md}\"",
39
+ "prettier:check": "prettier --check \"**/*.{js,ts,json,css,md}\"",
40
+ "build": "tsc",
41
+ "storybook:start": "storybook dev -p 8000",
42
+ "storybook:build": "storybook build",
43
+ "storybook:deploy": "storybook-to-ghpages",
44
+ "storybook:preview": "npm run storybook:build && web-dev-server --root-dir ./storybook-static/ --open"
34
45
  },
35
46
  "release": {
36
47
  "plugins": [
@@ -58,15 +69,27 @@
58
69
  ]
59
70
  }
60
71
  },
72
+ "exports": {
73
+ ".": {
74
+ "types": "./dist/cosmoz-treenode-navigator.d.ts",
75
+ "default": "./dist/cosmoz-treenode-navigator.js"
76
+ },
77
+ "./cosmoz-treenode-navigator": {
78
+ "types": "./dist/cosmoz-treenode-navigator.d.ts",
79
+ "default": "./dist/cosmoz-treenode-navigator.js"
80
+ },
81
+ "./cosmoz-treenode-button-view": {
82
+ "types": "./dist/cosmoz-treenode-button-view.d.ts",
83
+ "default": "./dist/cosmoz-treenode-button-view.js"
84
+ }
85
+ },
61
86
  "dependencies": {
62
87
  "@lit-labs/virtualizer": "^2.0.0",
63
- "@neovici/cfg": "^1.33.0",
64
- "@neovici/cosmoz-dialog": "^3.0.0",
65
- "@neovici/cosmoz-i18next": "^3.2.0",
88
+ "@neovici/cosmoz-i18next": "^3.4.0",
66
89
  "@neovici/cosmoz-input": "^5.0.0",
67
- "@neovici/cosmoz-tree": "^3.0.0",
68
- "@neovici/cosmoz-utils": "^6.0.0",
69
- "@pionjs/pion": "^2.0.0",
90
+ "@neovici/cosmoz-tree": "^3.6.1",
91
+ "@neovici/cosmoz-utils": "^6.8.1",
92
+ "@pionjs/pion": "^2.7.1",
70
93
  "@polymer/iron-icons": "^3.0.0",
71
94
  "@polymer/paper-button": "^3.0.0",
72
95
  "@polymer/paper-icon-button": "^3.0.0",
@@ -77,6 +100,9 @@
77
100
  "devDependencies": {
78
101
  "@commitlint/cli": "^18.0.0",
79
102
  "@commitlint/config-conventional": "^18.0.0",
103
+ "@eslint/eslintrc": "^3.3.0",
104
+ "@eslint/js": "^9.21.0",
105
+ "@neovici/cfg": "^2.1.0",
80
106
  "@open-wc/testing": "^4.0.0",
81
107
  "@polymer/iron-ajax": "^3.0.0",
82
108
  "@polymer/iron-component-page": "^4.0.0",
@@ -85,8 +111,27 @@
85
111
  "@polymer/test-fixture": "^4.0.2",
86
112
  "@semantic-release/changelog": "^6.0.0",
87
113
  "@semantic-release/git": "^10.0.0",
114
+ "@storybook/addon-essentials": "^8.6.4",
115
+ "@storybook/addon-links": "^8.6.4",
116
+ "@storybook/blocks": "^8.6.4",
117
+ "@storybook/builder-vite": "^8.6.4",
118
+ "@storybook/storybook-deployer": "^2.8.16",
119
+ "@storybook/web-components": "^8.6.4",
120
+ "@storybook/web-components-vite": "^8.6.4",
121
+ "@types/mocha": "^10.0.10",
122
+ "@types/node": "^22.13.10",
123
+ "@typescript-eslint/eslint-plugin": "^8.26.0",
124
+ "@typescript-eslint/parser": "^8.26.1",
125
+ "@web/dev-server-esbuild": "^1.0.4",
88
126
  "@webcomponents/webcomponentsjs": "^2.0.0",
127
+ "eslint-config-prettier": "^10.1.1",
128
+ "eslint-plugin-html": "^8.1.2",
129
+ "eslint-plugin-import": "^2.31.0",
130
+ "eslint-plugin-mocha": "^10.5.0",
131
+ "globals": "^16.0.0",
89
132
  "husky": "^8.0.0",
90
- "semantic-release": "^22.0.0"
133
+ "lit": "^3.2.1",
134
+ "semantic-release": "^22.0.0",
135
+ "typescript": "^5.8.2"
91
136
  }
92
137
  }