@ndla/ui 30.9.0 → 31.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 (35) hide show
  1. package/es/TreeStructure/AddFolderButton.js +2 -2
  2. package/es/TreeStructure/ComboboxButton.js +2 -2
  3. package/es/TreeStructure/FolderItem.js +11 -10
  4. package/es/TreeStructure/FolderItems.js +28 -37
  5. package/es/TreeStructure/TreeStructure.js +7 -7
  6. package/lib/TreeStructure/AddFolderButton.d.ts +2 -2
  7. package/lib/TreeStructure/AddFolderButton.js +2 -2
  8. package/lib/TreeStructure/ComboboxButton.d.ts +7 -6
  9. package/lib/TreeStructure/ComboboxButton.js +2 -2
  10. package/lib/TreeStructure/FolderItem.d.ts +5 -3
  11. package/lib/TreeStructure/FolderItem.js +11 -10
  12. package/lib/TreeStructure/FolderItems.d.ts +4 -3
  13. package/lib/TreeStructure/FolderItems.js +28 -36
  14. package/lib/TreeStructure/TreeStructure.d.ts +3 -2
  15. package/lib/TreeStructure/TreeStructure.js +7 -7
  16. package/lib/TreeStructure/arrowNavigation.d.ts +2 -2
  17. package/lib/TreeStructure/helperFunctions.d.ts +3 -2
  18. package/lib/TreeStructure/index.d.ts +0 -1
  19. package/lib/TreeStructure/types.d.ts +5 -9
  20. package/lib/index.d.ts +1 -1
  21. package/package.json +2 -2
  22. package/src/TreeStructure/AddFolderButton.tsx +2 -2
  23. package/src/TreeStructure/ComboboxButton.tsx +7 -6
  24. package/src/TreeStructure/FolderItem.tsx +10 -7
  25. package/src/TreeStructure/FolderItems.tsx +31 -36
  26. package/src/TreeStructure/TreeStructure.tsx +6 -6
  27. package/src/TreeStructure/arrowNavigation.ts +5 -5
  28. package/src/TreeStructure/helperFunctions.ts +4 -3
  29. package/src/TreeStructure/index.ts +0 -1
  30. package/src/TreeStructure/types.ts +5 -10
  31. package/src/index.ts +1 -1
  32. package/es/TreeStructure/NavigationLink.js +0 -91
  33. package/lib/TreeStructure/NavigationLink.d.ts +0 -14
  34. package/lib/TreeStructure/NavigationLink.js +0 -93
  35. package/src/TreeStructure/NavigationLink.tsx +0 -107
@@ -9,9 +9,9 @@
9
9
  import React, { ReactNode } from 'react';
10
10
  import styled from '@emotion/styled';
11
11
  import { animations } from '@ndla/core';
12
+ import { IFolder } from '@ndla/types-learningpath-api';
12
13
  import FolderItem from './FolderItem';
13
- import { CommonFolderItemsProps, FolderType, NewFolderInputFunc, OnCreatedFunc, TreeStructureType } from './types';
14
- import NavigationLink from './NavigationLink';
14
+ import { CommonFolderItemsProps, NewFolderInputFunc, OnCreatedFunc, TreeStructureType } from './types';
15
15
  import { treestructureId } from './helperFunctions';
16
16
 
17
17
  const StyledUL = styled.ul`
@@ -38,11 +38,11 @@ const StyledLI = styled.li<StyledLiProps>`
38
38
  `;
39
39
 
40
40
  export interface FolderItemsProps extends CommonFolderItemsProps {
41
- folders: FolderType[];
41
+ folders: IFolder[];
42
42
  newFolderParentId: string | undefined;
43
43
  onCancelNewFolder: () => void;
44
44
  openFolders: string[];
45
- parentFolder?: FolderType;
45
+ parentFolder?: IFolder;
46
46
  children?: ReactNode;
47
47
  onCreate: OnCreatedFunc;
48
48
  newFolderInput?: NewFolderInputFunc;
@@ -74,44 +74,39 @@ const FolderItems = ({
74
74
  aria-labelledby={level === 0 && type === 'picker' ? treestructureId(type, 'label') : undefined}
75
75
  role={level === 0 ? 'tree' : 'group'}>
76
76
  {children}
77
- {folders.map((folder) => {
77
+ {folders.map((folder, index) => {
78
78
  const { subfolders, id } = folder;
79
79
  const isOpen = openFolders?.includes(id);
80
80
 
81
81
  return (
82
82
  <StyledLI key={id} tabIndex={-1} role="none" type={type}>
83
- {folder.isNavigation ? (
84
- <NavigationLink folder={folder} isOpen={isOpen} level={level} type={type} loading={loading} {...rest} />
85
- ) : (
86
- <>
87
- <FolderItem
88
- folder={folder}
89
- isOpen={isOpen}
90
- level={level}
91
- loading={loading}
92
- type={type}
93
- isCreatingFolder={!!newFolderParentId}
94
- {...rest}
95
- />
96
- {((subfolders && isOpen) || newFolderParentId === id) && (
97
- <FolderItems
98
- parentFolder={folder}
99
- folders={subfolders}
100
- level={level + 1}
101
- loading={loading}
102
- type={type}
103
- newFolderParentId={newFolderParentId}
104
- onCancelNewFolder={onCancelNewFolder}
105
- openFolders={openFolders}
106
- newFolderInput={newFolderInput}
107
- onCreate={onCreate}
108
- {...rest}>
109
- {newFolderParentId === id && (
110
- <li role="none">{newFolderInput?.({ parentId: id, onClose: onCancelNewFolder, onCreate })}</li>
111
- )}
112
- </FolderItems>
83
+ <FolderItem
84
+ index={index}
85
+ folder={folder}
86
+ isOpen={isOpen}
87
+ level={level}
88
+ loading={loading}
89
+ type={type}
90
+ isCreatingFolder={!!newFolderParentId}
91
+ {...rest}
92
+ />
93
+ {((subfolders && isOpen) || newFolderParentId === id) && (
94
+ <FolderItems
95
+ parentFolder={folder}
96
+ folders={subfolders}
97
+ level={level + 1}
98
+ loading={loading}
99
+ type={type}
100
+ newFolderParentId={newFolderParentId}
101
+ onCancelNewFolder={onCancelNewFolder}
102
+ openFolders={openFolders}
103
+ newFolderInput={newFolderInput}
104
+ onCreate={onCreate}
105
+ {...rest}>
106
+ {newFolderParentId === id && (
107
+ <li role="none">{newFolderInput?.({ parentId: id, onClose: onCancelNewFolder, onCreate })}</li>
113
108
  )}
114
- </>
109
+ </FolderItems>
115
110
  )}
116
111
  </StyledLI>
117
112
  );
@@ -14,7 +14,7 @@ import { uniq } from 'lodash';
14
14
  import { IFolder } from '@ndla/types-learningpath-api';
15
15
  import FolderItems from './FolderItems';
16
16
  import { flattenFolders, treestructureId } from './helperFunctions';
17
- import { CommonTreeStructureProps, FolderType, NewFolderInputFunc, TreeStructureType } from './types';
17
+ import { CommonTreeStructureProps, NewFolderInputFunc, TreeStructureType } from './types';
18
18
  import ComboboxButton from './ComboboxButton';
19
19
  import AddFolderButton from './AddFolderButton';
20
20
 
@@ -69,7 +69,7 @@ const ScrollableDiv = styled.div<ScrollableDivProps>`
69
69
 
70
70
  export interface TreeStructureProps extends CommonTreeStructureProps {
71
71
  defaultOpenFolders?: string[];
72
- folders: FolderType[];
72
+ folders: IFolder[];
73
73
  label?: string;
74
74
  maxLevel?: number;
75
75
  newFolderInput?: NewFolderInputFunc;
@@ -96,8 +96,8 @@ const TreeStructure = ({
96
96
  const [openFolders, setOpenFolders] = useState<string[]>(defaultOpenFolders || []);
97
97
 
98
98
  const [newFolderParentId, setNewFolderParentId] = useState<string | undefined>();
99
- const [focusedFolder, _setFocusedFolder] = useState<FolderType | undefined>();
100
- const [selectedFolder, _setSelectedFolder] = useState<FolderType | undefined>();
99
+ const [focusedFolder, _setFocusedFolder] = useState<IFolder | undefined>();
100
+ const [selectedFolder, _setSelectedFolder] = useState<IFolder | undefined>();
101
101
  const [showTree, setShowTree] = useState(type === 'navigation');
102
102
 
103
103
  const flattenedFolders = useMemo(() => flattenFolders(folders, openFolders), [folders, openFolders]);
@@ -133,12 +133,12 @@ const TreeStructure = ({
133
133
  }
134
134
  };
135
135
 
136
- const setSelectedFolder = (folder: FolderType) => {
136
+ const setSelectedFolder = (folder: IFolder) => {
137
137
  _setSelectedFolder(folder);
138
138
  onSelectFolder?.(folder.id);
139
139
  };
140
140
 
141
- const setFocusedFolder = (folder: FolderType) => {
141
+ const setFocusedFolder = (folder: IFolder) => {
142
142
  _setFocusedFolder(folder);
143
143
  setNewFolderParentId(undefined);
144
144
 
@@ -6,13 +6,13 @@
6
6
  *
7
7
  */
8
8
 
9
+ import { IFolder } from '@ndla/types-learningpath-api';
9
10
  import { KeyboardEvent } from 'react';
10
- import { FolderType } from './types';
11
11
 
12
12
  const navigateVertical = (
13
- visibleFolders: FolderType[],
13
+ visibleFolders: IFolder[],
14
14
  folderId: string,
15
- setFocusedFolderId: (id: FolderType) => void,
15
+ setFocusedFolderId: (id: IFolder) => void,
16
16
  direction: 1 | -1,
17
17
  ) => {
18
18
  const currentIndex = visibleFolders.findIndex((folder) => folder.id === folderId);
@@ -27,8 +27,8 @@ const arrowKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Enter'];
27
27
  export const arrowNavigation = (
28
28
  e: KeyboardEvent<HTMLElement>,
29
29
  id: string,
30
- visibleFolders: FolderType[],
31
- setFocusedFolderId: (id: FolderType) => void,
30
+ visibleFolders: IFolder[],
31
+ setFocusedFolderId: (id: IFolder) => void,
32
32
  onOpen: (id: string) => void,
33
33
  onClose: (id: string) => void,
34
34
  ) => {
@@ -1,12 +1,13 @@
1
- import { FolderType, TreeStructureType } from './types';
1
+ import { IFolder } from '@ndla/types-learningpath-api';
2
+ import { TreeStructureType } from './types';
2
3
 
3
- export const flattenFolders = (folders: FolderType[], openFolders?: string[]): FolderType[] => {
4
+ export const flattenFolders = (folders: IFolder[], openFolders?: string[]): IFolder[] => {
4
5
  return folders.reduce((acc, { subfolders, id, ...rest }) => {
5
6
  if (!subfolders || (openFolders && !openFolders.includes(id))) {
6
7
  return acc.concat({ subfolders, id, ...rest });
7
8
  }
8
9
  return acc.concat({ subfolders, id, ...rest }, flattenFolders(subfolders, openFolders));
9
- }, [] as FolderType[]);
10
+ }, [] as IFolder[]);
10
11
  };
11
12
 
12
13
  export const treestructureId = (type: TreeStructureType, modifier: string) => {
@@ -7,6 +7,5 @@
7
7
  */
8
8
 
9
9
  import TreeStructure from './TreeStructure';
10
- export type { FolderType } from './types';
11
10
  export type { TreeStructureProps } from './TreeStructure';
12
11
  export { TreeStructure };
@@ -9,11 +9,6 @@
9
9
  import { ReactNode } from 'react';
10
10
  import { IFolder, IResource } from '@ndla/types-learningpath-api';
11
11
 
12
- export interface FolderType extends IFolder {
13
- icon?: ReactNode;
14
- isNavigation?: boolean;
15
- }
16
-
17
12
  export type TreeStructureType = 'navigation' | 'picker';
18
13
 
19
14
  export type OnCreatedFunc = (folder: IFolder | undefined, parentId: string) => void;
@@ -35,14 +30,14 @@ export interface CommonTreeStructureProps {
35
30
  }
36
31
 
37
32
  export interface CommonFolderItemsProps extends CommonTreeStructureProps {
38
- focusedFolder?: FolderType;
33
+ focusedFolder?: IFolder;
39
34
  level: number;
40
35
  maxLevel: number;
41
- selectedFolder?: FolderType;
36
+ selectedFolder?: IFolder;
42
37
  onCloseFolder: (id: string) => void;
43
38
  onOpenFolder: (id: string) => void;
44
- setFocusedFolder: (folder: FolderType) => void;
45
- setSelectedFolder: (folder: FolderType) => void;
46
- visibleFolders: FolderType[];
39
+ setFocusedFolder: (folder: IFolder) => void;
40
+ setSelectedFolder: (folder: IFolder) => void;
41
+ visibleFolders: IFolder[];
47
42
  closeTree: () => void;
48
43
  }
package/src/index.ts CHANGED
@@ -251,7 +251,7 @@ export { SnackbarProvider, useSnack, BaseSnack, DefaultSnackbar } from './SnackB
251
251
  export type { Snack, SnackContext } from './SnackBar';
252
252
  export { InfoBlock } from './InfoBlock';
253
253
  export { TreeStructure } from './TreeStructure';
254
- export type { FolderType, TreeStructureProps } from './TreeStructure';
254
+ export type { TreeStructureProps } from './TreeStructure';
255
255
 
256
256
  export { SearchField, SearchResultList, SearchResultItem, ActiveFilters, ToggleSearchButton } from './Search';
257
257
  export { default as LetterFilter } from './LetterFilter';
@@ -1,91 +0,0 @@
1
- import _styled from "@emotion/styled/base";
2
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
3
- /**
4
- * Copyright (c) 2022-present, NDLA.
5
- *
6
- * This source code is licensed under the GPLv3 license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- *
9
- */
10
-
11
- import { colors, fonts, spacing } from '@ndla/core';
12
- import React, { useEffect, useRef } from 'react';
13
- import SafeLink from '@ndla/safelink';
14
- import { arrowNavigation } from './arrowNavigation';
15
- import { jsx as _jsx } from "@emotion/react/jsx-runtime";
16
- import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
17
- var StyledSafeLink = /*#__PURE__*/_styled(SafeLink, {
18
- target: "et3arba1",
19
- label: "StyledSafeLink"
20
- })("display:grid;grid-template-columns:", spacing.medium, " 1fr;align-items:center;padding:", spacing.xxsmall, ";margin:", spacing.xsmall, " 0;gap:", spacing.xxsmall, ";box-shadow:none;color:", function (_ref) {
21
- var selected = _ref.selected;
22
- return selected ? colors.brand.primary : colors.text.primary;
23
- }, ";font-weight:", function (_ref2) {
24
- var selected = _ref2.selected;
25
- return selected ? fonts.weight.semibold : fonts.weight.normal;
26
- }, ";", fonts.sizes('16px'), ";:hover,:focus{color:", colors.brand.primary, ";}svg{height:26px;width:26px;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQm9EIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */"));
27
- var IconWrapper = /*#__PURE__*/_styled("span", {
28
- target: "et3arba0",
29
- label: "IconWrapper"
30
- })(process.env.NODE_ENV === "production" ? {
31
- name: "1wnowod",
32
- styles: "display:flex;align-items:center;justify-content:center"
33
- } : {
34
- name: "1wnowod",
35
- styles: "display:flex;align-items:center;justify-content:center",
36
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQytCIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */",
37
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
38
- });
39
- var NavigationLink = function NavigationLink(_ref3) {
40
- var loading = _ref3.loading,
41
- folder = _ref3.folder,
42
- selectedFolder = _ref3.selectedFolder,
43
- focusedFolder = _ref3.focusedFolder,
44
- setSelectedFolder = _ref3.setSelectedFolder,
45
- setFocusedFolder = _ref3.setFocusedFolder,
46
- visibleFolders = _ref3.visibleFolders,
47
- onOpenFolder = _ref3.onOpenFolder,
48
- onCloseFolder = _ref3.onCloseFolder;
49
- var id = folder.id,
50
- icon = folder.icon,
51
- name = folder.name;
52
- var selected = selectedFolder && selectedFolder.id === id;
53
- var ref = useRef(null);
54
- var focused = (focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id;
55
- var handleClick = function handleClick() {
56
- if (!selected) {
57
- setSelectedFolder(folder);
58
- setFocusedFolder(folder);
59
- }
60
- };
61
- useEffect(function () {
62
- if ((focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id) {
63
- var _ref$current;
64
- (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
65
- }
66
- }, [focusedFolder, ref, id]);
67
- return _jsxs(StyledSafeLink, {
68
- role: "treeitem",
69
- ref: ref,
70
- onKeyDown: function onKeyDown(e) {
71
- if (e.key === 'Enter') {
72
- setSelectedFolder(folder);
73
- setFocusedFolder(folder);
74
- return;
75
- }
76
- arrowNavigation(e, id, visibleFolders, setFocusedFolder, onOpenFolder, onCloseFolder);
77
- },
78
- "aria-current": selected ? 'page' : undefined,
79
- tabIndex: selected || focused ? 0 : -1,
80
- selected: selected,
81
- onFocus: function onFocus() {
82
- return setFocusedFolder(folder);
83
- },
84
- onClick: handleClick,
85
- to: loading ? '' : "/minndla/".concat(id),
86
- children: [_jsx(IconWrapper, {
87
- children: icon
88
- }), name]
89
- });
90
- };
91
- export default NavigationLink;
@@ -1,14 +0,0 @@
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 { CommonFolderItemsProps, FolderType } from './types';
9
- interface Props extends CommonFolderItemsProps {
10
- isOpen: boolean;
11
- folder: FolderType;
12
- }
13
- declare const NavigationLink: ({ loading, folder, selectedFolder, focusedFolder, setSelectedFolder, setFocusedFolder, visibleFolders, onOpenFolder, onCloseFolder, }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
14
- export default NavigationLink;
@@ -1,93 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports["default"] = void 0;
8
- var _base = _interopRequireDefault(require("@emotion/styled/base"));
9
- var _core = require("@ndla/core");
10
- var _react = _interopRequireWildcard(require("react"));
11
- var _safelink = _interopRequireDefault(require("@ndla/safelink"));
12
- var _arrowNavigation = require("./arrowNavigation");
13
- var _jsxRuntime = require("@emotion/react/jsx-runtime");
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
17
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
18
- var StyledSafeLink = /*#__PURE__*/(0, _base["default"])(_safelink["default"], {
19
- target: "et3arba1",
20
- label: "StyledSafeLink"
21
- })("display:grid;grid-template-columns:", _core.spacing.medium, " 1fr;align-items:center;padding:", _core.spacing.xxsmall, ";margin:", _core.spacing.xsmall, " 0;gap:", _core.spacing.xxsmall, ";box-shadow:none;color:", function (_ref) {
22
- var selected = _ref.selected;
23
- return selected ? _core.colors.brand.primary : _core.colors.text.primary;
24
- }, ";font-weight:", function (_ref2) {
25
- var selected = _ref2.selected;
26
- return selected ? _core.fonts.weight.semibold : _core.fonts.weight.normal;
27
- }, ";", _core.fonts.sizes('16px'), ";:hover,:focus{color:", _core.colors.brand.primary, ";}svg{height:26px;width:26px;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQm9EIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */"));
28
- var IconWrapper = /*#__PURE__*/(0, _base["default"])("span", {
29
- target: "et3arba0",
30
- label: "IconWrapper"
31
- })(process.env.NODE_ENV === "production" ? {
32
- name: "1wnowod",
33
- styles: "display:flex;align-items:center;justify-content:center"
34
- } : {
35
- name: "1wnowod",
36
- styles: "display:flex;align-items:center;justify-content:center",
37
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQytCIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */",
38
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
39
- });
40
- var NavigationLink = function NavigationLink(_ref3) {
41
- var loading = _ref3.loading,
42
- folder = _ref3.folder,
43
- selectedFolder = _ref3.selectedFolder,
44
- focusedFolder = _ref3.focusedFolder,
45
- setSelectedFolder = _ref3.setSelectedFolder,
46
- setFocusedFolder = _ref3.setFocusedFolder,
47
- visibleFolders = _ref3.visibleFolders,
48
- onOpenFolder = _ref3.onOpenFolder,
49
- onCloseFolder = _ref3.onCloseFolder;
50
- var id = folder.id,
51
- icon = folder.icon,
52
- name = folder.name;
53
- var selected = selectedFolder && selectedFolder.id === id;
54
- var ref = (0, _react.useRef)(null);
55
- var focused = (focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id;
56
- var handleClick = function handleClick() {
57
- if (!selected) {
58
- setSelectedFolder(folder);
59
- setFocusedFolder(folder);
60
- }
61
- };
62
- (0, _react.useEffect)(function () {
63
- if ((focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id) {
64
- var _ref$current;
65
- (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
66
- }
67
- }, [focusedFolder, ref, id]);
68
- return (0, _jsxRuntime.jsxs)(StyledSafeLink, {
69
- role: "treeitem",
70
- ref: ref,
71
- onKeyDown: function onKeyDown(e) {
72
- if (e.key === 'Enter') {
73
- setSelectedFolder(folder);
74
- setFocusedFolder(folder);
75
- return;
76
- }
77
- (0, _arrowNavigation.arrowNavigation)(e, id, visibleFolders, setFocusedFolder, onOpenFolder, onCloseFolder);
78
- },
79
- "aria-current": selected ? 'page' : undefined,
80
- tabIndex: selected || focused ? 0 : -1,
81
- selected: selected,
82
- onFocus: function onFocus() {
83
- return setFocusedFolder(folder);
84
- },
85
- onClick: handleClick,
86
- to: loading ? '' : "/minndla/".concat(id),
87
- children: [(0, _jsxRuntime.jsx)(IconWrapper, {
88
- children: icon
89
- }), name]
90
- });
91
- };
92
- var _default = NavigationLink;
93
- exports["default"] = _default;
@@ -1,107 +0,0 @@
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
-
9
- import styled from '@emotion/styled';
10
- import { colors, fonts, spacing } from '@ndla/core';
11
- import React, { KeyboardEvent, useEffect, useRef } from 'react';
12
- import SafeLink from '@ndla/safelink';
13
- import { arrowNavigation } from './arrowNavigation';
14
- import { CommonFolderItemsProps, FolderType } from './types';
15
-
16
- interface StyledProps {
17
- selected?: boolean;
18
- }
19
-
20
- const StyledSafeLink = styled(SafeLink)<StyledProps>`
21
- display: grid;
22
- grid-template-columns: ${spacing.medium} 1fr;
23
- align-items: center;
24
- padding: ${spacing.xxsmall};
25
- margin: ${spacing.xsmall} 0;
26
- gap: ${spacing.xxsmall};
27
- box-shadow: none;
28
-
29
- color: ${({ selected }) => (selected ? colors.brand.primary : colors.text.primary)};
30
- font-weight: ${({ selected }) => (selected ? fonts.weight.semibold : fonts.weight.normal)};
31
- ${fonts.sizes('16px')};
32
-
33
- :hover,
34
- :focus {
35
- color: ${colors.brand.primary};
36
- }
37
- svg {
38
- height: 26px;
39
- width: 26px;
40
- }
41
- `;
42
-
43
- const IconWrapper = styled.span`
44
- display: flex;
45
- align-items: center;
46
- justify-content: center;
47
- `;
48
-
49
- interface Props extends CommonFolderItemsProps {
50
- isOpen: boolean;
51
- folder: FolderType;
52
- }
53
-
54
- const NavigationLink = ({
55
- loading,
56
- folder,
57
- selectedFolder,
58
- focusedFolder,
59
- setSelectedFolder,
60
- setFocusedFolder,
61
- visibleFolders,
62
- onOpenFolder,
63
- onCloseFolder,
64
- }: Props) => {
65
- const { id, icon, name } = folder;
66
- const selected = selectedFolder && selectedFolder.id === id;
67
- const ref = useRef<HTMLButtonElement & HTMLAnchorElement>(null);
68
- const focused = focusedFolder?.id === id;
69
-
70
- const handleClick = () => {
71
- if (!selected) {
72
- setSelectedFolder(folder);
73
- setFocusedFolder(folder);
74
- }
75
- };
76
-
77
- useEffect(() => {
78
- if (focusedFolder?.id === id) {
79
- ref.current?.focus();
80
- }
81
- }, [focusedFolder, ref, id]);
82
-
83
- return (
84
- <StyledSafeLink
85
- role="treeitem"
86
- ref={ref}
87
- onKeyDown={(e: KeyboardEvent<HTMLElement>) => {
88
- if (e.key === 'Enter') {
89
- setSelectedFolder(folder);
90
- setFocusedFolder(folder);
91
- return;
92
- }
93
- arrowNavigation(e, id, visibleFolders, setFocusedFolder, onOpenFolder, onCloseFolder);
94
- }}
95
- aria-current={selected ? 'page' : undefined}
96
- tabIndex={selected || focused ? 0 : -1}
97
- selected={selected}
98
- onFocus={() => setFocusedFolder(folder)}
99
- onClick={handleClick}
100
- to={loading ? '' : `/minndla/${id}`}>
101
- <IconWrapper>{icon}</IconWrapper>
102
- {name}
103
- </StyledSafeLink>
104
- );
105
- };
106
-
107
- export default NavigationLink;