@commercetools-frontend/staff-bar 0.0.0-FEC-212-react19-20250122084835

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.
@@ -0,0 +1,999 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
4
+ var react = require('react');
5
+ var react$1 = require('@emotion/react');
6
+ var ReactDOM = require('react-dom');
7
+ var uiKit = require('@commercetools-frontend/ui-kit');
8
+ var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
9
+ var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
10
+ var _flatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/flat');
11
+ var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
12
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
13
+ var jsxRuntime = require('@emotion/react/jsx-runtime');
14
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
15
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
16
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
17
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
18
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
19
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
20
+ var _Object$entries = require('@babel/runtime-corejs3/core-js-stable/object/entries');
21
+ var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
22
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
23
+ var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
24
+ var isEqual = require('lodash/isEqual');
25
+ var applicationComponents = require('@commercetools-frontend/application-components');
26
+ var applicationShell = require('@commercetools-frontend/application-shell');
27
+ var constants = require('@commercetools-frontend/constants');
28
+ var applicationShellConnectors = require('@commercetools-frontend/application-shell-connectors');
29
+ var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
30
+ require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
31
+ require('@babel/runtime-corejs3/helpers/classCallCheck');
32
+ require('@babel/runtime-corejs3/helpers/createClass');
33
+ require('@babel/runtime-corejs3/helpers/possibleConstructorReturn');
34
+ require('@babel/runtime-corejs3/helpers/getPrototypeOf');
35
+ require('@babel/runtime-corejs3/helpers/inherits');
36
+ var _URLSearchParams = require('@babel/runtime-corejs3/core-js-stable/url-search-params');
37
+ var reactRouterDom = require('react-router-dom');
38
+ var sortBy = require('lodash/sortBy');
39
+
40
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
41
+
42
+ var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
43
+ var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
44
+ var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
45
+ var _flatInstanceProperty__default = /*#__PURE__*/_interopDefault(_flatInstanceProperty);
46
+ var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
47
+ var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
48
+ var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
49
+ var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
50
+ var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
51
+ var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
52
+ var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
53
+ var _Object$entries__default = /*#__PURE__*/_interopDefault(_Object$entries);
54
+ var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
55
+ var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
56
+ var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
57
+ var isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
58
+ var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
59
+ var _URLSearchParams__default = /*#__PURE__*/_interopDefault(_URLSearchParams);
60
+ var sortBy__default = /*#__PURE__*/_interopDefault(sortBy);
61
+
62
+ var config = {
63
+ AmazonWebServicesATT: {
64
+ MerchantCenterFrontend: {
65
+ url: "https://mc.att.us-east-1.aws.commercetools.com"
66
+ }
67
+ },
68
+ AmazonWebServicesEurope: {
69
+ MerchantCenterFrontend: {
70
+ url: "https://mc.eu-central-1.aws.commercetools.com"
71
+ }
72
+ },
73
+ AmazonWebServicesUnitedStates: {
74
+ MerchantCenterFrontend: {
75
+ url: "https://mc.us-east-2.aws.commercetools.com"
76
+ }
77
+ },
78
+ AmazonWebServicesVolkswagen: {
79
+ MerchantCenterFrontend: {
80
+ url: "https://mc.vw.eu-central-1.aws.commercetools.com"
81
+ }
82
+ },
83
+ AmazonWebServicesVolkswagenStaging: {
84
+ MerchantCenterFrontend: {
85
+ url: "https://mc.vw-stage.eu-central-1.aws.commercetools.com"
86
+ }
87
+ },
88
+ GoogleCloudPlatformAustralia: {
89
+ MerchantCenterFrontend: {
90
+ url: "https://mc.australia-southeast1.gcp.commercetools.com"
91
+ }
92
+ },
93
+ GoogleCloudPlatformEurope: {
94
+ MerchantCenterFrontend: {
95
+ url: "https://mc.europe-west1.gcp.commercetools.com"
96
+ }
97
+ },
98
+ GoogleCloudPlatformEuropeStaging: {
99
+ MerchantCenterFrontend: {
100
+ url: "https://mc.europe-west1.gcp.escemo.com"
101
+ }
102
+ },
103
+ GoogleCloudPlatformUnitedStates: {
104
+ MerchantCenterFrontend: {
105
+ url: "https://mc.us-central1.gcp.commercetools.com"
106
+ }
107
+ },
108
+ "default": {
109
+ }
110
+ };
111
+
112
+ var _context, _context2, _context3;
113
+ const LOCAL_ENV = {
114
+ label: 'Local Dev',
115
+ value: 'http://localhost:3001'
116
+ };
117
+ const PREVIEW_BRANCH = {
118
+ label: 'Preview Branch',
119
+ value: ''
120
+ };
121
+ const IS_STAFFBAR_OPEN = 'isStaffBarOpen';
122
+
123
+ // Type guard to help with filtering arrays for nullish elements.
124
+ function nonNullable(value) {
125
+ return value !== null && value !== undefined;
126
+ }
127
+ const getOptionsForEnvironment = (label, config) => {
128
+ return {
129
+ label,
130
+ value: config.MerchantCenterFrontend.url
131
+ };
132
+ };
133
+ const GCP = _filterInstanceProperty__default["default"](_context = [getOptionsForEnvironment('GCP Australia', config.GoogleCloudPlatformAustralia), getOptionsForEnvironment('GCP Europe', config.GoogleCloudPlatformEurope), getOptionsForEnvironment('GCP USA', config.GoogleCloudPlatformUnitedStates), getOptionsForEnvironment('GCP Europe (Staging)', config.GoogleCloudPlatformEuropeStaging)]).call(_context, nonNullable);
134
+ const AWS = _filterInstanceProperty__default["default"](_context2 = [getOptionsForEnvironment('AWS EU', config.AmazonWebServicesEurope), getOptionsForEnvironment('AWS US', config.AmazonWebServicesUnitedStates)]).call(_context2, nonNullable);
135
+ const PRIVATE = _filterInstanceProperty__default["default"](_context3 = [getOptionsForEnvironment('AWS AT&T', config.AmazonWebServicesATT), getOptionsForEnvironment('AWS Volkswagen', config.AmazonWebServicesVolkswagen), getOptionsForEnvironment('AWS Volkswagen (Staging)', config.AmazonWebServicesVolkswagenStaging)]).call(_context3, nonNullable);
136
+ const ENV = [{
137
+ options: GCP,
138
+ group: 'GCP'
139
+ }, {
140
+ options: AWS,
141
+ group: 'AWS'
142
+ }, {
143
+ options: PRIVATE,
144
+ group: 'Private'
145
+ }];
146
+
147
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$5() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
148
+ var _ref$5 = process.env.NODE_ENV === "production" ? {
149
+ name: "10r8dle",
150
+ styles: "width:206px"
151
+ } : {
152
+ name: "mnd5nn-EnvironmentSwitcher",
153
+ styles: "width:206px;label:EnvironmentSwitcher;",
154
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudmlyb25tZW50LXN3aXRjaGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQ2dCIiwiZmlsZSI6ImVudmlyb25tZW50LXN3aXRjaGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBTZWxlY3RJbnB1dCwgU3BhY2luZ3MsIFRleHQgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnO1xuaW1wb3J0IHsgRU5WLCBMT0NBTF9FTlYsIFBSRVZJRVdfQlJBTkNIIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBFbnZpcm9ubWVudFN3aXRjaGVyID0gKCkgPT4ge1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VVJMID0gd2luZG93Py5sb2NhdGlvbj8ub3JpZ2luO1xuICAgIGlmIChjdXJyZW50VVJMID09PSBMT0NBTF9FTlYudmFsdWUpIHtcbiAgICAgIEVOVlswXT8ub3B0aW9ucy51bnNoaWZ0KExPQ0FMX0VOVik7XG4gICAgfVxuICAgIGlmIChjdXJyZW50VVJMLmluY2x1ZGVzKCdwcmV2aWV3JykpIHtcbiAgICAgIEVOVlswXT8ub3B0aW9ucy51bnNoaWZ0KFBSRVZJRVdfQlJBTkNIKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRVUkwuaW5jbHVkZXMoJ3ByZXZpZXcnKSkge1xuICAgICAgc2V0VmFsdWUoJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZShcbiAgICAgICAgRU5WLm1hcCgoeyBvcHRpb25zIH0pID0+IG9wdGlvbnMpXG4gICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgIC5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBjdXJyZW50VVJMKT8udmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNwYWNpbmdzLklubGluZSBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICA8VGV4dC5EZXRhaWw+RW52aXJvbm1lbnQ8L1RleHQuRGV0YWlsPlxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICB3aWR0aDogMjA2cHg7XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxTZWxlY3RJbnB1dFxuICAgICAgICAgIGlkPXsnZW52LXNlbGVjdG9yJ31cbiAgICAgICAgICBuYW1lPXsnZW52IHNlbGVjdG9yJ31cbiAgICAgICAgICBpc1NlYXJjaGFibGU9e3RydWV9XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9ezV9XG4gICAgICAgICAgbWVudVBvcnRhbFRhcmdldD17ZG9jdW1lbnQuYm9keX1cbiAgICAgICAgICBtZW51UG9ydGFsWkluZGV4PXszMDAwMH1cbiAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzZXRWYWx1ZShldmVudC50YXJnZXQudmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4oZXZlbnQudGFyZ2V0LnZhbHVlIGFzIHN0cmluZywgJ19zZWxmJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgb3B0aW9ucz17RU5WfVxuICAgICAgICAgIHNob3dPcHRpb25Hcm91cERpdmlkZXJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvU3BhY2luZ3MuSW5saW5lPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRTd2l0Y2hlcjtcbiJdfQ== */",
155
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$5
156
+ };
157
+ const EnvironmentSwitcher = () => {
158
+ const _useState = react.useState(),
159
+ _useState2 = _slicedToArray(_useState, 2),
160
+ value = _useState2[0],
161
+ setValue = _useState2[1];
162
+ react.useEffect(() => {
163
+ const currentURL = window?.location?.origin;
164
+ if (currentURL === LOCAL_ENV.value) {
165
+ ENV[0]?.options.unshift(LOCAL_ENV);
166
+ }
167
+ if (_includesInstanceProperty__default["default"](currentURL).call(currentURL, 'preview')) {
168
+ ENV[0]?.options.unshift(PREVIEW_BRANCH);
169
+ }
170
+ if (_includesInstanceProperty__default["default"](currentURL).call(currentURL, 'preview')) {
171
+ setValue('');
172
+ } else {
173
+ var _context, _context2;
174
+ setValue(_findInstanceProperty__default["default"](_context = _flatInstanceProperty__default["default"](_context2 = _mapInstanceProperty__default["default"](ENV).call(ENV, _ref2 => {
175
+ let options = _ref2.options;
176
+ return options;
177
+ })).call(_context2)).call(_context, _ref3 => {
178
+ let value = _ref3.value;
179
+ return value === currentURL;
180
+ })?.value);
181
+ }
182
+ // eslint-disable-next-line react-hooks/exhaustive-deps
183
+ }, []);
184
+ return jsxRuntime.jsxs(uiKit.Spacings.Inline, {
185
+ alignItems: "center",
186
+ children: [jsxRuntime.jsx(uiKit.Text.Detail, {
187
+ children: "Environment"
188
+ }), jsxRuntime.jsx("div", {
189
+ css: _ref$5,
190
+ children: jsxRuntime.jsx(uiKit.SelectInput, {
191
+ id: 'env-selector',
192
+ name: 'env selector',
193
+ isSearchable: true,
194
+ horizontalConstraint: 5,
195
+ menuPortalTarget: document.body,
196
+ menuPortalZIndex: 30000,
197
+ onChange: event => {
198
+ setValue(event.target.value);
199
+ if (event.target.value) {
200
+ window.open(event.target.value, '_self');
201
+ }
202
+ },
203
+ value: value,
204
+ options: ENV,
205
+ showOptionGroupDivider: true
206
+ })
207
+ })]
208
+ });
209
+ };
210
+
211
+ const GITHUB_PR_URL = 'https://github.com/commercetools/merchant-center-frontend/pull/';
212
+ // Session storage keys
213
+ const FEATURE_FLAG_KEY = 'toggled-feature-flags';
214
+ const ACTIVE_TEAM_ID_KEY = 'activeTeamId';
215
+ const ENABLE_LOG_KEY = 'enable-log';
216
+ const USER_ROLES_WITH_ALLOWED_ACCESS = ['Engineer', 'ProductProjectManagerOrOwner'];
217
+
218
+ var FetchStaffBarUser = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "FetchStaffBarUser" }, variableDefinitions: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", alias: { kind: "Name", value: "user" }, name: { kind: "Name", value: "me" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "launchdarklyTrackingGroup" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "launchdarklyTrackingSubgroup" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "businessRole" }, arguments: [], directives: [] }] } }] } }], loc: { start: 0, end: 132, source: { body: "query FetchStaffBarUser {\n user: me {\n id\n launchdarklyTrackingGroup\n launchdarklyTrackingSubgroup\n businessRole\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
219
+ const useStaffBarUser = () => {
220
+ const _useMcQuery = applicationShell.useMcQuery(FetchStaffBarUser, {
221
+ context: {
222
+ target: constants.GRAPHQL_TARGETS.MERCHANT_CENTER_BACKEND
223
+ },
224
+ // Use cache to avoid users from mocking response in browser to enable staffbar
225
+ fetchPolicy: 'cache-only'
226
+ }),
227
+ data = _useMcQuery.data,
228
+ error = _useMcQuery.error;
229
+ return {
230
+ userId: data?.user?.id,
231
+ isStaffMember: data?.user?.launchdarklyTrackingGroup === 'commercetools',
232
+ isDevMember: _includesInstanceProperty__default["default"](USER_ROLES_WITH_ALLOWED_ACCESS).call(USER_ROLES_WITH_ALLOWED_ACCESS, data?.user?.businessRole),
233
+ error
234
+ };
235
+ };
236
+
237
+ const getActiveTeamId = () => window.sessionStorage.getItem(ACTIVE_TEAM_ID_KEY);
238
+ const setActiveTeamId = teamId => window.sessionStorage.setItem(ACTIVE_TEAM_ID_KEY, teamId);
239
+ const removeActiveTeamId = () => window.sessionStorage.removeItem(ACTIVE_TEAM_ID_KEY);
240
+
241
+ var FetchTeamsByProjectQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "FetchTeamsByProjectQuery" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "where" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "myProjects" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "where" }, value: { kind: "Variable", name: { kind: "Name", value: "where" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "results" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "owner" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "teams" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "membersRef" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }] } }], loc: { start: 0, end: 286, source: { body: "query FetchTeamsByProjectQuery($where: String!) {\n myProjects(where: $where) {\n results {\n id\n key\n name\n owner {\n id\n name\n teams {\n id\n name\n membersRef {\n id\n }\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
242
+ const defaultTeam = {
243
+ label: 'Default',
244
+ value: ''
245
+ };
246
+ const onlyTeamsWithMembership = function (userId) {
247
+ let teams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
248
+ return teams.length ? _filterInstanceProperty__default["default"](teams).call(teams, team => team.membersRef?.some(memberRef => memberRef.id === userId)) : [];
249
+ };
250
+ const getAdminTeamId = function () {
251
+ let teams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
252
+ return _findInstanceProperty__default["default"](teams).call(teams, team => team.name === 'Administrators')?.id;
253
+ };
254
+ const getStoredTeamId = function (storedId) {
255
+ let teams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
256
+ return _findInstanceProperty__default["default"](teams).call(teams, team => team.id === storedId);
257
+ };
258
+ const transformTeamsToOptions = function () {
259
+ let teams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
260
+ const hasAdminTeam = Boolean(getAdminTeamId(teams));
261
+ const options = _mapInstanceProperty__default["default"](teams).call(teams, team => ({
262
+ label: team?.name,
263
+ value: team?.id
264
+ }));
265
+ if (hasAdminTeam) {
266
+ return options;
267
+ } else if (options.length) {
268
+ return [defaultTeam, ...options];
269
+ } else {
270
+ return [];
271
+ }
272
+ };
273
+ const useTeams = () => {
274
+ const projectKey = applicationShellConnectors.useApplicationContext(applicationContext => applicationContext.project?.key);
275
+ const _useStaffBarUser = useStaffBarUser(),
276
+ userId = _useStaffBarUser.userId;
277
+ const _useMcQuery = applicationShell.useMcQuery(FetchTeamsByProjectQuery, {
278
+ skip: !projectKey,
279
+ variables: {
280
+ where: `key="${projectKey}"`
281
+ },
282
+ context: {
283
+ target: constants.GRAPHQL_TARGETS.ADMINISTRATION_SERVICE
284
+ }
285
+ }),
286
+ data = _useMcQuery.data,
287
+ error = _useMcQuery.error,
288
+ loading = _useMcQuery.loading;
289
+ const teams = data?.myProjects?.results?.[0]?.owner?.teams;
290
+ react.useEffect(() => {
291
+ if (loading) {
292
+ return;
293
+ }
294
+
295
+ // If user already simulated the permission and tries to change project then we need to clear the stored teamId
296
+ // otherwise the newly selected project might be from different organization and user will see 404 page.
297
+ const storedId = getActiveTeamId();
298
+ if (storedId && !getStoredTeamId(storedId, teams)) {
299
+ removeActiveTeamId();
300
+ window.location.reload();
301
+ }
302
+ }, [loading, teams]);
303
+ const options = transformTeamsToOptions(onlyTeamsWithMembership(userId || '', teams));
304
+ const adminTeamId = getAdminTeamId(onlyTeamsWithMembership(userId || '', teams));
305
+ const storedId = getActiveTeamId();
306
+ const activeTeamId = storedId ?? adminTeamId ?? defaultTeam.value;
307
+ return {
308
+ data,
309
+ options,
310
+ activeTeamId,
311
+ isLimitedPermission: storedId && storedId !== adminTeamId,
312
+ error,
313
+ loading
314
+ };
315
+ };
316
+
317
+ const launchdarklyAdapter = window.__flopflip__?.launchdarkly;
318
+ function getFlagValue(flag, defaultValue) {
319
+ // @ts-expect-error: getFlag exists not on all adapters and hence
320
+ // not the generic type. For ours it exists.
321
+ const result = launchdarklyAdapter?.getFlag(flag);
322
+ if (typeof result === 'boolean') {
323
+ return result;
324
+ } else if (typeof result?.value === 'boolean') {
325
+ return result;
326
+ }
327
+ return defaultValue;
328
+ }
329
+ function setFlag(flagName, flagValue) {
330
+ let lockFlags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
331
+ launchdarklyAdapter?.updateFlags({
332
+ [flagName]: flagValue
333
+ }, {
334
+ lockFlags
335
+ });
336
+ }
337
+
338
+ const getFromSessionStorage = key => {
339
+ const storedValue = window.sessionStorage.getItem(key);
340
+ return storedValue ? JSON.parse(storedValue) : {};
341
+ };
342
+ const setToSessionStorage = (key, value) => window.sessionStorage.setItem(key, _JSON$stringify__default["default"](value));
343
+
344
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$4() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
345
+ var _ref$4 = process.env.NODE_ENV === "production" ? {
346
+ name: "mdo41b",
347
+ styles: "box-sizing:border-box;width:100%;margin:0;border:0;border-top-width:1px;border-style:solid;border-top-color:var(--color-neutral-90)"
348
+ } : {
349
+ name: "p3joim-Divider",
350
+ styles: "box-sizing:border-box;width:100%;margin:0;border:0;border-top-width:1px;border-style:solid;border-top-color:var(--color-neutral-90);label:Divider;",
351
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpdmlkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtjIiwiZmlsZSI6ImRpdmlkZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXZpZGVyKCkge1xuICByZXR1cm4gKFxuICAgIDxoclxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jb2xvci1uZXV0cmFsLTkwKTtcbiAgICAgIGB9XG4gICAgLz5cbiAgKTtcbn1cbiJdfQ== */",
352
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$4
353
+ };
354
+ function Divider() {
355
+ return jsxRuntime.jsx("hr", {
356
+ css: _ref$4
357
+ });
358
+ }
359
+
360
+ function ownKeys$1(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
361
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var _context4, _context5; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context4 = ownKeys$1(Object(t), !0)).call(_context4, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context5 = ownKeys$1(Object(t))).call(_context5, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
362
+ var FeatureFlagTogglerIllustration = function FeatureFlagTogglerIllustration(props) {
363
+ return jsxRuntime.jsx("svg", _objectSpread$1(_objectSpread$1({}, props), {}, {
364
+ children: jsxRuntime.jsx("path", {
365
+ d: "M4.91 9.818c-1.365 0-2.524-.477-3.478-1.432C.477 7.432 0 6.273 0 4.91c0-1.364.477-2.523 1.432-3.477C2.386.477 3.545 0 4.909 0h8.182c1.364 0 2.523.477 3.477 1.432C17.523 2.386 18 3.545 18 4.909c0 1.364-.477 2.523-1.432 3.477-.954.955-2.114 1.432-3.477 1.432H4.909Zm0-1.227h8.18c1.024 0 1.893-.358 2.609-1.074.716-.716 1.074-1.585 1.074-2.608 0-1.023-.358-1.892-1.074-2.608-.716-.716-1.585-1.074-2.608-1.074H4.909c-1.023 0-1.892.358-2.608 1.074-.716.716-1.074 1.585-1.074 2.608 0 1.023.358 1.892 1.074 2.608.716.716 1.585 1.074 2.608 1.074Zm-.023-1.616c.574 0 1.062-.2 1.464-.602a1.99 1.99 0 0 0 .604-1.463c0-.573-.201-1.061-.603-1.463a1.99 1.99 0 0 0-1.462-.604c-.574 0-1.062.2-1.464.602a1.99 1.99 0 0 0-.603 1.463c0 .573.2 1.061.602 1.464a1.99 1.99 0 0 0 1.462.603Z",
366
+ fill: "#000"
367
+ })
368
+ }));
369
+ };
370
+ FeatureFlagTogglerIllustration.defaultProps = {
371
+ width: "18",
372
+ height: "10",
373
+ fill: "none",
374
+ xmlns: "http://www.w3.org/2000/svg"
375
+ };
376
+ function toggleFeatureFlag(flag, value) {
377
+ const cachedFeatureFlag = getFromSessionStorage(FEATURE_FLAG_KEY);
378
+ setToSessionStorage(FEATURE_FLAG_KEY, _objectSpread$1(_objectSpread$1({}, cachedFeatureFlag), {}, {
379
+ [flag]: value
380
+ }));
381
+ setFlag(flag, value);
382
+ }
383
+ const FeatureFlagToggler = props => {
384
+ var _context;
385
+ const modalState = applicationComponents.useModalState();
386
+ const _useState = react.useState(false),
387
+ _useState2 = _slicedToArray(_useState, 2),
388
+ toggleAll = _useState2[0],
389
+ setToggleAll = _useState2[1];
390
+ const cachedFeatureFlag = getFromSessionStorage(FEATURE_FLAG_KEY);
391
+ const _useStaffBarUser = useStaffBarUser(),
392
+ isDevMember = _useStaffBarUser.isDevMember;
393
+ const _useState3 = react.useState(_mapInstanceProperty__default["default"](_context = _Object$entries__default["default"](props.featureFlags ?? {})).call(_context, _ref => {
394
+ let _ref2 = _slicedToArray(_ref, 2),
395
+ featureName = _ref2[0],
396
+ toggleValue = _ref2[1];
397
+ return {
398
+ featureName,
399
+ toggleValue: cachedFeatureFlag[featureName] ?? getFlagValue(featureName, toggleValue)
400
+ };
401
+ })),
402
+ _useState4 = _slicedToArray(_useState3, 2),
403
+ options = _useState4[0],
404
+ setOptions = _useState4[1];
405
+ const originalValues = react.useMemo(() => {
406
+ var _context2;
407
+ return _mapInstanceProperty__default["default"](_context2 = _Object$entries__default["default"](props.featureFlags ?? {})).call(_context2, _ref3 => {
408
+ let _ref4 = _slicedToArray(_ref3, 2),
409
+ featureName = _ref4[0],
410
+ toggleValue = _ref4[1];
411
+ return {
412
+ featureName,
413
+ toggleValue: getFlagValue(featureName, toggleValue) ?? 'false'
414
+ };
415
+ });
416
+ },
417
+ // eslint-disable-next-line react-hooks/exhaustive-deps
418
+ []);
419
+ const isTouched = react.useMemo(() => !isEqual__default["default"](originalValues, options), [originalValues, options]);
420
+ react.useEffect(() => {
421
+ // Persist toggled flags from other application
422
+ if (_Object$keys__default["default"](cachedFeatureFlag).length) {
423
+ var _context3;
424
+ _forEachInstanceProperty__default["default"](_context3 = _Object$entries__default["default"](cachedFeatureFlag)).call(_context3, _ref5 => {
425
+ let _ref6 = _slicedToArray(_ref5, 2),
426
+ featureName = _ref6[0],
427
+ value = _ref6[1];
428
+ if (_findInstanceProperty__default["default"](options).call(options, option => option.featureName === featureName)) {
429
+ toggleFeatureFlag(featureName, value);
430
+ }
431
+ });
432
+ }
433
+ // eslint-disable-next-line react-hooks/exhaustive-deps
434
+ }, []);
435
+ const isToggled = toggleValue => {
436
+ if (typeof toggleValue === 'object' && toggleValue.value !== undefined) {
437
+ return toggleValue.value;
438
+ }
439
+ return toggleValue;
440
+ };
441
+ const toTitleCase = function () {
442
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
443
+ const result = value.replace(/([A-Z])/g, ' $1');
444
+ return result.charAt(0).toUpperCase() + _sliceInstanceProperty__default["default"](result).call(result, 1);
445
+ };
446
+ const toggleAndGenerateNewOption = _ref7 => {
447
+ let featureName = _ref7.featureName,
448
+ toggleValue = _ref7.toggleValue,
449
+ options = _ref7.options,
450
+ index = _ref7.index;
451
+ const newOptions = [...options];
452
+ if (typeof toggleValue === 'boolean') {
453
+ toggleFeatureFlag(featureName, !toggleValue);
454
+ newOptions[index] = _objectSpread$1(_objectSpread$1({}, newOptions[index]), {}, {
455
+ toggleValue: !toggleValue
456
+ });
457
+ } else {
458
+ toggleFeatureFlag(featureName, {
459
+ value: !toggleValue?.value
460
+ });
461
+ newOptions[index] = _objectSpread$1(_objectSpread$1({}, newOptions[index]), {}, {
462
+ toggleValue: {
463
+ value: !toggleValue?.value
464
+ }
465
+ });
466
+ }
467
+ return newOptions;
468
+ };
469
+ const handleToggleAll = react.useCallback(() => {
470
+ let newOptions = [...options];
471
+ _forEachInstanceProperty__default["default"](options).call(options, (_ref8, index) => {
472
+ let featureName = _ref8.featureName,
473
+ toggleValue = _ref8.toggleValue;
474
+ newOptions = toggleAndGenerateNewOption({
475
+ featureName,
476
+ toggleValue: typeof toggleValue === 'boolean' ? toggleAll : {
477
+ value: toggleAll
478
+ },
479
+ index,
480
+ options: [...newOptions]
481
+ });
482
+ });
483
+ setOptions(newOptions);
484
+ setToggleAll(!toggleAll);
485
+ }, [toggleAll, options]);
486
+ const handleToggle = react.useCallback(_ref9 => {
487
+ let featureName = _ref9.featureName,
488
+ toggleValue = _ref9.toggleValue,
489
+ index = _ref9.index;
490
+ const newOptions = toggleAndGenerateNewOption({
491
+ featureName,
492
+ toggleValue,
493
+ index,
494
+ options: [...options]
495
+ });
496
+ setOptions(newOptions);
497
+ }, [options]);
498
+ const handleRevert = () => {
499
+ _forEachInstanceProperty__default["default"](originalValues).call(originalValues, (_ref10, index) => {
500
+ let featureName = _ref10.featureName,
501
+ toggleValue = _ref10.toggleValue;
502
+ toggleAndGenerateNewOption({
503
+ featureName,
504
+ toggleValue: typeof toggleValue === 'boolean' ? !toggleValue : {
505
+ value: !toggleValue.value
506
+ },
507
+ index,
508
+ options: [...options]
509
+ });
510
+ });
511
+ setOptions(originalValues);
512
+ setToggleAll(false);
513
+ window.sessionStorage.removeItem(FEATURE_FLAG_KEY);
514
+ };
515
+ if (!isDevMember) return null;
516
+ if (!options.length) return null;
517
+ return jsxRuntime.jsxs(jsxRuntime.Fragment, {
518
+ children: [jsxRuntime.jsx(uiKit.IconButton, {
519
+ label: "Toggle Feature Flags",
520
+ icon: jsxRuntime.jsx(FeatureFlagTogglerIllustration, {}),
521
+ onClick: modalState.openModal,
522
+ color: "info"
523
+ }), jsxRuntime.jsx(applicationComponents.InfoDialog, {
524
+ title: 'Feature flags',
525
+ isOpen: modalState.isModalOpen,
526
+ onClose: modalState.closeModal,
527
+ zIndex: 30000,
528
+ getParentSelector: () => document.body,
529
+ children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
530
+ scale: "m",
531
+ children: [jsxRuntime.jsxs(uiKit.Spacings.Inline, {
532
+ justifyContent: "flex-end",
533
+ scale: "m",
534
+ alignItems: "center",
535
+ children: [jsxRuntime.jsx(uiKit.FlatButton, {
536
+ onClick: handleToggleAll,
537
+ label: "Toggle All"
538
+ }), jsxRuntime.jsx(uiKit.SecondaryButton, {
539
+ label: "Revert",
540
+ onClick: handleRevert,
541
+ isDisabled: !isTouched
542
+ })]
543
+ }), jsxRuntime.jsx(uiKit.Spacings.Stack, {
544
+ scale: "m",
545
+ children: _mapInstanceProperty__default["default"](options).call(options, (_ref11, index) => {
546
+ let featureName = _ref11.featureName,
547
+ toggleValue = _ref11.toggleValue;
548
+ return jsxRuntime.jsx(uiKit.Constraints.Horizontal, {
549
+ max: 'scale',
550
+ children: jsxRuntime.jsxs(uiKit.Spacings.Stack, {
551
+ scale: "m",
552
+ children: [jsxRuntime.jsxs(uiKit.Spacings.Inline, {
553
+ justifyContent: "space-between",
554
+ alignItems: "center",
555
+ children: [jsxRuntime.jsxs("div", {
556
+ children: [jsxRuntime.jsx(uiKit.Text.Body, {
557
+ children: toTitleCase(featureName)
558
+ }), jsxRuntime.jsxs(uiKit.Text.Detail, {
559
+ tone: "secondary",
560
+ children: ["flag key: ", featureName]
561
+ })]
562
+ }), jsxRuntime.jsx(uiKit.ToggleInput, {
563
+ size: "small",
564
+ isChecked: isToggled(toggleValue),
565
+ onChange: () => handleToggle({
566
+ featureName,
567
+ toggleValue,
568
+ index
569
+ })
570
+ })]
571
+ }), jsxRuntime.jsx(Divider, {})]
572
+ })
573
+ }, featureName);
574
+ })
575
+ })]
576
+ })
577
+ })]
578
+ });
579
+ };
580
+
581
+ function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
582
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
583
+ var GitHubIcon = function GitHubIcon(props) {
584
+ return jsxRuntime.jsx("svg", _objectSpread(_objectSpread({}, props), {}, {
585
+ children: jsxRuntime.jsx("path", {
586
+ d: "M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"
587
+ })
588
+ }));
589
+ };
590
+ GitHubIcon.defaultProps = {
591
+ xmlns: "http://www.w3.org/2000/svg",
592
+ width: "24",
593
+ height: "24"
594
+ };
595
+ function GitHubPullRequestLink() {
596
+ const previewUrl = window.location.hostname.match(/mc-(\d+)\.mc-preview/);
597
+ if (!previewUrl) return null;
598
+ const _previewUrl = _slicedToArray(previewUrl, 2),
599
+ PRNumber = _previewUrl[1];
600
+ return jsxRuntime.jsx(uiKit.IconButton, {
601
+ label: "GitHub Pull Request",
602
+ icon: jsxRuntime.jsx(GitHubIcon, {}),
603
+ onClick: () => {
604
+ window.open(`${GITHUB_PR_URL}${PRNumber}`);
605
+ }
606
+ });
607
+ }
608
+
609
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$3() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
610
+ var _ref$3 = process.env.NODE_ENV === "production" ? {
611
+ name: "1jeqx8",
612
+ styles: "width:242px"
613
+ } : {
614
+ name: "959kup-TeamSwitcher",
615
+ styles: "width:242px;label:TeamSwitcher;",
616
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlYW0tc3dpdGNoZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdEa0IiLCJmaWxlIjoidGVhbS1zd2l0Y2hlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7XG4gIFNlbGVjdElucHV0LFxuICBUZXh0LFxuICBTcGFjaW5ncyxcbiAgU3RhbXAsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3VpLWtpdCc7XG5pbXBvcnQgeyB1c2VUZWFtcyB9IGZyb20gJy4uLy4uL2hvb2tzJztcbmltcG9ydCB7IHJlbW92ZUFjdGl2ZVRlYW1JZCwgc2V0QWN0aXZlVGVhbUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWN0aXZlLXRlYW0nO1xuXG5jb25zdCBUZWFtU3dpdGNoZXIgPSAoKSA9PiB7XG4gIGNvbnN0IHsgb3B0aW9ucywgYWN0aXZlVGVhbUlkLCBpc0xpbWl0ZWRQZXJtaXNzaW9uIH0gPSB1c2VUZWFtcygpO1xuXG4gIGlmICghb3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBib3R0b21PcHRpb24gPSB7XG4gICAgb3B0aW9uczogW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ1NlbGVjdCBhIHRlYW0gdG8gbGltaXQgcGVybWlzc2lvbnMgdG8gdGhvc2Ugb2YgdGhhdCB0ZWFtLicsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbiAgY29uc3Qgb3B0aW9uc1dpdGhCb3R0b21PcHRpb24gPSBbXG4gICAge1xuICAgICAgb3B0aW9ucyxcbiAgICB9LFxuICAgIGJvdHRvbU9wdGlvbixcbiAgXTtcblxuICBjb25zdCBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2lkPSdsZWZ0LW9mLXByb2ZpbGUnXVwiKTtcblxuICBjb25zdCBjb250YWluZXIgPSAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJsaW1pdGVkLXBlcm1pc3Npb25cIlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIHotaW5kZXg6IDIwMDAxO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGB9XG4gICAgPlxuICAgICAgPFN0YW1wIHRvbmU9XCJ3YXJuaW5nXCIgbGFiZWw9XCJMaW1pdGVkIFBlcm1pc3Npb25cIiAvPlxuICAgIDwvZGl2PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTcGFjaW5ncy5JbmxpbmUgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICA8VGV4dC5EZXRhaWw+VGVhbTwvVGV4dC5EZXRhaWw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIHdpZHRoOiAyNDJweDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPFNlbGVjdElucHV0XG4gICAgICAgICAgICBpZD1cInRlYW0tc2VsZWN0b3JcIlxuICAgICAgICAgICAgbmFtZT1cIlRlYW0gU2VsZWN0b3JcIlxuICAgICAgICAgICAgaXNTZWFyY2hhYmxlPXt0cnVlfVxuICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQ9ezV9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtkb2N1bWVudC5ib2R5fVxuICAgICAgICAgICAgbWVudVBvcnRhbFpJbmRleD17MzAwMDB9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVUZWFtSWQoZXZlbnQudGFyZ2V0LnZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQWN0aXZlVGVhbUlkKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdmFsdWU9e2FjdGl2ZVRlYW1JZH1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnNXaXRoQm90dG9tT3B0aW9ufVxuICAgICAgICAgICAgc2hvd09wdGlvbkdyb3VwRGl2aWRlclxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9TcGFjaW5ncy5JbmxpbmU+XG4gICAgICB7aXNMaW1pdGVkUGVybWlzc2lvbiAmJlxuICAgICAgICBwb3J0YWxDb250YWluZXIgJiZcbiAgICAgICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKGNvbnRhaW5lciwgcG9ydGFsQ29udGFpbmVyKX1cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRlYW1Td2l0Y2hlcjtcbiJdfQ== */",
617
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$3
618
+ };
619
+ var _ref2$2 = process.env.NODE_ENV === "production" ? {
620
+ name: "14ronv",
621
+ styles: "z-index:20001;display:flex;align-items:center;margin-right:16px;height:100%"
622
+ } : {
623
+ name: "1d9e80f-container",
624
+ styles: "z-index:20001;display:flex;align-items:center;margin-right:16px;height:100%;label:container;",
625
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlYW0tc3dpdGNoZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVDYyIsImZpbGUiOiJ0ZWFtLXN3aXRjaGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHtcbiAgU2VsZWN0SW5wdXQsXG4gIFRleHQsXG4gIFNwYWNpbmdzLFxuICBTdGFtcCxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvdWkta2l0JztcbmltcG9ydCB7IHVzZVRlYW1zIH0gZnJvbSAnLi4vLi4vaG9va3MnO1xuaW1wb3J0IHsgcmVtb3ZlQWN0aXZlVGVhbUlkLCBzZXRBY3RpdmVUZWFtSWQgfSBmcm9tICcuLi8uLi91dGlscy9hY3RpdmUtdGVhbSc7XG5cbmNvbnN0IFRlYW1Td2l0Y2hlciA9ICgpID0+IHtcbiAgY29uc3QgeyBvcHRpb25zLCBhY3RpdmVUZWFtSWQsIGlzTGltaXRlZFBlcm1pc3Npb24gfSA9IHVzZVRlYW1zKCk7XG5cbiAgaWYgKCFvcHRpb25zPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGJvdHRvbU9wdGlvbiA9IHtcbiAgICBvcHRpb25zOiBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnU2VsZWN0IGEgdGVhbSB0byBsaW1pdCBwZXJtaXNzaW9ucyB0byB0aG9zZSBvZiB0aGF0IHRlYW0uJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuICBjb25zdCBvcHRpb25zV2l0aEJvdHRvbU9wdGlvbiA9IFtcbiAgICB7XG4gICAgICBvcHRpb25zLFxuICAgIH0sXG4gICAgYm90dG9tT3B0aW9uLFxuICBdO1xuXG4gIGNvbnN0IHBvcnRhbENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbaWQ9J2xlZnQtb2YtcHJvZmlsZSddXCIpO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImxpbWl0ZWQtcGVybWlzc2lvblwiXG4gICAgICBjc3M9e2Nzc2BcbiAgICAgICAgei1pbmRleDogMjAwMDE7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYH1cbiAgICA+XG4gICAgICA8U3RhbXAgdG9uZT1cIndhcm5pbmdcIiBsYWJlbD1cIkxpbWl0ZWQgUGVybWlzc2lvblwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNwYWNpbmdzLklubGluZSBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgIDxUZXh0LkRldGFpbD5UZWFtPC9UZXh0LkRldGFpbD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgd2lkdGg6IDI0MnB4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8U2VsZWN0SW5wdXRcbiAgICAgICAgICAgIGlkPVwidGVhbS1zZWxlY3RvclwiXG4gICAgICAgICAgICBuYW1lPVwiVGVhbSBTZWxlY3RvclwiXG4gICAgICAgICAgICBpc1NlYXJjaGFibGU9e3RydWV9XG4gICAgICAgICAgICBob3Jpem9udGFsQ29uc3RyYWludD17NX1cbiAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e2RvY3VtZW50LmJvZHl9XG4gICAgICAgICAgICBtZW51UG9ydGFsWkluZGV4PXszMDAwMH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldEFjdGl2ZVRlYW1JZChldmVudC50YXJnZXQudmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW1vdmVBY3RpdmVUZWFtSWQoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB2YWx1ZT17YWN0aXZlVGVhbUlkfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc1dpdGhCb3R0b21PcHRpb259XG4gICAgICAgICAgICBzaG93T3B0aW9uR3JvdXBEaXZpZGVyXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1NwYWNpbmdzLklubGluZT5cbiAgICAgIHtpc0xpbWl0ZWRQZXJtaXNzaW9uICYmXG4gICAgICAgIHBvcnRhbENvbnRhaW5lciAmJlxuICAgICAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoY29udGFpbmVyLCBwb3J0YWxDb250YWluZXIpfVxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGVhbVN3aXRjaGVyO1xuIl19 */",
626
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$3
627
+ };
628
+ const TeamSwitcher = () => {
629
+ const _useTeams = useTeams(),
630
+ options = _useTeams.options,
631
+ activeTeamId = _useTeams.activeTeamId,
632
+ isLimitedPermission = _useTeams.isLimitedPermission;
633
+ if (!options?.length) {
634
+ return null;
635
+ }
636
+ const bottomOption = {
637
+ options: [{
638
+ label: 'Select a team to limit permissions to those of that team.',
639
+ value: '',
640
+ isDisabled: true
641
+ }]
642
+ };
643
+ const optionsWithBottomOption = [{
644
+ options
645
+ }, bottomOption];
646
+ const portalContainer = document.querySelector("[id='left-of-profile']");
647
+ const container = jsxRuntime.jsx("div", {
648
+ "data-testid": "limited-permission",
649
+ css: _ref2$2,
650
+ children: jsxRuntime.jsx(uiKit.Stamp, {
651
+ tone: "warning",
652
+ label: "Limited Permission"
653
+ })
654
+ });
655
+ return jsxRuntime.jsxs(jsxRuntime.Fragment, {
656
+ children: [jsxRuntime.jsxs(uiKit.Spacings.Inline, {
657
+ alignItems: "center",
658
+ children: [jsxRuntime.jsx(uiKit.Text.Detail, {
659
+ children: "Team"
660
+ }), jsxRuntime.jsx("div", {
661
+ css: _ref$3,
662
+ children: jsxRuntime.jsx(uiKit.SelectInput, {
663
+ id: "team-selector",
664
+ name: "Team Selector",
665
+ isSearchable: true,
666
+ horizontalConstraint: 5,
667
+ menuPortalTarget: document.body,
668
+ menuPortalZIndex: 30000,
669
+ onChange: event => {
670
+ if (event.target.value) {
671
+ setActiveTeamId(event.target.value);
672
+ } else {
673
+ removeActiveTeamId();
674
+ }
675
+ window.location.reload();
676
+ },
677
+ value: activeTeamId,
678
+ options: optionsWithBottomOption,
679
+ showOptionGroupDivider: true
680
+ })
681
+ })]
682
+ }), isLimitedPermission && portalContainer && /*#__PURE__*/ReactDOM__default["default"].createPortal(container, portalContainer)]
683
+ });
684
+ };
685
+
686
+ const LogEnabler = () => {
687
+ const history = reactRouterDom.useHistory();
688
+ const location = reactRouterDom.useLocation();
689
+ const queryParams = new _URLSearchParams__default["default"](location.search);
690
+ const debugFromQueryParams = queryParams.get('debug');
691
+ const isDebugLoggingEnabled = debugFromQueryParams === 'true';
692
+
693
+ // Synchronize the debug params.
694
+ react.useEffect(() => {
695
+ if (debugFromQueryParams) {
696
+ window.sessionStorage.setItem(ENABLE_LOG_KEY, debugFromQueryParams);
697
+ } else {
698
+ // Restore the query param based on the cached state.
699
+ const cachedDebugState = window.sessionStorage.getItem(ENABLE_LOG_KEY);
700
+ if (cachedDebugState) {
701
+ const cachedIsDebugLoggingEnabled = cachedDebugState === 'true';
702
+ queryParams.set('debug', String(cachedIsDebugLoggingEnabled));
703
+ history.push({
704
+ pathname: location.pathname,
705
+ search: queryParams.toString()
706
+ });
707
+ }
708
+ }
709
+ // eslint-disable-next-line react-hooks/exhaustive-deps
710
+ }, [debugFromQueryParams]);
711
+ function handleDebugLoggingChange() {
712
+ const nextIsDebugLoggingEnabled = !isDebugLoggingEnabled;
713
+
714
+ // Cache the new debug state value.
715
+ window.sessionStorage.setItem(ENABLE_LOG_KEY, String(nextIsDebugLoggingEnabled));
716
+
717
+ // Sync the state with the query params. This is what counts!
718
+ if (nextIsDebugLoggingEnabled) {
719
+ queryParams.set('debug', String(nextIsDebugLoggingEnabled));
720
+ } else {
721
+ queryParams.delete('debug');
722
+ }
723
+ history.push({
724
+ pathname: location.pathname,
725
+ search: queryParams.toString()
726
+ });
727
+ }
728
+ return jsxRuntime.jsx(uiKit.CheckboxInput, {
729
+ onChange: handleDebugLoggingChange,
730
+ isChecked: isDebugLoggingEnabled,
731
+ children: "Enable Logs"
732
+ });
733
+ };
734
+
735
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$2() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
736
+ function getDurationBetween(type, deployedAt) {
737
+ const deployedDate = new Date(deployedAt);
738
+ const today = new Date();
739
+ let value;
740
+ switch (type) {
741
+ case 'minutes':
742
+ value = 60000;
743
+ break;
744
+ case 'hours':
745
+ value = 3600000;
746
+ break;
747
+ case 'days':
748
+ default:
749
+ value = 8.64e7;
750
+ break;
751
+ }
752
+ return Math.round(Math.abs(+deployedDate - +today) / value);
753
+ }
754
+ var _ref$2 = process.env.NODE_ENV === "production" ? {
755
+ name: "1nxezmo",
756
+ styles: "cursor:pointer!important;position:absolute;left:0;width:100%;button{width:100%;opacity:0;}"
757
+ } : {
758
+ name: "1q8580e-DeploymentTracker",
759
+ styles: "cursor:pointer!important;position:absolute;left:0;width:100%;button{width:100%;opacity:0;};label:DeploymentTracker;",
760
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlcGxveW1lbnQtdHJhY2tlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0prQiIsImZpbGUiOiJkZXBsb3ltZW50LXRyYWNrZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBzb3J0QnkgZnJvbSAnbG9kYXNoL3NvcnRCeSc7XG5pbXBvcnQge1xuICBJbmZvRGlhbG9nLFxuICB1c2VNb2RhbFN0YXRlLFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB0eXBlIHsgQXBwbGljYXRpb25XaW5kb3cgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQ29uc3RyYWludHMsXG4gIFNlY29uZGFyeUJ1dHRvbixcbiAgU3BhY2luZ3MsXG4gIFN0YW1wLFxuICBUZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnO1xuaW1wb3J0IERpdmlkZXIgZnJvbSAnLi4vZGl2aWRlcic7XG5pbXBvcnQgeyBMT0NBTF9FTlYgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zd2l0Y2hlci9jb25zdGFudHMnO1xuXG5kZWNsYXJlIGxldCB3aW5kb3c6IEFwcGxpY2F0aW9uV2luZG93O1xudHlwZSBUVmVyc2lvbiA9IEFycmF5PHtcbiAgYXBwOiBzdHJpbmc7XG4gIGJ1aWxkOiB7XG4gICAgZGVwbG95ZWRBdDogc3RyaW5nO1xuICB9O1xufT47XG5cbmZ1bmN0aW9uIGdldER1cmF0aW9uQmV0d2VlbihcbiAgdHlwZTogJ21pbnV0ZXMnIHwgJ2hvdXJzJyB8ICdkYXlzJyxcbiAgZGVwbG95ZWRBdDogc3RyaW5nXG4pIHtcbiAgY29uc3QgZGVwbG95ZWREYXRlID0gbmV3IERhdGUoZGVwbG95ZWRBdCk7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgbGV0IHZhbHVlO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgIHZhbHVlID0gNjAwMDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdob3Vycyc6XG4gICAgICB2YWx1ZSA9IDM2MDAwMDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBkZWZhdWx0OlxuICAgICAgdmFsdWUgPSA4LjY0ZTc7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLmFicygrZGVwbG95ZWREYXRlIC0gK3RvZGF5KSAvIHZhbHVlKTtcbn1cblxuY29uc3QgRGVwbG95bWVudFRyYWNrZXIgPSAoKSA9PiB7XG4gIGNvbnN0IHsgaXNNb2RhbE9wZW4sIG9wZW5Nb2RhbCwgY2xvc2VNb2RhbCB9ID0gdXNlTW9kYWxTdGF0ZSgpO1xuICBjb25zdCBbdmVyc2lvbnMsIHNldFZlcnNpb25zXSA9IHVzZVN0YXRlPFRWZXJzaW9uPihbXSk7XG4gIGNvbnN0IGdldEN1cnJlbnRBcHBsaWNhdGlvbk5hbWUgPSAoKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB7IGVudHJ5UG9pbnRVcmlQYXRoIH0gPSB3aW5kb3cuYXBwO1xuICAgIHN3aXRjaCAoZW50cnlQb2ludFVyaVBhdGgpIHtcbiAgICAgIGNhc2UgJ3dlbGNvbWUnOlxuICAgICAgICByZXR1cm4gJ2ZhbGxiYWNrJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlbnRyeVBvaW50VXJpUGF0aDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGN1cnJlbnRBcHBsaWNhdGlvbiA9IGdldEN1cnJlbnRBcHBsaWNhdGlvbk5hbWUoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBVUkwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgaWYgKFVSTCA9PT0gTE9DQUxfRU5WLnZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7VVJMfS92ZXJzaW9uc2AsIHtcbiAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdmVyc2lvbnM7XG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgIHZlcnNpb25zID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgIHNldFZlcnNpb25zKHNvcnRCeSh2ZXJzaW9ucywgKHZlcnNpb24pID0+IHZlcnNpb24uYXBwKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYEZldGNoaW5nIHRoZSB2ZXJzaW9ucyByZXR1cm5lZCBhICR7cmVzcG9uc2Uuc3RhdHVzfSBIVFRQIHN0YXR1cyBjb2RlLmA7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmZXRjaERhdGEoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGdldExhc3RVcGRhdGUgPSAoXG4gICAgYXBwbGljYXRpb246IHN0cmluZ1xuICApOiB7IHZhbHVlOiBudW1iZXI7IHRleHQ6IHN0cmluZyB9ID0+IHtcbiAgICBjb25zdCBkZXBsb3llZEF0ID0gdmVyc2lvbnMuZmluZCgodmVyc2lvbikgPT4gdmVyc2lvbi5hcHAgPT09IGFwcGxpY2F0aW9uKVxuICAgICAgPy5idWlsZD8uZGVwbG95ZWRBdDtcblxuICAgIGlmICghZGVwbG95ZWRBdCkge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IDAsIHRleHQ6ICctLScgfTtcbiAgICB9XG5cbiAgICB2YXIgZGF5cyA9IGdldER1cmF0aW9uQmV0d2VlbignZGF5cycsIGRlcGxveWVkQXQpO1xuICAgIGlmIChkYXlzIDwgMSkge1xuICAgICAgdmFyIGhvdXJzID0gZ2V0RHVyYXRpb25CZXR3ZWVuKCdob3VycycsIGRlcGxveWVkQXQpO1xuICAgICAgaWYgKGhvdXJzIDwgMSkge1xuICAgICAgICBjb25zdCBtaW51dGVzID0gZ2V0RHVyYXRpb25CZXR3ZWVuKCdtaW51dGVzJywgZGVwbG95ZWRBdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IE51bWJlcihtaW51dGVzLnRvRml4ZWQoMCkpLFxuICAgICAgICAgIHRleHQ6IGAke21pbnV0ZXMudG9GaXhlZCgwKX0gbWludXRlcyBhZ29gLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IE51bWJlcihob3Vycy50b0ZpeGVkKDApKSxcbiAgICAgICAgdGV4dDogYCR7aG91cnMudG9GaXhlZCgwKX0gaG91cnMgYWdvYCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogTnVtYmVyKGRheXMudG9GaXhlZCgwKSksXG4gICAgICB0ZXh0OiBgJHtkYXlzLnRvRml4ZWQoMCl9IGRheXMgYWdvYCxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGdldFRvbmUgPSAoeyB2YWx1ZSwgdGV4dCB9OiB7IHZhbHVlOiBudW1iZXI7IHRleHQ6IHN0cmluZyB9KSA9PiB7XG4gICAgaWYgKHRleHQuaW5jbHVkZXMoJ2RheXMnKSkge1xuICAgICAgaWYgKHZhbHVlID49IDUpIHJldHVybiAnY3JpdGljYWwnO1xuICAgICAgaWYgKHZhbHVlID49IDIpIHJldHVybiAnd2FybmluZyc7XG4gICAgfVxuICAgIHJldHVybiAncHJpbWFyeSc7XG4gIH07XG5cbiAgaWYgKCF2ZXJzaW9ucz8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2Nzc2BcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYH1cbiAgICA+XG4gICAgICA8U3RhbXAgdG9uZT17Z2V0VG9uZShnZXRMYXN0VXBkYXRlKGN1cnJlbnRBcHBsaWNhdGlvbikpfT5cbiAgICAgICAgTGFzdCBkZXBsb3llZDoge2dldExhc3RVcGRhdGUoY3VycmVudEFwcGxpY2F0aW9uKS50ZXh0fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8U2Vjb25kYXJ5QnV0dG9uIGxhYmVsPVwiXCIgb25DbGljaz17b3Blbk1vZGFsfSBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1N0YW1wPlxuICAgICAgPEluZm9EaWFsb2dcbiAgICAgICAgaXNPcGVuPXtpc01vZGFsT3Blbn1cbiAgICAgICAgdGl0bGU9eydBcHAgRGVwbG95bWVudCBpbmZvcm1hdGlvbid9XG4gICAgICAgIG9uQ2xvc2U9e2Nsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIDxTcGFjaW5ncy5TdGFjaz5cbiAgICAgICAgICB7dmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8U3BhY2luZ3MuSW5saW5lIGtleT17dmVyc2lvbi5hcHB9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxDb25zdHJhaW50cy5Ib3Jpem9udGFsIG1heD17Nn0+XG4gICAgICAgICAgICAgICAgICA8VGV4dC5Cb2R5Pnt2ZXJzaW9uLmFwcH08L1RleHQuQm9keT5cbiAgICAgICAgICAgICAgICA8L0NvbnN0cmFpbnRzLkhvcml6b250YWw+XG4gICAgICAgICAgICAgICAgPFN0YW1wIHRvbmU9e2dldFRvbmUoZ2V0TGFzdFVwZGF0ZSh2ZXJzaW9uLmFwcCkpfT5cbiAgICAgICAgICAgICAgICAgIHtnZXRMYXN0VXBkYXRlKHZlcnNpb24uYXBwKS50ZXh0fVxuICAgICAgICAgICAgICAgIDwvU3RhbXA+XG4gICAgICAgICAgICAgIDwvU3BhY2luZ3MuSW5saW5lPlxuICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BhY2luZ3MuU3RhY2s+XG4gICAgICA8L0luZm9EaWFsb2c+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEZXBsb3ltZW50VHJhY2tlcjtcbiJdfQ== */",
761
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$2
762
+ };
763
+ var _ref2$1 = process.env.NODE_ENV === "production" ? {
764
+ name: "bjn8wh",
765
+ styles: "position:relative"
766
+ } : {
767
+ name: "6dj265-DeploymentTracker",
768
+ styles: "position:relative;label:DeploymentTracker;",
769
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlcGxveW1lbnQtdHJhY2tlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUljIiwiZmlsZSI6ImRlcGxveW1lbnQtdHJhY2tlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHNvcnRCeSBmcm9tICdsb2Rhc2gvc29ydEJ5JztcbmltcG9ydCB7XG4gIEluZm9EaWFsb2csXG4gIHVzZU1vZGFsU3RhdGUsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2FwcGxpY2F0aW9uLWNvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBBcHBsaWNhdGlvbldpbmRvdyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBDb25zdHJhaW50cyxcbiAgU2Vjb25kYXJ5QnV0dG9uLFxuICBTcGFjaW5ncyxcbiAgU3RhbXAsXG4gIFRleHQsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3VpLWtpdCc7XG5pbXBvcnQgRGl2aWRlciBmcm9tICcuLi9kaXZpZGVyJztcbmltcG9ydCB7IExPQ0FMX0VOViB9IGZyb20gJy4uL2Vudmlyb25tZW50LXN3aXRjaGVyL2NvbnN0YW50cyc7XG5cbmRlY2xhcmUgbGV0IHdpbmRvdzogQXBwbGljYXRpb25XaW5kb3c7XG50eXBlIFRWZXJzaW9uID0gQXJyYXk8e1xuICBhcHA6IHN0cmluZztcbiAgYnVpbGQ6IHtcbiAgICBkZXBsb3llZEF0OiBzdHJpbmc7XG4gIH07XG59PjtcblxuZnVuY3Rpb24gZ2V0RHVyYXRpb25CZXR3ZWVuKFxuICB0eXBlOiAnbWludXRlcycgfCAnaG91cnMnIHwgJ2RheXMnLFxuICBkZXBsb3llZEF0OiBzdHJpbmdcbikge1xuICBjb25zdCBkZXBsb3llZERhdGUgPSBuZXcgRGF0ZShkZXBsb3llZEF0KTtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICBsZXQgdmFsdWU7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgdmFsdWUgPSA2MDAwMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgIHZhbHVlID0gMzYwMDAwMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGRlZmF1bHQ6XG4gICAgICB2YWx1ZSA9IDguNjRlNztcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBNYXRoLnJvdW5kKE1hdGguYWJzKCtkZXBsb3llZERhdGUgLSArdG9kYXkpIC8gdmFsdWUpO1xufVxuXG5jb25zdCBEZXBsb3ltZW50VHJhY2tlciA9ICgpID0+IHtcbiAgY29uc3QgeyBpc01vZGFsT3Blbiwgb3Blbk1vZGFsLCBjbG9zZU1vZGFsIH0gPSB1c2VNb2RhbFN0YXRlKCk7XG4gIGNvbnN0IFt2ZXJzaW9ucywgc2V0VmVyc2lvbnNdID0gdXNlU3RhdGU8VFZlcnNpb24+KFtdKTtcbiAgY29uc3QgZ2V0Q3VycmVudEFwcGxpY2F0aW9uTmFtZSA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHsgZW50cnlQb2ludFVyaVBhdGggfSA9IHdpbmRvdy5hcHA7XG4gICAgc3dpdGNoIChlbnRyeVBvaW50VXJpUGF0aCkge1xuICAgICAgY2FzZSAnd2VsY29tZSc6XG4gICAgICAgIHJldHVybiAnZmFsbGJhY2snO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGVudHJ5UG9pbnRVcmlQYXRoO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY3VycmVudEFwcGxpY2F0aW9uID0gZ2V0Q3VycmVudEFwcGxpY2F0aW9uTmFtZSgpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IFVSTCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICBpZiAoVVJMID09PSBMT0NBTF9FTlYudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtVUkx9L3ZlcnNpb25zYCwge1xuICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB2ZXJzaW9ucztcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdmVyc2lvbnMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgc2V0VmVyc2lvbnMoc29ydEJ5KHZlcnNpb25zLCAodmVyc2lvbikgPT4gdmVyc2lvbi5hcHApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgRmV0Y2hpbmcgdGhlIHZlcnNpb25zIHJldHVybmVkIGEgJHtyZXNwb25zZS5zdGF0dXN9IEhUVFAgc3RhdHVzIGNvZGUuYDtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZldGNoRGF0YSgpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgZ2V0TGFzdFVwZGF0ZSA9IChcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nXG4gICk6IHsgdmFsdWU6IG51bWJlcjsgdGV4dDogc3RyaW5nIH0gPT4ge1xuICAgIGNvbnN0IGRlcGxveWVkQXQgPSB2ZXJzaW9ucy5maW5kKCh2ZXJzaW9uKSA9PiB2ZXJzaW9uLmFwcCA9PT0gYXBwbGljYXRpb24pXG4gICAgICA/LmJ1aWxkPy5kZXBsb3llZEF0O1xuXG4gICAgaWYgKCFkZXBsb3llZEF0KSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogMCwgdGV4dDogJy0tJyB9O1xuICAgIH1cblxuICAgIHZhciBkYXlzID0gZ2V0RHVyYXRpb25CZXR3ZWVuKCdkYXlzJywgZGVwbG95ZWRBdCk7XG4gICAgaWYgKGRheXMgPCAxKSB7XG4gICAgICB2YXIgaG91cnMgPSBnZXREdXJhdGlvbkJldHdlZW4oJ2hvdXJzJywgZGVwbG95ZWRBdCk7XG4gICAgICBpZiAoaG91cnMgPCAxKSB7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBnZXREdXJhdGlvbkJldHdlZW4oJ21pbnV0ZXMnLCBkZXBsb3llZEF0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogTnVtYmVyKG1pbnV0ZXMudG9GaXhlZCgwKSksXG4gICAgICAgICAgdGV4dDogYCR7bWludXRlcy50b0ZpeGVkKDApfSBtaW51dGVzIGFnb2AsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogTnVtYmVyKGhvdXJzLnRvRml4ZWQoMCkpLFxuICAgICAgICB0ZXh0OiBgJHtob3Vycy50b0ZpeGVkKDApfSBob3VycyBhZ29gLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBOdW1iZXIoZGF5cy50b0ZpeGVkKDApKSxcbiAgICAgIHRleHQ6IGAke2RheXMudG9GaXhlZCgwKX0gZGF5cyBhZ29gLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZ2V0VG9uZSA9ICh7IHZhbHVlLCB0ZXh0IH06IHsgdmFsdWU6IG51bWJlcjsgdGV4dDogc3RyaW5nIH0pID0+IHtcbiAgICBpZiAodGV4dC5pbmNsdWRlcygnZGF5cycpKSB7XG4gICAgICBpZiAodmFsdWUgPj0gNSkgcmV0dXJuICdjcml0aWNhbCc7XG4gICAgICBpZiAodmFsdWUgPj0gMikgcmV0dXJuICd3YXJuaW5nJztcbiAgICB9XG4gICAgcmV0dXJuICdwcmltYXJ5JztcbiAgfTtcblxuICBpZiAoIXZlcnNpb25zPy5sZW5ndGgpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBgfVxuICAgID5cbiAgICAgIDxTdGFtcCB0b25lPXtnZXRUb25lKGdldExhc3RVcGRhdGUoY3VycmVudEFwcGxpY2F0aW9uKSl9PlxuICAgICAgICBMYXN0IGRlcGxveWVkOiB7Z2V0TGFzdFVwZGF0ZShjdXJyZW50QXBwbGljYXRpb24pLnRleHR9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50O1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxTZWNvbmRhcnlCdXR0b24gbGFiZWw9XCJcIiBvbkNsaWNrPXtvcGVuTW9kYWx9IHNpemU9XCJtZWRpdW1cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU3RhbXA+XG4gICAgICA8SW5mb0RpYWxvZ1xuICAgICAgICBpc09wZW49e2lzTW9kYWxPcGVufVxuICAgICAgICB0aXRsZT17J0FwcCBEZXBsb3ltZW50IGluZm9ybWF0aW9uJ31cbiAgICAgICAgb25DbG9zZT17Y2xvc2VNb2RhbH1cbiAgICAgID5cbiAgICAgICAgPFNwYWNpbmdzLlN0YWNrPlxuICAgICAgICAgIHt2ZXJzaW9ucy5tYXAoKHZlcnNpb24pID0+IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxTcGFjaW5ncy5JbmxpbmUga2V5PXt2ZXJzaW9uLmFwcH0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPENvbnN0cmFpbnRzLkhvcml6b250YWwgbWF4PXs2fT5cbiAgICAgICAgICAgICAgICAgIDxUZXh0LkJvZHk+e3ZlcnNpb24uYXBwfTwvVGV4dC5Cb2R5PlxuICAgICAgICAgICAgICAgIDwvQ29uc3RyYWludHMuSG9yaXpvbnRhbD5cbiAgICAgICAgICAgICAgICA8U3RhbXAgdG9uZT17Z2V0VG9uZShnZXRMYXN0VXBkYXRlKHZlcnNpb24uYXBwKSl9PlxuICAgICAgICAgICAgICAgICAge2dldExhc3RVcGRhdGUodmVyc2lvbi5hcHApLnRleHR9XG4gICAgICAgICAgICAgICAgPC9TdGFtcD5cbiAgICAgICAgICAgICAgPC9TcGFjaW5ncy5JbmxpbmU+XG4gICAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGFjaW5ncy5TdGFjaz5cbiAgICAgIDwvSW5mb0RpYWxvZz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERlcGxveW1lbnRUcmFja2VyO1xuIl19 */",
770
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$2
771
+ };
772
+ const DeploymentTracker = () => {
773
+ const _useModalState = applicationComponents.useModalState(),
774
+ isModalOpen = _useModalState.isModalOpen,
775
+ openModal = _useModalState.openModal,
776
+ closeModal = _useModalState.closeModal;
777
+ const _useState = react.useState([]),
778
+ _useState2 = _slicedToArray(_useState, 2),
779
+ versions = _useState2[0],
780
+ setVersions = _useState2[1];
781
+ const getCurrentApplicationName = () => {
782
+ const entryPointUriPath = window.app.entryPointUriPath;
783
+ switch (entryPointUriPath) {
784
+ case 'welcome':
785
+ return 'fallback';
786
+ default:
787
+ return entryPointUriPath;
788
+ }
789
+ };
790
+ const currentApplication = getCurrentApplicationName();
791
+ react.useEffect(() => {
792
+ const abortController = new AbortController();
793
+ const fetchData = async () => {
794
+ let URL = window.location.origin;
795
+ if (URL === LOCAL_ENV.value) {
796
+ return;
797
+ }
798
+ try {
799
+ const response = await fetch(`${URL}/versions`, {
800
+ signal: abortController.signal
801
+ });
802
+ let versions;
803
+ if (response.ok) {
804
+ versions = await response.json();
805
+ setVersions(sortBy__default["default"](versions, version => version.app));
806
+ } else {
807
+ const errorMessage = `Fetching the versions returned a ${response.status} HTTP status code.`;
808
+ // eslint-disable-next-line no-console
809
+ console.error(errorMessage);
810
+ }
811
+ } catch (error) {
812
+ // eslint-disable-next-line no-console
813
+ console.error(error);
814
+ }
815
+ };
816
+ fetchData();
817
+ return () => {
818
+ abortController.abort();
819
+ };
820
+ }, []);
821
+ const getLastUpdate = application => {
822
+ const deployedAt = _findInstanceProperty__default["default"](versions).call(versions, version => version.app === application)?.build?.deployedAt;
823
+ if (!deployedAt) {
824
+ return {
825
+ value: 0,
826
+ text: '--'
827
+ };
828
+ }
829
+ var days = getDurationBetween('days', deployedAt);
830
+ if (days < 1) {
831
+ var hours = getDurationBetween('hours', deployedAt);
832
+ if (hours < 1) {
833
+ const minutes = getDurationBetween('minutes', deployedAt);
834
+ return {
835
+ value: Number(minutes.toFixed(0)),
836
+ text: `${minutes.toFixed(0)} minutes ago`
837
+ };
838
+ }
839
+ return {
840
+ value: Number(hours.toFixed(0)),
841
+ text: `${hours.toFixed(0)} hours ago`
842
+ };
843
+ }
844
+ return {
845
+ value: Number(days.toFixed(0)),
846
+ text: `${days.toFixed(0)} days ago`
847
+ };
848
+ };
849
+ const getTone = _ref3 => {
850
+ let value = _ref3.value,
851
+ text = _ref3.text;
852
+ if (_includesInstanceProperty__default["default"](text).call(text, 'days')) {
853
+ if (value >= 5) return 'critical';
854
+ if (value >= 2) return 'warning';
855
+ }
856
+ return 'primary';
857
+ };
858
+ if (!versions?.length) return null;
859
+ return jsxRuntime.jsxs("div", {
860
+ css: _ref2$1,
861
+ children: [jsxRuntime.jsxs(uiKit.Stamp, {
862
+ tone: getTone(getLastUpdate(currentApplication)),
863
+ children: ["Last deployed: ", getLastUpdate(currentApplication).text, jsxRuntime.jsx("div", {
864
+ css: _ref$2,
865
+ children: jsxRuntime.jsx(uiKit.SecondaryButton, {
866
+ label: "",
867
+ onClick: openModal,
868
+ size: "medium"
869
+ })
870
+ })]
871
+ }), jsxRuntime.jsx(applicationComponents.InfoDialog, {
872
+ isOpen: isModalOpen,
873
+ title: 'App Deployment information',
874
+ onClose: closeModal,
875
+ children: jsxRuntime.jsx(uiKit.Spacings.Stack, {
876
+ children: _mapInstanceProperty__default["default"](versions).call(versions, version => jsxRuntime.jsxs(jsxRuntime.Fragment, {
877
+ children: [jsxRuntime.jsxs(uiKit.Spacings.Inline, {
878
+ justifyContent: "space-between",
879
+ children: [jsxRuntime.jsx(uiKit.Constraints.Horizontal, {
880
+ max: 6,
881
+ children: jsxRuntime.jsx(uiKit.Text.Body, {
882
+ children: version.app
883
+ })
884
+ }), jsxRuntime.jsx(uiKit.Stamp, {
885
+ tone: getTone(getLastUpdate(version.app)),
886
+ children: getLastUpdate(version.app).text
887
+ })]
888
+ }, version.app), jsxRuntime.jsx(Divider, {})]
889
+ }))
890
+ })
891
+ })]
892
+ });
893
+ };
894
+
895
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
896
+ var _ref$1 = process.env.NODE_ENV === "production" ? {
897
+ name: "tkfx1x",
898
+ styles: ">button{margin-right:27px!important;}"
899
+ } : {
900
+ name: "9bxmbw-StaffBarInfo",
901
+ styles: ">button{margin-right:27px!important;};label:StaffBarInfo;",
902
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YWZmLWJhci1pbmZvLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQmMiLCJmaWxlIjoic3RhZmYtYmFyLWluZm8udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHtcbiAgSW5mb0RpYWxvZyxcbiAgdXNlTW9kYWxTdGF0ZSxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBJY29uQnV0dG9uLFxuICBJbmZvcm1hdGlvbkljb24sXG4gIFRleHQsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3VpLWtpdCc7XG5cbmZ1bmN0aW9uIFN0YWZmQmFySW5mbygpIHtcbiAgY29uc3QgaW5mb01vZGFsU3RhdGUgPSB1c2VNb2RhbFN0YXRlKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2Nzc2BcbiAgICAgICAgPiBidXR0b24ge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMjdweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICBgfVxuICAgID5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICBsYWJlbD1cIlwiXG4gICAgICAgIGljb249ezxJbmZvcm1hdGlvbkljb24gLz59XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBpbmZvTW9kYWxTdGF0ZS5vcGVuTW9kYWwoKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8SW5mb0RpYWxvZ1xuICAgICAgICBpc09wZW49e2luZm9Nb2RhbFN0YXRlLmlzTW9kYWxPcGVufVxuICAgICAgICB0aXRsZT17J0Fib3V0IHRoZSBTdGFmZiBiYXInfVxuICAgICAgICBvbkNsb3NlPXtpbmZvTW9kYWxTdGF0ZS5jbG9zZU1vZGFsfVxuICAgICAgICBnZXRQYXJlbnRTZWxlY3Rvcj17KCkgPT4gZG9jdW1lbnQuYm9keX1cbiAgICAgICAgekluZGV4PXszMDAwMH1cbiAgICAgICAgc2l6ZT17MTJ9XG4gICAgICA+XG4gICAgICAgIDxUZXh0LkRldGFpbD5cbiAgICAgICAgICBTdGFmZiBiYXIgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgYXZhaWxhYmxlIG9ubHkgdG8gY29tbWVyY2V0b29sc1xuICAgICAgICAgIGVtcGxveWVlcy4gSXQgYWxsb3dzIHRvIHF1aWNrbHkgc3dpdGNoIGVudmlyb25tZW50LCB0b2dnbGUgZGlmZmVyZW50XG4gICAgICAgICAgZmVhdHVyZSBmbGFncyBhbmQgb3RoZXIgdXNlZnVsIGFjdGlvbnMuIFRoaXMgZmVhdHVyZSBpcyBub3QgdmlzaWJsZSB0b1xuICAgICAgICAgIGVuZCBjdXN0b21lcnMgbm9yIHBhcnRuZXJzLlxuICAgICAgICA8L1RleHQuRGV0YWlsPlxuICAgICAgPC9JbmZvRGlhbG9nPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTdGFmZkJhckluZm87XG4iXX0= */",
903
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
904
+ };
905
+ function StaffBarInfo() {
906
+ const infoModalState = applicationComponents.useModalState();
907
+ return jsxRuntime.jsxs("div", {
908
+ css: _ref$1,
909
+ children: [jsxRuntime.jsx(uiKit.IconButton, {
910
+ size: "medium",
911
+ label: "",
912
+ icon: jsxRuntime.jsx(uiKit.InformationIcon, {}),
913
+ onClick: () => {
914
+ infoModalState.openModal();
915
+ }
916
+ }), jsxRuntime.jsx(applicationComponents.InfoDialog, {
917
+ isOpen: infoModalState.isModalOpen,
918
+ title: 'About the Staff bar',
919
+ onClose: infoModalState.closeModal,
920
+ getParentSelector: () => document.body,
921
+ zIndex: 30000,
922
+ size: 12,
923
+ children: jsxRuntime.jsx(uiKit.Text.Detail, {
924
+ children: "Staff bar is an experimental feature available only to commercetools employees. It allows to quickly switch environment, toggle different feature flags and other useful actions. This feature is not visible to end customers nor partners."
925
+ })
926
+ })]
927
+ });
928
+ }
929
+
930
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
931
+ var _ref = process.env.NODE_ENV === "production" ? {
932
+ name: "16u25pc",
933
+ styles: "position:absolute;height:24px;width:56px;background:var(--color-accent-10);box-shadow:0px 1px 2px rgba(0, 0, 0, 0.25);border-radius:0px 0px 4px 4px;left:calc(50% - 23px);bottom:-23px;cursor:pointer;z-index:30000;display:flex;align-items:center;justify-content:center;:hover{background:var(--color-accent-20);}"
934
+ } : {
935
+ name: "y4jgqz-container",
936
+ styles: "position:absolute;height:24px;width:56px;background:var(--color-accent-10);box-shadow:0px 1px 2px rgba(0, 0, 0, 0.25);border-radius:0px 0px 4px 4px;left:calc(50% - 23px);bottom:-23px;cursor:pointer;z-index:30000;display:flex;align-items:center;justify-content:center;:hover{background:var(--color-accent-20);};label:container;",
937
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YWZmLWJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbURrQiIsImZpbGUiOiJzdGFmZi1iYXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7XG4gIEFuZ2xlRG93bkljb24sXG4gIEFuZ2xlVXBJY29uLFxuICBTcGFjaW5ncyxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvdWkta2l0JztcbmltcG9ydCB7XG4gIEVudmlyb25tZW50U3dpdGNoZXIsXG4gIEZlYXR1cmVGbGFnVG9nZ2xlcixcbiAgR2l0aHViUHVsbFJlcXVlc3RMaW5rLFxuICBMb2dFbmFibGVyLFxuICBUZWFtU3dpdGNoZXIsXG4gIERlcGxveW1lbnRUcmFja2VyLFxuICBTdGFmZkJhckluZm8sXG59IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJU19TVEFGRkJBUl9PUEVOIH0gZnJvbSAnLi9jb21wb25lbnRzL2Vudmlyb25tZW50LXN3aXRjaGVyL2NvbnN0YW50cyc7XG5pbXBvcnQgdXNlU3RhZmZCYXJVc2VyIGZyb20gJy4vaG9va3MvdXNlLXN0YWZmLWJhci11c2VyJztcbmltcG9ydCB0eXBlIHsgVFN0YWZmQmFyQ29udGFpbmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEN5cHJlc3M6IGFueTtcbiAgfVxufVxuXG5mdW5jdGlvbiBTdGFmZkJhcihwcm9wczogVFN0YWZmQmFyQ29udGFpbmVyUHJvcHMpIHtcbiAgY29uc3QgeyBpc1N0YWZmTWVtYmVyLCBlcnJvciB9ID0gdXNlU3RhZmZCYXJVc2VyKCk7XG5cbiAgY29uc3QgW2lzU3RhZmZCYXJPcGVuLCBzZXRJc1N0YWZmQmFyT3Blbl0gPSB1c2VTdGF0ZShcbiAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShJU19TVEFGRkJBUl9PUEVOKSA9PT0gJ3RydWUnXG4gICk7XG5cbiAgY29uc3QgY29udGFpbmVyID0gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBgfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgaGVpZ2h0OiAke2lzU3RhZmZCYXJPcGVuID8gJzU2cHgnIDogJzAnfTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1uZXV0cmFsLTk1KTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMTUwbXM7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic3RhZmZiYXItaGFuZGxlXCJcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgICAgIHdpZHRoOiA1NnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50LTEwKTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwcHggMHB4IDRweCA0cHg7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDIzcHgpO1xuICAgICAgICAgICAgYm90dG9tOiAtMjNweDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIHotaW5kZXg6IDMwMDAwO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIDpob3ZlciB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudC0yMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgYH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICAgSVNfU1RBRkZCQVJfT1BFTixcbiAgICAgICAgICAgICAgKCFpc1N0YWZmQmFyT3BlbikudG9TdHJpbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNldElzU3RhZmZCYXJPcGVuKCFpc1N0YWZmQmFyT3Blbik7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtpc1N0YWZmQmFyT3BlbiA/IChcbiAgICAgICAgICAgIDxBbmdsZVVwSWNvbiBjb2xvcj1cInN1cmZhY2VcIiBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEFuZ2xlRG93bkljb24gY29sb3I9XCJzdXJmYWNlXCIgc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxTcGFjaW5ncy5JbnNldFNxdWlzaCBzY2FsZT1cIm1cIj5cbiAgICAgICAgICA8U3BhY2luZ3MuSW5saW5lIGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxTcGFjaW5ncy5JbmxpbmUgc2NhbGU9XCJsXCI+XG4gICAgICAgICAgICAgIDxHaXRodWJQdWxsUmVxdWVzdExpbmsgLz5cbiAgICAgICAgICAgICAgPEZlYXR1cmVGbGFnVG9nZ2xlciBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc30gLz5cbiAgICAgICAgICAgICAgPEVudmlyb25tZW50U3dpdGNoZXIgLz5cbiAgICAgICAgICAgICAgPFRlYW1Td2l0Y2hlciAvPlxuICAgICAgICAgICAgICB7Lyogb3RoZXIgdG9vbHMgZ29lcyBoZXJlICovfVxuICAgICAgICAgICAgPC9TcGFjaW5ncy5JbmxpbmU+XG4gICAgICAgICAgICA8U3BhY2luZ3MuSW5saW5lIHNjYWxlPVwibFwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPERlcGxveW1lbnRUcmFja2VyIC8+XG4gICAgICAgICAgICAgIDxMb2dFbmFibGVyIC8+XG4gICAgICAgICAgICAgIDxTdGFmZkJhckluZm8gLz5cbiAgICAgICAgICAgIDwvU3BhY2luZ3MuSW5saW5lPlxuICAgICAgICAgIDwvU3BhY2luZ3MuSW5saW5lPlxuICAgICAgICA8L1NwYWNpbmdzLkluc2V0U3F1aXNoPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgY29uc3QgcG9ydGFsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fib3ZlLXRvcC1uYXZpZ2F0aW9uJyk7XG5cbiAgaWYgKGVycm9yIHx8ICFpc1N0YWZmTWVtYmVyIHx8ICFwb3J0YWxDb250YWluZXIpIHJldHVybiBudWxsO1xuICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKGNvbnRhaW5lciwgcG9ydGFsQ29udGFpbmVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhZmZCYXI7XG4iXX0= */",
938
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
939
+ };
940
+ var _ref2 = process.env.NODE_ENV === "production" ? {
941
+ name: "bjn8wh",
942
+ styles: "position:relative"
943
+ } : {
944
+ name: "p4e9kp-container",
945
+ styles: "position:relative;label:container;",
946
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YWZmLWJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUNjIiwiZmlsZSI6InN0YWZmLWJhci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHtcbiAgQW5nbGVEb3duSWNvbixcbiAgQW5nbGVVcEljb24sXG4gIFNwYWNpbmdzLFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC91aS1raXQnO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRTd2l0Y2hlcixcbiAgRmVhdHVyZUZsYWdUb2dnbGVyLFxuICBHaXRodWJQdWxsUmVxdWVzdExpbmssXG4gIExvZ0VuYWJsZXIsXG4gIFRlYW1Td2l0Y2hlcixcbiAgRGVwbG95bWVudFRyYWNrZXIsXG4gIFN0YWZmQmFySW5mbyxcbn0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IElTX1NUQUZGQkFSX09QRU4gfSBmcm9tICcuL2NvbXBvbmVudHMvZW52aXJvbm1lbnQtc3dpdGNoZXIvY29uc3RhbnRzJztcbmltcG9ydCB1c2VTdGFmZkJhclVzZXIgZnJvbSAnLi9ob29rcy91c2Utc3RhZmYtYmFyLXVzZXInO1xuaW1wb3J0IHR5cGUgeyBUU3RhZmZCYXJDb250YWluZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQ3lwcmVzczogYW55O1xuICB9XG59XG5cbmZ1bmN0aW9uIFN0YWZmQmFyKHByb3BzOiBUU3RhZmZCYXJDb250YWluZXJQcm9wcykge1xuICBjb25zdCB7IGlzU3RhZmZNZW1iZXIsIGVycm9yIH0gPSB1c2VTdGFmZkJhclVzZXIoKTtcblxuICBjb25zdCBbaXNTdGFmZkJhck9wZW4sIHNldElzU3RhZmZCYXJPcGVuXSA9IHVzZVN0YXRlKFxuICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKElTX1NUQUZGQkFSX09QRU4pID09PSAndHJ1ZSdcbiAgKTtcblxuICBjb25zdCBjb250YWluZXIgPSAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGB9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBoZWlnaHQ6ICR7aXNTdGFmZkJhck9wZW4gPyAnNTZweCcgOiAnMCd9O1xuICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLW5ldXRyYWwtOTUpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAxNTBtcztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzdGFmZmJhci1oYW5kbGVcIlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgd2lkdGg6IDU2cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQtMTApO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBweCAwcHggNHB4IDRweDtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjNweCk7XG4gICAgICAgICAgICBib3R0b206IC0yM3B4O1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgei1pbmRleDogMzAwMDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgOmhvdmVyIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50LTIwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBgfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICBJU19TVEFGRkJBUl9PUEVOLFxuICAgICAgICAgICAgICAoIWlzU3RhZmZCYXJPcGVuKS50b1N0cmluZygpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2V0SXNTdGFmZkJhck9wZW4oIWlzU3RhZmZCYXJPcGVuKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2lzU3RhZmZCYXJPcGVuID8gKFxuICAgICAgICAgICAgPEFuZ2xlVXBJY29uIGNvbG9yPVwic3VyZmFjZVwiIHNpemU9XCJtZWRpdW1cIiAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8QW5nbGVEb3duSWNvbiBjb2xvcj1cInN1cmZhY2VcIiBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFNwYWNpbmdzLkluc2V0U3F1aXNoIHNjYWxlPVwibVwiPlxuICAgICAgICAgIDxTcGFjaW5ncy5JbmxpbmUganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPFNwYWNpbmdzLklubGluZSBzY2FsZT1cImxcIj5cbiAgICAgICAgICAgICAgPEdpdGh1YlB1bGxSZXF1ZXN0TGluayAvPlxuICAgICAgICAgICAgICA8RmVhdHVyZUZsYWdUb2dnbGVyIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfSAvPlxuICAgICAgICAgICAgICA8RW52aXJvbm1lbnRTd2l0Y2hlciAvPlxuICAgICAgICAgICAgICA8VGVhbVN3aXRjaGVyIC8+XG4gICAgICAgICAgICAgIHsvKiBvdGhlciB0b29scyBnb2VzIGhlcmUgKi99XG4gICAgICAgICAgICA8L1NwYWNpbmdzLklubGluZT5cbiAgICAgICAgICAgIDxTcGFjaW5ncy5JbmxpbmUgc2NhbGU9XCJsXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICA8RGVwbG95bWVudFRyYWNrZXIgLz5cbiAgICAgICAgICAgICAgPExvZ0VuYWJsZXIgLz5cbiAgICAgICAgICAgICAgPFN0YWZmQmFySW5mbyAvPlxuICAgICAgICAgICAgPC9TcGFjaW5ncy5JbmxpbmU+XG4gICAgICAgICAgPC9TcGFjaW5ncy5JbmxpbmU+XG4gICAgICAgIDwvU3BhY2luZ3MuSW5zZXRTcXVpc2g+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBjb25zdCBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWJvdmUtdG9wLW5hdmlnYXRpb24nKTtcblxuICBpZiAoZXJyb3IgfHwgIWlzU3RhZmZNZW1iZXIgfHwgIXBvcnRhbENvbnRhaW5lcikgcmV0dXJuIG51bGw7XG4gIHJldHVybiBSZWFjdERPTS5jcmVhdGVQb3J0YWwoY29udGFpbmVyLCBwb3J0YWxDb250YWluZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTdGFmZkJhcjtcbiJdfQ== */",
947
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
948
+ };
949
+ function StaffBar(props) {
950
+ const _useStaffBarUser = useStaffBarUser(),
951
+ isStaffMember = _useStaffBarUser.isStaffMember,
952
+ error = _useStaffBarUser.error;
953
+ const _useState = react.useState(localStorage.getItem(IS_STAFFBAR_OPEN) === 'true'),
954
+ _useState2 = _slicedToArray(_useState, 2),
955
+ isStaffBarOpen = _useState2[0],
956
+ setIsStaffBarOpen = _useState2[1];
957
+ const container = jsxRuntime.jsx("div", {
958
+ css: _ref2,
959
+ children: jsxRuntime.jsxs("div", {
960
+ css: /*#__PURE__*/react$1.css("height:", isStaffBarOpen ? '56px' : '0', ";background:var(--color-neutral-95);transition:height 150ms;overflow:hidden;" + (process.env.NODE_ENV === "production" ? "" : ";label:container;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YWZmLWJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMENnQiIsImZpbGUiOiJzdGFmZi1iYXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7XG4gIEFuZ2xlRG93bkljb24sXG4gIEFuZ2xlVXBJY29uLFxuICBTcGFjaW5ncyxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvdWkta2l0JztcbmltcG9ydCB7XG4gIEVudmlyb25tZW50U3dpdGNoZXIsXG4gIEZlYXR1cmVGbGFnVG9nZ2xlcixcbiAgR2l0aHViUHVsbFJlcXVlc3RMaW5rLFxuICBMb2dFbmFibGVyLFxuICBUZWFtU3dpdGNoZXIsXG4gIERlcGxveW1lbnRUcmFja2VyLFxuICBTdGFmZkJhckluZm8sXG59IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJU19TVEFGRkJBUl9PUEVOIH0gZnJvbSAnLi9jb21wb25lbnRzL2Vudmlyb25tZW50LXN3aXRjaGVyL2NvbnN0YW50cyc7XG5pbXBvcnQgdXNlU3RhZmZCYXJVc2VyIGZyb20gJy4vaG9va3MvdXNlLXN0YWZmLWJhci11c2VyJztcbmltcG9ydCB0eXBlIHsgVFN0YWZmQmFyQ29udGFpbmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEN5cHJlc3M6IGFueTtcbiAgfVxufVxuXG5mdW5jdGlvbiBTdGFmZkJhcihwcm9wczogVFN0YWZmQmFyQ29udGFpbmVyUHJvcHMpIHtcbiAgY29uc3QgeyBpc1N0YWZmTWVtYmVyLCBlcnJvciB9ID0gdXNlU3RhZmZCYXJVc2VyKCk7XG5cbiAgY29uc3QgW2lzU3RhZmZCYXJPcGVuLCBzZXRJc1N0YWZmQmFyT3Blbl0gPSB1c2VTdGF0ZShcbiAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShJU19TVEFGRkJBUl9PUEVOKSA9PT0gJ3RydWUnXG4gICk7XG5cbiAgY29uc3QgY29udGFpbmVyID0gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBgfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgaGVpZ2h0OiAke2lzU3RhZmZCYXJPcGVuID8gJzU2cHgnIDogJzAnfTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1uZXV0cmFsLTk1KTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMTUwbXM7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic3RhZmZiYXItaGFuZGxlXCJcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgICAgIHdpZHRoOiA1NnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYWNjZW50LTEwKTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwcHggMHB4IDRweCA0cHg7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDIzcHgpO1xuICAgICAgICAgICAgYm90dG9tOiAtMjNweDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIHotaW5kZXg6IDMwMDAwO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIDpob3ZlciB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudC0yMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgYH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICAgSVNfU1RBRkZCQVJfT1BFTixcbiAgICAgICAgICAgICAgKCFpc1N0YWZmQmFyT3BlbikudG9TdHJpbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNldElzU3RhZmZCYXJPcGVuKCFpc1N0YWZmQmFyT3Blbik7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtpc1N0YWZmQmFyT3BlbiA/IChcbiAgICAgICAgICAgIDxBbmdsZVVwSWNvbiBjb2xvcj1cInN1cmZhY2VcIiBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEFuZ2xlRG93bkljb24gY29sb3I9XCJzdXJmYWNlXCIgc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxTcGFjaW5ncy5JbnNldFNxdWlzaCBzY2FsZT1cIm1cIj5cbiAgICAgICAgICA8U3BhY2luZ3MuSW5saW5lIGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxTcGFjaW5ncy5JbmxpbmUgc2NhbGU9XCJsXCI+XG4gICAgICAgICAgICAgIDxHaXRodWJQdWxsUmVxdWVzdExpbmsgLz5cbiAgICAgICAgICAgICAgPEZlYXR1cmVGbGFnVG9nZ2xlciBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc30gLz5cbiAgICAgICAgICAgICAgPEVudmlyb25tZW50U3dpdGNoZXIgLz5cbiAgICAgICAgICAgICAgPFRlYW1Td2l0Y2hlciAvPlxuICAgICAgICAgICAgICB7Lyogb3RoZXIgdG9vbHMgZ29lcyBoZXJlICovfVxuICAgICAgICAgICAgPC9TcGFjaW5ncy5JbmxpbmU+XG4gICAgICAgICAgICA8U3BhY2luZ3MuSW5saW5lIHNjYWxlPVwibFwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPERlcGxveW1lbnRUcmFja2VyIC8+XG4gICAgICAgICAgICAgIDxMb2dFbmFibGVyIC8+XG4gICAgICAgICAgICAgIDxTdGFmZkJhckluZm8gLz5cbiAgICAgICAgICAgIDwvU3BhY2luZ3MuSW5saW5lPlxuICAgICAgICAgIDwvU3BhY2luZ3MuSW5saW5lPlxuICAgICAgICA8L1NwYWNpbmdzLkluc2V0U3F1aXNoPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgY29uc3QgcG9ydGFsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fib3ZlLXRvcC1uYXZpZ2F0aW9uJyk7XG5cbiAgaWYgKGVycm9yIHx8ICFpc1N0YWZmTWVtYmVyIHx8ICFwb3J0YWxDb250YWluZXIpIHJldHVybiBudWxsO1xuICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKGNvbnRhaW5lciwgcG9ydGFsQ29udGFpbmVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhZmZCYXI7XG4iXX0= */"),
961
+ children: [jsxRuntime.jsx("div", {
962
+ "data-testid": "staffbar-handle",
963
+ css: _ref,
964
+ onClick: () => {
965
+ localStorage.setItem(IS_STAFFBAR_OPEN, (!isStaffBarOpen).toString());
966
+ setIsStaffBarOpen(!isStaffBarOpen);
967
+ },
968
+ children: isStaffBarOpen ? jsxRuntime.jsx(uiKit.AngleUpIcon, {
969
+ color: "surface",
970
+ size: "medium"
971
+ }) : jsxRuntime.jsx(uiKit.AngleDownIcon, {
972
+ color: "surface",
973
+ size: "medium"
974
+ })
975
+ }), jsxRuntime.jsx(uiKit.Spacings.InsetSquish, {
976
+ scale: "m",
977
+ children: jsxRuntime.jsxs(uiKit.Spacings.Inline, {
978
+ justifyContent: "space-between",
979
+ alignItems: "center",
980
+ children: [jsxRuntime.jsxs(uiKit.Spacings.Inline, {
981
+ scale: "l",
982
+ children: [jsxRuntime.jsx(GitHubPullRequestLink, {}), jsxRuntime.jsx(FeatureFlagToggler, {
983
+ featureFlags: props.featureFlags
984
+ }), jsxRuntime.jsx(EnvironmentSwitcher, {}), jsxRuntime.jsx(TeamSwitcher, {})]
985
+ }), jsxRuntime.jsxs(uiKit.Spacings.Inline, {
986
+ scale: "l",
987
+ alignItems: "center",
988
+ children: [jsxRuntime.jsx(DeploymentTracker, {}), jsxRuntime.jsx(LogEnabler, {}), jsxRuntime.jsx(StaffBarInfo, {})]
989
+ })]
990
+ })
991
+ })]
992
+ })
993
+ });
994
+ const portalContainer = document.getElementById('above-top-navigation');
995
+ if (error || !isStaffMember || !portalContainer) return null;
996
+ return /*#__PURE__*/ReactDOM__default["default"].createPortal(container, portalContainer);
997
+ }
998
+
999
+ exports["default"] = StaffBar;