@ndla/ui 55.0.18-alpha.0 → 55.0.19-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 (80) hide show
  1. package/es/AudioPlayer/SpeechControl.js +1 -0
  2. package/es/BlogPost/BlogPost.js +1 -0
  3. package/es/CampaignBlock/CampaignBlock.js +32 -27
  4. package/es/ContactBlock/ContactBlock.js +1 -0
  5. package/es/CopyParagraphButton/CopyParagraphButton.js +9 -11
  6. package/es/Embed/AudioEmbed.js +3 -1
  7. package/es/Embed/BrightcoveEmbed.js +1 -0
  8. package/es/Embed/CodeEmbed.js +1 -0
  9. package/es/Embed/ConceptEmbed.js +8 -9
  10. package/es/Embed/ConceptListEmbed.js +1 -0
  11. package/es/Embed/ContentLinkEmbed.js +1 -0
  12. package/es/Embed/CopyrightEmbed.js +1 -0
  13. package/es/Embed/EmbedErrorPlaceholder.js +1 -0
  14. package/es/Embed/ExternalEmbed.js +2 -0
  15. package/es/Embed/FootnoteEmbed.js +1 -0
  16. package/es/Embed/GlossEmbed.js +1 -0
  17. package/es/Embed/H5pEmbed.js +2 -0
  18. package/es/Embed/IframeEmbed.js +2 -0
  19. package/es/Embed/ImageEmbed.js +1 -0
  20. package/es/Embed/UnknownEmbed.js +1 -0
  21. package/es/Embed/UuDisclaimerEmbed.js +1 -0
  22. package/es/ErrorMessage/ErrorResourceAccessDenied.js +2 -3
  23. package/es/FactBox/FactBox.js +1 -0
  24. package/es/LinkBlock/LinkBlock.js +1 -0
  25. package/es/RelatedArticleList/RelatedArticleList.js +2 -0
  26. package/es/TreeStructure/AddFolderButton.js +25 -28
  27. package/lib/AudioPlayer/SpeechControl.js +1 -0
  28. package/lib/BlogPost/BlogPost.js +1 -0
  29. package/lib/CampaignBlock/CampaignBlock.js +32 -27
  30. package/lib/ContactBlock/ContactBlock.js +1 -0
  31. package/lib/CopyParagraphButton/CopyParagraphButton.js +9 -11
  32. package/lib/Embed/AudioEmbed.js +3 -1
  33. package/lib/Embed/BrightcoveEmbed.js +1 -0
  34. package/lib/Embed/CodeEmbed.js +1 -0
  35. package/lib/Embed/ConceptEmbed.js +7 -8
  36. package/lib/Embed/ConceptListEmbed.js +1 -0
  37. package/lib/Embed/ContentLinkEmbed.js +1 -0
  38. package/lib/Embed/CopyrightEmbed.js +1 -0
  39. package/lib/Embed/EmbedErrorPlaceholder.js +1 -0
  40. package/lib/Embed/ExternalEmbed.js +2 -0
  41. package/lib/Embed/FootnoteEmbed.js +1 -0
  42. package/lib/Embed/GlossEmbed.js +1 -0
  43. package/lib/Embed/H5pEmbed.js +2 -0
  44. package/lib/Embed/IframeEmbed.js +2 -0
  45. package/lib/Embed/ImageEmbed.js +1 -0
  46. package/lib/Embed/UnknownEmbed.js +1 -0
  47. package/lib/Embed/UuDisclaimerEmbed.js +1 -0
  48. package/lib/ErrorMessage/ErrorResourceAccessDenied.js +2 -3
  49. package/lib/FactBox/FactBox.js +1 -0
  50. package/lib/LinkBlock/LinkBlock.js +1 -0
  51. package/lib/RelatedArticleList/RelatedArticleList.js +2 -0
  52. package/lib/TreeStructure/AddFolderButton.js +25 -28
  53. package/package.json +4 -7
  54. package/src/AudioPlayer/SpeechControl.tsx +1 -1
  55. package/src/BlogPost/BlogPost.tsx +1 -1
  56. package/src/CampaignBlock/CampaignBlock.tsx +2 -1
  57. package/src/ContactBlock/ContactBlock.tsx +1 -1
  58. package/src/CopyParagraphButton/CopyParagraphButton.tsx +4 -7
  59. package/src/Embed/AudioEmbed.tsx +3 -2
  60. package/src/Embed/BrightcoveEmbed.tsx +1 -1
  61. package/src/Embed/CodeEmbed.tsx +1 -1
  62. package/src/Embed/ConceptEmbed.tsx +4 -6
  63. package/src/Embed/ConceptListEmbed.tsx +1 -1
  64. package/src/Embed/ContentLinkEmbed.tsx +1 -1
  65. package/src/Embed/CopyrightEmbed.tsx +1 -1
  66. package/src/Embed/EmbedErrorPlaceholder.tsx +1 -1
  67. package/src/Embed/ExternalEmbed.tsx +8 -2
  68. package/src/Embed/FootnoteEmbed.tsx +1 -1
  69. package/src/Embed/GlossEmbed.tsx +1 -1
  70. package/src/Embed/H5pEmbed.tsx +2 -2
  71. package/src/Embed/IframeEmbed.tsx +2 -2
  72. package/src/Embed/ImageEmbed.tsx +5 -1
  73. package/src/Embed/UnknownEmbed.tsx +1 -1
  74. package/src/Embed/UuDisclaimerEmbed.tsx +1 -1
  75. package/src/ErrorMessage/ErrorResourceAccessDenied.tsx +3 -3
  76. package/src/FactBox/FactBox.tsx +1 -1
  77. package/src/LinkBlock/LinkBlock.tsx +1 -1
  78. package/src/RelatedArticleList/RelatedArticleList.tsx +2 -2
  79. package/src/TreeStructure/AddFolderButton.tsx +25 -27
  80. package/src/TreeStructure/TreeStructure.stories.tsx +5 -5
@@ -34,7 +34,7 @@ const ContentLinkEmbed = ({ embed, isOembed, children }: Props) => {
34
34
 
35
35
  if (embedData.openIn === "new-context" || isOembed) {
36
36
  return (
37
- <a href={data.path} target="_blank" rel="noopener noreferrer">
37
+ <a href={data.path} data-embed-type="content-link" target="_blank" rel="noopener noreferrer">
38
38
  {children}
39
39
  </a>
40
40
  );
@@ -17,7 +17,7 @@ interface Props {
17
17
 
18
18
  const CopyrightEmbed = ({ embed, children }: Props) => {
19
19
  return (
20
- <figure>
20
+ <figure data-embed-type="copyright">
21
21
  {children}
22
22
  <EmbedByline type="copyright" copyright={embed.embedData.copyright} />
23
23
  </figure>
@@ -48,7 +48,7 @@ const StyledFigure = styled(Figure, {
48
48
 
49
49
  const EmbedErrorPlaceholder = ({ type, children, figureType, float }: Props) => {
50
50
  return (
51
- <StyledFigure size={figureType} float={float}>
51
+ <StyledFigure size={figureType} float={float} data-embed-type={type}>
52
52
  {children ?? (
53
53
  <ErrorPlaceholder data-embed-type={type}>
54
54
  <WarningOutline />
@@ -53,7 +53,7 @@ const ExternalEmbed = ({ embed }: Props) => {
53
53
  alt: embedData.alt !== undefined ? embedData.alt : data.iframeImage?.alttext?.alttext ?? "",
54
54
  };
55
55
  return (
56
- <Figure>
56
+ <Figure data-embed-type="external">
57
57
  <ResourceBox
58
58
  image={image}
59
59
  title={embedData.title ?? ""}
@@ -65,7 +65,13 @@ const ExternalEmbed = ({ embed }: Props) => {
65
65
  );
66
66
  }
67
67
 
68
- return <StyledFigure ref={figRef} dangerouslySetInnerHTML={{ __html: data.oembed.html ?? "" }} />;
68
+ return (
69
+ <StyledFigure
70
+ data-embed-type="external"
71
+ ref={figRef}
72
+ dangerouslySetInnerHTML={{ __html: data.oembed.html ?? "" }}
73
+ />
74
+ );
69
75
  };
70
76
 
71
77
  export default ExternalEmbed;
@@ -30,7 +30,7 @@ const FootnoteEmbed = ({ embed }: Props) => {
30
30
  }
31
31
 
32
32
  return (
33
- <span id={`ref${embed.data.entryNum}`}>
33
+ <span id={`ref${embed.data.entryNum}`} data-embed-type="footnote">
34
34
  <StyledSup>
35
35
  <a href={`#note${embed.data.entryNum}`} target="_self">{`[${embed.data.entryNum}]`}</a>
36
36
  </StyledSup>
@@ -57,7 +57,7 @@ export const GlossEmbed = ({ embed }: Props) => {
57
57
  }
58
58
 
59
59
  return (
60
- <Figure>
60
+ <Figure data-embed-type="gloss">
61
61
  <Gloss glossData={concept.glossData} title={concept.title} audio={audio} variant="bordered" />
62
62
  </Figure>
63
63
  );
@@ -39,11 +39,11 @@ const H5pEmbed = ({ embed }: Props) => {
39
39
  }
40
40
 
41
41
  if (embed.data.oembed) {
42
- return <FigureOembed dangerouslySetInnerHTML={{ __html: embed.data.oembed.html ?? "" }} />;
42
+ return <FigureOembed data-embed-type="h5p" dangerouslySetInnerHTML={{ __html: embed.data.oembed.html ?? "" }} />;
43
43
  }
44
44
 
45
45
  return (
46
- <StyledFigure>
46
+ <StyledFigure data-embed-type="h5p">
47
47
  <iframe title={embed.embedData.url} aria-label={embed.embedData.url} src={embed.embedData.url} />
48
48
  </StyledFigure>
49
49
  );
@@ -49,7 +49,7 @@ const IframeEmbed = ({ embed }: Props) => {
49
49
  const alt = embedData.alt !== undefined ? embedData.alt : iframeImage?.alttext.alttext;
50
50
  const image = { src: iframeImage?.image.imageUrl ?? "", alt: alt ?? "" };
51
51
  return (
52
- <Figure>
52
+ <Figure data-embed-type="iframe">
53
53
  <ResourceBox
54
54
  image={image}
55
55
  title={embedData.title ?? ""}
@@ -68,7 +68,7 @@ const IframeEmbed = ({ embed }: Props) => {
68
68
  const urlOrTitle = title || url;
69
69
 
70
70
  return (
71
- <Figure>
71
+ <Figure data-embed-type="iframe">
72
72
  <StyledIframe
73
73
  ref={iframeRef}
74
74
  title={urlOrTitle}
@@ -250,7 +250,11 @@ const ImageEmbed = ({ embed, previewAlt, lang, renderContext = "article", childr
250
250
 
251
251
  // TODO: Check how this works with `children`. Will only be important for ED
252
252
  return (
253
- <StyledFigure float={figureProps?.float} size={imageSizes ? "full" : figureProps?.size ?? "medium"}>
253
+ <StyledFigure
254
+ float={figureProps?.float}
255
+ size={imageSizes ? "full" : figureProps?.size ?? "medium"}
256
+ data-embed-type="image"
257
+ >
254
258
  {children}
255
259
  <ImageWrapper border={embedData.border === "true"} expandable={!!figureProps?.float}>
256
260
  <Image
@@ -17,7 +17,7 @@ interface Props {
17
17
  const UnknownEmbed = ({ embed }: Props) => {
18
18
  const { t } = useTranslation();
19
19
  return (
20
- <Text color="text.error" asChild consumeCss>
20
+ <Text color="text.error" asChild consumeCss data-embed-type="unknown">
21
21
  <span>{t("embed.unsupported", { type: embed.resource })}</span>
22
22
  </Text>
23
23
  );
@@ -50,7 +50,7 @@ const UuDisclaimerEmbed = ({ embed, children }: Props) => {
50
50
  ) : null;
51
51
 
52
52
  return (
53
- <div role="region">
53
+ <div role="region" data-embed-type="uu-disclaimer">
54
54
  <StyledMessageBox variant="warning" contentEditable={false}>
55
55
  <InformationOutline />
56
56
  <Disclaimer>
@@ -7,8 +7,8 @@
7
7
  */
8
8
 
9
9
  import { useTranslation } from "react-i18next";
10
- import { ButtonV2 } from "@ndla/button";
11
10
  import { HumanMaleBoard, LogIn } from "@ndla/icons/common";
11
+ import { Button } from "@ndla/primitives";
12
12
  import { styled } from "@ndla/styled-system/jsx";
13
13
  import ErrorMessage from "./ErrorMessage";
14
14
 
@@ -34,12 +34,12 @@ const ErrorResourceAccessDenied = ({ onAuthenticateClick }: Props) => {
34
34
  }}
35
35
  illustrationElement={<HumanMaleBoard size="medium" />}
36
36
  customElement={
37
- <ButtonV2 size="medium" onClick={onAuthenticateClick}>
37
+ <Button onClick={onAuthenticateClick}>
38
38
  {t("user.buttonLogIn")}
39
39
  <StyledLogInIconWrapper aria-hidden>
40
40
  <LogIn size="medium" />
41
41
  </StyledLogInIconWrapper>
42
- </ButtonV2>
42
+ </Button>
43
43
  }
44
44
  />
45
45
  );
@@ -132,7 +132,7 @@ const FactBox = forwardRef<HTMLElement, Props>(
132
132
  }, [state, onOpenChange]);
133
133
 
134
134
  return (
135
- <StyledAside data-state={state} {...rest} ref={ref}>
135
+ <StyledAside data-state={state} data-embed-type="factbox" {...rest} ref={ref}>
136
136
  <StyledIconButton
137
137
  data-state={state}
138
138
  onClick={onClick}
@@ -82,7 +82,7 @@ const LinkBlock = ({ title, articleLanguage, date, url, path }: Props) => {
82
82
  return format(new Date(date), "dd. LLLL yyyy", { locale });
83
83
  }, [date, articleLanguage]);
84
84
  return (
85
- <StyledSafeLink to={href}>
85
+ <StyledSafeLink to={href} data-embed-type="link-block">
86
86
  <InfoWrapper>
87
87
  <Heading asChild consumeCss textStyle="title.medium">
88
88
  <h3 data-heading>{parse(title)}</h3>
@@ -34,7 +34,7 @@ export const RelatedArticle = ({
34
34
  type = contentTypes.SUBJECT_MATERIAL,
35
35
  }: RelatedArticleProps) => {
36
36
  return (
37
- <CardRoot>
37
+ <CardRoot data-embed-type="related-article">
38
38
  <CardContent>
39
39
  <ContentTypeBadge contentType={type} />
40
40
  <CardHeading asChild consumeCss>
@@ -119,7 +119,7 @@ export const RelatedArticleList = ({
119
119
  );
120
120
 
121
121
  return (
122
- <StyledSection {...rest}>
122
+ <StyledSection {...rest} data-embed-type="related-content-list">
123
123
  <HeadingWrapper>
124
124
  <Heading asChild consumeCss textStyle="title.large" fontWeight="bold">
125
125
  <HeadingElement>{t("related.title")}</HeadingElement>
@@ -11,7 +11,6 @@ import { useTranslation } from "react-i18next";
11
11
  import styled from "@emotion/styled";
12
12
  import { ButtonV2 as Button } from "@ndla/button";
13
13
  import { Plus } from "@ndla/icons/action";
14
- import { Tooltip } from "@ndla/tooltip";
15
14
  import { IFolder } from "@ndla/types-backend/myndla-api";
16
15
 
17
16
  interface AddFolderButtonProps {
@@ -49,32 +48,31 @@ const AddFolderButton = ({
49
48
  ? t("myNdla.newFolderUnder", { folderName: focusedFolder?.name })
50
49
  : t("treeStructure.maxFoldersAlreadyAdded");
51
50
  return (
52
- <Tooltip tooltip={tooltip}>
53
- <StyledAddFolderButton
54
- ref={ref}
55
- variant="outline"
56
- shape="pill"
57
- disabled={loading || !canAddFolder}
58
- aria-label={tooltip}
59
- onMouseDown={(e) => {
60
- e.preventDefault();
61
- e.stopPropagation();
62
- ref.current?.focus();
63
- }}
64
- onMouseUp={(e) => {
65
- e.preventDefault();
66
- e.stopPropagation();
67
- ref.current?.focus();
68
- }}
69
- onClick={(e) => {
70
- e.currentTarget.focus();
71
- setNewFolderParentId(focusedFolder?.id);
72
- setShowTree(true);
73
- }}
74
- >
75
- <StyledPlus /> {t("myNdla.newFolder")}
76
- </StyledAddFolderButton>
77
- </Tooltip>
51
+ <StyledAddFolderButton
52
+ ref={ref}
53
+ variant="outline"
54
+ shape="pill"
55
+ disabled={loading || !canAddFolder}
56
+ title={tooltip}
57
+ aria-label={tooltip}
58
+ onMouseDown={(e) => {
59
+ e.preventDefault();
60
+ e.stopPropagation();
61
+ ref.current?.focus();
62
+ }}
63
+ onMouseUp={(e) => {
64
+ e.preventDefault();
65
+ e.stopPropagation();
66
+ ref.current?.focus();
67
+ }}
68
+ onClick={(e) => {
69
+ e.currentTarget.focus();
70
+ setNewFolderParentId(focusedFolder?.id);
71
+ setShowTree(true);
72
+ }}
73
+ >
74
+ <StyledPlus /> {t("myNdla.newFolder")}
75
+ </StyledAddFolderButton>
78
76
  );
79
77
  };
80
78
 
@@ -13,10 +13,10 @@ import styled from "@emotion/styled";
13
13
  import { Meta, StoryFn } from "@storybook/react";
14
14
  import { IconButtonV2 } from "@ndla/button";
15
15
  import { spacing } from "@ndla/core";
16
- import { FieldErrorMessage, FieldHelper, FormControl, InputContainer, InputV3, Label } from "@ndla/forms";
17
16
  import { Spinner } from "@ndla/icons";
18
17
  import { Cross } from "@ndla/icons/action";
19
18
  import { Done } from "@ndla/icons/editor";
19
+ import { FieldErrorMessage, FieldLabel, FieldRoot, InputContainer, FieldHelper, FieldInput } from "@ndla/primitives";
20
20
  import { IFolder } from "@ndla/types-backend/myndla-api";
21
21
  import { uuid } from "@ndla/util";
22
22
  import { flattenFolders } from "./helperFunctions";
@@ -253,11 +253,11 @@ const NewFolder = ({ parentId, onClose, structure, setStructure, onCreate }: New
253
253
  }, [name]);
254
254
 
255
255
  return (
256
- <FormControl id="folder-name" isRequired isInvalid={!!error}>
257
- <Label visuallyHidden>Mine mapper</Label>
256
+ <FieldRoot required invalid={!!error}>
257
+ <FieldLabel srOnly>Mine mapper</FieldLabel>
258
258
  <FieldErrorMessage>{error}</FieldErrorMessage>
259
259
  <InputContainer>
260
- <InputV3
260
+ <FieldInput
261
261
  autoComplete="off"
262
262
  disabled={loading}
263
263
  ref={inputRef}
@@ -307,6 +307,6 @@ const NewFolder = ({ parentId, onClose, structure, setStructure, onCreate }: New
307
307
  )}
308
308
  </Row>
309
309
  </InputContainer>
310
- </FormControl>
310
+ </FieldRoot>
311
311
  );
312
312
  };