@ndla/ui 56.0.38-alpha.0 → 56.0.40-alpha.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 (56) hide show
  1. package/dist/panda.buildinfo.json +4 -0
  2. package/dist/styles.css +18 -0
  3. package/es/Article/Article.js +6 -2
  4. package/es/Embed/CopyrightEmbed.js +10 -1
  5. package/es/Embed/EmbedWrapper.js +24 -0
  6. package/es/Embed/UuDisclaimerEmbed.js +17 -14
  7. package/es/Embed/index.js +2 -1
  8. package/es/KeyFigure/KeyFigure.js +5 -1
  9. package/es/LicenseByline/EmbedByline.js +8 -4
  10. package/es/LicenseByline/LicenseLink.js +11 -1
  11. package/es/index.js +1 -1
  12. package/es/locale/messages-en.js +1 -7
  13. package/es/locale/messages-nb.js +1 -7
  14. package/es/locale/messages-nn.js +1 -7
  15. package/es/locale/messages-se.js +1 -7
  16. package/es/locale/messages-sma.js +1 -7
  17. package/lib/Article/Article.d.ts +4 -2
  18. package/lib/Article/Article.js +6 -2
  19. package/lib/Embed/CopyrightEmbed.js +10 -1
  20. package/lib/Embed/EmbedWrapper.d.ts +11 -0
  21. package/lib/Embed/EmbedWrapper.js +30 -0
  22. package/lib/Embed/UuDisclaimerEmbed.js +16 -13
  23. package/lib/Embed/index.d.ts +1 -0
  24. package/lib/Embed/index.js +7 -0
  25. package/lib/KeyFigure/KeyFigure.js +5 -1
  26. package/lib/LicenseByline/EmbedByline.js +8 -4
  27. package/lib/LicenseByline/LicenseLink.d.ts +2 -1
  28. package/lib/LicenseByline/LicenseLink.js +11 -1
  29. package/lib/index.d.ts +1 -1
  30. package/lib/index.js +6 -0
  31. package/lib/locale/messages-en.d.ts +1 -7
  32. package/lib/locale/messages-en.js +1 -7
  33. package/lib/locale/messages-nb.d.ts +1 -7
  34. package/lib/locale/messages-nb.js +1 -7
  35. package/lib/locale/messages-nn.d.ts +1 -7
  36. package/lib/locale/messages-nn.js +1 -7
  37. package/lib/locale/messages-se.d.ts +1 -7
  38. package/lib/locale/messages-se.js +1 -7
  39. package/lib/locale/messages-sma.d.ts +1 -7
  40. package/lib/locale/messages-sma.js +1 -7
  41. package/package.json +6 -6
  42. package/src/Article/Article.tsx +6 -1
  43. package/src/Embed/CopyrightEmbed.tsx +8 -1
  44. package/src/Embed/EmbedWrapper.tsx +25 -0
  45. package/src/Embed/UuDisclaimerEmbed.tsx +10 -10
  46. package/src/Embed/index.ts +1 -0
  47. package/src/Grid/Grid.stories.tsx +15 -9
  48. package/src/KeyFigure/KeyFigure.tsx +5 -0
  49. package/src/LicenseByline/EmbedByline.tsx +11 -6
  50. package/src/LicenseByline/LicenseLink.tsx +9 -2
  51. package/src/index.ts +1 -0
  52. package/src/locale/messages-en.ts +2 -8
  53. package/src/locale/messages-nb.ts +2 -8
  54. package/src/locale/messages-nn.ts +2 -8
  55. package/src/locale/messages-se.ts +2 -8
  56. package/src/locale/messages-sma.ts +2 -8
@@ -22,3 +22,4 @@ export { default as UuDisclaimerEmbed } from "./UuDisclaimerEmbed";
22
22
  export { default as CopyrightEmbed } from "./CopyrightEmbed";
23
23
  export { default as CodeEmbed } from "./CodeEmbed";
24
24
  export type { HeartButtonType, CanonicalUrlFuncs, RenderContext } from "./types";
25
+ export { EmbedWrapper } from "./EmbedWrapper";
@@ -45,6 +45,12 @@ Object.defineProperty(exports, "CopyrightEmbed", {
45
45
  return _CopyrightEmbed.default;
46
46
  }
47
47
  });
48
+ Object.defineProperty(exports, "EmbedWrapper", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _EmbedWrapper.EmbedWrapper;
52
+ }
53
+ });
48
54
  Object.defineProperty(exports, "ExternalEmbed", {
49
55
  enumerable: true,
50
56
  get: function () {
@@ -132,6 +138,7 @@ var _UnknownEmbed = _interopRequireDefault(require("./UnknownEmbed"));
132
138
  var _UuDisclaimerEmbed = _interopRequireDefault(require("./UuDisclaimerEmbed"));
133
139
  var _CopyrightEmbed = _interopRequireDefault(require("./CopyrightEmbed"));
134
140
  var _CodeEmbed = _interopRequireDefault(require("./CodeEmbed"));
141
+ var _EmbedWrapper = require("./EmbedWrapper");
135
142
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
136
143
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
137
144
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -21,7 +21,11 @@ const ContentWrapper = (0, _jsx2.styled)("div", {
21
21
  display: "flex",
22
22
  flexDirection: "column",
23
23
  alignItems: "center",
24
- justifyContent: "center"
24
+ justifyContent: "center",
25
+ gap: "xsmall",
26
+ "&:not(:has(> img))": {
27
+ paddingBlock: "xxlarge"
28
+ }
25
29
  }
26
30
  });
27
31
  const StyledImage = (0, _jsx2.styled)("img", {
@@ -25,7 +25,6 @@ const BylineWrapper = (0, _jsx2.styled)("figcaption", {
25
25
  display: "flex",
26
26
  flexDirection: "column",
27
27
  paddingBlock: "xsmall",
28
- background: "surface.default",
29
28
  textStyle: "label.medium",
30
29
  color: "text.subtle"
31
30
  }
@@ -151,9 +150,10 @@ const StyledButton = (0, _jsx2.styled)(_primitives.Button, {
151
150
  });
152
151
  const LicenseDescription = _ref2 => {
153
152
  let {
154
- children
153
+ children,
154
+ isOpen,
155
+ setIsOpen
155
156
  } = _ref2;
156
- const [isOpen, setIsOpen] = (0, _react.useState)(false);
157
157
  const open = isOpen ? {
158
158
  "data-open": ""
159
159
  } : {};
@@ -191,18 +191,22 @@ const LicenseContainerContent = _ref3 => {
191
191
  const license = copyright ? (0, _licenses.getLicenseByAbbreviation)(copyright.license?.license ?? "", i18n.language) : undefined;
192
192
  const authors = (0, _licenses.getLicenseCredits)(copyright);
193
193
  const captionAuthors = Object.values(authors).find(i => i.length > 0) ?? [];
194
+ const [isOpen, setIsOpen] = (0, _react.useState)(false);
194
195
  const content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
195
196
  children: [children, ` ${t(`embed.type.${type}`)}${captionAuthors.length ? ": " : ""}`, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
196
197
  property: "cc:attributionName",
197
198
  children: captionAuthors.map(author => author.name).join(", ")
198
199
  }), license ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
199
200
  children: [" / ", /*#__PURE__*/(0, _jsxRuntime.jsx)(_LicenseLink.LicenseLink, {
200
- license: license
201
+ license: license,
202
+ hideLink: !isOpen && !!children
201
203
  })]
202
204
  }) : null]
203
205
  });
204
206
  if (children) {
205
207
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(LicenseDescription, {
208
+ isOpen: isOpen,
209
+ setIsOpen: setIsOpen,
206
210
  children: content
207
211
  });
208
212
  }
@@ -8,6 +8,7 @@
8
8
  import { LicenseLocaleType } from "@ndla/licenses";
9
9
  interface Props {
10
10
  license: LicenseLocaleType;
11
+ hideLink?: boolean;
11
12
  }
12
- export declare const LicenseLink: ({ license }: Props) => import("react/jsx-runtime").JSX.Element | null;
13
+ export declare const LicenseLink: ({ license, hideLink }: Props) => import("react/jsx-runtime").JSX.Element | null;
13
14
  export {};
@@ -25,13 +25,22 @@ const StyledSafeLink = (0, _jsx2.styled)(_safelink.SafeLink, {
25
25
  },
26
26
  _focusWithin: {
27
27
  textDecoration: "none"
28
+ },
29
+ mobileWideDown: {
30
+ _disabled: {
31
+ display: "none"
32
+ }
28
33
  }
29
34
  }
30
35
  });
31
36
  const LicenseLink = _ref => {
32
37
  let {
33
- license
38
+ license,
39
+ hideLink
34
40
  } = _ref;
41
+ const disabled = hideLink ? {
42
+ "data-disabled": ""
43
+ } : {};
35
44
  if (license.abbreviation === "unknown") {
36
45
  return null;
37
46
  }
@@ -39,6 +48,7 @@ const LicenseLink = _ref => {
39
48
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledSafeLink, {
40
49
  to: license.url,
41
50
  rel: "license",
51
+ ...disabled,
42
52
  children: license.abbreviation
43
53
  });
44
54
  }
package/lib/index.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  *
7
7
  */
8
8
  export { Concept } from "./Concept/Concept";
9
- export { ImageEmbed, getCrop, getFocalPoint, AudioEmbed, H5pEmbed, ExternalEmbed, IframeEmbed, FootnoteEmbed, BrightcoveEmbed, ContentLinkEmbed, RelatedContentEmbed, ConceptEmbed, UnknownEmbed, InlineConcept, BlockConcept, UuDisclaimerEmbed, CopyrightEmbed, CodeEmbed, InlineTriggerButton, } from "./Embed";
9
+ export { ImageEmbed, getCrop, getFocalPoint, AudioEmbed, H5pEmbed, ExternalEmbed, IframeEmbed, FootnoteEmbed, BrightcoveEmbed, ContentLinkEmbed, RelatedContentEmbed, ConceptEmbed, UnknownEmbed, InlineConcept, BlockConcept, UuDisclaimerEmbed, CopyrightEmbed, CodeEmbed, InlineTriggerButton, EmbedWrapper, } from "./Embed";
10
10
  export { LicenseLink, EmbedByline } from "./LicenseByline";
11
11
  export { ArticleByline, ArticleBylineAccordionItem, ArticleFootNotes, ArticleWrapper, Article, ArticleFooter, ArticleHeader, ArticleContent, ArticleHGroup, ArticleTitle, } from "./Article";
12
12
  export { getPossiblyRelativeUrl } from "./utils/relativeUrl";
package/lib/index.js CHANGED
@@ -207,6 +207,12 @@ Object.defineProperty(exports, "EmbedByline", {
207
207
  return _LicenseByline.EmbedByline;
208
208
  }
209
209
  });
210
+ Object.defineProperty(exports, "EmbedWrapper", {
211
+ enumerable: true,
212
+ get: function () {
213
+ return _Embed.EmbedWrapper;
214
+ }
215
+ });
210
216
  Object.defineProperty(exports, "ErrorMessage", {
211
217
  enumerable: true,
212
218
  get: function () {
@@ -1208,10 +1208,7 @@ declare const messages: {
1208
1208
  learningpathUnsupported: string;
1209
1209
  drawerButton: string;
1210
1210
  drawerTitle: string;
1211
- description: {
1212
- all: string;
1213
- info1: string;
1214
- };
1211
+ description: string;
1215
1212
  willOpenInNewTab: string;
1216
1213
  };
1217
1214
  myPage: {
@@ -1397,9 +1394,6 @@ declare const messages: {
1397
1394
  pinyin: string;
1398
1395
  };
1399
1396
  };
1400
- uuDisclaimer: {
1401
- alternative: string;
1402
- };
1403
1397
  wordClass: {
1404
1398
  [x: string]: string;
1405
1399
  };
@@ -1225,10 +1225,7 @@ const messages = {
1225
1225
  learningpathUnsupported: "Learning paths and multidisciplinary cases cannot be shown directly in a shared folder. You can open the learning path in a new tab by clicking the link in the navigation menu to the left.",
1226
1226
  drawerButton: "Show folders and resources",
1227
1227
  drawerTitle: "Folders and resources",
1228
- description: {
1229
- all: "In this folder you find articles and tasks from NDLA. The articles have been collected and placed in order by a teacher.\n\nYou can use the menu to navigate through the articles.",
1230
- info1: "In this folder you find articles and tasks from NDLA. The articles have been collected and placed in order by a teacher."
1231
- },
1228
+ description: "In this folder you find articles and tasks from NDLA. The articles have been collected and placed in order by a teacher.",
1232
1229
  willOpenInNewTab: "Opens in a new tab."
1233
1230
  },
1234
1231
  myPage: {
@@ -1414,9 +1411,6 @@ const messages = {
1414
1411
  pinyin: "Pinyin"
1415
1412
  }
1416
1413
  },
1417
- uuDisclaimer: {
1418
- alternative: "You can find alternative content in the article"
1419
- },
1420
1414
  wordClass: {
1421
1415
  [wordClass.wordClass.adjective]: "Adjective",
1422
1416
  [wordClass.wordClass.adverb]: "Adverb",
@@ -1208,10 +1208,7 @@ declare const messages: {
1208
1208
  learningpathUnsupported: string;
1209
1209
  drawerButton: string;
1210
1210
  drawerTitle: string;
1211
- description: {
1212
- all: string;
1213
- info1: string;
1214
- };
1211
+ description: string;
1215
1212
  willOpenInNewTab: string;
1216
1213
  };
1217
1214
  myPage: {
@@ -1397,9 +1394,6 @@ declare const messages: {
1397
1394
  pinyin: string;
1398
1395
  };
1399
1396
  };
1400
- uuDisclaimer: {
1401
- alternative: string;
1402
- };
1403
1397
  wordClass: {
1404
1398
  [x: string]: string;
1405
1399
  };
@@ -1225,10 +1225,7 @@ const messages = {
1225
1225
  learningpathUnsupported: "Læringsstier og tverrfaglige caser kan ikke vises direkte i delte mapper. Dersom du trykker på lenka i navigasjonsmenyen til venstre, vil stien åpnes i en ny fane.",
1226
1226
  drawerButton: "Vis mapper og ressurser",
1227
1227
  drawerTitle: "Mapper og ressurser",
1228
- description: {
1229
- all: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer.\n\nDu kan bla i artiklene ved å bruke menyen.",
1230
- info1: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer."
1231
- },
1228
+ description: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer.",
1232
1229
  willOpenInNewTab: "Åpnes i ny fane."
1233
1230
  },
1234
1231
  myPage: {
@@ -1414,9 +1411,6 @@ const messages = {
1414
1411
  pinyin: "Pinyin"
1415
1412
  }
1416
1413
  },
1417
- uuDisclaimer: {
1418
- alternative: "Du kan finne alternativt innhold i artikkelen"
1419
- },
1420
1414
  wordClass: {
1421
1415
  [wordClass.wordClass.adjective]: "Adjektiv",
1422
1416
  [wordClass.wordClass.adverb]: "Adverb",
@@ -1208,10 +1208,7 @@ declare const messages: {
1208
1208
  drawerButton: string;
1209
1209
  drawerTitle: string;
1210
1210
  learningpathUnsupported: string;
1211
- description: {
1212
- all: string;
1213
- info1: string;
1214
- };
1211
+ description: string;
1215
1212
  willOpenInNewTab: string;
1216
1213
  };
1217
1214
  myPage: {
@@ -1397,9 +1394,6 @@ declare const messages: {
1397
1394
  pinyin: string;
1398
1395
  };
1399
1396
  };
1400
- uuDisclaimer: {
1401
- alternative: string;
1402
- };
1403
1397
  wordClass: {
1404
1398
  [x: string]: string;
1405
1399
  };
@@ -1225,10 +1225,7 @@ const messages = {
1225
1225
  drawerButton: "Vis mapper og ressursar",
1226
1226
  drawerTitle: "Mapper og ressursar",
1227
1227
  learningpathUnsupported: "Læringsstiar og tverrfaglege caser kan ikkje visast direkte i delte mapper. Dersom du trykker på lenka i navigasjonsmenyen til venstre, blir stien opna i ei ny fane.",
1228
- description: {
1229
- all: "I denne delte mappa finn du fagstoff og oppgåver frå NDLA. Artiklane er samla inn og sette i rekkefølge av ein lærar.\n\nDu kan bla i artiklane ved å bruke menyen.",
1230
- info1: "I denne delte mappa finn du fagstoff og oppgåver frå NDLA. Artiklane er samla inn og sette i rekkefølge av ein lærar."
1231
- },
1228
+ description: "I denne delte mappa finn du fagstoff og oppgåver frå NDLA. Artiklane er samla inn og sette i rekkefølge av ein lærar.",
1232
1229
  willOpenInNewTab: "Blir opna i ny fane."
1233
1230
  },
1234
1231
  myPage: {
@@ -1414,9 +1411,6 @@ const messages = {
1414
1411
  pinyin: "Pinyin"
1415
1412
  }
1416
1413
  },
1417
- uuDisclaimer: {
1418
- alternative: "Du kan finne alternativt innhald i artikkelen"
1419
- },
1420
1414
  wordClass: {
1421
1415
  [wordClass.wordClass.adjective]: "Adjektiv",
1422
1416
  [wordClass.wordClass.adverb]: "Adverb",
@@ -1208,10 +1208,7 @@ declare const messages: {
1208
1208
  learningpathUnsupported: string;
1209
1209
  drawerButton: string;
1210
1210
  drawerTitle: string;
1211
- description: {
1212
- all: string;
1213
- info1: string;
1214
- };
1211
+ description: string;
1215
1212
  willOpenInNewTab: string;
1216
1213
  };
1217
1214
  myPage: {
@@ -1397,9 +1394,6 @@ declare const messages: {
1397
1394
  pinyin: string;
1398
1395
  };
1399
1396
  };
1400
- uuDisclaimer: {
1401
- alternative: string;
1402
- };
1403
1397
  wordClass: {
1404
1398
  [x: string]: string;
1405
1399
  };
@@ -1225,10 +1225,7 @@ const messages = {
1225
1225
  learningpathUnsupported: "Læringsstier og tverrfaglige caser kan ikke vises direkte i delte mapper. Dersom du trykker på lenka i navigasjonsmenyen til venstre, vil stien åpnes i en ny fane.",
1226
1226
  drawerButton: "Vis mapper og ressurser",
1227
1227
  drawerTitle: "Mapper og ressurser",
1228
- description: {
1229
- all: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer.\n\nDu kan bla i artiklene ved å bruke menyen.",
1230
- info1: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer."
1231
- },
1228
+ description: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer.",
1232
1229
  willOpenInNewTab: "Åpnes i ny fane."
1233
1230
  },
1234
1231
  myPage: {
@@ -1414,9 +1411,6 @@ const messages = {
1414
1411
  pinyin: "Pinyin"
1415
1412
  }
1416
1413
  },
1417
- uuDisclaimer: {
1418
- alternative: "Du kan finne alternativt innhold i artikkelen"
1419
- },
1420
1414
  wordClass: {
1421
1415
  [wordClass.wordClass.adjective]: "Adjektiivvat",
1422
1416
  [wordClass.wordClass.adverb]: "Advearba",
@@ -1208,10 +1208,7 @@ declare const messages: {
1208
1208
  learningpathUnsupported: string;
1209
1209
  drawerButton: string;
1210
1210
  drawerTitle: string;
1211
- description: {
1212
- all: string;
1213
- info1: string;
1214
- };
1211
+ description: string;
1215
1212
  willOpenInNewTab: string;
1216
1213
  };
1217
1214
  myPage: {
@@ -1397,9 +1394,6 @@ declare const messages: {
1397
1394
  pinyin: string;
1398
1395
  };
1399
1396
  };
1400
- uuDisclaimer: {
1401
- alternative: string;
1402
- };
1403
1397
  wordClass: {
1404
1398
  [x: string]: string;
1405
1399
  };
@@ -1225,10 +1225,7 @@ const messages = {
1225
1225
  learningpathUnsupported: "Læringsstier og tverrfaglige caser kan ikke vises direkte i delte mapper. Dersom du trykker på lenka i navigasjonsmenyen til venstre, vil stien åpnes i en ny fane.",
1226
1226
  drawerButton: "Vis mapper og ressurser",
1227
1227
  drawerTitle: "Mapper og ressurser",
1228
- description: {
1229
- all: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer.\n\nDu kan bla i artiklene ved å bruke menyen.",
1230
- info1: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer."
1231
- },
1228
+ description: "I denne delte mappa finner du fagstoff og oppgaver fra NDLA. Artiklene er samlet inn og satt i rekkefølge av en lærer.",
1232
1229
  willOpenInNewTab: "Åpnes i ny fane."
1233
1230
  },
1234
1231
  myPage: {
@@ -1414,9 +1411,6 @@ const messages = {
1414
1411
  pinyin: "Pinyin"
1415
1412
  }
1416
1413
  },
1417
- uuDisclaimer: {
1418
- alternative: "Du kan finne alternativt innhold i artikkelen"
1419
- },
1420
1414
  wordClass: {
1421
1415
  [wordClass.wordClass.adjective]: "Adjektiv",
1422
1416
  [wordClass.wordClass.adverb]: "Adverb",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "56.0.38-alpha.0",
3
+ "version": "56.0.40-alpha.0",
4
4
  "description": "UI component library for NDLA",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -33,10 +33,10 @@
33
33
  ],
34
34
  "dependencies": {
35
35
  "@ndla/core": "^5.0.2",
36
- "@ndla/icons": "^8.0.26-alpha.0",
36
+ "@ndla/icons": "^8.0.27-alpha.0",
37
37
  "@ndla/licenses": "^8.0.3-alpha.0",
38
- "@ndla/primitives": "^1.0.35-alpha.0",
39
- "@ndla/safelink": "^7.0.35-alpha.0",
38
+ "@ndla/primitives": "^1.0.36-alpha.0",
39
+ "@ndla/safelink": "^7.0.36-alpha.0",
40
40
  "@ndla/styled-system": "^0.0.23",
41
41
  "@ndla/util": "^5.0.0-alpha.0",
42
42
  "html-react-parser": "^5.1.8",
@@ -50,7 +50,7 @@
50
50
  "react-router-dom": "> 6.0.0"
51
51
  },
52
52
  "devDependencies": {
53
- "@ndla/preset-panda": "^0.0.35",
53
+ "@ndla/preset-panda": "^0.0.36",
54
54
  "@ndla/types-backend": "^0.2.86",
55
55
  "@ndla/types-embed": "^5.0.3-alpha.0",
56
56
  "@pandacss/dev": "^0.46.0"
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  },
61
- "gitHead": "53f7afbd4c31ab255da453bbd11bc206ecdbd7e1"
61
+ "gitHead": "4bdd26c1af4c3ed459924af5888de4040de6d47b"
62
62
  }
@@ -113,6 +113,7 @@ const StyledStack = styled(Stack, {
113
113
  interface ArticleTitleProps {
114
114
  heartButton?: ReactNode;
115
115
  contentType?: ContentType;
116
+ contentTypeLabel?: ReactNode;
116
117
  competenceGoals?: ReactNode;
117
118
  id: string;
118
119
  lang?: string;
@@ -127,6 +128,7 @@ export const ArticleTitle = ({
127
128
  lang,
128
129
  id,
129
130
  introduction,
131
+ contentTypeLabel,
130
132
  competenceGoals,
131
133
  }: ArticleTitleProps) => {
132
134
  return (
@@ -134,7 +136,7 @@ export const ArticleTitle = ({
134
136
  <ArticleHGroup>
135
137
  {(!!contentType || !!heartButton) && (
136
138
  <StyledStack justify="space-between" align="center" direction="row" gap="small">
137
- {!!contentType && <ContentTypeBadgeNew contentType={contentType} />}
139
+ {!!contentType && <ContentTypeBadgeNew contentType={contentType}>{contentTypeLabel}</ContentTypeBadgeNew>}
138
140
  {heartButton}
139
141
  </StyledStack>
140
142
  )}
@@ -157,6 +159,7 @@ interface Props {
157
159
  article: ArticleType;
158
160
  licenseBox?: ReactNode;
159
161
  contentType?: ContentType;
162
+ contentTypeLabel?: ReactNode;
160
163
  children?: ReactNode;
161
164
  competenceGoals?: ReactNode;
162
165
  id: string;
@@ -169,6 +172,7 @@ export const Article = ({
169
172
  licenseBox,
170
173
  children,
171
174
  competenceGoals,
175
+ contentTypeLabel,
172
176
  id,
173
177
  heartButton,
174
178
  lang,
@@ -188,6 +192,7 @@ export const Article = ({
188
192
  introduction={introduction}
189
193
  competenceGoals={competenceGoals}
190
194
  lang={lang}
195
+ contentTypeLabel={contentTypeLabel}
191
196
  />
192
197
  <ArticleContent>{content}</ArticleContent>
193
198
  <ArticleFooter>
@@ -7,6 +7,7 @@
7
7
  */
8
8
 
9
9
  import { ReactNode } from "react";
10
+ import { styled } from "@ndla/styled-system/jsx";
10
11
  import { CopyrightMetaData } from "@ndla/types-embed";
11
12
  import { EmbedByline } from "../LicenseByline";
12
13
 
@@ -15,10 +16,16 @@ interface Props {
15
16
  children?: ReactNode;
16
17
  }
17
18
 
19
+ const StyledCopyrightContent = styled("div", {
20
+ base: {
21
+ marginBlockEnd: "xsmall",
22
+ },
23
+ });
24
+
18
25
  const CopyrightEmbed = ({ embed, children }: Props) => {
19
26
  return (
20
27
  <figure data-embed-type="copyright">
21
- {children}
28
+ <StyledCopyrightContent data-copyright-content="">{children}</StyledCopyrightContent>
22
29
  <EmbedByline type="copyright" copyright={embed.embedData.copyright} />
23
30
  </figure>
24
31
  );
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright (c) 2024-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 { ComponentPropsWithRef, forwardRef } from "react";
10
+ import { ark } from "@ark-ui/react";
11
+ import { styled } from "@ndla/styled-system/jsx";
12
+
13
+ const StyledEmbedWrapper = styled(
14
+ ark.div,
15
+ {
16
+ base: {
17
+ position: "relative",
18
+ },
19
+ },
20
+ { baseComponent: true },
21
+ );
22
+
23
+ export const EmbedWrapper = forwardRef<HTMLDivElement, ComponentPropsWithRef<"div">>((props, ref) => (
24
+ <StyledEmbedWrapper data-embed-wrapper="" {...props} ref={ref} />
25
+ ));
@@ -7,7 +7,6 @@
7
7
  */
8
8
 
9
9
  import { ReactNode } from "react";
10
- import { useTranslation } from "react-i18next";
11
10
  import { InformationLine } from "@ndla/icons/common";
12
11
  import { MessageBox } from "@ndla/primitives";
13
12
  import { SafeLink } from "@ndla/safelink";
@@ -23,6 +22,7 @@ const StyledMessageBox = styled(MessageBox, {
23
22
  base: {
24
23
  display: "flex",
25
24
  alignItems: "center",
25
+ marginBlockEnd: "xsmall",
26
26
  },
27
27
  });
28
28
  const Disclaimer = styled("div", {
@@ -30,10 +30,13 @@ const Disclaimer = styled("div", {
30
30
  textStyle: "body.medium",
31
31
  },
32
32
  });
33
+ const StyledSafeLink = styled(SafeLink, {
34
+ base: {
35
+ paddingInlineStart: "4xsmall",
36
+ },
37
+ });
33
38
 
34
39
  const UuDisclaimerEmbed = ({ embed, children }: Props) => {
35
- const { t } = useTranslation();
36
-
37
40
  if (embed.status === "error") {
38
41
  return null;
39
42
  }
@@ -41,12 +44,9 @@ const UuDisclaimerEmbed = ({ embed, children }: Props) => {
41
44
  const { embedData, data } = embed;
42
45
 
43
46
  const disclaimerLink = data?.disclaimerLink ? (
44
- <>
45
- {` ${t("uuDisclaimer.alternative")} `}
46
- <SafeLink to={data.disclaimerLink.href} target="_blank" rel="noopener noreferrer">
47
- {data.disclaimerLink.text}
48
- </SafeLink>
49
- </>
47
+ <StyledSafeLink to={data.disclaimerLink.href} target="_blank" rel="noopener noreferrer">
48
+ {data.disclaimerLink.text}
49
+ </StyledSafeLink>
50
50
  ) : null;
51
51
 
52
52
  return (
@@ -58,7 +58,7 @@ const UuDisclaimerEmbed = ({ embed, children }: Props) => {
58
58
  {disclaimerLink}
59
59
  </Disclaimer>
60
60
  </StyledMessageBox>
61
- {children}
61
+ <div data-uu-content="">{children}</div>
62
62
  </div>
63
63
  );
64
64
  };
@@ -23,3 +23,4 @@ export { default as UuDisclaimerEmbed } from "./UuDisclaimerEmbed";
23
23
  export { default as CopyrightEmbed } from "./CopyrightEmbed";
24
24
  export { default as CodeEmbed } from "./CodeEmbed";
25
25
  export type { HeartButtonType, CanonicalUrlFuncs, RenderContext } from "./types";
26
+ export { EmbedWrapper } from "./EmbedWrapper";
@@ -50,7 +50,11 @@ export const GridKeyPerformanceStory: StoryFn<typeof Grid> = ({ ...args }) => {
50
50
  const columns = args.columns === "2x2" ? 4 : parseInt(args.columns);
51
51
  const items = new Array(columns).fill(0).map((_, idx) => {
52
52
  const args = keyFigureArgs[idx % keyFigureArgs.length];
53
- return <Plain key={idx} {...args} />;
53
+ return (
54
+ <div key={idx} data-type="grid-cell" data-parallax-cell="false">
55
+ <Plain key={idx} {...args} />
56
+ </div>
57
+ );
54
58
  });
55
59
  return <Grid {...args}>{items}</Grid>;
56
60
  };
@@ -58,14 +62,16 @@ export const GridKeyPerformanceStory: StoryFn<typeof Grid> = ({ ...args }) => {
58
62
  export const GridBlogPostStory: StoryFn<typeof Grid> = ({ ...args }) => {
59
63
  const columns = args.columns === "2x2" ? 4 : parseInt(args.columns);
60
64
  const items = new Array(columns).fill(
61
- <BlogPostStory
62
- metaImage={BlogPostStory.args?.metaImage!}
63
- title={BlogPostStory.args?.title!}
64
- size={"normal"}
65
- headingLevel={BlogPostStory.args?.headingLevel}
66
- url={BlogPostStory.args?.url!}
67
- author={BlogPostStory.args?.author}
68
- />,
65
+ <div data-type="grid-cell" data-parallax-cell="false">
66
+ <BlogPostStory
67
+ metaImage={BlogPostStory.args?.metaImage!}
68
+ title={BlogPostStory.args?.title!}
69
+ size={"normal"}
70
+ headingLevel={BlogPostStory.args?.headingLevel}
71
+ url={BlogPostStory.args?.url!}
72
+ author={BlogPostStory.args?.author}
73
+ />
74
+ </div>,
69
75
  );
70
76
  return <Grid {...args}>{items}</Grid>;
71
77
  };
@@ -15,6 +15,11 @@ const ContentWrapper = styled("div", {
15
15
  flexDirection: "column",
16
16
  alignItems: "center",
17
17
  justifyContent: "center",
18
+ gap: "xsmall",
19
+
20
+ "&:not(:has(> img))": {
21
+ paddingBlock: "xxlarge",
22
+ },
18
23
  },
19
24
  });
20
25