@ndla/ui 26.0.0 → 27.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 (74) hide show
  1. package/es/Breadcrumb/Breadcrumb.js +3 -4
  2. package/es/MyNdla/Resource/Folder.js +32 -14
  3. package/es/Resource/BlockResource.js +43 -61
  4. package/es/Resource/ListResource.js +44 -23
  5. package/es/Resource/resourceComponents.js +64 -38
  6. package/es/TreeStructure/ComboboxButton.js +162 -0
  7. package/es/TreeStructure/FolderItem.js +98 -78
  8. package/es/TreeStructure/FolderItems.js +25 -14
  9. package/es/TreeStructure/FolderNameInput.js +40 -33
  10. package/es/TreeStructure/NavigationLink.js +18 -10
  11. package/es/TreeStructure/TreeStructure.js +92 -165
  12. package/es/TreeStructure/arrowNavigation.js +3 -3
  13. package/es/TreeStructure/helperFunctions.js +3 -0
  14. package/es/locale/messages-en.js +8 -2
  15. package/es/locale/messages-nb.js +8 -2
  16. package/es/locale/messages-nn.js +8 -2
  17. package/es/locale/messages-se.js +8 -2
  18. package/es/locale/messages-sma.js +8 -2
  19. package/lib/Breadcrumb/Breadcrumb.js +3 -5
  20. package/lib/MyNdla/Resource/Folder.d.ts +2 -1
  21. package/lib/MyNdla/Resource/Folder.js +37 -14
  22. package/lib/Resource/BlockResource.d.ts +2 -1
  23. package/lib/Resource/BlockResource.js +48 -61
  24. package/lib/Resource/ListResource.d.ts +2 -1
  25. package/lib/Resource/ListResource.js +49 -23
  26. package/lib/Resource/resourceComponents.d.ts +6 -1
  27. package/lib/Resource/resourceComponents.js +64 -37
  28. package/lib/TreeStructure/ComboboxButton.d.ts +28 -0
  29. package/lib/TreeStructure/ComboboxButton.js +176 -0
  30. package/lib/TreeStructure/FolderItem.d.ts +1 -1
  31. package/lib/TreeStructure/FolderItem.js +99 -77
  32. package/lib/TreeStructure/FolderItems.d.ts +4 -2
  33. package/lib/TreeStructure/FolderItems.js +26 -14
  34. package/lib/TreeStructure/FolderNameInput.d.ts +3 -1
  35. package/lib/TreeStructure/FolderNameInput.js +41 -32
  36. package/lib/TreeStructure/NavigationLink.d.ts +1 -1
  37. package/lib/TreeStructure/NavigationLink.js +18 -10
  38. package/lib/TreeStructure/TreeStructure.d.ts +2 -2
  39. package/lib/TreeStructure/TreeStructure.js +92 -165
  40. package/lib/TreeStructure/arrowNavigation.d.ts +2 -1
  41. package/lib/TreeStructure/arrowNavigation.js +3 -3
  42. package/lib/TreeStructure/helperFunctions.d.ts +2 -1
  43. package/lib/TreeStructure/helperFunctions.js +8 -2
  44. package/lib/TreeStructure/types.d.ts +6 -7
  45. package/lib/locale/messages-en.d.ts +6 -0
  46. package/lib/locale/messages-en.js +8 -2
  47. package/lib/locale/messages-nb.d.ts +6 -0
  48. package/lib/locale/messages-nb.js +8 -2
  49. package/lib/locale/messages-nn.d.ts +6 -0
  50. package/lib/locale/messages-nn.js +8 -2
  51. package/lib/locale/messages-se.d.ts +6 -0
  52. package/lib/locale/messages-se.js +8 -2
  53. package/lib/locale/messages-sma.d.ts +6 -0
  54. package/lib/locale/messages-sma.js +8 -2
  55. package/package.json +11 -11
  56. package/src/Breadcrumb/Breadcrumb.tsx +1 -2
  57. package/src/MyNdla/Resource/Folder.tsx +21 -5
  58. package/src/Resource/BlockResource.tsx +43 -33
  59. package/src/Resource/ListResource.tsx +37 -29
  60. package/src/Resource/resourceComponents.tsx +60 -26
  61. package/src/TreeStructure/ComboboxButton.tsx +189 -0
  62. package/src/TreeStructure/FolderItem.tsx +89 -70
  63. package/src/TreeStructure/FolderItems.tsx +36 -16
  64. package/src/TreeStructure/FolderNameInput.tsx +43 -18
  65. package/src/TreeStructure/NavigationLink.tsx +17 -10
  66. package/src/TreeStructure/TreeStructure.tsx +63 -139
  67. package/src/TreeStructure/arrowNavigation.ts +7 -6
  68. package/src/TreeStructure/helperFunctions.ts +5 -1
  69. package/src/TreeStructure/types.ts +6 -7
  70. package/src/locale/messages-en.ts +7 -0
  71. package/src/locale/messages-nb.ts +6 -0
  72. package/src/locale/messages-nn.ts +6 -0
  73. package/src/locale/messages-se.ts +7 -0
  74. package/src/locale/messages-sma.ts +7 -0
@@ -6,4 +6,5 @@
6
6
  *
7
7
  */
8
8
  import { KeyboardEvent } from 'react';
9
- export declare const arrowNavigation: (e: KeyboardEvent<HTMLElement>, id: string, visibleFolders: string[], setFocusedFolderId: (id: string) => void, onOpen: (id: string) => void, onClose: (id: string) => void) => void;
9
+ import { FolderType } from './types';
10
+ export declare const arrowNavigation: (e: KeyboardEvent<HTMLElement>, id: string, visibleFolders: FolderType[], setFocusedFolderId: (id: FolderType) => void, onOpen: (id: string) => void, onClose: (id: string) => void) => void;
@@ -13,8 +13,8 @@ exports.arrowNavigation = void 0;
13
13
  *
14
14
  */
15
15
  var navigateVertical = function navigateVertical(visibleFolders, folderId, setFocusedFolderId, direction) {
16
- var currentIndex = visibleFolders.findIndex(function (id) {
17
- return id === folderId;
16
+ var currentIndex = visibleFolders.findIndex(function (folder) {
17
+ return folder.id === folderId;
18
18
  });
19
19
  var target = visibleFolders[currentIndex + direction];
20
20
 
@@ -23,7 +23,7 @@ var navigateVertical = function navigateVertical(visibleFolders, folderId, setFo
23
23
  }
24
24
  };
25
25
 
26
- var arrowKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];
26
+ var arrowKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Enter'];
27
27
 
28
28
  var arrowNavigation = function arrowNavigation(e, id, visibleFolders, setFocusedFolderId, onOpen, onClose) {
29
29
  if (!arrowKeys.includes(e.key)) {
@@ -1,2 +1,3 @@
1
- import { FolderType } from './types';
1
+ import { FolderType, TreeStructureType } from './types';
2
2
  export declare const flattenFolders: (folders: FolderType[], openFolders?: string[] | undefined) => FolderType[];
3
+ export declare const treestructureId: (type: TreeStructureType, modifier: string) => string;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.flattenFolders = void 0;
6
+ exports.treestructureId = exports.flattenFolders = void 0;
7
7
 
8
8
  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; }
9
9
 
@@ -35,4 +35,10 @@ var flattenFolders = function flattenFolders(folders, openFolders) {
35
35
  }, []);
36
36
  };
37
37
 
38
- exports.flattenFolders = flattenFolders;
38
+ exports.flattenFolders = flattenFolders;
39
+
40
+ var treestructureId = function treestructureId(type, modifier) {
41
+ return "".concat(type, "-treestructure-").concat(modifier);
42
+ };
43
+
44
+ exports.treestructureId = treestructureId;
@@ -12,26 +12,25 @@ export interface FolderType extends IFolder {
12
12
  icon?: ReactNode;
13
13
  isNavigation?: boolean;
14
14
  }
15
- export declare type TreeStructureType = 'normal' | 'navigation' | 'picker';
15
+ export declare type TreeStructureType = 'navigation' | 'picker';
16
16
  export interface TreeStructureMenuProps extends Omit<MenuItemProps, 'onClick'> {
17
17
  onClick: (e: MouseEvent<HTMLDivElement> | undefined, folder: FolderType) => void;
18
18
  }
19
19
  export interface CommonTreeStructureProps {
20
20
  loading?: boolean;
21
21
  onSelectFolder?: (id: string) => void;
22
- openOnFolderClick?: boolean;
23
22
  targetResource?: IResource;
24
- framed?: boolean;
25
23
  type: TreeStructureType;
26
24
  }
27
25
  export interface CommonFolderItemsProps extends CommonTreeStructureProps {
28
- focusedFolderId?: string;
26
+ focusedFolder?: FolderType;
29
27
  level: number;
30
28
  maxLevel: number;
31
29
  selectedFolder?: FolderType;
32
30
  onCloseFolder: (id: string) => void;
33
31
  onOpenFolder: (id: string) => void;
34
- setFocusedId: (id: string) => void;
35
- setSelectedFolder: (id: FolderType) => void;
36
- visibleFolders: string[];
32
+ setFocusedFolder: (folder: FolderType, focus?: boolean) => void;
33
+ setSelectedFolder: (folder: FolderType) => void;
34
+ visibleFolders: FolderType[];
35
+ closeTree: () => void;
37
36
  }
@@ -67,9 +67,13 @@ declare const messages: {
67
67
  edit: string;
68
68
  missingName: string;
69
69
  folderDeleted: string;
70
+ folderCreated: string;
70
71
  };
72
+ tagList: string;
71
73
  tags: string;
72
74
  tags_plural: string;
75
+ moreTags: string;
76
+ moreTags_plural: string;
73
77
  confirmDeleteFolder: string;
74
78
  confirmDeleteTag: string;
75
79
  myFolders: string;
@@ -176,6 +180,7 @@ declare const messages: {
176
180
  newFolder: {
177
181
  placeholder: string;
178
182
  defaultName: string;
183
+ folderName: string;
179
184
  };
180
185
  };
181
186
  tagSelector: {
@@ -990,6 +995,7 @@ declare const messages: {
990
995
  };
991
996
  cancel: string;
992
997
  close: string;
998
+ loading: string;
993
999
  title: string;
994
1000
  save: string;
995
1001
  image: {
@@ -39,7 +39,8 @@ var messages = _objectSpread(_objectSpread({
39
39
  maxFoldersAlreadyAdded: 'Maximum subfolders reached',
40
40
  newFolder: {
41
41
  placeholder: 'Add foldername',
42
- defaultName: 'New folder'
42
+ defaultName: 'New folder',
43
+ folderName: 'Folder name'
43
44
  }
44
45
  },
45
46
  tagSelector: {
@@ -820,6 +821,7 @@ var messages = _objectSpread(_objectSpread({
820
821
  },
821
822
  cancel: 'Cancel',
822
823
  close: 'Close',
824
+ loading: 'Loading',
823
825
  title: 'Title',
824
826
  save: 'Save',
825
827
  image: {
@@ -956,10 +958,14 @@ var messages = _objectSpread(_objectSpread({
956
958
  "delete": 'Delete folder',
957
959
  edit: 'Edit folder',
958
960
  missingName: 'Folder name required',
959
- folderDeleted: '"{{folderName}}" deleted'
961
+ folderDeleted: '"{{folderName}}" deleted',
962
+ folderCreated: '"{{folderName}} created'
960
963
  },
964
+ tagList: 'Tags',
961
965
  tags: '{{count}} tag',
962
966
  tags_plural: '{{count}} tags',
967
+ moreTags: 'Show one more tag',
968
+ moreTags_plural: 'Show {{count}} more tags',
963
969
  confirmDeleteFolder: 'Are you sure you want to delete this folder? Subfolders of this folder will also be deleted. This action cannot be undone.',
964
970
  confirmDeleteTag: 'Are you sure you want to delete this tag? This process cannot be undone.',
965
971
  myFolders: 'My folders',
@@ -67,9 +67,13 @@ declare const messages: {
67
67
  edit: string;
68
68
  missingName: string;
69
69
  folderDeleted: string;
70
+ folderCreated: string;
70
71
  };
72
+ tagList: string;
71
73
  tags: string;
72
74
  tags_plural: string;
75
+ moreTags: string;
76
+ moreTags_plural: string;
73
77
  confirmDeleteFolder: string;
74
78
  confirmDeleteTag: string;
75
79
  myFolders: string;
@@ -176,6 +180,7 @@ declare const messages: {
176
180
  newFolder: {
177
181
  placeholder: string;
178
182
  defaultName: string;
183
+ folderName: string;
179
184
  };
180
185
  };
181
186
  tagSelector: {
@@ -989,6 +994,7 @@ declare const messages: {
989
994
  close: string;
990
995
  };
991
996
  close: string;
997
+ loading: string;
992
998
  title: string;
993
999
  cancel: string;
994
1000
  save: string;
@@ -39,7 +39,8 @@ var messages = _objectSpread(_objectSpread({
39
39
  maxFoldersAlreadyAdded: 'Maks nivå av undermapper nådd',
40
40
  newFolder: {
41
41
  placeholder: 'Skriv navn på mappe',
42
- defaultName: 'Ny mappe'
42
+ defaultName: 'Ny mappe',
43
+ folderName: 'Mappenavn'
43
44
  }
44
45
  },
45
46
  tagSelector: {
@@ -819,6 +820,7 @@ var messages = _objectSpread(_objectSpread({
819
820
  close: 'Lukk meny'
820
821
  },
821
822
  close: 'Lukk',
823
+ loading: 'Laster',
822
824
  title: 'Tittel',
823
825
  cancel: 'Avbryt',
824
826
  save: 'Lagre',
@@ -956,10 +958,14 @@ var messages = _objectSpread(_objectSpread({
956
958
  "delete": 'Slett mappe',
957
959
  edit: 'Rediger mappe',
958
960
  missingName: 'Skriv navn på mappe',
959
- folderDeleted: '"{{folderName}}" er slettet'
961
+ folderDeleted: '"{{folderName}}" er slettet',
962
+ folderCreated: '"{{folderName}}" er opprettet'
960
963
  },
964
+ tagList: 'Emneknagger',
961
965
  tags: '{{count}} emneknagg',
962
966
  tags_plural: '{{count}} emneknagger',
967
+ moreTags: 'Vis en emneknagg til',
968
+ moreTags_plural: 'Vis {{count}} emneknagger til',
963
969
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappen? Dersom mappen har undermapper vil disse også slettes. Handlingen kan ikke endres.',
964
970
  confirmDeleteTag: 'Er du sikker på at du vil slette emneknagg? Denne handlingen kan ikke endres.',
965
971
  myFolders: 'Mine mapper',
@@ -67,9 +67,13 @@ declare const messages: {
67
67
  edit: string;
68
68
  missingName: string;
69
69
  folderDeleted: string;
70
+ folderCreated: string;
70
71
  };
72
+ tagList: string;
71
73
  tags: string;
72
74
  tags_plural: string;
75
+ moreTags: string;
76
+ moreTags_plural: string;
73
77
  confirmDeleteFolder: string;
74
78
  confirmDeleteTag: string;
75
79
  myFolders: string;
@@ -176,6 +180,7 @@ declare const messages: {
176
180
  newFolder: {
177
181
  placeholder: string;
178
182
  defaultName: string;
183
+ folderName: string;
179
184
  };
180
185
  };
181
186
  tagSelector: {
@@ -990,6 +995,7 @@ declare const messages: {
990
995
  };
991
996
  cancel: string;
992
997
  close: string;
998
+ loading: string;
993
999
  title: string;
994
1000
  save: string;
995
1001
  image: {
@@ -39,7 +39,8 @@ var messages = _objectSpread(_objectSpread({
39
39
  maxFoldersAlreadyAdded: 'Maks nivå av undermapper nådd',
40
40
  newFolder: {
41
41
  placeholder: 'Skriv namn på mappe',
42
- defaultName: 'Ny mappe'
42
+ defaultName: 'Ny mappe',
43
+ folderName: 'Mappenavn'
43
44
  }
44
45
  },
45
46
  tagSelector: {
@@ -820,6 +821,7 @@ var messages = _objectSpread(_objectSpread({
820
821
  },
821
822
  cancel: 'Avbryt',
822
823
  close: 'Lukk',
824
+ loading: 'Laster',
823
825
  title: 'Tittel',
824
826
  save: 'Lagre',
825
827
  image: {
@@ -956,10 +958,14 @@ var messages = _objectSpread(_objectSpread({
956
958
  "delete": 'Slett mappe',
957
959
  edit: 'Rediger mappe',
958
960
  missingName: 'Skriv namn på mappe',
959
- folderDeleted: '"{{folderName}}" er sletta'
961
+ folderDeleted: '"{{folderName}}" er sletta',
962
+ folderCreated: '"{{folderName}}" er oppretta'
960
963
  },
964
+ tagList: 'Emneknaggar',
961
965
  tags: '{{count}} emneknagg',
962
966
  tags_plural: '{{count}} emneknaggar',
967
+ moreTags: 'Vis ein emneknagg til',
968
+ moreTags_plural: 'Vis {{count}} emneknaggar til',
963
969
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappa? Dersom mappa har undermapper vil desse også slettast. Denne handlinga kan ikkje endrast.',
964
970
  confirmDeleteTag: 'Er du sikker på at du vil slette tag? Denne handlinga kan ikkje endrast.',
965
971
  myFolders: 'Mine mapper',
@@ -67,9 +67,13 @@ declare const messages: {
67
67
  edit: string;
68
68
  missingName: string;
69
69
  folderDeleted: string;
70
+ folderCreated: string;
70
71
  };
72
+ tagList: string;
71
73
  tags: string;
72
74
  tags_plural: string;
75
+ moreTags: string;
76
+ moreTags_plural: string;
73
77
  confirmDeleteFolder: string;
74
78
  confirmDeleteTag: string;
75
79
  myFolders: string;
@@ -176,6 +180,7 @@ declare const messages: {
176
180
  newFolder: {
177
181
  placeholder: string;
178
182
  defaultName: string;
183
+ folderName: string;
179
184
  };
180
185
  };
181
186
  tagSelector: {
@@ -989,6 +994,7 @@ declare const messages: {
989
994
  close: string;
990
995
  };
991
996
  close: string;
997
+ loading: string;
992
998
  title: string;
993
999
  cancel: string;
994
1000
  save: string;
@@ -39,7 +39,8 @@ var messages = _objectSpread(_objectSpread({
39
39
  maxFoldersAlreadyAdded: 'Vuollemáhpaid badjerádji lea olahuvvon',
40
40
  newFolder: {
41
41
  placeholder: 'Čále nama máhppii',
42
- defaultName: 'Ođđa máhppa'
42
+ defaultName: 'Ođđa máhppa',
43
+ folderName: 'Mappenavn'
43
44
  }
44
45
  },
45
46
  tagSelector: {
@@ -819,6 +820,7 @@ var messages = _objectSpread(_objectSpread({
819
820
  close: 'Govčča fálu'
820
821
  },
821
822
  close: 'Govčča',
823
+ loading: 'Laster',
822
824
  title: 'Tihttel',
823
825
  cancel: 'Botkke',
824
826
  save: 'Vurke',
@@ -956,10 +958,14 @@ var messages = _objectSpread(_objectSpread({
956
958
  "delete": 'Sihko',
957
959
  edit: 'Redigere',
958
960
  missingName: 'Čále nama máhppii',
959
- folderDeleted: '"{{folderName}}" lea sihkkojuvvon'
961
+ folderDeleted: '"{{folderName}}" lea sihkkojuvvon',
962
+ folderCreated: '"{{folderName}}" er oppretta'
960
963
  },
964
+ tagList: 'Emneknagger',
961
965
  tags: '{{count}} fáddágilkor',
962
966
  tags_plural: '{{count}} fáddágilkorat',
967
+ moreTags: 'Vis ein emneknagg til',
968
+ moreTags_plural: 'Vis {{count}} emneknaggar til',
963
969
  confirmDeleteFolder: 'Leat go áibbas sihkar ahte dáhtut sihkkut máhpa? Dan ii sáhte gáhtat.',
964
970
  confirmDeleteTag: 'Leat go áibbas sihkar ahte dáhtut sihkkut fáddágilkora? Dan ii sáhte gáhtat.',
965
971
  myFolders: 'Mu máhpat',
@@ -67,9 +67,13 @@ declare const messages: {
67
67
  edit: string;
68
68
  missingName: string;
69
69
  folderDeleted: string;
70
+ folderCreated: string;
70
71
  };
72
+ tagList: string;
71
73
  tags: string;
72
74
  tags_plural: string;
75
+ moreTags: string;
76
+ moreTags_plural: string;
73
77
  confirmDeleteFolder: string;
74
78
  confirmDeleteTag: string;
75
79
  myFolders: string;
@@ -176,6 +180,7 @@ declare const messages: {
176
180
  newFolder: {
177
181
  placeholder: string;
178
182
  defaultName: string;
183
+ folderName: string;
179
184
  };
180
185
  };
181
186
  tagSelector: {
@@ -989,6 +994,7 @@ declare const messages: {
989
994
  close: string;
990
995
  };
991
996
  close: string;
997
+ loading: string;
992
998
  title: string;
993
999
  cancel: string;
994
1000
  save: string;
@@ -39,7 +39,8 @@ var messages = _objectSpread(_objectSpread({
39
39
  maxFoldersAlreadyAdded: 'Maks nivå av undermapper nådd',
40
40
  newFolder: {
41
41
  placeholder: 'Skriv navn på mappe',
42
- defaultName: 'Ny mappe'
42
+ defaultName: 'Ny mappe',
43
+ folderName: 'Mappenavn'
43
44
  }
44
45
  },
45
46
  tagSelector: {
@@ -819,6 +820,7 @@ var messages = _objectSpread(_objectSpread({
819
820
  close: 'Lukk meny'
820
821
  },
821
822
  close: 'Lukk',
823
+ loading: 'Laster',
822
824
  title: 'Tittel',
823
825
  cancel: 'Avbryt',
824
826
  save: 'Lagre',
@@ -956,10 +958,14 @@ var messages = _objectSpread(_objectSpread({
956
958
  "delete": 'Slett mappe',
957
959
  edit: 'Rediger mappe',
958
960
  missingName: 'Skriv navn på mappe',
959
- folderDeleted: '"{{folderName}}" er slettet'
961
+ folderDeleted: '"{{folderName}}" er slettet',
962
+ folderCreated: '"{{folderName}}" er oppretta'
960
963
  },
964
+ tagList: 'Emneknagg',
961
965
  tags: '{{count}} emneknagg',
962
966
  tags_plural: '{{count}} emneknagger',
967
+ moreTags: 'Vis ein emneknagg til',
968
+ moreTags_plural: 'Vis {{count}} emneknaggar til',
963
969
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappa? Dersom mappa har undermappar vil disse også slettes. Denne handlinga kan ikkje endrast.',
964
970
  confirmDeleteTag: 'Er du sikker på at du vil slette emneknagg? Denne handlingen kan ikke endres.',
965
971
  myFolders: 'Mine mapper',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "26.0.0",
3
+ "version": "27.0.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -32,18 +32,18 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "@ndla/article-scripts": "^3.0.2",
35
- "@ndla/button": "^3.5.0",
36
- "@ndla/carousel": "^1.2.22",
35
+ "@ndla/button": "^3.5.1",
36
+ "@ndla/carousel": "^1.2.23",
37
37
  "@ndla/core": "^2.3.5",
38
- "@ndla/forms": "^3.2.1",
38
+ "@ndla/forms": "^3.3.1",
39
39
  "@ndla/hooks": "^1.1.6",
40
- "@ndla/icons": "^1.12.1",
41
- "@ndla/licenses": "^5.0.16",
42
- "@ndla/modal": "^1.3.6",
43
- "@ndla/notion": "^3.1.40",
44
- "@ndla/safelink": "^2.2.14",
40
+ "@ndla/icons": "^1.13.0",
41
+ "@ndla/licenses": "^5.0.17",
42
+ "@ndla/modal": "^1.3.7",
43
+ "@ndla/notion": "^3.1.41",
44
+ "@ndla/safelink": "^2.2.15",
45
45
  "@ndla/switch": "^0.1.13",
46
- "@ndla/tabs": "^1.1.21",
46
+ "@ndla/tabs": "^1.1.22",
47
47
  "@ndla/tooltip": "^2.2.1",
48
48
  "@ndla/types-learningpath-api": "^0.0.13",
49
49
  "@ndla/util": "^3.1.0",
@@ -85,5 +85,5 @@
85
85
  "publishConfig": {
86
86
  "access": "public"
87
87
  },
88
- "gitHead": "e2029bce0a42c485f247a60ee895b2320fddc6ba"
88
+ "gitHead": "62733541c9b13e7233c0752fd302f35cdd50b453"
89
89
  }
@@ -8,7 +8,6 @@
8
8
 
9
9
  import React, { ReactNode, useRef } from 'react';
10
10
  import { useComponentSize, useIsomorphicLayoutEffect } from '@ndla/hooks';
11
- import { uuid } from '@ndla/util';
12
11
  import styled from '@emotion/styled';
13
12
  import { useTranslation } from 'react-i18next';
14
13
  import BreadcrumbItem, { IndexedBreadcrumbItem, SimpleBreadcrumbItem } from './BreadcrumbItem';
@@ -83,7 +82,7 @@ const Breadcrumb = ({
83
82
  ? breadcrumbItemRefs.delete(item.to)
84
83
  : breadcrumbItemRefs.set(item.to, element)
85
84
  }
86
- key={uuid()}
85
+ key={typeof item.to === 'string' ? item.to : item.to.pathname}
87
86
  totalCount={items.length}
88
87
  item={{ ...item, index }}
89
88
  />
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import styled from '@emotion/styled';
10
- import React from 'react';
10
+ import React, { useRef } from 'react';
11
11
  import { FolderOutlined } from '@ndla/icons/contentType';
12
12
  import { FileDocumentOutline } from '@ndla/icons/common';
13
13
  import { fonts, spacing, colors, mq, breakpoints } from '@ndla/core';
@@ -40,6 +40,12 @@ const FolderIconWrapper = styled.div<FolderIconWrapperProps>`
40
40
  `};
41
41
  `;
42
42
 
43
+ const FolderTitleLink = styled(SafeLink)`
44
+ box-shadow: none;
45
+ color: ${colors.text.primary};
46
+ flex: 1;
47
+ `;
48
+
43
49
  const FolderTitle = styled.h2`
44
50
  ${fonts.sizes(18)};
45
51
  font-weight: ${fonts.weight.normal};
@@ -55,11 +61,12 @@ const FolderTitle = styled.h2`
55
61
  -webkit-box-orient: vertical;
56
62
  `;
57
63
 
58
- const FolderWrapper = styled(SafeLink)`
64
+ const FolderWrapper = styled.div`
59
65
  display: flex;
60
66
  align-items: center;
61
67
  padding: ${spacing.small};
62
68
  border: 1px solid ${colors.brand.neutral7};
69
+ cursor: pointer;
63
70
  border-radius: 2px;
64
71
  box-shadow: none;
65
72
  text-decoration: none;
@@ -78,6 +85,7 @@ const FolderWrapper = styled(SafeLink)`
78
85
  `;
79
86
 
80
87
  interface Props {
88
+ id: string;
81
89
  title: string;
82
90
  subFolders?: number;
83
91
  subResources?: number;
@@ -131,14 +139,22 @@ const IconCount = ({ type, count, layoutType }: IconCountProps) => {
131
139
 
132
140
  type LayoutType = 'list' | 'block';
133
141
 
134
- const Folder = ({ link, title, subFolders, subResources, type = 'list', menuItems }: Props) => {
142
+ const Folder = ({ id, link, title, subFolders, subResources, type = 'list', menuItems }: Props) => {
135
143
  const { t } = useTranslation();
144
+ const linkRef = useRef<HTMLAnchorElement | null>(null);
145
+
146
+ const onClick = () => {
147
+ linkRef?.current?.click();
148
+ };
149
+
136
150
  return (
137
- <FolderWrapper to={link}>
151
+ <FolderWrapper onClick={onClick} id={id}>
138
152
  <FolderIconWrapper type={type}>
139
153
  <FolderOutlined aria-label={t('myNdla.folder.folder')} />
140
154
  </FolderIconWrapper>
141
- <FolderTitle>{title}</FolderTitle>
155
+ <FolderTitleLink to={link} ref={linkRef}>
156
+ <FolderTitle>{title}</FolderTitle>
157
+ </FolderTitleLink>
142
158
  <IconCount layoutType={type} type={'folder'} count={subFolders} />
143
159
  <IconCount layoutType={type} type={'resource'} count={subResources} />
144
160
  {menuItems && menuItems.length > 0 && <MenuButton alignRight size="small" menuItems={menuItems} />}