@opengeoweb/shared 9.16.0 → 9.18.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 (39) hide show
  1. package/README.md +0 -15
  2. package/index.esm.js +1108 -631
  3. package/package.json +4 -2
  4. package/src/index.d.ts +3 -0
  5. package/src/lib/components/AlertBanner/AlertBanner.stories.d.ts +2 -2
  6. package/src/lib/components/AppHeader/AppHeader.stories.d.ts +2 -2
  7. package/src/lib/components/Avatar/Avatar.stories.d.ts +2 -2
  8. package/src/lib/components/ConfirmationDialog/ConfirmationDialog.stories.d.ts +2 -2
  9. package/src/lib/components/CustomAccordion/CustomAccordion.stories.d.ts +2 -2
  10. package/src/lib/components/CustomDialog/CustomDialog.stories.d.ts +2 -2
  11. package/src/lib/components/CustomIconButton/CustomIconButton.stories.d.ts +2 -2
  12. package/src/lib/components/CustomSlider/CustomSlider.stories.d.ts +2 -2
  13. package/src/lib/components/CustomToggleButton/CustomToggleButton.stories.d.ts +2 -2
  14. package/src/lib/components/ErrorBoundary/ErrorBoundary.d.ts +5 -0
  15. package/src/lib/components/LastUpdateTime/LastUpdateTime.d.ts +2 -2
  16. package/src/lib/components/LastUpdateTime/LastUpdateTime.stories.d.ts +2 -2
  17. package/src/lib/components/LastUpdateTime/index.d.ts +1 -1
  18. package/src/lib/components/Providers/Providers.d.ts +6 -0
  19. package/src/lib/components/SearchHighlight/SearchHighlight.stories.d.ts +2 -2
  20. package/src/lib/components/StatusTag/StatusTag.stories.d.ts +2 -2
  21. package/src/lib/components/ToggleMenu/ToggleMenu.stories.d.ts +2 -2
  22. package/src/lib/components/ToolContainer/ToolContainerSnapShots.stories.d.ts +4 -4
  23. package/src/lib/components/TooltipSelect/TooltipSelect.stories.d.ts +2 -2
  24. package/src/lib/components/UserMenu/CheatSheet/CheatSheet.stories.d.ts +4 -4
  25. package/src/lib/components/UserMenu/CheatSheet/ShortcutList.d.ts +2 -10
  26. package/src/lib/components/UserMenu/UserMenu.d.ts +1 -0
  27. package/src/lib/components/UserMenu/UserMenu.stories.d.ts +4 -4
  28. package/src/lib/components/UserMenu/UserMenuSentryRecording.d.ts +7 -0
  29. package/src/lib/components/UserMenu/index.d.ts +1 -0
  30. package/src/lib/types/types.d.ts +2 -0
  31. package/src/lib/utils/dateUtils/dateFormats.d.ts +6 -0
  32. package/src/lib/utils/dateUtils/dateUtils.d.ts +15 -2
  33. package/src/lib/utils/dateUtils/index.d.ts +1 -0
  34. package/src/lib/utils/i18n.d.ts +3 -0
  35. package/src/lib/utils/index.d.ts +0 -1
  36. package/src/lib/storyshots/Storyshots.spec.d.ts +0 -1
  37. package/src/lib/utils/translationUtils/index.d.ts +0 -1
  38. package/src/lib/utils/translationUtils/translationUtils.d.ts +0 -7
  39. package/src/lib/utils/translationUtils/translationUtils.spec.d.ts +0 -1
package/index.esm.js CHANGED
@@ -1,16 +1,225 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { useRef, Component } from 'react';
3
- import { Box, Typography, Tooltip, IconButton, Dialog, DialogTitle, DialogContent, DialogActions, Button, CircularProgress, Alert, AlertTitle, useTheme, Drawer, Link, Avatar as Avatar$1, Paper, ClickAwayListener, MenuList, MenuItem, Grid, RadioGroup, FormControlLabel, Radio, List, ListItem, Tabs, Tab, Backdrop, Slider, ToggleButton, Menu, ListSubheader, ListItemText, ListItemIcon, Select, Accordion, AccordionSummary, AccordionDetails, FormLabel, Switch, TextField, InputAdornment } from '@mui/material';
4
- import { Close, Exclamation, Success, Info, ChevronRight, GeoWebLogo, HamburgerMenu, Resize, useThemeContext, DragHandle, ArrowLeft, ArrowRight, KeyOption, ArrowUp, ArrowDown, KeyCommand, Options, ChevronDown, Search, Clear, Cached } from '@opengeoweb/theme';
3
+ import { Box, Typography, Tooltip, IconButton, Dialog, DialogTitle, DialogContent, DialogActions, Button, CircularProgress, Alert, AlertTitle, useTheme, Drawer, Link, Avatar as Avatar$1, Paper, ClickAwayListener, MenuList, MenuItem, Grid, RadioGroup, FormControlLabel, Radio, List, ListItem, Tabs, Tab, Backdrop, Switch, Slider, ToggleButton, Menu, ListSubheader, ListItemText, ListItemIcon, Select, Accordion, AccordionSummary, AccordionDetails, FormLabel, TextField, InputAdornment } from '@mui/material';
4
+ import { Close, Exclamation, Success, Info, ChevronRight, GeoWebLogo, HamburgerMenu, Resize, Admin, useThemeContext, DragHandle, ArrowLeft, ArrowRight, KeyOption, ArrowUp, ArrowDown, KeyCommand, Options, ChevronDown, Search, Clear, Cached } from '@opengeoweb/theme';
5
+ import i18n from 'i18next';
6
+ import { initReactI18next, useTranslation } from 'react-i18next';
5
7
  import { throttle, escapeRegExp, debounce } from 'lodash';
6
8
  import Draggable from 'react-draggable';
7
9
  import { Resizable } from 're-resizable';
10
+ import * as Sentry from '@sentry/react';
8
11
  import { styled } from '@mui/material/styles';
9
12
  import { useStore } from 'react-redux';
10
- import { parseISO, parse, format, isEqual, add as add$1, sub as sub$1, differenceInYears as differenceInYears$1, differenceInMonths as differenceInMonths$1, differenceInDays as differenceInDays$1, differenceInMinutes as differenceInMinutes$1, differenceInHours as differenceInHours$1, differenceInSeconds as differenceInSeconds$1, isBefore as isBefore$1, isAfter as isAfter$1, isValid as isValid$1, getUnixTime, fromUnixTime, set as set$3, getHours as getHours$1, startOfDay, isWithinInterval, getDay, getMonth, getYear, getWeek } from 'date-fns';
13
+ import { parseISO, parse, format, isEqual, add as add$1, sub as sub$1, differenceInYears as differenceInYears$1, differenceInMonths as differenceInMonths$1, differenceInDays as differenceInDays$1, differenceInMinutes as differenceInMinutes$1, differenceInHours as differenceInHours$1, differenceInSeconds as differenceInSeconds$1, isBefore as isBefore$1, isAfter as isAfter$1, isValid as isValid$1, getUnixTime, fromUnixTime, set as set$3, getHours as getHours$1, startOfDay, addMinutes, addHours, isWithinInterval, getDayOfYear, getDay, getMonth, getYear, getWeek } from 'date-fns';
11
14
  import configureStore from 'redux-mock-store';
12
15
  import { configureStore as configureStore$1 } from '@reduxjs/toolkit';
13
- import i18next from 'i18next';
16
+
17
+ var en = {
18
+ "shared-choose-app-mode": "Choose your default app mode",
19
+ "shared-cheat-sheet": "Cheat sheet",
20
+ "shared-save": "Save",
21
+ "shared-viewer": "Viewer",
22
+ "shared-editor": "Editor",
23
+ "shared-reload-page": "Reload page",
24
+ "shared-search-label": "Search through services or enter a service URL",
25
+ "shared-last-updated": "Last updated {{time}}",
26
+ "shared-click-to-refresh": "Click to refresh",
27
+ "shared-error-occurred": "Woops, an error has occurred. Please report the error shown below and reload the page if needed.",
28
+ "shared-confirmation-description": "Are you sure?",
29
+ "shared-confirmation-cancel": "Go back",
30
+ "shared-confirmation-submit": "Submit",
31
+ "shared-close-caps": "CLOSE",
32
+ "shared-close": "Close",
33
+ "shared-search": "Search",
34
+ "shared-choose-selected-time": "Choose a selected time",
35
+ "shared-move-selected-time": "Move backwards/forwards in selected time",
36
+ "shared-move-one-step": "Move 1 step backwards/forwards in selected time",
37
+ "shared-toggle-timeslider": "Toggle hide/show time slider",
38
+ "shared-timeslider-scale": "Change time slider scale (visible timespan)",
39
+ "shared-expand-timeslider-scale": "Expand/shrink time slider scale (visible timespan)",
40
+ "shared-mouseover-selected-time": "Mouseover to change selected time",
41
+ "shared-mouseover-on-off": "Mouseover switch on/off",
42
+ "shared-change-timestep-or-speed": "Change time step or animation speed",
43
+ "shared-return-to-current-time": "Return to current time",
44
+ "shared-change-layer-values-scrolling": "Change layer manager values by scrolling",
45
+ "shared-change-layermanager-small": "Change size of layer manager to small",
46
+ "shared-change-layermanager-medium": "Change size of layer manager to medium",
47
+ "shared-change-layermanager-large": "Change size of layer manager to large",
48
+ "shared-shortcut-left-click": "Left click on the time slider rail",
49
+ "shared-shortcut-mouse-scroll-timeslider": "Mouse scroll over the time slider rail",
50
+ "shared-shortcut-hold-click": "Hold left click over Time Slider legend + drag left or right",
51
+ "shared-shortcut-scroll": "+ Scroll the slider rail",
52
+ "shared-shortcut-hover": "Hover over Time Slider rail or time indicator",
53
+ "shared-shortcut-when-active": "when slider active",
54
+ "shared-shortcut-home": "Home",
55
+ "shared-shortcut-mouse-scroll": "+ Mouse scroll",
56
+ "shared-shortcut-or": "or",
57
+ "shared-sentry-recording": "Sentry Recording",
58
+ "shared-sentry-information": "For monitoring performance and errors, GeoWeb is logging usage information. In this process, no sensitive user information will leave the browser.",
59
+ "shared-sentry-enable-message": "By enabling recording I understand that the recording related data will be send to Sentry´s servers for processing.",
60
+ "shared-sentry-disable": "Disable HTML recording",
61
+ "shared-sentry-enable": "Enable HTML recording",
62
+ "shared-sentry-enable-both": "Disable HTML + Canvas recording",
63
+ "shared-sentry-disable-both": "Enable HTML + Canvas recording",
64
+ "shared-sentry-cors-wait": "Disabled untill with and without CORS headers fetching mechanism has been implemented",
65
+ "shared-sentry-disclaimer": "I understand that while using canvas recording, adding a layer without correct CORS headers will cause error and make the recording to fail. A new recording without the canvas or the layer can be made after reloading the application."
66
+ };
67
+ var fi = {
68
+ "shared-choose-app-mode": "ei käännetty",
69
+ "shared-cheat-sheet": "ei käännetty",
70
+ "shared-save": "ei käännetty",
71
+ "shared-viewer": "ei käännetty",
72
+ "shared-editor": "ei käännetty",
73
+ "shared-reload-page": "ei käännetty",
74
+ "shared-search-label": "ei käännetty",
75
+ "shared-last-updated": "ei käännetty",
76
+ "shared-click-to-refresh": "ei käännetty",
77
+ "shared-error-occurred": "ei käännetty",
78
+ "shared-confirmation-description": "ei käännetty",
79
+ "shared-confirmation-cancel": "ei käännetty",
80
+ "shared-confirmation-submit": "ei käännetty",
81
+ "shared-close-caps": "ei käännetty",
82
+ "shared-close": "ei käännetty",
83
+ "shared-search": "ei käännetty",
84
+ "shared-choose-selected-time": "ei käännetty",
85
+ "shared-move-selected-time": "ei käännetty",
86
+ "shared-move-one-step": "ei käännetty",
87
+ "shared-toggle-timeslider": "ei käännetty",
88
+ "shared-timeslider-scale": "ei käännetty",
89
+ "shared-expand-timeslider-scale": "ei käännetty",
90
+ "shared-mouseover-selected-time": "ei käännetty",
91
+ "shared-mouseover-on-off": "ei käännetty",
92
+ "shared-change-timestep-or-speed": "ei käännetty",
93
+ "shared-return-to-current-time": "ei käännettye",
94
+ "shared-change-layer-values-scrolling": "ei käännetty",
95
+ "shared-change-layermanager-small": "ei käännetty",
96
+ "shared-change-layermanager-medium": "ei käännetty",
97
+ "shared-change-layermanager-large": "ei käännetty",
98
+ "shared-shortcut-left-click": "ei käännetty",
99
+ "shared-shortcut-mouse-scroll-timeslider": "ei käännetty",
100
+ "shared-shortcut-hold-click": "ei käännetty",
101
+ "shared-shortcut-scroll": "ei käännetty",
102
+ "shared-shortcut-hover": "ei käännetty",
103
+ "shared-shortcut-when-active": "ei käännetty",
104
+ "shared-shortcut-home": "ei käännetty",
105
+ "shared-shortcut-mouse-scroll": "ei käännetty",
106
+ "shared-shortcut-or": "ei käännetty",
107
+ "shared-sentry-recording": "ei käännetty",
108
+ "shared-sentry-information": "ei käännetty",
109
+ "shared-sentry-enable-message": "ei käännetty",
110
+ "shared-sentry-disable": "ei käännetty",
111
+ "shared-sentry-enable": "ei käännetty",
112
+ "shared-sentry-enable-both": "ei käännetty",
113
+ "shared-sentry-disable-both": "ei käännetty",
114
+ "shared-sentry-cors-wait": "ei käännetty",
115
+ "shared-sentry-disclaimer": "ei käännetty"
116
+ };
117
+ var no = {
118
+ "shared-choose-app-mode": "Velg din standardmodus",
119
+ "shared-cheat-sheet": "Jukselapp",
120
+ "shared-save": "Lagre",
121
+ "shared-viewer": "Viewer",
122
+ "shared-editor": "Editor",
123
+ "shared-reload-page": "Last inn på nytt",
124
+ "shared-search-label": "Søk gjennom tjenester eller legg inn URL",
125
+ "shared-last-updated": "Sist oppdatert",
126
+ "shared-click-to-refresh": "Trykk for å laste inn på nytt",
127
+ "shared-error-occurred": "Woops, an error has occurred. Please report the error shown below and reload the page if needed.",
128
+ "shared-confirmation-description": "Er du sikker?",
129
+ "shared-confirmation-cancel": "Avbryt",
130
+ "shared-confirmation-submit": "Send",
131
+ "shared-close-caps": "LUKK",
132
+ "shared-close": "Lukk",
133
+ "shared-search": "Søk",
134
+ "shared-choose-selected-time": "Velg en tid",
135
+ "shared-move-selected-time": "Gå bakover/fremover i valgt tid",
136
+ "shared-move-one-step": "Gå 1 steg bakover/fremover i valgt tid",
137
+ "shared-toggle-timeslider": "Vis/skjul tidslinje",
138
+ "shared-timeslider-scale": "Endre tidsseriens skala (synlig tidsperiode)",
139
+ "shared-expand-timeslider-scale": "Utvid/krymp tidsseriens skala (synlig tidsperiode)",
140
+ "shared-mouseover-selected-time": "Mouseover for å endre valgt tid",
141
+ "shared-mouseover-on-off": "Mouseover av/på",
142
+ "shared-change-timestep-or-speed": "Endre tidssteg eller animasjonsfart",
143
+ "shared-return-to-current-time": "Tilbake til nåtid",
144
+ "shared-change-layer-values-scrolling": "Endre lagmenyens verdier ved å skrolle",
145
+ "shared-change-layermanager-small": "Endre lagmenyens størrelse til liten",
146
+ "shared-change-layermanager-medium": "Endre lagmenyens størrelse til medium",
147
+ "shared-change-layermanager-large": "Endre lagmenyens størrelse til stor",
148
+ "shared-shortcut-left-click": "Venstreklikk på tidsserien",
149
+ "shared-shortcut-mouse-scroll-timeslider": "Skroll over tidsserien",
150
+ "shared-shortcut-hold-click": "Trykk og hold tidslinjens legend + dra venstre eller høyre",
151
+ "shared-shortcut-scroll": "+ skroll i tidsserien",
152
+ "shared-shortcut-hover": "Svev over tidsserien eller tidsindikatoren",
153
+ "shared-shortcut-when-active": "når tidsserien er aktiv",
154
+ "shared-shortcut-home": "Hjem",
155
+ "shared-shortcut-mouse-scroll": "+ skroll",
156
+ "shared-shortcut-or": "eller",
157
+ "shared-sentry-recording": "Skjermopptak av Sentry",
158
+ "shared-sentry-information": "GeoWeb tar opp brukerinformasjon for å monitorere ytelse og feilmeldinger. Underveis vil ingen sensitiv brukerinformasjon forlate nettleser.",
159
+ "shared-sentry-enable-message": "Ved å bruke skjermopptak forstår jeg at opptaksdata vil bli sendt til Sentry for analysering",
160
+ "shared-sentry-disable": "Skru av HTML-opptak",
161
+ "shared-sentry-enable": "Skru på HTML-opptak",
162
+ "shared-sentry-enable-both": "Skru av HTML + lerret-opptak",
163
+ "shared-sentry-disable-both": "Skru på HTML + lerret-opptak",
164
+ "shared-sentry-cors-wait": "Avskrudd inntil CORS-relaterte headere er implementert",
165
+ "shared-sentry-disclaimer": "Jeg forstår at ved å bruke lerretopptak vil opptaket feile dersom jeg legger til et lag uten riktig CORS-headere. Ved å laste inn applikasjonen på nytt kan man starte nytt opptak uten lerret eller lag."
166
+ };
167
+ var nl = {
168
+ "shared-choose-app-mode": "niet vertaald",
169
+ "shared-cheat-sheet": "niet vertaald",
170
+ "shared-save": "niet vertaald",
171
+ "shared-viewer": "niet vertaald",
172
+ "shared-editor": "niet vertaald",
173
+ "shared-reload-page": "niet vertaald",
174
+ "shared-search-label": "niet vertaald",
175
+ "shared-last-updated": "niet vertaald",
176
+ "shared-click-to-refresh": "niet vertaald",
177
+ "shared-error-occurred": "niet vertaald",
178
+ "shared-confirmation-description": "niet vertaald",
179
+ "shared-confirmation-cancel": "niet vertaald",
180
+ "shared-confirmation-submit": "niet vertaald",
181
+ "shared-close-caps": "niet vertaald",
182
+ "shared-close": "niet vertaald",
183
+ "shared-search": "niet vertaald",
184
+ "shared-choose-selected-time": "niet vertaald",
185
+ "shared-move-selected-time": "niet vertaald",
186
+ "shared-move-one-step": "niet vertaald",
187
+ "shared-toggle-timeslider": "niet vertaald",
188
+ "shared-timeslider-scale": "niet vertaald",
189
+ "shared-expand-timeslider-scale": "niet vertaald",
190
+ "shared-mouseover-selected-time": "niet vertaald",
191
+ "shared-mouseover-on-off": "niet vertaald",
192
+ "shared-change-timestep-or-speed": "niet vertaald",
193
+ "shared-return-to-current-time": "niet vertaald",
194
+ "shared-change-layer-values-scrolling": "niet vertaald",
195
+ "shared-change-layermanager-small": "niet vertaald",
196
+ "shared-change-layermanager-medium": "niet vertaald",
197
+ "shared-change-layermanager-large": "niet vertaald",
198
+ "shared-shortcut-left-click": "niet vertaald",
199
+ "shared-shortcut-mouse-scroll-timeslider": "niet vertaald",
200
+ "shared-shortcut-hold-click": "niet vertaald",
201
+ "shared-shortcut-scroll": "niet vertaald",
202
+ "shared-shortcut-hover": "niet vertaald",
203
+ "shared-shortcut-when-active": "niet vertaald",
204
+ "shared-shortcut-home": "niet vertaald",
205
+ "shared-shortcut-mouse-scroll": "niet vertaald",
206
+ "shared-shortcut-or": "niet vertaald",
207
+ "shared-sentry-recording": "niet vertaald",
208
+ "shared-sentry-information": "niet vertaald",
209
+ "shared-sentry-enable-message": "niet vertaald",
210
+ "shared-sentry-disable": "niet vertaald",
211
+ "shared-sentry-enable": "niet vertaald",
212
+ "shared-sentry-enable-both": "niet vertaald",
213
+ "shared-sentry-disable-both": "niet vertaald",
214
+ "shared-sentry-cors-wait": "niet vertaald",
215
+ "shared-sentry-disclaimer": "niet vertaald"
216
+ };
217
+ var sharedTranslations = {
218
+ en: en,
219
+ fi: fi,
220
+ no: no,
221
+ nl: nl
222
+ };
14
223
 
15
224
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
16
225
 
@@ -1110,6 +1319,16 @@ function __rest(s, e) {
1110
1319
  return t;
1111
1320
  }
1112
1321
 
1322
+ function __awaiter(thisArg, _arguments, P, generator) {
1323
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1324
+ return new (P || (P = Promise))(function (resolve, reject) {
1325
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1326
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1327
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1328
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
1329
+ });
1330
+ }
1331
+
1113
1332
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
1114
1333
  var e = new Error(message);
1115
1334
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -1958,6 +2177,34 @@ const CustomDialog = _a => {
1958
2177
  }, actions));
1959
2178
  };
1960
2179
 
2180
+ const SHARED_NAMESPACE = 'shared';
2181
+ const initSharedI18n = () => {
2182
+ i18n.use(initReactI18next).init({
2183
+ lng: 'en',
2184
+ ns: SHARED_NAMESPACE,
2185
+ interpolation: {
2186
+ escapeValue: false
2187
+ },
2188
+ resources: {
2189
+ en: {
2190
+ shared: sharedTranslations.en
2191
+ },
2192
+ fi: {
2193
+ shared: sharedTranslations.fi
2194
+ },
2195
+ no: {
2196
+ shared: sharedTranslations.no
2197
+ },
2198
+ nl: {
2199
+ shared: sharedTranslations.nl
2200
+ }
2201
+ }
2202
+ });
2203
+ };
2204
+ const translateKeyOutsideComponents = (key, params = undefined) => i18n.t(key, Object.assign({
2205
+ ns: SHARED_NAMESPACE
2206
+ }, params));
2207
+
1961
2208
  const confirmStyle = {
1962
2209
  width: {
1963
2210
  xs: '100%',
@@ -1976,9 +2223,9 @@ const ConfirmationDialog = _a => {
1976
2223
  var {
1977
2224
  open,
1978
2225
  title,
1979
- description = 'Are you sure?',
1980
- confirmLabel = 'Submit',
1981
- cancelLabel = 'Go back',
2226
+ description = translateKeyOutsideComponents('shared-confirmation-description'),
2227
+ confirmLabel = translateKeyOutsideComponents('shared-confirmation-submit'),
2228
+ cancelLabel = translateKeyOutsideComponents('shared-confirmation-cancel'),
1982
2229
  onSubmit,
1983
2230
  onClose,
1984
2231
  content = null,
@@ -3474,6 +3721,9 @@ const AlertBanner = ({
3474
3721
  actionButtonProps: _actionButtonProps = undefined
3475
3722
  }) => {
3476
3723
  const [isOpen, setIsOpen] = React.useState(true);
3724
+ const {
3725
+ t
3726
+ } = useTranslation(SHARED_NAMESPACE);
3477
3727
  if (!isOpen) {
3478
3728
  return null;
3479
3729
  }
@@ -3489,7 +3739,7 @@ const AlertBanner = ({
3489
3739
  sx: {
3490
3740
  backgroundColor: 'transparent!important'
3491
3741
  }
3492
- }, "CLOSE")) : undefined,
3742
+ }, t('shared-close-caps'))) : undefined,
3493
3743
  sx: _isCompact ? {
3494
3744
  height: '32px',
3495
3745
  boxSizing: 'border-box',
@@ -3981,6 +4231,215 @@ const ResizeComponent = _a => {
3981
4231
  }, props), children);
3982
4232
  };
3983
4233
 
4234
+ var defineProperty = objectDefineProperty.f;
4235
+
4236
+ var proxyAccessor$2 = function (Target, Source, key) {
4237
+ key in Target || defineProperty(Target, key, {
4238
+ configurable: true,
4239
+ get: function () { return Source[key]; },
4240
+ set: function (it) { Source[key] = it; }
4241
+ });
4242
+ };
4243
+
4244
+ var isCallable$2 = isCallable$n;
4245
+ var isObject$2 = isObject$e;
4246
+ var setPrototypeOf$1 = objectSetPrototypeOf;
4247
+
4248
+ // makes subclassing work correct for wrapped built-ins
4249
+ var inheritIfRequired$2 = function ($this, dummy, Wrapper) {
4250
+ var NewTarget, NewTargetPrototype;
4251
+ if (
4252
+ // it can work only with native `setPrototypeOf`
4253
+ setPrototypeOf$1 &&
4254
+ // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
4255
+ isCallable$2(NewTarget = dummy.constructor) &&
4256
+ NewTarget !== Wrapper &&
4257
+ isObject$2(NewTargetPrototype = NewTarget.prototype) &&
4258
+ NewTargetPrototype !== Wrapper.prototype
4259
+ ) setPrototypeOf$1($this, NewTargetPrototype);
4260
+ return $this;
4261
+ };
4262
+
4263
+ var toString$8 = toString$c;
4264
+
4265
+ var normalizeStringArgument$1 = function (argument, $default) {
4266
+ return argument === undefined ? arguments.length < 2 ? '' : $default : toString$8(argument);
4267
+ };
4268
+
4269
+ var isObject$1 = isObject$e;
4270
+ var createNonEnumerableProperty$4 = createNonEnumerableProperty$9;
4271
+
4272
+ // `InstallErrorCause` abstract operation
4273
+ // https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause
4274
+ var installErrorCause$1 = function (O, options) {
4275
+ if (isObject$1(options) && 'cause' in options) {
4276
+ createNonEnumerableProperty$4(O, 'cause', options.cause);
4277
+ }
4278
+ };
4279
+
4280
+ var uncurryThis$6 = functionUncurryThis;
4281
+
4282
+ var $Error = Error;
4283
+ var replace$2 = uncurryThis$6(''.replace);
4284
+
4285
+ var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');
4286
+ // eslint-disable-next-line redos/no-vulnerable -- safe
4287
+ var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
4288
+ var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
4289
+
4290
+ var errorStackClear = function (stack, dropEntries) {
4291
+ if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
4292
+ while (dropEntries--) stack = replace$2(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
4293
+ } return stack;
4294
+ };
4295
+
4296
+ var fails$9 = fails$o;
4297
+ var createPropertyDescriptor = createPropertyDescriptor$4;
4298
+
4299
+ var errorStackInstallable = !fails$9(function () {
4300
+ var error = new Error('a');
4301
+ if (!('stack' in error)) return true;
4302
+ // eslint-disable-next-line es/no-object-defineproperty -- safe
4303
+ Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
4304
+ return error.stack !== 7;
4305
+ });
4306
+
4307
+ var createNonEnumerableProperty$3 = createNonEnumerableProperty$9;
4308
+ var clearErrorStack = errorStackClear;
4309
+ var ERROR_STACK_INSTALLABLE = errorStackInstallable;
4310
+
4311
+ // non-standard V8
4312
+ var captureStackTrace = Error.captureStackTrace;
4313
+
4314
+ var errorStackInstall = function (error, C, stack, dropEntries) {
4315
+ if (ERROR_STACK_INSTALLABLE) {
4316
+ if (captureStackTrace) captureStackTrace(error, C);
4317
+ else createNonEnumerableProperty$3(error, 'stack', clearErrorStack(stack, dropEntries));
4318
+ }
4319
+ };
4320
+
4321
+ var getBuiltIn = getBuiltIn$8;
4322
+ var hasOwn$2 = hasOwnProperty_1;
4323
+ var createNonEnumerableProperty$2 = createNonEnumerableProperty$9;
4324
+ var isPrototypeOf$2 = objectIsPrototypeOf;
4325
+ var setPrototypeOf = objectSetPrototypeOf;
4326
+ var copyConstructorProperties = copyConstructorProperties$3;
4327
+ var proxyAccessor$1 = proxyAccessor$2;
4328
+ var inheritIfRequired$1 = inheritIfRequired$2;
4329
+ var normalizeStringArgument = normalizeStringArgument$1;
4330
+ var installErrorCause = installErrorCause$1;
4331
+ var installErrorStack = errorStackInstall;
4332
+ var DESCRIPTORS$2 = descriptors;
4333
+
4334
+ var wrapErrorConstructorWithCause$1 = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
4335
+ var STACK_TRACE_LIMIT = 'stackTraceLimit';
4336
+ var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
4337
+ var path = FULL_NAME.split('.');
4338
+ var ERROR_NAME = path[path.length - 1];
4339
+ var OriginalError = getBuiltIn.apply(null, path);
4340
+
4341
+ if (!OriginalError) return;
4342
+
4343
+ var OriginalErrorPrototype = OriginalError.prototype;
4344
+
4345
+ // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006
4346
+ if (hasOwn$2(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;
4347
+
4348
+ if (!FORCED) return OriginalError;
4349
+
4350
+ var BaseError = getBuiltIn('Error');
4351
+
4352
+ var WrappedError = wrapper(function (a, b) {
4353
+ var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);
4354
+ var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
4355
+ if (message !== undefined) createNonEnumerableProperty$2(result, 'message', message);
4356
+ installErrorStack(result, WrappedError, result.stack, 2);
4357
+ if (this && isPrototypeOf$2(OriginalErrorPrototype, this)) inheritIfRequired$1(result, this, WrappedError);
4358
+ if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
4359
+ return result;
4360
+ });
4361
+
4362
+ WrappedError.prototype = OriginalErrorPrototype;
4363
+
4364
+ if (ERROR_NAME !== 'Error') {
4365
+ if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
4366
+ else copyConstructorProperties(WrappedError, BaseError, { name: true });
4367
+ } else if (DESCRIPTORS$2 && STACK_TRACE_LIMIT in OriginalError) {
4368
+ proxyAccessor$1(WrappedError, OriginalError, STACK_TRACE_LIMIT);
4369
+ proxyAccessor$1(WrappedError, OriginalError, 'prepareStackTrace');
4370
+ }
4371
+
4372
+ copyConstructorProperties(WrappedError, OriginalError);
4373
+
4374
+ try {
4375
+ // Safari 13- bug: WebAssembly errors does not have a proper `.name`
4376
+ if (OriginalErrorPrototype.name !== ERROR_NAME) {
4377
+ createNonEnumerableProperty$2(OriginalErrorPrototype, 'name', ERROR_NAME);
4378
+ }
4379
+ OriginalErrorPrototype.constructor = WrappedError;
4380
+ } catch (error) { /* empty */ }
4381
+
4382
+ return WrappedError;
4383
+ };
4384
+
4385
+ /* eslint-disable no-unused-vars -- required for functions `.length` */
4386
+ var $$6 = _export;
4387
+ var global$5 = global$p;
4388
+ var apply = functionApply;
4389
+ var wrapErrorConstructorWithCause = wrapErrorConstructorWithCause$1;
4390
+
4391
+ var WEB_ASSEMBLY = 'WebAssembly';
4392
+ var WebAssembly = global$5[WEB_ASSEMBLY];
4393
+
4394
+ // eslint-disable-next-line es/no-error-cause -- feature detection
4395
+ var FORCED$1 = new Error('e', { cause: 7 }).cause !== 7;
4396
+
4397
+ var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
4398
+ var O = {};
4399
+ O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED$1);
4400
+ $$6({ global: true, constructor: true, arity: 1, forced: FORCED$1 }, O);
4401
+ };
4402
+
4403
+ var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {
4404
+ if (WebAssembly && WebAssembly[ERROR_NAME]) {
4405
+ var O = {};
4406
+ O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED$1);
4407
+ $$6({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED$1 }, O);
4408
+ }
4409
+ };
4410
+
4411
+ // https://tc39.es/ecma262/#sec-nativeerror
4412
+ exportGlobalErrorCauseWrapper('Error', function (init) {
4413
+ return function Error(message) { return apply(init, this, arguments); };
4414
+ });
4415
+ exportGlobalErrorCauseWrapper('EvalError', function (init) {
4416
+ return function EvalError(message) { return apply(init, this, arguments); };
4417
+ });
4418
+ exportGlobalErrorCauseWrapper('RangeError', function (init) {
4419
+ return function RangeError(message) { return apply(init, this, arguments); };
4420
+ });
4421
+ exportGlobalErrorCauseWrapper('ReferenceError', function (init) {
4422
+ return function ReferenceError(message) { return apply(init, this, arguments); };
4423
+ });
4424
+ exportGlobalErrorCauseWrapper('SyntaxError', function (init) {
4425
+ return function SyntaxError(message) { return apply(init, this, arguments); };
4426
+ });
4427
+ exportGlobalErrorCauseWrapper('TypeError', function (init) {
4428
+ return function TypeError(message) { return apply(init, this, arguments); };
4429
+ });
4430
+ exportGlobalErrorCauseWrapper('URIError', function (init) {
4431
+ return function URIError(message) { return apply(init, this, arguments); };
4432
+ });
4433
+ exportWebAssemblyErrorCauseWrapper('CompileError', function (init) {
4434
+ return function CompileError(message) { return apply(init, this, arguments); };
4435
+ });
4436
+ exportWebAssemblyErrorCauseWrapper('LinkError', function (init) {
4437
+ return function LinkError(message) { return apply(init, this, arguments); };
4438
+ });
4439
+ exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {
4440
+ return function RuntimeError(message) { return apply(init, this, arguments); };
4441
+ });
4442
+
3984
4443
  var anObject$6 = anObject$g;
3985
4444
 
3986
4445
  // `RegExp.prototype.flags` getter implementation
@@ -4000,15 +4459,15 @@ var regexpFlags$1 = function () {
4000
4459
  };
4001
4460
 
4002
4461
  var call$7 = functionCall;
4003
- var hasOwn$2 = hasOwnProperty_1;
4004
- var isPrototypeOf$2 = objectIsPrototypeOf;
4462
+ var hasOwn$1 = hasOwnProperty_1;
4463
+ var isPrototypeOf$1 = objectIsPrototypeOf;
4005
4464
  var regExpFlags = regexpFlags$1;
4006
4465
 
4007
4466
  var RegExpPrototype$4 = RegExp.prototype;
4008
4467
 
4009
4468
  var regexpGetFlags = function (R) {
4010
4469
  var flags = R.flags;
4011
- return flags === undefined && !('flags' in RegExpPrototype$4) && !hasOwn$2(R, 'flags') && isPrototypeOf$2(RegExpPrototype$4, R)
4470
+ return flags === undefined && !('flags' in RegExpPrototype$4) && !hasOwn$1(R, 'flags') && isPrototypeOf$1(RegExpPrototype$4, R)
4012
4471
  ? call$7(regExpFlags, R) : flags;
4013
4472
  };
4014
4473
 
@@ -4016,14 +4475,14 @@ var PROPER_FUNCTION_NAME = functionName.PROPER;
4016
4475
  var defineBuiltIn$2 = defineBuiltIn$8;
4017
4476
  var anObject$5 = anObject$g;
4018
4477
  var $toString = toString$c;
4019
- var fails$9 = fails$o;
4478
+ var fails$8 = fails$o;
4020
4479
  var getRegExpFlags$1 = regexpGetFlags;
4021
4480
 
4022
4481
  var TO_STRING = 'toString';
4023
4482
  var RegExpPrototype$3 = RegExp.prototype;
4024
4483
  var nativeToString = RegExpPrototype$3[TO_STRING];
4025
4484
 
4026
- var NOT_GENERIC = fails$9(function () { return nativeToString.call({ source: 'a', flags: 'b' }) !== '/a/b'; });
4485
+ var NOT_GENERIC = fails$8(function () { return nativeToString.call({ source: 'a', flags: 'b' }) !== '/a/b'; });
4027
4486
  // FF44- RegExp#toString has a wrong name
4028
4487
  var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;
4029
4488
 
@@ -4049,11 +4508,28 @@ if (NOT_GENERIC || INCORRECT_NAME) {
4049
4508
  class ErrorBoundary extends React.Component {
4050
4509
  constructor(props) {
4051
4510
  super(props);
4511
+ this.handlePromiseRejection = event => {
4512
+ const error = event.reason instanceof Error ? event.reason : new Error(String(event.reason));
4513
+ const errorInfo = {
4514
+ componentStack: 'Canvas contains images without CORS headers of: Access-Control-Allow-Origin: *. Recording canvas cannot be done.'
4515
+ };
4516
+ this.setState({
4517
+ error,
4518
+ errorInfo
4519
+ });
4520
+ event.preventDefault();
4521
+ };
4052
4522
  this.state = {
4053
4523
  error: undefined,
4054
4524
  errorInfo: undefined
4055
4525
  };
4056
4526
  }
4527
+ componentDidMount() {
4528
+ // eslint-disable-next-line react/destructuring-assignment
4529
+ if (this.props.handlePromiseRejections) {
4530
+ window.addEventListener('unhandledrejection', this.handlePromiseRejection);
4531
+ }
4532
+ }
4057
4533
  static getDerivedStateFromError(error) {
4058
4534
  return {
4059
4535
  error
@@ -4069,22 +4545,41 @@ class ErrorBoundary extends React.Component {
4069
4545
  });
4070
4546
  onError(error, errorInfo);
4071
4547
  }
4548
+ componentWillUnmount() {
4549
+ // eslint-disable-next-line react/destructuring-assignment
4550
+ if (this.props.handlePromiseRejections) {
4551
+ window.removeEventListener('unhandledrejection', this.handlePromiseRejection);
4552
+ }
4553
+ }
4072
4554
  render() {
4073
4555
  const {
4074
4556
  error,
4075
4557
  errorInfo
4076
4558
  } = this.state;
4559
+ const reloadPage = 'Reload page';
4077
4560
  const {
4078
- children
4561
+ children,
4562
+ displayOnTop
4079
4563
  } = this.props;
4564
+ const normalStyles = {
4565
+ whiteSpace: 'pre-wrap',
4566
+ width: '100%',
4567
+ height: '100%',
4568
+ overflowY: 'scroll'
4569
+ };
4570
+ const displayOnTopStyles = {
4571
+ position: 'fixed',
4572
+ top: '30%',
4573
+ left: '50%',
4574
+ transform: 'translate(-50%, -50%)',
4575
+ whiteSpace: 'pre-wrap',
4576
+ width: '50%',
4577
+ height: '50%',
4578
+ overflowY: 'scroll'
4579
+ };
4080
4580
  if (error) {
4081
4581
  return /*#__PURE__*/React.createElement(Box, {
4082
- sx: {
4083
- whiteSpace: 'pre-wrap',
4084
- width: '100%',
4085
- height: '100%',
4086
- overflowY: 'scroll'
4087
- }
4582
+ sx: displayOnTop ? displayOnTopStyles : normalStyles
4088
4583
  }, /*#__PURE__*/React.createElement(AlertBanner, {
4089
4584
  severity: "error",
4090
4585
  title: "Woops, an error has occurred. Please report the error shown below and reload the page if needed.",
@@ -4094,7 +4589,7 @@ class ErrorBoundary extends React.Component {
4094
4589
  cursor: 'pointer'
4095
4590
  },
4096
4591
  onClick: () => window.location.reload()
4097
- }, "Reload page"))
4592
+ }, reloadPage))
4098
4593
  }));
4099
4594
  }
4100
4595
  return children;
@@ -4122,22 +4617,6 @@ const Avatar = ({
4122
4617
  }, children);
4123
4618
  };
4124
4619
 
4125
- /* *
4126
- * Licensed under the Apache License, Version 2.0 (the "License");
4127
- * you may not use this file except in compliance with the License.
4128
- * You may obtain a copy of the License at
4129
- *
4130
- * http://www.apache.org/licenses/LICENSE-2.0
4131
- *
4132
- * Unless required by applicable law or agreed to in writing, software
4133
- * distributed under the License is distributed on an "AS IS" BASIS,
4134
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4135
- * See the License for the specific language governing permissions and
4136
- * limitations under the License.
4137
- *
4138
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4139
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
4140
- * */
4141
4620
  const styles$4 = {
4142
4621
  container: {
4143
4622
  position: 'absolute',
@@ -4163,22 +4642,28 @@ const UserMenu = ({
4163
4642
  onToggle: _onToggle = () => {},
4164
4643
  onClose: _onClose = () => {},
4165
4644
  children,
4166
- initials
4645
+ initials,
4646
+ isAdmin: _isAdmin = false
4167
4647
  }) => {
4168
4648
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CustomIconButton, {
4169
4649
  "data-testid": "userButton",
4170
4650
  onClick: _onToggle,
4171
4651
  sx: {
4172
- '&.MuiButtonBase-root': {
4652
+ '&.MuiButtonBase-root': Object.assign({
4173
4653
  background: 'transparent',
4174
4654
  '&:hover': {
4175
4655
  border: 'none',
4176
4656
  background: 'transparent'
4177
4657
  }
4178
- }
4658
+ }, _isAdmin && {
4659
+ svg: {
4660
+ width: 32,
4661
+ height: 32
4662
+ }
4663
+ })
4179
4664
  },
4180
4665
  size: "medium"
4181
- }, /*#__PURE__*/React__default.createElement(Avatar, null, initials)), _isOpen && ( /*#__PURE__*/React__default.createElement(Paper, {
4666
+ }, !_isAdmin ? /*#__PURE__*/React__default.createElement(Avatar, null, initials) : /*#__PURE__*/React__default.createElement(Admin, null, initials)), _isOpen && ( /*#__PURE__*/React__default.createElement(Paper, {
4182
4667
  sx: styles$4.container,
4183
4668
  "data-testid": "userMenu"
4184
4669
  }, /*#__PURE__*/React__default.createElement(ClickAwayListener, {
@@ -4211,13 +4696,16 @@ const MenuItemTheme = () => {
4211
4696
  isDark,
4212
4697
  toggleTheme
4213
4698
  } = useThemeContext();
4699
+ const {
4700
+ t
4701
+ } = useTranslation(SHARED_NAMESPACE);
4214
4702
  return /*#__PURE__*/React__default.createElement(MenuItem, {
4215
4703
  divider: true
4216
4704
  }, /*#__PURE__*/React__default.createElement(Grid, {
4217
4705
  container: true
4218
4706
  }, /*#__PURE__*/React__default.createElement(Grid, {
4219
4707
  item: true
4220
- }, "Choose your default app mode"), /*#__PURE__*/React__default.createElement(Grid, {
4708
+ }, t('shared-choose-app-mode')), /*#__PURE__*/React__default.createElement(Grid, {
4221
4709
  item: true
4222
4710
  }, /*#__PURE__*/React__default.createElement(RadioGroup, {
4223
4711
  onChange: toggleTheme
@@ -4345,6 +4833,9 @@ const ToolHeader = ({
4345
4833
  const columnSizeIcon = title && (_leftHeaderComponent || _rightHeaderComponent) ? 4 : 1;
4346
4834
  const columnSizeTitle = _leftHeaderComponent || _rightHeaderComponent ? 4 : 10;
4347
4835
  const columnSizeLeft = title ? columnSizeIcon : 12 - columnSizeIcon;
4836
+ const {
4837
+ t
4838
+ } = useTranslation(SHARED_NAMESPACE);
4348
4839
  return /*#__PURE__*/React__default.createElement(Box, {
4349
4840
  component: "header",
4350
4841
  className: _className,
@@ -4415,7 +4906,7 @@ const ToolHeader = ({
4415
4906
  container: true,
4416
4907
  justifyContent: "flex-end"
4417
4908
  }, _rightHeaderComponent && _rightHeaderComponent, _onClose && ( /*#__PURE__*/React__default.createElement(CustomTooltip, {
4418
- title: "Close",
4909
+ title: t('shared-close'),
4419
4910
  placement: "bottom",
4420
4911
  sx: {
4421
4912
  pointerEvents: 'none'
@@ -4847,196 +5338,187 @@ const ShortCutSegment = ({
4847
5338
  }, children);
4848
5339
  };
4849
5340
 
4850
- const shortcuts = [{
4851
- title: 'Choose a selected time',
4852
- description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "Left click on the time slider rail"))
4853
- }, {
4854
- title: 'Move backwards/forwards in selected time',
4855
- description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "Mouse scroll over the time slider rail"))
4856
- }, {
4857
- title: 'Move 1 step backwards/forwards in selected time',
4858
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4859
- type: "icon"
4860
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4861
- type: "connect"
4862
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4863
- type: "icon"
4864
- }, /*#__PURE__*/React__default.createElement(ArrowLeft, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4865
- type: "divider"
4866
- }, "or"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4867
- type: "icon"
4868
- }, /*#__PURE__*/React__default.createElement(ArrowRight, null)))),
4869
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4870
- type: "icon"
4871
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4872
- type: "connect"
4873
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4874
- type: "icon"
4875
- }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4876
- type: "connect"
4877
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4878
- type: "icon"
4879
- }, /*#__PURE__*/React__default.createElement(ArrowLeft, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4880
- type: "divider"
4881
- }, "or"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4882
- type: "icon"
4883
- }, /*#__PURE__*/React__default.createElement(ArrowRight, null))))
4884
- }, {
4885
- title: 'Toggle hide/show time slider',
4886
- description: /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4887
- type: "icon"
4888
- }, "t")
4889
- }, {
4890
- title: 'Change time slider scale (visible timespan)',
4891
- description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "Hold left click over Time Slider legend + drag left or right"))
4892
- }, {
4893
- title: 'Expand/shrink time slider scale (visible timespan)',
4894
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4895
- type: "icon"
4896
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "+ Scroll the slider rail")))
4897
- }, {
4898
- title: 'Mouseover to change selected time',
4899
- description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "Hover over Time Slider rail or time indicator"))
4900
- }, {
4901
- title: 'Mouseover switch on/off',
4902
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4903
- type: "icon"
4904
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4905
- type: "connect"
4906
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4907
- type: "icon"
4908
- }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4909
- type: "connect"
4910
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4911
- type: "icon"
4912
- }, "h"))),
4913
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4914
- type: "icon"
4915
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4916
- type: "connect"
4917
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4918
- type: "icon"
4919
- }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4920
- type: "connect"
4921
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4922
- type: "icon"
4923
- }, "h")))
4924
- }, {
4925
- title: 'Change time step or animation speed',
4926
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4927
- type: "icon"
4928
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4929
- type: "connect"
4930
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4931
- type: "icon"
4932
- }, /*#__PURE__*/React__default.createElement(ArrowUp, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4933
- type: "divider"
4934
- }, "or"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4935
- type: "icon"
4936
- }, /*#__PURE__*/React__default.createElement(ArrowDown, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "(when slider active)"))),
4937
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4938
- type: "icon"
4939
- }, /*#__PURE__*/React__default.createElement(KeyCommand, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4940
- type: "connect"
4941
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4942
- type: "icon"
4943
- }, /*#__PURE__*/React__default.createElement(ArrowUp, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4944
- type: "divider"
4945
- }, "or"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4946
- type: "icon"
4947
- }, /*#__PURE__*/React__default.createElement(ArrowDown, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "(when slider active)")))
4948
- }, {
4949
- title: 'Return to current time',
4950
- description: /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4951
- type: "icon"
4952
- }, "Home"),
4953
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4954
- type: "icon"
4955
- }, "fn"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4956
- type: "connect"
4957
- }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4958
- type: "icon"
4959
- }, /*#__PURE__*/React__default.createElement(ArrowLeft, null))))
4960
- }, {
4961
- title: 'Change layer manager values by scrolling',
4962
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4963
- type: "icon"
4964
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + Mouse scroll"))),
4965
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4966
- type: "icon"
4967
- }, /*#__PURE__*/React__default.createElement(KeyCommand, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + Mouse scroll")))
4968
- }, {
4969
- title: 'Change size of layer manager to small',
4970
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4971
- type: "icon"
4972
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4973
- type: "icon"
4974
- }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4975
- type: "icon"
4976
- }, "s"))),
4977
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4978
- type: "icon"
4979
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4980
- type: "icon"
4981
- }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4982
- type: "icon"
4983
- }, "s")))
4984
- }, {
4985
- title: 'Change size of layer manager to medium',
4986
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4987
- type: "icon"
4988
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4989
- type: "icon"
4990
- }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4991
- type: "icon"
4992
- }, "m"))),
4993
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4994
- type: "icon"
4995
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4996
- type: "icon"
4997
- }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
4998
- type: "icon"
4999
- }, "m")))
5000
- }, {
5001
- title: 'Change size of layer manager to large',
5002
- description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5003
- type: "icon"
5004
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5005
- type: "icon"
5006
- }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5007
- type: "icon"
5008
- }, "l"))),
5009
- descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5010
- type: "icon"
5011
- }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5012
- type: "icon"
5013
- }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5014
- type: "icon"
5015
- }, "l")))
5016
- }];
5017
- const getShortcutList = (shortcutList, platform = 'windows') => shortcutList.map(({
5018
- title,
5019
- description,
5020
- descriptionMac
5021
- }) => Object.assign({
5022
- title
5023
- }, platform === 'windows' ? {
5024
- description
5025
- } : {
5026
- description: descriptionMac || description
5027
- }));
5028
5341
  const ShortcutList = ({
5029
5342
  platform: _platform = 'windows'
5030
5343
  }) => {
5031
- const rows = getShortcutList(shortcuts, _platform);
5344
+ const {
5345
+ t
5346
+ } = useTranslation();
5347
+ const shortcuts = [{
5348
+ titleKey: 'shared-choose-selected-time',
5349
+ description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, t('shared-shortcut-left-click')))
5350
+ }, {
5351
+ titleKey: 'shared-move-selected-time',
5352
+ description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, t('shared-shortcut-mouse-scroll-timeslider')))
5353
+ }, {
5354
+ titleKey: 'shared-move-one-step',
5355
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5356
+ type: "icon"
5357
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5358
+ type: "connect"
5359
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5360
+ type: "icon"
5361
+ }, /*#__PURE__*/React__default.createElement(ArrowLeft, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5362
+ type: "divider"
5363
+ }, t('shared-shortcut-or')), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5364
+ type: "icon"
5365
+ }, /*#__PURE__*/React__default.createElement(ArrowRight, null)))),
5366
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5367
+ type: "icon"
5368
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5369
+ type: "connect"
5370
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5371
+ type: "icon"
5372
+ }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5373
+ type: "connect"
5374
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5375
+ type: "icon"
5376
+ }, /*#__PURE__*/React__default.createElement(ArrowLeft, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5377
+ type: "divider"
5378
+ }, t('shared-shortcut-or')), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5379
+ type: "icon"
5380
+ }, /*#__PURE__*/React__default.createElement(ArrowRight, null))))
5381
+ }, {
5382
+ titleKey: 'shared-toggle-timeslider',
5383
+ description: /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5384
+ type: "icon"
5385
+ }, "T")
5386
+ }, {
5387
+ titleKey: 'shared-timeslider-scale',
5388
+ description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, t('shared-shortcut-hold-click')))
5389
+ }, {
5390
+ titleKey: 'shared-expand-timeslider-scale',
5391
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5392
+ type: "icon"
5393
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, t('shared-shortcut-scroll'))))
5394
+ }, {
5395
+ titleKey: 'shared-mouseover-selected-time',
5396
+ description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, null, t('shared-shortcut-hover')))
5397
+ }, {
5398
+ titleKey: 'shared-mouseover-on-off',
5399
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5400
+ type: "icon"
5401
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5402
+ type: "connect"
5403
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5404
+ type: "icon"
5405
+ }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5406
+ type: "connect"
5407
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5408
+ type: "icon"
5409
+ }, "h"))),
5410
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5411
+ type: "icon"
5412
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5413
+ type: "connect"
5414
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5415
+ type: "icon"
5416
+ }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5417
+ type: "connect"
5418
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5419
+ type: "icon"
5420
+ }, "h")))
5421
+ }, {
5422
+ titleKey: 'shared-change-timestep-or-speed',
5423
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5424
+ type: "icon"
5425
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5426
+ type: "connect"
5427
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5428
+ type: "icon"
5429
+ }, /*#__PURE__*/React__default.createElement(ArrowUp, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5430
+ type: "divider"
5431
+ }, t('shared-shortcut-or')), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5432
+ type: "icon"
5433
+ }, /*#__PURE__*/React__default.createElement(ArrowDown, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "(", t('shared-shortcut-when-active'), ")"))),
5434
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5435
+ type: "icon"
5436
+ }, /*#__PURE__*/React__default.createElement(KeyCommand, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5437
+ type: "connect"
5438
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5439
+ type: "icon"
5440
+ }, /*#__PURE__*/React__default.createElement(ArrowUp, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5441
+ type: "divider"
5442
+ }, t('shared-shortcut-or')), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5443
+ type: "icon"
5444
+ }, /*#__PURE__*/React__default.createElement(ArrowDown, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, "(", t('shared-shortcut-when-active'), ")")))
5445
+ }, {
5446
+ titleKey: 'shared-return-to-current-time',
5447
+ description: ( /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5448
+ type: "icon"
5449
+ }, t('shared-shortcut-home'))),
5450
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5451
+ type: "icon"
5452
+ }, "fn"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5453
+ type: "connect"
5454
+ }, "+"), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5455
+ type: "icon"
5456
+ }, /*#__PURE__*/React__default.createElement(ArrowLeft, null))))
5457
+ }, {
5458
+ titleKey: 'shared-change-layer-values-scrolling',
5459
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5460
+ type: "icon"
5461
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, ' ', t('shared-shortcut-mouse-scroll')))),
5462
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5463
+ type: "icon"
5464
+ }, /*#__PURE__*/React__default.createElement(KeyCommand, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, ' ', t('shared-shortcut-mouse-scroll'))))
5465
+ }, {
5466
+ titleKey: 'shared-change-layermanager-small',
5467
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5468
+ type: "icon"
5469
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5470
+ type: "icon"
5471
+ }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5472
+ type: "icon"
5473
+ }, "s"))),
5474
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5475
+ type: "icon"
5476
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5477
+ type: "icon"
5478
+ }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5479
+ type: "icon"
5480
+ }, "s")))
5481
+ }, {
5482
+ titleKey: 'shared-change-layermanager-medium',
5483
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5484
+ type: "icon"
5485
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5486
+ type: "icon"
5487
+ }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5488
+ type: "icon"
5489
+ }, "m"))),
5490
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5491
+ type: "icon"
5492
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5493
+ type: "icon"
5494
+ }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5495
+ type: "icon"
5496
+ }, "m")))
5497
+ }, {
5498
+ titleKey: 'shared-change-layermanager-large',
5499
+ description: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5500
+ type: "icon"
5501
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5502
+ type: "icon"
5503
+ }, "Alt"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5504
+ type: "icon"
5505
+ }, "l"))),
5506
+ descriptionMac: ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5507
+ type: "icon"
5508
+ }, "Ctrl"), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5509
+ type: "icon"
5510
+ }, /*#__PURE__*/React__default.createElement(KeyOption, null)), /*#__PURE__*/React__default.createElement(ShortCutSegment, null, " + "), /*#__PURE__*/React__default.createElement(ShortCutSegment, {
5511
+ type: "icon"
5512
+ }, "l")))
5513
+ }];
5032
5514
  return /*#__PURE__*/React__default.createElement(List, {
5033
5515
  "data-testid": `list-${_platform}`
5034
- }, rows.map((row, index) => ( /*#__PURE__*/React__default.createElement(ListItem, {
5516
+ }, shortcuts.map((shortcut, index) => ( /*#__PURE__*/React__default.createElement(ListItem, {
5035
5517
  sx: {
5036
5518
  minHeight: 56
5037
5519
  },
5038
- divider: index !== rows.length - 1,
5039
- key: row.title
5520
+ divider: index !== shortcuts.length - 1,
5521
+ key: shortcut.titleKey
5040
5522
  }, /*#__PURE__*/React__default.createElement(Grid, {
5041
5523
  container: true,
5042
5524
  direction: "row",
@@ -5050,13 +5532,13 @@ const ShortcutList = ({
5050
5532
  letterSpacing: 0.4,
5051
5533
  opacity: 0.67
5052
5534
  }
5053
- }, row.title), /*#__PURE__*/React__default.createElement(Grid, {
5535
+ }, t(shortcut.titleKey)), /*#__PURE__*/React__default.createElement(Grid, {
5054
5536
  item: true
5055
5537
  }, /*#__PURE__*/React__default.createElement(Box, {
5056
5538
  sx: {
5057
5539
  alignItems: 'center'
5058
5540
  }
5059
- }, row.description)))))));
5541
+ }, _platform === 'mac' && shortcut.descriptionMac ? shortcut.descriptionMac : shortcut.description)))))));
5060
5542
  };
5061
5543
 
5062
5544
  const TabPanel = ({
@@ -5114,6 +5596,9 @@ const UserMenuItemCheatSheet = () => {
5114
5596
  const onOpen = () => {
5115
5597
  setOpen(true);
5116
5598
  };
5599
+ const {
5600
+ t
5601
+ } = useTranslation(SHARED_NAMESPACE);
5117
5602
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(MenuItem, {
5118
5603
  "data-testid": "cheatsheet-btn",
5119
5604
  onClick: onOpen,
@@ -5122,7 +5607,7 @@ const UserMenuItemCheatSheet = () => {
5122
5607
  container: true
5123
5608
  }, /*#__PURE__*/React__default.createElement(Grid, {
5124
5609
  item: true
5125
- }, "Cheat sheet"))), /*#__PURE__*/React__default.createElement(Backdrop, {
5610
+ }, t('shared-cheat-sheet')))), /*#__PURE__*/React__default.createElement(Backdrop, {
5126
5611
  "data-testid": "cheatsheet-content",
5127
5612
  open: open,
5128
5613
  sx: {
@@ -5134,19 +5619,162 @@ const UserMenuItemCheatSheet = () => {
5134
5619
  },
5135
5620
  minHeight: 300,
5136
5621
  minWidth: 500,
5137
- title: "Cheat sheet",
5622
+ title: t('shared-cheat-sheet'),
5138
5623
  isOpen: true,
5139
5624
  onClose: onClose,
5140
5625
  bounds: "parent"
5141
5626
  }, /*#__PURE__*/React__default.createElement(CheatSheet, null))));
5142
5627
  };
5143
5628
 
5144
- const useUserMenu = (open = false) => {
5145
- const [isOpen, setOpen] = React__default.useState(open);
5146
- const onClose = () => setOpen(false);
5147
- const onToggle = () => setOpen(!isOpen);
5148
- return {
5149
- isOpen,
5629
+ const UserMenuItemSentryRecording = ({
5630
+ recordButtonEnabled,
5631
+ setRecordButtonEnabled
5632
+ }) => {
5633
+ const [open, setOpen] = React__default.useState(false);
5634
+ const [canvasIntegrationEnabled, setCanvasIntegrationEnabled] = React__default.useState(false);
5635
+ const [htmlRecordingEnabled, setHTMLRecordingEnabled] = React__default.useState(false);
5636
+ const {
5637
+ t
5638
+ } = useTranslation(SHARED_NAMESPACE);
5639
+ const onClose = () => {
5640
+ setOpen(false);
5641
+ };
5642
+ const onOpen = () => {
5643
+ setOpen(true);
5644
+ };
5645
+ const enableHTMLRecording = () => __awaiter(void 0, void 0, void 0, function* () {
5646
+ if (recordButtonEnabled) {
5647
+ return;
5648
+ }
5649
+ if (canvasIntegrationEnabled) {
5650
+ return;
5651
+ }
5652
+ try {
5653
+ const {
5654
+ replayIntegration
5655
+ } = yield import('@sentry/react');
5656
+ Sentry.addIntegration(replayIntegration({
5657
+ maskAllText: false,
5658
+ blockAllMedia: false
5659
+ }));
5660
+ setRecordButtonEnabled && setRecordButtonEnabled(!recordButtonEnabled);
5661
+ setHTMLRecordingEnabled(true);
5662
+ } catch (error) {
5663
+ // eslint-disable-next-line no-console
5664
+ console.log(error);
5665
+ }
5666
+ });
5667
+ const enableHTMLAndCanvasRecording = () => __awaiter(void 0, void 0, void 0, function* () {
5668
+ if (recordButtonEnabled) {
5669
+ return;
5670
+ }
5671
+ try {
5672
+ const {
5673
+ replayIntegration,
5674
+ replayCanvasIntegration
5675
+ } = yield import('@sentry/react');
5676
+ Sentry.addIntegration(replayIntegration({
5677
+ maskAllText: false,
5678
+ blockAllMedia: false
5679
+ }));
5680
+ Sentry.addIntegration(replayCanvasIntegration());
5681
+ setCanvasIntegrationEnabled(!canvasIntegrationEnabled);
5682
+ setRecordButtonEnabled && setRecordButtonEnabled(!recordButtonEnabled);
5683
+ } catch (error) {
5684
+ // eslint-disable-next-line no-console
5685
+ console.log(error);
5686
+ }
5687
+ });
5688
+ return /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(MenuItem, {
5689
+ "data-testid": "sentryRecording-btn",
5690
+ onClick: onOpen,
5691
+ divider: true
5692
+ }, /*#__PURE__*/React__default.createElement(Grid, {
5693
+ container: true
5694
+ }, /*#__PURE__*/React__default.createElement(Grid, {
5695
+ item: true
5696
+ }, t('shared-sentry-recording')))), /*#__PURE__*/React__default.createElement(Backdrop, {
5697
+ "data-testid": "sentryRecording-content",
5698
+ open: open,
5699
+ sx: {
5700
+ zIndex: 1
5701
+ }
5702
+ }, /*#__PURE__*/React__default.createElement(DraggableComponent, {
5703
+ startSize: {
5704
+ width: 700
5705
+ },
5706
+ minHeight: 300,
5707
+ minWidth: 500,
5708
+ title: "Sentry Recording",
5709
+ isOpen: true,
5710
+ onClose: onClose,
5711
+ bounds: "parent"
5712
+ }, /*#__PURE__*/React__default.createElement(Grid, {
5713
+ container: true,
5714
+ spacing: 4,
5715
+ sx: {
5716
+ paddingLeft: '70px',
5717
+ paddingRight: '70px'
5718
+ }
5719
+ }, /*#__PURE__*/React__default.createElement(Grid, {
5720
+ container: true,
5721
+ item: true,
5722
+ justifyContent: "center",
5723
+ sx: {
5724
+ textAlign: 'center'
5725
+ }
5726
+ }, /*#__PURE__*/React__default.createElement(Typography, null, t('shared-sentry-information'))), /*#__PURE__*/React__default.createElement(Grid, {
5727
+ container: true,
5728
+ item: true,
5729
+ justifyContent: "center",
5730
+ sx: {
5731
+ textAlign: 'center'
5732
+ }
5733
+ }, /*#__PURE__*/React__default.createElement(Typography, null, t('shared-sentry-enable-message'))), /*#__PURE__*/React__default.createElement(Grid, {
5734
+ container: true,
5735
+ item: true,
5736
+ alignItems: "center",
5737
+ direction: "column"
5738
+ }, /*#__PURE__*/React__default.createElement(Switch, {
5739
+ checked: recordButtonEnabled && !canvasIntegrationEnabled,
5740
+ onChange: enableHTMLRecording,
5741
+ disabled: htmlRecordingEnabled
5742
+ }), recordButtonEnabled && !canvasIntegrationEnabled ? ( /*#__PURE__*/React__default.createElement(Typography, null, " ", t('shared-sentry-disable'))) : ( /*#__PURE__*/React__default.createElement(Typography, null, " ", t('shared-sentry-enable')))), /*#__PURE__*/React__default.createElement(Grid, {
5743
+ container: true,
5744
+ item: true,
5745
+ alignItems: "center",
5746
+ direction: "column"
5747
+ }, /*#__PURE__*/React__default.createElement(Switch, {
5748
+ disabled: true,
5749
+ checked: canvasIntegrationEnabled,
5750
+ onChange: enableHTMLAndCanvasRecording
5751
+ }), canvasIntegrationEnabled ? ( /*#__PURE__*/React__default.createElement(Typography, null, t('shared-sentry-disable-both'))) : ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Typography, {
5752
+ sx: {
5753
+ color: 'gray'
5754
+ }
5755
+ }, t('shared-sentry-enable-both')), /*#__PURE__*/React__default.createElement(Typography, {
5756
+ textAlign: "center",
5757
+ sx: {
5758
+ color: 'gray'
5759
+ }
5760
+ }, "(", t('shared-sentry-cors-wait'), ")")))), /*#__PURE__*/React__default.createElement(Grid, {
5761
+ container: true,
5762
+ item: true,
5763
+ justifyContent: "center"
5764
+ }, /*#__PURE__*/React__default.createElement(Typography, {
5765
+ sx: {
5766
+ paddingTop: '20px',
5767
+ textAlign: 'center'
5768
+ }
5769
+ }, ' ', t('shared-sentry-disclaimer')))))));
5770
+ };
5771
+
5772
+ const useUserMenu = (open = false) => {
5773
+ const [isOpen, setOpen] = React__default.useState(open);
5774
+ const onClose = () => setOpen(false);
5775
+ const onToggle = () => setOpen(!isOpen);
5776
+ return {
5777
+ isOpen,
5150
5778
  onClose,
5151
5779
  onToggle
5152
5780
  };
@@ -5182,18 +5810,18 @@ const getInitials = name => {
5182
5810
  }
5183
5811
  };
5184
5812
 
5185
- var $$6 = _export;
5186
- var uncurryThis$6 = functionUncurryThis;
5813
+ var $$5 = _export;
5814
+ var uncurryThis$5 = functionUncurryThis;
5187
5815
  var isArray = isArray$3;
5188
5816
 
5189
- var nativeReverse = uncurryThis$6([].reverse);
5817
+ var nativeReverse = uncurryThis$5([].reverse);
5190
5818
  var test = [1, 2];
5191
5819
 
5192
5820
  // `Array.prototype.reverse` method
5193
5821
  // https://tc39.es/ecma262/#sec-array.prototype.reverse
5194
5822
  // fix for Safari 12.0 bug
5195
5823
  // https://bugs.webkit.org/show_bug.cgi?id=188794
5196
- $$6({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
5824
+ $$5({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
5197
5825
  reverse: function reverse() {
5198
5826
  // eslint-disable-next-line no-self-assign -- dirty hack
5199
5827
  if (isArray(this)) this.length = this.length;
@@ -5702,20 +6330,20 @@ const CustomAccordion = _a => {
5702
6330
  }, children));
5703
6331
  };
5704
6332
 
5705
- var $$5 = _export;
6333
+ var $$4 = _export;
5706
6334
  var $includes = arrayIncludes.includes;
5707
- var fails$8 = fails$o;
6335
+ var fails$7 = fails$o;
5708
6336
  var addToUnscopables = addToUnscopables$3;
5709
6337
 
5710
6338
  // FF99+ bug
5711
- var BROKEN_ON_SPARSE = fails$8(function () {
6339
+ var BROKEN_ON_SPARSE = fails$7(function () {
5712
6340
  // eslint-disable-next-line es/no-array-prototype-includes -- detection
5713
6341
  return !Array(1).includes();
5714
6342
  });
5715
6343
 
5716
6344
  // `Array.prototype.includes` method
5717
6345
  // https://tc39.es/ecma262/#sec-array.prototype.includes
5718
- $$5({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {
6346
+ $$4({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {
5719
6347
  includes: function includes(el /* , fromIndex = 0 */) {
5720
6348
  return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
5721
6349
  }
@@ -5770,17 +6398,17 @@ var arrayReduce = {
5770
6398
  right: createMethod$1(true)
5771
6399
  };
5772
6400
 
5773
- var fails$7 = fails$o;
6401
+ var fails$6 = fails$o;
5774
6402
 
5775
6403
  var arrayMethodIsStrict$1 = function (METHOD_NAME, argument) {
5776
6404
  var method = [][METHOD_NAME];
5777
- return !!method && fails$7(function () {
6405
+ return !!method && fails$6(function () {
5778
6406
  // eslint-disable-next-line no-useless-call -- required for testing
5779
6407
  method.call(null, argument || function () { return 1; }, 1);
5780
6408
  });
5781
6409
  };
5782
6410
 
5783
- var $$4 = _export;
6411
+ var $$3 = _export;
5784
6412
  var $reduce = arrayReduce.left;
5785
6413
  var arrayMethodIsStrict = arrayMethodIsStrict$1;
5786
6414
  var CHROME_VERSION = engineV8Version;
@@ -5789,37 +6417,18 @@ var IS_NODE = engineIsNode;
5789
6417
  // Chrome 80-82 has a critical bug
5790
6418
  // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
5791
6419
  var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
5792
- var FORCED$1 = CHROME_BUG || !arrayMethodIsStrict('reduce');
6420
+ var FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');
5793
6421
 
5794
6422
  // `Array.prototype.reduce` method
5795
6423
  // https://tc39.es/ecma262/#sec-array.prototype.reduce
5796
- $$4({ target: 'Array', proto: true, forced: FORCED$1 }, {
6424
+ $$3({ target: 'Array', proto: true, forced: FORCED }, {
5797
6425
  reduce: function reduce(callbackfn /* , initialValue */) {
5798
6426
  var length = arguments.length;
5799
6427
  return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);
5800
6428
  }
5801
6429
  });
5802
6430
 
5803
- var isCallable$2 = isCallable$n;
5804
- var isObject$2 = isObject$e;
5805
- var setPrototypeOf$1 = objectSetPrototypeOf;
5806
-
5807
- // makes subclassing work correct for wrapped built-ins
5808
- var inheritIfRequired$2 = function ($this, dummy, Wrapper) {
5809
- var NewTarget, NewTargetPrototype;
5810
- if (
5811
- // it can work only with native `setPrototypeOf`
5812
- setPrototypeOf$1 &&
5813
- // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
5814
- isCallable$2(NewTarget = dummy.constructor) &&
5815
- NewTarget !== Wrapper &&
5816
- isObject$2(NewTargetPrototype = NewTarget.prototype) &&
5817
- NewTargetPrototype !== Wrapper.prototype
5818
- ) setPrototypeOf$1($this, NewTargetPrototype);
5819
- return $this;
5820
- };
5821
-
5822
- var isObject$1 = isObject$e;
6431
+ var isObject = isObject$e;
5823
6432
  var classof$2 = classofRaw$2;
5824
6433
  var wellKnownSymbol$3 = wellKnownSymbol$j;
5825
6434
 
@@ -5829,16 +6438,16 @@ var MATCH$2 = wellKnownSymbol$3('match');
5829
6438
  // https://tc39.es/ecma262/#sec-isregexp
5830
6439
  var isRegexp = function (it) {
5831
6440
  var isRegExp;
5832
- return isObject$1(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classof$2(it) === 'RegExp');
6441
+ return isObject(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classof$2(it) === 'RegExp');
5833
6442
  };
5834
6443
 
5835
- var fails$6 = fails$o;
5836
- var global$5 = global$p;
6444
+ var fails$5 = fails$o;
6445
+ var global$4 = global$p;
5837
6446
 
5838
6447
  // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
5839
- var $RegExp$2 = global$5.RegExp;
6448
+ var $RegExp$2 = global$4.RegExp;
5840
6449
 
5841
- var UNSUPPORTED_Y$3 = fails$6(function () {
6450
+ var UNSUPPORTED_Y$3 = fails$5(function () {
5842
6451
  var re = $RegExp$2('a', 'y');
5843
6452
  re.lastIndex = 2;
5844
6453
  return re.exec('abcd') !== null;
@@ -5846,11 +6455,11 @@ var UNSUPPORTED_Y$3 = fails$6(function () {
5846
6455
 
5847
6456
  // UC Browser bug
5848
6457
  // https://github.com/zloirock/core-js/issues/1008
5849
- var MISSED_STICKY$1 = UNSUPPORTED_Y$3 || fails$6(function () {
6458
+ var MISSED_STICKY$1 = UNSUPPORTED_Y$3 || fails$5(function () {
5850
6459
  return !$RegExp$2('a', 'y').sticky;
5851
6460
  });
5852
6461
 
5853
- var BROKEN_CARET = UNSUPPORTED_Y$3 || fails$6(function () {
6462
+ var BROKEN_CARET = UNSUPPORTED_Y$3 || fails$5(function () {
5854
6463
  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
5855
6464
  var re = $RegExp$2('^r', 'gy');
5856
6465
  re.lastIndex = 2;
@@ -5863,56 +6472,46 @@ var regexpStickyHelpers = {
5863
6472
  UNSUPPORTED_Y: UNSUPPORTED_Y$3
5864
6473
  };
5865
6474
 
5866
- var defineProperty = objectDefineProperty.f;
5867
-
5868
- var proxyAccessor$2 = function (Target, Source, key) {
5869
- key in Target || defineProperty(Target, key, {
5870
- configurable: true,
5871
- get: function () { return Source[key]; },
5872
- set: function (it) { Source[key] = it; }
5873
- });
5874
- };
5875
-
5876
- var fails$5 = fails$o;
5877
- var global$4 = global$p;
6475
+ var fails$4 = fails$o;
6476
+ var global$3 = global$p;
5878
6477
 
5879
6478
  // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
5880
- var $RegExp$1 = global$4.RegExp;
6479
+ var $RegExp$1 = global$3.RegExp;
5881
6480
 
5882
- var regexpUnsupportedDotAll = fails$5(function () {
6481
+ var regexpUnsupportedDotAll = fails$4(function () {
5883
6482
  var re = $RegExp$1('.', 's');
5884
6483
  return !(re.dotAll && re.test('\n') && re.flags === 's');
5885
6484
  });
5886
6485
 
5887
- var fails$4 = fails$o;
5888
- var global$3 = global$p;
6486
+ var fails$3 = fails$o;
6487
+ var global$2 = global$p;
5889
6488
 
5890
6489
  // babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError
5891
- var $RegExp = global$3.RegExp;
6490
+ var $RegExp = global$2.RegExp;
5892
6491
 
5893
- var regexpUnsupportedNcg = fails$4(function () {
6492
+ var regexpUnsupportedNcg = fails$3(function () {
5894
6493
  var re = $RegExp('(?<a>b)', 'g');
5895
6494
  return re.exec('b').groups.a !== 'b' ||
5896
6495
  'b'.replace(re, '$<a>c') !== 'bc';
5897
6496
  });
5898
6497
 
5899
- var DESCRIPTORS$2 = descriptors;
5900
- var global$2 = global$p;
5901
- var uncurryThis$5 = functionUncurryThis;
6498
+ var DESCRIPTORS$1 = descriptors;
6499
+ var global$1 = global$p;
6500
+ var uncurryThis$4 = functionUncurryThis;
5902
6501
  var isForced = isForced_1;
5903
- var inheritIfRequired$1 = inheritIfRequired$2;
5904
- var createNonEnumerableProperty$4 = createNonEnumerableProperty$9;
6502
+ var inheritIfRequired = inheritIfRequired$2;
6503
+ var createNonEnumerableProperty$1 = createNonEnumerableProperty$9;
5905
6504
  var create$1 = objectCreate;
5906
6505
  var getOwnPropertyNames = objectGetOwnPropertyNames.f;
5907
- var isPrototypeOf$1 = objectIsPrototypeOf;
6506
+ var isPrototypeOf = objectIsPrototypeOf;
5908
6507
  var isRegExp$1 = isRegexp;
5909
- var toString$8 = toString$c;
6508
+ var toString$7 = toString$c;
5910
6509
  var getRegExpFlags = regexpGetFlags;
5911
6510
  var stickyHelpers$2 = regexpStickyHelpers;
5912
- var proxyAccessor$1 = proxyAccessor$2;
6511
+ var proxyAccessor = proxyAccessor$2;
5913
6512
  var defineBuiltIn$1 = defineBuiltIn$8;
5914
- var fails$3 = fails$o;
5915
- var hasOwn$1 = hasOwnProperty_1;
6513
+ var fails$2 = fails$o;
6514
+ var hasOwn = hasOwnProperty_1;
5916
6515
  var enforceInternalState = internalState.enforce;
5917
6516
  var setSpecies = setSpecies$2;
5918
6517
  var wellKnownSymbol$2 = wellKnownSymbol$j;
@@ -5920,14 +6519,14 @@ var UNSUPPORTED_DOT_ALL$2 = regexpUnsupportedDotAll;
5920
6519
  var UNSUPPORTED_NCG$1 = regexpUnsupportedNcg;
5921
6520
 
5922
6521
  var MATCH$1 = wellKnownSymbol$2('match');
5923
- var NativeRegExp = global$2.RegExp;
6522
+ var NativeRegExp = global$1.RegExp;
5924
6523
  var RegExpPrototype$2 = NativeRegExp.prototype;
5925
- var SyntaxError = global$2.SyntaxError;
5926
- var exec$1 = uncurryThis$5(RegExpPrototype$2.exec);
5927
- var charAt$3 = uncurryThis$5(''.charAt);
5928
- var replace$2 = uncurryThis$5(''.replace);
5929
- var stringIndexOf$1 = uncurryThis$5(''.indexOf);
5930
- var stringSlice$3 = uncurryThis$5(''.slice);
6524
+ var SyntaxError = global$1.SyntaxError;
6525
+ var exec$1 = uncurryThis$4(RegExpPrototype$2.exec);
6526
+ var charAt$3 = uncurryThis$4(''.charAt);
6527
+ var replace$1 = uncurryThis$4(''.replace);
6528
+ var stringIndexOf$1 = uncurryThis$4(''.indexOf);
6529
+ var stringSlice$3 = uncurryThis$4(''.slice);
5931
6530
  // TODO: Use only proper RegExpIdentifierName
5932
6531
  var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
5933
6532
  var re1 = /a/g;
@@ -5939,8 +6538,8 @@ var CORRECT_NEW = new NativeRegExp(re1) !== re1;
5939
6538
  var MISSED_STICKY = stickyHelpers$2.MISSED_STICKY;
5940
6539
  var UNSUPPORTED_Y$2 = stickyHelpers$2.UNSUPPORTED_Y;
5941
6540
 
5942
- var BASE_FORCED = DESCRIPTORS$2 &&
5943
- (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL$2 || UNSUPPORTED_NCG$1 || fails$3(function () {
6541
+ var BASE_FORCED = DESCRIPTORS$1 &&
6542
+ (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL$2 || UNSUPPORTED_NCG$1 || fails$2(function () {
5944
6543
  re2[MATCH$1] = false;
5945
6544
  // RegExp constructor can alter flags and IsRegExp works correct with @@match
5946
6545
  return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';
@@ -6000,7 +6599,7 @@ var handleNCG = function (string) {
6000
6599
  groupid++;
6001
6600
  continue;
6002
6601
  case chr === '>' && ncg:
6003
- if (groupname === '' || hasOwn$1(names, groupname)) {
6602
+ if (groupname === '' || hasOwn(names, groupname)) {
6004
6603
  throw new SyntaxError('Invalid capture group name');
6005
6604
  }
6006
6605
  names[groupname] = true;
@@ -6018,7 +6617,7 @@ var handleNCG = function (string) {
6018
6617
  // https://tc39.es/ecma262/#sec-regexp-constructor
6019
6618
  if (isForced('RegExp', BASE_FORCED)) {
6020
6619
  var RegExpWrapper = function RegExp(pattern, flags) {
6021
- var thisIsRegExp = isPrototypeOf$1(RegExpPrototype$2, this);
6620
+ var thisIsRegExp = isPrototypeOf(RegExpPrototype$2, this);
6022
6621
  var patternIsRegExp = isRegExp$1(pattern);
6023
6622
  var flagsAreUndefined = flags === undefined;
6024
6623
  var groups = [];
@@ -6029,25 +6628,25 @@ if (isForced('RegExp', BASE_FORCED)) {
6029
6628
  return pattern;
6030
6629
  }
6031
6630
 
6032
- if (patternIsRegExp || isPrototypeOf$1(RegExpPrototype$2, pattern)) {
6631
+ if (patternIsRegExp || isPrototypeOf(RegExpPrototype$2, pattern)) {
6033
6632
  pattern = pattern.source;
6034
6633
  if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);
6035
6634
  }
6036
6635
 
6037
- pattern = pattern === undefined ? '' : toString$8(pattern);
6038
- flags = flags === undefined ? '' : toString$8(flags);
6636
+ pattern = pattern === undefined ? '' : toString$7(pattern);
6637
+ flags = flags === undefined ? '' : toString$7(flags);
6039
6638
  rawPattern = pattern;
6040
6639
 
6041
6640
  if (UNSUPPORTED_DOT_ALL$2 && 'dotAll' in re1) {
6042
6641
  dotAll = !!flags && stringIndexOf$1(flags, 's') > -1;
6043
- if (dotAll) flags = replace$2(flags, /s/g, '');
6642
+ if (dotAll) flags = replace$1(flags, /s/g, '');
6044
6643
  }
6045
6644
 
6046
6645
  rawFlags = flags;
6047
6646
 
6048
6647
  if (MISSED_STICKY && 'sticky' in re1) {
6049
6648
  sticky = !!flags && stringIndexOf$1(flags, 'y') > -1;
6050
- if (sticky && UNSUPPORTED_Y$2) flags = replace$2(flags, /y/g, '');
6649
+ if (sticky && UNSUPPORTED_Y$2) flags = replace$1(flags, /y/g, '');
6051
6650
  }
6052
6651
 
6053
6652
  if (UNSUPPORTED_NCG$1) {
@@ -6056,7 +6655,7 @@ if (isForced('RegExp', BASE_FORCED)) {
6056
6655
  groups = handled[1];
6057
6656
  }
6058
6657
 
6059
- result = inheritIfRequired$1(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype$2, RegExpWrapper);
6658
+ result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype$2, RegExpWrapper);
6060
6659
 
6061
6660
  if (dotAll || sticky || groups.length) {
6062
6661
  state = enforceInternalState(result);
@@ -6070,25 +6669,25 @@ if (isForced('RegExp', BASE_FORCED)) {
6070
6669
 
6071
6670
  if (pattern !== rawPattern) try {
6072
6671
  // fails in old engines, but we have no alternatives for unsupported regex syntax
6073
- createNonEnumerableProperty$4(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);
6672
+ createNonEnumerableProperty$1(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);
6074
6673
  } catch (error) { /* empty */ }
6075
6674
 
6076
6675
  return result;
6077
6676
  };
6078
6677
 
6079
6678
  for (var keys = getOwnPropertyNames(NativeRegExp), index$1 = 0; keys.length > index$1;) {
6080
- proxyAccessor$1(RegExpWrapper, NativeRegExp, keys[index$1++]);
6679
+ proxyAccessor(RegExpWrapper, NativeRegExp, keys[index$1++]);
6081
6680
  }
6082
6681
 
6083
6682
  RegExpPrototype$2.constructor = RegExpWrapper;
6084
6683
  RegExpWrapper.prototype = RegExpPrototype$2;
6085
- defineBuiltIn$1(global$2, 'RegExp', RegExpWrapper, { constructor: true });
6684
+ defineBuiltIn$1(global$1, 'RegExp', RegExpWrapper, { constructor: true });
6086
6685
  }
6087
6686
 
6088
6687
  // https://tc39.es/ecma262/#sec-get-regexp-@@species
6089
6688
  setSpecies('RegExp');
6090
6689
 
6091
- var DESCRIPTORS$1 = descriptors;
6690
+ var DESCRIPTORS = descriptors;
6092
6691
  var UNSUPPORTED_DOT_ALL$1 = regexpUnsupportedDotAll;
6093
6692
  var classof$1 = classofRaw$2;
6094
6693
  var defineBuiltInAccessor = defineBuiltInAccessor$3;
@@ -6099,7 +6698,7 @@ var $TypeError$2 = TypeError;
6099
6698
 
6100
6699
  // `RegExp.prototype.dotAll` getter
6101
6700
  // https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall
6102
- if (DESCRIPTORS$1 && UNSUPPORTED_DOT_ALL$1) {
6701
+ if (DESCRIPTORS && UNSUPPORTED_DOT_ALL$1) {
6103
6702
  defineBuiltInAccessor(RegExpPrototype$1, 'dotAll', {
6104
6703
  configurable: true,
6105
6704
  get: function dotAll() {
@@ -6117,8 +6716,8 @@ if (DESCRIPTORS$1 && UNSUPPORTED_DOT_ALL$1) {
6117
6716
  /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
6118
6717
  /* eslint-disable regexp/no-useless-quantifier -- testing */
6119
6718
  var call$6 = functionCall;
6120
- var uncurryThis$4 = functionUncurryThis;
6121
- var toString$7 = toString$c;
6719
+ var uncurryThis$3 = functionUncurryThis;
6720
+ var toString$6 = toString$c;
6122
6721
  var regexpFlags = regexpFlags$1;
6123
6722
  var stickyHelpers$1 = regexpStickyHelpers;
6124
6723
  var shared = shared$4;
@@ -6130,10 +6729,10 @@ var UNSUPPORTED_NCG = regexpUnsupportedNcg;
6130
6729
  var nativeReplace = shared('native-string-replace', String.prototype.replace);
6131
6730
  var nativeExec = RegExp.prototype.exec;
6132
6731
  var patchedExec = nativeExec;
6133
- var charAt$2 = uncurryThis$4(''.charAt);
6134
- var indexOf = uncurryThis$4(''.indexOf);
6135
- var replace$1 = uncurryThis$4(''.replace);
6136
- var stringSlice$2 = uncurryThis$4(''.slice);
6732
+ var charAt$2 = uncurryThis$3(''.charAt);
6733
+ var indexOf = uncurryThis$3(''.indexOf);
6734
+ var replace = uncurryThis$3(''.replace);
6735
+ var stringSlice$2 = uncurryThis$3(''.slice);
6137
6736
 
6138
6737
  var UPDATES_LAST_INDEX_WRONG = (function () {
6139
6738
  var re1 = /a/;
@@ -6154,7 +6753,7 @@ if (PATCH) {
6154
6753
  patchedExec = function exec(string) {
6155
6754
  var re = this;
6156
6755
  var state = getInternalState(re);
6157
- var str = toString$7(string);
6756
+ var str = toString$6(string);
6158
6757
  var raw = state.raw;
6159
6758
  var result, reCopy, lastIndex, match, i, object, group;
6160
6759
 
@@ -6173,7 +6772,7 @@ if (PATCH) {
6173
6772
  var strCopy = str;
6174
6773
 
6175
6774
  if (sticky) {
6176
- flags = replace$1(flags, 'y', '');
6775
+ flags = replace(flags, 'y', '');
6177
6776
  if (indexOf(flags, 'g') === -1) {
6178
6777
  flags += 'g';
6179
6778
  }
@@ -6231,12 +6830,12 @@ if (PATCH) {
6231
6830
 
6232
6831
  var regexpExec$2 = patchedExec;
6233
6832
 
6234
- var $$3 = _export;
6833
+ var $$2 = _export;
6235
6834
  var exec = regexpExec$2;
6236
6835
 
6237
6836
  // `RegExp.prototype.exec` method
6238
6837
  // https://tc39.es/ecma262/#sec-regexp.prototype.exec
6239
- $$3({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
6838
+ $$2({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
6240
6839
  exec: exec
6241
6840
  });
6242
6841
 
@@ -6266,22 +6865,22 @@ var correctIsRegexpLogic = function (METHOD_NAME) {
6266
6865
  } return false;
6267
6866
  };
6268
6867
 
6269
- var $$2 = _export;
6270
- var uncurryThis$3 = functionUncurryThis;
6868
+ var $$1 = _export;
6869
+ var uncurryThis$2 = functionUncurryThis;
6271
6870
  var notARegExp = notARegexp;
6272
6871
  var requireObjectCoercible$4 = requireObjectCoercible$9;
6273
- var toString$6 = toString$c;
6872
+ var toString$5 = toString$c;
6274
6873
  var correctIsRegExpLogic = correctIsRegexpLogic;
6275
6874
 
6276
- var stringIndexOf = uncurryThis$3(''.indexOf);
6875
+ var stringIndexOf = uncurryThis$2(''.indexOf);
6277
6876
 
6278
6877
  // `String.prototype.includes` method
6279
6878
  // https://tc39.es/ecma262/#sec-string.prototype.includes
6280
- $$2({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
6879
+ $$1({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
6281
6880
  includes: function includes(searchString /* , position = 0 */) {
6282
6881
  return !!~stringIndexOf(
6283
- toString$6(requireObjectCoercible$4(this)),
6284
- toString$6(notARegExp(searchString)),
6882
+ toString$5(requireObjectCoercible$4(this)),
6883
+ toString$5(notARegExp(searchString)),
6285
6884
  arguments.length > 1 ? arguments[1] : undefined
6286
6885
  );
6287
6886
  }
@@ -6292,9 +6891,9 @@ $$2({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }
6292
6891
  var call$5 = functionCall;
6293
6892
  var defineBuiltIn = defineBuiltIn$8;
6294
6893
  var regexpExec$1 = regexpExec$2;
6295
- var fails$2 = fails$o;
6894
+ var fails$1 = fails$o;
6296
6895
  var wellKnownSymbol = wellKnownSymbol$j;
6297
- var createNonEnumerableProperty$3 = createNonEnumerableProperty$9;
6896
+ var createNonEnumerableProperty = createNonEnumerableProperty$9;
6298
6897
 
6299
6898
  var SPECIES = wellKnownSymbol('species');
6300
6899
  var RegExpPrototype = RegExp.prototype;
@@ -6302,14 +6901,14 @@ var RegExpPrototype = RegExp.prototype;
6302
6901
  var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) {
6303
6902
  var SYMBOL = wellKnownSymbol(KEY);
6304
6903
 
6305
- var DELEGATES_TO_SYMBOL = !fails$2(function () {
6904
+ var DELEGATES_TO_SYMBOL = !fails$1(function () {
6306
6905
  // String methods call symbol-named RegExp methods
6307
6906
  var O = {};
6308
6907
  O[SYMBOL] = function () { return 7; };
6309
6908
  return ''[KEY](O) !== 7;
6310
6909
  });
6311
6910
 
6312
- var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$2(function () {
6911
+ var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$1(function () {
6313
6912
  // Symbol-named RegExp methods call .exec
6314
6913
  var execCalled = false;
6315
6914
  var re = /a/;
@@ -6360,7 +6959,7 @@ var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) {
6360
6959
  defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);
6361
6960
  }
6362
6961
 
6363
- if (SHAM) createNonEnumerableProperty$3(RegExpPrototype[SYMBOL], 'sham', true);
6962
+ if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);
6364
6963
  };
6365
6964
 
6366
6965
  // `SameValue` abstract operation
@@ -6398,7 +6997,7 @@ var anObject$3 = anObject$g;
6398
6997
  var isNullOrUndefined$2 = isNullOrUndefined$7;
6399
6998
  var requireObjectCoercible$3 = requireObjectCoercible$9;
6400
6999
  var sameValue = sameValue$1;
6401
- var toString$5 = toString$c;
7000
+ var toString$4 = toString$c;
6402
7001
  var getMethod$2 = getMethod$6;
6403
7002
  var regExpExec$2 = regexpExecAbstract;
6404
7003
 
@@ -6410,13 +7009,13 @@ fixRegExpWellKnownSymbolLogic$2('search', function (SEARCH, nativeSearch, maybeC
6410
7009
  function search(regexp) {
6411
7010
  var O = requireObjectCoercible$3(this);
6412
7011
  var searcher = isNullOrUndefined$2(regexp) ? undefined : getMethod$2(regexp, SEARCH);
6413
- return searcher ? call$3(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString$5(O));
7012
+ return searcher ? call$3(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString$4(O));
6414
7013
  },
6415
7014
  // `RegExp.prototype[@@search]` method
6416
7015
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
6417
7016
  function (string) {
6418
7017
  var rx = anObject$3(this);
6419
- var S = toString$5(string);
7018
+ var S = toString$4(string);
6420
7019
  var res = maybeCallNative(nativeSearch, rx, S);
6421
7020
 
6422
7021
  if (res.done) return res.value;
@@ -6430,18 +7029,18 @@ fixRegExpWellKnownSymbolLogic$2('search', function (SEARCH, nativeSearch, maybeC
6430
7029
  ];
6431
7030
  });
6432
7031
 
6433
- var uncurryThis$2 = functionUncurryThis;
7032
+ var uncurryThis$1 = functionUncurryThis;
6434
7033
  var toIntegerOrInfinity = toIntegerOrInfinity$4;
6435
- var toString$4 = toString$c;
7034
+ var toString$3 = toString$c;
6436
7035
  var requireObjectCoercible$2 = requireObjectCoercible$9;
6437
7036
 
6438
- var charAt$1 = uncurryThis$2(''.charAt);
6439
- var charCodeAt = uncurryThis$2(''.charCodeAt);
6440
- var stringSlice$1 = uncurryThis$2(''.slice);
7037
+ var charAt$1 = uncurryThis$1(''.charAt);
7038
+ var charCodeAt = uncurryThis$1(''.charCodeAt);
7039
+ var stringSlice$1 = uncurryThis$1(''.slice);
6441
7040
 
6442
7041
  var createMethod = function (CONVERT_TO_STRING) {
6443
7042
  return function ($this, pos) {
6444
- var S = toString$4(requireObjectCoercible$2($this));
7043
+ var S = toString$3(requireObjectCoercible$2($this));
6445
7044
  var position = toIntegerOrInfinity(pos);
6446
7045
  var size = S.length;
6447
7046
  var first, second;
@@ -6476,7 +7075,7 @@ var advanceStringIndex$2 = function (S, index, unicode) {
6476
7075
  };
6477
7076
 
6478
7077
  var call$2 = functionCall;
6479
- var uncurryThis$1 = functionUncurryThis;
7078
+ var uncurryThis = functionUncurryThis;
6480
7079
  var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic;
6481
7080
  var anObject$2 = anObject$g;
6482
7081
  var isNullOrUndefined$1 = isNullOrUndefined$7;
@@ -6484,21 +7083,21 @@ var requireObjectCoercible$1 = requireObjectCoercible$9;
6484
7083
  var speciesConstructor = speciesConstructor$2;
6485
7084
  var advanceStringIndex$1 = advanceStringIndex$2;
6486
7085
  var toLength$1 = toLength$3;
6487
- var toString$3 = toString$c;
7086
+ var toString$2 = toString$c;
6488
7087
  var getMethod$1 = getMethod$6;
6489
7088
  var regExpExec$1 = regexpExecAbstract;
6490
7089
  var stickyHelpers = regexpStickyHelpers;
6491
- var fails$1 = fails$o;
7090
+ var fails = fails$o;
6492
7091
 
6493
7092
  var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
6494
7093
  var MAX_UINT32 = 0xFFFFFFFF;
6495
7094
  var min = Math.min;
6496
- var push = uncurryThis$1([].push);
6497
- var stringSlice = uncurryThis$1(''.slice);
7095
+ var push = uncurryThis([].push);
7096
+ var stringSlice = uncurryThis(''.slice);
6498
7097
 
6499
7098
  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
6500
7099
  // Weex JS has frozen built-in prototypes, so use try / catch wrapper
6501
- var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$1(function () {
7100
+ var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
6502
7101
  // eslint-disable-next-line regexp/no-empty-group -- required for testing
6503
7102
  var re = /(?:)/;
6504
7103
  var originalExec = re.exec;
@@ -6530,7 +7129,7 @@ fixRegExpWellKnownSymbolLogic$1('split', function (SPLIT, nativeSplit, maybeCall
6530
7129
  var splitter = isNullOrUndefined$1(separator) ? undefined : getMethod$1(separator, SPLIT);
6531
7130
  return splitter
6532
7131
  ? call$2(splitter, separator, O, limit)
6533
- : call$2(internalSplit, toString$3(O), separator, limit);
7132
+ : call$2(internalSplit, toString$2(O), separator, limit);
6534
7133
  },
6535
7134
  // `RegExp.prototype[@@split]` method
6536
7135
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
@@ -6539,7 +7138,7 @@ fixRegExpWellKnownSymbolLogic$1('split', function (SPLIT, nativeSplit, maybeCall
6539
7138
  // the 'y' flag.
6540
7139
  function (string, limit) {
6541
7140
  var rx = anObject$2(this);
6542
- var S = toString$3(string);
7141
+ var S = toString$2(string);
6543
7142
 
6544
7143
  if (!BUGGY) {
6545
7144
  var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
@@ -6644,11 +7243,11 @@ const SwitchButton = _a => {
6644
7243
 
6645
7244
  // TODO: Remove from `core-js@4` since it's moved to entry points
6646
7245
 
6647
- var $$1 = _export;
7246
+ var $ = _export;
6648
7247
  var call$1 = functionCall;
6649
7248
  var isCallable = isCallable$n;
6650
7249
  var anObject$1 = anObject$g;
6651
- var toString$2 = toString$c;
7250
+ var toString$1 = toString$c;
6652
7251
 
6653
7252
  var DELEGATES_TO_EXEC = function () {
6654
7253
  var execCalled = false;
@@ -6664,10 +7263,10 @@ var nativeTest = /./.test;
6664
7263
 
6665
7264
  // `RegExp.prototype.test` method
6666
7265
  // https://tc39.es/ecma262/#sec-regexp.prototype.test
6667
- $$1({ target: 'RegExp', proto: true, forced: !DELEGATES_TO_EXEC }, {
7266
+ $({ target: 'RegExp', proto: true, forced: !DELEGATES_TO_EXEC }, {
6668
7267
  test: function (S) {
6669
7268
  var R = anObject$1(this);
6670
- var string = toString$2(S);
7269
+ var string = toString$1(S);
6671
7270
  var exec = R.exec;
6672
7271
  if (!isCallable(exec)) return call$1(nativeTest, R, string);
6673
7272
  var result = call$1(exec, R, string);
@@ -6697,6 +7296,9 @@ const SearchFieldButton = ({
6697
7296
  onClickClear,
6698
7297
  setPopupIsOpen
6699
7298
  }) => {
7299
+ const {
7300
+ t
7301
+ } = useTranslation(SHARED_NAMESPACE);
6700
7302
  if (isURL(localSearchString)) {
6701
7303
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
6702
7304
  style: {
@@ -6707,7 +7309,7 @@ const SearchFieldButton = ({
6707
7309
  })), /*#__PURE__*/React__default.createElement(Button, {
6708
7310
  variant: "tertiary",
6709
7311
  onClick: () => setPopupIsOpen(true)
6710
- }, "Save"));
7312
+ }, t('shared-save')));
6711
7313
  }
6712
7314
  if (localSearchString) {
6713
7315
  return /*#__PURE__*/React__default.createElement(ClearButton, {
@@ -6715,19 +7317,23 @@ const SearchFieldButton = ({
6715
7317
  });
6716
7318
  }
6717
7319
  return /*#__PURE__*/React__default.createElement(CustomIconButton, {
6718
- tooltipTitle: "Search",
7320
+ tooltipTitle: t('shared-search'),
6719
7321
  sx: buttonStyle
6720
7322
  }, /*#__PURE__*/React__default.createElement(Search, null));
6721
7323
  };
6722
7324
 
6723
7325
  const SearchField = ({
6724
7326
  searchFilter,
6725
- label: _label = 'Search through services or enter a service URL',
7327
+ label,
6726
7328
  setSearchFilter,
6727
7329
  onOpenServicePopup
6728
7330
  }) => {
6729
7331
  const [localSearchString, setLocalSearchString] = React.useState('');
6730
7332
  const [urlIsValid, setUrlIsValid] = React.useState(false);
7333
+ const {
7334
+ t
7335
+ } = useTranslation(SHARED_NAMESPACE);
7336
+ const translatedLabel = label || t('shared-search-label');
6731
7337
  // eslint-disable-next-line react-hooks/exhaustive-deps
6732
7338
  const setSearchFilterDebounced = React.useCallback(debounce(setSearchFilter, 300), []);
6733
7339
  const handleChange = text => {
@@ -6768,7 +7374,7 @@ const SearchField = ({
6768
7374
  }, [searchFilter]);
6769
7375
  return /*#__PURE__*/React.createElement(TextField, {
6770
7376
  variant: "filled",
6771
- label: _label,
7377
+ label: translatedLabel,
6772
7378
  value: localSearchString,
6773
7379
  onChange: e => {
6774
7380
  handleChange(e.target.value);
@@ -6810,13 +7416,19 @@ const SearchField = ({
6810
7416
  * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
6811
7417
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
6812
7418
  * */
6813
- const BUTTON_TITLE = 'Click to refresh';
6814
- const getLastUpdateTitle = time => `Last updated ${time}`;
7419
+ const getLastUpdateTitle = (time, t) => {
7420
+ return t('shared-last-updated', {
7421
+ time
7422
+ });
7423
+ };
6815
7424
  const LastUpdateTime = ({
6816
7425
  onPressRefresh: _onPressRefresh = () => {},
6817
7426
  lastUpdateTime,
6818
7427
  dataTestId
6819
7428
  }) => {
7429
+ const {
7430
+ t
7431
+ } = useTranslation(SHARED_NAMESPACE);
6820
7432
  return /*#__PURE__*/React__default.createElement(Box, {
6821
7433
  sx: {
6822
7434
  display: 'flex',
@@ -6832,7 +7444,7 @@ const LastUpdateTime = ({
6832
7444
  letterSpacing: '0.33px'
6833
7445
  },
6834
7446
  "data-testid": dataTestId
6835
- }, getLastUpdateTitle(lastUpdateTime)), /*#__PURE__*/React__default.createElement(CustomIconButton, {
7447
+ }, getLastUpdateTitle(lastUpdateTime, t)), /*#__PURE__*/React__default.createElement(CustomIconButton, {
6836
7448
  "data-testid": "refresh-button",
6837
7449
  onClick: _onPressRefresh,
6838
7450
  sx: {
@@ -6842,7 +7454,7 @@ const LastUpdateTime = ({
6842
7454
  },
6843
7455
  marginLeft: 1
6844
7456
  },
6845
- tooltipTitle: BUTTON_TITLE,
7457
+ tooltipTitle: t('shared-click-to-refresh'),
6846
7458
  variant: "tool"
6847
7459
  }, /*#__PURE__*/React__default.createElement(Cached, null)));
6848
7460
  };
@@ -7260,186 +7872,6 @@ const getWarningMessage = error => {
7260
7872
  return '';
7261
7873
  };
7262
7874
 
7263
- var toString$1 = toString$c;
7264
-
7265
- var normalizeStringArgument$1 = function (argument, $default) {
7266
- return argument === undefined ? arguments.length < 2 ? '' : $default : toString$1(argument);
7267
- };
7268
-
7269
- var isObject = isObject$e;
7270
- var createNonEnumerableProperty$2 = createNonEnumerableProperty$9;
7271
-
7272
- // `InstallErrorCause` abstract operation
7273
- // https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause
7274
- var installErrorCause$1 = function (O, options) {
7275
- if (isObject(options) && 'cause' in options) {
7276
- createNonEnumerableProperty$2(O, 'cause', options.cause);
7277
- }
7278
- };
7279
-
7280
- var uncurryThis = functionUncurryThis;
7281
-
7282
- var $Error = Error;
7283
- var replace = uncurryThis(''.replace);
7284
-
7285
- var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');
7286
- // eslint-disable-next-line redos/no-vulnerable -- safe
7287
- var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
7288
- var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
7289
-
7290
- var errorStackClear = function (stack, dropEntries) {
7291
- if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
7292
- while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
7293
- } return stack;
7294
- };
7295
-
7296
- var fails = fails$o;
7297
- var createPropertyDescriptor = createPropertyDescriptor$4;
7298
-
7299
- var errorStackInstallable = !fails(function () {
7300
- var error = new Error('a');
7301
- if (!('stack' in error)) return true;
7302
- // eslint-disable-next-line es/no-object-defineproperty -- safe
7303
- Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
7304
- return error.stack !== 7;
7305
- });
7306
-
7307
- var createNonEnumerableProperty$1 = createNonEnumerableProperty$9;
7308
- var clearErrorStack = errorStackClear;
7309
- var ERROR_STACK_INSTALLABLE = errorStackInstallable;
7310
-
7311
- // non-standard V8
7312
- var captureStackTrace = Error.captureStackTrace;
7313
-
7314
- var errorStackInstall = function (error, C, stack, dropEntries) {
7315
- if (ERROR_STACK_INSTALLABLE) {
7316
- if (captureStackTrace) captureStackTrace(error, C);
7317
- else createNonEnumerableProperty$1(error, 'stack', clearErrorStack(stack, dropEntries));
7318
- }
7319
- };
7320
-
7321
- var getBuiltIn = getBuiltIn$8;
7322
- var hasOwn = hasOwnProperty_1;
7323
- var createNonEnumerableProperty = createNonEnumerableProperty$9;
7324
- var isPrototypeOf = objectIsPrototypeOf;
7325
- var setPrototypeOf = objectSetPrototypeOf;
7326
- var copyConstructorProperties = copyConstructorProperties$3;
7327
- var proxyAccessor = proxyAccessor$2;
7328
- var inheritIfRequired = inheritIfRequired$2;
7329
- var normalizeStringArgument = normalizeStringArgument$1;
7330
- var installErrorCause = installErrorCause$1;
7331
- var installErrorStack = errorStackInstall;
7332
- var DESCRIPTORS = descriptors;
7333
-
7334
- var wrapErrorConstructorWithCause$1 = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
7335
- var STACK_TRACE_LIMIT = 'stackTraceLimit';
7336
- var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
7337
- var path = FULL_NAME.split('.');
7338
- var ERROR_NAME = path[path.length - 1];
7339
- var OriginalError = getBuiltIn.apply(null, path);
7340
-
7341
- if (!OriginalError) return;
7342
-
7343
- var OriginalErrorPrototype = OriginalError.prototype;
7344
-
7345
- // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006
7346
- if (hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;
7347
-
7348
- if (!FORCED) return OriginalError;
7349
-
7350
- var BaseError = getBuiltIn('Error');
7351
-
7352
- var WrappedError = wrapper(function (a, b) {
7353
- var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);
7354
- var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
7355
- if (message !== undefined) createNonEnumerableProperty(result, 'message', message);
7356
- installErrorStack(result, WrappedError, result.stack, 2);
7357
- if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
7358
- if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
7359
- return result;
7360
- });
7361
-
7362
- WrappedError.prototype = OriginalErrorPrototype;
7363
-
7364
- if (ERROR_NAME !== 'Error') {
7365
- if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
7366
- else copyConstructorProperties(WrappedError, BaseError, { name: true });
7367
- } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
7368
- proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
7369
- proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');
7370
- }
7371
-
7372
- copyConstructorProperties(WrappedError, OriginalError);
7373
-
7374
- try {
7375
- // Safari 13- bug: WebAssembly errors does not have a proper `.name`
7376
- if (OriginalErrorPrototype.name !== ERROR_NAME) {
7377
- createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);
7378
- }
7379
- OriginalErrorPrototype.constructor = WrappedError;
7380
- } catch (error) { /* empty */ }
7381
-
7382
- return WrappedError;
7383
- };
7384
-
7385
- /* eslint-disable no-unused-vars -- required for functions `.length` */
7386
- var $ = _export;
7387
- var global$1 = global$p;
7388
- var apply = functionApply;
7389
- var wrapErrorConstructorWithCause = wrapErrorConstructorWithCause$1;
7390
-
7391
- var WEB_ASSEMBLY = 'WebAssembly';
7392
- var WebAssembly = global$1[WEB_ASSEMBLY];
7393
-
7394
- // eslint-disable-next-line es/no-error-cause -- feature detection
7395
- var FORCED = new Error('e', { cause: 7 }).cause !== 7;
7396
-
7397
- var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
7398
- var O = {};
7399
- O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
7400
- $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
7401
- };
7402
-
7403
- var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {
7404
- if (WebAssembly && WebAssembly[ERROR_NAME]) {
7405
- var O = {};
7406
- O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);
7407
- $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
7408
- }
7409
- };
7410
-
7411
- // https://tc39.es/ecma262/#sec-nativeerror
7412
- exportGlobalErrorCauseWrapper('Error', function (init) {
7413
- return function Error(message) { return apply(init, this, arguments); };
7414
- });
7415
- exportGlobalErrorCauseWrapper('EvalError', function (init) {
7416
- return function EvalError(message) { return apply(init, this, arguments); };
7417
- });
7418
- exportGlobalErrorCauseWrapper('RangeError', function (init) {
7419
- return function RangeError(message) { return apply(init, this, arguments); };
7420
- });
7421
- exportGlobalErrorCauseWrapper('ReferenceError', function (init) {
7422
- return function ReferenceError(message) { return apply(init, this, arguments); };
7423
- });
7424
- exportGlobalErrorCauseWrapper('SyntaxError', function (init) {
7425
- return function SyntaxError(message) { return apply(init, this, arguments); };
7426
- });
7427
- exportGlobalErrorCauseWrapper('TypeError', function (init) {
7428
- return function TypeError(message) { return apply(init, this, arguments); };
7429
- });
7430
- exportGlobalErrorCauseWrapper('URIError', function (init) {
7431
- return function URIError(message) { return apply(init, this, arguments); };
7432
- });
7433
- exportWebAssemblyErrorCauseWrapper('CompileError', function (init) {
7434
- return function CompileError(message) { return apply(init, this, arguments); };
7435
- });
7436
- exportWebAssemblyErrorCauseWrapper('LinkError', function (init) {
7437
- return function LinkError(message) { return apply(init, this, arguments); };
7438
- });
7439
- exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {
7440
- return function RuntimeError(message) { return apply(init, this, arguments); };
7441
- });
7442
-
7443
7875
  var call = functionCall;
7444
7876
  var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic;
7445
7877
  var anObject = anObject$g;
@@ -7488,7 +7920,29 @@ fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNa
7488
7920
  ];
7489
7921
  });
7490
7922
 
7923
+ /* *
7924
+ * Licensed under the Apache License, Version 2.0 (the "License");
7925
+ * you may not use this file except in compliance with the License.
7926
+ * You may obtain a copy of the License at
7927
+ *
7928
+ * http://www.apache.org/licenses/LICENSE-2.0
7929
+ *
7930
+ * Unless required by applicable law or agreed to in writing, software
7931
+ * distributed under the License is distributed on an "AS IS" BASIS,
7932
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7933
+ * See the License for the specific language governing permissions and
7934
+ * limitations under the License.
7935
+ *
7936
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7937
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
7938
+ * */
7939
+ const DATE_FORMAT_DATEPICKER = 'dd/MM/yyyy HH:mm';
7491
7940
  const DATE_FORMAT_UTC = "yyyy-MM-dd'T'HH:mm:ss'Z'";
7941
+ const DATE_FORMAT_YEAR = 'yyyy-MM-dd';
7942
+ const DATE_FORMAT_HOURS = 'HH:mm';
7943
+ const DATE_FORMAT_NAME_OF_DAY_MONTH = 'eee dd MMM HH:mm';
7944
+ const DATE_FORMAT_NAME_OF_MONTH = 'dd MMM yyyy, HH:mm';
7945
+
7492
7946
  /**
7493
7947
  * Parsing date strings with geoweb dateUtils:
7494
7948
  *
@@ -7555,6 +8009,12 @@ const isoStringToDate = (input, utc = true) => {
7555
8009
  }
7556
8010
  return parsed;
7557
8011
  };
8012
+ const isValidIsoDateString = input => {
8013
+ if (!input) {
8014
+ return true;
8015
+ }
8016
+ return isoStringToDate(input) !== undefined;
8017
+ };
7558
8018
  /**
7559
8019
  * Parse a string to a date
7560
8020
  *
@@ -8007,6 +8467,46 @@ const startOfYearUTC = date => {
8007
8467
  milliseconds: 0
8008
8468
  });
8009
8469
  };
8470
+ // TODO - IF TODAY time is going to be used, we need to edit this to handle the time.
8471
+ // - now.getTimezoneOffset(); by subtracting the timezone offset, this can be used to convert the time to similar to UTC, because startOfDay retuns values in local time with offset
8472
+ /**
8473
+ * Parse custom time format of NOW+current time | current date in UTC. The result will be in UTC.
8474
+ * @param timeValue - string value
8475
+ * @returns Time in UTC format
8476
+ */
8477
+ const convertNOWFormatToUTC = timeValue => {
8478
+ const now = new Date();
8479
+ const today = startOfDay(now);
8480
+ const regex = /(NOW|TODAY)([\+\-])PT(\d+)H(\d+)M/;
8481
+ const matches = timeValue.match(regex);
8482
+ if (matches) {
8483
+ const base = matches[1] === 'NOW' ? now : today;
8484
+ const sign = matches[2] === '+' ? 1 : -1;
8485
+ const hours = parseInt(matches[3], 10);
8486
+ const minutes = parseInt(matches[4], 10);
8487
+ return addMinutes(addHours(base, sign * hours), sign * minutes).toISOString();
8488
+ }
8489
+ throw new Error('Invalid endTime format');
8490
+ };
8491
+ /**
8492
+ * Parse custom time format of NOW+-hours and minutes || TODAY+-hours and minutes into UTC. The result will be in UTC.
8493
+ * @param timeValue - string value
8494
+ * @returns Time in UTC format
8495
+ */
8496
+ const convertNOWandTODAYFormatsToUTC = timeValue => {
8497
+ const now = new Date();
8498
+ const today = startOfDayUTC(now);
8499
+ const regex = /(NOW|TODAY)([\+\-])PT(\d+)H(\d+)M/;
8500
+ const matches = timeValue.match(regex);
8501
+ if (matches) {
8502
+ const base = matches[1] === 'NOW' ? now : today;
8503
+ const sign = matches[2] === '+' ? 1 : -1;
8504
+ const hours = parseInt(matches[3], 10);
8505
+ const minutes = parseInt(matches[4], 10);
8506
+ return addMinutes(addHours(base, sign * hours), sign * minutes).toISOString();
8507
+ }
8508
+ throw new Error('Invalid endTime format');
8509
+ };
8010
8510
 
8011
8511
  /* *
8012
8512
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -8026,47 +8526,57 @@ const startOfYearUTC = date => {
8026
8526
  * */
8027
8527
 
8028
8528
  var index = /*#__PURE__*/Object.freeze({
8029
- __proto__: null,
8030
- isoStringToDate: isoStringToDate,
8031
- stringToDate: stringToDate,
8032
- dateToIsoString: dateToIsoString,
8033
- setUTCDate: setUTCDate,
8034
- dateToString: dateToString,
8035
- isBetween: isBetween,
8036
- createDate: createDate,
8037
- add: add,
8038
- sub: sub,
8039
- differenceInYears: differenceInYears,
8040
- differenceInMonths: differenceInMonths,
8041
- differenceInDays: differenceInDays,
8042
- differenceInMinutes: differenceInMinutes,
8043
- differenceInHours: differenceInHours,
8044
- differenceInSeconds: differenceInSeconds,
8045
- isBefore: isBefore,
8046
- isAfter: isAfter,
8047
- utc: utc,
8048
- getUtcFromString: getUtcFromString,
8049
- isValid: isValid,
8050
- unix: unix,
8051
- fromUnix: fromUnix,
8052
- parseCustomDateString: parseCustomDateString,
8053
- getNowUtc: getNowUtc,
8054
- getCurrentTimeAsString: getCurrentTimeAsString,
8055
- set: set,
8056
- getHours: getHours,
8057
- startOfHourUTC: startOfHourUTC,
8058
- startOfDayUTC: startOfDayUTC,
8059
- startOfWeekUTC: startOfWeekUTC,
8060
- startOfMonthUTC: startOfMonthUTC,
8061
- startOfYearUTC: startOfYearUTC,
8062
- isEqual: isEqual,
8063
- startOfDay: startOfDay,
8064
- parseISO: parseISO,
8065
- isWithinInterval: isWithinInterval,
8066
- getDay: getDay,
8067
- getMonth: getMonth,
8068
- getYear: getYear,
8069
- getWeek: getWeek
8529
+ __proto__: null,
8530
+ isoStringToDate: isoStringToDate,
8531
+ isValidIsoDateString: isValidIsoDateString,
8532
+ stringToDate: stringToDate,
8533
+ dateToIsoString: dateToIsoString,
8534
+ setUTCDate: setUTCDate,
8535
+ dateToString: dateToString,
8536
+ isBetween: isBetween,
8537
+ createDate: createDate,
8538
+ add: add,
8539
+ sub: sub,
8540
+ differenceInYears: differenceInYears,
8541
+ differenceInMonths: differenceInMonths,
8542
+ differenceInDays: differenceInDays,
8543
+ differenceInMinutes: differenceInMinutes,
8544
+ differenceInHours: differenceInHours,
8545
+ differenceInSeconds: differenceInSeconds,
8546
+ isBefore: isBefore,
8547
+ isAfter: isAfter,
8548
+ utc: utc,
8549
+ getUtcFromString: getUtcFromString,
8550
+ isValid: isValid,
8551
+ unix: unix,
8552
+ fromUnix: fromUnix,
8553
+ parseCustomDateString: parseCustomDateString,
8554
+ getNowUtc: getNowUtc,
8555
+ getCurrentTimeAsString: getCurrentTimeAsString,
8556
+ set: set,
8557
+ getHours: getHours,
8558
+ startOfHourUTC: startOfHourUTC,
8559
+ startOfDayUTC: startOfDayUTC,
8560
+ startOfWeekUTC: startOfWeekUTC,
8561
+ startOfMonthUTC: startOfMonthUTC,
8562
+ startOfYearUTC: startOfYearUTC,
8563
+ convertNOWFormatToUTC: convertNOWFormatToUTC,
8564
+ convertNOWandTODAYFormatsToUTC: convertNOWandTODAYFormatsToUTC,
8565
+ isEqual: isEqual,
8566
+ startOfDay: startOfDay,
8567
+ parseISO: parseISO,
8568
+ isWithinInterval: isWithinInterval,
8569
+ getDayOfYear: getDayOfYear,
8570
+ getDay: getDay,
8571
+ getMonth: getMonth,
8572
+ getYear: getYear,
8573
+ getWeek: getWeek,
8574
+ DATE_FORMAT_DATEPICKER: DATE_FORMAT_DATEPICKER,
8575
+ DATE_FORMAT_UTC: DATE_FORMAT_UTC,
8576
+ DATE_FORMAT_YEAR: DATE_FORMAT_YEAR,
8577
+ DATE_FORMAT_HOURS: DATE_FORMAT_HOURS,
8578
+ DATE_FORMAT_NAME_OF_DAY_MONTH: DATE_FORMAT_NAME_OF_DAY_MONTH,
8579
+ DATE_FORMAT_NAME_OF_MONTH: DATE_FORMAT_NAME_OF_MONTH
8070
8580
  });
8071
8581
 
8072
8582
  /* *
@@ -8112,39 +8622,6 @@ const createToolkitMockStoreWithEggs = storeConfig => {
8112
8622
  return store;
8113
8623
  };
8114
8624
 
8115
- /**
8116
- * Update i18next translations on the fly when used outside React components
8117
- * NOTE: If possible pass the `t` function instead of using this
8118
- * Because this doesnt trigger a rerender when using a language select
8119
- * This only works for simple values, no interpolation
8120
- */
8121
- const handleOutsideComponentTranslations = (translationList, namespace, defaultLanguage = 'en') => {
8122
- var _a;
8123
- // we need to create a new object, do not reference the original list directly
8124
- const outsideComponentTranslations = Object.assign({}, translationList[defaultLanguage]);
8125
- const updateOutsideComponentTranslations = () => {
8126
- Object.keys(outsideComponentTranslations).forEach(key => {
8127
- // @ts-expect-error we need to reassign the translations
8128
- outsideComponentTranslations[key] = i18next.t(key, {
8129
- ns: namespace
8130
- });
8131
- });
8132
- };
8133
- if (i18next.isInitialized) {
8134
- updateOutsideComponentTranslations();
8135
- }
8136
- i18next.on('initialized', () => {
8137
- updateOutsideComponentTranslations();
8138
- });
8139
- i18next.on('languageChanged', () => {
8140
- updateOutsideComponentTranslations();
8141
- });
8142
- (_a = i18next.store) === null || _a === void 0 ? void 0 : _a.on('added', () => {
8143
- updateOutsideComponentTranslations();
8144
- });
8145
- return outsideComponentTranslations;
8146
- };
8147
-
8148
8625
  /* *
8149
8626
  * Licensed under the Apache License, Version 2.0 (the "License");
8150
8627
  * you may not use this file except in compliance with the License.
@@ -8193,4 +8670,4 @@ class RenderCounter {
8193
8670
  }
8194
8671
  const renderCounter = new RenderCounter();
8195
8672
 
8196
- export { AlertBanner, AlertIcon, AppHeader, AppLayout, Avatar, BUTTON_TITLE, CanvasComponent, ConfirmationDialog, ConfirmationServiceProvider, CustomAccordion, CustomDialog, CustomIconButton, CustomSlider, CustomToggleButton, CustomTooltip, DEFAULT_ERROR_MESSAGE, DraggableComponent$1 as Draggable, ErrorBoundary, LastUpdateTime, ResizeComponent as Resizable, SearchField, SearchFieldButton, SearchHighlight, StatusTag, SwitchButton, ToggleMenu, ToolContainer, DraggableComponent as ToolContainerDraggable, ToolFooter, ToolHeader, TooltipSelect, UserMenu, UserMenuItemCheatSheet, MenuItemTheme as UserMenuItemTheme, adjustPosition, calculateDialogSizeAndPosition, calculateStartSize, createMockStoreWithEggs, createMockStoreWithEggsAndMiddleware, createToolkitMockStoreWithEggs, index as dateUtils, defaultDelay, getAxiosErrorMessage, getAxiosWarningMessage, getErrorMessage, getInitials, getLastUpdateTitle, getPosition, getWarningMessage, handleOutsideComponentTranslations, isAxiosError, pollingIntervalTimeout, renderCounter, showPrompt, sliderHeaderStyle, tooltipContainerStyles, useConfirmationDialog, useControlledTooltip, useDebounce, useDialogActions, useIsMounted, useMakeSureContainerStaysInsideWindow, usePoller, usePreventBrowserClose, usePrevious, useUserMenu, withEggs };
8673
+ export { AlertBanner, AlertIcon, AppHeader, AppLayout, Avatar, CanvasComponent, ConfirmationDialog, ConfirmationServiceProvider, CustomAccordion, CustomDialog, CustomIconButton, CustomSlider, CustomToggleButton, CustomTooltip, DEFAULT_ERROR_MESSAGE, DraggableComponent$1 as Draggable, ErrorBoundary, LastUpdateTime, ResizeComponent as Resizable, SHARED_NAMESPACE, SearchField, SearchFieldButton, SearchHighlight, StatusTag, SwitchButton, ToggleMenu, ToolContainer, DraggableComponent as ToolContainerDraggable, ToolFooter, ToolHeader, TooltipSelect, UserMenu, UserMenuItemCheatSheet, UserMenuItemSentryRecording, MenuItemTheme as UserMenuItemTheme, adjustPosition, calculateDialogSizeAndPosition, calculateStartSize, createMockStoreWithEggs, createMockStoreWithEggsAndMiddleware, createToolkitMockStoreWithEggs, index as dateUtils, defaultDelay, getAxiosErrorMessage, getAxiosWarningMessage, getErrorMessage, getInitials, getLastUpdateTitle, getPosition, getWarningMessage, initSharedI18n, isAxiosError, pollingIntervalTimeout, renderCounter, sharedTranslations, showPrompt, sliderHeaderStyle, tooltipContainerStyles, translateKeyOutsideComponents, useConfirmationDialog, useControlledTooltip, useDebounce, useDialogActions, useIsMounted, useMakeSureContainerStaysInsideWindow, usePoller, usePreventBrowserClose, usePrevious, useUserMenu, withEggs };