@entur/modal 1.7.73-beta.8 → 1.7.73
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.
- package/dist/index.d.ts +189 -5
- package/dist/modal.cjs.js +165 -0
- package/dist/modal.cjs.js.map +1 -0
- package/dist/modal.esm.js +142 -150
- package/dist/modal.esm.js.map +1 -1
- package/dist/styles.css +143 -146
- package/package.json +29 -19
- package/dist/Drawer.d.ts +0 -29
- package/dist/Modal.d.ts +0 -28
- package/dist/ModalContent.d.ts +0 -24
- package/dist/ModalOverlay.d.ts +0 -15
- package/dist/index.js +0 -8
- package/dist/modal.cjs.development.js +0 -181
- package/dist/modal.cjs.development.js.map +0 -1
- package/dist/modal.cjs.production.min.js +0 -2
- package/dist/modal.cjs.production.min.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,189 @@
|
|
|
1
|
-
import '
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { default as default_2 } from 'react';
|
|
2
|
+
|
|
3
|
+
declare type AsProp<C extends default_2.ElementType> = {
|
|
4
|
+
/**
|
|
5
|
+
* An override of the default HTML tag.
|
|
6
|
+
* Can also be another React component.
|
|
7
|
+
*/
|
|
8
|
+
as?: C;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
declare const defaultElement_4 = "h2";
|
|
12
|
+
|
|
13
|
+
declare const defaultElement_5 = "h3";
|
|
14
|
+
|
|
15
|
+
declare const defaultElement_6 = "h4";
|
|
16
|
+
|
|
17
|
+
export declare const Drawer: default_2.FC<DrawerProps>;
|
|
18
|
+
|
|
19
|
+
export declare type DrawerProps = {
|
|
20
|
+
/** Innholdet. Typisk tekst, lenker eller knapper */
|
|
21
|
+
children: default_2.ReactNode;
|
|
22
|
+
/** Ekstra klassenavn */
|
|
23
|
+
className?: string;
|
|
24
|
+
/** Tekst som beskriver lukkeknappen for skjermlesere
|
|
25
|
+
* @default 'Lukk skuff'
|
|
26
|
+
*/
|
|
27
|
+
closeLabel?: string;
|
|
28
|
+
/** Om draweren skal vises i mørk variant
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
contrast?: boolean;
|
|
32
|
+
/** Callback som kalles når brukeren ønsker å lukke draweren */
|
|
33
|
+
onDismiss: () => void;
|
|
34
|
+
/** Om draweren er åpen eller ikke
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
open?: boolean;
|
|
38
|
+
/** Tittel på toppen av draweren */
|
|
39
|
+
title: string;
|
|
40
|
+
/** Styling som sendes til Drawer */
|
|
41
|
+
style?: default_2.CSSProperties;
|
|
42
|
+
/** Legger på et overlay over resten av siden */
|
|
43
|
+
overlay?: boolean;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Allows for extending a set of props (`ExtendedProps`) by an overriding set of props
|
|
48
|
+
* (`OverrideProps`), ensuring that any duplicates are overridden by the overriding
|
|
49
|
+
* set of props.
|
|
50
|
+
*/
|
|
51
|
+
declare type ExtendableProps<ExtendedProps = Record<string, unknown>, OverrideProps = Record<string, unknown>> = OverrideProps & Omit<ExtendedProps, keyof OverrideProps>;
|
|
52
|
+
|
|
53
|
+
declare type Heading2OwnProps = {
|
|
54
|
+
/** HTML-elementet eller React-komponenten som rendres
|
|
55
|
+
* @default "h2"
|
|
56
|
+
*/
|
|
57
|
+
as?: string | default_2.ElementType;
|
|
58
|
+
/** Ekstra klassenavn */
|
|
59
|
+
className?: string;
|
|
60
|
+
/** Innholdet */
|
|
61
|
+
children: default_2.ReactNode;
|
|
62
|
+
/** Hvor du vil ha marginer
|
|
63
|
+
* @default "both"
|
|
64
|
+
*/
|
|
65
|
+
margin?: 'top' | 'bottom' | 'both' | 'none';
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
declare type Heading2Props<T extends default_2.ElementType = typeof defaultElement_4> = PolymorphicComponentProps<T, Heading2OwnProps>;
|
|
69
|
+
|
|
70
|
+
declare type Heading3OwnProps = {
|
|
71
|
+
/** HTML-elementet eller React-komponenten som rendres
|
|
72
|
+
* @default "h3"
|
|
73
|
+
*/
|
|
74
|
+
as?: string | default_2.ElementType;
|
|
75
|
+
/** Ekstra klassenavn */
|
|
76
|
+
className?: string;
|
|
77
|
+
/** Innholdet */
|
|
78
|
+
children: default_2.ReactNode;
|
|
79
|
+
/** Hvor du vil ha marginer
|
|
80
|
+
* @default "both"
|
|
81
|
+
*/
|
|
82
|
+
margin?: 'top' | 'bottom' | 'both' | 'none';
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
declare type Heading3Props<T extends default_2.ElementType = typeof defaultElement_5> = PolymorphicComponentProps<T, Heading3OwnProps>;
|
|
86
|
+
|
|
87
|
+
declare type Heading4OwnProps = {
|
|
88
|
+
/** HTML-elementet eller React-komponenten som rendres
|
|
89
|
+
* @default "h4"
|
|
90
|
+
*/
|
|
91
|
+
as?: string | default_2.ElementType;
|
|
92
|
+
/** Ekstra klassenavn */
|
|
93
|
+
className?: string;
|
|
94
|
+
/** Innholdet */
|
|
95
|
+
children: default_2.ReactNode;
|
|
96
|
+
/** Hvor du vil ha marginer
|
|
97
|
+
* @default "both"
|
|
98
|
+
*/
|
|
99
|
+
margin?: 'top' | 'bottom' | 'both' | 'none';
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
declare type Heading4Props<T extends default_2.ElementType = typeof defaultElement_6> = PolymorphicComponentProps<T, Heading4OwnProps>;
|
|
103
|
+
|
|
104
|
+
export declare const headingsMap: {
|
|
105
|
+
extraSmall: <E extends default_2.ElementType = "h4">({ margin, children, as, ...rest }: Heading4Props<E>) => JSX.Element;
|
|
106
|
+
small: <E extends default_2.ElementType = "h3">({ margin, children, as, ...rest }: Heading3Props<E>) => JSX.Element;
|
|
107
|
+
medium: <E extends default_2.ElementType = "h2">({ margin, children, as, ...rest }: Heading2Props<E>) => JSX.Element;
|
|
108
|
+
large: <E extends default_2.ElementType = "h2">({ margin, children, as, ...rest }: Heading2Props<E>) => JSX.Element;
|
|
109
|
+
extraLarge: <E extends default_2.ElementType = "h2">({ margin, children, as, ...rest }: Heading2Props<E>) => JSX.Element;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Allows for inheriting the props from the specified element type so that
|
|
114
|
+
* props like children, className & style work, as well as element-specific
|
|
115
|
+
* attributes like aria roles. The component (`C`) must be passed in.
|
|
116
|
+
*/
|
|
117
|
+
declare type InheritableElementProps<C extends default_2.ElementType, Props = Record<string, unknown>> = ExtendableProps<PropsOf<C>, Props>;
|
|
118
|
+
|
|
119
|
+
export declare const Modal: default_2.FC<ModalProps>;
|
|
120
|
+
|
|
121
|
+
export declare const ModalContent: default_2.FC<ModalContentProps>;
|
|
122
|
+
|
|
123
|
+
export declare type ModalContentProps = {
|
|
124
|
+
/** Innholdet i modalen */
|
|
125
|
+
children: default_2.ReactNode;
|
|
126
|
+
/** Ekstra klassenavn */
|
|
127
|
+
className?: string;
|
|
128
|
+
/** Størrelsen på modalen */
|
|
129
|
+
size: 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge';
|
|
130
|
+
/** Tittelen som vises i modalen */
|
|
131
|
+
title?: default_2.ReactNode;
|
|
132
|
+
/** Hvordan innholdet skal plasseres i modalen
|
|
133
|
+
* @default 'start'
|
|
134
|
+
*/
|
|
135
|
+
align?: 'start' | 'center' | 'end';
|
|
136
|
+
[key: string]: any;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export declare const ModalOverlay: default_2.FC<ModalOverlayProps>;
|
|
140
|
+
|
|
141
|
+
export declare type ModalOverlayProps = {
|
|
142
|
+
/** Flagg som sier om modalen er åpen */
|
|
143
|
+
open?: boolean;
|
|
144
|
+
/** Callback som kalles når brukeren ber om å lukke modalen */
|
|
145
|
+
onDismiss?: () => void;
|
|
146
|
+
/** Innholdet i modalen */
|
|
147
|
+
children: default_2.ReactNode;
|
|
148
|
+
/** Ekstra klassenavn */
|
|
149
|
+
className?: string;
|
|
150
|
+
/** En ref til elementet som skal være fokusert når modalen åpnes. Defaulter til lukkeknappen */
|
|
151
|
+
initialFocusRef?: default_2.RefObject<HTMLElement>;
|
|
152
|
+
[key: string]: any;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export declare type ModalProps = {
|
|
156
|
+
/** Innholdet i modalen */
|
|
157
|
+
children: default_2.ReactNode;
|
|
158
|
+
/** Skjermleser-label til lukk-knappen */
|
|
159
|
+
closeLabel?: string;
|
|
160
|
+
/** En ref til elementet som skal være fokusert når modalen åpnes. Defaulter til lukkeknappen */
|
|
161
|
+
initialFocusRef?: default_2.RefObject<HTMLElement>;
|
|
162
|
+
/** Flagg som sier om modalen er åpen */
|
|
163
|
+
open?: boolean;
|
|
164
|
+
/** Callback som kalles når brukeren ber om å lukke modalen */
|
|
165
|
+
onDismiss?: () => void;
|
|
166
|
+
/** Størrelsen på modalen */
|
|
167
|
+
size: 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge';
|
|
168
|
+
/** Hvordan innholdet skal plasseres i modalen
|
|
169
|
+
* @default 'start'
|
|
170
|
+
*/
|
|
171
|
+
align?: 'start' | 'center' | 'end';
|
|
172
|
+
/** Tittelen som vises i modalen */
|
|
173
|
+
title?: default_2.ReactNode;
|
|
174
|
+
/** Om modalen skal lukkes når man klikker på utsiden av den
|
|
175
|
+
* @default true
|
|
176
|
+
*/
|
|
177
|
+
closeOnClickOutside?: boolean;
|
|
178
|
+
[key: string]: any;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* A more sophisticated version of `InheritableElementProps` where
|
|
183
|
+
* the passed in `as` prop will determine which props can be included
|
|
184
|
+
*/
|
|
185
|
+
declare type PolymorphicComponentProps<C extends default_2.ElementType, Props = Record<string, unknown>> = InheritableElementProps<C, Props & AsProp<C>>;
|
|
186
|
+
|
|
187
|
+
declare type PropsOf<C extends keyof JSX.IntrinsicElements | default_2.JSXElementConstructor<any>> = JSX.LibraryManagedAttributes<C, default_2.ComponentPropsWithoutRef<C>>;
|
|
188
|
+
|
|
189
|
+
export { }
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const utils = require("@entur/utils");
|
|
4
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
5
|
+
const icons = require("@entur/icons");
|
|
6
|
+
const button = require("@entur/button");
|
|
7
|
+
const typography = require("@entur/typography");
|
|
8
|
+
const classNames = require("classnames");
|
|
9
|
+
const dialog = require("@reach/dialog");
|
|
10
|
+
const React = require("react");
|
|
11
|
+
const reactFocusLock = require("react-focus-lock");
|
|
12
|
+
const layout = require("@entur/layout");
|
|
13
|
+
const ModalOverlay = ({
|
|
14
|
+
className,
|
|
15
|
+
open,
|
|
16
|
+
...rest
|
|
17
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
18
|
+
dialog.DialogOverlay,
|
|
19
|
+
{
|
|
20
|
+
className: classNames("eds-modal__overlay", className),
|
|
21
|
+
isOpen: open,
|
|
22
|
+
...rest
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
const headingsMap = {
|
|
26
|
+
extraSmall: typography.Heading4,
|
|
27
|
+
small: typography.Heading3,
|
|
28
|
+
medium: typography.Heading2,
|
|
29
|
+
large: typography.Heading2,
|
|
30
|
+
extraLarge: typography.Heading2
|
|
31
|
+
};
|
|
32
|
+
const ModalContent = ({
|
|
33
|
+
children,
|
|
34
|
+
className,
|
|
35
|
+
size,
|
|
36
|
+
title,
|
|
37
|
+
align = "start",
|
|
38
|
+
...rest
|
|
39
|
+
}) => {
|
|
40
|
+
const Heading = headingsMap[size] || typography.Heading2;
|
|
41
|
+
const randomId = utils.useRandomId("eds-modal");
|
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
43
|
+
dialog.DialogContent,
|
|
44
|
+
{
|
|
45
|
+
className: classNames(
|
|
46
|
+
"eds-modal__content",
|
|
47
|
+
`eds-modal__content--size-${size}`,
|
|
48
|
+
`eds-modal__content--align-${align}`,
|
|
49
|
+
className
|
|
50
|
+
),
|
|
51
|
+
"aria-labelledby": randomId,
|
|
52
|
+
...rest,
|
|
53
|
+
children: [
|
|
54
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(Heading, { margin: "bottom", as: "h2", id: randomId, children: title }),
|
|
55
|
+
children
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
const Modal = ({
|
|
61
|
+
children,
|
|
62
|
+
closeLabel = "Lukk",
|
|
63
|
+
initialFocusRef,
|
|
64
|
+
open,
|
|
65
|
+
onDismiss,
|
|
66
|
+
size,
|
|
67
|
+
align = "start",
|
|
68
|
+
title,
|
|
69
|
+
closeOnClickOutside = true,
|
|
70
|
+
...rest
|
|
71
|
+
}) => {
|
|
72
|
+
const randomId = utils.useRandomId("eds-modal");
|
|
73
|
+
const Heading = headingsMap[size] || typography.Heading2;
|
|
74
|
+
const showCloseButton = ["medium", "large", "extraLarge"].includes(size);
|
|
75
|
+
let handleOnDismiss;
|
|
76
|
+
if (onDismiss && closeOnClickOutside) {
|
|
77
|
+
handleOnDismiss = onDismiss;
|
|
78
|
+
}
|
|
79
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
80
|
+
ModalOverlay,
|
|
81
|
+
{
|
|
82
|
+
open,
|
|
83
|
+
onDismiss: handleOnDismiss,
|
|
84
|
+
initialFocusRef,
|
|
85
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(ModalContent, { size, align, ...rest, children: [
|
|
86
|
+
showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(
|
|
87
|
+
button.IconButton,
|
|
88
|
+
{
|
|
89
|
+
className: "eds-modal__close",
|
|
90
|
+
"aria-label": closeLabel,
|
|
91
|
+
onClick: onDismiss,
|
|
92
|
+
type: "button",
|
|
93
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.CloseIcon, {})
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(Heading, { margin: "bottom", as: "h2", id: randomId, children: title }),
|
|
97
|
+
children
|
|
98
|
+
] })
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
};
|
|
102
|
+
const Drawer = ({
|
|
103
|
+
children,
|
|
104
|
+
className,
|
|
105
|
+
closeLabel = "Lukk skuff",
|
|
106
|
+
contrast = false,
|
|
107
|
+
open = true,
|
|
108
|
+
onDismiss,
|
|
109
|
+
title,
|
|
110
|
+
style,
|
|
111
|
+
overlay = false
|
|
112
|
+
}) => {
|
|
113
|
+
const titleId = utils.useRandomId("eds-drawer");
|
|
114
|
+
if (!open) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
const handleKeyDown = (e) => {
|
|
118
|
+
if (e.key === "Escape") {
|
|
119
|
+
e.stopPropagation();
|
|
120
|
+
onDismiss();
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const Wrapper = contrast ? layout.Contrast : React.Fragment;
|
|
124
|
+
const ContentContainer = overlay ? dialog.DialogContent : "div";
|
|
125
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
+
ConditionalWrapper,
|
|
127
|
+
{
|
|
128
|
+
condition: overlay,
|
|
129
|
+
wrapper: (children2) => /* @__PURE__ */ jsxRuntime.jsx(ModalOverlay, { open, onDismiss, children: children2 }),
|
|
130
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Wrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
131
|
+
ContentContainer,
|
|
132
|
+
{
|
|
133
|
+
"aria-labelledby": titleId,
|
|
134
|
+
className: classNames("eds-drawer", className),
|
|
135
|
+
onKeyDown: handleKeyDown,
|
|
136
|
+
style,
|
|
137
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(reactFocusLock.MoveFocusInside, { children: [
|
|
138
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
139
|
+
button.IconButton,
|
|
140
|
+
{
|
|
141
|
+
className: "eds-drawer__close-button",
|
|
142
|
+
onClick: onDismiss,
|
|
143
|
+
type: "button",
|
|
144
|
+
"aria-label": closeLabel,
|
|
145
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.CloseIcon, { "aria-hidden": true })
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "eds-drawer__content", children: [
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx(typography.Heading3, { as: "h2", id: titleId, children: title }),
|
|
150
|
+
children
|
|
151
|
+
] })
|
|
152
|
+
] })
|
|
153
|
+
}
|
|
154
|
+
) })
|
|
155
|
+
}
|
|
156
|
+
);
|
|
157
|
+
};
|
|
158
|
+
const ConditionalWrapper = ({ condition, wrapper, children }) => condition ? wrapper(children) : children;
|
|
159
|
+
utils.warnAboutMissingStyles("modal", "icons", "typography", "a11y", "button");
|
|
160
|
+
exports.Drawer = Drawer;
|
|
161
|
+
exports.Modal = Modal;
|
|
162
|
+
exports.ModalContent = ModalContent;
|
|
163
|
+
exports.ModalOverlay = ModalOverlay;
|
|
164
|
+
exports.headingsMap = headingsMap;
|
|
165
|
+
//# sourceMappingURL=modal.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.cjs.js","sources":["../src/ModalOverlay.tsx","../src/ModalContent.tsx","../src/Modal.tsx","../src/Drawer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { DialogOverlay } from '@reach/dialog';\n\nexport type ModalOverlayProps = {\n /** Flagg som sier om modalen er åpen */\n open?: boolean;\n /** Callback som kalles når brukeren ber om å lukke modalen */\n onDismiss?: () => void;\n /** Innholdet i modalen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** En ref til elementet som skal være fokusert når modalen åpnes. Defaulter til lukkeknappen */\n initialFocusRef?: React.RefObject<HTMLElement>;\n [key: string]: any;\n};\n\nexport const ModalOverlay: React.FC<ModalOverlayProps> = ({\n className,\n open,\n ...rest\n}) => (\n <DialogOverlay\n className={classNames('eds-modal__overlay', className)}\n isOpen={open}\n {...rest}\n />\n);\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DialogContent } from '@reach/dialog';\nimport { Heading4, Heading3, Heading2 } from '@entur/typography';\nimport { useRandomId } from '@entur/utils';\n\nexport type ModalContentProps = {\n /** Innholdet i modalen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Størrelsen på modalen */\n size: 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge';\n /** Tittelen som vises i modalen */\n title?: React.ReactNode;\n /** Hvordan innholdet skal plasseres i modalen\n * @default 'start'\n */\n align?: 'start' | 'center' | 'end';\n [key: string]: any;\n};\n\nexport const headingsMap = {\n extraSmall: Heading4,\n small: Heading3,\n medium: Heading2,\n large: Heading2,\n extraLarge: Heading2,\n};\n\nexport const ModalContent: React.FC<ModalContentProps> = ({\n children,\n className,\n size,\n title,\n align = 'start',\n ...rest\n}) => {\n const Heading: React.ElementType = headingsMap[size] || Heading2;\n const randomId = useRandomId('eds-modal');\n return (\n <DialogContent\n className={classNames(\n 'eds-modal__content',\n `eds-modal__content--size-${size}`,\n `eds-modal__content--align-${align}`,\n className,\n )}\n aria-labelledby={randomId}\n {...rest}\n >\n {title && (\n <Heading margin=\"bottom\" as=\"h2\" id={randomId}>\n {title}\n </Heading>\n )}\n {children}\n </DialogContent>\n );\n};\n","import React from 'react';\n\nimport { CloseIcon } from '@entur/icons';\nimport { IconButton } from '@entur/button';\nimport { Heading2 } from '@entur/typography';\nimport { useRandomId } from '@entur/utils';\n\nimport { ModalOverlay } from './ModalOverlay';\nimport { ModalContent, headingsMap } from './ModalContent';\n\nimport './Modal.scss';\n\nexport type ModalProps = {\n /** Innholdet i modalen */\n children: React.ReactNode;\n /** Skjermleser-label til lukk-knappen */\n closeLabel?: string;\n /** En ref til elementet som skal være fokusert når modalen åpnes. Defaulter til lukkeknappen */\n initialFocusRef?: React.RefObject<HTMLElement>;\n /** Flagg som sier om modalen er åpen */\n open?: boolean;\n /** Callback som kalles når brukeren ber om å lukke modalen */\n onDismiss?: () => void;\n /** Størrelsen på modalen */\n size: 'extraSmall' | 'small' | 'medium' | 'large' | 'extraLarge';\n /** Hvordan innholdet skal plasseres i modalen\n * @default 'start'\n */\n align?: 'start' | 'center' | 'end';\n /** Tittelen som vises i modalen */\n title?: React.ReactNode;\n /** Om modalen skal lukkes når man klikker på utsiden av den\n * @default true\n */\n closeOnClickOutside?: boolean;\n [key: string]: any;\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n children,\n closeLabel = 'Lukk',\n initialFocusRef,\n open,\n onDismiss,\n size,\n align = 'start',\n title,\n closeOnClickOutside = true,\n ...rest\n}) => {\n const randomId = useRandomId('eds-modal');\n const Heading: React.ElementType = headingsMap[size] || Heading2;\n const showCloseButton = ['medium', 'large', 'extraLarge'].includes(size);\n\n let handleOnDismiss;\n if (onDismiss && closeOnClickOutside) {\n handleOnDismiss = onDismiss;\n }\n return (\n <ModalOverlay\n open={open}\n onDismiss={handleOnDismiss}\n initialFocusRef={initialFocusRef}\n >\n <ModalContent size={size} align={align} {...rest}>\n {showCloseButton && (\n <IconButton\n className=\"eds-modal__close\"\n aria-label={closeLabel}\n onClick={onDismiss}\n type=\"button\"\n >\n <CloseIcon />\n </IconButton>\n )}\n {title && (\n <Heading margin=\"bottom\" as=\"h2\" id={randomId}>\n {title}\n </Heading>\n )}\n {children}\n </ModalContent>\n </ModalOverlay>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { MoveFocusInside } from 'react-focus-lock';\nimport { Contrast } from '@entur/layout';\nimport { CloseIcon } from '@entur/icons';\nimport { Heading3 } from '@entur/typography';\nimport { useRandomId } from '@entur/utils';\nimport { IconButton } from '@entur/button';\n\nimport './Drawer.scss';\nimport { ModalOverlay } from './ModalOverlay';\nimport { DialogContent } from '@reach/dialog';\n\nexport type DrawerProps = {\n /** Innholdet. Typisk tekst, lenker eller knapper */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst som beskriver lukkeknappen for skjermlesere\n * @default 'Lukk skuff'\n */\n closeLabel?: string;\n /** Om draweren skal vises i mørk variant\n * @default false\n */\n contrast?: boolean;\n /** Callback som kalles når brukeren ønsker å lukke draweren */\n onDismiss: () => void;\n /** Om draweren er åpen eller ikke\n * @default true\n */\n open?: boolean;\n /** Tittel på toppen av draweren */\n title: string;\n /** Styling som sendes til Drawer */\n style?: React.CSSProperties;\n /** Legger på et overlay over resten av siden */\n overlay?: boolean;\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n className,\n closeLabel = 'Lukk skuff',\n contrast = false,\n open = true,\n onDismiss,\n title,\n style,\n overlay = false,\n}) => {\n const titleId = useRandomId('eds-drawer');\n\n if (!open) {\n return null;\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onDismiss();\n }\n };\n\n const Wrapper = contrast ? Contrast : React.Fragment;\n const ContentContainer = overlay ? DialogContent : 'div';\n return (\n <ConditionalWrapper\n condition={overlay}\n wrapper={(children: React.ReactNode) => (\n <ModalOverlay open={open} onDismiss={onDismiss}>\n {children}\n </ModalOverlay>\n )}\n >\n <Wrapper>\n <ContentContainer\n aria-labelledby={titleId}\n className={classNames('eds-drawer', className)}\n onKeyDown={handleKeyDown}\n style={style}\n >\n <MoveFocusInside>\n <IconButton\n className=\"eds-drawer__close-button\"\n onClick={onDismiss}\n type=\"button\"\n aria-label={closeLabel}\n >\n <CloseIcon aria-hidden />\n </IconButton>\n <div className=\"eds-drawer__content\">\n <Heading3 as=\"h2\" id={titleId}>\n {title}\n </Heading3>\n {children}\n </div>\n </MoveFocusInside>\n </ContentContainer>\n </Wrapper>\n </ConditionalWrapper>\n );\n};\n\nconst ConditionalWrapper: React.FC<{\n condition: boolean;\n wrapper: (child: JSX.Element) => JSX.Element;\n children: React.ReactElement;\n}> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : children;\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('modal', 'icons', 'typography', 'a11y', 'button');\n\nexport * from './Modal';\nexport * from './ModalOverlay';\nexport * from './ModalContent';\nexport * from './Drawer';\n"],"names":["jsx","DialogOverlay","Heading4","Heading3","Heading2","useRandomId","jsxs","DialogContent","IconButton","CloseIcon","Contrast","children","MoveFocusInside","warnAboutMissingStyles"],"mappings":"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"}
|