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