@canonical/react-ds-app-launchpad 0.9.0-experimental.2 → 0.9.0-experimental.5

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 (225) hide show
  1. package/dist/esm/ui/FileTree/Context.js +4 -0
  2. package/dist/esm/ui/FileTree/Context.js.map +1 -0
  3. package/dist/esm/ui/FileTree/Provider.js +74 -0
  4. package/dist/esm/ui/FileTree/Provider.js.map +1 -0
  5. package/dist/esm/ui/FileTree/common/File/File.js +12 -0
  6. package/dist/esm/ui/FileTree/common/File/File.js.map +1 -0
  7. package/dist/esm/ui/FileTree/common/File/index.js +4 -0
  8. package/dist/esm/ui/FileTree/common/File/index.js.map +1 -0
  9. package/dist/esm/ui/FileTree/common/File/types.js.map +1 -0
  10. package/dist/esm/ui/FileTree/common/Folder/Folder.js +12 -0
  11. package/dist/esm/ui/FileTree/common/Folder/Folder.js.map +1 -0
  12. package/dist/esm/ui/FileTree/common/Folder/index.js +4 -0
  13. package/dist/esm/ui/FileTree/common/Folder/index.js.map +1 -0
  14. package/dist/esm/ui/FileTree/common/Folder/types.js.map +1 -0
  15. package/dist/esm/ui/FileTree/common/IndentationBlock/IndentationBlock.js +16 -0
  16. package/dist/esm/ui/FileTree/common/IndentationBlock/IndentationBlock.js.map +1 -0
  17. package/dist/esm/ui/FileTree/common/IndentationBlock/index.js +4 -0
  18. package/dist/esm/ui/FileTree/common/IndentationBlock/index.js.map +1 -0
  19. package/dist/esm/ui/FileTree/common/IndentationBlock/types.js +2 -0
  20. package/dist/esm/ui/FileTree/common/IndentationBlock/types.js.map +1 -0
  21. package/dist/esm/ui/FileTree/common/Node/Context.js +10 -0
  22. package/dist/esm/ui/FileTree/common/Node/Context.js.map +1 -0
  23. package/dist/esm/ui/FileTree/common/Node/Provider.js +163 -0
  24. package/dist/esm/ui/FileTree/common/Node/Provider.js.map +1 -0
  25. package/dist/esm/ui/FileTree/common/Node/hooks/index.js +2 -0
  26. package/dist/esm/ui/FileTree/common/Node/hooks/index.js.map +1 -0
  27. package/dist/esm/ui/FileTree/common/Node/hooks/useNode.js +12 -0
  28. package/dist/esm/ui/FileTree/common/Node/hooks/useNode.js.map +1 -0
  29. package/dist/esm/ui/FileTree/common/Node/index.js +4 -0
  30. package/dist/esm/ui/FileTree/common/Node/index.js.map +1 -0
  31. package/dist/esm/ui/FileTree/common/Node/types.js +2 -0
  32. package/dist/esm/ui/FileTree/common/Node/types.js.map +1 -0
  33. package/dist/esm/ui/FileTree/common/SearchBox/SearchBox.js +31 -0
  34. package/dist/esm/ui/FileTree/common/SearchBox/SearchBox.js.map +1 -0
  35. package/dist/esm/ui/FileTree/common/SearchBox/index.js +4 -0
  36. package/dist/esm/ui/FileTree/common/SearchBox/index.js.map +1 -0
  37. package/dist/esm/ui/FileTree/common/SearchBox/types.js +2 -0
  38. package/dist/esm/ui/FileTree/common/SearchBox/types.js.map +1 -0
  39. package/dist/esm/ui/FileTree/common/TreeView/TreeView.js +60 -0
  40. package/dist/esm/ui/FileTree/common/TreeView/TreeView.js.map +1 -0
  41. package/dist/esm/ui/FileTree/common/TreeView/index.js +4 -0
  42. package/dist/esm/ui/FileTree/common/TreeView/index.js.map +1 -0
  43. package/dist/esm/ui/FileTree/common/TreeView/types.js +2 -0
  44. package/dist/esm/ui/FileTree/common/TreeView/types.js.map +1 -0
  45. package/dist/esm/ui/FileTree/common/index.js +5 -0
  46. package/dist/esm/ui/FileTree/common/index.js.map +1 -0
  47. package/dist/esm/ui/FileTree/hooks/index.js +2 -0
  48. package/dist/esm/ui/FileTree/hooks/index.js.map +1 -0
  49. package/dist/esm/ui/FileTree/hooks/useFileTree.js +11 -0
  50. package/dist/esm/ui/FileTree/hooks/useFileTree.js.map +1 -0
  51. package/dist/esm/ui/FileTree/index.js +10 -0
  52. package/dist/esm/ui/FileTree/index.js.map +1 -0
  53. package/dist/esm/ui/FileTree/styles.css +47 -0
  54. package/dist/esm/ui/FileTree/types.js +2 -0
  55. package/dist/esm/ui/{Button → FileTree}/types.js.map +1 -1
  56. package/dist/esm/ui/FileTree/utils/hashNodeName.js +11 -0
  57. package/dist/esm/ui/FileTree/utils/hashNodeName.js.map +1 -0
  58. package/dist/esm/ui/FileTree/utils/index.js +2 -0
  59. package/dist/esm/ui/FileTree/utils/index.js.map +1 -0
  60. package/dist/esm/ui/GitDiffViewer/Context.js +4 -0
  61. package/dist/esm/ui/GitDiffViewer/Context.js.map +1 -0
  62. package/dist/esm/ui/GitDiffViewer/Provider.js +31 -0
  63. package/dist/esm/ui/GitDiffViewer/Provider.js.map +1 -0
  64. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/CodeDiffViewer.js +119 -0
  65. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/CodeDiffViewer.js.map +1 -0
  66. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/DiffLine.js +33 -0
  67. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/DiffLine.js.map +1 -0
  68. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/index.js +4 -0
  69. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/index.js.map +1 -0
  70. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/types.js +2 -0
  71. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/types.js.map +1 -0
  72. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/index.js +2 -0
  73. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/common/index.js.map +1 -0
  74. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/index.js +4 -0
  75. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/index.js.map +1 -0
  76. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/types.js +2 -0
  77. package/dist/esm/ui/GitDiffViewer/common/CodeDiffViewer/types.js.map +1 -0
  78. package/dist/esm/ui/GitDiffViewer/common/FileHeader/FileHeader.js +35 -0
  79. package/dist/esm/ui/GitDiffViewer/common/FileHeader/FileHeader.js.map +1 -0
  80. package/dist/esm/ui/GitDiffViewer/common/FileHeader/index.js +4 -0
  81. package/dist/esm/ui/GitDiffViewer/common/FileHeader/index.js.map +1 -0
  82. package/dist/esm/ui/GitDiffViewer/common/FileHeader/types.js +2 -0
  83. package/dist/esm/ui/GitDiffViewer/common/FileHeader/types.js.map +1 -0
  84. package/dist/esm/ui/GitDiffViewer/common/index.js +3 -0
  85. package/dist/esm/ui/GitDiffViewer/common/index.js.map +1 -0
  86. package/dist/esm/ui/GitDiffViewer/hooks/index.js +2 -0
  87. package/dist/esm/ui/GitDiffViewer/hooks/index.js.map +1 -0
  88. package/dist/esm/ui/GitDiffViewer/hooks/useGitDiffViewer.js +11 -0
  89. package/dist/esm/ui/GitDiffViewer/hooks/useGitDiffViewer.js.map +1 -0
  90. package/dist/esm/ui/GitDiffViewer/index.js +9 -0
  91. package/dist/esm/ui/GitDiffViewer/index.js.map +1 -0
  92. package/dist/esm/ui/GitDiffViewer/styles.css +38 -0
  93. package/dist/esm/ui/GitDiffViewer/types.js +2 -0
  94. package/dist/esm/ui/{Chip → GitDiffViewer}/types.js.map +1 -1
  95. package/dist/esm/ui/GitDiffViewer/utils/index.js +2 -0
  96. package/dist/esm/ui/GitDiffViewer/utils/index.js.map +1 -0
  97. package/dist/esm/ui/GitDiffViewer/utils/parseGitDiff.js +73 -0
  98. package/dist/esm/ui/GitDiffViewer/utils/parseGitDiff.js.map +1 -0
  99. package/dist/esm/ui/index.js +1 -1
  100. package/dist/esm/ui/index.js.map +1 -1
  101. package/dist/types/ui/FileTree/Context.d.ts +4 -0
  102. package/dist/types/ui/FileTree/Context.d.ts.map +1 -0
  103. package/dist/types/ui/FileTree/Provider.d.ts +7 -0
  104. package/dist/types/ui/FileTree/Provider.d.ts.map +1 -0
  105. package/dist/types/ui/FileTree/common/File/File.d.ts +10 -0
  106. package/dist/types/ui/FileTree/common/File/File.d.ts.map +1 -0
  107. package/dist/types/ui/FileTree/common/File/index.d.ts +3 -0
  108. package/dist/types/ui/FileTree/common/File/index.d.ts.map +1 -0
  109. package/dist/types/ui/FileTree/common/File/types.d.ts +16 -0
  110. package/dist/types/ui/FileTree/common/File/types.d.ts.map +1 -0
  111. package/dist/types/ui/FileTree/common/Folder/Folder.d.ts +10 -0
  112. package/dist/types/ui/FileTree/common/Folder/Folder.d.ts.map +1 -0
  113. package/dist/types/ui/FileTree/common/Folder/index.d.ts +3 -0
  114. package/dist/types/ui/FileTree/common/Folder/index.d.ts.map +1 -0
  115. package/dist/types/ui/FileTree/common/Folder/types.d.ts +16 -0
  116. package/dist/types/ui/FileTree/common/Folder/types.d.ts.map +1 -0
  117. package/dist/types/ui/FileTree/common/IndentationBlock/IndentationBlock.d.ts +10 -0
  118. package/dist/types/ui/FileTree/common/IndentationBlock/IndentationBlock.d.ts.map +1 -0
  119. package/dist/types/ui/FileTree/common/IndentationBlock/index.d.ts +3 -0
  120. package/dist/types/ui/FileTree/common/IndentationBlock/index.d.ts.map +1 -0
  121. package/dist/types/ui/FileTree/common/IndentationBlock/types.d.ts +12 -0
  122. package/dist/types/ui/FileTree/common/IndentationBlock/types.d.ts.map +1 -0
  123. package/dist/types/ui/FileTree/common/Node/Context.d.ts +5 -0
  124. package/dist/types/ui/FileTree/common/Node/Context.d.ts.map +1 -0
  125. package/dist/types/ui/FileTree/common/Node/Provider.d.ts +6 -0
  126. package/dist/types/ui/FileTree/common/Node/Provider.d.ts.map +1 -0
  127. package/dist/types/ui/FileTree/common/Node/hooks/index.d.ts +2 -0
  128. package/dist/types/ui/FileTree/common/Node/hooks/index.d.ts.map +1 -0
  129. package/dist/types/ui/FileTree/common/Node/hooks/useNode.d.ts +3 -0
  130. package/dist/types/ui/FileTree/common/Node/hooks/useNode.d.ts.map +1 -0
  131. package/dist/types/ui/FileTree/common/Node/index.d.ts +5 -0
  132. package/dist/types/ui/FileTree/common/Node/index.d.ts.map +1 -0
  133. package/dist/types/ui/FileTree/common/Node/types.d.ts +28 -0
  134. package/dist/types/ui/FileTree/common/Node/types.d.ts.map +1 -0
  135. package/dist/types/ui/FileTree/common/SearchBox/SearchBox.d.ts +10 -0
  136. package/dist/types/ui/FileTree/common/SearchBox/SearchBox.d.ts.map +1 -0
  137. package/dist/types/ui/FileTree/common/SearchBox/index.d.ts +3 -0
  138. package/dist/types/ui/FileTree/common/SearchBox/index.d.ts.map +1 -0
  139. package/dist/types/ui/FileTree/common/SearchBox/types.d.ts +12 -0
  140. package/dist/types/ui/FileTree/common/SearchBox/types.d.ts.map +1 -0
  141. package/dist/types/ui/FileTree/common/TreeView/TreeView.d.ts +16 -0
  142. package/dist/types/ui/FileTree/common/TreeView/TreeView.d.ts.map +1 -0
  143. package/dist/types/ui/FileTree/common/TreeView/index.d.ts +3 -0
  144. package/dist/types/ui/FileTree/common/TreeView/index.d.ts.map +1 -0
  145. package/dist/types/ui/FileTree/common/TreeView/types.d.ts +20 -0
  146. package/dist/types/ui/FileTree/common/TreeView/types.d.ts.map +1 -0
  147. package/dist/types/ui/FileTree/common/index.d.ts +5 -0
  148. package/dist/types/ui/FileTree/common/index.d.ts.map +1 -0
  149. package/dist/types/ui/FileTree/hooks/index.d.ts +2 -0
  150. package/dist/types/ui/FileTree/hooks/index.d.ts.map +1 -0
  151. package/dist/types/ui/FileTree/hooks/useFileTree.d.ts +3 -0
  152. package/dist/types/ui/FileTree/hooks/useFileTree.d.ts.map +1 -0
  153. package/dist/types/ui/FileTree/index.d.ts +5 -0
  154. package/dist/types/ui/FileTree/index.d.ts.map +1 -0
  155. package/dist/types/ui/FileTree/types.d.ts +69 -0
  156. package/dist/types/ui/FileTree/types.d.ts.map +1 -0
  157. package/dist/types/ui/FileTree/utils/hashNodeName.d.ts +3 -0
  158. package/dist/types/ui/FileTree/utils/hashNodeName.d.ts.map +1 -0
  159. package/dist/types/ui/FileTree/utils/index.d.ts +2 -0
  160. package/dist/types/ui/FileTree/utils/index.d.ts.map +1 -0
  161. package/dist/types/ui/GitDiffViewer/Context.d.ts +4 -0
  162. package/dist/types/ui/GitDiffViewer/Context.d.ts.map +1 -0
  163. package/dist/types/ui/GitDiffViewer/Provider.d.ts +5 -0
  164. package/dist/types/ui/GitDiffViewer/Provider.d.ts.map +1 -0
  165. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/CodeDiffViewer.d.ts +16 -0
  166. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/CodeDiffViewer.d.ts.map +1 -0
  167. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/DiffLine.d.ts +11 -0
  168. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/DiffLine.d.ts.map +1 -0
  169. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/index.d.ts +3 -0
  170. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/index.d.ts.map +1 -0
  171. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/types.d.ts +20 -0
  172. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/DiffLine/types.d.ts.map +1 -0
  173. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/index.d.ts +2 -0
  174. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/common/index.d.ts.map +1 -0
  175. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/index.d.ts +3 -0
  176. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/index.d.ts.map +1 -0
  177. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/types.d.ts +18 -0
  178. package/dist/types/ui/GitDiffViewer/common/CodeDiffViewer/types.d.ts.map +1 -0
  179. package/dist/types/ui/GitDiffViewer/common/FileHeader/FileHeader.d.ts +15 -0
  180. package/dist/types/ui/GitDiffViewer/common/FileHeader/FileHeader.d.ts.map +1 -0
  181. package/dist/types/ui/GitDiffViewer/common/FileHeader/index.d.ts +3 -0
  182. package/dist/types/ui/GitDiffViewer/common/FileHeader/index.d.ts.map +1 -0
  183. package/dist/types/ui/GitDiffViewer/common/FileHeader/types.d.ts +17 -0
  184. package/dist/types/ui/GitDiffViewer/common/FileHeader/types.d.ts.map +1 -0
  185. package/dist/types/ui/GitDiffViewer/common/index.d.ts +3 -0
  186. package/dist/types/ui/GitDiffViewer/common/index.d.ts.map +1 -0
  187. package/dist/types/ui/GitDiffViewer/hooks/index.d.ts +2 -0
  188. package/dist/types/ui/GitDiffViewer/hooks/index.d.ts.map +1 -0
  189. package/dist/types/ui/GitDiffViewer/hooks/useGitDiffViewer.d.ts +3 -0
  190. package/dist/types/ui/GitDiffViewer/hooks/useGitDiffViewer.d.ts.map +1 -0
  191. package/dist/types/ui/GitDiffViewer/index.d.ts +6 -0
  192. package/dist/types/ui/GitDiffViewer/index.d.ts.map +1 -0
  193. package/dist/types/ui/GitDiffViewer/types.d.ts +77 -0
  194. package/dist/types/ui/GitDiffViewer/types.d.ts.map +1 -0
  195. package/dist/types/ui/GitDiffViewer/utils/index.d.ts +2 -0
  196. package/dist/types/ui/GitDiffViewer/utils/index.d.ts.map +1 -0
  197. package/dist/types/ui/GitDiffViewer/utils/parseGitDiff.d.ts +4 -0
  198. package/dist/types/ui/GitDiffViewer/utils/parseGitDiff.d.ts.map +1 -0
  199. package/dist/types/ui/index.d.ts +1 -1
  200. package/dist/types/ui/index.d.ts.map +1 -1
  201. package/package.json +5 -3
  202. package/dist/esm/ui/Button/Button.js +0 -10
  203. package/dist/esm/ui/Button/Button.js.map +0 -1
  204. package/dist/esm/ui/Button/index.js +0 -2
  205. package/dist/esm/ui/Button/index.js.map +0 -1
  206. package/dist/esm/ui/Button/styles.css +0 -63
  207. package/dist/esm/ui/Chip/Chip.css +0 -79
  208. package/dist/esm/ui/Chip/Chip.js +0 -15
  209. package/dist/esm/ui/Chip/Chip.js.map +0 -1
  210. package/dist/esm/ui/Chip/index.js +0 -4
  211. package/dist/esm/ui/Chip/index.js.map +0 -1
  212. package/dist/types/ui/Button/Button.d.ts +0 -6
  213. package/dist/types/ui/Button/Button.d.ts.map +0 -1
  214. package/dist/types/ui/Button/index.d.ts +0 -3
  215. package/dist/types/ui/Button/index.d.ts.map +0 -1
  216. package/dist/types/ui/Button/types.d.ts +0 -15
  217. package/dist/types/ui/Button/types.d.ts.map +0 -1
  218. package/dist/types/ui/Chip/Chip.d.ts +0 -10
  219. package/dist/types/ui/Chip/Chip.d.ts.map +0 -1
  220. package/dist/types/ui/Chip/index.d.ts +0 -3
  221. package/dist/types/ui/Chip/index.d.ts.map +0 -1
  222. package/dist/types/ui/Chip/types.d.ts +0 -27
  223. package/dist/types/ui/Chip/types.d.ts.map +0 -1
  224. /package/dist/esm/ui/{Button → FileTree/common/File}/types.js +0 -0
  225. /package/dist/esm/ui/{Chip → FileTree/common/Folder}/types.js +0 -0
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ const Context = createContext(null);
3
+ export default Context;
4
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../../src/ui/FileTree/Context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,MAAM,OAAO,GAAG,aAAa,CAAwB,IAAI,CAAC,CAAC;AAE3D,eAAe,OAAO,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef } from "react";
3
+ import Context from "./Context.js";
4
+ import "./styles.css";
5
+ const componentCssClassName = "ds file-tree";
6
+ export const dataPathHash = "data-path-hash";
7
+ const Provider = ({ id, className, style, children, ...contextOptions }) => {
8
+ const fileTreeRef = useRef(null);
9
+ const handleFocusNextNode = useCallback((direction) => {
10
+ if (!fileTreeRef.current)
11
+ return;
12
+ const currentNode = fileTreeRef.current.querySelector(`[${dataPathHash}]:focus`);
13
+ const currentNodeHash = currentNode?.getAttribute(dataPathHash);
14
+ if (!currentNodeHash)
15
+ return;
16
+ const nextNode = direction === "up"
17
+ ? fileTreeRef.current.querySelector(`[${dataPathHash}]:has(+ [${dataPathHash}="${currentNodeHash}"])`)
18
+ : fileTreeRef.current.querySelector(`[${dataPathHash}="${currentNodeHash}"] + [${dataPathHash}]`);
19
+ if (!nextNode || !currentNode)
20
+ return;
21
+ nextNode.focus();
22
+ currentNode.setAttribute("tabindex", "-1");
23
+ nextNode.setAttribute("tabindex", "0");
24
+ }, []);
25
+ const handleFocusEndNode = useCallback((end) => {
26
+ if (!fileTreeRef.current)
27
+ return;
28
+ const endNode = fileTreeRef.current.querySelector(`[${dataPathHash}]:${end === "start" ? "first" : "last"}-of-type`);
29
+ const currentNode = fileTreeRef.current.querySelector(`[${dataPathHash}]:focus`);
30
+ if (!endNode || !currentNode)
31
+ return;
32
+ endNode.focus();
33
+ currentNode.setAttribute("tabindex", "-1");
34
+ endNode.setAttribute("tabindex", "0");
35
+ }, []);
36
+ const handleFocusNextSiblingCharacter = useCallback((character) => {
37
+ if (!fileTreeRef.current)
38
+ return;
39
+ const currentNode = fileTreeRef.current.querySelector(`[${dataPathHash}]:focus`);
40
+ if (!currentNode)
41
+ return;
42
+ const currentNodeHash = currentNode.getAttribute(dataPathHash);
43
+ if (!currentNodeHash)
44
+ return;
45
+ const matchingNodes = Array.from(fileTreeRef.current.querySelectorAll(`[data-name^="${character}"]`));
46
+ const currentNodeIndex = matchingNodes.findIndex((node) => node === currentNode);
47
+ const nextNodeWithCharacter = matchingNodes.at((currentNodeIndex + 1) % matchingNodes.length);
48
+ if (!nextNodeWithCharacter)
49
+ return;
50
+ nextNodeWithCharacter.focus();
51
+ currentNode.setAttribute("tabindex", "-1");
52
+ nextNodeWithCharacter.setAttribute("tabindex", "0");
53
+ }, []);
54
+ // biome-ignore lint/correctness/useExhaustiveDependencies: on search query change, the first node may be filtered out
55
+ useEffect(() => {
56
+ if (!fileTreeRef.current)
57
+ return;
58
+ const nodes = Array.from(fileTreeRef.current.querySelectorAll(`[${dataPathHash}][tabindex='0']`));
59
+ for (const node of nodes) {
60
+ node.setAttribute("tabindex", "-1");
61
+ }
62
+ const firstNode = fileTreeRef.current.querySelector(`[${dataPathHash}]:not([hidden])`);
63
+ firstNode?.setAttribute("tabindex", "0");
64
+ }, [contextOptions.searchQuery, contextOptions.selectedFile]);
65
+ return (_jsx(Context.Provider, { value: {
66
+ ...contextOptions,
67
+ expandable: contextOptions.expandable ?? false,
68
+ focusNextNode: handleFocusNextNode,
69
+ focusEndNode: handleFocusEndNode,
70
+ focusNextSiblingCharacter: handleFocusNextSiblingCharacter,
71
+ }, children: _jsx("ul", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), ref: fileTreeRef, role: "tree", children: children }) }));
72
+ };
73
+ export default Provider;
74
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../../src/ui/FileTree/Provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Node } from "../Node/index.js";
3
+ import "./styles.css";
4
+ /**
5
+ * description of the File component
6
+ * @returns {React.ReactElement} - Rendered File
7
+ */
8
+ const File = ({ id, className, style, name, marker, }) => {
9
+ return (_jsx(Node, { id: id, className: className, style: style, name: name, nodeType: "file", marker: marker }));
10
+ };
11
+ export default File;
12
+ //# sourceMappingURL=File.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/File/File.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,cAAc,CAAC;AAGtB;;;GAGG;AACH,MAAM,IAAI,GAAG,CAAC,EACZ,EAAE,EACF,SAAS,EACT,KAAK,EACL,IAAI,EACJ,MAAM,GACI,EAAsB,EAAE;IAClC,OAAO,CACL,KAAC,IAAI,IACH,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAC,MAAM,EACf,MAAM,EAAE,MAAM,GACd,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,4 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.4 */
2
+ export { default as File } from "./File.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/File/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/File/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Node } from "../Node/index.js";
3
+ import "./styles.css";
4
+ /**
5
+ * description of the Folder component
6
+ * @returns {React.ReactElement} - Rendered Folder
7
+ */
8
+ const Folder = ({ id, children, className, style, name, defaultOpen, }) => {
9
+ return (_jsx(Node, { id: id, className: className, style: style, name: name, nodeType: "folder", defaultOpen: defaultOpen, children: children }));
10
+ };
11
+ export default Folder;
12
+ //# sourceMappingURL=Folder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Folder.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Folder/Folder.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,cAAc,CAAC;AAGtB;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,EACd,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,EACL,IAAI,EACJ,WAAW,GACC,EAAsB,EAAE;IACpC,OAAO,CACL,KAAC,IAAI,IACH,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAC,QAAQ,EACjB,WAAW,EAAE,WAAW,YAEvB,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.4 */
2
+ export { default as Folder } from "./Folder.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Folder/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Folder/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId } from "react";
3
+ import "./styles.css";
4
+ const componentCssClassName = "ds indentation-block";
5
+ /**
6
+ * description of the IndentationBlock component
7
+ * @returns {React.ReactElement} - Rendered IndentationBlock
8
+ */
9
+ const IndentationBlock = ({ id, className, style, depth, }) => {
10
+ const uid = useId();
11
+ return (_jsxs("div", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), children: [Array.from({ length: depth }).map((_, index) => (
12
+ // biome-ignore lint/suspicious/noArrayIndexKey: index is prefixed with a uid
13
+ _jsx("div", { className: "indent-block", children: "\u00A0" }, `${uid}-${index}`))), depth === 0 && _jsx("div", { className: "indent-block empty", children: "\u00A0" })] }));
14
+ };
15
+ export default IndentationBlock;
16
+ //# sourceMappingURL=IndentationBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndentationBlock.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/IndentationBlock/IndentationBlock.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,cAAc,CAAC;AAGtB,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAErD;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,EACxB,EAAE,EACF,SAAS,EACT,KAAK,EACL,KAAK,GACiB,EAA6B,EAAE;IACrD,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IAEpB,OAAO,CACL,eACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAEtE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/C,6EAA6E;YAC7E,cAA6B,SAAS,EAAC,cAAc,wBAA3C,GAAG,GAAG,IAAI,KAAK,EAAE,CAErB,CACP,CAAC,EACD,KAAK,KAAK,CAAC,IAAI,cAAK,SAAS,EAAC,oBAAoB,uBAAa,IAC5D,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.4 */
2
+ export { default as IndentationBlock } from "./IndentationBlock.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/IndentationBlock/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,cAAc,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/IndentationBlock/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { createContext } from "react";
2
+ export const rootLevelEmptyContext = {
3
+ depth: 0,
4
+ path: "",
5
+ addChildNode: () => { },
6
+ childNodes: [],
7
+ };
8
+ const Context = createContext(rootLevelEmptyContext);
9
+ export default Context;
10
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Node/Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,EAAE;IACR,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;IACtB,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,MAAM,OAAO,GAAG,aAAa,CAAiB,qBAAqB,CAAC,CAAC;AAErE,eAAe,OAAO,CAAC"}
@@ -0,0 +1,163 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { dataPathHash } from "../../Provider.js";
4
+ import { useFileTree } from "../../hooks/index.js";
5
+ import { hashNodeName } from "../../utils/index.js";
6
+ import { IndentationBlock } from "../IndentationBlock/index.js";
7
+ import Context from "./Context.js";
8
+ import { useNode } from "./hooks/index.js";
9
+ import "./styles.css";
10
+ const componentCssClassName = "ds node";
11
+ const expandedCssClassName = "expanded";
12
+ const expandableCssClassName = "expandable";
13
+ const selectableCssClassName = "selectable";
14
+ const Provider = ({ id, className, style, children, name, marker, ...nodeOptions }) => {
15
+ const { expandable, searchQuery, selectedFile, onSelectFile, focusNextNode, focusEndNode, focusNextSiblingCharacter, } = useFileTree();
16
+ const nodeRef = useRef({
17
+ name,
18
+ path: "",
19
+ type: nodeOptions.nodeType,
20
+ });
21
+ const { depth, path: parentPath, addChildNode } = useNode();
22
+ const [childNodes, setChildNodes] = useState([]);
23
+ const [isExpanded, setIsExpanded] = useState(nodeOptions.nodeType === "folder" && nodeOptions.defaultOpen);
24
+ const path = useMemo(() => `${parentPath}/${name}`, [parentPath, name]);
25
+ const isSelected = useMemo(() => selectedFile?.path === path, [selectedFile, path]);
26
+ const matchesQuery = useCallback((query, target) => {
27
+ return target.toLowerCase().includes(query.toLowerCase());
28
+ }, []);
29
+ const fileMatchesSearchQuery = useCallback((node) => {
30
+ if (!searchQuery)
31
+ return true;
32
+ // check if path matches in case of files
33
+ if (node.type === "file") {
34
+ return matchesQuery(searchQuery, node.name);
35
+ }
36
+ // check if any child/grandchild matches in case of folders
37
+ return (matchesQuery(searchQuery, node.name) ||
38
+ node.children?.some(fileMatchesSearchQuery));
39
+ }, [searchQuery, matchesQuery]);
40
+ const shouldHideNode = useMemo(() => {
41
+ if (!searchQuery)
42
+ return false;
43
+ return !fileMatchesSearchQuery(nodeRef.current);
44
+ }, [searchQuery, fileMatchesSearchQuery]);
45
+ const handleClick = useCallback((_event) => {
46
+ switch (nodeOptions.nodeType) {
47
+ case "folder":
48
+ if (expandable) {
49
+ setIsExpanded((prev) => !prev);
50
+ }
51
+ break;
52
+ case "file":
53
+ onSelectFile?.({
54
+ name,
55
+ path,
56
+ type: nodeOptions.nodeType,
57
+ });
58
+ break;
59
+ }
60
+ }, [nodeOptions.nodeType, onSelectFile, name, path, expandable]);
61
+ const handleKeyDown = (event) => {
62
+ if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey)
63
+ return;
64
+ if (event.key.match(/^[a-zA-Z0-9]$/)) {
65
+ focusNextSiblingCharacter(event.key);
66
+ event.preventDefault();
67
+ }
68
+ switch (event.key) {
69
+ case "ArrowRight":
70
+ if (!isExpanded && nodeOptions.nodeType === "folder" && expandable) {
71
+ setIsExpanded(true);
72
+ event.preventDefault();
73
+ }
74
+ else {
75
+ focusNextNode("down");
76
+ event.preventDefault();
77
+ }
78
+ break;
79
+ case "ArrowLeft":
80
+ if (isExpanded && nodeOptions.nodeType === "folder" && expandable) {
81
+ setIsExpanded(false);
82
+ event.preventDefault();
83
+ }
84
+ else {
85
+ focusNextNode("up");
86
+ event.preventDefault();
87
+ }
88
+ break;
89
+ case "ArrowDown":
90
+ focusNextNode("down");
91
+ event.preventDefault();
92
+ break;
93
+ case "ArrowUp":
94
+ focusNextNode("up");
95
+ event.preventDefault();
96
+ break;
97
+ case "Home":
98
+ focusEndNode("start");
99
+ event.preventDefault();
100
+ break;
101
+ case "End":
102
+ focusEndNode("end");
103
+ event.preventDefault();
104
+ break;
105
+ case "Enter":
106
+ case " ":
107
+ if (nodeOptions.nodeType === "file") {
108
+ onSelectFile?.({
109
+ name,
110
+ path,
111
+ type: nodeOptions.nodeType,
112
+ });
113
+ }
114
+ event.preventDefault();
115
+ break;
116
+ }
117
+ };
118
+ // update parent's childNodes with the current node object reference
119
+ // biome-ignore lint/correctness/useExhaustiveDependencies: the nodeRef.current is updated only once
120
+ useEffect(() => {
121
+ if (nodeRef.current) {
122
+ addChildNode(nodeRef.current);
123
+ }
124
+ }, []);
125
+ // update the node object information when the information changes
126
+ useEffect(() => {
127
+ if (nodeRef.current) {
128
+ nodeRef.current.path = path;
129
+ if (nodeRef.current.type === "folder") {
130
+ nodeRef.current.children = childNodes;
131
+ }
132
+ }
133
+ }, [path, childNodes]);
134
+ return (_jsxs(Context.Provider, { value: {
135
+ depth: depth + 1,
136
+ path,
137
+ addChildNode: (node) => setChildNodes((prev) => [...prev, node]),
138
+ childNodes,
139
+ }, children: [!shouldHideNode && (_jsxs("li", { id: id, style: style, [dataPathHash]: hashNodeName(path), "data-name": name, className: [
140
+ componentCssClassName,
141
+ className,
142
+ nodeOptions.nodeType,
143
+ isExpanded && expandedCssClassName,
144
+ nodeOptions.nodeType === "folder" &&
145
+ expandable &&
146
+ expandableCssClassName,
147
+ nodeOptions.nodeType === "file" &&
148
+ onSelectFile !== undefined &&
149
+ selectableCssClassName,
150
+ ]
151
+ .filter(Boolean)
152
+ .join(" "), role: "treeitem", "aria-expanded": nodeOptions.nodeType === "folder" ? isExpanded : undefined, "aria-selected": isSelected, tabIndex: -1, onClick: handleClick, onKeyDown: handleKeyDown, children: [_jsx(IndentationBlock, { depth: depth }), _jsx("div", { className: [
153
+ "icon",
154
+ nodeOptions.nodeType,
155
+ isExpanded && expandedCssClassName,
156
+ ]
157
+ .filter(Boolean)
158
+ .join(" ") }), _jsx("span", { className: "nodename", children: name }), marker && _jsx("div", { className: "marker", children: marker })] })), nodeOptions.nodeType === "folder" &&
159
+ (isExpanded || expandable === false) &&
160
+ children] }));
161
+ };
162
+ export default Provider;
163
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Node/Provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default as useNode } from "./useNode.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/ui/FileTree/common/Node/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { useContext } from "react";
2
+ import Context, { rootLevelEmptyContext } from "../Context.js";
3
+ const useNode = () => {
4
+ const context = useContext(Context);
5
+ if (!context) {
6
+ // if no folder parent is found, that means file is at root level
7
+ return rootLevelEmptyContext;
8
+ }
9
+ return context;
10
+ };
11
+ export default useNode;
12
+ //# sourceMappingURL=useNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNode.js","sourceRoot":"","sources":["../../../../../../../src/ui/FileTree/common/Node/hooks/useNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,OAAO,EAAE,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,OAAO,GAAG,GAAG,EAAE;IACnB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,iEAAiE;QACjE,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as Context } from "./Context.js";
2
+ export * from "./hooks/index.js";
3
+ export { default as Node } from "./Provider.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/Node/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import useFileTree from "../../hooks/useFileTree.js";
4
+ import "./styles.css";
5
+ const componentCssClassName = "ds search-box";
6
+ /**
7
+ * description of the SearchBox component
8
+ * @returns {React.ReactElement} - Rendered SearchBox
9
+ */
10
+ const SearchBox = ({ id, children, className, style, }) => {
11
+ const { searchQuery, onSearch } = useFileTree();
12
+ if (!onSearch) {
13
+ return null;
14
+ }
15
+ const handleSearch = useCallback((event) => {
16
+ event.preventDefault();
17
+ const formData = new FormData(event.currentTarget);
18
+ onSearch(formData.get("search"));
19
+ }, [onSearch]);
20
+ const handleReset = useCallback((event) => {
21
+ event.preventDefault();
22
+ onSearch("");
23
+ }, [onSearch]);
24
+ const handleInputUpdate = useCallback((event) => {
25
+ onSearch(event.currentTarget.value);
26
+ event.preventDefault();
27
+ }, [onSearch]);
28
+ return (_jsxs("form", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), onSubmit: handleSearch, onReset: handleReset, children: [_jsx("input", { value: searchQuery, onChange: handleInputUpdate, name: "search", className: "input", type: "search", placeholder: "Search", required: true, autoComplete: "off" }), _jsx("button", { type: "reset", className: "reset", children: _jsx("span", { className: "icon" }) }), _jsx("button", { type: "submit", className: "search", children: _jsx("span", { className: "icon" }) })] }));
29
+ };
30
+ export default SearchBox;
31
+ //# sourceMappingURL=SearchBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchBox.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/SearchBox/SearchBox.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,cAAc,CAAC;AAGtB,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAE9C;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,EACjB,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACU,EAA6B,EAAE;IAC9C,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAA4C,WAAW,CACvE,CAAC,KAAK,EAAE,EAAE;QACR,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnD,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC,CAAC;IAC7C,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,MAAM,WAAW,GAA4C,WAAW,CACtE,CAAC,KAAK,EAAE,EAAE;QACR,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,iBAAiB,GACrB,WAAW,CACT,CAAC,KAAK,EAAE,EAAE;QACR,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEJ,OAAO,CACL,gBACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACvE,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,aAEpB,gBACE,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,OAAO,EACjB,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,QAAQ,EACpB,QAAQ,QACR,YAAY,EAAC,KAAK,GAClB,EACF,iBAAQ,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,YACpC,eAAM,SAAS,EAAC,MAAM,GAAG,GAClB,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,YACtC,eAAM,SAAS,EAAC,MAAM,GAAG,GAClB,IACJ,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.4 */
2
+ export { default as SearchBox } from "./SearchBox.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/SearchBox/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/SearchBox/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useId, useMemo } from "react";
3
+ import File from "../File/File.js";
4
+ import Folder from "../Folder/Folder.js";
5
+ /**
6
+ * Render a tree view of the given file tree data
7
+ *
8
+ * @example
9
+ * <FileTree>
10
+ * <FileTree.SearchBox />
11
+ * <FileTree.TreeView tree={treeData} />
12
+ * </FileTree>
13
+ *
14
+ * @returns {React.ReactElement} - Rendered TreeView
15
+ */
16
+ const TreeView = ({ tree, sortAlphabetically, defaultCollapsed = false, }) => {
17
+ const uid = useId();
18
+ const renderNode = useCallback((node, basePath = "") => {
19
+ const path = `${basePath}/${node.name}`;
20
+ switch (node.type) {
21
+ case "folder":
22
+ return (_jsx(Folder, { name: node.name, defaultOpen: !defaultCollapsed, children: node.children?.map((child) => renderNode(child, path)) }, `${uid}-${path}`));
23
+ case "file":
24
+ return (_jsx(File, { name: node.name, marker: node.marker }, `${uid}-${path}`));
25
+ }
26
+ }, [defaultCollapsed, uid]);
27
+ const sortedTree = useCallback((tree) => {
28
+ return [...tree]
29
+ .sort((a, b) => {
30
+ // folders first
31
+ if (a.type === "folder" && b.type === "file") {
32
+ return -1;
33
+ }
34
+ if (a.type === "file" && b.type === "folder") {
35
+ return 1;
36
+ }
37
+ // sort alphabetically
38
+ return a.name.localeCompare(b.name);
39
+ })
40
+ .map((node) => {
41
+ if (node.type === "folder" && node.children) {
42
+ // sort recursively folder children
43
+ return {
44
+ ...node,
45
+ children: sortedTree(node.children),
46
+ };
47
+ }
48
+ return node;
49
+ });
50
+ }, []);
51
+ const treeNode = useMemo(() => {
52
+ if (sortAlphabetically) {
53
+ return sortedTree(tree).map((node) => renderNode(node));
54
+ }
55
+ return tree.map((node) => renderNode(node));
56
+ }, [tree, sortAlphabetically, renderNode, sortedTree]);
57
+ return _jsx(_Fragment, { children: treeNode });
58
+ };
59
+ export default TreeView;
60
+ //# sourceMappingURL=TreeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeView.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/TreeView/TreeView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.4 */
2
+ export { default as TreeView } from "./TreeView.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/TreeView/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/FileTree/common/TreeView/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export * from "./File/index.js";
2
+ export * from "./Folder/index.js";
3
+ export * from "./SearchBox/index.js";
4
+ export * from "./TreeView/index.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ui/FileTree/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as useFileTree } from "./useFileTree.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ui/FileTree/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { useContext } from "react";
2
+ import Context from "../Context.js";
3
+ const useFileTree = () => {
4
+ const context = useContext(Context);
5
+ if (!context) {
6
+ throw new Error("useFileTree must be used within a FileTree component");
7
+ }
8
+ return context;
9
+ };
10
+ export default useFileTree;
11
+ //# sourceMappingURL=useFileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileTree.js","sourceRoot":"","sources":["../../../../../src/ui/FileTree/hooks/useFileTree.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,OAAO,MAAM,eAAe,CAAC;AAEpC,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}