@entur/alert 0.8.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,35 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.10.0](https://bitbucket.org/enturas/design-system/compare/@entur/alert@0.9.1...@entur/alert@0.10.0) (2022-01-21)
7
+
8
+ ### Features
9
+
10
+ - **copyable text:** add new CopyableText component ([b793604](https://bitbucket.org/enturas/design-system/commits/b7936040b0fe054e061af4d6a0b56279b3e6ed1c))
11
+
12
+ ## [0.9.1](https://bitbucket.org/enturas/design-system/compare/@entur/alert@0.9.0...@entur/alert@0.9.1) (2021-11-17)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **smallalertbox:** fix closable prop warning ([7808494](https://bitbucket.org/enturas/design-system/commits/780849470227e2e1edf847b3d58c1b81b5b70c1c))
17
+
18
+ # [0.9.0](https://bitbucket.org/enturas/design-system/compare/@entur/alert@0.8.3...@entur/alert@0.9.0) (2021-10-18)
19
+
20
+ ### Bug Fixes
21
+
22
+ - **alert box:** adjust close button focus styling ([b163918](https://bitbucket.org/enturas/design-system/commits/b1639187829e5f8d8ae971ea68f80ad0d7115c88))
23
+
24
+ ### Features
25
+
26
+ - **smallalertbox:** add closable prop ([f07bba6](https://bitbucket.org/enturas/design-system/commits/f07bba67ecb0829cd13f81ddb425771129efda33))
27
+
28
+ ## [0.8.3](https://bitbucket.org/enturas/design-system/compare/@entur/alert@0.8.2...@entur/alert@0.8.3) (2021-09-23)
29
+
30
+ ### Bug Fixes
31
+
32
+ - **expandablealertbox:** fix focus styling for expand button ([7c0c604](https://bitbucket.org/enturas/design-system/commits/7c0c604b39066498d833234cdaa919049569f6f2))
33
+ - **smallalertbox:** fix icon position ([e53eb11](https://bitbucket.org/enturas/design-system/commits/e53eb110df787725342d8004621fc8940a4f7744))
34
+
6
35
  ## [0.8.2](https://bitbucket.org/enturas/design-system/compare/@entur/alert@0.8.1...@entur/alert@0.8.2) (2021-09-13)
7
36
 
8
37
  ### Bug Fixes
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import './CopyableText.scss';
3
+ export declare type CopyableTextProps = {
4
+ /** Ekstra klassenavn */
5
+ className?: string;
6
+ /** Tekstinnhold som vises og kopieres */
7
+ children: string;
8
+ /** Overskrift i toast-varselet */
9
+ successHeading?: string;
10
+ /** Bekreftelsesmelding i toast-varselet */
11
+ successMessage?: string;
12
+ } & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>;
13
+ export declare const CopyableText: ({ children, successHeading, successMessage, className, ...rest }: CopyableTextProps) => JSX.Element;
@@ -6,6 +6,10 @@ export declare type SmallAlertBoxProps = {
6
6
  className?: string;
7
7
  /** Skjermleser-label for lukkeknappen, om den vises */
8
8
  closeButtonLabel?: string;
9
+ /** Om denne er true, vil boksen få en lukkeknapp i høyre hjørne
10
+ * @default false
11
+ */
12
+ closable?: boolean;
9
13
  /** Callback som kalles når man lukker boksen */
10
14
  onClose?: () => void;
11
15
  /** Tittel på boksen - oppsummer virkning */
@@ -8,6 +8,8 @@ var utils = require('@entur/utils');
8
8
  var React = _interopDefault(require('react'));
9
9
  var classNames = _interopDefault(require('classnames'));
10
10
  var icons = require('@entur/icons');
11
+ var copy = _interopDefault(require('copy-text-to-clipboard'));
12
+ var typography = require('@entur/typography');
11
13
  var _ = require('@entur/expand/');
12
14
 
13
15
  function _extends() {
@@ -114,14 +116,20 @@ var ToastAlertBox = function ToastAlertBox(props) {
114
116
  var SmallAlertBox = function SmallAlertBox(_ref) {
115
117
  var className = _ref.className,
116
118
  width = _ref.width,
117
- rest = _objectWithoutPropertiesLoose(_ref, ["className", "width"]);
119
+ onClose = _ref.onClose,
120
+ _ref$closable = _ref.closable,
121
+ closable = _ref$closable === void 0 ? false : _ref$closable,
122
+ closeButtonLabel = _ref.closeButtonLabel,
123
+ rest = _objectWithoutPropertiesLoose(_ref, ["className", "width", "onClose", "closable", "closeButtonLabel"]);
118
124
 
119
125
  return React.createElement(BaseAlertBox, Object.assign({
120
126
  className: classNames(className, {
121
127
  'eds-alert-box--fit-content': width === 'fit-content'
122
128
  })
123
129
  }, rest, {
124
- closable: false,
130
+ onClose: onClose,
131
+ closable: closable,
132
+ closeButtonLabel: closeButtonLabel,
125
133
  size: "small"
126
134
  }));
127
135
  };
@@ -260,6 +268,41 @@ var useToast = function useToast() {
260
268
  };
261
269
  };
262
270
 
271
+ var CopyableText = function CopyableText(_ref) {
272
+ var children = _ref.children,
273
+ _ref$successHeading = _ref.successHeading,
274
+ successHeading = _ref$successHeading === void 0 ? 'Kopiert!' : _ref$successHeading,
275
+ _ref$successMessage = _ref.successMessage,
276
+ successMessage = _ref$successMessage === void 0 ? 'Innholdet ble kopiert til utklippstavlen.' : _ref$successMessage,
277
+ className = _ref.className,
278
+ rest = _objectWithoutPropertiesLoose(_ref, ["children", "successHeading", "successMessage", "className"]);
279
+
280
+ var _useToast = useToast(),
281
+ addToast = _useToast.addToast;
282
+
283
+ var buttonRef = React.useRef(null);
284
+
285
+ var handleClick = function handleClick() {
286
+ buttonRef.current && copy(children, {
287
+ target: buttonRef.current
288
+ }) && addToast({
289
+ title: successHeading,
290
+ content: successMessage
291
+ });
292
+ };
293
+
294
+ return React.createElement("button", Object.assign({
295
+ className: 'copyable-text ' + className,
296
+ style: _extends({}, rest.style),
297
+ type: "button",
298
+ onClick: handleClick,
299
+ ref: buttonRef,
300
+ "aria-label": "Kopier innhold"
301
+ }, rest), React.createElement(typography.PreformattedText, null, children), React.createElement(icons.ReportsIcon, {
302
+ className: "copyable-text__icon"
303
+ }));
304
+ };
305
+
263
306
  var SmallExpandableAlertBox = function SmallExpandableAlertBox(props) {
264
307
  return React.createElement(ExpandableAlertBox, Object.assign({
265
308
  size: "small"
@@ -327,6 +370,7 @@ utils.warnAboutMissingStyles('alert', 'icons');
327
370
 
328
371
  exports.BannerAlertBox = BannerAlertBox;
329
372
  exports.BannerExpandableAlertBox = BannerExpandableAlertBox;
373
+ exports.CopyableText = CopyableText;
330
374
  exports.SmallAlertBox = SmallAlertBox;
331
375
  exports.SmallExpandableAlertBox = SmallExpandableAlertBox;
332
376
  exports.ToastAlertBox = ToastAlertBox;
@@ -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/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 ...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 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 /** 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 ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n closable={false}\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};\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\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 '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' };\n } else {\n return { id, variant: 'success', ...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};\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 addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [delay, removeToast],\n );\n\n const handleMouseEnter = (toastId: ToastId) => () => {\n setHovering(toastId);\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 timeoutIdRefs.current[toast.id] = window.setTimeout(\n () => removeToast(toast.id),\n delay,\n );\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.id)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\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> = props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n};\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> = 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 * from './ExpandableAlertBox';\n"],"names":["iconsMap","success","OutlinedValidationCheckIcon","info","OutlinedValidationInfoIcon","warning","OutlinedValidationExclamationIcon","error","OutlinedValidationErrorIcon","BaseAlertBox","children","className","closable","closeButtonLabel","variant","onClose","size","title","rest","React","useState","isClosed","setClosed","handleClose","Icon","classNames","type","onClick","CloseIcon","BannerAlertBox","props","ToastAlertBox","role","SmallAlertBox","width","ToastContext","createContext","toastReducer","prevToasts","action","payload","filter","toast","id","createUniqueId","Math","random","toString","substring","createToast","content","ToastProvider","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","addToast","setTimeout","handleMouseEnter","toastId","Object","values","forEach","timeoutId","handleMouseLeave","undefined","contextValue","useMemo","Provider","value","length","slice","map","toastToShow","onMouseEnter","onMouseLeave","key","useToast","context","useContext","Error","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 ...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 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};\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\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 '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' };\n } else {\n return { id, variant: 'success', ...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};\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 addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [delay, removeToast],\n );\n\n const handleMouseEnter = (toastId: ToastId) => () => {\n setHovering(toastId);\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 timeoutIdRefs.current[toast.id] = window.setTimeout(\n () => removeToast(toast.id),\n delay,\n );\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.id)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\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 { ReportsIcon } 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 <ReportsIcon 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> = props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n};\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> = 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","rest","React","useState","isClosed","setClosed","handleClose","Icon","classNames","type","onClick","CloseIcon","BannerAlertBox","props","ToastAlertBox","role","SmallAlertBox","width","ToastContext","createContext","toastReducer","prevToasts","action","payload","filter","toast","id","createUniqueId","Math","random","toString","substring","createToast","content","ToastProvider","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","addToast","setTimeout","handleMouseEnter","toastId","Object","values","forEach","timeoutId","handleMouseLeave","undefined","contextValue","useMemo","Provider","value","length","slice","map","toastToShow","onMouseEnter","onMouseLeave","key","useToast","context","useContext","Error","CopyableText","successHeading","successMessage","buttonRef","handleClick","copy","target","ref","PreformattedText","ReportsIcon","SmallExpandableAlertBox","ExpandableAlertBox","BannerExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@entur/utils"),n=e(require("react")),a=e(require("classnames")),r=require("@entur/icons"),o=require("@entur/expand/");function l(){return(l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}function i(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t.indexOf(n=o[a])>=0||(r[n]=e[n]);return r}var s={success:r.OutlinedValidationCheckIcon,info:r.OutlinedValidationInfoIcon,warning:r.OutlinedValidationExclamationIcon,error:r.OutlinedValidationErrorIcon},c=function(e){var t=e.children,o=e.className,l=e.closable,c=void 0!==l&&l,u=e.closeButtonLabel,d=void 0===u?"Lukk":u,b=e.variant,m=e.onClose,f=void 0===m?function(){return{}}:m,p=e.size,v=e.title,x=i(e,["children","className","closable","closeButtonLabel","variant","onClose","size","title"]),E=n.useState(!1),O=E[1];if(E[0])return null;var h=s[b];return n.createElement("div",Object.assign({className:a("eds-alert-box","eds-alert-box--"+p,"eds-alert-box--"+b,o)},x),c&&n.createElement("button",{"aria-label":d,className:"eds-alert-box__close-button",type:"button",onClick:function(){O(!0),f()}},n.createElement(r.CloseIcon,null)),n.createElement(h,{className:"eds-alert-box__icon"}),n.createElement("div",{className:a("eds-alert-box__content",{"eds-alert-box__content--no-title":!v,"eds-alert-box__content--no-children":!t})},v&&n.createElement("div",{className:"eds-alert-box__title"},v),t&&t))},u=function(e){return n.createElement(c,Object.assign({},e,{size:"toast",role:"status"}))},d=n.createContext(null),b=function(e,t){switch(t.type){case"ADD_TOAST":return[t.payload].concat(e);case"REMOVE_TOAST":return e.filter((function(e){return e.id!==t.payload}))}},m=function(e){var t=e.variant,r=e.title,l=e.children,s=e.size,u=e.className,d=e.openLabel,b=e.closeLabel,m=i(e,["variant","title","children","size","className","openLabel","closeLabel"]),p=n.useState(!1),v=p[0],x=p[1];return n.createElement(c,Object.assign({size:s,variant:t,className:a("eds-expandable-alert-box",u),title:n.createElement(f,{open:v,title:r,onClick:function(){return x(!v)},openLabel:d,closeLabel:b})},m),n.createElement(o.BaseExpand,{open:v},l))},f=function(e){var t=e.open,a=e.openLabel,r=void 0===a?"Les mer":a,l=e.closeLabel,i=void 0===l?"Lukk":l,s=e.onClick;return n.createElement("div",{className:"eds-expandable-alert-box__title"},n.createElement("div",null,e.title),n.createElement("button",{className:"eds-expandable-alert-box__button",onClick:s,type:"button"},t?i:r,n.createElement(o.ExpandArrow,{open:t,inline:!0})))};t.warnAboutMissingStyles("alert","icons"),exports.BannerAlertBox=function(e){return n.createElement(c,Object.assign({},e,{size:"banner"}))},exports.BannerExpandableAlertBox=function(e){return n.createElement(m,Object.assign({size:"banner"},e))},exports.SmallAlertBox=function(e){var t=e.className,r=e.width,o=i(e,["className","width"]);return n.createElement(c,Object.assign({className:a(t,{"eds-alert-box--fit-content":"fit-content"===r})},o,{closable:!1,size:"small"}))},exports.SmallExpandableAlertBox=function(e){return n.createElement(m,Object.assign({size:"small"},e))},exports.ToastAlertBox=u,exports.ToastProvider=function(e){var t=e.delay,r=void 0===t?6e3:t,o=e.children,i=e.position,s=void 0===i?"bottom-right":i,c=e.className,m=e.style,f=n.useReducer(b,[]),p=f[0],v=f[1],x=n.useState(),E=x[0],O=x[1],h=n.useRef({}),y=n.useCallback((function(e){window.clearTimeout(h.current[e]),v({type:"REMOVE_TOAST",payload:e}),delete h.current[e]}),[]),_=n.useCallback((function(e){var t=Math.random().toString().substring(2),n=function(e,t){return"string"==typeof e?{id:t,content:e,variant:"success"}:l({id:t,variant:"success"},e)}(e,t);v({type:"ADD_TOAST",payload:n}),h.current[t]=window.setTimeout((function(){return y(t)}),r)}),[r,y]),T=function(e){return function(){O(e),Object.values(h.current).forEach((function(e){return window.clearTimeout(e)})),h.current={}}},w=function(){O(void 0),p.forEach((function(e){h.current[e.id]=window.setTimeout((function(){return y(e.id)}),r)}))},g=n.useMemo((function(){return{toasts:p,addToast:_,removeToast:y}}),[_,y,p]);return n.createElement(d.Provider,{value:g},p.length>0&&n.createElement("div",{className:a("eds-toast-container","eds-toast-container--"+s,c),style:m},p.slice(0,3).map((function(e){return n.createElement(u,{variant:e.variant,title:e.title,onClose:(t=e.id,function(){y(t),w()}),onMouseEnter:T(e.id),onMouseLeave:w,closable:E===e.id,key:e.id},e.content);var t}))),o)},exports.useToast=function(){var e=n.useContext(d);if(!e)throw new Error("You need to wrap your component in a ToastProvider component in order to use the useToast hook");return{addToast:e.addToast}};
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@entur/utils"),n=e(require("react")),a=e(require("classnames")),o=require("@entur/icons"),r=e(require("copy-text-to-clipboard")),l=require("@entur/typography"),s=require("@entur/expand/");function i(){return(i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}function c(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)t.indexOf(n=r[a])>=0||(o[n]=e[n]);return o}var u={success:o.OutlinedValidationCheckIcon,info:o.OutlinedValidationInfoIcon,warning:o.OutlinedValidationExclamationIcon,error:o.OutlinedValidationErrorIcon},d=function(e){var t=e.children,r=e.className,l=e.closable,s=void 0!==l&&l,i=e.closeButtonLabel,d=void 0===i?"Lukk":i,b=e.variant,m=e.onClose,p=void 0===m?function(){return{}}:m,f=e.size,v=e.title,x=c(e,["children","className","closable","closeButtonLabel","variant","onClose","size","title"]),E=n.useState(!1),y=E[1];if(E[0])return null;var h=u[b];return n.createElement("div",Object.assign({className:a("eds-alert-box","eds-alert-box--"+f,"eds-alert-box--"+b,r)},x),s&&n.createElement("button",{"aria-label":d,className:"eds-alert-box__close-button",type:"button",onClick:function(){y(!0),p()}},n.createElement(o.CloseIcon,null)),n.createElement(h,{className:"eds-alert-box__icon"}),n.createElement("div",{className:a("eds-alert-box__content",{"eds-alert-box__content--no-title":!v,"eds-alert-box__content--no-children":!t})},v&&n.createElement("div",{className:"eds-alert-box__title"},v),t&&t))},b=function(e){return n.createElement(d,Object.assign({},e,{size:"toast",role:"status"}))},m=n.createContext(null),p=function(e,t){switch(t.type){case"ADD_TOAST":return[t.payload].concat(e);case"REMOVE_TOAST":return e.filter((function(e){return e.id!==t.payload}))}},f=function(){var e=n.useContext(m);if(!e)throw new Error("You need to wrap your component in a ToastProvider component in order to use the useToast hook");return{addToast:e.addToast}},v=function(e){var t=e.variant,o=e.title,r=e.children,l=e.size,i=e.className,u=e.openLabel,b=e.closeLabel,m=c(e,["variant","title","children","size","className","openLabel","closeLabel"]),p=n.useState(!1),f=p[0],v=p[1];return n.createElement(d,Object.assign({size:l,variant:t,className:a("eds-expandable-alert-box",i),title:n.createElement(x,{open:f,title:o,onClick:function(){return v(!f)},openLabel:u,closeLabel:b})},m),n.createElement(s.BaseExpand,{open:f},r))},x=function(e){var t=e.open,a=e.openLabel,o=void 0===a?"Les mer":a,r=e.closeLabel,l=void 0===r?"Lukk":r,i=e.onClick;return n.createElement("div",{className:"eds-expandable-alert-box__title"},n.createElement("div",null,e.title),n.createElement("button",{className:"eds-expandable-alert-box__button",onClick:i,type:"button"},t?l:o,n.createElement(s.ExpandArrow,{open:t,inline:!0})))};t.warnAboutMissingStyles("alert","icons"),exports.BannerAlertBox=function(e){return n.createElement(d,Object.assign({},e,{size:"banner"}))},exports.BannerExpandableAlertBox=function(e){return n.createElement(v,Object.assign({size:"banner"},e))},exports.CopyableText=function(e){var t=e.children,a=e.successHeading,s=void 0===a?"Kopiert!":a,u=e.successMessage,d=void 0===u?"Innholdet ble kopiert til utklippstavlen.":u,b=e.className,m=c(e,["children","successHeading","successMessage","className"]),p=f().addToast,v=n.useRef(null);return n.createElement("button",Object.assign({className:"copyable-text "+b,style:i({},m.style),type:"button",onClick:function(){v.current&&r(t,{target:v.current})&&p({title:s,content:d})},ref:v,"aria-label":"Kopier innhold"},m),n.createElement(l.PreformattedText,null,t),n.createElement(o.ReportsIcon,{className:"copyable-text__icon"}))},exports.SmallAlertBox=function(e){var t=e.className,o=e.width,r=e.onClose,l=e.closable,s=void 0!==l&&l,i=e.closeButtonLabel,u=c(e,["className","width","onClose","closable","closeButtonLabel"]);return n.createElement(d,Object.assign({className:a(t,{"eds-alert-box--fit-content":"fit-content"===o})},u,{onClose:r,closable:s,closeButtonLabel:i,size:"small"}))},exports.SmallExpandableAlertBox=function(e){return n.createElement(v,Object.assign({size:"small"},e))},exports.ToastAlertBox=b,exports.ToastProvider=function(e){var t=e.delay,o=void 0===t?6e3:t,r=e.children,l=e.position,s=void 0===l?"bottom-right":l,c=e.className,u=e.style,d=n.useReducer(p,[]),f=d[0],v=d[1],x=n.useState(),E=x[0],y=x[1],h=n.useRef({}),O=n.useCallback((function(e){window.clearTimeout(h.current[e]),v({type:"REMOVE_TOAST",payload:e}),delete h.current[e]}),[]),g=n.useCallback((function(e){var t=Math.random().toString().substring(2),n=function(e,t){return"string"==typeof e?{id:t,content:e,variant:"success"}:i({id:t,variant:"success"},e)}(e,t);v({type:"ADD_TOAST",payload:n}),h.current[t]=window.setTimeout((function(){return O(t)}),o)}),[o,O]),T=function(e){return function(){y(e),Object.values(h.current).forEach((function(e){return window.clearTimeout(e)})),h.current={}}},_=function(){y(void 0),f.forEach((function(e){h.current[e.id]=window.setTimeout((function(){return O(e.id)}),o)}))},N=n.useMemo((function(){return{toasts:f,addToast:g,removeToast:O}}),[g,O,f]);return n.createElement(m.Provider,{value:N},f.length>0&&n.createElement("div",{className:a("eds-toast-container","eds-toast-container--"+s,c),style:u},f.slice(0,3).map((function(e){return n.createElement(b,{variant:e.variant,title:e.title,onClose:(t=e.id,function(){O(t),_()}),onMouseEnter:T(e.id),onMouseLeave:_,closable:E===e.id,key:e.id},e.content);var t}))),r)},exports.useToast=f;
2
2
  //# sourceMappingURL=alert.cjs.production.min.js.map
@@ -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/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 ...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 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};\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\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 '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' };\n } else {\n return { id, variant: 'success', ...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};\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 addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [delay, removeToast],\n );\n\n const handleMouseEnter = (toastId: ToastId) => () => {\n setHovering(toastId);\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 timeoutIdRefs.current[toast.id] = window.setTimeout(\n () => removeToast(toast.id),\n delay,\n );\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.id)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\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> = props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n};\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> = 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 * 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';\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 /** 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 ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n closable={false}\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","rest","React","useState","setClosed","Icon","classNames","type","onClick","CloseIcon","ToastAlertBox","props","role","ToastContext","createContext","toastReducer","prevToasts","action","payload","filter","toast","id","ExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles","width","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","addToast","Math","random","toString","substring","content","createToast","setTimeout","handleMouseEnter","toastId","Object","values","forEach","timeoutId","handleMouseLeave","undefined","contextValue","useMemo","Provider","value","length","slice","map","toastToShow","onMouseEnter","onMouseLeave","key","context","useContext","Error"],"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 ...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 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};\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\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 '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' };\n } else {\n return { id, variant: 'success', ...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};\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 addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [delay, removeToast],\n );\n\n const handleMouseEnter = (toastId: ToastId) => () => {\n setHovering(toastId);\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 timeoutIdRefs.current[toast.id] = window.setTimeout(\n () => removeToast(toast.id),\n delay,\n );\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.id)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\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> = props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n};\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> = 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 { ReportsIcon } 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 <ReportsIcon 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","rest","React","useState","setClosed","Icon","classNames","type","onClick","CloseIcon","ToastAlertBox","props","role","ToastContext","createContext","toastReducer","prevToasts","action","payload","filter","toast","id","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","ReportsIcon","width","delay","position","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","removeToast","useCallback","window","clearTimeout","Math","random","toString","substring","createToast","setTimeout","handleMouseEnter","toastId","Object","values","forEach","timeoutId","handleMouseLeave","undefined","contextValue","useMemo","Provider","value","length","slice","map","toastToShow","onMouseEnter","onMouseLeave","key"],"mappings":"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"}
package/dist/alert.esm.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { warnAboutMissingStyles } from '@entur/utils';
2
2
  import React from 'react';
3
3
  import classNames from 'classnames';
4
- import { CloseIcon, OutlinedValidationCheckIcon, OutlinedValidationInfoIcon, OutlinedValidationExclamationIcon, OutlinedValidationErrorIcon } from '@entur/icons';
4
+ import { CloseIcon, OutlinedValidationCheckIcon, OutlinedValidationInfoIcon, OutlinedValidationExclamationIcon, OutlinedValidationErrorIcon, ReportsIcon } from '@entur/icons';
5
+ import copy from 'copy-text-to-clipboard';
6
+ import { PreformattedText } from '@entur/typography';
5
7
  import { BaseExpand, ExpandArrow } from '@entur/expand/';
6
8
 
7
9
  function _extends() {
@@ -108,14 +110,20 @@ var ToastAlertBox = function ToastAlertBox(props) {
108
110
  var SmallAlertBox = function SmallAlertBox(_ref) {
109
111
  var className = _ref.className,
110
112
  width = _ref.width,
111
- rest = _objectWithoutPropertiesLoose(_ref, ["className", "width"]);
113
+ onClose = _ref.onClose,
114
+ _ref$closable = _ref.closable,
115
+ closable = _ref$closable === void 0 ? false : _ref$closable,
116
+ closeButtonLabel = _ref.closeButtonLabel,
117
+ rest = _objectWithoutPropertiesLoose(_ref, ["className", "width", "onClose", "closable", "closeButtonLabel"]);
112
118
 
113
119
  return React.createElement(BaseAlertBox, Object.assign({
114
120
  className: classNames(className, {
115
121
  'eds-alert-box--fit-content': width === 'fit-content'
116
122
  })
117
123
  }, rest, {
118
- closable: false,
124
+ onClose: onClose,
125
+ closable: closable,
126
+ closeButtonLabel: closeButtonLabel,
119
127
  size: "small"
120
128
  }));
121
129
  };
@@ -254,6 +262,41 @@ var useToast = function useToast() {
254
262
  };
255
263
  };
256
264
 
265
+ var CopyableText = function CopyableText(_ref) {
266
+ var children = _ref.children,
267
+ _ref$successHeading = _ref.successHeading,
268
+ successHeading = _ref$successHeading === void 0 ? 'Kopiert!' : _ref$successHeading,
269
+ _ref$successMessage = _ref.successMessage,
270
+ successMessage = _ref$successMessage === void 0 ? 'Innholdet ble kopiert til utklippstavlen.' : _ref$successMessage,
271
+ className = _ref.className,
272
+ rest = _objectWithoutPropertiesLoose(_ref, ["children", "successHeading", "successMessage", "className"]);
273
+
274
+ var _useToast = useToast(),
275
+ addToast = _useToast.addToast;
276
+
277
+ var buttonRef = React.useRef(null);
278
+
279
+ var handleClick = function handleClick() {
280
+ buttonRef.current && copy(children, {
281
+ target: buttonRef.current
282
+ }) && addToast({
283
+ title: successHeading,
284
+ content: successMessage
285
+ });
286
+ };
287
+
288
+ return React.createElement("button", Object.assign({
289
+ className: 'copyable-text ' + className,
290
+ style: _extends({}, rest.style),
291
+ type: "button",
292
+ onClick: handleClick,
293
+ ref: buttonRef,
294
+ "aria-label": "Kopier innhold"
295
+ }, rest), React.createElement(PreformattedText, null, children), React.createElement(ReportsIcon, {
296
+ className: "copyable-text__icon"
297
+ }));
298
+ };
299
+
257
300
  var SmallExpandableAlertBox = function SmallExpandableAlertBox(props) {
258
301
  return React.createElement(ExpandableAlertBox, Object.assign({
259
302
  size: "small"
@@ -319,5 +362,5 @@ var ExpandableAlertBoxTitle = function ExpandableAlertBoxTitle(_ref2) {
319
362
 
320
363
  warnAboutMissingStyles('alert', 'icons');
321
364
 
322
- export { BannerAlertBox, BannerExpandableAlertBox, SmallAlertBox, SmallExpandableAlertBox, ToastAlertBox, ToastProvider, useToast };
365
+ export { BannerAlertBox, BannerExpandableAlertBox, CopyableText, SmallAlertBox, SmallExpandableAlertBox, ToastAlertBox, ToastProvider, useToast };
323
366
  //# sourceMappingURL=alert.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.esm.js","sources":["../src/BaseAlertBox.tsx","../src/BannerAlertBox.tsx","../src/ToastAlertBox.tsx","../src/SmallAlertBox.tsx","../src/ToastProvider.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 ...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 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 /** 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 ...rest\n}) => (\n <BaseAlertBox\n className={classNames(className, {\n 'eds-alert-box--fit-content': width === 'fit-content',\n })}\n {...rest}\n closable={false}\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};\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\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 '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' };\n } else {\n return { id, variant: 'success', ...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};\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 addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [delay, removeToast],\n );\n\n const handleMouseEnter = (toastId: ToastId) => () => {\n setHovering(toastId);\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 timeoutIdRefs.current[toast.id] = window.setTimeout(\n () => removeToast(toast.id),\n delay,\n );\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.id)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\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> = props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n};\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> = 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 * from './ExpandableAlertBox';\n"],"names":["iconsMap","success","OutlinedValidationCheckIcon","info","OutlinedValidationInfoIcon","warning","OutlinedValidationExclamationIcon","error","OutlinedValidationErrorIcon","BaseAlertBox","children","className","closable","closeButtonLabel","variant","onClose","size","title","rest","React","useState","isClosed","setClosed","handleClose","Icon","classNames","type","onClick","CloseIcon","BannerAlertBox","props","ToastAlertBox","role","SmallAlertBox","width","ToastContext","createContext","toastReducer","prevToasts","action","payload","filter","toast","id","createUniqueId","Math","random","toString","substring","createToast","content","ToastProvider","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","addToast","setTimeout","handleMouseEnter","toastId","Object","values","forEach","timeoutId","handleMouseLeave","undefined","contextValue","useMemo","Provider","value","length","slice","map","toastToShow","onMouseEnter","onMouseLeave","key","useToast","context","useContext","Error","SmallExpandableAlertBox","ExpandableAlertBox","BannerExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles"],"mappings":"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"}
1
+ {"version":3,"file":"alert.esm.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 ...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 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};\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\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 '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' };\n } else {\n return { id, variant: 'success', ...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};\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 addToast = React.useCallback(\n (toast: AddToastPayload) => {\n const id = createUniqueId();\n const payload = createToast(toast, id);\n dispatch({ type: 'ADD_TOAST', payload });\n timeoutIdRefs.current[id] = window.setTimeout(\n () => removeToast(id),\n delay,\n );\n },\n [delay, removeToast],\n );\n\n const handleMouseEnter = (toastId: ToastId) => () => {\n setHovering(toastId);\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 timeoutIdRefs.current[toast.id] = window.setTimeout(\n () => removeToast(toast.id),\n delay,\n );\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.id)}\n onMouseLeave={handleMouseLeave}\n closable={hoveringId === toastToShow.id}\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 { ReportsIcon } 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 <ReportsIcon 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> = props => {\n return <ExpandableAlertBox size=\"small\" {...props} />;\n};\n\nexport type BannerExpandableAlertBoxProps = ExpandableAlertBoxProps &\n BannerAlertBoxProps;\n\nexport const BannerExpandableAlertBox: React.FC<BannerExpandableAlertBoxProps> = 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","rest","React","useState","isClosed","setClosed","handleClose","Icon","classNames","type","onClick","CloseIcon","BannerAlertBox","props","ToastAlertBox","role","SmallAlertBox","width","ToastContext","createContext","toastReducer","prevToasts","action","payload","filter","toast","id","createUniqueId","Math","random","toString","substring","createToast","content","ToastProvider","delay","position","style","useReducer","toasts","dispatch","hoveringId","setHovering","timeoutIdRefs","useRef","removeToast","useCallback","window","clearTimeout","current","addToast","setTimeout","handleMouseEnter","toastId","Object","values","forEach","timeoutId","handleMouseLeave","undefined","contextValue","useMemo","Provider","value","length","slice","map","toastToShow","onMouseEnter","onMouseLeave","key","useToast","context","useContext","Error","CopyableText","successHeading","successMessage","buttonRef","handleClick","copy","target","ref","PreformattedText","ReportsIcon","SmallExpandableAlertBox","ExpandableAlertBox","BannerExpandableAlertBox","openLabel","closeLabel","open","setopen","ExpandableAlertBoxTitle","BaseExpand","ExpandArrow","inline","warnAboutMissingStyles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAMA,QAAQ,GAAG;AACfC,EAAAA,OAAO,EAAEC,2BADM;AAEfC,EAAAA,IAAI,EAAEC,0BAFS;AAGfC,EAAAA,OAAO,EAAEC,iCAHM;AAIfC,EAAAA,KAAK,EAAEC;AAJQ,CAAjB;AAiCO,IAAMC,YAAY,GAAgC,SAA5CA,YAA4C;MACvDC,gBAAAA;MACAC,iBAAAA;2BACAC;MAAAA,sCAAW;mCACXC;MAAAA,sDAAmB;MACnBC,eAAAA;0BACAC;MAAAA,oCAAU;AAAA,WAAO,EAAP;AAAA;MACVC,YAAAA;MACAC,aAAAA;MACGC;;wBAE2BC,KAAK,CAACC,QAAN,CAAe,KAAf;MAAvBC;MAAUC;;AACjB,MAAID,QAAJ,EAAc;AACZ,WAAO,IAAP;AACD;;AACD,MAAME,WAAW,GAAG,SAAdA,WAAc;AAClBD,IAAAA,SAAS,CAAC,IAAD,CAAT;AACAP,IAAAA,OAAO;AACR,GAHD;;AAIA,MAAMS,IAAI,GAAGxB,QAAQ,CAACc,OAAD,CAArB;AACA,SACEK,mBAAA,MAAA;AACER,IAAAA,SAAS,EAAEc,UAAU,CACnB,eADmB,sBAEDT,IAFC,sBAGDF,OAHC,EAInBH,SAJmB;KAMjBO,KAPN,EASGN,QAAQ,IACPO,mBAAA,SAAA;kBACcN;AACZF,IAAAA,SAAS,EAAC;AACVe,IAAAA,IAAI,EAAC;AACLC,IAAAA,OAAO,EAAEJ;GAJX,EAMEJ,mBAAA,CAACS,SAAD,MAAA,CANF,CAVJ,EAmBET,mBAAA,CAACK,IAAD;AAAMb,IAAAA,SAAS,EAAC;GAAhB,CAnBF,EAoBEQ,mBAAA,MAAA;AACER,IAAAA,SAAS,EAAEc,UAAU,CAAC,wBAAD,EAA2B;AAC9C,0CAAoC,CAACR,KADS;AAE9C,6CAAuC,CAACP;AAFM,KAA3B;GADvB,EAMGO,KAAK,IAAIE,mBAAA,MAAA;AAAKR,IAAAA,SAAS,EAAC;GAAf,EAAuCM,KAAvC,CANZ,EAOGP,QAAQ,IAAIA,QAPf,CApBF,CADF;AAgCD,CApDM;;ICrBMmB,cAAc,GAAkC,SAAhDA,cAAgD,CAAAC,KAAK;AAAA,SAChEX,mBAAA,CAACV,YAAD,oBAAkBqB;AAAOd,IAAAA,IAAI,EAAC;IAA9B,CADgE;AAAA,CAA3D;;ICFMe,aAAa,GAAiC,SAA9CA,aAA8C,CAAAD,KAAK;AAAA,SAC9DX,mBAAA,CAACV,YAAD,oBAAkBqB;AAAOd,IAAAA,IAAI,EAAC;AAAQgB,IAAAA,IAAI,EAAC;IAA3C,CAD8D;AAAA,CAAzD;;ICKMC,aAAa,GAAiC,SAA9CA,aAA8C;AAAA,MACzDtB,SADyD,QACzDA,SADyD;AAAA,MAEzDuB,KAFyD,QAEzDA,KAFyD;AAAA,MAGzDnB,OAHyD,QAGzDA,OAHyD;AAAA,2BAIzDH,QAJyD;AAAA,MAIzDA,QAJyD,8BAI9C,KAJ8C;AAAA,MAKzDC,gBALyD,QAKzDA,gBALyD;AAAA,MAMtDK,IANsD;;AAAA,SAQzDC,mBAAA,CAACV,YAAD;AACEE,IAAAA,SAAS,EAAEc,UAAU,CAACd,SAAD,EAAY;AAC/B,oCAA8BuB,KAAK,KAAK;AADT,KAAZ;KAGjBhB;AACJH,IAAAA,OAAO,EAAEA;AACTH,IAAAA,QAAQ,EAAEA;AACVC,IAAAA,gBAAgB,EAAEA;AAClBG,IAAAA,IAAI,EAAC;IARP,CARyD;AAAA,CAApD;;ACGP,IAAMmB,YAAY,gBAAGhB,KAAK,CAACiB,aAAN,CAA6C,IAA7C,CAArB;;AAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CACnBC,UADmB,EAEnBC,MAFmB;AAInB,UAAQA,MAAM,CAACb,IAAf;AACE,SAAK,WAAL;AACE,cAAQa,MAAM,CAACC,OAAf,SAA2BF,UAA3B;;AACF,SAAK,cAAL;AACE,aAAOA,UAAU,CAACG,MAAX,CAAkB,UAAAC,KAAK;AAAA,eAAIA,KAAK,CAACC,EAAN,KAAaJ,MAAM,CAACC,OAAxB;AAAA,OAAvB,CAAP;AAJJ;AAMD,CAVD;;AAYA,IAAMI,cAAc,GAAG,SAAjBA,cAAiB;AAAA,SAAMC,IAAI,CAACC,MAAL,GAAcC,QAAd,GAAyBC,SAAzB,CAAmC,CAAnC,CAAN;AAAA,CAAvB;;AAEA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACP,KAAD,EAAyBC,EAAzB;AAClB,MAAI,OAAOD,KAAP,KAAiB,QAArB,EAA+B;AAC7B,WAAO;AAAEC,MAAAA,EAAE,EAAFA,EAAF;AAAMO,MAAAA,OAAO,EAAER,KAAf;AAAsB5B,MAAAA,OAAO,EAAE;AAA/B,KAAP;AACD,GAFD,MAEO;AACL;AAAS6B,MAAAA,EAAE,EAAFA,EAAT;AAAa7B,MAAAA,OAAO,EAAE;AAAtB,OAAoC4B,KAApC;AACD;AACF,CAND;;AAuBA,IAAaS,aAAa,GAAiC,SAA9CA,aAA8C;wBACzDC;MAAAA,gCAAQ;MACR1C,gBAAAA;2BACA2C;MAAAA,sCAAW;MACX1C,iBAAAA;MACA2C,aAAAA;;0BAE2BnC,KAAK,CAACoC,UAAN,CAAiBlB,YAAjB,EAA+B,EAA/B;MAApBmB;MAAQC;;wBACmBtC,KAAK,CAACC,QAAN;MAA3BsC;MAAYC;;AACnB,MAAMC,aAAa,GAAGzC,KAAK,CAAC0C,MAAN,CAAwC,EAAxC,CAAtB;AAEA,MAAMC,WAAW,GAAG3C,KAAK,CAAC4C,WAAN,CAAkB,UAACpB,EAAD;AACpCqB,IAAAA,MAAM,CAACC,YAAP,CAAoBL,aAAa,CAACM,OAAd,CAAsBvB,EAAtB,CAApB;AACAc,IAAAA,QAAQ,CAAC;AAAE/B,MAAAA,IAAI,EAAE,cAAR;AAAwBc,MAAAA,OAAO,EAAEG;AAAjC,KAAD,CAAR;AACA,WAAOiB,aAAa,CAACM,OAAd,CAAsBvB,EAAtB,CAAP;AACD,GAJmB,EAIjB,EAJiB,CAApB;AAMA,MAAMwB,QAAQ,GAAGhD,KAAK,CAAC4C,WAAN,CACf,UAACrB,KAAD;AACE,QAAMC,EAAE,GAAGC,cAAc,EAAzB;AACA,QAAMJ,OAAO,GAAGS,WAAW,CAACP,KAAD,EAAQC,EAAR,CAA3B;AACAc,IAAAA,QAAQ,CAAC;AAAE/B,MAAAA,IAAI,EAAE,WAAR;AAAqBc,MAAAA,OAAO,EAAPA;AAArB,KAAD,CAAR;AACAoB,IAAAA,aAAa,CAACM,OAAd,CAAsBvB,EAAtB,IAA4BqB,MAAM,CAACI,UAAP,CAC1B;AAAA,aAAMN,WAAW,CAACnB,EAAD,CAAjB;AAAA,KAD0B,EAE1BS,KAF0B,CAA5B;AAID,GATc,EAUf,CAACA,KAAD,EAAQU,WAAR,CAVe,CAAjB;;AAaA,MAAMO,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,OAAD;AAAA,WAAsB;AAC7CX,MAAAA,WAAW,CAACW,OAAD,CAAX;AACAC,MAAAA,MAAM,CAACC,MAAP,CAAcZ,aAAa,CAACM,OAA5B,EAAqCO,OAArC,CAA6C,UAAAC,SAAS;AAAA,eACpDV,MAAM,CAACC,YAAP,CAAoBS,SAApB,CADoD;AAAA,OAAtD;AAGAd,MAAAA,aAAa,CAACM,OAAd,GAAwB,EAAxB;AACD,KANwB;AAAA,GAAzB;;AAQA,MAAMS,gBAAgB,GAAG,SAAnBA,gBAAmB;AACvBhB,IAAAA,WAAW,CAACiB,SAAD,CAAX;AACApB,IAAAA,MAAM,CAACiB,OAAP,CAAe,UAAA/B,KAAK;AAClBkB,MAAAA,aAAa,CAACM,OAAd,CAAsBxB,KAAK,CAACC,EAA5B,IAAkCqB,MAAM,CAACI,UAAP,CAChC;AAAA,eAAMN,WAAW,CAACpB,KAAK,CAACC,EAAP,CAAjB;AAAA,OADgC,EAEhCS,KAFgC,CAAlC;AAID,KALD;AAMD,GARD;;AAUA,MAAM7B,WAAW,GAAG,SAAdA,WAAc,CAAC+C,OAAD;AAAA,WAAsB;AACxCR,MAAAA,WAAW,CAACQ,OAAD,CAAX;AACAK,MAAAA,gBAAgB;AACjB,KAHmB;AAAA,GAApB;;AAKA,MAAME,YAAY,GAAG1D,KAAK,CAAC2D,OAAN,CACnB;AAAA,WAAO;AAAEtB,MAAAA,MAAM,EAANA,MAAF;AAAUW,MAAAA,QAAQ,EAARA,QAAV;AAAoBL,MAAAA,WAAW,EAAXA;AAApB,KAAP;AAAA,GADmB,EAEnB,CAACK,QAAD,EAAWL,WAAX,EAAwBN,MAAxB,CAFmB,CAArB;AAKA,SACErC,mBAAA,CAACgB,YAAY,CAAC4C,QAAd;AAAuBC,IAAAA,KAAK,EAAEH;GAA9B,EACGrB,MAAM,CAACyB,MAAP,GAAgB,CAAhB,IACC9D,mBAAA,MAAA;AACER,IAAAA,SAAS,EAAEc,UAAU,CACnB,qBADmB,4BAEK4B,QAFL,EAGnB1C,SAHmB;AAKrB2C,IAAAA,KAAK,EAAEA;GANT,EAQGE,MAAM,CAAC0B,KAAP,CAAa,CAAb,EAAgB,CAAhB,EAAmBC,GAAnB,CAAuB,UAAAC,WAAW;AAAA,WACjCjE,mBAAA,CAACY,aAAD;AACEjB,MAAAA,OAAO,EAAEsE,WAAW,CAACtE;AACrBG,MAAAA,KAAK,EAAEmE,WAAW,CAACnE;AACnBF,MAAAA,OAAO,EAAEQ,WAAW,CAAC6D,WAAW,CAACzC,EAAb;AACpB0C,MAAAA,YAAY,EAAEhB,gBAAgB,CAACe,WAAW,CAACzC,EAAb;AAC9B2C,MAAAA,YAAY,EAAEX;AACd/D,MAAAA,QAAQ,EAAE8C,UAAU,KAAK0B,WAAW,CAACzC;AACrC4C,MAAAA,GAAG,EAAEH,WAAW,CAACzC;KAPnB,EASGyC,WAAW,CAAClC,OATf,CADiC;AAAA,GAAlC,CARH,CAFJ,EAyBGxC,QAzBH,CADF;AA6BD,CAvFM;AAyFP,IAAa8E,QAAQ,GAEjB,SAFSA,QAET;AACF,MAAMC,OAAO,GAAGtE,KAAK,CAACuE,UAAN,CAAiBvD,YAAjB,CAAhB;;AACA,MAAI,CAACsD,OAAL,EAAc;AACZ,UAAM,IAAIE,KAAJ,CACJ,qEACE,gCAFE,CAAN;AAID;;MACOxB,WAAasB,QAAbtB;AACR,SAAO;AACLA,IAAAA,QAAQ,EAARA;AADK,GAAP;AAGD,CAdM;;ICxIMyB,YAAY,GAAG,SAAfA,YAAe;MAC1BlF,gBAAAA;iCACAmF;MAAAA,kDAAiB;iCACjBC;MAAAA,kDAAiB;MACjBnF,iBAAAA;MACGO;;kBAEkBsE,QAAQ;MAArBrB,qBAAAA;;AACR,MAAM4B,SAAS,GAAG5E,KAAK,CAAC0C,MAAN,CAAgC,IAAhC,CAAlB;;AACA,MAAMmC,WAAW,GAAG,SAAdA,WAAc;AAClBD,IAAAA,SAAS,CAAC7B,OAAV,IACE+B,IAAI,CAACvF,QAAD,EAAW;AACbwF,MAAAA,MAAM,EAAEH,SAAS,CAAC7B;AADL,KAAX,CADN,IAIEC,QAAQ,CAAC;AAAElD,MAAAA,KAAK,EAAE4E,cAAT;AAAyB3C,MAAAA,OAAO,EAAE4C;AAAlC,KAAD,CAJV;AAKD,GAND;;AAOA,SACE3E,mBAAA,SAAA;AACER,IAAAA,SAAS,EAAE,mBAAmBA;AAC9B2C,IAAAA,KAAK,eAAOpC,IAAI,CAACoC,KAAZ;AACL5B,IAAAA,IAAI,EAAC;AACLC,IAAAA,OAAO,EAAEqE;AACTG,IAAAA,GAAG,EAAEJ;kBACM;KACP7E,KAPN,EASEC,mBAAA,CAACiF,gBAAD,MAAA,EAAmB1F,QAAnB,CATF,EAUES,mBAAA,CAACkF,WAAD;AAAa1F,IAAAA,SAAS,EAAC;GAAvB,CAVF,CADF;AAcD,CA9BM;;ICVM2F,uBAAuB,GAA2C,SAAlEA,uBAAkE,CAAAxE,KAAK;AAClF,SAAOX,mBAAA,CAACoF,kBAAD;AAAoBvF,IAAAA,IAAI,EAAC;KAAYc,MAArC,CAAP;AACD,CAFM;AAOP,IAAa0E,wBAAwB,GAA4C,SAApEA,wBAAoE,CAAA1E,KAAK;AACpF,SAAOX,mBAAA,CAACoF,kBAAD;AAAoBvF,IAAAA,IAAI,EAAC;KAAac,MAAtC,CAAP;AACD,CAFM;;AAwBP,IAAMyE,kBAAkB,GAAsC,SAAxDA,kBAAwD;MAC5DzF,eAAAA;MACAG,aAAAA;MACAP,gBAAAA;MACAM,YAAAA;MACAL,iBAAAA;MACA8F,iBAAAA;MACAC,kBAAAA;MACGxF;;wBAEqBC,KAAK,CAACC,QAAN,CAAe,KAAf;MAAjBuF;MAAMC;;AACb,SACEzF,mBAAA,CAACV,YAAD;AACEO,IAAAA,IAAI,EAAEA;AACNF,IAAAA,OAAO,EAAEA;AACTH,IAAAA,SAAS,EAAEc,UAAU,CAAC,0BAAD,EAA6Bd,SAA7B;AACrBM,IAAAA,KAAK,EACHE,mBAAA,CAAC0F,uBAAD;AACEF,MAAAA,IAAI,EAAEA;AACN1F,MAAAA,KAAK,EAAEA;AACPU,MAAAA,OAAO,EAAE;AAAA,eAAMiF,OAAO,CAAC,CAACD,IAAF,CAAb;AAAA;AACTF,MAAAA,SAAS,EAAEA;AACXC,MAAAA,UAAU,EAAEA;KALd;KAQExF,KAbN,EAeEC,mBAAA,CAAC2F,UAAD;AAAYH,IAAAA,IAAI,EAAEA;GAAlB,EAAyBjG,QAAzB,CAfF,CADF;AAmBD,CA9BD;;AAwCA,IAAMmG,uBAAuB,GAA2C,SAAlEA,uBAAkE;MACtE5F,cAAAA;MACA0F,aAAAA;8BACAF;MAAAA,yCAAY;+BACZC;MAAAA,2CAAa;MACb/E,gBAAAA;AAEA,SACER,mBAAA,MAAA;AAAKR,IAAAA,SAAS,EAAC;GAAf,EACEQ,mBAAA,MAAA,MAAA,EAAMF,KAAN,CADF,EAEEE,mBAAA,SAAA;AACER,IAAAA,SAAS,EAAC;AACVgB,IAAAA,OAAO,EAAEA;AACTD,IAAAA,IAAI,EAAC;GAHP,EAKGiF,IAAI,GAAGD,UAAH,GAAgBD,SALvB,EAMEtF,mBAAA,CAAC4F,WAAD;AAAaJ,IAAAA,IAAI,EAAEA;AAAMK,IAAAA,MAAM;GAA/B,CANF,CAFF,CADF;AAaD,CApBD;;AC/EAC,sBAAsB,CAAC,OAAD,EAAU,OAAV,CAAtB;;;;"}
package/dist/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export { BannerAlertBox } from './BannerAlertBox';
3
3
  export { ToastAlertBox } from './ToastAlertBox';
4
4
  export { SmallAlertBox } from './SmallAlertBox';
5
5
  export { ToastProvider, useToast } from './ToastProvider';
6
+ export { CopyableText } from './CopyableText';
6
7
  export * from './ExpandableAlertBox';
package/dist/styles.css CHANGED
@@ -2,6 +2,45 @@
2
2
  --eds-alert: 1;
3
3
  }/* DO NOT CHANGE!*/
4
4
  /* This file is automatically generated from @entur/tokens! Changes will be overwritten. */
5
+ .copyable-text {
6
+ appearance: none;
7
+ background: none;
8
+ border: 0;
9
+ border-radius: 0;
10
+ color: inherit;
11
+ cursor: pointer;
12
+ display: block;
13
+ font-size: inherit;
14
+ padding: 0;
15
+ position: relative;
16
+ margin: 0 0 1rem 0;
17
+ text-align: left;
18
+ width: 100%;
19
+ }
20
+ .copyable-text > * {
21
+ margin: 0;
22
+ }
23
+ .copyable-text:focus {
24
+ outline-offset: 0.125rem;
25
+ outline: none;
26
+ box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.25rem #181c56;
27
+ }
28
+ .eds-contrast .copyable-text:focus {
29
+ box-shadow: 0 0 0 0.125rem #181c56, 0 0 0 0.25rem #ffffff;
30
+ }
31
+
32
+ .copyable-text__icon {
33
+ display: none;
34
+ position: absolute;
35
+ right: 1.5rem;
36
+ top: 1rem;
37
+ bottom: 1rem;
38
+ }
39
+ .copyable-text:hover .copyable-text__icon, .copyable-text:focus .copyable-text__icon {
40
+ display: block;
41
+ color: #181c56;
42
+ }/* DO NOT CHANGE!*/
43
+ /* This file is automatically generated from @entur/tokens! Changes will be overwritten. */
5
44
  /* DO NOT CHANGE!*/
6
45
  /* This file is automatically generated from @entur/tokens! Changes will be overwritten. */
7
46
  .eds-expandable-alert-box .eds-alert-box__content {
@@ -40,8 +79,7 @@
40
79
  flex-shrink: 0;
41
80
  }
42
81
  .eds-expandable-alert-box__button:focus {
43
- outline: none;
44
- box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.3125rem #181c56;
82
+ outline: 2px solid #181c56;
45
83
  outline-offset: 0.125rem;
46
84
  }
47
85
  .eds-expandable-alert-box__button .eds-icon {
@@ -82,6 +120,9 @@
82
120
  .eds-alert-box--small {
83
121
  font-size: 0.875rem;
84
122
  }
123
+ .eds-alert-box--small .eds-alert-box__icon {
124
+ margin-top: 0;
125
+ }
85
126
  .eds-alert-box--fit-content {
86
127
  width: fit-content;
87
128
  }
@@ -149,6 +190,8 @@
149
190
  color: #181c56;
150
191
  cursor: pointer;
151
192
  font-size: 1rem;
193
+ height: 1.5rem;
194
+ width: 1.5rem;
152
195
  padding: 0;
153
196
  position: absolute;
154
197
  right: 1rem;
@@ -156,14 +199,15 @@
156
199
  }
157
200
  .eds-alert-box__close-button:focus {
158
201
  outline-offset: 0.125rem;
159
- outline: none;
160
- box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.3125rem #181c56;
202
+ outline: 2px solid #181c56;
161
203
  }
162
204
  @media screen and (min-width: 50rem) {
163
205
  .eds-alert-box__close-button {
164
206
  font-size: 1.5rem;
165
207
  right: 1.5rem;
166
208
  top: 1.5rem;
209
+ height: 1.5rem;
210
+ width: 1.5rem;
167
211
  }
168
212
  .eds-alert-box--toast .eds-alert-box__close-button {
169
213
  right: 1rem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@entur/alert",
3
- "version": "0.8.2",
3
+ "version": "0.10.0",
4
4
  "license": "EUPL-1.2",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/alert.esm.js",
@@ -27,13 +27,19 @@
27
27
  "react-dom": ">=16.8.0"
28
28
  },
29
29
  "dependencies": {
30
- "@entur/expand": "^3.3.4",
31
- "@entur/icons": "^3.2.0",
30
+ "@entur/expand": "^3.3.6",
31
+ "@entur/icons": "^3.4.0",
32
+ "@entur/typography": "^1.6.10",
32
33
  "@entur/utils": "^0.4.2",
33
- "classnames": "^2.3.1"
34
+ "classnames": "^2.3.1",
35
+ "copy-text-to-clipboard": "2.2"
34
36
  },
35
37
  "devDependencies": {
36
- "@entur/tokens": "^3.2.0"
38
+ "@entur/tokens": "^3.3.0"
37
39
  },
38
- "gitHead": "3dc88a2b98f419d55e2292d21056d1a54a0b038d"
40
+ "volta": {
41
+ "node": "14.17.0",
42
+ "yarn": "1.18.0"
43
+ },
44
+ "gitHead": "6a15d9e27a27775ee3f86e1d3c09d0e9ce484749"
39
45
  }