@bbl-digital/snorre 4.0.7 → 4.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. package/dist/bundle.js +109 -15
  2. package/esm/core/Alert/Alert.stories.js +17 -17
  3. package/esm/core/Alert/index.js +32 -2
  4. package/esm/core/AppLoader/AppLoader.stories.js +2 -3
  5. package/esm/core/AppLoader/index.js +9 -1
  6. package/esm/core/Banner/Banner.stories.js +26 -18
  7. package/esm/core/Banner/index.js +4 -1
  8. package/esm/core/Modal/Modal.stories.js +56 -39
  9. package/esm/core/Modal/index.js +29 -1
  10. package/esm/core/Tag/Tag.stories.js +72 -71
  11. package/esm/core/Tag/index.js +4 -0
  12. package/esm/index.js +2 -1
  13. package/esm/shared/components/VisuallyHidden/index.js +22 -0
  14. package/lib/core/Alert/Alert.stories.d.ts +10 -23
  15. package/lib/core/Alert/Alert.stories.d.ts.map +1 -1
  16. package/lib/core/Alert/Alert.stories.js +17 -17
  17. package/lib/core/Alert/index.d.ts +2 -1
  18. package/lib/core/Alert/index.d.ts.map +1 -1
  19. package/lib/core/Alert/index.js +32 -2
  20. package/lib/core/AppLoader/AppLoader.stories.d.ts +6 -7
  21. package/lib/core/AppLoader/AppLoader.stories.d.ts.map +1 -1
  22. package/lib/core/AppLoader/AppLoader.stories.js +2 -3
  23. package/lib/core/AppLoader/index.d.ts +2 -1
  24. package/lib/core/AppLoader/index.d.ts.map +1 -1
  25. package/lib/core/AppLoader/index.js +9 -1
  26. package/lib/core/Autocomplete/styles.d.ts +26 -1
  27. package/lib/core/Autocomplete/styles.d.ts.map +1 -1
  28. package/lib/core/Banner/Banner.stories.d.ts +10 -23
  29. package/lib/core/Banner/Banner.stories.d.ts.map +1 -1
  30. package/lib/core/Banner/Banner.stories.js +26 -18
  31. package/lib/core/Banner/index.d.ts +2 -1
  32. package/lib/core/Banner/index.d.ts.map +1 -1
  33. package/lib/core/Banner/index.js +4 -1
  34. package/lib/core/Box/styles.d.ts +25 -1
  35. package/lib/core/Box/styles.d.ts.map +1 -1
  36. package/lib/core/CollapseList/styles.d.ts +26 -1
  37. package/lib/core/CollapseList/styles.d.ts.map +1 -1
  38. package/lib/core/FileInput/styles.d.ts +25 -1
  39. package/lib/core/FileInput/styles.d.ts.map +1 -1
  40. package/lib/core/InfoButton/styles.d.ts +25 -1
  41. package/lib/core/InfoButton/styles.d.ts.map +1 -1
  42. package/lib/core/Modal/Modal.stories.d.ts +11 -23
  43. package/lib/core/Modal/Modal.stories.d.ts.map +1 -1
  44. package/lib/core/Modal/Modal.stories.js +56 -39
  45. package/lib/core/Modal/index.d.ts +3 -2
  46. package/lib/core/Modal/index.d.ts.map +1 -1
  47. package/lib/core/Modal/index.js +29 -1
  48. package/lib/core/Tag/Tag.stories.d.ts +19 -59
  49. package/lib/core/Tag/Tag.stories.d.ts.map +1 -1
  50. package/lib/core/Tag/Tag.stories.js +72 -71
  51. package/lib/core/Tag/index.d.ts +2 -0
  52. package/lib/core/Tag/index.d.ts.map +1 -1
  53. package/lib/core/Tag/index.js +4 -0
  54. package/lib/core/private/ButtonOrLink.d.ts +2 -1
  55. package/lib/core/private/ButtonOrLink.d.ts.map +1 -1
  56. package/lib/index.d.ts +2 -1
  57. package/lib/index.d.ts.map +1 -1
  58. package/lib/index.js +2 -1
  59. package/lib/layout/Footer/FooterButton/styles.d.ts +26 -1
  60. package/lib/layout/Footer/FooterButton/styles.d.ts.map +1 -1
  61. package/lib/layout/Footer/FooterLink/styles.d.ts +26 -1
  62. package/lib/layout/Footer/FooterLink/styles.d.ts.map +1 -1
  63. package/lib/layout/Menu/MenuTop/styles.d.ts +25 -1
  64. package/lib/layout/Menu/MenuTop/styles.d.ts.map +1 -1
  65. package/lib/shared/components/VisuallyHidden/index.d.ts +11 -0
  66. package/lib/shared/components/VisuallyHidden/index.d.ts.map +1 -0
  67. package/lib/shared/components/VisuallyHidden/index.js +22 -0
  68. package/lib/shared/types/Accessibility.d.ts +2 -2
  69. package/lib/shared/types/Accessibility.d.ts.map +1 -1
  70. package/package.json +1 -1
@@ -1,8 +1,9 @@
1
1
  /** @jsxImportSource @emotion/react */
2
- import React from 'react';
2
+ import React, { useRef } from 'react';
3
3
  import { styles } from './styles';
4
4
  import Button from '../Button';
5
5
  import IconClose from '../../icons/General/IconClose';
6
+ import VisuallyHidden from '../../shared/components/VisuallyHidden';
6
7
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
7
8
  import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
8
9
  const Alert = ({
@@ -14,17 +15,46 @@ const Alert = ({
14
15
  css,
15
16
  children,
16
17
  className,
17
- onClose
18
+ onClose,
19
+ ...restProps
18
20
  }) => {
21
+ const ariaLivePolicy = success ? 'polite' : 'assertive';
22
+ // Random id for aria-describedby
23
+ const id = Math.random().toString(36).substring(7);
24
+ const descriptionId = useRef(`aria-describedby-${id}`);
25
+ const childTextContent = React.Children.toArray(children).filter(child => typeof child === 'string');
26
+ const getDefaultAriaLabel = () => {
27
+ if (success) {
28
+ return 'Suksess';
29
+ }
30
+ if (danger) {
31
+ return 'Fare';
32
+ }
33
+ return 'Informasjon';
34
+ };
35
+ const accessibilityProps = {
36
+ role: restProps['role'] || 'alert',
37
+ 'aria-live': ariaLivePolicy,
38
+ 'aria-atomic': restProps['aria-atomic'] || true,
39
+ 'aria-label': restProps['aria-label'] || getDefaultAriaLabel(),
40
+ 'aria-relevant': restProps['aria-relevant'] || 'all',
41
+ 'aria-describedby': descriptionId.current
42
+ };
19
43
  return _jsxs("div", {
20
44
  css: theme => [styles.default(theme), success && styles.success(theme), info && styles.info(theme), danger && styles.danger(theme), rounded && styles.rounded, primary && styles.primary(theme), css && css],
21
45
  className: className,
46
+ ...restProps,
47
+ ...accessibilityProps,
22
48
  children: [children, onClose && _jsx(Button, {
23
49
  onClick: onClose,
24
50
  nostyle: true,
51
+ "aria-label": "Lukk",
25
52
  children: _jsx(IconClose, {
26
53
  size: 14
27
54
  })
55
+ }), _jsx(VisuallyHidden, {
56
+ id: descriptionId.current,
57
+ children: childTextContent
28
58
  })]
29
59
  });
30
60
  };
@@ -1,10 +1,9 @@
1
1
  import AppLoader from '.';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- export default {
2
+ const meta = {
4
3
  title: 'Core/AppLoader',
5
4
  component: AppLoader
6
5
  };
6
+ export default meta;
7
7
  export const Default = {
8
- render: () => /*#__PURE__*/_jsx(AppLoader, {}),
9
8
  name: 'Default'
10
9
  };
@@ -4,10 +4,18 @@ import { styles } from './styles';
4
4
  import { jsx as _jsx } from "@emotion/react/jsx-runtime";
5
5
  import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
6
6
  const AppLoader = ({
7
- color
7
+ color,
8
+ ...restProps
8
9
  }) => {
10
+ const accessibilityProps = {
11
+ role: restProps['role'] || 'status',
12
+ 'aria-live': restProps['aria-live'] || 'polite',
13
+ 'aria-label': restProps['aria-label'] || 'Laster innhold'
14
+ };
9
15
  return _jsxs("div", {
10
16
  css: theme => [styles.default(theme, color)],
17
+ ...restProps,
18
+ ...accessibilityProps,
11
19
  children: [_jsx("div", {}), _jsx("div", {}), _jsx("div", {}), _jsx("div", {})]
12
20
  });
13
21
  };
@@ -2,12 +2,13 @@ import Banner from '.';
2
2
  import Header from '../Header';
3
3
  import Button from '../Button';
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
- export default {
5
+ const meta = {
6
6
  title: 'Core/Banner',
7
7
  component: Banner
8
8
  };
9
+ export default meta;
9
10
  export const Default = {
10
- render: () => /*#__PURE__*/_jsx(Banner, {
11
+ args: {
11
12
  header: /*#__PURE__*/_jsx(Header, {
12
13
  level: 4,
13
14
  children: "Title"
@@ -16,53 +17,60 @@ export const Default = {
16
17
  onClick: () => console.log('Hello'),
17
18
  children: "Hello I am button"
18
19
  }),
19
- children: "Eu irure eiusmod amet tempor nisi veniam cupidatat duis nulla dolor. Eiusmod amet sit nostrud adipisicing qui pariatur do et duis fugiat magna laboris elit irure. Officia fugiat incididunt ipsum commodo quis aute qui reprehenderit reprehenderit fugiat. Voluptate quis tempor ea consequat."
20
- }),
20
+ children: /*#__PURE__*/_jsx("p", {
21
+ children: "Eu irure eiusmod amet tempor nisi veniam cupidatat duis nulla dolor. Eiusmod amet sit nostrud adipisicing qui pariatur do et duis fugiat magna laboris elit irure. Officia fugiat incididunt ipsum commodo quis aute qui reprehenderit reprehenderit fugiat. Voluptate quis tempor ea consequat."
22
+ })
23
+ },
21
24
  name: 'Default'
22
25
  };
23
26
  export const Success = {
24
- render: () => /*#__PURE__*/_jsx(Banner, {
27
+ args: {
25
28
  success: true,
26
29
  header: /*#__PURE__*/_jsx(Header, {
27
30
  level: 4,
28
31
  children: "Title"
29
32
  }),
30
- children: "Eu irure eiusmod amet tempor nisi veniam cupidatat duis nulla dolor. Eiusmod amet sit nostrud adipisicing qui pariatur do et duis fugiat magna laboris elit irure. Officia fugiat incididunt ipsum commodo quis aute qui reprehenderit reprehenderit fugiat. Voluptate quis tempor ea consequat."
31
- }),
33
+ children: /*#__PURE__*/_jsx("p", {
34
+ children: "Eu irure eiusmod amet tempor nisi veniam cupidatat duis nulla dolor. Eiusmod amet sit nostrud adipisicing qui pariatur do et duis fugiat magna laboris elit irure. Officia fugiat incididunt ipsum commodo quis aute qui reprehenderit reprehenderit fugiat. Voluptate quis tempor ea consequat."
35
+ })
36
+ },
32
37
  name: 'Success'
33
38
  };
34
39
  export const Info = {
35
- render: () => /*#__PURE__*/_jsx(Banner, {
40
+ args: {
36
41
  info: true,
37
42
  header: /*#__PURE__*/_jsx(Header, {
38
43
  level: 4,
39
44
  children: "Title"
40
45
  }),
41
- children: "Content"
42
- }),
43
- name: 'Info'
46
+ children: /*#__PURE__*/_jsx("p", {
47
+ children: "Eu irure eiusmod amet tempor nisi veniam cupidatat duis nulla dolor. Eiusmod amet sit nostrud adipisicing qui pariatur do et duis fugiat magna laboris elit irure. Officia fugiat incididunt ipsum commodo quis aute qui reprehenderit reprehenderit fugiat. Voluptate quis tempor ea consequat."
48
+ })
49
+ }
44
50
  };
45
51
  export const Danger = {
46
- render: () => /*#__PURE__*/_jsx(Banner, {
52
+ args: {
47
53
  danger: true,
48
54
  header: /*#__PURE__*/_jsx(Header, {
49
55
  level: 4,
50
56
  children: "Title"
51
57
  }),
52
- children: "Content"
53
- }),
58
+ children: /*#__PURE__*/_jsx("p", {
59
+ children: "Eu irure eiusmod amet tempor nisi veniam cupidatat duis nulla dolor. Eiusmod amet sit nostrud adipisicing qui pariatur do et duis fugiat magna laboris elit irure. Officia fugiat incididunt ipsum commodo quis aute qui reprehenderit reprehenderit fugiat. Voluptate quis tempor ea consequat."
60
+ })
61
+ },
54
62
  name: 'Danger'
55
63
  };
56
64
  export const WithoutChildren = {
57
- render: () => /*#__PURE__*/_jsx(Banner, {
65
+ args: {
58
66
  header: /*#__PURE__*/_jsx(Header, {
59
67
  level: 4,
60
- children: "Just a header"
68
+ children: "Title"
61
69
  }),
62
70
  actionButton: /*#__PURE__*/_jsx(Button, {
63
71
  onClick: () => console.log('Hello'),
64
- children: "And a button"
72
+ children: "Hello I am button"
65
73
  })
66
- }),
74
+ },
67
75
  name: 'Without children'
68
76
  };
@@ -10,15 +10,18 @@ const Banner = ({
10
10
  info,
11
11
  success,
12
12
  header,
13
- actionButton
13
+ actionButton,
14
+ ...restProps
14
15
  }) => {
15
16
  const isDefault = !success && !danger && !info;
16
17
  return _jsx(Alert, {
18
+ role: "banner",
17
19
  rounded: true,
18
20
  primary: isDefault,
19
21
  success: success,
20
22
  danger: danger,
21
23
  info: info,
24
+ ...restProps,
22
25
  children: _jsxs(Wrapper, {
23
26
  children: [_jsxs(LeftSide, {
24
27
  children: [header, children && _jsx(Content, {
@@ -2,22 +2,16 @@ import Header from '../Header';
2
2
  import Text from '../Text';
3
3
  import Button from '../Button';
4
4
  import Modal from '.';
5
+ import { Fragment } from 'react';
5
6
  import { jsx as _jsx } from "react/jsx-runtime";
6
7
  import { jsxs as _jsxs } from "react/jsx-runtime";
7
- export default {
8
+ const meta = {
8
9
  title: 'Core/Modal',
9
- component: Modal,
10
- parameters: {
11
- docs: {
12
- story: {
13
- inline: false,
14
- height: '500px'
15
- }
16
- }
17
- }
10
+ component: Modal
18
11
  };
12
+ export default meta;
19
13
  export const Default = {
20
- render: () => /*#__PURE__*/_jsx(Modal, {
14
+ args: {
21
15
  open: true,
22
16
  onClose: () => console.log('closed'),
23
17
  header: /*#__PURE__*/_jsx(Header, {
@@ -36,11 +30,11 @@ export const Default = {
36
30
  children: /*#__PURE__*/_jsx(Text, {
37
31
  children: "Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."
38
32
  })
39
- }),
33
+ },
40
34
  name: 'Default'
41
35
  };
42
36
  export const Collapse = {
43
- render: () => /*#__PURE__*/_jsx(Modal, {
37
+ args: {
44
38
  open: true,
45
39
  onClose: () => console.log('closed'),
46
40
  onCollapse: () => console.log('collapse'),
@@ -54,14 +48,13 @@ export const Collapse = {
54
48
  children: /*#__PURE__*/_jsx(Text, {
55
49
  children: "Hello there! I am Modal, i can be collapsed, but not in storybook though, it has to be done from parent"
56
50
  })
57
- }),
51
+ },
58
52
  name: 'Collapse'
59
53
  };
60
54
  export const Dynamic = {
61
- render: () => /*#__PURE__*/_jsx(Modal, {
55
+ args: {
62
56
  open: true,
63
57
  onClose: () => console.log('closed'),
64
- width: '600px',
65
58
  header: /*#__PURE__*/_jsx(Header, {
66
59
  level: 3,
67
60
  children: "Her kommer en header"
@@ -69,18 +62,17 @@ export const Dynamic = {
69
62
  actionButton: /*#__PURE__*/_jsx(Button, {
70
63
  children: "Save changes"
71
64
  }),
65
+ width: '600px',
72
66
  children: /*#__PURE__*/_jsx(Text, {
73
- children: "Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."
67
+ children: "Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."
74
68
  })
75
- }),
69
+ },
76
70
  name: 'Dynamic'
77
71
  };
78
72
  export const Scrollable = {
79
- render: () => /*#__PURE__*/_jsxs(Modal, {
73
+ args: {
80
74
  open: true,
81
75
  onClose: () => console.log('closed'),
82
- disableScrollableContent: false,
83
- width: '100%',
84
76
  header: /*#__PURE__*/_jsx(Header, {
85
77
  level: 3,
86
78
  children: "Scrollable modal"
@@ -88,30 +80,55 @@ export const Scrollable = {
88
80
  actionButton: /*#__PURE__*/_jsx(Button, {
89
81
  children: "Button is allways shown"
90
82
  }),
91
- children: [/*#__PURE__*/_jsxs(Text, {
92
- children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
93
- }), /*#__PURE__*/_jsxs(Text, {
94
- children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
95
- }), /*#__PURE__*/_jsxs(Text, {
96
- children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
97
- }), /*#__PURE__*/_jsxs(Text, {
98
- children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
99
- })]
100
- }),
83
+ disableScrollableContent: false,
84
+ width: '100%',
85
+ children: /*#__PURE__*/_jsxs(Fragment, {
86
+ children: [/*#__PURE__*/_jsxs(Text, {
87
+ children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
88
+ }), /*#__PURE__*/_jsxs(Text, {
89
+ children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
90
+ }), /*#__PURE__*/_jsxs(Text, {
91
+ children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
92
+ }), /*#__PURE__*/_jsxs(Text, {
93
+ children: ["Her kommer masse stuff. Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), "Her kommer masse stuff.", /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), /*#__PURE__*/_jsx("br", {}), "Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff.Her kommer masse stuff", /*#__PURE__*/_jsx("br", {}), ".Her kommer masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her", /*#__PURE__*/_jsx("br", {}), "kommer", /*#__PURE__*/_jsx("br", {}), "masse", /*#__PURE__*/_jsx("br", {}), "stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff.Her kommer masse stuff. Her kommer masse stuff. Her kommer masse stuff.Her kommer masse stuff."]
94
+ })]
95
+ })
96
+ },
101
97
  name: 'Scrollable'
102
98
  };
103
- export const Fullscreeen = {
104
- render: () => /*#__PURE__*/_jsx(Modal, {
99
+ export const Accessible = {
100
+ args: {
105
101
  open: true,
106
- toggleFullscreen: true,
107
102
  onClose: () => console.log('closed'),
108
103
  header: /*#__PURE__*/_jsx(Header, {
109
104
  level: 3,
110
- children: "With fullscreen"
105
+ children: "Accessible modal"
106
+ }),
107
+ actionButton: /*#__PURE__*/_jsx(Button, {
108
+ children: "Ok"
111
109
  }),
112
110
  children: /*#__PURE__*/_jsx(Text, {
113
- children: "Hello there! I am Modal, i can be be toggled for fullscreen"
114
- })
115
- }),
116
- name: 'Fullscreeen'
111
+ children: "With some content"
112
+ }),
113
+ 'aria-label': 'This has a custom label'
114
+ },
115
+ name: 'AccessibleModal'
116
+ };
117
+ export const Fullscreen = {
118
+ args: {
119
+ open: true,
120
+ onClose: () => console.log('closed'),
121
+ header: /*#__PURE__*/_jsx(Header, {
122
+ level: 3,
123
+ children: "Fullscreen modal"
124
+ }),
125
+ actionButton: /*#__PURE__*/_jsx(Button, {
126
+ children: "Ok"
127
+ }),
128
+ children: /*#__PURE__*/_jsx(Text, {
129
+ children: "With some content"
130
+ }),
131
+ toggleFullscreen: true
132
+ },
133
+ name: 'Fullscreen'
117
134
  };
@@ -28,13 +28,15 @@ function Modal({
28
28
  defaultFullscreen,
29
29
  disableFocusTrap,
30
30
  onClose,
31
- onCollapse
31
+ onCollapse,
32
+ ...restProps
32
33
  }) {
33
34
  const modalRef = /*#__PURE__*/createRef();
34
35
  const [isOpen, setOpen] = useState(open);
35
36
  const [headerHeight, setHeaderHeight] = useState(0);
36
37
  const [isFullscreen, setIsFullscreen] = useState(!!defaultFullscreen);
37
38
  const hasCollapse = Boolean(onCollapse);
39
+ const headerText = header && header?.props?.children || '';
38
40
  const setClose = () => {
39
41
  enableBodyScroll(modalRef.current);
40
42
  if (!disableLocalClose) setOpen(false);
@@ -42,11 +44,21 @@ function Modal({
42
44
  onClose();
43
45
  }
44
46
  };
47
+
48
+ // Capture escape
49
+ const handleKeyDown = useCallback(event => {
50
+ if (event.key === 'Escape') {
51
+ setClose();
52
+ }
53
+ }, [setClose]);
45
54
  const handleHeaderRef = useCallback(node => {
46
55
  setHeaderHeight(node?.clientHeight);
47
56
  }, []);
48
57
  useEffect(() => {
49
58
  if (!modalRef.current) return;
59
+ if (isOpen) {
60
+ modalRef.current.focus();
61
+ }
50
62
  if (isOpen && disableScroll) {
51
63
  disableBodyScroll(modalRef.current);
52
64
  if (targetRefs && targetRefs.length > 0) {
@@ -63,6 +75,12 @@ function Modal({
63
75
  clearAllBodyScrollLocks();
64
76
  };
65
77
  });
78
+ useEffect(() => {
79
+ document.addEventListener('keydown', handleKeyDown);
80
+ return () => {
81
+ document.removeEventListener('keydown', handleKeyDown);
82
+ };
83
+ });
66
84
  const onOutsideClick = () => {
67
85
  if (disableOutsideClick) return;
68
86
  setClose();
@@ -75,20 +93,28 @@ function Modal({
75
93
  children: _jsx(Overlay, {
76
94
  onClick: onOutsideClick,
77
95
  children: _jsxs(Content, {
96
+ role: "dialog",
97
+ "aria-modal": "true",
98
+ "aria-label": restProps['aria-label'] ?? header ? headerText.toString() : 'Modal',
78
99
  width: width,
79
100
  isFullscreen: isFullscreen,
80
101
  canToggleFullscreen: !!toggleFullscreen,
81
102
  onClick: e => e.stopPropagation(),
103
+ ...restProps,
82
104
  children: [(!hideCloseButton || hasCollapse || toggleFullscreen) && _jsxs(CloseWrapper, {
83
105
  children: [hasCollapse && _jsx(Button, {
84
106
  nostyle: true,
85
107
  onClick: onCollapse,
86
108
  focusable: true,
109
+ "aria-label": hasCollapse && 'Minimer',
110
+ title: "Minimer",
87
111
  children: _jsx(IconMinus, {})
88
112
  }), toggleFullscreen && _jsx(Button, {
89
113
  nostyle: true,
90
114
  onClick: () => setIsFullscreen(!isFullscreen),
91
115
  focusable: true,
116
+ "aria-label": isFullscreen ? 'Lukk fullskjerm' : 'Fullskjerm',
117
+ title: isFullscreen ? 'Lukk fullskjerm' : 'Fullskjerm',
92
118
  children: isFullscreen ? _jsx(IconFullscreenClose, {
93
119
  size: "20px"
94
120
  }) : _jsx(IconFullscreenOpen, {
@@ -98,6 +124,8 @@ function Modal({
98
124
  nostyle: true,
99
125
  onClick: setClose,
100
126
  focusable: true,
127
+ "aria-label": "Lukk",
128
+ title: "Lukk",
101
129
  children: _jsx(IconClose, {})
102
130
  })]
103
131
  }), _jsx(HeaderWrapper, {
@@ -1,112 +1,113 @@
1
1
  import Tag from '.';
2
2
  import IconComment from '../../icons/General/IconComment';
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
- export default {
4
+ const meta = {
5
5
  title: 'Core/Tag',
6
6
  component: Tag
7
7
  };
8
+ export default meta;
8
9
  export const Default = {
9
- render: () => /*#__PURE__*/_jsx(Tag, {
10
- children: "Here"
11
- }),
12
- name: 'Default'
10
+ name: 'Default',
11
+ args: {
12
+ children: 'Here'
13
+ }
13
14
  };
14
15
  export const Neutral = {
15
- render: () => /*#__PURE__*/_jsx(Tag, {
16
- neutral: true,
17
- children: "Here"
18
- }),
19
- name: 'Neutral'
16
+ name: 'Neutral',
17
+ args: {
18
+ children: 'Here',
19
+ neutral: true
20
+ }
20
21
  };
21
22
  export const Success = {
22
- render: () => /*#__PURE__*/_jsx(Tag, {
23
- success: true,
24
- children: "Here"
25
- }),
26
- name: 'Success'
23
+ name: 'Success',
24
+ args: {
25
+ children: 'here',
26
+ success: true
27
+ }
27
28
  };
28
29
  export const Info = {
29
- render: () => /*#__PURE__*/_jsx(Tag, {
30
- info: true,
31
- children: "Here"
32
- }),
33
- name: 'Info'
30
+ name: 'Info',
31
+ args: {
32
+ children: 'here',
33
+ info: true
34
+ }
34
35
  };
35
36
  export const Danger = {
36
- render: () => /*#__PURE__*/_jsx(Tag, {
37
- danger: true,
38
- children: "Here"
39
- }),
40
- name: 'Danger'
37
+ name: 'Danger',
38
+ args: {
39
+ children: 'here',
40
+ danger: true
41
+ }
41
42
  };
42
43
  export const Dark = {
43
- render: () => /*#__PURE__*/_jsx(Tag, {
44
- dark: true,
45
- children: "Here"
46
- }),
47
- name: 'Dark'
44
+ name: 'Dark',
45
+ args: {
46
+ children: 'here',
47
+ dark: true
48
+ }
48
49
  };
49
50
  export const Light = {
50
- render: () => /*#__PURE__*/_jsx(Tag, {
51
- light: true,
52
- children: "Here"
53
- }),
54
- name: 'Light'
51
+ name: 'Light',
52
+ args: {
53
+ children: 'here',
54
+ light: true
55
+ }
55
56
  };
56
57
  export const Outline = {
57
- render: () => /*#__PURE__*/_jsx(Tag, {
58
- outline: true,
59
- children: "There"
60
- }),
61
- name: 'Outline'
58
+ name: 'Outline',
59
+ args: {
60
+ children: 'here',
61
+ outline: true
62
+ }
62
63
  };
63
64
  export const TagWithClose = {
64
- render: () => /*#__PURE__*/_jsx(Tag, {
65
+ name: 'Tag with close',
66
+ args: {
67
+ children: 'Click me',
65
68
  withclose: true,
66
- onClick: () => console.log('close'),
67
- children: "Here"
68
- }),
69
- name: 'Tag with close'
69
+ onClick: () => console.log('close')
70
+ }
70
71
  };
71
72
  export const TagWithLoading = {
72
- render: () => /*#__PURE__*/_jsx(Tag, {
73
- loading: true,
74
- children: "Here"
75
- }),
76
- name: 'Tag with loading'
73
+ name: 'Tag with loading',
74
+ args: {
75
+ children: 'Here',
76
+ loading: true
77
+ }
77
78
  };
78
79
  export const TagWithCloseAndStrictClick = {
79
- render: () => /*#__PURE__*/_jsx(Tag, {
80
+ name: 'Tag with close and strict click',
81
+ args: {
82
+ children: 'Have to close by clicking the "x"',
80
83
  strictClose: true,
81
- onClick: () => console.log('close'),
82
- children: "Here"
83
- }),
84
- name: 'Tag with close and strict click'
84
+ onClick: () => console.log('close')
85
+ }
85
86
  };
86
87
  export const TagWithCloseLoadingAndStrictClick = {
87
- render: () => /*#__PURE__*/_jsx(Tag, {
88
+ name: 'Tag with close, loading and strict click',
89
+ args: {
90
+ children: 'With loading',
88
91
  strictClose: true,
89
92
  loading: true,
90
- onClick: () => console.log('close'),
91
- children: "Here"
92
- }),
93
- name: 'Tag with close, loading and strict click'
93
+ onClick: () => console.log('close')
94
+ }
94
95
  };
95
96
  export const TagWithCloseAndStrictClickWithColor = {
96
- render: () => /*#__PURE__*/_jsx(Tag, {
97
+ name: 'Tag with close and strict click with color',
98
+ args: {
99
+ children: 'With custom close color',
97
100
  strictClose: true,
98
- closeColor: "red",
99
- onClick: () => console.log('close'),
100
- children: "Here"
101
- }),
102
- name: 'Tag with close and strict click with color'
101
+ closeColor: 'red',
102
+ onClick: () => console.log('close')
103
+ }
103
104
  };
104
105
  export const WithIcon = {
105
- render: () => /*#__PURE__*/_jsx(Tag, {
106
+ name: 'With icon',
107
+ args: {
108
+ children: '3',
106
109
  icon: /*#__PURE__*/_jsx(IconComment, {
107
110
  size: 14
108
- }),
109
- children: "3"
110
- }),
111
- name: 'With icon'
111
+ })
112
+ }
112
113
  };