@ndla/ui 13.2.1 → 15.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 (245) hide show
  1. package/es/Article/Article.js +22 -3
  2. package/es/Article/ArticleFavoritesButton.js +38 -0
  3. package/es/Article/index.js +2 -1
  4. package/es/Breadcrumb/ActionBreadcrumb.js +57 -0
  5. package/es/Breadcrumb/index.js +1 -0
  6. package/es/Footer/FooterAuth.js +15 -22
  7. package/es/InfoBlock/InfoBlock.js +55 -0
  8. package/es/InfoBlock/index.js +1 -0
  9. package/es/LearningPaths/LearningPathMenu.js +3 -4
  10. package/es/Masthead/MastheadAuthModal.js +2 -2
  11. package/es/MyNdla/Navigation/VerticalNavigation.js +51 -0
  12. package/es/MyNdla/Navigation/index.js +2 -0
  13. package/es/MyNdla/Resource/Folder.js +86 -0
  14. package/{lib/MyNdla/ResourceDash/ResourcesView.d.ts → es/MyNdla/Resource/index.js} +2 -3
  15. package/es/MyNdla/index.js +3 -4
  16. package/es/Notion/ConceptNotion.js +2 -1
  17. package/es/Notion/FigureNotion.js +13 -9
  18. package/es/Notion/NotionVisualElement.js +3 -2
  19. package/es/Resource/BlockResource.js +73 -0
  20. package/es/Resource/ListResource.js +66 -0
  21. package/es/Resource/index.js +10 -0
  22. package/es/Resource/resourceComponents.js +97 -0
  23. package/es/ResourceGroup/ResourceGroup.js +7 -5
  24. package/es/ResourceGroup/ResourceItem.js +28 -30
  25. package/es/ResourceGroup/ResourceList.js +18 -6
  26. package/es/Search/ActiveFilters.js +6 -7
  27. package/es/Search/ContentTypeResult.js +6 -8
  28. package/es/SearchTypeResult/ActiveFilters.js +6 -10
  29. package/es/SearchTypeResult/SearchViewType.js +5 -5
  30. package/es/SnackBar/SnackBar.js +117 -0
  31. package/es/SnackBar/index.js +9 -0
  32. package/es/TagSelector/SuggestionInput.js +240 -0
  33. package/es/TagSelector/Suggestions.js +93 -0
  34. package/es/TagSelector/TagSelector.js +137 -0
  35. package/es/TagSelector/index.js +9 -0
  36. package/es/TopicIntroductionList/TopicIntroduction.js +2 -4
  37. package/es/TopicIntroductionList/TopicShortcutItem.js +1 -3
  38. package/es/TreeStructure/FolderItem.js +130 -0
  39. package/es/TreeStructure/FolderItems.js +123 -0
  40. package/es/TreeStructure/FolderNameInput.js +112 -0
  41. package/es/TreeStructure/TreeStructure.js +254 -0
  42. package/es/TreeStructure/TreeStructure.types.js +0 -0
  43. package/es/TreeStructure/TreeStructureWrapper.js +13 -0
  44. package/es/TreeStructure/helperFunctions.js +92 -0
  45. package/es/TreeStructure/index.js +9 -0
  46. package/es/TreeStructure/keyboardNavigation/keyboardNavigation.js +182 -0
  47. package/es/TreeStructure/keyboardNavigation/keyboardNavigation.types.js +0 -0
  48. package/es/User/AuthModal.js +15 -24
  49. package/es/User/UserInfo.js +70 -0
  50. package/es/User/apiTypes.js +0 -0
  51. package/es/User/index.js +2 -0
  52. package/es/User/parseUserObject.js +102 -0
  53. package/es/all.css +90 -0
  54. package/es/index.js +9 -3
  55. package/es/locale/messages-en.js +75 -8
  56. package/es/locale/messages-nb.js +74 -7
  57. package/es/locale/messages-nn.js +74 -7
  58. package/es/locale/messages-se.js +74 -7
  59. package/es/locale/messages-sma.js +74 -7
  60. package/lib/Article/Article.d.ts +3 -1
  61. package/lib/Article/Article.js +43 -23
  62. package/lib/Article/ArticleFavoritesButton.d.ts +15 -0
  63. package/lib/Article/ArticleFavoritesButton.js +56 -0
  64. package/lib/Article/index.d.ts +2 -1
  65. package/lib/Article/index.js +8 -0
  66. package/lib/Breadcrumb/ActionBreadcrumb.d.ts +16 -0
  67. package/lib/Breadcrumb/ActionBreadcrumb.js +72 -0
  68. package/lib/Breadcrumb/index.d.ts +1 -0
  69. package/lib/Breadcrumb/index.js +8 -0
  70. package/lib/Footer/FooterAuth.d.ts +1 -1
  71. package/lib/Footer/FooterAuth.js +17 -17
  72. package/lib/InfoBlock/InfoBlock.d.ts +8 -0
  73. package/lib/InfoBlock/InfoBlock.js +58 -0
  74. package/lib/InfoBlock/index.d.ts +1 -0
  75. package/lib/InfoBlock/index.js +13 -0
  76. package/lib/LearningPaths/LearningPathMenu.js +3 -4
  77. package/lib/Masthead/MastheadAuthModal.d.ts +3 -3
  78. package/lib/Masthead/MastheadAuthModal.js +3 -3
  79. package/lib/MyNdla/Navigation/VerticalNavigation.d.ts +10 -0
  80. package/lib/MyNdla/Navigation/VerticalNavigation.js +61 -0
  81. package/lib/MyNdla/Navigation/index.d.ts +2 -0
  82. package/lib/MyNdla/Navigation/index.js +15 -0
  83. package/lib/MyNdla/Resource/Folder.d.ts +20 -0
  84. package/lib/MyNdla/Resource/Folder.js +100 -0
  85. package/lib/MyNdla/Resource/index.d.ts +9 -0
  86. package/lib/MyNdla/Resource/index.js +15 -0
  87. package/lib/MyNdla/index.d.ts +3 -4
  88. package/lib/MyNdla/index.js +9 -11
  89. package/lib/Notion/ConceptNotion.js +2 -1
  90. package/lib/Notion/FigureNotion.d.ts +1 -1
  91. package/lib/Notion/FigureNotion.js +12 -8
  92. package/lib/Notion/NotionVisualElement.js +3 -2
  93. package/lib/Resource/BlockResource.d.ts +20 -0
  94. package/lib/Resource/BlockResource.js +84 -0
  95. package/lib/Resource/ListResource.d.ts +20 -0
  96. package/lib/Resource/ListResource.js +78 -0
  97. package/lib/Resource/index.d.ts +11 -0
  98. package/lib/Resource/index.js +29 -0
  99. package/lib/Resource/resourceComponents.d.ts +24 -0
  100. package/lib/Resource/resourceComponents.js +106 -0
  101. package/lib/ResourceGroup/ResourceGroup.d.ts +2 -1
  102. package/lib/ResourceGroup/ResourceGroup.js +7 -5
  103. package/lib/ResourceGroup/ResourceItem.d.ts +5 -1
  104. package/lib/ResourceGroup/ResourceItem.js +29 -30
  105. package/lib/ResourceGroup/ResourceList.d.ts +3 -1
  106. package/lib/ResourceGroup/ResourceList.js +18 -6
  107. package/lib/Search/ActiveFilters.js +6 -7
  108. package/lib/Search/ContentTypeResult.js +6 -8
  109. package/lib/SearchTypeResult/ActiveFilters.js +6 -10
  110. package/lib/SearchTypeResult/SearchViewType.js +5 -5
  111. package/lib/SnackBar/SnackBar.d.ts +23 -0
  112. package/lib/SnackBar/SnackBar.js +127 -0
  113. package/lib/SnackBar/index.d.ts +10 -0
  114. package/lib/SnackBar/index.js +15 -0
  115. package/lib/TagSelector/SuggestionInput.d.ts +19 -0
  116. package/lib/TagSelector/SuggestionInput.js +255 -0
  117. package/lib/TagSelector/Suggestions.d.ts +12 -0
  118. package/lib/TagSelector/Suggestions.js +96 -0
  119. package/lib/TagSelector/TagSelector.d.ts +16 -0
  120. package/lib/TagSelector/TagSelector.js +150 -0
  121. package/lib/TagSelector/index.d.ts +10 -0
  122. package/lib/TagSelector/index.js +19 -0
  123. package/lib/TopicIntroductionList/TopicIntroduction.js +2 -4
  124. package/lib/TopicIntroductionList/TopicShortcutItem.js +1 -3
  125. package/lib/TreeStructure/FolderItem.d.ts +27 -0
  126. package/lib/TreeStructure/FolderItem.js +140 -0
  127. package/lib/TreeStructure/FolderItems.d.ts +11 -0
  128. package/lib/TreeStructure/FolderItems.js +130 -0
  129. package/lib/TreeStructure/FolderNameInput.d.ts +15 -0
  130. package/lib/TreeStructure/FolderNameInput.js +125 -0
  131. package/lib/TreeStructure/TreeStructure.d.ts +12 -0
  132. package/lib/TreeStructure/TreeStructure.js +273 -0
  133. package/lib/TreeStructure/TreeStructure.types.d.ts +63 -0
  134. package/lib/TreeStructure/TreeStructure.types.js +1 -0
  135. package/lib/TreeStructure/TreeStructureWrapper.d.ts +12 -0
  136. package/lib/TreeStructure/TreeStructureWrapper.js +24 -0
  137. package/lib/TreeStructure/helperFunctions.d.ts +5 -0
  138. package/lib/TreeStructure/helperFunctions.js +103 -0
  139. package/lib/TreeStructure/index.d.ts +10 -0
  140. package/lib/TreeStructure/index.js +15 -0
  141. package/lib/TreeStructure/keyboardNavigation/keyboardNavigation.d.ts +11 -0
  142. package/lib/TreeStructure/keyboardNavigation/keyboardNavigation.js +186 -0
  143. package/lib/TreeStructure/keyboardNavigation/keyboardNavigation.types.d.ts +26 -0
  144. package/lib/TreeStructure/keyboardNavigation/keyboardNavigation.types.js +1 -0
  145. package/lib/User/AuthModal.d.ts +3 -3
  146. package/lib/User/AuthModal.js +16 -23
  147. package/lib/User/UserInfo.d.ts +13 -0
  148. package/lib/User/UserInfo.js +84 -0
  149. package/lib/User/apiTypes.d.ts +61 -0
  150. package/lib/User/apiTypes.js +1 -0
  151. package/lib/User/index.d.ts +4 -0
  152. package/lib/User/index.js +8 -0
  153. package/lib/User/parseUserObject.d.ts +32 -0
  154. package/lib/User/parseUserObject.js +105 -0
  155. package/lib/all.css +90 -0
  156. package/lib/index.d.ts +14 -3
  157. package/lib/index.js +76 -10
  158. package/lib/locale/messages-en.d.ts +67 -0
  159. package/lib/locale/messages-en.js +75 -8
  160. package/lib/locale/messages-nb.d.ts +67 -0
  161. package/lib/locale/messages-nb.js +74 -7
  162. package/lib/locale/messages-nn.d.ts +67 -0
  163. package/lib/locale/messages-nn.js +74 -7
  164. package/lib/locale/messages-se.d.ts +67 -0
  165. package/lib/locale/messages-se.js +74 -7
  166. package/lib/locale/messages-sma.d.ts +67 -0
  167. package/lib/locale/messages-sma.js +74 -7
  168. package/lib/types.d.ts +1 -1
  169. package/package.json +11 -11
  170. package/src/Article/Article.tsx +31 -0
  171. package/src/Article/ArticleFavoritesButton.tsx +40 -0
  172. package/src/Article/index.ts +2 -0
  173. package/src/Breadcrumb/ActionBreadcrumb.tsx +68 -0
  174. package/src/Breadcrumb/index.ts +2 -0
  175. package/src/Footer/FooterAuth.tsx +7 -9
  176. package/src/InfoBlock/InfoBlock.tsx +61 -0
  177. package/src/InfoBlock/index.ts +1 -0
  178. package/src/LearningPaths/LearningPathMenu.tsx +1 -1
  179. package/src/Masthead/MastheadAuthModal.tsx +4 -5
  180. package/src/MyNdla/Navigation/VerticalNavigation.tsx +93 -0
  181. package/src/MyNdla/Navigation/index.ts +2 -0
  182. package/src/MyNdla/Resource/Folder.tsx +143 -0
  183. package/src/MyNdla/Resource/index.ts +10 -0
  184. package/src/MyNdla/index.ts +3 -5
  185. package/src/Notion/ConceptNotion.tsx +1 -0
  186. package/src/Notion/FigureNotion.tsx +12 -5
  187. package/src/Notion/NotionVisualElement.tsx +1 -1
  188. package/src/Resource/BlockResource.tsx +101 -0
  189. package/src/Resource/ListResource.tsx +111 -0
  190. package/src/Resource/index.ts +12 -0
  191. package/src/Resource/resourceComponents.tsx +143 -0
  192. package/src/ResourceGroup/ResourceGroup.tsx +3 -0
  193. package/src/ResourceGroup/ResourceItem.tsx +20 -3
  194. package/src/ResourceGroup/ResourceList.tsx +16 -3
  195. package/src/Search/ActiveFilters.jsx +0 -1
  196. package/src/Search/ContentTypeResult.tsx +8 -9
  197. package/src/SearchTypeResult/ActiveFilters.tsx +1 -3
  198. package/src/SearchTypeResult/SearchViewType.tsx +1 -1
  199. package/src/SnackBar/SnackBar.tsx +183 -0
  200. package/src/SnackBar/index.ts +13 -0
  201. package/src/TagSelector/SuggestionInput.tsx +230 -0
  202. package/src/TagSelector/Suggestions.tsx +125 -0
  203. package/src/TagSelector/TagSelector.tsx +111 -0
  204. package/src/TagSelector/index.ts +13 -0
  205. package/src/TopicIntroductionList/TopicIntroduction.tsx +2 -2
  206. package/src/TopicIntroductionList/TopicShortcutItem.tsx +1 -5
  207. package/src/TreeStructure/FolderItem.tsx +160 -0
  208. package/src/TreeStructure/FolderItems.tsx +109 -0
  209. package/src/TreeStructure/FolderNameInput.tsx +109 -0
  210. package/src/TreeStructure/TreeStructure.tsx +184 -0
  211. package/src/TreeStructure/TreeStructure.types.ts +69 -0
  212. package/src/TreeStructure/TreeStructureWrapper.tsx +34 -0
  213. package/src/TreeStructure/helperFunctions.ts +52 -0
  214. package/src/TreeStructure/index.ts +11 -0
  215. package/src/TreeStructure/keyboardNavigation/keyboardNavigation.ts +161 -0
  216. package/src/TreeStructure/keyboardNavigation/keyboardNavigation.types.ts +28 -0
  217. package/src/User/AuthModal.tsx +5 -26
  218. package/src/User/UserInfo.tsx +80 -0
  219. package/src/User/__tests__/parseUserObject-test.ts +315 -0
  220. package/src/User/apiTypes.ts +74 -0
  221. package/src/User/index.ts +4 -0
  222. package/src/User/parseUserObject.ts +83 -0
  223. package/src/all.scss +2 -0
  224. package/src/index.ts +15 -4
  225. package/src/locale/messages-en.ts +69 -7
  226. package/src/locale/messages-nb.ts +68 -6
  227. package/src/locale/messages-nn.ts +68 -6
  228. package/src/locale/messages-se.ts +68 -6
  229. package/src/locale/messages-sma.ts +68 -6
  230. package/src/types.ts +1 -1
  231. package/es/MyNdla/ResourceDash/Breadcrumbs.js +0 -22
  232. package/es/MyNdla/ResourceDash/ResourceElement.js +0 -27
  233. package/es/MyNdla/ResourceDash/ResourcesView.js +0 -43
  234. package/es/MyNdla/ResourceDash/index.js +0 -4
  235. package/lib/MyNdla/ResourceDash/Breadcrumbs.d.ts +0 -15
  236. package/lib/MyNdla/ResourceDash/Breadcrumbs.js +0 -35
  237. package/lib/MyNdla/ResourceDash/ResourceElement.d.ts +0 -18
  238. package/lib/MyNdla/ResourceDash/ResourceElement.js +0 -38
  239. package/lib/MyNdla/ResourceDash/ResourcesView.js +0 -57
  240. package/lib/MyNdla/ResourceDash/index.d.ts +0 -4
  241. package/lib/MyNdla/ResourceDash/index.js +0 -31
  242. package/src/MyNdla/ResourceDash/Breadcrumbs.tsx +0 -31
  243. package/src/MyNdla/ResourceDash/ResourceElement.tsx +0 -50
  244. package/src/MyNdla/ResourceDash/ResourcesView.tsx +0 -42
  245. package/src/MyNdla/ResourceDash/index.ts +0 -5
@@ -0,0 +1,254 @@
1
+ import _styled from "@emotion/styled-base";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+
7
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
+
9
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
10
+
11
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
12
+
13
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
+
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+
17
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
+
19
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
20
+
21
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
22
+
23
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
24
+
25
+ /**
26
+ * Copyright (c) 2022-present, NDLA.
27
+ *
28
+ * This source code is licensed under the GPLv3 license found in the
29
+ * LICENSE file in the root directory of this source tree.
30
+ *
31
+ */
32
+ import React, { useEffect, useState, useRef, useMemo } from 'react';
33
+ import { uuid } from '@ndla/util';
34
+ import Button from '@ndla/button';
35
+ import Tooltip from '@ndla/tooltip';
36
+ import { useTranslation } from 'react-i18next';
37
+ import { spacing, fonts } from '@ndla/core';
38
+ import TreeStructureStyledWrapper from './TreeStructureWrapper';
39
+ import FolderItems from './FolderItems';
40
+ import { getIdPathsOfFolder, getPathOfFolder, getFolderName } from './helperFunctions';
41
+ import keyboardNavigation, { KEYBOARD_KEYS_OF_INTEREST } from './keyboardNavigation/keyboardNavigation';
42
+ import { jsx as ___EmotionJSX } from "@emotion/core";
43
+ export var MAX_LEVEL_FOR_FOLDERS = 4;
44
+
45
+ var StyledLabel = _styled("label", {
46
+ target: "e1dg1gdn0",
47
+ label: "StyledLabel"
48
+ })("font-weight:", fonts.weight.semibold, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCZ0MiLCJmaWxlIjoiVHJlZVN0cnVjdHVyZS50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQG5kbGEvdXRpbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BuZGxhL2J1dHRvbic7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbmRsYS90b29sdGlwJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBzcGFjaW5nLCBmb250cyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFRyZWVTdHJ1Y3R1cmVTdHlsZWRXcmFwcGVyIGZyb20gJy4vVHJlZVN0cnVjdHVyZVdyYXBwZXInO1xuaW1wb3J0IEZvbGRlckl0ZW1zIGZyb20gJy4vRm9sZGVySXRlbXMnO1xuaW1wb3J0IHsgZ2V0SWRQYXRoc09mRm9sZGVyLCBnZXRQYXRoT2ZGb2xkZXIsIGdldEZvbGRlck5hbWUgfSBmcm9tICcuL2hlbHBlckZ1bmN0aW9ucyc7XG5pbXBvcnQga2V5Ym9hcmROYXZpZ2F0aW9uLCB7IEtFWUJPQVJEX0tFWVNfT0ZfSU5URVJFU1QgfSBmcm9tICcuL2tleWJvYXJkTmF2aWdhdGlvbi9rZXlib2FyZE5hdmlnYXRpb24nO1xuaW1wb3J0IHsgTmV3Rm9sZGVyUHJvcHMsIFRyZWVTdHJ1Y3R1cmVQcm9wcyB9IGZyb20gJy4vVHJlZVN0cnVjdHVyZS50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNQVhfTEVWRUxfRk9SX0ZPTERFUlMgPSA0O1xuXG5jb25zdCBTdHlsZWRMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC13ZWlnaHQ6ICR7Zm9udHMud2VpZ2h0LnNlbWlib2xkfTtcbmA7XG5cbmNvbnN0IEFkZEZvbGRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAke3NwYWNpbmcueHNtYWxsfTtcbmA7XG5cbmNvbnN0IFRyZWVTdHJ1Y3R1cmUgPSAoe1xuICBkYXRhLFxuICBsYWJlbCxcbiAgZWRpdGFibGUsXG4gIGxvYWRpbmcsXG4gIG9uTmV3Rm9sZGVyLFxuICBvcGVuT25Gb2xkZXJDbGljayxcbiAgZnJhbWVkLFxuICBmb2xkZXJJZE1hcmtlZEJ5RGVmYXVsdCxcbiAgZGVmYXVsdE9wZW5Gb2xkZXJzLFxufTogVHJlZVN0cnVjdHVyZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW25ld0ZvbGRlciwgc2V0TmV3Rm9sZGVyXSA9IHVzZVN0YXRlPE5ld0ZvbGRlclByb3BzIHwgdW5kZWZpbmVkPigpO1xuICBjb25zdCBbb3BlbkZvbGRlcnMsIHNldE9wZW5Gb2xkZXJzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KGRlZmF1bHRPcGVuRm9sZGVycyB8fCBbXSkpO1xuICBjb25zdCBbZm9jdXNlZEZvbGRlcklkLCBzZXRGb2N1c2VkRm9sZGVySWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBjb25zdCBbbWFya2VkRm9sZGVySWQsIHNldE1hcmtlZEZvbGRlcklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oZm9sZGVySWRNYXJrZWRCeURlZmF1bHQgfHwgZGF0YVswXS5pZCk7XG4gIGNvbnN0IHRyZWVzdHJ1Y3R1cmVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgcm9vdExldmVsSWQgPSB1c2VNZW1vKCgpID0+IHV1aWQoKSwgW10pOyAvLyBUT0RPOiB1c2UgdXNlSWQgaG9vayB3aGVuIHdlIHVwZGF0ZSB0byBSZWFjdCAxOFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0T3BlbkZvbGRlcnMoKHByZXYpID0+IHtcbiAgICAgIGRlZmF1bHRPcGVuRm9sZGVycz8uZm9yRWFjaCgoaWQpID0+IHByZXYuYWRkKGlkKSk7XG4gICAgICByZXR1cm4gbmV3IFNldChwcmV2KTtcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRPcGVuRm9sZGVyc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nKSB7XG4gICAgICBzZXROZXdGb2xkZXIodW5kZWZpbmVkKTtcbiAgICB9XG4gIH0sIFtsb2FkaW5nXSk7XG5cbiAgY29uc3Qgb25Ub2dnbGVPcGVuID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRPcGVuRm9sZGVycygocHJldikgPT4ge1xuICAgICAgaWYgKHByZXYuaGFzKGlkKSkge1xuICAgICAgICBwcmV2LmRlbGV0ZShpZCk7XG4gICAgICAgIC8vIERpZCB3ZSBqdXN0IGNsb3NlZCBhIGZvbGRlciB3aXRoIGEgbWFya2VkIGZvbGRlciBpbnNpZGUgaXQ/XG4gICAgICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGZvbGRlciB3ZSBqdXN0IGNsb3NlZC5cbiAgICAgICAgaWYgKG1hcmtlZEZvbGRlcklkKSB7XG4gICAgICAgICAgY29uc3QgY2xvc2luZ0ZvbGRlclBhdGggPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgaWQpO1xuICAgICAgICAgIGNvbnN0IG1hcmtlZEZvbGRlclBhdGggPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgbWFya2VkRm9sZGVySWQpO1xuICAgICAgICAgIGNvbnN0IG1hcmtlZEZvbGRlcklzU3ViUGF0aCA9IGNsb3NpbmdGb2xkZXJQYXRoLmV2ZXJ5KFxuICAgICAgICAgICAgKGZvbGRlcklkLCBfaW5kZXgpID0+IG1hcmtlZEZvbGRlclBhdGhbX2luZGV4XSA9PT0gZm9sZGVySWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWFya2VkRm9sZGVySXNTdWJQYXRoKSB7XG4gICAgICAgICAgICBzZXRNYXJrZWRGb2xkZXJJZChjbG9zaW5nRm9sZGVyUGF0aFtjbG9zaW5nRm9sZGVyUGF0aC5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2LmFkZChpZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFNldChwcmV2KTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBvbkNyZWF0ZU5ld0ZvbGRlciA9IChwcm9wczogeyBpZFBhdGhzOiBudW1iZXJbXTsgcGFyZW50SWQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgIHNldE5ld0ZvbGRlcihwcm9wcyk7XG4gIH07XG5cbiAgY29uc3Qgb25TYXZlTmV3Rm9sZGVyID0gYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmV3Rm9sZGVyKSB7XG4gICAgICAvLyBXZSB3b3VsZCBsaWtlIHRvIGNyZWF0ZSBhIG5ldyBmb2xkZXIgd2l0aCB0aGUgbmFtZSBvZiB2YWx1ZS5cbiAgICAgIC8vIEl0cyBsb2NhdGlvbiBpbiBzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gbmV3Rm9sZGVyIG9iamVjdFxuICAgICAgY29uc3QgbmV3Rm9sZGVySWQgPSBhd2FpdCBvbk5ld0ZvbGRlcih7IC4uLm5ld0ZvbGRlciwgdmFsdWUgfSk7XG4gICAgICBpZiAobmV3Rm9sZGVySWQpIHtcbiAgICAgICAgc2V0TWFya2VkRm9sZGVySWQobmV3Rm9sZGVySWQpO1xuICAgICAgICBzZXRGb2N1c2VkRm9sZGVySWQobmV3Rm9sZGVySWQpO1xuICAgICAgICAvLyBPcGVuIGN1cnJlbnQgZm9sZGVyIGluIGNhc2UgaXQgd2FzIGNsb3NlZC4uXG4gICAgICAgIHNldE9wZW5Gb2xkZXJzKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKG5ld0ZvbGRlci5wYXJlbnRJZCkge1xuICAgICAgICAgICAgcHJldi5hZGQobmV3Rm9sZGVyLnBhcmVudElkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTZXQocHJldik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkNhbmNlbE5ld0ZvbGRlciA9ICgpID0+IHtcbiAgICBzZXROZXdGb2xkZXIodW5kZWZpbmVkKTtcbiAgfTtcblxuICBjb25zdCBvbk1hcmtGb2xkZXIgPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIHNldE1hcmtlZEZvbGRlcklkKGlkKTtcbiAgICBzZXRGb2N1c2VkRm9sZGVySWQoaWQpO1xuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVBZGRGb2xkZXJCdXR0b24gPVxuICAgIG1hcmtlZEZvbGRlcklkID09PSB1bmRlZmluZWQgfHwgZ2V0UGF0aE9mRm9sZGVyKGRhdGEsIG1hcmtlZEZvbGRlcklkKS5sZW5ndGggPj0gTUFYX0xFVkVMX0ZPUl9GT0xERVJTO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXt0cmVlc3RydWN0dXJlUmVmfVxuICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICBpZiAod3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJiBLRVlCT0FSRF9LRVlTX09GX0lOVEVSRVNULmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICAgIGtleWJvYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICBlLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldEZvY3VzZWRGb2xkZXJJZCxcbiAgICAgICAgICAgIGZvY3VzZWRGb2xkZXJJZCxcbiAgICAgICAgICAgIG9uVG9nZ2xlT3BlbixcbiAgICAgICAgICAgIG9wZW5Gb2xkZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9fT5cbiAgICAgIDxTdHlsZWRMYWJlbCBodG1sRm9yPXtyb290TGV2ZWxJZH0+e2xhYmVsfTwvU3R5bGVkTGFiZWw+XG4gICAgICA8VHJlZVN0cnVjdHVyZVN0eWxlZFdyYXBwZXIgcmVmPXt3cmFwcGVyUmVmfSBpZD17cm9vdExldmVsSWR9IGFyaWEtbGFiZWw9XCJNZW51IHRyZWVcIiByb2xlPVwidHJlZVwiIGZyYW1lZD17ZnJhbWVkfT5cbiAgICAgICAgPEZvbGRlckl0ZW1zXG4gICAgICAgICAgaWRQYXRocz17W119XG4gICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICBlZGl0YWJsZT17ZWRpdGFibGV9XG4gICAgICAgICAgb25Ub2dnbGVPcGVuPXtvblRvZ2dsZU9wZW59XG4gICAgICAgICAgbmV3Rm9sZGVyPXtuZXdGb2xkZXJ9XG4gICAgICAgICAgb25DcmVhdGVOZXdGb2xkZXI9e29uQ3JlYXRlTmV3Rm9sZGVyfVxuICAgICAgICAgIG9uQ2FuY2VsTmV3Rm9sZGVyPXtvbkNhbmNlbE5ld0ZvbGRlcn1cbiAgICAgICAgICBvblNhdmVOZXdGb2xkZXI9e29uU2F2ZU5ld0ZvbGRlcn1cbiAgICAgICAgICBvcGVuRm9sZGVycz17b3BlbkZvbGRlcnN9XG4gICAgICAgICAgbWFya2VkRm9sZGVySWQ9e21hcmtlZEZvbGRlcklkfVxuICAgICAgICAgIG9uTWFya0ZvbGRlcj17b25NYXJrRm9sZGVyfVxuICAgICAgICAgIG9wZW5PbkZvbGRlckNsaWNrPXtvcGVuT25Gb2xkZXJDbGlja31cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGZvY3VzZWRGb2xkZXJJZD17Zm9jdXNlZEZvbGRlcklkfVxuICAgICAgICAgIHNldEZvY3VzZWRGb2xkZXJJZD17c2V0Rm9jdXNlZEZvbGRlcklkfVxuICAgICAgICAgIGZpcnN0TGV2ZWxcbiAgICAgICAgLz5cbiAgICAgIDwvVHJlZVN0cnVjdHVyZVN0eWxlZFdyYXBwZXI+XG4gICAgICB7ZWRpdGFibGUgJiYgKFxuICAgICAgICA8QWRkRm9sZGVyV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgdG9vbHRpcD17dCgnbXlOZGxhLm5ld0ZvbGRlclVuZGVyJywge1xuICAgICAgICAgICAgICBmb2xkZXJOYW1lOiBnZXRGb2xkZXJOYW1lKGRhdGEsIG1hcmtlZEZvbGRlcklkKSxcbiAgICAgICAgICAgIH0pfT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgbGlnaHRcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVBZGRGb2xkZXJCdXR0b259XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGdldFBhdGhPZkZvbGRlcihkYXRhLCBtYXJrZWRGb2xkZXJJZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRQYXRocyA9IGdldElkUGF0aHNPZkZvbGRlcihkYXRhLCBtYXJrZWRGb2xkZXJJZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgc2V0TmV3Rm9sZGVyKHsgaWRQYXRocywgcGFyZW50SWQ6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdIH0pO1xuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAge3QoJ215TmRsYS5uZXdGb2xkZXInKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9BZGRGb2xkZXJXcmFwcGVyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRyZWVTdHJ1Y3R1cmU7XG4iXX0= */"));
49
+
50
+ var AddFolderWrapper = _styled("div", {
51
+ target: "e1dg1gdn1",
52
+ label: "AddFolderWrapper"
53
+ })("display:flex;margin-top:", spacing.xsmall, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJCbUMiLCJmaWxlIjoiVHJlZVN0cnVjdHVyZS50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQG5kbGEvdXRpbCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BuZGxhL2J1dHRvbic7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbmRsYS90b29sdGlwJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBzcGFjaW5nLCBmb250cyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFRyZWVTdHJ1Y3R1cmVTdHlsZWRXcmFwcGVyIGZyb20gJy4vVHJlZVN0cnVjdHVyZVdyYXBwZXInO1xuaW1wb3J0IEZvbGRlckl0ZW1zIGZyb20gJy4vRm9sZGVySXRlbXMnO1xuaW1wb3J0IHsgZ2V0SWRQYXRoc09mRm9sZGVyLCBnZXRQYXRoT2ZGb2xkZXIsIGdldEZvbGRlck5hbWUgfSBmcm9tICcuL2hlbHBlckZ1bmN0aW9ucyc7XG5pbXBvcnQga2V5Ym9hcmROYXZpZ2F0aW9uLCB7IEtFWUJPQVJEX0tFWVNfT0ZfSU5URVJFU1QgfSBmcm9tICcuL2tleWJvYXJkTmF2aWdhdGlvbi9rZXlib2FyZE5hdmlnYXRpb24nO1xuaW1wb3J0IHsgTmV3Rm9sZGVyUHJvcHMsIFRyZWVTdHJ1Y3R1cmVQcm9wcyB9IGZyb20gJy4vVHJlZVN0cnVjdHVyZS50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNQVhfTEVWRUxfRk9SX0ZPTERFUlMgPSA0O1xuXG5jb25zdCBTdHlsZWRMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC13ZWlnaHQ6ICR7Zm9udHMud2VpZ2h0LnNlbWlib2xkfTtcbmA7XG5cbmNvbnN0IEFkZEZvbGRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAke3NwYWNpbmcueHNtYWxsfTtcbmA7XG5cbmNvbnN0IFRyZWVTdHJ1Y3R1cmUgPSAoe1xuICBkYXRhLFxuICBsYWJlbCxcbiAgZWRpdGFibGUsXG4gIGxvYWRpbmcsXG4gIG9uTmV3Rm9sZGVyLFxuICBvcGVuT25Gb2xkZXJDbGljayxcbiAgZnJhbWVkLFxuICBmb2xkZXJJZE1hcmtlZEJ5RGVmYXVsdCxcbiAgZGVmYXVsdE9wZW5Gb2xkZXJzLFxufTogVHJlZVN0cnVjdHVyZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW25ld0ZvbGRlciwgc2V0TmV3Rm9sZGVyXSA9IHVzZVN0YXRlPE5ld0ZvbGRlclByb3BzIHwgdW5kZWZpbmVkPigpO1xuICBjb25zdCBbb3BlbkZvbGRlcnMsIHNldE9wZW5Gb2xkZXJzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KGRlZmF1bHRPcGVuRm9sZGVycyB8fCBbXSkpO1xuICBjb25zdCBbZm9jdXNlZEZvbGRlcklkLCBzZXRGb2N1c2VkRm9sZGVySWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBjb25zdCBbbWFya2VkRm9sZGVySWQsIHNldE1hcmtlZEZvbGRlcklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oZm9sZGVySWRNYXJrZWRCeURlZmF1bHQgfHwgZGF0YVswXS5pZCk7XG4gIGNvbnN0IHRyZWVzdHJ1Y3R1cmVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgcm9vdExldmVsSWQgPSB1c2VNZW1vKCgpID0+IHV1aWQoKSwgW10pOyAvLyBUT0RPOiB1c2UgdXNlSWQgaG9vayB3aGVuIHdlIHVwZGF0ZSB0byBSZWFjdCAxOFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0T3BlbkZvbGRlcnMoKHByZXYpID0+IHtcbiAgICAgIGRlZmF1bHRPcGVuRm9sZGVycz8uZm9yRWFjaCgoaWQpID0+IHByZXYuYWRkKGlkKSk7XG4gICAgICByZXR1cm4gbmV3IFNldChwcmV2KTtcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRPcGVuRm9sZGVyc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nKSB7XG4gICAgICBzZXROZXdGb2xkZXIodW5kZWZpbmVkKTtcbiAgICB9XG4gIH0sIFtsb2FkaW5nXSk7XG5cbiAgY29uc3Qgb25Ub2dnbGVPcGVuID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRPcGVuRm9sZGVycygocHJldikgPT4ge1xuICAgICAgaWYgKHByZXYuaGFzKGlkKSkge1xuICAgICAgICBwcmV2LmRlbGV0ZShpZCk7XG4gICAgICAgIC8vIERpZCB3ZSBqdXN0IGNsb3NlZCBhIGZvbGRlciB3aXRoIGEgbWFya2VkIGZvbGRlciBpbnNpZGUgaXQ/XG4gICAgICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGZvbGRlciB3ZSBqdXN0IGNsb3NlZC5cbiAgICAgICAgaWYgKG1hcmtlZEZvbGRlcklkKSB7XG4gICAgICAgICAgY29uc3QgY2xvc2luZ0ZvbGRlclBhdGggPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgaWQpO1xuICAgICAgICAgIGNvbnN0IG1hcmtlZEZvbGRlclBhdGggPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgbWFya2VkRm9sZGVySWQpO1xuICAgICAgICAgIGNvbnN0IG1hcmtlZEZvbGRlcklzU3ViUGF0aCA9IGNsb3NpbmdGb2xkZXJQYXRoLmV2ZXJ5KFxuICAgICAgICAgICAgKGZvbGRlcklkLCBfaW5kZXgpID0+IG1hcmtlZEZvbGRlclBhdGhbX2luZGV4XSA9PT0gZm9sZGVySWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWFya2VkRm9sZGVySXNTdWJQYXRoKSB7XG4gICAgICAgICAgICBzZXRNYXJrZWRGb2xkZXJJZChjbG9zaW5nRm9sZGVyUGF0aFtjbG9zaW5nRm9sZGVyUGF0aC5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2LmFkZChpZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFNldChwcmV2KTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBvbkNyZWF0ZU5ld0ZvbGRlciA9IChwcm9wczogeyBpZFBhdGhzOiBudW1iZXJbXTsgcGFyZW50SWQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgIHNldE5ld0ZvbGRlcihwcm9wcyk7XG4gIH07XG5cbiAgY29uc3Qgb25TYXZlTmV3Rm9sZGVyID0gYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmV3Rm9sZGVyKSB7XG4gICAgICAvLyBXZSB3b3VsZCBsaWtlIHRvIGNyZWF0ZSBhIG5ldyBmb2xkZXIgd2l0aCB0aGUgbmFtZSBvZiB2YWx1ZS5cbiAgICAgIC8vIEl0cyBsb2NhdGlvbiBpbiBzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gbmV3Rm9sZGVyIG9iamVjdFxuICAgICAgY29uc3QgbmV3Rm9sZGVySWQgPSBhd2FpdCBvbk5ld0ZvbGRlcih7IC4uLm5ld0ZvbGRlciwgdmFsdWUgfSk7XG4gICAgICBpZiAobmV3Rm9sZGVySWQpIHtcbiAgICAgICAgc2V0TWFya2VkRm9sZGVySWQobmV3Rm9sZGVySWQpO1xuICAgICAgICBzZXRGb2N1c2VkRm9sZGVySWQobmV3Rm9sZGVySWQpO1xuICAgICAgICAvLyBPcGVuIGN1cnJlbnQgZm9sZGVyIGluIGNhc2UgaXQgd2FzIGNsb3NlZC4uXG4gICAgICAgIHNldE9wZW5Gb2xkZXJzKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKG5ld0ZvbGRlci5wYXJlbnRJZCkge1xuICAgICAgICAgICAgcHJldi5hZGQobmV3Rm9sZGVyLnBhcmVudElkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTZXQocHJldik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkNhbmNlbE5ld0ZvbGRlciA9ICgpID0+IHtcbiAgICBzZXROZXdGb2xkZXIodW5kZWZpbmVkKTtcbiAgfTtcblxuICBjb25zdCBvbk1hcmtGb2xkZXIgPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIHNldE1hcmtlZEZvbGRlcklkKGlkKTtcbiAgICBzZXRGb2N1c2VkRm9sZGVySWQoaWQpO1xuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVBZGRGb2xkZXJCdXR0b24gPVxuICAgIG1hcmtlZEZvbGRlcklkID09PSB1bmRlZmluZWQgfHwgZ2V0UGF0aE9mRm9sZGVyKGRhdGEsIG1hcmtlZEZvbGRlcklkKS5sZW5ndGggPj0gTUFYX0xFVkVMX0ZPUl9GT0xERVJTO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXt0cmVlc3RydWN0dXJlUmVmfVxuICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICBpZiAod3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJiBLRVlCT0FSRF9LRVlTX09GX0lOVEVSRVNULmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICAgIGtleWJvYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICBlLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldEZvY3VzZWRGb2xkZXJJZCxcbiAgICAgICAgICAgIGZvY3VzZWRGb2xkZXJJZCxcbiAgICAgICAgICAgIG9uVG9nZ2xlT3BlbixcbiAgICAgICAgICAgIG9wZW5Gb2xkZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9fT5cbiAgICAgIDxTdHlsZWRMYWJlbCBodG1sRm9yPXtyb290TGV2ZWxJZH0+e2xhYmVsfTwvU3R5bGVkTGFiZWw+XG4gICAgICA8VHJlZVN0cnVjdHVyZVN0eWxlZFdyYXBwZXIgcmVmPXt3cmFwcGVyUmVmfSBpZD17cm9vdExldmVsSWR9IGFyaWEtbGFiZWw9XCJNZW51IHRyZWVcIiByb2xlPVwidHJlZVwiIGZyYW1lZD17ZnJhbWVkfT5cbiAgICAgICAgPEZvbGRlckl0ZW1zXG4gICAgICAgICAgaWRQYXRocz17W119XG4gICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICBlZGl0YWJsZT17ZWRpdGFibGV9XG4gICAgICAgICAgb25Ub2dnbGVPcGVuPXtvblRvZ2dsZU9wZW59XG4gICAgICAgICAgbmV3Rm9sZGVyPXtuZXdGb2xkZXJ9XG4gICAgICAgICAgb25DcmVhdGVOZXdGb2xkZXI9e29uQ3JlYXRlTmV3Rm9sZGVyfVxuICAgICAgICAgIG9uQ2FuY2VsTmV3Rm9sZGVyPXtvbkNhbmNlbE5ld0ZvbGRlcn1cbiAgICAgICAgICBvblNhdmVOZXdGb2xkZXI9e29uU2F2ZU5ld0ZvbGRlcn1cbiAgICAgICAgICBvcGVuRm9sZGVycz17b3BlbkZvbGRlcnN9XG4gICAgICAgICAgbWFya2VkRm9sZGVySWQ9e21hcmtlZEZvbGRlcklkfVxuICAgICAgICAgIG9uTWFya0ZvbGRlcj17b25NYXJrRm9sZGVyfVxuICAgICAgICAgIG9wZW5PbkZvbGRlckNsaWNrPXtvcGVuT25Gb2xkZXJDbGlja31cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGZvY3VzZWRGb2xkZXJJZD17Zm9jdXNlZEZvbGRlcklkfVxuICAgICAgICAgIHNldEZvY3VzZWRGb2xkZXJJZD17c2V0Rm9jdXNlZEZvbGRlcklkfVxuICAgICAgICAgIGZpcnN0TGV2ZWxcbiAgICAgICAgLz5cbiAgICAgIDwvVHJlZVN0cnVjdHVyZVN0eWxlZFdyYXBwZXI+XG4gICAgICB7ZWRpdGFibGUgJiYgKFxuICAgICAgICA8QWRkRm9sZGVyV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgdG9vbHRpcD17dCgnbXlOZGxhLm5ld0ZvbGRlclVuZGVyJywge1xuICAgICAgICAgICAgICBmb2xkZXJOYW1lOiBnZXRGb2xkZXJOYW1lKGRhdGEsIG1hcmtlZEZvbGRlcklkKSxcbiAgICAgICAgICAgIH0pfT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgbGlnaHRcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVBZGRGb2xkZXJCdXR0b259XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGdldFBhdGhPZkZvbGRlcihkYXRhLCBtYXJrZWRGb2xkZXJJZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRQYXRocyA9IGdldElkUGF0aHNPZkZvbGRlcihkYXRhLCBtYXJrZWRGb2xkZXJJZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgc2V0TmV3Rm9sZGVyKHsgaWRQYXRocywgcGFyZW50SWQ6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdIH0pO1xuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAge3QoJ215TmRsYS5uZXdGb2xkZXInKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9BZGRGb2xkZXJXcmFwcGVyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRyZWVTdHJ1Y3R1cmU7XG4iXX0= */"));
54
+
55
+ var TreeStructure = function TreeStructure(_ref) {
56
+ var data = _ref.data,
57
+ label = _ref.label,
58
+ editable = _ref.editable,
59
+ loading = _ref.loading,
60
+ onNewFolder = _ref.onNewFolder,
61
+ openOnFolderClick = _ref.openOnFolderClick,
62
+ framed = _ref.framed,
63
+ folderIdMarkedByDefault = _ref.folderIdMarkedByDefault,
64
+ defaultOpenFolders = _ref.defaultOpenFolders;
65
+
66
+ var _useTranslation = useTranslation(),
67
+ t = _useTranslation.t;
68
+
69
+ var _useState = useState(),
70
+ _useState2 = _slicedToArray(_useState, 2),
71
+ newFolder = _useState2[0],
72
+ setNewFolder = _useState2[1];
73
+
74
+ var _useState3 = useState(new Set(defaultOpenFolders || [])),
75
+ _useState4 = _slicedToArray(_useState3, 2),
76
+ openFolders = _useState4[0],
77
+ setOpenFolders = _useState4[1];
78
+
79
+ var _useState5 = useState(),
80
+ _useState6 = _slicedToArray(_useState5, 2),
81
+ focusedFolderId = _useState6[0],
82
+ setFocusedFolderId = _useState6[1];
83
+
84
+ var _useState7 = useState(folderIdMarkedByDefault || data[0].id),
85
+ _useState8 = _slicedToArray(_useState7, 2),
86
+ markedFolderId = _useState8[0],
87
+ setMarkedFolderId = _useState8[1];
88
+
89
+ var treestructureRef = useRef(null);
90
+ var wrapperRef = useRef(null);
91
+ var rootLevelId = useMemo(function () {
92
+ return uuid();
93
+ }, []); // TODO: use useId hook when we update to React 18
94
+
95
+ useEffect(function () {
96
+ setOpenFolders(function (prev) {
97
+ defaultOpenFolders === null || defaultOpenFolders === void 0 ? void 0 : defaultOpenFolders.forEach(function (id) {
98
+ return prev.add(id);
99
+ });
100
+ return new Set(prev);
101
+ });
102
+ }, [defaultOpenFolders]);
103
+ useEffect(function () {
104
+ if (!loading) {
105
+ setNewFolder(undefined);
106
+ }
107
+ }, [loading]);
108
+
109
+ var onToggleOpen = function onToggleOpen(id) {
110
+ setOpenFolders(function (prev) {
111
+ if (prev.has(id)) {
112
+ prev["delete"](id); // Did we just closed a folder with a marked folder inside it?
113
+ // If so, we need to mark the folder we just closed.
114
+
115
+ if (markedFolderId) {
116
+ var closingFolderPath = getPathOfFolder(data, id);
117
+ var markedFolderPath = getPathOfFolder(data, markedFolderId);
118
+ var markedFolderIsSubPath = closingFolderPath.every(function (folderId, _index) {
119
+ return markedFolderPath[_index] === folderId;
120
+ });
121
+
122
+ if (markedFolderIsSubPath) {
123
+ setMarkedFolderId(closingFolderPath[closingFolderPath.length - 1]);
124
+ }
125
+ }
126
+ } else {
127
+ prev.add(id);
128
+ }
129
+
130
+ return new Set(prev);
131
+ });
132
+ };
133
+
134
+ var onCreateNewFolder = function onCreateNewFolder(props) {
135
+ setNewFolder(props);
136
+ };
137
+
138
+ var onSaveNewFolder = /*#__PURE__*/function () {
139
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(value) {
140
+ var newFolderId;
141
+ return regeneratorRuntime.wrap(function _callee$(_context) {
142
+ while (1) {
143
+ switch (_context.prev = _context.next) {
144
+ case 0:
145
+ if (!newFolder) {
146
+ _context.next = 5;
147
+ break;
148
+ }
149
+
150
+ _context.next = 3;
151
+ return onNewFolder(_objectSpread(_objectSpread({}, newFolder), {}, {
152
+ value: value
153
+ }));
154
+
155
+ case 3:
156
+ newFolderId = _context.sent;
157
+
158
+ if (newFolderId) {
159
+ setMarkedFolderId(newFolderId);
160
+ setFocusedFolderId(newFolderId); // Open current folder in case it was closed..
161
+
162
+ setOpenFolders(function (prev) {
163
+ if (newFolder.parentId) {
164
+ prev.add(newFolder.parentId);
165
+ }
166
+
167
+ return new Set(prev);
168
+ });
169
+ }
170
+
171
+ case 5:
172
+ case "end":
173
+ return _context.stop();
174
+ }
175
+ }
176
+ }, _callee);
177
+ }));
178
+
179
+ return function onSaveNewFolder(_x) {
180
+ return _ref2.apply(this, arguments);
181
+ };
182
+ }();
183
+
184
+ var onCancelNewFolder = function onCancelNewFolder() {
185
+ setNewFolder(undefined);
186
+ };
187
+
188
+ var onMarkFolder = function onMarkFolder(id) {
189
+ setMarkedFolderId(id);
190
+ setFocusedFolderId(id);
191
+ };
192
+
193
+ var disableAddFolderButton = markedFolderId === undefined || getPathOfFolder(data, markedFolderId).length >= MAX_LEVEL_FOR_FOLDERS;
194
+ return ___EmotionJSX("div", {
195
+ ref: treestructureRef,
196
+ onKeyDown: function onKeyDown(e) {
197
+ var _wrapperRef$current;
198
+
199
+ if (((_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.contains(document.activeElement)) && KEYBOARD_KEYS_OF_INTEREST.includes(e.key)) {
200
+ keyboardNavigation({
201
+ e: e,
202
+ data: data,
203
+ setFocusedFolderId: setFocusedFolderId,
204
+ focusedFolderId: focusedFolderId,
205
+ onToggleOpen: onToggleOpen,
206
+ openFolders: openFolders
207
+ });
208
+ }
209
+ }
210
+ }, ___EmotionJSX(StyledLabel, {
211
+ htmlFor: rootLevelId
212
+ }, label), ___EmotionJSX(TreeStructureStyledWrapper, {
213
+ ref: wrapperRef,
214
+ id: rootLevelId,
215
+ "aria-label": "Menu tree",
216
+ role: "tree",
217
+ framed: framed
218
+ }, ___EmotionJSX(FolderItems, {
219
+ idPaths: [],
220
+ data: data,
221
+ editable: editable,
222
+ onToggleOpen: onToggleOpen,
223
+ newFolder: newFolder,
224
+ onCreateNewFolder: onCreateNewFolder,
225
+ onCancelNewFolder: onCancelNewFolder,
226
+ onSaveNewFolder: onSaveNewFolder,
227
+ openFolders: openFolders,
228
+ markedFolderId: markedFolderId,
229
+ onMarkFolder: onMarkFolder,
230
+ openOnFolderClick: openOnFolderClick,
231
+ loading: loading,
232
+ focusedFolderId: focusedFolderId,
233
+ setFocusedFolderId: setFocusedFolderId,
234
+ firstLevel: true
235
+ })), editable && ___EmotionJSX(AddFolderWrapper, null, ___EmotionJSX(Tooltip, {
236
+ tooltip: t('myNdla.newFolderUnder', {
237
+ folderName: getFolderName(data, markedFolderId)
238
+ })
239
+ }, ___EmotionJSX(Button, {
240
+ size: "small",
241
+ light: true,
242
+ disabled: disableAddFolderButton,
243
+ onClick: function onClick() {
244
+ var paths = getPathOfFolder(data, markedFolderId || '');
245
+ var idPaths = getIdPathsOfFolder(data, markedFolderId || '');
246
+ setNewFolder({
247
+ idPaths: idPaths,
248
+ parentId: paths[paths.length - 1]
249
+ });
250
+ }
251
+ }, t('myNdla.newFolder')))));
252
+ };
253
+
254
+ export default TreeStructure;
File without changes
@@ -0,0 +1,13 @@
1
+ import _styled from "@emotion/styled-base";
2
+ import { css } from '@emotion/core';
3
+ import { colors, misc, spacing } from '@ndla/core';
4
+
5
+ var TreeStructureWrapper = _styled("div", {
6
+ target: "ez53f4u0",
7
+ label: "TreeStructureWrapper"
8
+ })("padding:", spacing.xsmall, ";", function (_ref) {
9
+ var framed = _ref.framed;
10
+ return framed ? /*#__PURE__*/css("border:1px solid ", colors.brand.greyLighter, ";border-radius:", misc.borderRadius, ";max-height:400px;overflow-y:scroll;scroll-behavior:smooth;padding:", spacing.small, ";;label:TreeStructureWrapper;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmVXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQlciLCJmaWxlIjoiVHJlZVN0cnVjdHVyZVdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jb3JlJztcbmltcG9ydCB7IGNvbG9ycywgbWlzYywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuXG5jb25zdCBUcmVlU3RydWN0dXJlV3JhcHBlciA9IHN0eWxlZC5kaXY8eyBmcmFtZWQ/OiBib29sZWFuIH0+YFxuICBwYWRkaW5nOiAke3NwYWNpbmcueHNtYWxsfTtcbiAgJHsoeyBmcmFtZWQgfSkgPT5cbiAgICBmcmFtZWRcbiAgICAgID8gY3NzYFxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y29sb3JzLmJyYW5kLmdyZXlMaWdodGVyfTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke21pc2MuYm9yZGVyUmFkaXVzfTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG4gICAgICAgICAgcGFkZGluZzogJHtzcGFjaW5nLnNtYWxsfTtcbiAgICAgICAgYFxuICAgICAgOiBjc3NgXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ke3NwYWNpbmcubWVkaXVtfTtcbiAgICAgICAgYH1cbiAgdHJhbnNpdGlvbjogJHttaXNjLnRyYW5zaXRpb24uZGVmYXVsdH07XG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7Y29sb3JzLmJyYW5kLnByaW1hcnl9O1xuICB9XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBUcmVlU3RydWN0dXJlV3JhcHBlcjtcbiJdfQ== */")) : /*#__PURE__*/css("margin-left:-", spacing.medium, ";;label:TreeStructureWrapper;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmVXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QlciLCJmaWxlIjoiVHJlZVN0cnVjdHVyZVdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jb3JlJztcbmltcG9ydCB7IGNvbG9ycywgbWlzYywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuXG5jb25zdCBUcmVlU3RydWN0dXJlV3JhcHBlciA9IHN0eWxlZC5kaXY8eyBmcmFtZWQ/OiBib29sZWFuIH0+YFxuICBwYWRkaW5nOiAke3NwYWNpbmcueHNtYWxsfTtcbiAgJHsoeyBmcmFtZWQgfSkgPT5cbiAgICBmcmFtZWRcbiAgICAgID8gY3NzYFxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y29sb3JzLmJyYW5kLmdyZXlMaWdodGVyfTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke21pc2MuYm9yZGVyUmFkaXVzfTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG4gICAgICAgICAgcGFkZGluZzogJHtzcGFjaW5nLnNtYWxsfTtcbiAgICAgICAgYFxuICAgICAgOiBjc3NgXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ke3NwYWNpbmcubWVkaXVtfTtcbiAgICAgICAgYH1cbiAgdHJhbnNpdGlvbjogJHttaXNjLnRyYW5zaXRpb24uZGVmYXVsdH07XG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7Y29sb3JzLmJyYW5kLnByaW1hcnl9O1xuICB9XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBUcmVlU3RydWN0dXJlV3JhcHBlcjtcbiJdfQ== */"));
11
+ }, " transition:", misc.transition["default"], ";&:focus-within{border-color:", colors.brand.primary, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmVXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZNkQiLCJmaWxlIjoiVHJlZVN0cnVjdHVyZVdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jb3JlJztcbmltcG9ydCB7IGNvbG9ycywgbWlzYywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuXG5jb25zdCBUcmVlU3RydWN0dXJlV3JhcHBlciA9IHN0eWxlZC5kaXY8eyBmcmFtZWQ/OiBib29sZWFuIH0+YFxuICBwYWRkaW5nOiAke3NwYWNpbmcueHNtYWxsfTtcbiAgJHsoeyBmcmFtZWQgfSkgPT5cbiAgICBmcmFtZWRcbiAgICAgID8gY3NzYFxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y29sb3JzLmJyYW5kLmdyZXlMaWdodGVyfTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke21pc2MuYm9yZGVyUmFkaXVzfTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG4gICAgICAgICAgcGFkZGluZzogJHtzcGFjaW5nLnNtYWxsfTtcbiAgICAgICAgYFxuICAgICAgOiBjc3NgXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ke3NwYWNpbmcubWVkaXVtfTtcbiAgICAgICAgYH1cbiAgdHJhbnNpdGlvbjogJHttaXNjLnRyYW5zaXRpb24uZGVmYXVsdH07XG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXItY29sb3I6ICR7Y29sb3JzLmJyYW5kLnByaW1hcnl9O1xuICB9XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBUcmVlU3RydWN0dXJlV3JhcHBlcjtcbiJdfQ== */"));
12
+
13
+ export default TreeStructureWrapper;
@@ -0,0 +1,92 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
6
+
7
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
8
+
9
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
10
+
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
+
15
+ var getPathOfFolder = function getPathOfFolder(data, findId) {
16
+ var paths = function paths(dataChildren, path) {
17
+ var _iterator = _createForOfIteratorHelper(dataChildren),
18
+ _step;
19
+
20
+ try {
21
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
22
+ var _step$value = _step.value,
23
+ id = _step$value.id,
24
+ dataChildrenSub = _step$value.data;
25
+
26
+ if (id === findId) {
27
+ return [].concat(_toConsumableArray(path), [id]);
28
+ } else if (dataChildrenSub === null || dataChildrenSub === void 0 ? void 0 : dataChildrenSub.length) {
29
+ return paths(dataChildrenSub, [].concat(_toConsumableArray(path), [id]));
30
+ }
31
+ }
32
+ } catch (err) {
33
+ _iterator.e(err);
34
+ } finally {
35
+ _iterator.f();
36
+ }
37
+
38
+ return [];
39
+ };
40
+
41
+ return paths(data, []);
42
+ };
43
+
44
+ var getIdPathsOfFolder = function getIdPathsOfFolder(data, findId) {
45
+ var currentPath = [];
46
+
47
+ var paths = function paths(dataChildren, path) {
48
+ dataChildren.forEach(function (_ref, _index) {
49
+ var id = _ref.id,
50
+ dataChildrenSub = _ref.data;
51
+
52
+ if (id === findId) {
53
+ currentPath = [].concat(_toConsumableArray(path), [_index]);
54
+ } else if (dataChildrenSub === null || dataChildrenSub === void 0 ? void 0 : dataChildrenSub.length) {
55
+ paths(dataChildrenSub, [].concat(_toConsumableArray(path), [_index]));
56
+ }
57
+ });
58
+ };
59
+
60
+ paths(data, []);
61
+ return currentPath;
62
+ };
63
+
64
+ var getFolderName = function getFolderName(data, findId) {
65
+ if (!findId) {
66
+ return undefined;
67
+ }
68
+
69
+ var folderName;
70
+
71
+ var paths = function paths(dataChildren) {
72
+ dataChildren.some(function (_ref2, _index) {
73
+ var id = _ref2.id,
74
+ name = _ref2.name,
75
+ dataChildrenSub = _ref2.data;
76
+
77
+ if (id === findId) {
78
+ folderName = name;
79
+ return true;
80
+ } else if (dataChildrenSub === null || dataChildrenSub === void 0 ? void 0 : dataChildrenSub.length) {
81
+ return paths(dataChildrenSub);
82
+ }
83
+
84
+ return false;
85
+ });
86
+ };
87
+
88
+ paths(data);
89
+ return folderName;
90
+ };
91
+
92
+ export { getPathOfFolder, getIdPathsOfFolder, getFolderName };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import TreeStructure from './TreeStructure';
9
+ export { TreeStructure };
@@ -0,0 +1,182 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+
5
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
+
7
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
8
+
9
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
10
+
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12
+
13
+ /**
14
+ * Copyright (c) 2022-present, NDLA.
15
+ *
16
+ * This source code is licensed under the GPLv3 license found in the
17
+ * LICENSE file in the root directory of this source tree.
18
+ *
19
+ */
20
+ import { MAX_LEVEL_FOR_FOLDERS } from '../TreeStructure';
21
+ export var KEYBOARD_KEYS_OF_INTEREST = ['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', ' ']; // Traverse upwards, incase parent is last element of its parent..
22
+
23
+ var traverseUpwards = function traverseUpwards(inital, setFocusedFolderId, paths, index) {
24
+ var findParent = inital;
25
+ var parentNextIds = [];
26
+ paths.forEach(function (pathIndex) {
27
+ var nextParent = findParent ? findParent[pathIndex + 1] : undefined;
28
+ parentNextIds.push((nextParent === null || nextParent === void 0 ? void 0 : nextParent.id) || false);
29
+ findParent = findParent[pathIndex].data || [];
30
+ });
31
+
32
+ if (!parentNextIds.length) {
33
+ var _findParent;
34
+
35
+ parentNextIds.push(((_findParent = findParent[index + 1]) === null || _findParent === void 0 ? void 0 : _findParent.id) || false);
36
+ } // We use a reversed version of parentNextIds, filtered out falses, to find the next element
37
+ // No newId? We are at the end of the tree so we wont update.
38
+
39
+
40
+ var newId = parentNextIds.reverse().filter(function (id) {
41
+ return id;
42
+ })[0];
43
+
44
+ if (newId) {
45
+ setFocusedFolderId(newId);
46
+ }
47
+ };
48
+
49
+ var keyboardNavigation = function keyboardNavigation(_ref) {
50
+ var _document$activeEleme, _elementWithKeyFocus$3;
51
+
52
+ var e = _ref.e,
53
+ data = _ref.data,
54
+ onToggleOpen = _ref.onToggleOpen,
55
+ setFocusedFolderId = _ref.setFocusedFolderId,
56
+ id = _ref.focusedFolderId,
57
+ openFolders = _ref.openFolders;
58
+
59
+ if (e.key === ' ' && ((_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.nodeName) === 'INPUT') {
60
+ return;
61
+ } // We are navigating in the tree.
62
+ // We need to find the next folder in the tree
63
+
64
+
65
+ var elementWithKeyFocus = {
66
+ paths: [],
67
+ index: 0
68
+ };
69
+
70
+ var updatePathToElementWithKeyFocus = function updatePathToElementWithKeyFocus(data, paths, parent, parentId) {
71
+ return data.some(function (_ref2, _index) {
72
+ var childData = _ref2.data,
73
+ dataId = _ref2.id,
74
+ url = _ref2.url;
75
+
76
+ if (dataId === id) {
77
+ elementWithKeyFocus.paths = paths;
78
+ elementWithKeyFocus.index = _index;
79
+ elementWithKeyFocus.isOpen = openFolders.has(dataId) && childData && childData.length > 0;
80
+ elementWithKeyFocus.data = childData;
81
+ elementWithKeyFocus.parent = parent;
82
+ elementWithKeyFocus.parentId = parentId;
83
+ elementWithKeyFocus.url = url;
84
+ return true;
85
+ }
86
+
87
+ return childData ? updatePathToElementWithKeyFocus(childData, [].concat(_toConsumableArray(paths), [_index]), _toConsumableArray(childData), dataId) : false;
88
+ });
89
+ };
90
+
91
+ if (!updatePathToElementWithKeyFocus(data, [], data)) {
92
+ // Couldn't find its location in the tree.
93
+ // This should not happen, reset its value to root.
94
+ setFocusedFolderId(e.key === 'ArrowDown' ? data[0].id : undefined);
95
+ return;
96
+ }
97
+
98
+ e.preventDefault();
99
+ e.stopPropagation();
100
+
101
+ if (e.key === ' ') {
102
+ var simulatedEvent = new MouseEvent('click', {
103
+ bubbles: true,
104
+ cancelable: true,
105
+ view: window
106
+ });
107
+ document.activeElement && document.activeElement.dispatchEvent(simulatedEvent);
108
+ return;
109
+ }
110
+
111
+ if (e.key === 'ArrowRight') {
112
+ var _elementWithKeyFocus$;
113
+
114
+ if (!elementWithKeyFocus.isOpen && ((_elementWithKeyFocus$ = elementWithKeyFocus.data) === null || _elementWithKeyFocus$ === void 0 ? void 0 : _elementWithKeyFocus$.length) && id && elementWithKeyFocus.paths.length < MAX_LEVEL_FOR_FOLDERS - 1) {
115
+ onToggleOpen(id);
116
+ }
117
+
118
+ return;
119
+ }
120
+
121
+ if (e.key === 'ArrowLeft') {
122
+ if (id && elementWithKeyFocus.isOpen) {
123
+ onToggleOpen(id);
124
+ }
125
+
126
+ return;
127
+ }
128
+
129
+ if (!id && e.key === 'ArrowDown') {
130
+ setFocusedFolderId(data[0].id);
131
+ return;
132
+ }
133
+
134
+ if (!id) {
135
+ return;
136
+ } // Move up
137
+
138
+
139
+ if (e.key === 'ArrowUp') {
140
+ if (elementWithKeyFocus.index > 0) {
141
+ // Move upwards to the parent folder
142
+ setFocusedFolderId(elementWithKeyFocus.parent ? elementWithKeyFocus.parent[elementWithKeyFocus.index - 1].id : undefined);
143
+ } else if (elementWithKeyFocus.paths.length > 0) {
144
+ elementWithKeyFocus.paths.pop();
145
+ var findParent = data;
146
+ elementWithKeyFocus.paths.forEach(function (index) {
147
+ findParent = findParent[index].data;
148
+ });
149
+ var parentsCurrentIndex = findParent.findIndex(function (_ref3) {
150
+ var id = _ref3.id;
151
+ return id === elementWithKeyFocus.parentId;
152
+ });
153
+ setFocusedFolderId(findParent[parentsCurrentIndex].id);
154
+ }
155
+
156
+ return;
157
+ }
158
+
159
+ if (elementWithKeyFocus.isOpen) {
160
+ var _elementWithKeyFocus$2;
161
+
162
+ if ((_elementWithKeyFocus$2 = elementWithKeyFocus.data) === null || _elementWithKeyFocus$2 === void 0 ? void 0 : _elementWithKeyFocus$2.length) {
163
+ setFocusedFolderId(elementWithKeyFocus.data[0].id);
164
+ } else {
165
+ // move to next child of parent if any... need new traverse :-/
166
+ traverseUpwards(data, setFocusedFolderId, elementWithKeyFocus.paths, elementWithKeyFocus.index);
167
+ }
168
+
169
+ return;
170
+ }
171
+
172
+ if (elementWithKeyFocus.parent && elementWithKeyFocus.index < ((_elementWithKeyFocus$3 = elementWithKeyFocus.parent) === null || _elementWithKeyFocus$3 === void 0 ? void 0 : _elementWithKeyFocus$3.length) - 1) {
173
+ // Move downwards to the next child
174
+ setFocusedFolderId(elementWithKeyFocus.parent[elementWithKeyFocus.index + 1].id);
175
+ return;
176
+ }
177
+
178
+ traverseUpwards(data, setFocusedFolderId, elementWithKeyFocus.paths, elementWithKeyFocus.index);
179
+ return;
180
+ };
181
+
182
+ export default keyboardNavigation;