@entur-partner/common 9.3.1 → 9.3.3-alpha.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.
Files changed (47) hide show
  1. package/LICENSE.md +1 -0
  2. package/dist/ActionBar.d.ts +2 -2
  3. package/dist/AuditInfo.d.ts +3 -3
  4. package/dist/Box.d.ts +15 -14
  5. package/dist/Breadcrumbs.d.ts +2 -2
  6. package/dist/ConfirmModal.d.ts +4 -3
  7. package/dist/Content.d.ts +4 -3
  8. package/dist/EnturPartnerLogo.d.ts +6 -5
  9. package/dist/ErrorBoundary.d.ts +1 -1
  10. package/dist/ExpandableMultiLanguageInput.d.ts +4 -4
  11. package/dist/FeatureToggle.d.ts +1 -1
  12. package/dist/FormatCurrencyAmount.d.ts +4 -3
  13. package/dist/FormatDateTime.d.ts +1 -1
  14. package/dist/LanguageSelect.d.ts +4 -4
  15. package/dist/Link.d.ts +2 -2
  16. package/dist/LinkButton.d.ts +3 -3
  17. package/dist/Menu.d.ts +4 -3
  18. package/dist/MultiLanguageInput.d.ts +5 -5
  19. package/dist/OrganisationDropdown.d.ts +2 -2
  20. package/dist/PageTitle.d.ts +1 -1
  21. package/dist/Pager.d.ts +1 -1
  22. package/dist/PermissionCheck.d.ts +2 -2
  23. package/dist/RouteLeavingGuard.d.ts +3 -3
  24. package/dist/Stack.d.ts +3 -2
  25. package/dist/StatusLabel.d.ts +2 -2
  26. package/dist/Text.d.ts +7 -6
  27. package/dist/Unbutton.d.ts +4 -4
  28. package/dist/UserMenu/components/CookieSettingsMenuItem.d.ts +2 -2
  29. package/dist/UserMenu/components/CustomOverflowMenu.d.ts +3 -3
  30. package/dist/UserMenu/components/CustomOverflowMenuItem.d.ts +2 -2
  31. package/dist/UserMenu/components/LanguageSwitchMenuItem.d.ts +2 -2
  32. package/dist/UserMenu/components/LogOutMenuItem.d.ts +2 -2
  33. package/dist/UserMenu/components/UserMenuItem.d.ts +2 -2
  34. package/dist/UserMenu/components/VersionMenuItem.d.ts +1 -1
  35. package/dist/UserMenu/index.d.ts +3 -3
  36. package/dist/UserMenu/useOutsideClick.d.ts +1 -1
  37. package/dist/common.cjs.development.js +793 -793
  38. package/dist/common.cjs.development.js.map +1 -1
  39. package/dist/common.cjs.production.min.js +1 -1
  40. package/dist/common.cjs.production.min.js.map +1 -1
  41. package/dist/common.esm.js +789 -789
  42. package/dist/common.esm.js.map +1 -1
  43. package/dist/index.d.ts +30 -30
  44. package/dist/styles.css +87 -87
  45. package/dist/useEventListener.d.ts +1 -3
  46. package/package.json +62 -62
  47. package/dist/helpers.d.ts +0 -1
@@ -1,17 +1,38 @@
1
- import React, { Children, useState, useEffect, useRef, Component } from 'react';
1
+ import React, { Children, Component, useState, useEffect, useRef } from 'react';
2
+ import { localeDate, localeDateTime, isDate, isDateString, splitUrlPath, isString, isFunction, assertIsDefined, hasAllPermissions, hasOneOfPermissions } from '@entur-partner/util';
2
3
  import cx from 'classnames';
3
- import { Link as Link$1, Heading6, Paragraph } from '@entur/typography';
4
- import { UserIcon, DownArrowIcon, NorwayIcon, UKIcon, ChannelsIcon, LogOutIcon, CookieIcon } from '@entur/icons';
5
- import { SecondaryButton, Button, PrimaryButton, ButtonGroup } from '@entur/button';
6
- import { useNavigate, Link as Link$2, useInRouterContext, useBlocker } from 'react-router-dom';
7
- import { SearchableDropdown } from '@entur/dropdown';
8
- import { SegmentedControl, SegmentedChoice } from '@entur/form';
9
- import { assertIsDefined, localeDate, localeDateTime, isDate, isDateString, isString, hasAllPermissions, hasOneOfPermissions, splitUrlPath } from '@entur-partner/util';
10
- import { ExpandablePanel } from '@entur/expand';
11
- import { BannerAlertBox } from '@entur/alert';
4
+ import { BreadcrumbItem, BreadcrumbNavigation, Pagination } from '@entur/menu';
5
+ import { Link as Link$1, useInRouterContext, useBlocker, useNavigate } from 'react-router-dom';
6
+ import { ButtonGroup, SecondaryButton, PrimaryButton, Button } from '@entur/button';
12
7
  import { Modal } from '@entur/modal';
13
- import { Pagination, BreadcrumbItem, BreadcrumbNavigation } from '@entur/menu';
8
+ import { Paragraph, Link as Link$2, Heading6 } from '@entur/typography';
9
+ import { BannerAlertBox } from '@entur/alert';
10
+ import { ExpandablePanel } from '@entur/expand';
11
+ import { SegmentedControl, SegmentedChoice } from '@entur/form';
12
+ import { SearchableDropdown } from '@entur/dropdown';
14
13
  import { Helmet } from 'react-helmet-async';
14
+ import { CookieIcon, UserIcon, DownArrowIcon, NorwayIcon, UKIcon, LogOutIcon, ChannelsIcon } from '@entur/icons';
15
+
16
+ var ActionBarLeft = function ActionBarLeft(_ref) {
17
+ var children = _ref.children;
18
+ return React.createElement("div", {
19
+ className: "eps-action-bar-left"
20
+ }, children);
21
+ };
22
+ var ActionBarRight = function ActionBarRight(_ref2) {
23
+ var children = _ref2.children;
24
+ return React.createElement("div", {
25
+ className: "eps-action-bar-right"
26
+ }, children);
27
+ };
28
+ var ActionBar = function ActionBar(_ref3) {
29
+ var children = _ref3.children;
30
+ return React.createElement(React.Fragment, null, React.createElement("div", {
31
+ className: "eps-action-bar-padding"
32
+ }), React.createElement("div", {
33
+ className: "eps-action-bar"
34
+ }, children));
35
+ };
15
36
 
16
37
  function _extends() {
17
38
  _extends = Object.assign ? Object.assign.bind() : function (target) {
@@ -52,7 +73,18 @@ function _objectWithoutPropertiesLoose(source, excluded) {
52
73
  return target;
53
74
  }
54
75
 
55
- var _excluded$e = ["as", "children", "contrast", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "paddingX", "paddingY", "padding", "marginTop", "marginRight", "marginBottom", "marginLeft", "marginX", "marginY", "margin", "display", "justifyContent", "alignItems", "maxWidth", "width", "background", "color", "flexDirection", "flexWrap", "className"];
76
+ var _excluded$e = ["date", "locale", "as", "hideTime"];
77
+ var FormatDateTime = function FormatDateTime(_ref) {
78
+ var date = _ref.date,
79
+ locale = _ref.locale,
80
+ _ref$as = _ref.as,
81
+ Component = _ref$as === void 0 ? "main" : _ref$as,
82
+ hideTime = _ref.hideTime,
83
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$e);
84
+ return React.createElement(Component, _extends({}, rest), hideTime ? localeDate(date, locale) : localeDateTime(date, locale));
85
+ };
86
+
87
+ var _excluded$d = ["as", "children", "contrast", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "paddingX", "paddingY", "padding", "marginTop", "marginRight", "marginBottom", "marginLeft", "marginX", "marginY", "margin", "display", "justifyContent", "alignItems", "maxWidth", "width", "background", "color", "flexDirection", "flexWrap", "className"];
56
88
  function responsiveProp(prefix, prop) {
57
89
  if (Array.isArray(prop)) {
58
90
  var classes = [];
@@ -65,7 +97,7 @@ function responsiveProp(prefix, prop) {
65
97
  }
66
98
  var Box = function Box(_ref) {
67
99
  var _ref$as = _ref.as,
68
- Component = _ref$as === void 0 ? 'div' : _ref$as,
100
+ Component = _ref$as === void 0 ? "div" : _ref$as,
69
101
  children = _ref.children,
70
102
  contrast = _ref.contrast,
71
103
  paddingTop = _ref.paddingTop,
@@ -92,7 +124,7 @@ var Box = function Box(_ref) {
92
124
  flexDirection = _ref.flexDirection,
93
125
  flexWrap = _ref.flexWrap,
94
126
  className = _ref.className,
95
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$e);
127
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$d);
96
128
  var classes = [];
97
129
  var resolvedPaddingTop = paddingTop || paddingY || padding;
98
130
  var resolvedPaddingBottom = paddingBottom || paddingY || padding;
@@ -102,32 +134,33 @@ var Box = function Box(_ref) {
102
134
  var resolvedMarginBottom = marginBottom || marginY || margin;
103
135
  var resolvedMarginLeft = marginLeft || marginX || margin;
104
136
  var resolvedMarginRight = marginRight || marginX || margin;
105
- contrast && classes.push('eds-contrast');
106
- resolvedPaddingTop && classes.push.apply(classes, responsiveProp('eps-pt-', resolvedPaddingTop));
107
- resolvedPaddingBottom && classes.push.apply(classes, responsiveProp('eps-pb-', resolvedPaddingBottom));
108
- resolvedPaddingLeft && classes.push.apply(classes, responsiveProp('eps-pl-', resolvedPaddingLeft));
109
- resolvedPaddingRight && classes.push.apply(classes, responsiveProp('eps-pr-', resolvedPaddingRight));
110
- resolvedMarginTop && classes.push.apply(classes, responsiveProp('eps-mt-', resolvedMarginTop));
111
- resolvedMarginBottom && classes.push.apply(classes, responsiveProp('eps-mb-', resolvedMarginBottom));
112
- resolvedMarginLeft && classes.push.apply(classes, responsiveProp('eps-ml-', resolvedMarginLeft));
113
- resolvedMarginRight && classes.push.apply(classes, responsiveProp('eps-mr-', resolvedMarginRight));
114
- display && classes.push.apply(classes, responsiveProp('eps-', display));
115
- justifyContent && classes.push.apply(classes, responsiveProp('eps-justify-', justifyContent));
137
+ contrast && classes.push("eds-contrast");
138
+ resolvedPaddingTop && classes.push.apply(classes, responsiveProp("eps-pt-", resolvedPaddingTop));
139
+ resolvedPaddingBottom && classes.push.apply(classes, responsiveProp("eps-pb-", resolvedPaddingBottom));
140
+ resolvedPaddingLeft && classes.push.apply(classes, responsiveProp("eps-pl-", resolvedPaddingLeft));
141
+ resolvedPaddingRight && classes.push.apply(classes, responsiveProp("eps-pr-", resolvedPaddingRight));
142
+ resolvedMarginTop && classes.push.apply(classes, responsiveProp("eps-mt-", resolvedMarginTop));
143
+ resolvedMarginBottom && classes.push.apply(classes, responsiveProp("eps-mb-", resolvedMarginBottom));
144
+ resolvedMarginLeft && classes.push.apply(classes, responsiveProp("eps-ml-", resolvedMarginLeft));
145
+ resolvedMarginRight && classes.push.apply(classes, responsiveProp("eps-mr-", resolvedMarginRight));
146
+ display && classes.push.apply(classes, responsiveProp("eps-", display));
147
+ justifyContent && classes.push.apply(classes, responsiveProp("eps-justify-", justifyContent));
116
148
  if (alignItems) {
117
- classes.push.apply(classes, responsiveProp('eps-items-', alignItems));
149
+ classes.push.apply(classes, responsiveProp("eps-items-", alignItems));
118
150
  }
119
- maxWidth && classes.push.apply(classes, responsiveProp('eps-max-w-', maxWidth));
120
- width && classes.push.apply(classes, responsiveProp('eps-w-', width));
151
+ maxWidth && classes.push.apply(classes, responsiveProp("eps-max-w-", maxWidth));
152
+ width && classes.push.apply(classes, responsiveProp("eps-w-", width));
121
153
  color && classes.push("eps-color-" + color);
122
154
  background && classes.push("eps-bg-" + background);
123
- flexDirection && classes.push.apply(classes, responsiveProp('eps-flex-', flexDirection));
124
- flexWrap && classes.push.apply(classes, responsiveProp('eps-flex-wrap-', flexWrap));
155
+ flexDirection && classes.push.apply(classes, responsiveProp("eps-flex-", flexDirection));
156
+ flexWrap && classes.push.apply(classes, responsiveProp("eps-flex-wrap-", flexWrap));
125
157
  var classList = cx(classes, className);
126
158
  return React.createElement(Component, _extends({
127
159
  className: classList
128
160
  }, rest), children);
129
161
  };
130
162
 
163
+ /** biome-ignore-all lint/suspicious/noArrayIndexKey: Ignore for now. Should be tested properly before doing changes */
131
164
  var Stack = function Stack(_ref) {
132
165
  var children = _ref.children,
133
166
  space = _ref.space,
@@ -148,68 +181,106 @@ var Stack = function Stack(_ref) {
148
181
  }));
149
182
  };
150
183
 
151
- var ActionBarLeft = function ActionBarLeft(_ref) {
152
- var children = _ref.children;
153
- return React.createElement("div", {
154
- className: "eps-action-bar-left"
155
- }, children);
156
- };
157
- var ActionBarRight = function ActionBarRight(_ref2) {
158
- var children = _ref2.children;
159
- return React.createElement("div", {
160
- className: "eps-action-bar-right"
161
- }, children);
184
+ var _excluded$c = ["items", "locale", "className"];
185
+ var AuditInfo = function AuditInfo(_ref) {
186
+ var items = _ref.items,
187
+ locale = _ref.locale,
188
+ className = _ref.className,
189
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$c);
190
+ var classNames = cx("ep-audit-info", className);
191
+ return React.createElement("div", _extends({
192
+ className: classNames
193
+ }, rest), items.map(function (_ref2) {
194
+ var label = _ref2.label,
195
+ value = _ref2.value;
196
+ return React.createElement(Stack, {
197
+ space: "small",
198
+ key: value.toString()
199
+ }, React.createElement("div", {
200
+ className: "ep-audit-info-label"
201
+ }, label), React.createElement("div", null, isDate(value) || isDateString(value) ? React.createElement(FormatDateTime, {
202
+ date: value,
203
+ locale: locale
204
+ }) : React.createElement("span", null, value)));
205
+ }));
162
206
  };
163
- var ActionBar = function ActionBar(_ref3) {
164
- var children = _ref3.children;
165
- return React.createElement(React.Fragment, null, React.createElement("div", {
166
- className: "eps-action-bar-padding"
167
- }), React.createElement("div", {
168
- className: "eps-action-bar"
169
- }, children));
207
+
208
+ var Breadcrumbs = function Breadcrumbs(_ref) {
209
+ var prependBreadcrumbItem = _ref.prependBreadcrumbItem,
210
+ pathname = _ref.pathname,
211
+ onBreadcrumbLookup = _ref.onBreadcrumbLookup;
212
+ var paths = splitUrlPath(pathname);
213
+ var breadcrumbs = paths.map(function (path) {
214
+ return {
215
+ title: onBreadcrumbLookup(path),
216
+ path: path
217
+ };
218
+ }).filter(function (_ref2) {
219
+ var title = _ref2.title;
220
+ return title !== undefined;
221
+ });
222
+ var breadcrumbElements = breadcrumbs.map(function (_ref3, i) {
223
+ var title = _ref3.title,
224
+ path = _ref3.path;
225
+ var isLast = i === breadcrumbs.length - 1;
226
+ if (isLast) {
227
+ return React.createElement(BreadcrumbItem, {
228
+ key: path,
229
+ as: "span"
230
+ }, title);
231
+ }
232
+ return React.createElement(BreadcrumbItem, {
233
+ key: path,
234
+ as: Link$1,
235
+ to: path
236
+ }, title);
237
+ });
238
+ if (prependBreadcrumbItem) {
239
+ return React.createElement(BreadcrumbNavigation, null, [prependBreadcrumbItem].concat(breadcrumbElements));
240
+ }
241
+ return React.createElement(BreadcrumbNavigation, null, breadcrumbElements);
170
242
  };
171
243
 
172
- var _excluded$d = ["children", "className"];
173
- var LinkButton = function LinkButton(_ref) {
174
- var children = _ref.children,
175
- className = _ref.className,
176
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$d);
177
- return React.createElement(Link$1, _extends({}, rest, {
178
- as: "button",
179
- className: cx('eps-link-button', className)
180
- }), children);
244
+ var _excluded$b = ["isOpen", "children", "message", "size", "buttons", "onConfirm", "messages", "onClose", "onDismiss"];
245
+ var ConfirmModal = function ConfirmModal(_ref) {
246
+ var _ref$isOpen = _ref.isOpen,
247
+ isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
248
+ children = _ref.children,
249
+ message = _ref.message,
250
+ _ref$size = _ref.size,
251
+ size = _ref$size === void 0 ? "medium" : _ref$size,
252
+ buttons = _ref.buttons,
253
+ onConfirm = _ref.onConfirm,
254
+ messages = _ref.messages,
255
+ onClose = _ref.onClose,
256
+ onDismiss = _ref.onDismiss,
257
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
258
+ var childrenToRender = children ? children : message;
259
+ var handleDismiss = onClose ? onClose : onDismiss;
260
+ return React.createElement(Modal, _extends({
261
+ size: size,
262
+ open: isOpen,
263
+ onDismiss: handleDismiss
264
+ }, rest), isString(childrenToRender) ? React.createElement(Paragraph, null, childrenToRender) : React.createElement(Box, {
265
+ paddingBottom: "medium"
266
+ }, childrenToRender), React.createElement(ButtonGroup, null, onConfirm ? React.createElement(React.Fragment, null, React.createElement(SecondaryButton, {
267
+ onClick: handleDismiss,
268
+ "data-testid": "cancel-modal-button"
269
+ }, messages.cancel), React.createElement(PrimaryButton, {
270
+ onClick: onConfirm,
271
+ "data-testid": "confirm-modal-button"
272
+ }, messages.confirm)) : buttons));
181
273
  };
182
274
 
183
- /// <reference types="vite/client" />
184
- /**
185
- * Returns true if the provided flag exist in localStorage
186
- * or is set as an environment variable.
187
- *
188
- * @param flag case sensitive flag. If it is an environment variable
189
- * you can drop the VITE_APP_ prefix.
190
- */
191
- function featureFlag(flag) {
192
- var _window$localStorage, _window$localStorage2;
193
- return import.meta.env["VITE_APP_" + flag] === 'true' || ((_window$localStorage = window.localStorage) == null ? void 0 : _window$localStorage.getItem(flag)) === 'true' || ((_window$localStorage2 = window.localStorage) == null ? void 0 : _window$localStorage2.getItem("VITE_APP_" + flag)) === 'true';
194
- }
195
- /**
196
- * Returns true if the provided flag exist in localStorage
197
- * or is set as an environment variable.
198
- *
199
- * @param flag case sensitive flag. If it is an environment variable
200
- * you can drop the VITE_APP_ prefix.
201
- */
202
- function useFeatureToggle(flag) {
203
- return featureFlag(flag);
204
- }
205
- var FeatureToggle = function FeatureToggle(_ref) {
206
- var children = _ref.children,
207
- flag = _ref.flag;
208
- var feature = useFeatureToggle(flag);
209
- if (feature) {
210
- return React.createElement(React.Fragment, null, children);
211
- }
212
- return null;
275
+ var Content = function Content(_ref) {
276
+ var _ref$as = _ref.as,
277
+ Component = _ref$as === void 0 ? "main" : _ref$as,
278
+ className = _ref.className,
279
+ children = _ref.children;
280
+ var classList = cx(["eps-content", className]);
281
+ return React.createElement(Component, {
282
+ className: classList
283
+ }, children);
213
284
  };
214
285
 
215
286
  var _environmentColors, _humanReadableEnviron;
@@ -220,7 +291,7 @@ var Environment;
220
291
  Environment["Staging"] = "staging";
221
292
  Environment["Production"] = "prod";
222
293
  })(Environment || (Environment = {}));
223
- var environmentColors = (_environmentColors = {}, _environmentColors[Environment.Local] = '#B482FB', _environmentColors[Environment.Development] = '#5AC39A', _environmentColors[Environment.Staging] = '#FFCA28', _environmentColors);
294
+ var environmentColors = (_environmentColors = {}, _environmentColors[Environment.Local] = "#B482FB", _environmentColors[Environment.Development] = "#5AC39A", _environmentColors[Environment.Staging] = "#FFCA28", _environmentColors);
224
295
  /**
225
296
  * Gets the color for the given environment. This is the color used for the environment
226
297
  * indicator. There is no color for production as it should not have any special environment
@@ -229,17 +300,17 @@ var environmentColors = (_environmentColors = {}, _environmentColors[Environment
229
300
  var getColorForEnvironment = function getColorForEnvironment(environment) {
230
301
  return environmentColors[environment];
231
302
  };
232
- var humanReadableEnvironment = (_humanReadableEnviron = {}, _humanReadableEnviron[Environment.Local] = 'Local', _humanReadableEnviron[Environment.Development] = 'Dev', _humanReadableEnviron[Environment.Staging] = 'Staging', _humanReadableEnviron[Environment.Production] = 'Prod', _humanReadableEnviron);
303
+ var humanReadableEnvironment = (_humanReadableEnviron = {}, _humanReadableEnviron[Environment.Local] = "Local", _humanReadableEnviron[Environment.Development] = "Dev", _humanReadableEnviron[Environment.Staging] = "Staging", _humanReadableEnviron[Environment.Production] = "Prod", _humanReadableEnviron);
233
304
  var getHumanReadableEnvironment = function getHumanReadableEnvironment(environment) {
234
305
  return humanReadableEnvironment[environment];
235
306
  };
236
307
 
237
- var _excluded$c = ["title", "accentColor"];
308
+ var _excluded$a = ["title", "accentColor"];
238
309
  var EnturPartnerLogoSvg = function EnturPartnerLogoSvg(_ref) {
239
310
  var title = _ref.title,
240
311
  _ref$accentColor = _ref.accentColor,
241
- accentColor = _ref$accentColor === void 0 ? '#FF5959' : _ref$accentColor,
242
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$c);
312
+ accentColor = _ref$accentColor === void 0 ? "#FF5959" : _ref$accentColor,
313
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
243
314
  return React.createElement("svg", _extends({
244
315
  width: 257,
245
316
  height: 37,
@@ -264,11 +335,11 @@ var EnturPartnerLogoSvg = function EnturPartnerLogoSvg(_ref) {
264
335
  };
265
336
  var EnturPartnerLogo = function EnturPartnerLogo(_ref2) {
266
337
  var _ref2$as = _ref2.as,
267
- Component = _ref2$as === void 0 ? 'nav' : _ref2$as,
338
+ Component = _ref2$as === void 0 ? "nav" : _ref2$as,
268
339
  className = _ref2.className,
269
340
  altText = _ref2.altText,
270
341
  environment = _ref2.environment;
271
- var classList = cx(['eps-logo-wrapper', className]);
342
+ var classList = cx(["eps-logo-wrapper", className]);
272
343
  return React.createElement(Component, {
273
344
  className: classList
274
345
  }, React.createElement(EnturPartnerLogoSvg, {
@@ -278,374 +349,75 @@ var EnturPartnerLogo = function EnturPartnerLogo(_ref2) {
278
349
  }));
279
350
  };
280
351
 
281
- var Menu = function Menu(_ref) {
282
- var _ref$as = _ref.as,
283
- Component = _ref$as === void 0 ? 'nav' : _ref$as,
284
- className = _ref.className,
285
- children = _ref.children;
286
- var classList = cx(['eds-contrast', 'eps-menu', className]);
287
- return React.createElement(Component, {
288
- className: classList
289
- }, children);
290
- };
291
-
292
- var Content = function Content(_ref) {
293
- var _ref$as = _ref.as,
294
- Component = _ref$as === void 0 ? 'main' : _ref$as,
295
- className = _ref.className,
296
- children = _ref.children;
297
- var classList = cx(['eps-content', className]);
298
- return React.createElement(Component, {
299
- className: classList
300
- }, children);
301
- };
302
-
303
- function useOutsideClick(ref, buttonRef, handler) {
304
- React.useEffect(function () {
305
- var listener = function listener(event) {
306
- if (elementContainsEventTarget(ref.current, event) || elementContainsEventTarget(buttonRef.current, event)) {
307
- return;
308
- }
309
- handler();
310
- };
311
- document.addEventListener('mousedown', listener);
312
- document.addEventListener('touchstart', listener);
313
- return function () {
314
- document.removeEventListener('mousedown', listener);
315
- document.removeEventListener('touchstart', listener);
352
+ var newAppVersionErrorMessage = "Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.";
353
+ var ErrorBoundary = /*#__PURE__*/function (_Component) {
354
+ function ErrorBoundary(props) {
355
+ var _this;
356
+ _this = _Component.call(this, props) || this;
357
+ _this.state = {
358
+ error: null
316
359
  };
317
- }, [ref, buttonRef, handler]);
318
- }
319
- function elementContainsEventTarget(element, event) {
320
- if (!element) {
321
- return false;
322
- }
323
- if (element.contains(event.target)) {
324
- return true;
325
- }
326
- // For elements inside a Shadow DOM we need to check the composedPath
327
- if (event.composed && event.composedPath) {
328
- var contains = event.composedPath().find(function (target) {
329
- if (target === window) {
330
- return false;
331
- }
332
- return element.contains(target);
333
- });
334
- return !!contains;
360
+ return _this;
335
361
  }
336
- return false;
337
- }
338
-
339
- var _excluded$b = ["className", "children", "userName", "open", "onOpenChange", "environment"];
340
- var CustomOverflowMenu = function CustomOverflowMenu(_ref) {
341
- var className = _ref.className,
342
- children = _ref.children,
343
- userName = _ref.userName,
344
- open = _ref.open,
345
- onOpenChange = _ref.onOpenChange,
346
- environment = _ref.environment,
347
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
348
- var overflowItemsClasses = cx('eps-overflow-menu__group', {
349
- 'eps-overflow-menu__group--open': open
350
- });
351
- var overflowContentRef = React.useRef(null);
352
- var overflowMenuTriggerRef = React.useRef(null);
353
- useOutsideClick(overflowContentRef, overflowMenuTriggerRef, function () {
354
- return onOpenChange(false);
355
- });
356
- return React.createElement("div", null, React.createElement(SecondaryButton, _extends({
357
- className: cx('eps-overflow-menu__button', className),
358
- onClick: function onClick() {
359
- return onOpenChange(open ? false : true);
360
- },
361
- "aria-haspopup": true,
362
- role: "button",
363
- "aria-expanded": open,
364
- ref: overflowMenuTriggerRef
365
- }, rest), React.createElement("div", {
366
- className: "eps-overflow-menu__button-contents"
367
- }, React.createElement("span", {
368
- className: "eds-overflow-menu__user-icon"
369
- }, React.createElement(UserIcon, {
370
- inline: true
371
- })), React.createElement(Heading6, {
372
- margin: "none",
373
- as: "span"
374
- }, userName, environment !== undefined && environment !== Environment.Production && React.createElement("span", {
375
- style: {
376
- color: getColorForEnvironment(environment)
377
- }
378
- }, ' ', "(", getHumanReadableEnvironment(environment), ")")), React.createElement("span", {
379
- className: "eps-arrow-icon"
380
- }, React.createElement(DownArrowIcon, {
381
- inline: true
382
- })))), open && React.createElement("div", {
383
- className: overflowItemsClasses,
384
- role: "menu",
385
- ref: overflowContentRef
386
- }, children));
387
- };
388
-
389
- var CustomOverflowMenuItem = function CustomOverflowMenuItem(props) {
390
- return React.createElement("button", _extends({
391
- className: cx(props.className, 'eps-overflow-menu__item'),
392
- role: "menuitem"
393
- }, props));
394
- };
395
-
396
- var LanguageSwitchMenuItem = function LanguageSwitchMenuItem(_ref) {
397
- var language = _ref.language,
398
- onLanguageChange = _ref.onLanguageChange,
399
- setOpen = _ref.setOpen,
400
- name = _ref.name;
401
- var useB47LanguageKey = useFeatureToggle('USE_BCP-47_LANGUAGE_KEY');
402
- var norwegianLanguageKey = useB47LanguageKey ? 'nb-NO' : 'nb';
403
- var englishLanguageKey = useB47LanguageKey ? 'en-GB' : 'en';
404
- return React.createElement(React.Fragment, null, language === englishLanguageKey ? React.createElement(CustomOverflowMenuItem, {
405
- onClick: function onClick() {
406
- onLanguageChange(norwegianLanguageKey);
407
- setOpen(false);
408
- },
409
- className: "eps-overflow-menu__item"
410
- }, React.createElement("span", {
411
- "aria-hidden": true,
412
- className: "eps-overflow-menu__icon-margin"
413
- }, React.createElement(NorwayIcon, {
414
- size: "1rem",
415
- inline: true
416
- })), name) : React.createElement(CustomOverflowMenuItem, {
417
- onClick: function onClick() {
418
- onLanguageChange(englishLanguageKey);
419
- setOpen(false);
420
- },
421
- className: "eps-overflow-menu__item"
422
- }, React.createElement("span", {
423
- "aria-hidden": true,
424
- className: "eps-overflow-menu__icon-margin"
425
- }, React.createElement(UKIcon, {
426
- size: "1rem",
427
- inline: true
428
- })), name));
429
- };
430
-
431
- var VersionMenuItem = function VersionMenuItem(_ref) {
432
- var title = _ref.title,
433
- setOpen = _ref.setOpen;
434
- var navigate = useNavigate(); // Hide useNavigate from standalone micro-frontends because it is not under RouterProvider
435
- return React.createElement(CustomOverflowMenuItem, {
436
- onClick: function onClick() {
437
- navigate('/app-version');
438
- setOpen(false);
439
- },
440
- className: "eps-overflow-menu__item"
441
- }, React.createElement("span", {
442
- "aria-hidden": true
443
- }, React.createElement(ChannelsIcon, {
444
- className: "eps-version-icon",
445
- size: "1rem",
446
- inline: true
447
- })), title);
448
- };
449
-
450
- var UserMenuItem = function UserMenuItem(_ref) {
451
- var name = _ref.name,
452
- setOpen = _ref.setOpen,
453
- onNavigateToMyProfile = _ref.onNavigateToMyProfile;
454
- return React.createElement(Link$2, {
455
- to: "/permission-admin/my-profile",
456
- style: {
457
- textDecoration: 'none'
458
- }
459
- }, React.createElement(CustomOverflowMenuItem, {
460
- onClick: function onClick() {
461
- setOpen(false);
462
- onNavigateToMyProfile();
463
- },
464
- className: "eps-overflow-menu__item"
465
- }, React.createElement("span", {
466
- "aria-hidden": true
467
- }, React.createElement(UserIcon, {
468
- size: "1rem",
469
- inline: true
470
- })), name));
471
- };
472
-
473
- var LogOutMenuItem = function LogOutMenuItem(_ref) {
474
- var name = _ref.name,
475
- setOpen = _ref.setOpen,
476
- onLogout = _ref.onLogout;
477
- return React.createElement(CustomOverflowMenuItem, {
478
- onClick: function onClick() {
479
- onLogout();
480
- setOpen(false);
481
- },
482
- "data-testid": "user-menu-logout",
483
- className: "eps-overflow-menu__item"
484
- }, React.createElement("span", {
485
- "aria-hidden": true
486
- }, React.createElement(LogOutIcon, {
487
- size: "1rem",
488
- inline: true
489
- })), name);
490
- };
491
-
492
- var CookieSettingsMenuItem = function CookieSettingsMenuItem(_ref) {
493
- var name = _ref.name,
494
- setOpen = _ref.setOpen,
495
- onCookieSettingsOpen = _ref.onCookieSettingsOpen;
496
- return React.createElement(CustomOverflowMenuItem, {
497
- onClick: function onClick() {
498
- onCookieSettingsOpen();
499
- setOpen(false);
500
- },
501
- className: "eps-overflow-menu__item"
502
- }, React.createElement("span", {
503
- "aria-hidden": true
504
- }, React.createElement(CookieIcon, {
505
- size: "1rem",
506
- inline: true
507
- })), name);
508
- };
509
-
510
- var UserMenu = function UserMenu(_ref) {
511
- var className = _ref.className,
512
- messages = _ref.messages,
513
- onLogout = _ref.onLogout,
514
- onLanguageChange = _ref.onLanguageChange,
515
- userName = _ref.userName,
516
- language = _ref.language,
517
- environment = _ref.environment,
518
- showVersionItem = _ref.showVersionItem,
519
- showMyProfileItem = _ref.showMyProfileItem,
520
- showCookieSettingsItem = _ref.showCookieSettingsItem,
521
- onNavigateToMyProfile = _ref.onNavigateToMyProfile,
522
- _ref$onCookieSettings = _ref.onCookieSettingsOpen,
523
- onCookieSettingsOpen = _ref$onCookieSettings === void 0 ? function () {} : _ref$onCookieSettings;
524
- var triggerClassList = cx(['eps-user-menu__trigger-button', className]);
525
- var _useState = useState(false),
526
- open = _useState[0],
527
- setOpen = _useState[1];
528
- return React.createElement("div", {
529
- id: "eps-user-menu"
530
- }, React.createElement(CustomOverflowMenu, {
531
- open: open,
532
- onOpenChange: setOpen,
533
- className: triggerClassList,
534
- userName: userName,
535
- environment: environment
536
- }, React.createElement("div", {
537
- id: "eps-overflow-menu"
538
- }, React.createElement(LanguageSwitchMenuItem, {
539
- name: messages.switchLanguage,
540
- language: language,
541
- onLanguageChange: onLanguageChange,
542
- setOpen: setOpen
543
- }), showVersionItem && messages.appVersion && React.createElement(VersionMenuItem, {
544
- title: messages.appVersion,
545
- setOpen: setOpen
546
- }), showMyProfileItem && messages.myProfile && React.createElement(UserMenuItem, {
547
- name: messages.myProfile,
548
- setOpen: setOpen,
549
- onNavigateToMyProfile: onNavigateToMyProfile
550
- }), showCookieSettingsItem && messages.cookieSettings && React.createElement(CookieSettingsMenuItem, {
551
- name: messages.cookieSettings,
552
- setOpen: setOpen,
553
- onCookieSettingsOpen: onCookieSettingsOpen
554
- }), React.createElement(LogOutMenuItem, {
555
- name: messages.logout,
556
- setOpen: setOpen,
557
- onLogout: onLogout
558
- }))));
559
- };
560
-
561
- var _excluded$a = ["label", "organisations", "onChange", "selectedOrganisationId"];
562
- var OrganisationDropDown = function OrganisationDropDown(_ref) {
563
- var label = _ref.label,
564
- organisations = _ref.organisations,
565
- handleChange = _ref.onChange,
566
- selectedOrganisationId = _ref.selectedOrganisationId,
567
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
568
- var _useState = useState(),
569
- selectedOrganisation = _useState[0],
570
- setSelectedOrganisation = _useState[1];
571
- useEffect(function () {
572
- setSelectedOrganisation(organisations.find(function (org) {
573
- return org.organisationId === selectedOrganisationId;
574
- }));
575
- // eslint-disable-next-line react-hooks/exhaustive-deps
576
- }, [selectedOrganisationId]);
577
- return React.createElement(SearchableDropdown, _extends({
578
- label: label,
579
- items: [].concat(organisations.sort(function (a, b) {
580
- return a.tradingName.localeCompare(b.tradingName, 'nb');
581
- }).map(function (organisation) {
582
- return {
583
- value: organisation.organisationId,
584
- label: organisation.tradingName
585
- };
586
- })),
587
- selectedItem: selectedOrganisation ? {
588
- value: selectedOrganisation.organisationId,
589
- label: selectedOrganisation.tradingName
590
- } : null,
591
- onChange: function onChange(selectedValue) {
592
- if (selectedValue) {
593
- handleChange(selectedValue.value);
594
- }
595
- },
596
- clearable: false
597
- }, rest));
598
- };
599
-
600
- /*global EventListener WindowEventHandlers*/
601
- function useEventListener(eventName, handler, element) {
602
- if (element === void 0) {
603
- element = window;
604
- }
605
- var savedHandler = useRef();
606
- useEffect(function () {
607
- savedHandler.current = handler;
608
- }, [handler]);
609
- useEffect(function () {
610
- var isSupported = element && element.addEventListener;
611
- if (!isSupported) return;
612
- var eventListener = function eventListener(event) {
613
- return savedHandler.current == null ? void 0 : savedHandler.current(event);
614
- };
615
- element.addEventListener(eventName, eventListener);
616
- return function () {
617
- element.removeEventListener(eventName, eventListener);
362
+ _inheritsLoose(ErrorBoundary, _Component);
363
+ ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {
364
+ return {
365
+ error: error
618
366
  };
619
- }, [eventName, element]);
367
+ };
368
+ var _proto = ErrorBoundary.prototype;
369
+ _proto.componentDidCatch = function componentDidCatch(error, errorInfo) {
370
+ var _this$props$handleErr, _this$props;
371
+ // React always logs in development
372
+ (_this$props$handleErr = (_this$props = this.props).handleError) == null || _this$props$handleErr.call(_this$props, error, errorInfo);
373
+ };
374
+ _proto.render = function render() {
375
+ var _this2 = this;
376
+ var error = this.state.error;
377
+ var _this$props2 = this.props,
378
+ fallback = _this$props2.fallback,
379
+ children = _this$props2.children;
380
+ if (error) {
381
+ if (isFunction(fallback)) {
382
+ return fallback({
383
+ retry: function retry() {
384
+ return _this2.setState({
385
+ error: null
386
+ });
387
+ },
388
+ error: error
389
+ });
390
+ } else if (error.name === "NotFoundError" && error.message === newAppVersionErrorMessage) {
391
+ return React.createElement(RefreshBannerInfo, null);
392
+ }
393
+ return fallback;
394
+ }
395
+ return children;
396
+ };
397
+ return ErrorBoundary;
398
+ }(Component);
399
+ var LANGUAGE_STORAGE_KEY = "EP::locale";
400
+ function RefreshBannerInfo() {
401
+ // Taken from ./app-shell/src/storage.ts
402
+ var language = localStorage.getItem(LANGUAGE_STORAGE_KEY);
403
+ var isNorwegian = language === "nb" || language === "nb-NO";
404
+ return React.createElement(Box, {
405
+ maxWidth: "large"
406
+ }, React.createElement(BannerAlertBox, {
407
+ variant: "info",
408
+ title: isNorwegian ? "En ny versjon av nettsiden er tilgjengelig." : "A new version of the website is available."
409
+ }, React.createElement(Box, {
410
+ paddingBottom: "medium"
411
+ }, React.createElement(Paragraph, {
412
+ margin: "none"
413
+ }, isNorwegian ? "Vennligst oppdater." : "Please refresh.")), React.createElement(PrimaryButton, {
414
+ onClick: function onClick() {
415
+ return window.location.reload();
416
+ }
417
+ }, isNorwegian ? "Oppdater" : "Refresh")));
620
418
  }
621
419
 
622
- var _excluded$9 = ["language", "options", "className", "onChange"];
623
- var LanguageSelect = function LanguageSelect(_ref) {
624
- var language = _ref.language,
625
- options = _ref.options,
626
- className = _ref.className,
627
- _onChange = _ref.onChange,
628
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
629
- var classNames = cx('eps-language-select', className);
630
- return React.createElement("div", _extends({}, rest, {
631
- className: classNames
632
- }), React.createElement(SegmentedControl, {
633
- onChange: function onChange(language) {
634
- assertIsDefined(language);
635
- _onChange(language);
636
- },
637
- selectedValue: language
638
- }, options.map(function (option) {
639
- return React.createElement(SegmentedChoice, {
640
- key: option.value,
641
- value: option.value
642
- }, option.label, option.required && React.createElement("span", {
643
- className: "asterisk-margin"
644
- }, '*'));
645
- })));
646
- };
647
-
648
- var _excluded$8 = ["title", "inputComponent", "languages", "values", "onChange", "name", "variant", "feedback"];
420
+ var _excluded$9 = ["title", "inputComponent", "languages", "values", "onChange", "name", "variant", "feedback"];
649
421
  var ExpandableMultiLanguageInput = function ExpandableMultiLanguageInput(_ref) {
650
422
  var title = _ref.title,
651
423
  InputComponent = _ref.inputComponent,
@@ -655,10 +427,10 @@ var ExpandableMultiLanguageInput = function ExpandableMultiLanguageInput(_ref) {
655
427
  name = _ref.name,
656
428
  variant = _ref.variant,
657
429
  feedback = _ref.feedback,
658
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
430
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
659
431
  var handleOnChange = function handleOnChange(language, value) {
660
432
  var changes = _extends({}, values);
661
- if (value === '' || !value) {
433
+ if (value === "" || !value) {
662
434
  delete changes[language];
663
435
  } else {
664
436
  changes[language] = value;
@@ -669,9 +441,9 @@ var ExpandableMultiLanguageInput = function ExpandableMultiLanguageInput(_ref) {
669
441
  title: title,
670
442
  defaultOpen: true,
671
443
  contentStyle: {
672
- padding: '4px 4px 4px 4px',
673
- marginTop: '16px',
674
- marginBottom: '16px'
444
+ padding: "4px 4px 4px 4px",
445
+ marginTop: "16px",
446
+ marginBottom: "16px"
675
447
  }
676
448
  }, React.createElement(Stack, {
677
449
  space: "medium"
@@ -682,19 +454,119 @@ var ExpandableMultiLanguageInput = function ExpandableMultiLanguageInput(_ref) {
682
454
  return React.createElement(InputComponent, _extends({
683
455
  "data-testid": "multi-lang-input-" + name + "-" + langKey,
684
456
  key: title + langKey,
685
- label: required ? label + '*' : label,
686
- variant: variant && variant(langKey),
687
- feedback: feedback && feedback(langKey),
457
+ label: required ? label + "*" : label,
458
+ variant: variant == null ? void 0 : variant(langKey),
459
+ feedback: feedback == null ? void 0 : feedback(langKey),
688
460
  name: name,
689
461
  onChange: function onChange(e) {
690
462
  handleOnChange(langKey, e.target.value);
691
463
  },
692
- value: values[langKey] || ''
464
+ value: values[langKey] || ""
693
465
  }, rest));
694
466
  })));
695
467
  };
696
468
 
697
- var _excluded$7 = ["className", "inputComponent", "alertLabel", "alertLevel", "name", "languages", "values", "onChange", "defaultLanguage", "label", "onBlur"];
469
+ /// <reference types="vite/client" />
470
+ /**
471
+ * Returns true if the provided flag exist in localStorage
472
+ * or is set as an environment variable.
473
+ *
474
+ * @param flag case sensitive flag. If it is an environment variable
475
+ * you can drop the VITE_APP_ prefix.
476
+ */
477
+ function featureFlag(flag) {
478
+ var _window$localStorage, _window$localStorage2;
479
+ return import.meta.env["VITE_APP_" + flag] === "true" || ((_window$localStorage = window.localStorage) == null ? void 0 : _window$localStorage.getItem(flag)) === "true" || ((_window$localStorage2 = window.localStorage) == null ? void 0 : _window$localStorage2.getItem("VITE_APP_" + flag)) === "true";
480
+ }
481
+ /**
482
+ * Returns true if the provided flag exist in localStorage
483
+ * or is set as an environment variable.
484
+ *
485
+ * @param flag case sensitive flag. If it is an environment variable
486
+ * you can drop the VITE_APP_ prefix.
487
+ */
488
+ function useFeatureToggle(flag) {
489
+ return featureFlag(flag);
490
+ }
491
+ var FeatureToggle = function FeatureToggle(_ref) {
492
+ var children = _ref.children,
493
+ flag = _ref.flag;
494
+ var feature = useFeatureToggle(flag);
495
+ if (feature) {
496
+ return React.createElement(React.Fragment, null, children);
497
+ }
498
+ return null;
499
+ };
500
+
501
+ var _excluded$8 = ["amount", "as"];
502
+ var FormatCurrencyAmount = function FormatCurrencyAmount(_ref) {
503
+ var amount = _ref.amount,
504
+ _ref$as = _ref.as,
505
+ Component = _ref$as === void 0 ? "span" : _ref$as,
506
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
507
+ var parsedAmount = Number(amount) || 0;
508
+ var formattedAmount = new Intl.NumberFormat("nb-NO", {
509
+ maximumFractionDigits: 2,
510
+ minimumFractionDigits: 2
511
+ }).format(parsedAmount);
512
+ return React.createElement(Component, _extends({}, rest), formattedAmount);
513
+ };
514
+
515
+ var _excluded$7 = ["language", "options", "className", "onChange"];
516
+ var LanguageSelect = function LanguageSelect(_ref) {
517
+ var language = _ref.language,
518
+ options = _ref.options,
519
+ className = _ref.className,
520
+ _onChange = _ref.onChange,
521
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
522
+ var classNames = cx("eps-language-select", className);
523
+ return React.createElement("div", _extends({}, rest, {
524
+ className: classNames
525
+ }), React.createElement(SegmentedControl, {
526
+ onChange: function onChange(language) {
527
+ assertIsDefined(language);
528
+ _onChange(language);
529
+ },
530
+ selectedValue: language
531
+ }, options.map(function (option) {
532
+ return React.createElement(SegmentedChoice, {
533
+ key: option.value,
534
+ value: option.value
535
+ }, option.label, option.required && React.createElement("span", {
536
+ className: "asterisk-margin"
537
+ }, "*"));
538
+ })));
539
+ };
540
+
541
+ var Link = function Link(props) {
542
+ return React.createElement(Link$2, _extends({}, props, {
543
+ as: Link$1
544
+ }), props.children);
545
+ };
546
+
547
+ var _excluded$6 = ["children", "className"];
548
+ var LinkButton = function LinkButton(_ref) {
549
+ var children = _ref.children,
550
+ className = _ref.className,
551
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
552
+ return React.createElement(Link$2, _extends({}, rest, {
553
+ as: "button",
554
+ className: cx("eps-link-button", className)
555
+ }), children);
556
+ };
557
+
558
+ var Menu = function Menu(_ref) {
559
+ var _ref$as = _ref.as,
560
+ Component = _ref$as === void 0 ? "nav" : _ref$as,
561
+ className = _ref.className,
562
+ children = _ref.children;
563
+ var classList = cx(["eds-contrast", "eps-menu", className]);
564
+ return React.createElement(Component, {
565
+ className: classList
566
+ }, children);
567
+ };
568
+
569
+ var _excluded$5 = ["className", "inputComponent", "alertLabel", "alertLevel", "name", "languages", "values", "onChange", "defaultLanguage", "label", "onBlur"];
698
570
  /**
699
571
  * @deprecated use ExpandableMultiLanguageInput
700
572
  */
@@ -708,16 +580,16 @@ var MultiLanguageInput = function MultiLanguageInput(_ref) {
708
580
  values = _ref.values,
709
581
  onChange = _ref.onChange,
710
582
  _ref$defaultLanguage = _ref.defaultLanguage,
711
- defaultLanguage = _ref$defaultLanguage === void 0 ? 'nob' : _ref$defaultLanguage,
583
+ defaultLanguage = _ref$defaultLanguage === void 0 ? "nob" : _ref$defaultLanguage,
712
584
  _ref$label = _ref.label,
713
- label = _ref$label === void 0 ? '' : _ref$label,
585
+ label = _ref$label === void 0 ? "" : _ref$label,
714
586
  _ref$onBlur = _ref.onBlur,
715
587
  onBlur = _ref$onBlur === void 0 ? function () {} : _ref$onBlur,
716
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
588
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
717
589
  var _useState = useState(defaultLanguage),
718
590
  language = _useState[0],
719
591
  setLanguage = _useState[1];
720
- var classNames = cx('multi-language-input', className);
592
+ var classNames = cx("multi-language-input", className);
721
593
  var currentValue = values[language];
722
594
  var handleOnBlur = function handleOnBlur(e) {
723
595
  e.persist();
@@ -733,208 +605,148 @@ var MultiLanguageInput = function MultiLanguageInput(_ref) {
733
605
  };
734
606
  var handleOnChange = function handleOnChange(value) {
735
607
  var changes = Object.assign({}, values);
736
- if (value === '' || !value) {
608
+ if (value === "" || !value) {
737
609
  delete changes[language];
738
610
  } else {
739
611
  changes[language] = value;
740
612
  }
741
613
  onChange(changes);
742
614
  };
743
- return React.createElement("div", {
744
- className: classNames,
745
- tabIndex: 0,
746
- onBlur: handleOnBlur,
747
- "data-testid": "multi-lang-input-" + name
748
- }, React.createElement(Stack, {
749
- space: "extraSmall"
750
- }, React.createElement(LanguageSelect, {
751
- language: language,
752
- options: languages,
753
- onChange: function onChange(lang) {
754
- return handleLanguageChange(lang);
755
- }
756
- }), React.createElement(InputComponent, _extends({
757
- label: label,
758
- variant: alertLevel,
759
- feedback: alertLabel,
760
- name: name,
761
- className: "language-item",
762
- onChange: function onChange(e) {
763
- return handleOnChange(e.target.value);
764
- },
765
- value: currentValue || ''
766
- }, rest))));
767
- };
768
-
769
- var _excluded$6 = ["children", "className"];
770
- var Unbutton = function Unbutton(_ref) {
771
- var children = _ref.children,
772
- className = _ref.className,
773
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
774
- return React.createElement(Button, _extends({
775
- variant: "primary"
776
- }, rest, {
777
- className: cx('eps-unbutton', className)
778
- }), children);
615
+ return (
616
+ // biome-ignore lint/a11y/noStaticElementInteractions: Legacy component
617
+ React.createElement("div", {
618
+ className: classNames,
619
+ // biome-ignore lint/a11y/noNoninteractiveTabindex: Legacy component
620
+ tabIndex: 0,
621
+ onBlur: handleOnBlur,
622
+ "data-testid": "multi-lang-input-" + name
623
+ }, React.createElement(Stack, {
624
+ space: "extraSmall"
625
+ }, React.createElement(LanguageSelect, {
626
+ language: language,
627
+ options: languages,
628
+ onChange: function onChange(lang) {
629
+ return handleLanguageChange(lang);
630
+ }
631
+ }), React.createElement(InputComponent, _extends({
632
+ label: label,
633
+ variant: alertLevel,
634
+ feedback: alertLabel,
635
+ name: name,
636
+ className: "language-item",
637
+ onChange: function onChange(e) {
638
+ return handleOnChange(e.target.value);
639
+ },
640
+ value: currentValue || ""
641
+ }, rest))))
642
+ );
779
643
  };
780
644
 
781
- function isFunction(functionToCheck) {
782
- return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
783
- }
784
-
785
- var newAppVersionErrorMessage = "Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.";
786
- var ErrorBoundary = /*#__PURE__*/function (_Component) {
787
- function ErrorBoundary(props) {
788
- var _this;
789
- _this = _Component.call(this, props) || this;
790
- _this.state = {
791
- error: null
792
- };
793
- return _this;
794
- }
795
- _inheritsLoose(ErrorBoundary, _Component);
796
- ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {
797
- return {
798
- error: error
799
- };
800
- };
801
- var _proto = ErrorBoundary.prototype;
802
- _proto.componentDidCatch = function componentDidCatch(error, errorInfo) {
803
- var _this$props$handleErr, _this$props;
804
- // React always logs in development
805
- (_this$props$handleErr = (_this$props = this.props).handleError) == null || _this$props$handleErr.call(_this$props, error, errorInfo);
806
- };
807
- _proto.render = function render() {
808
- var _this2 = this;
809
- var error = this.state.error;
810
- var _this$props2 = this.props,
811
- fallback = _this$props2.fallback,
812
- children = _this$props2.children;
813
- if (error) {
814
- if (isFunction(fallback)) {
815
- return fallback({
816
- retry: function retry() {
817
- return _this2.setState({
818
- error: null
819
- });
820
- },
821
- error: error
822
- });
823
- } else if (error.name === 'NotFoundError' && error.message === newAppVersionErrorMessage) {
824
- return React.createElement(RefreshBannerInfo, null);
645
+ var _excluded$4 = ["label", "organisations", "onChange", "selectedOrganisationId"];
646
+ var OrganisationDropDown = function OrganisationDropDown(_ref) {
647
+ var label = _ref.label,
648
+ organisations = _ref.organisations,
649
+ handleChange = _ref.onChange,
650
+ selectedOrganisationId = _ref.selectedOrganisationId,
651
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
652
+ var _useState = useState(),
653
+ selectedOrganisation = _useState[0],
654
+ setSelectedOrganisation = _useState[1];
655
+ useEffect(function () {
656
+ setSelectedOrganisation(organisations.find(function (org) {
657
+ return org.organisationId === selectedOrganisationId;
658
+ }));
659
+ }, [selectedOrganisationId, organisations]);
660
+ return React.createElement(SearchableDropdown, _extends({
661
+ label: label,
662
+ items: [].concat(organisations.sort(function (a, b) {
663
+ return a.tradingName.localeCompare(b.tradingName, "nb");
664
+ }).map(function (organisation) {
665
+ return {
666
+ value: organisation.organisationId,
667
+ label: organisation.tradingName
668
+ };
669
+ })),
670
+ selectedItem: selectedOrganisation ? {
671
+ value: selectedOrganisation.organisationId,
672
+ label: selectedOrganisation.tradingName
673
+ } : null,
674
+ onChange: function onChange(selectedValue) {
675
+ if (selectedValue) {
676
+ handleChange(selectedValue.value);
825
677
  }
826
- return fallback;
827
- }
828
- return children;
829
- };
830
- return ErrorBoundary;
831
- }(Component);
832
- var LANGUAGE_STORAGE_KEY = 'EP::locale';
833
- function RefreshBannerInfo() {
834
- // Taken from ./app-shell/src/storage.ts
835
- var language = localStorage.getItem(LANGUAGE_STORAGE_KEY);
836
- var isNorwegian = language === 'nb' || language === 'nb-NO';
837
- return React.createElement(Box, {
838
- maxWidth: "large"
839
- }, React.createElement(BannerAlertBox, {
840
- variant: "info",
841
- title: isNorwegian ? 'En ny versjon av nettsiden er tilgjengelig.' : 'A new version of the website is available.'
842
- }, React.createElement(Box, {
843
- paddingBottom: "medium"
844
- }, React.createElement(Paragraph, {
845
- margin: "none"
846
- }, isNorwegian ? 'Vennligst oppdater.' : 'Please refresh.')), React.createElement(PrimaryButton, {
847
- onClick: function onClick() {
848
- return window.location.reload();
849
- }
850
- }, isNorwegian ? 'Oppdater' : 'Refresh')));
851
- }
852
-
853
- var _excluded$5 = ["date", "locale", "as", "hideTime"];
854
- var FormatDateTime = function FormatDateTime(_ref) {
855
- var date = _ref.date,
856
- locale = _ref.locale,
857
- _ref$as = _ref.as,
858
- Component = _ref$as === void 0 ? 'main' : _ref$as,
859
- hideTime = _ref.hideTime,
860
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
861
- return React.createElement(Component, _extends({}, rest), hideTime ? localeDate(date, locale) : localeDateTime(date, locale));
678
+ },
679
+ clearable: false
680
+ }, rest));
862
681
  };
863
682
 
864
- var _excluded$4 = ["amount", "as"];
865
- var FormatCurrencyAmount = function FormatCurrencyAmount(_ref) {
866
- var amount = _ref.amount,
867
- _ref$as = _ref.as,
868
- Component = _ref$as === void 0 ? 'span' : _ref$as,
869
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
870
- var parsedAmount = Number(amount) || 0;
871
- var formattedAmount = new Intl.NumberFormat('nb-NO', {
872
- maximumFractionDigits: 2,
873
- minimumFractionDigits: 2
874
- }).format(parsedAmount);
875
- return React.createElement(Component, _extends({}, rest), formattedAmount);
683
+ var Pager = function Pager(_ref) {
684
+ var collectionSize = _ref.collectionSize,
685
+ pageSize = _ref.pageSize,
686
+ _onPageChange = _ref.onPageChange,
687
+ currentPage = _ref.currentPage;
688
+ var pageCount = Math.ceil(collectionSize / pageSize);
689
+ return React.createElement(Pagination, {
690
+ pageCount: pageCount,
691
+ currentPage: currentPage,
692
+ onPageChange: function onPageChange(page) {
693
+ _onPageChange(page);
694
+ }
695
+ });
876
696
  };
877
697
 
878
- var _excluded$3 = ["items", "locale", "className"];
879
- var AuditInfo = function AuditInfo(_ref) {
880
- var items = _ref.items,
881
- locale = _ref.locale,
882
- className = _ref.className,
883
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
884
- var classNames = cx('ep-audit-info', className);
885
- return React.createElement("div", _extends({
886
- className: classNames
887
- }, rest), items.map(function (_ref2, i) {
888
- var label = _ref2.label,
889
- value = _ref2.value;
890
- return React.createElement(Stack, {
891
- space: "small",
892
- key: i
893
- }, React.createElement("div", {
894
- className: "ep-audit-info-label"
895
- }, label), React.createElement("div", null, isDate(value) || isDateString(value) ? React.createElement(FormatDateTime, {
896
- date: value,
897
- locale: locale
898
- }) : React.createElement("span", null, value)));
899
- }));
900
- };
698
+ /**
699
+ * This component changes page title by using helmet and current path. It will translate subpaths, join them with a dash
700
+ * and display it on browser tab.
701
+ *
702
+ * @param Props.pathname - The current path from react-router-dom.useLocation()
703
+ * @param Props.onBreadcrumbLookup - A function that takes a path and returns a i18n translated string or undefined
704
+ * @returns A Helmet component with updated title
705
+ */
706
+ function PageTitle(_ref) {
707
+ var pathname = _ref.pathname,
708
+ onBreadcrumbLookup = _ref.onBreadcrumbLookup;
709
+ var paths = splitUrlPath(pathname);
710
+ var pageTitles = paths.map(function (path) {
711
+ return {
712
+ title: onBreadcrumbLookup(path),
713
+ path: path
714
+ };
715
+ }).filter(function (_ref2) {
716
+ var title = _ref2.title;
717
+ return title !== undefined;
718
+ }).map(function (_ref3) {
719
+ var title = _ref3.title;
720
+ return title;
721
+ }).reverse().join(" | ");
722
+ return React.createElement(Helmet, null, React.createElement("title", null, pageTitles, " | Entur Partner"));
723
+ }
901
724
 
902
- var _excluded$2 = ["isOpen", "children", "message", "size", "buttons", "onConfirm", "messages", "onClose", "onDismiss"];
903
- var ConfirmModal = function ConfirmModal(_ref) {
904
- var _ref$isOpen = _ref.isOpen,
905
- isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
906
- children = _ref.children,
907
- message = _ref.message,
908
- _ref$size = _ref.size,
909
- size = _ref$size === void 0 ? 'medium' : _ref$size,
910
- buttons = _ref.buttons,
911
- onConfirm = _ref.onConfirm,
912
- messages = _ref.messages,
913
- onClose = _ref.onClose,
914
- onDismiss = _ref.onDismiss,
915
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
916
- var childrenToRender = children ? children : message;
917
- var handleDismiss = onClose ? onClose : onDismiss;
918
- return React.createElement(Modal, _extends({
919
- size: size,
920
- open: isOpen,
921
- onDismiss: handleDismiss
922
- }, rest), isString(childrenToRender) ? React.createElement(Paragraph, null, childrenToRender) : React.createElement(Box, {
923
- paddingBottom: "medium"
924
- }, childrenToRender), React.createElement(ButtonGroup, null, onConfirm ? React.createElement(React.Fragment, null, React.createElement(SecondaryButton, {
925
- onClick: handleDismiss,
926
- "data-testid": "cancel-modal-button"
927
- }, messages.cancel), React.createElement(PrimaryButton, {
928
- onClick: onConfirm,
929
- "data-testid": "confirm-modal-button"
930
- }, messages.confirm)) : buttons));
725
+ /**
726
+ * Note: This component uses BusinessCapability, not because we only want to
727
+ * check BusinessCapabilities but because it represents a minimal subset of
728
+ * what we need to check.
729
+ */
730
+ var PermissionCheck = function PermissionCheck(_ref) {
731
+ var children = _ref.children,
732
+ _ref$fallback = _ref.fallback,
733
+ fallback = _ref$fallback === void 0 ? null : _ref$fallback,
734
+ permissions = _ref.permissions,
735
+ _ref$oneOf = _ref.oneOf,
736
+ oneOf = _ref$oneOf === void 0 ? [] : _ref$oneOf,
737
+ _ref$all = _ref.all,
738
+ all = _ref$all === void 0 ? [] : _ref$all;
739
+ var allIsAllowed = hasAllPermissions(all, permissions);
740
+ var oneOfIsAllowed = hasOneOfPermissions(oneOf, permissions);
741
+ var allowed = allIsAllowed && oneOfIsAllowed;
742
+ return React.createElement(React.Fragment, null, allowed ? children : fallback);
931
743
  };
932
744
 
933
- var _excluded$1 = ["children", "shouldBlockNavigation"];
745
+ var _excluded$3 = ["children", "shouldBlockNavigation"];
934
746
  var RouteLeavingGuard = function RouteLeavingGuard(_ref) {
935
747
  var children = _ref.children,
936
748
  shouldBlockNavigation = _ref.shouldBlockNavigation,
937
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
749
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
938
750
  assertIsDefined(useInRouterContext() ? true : undefined, "RouteLeavingGuard must be used within a data router.");
939
751
  var blocker = useBlocker(function (_ref2) {
940
752
  var currentLocation = _ref2.currentLocation,
@@ -943,166 +755,354 @@ var RouteLeavingGuard = function RouteLeavingGuard(_ref) {
943
755
  });
944
756
  return React.createElement(ConfirmModal, _extends({
945
757
  onDismiss: function onDismiss() {
946
- if (blocker.state === 'blocked') {
758
+ if (blocker.state === "blocked") {
947
759
  blocker.reset();
948
760
  }
949
761
  },
950
- open: blocker.state === 'blocked',
762
+ open: blocker.state === "blocked",
951
763
  onConfirm: function onConfirm() {
952
- if (blocker.state === 'blocked') {
764
+ if (blocker.state === "blocked") {
953
765
  blocker.proceed();
954
766
  }
955
767
  }
956
768
  }, rest), children);
957
769
  };
958
770
 
959
- var Pager = function Pager(_ref) {
960
- var collectionSize = _ref.collectionSize,
961
- pageSize = _ref.pageSize,
962
- _onPageChange = _ref.onPageChange,
963
- currentPage = _ref.currentPage;
964
- var pageCount = Math.ceil(collectionSize / pageSize);
965
- return React.createElement(Pagination, {
966
- pageCount: pageCount,
967
- currentPage: currentPage,
968
- onPageChange: function onPageChange(page) {
969
- _onPageChange(page);
970
- }
771
+ var StatusLabel = function StatusLabel(_ref) {
772
+ var _ref$active = _ref.active,
773
+ active = _ref$active === void 0 ? false : _ref$active,
774
+ _ref$label = _ref.label,
775
+ label = _ref$label === void 0 ? "" : _ref$label,
776
+ aggressiveInactive = _ref.aggressiveInactive,
777
+ showBullet = _ref.showBullet,
778
+ center = _ref.center;
779
+ var bulletClassNames = cx("eps-status-label__bullet", {
780
+ active: active,
781
+ aggressive: aggressiveInactive
782
+ });
783
+ var statusLabelClassNames = cx("eps-status-label", {
784
+ center: center
785
+ });
786
+ return React.createElement("div", {
787
+ className: statusLabelClassNames
788
+ }, showBullet && React.createElement("div", {
789
+ className: bulletClassNames
790
+ }), React.createElement("div", null, label));
791
+ };
792
+
793
+ var _excluded$2 = ["as", "children", "fontSize", "color", "lineHeight", "fontWeight", "className"];
794
+ var Text = function Text(_ref) {
795
+ var _ref$as = _ref.as,
796
+ component = _ref$as === void 0 ? "span" : _ref$as,
797
+ children = _ref.children,
798
+ fontSize = _ref.fontSize,
799
+ color = _ref.color,
800
+ lineHeight = _ref.lineHeight,
801
+ fontWeight = _ref.fontWeight,
802
+ className = _ref.className,
803
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
804
+ var classes = [];
805
+ fontSize && classes.push.apply(classes, responsiveProp("eps-font-size-", fontSize));
806
+ lineHeight && classes.push.apply(classes, responsiveProp("eps-line-height-", lineHeight));
807
+ fontWeight && classes.push("eps-font-weight-" + fontWeight);
808
+ var classList = cx(classes, className);
809
+ return React.createElement(Box, _extends({
810
+ as: component,
811
+ color: color,
812
+ className: classList
813
+ }, rest), children);
814
+ };
815
+
816
+ var _excluded$1 = ["children", "className"];
817
+ var Unbutton = function Unbutton(_ref) {
818
+ var children = _ref.children,
819
+ className = _ref.className,
820
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
821
+ return React.createElement(Button, _extends({
822
+ variant: "primary"
823
+ }, rest, {
824
+ className: cx("eps-unbutton", className)
825
+ }), children);
826
+ };
827
+
828
+ var CustomOverflowMenuItem = function CustomOverflowMenuItem(props) {
829
+ return React.createElement("button", _extends({
830
+ className: cx(props.className, "eps-overflow-menu__item"),
831
+ role: "menuitem"
832
+ }, props));
833
+ };
834
+
835
+ var CookieSettingsMenuItem = function CookieSettingsMenuItem(_ref) {
836
+ var name = _ref.name,
837
+ setOpen = _ref.setOpen,
838
+ onCookieSettingsOpen = _ref.onCookieSettingsOpen;
839
+ return React.createElement(CustomOverflowMenuItem, {
840
+ onClick: function onClick() {
841
+ onCookieSettingsOpen();
842
+ setOpen(false);
843
+ },
844
+ className: "eps-overflow-menu__item"
845
+ }, React.createElement("span", {
846
+ "aria-hidden": true
847
+ }, React.createElement(CookieIcon, {
848
+ size: "1rem",
849
+ inline: true
850
+ })), name);
851
+ };
852
+
853
+ function useOutsideClick(ref, buttonRef, handler) {
854
+ React.useEffect(function () {
855
+ var listener = function listener(event) {
856
+ if (elementContainsEventTarget(ref.current, event) || elementContainsEventTarget(buttonRef.current, event)) {
857
+ return;
858
+ }
859
+ handler();
860
+ };
861
+ document.addEventListener("mousedown", listener);
862
+ document.addEventListener("touchstart", listener);
863
+ return function () {
864
+ document.removeEventListener("mousedown", listener);
865
+ document.removeEventListener("touchstart", listener);
866
+ };
867
+ }, [ref, buttonRef, handler]);
868
+ }
869
+ function elementContainsEventTarget(element, event) {
870
+ if (!element) {
871
+ return false;
872
+ }
873
+ if (element.contains(event.target)) {
874
+ return true;
875
+ }
876
+ // For elements inside a Shadow DOM we need to check the composedPath
877
+ if (event.composed && event.composedPath) {
878
+ var contains = event.composedPath().find(function (target) {
879
+ if (target === window) {
880
+ return false;
881
+ }
882
+ return element.contains(target);
883
+ });
884
+ return !!contains;
885
+ }
886
+ return false;
887
+ }
888
+
889
+ var _excluded = ["className", "children", "userName", "open", "onOpenChange", "environment"];
890
+ var CustomOverflowMenu = function CustomOverflowMenu(_ref) {
891
+ var className = _ref.className,
892
+ children = _ref.children,
893
+ userName = _ref.userName,
894
+ open = _ref.open,
895
+ onOpenChange = _ref.onOpenChange,
896
+ environment = _ref.environment,
897
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
898
+ var overflowItemsClasses = cx("eps-overflow-menu__group", {
899
+ "eps-overflow-menu__group--open": open
900
+ });
901
+ var overflowContentRef = React.useRef(null);
902
+ var overflowMenuTriggerRef = React.useRef(null);
903
+ useOutsideClick(overflowContentRef, overflowMenuTriggerRef, function () {
904
+ return onOpenChange(false);
971
905
  });
906
+ return React.createElement("div", null, React.createElement(SecondaryButton, _extends({
907
+ className: cx("eps-overflow-menu__button", className),
908
+ onClick: function onClick() {
909
+ return onOpenChange(!open);
910
+ },
911
+ "aria-haspopup": true,
912
+ "aria-expanded": open,
913
+ ref: overflowMenuTriggerRef
914
+ }, rest), React.createElement("div", {
915
+ className: "eps-overflow-menu__button-contents"
916
+ }, React.createElement("span", {
917
+ className: "eds-overflow-menu__user-icon"
918
+ }, React.createElement(UserIcon, {
919
+ inline: true
920
+ })), React.createElement(Heading6, {
921
+ margin: "none",
922
+ as: "span"
923
+ }, userName, environment !== undefined && environment !== Environment.Production && React.createElement("span", {
924
+ style: {
925
+ color: getColorForEnvironment(environment)
926
+ }
927
+ }, " ", "(", getHumanReadableEnvironment(environment), ")")), React.createElement("span", {
928
+ className: "eps-arrow-icon"
929
+ }, React.createElement(DownArrowIcon, {
930
+ inline: true
931
+ })))), open && React.createElement("div", {
932
+ className: overflowItemsClasses,
933
+ role: "menu",
934
+ ref: overflowContentRef
935
+ }, children));
972
936
  };
973
937
 
974
- var StatusLabel = function StatusLabel(_ref) {
975
- var _ref$active = _ref.active,
976
- active = _ref$active === void 0 ? false : _ref$active,
977
- _ref$label = _ref.label,
978
- label = _ref$label === void 0 ? '' : _ref$label,
979
- aggressiveInactive = _ref.aggressiveInactive,
980
- showBullet = _ref.showBullet,
981
- center = _ref.center;
982
- var bulletClassNames = cx('eps-status-label__bullet', {
983
- active: active,
984
- aggressive: aggressiveInactive
985
- });
986
- var statusLabelClassNames = cx('eps-status-label', {
987
- center: center
988
- });
989
- return React.createElement("div", {
990
- className: statusLabelClassNames
991
- }, showBullet && React.createElement("div", {
992
- className: bulletClassNames
993
- }), React.createElement("div", null, label));
938
+ var LanguageSwitchMenuItem = function LanguageSwitchMenuItem(_ref) {
939
+ var language = _ref.language,
940
+ onLanguageChange = _ref.onLanguageChange,
941
+ setOpen = _ref.setOpen,
942
+ name = _ref.name;
943
+ var useB47LanguageKey = useFeatureToggle("USE_BCP-47_LANGUAGE_KEY");
944
+ var norwegianLanguageKey = useB47LanguageKey ? "nb-NO" : "nb";
945
+ var englishLanguageKey = useB47LanguageKey ? "en-GB" : "en";
946
+ return React.createElement(React.Fragment, null, language === englishLanguageKey ? React.createElement(CustomOverflowMenuItem, {
947
+ onClick: function onClick() {
948
+ onLanguageChange(norwegianLanguageKey);
949
+ setOpen(false);
950
+ },
951
+ className: "eps-overflow-menu__item"
952
+ }, React.createElement("span", {
953
+ "aria-hidden": true,
954
+ className: "eps-overflow-menu__icon-margin"
955
+ }, React.createElement(NorwayIcon, {
956
+ size: "1rem",
957
+ inline: true
958
+ })), name) : React.createElement(CustomOverflowMenuItem, {
959
+ onClick: function onClick() {
960
+ onLanguageChange(englishLanguageKey);
961
+ setOpen(false);
962
+ },
963
+ className: "eps-overflow-menu__item"
964
+ }, React.createElement("span", {
965
+ "aria-hidden": true,
966
+ className: "eps-overflow-menu__icon-margin"
967
+ }, React.createElement(UKIcon, {
968
+ size: "1rem",
969
+ inline: true
970
+ })), name));
994
971
  };
995
972
 
996
- /**
997
- * Note: This component uses BusinessCapability, not because we only want to
998
- * check BusinessCapabilities but because it represents a minimal subset of
999
- * what we need to check.
1000
- */
1001
- var PermissionCheck = function PermissionCheck(_ref) {
1002
- var children = _ref.children,
1003
- _ref$fallback = _ref.fallback,
1004
- fallback = _ref$fallback === void 0 ? null : _ref$fallback,
1005
- permissions = _ref.permissions,
1006
- _ref$oneOf = _ref.oneOf,
1007
- oneOf = _ref$oneOf === void 0 ? [] : _ref$oneOf,
1008
- _ref$all = _ref.all,
1009
- all = _ref$all === void 0 ? [] : _ref$all;
1010
- var allIsAllowed = hasAllPermissions(all, permissions);
1011
- var oneOfIsAllowed = hasOneOfPermissions(oneOf, permissions);
1012
- var allowed = allIsAllowed && oneOfIsAllowed;
1013
- return React.createElement(React.Fragment, null, allowed ? children : fallback);
973
+ var LogOutMenuItem = function LogOutMenuItem(_ref) {
974
+ var name = _ref.name,
975
+ setOpen = _ref.setOpen,
976
+ onLogout = _ref.onLogout;
977
+ return React.createElement(CustomOverflowMenuItem, {
978
+ onClick: function onClick() {
979
+ onLogout();
980
+ setOpen(false);
981
+ },
982
+ "data-testid": "user-menu-logout",
983
+ className: "eps-overflow-menu__item"
984
+ }, React.createElement("span", {
985
+ "aria-hidden": true
986
+ }, React.createElement(LogOutIcon, {
987
+ size: "1rem",
988
+ inline: true
989
+ })), name);
1014
990
  };
1015
991
 
1016
- var Breadcrumbs = function Breadcrumbs(_ref) {
1017
- var prependBreadcrumbItem = _ref.prependBreadcrumbItem,
1018
- pathname = _ref.pathname,
1019
- onBreadcrumbLookup = _ref.onBreadcrumbLookup;
1020
- var paths = splitUrlPath(pathname);
1021
- var breadcrumbs = paths.map(function (path) {
1022
- return {
1023
- title: onBreadcrumbLookup(path),
1024
- path: path
1025
- };
1026
- }).filter(function (_ref2) {
1027
- var title = _ref2.title;
1028
- return title !== undefined;
1029
- });
1030
- var breadcrumbElements = breadcrumbs.map(function (_ref3, i) {
1031
- var title = _ref3.title,
1032
- path = _ref3.path;
1033
- var isLast = i === breadcrumbs.length - 1;
1034
- if (isLast) {
1035
- return React.createElement(BreadcrumbItem, {
1036
- key: path,
1037
- as: 'span'
1038
- }, title);
992
+ var UserMenuItem = function UserMenuItem(_ref) {
993
+ var name = _ref.name,
994
+ setOpen = _ref.setOpen,
995
+ onNavigateToMyProfile = _ref.onNavigateToMyProfile;
996
+ return React.createElement(Link$1, {
997
+ to: "/permission-admin/my-profile",
998
+ style: {
999
+ textDecoration: "none"
1039
1000
  }
1040
- return React.createElement(BreadcrumbItem, {
1041
- key: path,
1042
- as: Link$2,
1043
- to: path
1044
- }, title);
1045
- });
1046
- if (prependBreadcrumbItem) {
1047
- return React.createElement(BreadcrumbNavigation, null, [prependBreadcrumbItem].concat(breadcrumbElements));
1048
- }
1049
- return React.createElement(BreadcrumbNavigation, null, breadcrumbElements);
1001
+ }, React.createElement(CustomOverflowMenuItem, {
1002
+ onClick: function onClick() {
1003
+ setOpen(false);
1004
+ onNavigateToMyProfile();
1005
+ },
1006
+ className: "eps-overflow-menu__item"
1007
+ }, React.createElement("span", {
1008
+ "aria-hidden": true
1009
+ }, React.createElement(UserIcon, {
1010
+ size: "1rem",
1011
+ inline: true
1012
+ })), name));
1050
1013
  };
1051
1014
 
1052
- var Link = function Link(props) {
1053
- return React.createElement(Link$1, _extends({}, props, {
1054
- as: Link$2
1055
- }), props.children);
1015
+ var VersionMenuItem = function VersionMenuItem(_ref) {
1016
+ var title = _ref.title,
1017
+ setOpen = _ref.setOpen;
1018
+ var navigate = useNavigate(); // Hide useNavigate from standalone micro-frontends because it is not under RouterProvider
1019
+ return React.createElement(CustomOverflowMenuItem, {
1020
+ onClick: function onClick() {
1021
+ navigate("/app-version");
1022
+ setOpen(false);
1023
+ },
1024
+ className: "eps-overflow-menu__item"
1025
+ }, React.createElement("span", {
1026
+ "aria-hidden": true
1027
+ }, React.createElement(ChannelsIcon, {
1028
+ className: "eps-version-icon",
1029
+ size: "1rem",
1030
+ inline: true
1031
+ })), title);
1056
1032
  };
1057
1033
 
1058
- var _excluded = ["as", "children", "fontSize", "color", "lineHeight", "fontWeight", "className"];
1059
- var Text = function Text(_ref) {
1060
- var _ref$as = _ref.as,
1061
- component = _ref$as === void 0 ? 'span' : _ref$as,
1062
- children = _ref.children,
1063
- fontSize = _ref.fontSize,
1064
- color = _ref.color,
1065
- lineHeight = _ref.lineHeight,
1066
- fontWeight = _ref.fontWeight,
1067
- className = _ref.className,
1068
- rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1069
- var classes = [];
1070
- fontSize && classes.push.apply(classes, responsiveProp('eps-font-size-', fontSize));
1071
- lineHeight && classes.push.apply(classes, responsiveProp('eps-line-height-', lineHeight));
1072
- fontWeight && classes.push('eps-font-weight-' + fontWeight);
1073
- var classList = cx(classes, className);
1074
- return React.createElement(Box, _extends({
1075
- as: component,
1076
- color: color,
1077
- className: classList
1078
- }, rest), children);
1034
+ var UserMenu = function UserMenu(_ref) {
1035
+ var className = _ref.className,
1036
+ messages = _ref.messages,
1037
+ onLogout = _ref.onLogout,
1038
+ onLanguageChange = _ref.onLanguageChange,
1039
+ userName = _ref.userName,
1040
+ language = _ref.language,
1041
+ environment = _ref.environment,
1042
+ showVersionItem = _ref.showVersionItem,
1043
+ showMyProfileItem = _ref.showMyProfileItem,
1044
+ showCookieSettingsItem = _ref.showCookieSettingsItem,
1045
+ onNavigateToMyProfile = _ref.onNavigateToMyProfile,
1046
+ _ref$onCookieSettings = _ref.onCookieSettingsOpen,
1047
+ onCookieSettingsOpen = _ref$onCookieSettings === void 0 ? function () {} : _ref$onCookieSettings;
1048
+ var triggerClassList = cx(["eps-user-menu__trigger-button", className]);
1049
+ var _useState = useState(false),
1050
+ open = _useState[0],
1051
+ setOpen = _useState[1];
1052
+ return React.createElement("div", {
1053
+ id: "eps-user-menu"
1054
+ }, React.createElement(CustomOverflowMenu, {
1055
+ open: open,
1056
+ onOpenChange: setOpen,
1057
+ className: triggerClassList,
1058
+ userName: userName,
1059
+ environment: environment
1060
+ }, React.createElement("div", {
1061
+ id: "eps-overflow-menu"
1062
+ }, React.createElement(LanguageSwitchMenuItem, {
1063
+ name: messages.switchLanguage,
1064
+ language: language,
1065
+ onLanguageChange: onLanguageChange,
1066
+ setOpen: setOpen
1067
+ }), showVersionItem && messages.appVersion && React.createElement(VersionMenuItem, {
1068
+ title: messages.appVersion,
1069
+ setOpen: setOpen
1070
+ }), showMyProfileItem && messages.myProfile && React.createElement(UserMenuItem, {
1071
+ name: messages.myProfile,
1072
+ setOpen: setOpen,
1073
+ onNavigateToMyProfile: onNavigateToMyProfile
1074
+ }), showCookieSettingsItem && messages.cookieSettings && React.createElement(CookieSettingsMenuItem, {
1075
+ name: messages.cookieSettings,
1076
+ setOpen: setOpen,
1077
+ onCookieSettingsOpen: onCookieSettingsOpen
1078
+ }), React.createElement(LogOutMenuItem, {
1079
+ name: messages.logout,
1080
+ setOpen: setOpen,
1081
+ onLogout: onLogout
1082
+ }))));
1079
1083
  };
1080
1084
 
1081
- /**
1082
- * This component changes page title by using helmet and current path. It will translate subpaths, join them with a dash
1083
- * and display it on browser tab.
1084
- *
1085
- * @param Props.pathname - The current path from react-router-dom.useLocation()
1086
- * @param Props.onBreadcrumbLookup - A function that takes a path and returns a i18n translated string or undefined
1087
- * @returns A Helmet component with updated title
1088
- */
1089
- function PageTitle(_ref) {
1090
- var pathname = _ref.pathname,
1091
- onBreadcrumbLookup = _ref.onBreadcrumbLookup;
1092
- var paths = splitUrlPath(pathname);
1093
- var pageTitles = paths.map(function (path) {
1094
- return {
1095
- title: onBreadcrumbLookup(path),
1096
- path: path
1085
+ /*global EventListener WindowEventHandlers*/
1086
+ function useEventListener(eventName, handler, element) {
1087
+ if (element === void 0) {
1088
+ element = window;
1089
+ }
1090
+ var savedHandler = useRef();
1091
+ useEffect(function () {
1092
+ savedHandler.current = handler;
1093
+ }, [handler]);
1094
+ useEffect(function () {
1095
+ var _element;
1096
+ var isSupported = (_element = element) == null ? void 0 : _element.addEventListener;
1097
+ if (!isSupported) return;
1098
+ var eventListener = function eventListener(event) {
1099
+ return savedHandler.current == null ? void 0 : savedHandler.current(event);
1097
1100
  };
1098
- }).filter(function (_ref2) {
1099
- var title = _ref2.title;
1100
- return title !== undefined;
1101
- }).map(function (_ref3) {
1102
- var title = _ref3.title;
1103
- return title;
1104
- }).reverse().join(' | ');
1105
- return React.createElement(Helmet, null, React.createElement("title", null, pageTitles, " | Entur Partner"));
1101
+ element.addEventListener(eventName, eventListener);
1102
+ return function () {
1103
+ element.removeEventListener(eventName, eventListener);
1104
+ };
1105
+ }, [eventName, element]);
1106
1106
  }
1107
1107
 
1108
1108
  export { ActionBar, ActionBarLeft, ActionBarRight, AuditInfo, Box, Breadcrumbs, ConfirmModal, Content, EnturPartnerLogo, EnturPartnerLogoSvg, Environment, ErrorBoundary, ExpandableMultiLanguageInput, FeatureToggle, FormatCurrencyAmount, FormatDateTime, LanguageSelect, Link, LinkButton, Menu, MultiLanguageInput, OrganisationDropDown, PageTitle, Pager, PermissionCheck, RouteLeavingGuard, Stack, StatusLabel, Text, Unbutton, UserMenu, featureFlag, getColorForEnvironment, getHumanReadableEnvironment, responsiveProp, useEventListener, useFeatureToggle };