@ndla/ui 16.1.0 → 17.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 (97) hide show
  1. package/es/Article/Article.js +3 -3
  2. package/es/Breadcrumblist/Breadcrumblist.js +7 -7
  3. package/es/Frontpage/FrontpageAllSubjects.js +8 -8
  4. package/es/Masthead/Masthead.js +2 -3
  5. package/es/Messages/MessageBanner.js +75 -0
  6. package/es/Messages/MessageBox.js +123 -0
  7. package/es/{MessageBox → Messages}/MessageBoxTag.js +1 -1
  8. package/es/{MessageBox → Messages}/index.js +3 -3
  9. package/es/NDLAFilm/MovieGrid.js +3 -3
  10. package/es/Notion/ConceptNotion.js +1 -1
  11. package/es/Notion/index.js +2 -1
  12. package/es/Programme/Programme.js +6 -6
  13. package/es/Programme/ProgrammeSubjects.js +2 -2
  14. package/es/Resource/resourceComponents.js +17 -9
  15. package/es/Topic/Topic.js +22 -24
  16. package/es/TopicMenu/TopicMenu.js +2 -4
  17. package/es/TreeStructure/FolderItem.js +39 -28
  18. package/es/TreeStructure/FolderItems.js +8 -5
  19. package/es/TreeStructure/TreeStructure.js +10 -11
  20. package/es/TreeStructure/TreeStructureWrapper.js +2 -2
  21. package/es/index.js +2 -2
  22. package/es/locale/messages-en.js +1 -1
  23. package/es/locale/messages-nb.js +1 -1
  24. package/es/locale/messages-nn.js +1 -1
  25. package/es/locale/messages-se.js +1 -1
  26. package/es/locale/messages-sma.js +1 -1
  27. package/lib/Article/Article.js +3 -3
  28. package/lib/Breadcrumblist/Breadcrumblist.js +7 -7
  29. package/lib/Breadcrumblist/index.d.ts +1 -0
  30. package/lib/Frontpage/FrontpageAllSubjects.js +9 -9
  31. package/lib/Masthead/Masthead.js +2 -3
  32. package/lib/Messages/MessageBanner.d.ts +16 -0
  33. package/lib/Messages/MessageBanner.js +78 -0
  34. package/lib/{MessageBox → Messages}/MessageBox.d.ts +6 -14
  35. package/lib/Messages/MessageBox.js +128 -0
  36. package/lib/{MessageBox → Messages}/MessageBoxTag.d.ts +0 -0
  37. package/lib/{MessageBox → Messages}/MessageBoxTag.js +1 -1
  38. package/lib/{MessageBox → Messages}/index.d.ts +3 -3
  39. package/lib/Messages/index.js +31 -0
  40. package/lib/NDLAFilm/MovieGrid.js +9 -9
  41. package/lib/Notion/ConceptNotion.d.ts +1 -1
  42. package/lib/Notion/ConceptNotion.js +1 -1
  43. package/lib/Notion/index.d.ts +4 -1
  44. package/lib/Notion/index.js +11 -3
  45. package/lib/Programme/Programme.js +6 -6
  46. package/lib/Programme/ProgrammeSubjects.js +3 -3
  47. package/lib/Resource/resourceComponents.js +17 -9
  48. package/lib/Topic/Topic.js +22 -24
  49. package/lib/TopicMenu/TopicMenu.js +2 -4
  50. package/lib/TreeStructure/FolderItem.d.ts +3 -2
  51. package/lib/TreeStructure/FolderItem.js +38 -28
  52. package/lib/TreeStructure/FolderItems.d.ts +1 -1
  53. package/lib/TreeStructure/FolderItems.js +8 -5
  54. package/lib/TreeStructure/TreeStructure.d.ts +1 -1
  55. package/lib/TreeStructure/TreeStructure.js +10 -11
  56. package/lib/TreeStructure/TreeStructure.types.d.ts +6 -3
  57. package/lib/TreeStructure/TreeStructureWrapper.js +2 -2
  58. package/lib/index.d.ts +7 -3
  59. package/lib/index.js +13 -6
  60. package/lib/locale/messages-en.js +1 -1
  61. package/lib/locale/messages-nb.js +1 -1
  62. package/lib/locale/messages-nn.js +1 -1
  63. package/lib/locale/messages-se.js +1 -1
  64. package/lib/locale/messages-sma.js +1 -1
  65. package/package.json +13 -13
  66. package/src/Article/Article.tsx +1 -1
  67. package/src/Breadcrumblist/Breadcrumblist.tsx +1 -1
  68. package/src/Breadcrumblist/{index.tsx → index.ts} +1 -0
  69. package/src/Frontpage/FrontpageAllSubjects.tsx +1 -1
  70. package/src/Masthead/Masthead.tsx +3 -6
  71. package/src/Messages/MessageBanner.tsx +66 -0
  72. package/src/Messages/MessageBox.tsx +156 -0
  73. package/src/{MessageBox → Messages}/MessageBoxTag.tsx +0 -0
  74. package/src/{MessageBox → Messages}/index.ts +3 -3
  75. package/src/NDLAFilm/MovieGrid.tsx +1 -1
  76. package/src/Notion/ConceptNotion.tsx +2 -1
  77. package/src/Notion/index.ts +4 -1
  78. package/src/Programme/Programme.tsx +1 -1
  79. package/src/Programme/ProgrammeSubjects.tsx +1 -1
  80. package/src/Resource/resourceComponents.tsx +1 -3
  81. package/src/Topic/Topic.tsx +2 -2
  82. package/src/TopicMenu/TopicMenu.jsx +2 -2
  83. package/src/TreeStructure/FolderItem.tsx +40 -19
  84. package/src/TreeStructure/FolderItems.tsx +3 -0
  85. package/src/TreeStructure/TreeStructure.tsx +7 -11
  86. package/src/TreeStructure/TreeStructure.types.ts +7 -3
  87. package/src/TreeStructure/TreeStructureWrapper.tsx +1 -1
  88. package/src/index.ts +16 -3
  89. package/src/locale/messages-en.ts +1 -1
  90. package/src/locale/messages-nb.ts +1 -1
  91. package/src/locale/messages-nn.ts +1 -1
  92. package/src/locale/messages-se.ts +1 -1
  93. package/src/locale/messages-sma.ts +1 -1
  94. package/es/MessageBox/MessageBox.js +0 -220
  95. package/lib/MessageBox/MessageBox.js +0 -234
  96. package/lib/MessageBox/index.js +0 -35
  97. package/src/MessageBox/MessageBox.tsx +0 -201
package/lib/index.d.ts CHANGED
@@ -25,9 +25,12 @@ export { default as InfoWidget } from './InfoWidget';
25
25
  export { FrontpageInfo, FrontpageFilm, FrontpageToolbox, FrontpageMultidisciplinarySubject, FrontpageHeader, FrontpageSubjectIllustration, FrontpageSearch, FrontpageProgramMenu, } from './Frontpage';
26
26
  export { default as FactBox } from './FactBox';
27
27
  export { default as Image, ImageLink, makeSrcQueryString } from './Image';
28
+ export type { ImageCrop, ImageFocalPoint } from './Image';
29
+ export type { HeroContentType } from './Hero';
28
30
  export { SubjectMaterialHero, TasksAndActivitiesHero, AssessmentResourcesHero, SubjectHero, ExternalLearningResourcesHero, SourceMaterialHero, Hero, NdlaFilmHero, } from './Hero';
29
31
  export { Footer, EditorName, FooterText, FooterAuth } from './Footer';
30
- export { Figure, FigureCaption, FigureLicenseDialog, FigureExpandButton, FigureOpenDialogButton } from './Figure';
32
+ export { Figure, FigureCaption, FigureLicenseDialog, FigureExpandButton, FigureOpenDialogButton, FigureBylineExpandButton, } from './Figure';
33
+ export type { FigureType } from './Figure';
31
34
  export { LanguageSelector } from './LanguageSelector';
32
35
  export { LearningPathWrapper, LearningPathContent, LearningPathMenu, LearningPathSticky, LearningPathInformation, LearningPathStickySibling, LearningPathStickyPlaceholder, LearningPathLastStepNavigation, LearningPathMobileStepInfo, LearningPathMobileHeader, } from './LearningPaths';
33
36
  export { Translation, TranslationLine, TranslationBox } from './Translation';
@@ -42,7 +45,7 @@ export { default as AuthModal } from './User';
42
45
  export type { FeideGoGroup, FeideGroup, FeideOrg, FeideUserApiType, FeideMembershipType, FeideUser } from './User';
43
46
  export { default as CreatedBy } from './CreatedBy';
44
47
  export { default as Breadcrumblist } from './Breadcrumblist';
45
- export { MessageBox, MessageBoxTag, MessageBoxType } from './MessageBox';
48
+ export { MessageBox, MessageBoxTag, MessageBanner } from './Messages';
46
49
  export { ResourceBox } from './ResourceBox';
47
50
  export { default as AudioPlayer, initAudioPlayers } from './AudioPlayer';
48
51
  export { NavigationHeading, NavigationBox, NavigationTopicAbout } from './Navigation';
@@ -62,7 +65,7 @@ export { default as Aside } from './Aside';
62
65
  export { default as AuthorInfo } from './AuthorInfo';
63
66
  export { default as Breadcrumb, HeaderBreadcrumb, HomeBreadcrumb, ActionBreadcrumb } from './Breadcrumb';
64
67
  export type { SimpleBreadcrumbItem, IndexedBreadcrumbItem } from './Breadcrumb';
65
- export type { BreadcrumbItemProps } from './Breadcrumblist/Breadcrumblist';
68
+ export type { BreadcrumbItemProps } from './Breadcrumblist';
66
69
  export { i18nInstance, formatNestedMessages, formatMessage } from './i18n';
67
70
  export { default as ResourceGroup } from './ResourceGroup';
68
71
  export { default as LayoutItem, OneColumn, PageContainer, Content } from './Layout';
@@ -75,6 +78,7 @@ export { default as ContentCard } from './ContentCard';
75
78
  export { default as CopyParagraphButton } from './CopyParagraphButton';
76
79
  export { default as ContentPlaceholder } from './ContentPlaceholder';
77
80
  export { Notion, ConceptNotion } from './Notion';
81
+ export type { NotionVisualElementType, ConceptNotionType } from './Notion';
78
82
  export { BannerCard } from './BannerCard';
79
83
  export { VerticalNavigation, Folder, FolderInput } from './MyNdla';
80
84
  export { ListResource, BlockResource } from './Resource';
package/lib/index.js CHANGED
@@ -68,6 +68,7 @@ var _exportNames = {
68
68
  FigureLicenseDialog: true,
69
69
  FigureExpandButton: true,
70
70
  FigureOpenDialogButton: true,
71
+ FigureBylineExpandButton: true,
71
72
  LanguageSelector: true,
72
73
  LearningPathWrapper: true,
73
74
  LearningPathContent: true,
@@ -94,7 +95,7 @@ var _exportNames = {
94
95
  Breadcrumblist: true,
95
96
  MessageBox: true,
96
97
  MessageBoxTag: true,
97
- MessageBoxType: true,
98
+ MessageBanner: true,
98
99
  ResourceBox: true,
99
100
  AudioPlayer: true,
100
101
  initAudioPlayers: true,
@@ -560,6 +561,12 @@ Object.defineProperty(exports, "FigureOpenDialogButton", {
560
561
  return _Figure.FigureOpenDialogButton;
561
562
  }
562
563
  });
564
+ Object.defineProperty(exports, "FigureBylineExpandButton", {
565
+ enumerable: true,
566
+ get: function get() {
567
+ return _Figure.FigureBylineExpandButton;
568
+ }
569
+ });
563
570
  Object.defineProperty(exports, "LanguageSelector", {
564
571
  enumerable: true,
565
572
  get: function get() {
@@ -707,19 +714,19 @@ Object.defineProperty(exports, "Breadcrumblist", {
707
714
  Object.defineProperty(exports, "MessageBox", {
708
715
  enumerable: true,
709
716
  get: function get() {
710
- return _MessageBox.MessageBox;
717
+ return _Messages.MessageBox;
711
718
  }
712
719
  });
713
720
  Object.defineProperty(exports, "MessageBoxTag", {
714
721
  enumerable: true,
715
722
  get: function get() {
716
- return _MessageBox.MessageBoxTag;
723
+ return _Messages.MessageBoxTag;
717
724
  }
718
725
  });
719
- Object.defineProperty(exports, "MessageBoxType", {
726
+ Object.defineProperty(exports, "MessageBanner", {
720
727
  enumerable: true,
721
728
  get: function get() {
722
- return _MessageBox.MessageBoxType;
729
+ return _Messages.MessageBanner;
723
730
  }
724
731
  });
725
732
  Object.defineProperty(exports, "ResourceBox", {
@@ -1354,7 +1361,7 @@ var _CreatedBy = _interopRequireDefault(require("./CreatedBy"));
1354
1361
 
1355
1362
  var _Breadcrumblist = _interopRequireDefault(require("./Breadcrumblist"));
1356
1363
 
1357
- var _MessageBox = require("./MessageBox");
1364
+ var _Messages = require("./Messages");
1358
1365
 
1359
1366
  var _ResourceBox = require("./ResourceBox");
1360
1367
 
@@ -318,7 +318,7 @@ var messages = _objectSpread(_objectSpread({
318
318
  feide: 'This resource is accessible only to teachers who are logged in with Feide.',
319
319
  resources: 'This is not a complete course produced by NDLA, but a collection of resources we hope you will find useful.',
320
320
  subjectOutdated: 'This course is not updated to the current curriculum.',
321
- subjectBeta: 'This course is in beta.',
321
+ subjectBeta: 'This course is in beta. New resources are being added continously.',
322
322
  newVersion: 'This learning resource is not updated to the current curriculum. You can find an updated version here: ',
323
323
  frontPageBeta: 'Revised subjects have been revised in accordance with the new curriculum that will be put into effect from August 2022. Beta versions of subjects are subjects we are still working on. We hope, however, that the learning resources available by now may come in useful already.',
324
324
  frontPageExpired: 'Expired subjects are not being taught any longer, but it may still be possible to take exams in these subjects.',
@@ -318,7 +318,7 @@ var messages = _objectSpread(_objectSpread({
318
318
  feide: 'Denne ressursen er bare tilgjengelig for lærere som er pålogget med Feide.',
319
319
  resources: 'Dette er ikke et komplett læremiddel produsert av NDLA, men ei ressurssamling som vi håper kan være nyttig for deg.',
320
320
  subjectOutdated: 'Dette faget følger en utgått læreplan.',
321
- subjectBeta: 'Dette faget er i betaversjon.',
321
+ subjectBeta: 'Dette faget er i betaversjon. Vi fyller på med ressurser fortløpende.',
322
322
  newVersion: 'Denne læringsressursen er ikke oppdatert etter gjeldende læreplan. Du finner en oppdatert versjon her: ',
323
323
  frontPageBeta: 'Kommende fag er tilpassa ny læreplan som gjelder fra høsten 2022. Betafag er fag under arbeid. Vi håper likevel at læringsressursene i betafaga kan være nyttige allerede nå.',
324
324
  frontPageExpired: 'Utgåtte fag undervises det ikke i lenger, men det kan fortsatt være mulig å ta eksamen i faga som privatist.',
@@ -318,7 +318,7 @@ var messages = _objectSpread(_objectSpread({
318
318
  feide: 'Denne ressursen er berre tilgjengeleg for lærarar som er pålogga med Feide.',
319
319
  resources: 'Dette er ikkje eit komplett læremiddel produsert av NDLA, men ei ressurssamling som vi håper kan vere nyttig for deg.',
320
320
  subjectOutdated: 'Dette faget følgjer ein utgått læreplan.',
321
- subjectBeta: 'Dette faget er i betaversjon.',
321
+ subjectBeta: 'Dette faget er i betaversjon. Vi fyller på med ressurser fortløpande.',
322
322
  newVersion: 'Denne læringsressursen er ikkje oppdatert etter gjeldande læreplan. Du finn ein oppdatert versjon her: ',
323
323
  frontPageBeta: 'Kommande fag er tilpassa ny læreplan som gjeld fra hausten 2022. Betafag er fag under arbeid. Vi håper likevel at læringsressursane i betafaga kan vere nyttige allereie no.',
324
324
  frontPageExpired: 'Utgåtte fag blir det ikkje undervist i lenger, men det kan framleis vere mogleg å ta eksamen i faget som privatist.',
@@ -318,7 +318,7 @@ var messages = _objectSpread(_objectSpread({
318
318
  feide: 'Denne ressursen er bare tilgjengelig for lærere som er pålogget med Feide.',
319
319
  resources: 'Dette er ikke et komplett læremiddel produsert av NDLA, men ei ressurssamling som vi håper kan være nyttig for deg.',
320
320
  subjectOutdated: 'Dette faget følger en utgått læreplan.',
321
- subjectBeta: 'Dette faget er i betaversjon.',
321
+ subjectBeta: 'Dette faget er i betaversjon. Vi fyller på med ressurser fortløpende.',
322
322
  newVersion: 'Denne læringsressursen er ikke oppdatert etter gjeldende læreplan. Du finner en oppdatert versjon her: ',
323
323
  frontPageBeta: 'Kommende fag er tilpassa ny læreplan som gjelder fra høsten 2022. Betafag er fag under arbeid. Vi håper likevel at læringsressursene i betafaga kan være nyttige allerede nå.',
324
324
  frontPageExpired: 'Utgåtte fag undervises det ikke i lenger, men det kan fortsatt være mulig å ta eksamen i faga som privatist.',
@@ -318,7 +318,7 @@ var messages = _objectSpread(_objectSpread({
318
318
  feide: 'Denne ressursen er bare tilgjengelig for lærere som er pålogget med Feide.',
319
319
  resources: 'Dette er ikke et komplett læremiddel produsert av NDLA, men ei ressurssamling som vi håper kan være nyttig for deg.',
320
320
  subjectOutdated: 'Dette faget følger en utgått læreplan.',
321
- subjectBeta: 'Dette faget er i betaversjon.',
321
+ subjectBeta: 'Dette faget er i betaversjon. Vi fyller på med ressurser fortløpende.',
322
322
  newVersion: 'Denne læringsressursen er ikke oppdatert etter gjeldende læreplan. Du finner en oppdatert versjon her: ',
323
323
  frontPageBeta: 'Kommende fag er tilpassa ny læreplan som gjelder fra høsten 2022. Betafag er fag under arbeid. Vi håper likevel at læringsressursene i betafaga kan være nyttige allerede nå.',
324
324
  frontPageExpired: 'Utgåtte fag undervises det ikke i lenger, men det kan fortsatt være mulig å ta eksamen i faga som privatist.',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "16.1.0",
3
+ "version": "17.0.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -31,18 +31,18 @@
31
31
  "types"
32
32
  ],
33
33
  "dependencies": {
34
- "@ndla/button": "^2.4.0",
35
- "@ndla/carousel": "^1.2.9",
36
- "@ndla/core": "^2.1.1",
34
+ "@ndla/button": "^2.5.1",
35
+ "@ndla/carousel": "^1.2.11",
36
+ "@ndla/core": "^2.3.0",
37
37
  "@ndla/hooks": "^1.1.4",
38
- "@ndla/icons": "^1.8.1",
39
- "@ndla/licenses": "^5.0.0",
40
- "@ndla/modal": "^1.2.10",
41
- "@ndla/notion": "^3.1.13",
42
- "@ndla/safelink": "^2.0.4",
43
- "@ndla/switch": "^0.1.5",
44
- "@ndla/tabs": "^1.1.8",
45
- "@ndla/tooltip": "^2.1.0",
38
+ "@ndla/icons": "^1.10.0",
39
+ "@ndla/licenses": "^5.0.2",
40
+ "@ndla/modal": "^1.2.12",
41
+ "@ndla/notion": "^3.1.16",
42
+ "@ndla/safelink": "^2.0.7",
43
+ "@ndla/switch": "^0.1.7",
44
+ "@ndla/tabs": "^1.1.10",
45
+ "@ndla/tooltip": "^2.1.2",
46
46
  "@ndla/util": "^3.0.0",
47
47
  "@reach/menu-button": "^0.16.2",
48
48
  "@reach/slider": "^0.16.0",
@@ -81,5 +81,5 @@
81
81
  "publishConfig": {
82
82
  "access": "public"
83
83
  },
84
- "gitHead": "d0828e0cc8cef62893e54aab44b37f6459438e9b"
84
+ "gitHead": "224c9c0d69875fa7d84a591cfbf15b6df340adc5"
85
85
  }
@@ -24,7 +24,7 @@ import LayoutItem from '../Layout';
24
24
  import ArticleHeaderWrapper from './ArticleHeaderWrapper';
25
25
  import ArticleNotions, { NotionRelatedContent } from './ArticleNotions';
26
26
  import ArticleAccessMessage from './ArticleAccessMessage';
27
- import MessageBox from '../MessageBox/MessageBox';
27
+ import MessageBox from '../Messages/MessageBox';
28
28
  import { ConceptNotionType } from '../Notion/ConceptNotion';
29
29
 
30
30
  const classes = new BEMHelper({
@@ -18,7 +18,7 @@ import {
18
18
  } from '@ndla/icons/action';
19
19
  import SafeLink from '@ndla/safelink';
20
20
  import { useTranslation } from 'react-i18next';
21
- import MessageBoxTag from '../MessageBox/MessageBoxTag';
21
+ import MessageBoxTag from '../Messages/MessageBoxTag';
22
22
  import { useMastheadHeight } from '../Masthead';
23
23
 
24
24
  type WrapperProps = {
@@ -1,3 +1,4 @@
1
1
  import Breadcrumblist from './Breadcrumblist';
2
2
 
3
+ export type { BreadcrumbItemProps } from './Breadcrumblist';
3
4
  export default Breadcrumblist;
@@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next';
4
4
  import Tabs from '@ndla/tabs';
5
5
  import SafeLink from '@ndla/safelink';
6
6
  import { colors, fonts, mq, breakpoints } from '@ndla/core';
7
- import { MessageBox } from '../MessageBox';
7
+ import { MessageBox } from '../Messages';
8
8
  // @ts-ignore
9
9
  import { ToggleItem } from '../Filter';
10
10
 
@@ -10,7 +10,7 @@ import React, { ReactNode, useEffect, useRef } from 'react';
10
10
  import BEMHelper from 'react-bem-helper';
11
11
  import { WithTranslation, withTranslation } from 'react-i18next';
12
12
  import { DisplayOnPageYOffset } from '../Animation';
13
- import { MessageBox, MessageBoxType } from '../MessageBox';
13
+ import { MessageBanner } from '../Messages';
14
14
 
15
15
  const classes = new BEMHelper({
16
16
  name: 'masthead',
@@ -95,12 +95,9 @@ export const Masthead = ({
95
95
  )}
96
96
  <div id="masthead" {...classes('', { fixed: !!fixed, infoContent: !!infoContent, ndlaFilm: !!ndlaFilm })}>
97
97
  {messages?.map((message) => (
98
- <MessageBox
99
- type={MessageBoxType.masthead}
100
- showCloseButton={message.closable}
101
- onClose={() => onCloseAlert?.(message.number)}>
98
+ <MessageBanner showCloseButton={message.closable} onClose={() => onCloseAlert?.(message.number)}>
102
99
  {message.content}
103
- </MessageBox>
100
+ </MessageBanner>
104
101
  ))}
105
102
  {infoContent && (
106
103
  <DisplayOnPageYOffset yOffsetMin={0} yOffsetMax={90}>
@@ -0,0 +1,66 @@
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 React from 'react';
10
+ import styled from '@emotion/styled';
11
+ import { colors, spacing } from '@ndla/core';
12
+ // @ts-ignore
13
+ import { Remarkable } from 'remarkable';
14
+ import { CloseButton } from '@ndla/button';
15
+
16
+ interface WrapperProps {
17
+ small?: boolean;
18
+ }
19
+
20
+ const MessageBannerWrapper = styled.div<WrapperProps>`
21
+ display: grid;
22
+ grid-template-areas: '. content closebutton';
23
+ grid-template-columns: minmax(30px, 1fr) minmax(0, auto) minmax(30px, 1fr);
24
+ padding: ${({ small }) => (small ? spacing.xxsmall : spacing.small)};
25
+ background: ${colors.support.yellowLight};
26
+ color: ${colors.brand.greyDark};
27
+ border: none;
28
+ `;
29
+
30
+ const TextWrapper = styled.div`
31
+ display: flex;
32
+ grid-area: content;
33
+ align-items: center;
34
+ & p {
35
+ margin: 0;
36
+ }
37
+ `;
38
+
39
+ const StyledClosebutton = styled(CloseButton)`
40
+ grid-area: closebutton;
41
+ padding: 0;
42
+ justify-self: flex-end;
43
+ align-self: flex-start;
44
+ `;
45
+
46
+ interface Props {
47
+ small?: boolean;
48
+ children?: string;
49
+ showCloseButton?: boolean;
50
+ onClose?: () => void;
51
+ }
52
+
53
+ const markdown = new Remarkable({ breaks: true });
54
+ markdown.inline.ruler.enable(['sub', 'sup']);
55
+ markdown.block.ruler.disable(['list', 'table']);
56
+
57
+ const MessageBanner = ({ children, onClose, showCloseButton, small }: Props) => {
58
+ return (
59
+ <MessageBannerWrapper small={small}>
60
+ <TextWrapper dangerouslySetInnerHTML={{ __html: markdown.render(children) }} />
61
+ {showCloseButton && <StyledClosebutton onClick={onClose} />}
62
+ </MessageBannerWrapper>
63
+ );
64
+ };
65
+
66
+ export default MessageBanner;
@@ -0,0 +1,156 @@
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 React from 'react';
10
+ import styled from '@emotion/styled';
11
+ import { breakpoints, colors, fonts, mq, spacing } from '@ndla/core';
12
+ import { InformationOutline, HumanMaleBoard, Forward, WarningOutline } from '@ndla/icons/common';
13
+ import { WithTranslation, withTranslation } from 'react-i18next';
14
+
15
+ // @ts-ignore
16
+ import { Remarkable } from 'remarkable';
17
+ import { CloseButton } from '@ndla/button';
18
+ import { css } from '@emotion/core';
19
+
20
+ const markdown = new Remarkable({ breaks: true });
21
+ markdown.inline.ruler.enable(['sub', 'sup']);
22
+ markdown.block.ruler.disable(['list', 'table']);
23
+
24
+ type MessageBoxType = 'ghost' | 'danger';
25
+
26
+ interface StyledProps {
27
+ type?: MessageBoxType;
28
+ }
29
+
30
+ const MessageBoxWrapper = styled.div<StyledProps>`
31
+ display: flex;
32
+ padding: ${spacing.small};
33
+ font-family: ${fonts.sans};
34
+ border-radius: 5px;
35
+ background: ${colors.support.yellowLight};
36
+ color: ${colors.brand.greyDark};
37
+
38
+ ${fonts.sizes('18px')};
39
+ ${mq.range({ until: breakpoints.tabletWide })} {
40
+ ${fonts.sizes('16px')};
41
+ }
42
+
43
+ ${({ type }) =>
44
+ type === 'ghost' &&
45
+ css`
46
+ background: transparent;
47
+ border: 1px solid ${colors.brand.neutral7};
48
+ color: ${colors.brand.greyDark};
49
+ `}
50
+
51
+ ${({ type }) =>
52
+ type === 'danger' &&
53
+ css`
54
+ background: ${colors.support.redLightest};
55
+ color: ${colors.support.red};
56
+ `}
57
+ `;
58
+
59
+ const InfoWrapper = styled.div`
60
+ display: flex;
61
+ flex-direction: row;
62
+ flex: 1;
63
+ padding: ${spacing.small};
64
+ padding-right: 0;
65
+ `;
66
+
67
+ const TextWrapper = styled.div`
68
+ & p {
69
+ margin: 0;
70
+ }
71
+ `;
72
+
73
+ const IconWrapper = styled.div`
74
+ display: flex;
75
+ align-items: flex-start;
76
+ padding-right: ${spacing.small};
77
+
78
+ svg {
79
+ width: 24px;
80
+ height: 24px;
81
+ }
82
+ `;
83
+
84
+ const LinkWrapper = styled.div`
85
+ display: flex;
86
+ flex-wrap: wrap;
87
+ gap: ${spacing.normal};
88
+ padding-top: ${spacing.nsmall};
89
+
90
+ svg {
91
+ flex-shrink: 0;
92
+ }
93
+ `;
94
+
95
+ const Link = styled.a`
96
+ display: flex;
97
+ align-items: center;
98
+ color: ${colors.brand.primary};
99
+ gap: ${spacing.xxsmall};
100
+ font-weight: ${fonts.weight.semibold};
101
+ `;
102
+
103
+ const StyledClosebutton = styled(CloseButton)`
104
+ padding: 0;
105
+ `;
106
+
107
+ interface LinkProps {
108
+ href?: string;
109
+ text?: string;
110
+ }
111
+
112
+ interface Props {
113
+ type?: MessageBoxType;
114
+ children?: string;
115
+ links?: LinkProps[];
116
+ showCloseButton?: boolean;
117
+ onClose?: () => void;
118
+ }
119
+
120
+ const Icon = ({ type }: StyledProps) => {
121
+ if (type === 'ghost') {
122
+ return <HumanMaleBoard />;
123
+ }
124
+ if (type === 'danger') {
125
+ return <WarningOutline />;
126
+ }
127
+ return <InformationOutline />;
128
+ };
129
+
130
+ export const MessageBox = ({ type, children = '', links, showCloseButton, onClose }: Props & WithTranslation) => {
131
+ return (
132
+ <MessageBoxWrapper type={type}>
133
+ <InfoWrapper>
134
+ <IconWrapper>
135
+ <Icon type={type} />
136
+ </IconWrapper>
137
+ <div>
138
+ <TextWrapper dangerouslySetInnerHTML={{ __html: markdown.render(children) }} />
139
+ {links && (
140
+ <LinkWrapper>
141
+ {links.map((x) => (
142
+ <Link href={x.href}>
143
+ <span>{x.text}</span>
144
+ <Forward />
145
+ </Link>
146
+ ))}
147
+ </LinkWrapper>
148
+ )}
149
+ </div>
150
+ </InfoWrapper>
151
+ {showCloseButton && <StyledClosebutton onClick={onClose} />}
152
+ </MessageBoxWrapper>
153
+ );
154
+ };
155
+
156
+ export default withTranslation()(MessageBox);
File without changes
@@ -6,8 +6,8 @@
6
6
  *
7
7
  */
8
8
 
9
- import MessageBox from './MessageBox';
10
9
  import MessageBoxTag from './MessageBoxTag';
11
- import { MessageBoxType } from './MessageBox';
10
+ import MessageBox from './MessageBox';
11
+ import MessageBanner from './MessageBanner';
12
12
 
13
- export { MessageBox, MessageBoxTag, MessageBoxType };
13
+ export { MessageBox, MessageBoxTag, MessageBanner };
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import styled from '@emotion/styled';
3
- import { spacing } from '@ndla/core/src';
3
+ import { spacing } from '@ndla/core';
4
4
  import { CalculatedCarouselProps } from '@ndla/carousel';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import FilmContentCard from './FilmContentCard';
@@ -16,7 +16,8 @@ import { getLicenseCredits } from '@ndla/licenses';
16
16
  import Notion, { NotionDialogContent, NotionDialogText, NotionDialogLicenses } from '@ndla/notion';
17
17
  import { Notion as UINotion } from '.';
18
18
  import { NotionImage } from './NotionImage';
19
- import NotionVisualElement, { NotionVisualElementType } from './NotionVisualElement';
19
+ import NotionVisualElement from './NotionVisualElement';
20
+ import type { NotionVisualElementType } from './NotionVisualElement';
20
21
  import FigureNotion from './FigureNotion';
21
22
  import { Copyright } from '../types';
22
23
  import { FigureType } from '../Figure';
@@ -1,2 +1,5 @@
1
- export { default as Notion } from './Notion';
2
1
  export { default as ConceptNotion } from './ConceptNotion';
2
+ export { default as Notion } from './Notion';
3
+ export { default as NotionVisualElement } from './NotionVisualElement';
4
+ export type { NotionVisualElementType } from './NotionVisualElement';
5
+ export type { ConceptNotionType } from './ConceptNotion';
@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
5
5
  import LayoutItem, { OneColumn } from '../Layout';
6
6
  import ProgrammeSubjects from './ProgrammeSubjects';
7
7
  import { GradesProps } from './ProgrammeSubjects';
8
- import MessageBox from '../MessageBox/MessageBox';
8
+ import MessageBox from '../Messages/MessageBox';
9
9
  import { NavigationHeading } from '..';
10
10
  const StyledWrapper = styled.div`
11
11
  display: flex;
@@ -12,7 +12,7 @@ import styled from '@emotion/styled';
12
12
  import Button from '@ndla/button';
13
13
  import { breakpoints, mq } from '@ndla/core';
14
14
  import { NavigationBox } from '../Navigation';
15
- import { MessageBox } from '../MessageBox';
15
+ import { MessageBox } from '../Messages';
16
16
 
17
17
  const GradesMenu = styled.div`
18
18
  margin-bottom: 28px;
@@ -17,10 +17,8 @@ export interface ResourceImageProps {
17
17
  src: string;
18
18
  }
19
19
 
20
- export const ResourceTitle = styled.h2`
21
- ${fonts.sizes(18)};
20
+ export const ResourceTitle = styled.h3`
22
21
  min-width: 50px;
23
- font-weight: ${fonts.weight.bold};
24
22
  margin: 0;
25
23
  flex: 1;
26
24
  overflow: hidden;
@@ -21,7 +21,7 @@ import Loader from './Loader';
21
21
  import { ItemProps } from '../Navigation/NavigationBox';
22
22
  import { NavigationBox } from '../Navigation';
23
23
  import { makeSrcQueryString, ImageCrop, ImageFocalPoint } from '../Image';
24
- import { MessageBox, MessageBoxType } from '../MessageBox';
24
+ import { MessageBox } from '../Messages';
25
25
 
26
26
  type InvertItProps = {
27
27
  invertedStyle?: boolean;
@@ -331,7 +331,7 @@ const Topic = ({
331
331
  </StyledAdditionalResource>
332
332
  )}
333
333
  </TopicHeading>
334
- {messageBox && <MessageBox type={MessageBoxType.medium}>{messageBox}</MessageBox>}
334
+ {messageBox && <MessageBox>{messageBox}</MessageBox>}
335
335
  <TopicIntroduction invertedStyle={invertedStyle}>
336
336
  {renderMarkdown ? parse(renderMarkdown(topic.introduction)) : topic.introduction}
337
337
  </TopicIntroduction>
@@ -28,7 +28,7 @@ import Logo from '../Logo';
28
28
  import FrontpageAllSubjects from '../Frontpage/FrontpageAllSubjects';
29
29
  import NavigationBox from '../Navigation/NavigationBox';
30
30
  import { ProgrammeSubjects } from '../Programme';
31
- import { MessageBox, MessageBoxType } from '../MessageBox';
31
+ import { MessageBanner } from '../Messages';
32
32
 
33
33
  const classes = new BEMHelper({
34
34
  name: 'topic-menu',
@@ -153,7 +153,7 @@ export const TopicMenu = ({
153
153
  return (
154
154
  <nav>
155
155
  {messages?.map((message) => (
156
- <MessageBox type={MessageBoxType.masthead}>{message}</MessageBox>
156
+ <MessageBanner>{message}</MessageBanner>
157
157
  ))}
158
158
  <ModalHeader modifier={['white', 'menu']}>
159
159
  <div {...classes('masthead-left')}>