@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.
- package/dist/bundle.js +109 -15
- package/esm/core/Alert/Alert.stories.js +17 -17
- package/esm/core/Alert/index.js +32 -2
- package/esm/core/AppLoader/AppLoader.stories.js +2 -3
- package/esm/core/AppLoader/index.js +9 -1
- package/esm/core/Banner/Banner.stories.js +26 -18
- package/esm/core/Banner/index.js +4 -1
- package/esm/core/Modal/Modal.stories.js +56 -39
- package/esm/core/Modal/index.js +29 -1
- package/esm/core/Tag/Tag.stories.js +72 -71
- package/esm/core/Tag/index.js +4 -0
- package/esm/index.js +2 -1
- package/esm/shared/components/VisuallyHidden/index.js +22 -0
- package/lib/core/Alert/Alert.stories.d.ts +10 -23
- package/lib/core/Alert/Alert.stories.d.ts.map +1 -1
- package/lib/core/Alert/Alert.stories.js +17 -17
- package/lib/core/Alert/index.d.ts +2 -1
- package/lib/core/Alert/index.d.ts.map +1 -1
- package/lib/core/Alert/index.js +32 -2
- package/lib/core/AppLoader/AppLoader.stories.d.ts +6 -7
- package/lib/core/AppLoader/AppLoader.stories.d.ts.map +1 -1
- package/lib/core/AppLoader/AppLoader.stories.js +2 -3
- package/lib/core/AppLoader/index.d.ts +2 -1
- package/lib/core/AppLoader/index.d.ts.map +1 -1
- package/lib/core/AppLoader/index.js +9 -1
- package/lib/core/Autocomplete/styles.d.ts +26 -1
- package/lib/core/Autocomplete/styles.d.ts.map +1 -1
- package/lib/core/Banner/Banner.stories.d.ts +10 -23
- package/lib/core/Banner/Banner.stories.d.ts.map +1 -1
- package/lib/core/Banner/Banner.stories.js +26 -18
- package/lib/core/Banner/index.d.ts +2 -1
- package/lib/core/Banner/index.d.ts.map +1 -1
- package/lib/core/Banner/index.js +4 -1
- package/lib/core/Box/styles.d.ts +25 -1
- package/lib/core/Box/styles.d.ts.map +1 -1
- package/lib/core/CollapseList/styles.d.ts +26 -1
- package/lib/core/CollapseList/styles.d.ts.map +1 -1
- package/lib/core/FileInput/styles.d.ts +25 -1
- package/lib/core/FileInput/styles.d.ts.map +1 -1
- package/lib/core/InfoButton/styles.d.ts +25 -1
- package/lib/core/InfoButton/styles.d.ts.map +1 -1
- package/lib/core/Modal/Modal.stories.d.ts +11 -23
- package/lib/core/Modal/Modal.stories.d.ts.map +1 -1
- package/lib/core/Modal/Modal.stories.js +56 -39
- package/lib/core/Modal/index.d.ts +3 -2
- package/lib/core/Modal/index.d.ts.map +1 -1
- package/lib/core/Modal/index.js +29 -1
- package/lib/core/Tag/Tag.stories.d.ts +19 -59
- package/lib/core/Tag/Tag.stories.d.ts.map +1 -1
- package/lib/core/Tag/Tag.stories.js +72 -71
- package/lib/core/Tag/index.d.ts +2 -0
- package/lib/core/Tag/index.d.ts.map +1 -1
- package/lib/core/Tag/index.js +4 -0
- package/lib/core/private/ButtonOrLink.d.ts +2 -1
- package/lib/core/private/ButtonOrLink.d.ts.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/layout/Footer/FooterButton/styles.d.ts +26 -1
- package/lib/layout/Footer/FooterButton/styles.d.ts.map +1 -1
- package/lib/layout/Footer/FooterLink/styles.d.ts +26 -1
- package/lib/layout/Footer/FooterLink/styles.d.ts.map +1 -1
- package/lib/layout/Menu/MenuTop/styles.d.ts +25 -1
- package/lib/layout/Menu/MenuTop/styles.d.ts.map +1 -1
- package/lib/shared/components/VisuallyHidden/index.d.ts +11 -0
- package/lib/shared/components/VisuallyHidden/index.d.ts.map +1 -0
- package/lib/shared/components/VisuallyHidden/index.js +22 -0
- package/lib/shared/types/Accessibility.d.ts +2 -2
- package/lib/shared/types/Accessibility.d.ts.map +1 -1
- package/package.json +1 -1
package/esm/core/Alert/index.js
CHANGED
@@ -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
|
-
|
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
|
-
|
5
|
+
const meta = {
|
6
6
|
title: 'Core/Banner',
|
7
7
|
component: Banner
|
8
8
|
};
|
9
|
+
export default meta;
|
9
10
|
export const Default = {
|
10
|
-
|
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: "
|
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
|
-
|
27
|
+
args: {
|
25
28
|
success: true,
|
26
29
|
header: /*#__PURE__*/_jsx(Header, {
|
27
30
|
level: 4,
|
28
31
|
children: "Title"
|
29
32
|
}),
|
30
|
-
children: "
|
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
|
-
|
40
|
+
args: {
|
36
41
|
info: true,
|
37
42
|
header: /*#__PURE__*/_jsx(Header, {
|
38
43
|
level: 4,
|
39
44
|
children: "Title"
|
40
45
|
}),
|
41
|
-
children: "
|
42
|
-
|
43
|
-
|
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
|
-
|
52
|
+
args: {
|
47
53
|
danger: true,
|
48
54
|
header: /*#__PURE__*/_jsx(Header, {
|
49
55
|
level: 4,
|
50
56
|
children: "Title"
|
51
57
|
}),
|
52
|
-
children: "
|
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
|
-
|
65
|
+
args: {
|
58
66
|
header: /*#__PURE__*/_jsx(Header, {
|
59
67
|
level: 4,
|
60
|
-
children: "
|
68
|
+
children: "Title"
|
61
69
|
}),
|
62
70
|
actionButton: /*#__PURE__*/_jsx(Button, {
|
63
71
|
onClick: () => console.log('Hello'),
|
64
|
-
children: "
|
72
|
+
children: "Hello I am button"
|
65
73
|
})
|
66
|
-
}
|
74
|
+
},
|
67
75
|
name: 'Without children'
|
68
76
|
};
|
package/esm/core/Banner/index.js
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
children: [
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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
|
104
|
-
|
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: "
|
105
|
+
children: "Accessible modal"
|
106
|
+
}),
|
107
|
+
actionButton: /*#__PURE__*/_jsx(Button, {
|
108
|
+
children: "Ok"
|
111
109
|
}),
|
112
110
|
children: /*#__PURE__*/_jsx(Text, {
|
113
|
-
children: "
|
114
|
-
})
|
115
|
-
|
116
|
-
|
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
|
};
|
package/esm/core/Modal/index.js
CHANGED
@@ -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
|
-
|
4
|
+
const meta = {
|
5
5
|
title: 'Core/Tag',
|
6
6
|
component: Tag
|
7
7
|
};
|
8
|
+
export default meta;
|
8
9
|
export const Default = {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
name: 'Default',
|
11
|
+
args: {
|
12
|
+
children: 'Here'
|
13
|
+
}
|
13
14
|
};
|
14
15
|
export const Neutral = {
|
15
|
-
|
16
|
-
|
17
|
-
children:
|
18
|
-
|
19
|
-
|
16
|
+
name: 'Neutral',
|
17
|
+
args: {
|
18
|
+
children: 'Here',
|
19
|
+
neutral: true
|
20
|
+
}
|
20
21
|
};
|
21
22
|
export const Success = {
|
22
|
-
|
23
|
-
|
24
|
-
children:
|
25
|
-
|
26
|
-
|
23
|
+
name: 'Success',
|
24
|
+
args: {
|
25
|
+
children: 'here',
|
26
|
+
success: true
|
27
|
+
}
|
27
28
|
};
|
28
29
|
export const Info = {
|
29
|
-
|
30
|
-
|
31
|
-
children:
|
32
|
-
|
33
|
-
|
30
|
+
name: 'Info',
|
31
|
+
args: {
|
32
|
+
children: 'here',
|
33
|
+
info: true
|
34
|
+
}
|
34
35
|
};
|
35
36
|
export const Danger = {
|
36
|
-
|
37
|
-
|
38
|
-
children:
|
39
|
-
|
40
|
-
|
37
|
+
name: 'Danger',
|
38
|
+
args: {
|
39
|
+
children: 'here',
|
40
|
+
danger: true
|
41
|
+
}
|
41
42
|
};
|
42
43
|
export const Dark = {
|
43
|
-
|
44
|
-
|
45
|
-
children:
|
46
|
-
|
47
|
-
|
44
|
+
name: 'Dark',
|
45
|
+
args: {
|
46
|
+
children: 'here',
|
47
|
+
dark: true
|
48
|
+
}
|
48
49
|
};
|
49
50
|
export const Light = {
|
50
|
-
|
51
|
-
|
52
|
-
children:
|
53
|
-
|
54
|
-
|
51
|
+
name: 'Light',
|
52
|
+
args: {
|
53
|
+
children: 'here',
|
54
|
+
light: true
|
55
|
+
}
|
55
56
|
};
|
56
57
|
export const Outline = {
|
57
|
-
|
58
|
-
|
59
|
-
children:
|
60
|
-
|
61
|
-
|
58
|
+
name: 'Outline',
|
59
|
+
args: {
|
60
|
+
children: 'here',
|
61
|
+
outline: true
|
62
|
+
}
|
62
63
|
};
|
63
64
|
export const TagWithClose = {
|
64
|
-
|
65
|
+
name: 'Tag with close',
|
66
|
+
args: {
|
67
|
+
children: 'Click me',
|
65
68
|
withclose: true,
|
66
|
-
onClick: () => console.log('close')
|
67
|
-
|
68
|
-
}),
|
69
|
-
name: 'Tag with close'
|
69
|
+
onClick: () => console.log('close')
|
70
|
+
}
|
70
71
|
};
|
71
72
|
export const TagWithLoading = {
|
72
|
-
|
73
|
-
|
74
|
-
children:
|
75
|
-
|
76
|
-
|
73
|
+
name: 'Tag with loading',
|
74
|
+
args: {
|
75
|
+
children: 'Here',
|
76
|
+
loading: true
|
77
|
+
}
|
77
78
|
};
|
78
79
|
export const TagWithCloseAndStrictClick = {
|
79
|
-
|
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
|
-
|
83
|
-
}),
|
84
|
-
name: 'Tag with close and strict click'
|
84
|
+
onClick: () => console.log('close')
|
85
|
+
}
|
85
86
|
};
|
86
87
|
export const TagWithCloseLoadingAndStrictClick = {
|
87
|
-
|
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
|
-
|
92
|
-
}),
|
93
|
-
name: 'Tag with close, loading and strict click'
|
93
|
+
onClick: () => console.log('close')
|
94
|
+
}
|
94
95
|
};
|
95
96
|
export const TagWithCloseAndStrictClickWithColor = {
|
96
|
-
|
97
|
+
name: 'Tag with close and strict click with color',
|
98
|
+
args: {
|
99
|
+
children: 'With custom close color',
|
97
100
|
strictClose: true,
|
98
|
-
closeColor:
|
99
|
-
onClick: () => console.log('close')
|
100
|
-
|
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
|
-
|
106
|
+
name: 'With icon',
|
107
|
+
args: {
|
108
|
+
children: '3',
|
106
109
|
icon: /*#__PURE__*/_jsx(IconComment, {
|
107
110
|
size: 14
|
108
|
-
})
|
109
|
-
|
110
|
-
}),
|
111
|
-
name: 'With icon'
|
111
|
+
})
|
112
|
+
}
|
112
113
|
};
|