@entur/alert 0.11.14 → 0.11.16
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/CHANGELOG.md +457 -0
- package/dist/alert.cjs.development.js +88 -54
- package/dist/alert.cjs.development.js.map +1 -1
- package/dist/alert.cjs.production.min.js.map +1 -1
- package/dist/alert.esm.js +88 -54
- package/dist/alert.esm.js.map +1 -1
- package/dist/styles.css +1 -0
- package/package.json +11 -16
|
@@ -20,26 +20,32 @@ function _extends() {
|
|
|
20
20
|
_extends = Object.assign || function (target) {
|
|
21
21
|
for (var i = 1; i < arguments.length; i++) {
|
|
22
22
|
var source = arguments[i];
|
|
23
|
+
|
|
23
24
|
for (var key in source) {
|
|
24
25
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
25
26
|
target[key] = source[key];
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
}
|
|
30
|
+
|
|
29
31
|
return target;
|
|
30
32
|
};
|
|
33
|
+
|
|
31
34
|
return _extends.apply(this, arguments);
|
|
32
35
|
}
|
|
36
|
+
|
|
33
37
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
34
38
|
if (source == null) return {};
|
|
35
39
|
var target = {};
|
|
36
40
|
var sourceKeys = Object.keys(source);
|
|
37
41
|
var key, i;
|
|
42
|
+
|
|
38
43
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
39
44
|
key = sourceKeys[i];
|
|
40
45
|
if (excluded.indexOf(key) >= 0) continue;
|
|
41
46
|
target[key] = source[key];
|
|
42
47
|
}
|
|
48
|
+
|
|
43
49
|
return target;
|
|
44
50
|
}
|
|
45
51
|
|
|
@@ -52,30 +58,34 @@ var iconsMap = {
|
|
|
52
58
|
};
|
|
53
59
|
var BaseAlertBox = function BaseAlertBox(_ref) {
|
|
54
60
|
var children = _ref.children,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
className = _ref.className,
|
|
62
|
+
_ref$closable = _ref.closable,
|
|
63
|
+
closable = _ref$closable === void 0 ? false : _ref$closable,
|
|
64
|
+
_ref$closeButtonLabel = _ref.closeButtonLabel,
|
|
65
|
+
closeButtonLabel = _ref$closeButtonLabel === void 0 ? 'Lukk' : _ref$closeButtonLabel,
|
|
66
|
+
variant = _ref.variant,
|
|
67
|
+
_ref$onClose = _ref.onClose,
|
|
68
|
+
onClose = _ref$onClose === void 0 ? function () {
|
|
69
|
+
return {};
|
|
70
|
+
} : _ref$onClose,
|
|
71
|
+
size = _ref.size,
|
|
72
|
+
title = _ref.title,
|
|
73
|
+
toastIsBeingRemoved = _ref.toastIsBeingRemoved,
|
|
74
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
75
|
+
|
|
69
76
|
var _React$useState = React__default["default"].useState(false),
|
|
70
|
-
|
|
71
|
-
|
|
77
|
+
isClosed = _React$useState[0],
|
|
78
|
+
setClosed = _React$useState[1];
|
|
79
|
+
|
|
72
80
|
if (isClosed) {
|
|
73
81
|
return null;
|
|
74
82
|
}
|
|
83
|
+
|
|
75
84
|
var handleClose = function handleClose() {
|
|
76
85
|
setClosed(true);
|
|
77
86
|
onClose();
|
|
78
87
|
};
|
|
88
|
+
|
|
79
89
|
var Icon = iconsMap[variant];
|
|
80
90
|
return React__default["default"].createElement("div", _extends({
|
|
81
91
|
className: classNames__default["default"]('eds-alert-box', "eds-alert-box--" + size, "eds-alert-box--" + variant, {
|
|
@@ -114,12 +124,13 @@ var ToastAlertBox = function ToastAlertBox(props) {
|
|
|
114
124
|
var _excluded$2 = ["className", "width", "onClose", "closable", "closeButtonLabel"];
|
|
115
125
|
var SmallAlertBox = function SmallAlertBox(_ref) {
|
|
116
126
|
var className = _ref.className,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
127
|
+
width = _ref.width,
|
|
128
|
+
onClose = _ref.onClose,
|
|
129
|
+
_ref$closable = _ref.closable,
|
|
130
|
+
closable = _ref$closable === void 0 ? false : _ref$closable,
|
|
131
|
+
closeButtonLabel = _ref.closeButtonLabel,
|
|
132
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
133
|
+
|
|
123
134
|
return React__default["default"].createElement(BaseAlertBox, _extends({
|
|
124
135
|
className: classNames__default["default"](className, {
|
|
125
136
|
'eds-alert-box--fit-content': width === 'fit-content'
|
|
@@ -134,10 +145,12 @@ var SmallAlertBox = function SmallAlertBox(_ref) {
|
|
|
134
145
|
|
|
135
146
|
var EXIT_ANIMATION_TIME = 400;
|
|
136
147
|
var ToastContext = /*#__PURE__*/React__default["default"].createContext(null);
|
|
148
|
+
|
|
137
149
|
var toastReducer = function toastReducer(prevToasts, action) {
|
|
138
150
|
switch (action.type) {
|
|
139
151
|
case 'ADD_TOAST':
|
|
140
152
|
return [action.payload].concat(prevToasts);
|
|
153
|
+
|
|
141
154
|
case 'PLAY_EXIT_ANIMATION':
|
|
142
155
|
return prevToasts.map(function (toast) {
|
|
143
156
|
if (toast.id === action.payload) return _extends({}, toast, {
|
|
@@ -145,15 +158,18 @@ var toastReducer = function toastReducer(prevToasts, action) {
|
|
|
145
158
|
});
|
|
146
159
|
return toast;
|
|
147
160
|
});
|
|
161
|
+
|
|
148
162
|
case 'REMOVE_TOAST':
|
|
149
163
|
return prevToasts.filter(function (toast) {
|
|
150
164
|
return toast.id !== action.payload;
|
|
151
165
|
});
|
|
152
166
|
}
|
|
153
167
|
};
|
|
168
|
+
|
|
154
169
|
var createUniqueId = function createUniqueId() {
|
|
155
170
|
return Math.random().toString().substring(2);
|
|
156
171
|
};
|
|
172
|
+
|
|
157
173
|
var createToast = function createToast(toast, id) {
|
|
158
174
|
if (typeof toast === 'string') {
|
|
159
175
|
return {
|
|
@@ -170,20 +186,24 @@ var createToast = function createToast(toast, id) {
|
|
|
170
186
|
}, toast);
|
|
171
187
|
}
|
|
172
188
|
};
|
|
189
|
+
|
|
173
190
|
var ToastProvider = function ToastProvider(_ref) {
|
|
174
191
|
var _ref$delay = _ref.delay,
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
192
|
+
delay = _ref$delay === void 0 ? 6000 : _ref$delay,
|
|
193
|
+
children = _ref.children,
|
|
194
|
+
_ref$position = _ref.position,
|
|
195
|
+
position = _ref$position === void 0 ? 'bottom-right' : _ref$position,
|
|
196
|
+
className = _ref.className,
|
|
197
|
+
style = _ref.style;
|
|
198
|
+
|
|
181
199
|
var _React$useReducer = React__default["default"].useReducer(toastReducer, []),
|
|
182
|
-
|
|
183
|
-
|
|
200
|
+
toasts = _React$useReducer[0],
|
|
201
|
+
dispatch = _React$useReducer[1];
|
|
202
|
+
|
|
184
203
|
var _React$useState = React__default["default"].useState(),
|
|
185
|
-
|
|
186
|
-
|
|
204
|
+
hoveringId = _React$useState[0],
|
|
205
|
+
setHovering = _React$useState[1];
|
|
206
|
+
|
|
187
207
|
var timeoutIdRefs = React__default["default"].useRef({});
|
|
188
208
|
var removeToast = React__default["default"].useCallback(function (id) {
|
|
189
209
|
window.clearTimeout(timeoutIdRefs.current[id]);
|
|
@@ -218,6 +238,7 @@ var ToastProvider = function ToastProvider(_ref) {
|
|
|
218
238
|
});
|
|
219
239
|
removeToastWithAnimationAfterDelay(id, delay);
|
|
220
240
|
}, [delay, removeToastWithAnimationAfterDelay]);
|
|
241
|
+
|
|
221
242
|
var handleMouseEnter = function handleMouseEnter(toast) {
|
|
222
243
|
return function () {
|
|
223
244
|
if (toast.isBeingRemoved) return;
|
|
@@ -228,18 +249,21 @@ var ToastProvider = function ToastProvider(_ref) {
|
|
|
228
249
|
timeoutIdRefs.current = {};
|
|
229
250
|
};
|
|
230
251
|
};
|
|
252
|
+
|
|
231
253
|
var handleMouseLeave = function handleMouseLeave() {
|
|
232
254
|
setHovering(undefined);
|
|
233
255
|
toasts.forEach(function (toast) {
|
|
234
256
|
removeToastWithAnimationAfterDelay(toast.id, delay);
|
|
235
257
|
});
|
|
236
258
|
};
|
|
259
|
+
|
|
237
260
|
var handleClose = function handleClose(toastId) {
|
|
238
261
|
return function () {
|
|
239
262
|
removeToast(toastId);
|
|
240
263
|
handleMouseLeave();
|
|
241
264
|
};
|
|
242
265
|
};
|
|
266
|
+
|
|
243
267
|
var contextValue = React__default["default"].useMemo(function () {
|
|
244
268
|
return {
|
|
245
269
|
toasts: toasts,
|
|
@@ -267,9 +291,11 @@ var ToastProvider = function ToastProvider(_ref) {
|
|
|
267
291
|
};
|
|
268
292
|
var useToast = function useToast() {
|
|
269
293
|
var context = React__default["default"].useContext(ToastContext);
|
|
294
|
+
|
|
270
295
|
if (!context) {
|
|
271
296
|
throw new Error('You need to wrap your component in a ToastProvider component in ' + 'order to use the useToast hook');
|
|
272
297
|
}
|
|
298
|
+
|
|
273
299
|
var addToast = context.addToast;
|
|
274
300
|
return {
|
|
275
301
|
addToast: addToast
|
|
@@ -279,15 +305,18 @@ var useToast = function useToast() {
|
|
|
279
305
|
var _excluded$1 = ["children", "successHeading", "successMessage", "className"];
|
|
280
306
|
var CopyableText = function CopyableText(_ref) {
|
|
281
307
|
var children = _ref.children,
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
308
|
+
_ref$successHeading = _ref.successHeading,
|
|
309
|
+
successHeading = _ref$successHeading === void 0 ? 'Kopiert!' : _ref$successHeading,
|
|
310
|
+
_ref$successMessage = _ref.successMessage,
|
|
311
|
+
successMessage = _ref$successMessage === void 0 ? 'Innholdet ble kopiert til utklippstavlen.' : _ref$successMessage,
|
|
312
|
+
className = _ref.className,
|
|
313
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
|
|
314
|
+
|
|
288
315
|
var _useToast = useToast(),
|
|
289
|
-
|
|
316
|
+
addToast = _useToast.addToast;
|
|
317
|
+
|
|
290
318
|
var buttonRef = React__default["default"].useRef(null);
|
|
319
|
+
|
|
291
320
|
var handleClick = function handleClick() {
|
|
292
321
|
buttonRef.current && copy__default["default"](children, {
|
|
293
322
|
target: buttonRef.current
|
|
@@ -296,6 +325,7 @@ var CopyableText = function CopyableText(_ref) {
|
|
|
296
325
|
content: successMessage
|
|
297
326
|
});
|
|
298
327
|
};
|
|
328
|
+
|
|
299
329
|
return React__default["default"].createElement("button", _extends({
|
|
300
330
|
className: 'copyable-text ' + className,
|
|
301
331
|
style: _extends({}, rest.style),
|
|
@@ -319,18 +349,21 @@ var BannerExpandableAlertBox = function BannerExpandableAlertBox(props) {
|
|
|
319
349
|
size: "banner"
|
|
320
350
|
}, props));
|
|
321
351
|
};
|
|
352
|
+
|
|
322
353
|
var ExpandableAlertBox = function ExpandableAlertBox(_ref) {
|
|
323
354
|
var variant = _ref.variant,
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
355
|
+
title = _ref.title,
|
|
356
|
+
children = _ref.children,
|
|
357
|
+
size = _ref.size,
|
|
358
|
+
className = _ref.className,
|
|
359
|
+
openLabel = _ref.openLabel,
|
|
360
|
+
closeLabel = _ref.closeLabel,
|
|
361
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
362
|
+
|
|
331
363
|
var _React$useState = React__default["default"].useState(false),
|
|
332
|
-
|
|
333
|
-
|
|
364
|
+
open = _React$useState[0],
|
|
365
|
+
setopen = _React$useState[1];
|
|
366
|
+
|
|
334
367
|
return React__default["default"].createElement(BaseAlertBox, _extends({
|
|
335
368
|
size: size,
|
|
336
369
|
variant: variant,
|
|
@@ -348,14 +381,15 @@ var ExpandableAlertBox = function ExpandableAlertBox(_ref) {
|
|
|
348
381
|
open: open
|
|
349
382
|
}, children));
|
|
350
383
|
};
|
|
384
|
+
|
|
351
385
|
var ExpandableAlertBoxTitle = function ExpandableAlertBoxTitle(_ref2) {
|
|
352
386
|
var title = _ref2.title,
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
387
|
+
open = _ref2.open,
|
|
388
|
+
_ref2$openLabel = _ref2.openLabel,
|
|
389
|
+
openLabel = _ref2$openLabel === void 0 ? 'Les mer' : _ref2$openLabel,
|
|
390
|
+
_ref2$closeLabel = _ref2.closeLabel,
|
|
391
|
+
closeLabel = _ref2$closeLabel === void 0 ? 'Lukk' : _ref2$closeLabel,
|
|
392
|
+
onClick = _ref2.onClick;
|
|
359
393
|
return React__default["default"].createElement("div", {
|
|
360
394
|
className: "eds-expandable-alert-box__title"
|
|
361
395
|
}, React__default["default"].createElement("div", null, title), React__default["default"].createElement("button", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.cjs.development.js","sources":["../src/BaseAlertBox.tsx","../src/BannerAlertBox.tsx","../src/ToastAlertBox.tsx","../src/SmallAlertBox.tsx","../src/ToastProvider.tsx","../src/CopyableText.tsx","../src/ExpandableAlertBox.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport {\n CloseIcon,\n OutlinedValidationCheckIcon,\n OutlinedValidationExclamationIcon,\n OutlinedValidationInfoIcon,\n OutlinedValidationErrorIcon,\n} from '@entur/icons';\nimport './styles.scss';\n\nconst iconsMap = {\n success: OutlinedValidationCheckIcon,\n info: OutlinedValidationInfoIcon,\n warning: OutlinedValidationExclamationIcon,\n error: OutlinedValidationErrorIcon,\n};\n\ntype BaseAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises\n * @default \"Lukk\"\n */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen\n * @default () => {}\n */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: React.ReactNode;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Typen boks (internt bruk) */\n size: 'banner' | 'toast' | 'small';\n [key: string]: any;\n};\n\nexport const BaseAlertBox: React.FC<BaseAlertBoxProps> = ({\n children,\n className,\n closable = false,\n closeButtonLabel = 'Lukk',\n variant,\n onClose = () => ({}),\n size,\n title,\n toastIsBeingRemoved,\n ...rest\n}) => {\n const [isClosed, setClosed] = React.useState(false);\n if (isClosed) {\n return null;\n }\n const handleClose = () => {\n setClosed(true);\n onClose();\n };\n const Icon = iconsMap[variant];\n return (\n <div\n className={classNames(\n 'eds-alert-box',\n `eds-alert-box--${size}`,\n `eds-alert-box--${variant}`,\n { 'eds-alert-box--toast--exit-animation': toastIsBeingRemoved },\n className,\n )}\n {...rest}\n >\n {closable && (\n <button\n aria-label={closeButtonLabel}\n className=\"eds-alert-box__close-button\"\n type=\"button\"\n onClick={handleClose}\n >\n <CloseIcon />\n </button>\n )}\n <Icon className=\"eds-alert-box__icon\" />\n <div\n className={classNames('eds-alert-box__content', {\n 'eds-alert-box__content--no-title': !title,\n 'eds-alert-box__content--no-children': !children,\n })}\n >\n {title && <div className=\"eds-alert-box__title\">{title}</div>}\n {children && children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type BannerAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const BannerAlertBox: React.FC<BannerAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"banner\" />\n);\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type ToastAlertBoxProps = {\n /** Innholdet i toasten */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på toasten */\n variant: 'success' | 'info';\n [key: string]: any;\n};\n\nexport const ToastAlertBox: React.FC<ToastAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"toast\" role=\"status\" />\n);\n","import React from 'react';\nimport classNames from 'classnames';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type SmallAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Bredden på boksen - fullbredde eller tilpasset innholdet */\n width?: 'fluid' | 'fit-content';\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const SmallAlertBox: React.FC<SmallAlertBoxProps> = ({\n className,\n width,\n onClose,\n closable = false,\n closeButtonLabel,\n ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n onClose={onClose}\n closable={closable}\n closeButtonLabel={closeButtonLabel}\n size=\"small\"\n />\n);\n","import React from 'react';\nimport { ToastAlertBox } from './ToastAlertBox';\nimport classNames from 'classnames';\n\ntype ToastId = string;\n\ntype ToastVariants = 'success' | 'info';\n\ntype ToastType = {\n title?: string;\n content: React.ReactNode;\n id: ToastId;\n variant: ToastVariants;\n isBeingRemoved: boolean;\n};\n\ntype ToastContextType = {\n addToast: (payload: AddToastPayload) => void;\n removeToast: (id: ToastId) => void;\n toasts: ToastType[];\n};\n\ntype AddToastPayload =\n | { title?: string; content: React.ReactNode; variant?: ToastVariants }\n | string;\n\ntype ToastAction =\n | { type: 'ADD_TOAST'; payload: ToastType }\n | { type: 'REMOVE_TOAST'; payload: ToastId }\n | { type: 'PLAY_EXIT_ANIMATION'; payload: ToastId };\n\nconst EXIT_ANIMATION_TIME = 400;\n\nconst ToastContext = React.createContext<ToastContextType | null>(null);\n\nconst toastReducer = (\n prevToasts: ToastType[],\n action: ToastAction,\n): ToastType[] => {\n switch (action.type) {\n case 'ADD_TOAST':\n return [action.payload, ...prevToasts];\n case 'PLAY_EXIT_ANIMATION':\n return prevToasts.map(toast => {\n if (toast.id === action.payload)\n return { ...toast, isBeingRemoved: true };\n return toast;\n });\n case 'REMOVE_TOAST':\n return prevToasts.filter(toast => toast.id !== action.payload);\n }\n};\n\nconst createUniqueId = () => Math.random().toString().substring(2);\n\nconst createToast = (toast: AddToastPayload, id: ToastId): ToastType => {\n if (typeof toast === 'string') {\n return { id, content: toast, variant: 'success', isBeingRemoved: false };\n } else {\n return { id, variant: 'success', isBeingRemoved: false, ...toast };\n }\n};\n\nexport type ToastProviderProps = {\n /** Antall millisekunder før toasts forsvinner av seg selv\n * @default 6000\n */\n delay?: number;\n /** Plasseringen av toasts\n * @default \"bottom-right\"\n */\n position?: 'bottom-right' | 'top-right';\n /** Ekstra klassenavn til ToastProvider-wrapperen */\n className?: string;\n /** Ekstra styling som sendes til ToastProvider-wrapperen */\n style?: React.CSSProperties;\n /** Innholdet */\n children: React.ReactNode;\n};\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n delay = 6000,\n children,\n position = 'bottom-right',\n className,\n style,\n}) => {\n const [toasts, dispatch] = React.useReducer(toastReducer, []);\n const [hoveringId, setHovering] = React.useState<string>();\n const timeoutIdRefs = React.useRef<{ [key: string]: number }>({});\n\n const removeToast = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id]);\n dispatch({ type: 'REMOVE_TOAST', payload: id });\n delete timeoutIdRefs.current[id];\n }, []);\n\n const playExitAnimation = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id + 'animation']);\n dispatch({ type: 'PLAY_EXIT_ANIMATION', payload: id });\n delete timeoutIdRefs.current[id + 'animation'];\n }, []);\n\n const removeToastWithAnimationAfterDelay = React.useCallback(\n (id: ToastId, delay: number) => {\n timeoutIdRefs.current[id + 'animation'] = window.setTimeout(\n () => playExitAnimation(id),\n delay - EXIT_ANIMATION_TIME,\n );\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [timeoutIdRefs, playExitAnimation, removeToast],\n );\n\n const addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n removeToastWithAnimationAfterDelay(id, delay);\n },\n [delay, removeToastWithAnimationAfterDelay],\n );\n\n const handleMouseEnter = (toast: ToastType) => () => {\n if (toast.isBeingRemoved) return;\n setHovering(toast.id);\n Object.values(timeoutIdRefs.current).forEach(timeoutId => {\n window.clearTimeout(timeoutId);\n });\n timeoutIdRefs.current = {};\n };\n\n const handleMouseLeave = () => {\n setHovering(undefined);\n toasts.forEach(toast => {\n removeToastWithAnimationAfterDelay(toast.id, delay);\n });\n };\n\n const handleClose = (toastId: ToastId) => () => {\n removeToast(toastId);\n handleMouseLeave();\n };\n\n const contextValue = React.useMemo(\n () => ({ toasts, addToast, removeToast }),\n [addToast, removeToast, toasts],\n );\n\n return (\n <ToastContext.Provider value={contextValue}>\n {toasts.length > 0 && (\n <div\n className={classNames(\n 'eds-toast-container',\n `eds-toast-container--${position}`,\n className,\n )}\n style={style}\n >\n {toasts.slice(0, 3).map(toastToShow => (\n <ToastAlertBox\n variant={toastToShow.variant}\n title={toastToShow.title}\n onClose={handleClose(toastToShow.id)}\n onMouseEnter={handleMouseEnter(toastToShow)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\n toastIsBeingRemoved={toastToShow.isBeingRemoved}\n key={toastToShow.id}\n >\n {toastToShow.content}\n </ToastAlertBox>\n ))}\n </div>\n )}\n {children}\n </ToastContext.Provider>\n );\n};\n\nexport const useToast: () => {\n addToast: (payload: AddToastPayload) => void;\n} = () => {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(\n 'You need to wrap your component in a ToastProvider component in ' +\n 'order to use the useToast hook',\n );\n }\n const { addToast } = context;\n return {\n addToast,\n };\n};\n","import React from 'react';\n\nimport copy from 'copy-text-to-clipboard';\n\nimport { useToast } from './ToastProvider';\nimport { CopyIcon } from '@entur/icons';\nimport { PreformattedText } from '@entur/typography';\n\nimport './CopyableText.scss';\n\nexport type CopyableTextProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekstinnhold som vises og kopieres */\n children: string;\n /** Overskrift i toast-varselet */\n successHeading?: string;\n /** Bekreftelsesmelding i toast-varselet */\n successMessage?: string;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>;\n\nexport const CopyableText = ({\n children,\n successHeading = 'Kopiert!',\n successMessage = 'Innholdet ble kopiert til utklippstavlen.',\n className,\n ...rest\n}: CopyableTextProps): JSX.Element => {\n const { addToast } = useToast();\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const handleClick = () => {\n buttonRef.current &&\n copy(children, {\n target: buttonRef.current,\n }) &&\n addToast({ title: successHeading, content: successMessage });\n };\n return (\n <button\n className={'copyable-text ' + className}\n style={{ ...rest.style }}\n type=\"button\"\n onClick={handleClick}\n ref={buttonRef}\n aria-label=\"Kopier innhold\"\n {...rest}\n >\n <PreformattedText>{children}</PreformattedText>\n <CopyIcon className=\"copyable-text__icon\" />\n </button>\n );\n};\n","import { BaseExpand, ExpandArrow } from '@entur/expand/';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { BannerAlertBoxProps } from './BannerAlertBox';\nimport { BaseAlertBox } from './BaseAlertBox';\nimport './ExpandableAlertBox.scss';\nimport { SmallAlertBoxProps } from './SmallAlertBox';\n\nexport type SmallExpandableAlertBoxProps = ExpandableAlertBoxProps &\n SmallAlertBoxProps;\n\nexport const SmallExpandableAlertBox: React.FC<SmallExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n };\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"banner\" {...props} />;\n };\n\ntype ExpandableAlertBoxProps = {\n /**Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Tittelen til ExpandableAlertBox */\n title: React.ReactNode;\n /**Innhold som vises ved ekspandering */\n children: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Tekst som vises på ekspanderingsknappen før åpning\n * @default \"Les mer\"\n */\n openLabel?: string;\n /** Tekst som vises på ekspanderingsknappen når den er åpnet\n * @default \"Lukk\"\n */\n closeLabel?: string;\n [key: string]: any;\n};\n\nconst ExpandableAlertBox: React.FC<ExpandableAlertBoxProps> = ({\n variant,\n title,\n children,\n size,\n className,\n openLabel,\n closeLabel,\n ...rest\n}) => {\n const [open, setopen] = React.useState(false);\n return (\n <BaseAlertBox\n size={size}\n variant={variant}\n className={classNames('eds-expandable-alert-box', className)}\n title={\n <ExpandableAlertBoxTitle\n open={open}\n title={title}\n onClick={() => setopen(!open)}\n openLabel={openLabel}\n closeLabel={closeLabel}\n />\n }\n {...rest}\n >\n <BaseExpand open={open}>{children}</BaseExpand>\n </BaseAlertBox>\n );\n};\n\ntype ExpandableAlertBoxTitleProps = {\n title: React.ReactNode;\n open: boolean;\n openLabel?: string;\n closeLabel?: string;\n onClick: (e: React.MouseEvent) => void;\n};\n\nconst ExpandableAlertBoxTitle: React.FC<ExpandableAlertBoxTitleProps> = ({\n title,\n open,\n openLabel = 'Les mer',\n closeLabel = 'Lukk',\n onClick,\n}) => {\n return (\n <div className=\"eds-expandable-alert-box__title\">\n <div>{title}</div>\n <button\n className=\"eds-expandable-alert-box__button\"\n onClick={onClick}\n type=\"button\"\n >\n {open ? closeLabel : openLabel}\n <ExpandArrow open={open} inline />\n </button>\n </div>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('alert', 'icons');\n\nexport { BannerAlertBox } from './BannerAlertBox';\nexport { ToastAlertBox } from './ToastAlertBox';\nexport { SmallAlertBox } from './SmallAlertBox';\nexport { ToastProvider, useToast } from './ToastProvider';\nexport { CopyableText } from './CopyableText';\nexport * from './ExpandableAlertBox';\n"],"names":["iconsMap","success","OutlinedValidationCheckIcon","info","OutlinedValidationInfoIcon","warning","OutlinedValidationExclamationIcon","error","OutlinedValidationErrorIcon","BaseAlertBox","children","className","closable","closeButtonLabel","variant","onClose","size","title","toastIsBeingRemoved","rest","React","useState","isClosed","setClosed","handleClose","Icon","classNames","type","onClick","CloseIcon","BannerAlertBox","props","ToastAlertBox","role","SmallAlertBox","width","EXIT_ANIMATION_TIME","ToastContext","createContext","toastReducer","prevToasts","action","payload","map","toast","id","isBeingRemoved","filter","createUniqueId","Math","random","toString","substring","createToast","content","ToastProvider","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","playExitAnimation","removeToastWithAnimationAfterDelay","setTimeout","addToast","handleMouseEnter","Object","values","forEach","timeoutId","handleMouseLeave","undefined","toastId","contextValue","useMemo","Provider","value","length","slice","toastToShow","onMouseEnter","onMouseLeave","key","useToast","context","useContext","Error","CopyableText","successHeading","successMessage","buttonRef","handleClick","copy","target","ref","PreformattedText","CopyIcon","SmallExpandableAlertBox","ExpandableAlertBox","BannerExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alert.cjs.development.js","sources":["../src/BaseAlertBox.tsx","../src/BannerAlertBox.tsx","../src/ToastAlertBox.tsx","../src/SmallAlertBox.tsx","../src/ToastProvider.tsx","../src/CopyableText.tsx","../src/ExpandableAlertBox.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport {\n CloseIcon,\n OutlinedValidationCheckIcon,\n OutlinedValidationExclamationIcon,\n OutlinedValidationInfoIcon,\n OutlinedValidationErrorIcon,\n} from '@entur/icons';\nimport './styles.scss';\n\nconst iconsMap = {\n success: OutlinedValidationCheckIcon,\n info: OutlinedValidationInfoIcon,\n warning: OutlinedValidationExclamationIcon,\n error: OutlinedValidationErrorIcon,\n};\n\ntype BaseAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises\n * @default \"Lukk\"\n */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen\n * @default () => {}\n */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: React.ReactNode;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Typen boks (internt bruk) */\n size: 'banner' | 'toast' | 'small';\n [key: string]: any;\n};\n\nexport const BaseAlertBox: React.FC<BaseAlertBoxProps> = ({\n children,\n className,\n closable = false,\n closeButtonLabel = 'Lukk',\n variant,\n onClose = () => ({}),\n size,\n title,\n toastIsBeingRemoved,\n ...rest\n}) => {\n const [isClosed, setClosed] = React.useState(false);\n if (isClosed) {\n return null;\n }\n const handleClose = () => {\n setClosed(true);\n onClose();\n };\n const Icon = iconsMap[variant];\n return (\n <div\n className={classNames(\n 'eds-alert-box',\n `eds-alert-box--${size}`,\n `eds-alert-box--${variant}`,\n { 'eds-alert-box--toast--exit-animation': toastIsBeingRemoved },\n className,\n )}\n {...rest}\n >\n {closable && (\n <button\n aria-label={closeButtonLabel}\n className=\"eds-alert-box__close-button\"\n type=\"button\"\n onClick={handleClose}\n >\n <CloseIcon />\n </button>\n )}\n <Icon className=\"eds-alert-box__icon\" />\n <div\n className={classNames('eds-alert-box__content', {\n 'eds-alert-box__content--no-title': !title,\n 'eds-alert-box__content--no-children': !children,\n })}\n >\n {title && <div className=\"eds-alert-box__title\">{title}</div>}\n {children && children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type BannerAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const BannerAlertBox: React.FC<BannerAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"banner\" />\n);\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type ToastAlertBoxProps = {\n /** Innholdet i toasten */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på toasten */\n variant: 'success' | 'info';\n [key: string]: any;\n};\n\nexport const ToastAlertBox: React.FC<ToastAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"toast\" role=\"status\" />\n);\n","import React from 'react';\nimport classNames from 'classnames';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type SmallAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Bredden på boksen - fullbredde eller tilpasset innholdet */\n width?: 'fluid' | 'fit-content';\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const SmallAlertBox: React.FC<SmallAlertBoxProps> = ({\n className,\n width,\n onClose,\n closable = false,\n closeButtonLabel,\n ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n onClose={onClose}\n closable={closable}\n closeButtonLabel={closeButtonLabel}\n size=\"small\"\n />\n);\n","import React from 'react';\nimport { ToastAlertBox } from './ToastAlertBox';\nimport classNames from 'classnames';\n\ntype ToastId = string;\n\ntype ToastVariants = 'success' | 'info';\n\ntype ToastType = {\n title?: string;\n content: React.ReactNode;\n id: ToastId;\n variant: ToastVariants;\n isBeingRemoved: boolean;\n};\n\ntype ToastContextType = {\n addToast: (payload: AddToastPayload) => void;\n removeToast: (id: ToastId) => void;\n toasts: ToastType[];\n};\n\ntype AddToastPayload =\n | { title?: string; content: React.ReactNode; variant?: ToastVariants }\n | string;\n\ntype ToastAction =\n | { type: 'ADD_TOAST'; payload: ToastType }\n | { type: 'REMOVE_TOAST'; payload: ToastId }\n | { type: 'PLAY_EXIT_ANIMATION'; payload: ToastId };\n\nconst EXIT_ANIMATION_TIME = 400;\n\nconst ToastContext = React.createContext<ToastContextType | null>(null);\n\nconst toastReducer = (\n prevToasts: ToastType[],\n action: ToastAction,\n): ToastType[] => {\n switch (action.type) {\n case 'ADD_TOAST':\n return [action.payload, ...prevToasts];\n case 'PLAY_EXIT_ANIMATION':\n return prevToasts.map(toast => {\n if (toast.id === action.payload)\n return { ...toast, isBeingRemoved: true };\n return toast;\n });\n case 'REMOVE_TOAST':\n return prevToasts.filter(toast => toast.id !== action.payload);\n }\n};\n\nconst createUniqueId = () => Math.random().toString().substring(2);\n\nconst createToast = (toast: AddToastPayload, id: ToastId): ToastType => {\n if (typeof toast === 'string') {\n return { id, content: toast, variant: 'success', isBeingRemoved: false };\n } else {\n return { id, variant: 'success', isBeingRemoved: false, ...toast };\n }\n};\n\nexport type ToastProviderProps = {\n /** Antall millisekunder før toasts forsvinner av seg selv\n * @default 6000\n */\n delay?: number;\n /** Plasseringen av toasts\n * @default \"bottom-right\"\n */\n position?: 'bottom-right' | 'top-right';\n /** Ekstra klassenavn til ToastProvider-wrapperen */\n className?: string;\n /** Ekstra styling som sendes til ToastProvider-wrapperen */\n style?: React.CSSProperties;\n /** Innholdet */\n children: React.ReactNode;\n};\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n delay = 6000,\n children,\n position = 'bottom-right',\n className,\n style,\n}) => {\n const [toasts, dispatch] = React.useReducer(toastReducer, []);\n const [hoveringId, setHovering] = React.useState<string>();\n const timeoutIdRefs = React.useRef<{ [key: string]: number }>({});\n\n const removeToast = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id]);\n dispatch({ type: 'REMOVE_TOAST', payload: id });\n delete timeoutIdRefs.current[id];\n }, []);\n\n const playExitAnimation = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id + 'animation']);\n dispatch({ type: 'PLAY_EXIT_ANIMATION', payload: id });\n delete timeoutIdRefs.current[id + 'animation'];\n }, []);\n\n const removeToastWithAnimationAfterDelay = React.useCallback(\n (id: ToastId, delay: number) => {\n timeoutIdRefs.current[id + 'animation'] = window.setTimeout(\n () => playExitAnimation(id),\n delay - EXIT_ANIMATION_TIME,\n );\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [timeoutIdRefs, playExitAnimation, removeToast],\n );\n\n const addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n removeToastWithAnimationAfterDelay(id, delay);\n },\n [delay, removeToastWithAnimationAfterDelay],\n );\n\n const handleMouseEnter = (toast: ToastType) => () => {\n if (toast.isBeingRemoved) return;\n setHovering(toast.id);\n Object.values(timeoutIdRefs.current).forEach(timeoutId => {\n window.clearTimeout(timeoutId);\n });\n timeoutIdRefs.current = {};\n };\n\n const handleMouseLeave = () => {\n setHovering(undefined);\n toasts.forEach(toast => {\n removeToastWithAnimationAfterDelay(toast.id, delay);\n });\n };\n\n const handleClose = (toastId: ToastId) => () => {\n removeToast(toastId);\n handleMouseLeave();\n };\n\n const contextValue = React.useMemo(\n () => ({ toasts, addToast, removeToast }),\n [addToast, removeToast, toasts],\n );\n\n return (\n <ToastContext.Provider value={contextValue}>\n {toasts.length > 0 && (\n <div\n className={classNames(\n 'eds-toast-container',\n `eds-toast-container--${position}`,\n className,\n )}\n style={style}\n >\n {toasts.slice(0, 3).map(toastToShow => (\n <ToastAlertBox\n variant={toastToShow.variant}\n title={toastToShow.title}\n onClose={handleClose(toastToShow.id)}\n onMouseEnter={handleMouseEnter(toastToShow)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\n toastIsBeingRemoved={toastToShow.isBeingRemoved}\n key={toastToShow.id}\n >\n {toastToShow.content}\n </ToastAlertBox>\n ))}\n </div>\n )}\n {children}\n </ToastContext.Provider>\n );\n};\n\nexport const useToast: () => {\n addToast: (payload: AddToastPayload) => void;\n} = () => {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(\n 'You need to wrap your component in a ToastProvider component in ' +\n 'order to use the useToast hook',\n );\n }\n const { addToast } = context;\n return {\n addToast,\n };\n};\n","import React from 'react';\n\nimport copy from 'copy-text-to-clipboard';\n\nimport { useToast } from './ToastProvider';\nimport { CopyIcon } from '@entur/icons';\nimport { PreformattedText } from '@entur/typography';\n\nimport './CopyableText.scss';\n\nexport type CopyableTextProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekstinnhold som vises og kopieres */\n children: string;\n /** Overskrift i toast-varselet */\n successHeading?: string;\n /** Bekreftelsesmelding i toast-varselet */\n successMessage?: string;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>;\n\nexport const CopyableText = ({\n children,\n successHeading = 'Kopiert!',\n successMessage = 'Innholdet ble kopiert til utklippstavlen.',\n className,\n ...rest\n}: CopyableTextProps): JSX.Element => {\n const { addToast } = useToast();\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const handleClick = () => {\n buttonRef.current &&\n copy(children, {\n target: buttonRef.current,\n }) &&\n addToast({ title: successHeading, content: successMessage });\n };\n return (\n <button\n className={'copyable-text ' + className}\n style={{ ...rest.style }}\n type=\"button\"\n onClick={handleClick}\n ref={buttonRef}\n aria-label=\"Kopier innhold\"\n {...rest}\n >\n <PreformattedText>{children}</PreformattedText>\n <CopyIcon className=\"copyable-text__icon\" />\n </button>\n );\n};\n","import { BaseExpand, ExpandArrow } from '@entur/expand/';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { BannerAlertBoxProps } from './BannerAlertBox';\nimport { BaseAlertBox } from './BaseAlertBox';\nimport './ExpandableAlertBox.scss';\nimport { SmallAlertBoxProps } from './SmallAlertBox';\n\nexport type SmallExpandableAlertBoxProps = ExpandableAlertBoxProps &\n SmallAlertBoxProps;\n\nexport const SmallExpandableAlertBox: React.FC<SmallExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n };\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"banner\" {...props} />;\n };\n\ntype ExpandableAlertBoxProps = {\n /**Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Tittelen til ExpandableAlertBox */\n title: React.ReactNode;\n /**Innhold som vises ved ekspandering */\n children: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Tekst som vises på ekspanderingsknappen før åpning\n * @default \"Les mer\"\n */\n openLabel?: string;\n /** Tekst som vises på ekspanderingsknappen når den er åpnet\n * @default \"Lukk\"\n */\n closeLabel?: string;\n [key: string]: any;\n};\n\nconst ExpandableAlertBox: React.FC<ExpandableAlertBoxProps> = ({\n variant,\n title,\n children,\n size,\n className,\n openLabel,\n closeLabel,\n ...rest\n}) => {\n const [open, setopen] = React.useState(false);\n return (\n <BaseAlertBox\n size={size}\n variant={variant}\n className={classNames('eds-expandable-alert-box', className)}\n title={\n <ExpandableAlertBoxTitle\n open={open}\n title={title}\n onClick={() => setopen(!open)}\n openLabel={openLabel}\n closeLabel={closeLabel}\n />\n }\n {...rest}\n >\n <BaseExpand open={open}>{children}</BaseExpand>\n </BaseAlertBox>\n );\n};\n\ntype ExpandableAlertBoxTitleProps = {\n title: React.ReactNode;\n open: boolean;\n openLabel?: string;\n closeLabel?: string;\n onClick: (e: React.MouseEvent) => void;\n};\n\nconst ExpandableAlertBoxTitle: React.FC<ExpandableAlertBoxTitleProps> = ({\n title,\n open,\n openLabel = 'Les mer',\n closeLabel = 'Lukk',\n onClick,\n}) => {\n return (\n <div className=\"eds-expandable-alert-box__title\">\n <div>{title}</div>\n <button\n className=\"eds-expandable-alert-box__button\"\n onClick={onClick}\n type=\"button\"\n >\n {open ? closeLabel : openLabel}\n <ExpandArrow open={open} inline />\n </button>\n </div>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('alert', 'icons');\n\nexport { BannerAlertBox } from './BannerAlertBox';\nexport { ToastAlertBox } from './ToastAlertBox';\nexport { SmallAlertBox } from './SmallAlertBox';\nexport { ToastProvider, useToast } from './ToastProvider';\nexport { CopyableText } from './CopyableText';\nexport * from './ExpandableAlertBox';\n"],"names":["iconsMap","success","OutlinedValidationCheckIcon","info","OutlinedValidationInfoIcon","warning","OutlinedValidationExclamationIcon","error","OutlinedValidationErrorIcon","BaseAlertBox","children","className","closable","closeButtonLabel","variant","onClose","size","title","toastIsBeingRemoved","rest","React","useState","isClosed","setClosed","handleClose","Icon","classNames","type","onClick","CloseIcon","BannerAlertBox","props","ToastAlertBox","role","SmallAlertBox","width","EXIT_ANIMATION_TIME","ToastContext","createContext","toastReducer","prevToasts","action","payload","map","toast","id","isBeingRemoved","filter","createUniqueId","Math","random","toString","substring","createToast","content","ToastProvider","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","playExitAnimation","removeToastWithAnimationAfterDelay","setTimeout","addToast","handleMouseEnter","Object","values","forEach","timeoutId","handleMouseLeave","undefined","toastId","contextValue","useMemo","Provider","value","length","slice","toastToShow","onMouseEnter","onMouseLeave","key","useToast","context","useContext","Error","CopyableText","successHeading","successMessage","buttonRef","handleClick","copy","target","ref","PreformattedText","CopyIcon","SmallExpandableAlertBox","ExpandableAlertBox","BannerExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.cjs.production.min.js","sources":["../src/BaseAlertBox.tsx","../src/ToastAlertBox.tsx","../src/ToastProvider.tsx","../src/ExpandableAlertBox.tsx","../src/index.tsx","../src/BannerAlertBox.tsx","../src/CopyableText.tsx","../src/SmallAlertBox.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport {\n CloseIcon,\n OutlinedValidationCheckIcon,\n OutlinedValidationExclamationIcon,\n OutlinedValidationInfoIcon,\n OutlinedValidationErrorIcon,\n} from '@entur/icons';\nimport './styles.scss';\n\nconst iconsMap = {\n success: OutlinedValidationCheckIcon,\n info: OutlinedValidationInfoIcon,\n warning: OutlinedValidationExclamationIcon,\n error: OutlinedValidationErrorIcon,\n};\n\ntype BaseAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises\n * @default \"Lukk\"\n */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen\n * @default () => {}\n */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: React.ReactNode;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Typen boks (internt bruk) */\n size: 'banner' | 'toast' | 'small';\n [key: string]: any;\n};\n\nexport const BaseAlertBox: React.FC<BaseAlertBoxProps> = ({\n children,\n className,\n closable = false,\n closeButtonLabel = 'Lukk',\n variant,\n onClose = () => ({}),\n size,\n title,\n toastIsBeingRemoved,\n ...rest\n}) => {\n const [isClosed, setClosed] = React.useState(false);\n if (isClosed) {\n return null;\n }\n const handleClose = () => {\n setClosed(true);\n onClose();\n };\n const Icon = iconsMap[variant];\n return (\n <div\n className={classNames(\n 'eds-alert-box',\n `eds-alert-box--${size}`,\n `eds-alert-box--${variant}`,\n { 'eds-alert-box--toast--exit-animation': toastIsBeingRemoved },\n className,\n )}\n {...rest}\n >\n {closable && (\n <button\n aria-label={closeButtonLabel}\n className=\"eds-alert-box__close-button\"\n type=\"button\"\n onClick={handleClose}\n >\n <CloseIcon />\n </button>\n )}\n <Icon className=\"eds-alert-box__icon\" />\n <div\n className={classNames('eds-alert-box__content', {\n 'eds-alert-box__content--no-title': !title,\n 'eds-alert-box__content--no-children': !children,\n })}\n >\n {title && <div className=\"eds-alert-box__title\">{title}</div>}\n {children && children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type ToastAlertBoxProps = {\n /** Innholdet i toasten */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på toasten */\n variant: 'success' | 'info';\n [key: string]: any;\n};\n\nexport const ToastAlertBox: React.FC<ToastAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"toast\" role=\"status\" />\n);\n","import React from 'react';\nimport { ToastAlertBox } from './ToastAlertBox';\nimport classNames from 'classnames';\n\ntype ToastId = string;\n\ntype ToastVariants = 'success' | 'info';\n\ntype ToastType = {\n title?: string;\n content: React.ReactNode;\n id: ToastId;\n variant: ToastVariants;\n isBeingRemoved: boolean;\n};\n\ntype ToastContextType = {\n addToast: (payload: AddToastPayload) => void;\n removeToast: (id: ToastId) => void;\n toasts: ToastType[];\n};\n\ntype AddToastPayload =\n | { title?: string; content: React.ReactNode; variant?: ToastVariants }\n | string;\n\ntype ToastAction =\n | { type: 'ADD_TOAST'; payload: ToastType }\n | { type: 'REMOVE_TOAST'; payload: ToastId }\n | { type: 'PLAY_EXIT_ANIMATION'; payload: ToastId };\n\nconst EXIT_ANIMATION_TIME = 400;\n\nconst ToastContext = React.createContext<ToastContextType | null>(null);\n\nconst toastReducer = (\n prevToasts: ToastType[],\n action: ToastAction,\n): ToastType[] => {\n switch (action.type) {\n case 'ADD_TOAST':\n return [action.payload, ...prevToasts];\n case 'PLAY_EXIT_ANIMATION':\n return prevToasts.map(toast => {\n if (toast.id === action.payload)\n return { ...toast, isBeingRemoved: true };\n return toast;\n });\n case 'REMOVE_TOAST':\n return prevToasts.filter(toast => toast.id !== action.payload);\n }\n};\n\nconst createUniqueId = () => Math.random().toString().substring(2);\n\nconst createToast = (toast: AddToastPayload, id: ToastId): ToastType => {\n if (typeof toast === 'string') {\n return { id, content: toast, variant: 'success', isBeingRemoved: false };\n } else {\n return { id, variant: 'success', isBeingRemoved: false, ...toast };\n }\n};\n\nexport type ToastProviderProps = {\n /** Antall millisekunder før toasts forsvinner av seg selv\n * @default 6000\n */\n delay?: number;\n /** Plasseringen av toasts\n * @default \"bottom-right\"\n */\n position?: 'bottom-right' | 'top-right';\n /** Ekstra klassenavn til ToastProvider-wrapperen */\n className?: string;\n /** Ekstra styling som sendes til ToastProvider-wrapperen */\n style?: React.CSSProperties;\n /** Innholdet */\n children: React.ReactNode;\n};\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n delay = 6000,\n children,\n position = 'bottom-right',\n className,\n style,\n}) => {\n const [toasts, dispatch] = React.useReducer(toastReducer, []);\n const [hoveringId, setHovering] = React.useState<string>();\n const timeoutIdRefs = React.useRef<{ [key: string]: number }>({});\n\n const removeToast = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id]);\n dispatch({ type: 'REMOVE_TOAST', payload: id });\n delete timeoutIdRefs.current[id];\n }, []);\n\n const playExitAnimation = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id + 'animation']);\n dispatch({ type: 'PLAY_EXIT_ANIMATION', payload: id });\n delete timeoutIdRefs.current[id + 'animation'];\n }, []);\n\n const removeToastWithAnimationAfterDelay = React.useCallback(\n (id: ToastId, delay: number) => {\n timeoutIdRefs.current[id + 'animation'] = window.setTimeout(\n () => playExitAnimation(id),\n delay - EXIT_ANIMATION_TIME,\n );\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [timeoutIdRefs, playExitAnimation, removeToast],\n );\n\n const addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n removeToastWithAnimationAfterDelay(id, delay);\n },\n [delay, removeToastWithAnimationAfterDelay],\n );\n\n const handleMouseEnter = (toast: ToastType) => () => {\n if (toast.isBeingRemoved) return;\n setHovering(toast.id);\n Object.values(timeoutIdRefs.current).forEach(timeoutId => {\n window.clearTimeout(timeoutId);\n });\n timeoutIdRefs.current = {};\n };\n\n const handleMouseLeave = () => {\n setHovering(undefined);\n toasts.forEach(toast => {\n removeToastWithAnimationAfterDelay(toast.id, delay);\n });\n };\n\n const handleClose = (toastId: ToastId) => () => {\n removeToast(toastId);\n handleMouseLeave();\n };\n\n const contextValue = React.useMemo(\n () => ({ toasts, addToast, removeToast }),\n [addToast, removeToast, toasts],\n );\n\n return (\n <ToastContext.Provider value={contextValue}>\n {toasts.length > 0 && (\n <div\n className={classNames(\n 'eds-toast-container',\n `eds-toast-container--${position}`,\n className,\n )}\n style={style}\n >\n {toasts.slice(0, 3).map(toastToShow => (\n <ToastAlertBox\n variant={toastToShow.variant}\n title={toastToShow.title}\n onClose={handleClose(toastToShow.id)}\n onMouseEnter={handleMouseEnter(toastToShow)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\n toastIsBeingRemoved={toastToShow.isBeingRemoved}\n key={toastToShow.id}\n >\n {toastToShow.content}\n </ToastAlertBox>\n ))}\n </div>\n )}\n {children}\n </ToastContext.Provider>\n );\n};\n\nexport const useToast: () => {\n addToast: (payload: AddToastPayload) => void;\n} = () => {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(\n 'You need to wrap your component in a ToastProvider component in ' +\n 'order to use the useToast hook',\n );\n }\n const { addToast } = context;\n return {\n addToast,\n };\n};\n","import { BaseExpand, ExpandArrow } from '@entur/expand/';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { BannerAlertBoxProps } from './BannerAlertBox';\nimport { BaseAlertBox } from './BaseAlertBox';\nimport './ExpandableAlertBox.scss';\nimport { SmallAlertBoxProps } from './SmallAlertBox';\n\nexport type SmallExpandableAlertBoxProps = ExpandableAlertBoxProps &\n SmallAlertBoxProps;\n\nexport const SmallExpandableAlertBox: React.FC<SmallExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n };\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"banner\" {...props} />;\n };\n\ntype ExpandableAlertBoxProps = {\n /**Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Tittelen til ExpandableAlertBox */\n title: React.ReactNode;\n /**Innhold som vises ved ekspandering */\n children: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Tekst som vises på ekspanderingsknappen før åpning\n * @default \"Les mer\"\n */\n openLabel?: string;\n /** Tekst som vises på ekspanderingsknappen når den er åpnet\n * @default \"Lukk\"\n */\n closeLabel?: string;\n [key: string]: any;\n};\n\nconst ExpandableAlertBox: React.FC<ExpandableAlertBoxProps> = ({\n variant,\n title,\n children,\n size,\n className,\n openLabel,\n closeLabel,\n ...rest\n}) => {\n const [open, setopen] = React.useState(false);\n return (\n <BaseAlertBox\n size={size}\n variant={variant}\n className={classNames('eds-expandable-alert-box', className)}\n title={\n <ExpandableAlertBoxTitle\n open={open}\n title={title}\n onClick={() => setopen(!open)}\n openLabel={openLabel}\n closeLabel={closeLabel}\n />\n }\n {...rest}\n >\n <BaseExpand open={open}>{children}</BaseExpand>\n </BaseAlertBox>\n );\n};\n\ntype ExpandableAlertBoxTitleProps = {\n title: React.ReactNode;\n open: boolean;\n openLabel?: string;\n closeLabel?: string;\n onClick: (e: React.MouseEvent) => void;\n};\n\nconst ExpandableAlertBoxTitle: React.FC<ExpandableAlertBoxTitleProps> = ({\n title,\n open,\n openLabel = 'Les mer',\n closeLabel = 'Lukk',\n onClick,\n}) => {\n return (\n <div className=\"eds-expandable-alert-box__title\">\n <div>{title}</div>\n <button\n className=\"eds-expandable-alert-box__button\"\n onClick={onClick}\n type=\"button\"\n >\n {open ? closeLabel : openLabel}\n <ExpandArrow open={open} inline />\n </button>\n </div>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('alert', 'icons');\n\nexport { BannerAlertBox } from './BannerAlertBox';\nexport { ToastAlertBox } from './ToastAlertBox';\nexport { SmallAlertBox } from './SmallAlertBox';\nexport { ToastProvider, useToast } from './ToastProvider';\nexport { CopyableText } from './CopyableText';\nexport * from './ExpandableAlertBox';\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type BannerAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const BannerAlertBox: React.FC<BannerAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"banner\" />\n);\n","import React from 'react';\n\nimport copy from 'copy-text-to-clipboard';\n\nimport { useToast } from './ToastProvider';\nimport { CopyIcon } from '@entur/icons';\nimport { PreformattedText } from '@entur/typography';\n\nimport './CopyableText.scss';\n\nexport type CopyableTextProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekstinnhold som vises og kopieres */\n children: string;\n /** Overskrift i toast-varselet */\n successHeading?: string;\n /** Bekreftelsesmelding i toast-varselet */\n successMessage?: string;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>;\n\nexport const CopyableText = ({\n children,\n successHeading = 'Kopiert!',\n successMessage = 'Innholdet ble kopiert til utklippstavlen.',\n className,\n ...rest\n}: CopyableTextProps): JSX.Element => {\n const { addToast } = useToast();\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const handleClick = () => {\n buttonRef.current &&\n copy(children, {\n target: buttonRef.current,\n }) &&\n addToast({ title: successHeading, content: successMessage });\n };\n return (\n <button\n className={'copyable-text ' + className}\n style={{ ...rest.style }}\n type=\"button\"\n onClick={handleClick}\n ref={buttonRef}\n aria-label=\"Kopier innhold\"\n {...rest}\n >\n <PreformattedText>{children}</PreformattedText>\n <CopyIcon className=\"copyable-text__icon\" />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type SmallAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Bredden på boksen - fullbredde eller tilpasset innholdet */\n width?: 'fluid' | 'fit-content';\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const SmallAlertBox: React.FC<SmallAlertBoxProps> = ({\n className,\n width,\n onClose,\n closable = false,\n closeButtonLabel,\n ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n onClose={onClose}\n closable={closable}\n closeButtonLabel={closeButtonLabel}\n size=\"small\"\n />\n);\n"],"names":["iconsMap","success","OutlinedValidationCheckIcon","info","OutlinedValidationInfoIcon","warning","OutlinedValidationExclamationIcon","error","OutlinedValidationErrorIcon","BaseAlertBox","children","className","_ref$closable","closable","_ref$closeButtonLabel","closeButtonLabel","variant","_ref$onClose","onClose","size","title","toastIsBeingRemoved","rest","React","useState","setClosed","Icon","classNames","type","onClick","CloseIcon","ToastAlertBox","props","role","ToastContext","createContext","toastReducer","prevToasts","action","payload","map","toast","id","isBeingRemoved","filter","useToast","context","useContext","Error","addToast","ExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","_ref2$openLabel","_ref2$closeLabel","ExpandArrow","inline","warnAboutMissingStyles","_ref$successHeading","successHeading","_ref$successMessage","successMessage","buttonRef","useRef","style","current","copy","target","content","ref","PreformattedText","CopyIcon","width","delay","_ref$position","position","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","removeToast","useCallback","window","clearTimeout","playExitAnimation","removeToastWithAnimationAfterDelay","setTimeout","Math","random","toString","substring","createToast","handleMouseLeave","undefined","forEach","contextValue","useMemo","Provider","value","length","slice","toastToShow","toastId","onMouseEnter","Object","values","timeoutId","onMouseLeave","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alert.cjs.production.min.js","sources":["../src/BaseAlertBox.tsx","../src/ToastAlertBox.tsx","../src/ToastProvider.tsx","../src/ExpandableAlertBox.tsx","../src/index.tsx","../src/BannerAlertBox.tsx","../src/CopyableText.tsx","../src/SmallAlertBox.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport {\n CloseIcon,\n OutlinedValidationCheckIcon,\n OutlinedValidationExclamationIcon,\n OutlinedValidationInfoIcon,\n OutlinedValidationErrorIcon,\n} from '@entur/icons';\nimport './styles.scss';\n\nconst iconsMap = {\n success: OutlinedValidationCheckIcon,\n info: OutlinedValidationInfoIcon,\n warning: OutlinedValidationExclamationIcon,\n error: OutlinedValidationErrorIcon,\n};\n\ntype BaseAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises\n * @default \"Lukk\"\n */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen\n * @default () => {}\n */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: React.ReactNode;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Typen boks (internt bruk) */\n size: 'banner' | 'toast' | 'small';\n [key: string]: any;\n};\n\nexport const BaseAlertBox: React.FC<BaseAlertBoxProps> = ({\n children,\n className,\n closable = false,\n closeButtonLabel = 'Lukk',\n variant,\n onClose = () => ({}),\n size,\n title,\n toastIsBeingRemoved,\n ...rest\n}) => {\n const [isClosed, setClosed] = React.useState(false);\n if (isClosed) {\n return null;\n }\n const handleClose = () => {\n setClosed(true);\n onClose();\n };\n const Icon = iconsMap[variant];\n return (\n <div\n className={classNames(\n 'eds-alert-box',\n `eds-alert-box--${size}`,\n `eds-alert-box--${variant}`,\n { 'eds-alert-box--toast--exit-animation': toastIsBeingRemoved },\n className,\n )}\n {...rest}\n >\n {closable && (\n <button\n aria-label={closeButtonLabel}\n className=\"eds-alert-box__close-button\"\n type=\"button\"\n onClick={handleClose}\n >\n <CloseIcon />\n </button>\n )}\n <Icon className=\"eds-alert-box__icon\" />\n <div\n className={classNames('eds-alert-box__content', {\n 'eds-alert-box__content--no-title': !title,\n 'eds-alert-box__content--no-children': !children,\n })}\n >\n {title && <div className=\"eds-alert-box__title\">{title}</div>}\n {children && children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type ToastAlertBoxProps = {\n /** Innholdet i toasten */\n children?: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på toasten */\n variant: 'success' | 'info';\n [key: string]: any;\n};\n\nexport const ToastAlertBox: React.FC<ToastAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"toast\" role=\"status\" />\n);\n","import React from 'react';\nimport { ToastAlertBox } from './ToastAlertBox';\nimport classNames from 'classnames';\n\ntype ToastId = string;\n\ntype ToastVariants = 'success' | 'info';\n\ntype ToastType = {\n title?: string;\n content: React.ReactNode;\n id: ToastId;\n variant: ToastVariants;\n isBeingRemoved: boolean;\n};\n\ntype ToastContextType = {\n addToast: (payload: AddToastPayload) => void;\n removeToast: (id: ToastId) => void;\n toasts: ToastType[];\n};\n\ntype AddToastPayload =\n | { title?: string; content: React.ReactNode; variant?: ToastVariants }\n | string;\n\ntype ToastAction =\n | { type: 'ADD_TOAST'; payload: ToastType }\n | { type: 'REMOVE_TOAST'; payload: ToastId }\n | { type: 'PLAY_EXIT_ANIMATION'; payload: ToastId };\n\nconst EXIT_ANIMATION_TIME = 400;\n\nconst ToastContext = React.createContext<ToastContextType | null>(null);\n\nconst toastReducer = (\n prevToasts: ToastType[],\n action: ToastAction,\n): ToastType[] => {\n switch (action.type) {\n case 'ADD_TOAST':\n return [action.payload, ...prevToasts];\n case 'PLAY_EXIT_ANIMATION':\n return prevToasts.map(toast => {\n if (toast.id === action.payload)\n return { ...toast, isBeingRemoved: true };\n return toast;\n });\n case 'REMOVE_TOAST':\n return prevToasts.filter(toast => toast.id !== action.payload);\n }\n};\n\nconst createUniqueId = () => Math.random().toString().substring(2);\n\nconst createToast = (toast: AddToastPayload, id: ToastId): ToastType => {\n if (typeof toast === 'string') {\n return { id, content: toast, variant: 'success', isBeingRemoved: false };\n } else {\n return { id, variant: 'success', isBeingRemoved: false, ...toast };\n }\n};\n\nexport type ToastProviderProps = {\n /** Antall millisekunder før toasts forsvinner av seg selv\n * @default 6000\n */\n delay?: number;\n /** Plasseringen av toasts\n * @default \"bottom-right\"\n */\n position?: 'bottom-right' | 'top-right';\n /** Ekstra klassenavn til ToastProvider-wrapperen */\n className?: string;\n /** Ekstra styling som sendes til ToastProvider-wrapperen */\n style?: React.CSSProperties;\n /** Innholdet */\n children: React.ReactNode;\n};\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n delay = 6000,\n children,\n position = 'bottom-right',\n className,\n style,\n}) => {\n const [toasts, dispatch] = React.useReducer(toastReducer, []);\n const [hoveringId, setHovering] = React.useState<string>();\n const timeoutIdRefs = React.useRef<{ [key: string]: number }>({});\n\n const removeToast = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id]);\n dispatch({ type: 'REMOVE_TOAST', payload: id });\n delete timeoutIdRefs.current[id];\n }, []);\n\n const playExitAnimation = React.useCallback((id: ToastId) => {\n window.clearTimeout(timeoutIdRefs.current[id + 'animation']);\n dispatch({ type: 'PLAY_EXIT_ANIMATION', payload: id });\n delete timeoutIdRefs.current[id + 'animation'];\n }, []);\n\n const removeToastWithAnimationAfterDelay = React.useCallback(\n (id: ToastId, delay: number) => {\n timeoutIdRefs.current[id + 'animation'] = window.setTimeout(\n () => playExitAnimation(id),\n delay - EXIT_ANIMATION_TIME,\n );\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [timeoutIdRefs, playExitAnimation, removeToast],\n );\n\n const addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n removeToastWithAnimationAfterDelay(id, delay);\n },\n [delay, removeToastWithAnimationAfterDelay],\n );\n\n const handleMouseEnter = (toast: ToastType) => () => {\n if (toast.isBeingRemoved) return;\n setHovering(toast.id);\n Object.values(timeoutIdRefs.current).forEach(timeoutId => {\n window.clearTimeout(timeoutId);\n });\n timeoutIdRefs.current = {};\n };\n\n const handleMouseLeave = () => {\n setHovering(undefined);\n toasts.forEach(toast => {\n removeToastWithAnimationAfterDelay(toast.id, delay);\n });\n };\n\n const handleClose = (toastId: ToastId) => () => {\n removeToast(toastId);\n handleMouseLeave();\n };\n\n const contextValue = React.useMemo(\n () => ({ toasts, addToast, removeToast }),\n [addToast, removeToast, toasts],\n );\n\n return (\n <ToastContext.Provider value={contextValue}>\n {toasts.length > 0 && (\n <div\n className={classNames(\n 'eds-toast-container',\n `eds-toast-container--${position}`,\n className,\n )}\n style={style}\n >\n {toasts.slice(0, 3).map(toastToShow => (\n <ToastAlertBox\n variant={toastToShow.variant}\n title={toastToShow.title}\n onClose={handleClose(toastToShow.id)}\n onMouseEnter={handleMouseEnter(toastToShow)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\n toastIsBeingRemoved={toastToShow.isBeingRemoved}\n key={toastToShow.id}\n >\n {toastToShow.content}\n </ToastAlertBox>\n ))}\n </div>\n )}\n {children}\n </ToastContext.Provider>\n );\n};\n\nexport const useToast: () => {\n addToast: (payload: AddToastPayload) => void;\n} = () => {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(\n 'You need to wrap your component in a ToastProvider component in ' +\n 'order to use the useToast hook',\n );\n }\n const { addToast } = context;\n return {\n addToast,\n };\n};\n","import { BaseExpand, ExpandArrow } from '@entur/expand/';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { BannerAlertBoxProps } from './BannerAlertBox';\nimport { BaseAlertBox } from './BaseAlertBox';\nimport './ExpandableAlertBox.scss';\nimport { SmallAlertBoxProps } from './SmallAlertBox';\n\nexport type SmallExpandableAlertBoxProps = ExpandableAlertBoxProps &\n SmallAlertBoxProps;\n\nexport const SmallExpandableAlertBox: React.FC<SmallExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n };\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> =\n props => {\n return <ExpandableAlertBox size=\"banner\" {...props} />;\n };\n\ntype ExpandableAlertBoxProps = {\n /**Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n /** Tittelen til ExpandableAlertBox */\n title: React.ReactNode;\n /**Innhold som vises ved ekspandering */\n children: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Tekst som vises på ekspanderingsknappen før åpning\n * @default \"Les mer\"\n */\n openLabel?: string;\n /** Tekst som vises på ekspanderingsknappen når den er åpnet\n * @default \"Lukk\"\n */\n closeLabel?: string;\n [key: string]: any;\n};\n\nconst ExpandableAlertBox: React.FC<ExpandableAlertBoxProps> = ({\n variant,\n title,\n children,\n size,\n className,\n openLabel,\n closeLabel,\n ...rest\n}) => {\n const [open, setopen] = React.useState(false);\n return (\n <BaseAlertBox\n size={size}\n variant={variant}\n className={classNames('eds-expandable-alert-box', className)}\n title={\n <ExpandableAlertBoxTitle\n open={open}\n title={title}\n onClick={() => setopen(!open)}\n openLabel={openLabel}\n closeLabel={closeLabel}\n />\n }\n {...rest}\n >\n <BaseExpand open={open}>{children}</BaseExpand>\n </BaseAlertBox>\n );\n};\n\ntype ExpandableAlertBoxTitleProps = {\n title: React.ReactNode;\n open: boolean;\n openLabel?: string;\n closeLabel?: string;\n onClick: (e: React.MouseEvent) => void;\n};\n\nconst ExpandableAlertBoxTitle: React.FC<ExpandableAlertBoxTitleProps> = ({\n title,\n open,\n openLabel = 'Les mer',\n closeLabel = 'Lukk',\n onClick,\n}) => {\n return (\n <div className=\"eds-expandable-alert-box__title\">\n <div>{title}</div>\n <button\n className=\"eds-expandable-alert-box__button\"\n onClick={onClick}\n type=\"button\"\n >\n {open ? closeLabel : openLabel}\n <ExpandArrow open={open} inline />\n </button>\n </div>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('alert', 'icons');\n\nexport { BannerAlertBox } from './BannerAlertBox';\nexport { ToastAlertBox } from './ToastAlertBox';\nexport { SmallAlertBox } from './SmallAlertBox';\nexport { ToastProvider, useToast } from './ToastProvider';\nexport { CopyableText } from './CopyableText';\nexport * from './ExpandableAlertBox';\n","import React from 'react';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type BannerAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const BannerAlertBox: React.FC<BannerAlertBoxProps> = props => (\n <BaseAlertBox {...props} size=\"banner\" />\n);\n","import React from 'react';\n\nimport copy from 'copy-text-to-clipboard';\n\nimport { useToast } from './ToastProvider';\nimport { CopyIcon } from '@entur/icons';\nimport { PreformattedText } from '@entur/typography';\n\nimport './CopyableText.scss';\n\nexport type CopyableTextProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekstinnhold som vises og kopieres */\n children: string;\n /** Overskrift i toast-varselet */\n successHeading?: string;\n /** Bekreftelsesmelding i toast-varselet */\n successMessage?: string;\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>;\n\nexport const CopyableText = ({\n children,\n successHeading = 'Kopiert!',\n successMessage = 'Innholdet ble kopiert til utklippstavlen.',\n className,\n ...rest\n}: CopyableTextProps): JSX.Element => {\n const { addToast } = useToast();\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const handleClick = () => {\n buttonRef.current &&\n copy(children, {\n target: buttonRef.current,\n }) &&\n addToast({ title: successHeading, content: successMessage });\n };\n return (\n <button\n className={'copyable-text ' + className}\n style={{ ...rest.style }}\n type=\"button\"\n onClick={handleClick}\n ref={buttonRef}\n aria-label=\"Kopier innhold\"\n {...rest}\n >\n <PreformattedText>{children}</PreformattedText>\n <CopyIcon className=\"copyable-text__icon\" />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { BaseAlertBox } from './BaseAlertBox';\n\nexport type SmallAlertBoxProps = {\n /** Innholdet i alert-boksen */\n children: React.ReactNode;\n /** Ekstra klassenavn */\n className?: string;\n /** Skjermleser-label for lukkeknappen, om den vises */\n closeButtonLabel?: string;\n /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne\n * @default false\n */\n closable?: boolean;\n /** Callback som kalles når man lukker boksen */\n onClose?: () => void;\n /** Tittel på boksen - oppsummer virkning */\n title?: string;\n /** Bredden på boksen - fullbredde eller tilpasset innholdet */\n width?: 'fluid' | 'fit-content';\n /** Farge og uttrykk på alert-boksen */\n variant: 'success' | 'info' | 'warning' | 'error';\n [key: string]: any;\n};\n\nexport const SmallAlertBox: React.FC<SmallAlertBoxProps> = ({\n className,\n width,\n onClose,\n closable = false,\n closeButtonLabel,\n ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n onClose={onClose}\n closable={closable}\n closeButtonLabel={closeButtonLabel}\n size=\"small\"\n />\n);\n"],"names":["iconsMap","success","OutlinedValidationCheckIcon","info","OutlinedValidationInfoIcon","warning","OutlinedValidationExclamationIcon","error","OutlinedValidationErrorIcon","BaseAlertBox","children","className","closable","closeButtonLabel","variant","onClose","size","title","toastIsBeingRemoved","rest","React","useState","setClosed","Icon","classNames","type","onClick","CloseIcon","ToastAlertBox","props","role","ToastContext","createContext","toastReducer","prevToasts","action","payload","map","toast","id","isBeingRemoved","filter","useToast","context","useContext","Error","addToast","ExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles","successHeading","successMessage","buttonRef","useRef","style","current","copy","target","content","ref","PreformattedText","CopyIcon","width","delay","position","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","removeToast","useCallback","window","clearTimeout","playExitAnimation","removeToastWithAnimationAfterDelay","setTimeout","Math","random","toString","substring","createToast","handleMouseLeave","undefined","forEach","contextValue","useMemo","Provider","value","length","slice","toastToShow","toastId","onMouseEnter","Object","values","timeoutId","onMouseLeave","key"],"mappings":"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"}
|