diff --git a/public/app/core/internationalization/index.tsx b/public/app/core/internationalization/index.tsx
index 16493d8a0c9..6cf9aa881cc 100644
--- a/public/app/core/internationalization/index.tsx
+++ b/public/app/core/internationalization/index.tsx
@@ -1,50 +1,59 @@
-import i18n, { BackendModule } from 'i18next';
+import i18n, { BackendModule, InitOptions } from 'i18next';
+import LanguageDetector, { DetectorOptions } from 'i18next-browser-languagedetector';
import React from 'react';
import { Trans as I18NextTrans, initReactI18next } from 'react-i18next'; // eslint-disable-line no-restricted-imports
-import { DEFAULT_LANGUAGE, LANGUAGES, VALID_LANGUAGES } from './constants';
+import { LANGUAGES, VALID_LANGUAGES } from './constants';
+
+const getLanguagePartFromCode = (code: string) => code.split('-')[0].toLowerCase();
const loadTranslations: BackendModule = {
type: 'backend',
init() {},
async read(language, namespace, callback) {
- const localeDef = LANGUAGES.find((v) => v.code === language);
-
+ let localeDef = LANGUAGES.find((v) => v.code === language);
+ if (!localeDef) {
+ localeDef = LANGUAGES.find((v) => getLanguagePartFromCode(v.code) === getLanguagePartFromCode(language));
+ }
if (!localeDef) {
return callback(new Error('No message loader available for ' + language), null);
}
-
const messages = await localeDef.loader();
callback(null, messages);
},
};
export function initializeI18n(language: string) {
- const validLocale = VALID_LANGUAGES.includes(language) ? language : DEFAULT_LANGUAGE;
-
// This is a placeholder so we can put a 'comment' in the message json files.
// Starts with an underscore so it's sorted to the top of the file. Even though it is in a comment the following line is still extracted
// t('_comment', 'This file is the source of truth for English strings. Edit this to change plurals and other phrases for the UI.');
- return i18n
+ const options: InitOptions = {
+ // We don't bundle any translations, we load them async
+ partialBundledLanguages: true,
+ resources: {},
+
+ // If translations are empty strings (no translation), fall back to the default value in source code
+ returnEmptyString: false,
+
+ pluralSeparator: '__',
+ };
+ let init = i18n;
+ if (language === 'detect') {
+ init = init.use(LanguageDetector);
+ const detection: DetectorOptions = { order: ['navigator'], caches: [] };
+ options.detection = detection;
+ } else {
+ options.lng = VALID_LANGUAGES.includes(language) ? language : undefined;
+ }
+ return init
.use(loadTranslations)
.use(initReactI18next) // passes i18n down to react-i18next
- .init({
- lng: validLocale,
-
- // We don't bundle any translations, we load them async
- partialBundledLanguages: true,
- resources: {},
-
- // If translations are empty strings (no translation), fall back to the default value in source code
- returnEmptyString: false,
-
- pluralSeparator: '__',
- });
+ .init(options);
}
export function changeLanguage(locale: string) {
- const validLocale = VALID_LANGUAGES.includes(locale) ? locale : DEFAULT_LANGUAGE;
+ const validLocale = VALID_LANGUAGES.includes(locale) ? locale : undefined;
return i18n.changeLanguage(validLocale);
}
@@ -63,8 +72,6 @@ export const i18nDate = (value: number | Date | string, format: Intl.DateTimeFor
if (typeof value === 'string') {
return i18nDate(new Date(value), format);
}
- const locale = i18n.options.lng ?? DEFAULT_LANGUAGE;
-
- const dateFormatter = new Intl.DateTimeFormat(locale, format);
+ const dateFormatter = new Intl.DateTimeFormat(i18n.language, format);
return dateFormatter.format(value);
};
diff --git a/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx b/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx
index 01c66b8cf27..b1a2a6ea4fc 100644
--- a/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx
+++ b/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx
@@ -36,6 +36,75 @@ jest.mock('app/features/query/components/QueryEditorRow', () => ({
QueryEditorRow: () =>
hi
,
}));
+jest.mock('./components/rule-editor/util', () => {
+ const originalModule = jest.requireActual('./components/rule-editor/util');
+ return {
+ ...originalModule,
+ getThresholdsForQueries: jest.fn(() => ({})),
+ };
+});
+
+const dataSources = {
+ // can edit rules
+ loki: mockDataSource(
+ {
+ type: DataSourceType.Loki,
+ name: 'loki with ruler',
+ },
+ { alerting: true }
+ ),
+ loki_disabled: mockDataSource(
+ {
+ type: DataSourceType.Loki,
+ name: 'loki disabled for alerting',
+ jsonData: {
+ manageAlerts: false,
+ },
+ },
+ { alerting: true }
+ ),
+ // can edit rules
+ prom: mockDataSource(
+ {
+ type: DataSourceType.Prometheus,
+ name: 'cortex with ruler',
+ },
+ { alerting: true }
+ ),
+ // cannot edit rules
+ loki_local_rule_store: mockDataSource(
+ {
+ type: DataSourceType.Loki,
+ name: 'loki with local rule store',
+ },
+ { alerting: true }
+ ),
+ // cannot edit rules
+ prom_no_ruler_api: mockDataSource(
+ {
+ type: DataSourceType.Loki,
+ name: 'cortex without ruler api',
+ },
+ { alerting: true }
+ ),
+ // not a supported datasource type
+ splunk: mockDataSource(
+ {
+ type: 'splunk',
+ name: 'splunk',
+ },
+ { alerting: true }
+ ),
+};
+
+jest.mock('@grafana/runtime', () => ({
+ ...jest.requireActual('@grafana/runtime'),
+ getDataSourceSrv: jest.fn(() => ({
+ getInstanceSettings: () => dataSources.prom,
+ get: () => dataSources.prom,
+ })),
+}));
+
jest.spyOn(config, 'getAllDataSources');
const mocks = {
@@ -74,59 +143,6 @@ describe('RuleEditor cloud: checking editable data sources', () => {
disableRBAC();
it('for cloud alerts, should only allow to select editable rules sources', async () => {
- const dataSources = {
- // can edit rules
- loki: mockDataSource(
- {
- type: DataSourceType.Loki,
- name: 'loki with ruler',
- },
- { alerting: true }
- ),
- loki_disabled: mockDataSource(
- {
- type: DataSourceType.Loki,
- name: 'loki disabled for alerting',
- jsonData: {
- manageAlerts: false,
- },
- },
- { alerting: true }
- ),
- // can edit rules
- prom: mockDataSource(
- {
- type: DataSourceType.Prometheus,
- name: 'cortex with ruler',
- },
- { alerting: true }
- ),
- // cannot edit rules
- loki_local_rule_store: mockDataSource(
- {
- type: DataSourceType.Loki,
- name: 'loki with local rule store',
- },
- { alerting: true }
- ),
- // cannot edit rules
- prom_no_ruler_api: mockDataSource(
- {
- type: DataSourceType.Loki,
- name: 'cortex without ruler api',
- },
- { alerting: true }
- ),
- // not a supported datasource type
- splunk: mockDataSource(
- {
- type: 'splunk',
- name: 'splunk',
- },
- { alerting: true }
- ),
- };
-
mocks.api.discoverFeatures.mockImplementation(async (dataSourceName) => {
if (dataSourceName === 'loki with ruler' || dataSourceName === 'cortex with ruler') {
return getDiscoverFeaturesMock(PromApplication.Cortex, { rulerApiEnabled: true });
@@ -168,11 +184,22 @@ describe('RuleEditor cloud: checking editable data sources', () => {
await waitForElementToBeRemoved(screen.getAllByTestId('Spinner'));
await ui.inputs.name.find();
- await userEvent.click(await ui.buttons.lotexAlert.get());
+
+ const removeExpressionsButtons = screen.getAllByLabelText('Remove expression');
+ expect(removeExpressionsButtons).toHaveLength(2);
+
+ const switchToCloudButton = screen.getByText('Switch to data source-managed alert rule');
+ expect(switchToCloudButton).toBeInTheDocument();
+
+ await userEvent.click(switchToCloudButton);
+
+ //expressions are removed after switching to data-source managed
+ expect(screen.queryAllByLabelText('Remove expression')).toHaveLength(0);
// check that only rules sources that have ruler available are there
const dataSourceSelect = ui.inputs.dataSource.get();
await userEvent.click(byRole('combobox').get(dataSourceSelect));
+
expect(await byText('loki with ruler').query()).toBeInTheDocument();
expect(byText('cortex with ruler').query()).toBeInTheDocument();
expect(byText('loki with local rule store').query()).not.toBeInTheDocument();
diff --git a/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx b/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx
index 0ed3e4bf9bc..228a0980ade 100644
--- a/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx
+++ b/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx
@@ -1,4 +1,4 @@
-import { waitFor, screen, within, waitForElementToBeRemoved } from '@testing-library/react';
+import { screen, waitFor, waitForElementToBeRemoved, within } from '@testing-library/react';
import userEvent, { PointerEventsCheckLevel } from '@testing-library/user-event';
import React from 'react';
import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor';
@@ -36,6 +36,33 @@ jest.mock('app/features/query/components/QueryEditorRow', () => ({
QueryEditorRow: () =>
hi
,
}));
+jest.mock('./components/rule-editor/util', () => {
+ const originalModule = jest.requireActual('./components/rule-editor/util');
+ return {
+ ...originalModule,
+ getThresholdsForQueries: jest.fn(() => ({})),
+ };
+});
+
+const dataSources = {
+ default: mockDataSource(
+ {
+ type: 'prometheus',
+ name: 'Prom',
+ isDefault: true,
+ },
+ { alerting: true }
+ ),
+};
+
+jest.mock('@grafana/runtime', () => ({
+ ...jest.requireActual('@grafana/runtime'),
+ getDataSourceSrv: jest.fn(() => ({
+ getInstanceSettings: () => dataSources.default,
+ get: () => dataSources.default,
+ })),
+}));
+
jest.mock('app/core/components/AppChrome/AppChromeUpdate', () => ({
AppChromeUpdate: ({ actions }: { actions: React.ReactNode }) =>
{actions}
,
}));
@@ -73,17 +100,6 @@ describe('RuleEditor cloud', () => {
disableRBAC();
it('can create a new cloud alert', async () => {
- const dataSources = {
- default: mockDataSource(
- {
- type: 'prometheus',
- name: 'Prom',
- isDefault: true,
- },
- { alerting: true }
- ),
- };
-
setDataSourceSrv(new MockDataSourceSrv(dataSources));
mocks.getAllDataSources.mockReturnValue(Object.values(dataSources));
mocks.api.setRulerRuleGroup.mockResolvedValue();
@@ -118,7 +134,18 @@ describe('RuleEditor cloud', () => {
renderRuleEditor();
await waitForElementToBeRemoved(screen.getAllByTestId('Spinner'));
- await userEvent.click(await ui.buttons.lotexAlert.find());
+ const removeExpressionsButtons = screen.getAllByLabelText('Remove expression');
+ expect(removeExpressionsButtons).toHaveLength(2);
+
+ const switchToCloudButton = screen.getByText('Switch to data source-managed alert rule');
+ expect(switchToCloudButton).toBeInTheDocument();
+
+ await userEvent.click(switchToCloudButton);
+
+ //expressions are removed after switching to data-source managed
+ expect(screen.queryAllByLabelText('Remove expression')).toHaveLength(0);
+
+ expect(screen.getByTestId('datasource-picker')).toBeInTheDocument();
const dataSourceSelect = ui.inputs.dataSource.get();
await userEvent.click(byRole('combobox').get(dataSourceSelect));
diff --git a/public/app/features/alerting/unified/components/rule-editor/AnnotationsField.tsx b/public/app/features/alerting/unified/components/rule-editor/AnnotationsField.tsx
index 3c5bf22ef95..fead5d2dc60 100644
--- a/public/app/features/alerting/unified/components/rule-editor/AnnotationsField.tsx
+++ b/public/app/features/alerting/unified/components/rule-editor/AnnotationsField.tsx
@@ -1,5 +1,5 @@
import { css, cx } from '@emotion/css';
-import produce from 'immer';
+import { produce } from 'immer';
import React, { useEffect, useState } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
import { useToggle } from 'react-use';
diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/AlertType.test.tsx b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/AlertType.test.tsx
deleted file mode 100644
index 14041e827bb..00000000000
--- a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/AlertType.test.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { render } from '@testing-library/react';
-import React from 'react';
-import { FormProvider, useForm } from 'react-hook-form';
-import { Provider } from 'react-redux';
-import { Router } from 'react-router-dom';
-import { byText } from 'testing-library-selector';
-
-import { locationService } from '@grafana/runtime';
-import { contextSrv } from 'app/core/services/context_srv';
-import { configureStore } from 'app/store/configureStore';
-import { AccessControlAction } from 'app/types';
-
-import { AlertType } from './AlertType';
-
-const ui = {
- ruleTypePicker: {
- grafanaManagedButton: byText('Grafana managed alert'),
- mimirOrLokiButton: byText('Mimir or Loki alert'),
- mimirOrLokiRecordingButton: byText('Mimir or Loki recording rule'),
- },
-};
-
-const FormProviderWrapper = ({ children }: React.PropsWithChildren<{}>) => {
- const methods = useForm({});
- return
{children};
-};
-
-function renderAlertTypeStep() {
- const store = configureStore();
-
- render(
-
-
-
-
- ,
- { wrapper: FormProviderWrapper }
- );
-}
-
-describe('RuleTypePicker', () => {
- describe('RBAC', () => {
- it('Should display grafana and mimir alert when user has rule create and write permissions', async () => {
- jest.spyOn(contextSrv, 'hasPermission').mockImplementation((action) => {
- return [AccessControlAction.AlertingRuleCreate, AccessControlAction.AlertingRuleExternalWrite].includes(
- action as AccessControlAction
- );
- });
-
- renderAlertTypeStep();
-
- expect(ui.ruleTypePicker.grafanaManagedButton.get()).toBeInTheDocument();
- expect(ui.ruleTypePicker.mimirOrLokiButton.get()).toBeInTheDocument();
- });
-
- it('Should not display the recording rule button', async () => {
- jest.spyOn(contextSrv, 'hasPermission').mockImplementation((action) => {
- return [AccessControlAction.AlertingRuleCreate, AccessControlAction.AlertingRuleExternalWrite].includes(
- action as AccessControlAction
- );
- });
-
- renderAlertTypeStep();
- expect(ui.ruleTypePicker.mimirOrLokiRecordingButton.query()).not.toBeInTheDocument();
- });
-
- it('Should hide grafana button when user does not have rule create permission', () => {
- jest.spyOn(contextSrv, 'hasPermission').mockImplementation((action) => {
- return [AccessControlAction.AlertingRuleExternalWrite].includes(action as AccessControlAction);
- });
-
- renderAlertTypeStep();
-
- expect(ui.ruleTypePicker.grafanaManagedButton.query()).not.toBeInTheDocument();
- expect(ui.ruleTypePicker.mimirOrLokiButton.get()).toBeInTheDocument();
- expect(ui.ruleTypePicker.mimirOrLokiRecordingButton.query()).not.toBeInTheDocument();
- });
-
- it('Should hide mimir alert and mimir recording when user does not have rule external write permission', () => {
- jest.spyOn(contextSrv, 'hasPermission').mockImplementation((action) => {
- return [AccessControlAction.AlertingRuleCreate].includes(action as AccessControlAction);
- });
-
- renderAlertTypeStep();
-
- expect(ui.ruleTypePicker.grafanaManagedButton.get()).toBeInTheDocument();
- expect(ui.ruleTypePicker.mimirOrLokiButton.query()).not.toBeInTheDocument();
- expect(ui.ruleTypePicker.mimirOrLokiRecordingButton.query()).not.toBeInTheDocument();
- });
- });
-});
diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/AlertType.tsx b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/CloudDataSourceSelector.tsx
similarity index 55%
rename from public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/AlertType.tsx
rename to public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/CloudDataSourceSelector.tsx
index a11a2884077..c8140a5eec1 100644
--- a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/AlertType.tsx
+++ b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/CloudDataSourceSelector.tsx
@@ -4,24 +4,17 @@ import { useFormContext } from 'react-hook-form';
import { DataSourceInstanceSettings, GrafanaTheme2 } from '@grafana/data';
import { Field, InputControl, useStyles2 } from '@grafana/ui';
-import { contextSrv } from 'app/core/services/context_srv';
-import { AccessControlAction } from 'app/types';
import { RuleFormType, RuleFormValues } from '../../../types/rule-form';
import { CloudRulesSourcePicker } from '../CloudRulesSourcePicker';
-import { RuleTypePicker } from '../rule-types/RuleTypePicker';
-interface Props {
- editingExistingRule: boolean;
+export interface CloudDataSourceSelectorProps {
+ onChangeCloudDatasource: (datasourceUid: string) => void;
}
-
-export const AlertType = ({ editingExistingRule }: Props) => {
- const { enabledRuleTypes, defaultRuleType } = getAvailableRuleTypes();
-
+export const CloudDataSourceSelector = ({ onChangeCloudDatasource }: CloudDataSourceSelectorProps) => {
const {
control,
formState: { errors },
- getValues,
setValue,
watch,
} = useFormContext
();
@@ -31,26 +24,6 @@ export const AlertType = ({ editingExistingRule }: Props) => {
return (
<>
- {!editingExistingRule && ruleFormType !== RuleFormType.cloudRecording && (
-
- (
-
- )}
- name="type"
- control={control}
- rules={{
- required: { value: true, message: 'Please select alert type' },
- }}
- />
-
- )}
-
{(ruleFormType === RuleFormType.cloudAlerting || ruleFormType === RuleFormType.cloudRecording) && (
{
// reset expression as they don't need to persist after changing datasources
setValue('expression', '');
onChange(ds?.name ?? null);
+ onChangeCloudDatasource(ds?.uid ?? null);
}}
/>
)}
@@ -86,25 +60,6 @@ export const AlertType = ({ editingExistingRule }: Props) => {
);
};
-function getAvailableRuleTypes() {
- const canCreateGrafanaRules = contextSrv.hasAccess(
- AccessControlAction.AlertingRuleCreate,
- contextSrv.hasEditPermissionInFolders
- );
- const canCreateCloudRules = contextSrv.hasAccess(AccessControlAction.AlertingRuleExternalWrite, contextSrv.isEditor);
- const defaultRuleType = canCreateGrafanaRules ? RuleFormType.grafana : RuleFormType.cloudAlerting;
-
- const enabledRuleTypes: RuleFormType[] = [];
- if (canCreateGrafanaRules) {
- enabledRuleTypes.push(RuleFormType.grafana);
- }
- if (canCreateCloudRules) {
- enabledRuleTypes.push(RuleFormType.cloudAlerting, RuleFormType.cloudRecording);
- }
-
- return { enabledRuleTypes, defaultRuleType };
-}
-
const getStyles = (theme: GrafanaTheme2) => ({
formInput: css`
width: 330px;
diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx
index 6d83fa64b36..1118e04c4fb 100644
--- a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx
+++ b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx
@@ -1,5 +1,6 @@
import { css } from '@emotion/css';
-import React, { useCallback, useEffect, useMemo, useReducer } from 'react';
+import { cloneDeep } from 'lodash';
+import React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react';
import { useFormContext } from 'react-hook-form';
import { getDefaultRelativeTimeRange, GrafanaTheme2 } from '@grafana/data';
@@ -9,13 +10,15 @@ import { config, getDataSourceSrv } from '@grafana/runtime';
import { Alert, Button, Dropdown, Field, Icon, InputControl, Menu, MenuItem, Tooltip, useStyles2 } from '@grafana/ui';
import { H5 } from '@grafana/ui/src/unstable';
import { isExpressionQuery } from 'app/features/expressions/guards';
-import { ExpressionQueryType, expressionTypes } from 'app/features/expressions/types';
+import { ExpressionDatasourceUID, ExpressionQueryType, expressionTypes } from 'app/features/expressions/types';
+import { useDispatch } from 'app/types';
import { AlertQuery } from 'app/types/unified-alerting-dto';
import { useRulesSourcesWithRuler } from '../../../hooks/useRuleSourcesWithRuler';
+import { fetchAllPromBuildInfoAction } from '../../../state/actions';
import { RuleFormType, RuleFormValues } from '../../../types/rule-form';
import { getDefaultOrFirstCompatibleDataSource } from '../../../utils/datasource';
-import { isPromOrLokiQuery } from '../../../utils/rule-form';
+import { isPromOrLokiQuery, PromOrLokiQuery } from '../../../utils/rule-form';
import { ExpressionEditor } from '../ExpressionEditor';
import { ExpressionsEditor } from '../ExpressionsEditor';
import { NeedHelpInfo } from '../NeedHelpInfo';
@@ -24,13 +27,16 @@ import { RecordingRuleEditor } from '../RecordingRuleEditor';
import { RuleEditorSection } from '../RuleEditorSection';
import { errorFromSeries, refIdExists } from '../util';
-import { AlertType } from './AlertType';
+import { CloudDataSourceSelector } from './CloudDataSourceSelector';
+import { SmartAlertTypeDetector } from './SmartAlertTypeDetector';
import {
+ addExpressions,
addNewDataQuery,
addNewExpression,
duplicateQuery,
queriesAndExpressionsReducer,
removeExpression,
+ removeExpressions,
rewireExpressions,
setDataQueries,
setRecordingRulesQueries,
@@ -68,6 +74,11 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
const isRecordingRuleType = type === RuleFormType.cloudRecording;
const isCloudAlertRuleType = type === RuleFormType.cloudAlerting;
+ const dispatchReduxAction = useDispatch();
+ useEffect(() => {
+ dispatchReduxAction(fetchAllPromBuildInfoAction());
+ }, [dispatchReduxAction]);
+
const rulesSourcesWithRuler = useRulesSourcesWithRuler();
const runQueriesPreview = useCallback(() => {
@@ -135,6 +146,8 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
[condition, queries, handleSetCondition]
);
+ const updateExpressionAndDatasource = useSetExpressionAndDataSource();
+
const onChangeQueries = useCallback(
(updatedQueries: AlertQuery[]) => {
// Most data sources triggers onChange and onRunQueries consecutively
@@ -144,6 +157,8 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
// This way we can access up to date queries in runQueriesPreview without waiting for re-render
setValue('queries', updatedQueries, { shouldValidate: false });
+ updateExpressionAndDatasource(updatedQueries);
+
dispatch(setDataQueries(updatedQueries));
dispatch(updateExpressionTimeRange());
// check if we need to rewire expressions
@@ -156,7 +171,7 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
}
});
},
- [queries, setValue]
+ [queries, setValue, updateExpressionAndDatasource]
);
const onChangeRecordingRulesQueries = useCallback(
@@ -236,9 +251,84 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
const styles = useStyles2(getStyles);
+ // Cloud alerts load data from form values
+ // whereas Grafana managed alerts load data from reducer
+ //when data source is changed in the cloud selector we need to update the queries in the reducer
+
+ const onChangeCloudDatasource = useCallback(
+ (datasourceUid: string) => {
+ const newQueries = cloneDeep(queries);
+ newQueries[0].datasourceUid = datasourceUid;
+ setValue('queries', newQueries, { shouldValidate: false });
+
+ updateExpressionAndDatasource(newQueries);
+
+ dispatch(setDataQueries(newQueries));
+ },
+ [queries, setValue, updateExpressionAndDatasource, dispatch]
+ );
+
+ // ExpressionEditor for cloud query needs to update queries in the reducer and in the form
+ // otherwise the value is not updated for Grafana managed alerts
+
+ const onChangeExpression = (value: string) => {
+ const newQueries = cloneDeep(queries);
+
+ if (newQueries[0].model) {
+ if (isPromOrLokiQuery(newQueries[0].model)) {
+ newQueries[0].model.expr = value;
+ } else {
+ // first time we come from grafana-managed type
+ // we need to convert the model to PromOrLokiQuery
+ const promLoki: PromOrLokiQuery = {
+ ...cloneDeep(newQueries[0].model),
+ expr: value,
+ };
+ newQueries[0].model = promLoki;
+ }
+ }
+
+ setValue('queries', newQueries, { shouldValidate: false });
+
+ updateExpressionAndDatasource(newQueries);
+
+ dispatch(setDataQueries(newQueries));
+ runQueriesPreview();
+ };
+
+ const removeExpressionsInQueries = useCallback(() => dispatch(removeExpressions()), [dispatch]);
+
+ const addExpressionsInQueries = useCallback(
+ (expressions: AlertQuery[]) => dispatch(addExpressions(expressions)),
+ [dispatch]
+ );
+
+ // we need to keep track of the previous expressions to be able to restore them when switching back to grafana managed
+ const [prevExpressions, setPrevExpressions] = useState([]);
+
+ const restoreExpressionsInQueries = useCallback(() => {
+ addExpressionsInQueries(prevExpressions);
+ }, [prevExpressions, addExpressionsInQueries]);
+
+ const onClickSwitch = useCallback(() => {
+ const typeInForm = getValues('type');
+ if (typeInForm === RuleFormType.cloudAlerting) {
+ setValue('type', RuleFormType.grafana);
+ setPrevExpressions.length > 0 && restoreExpressionsInQueries();
+ } else {
+ setValue('type', RuleFormType.cloudAlerting);
+ const expressions = queries.filter((query) => query.datasourceUid === ExpressionDatasourceUID);
+ setPrevExpressions(expressions);
+ removeExpressionsInQueries();
+ }
+ }, [getValues, setValue, queries, removeExpressionsInQueries, restoreExpressionsInQueries, setPrevExpressions]);
+
return (
-
+ {/* This is the cloud data source selector */}
+ {(type === RuleFormType.cloudRecording || type === RuleFormType.cloudAlerting) && (
+
+ )}
{/* This is the PromQL Editor for recording rules */}
{isRecordingRuleType && dataSourceName && (
@@ -255,24 +345,33 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
{/* This is the PromQL Editor for Cloud rules */}
{isCloudAlertRuleType && dataSourceName && (
-
- {
- return (
-
- );
- }}
- control={control}
- rules={{
- required: { value: true, message: 'A valid expression is required' },
- }}
+
+
+ {
+ return (
+
+ );
+ }}
+ control={control}
+ rules={{
+ required: { value: true, message: 'A valid expression is required' },
+ }}
+ />
+
+
-
+
)}
{/* This is the editor for Grafana managed rules */}
@@ -319,6 +418,12 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
Add query
+
{/* Expression Queries */}
Expressions
Manipulate data returned from queries with math and other operations
@@ -418,3 +523,22 @@ const getStyles = (theme: GrafanaTheme2) => ({
color: ${theme.colors.text.link};
`,
});
+
+const useSetExpressionAndDataSource = () => {
+ const { setValue } = useFormContext();
+ return (updatedQueries: AlertQuery[]) => {
+ // update data source name and expression if it's been changed in the queries from the reducer when prom or loki query
+ const query = updatedQueries[0];
+ const dataSourceSettings = getDataSourceSrv().getInstanceSettings(query.datasourceUid);
+ if (!dataSourceSettings) {
+ throw new Error('The Data source has not been defined.');
+ }
+ setValue('dataSourceName', dataSourceSettings.name);
+
+ if (isPromOrLokiQuery(query.model)) {
+ const expression = query.model.expr;
+
+ setValue('expression', expression);
+ }
+ };
+};
diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/SmartAlertTypeDetector.tsx b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/SmartAlertTypeDetector.tsx
new file mode 100644
index 00000000000..067939436ee
--- /dev/null
+++ b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/SmartAlertTypeDetector.tsx
@@ -0,0 +1,180 @@
+import { css } from '@emotion/css';
+import React from 'react';
+import { useFormContext } from 'react-hook-form';
+
+import { DataSourceInstanceSettings, GrafanaTheme2 } from '@grafana/data';
+import { Stack } from '@grafana/experimental';
+import { DataSourceJsonData } from '@grafana/schema';
+import { Alert, useStyles2 } from '@grafana/ui';
+import { contextSrv } from 'app/core/core';
+import { ExpressionDatasourceUID } from 'app/features/expressions/types';
+import { AccessControlAction } from 'app/types';
+import { AlertQuery } from 'app/types/unified-alerting-dto';
+
+import { RuleFormType, RuleFormValues } from '../../../types/rule-form';
+import { NeedHelpInfo } from '../NeedHelpInfo';
+
+function getAvailableRuleTypes() {
+ const canCreateGrafanaRules = contextSrv.hasAccess(
+ AccessControlAction.AlertingRuleCreate,
+ contextSrv.hasEditPermissionInFolders
+ );
+ const canCreateCloudRules = contextSrv.hasAccess(AccessControlAction.AlertingRuleExternalWrite, contextSrv.isEditor);
+ const defaultRuleType = canCreateGrafanaRules ? RuleFormType.grafana : RuleFormType.cloudAlerting;
+
+ const enabledRuleTypes: RuleFormType[] = [];
+ if (canCreateGrafanaRules) {
+ enabledRuleTypes.push(RuleFormType.grafana);
+ }
+ if (canCreateCloudRules) {
+ enabledRuleTypes.push(RuleFormType.cloudAlerting, RuleFormType.cloudRecording);
+ }
+
+ return { enabledRuleTypes, defaultRuleType };
+}
+
+const onlyOneDSInQueries = (queries: AlertQuery[]) => {
+ return queries.filter((q) => q.datasourceUid !== ExpressionDatasourceUID).length === 1;
+};
+const getCanSwitch = ({
+ queries,
+ ruleFormType,
+ editingExistingRule,
+ rulesSourcesWithRuler,
+}: {
+ rulesSourcesWithRuler: Array>;
+ queries: AlertQuery[];
+ ruleFormType: RuleFormType | undefined;
+ editingExistingRule: boolean;
+}) => {
+ // get available rule types
+ const availableRuleTypes = getAvailableRuleTypes();
+
+ // check if we have only one query in queries and if it's a cloud datasource
+ const onlyOneDS = onlyOneDSInQueries(queries);
+ const dataSourceIdFromQueries = queries[0]?.datasourceUid ?? '';
+ const isRecordingRuleType = ruleFormType === RuleFormType.cloudRecording;
+
+ //let's check if we switch to cloud type
+ const canSwitchToCloudRule =
+ !editingExistingRule &&
+ !isRecordingRuleType &&
+ onlyOneDS &&
+ rulesSourcesWithRuler.some((dsJsonData) => dsJsonData.uid === dataSourceIdFromQueries);
+
+ const canSwitchToGrafanaRule = !editingExistingRule && !isRecordingRuleType;
+ // check for enabled types
+ const grafanaTypeEnabled = availableRuleTypes.enabledRuleTypes.includes(RuleFormType.grafana);
+ const cloudTypeEnabled = availableRuleTypes.enabledRuleTypes.includes(RuleFormType.cloudAlerting);
+
+ // can we switch to the other type? (cloud or grafana)
+ const canSwitchFromCloudToGrafana =
+ ruleFormType === RuleFormType.cloudAlerting && grafanaTypeEnabled && canSwitchToGrafanaRule;
+ const canSwitchFromGrafanaToCloud =
+ ruleFormType === RuleFormType.grafana && canSwitchToCloudRule && cloudTypeEnabled && canSwitchToCloudRule;
+
+ return canSwitchFromCloudToGrafana || canSwitchFromGrafanaToCloud;
+};
+
+export interface SmartAlertTypeDetectorProps {
+ editingExistingRule: boolean;
+ rulesSourcesWithRuler: Array>;
+ queries: AlertQuery[];
+ onClickSwitch: () => void;
+}
+
+const getContentText = (ruleFormType: RuleFormType, isEditing: boolean, dataSourceName: string, canSwitch: boolean) => {
+ if (isEditing) {
+ if (ruleFormType === RuleFormType.grafana) {
+ return {
+ contentText: `Grafana-managed alert rules allow you to create alerts that can act on data from any of our supported data sources, including having multiple data sources in the same rule. You can also add expressions to transform your data and set alert conditions. Using images in alert notifications is also supported. `,
+ title: `This alert rule is managed by Grafana.`,
+ };
+ } else {
+ return {
+ contentText: `Data source-managed alert rules can be used for Grafana Mimir or Grafana Loki data sources which have been configured to support rule creation. The use of expressions or multiple queries is not supported.`,
+ title: `This alert rule is managed by the data source ${dataSourceName}.`,
+ };
+ }
+ }
+ if (canSwitch) {
+ if (ruleFormType === RuleFormType.cloudAlerting) {
+ return {
+ contentText:
+ 'Data source-managed alert rules can be used for Grafana Mimir or Grafana Loki data sources which have been configured to support rule creation. The use of expressions or multiple queries is not supported.',
+ title: `This alert rule is managed by the data source ${dataSourceName}. If you want to use expressions or have multiple queries, switch to a Grafana-managed alert rule.`,
+ };
+ } else {
+ return {
+ contentText:
+ 'Grafana-managed alert rules allow you to create alerts that can act on data from any of our supported data sources, including having multiple data sources in the same rule. You can also add expressions to transform your data and set alert conditions. Using images in alert notifications is also supported.',
+ title: `This alert rule will be managed by Grafana. The selected data source is configured to support rule creation. You can switch to data source-managed alert rule.`,
+ };
+ }
+ } else {
+ // it can be only grafana rule
+ return {
+ contentText: `Grafana-managed alert rules allow you to create alerts that can act on data from any of our supported data sources, including having multiple data sources in the same rule. You can also add expressions to transform your data and set alert conditions. Using images in alert notifications is also supported.`,
+ title: `Based on the selected data sources this alert rule will be managed by Grafana.`,
+ };
+ }
+};
+
+export function SmartAlertTypeDetector({
+ editingExistingRule,
+ rulesSourcesWithRuler,
+ queries,
+ onClickSwitch,
+}: SmartAlertTypeDetectorProps) {
+ const { getValues } = useFormContext();
+
+ const [ruleFormType, dataSourceName] = getValues(['type', 'dataSourceName']);
+ const styles = useStyles2(getStyles);
+
+ const canSwitch = getCanSwitch({ queries, ruleFormType, editingExistingRule, rulesSourcesWithRuler });
+
+ const typeTitle =
+ ruleFormType === RuleFormType.cloudAlerting ? 'Data source-managed alert rule' : 'Grafana-managed alert rule';
+ const switchToLabel = ruleFormType !== RuleFormType.cloudAlerting ? 'data source-managed' : 'Grafana-managed';
+
+ const content = ruleFormType
+ ? getContentText(ruleFormType, editingExistingRule, dataSourceName ?? '', canSwitch)
+ : undefined;
+
+ return (
+
+
+
+ {content?.title}
+
+
+
+
+
+
+ );
+}
+
+const getStyles = (theme: GrafanaTheme2) => ({
+ alertText: css`
+ max-width: fit-content;
+ flex: 1;
+ `,
+ alert: css`
+ margin-top: ${theme.spacing(2)};
+ `,
+ needInfo: css`
+ flex: 1;
+ max-width: fit-content;
+ `,
+});
diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts
index 45e9d0861cf..bead457326e 100644
--- a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts
+++ b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts
@@ -35,6 +35,8 @@ export const setDataQueries = createAction('setDataQueries');
export const addNewExpression = createAction('addNewExpression');
export const removeExpression = createAction('removeExpression');
+export const removeExpressions = createAction('removeExpressions');
+export const addExpressions = createAction('addExpressions');
export const updateExpression = createAction('updateExpression');
export const updateExpressionRefId = createAction<{ oldRefId: string; newRefId: string }>('updateExpressionRefId');
export const rewireExpressions = createAction<{ oldRefId: string; newRefId: string }>('rewireExpressions');
@@ -111,6 +113,12 @@ export const queriesAndExpressionsReducer = createReducer(initialState, (builder
.addCase(removeExpression, (state, { payload }) => {
state.queries = state.queries.filter((query) => query.refId !== payload);
})
+ .addCase(removeExpressions, (state) => {
+ state.queries = state.queries.filter((query) => !isExpressionQuery(query.model));
+ })
+ .addCase(addExpressions, (state, { payload }) => {
+ state.queries = [...state.queries, ...payload];
+ })
.addCase(updateExpression, (state, { payload }) => {
state.queries = state.queries.map((query) => {
const dataSourceAlertQuery = findDataSourceFromExpression(state.queries, payload.expression);
diff --git a/public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx b/public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx
index 252422d0bd8..12584fb07a1 100644
--- a/public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx
+++ b/public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx
@@ -1,5 +1,5 @@
import { css } from '@emotion/css';
-import produce from 'immer';
+import { produce } from 'immer';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useObservable, useToggle } from 'react-use';
diff --git a/public/app/features/alerting/unified/hooks/useFilteredRules.ts b/public/app/features/alerting/unified/hooks/useFilteredRules.ts
index 228eea3dc78..c336d065fc6 100644
--- a/public/app/features/alerting/unified/hooks/useFilteredRules.ts
+++ b/public/app/features/alerting/unified/hooks/useFilteredRules.ts
@@ -1,5 +1,5 @@
import uFuzzy from '@leeoniya/ufuzzy';
-import produce from 'immer';
+import { produce } from 'immer';
import { compact, isEmpty } from 'lodash';
import { useCallback, useEffect, useMemo } from 'react';
diff --git a/public/app/features/alerting/unified/mocks.ts b/public/app/features/alerting/unified/mocks.ts
index 33d01764c7c..e3eac047bb1 100644
--- a/public/app/features/alerting/unified/mocks.ts
+++ b/public/app/features/alerting/unified/mocks.ts
@@ -1,4 +1,4 @@
-import produce from 'immer';
+import { produce } from 'immer';
import {
DataSourceApi,
diff --git a/public/app/features/browse-dashboards/components/BrowseView.test.tsx b/public/app/features/browse-dashboards/components/BrowseView.test.tsx
index 608bdd6490c..b0a1ade87f1 100644
--- a/public/app/features/browse-dashboards/components/BrowseView.test.tsx
+++ b/public/app/features/browse-dashboards/components/BrowseView.test.tsx
@@ -9,7 +9,8 @@ import { wellFormedTree } from '../fixtures/dashboardsTreeItem.fixture';
import { BrowseView } from './BrowseView';
-const [mockTree, { folderA, folderA_folderA, folderA_folderB, folderA_folderB_dashbdB, dashbdD }] = wellFormedTree();
+const [mockTree, { folderA, folderA_folderA, folderA_folderB, folderA_folderB_dashbdB, dashbdD, folderB_empty }] =
+ wellFormedTree();
function render(...[ui, options]: Parameters) {
rtlRender({ui}, options);
@@ -143,6 +144,18 @@ describe('browse-dashboards BrowseView', () => {
expect(grandparentCheckbox).not.toBeChecked();
expect(grandparentCheckbox).toBePartiallyChecked();
});
+
+ describe('when there is no item in the folder', () => {
+ it('shows a CTA for creating a dashboard if the user has editor rights', async () => {
+ render();
+ expect(await screen.findByText('Create Dashboard')).toBeInTheDocument();
+ });
+
+ it('shows a simple message if the user has viewer rights', async () => {
+ render();
+ expect(await screen.findByText('This folder is empty')).toBeInTheDocument();
+ });
+ });
});
async function expandFolder(uid: string) {
diff --git a/public/app/features/browse-dashboards/components/BrowseView.tsx b/public/app/features/browse-dashboards/components/BrowseView.tsx
index 21baa345355..4c657da02db 100644
--- a/public/app/features/browse-dashboards/components/BrowseView.tsx
+++ b/public/app/features/browse-dashboards/components/BrowseView.tsx
@@ -1,5 +1,6 @@
import React, { useCallback } from 'react';
+import { CallToActionCard } from '@grafana/ui';
import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';
import { DashboardViewItem } from 'app/features/search/types';
import { useDispatch } from 'app/types';
@@ -115,16 +116,20 @@ export function BrowseView({ folderUID, width, height, canSelect }: BrowseViewPr
if (status === 'fulfilled' && flatTree.length === 0) {
return (
- '}
- proTipLink={folderUID && 'dashboards'}
- proTipLinkTitle={folderUID && 'Browse dashboards'}
- proTipTarget=""
- />
+ {canSelect ? (
+ '}
+ proTipLink={folderUID && 'dashboards'}
+ proTipLinkTitle={folderUID && 'Browse dashboards'}
+ proTipTarget=""
+ />
+ ) : (
+ This folder is empty} />
+ )}
);
}
diff --git a/public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx b/public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx
index f3b7f49da1a..1a4506245ad 100644
--- a/public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx
+++ b/public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx
@@ -346,107 +346,6 @@ class UnThemedTransformationsEditor extends React.PureComponent (
- <>
- {config.featureToggles.transformationsRedesign && (
- <>
- {!noTransforms && (
-
- )}
-
- >
- )}
-
- {!config.featureToggles.transformationsRedesign && (
-
- )}
-
- {!config.featureToggles.transformationsRedesign &&
- xforms.map((t) => {
- return (
- {
- this.onTransformationAdd({ value: t.id });
- }}
- />
- );
- })}
-
- {config.featureToggles.transformationsRedesign && (
-
-
-
- Show images{' '}
- this.setState({ showIllustrations: !this.state.showIllustrations })}
- />
-
-
- )}
-
- {config.featureToggles.transformationsRedesign && (
-
- {filterCategoriesLabels.map(([slug, label]) => {
- return (
- this.setState({ selectedFilter: slug })}
- label={label}
- selected={this.state.selectedFilter === slug}
- />
- );
- })}
-
- )}
-
- {config.featureToggles.transformationsRedesign && (
- {
- this.onTransformationAdd({ value: id });
- }}
- />
- )}
-
- >
- );
-
return (
<>
{noTransforms && (
@@ -487,7 +386,109 @@ class UnThemedTransformationsEditor extends React.PureComponent
)}
{showPicker ? (
-
+ <>
+ {config.featureToggles.transformationsRedesign && (
+ <>
+ {!noTransforms && (
+
+ )}
+
+ >
+ )}
+
+ {!config.featureToggles.transformationsRedesign && (
+
+ )}
+
+ {!config.featureToggles.transformationsRedesign &&
+ xforms.map((t) => {
+ return (
+ {
+ this.onTransformationAdd({ value: t.id });
+ }}
+ />
+ );
+ })}
+
+ {config.featureToggles.transformationsRedesign && (
+
+
+
+ Show images{' '}
+ this.setState({ showIllustrations: !this.state.showIllustrations })}
+ />
+
+
+ )}
+
+ {config.featureToggles.transformationsRedesign && (
+
+ {filterCategoriesLabels.map(([slug, label]) => {
+ return (
+ this.setState({ selectedFilter: slug })}
+ label={label}
+ selected={this.state.selectedFilter === slug}
+ />
+ );
+ })}
+
+ )}
+
+ {config.featureToggles.transformationsRedesign && (
+ {
+ this.onTransformationAdd({ value: id });
+ }}
+ />
+ )}
+
+ >
) : (
diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx
index 149dbcb0616..fa042b933ab 100644
--- a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx
+++ b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx
@@ -19,6 +19,7 @@ import React, { useState } from 'react';
import { createTheme } from '@grafana/data';
import { defaultFilters } from '../../../useSearch';
+import { trace } from '../TracePageHeader.test';
import NextPrevResult, { getStyles } from './NextPrevResult';
@@ -37,6 +38,7 @@ describe('', () => {
const NextPrevResultWithProps = (props: { matches: string[] | undefined }) => {
const [focusedSpanIndexForSearch, setFocusedSpanIndexForSearch] = useState(-1);
const searchBarProps = {
+ trace: trace,
search: defaultFilters,
spanFilterMatches: props.matches ? new Set(props.matches) : undefined,
showSpanFilterMatchesOnly: false,
@@ -46,7 +48,6 @@ describe('', () => {
setFocusedSpanIndexForSearch: setFocusedSpanIndexForSearch,
datasourceType: '',
clear: jest.fn(),
- totalSpans: 100,
showSpanFilters: true,
};
@@ -70,11 +71,11 @@ describe('', () => {
it('renders total spans', async () => {
render();
- expect(screen.getByText('100 spans')).toBeDefined();
+ expect(screen.getByText('3 spans')).toBeDefined();
});
it('renders buttons that can be used to search if filters added', () => {
- render();
+ render();
const nextResButton = screen.queryByRole('button', { name: 'Next result button' });
const prevResButton = screen.queryByRole('button', { name: 'Prev result button' });
expect(nextResButton).toBeInTheDocument();
@@ -85,7 +86,7 @@ describe('', () => {
});
it('renders correctly when moving through matches', async () => {
- render();
+ render();
const nextResButton = screen.queryByRole('button', { name: 'Next result button' });
const prevResButton = screen.queryByRole('button', { name: 'Prev result button' });
expect(screen.getByText('3 matches')).toBeDefined();
@@ -106,7 +107,7 @@ describe('', () => {
it('renders correctly when there are no matches i.e. too many filters added', async () => {
const { container } = render();
const theme = createTheme();
- const tooltip = container.querySelector('.' + getStyles(theme, true).matchesTooltip);
+ const tooltip = container.querySelector('.' + getStyles(theme, true).tooltip);
expect(screen.getByText('0 matches')).toBeDefined();
userEvent.hover(tooltip!);
jest.advanceTimersByTime(1000);
@@ -114,4 +115,16 @@ describe('', () => {
expect(screen.getByText(/0 span matches for the filters selected/)).toBeDefined();
});
});
+
+ it('renders services, depth correctly', async () => {
+ const { container } = render();
+ const theme = createTheme();
+ const tooltip = container.querySelector('.' + getStyles(theme, true).tooltip);
+ userEvent.hover(tooltip!);
+ jest.advanceTimersByTime(1000);
+ await waitFor(() => {
+ expect(screen.getByText(/Services: 2\/3/)).toBeDefined();
+ expect(screen.getByText(/Depth: 1\/1/)).toBeDefined();
+ });
+ });
});
diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx
index 79230e4a76c..98c725b3918 100644
--- a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx
+++ b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx
@@ -13,31 +13,34 @@
// limitations under the License.
import { css, cx } from '@emotion/css';
-import React, { memo, Dispatch, SetStateAction, useEffect } from 'react';
+import { get, maxBy, values } from 'lodash';
+import React, { memo, Dispatch, SetStateAction, useEffect, useCallback } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { config, reportInteraction } from '@grafana/runtime';
-import { Icon, Tooltip, useTheme2 } from '@grafana/ui';
+import { Icon, PopoverContent, Tooltip, useTheme2 } from '@grafana/ui';
import { getButtonStyles } from '@grafana/ui/src/components/Button';
+import { Trace } from '../../types';
+
export type NextPrevResultProps = {
+ trace: Trace;
spanFilterMatches: Set | undefined;
setFocusedSpanIdForSearch: Dispatch>;
focusedSpanIndexForSearch: number;
setFocusedSpanIndexForSearch: Dispatch>;
datasourceType: string;
- totalSpans: number;
showSpanFilters: boolean;
};
export default memo(function NextPrevResult(props: NextPrevResultProps) {
const {
+ trace,
spanFilterMatches,
setFocusedSpanIdForSearch,
focusedSpanIndexForSearch,
setFocusedSpanIndexForSearch,
datasourceType,
- totalSpans,
showSpanFilters,
} = props;
const styles = getStyles(useTheme2(), showSpanFilters);
@@ -109,30 +112,88 @@ export default memo(function NextPrevResult(props: NextPrevResultProps) {
};
const buttonEnabled = (spanFilterMatches && spanFilterMatches?.size > 0) ?? false;
- const amountText = spanFilterMatches?.size === 1 ? 'match' : 'matches';
- const matches =
- spanFilterMatches?.size === 0 ? (
- <>
- 0 matches
-
-
-
+ const buttonClass = buttonEnabled ? styles.button : cx(styles.button, styles.buttonDisabled);
+
+ const getTooltip = useCallback(
+ (content: PopoverContent) => {
+ return (
+
+
+
- >
- ) : focusedSpanIndexForSearch !== -1 ? (
- `${focusedSpanIndexForSearch + 1}/${spanFilterMatches?.size} ${amountText}`
- ) : (
- `${spanFilterMatches?.size} ${amountText}`
- );
- const buttonClass = buttonEnabled ? styles.button : cx(styles.button, styles.buttonDisabled);
+ );
+ },
+ [styles.tooltip]
+ );
+
+ const getMatchesMetadata = useCallback(
+ (depth: number, services: number) => {
+ const matchedServices: string[] = [];
+ const matchedDepth: number[] = [];
+ let metadata = (
+ <>
+ {`${trace.spans.length} spans`}
+ {getTooltip(
+ <>
+ Services: {services}
+ Depth: {depth}
+ >
+ )}
+ >
+ );
+
+ if (spanFilterMatches) {
+ spanFilterMatches.forEach((spanID) => {
+ matchedServices.push(trace.processes[spanID].serviceName);
+ matchedDepth.push(trace.spans.find((span) => span.spanID === spanID)?.depth || 0);
+ });
+
+ if (spanFilterMatches.size === 0) {
+ metadata = (
+ <>
+ 0 matches
+ {getTooltip(
+ 'There are 0 span matches for the filters selected. Please try removing some of the selected filters.'
+ )}
+ >
+ );
+ } else {
+ const type = spanFilterMatches.size === 1 ? 'match' : 'matches';
+ const text =
+ focusedSpanIndexForSearch !== -1
+ ? `${focusedSpanIndexForSearch + 1}/${spanFilterMatches.size} ${type}`
+ : `${spanFilterMatches.size} ${type}`;
+
+ metadata = (
+ <>
+ {text}
+ {getTooltip(
+ <>
+
+ Services: {new Set(matchedServices).size}/{services}
+
+
+ Depth: {new Set(matchedDepth).size}/{depth}
+
+ >
+ )}
+ >
+ );
+ }
+ }
+
+ return metadata;
+ },
+ [focusedSpanIndexForSearch, getTooltip, spanFilterMatches, trace.processes, trace.spans]
+ );
+
+ const services = new Set(values(trace.processes).map((p) => p.serviceName)).size;
+ const depth = get(maxBy(trace.spans, 'depth'), 'depth', 0) + 1;
return (
<>
- {spanFilterMatches ? matches : `${totalSpans} spans`}
+ {getMatchesMetadata(depth, services)}
{
matches: css`
margin-right: ${theme.spacing(2)};
`,
- matchesTooltip: css`
+ tooltip: css`
color: #aaa;
- margin: -2px 0 0 10px;
+ margin: 0 0 0 5px;
`,
};
};
diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx
index 23681adbd37..add4cd20652 100644
--- a/public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx
+++ b/public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx
@@ -277,12 +277,12 @@ export const SpanFilters = memo((props: SpanFilterProps) => {
{!showSpanFilters && (
@@ -448,7 +448,7 @@ export const SpanFilters = memo((props: SpanFilterProps) => {
{
expect(scrollIntoView).not.toHaveBeenCalled();
});
});
+
+ it('should render the menu cell on mouse over', async () => {
+ setup({ showContextToggle: jest.fn().mockReturnValue(true) });
+
+ expect(screen.queryByLabelText('Show context')).not.toBeInTheDocument();
+
+ await userEvent.hover(screen.getByText('test123'));
+
+ expect(screen.getByLabelText('Show context')).toBeInTheDocument();
+ });
});
diff --git a/public/app/features/logs/components/LogRow.tsx b/public/app/features/logs/components/LogRow.tsx
index 2872ed72753..c6a1ba86930 100644
--- a/public/app/features/logs/components/LogRow.tsx
+++ b/public/app/features/logs/components/LogRow.tsx
@@ -50,6 +50,7 @@ interface Props extends Themeable2 {
interface State {
highlightBackround: boolean;
showDetails: boolean;
+ mouseIsOver: boolean;
}
/**
@@ -63,6 +64,7 @@ class UnThemedLogRow extends PureComponent {
state: State = {
highlightBackround: false,
showDetails: false,
+ mouseIsOver: false,
};
logLineRef: React.RefObject;
@@ -108,12 +110,14 @@ class UnThemedLogRow extends PureComponent {
}
onMouseEnter = () => {
+ this.setState({ mouseIsOver: true });
if (this.props.onLogRowHover) {
this.props.onLogRowHover(this.props.row);
}
};
onMouseLeave = () => {
+ this.setState({ mouseIsOver: false });
if (this.props.onLogRowHover) {
this.props.onLogRowHover(undefined);
}
@@ -249,6 +253,7 @@ class UnThemedLogRow extends PureComponent {
onPinLine={this.props.onPinLine}
onUnpinLine={this.props.onUnpinLine}
pinned={this.props.pinned}
+ mouseIsOver={this.state.mouseIsOver}
/>
)}
diff --git a/public/app/features/logs/components/LogRowMenuCell.tsx b/public/app/features/logs/components/LogRowMenuCell.tsx
index 871b8b3e290..e54ea208d21 100644
--- a/public/app/features/logs/components/LogRowMenuCell.tsx
+++ b/public/app/features/logs/components/LogRowMenuCell.tsx
@@ -15,6 +15,7 @@ interface Props {
onUnpinLine?: (row: LogRowModel) => void;
pinned?: boolean;
styles: LogRowStyles;
+ mouseIsOver: boolean;
}
export const LogRowMenuCell = React.memo(
@@ -28,6 +29,7 @@ export const LogRowMenuCell = React.memo(
row,
showContextToggle,
styles,
+ mouseIsOver,
}: Props) => {
const shouldShowContextToggle = showContextToggle ? showContextToggle(row) : false;
const onLogRowClick = useCallback((e: SyntheticEvent) => {
@@ -42,79 +44,77 @@ export const LogRowMenuCell = React.memo(
);
const getLogText = useCallback(() => logText, [logText]);
return (
- <>
- {pinned && (
- // TODO: fix keyboard a11y
- // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
-
- onUnpinLine && onUnpinLine(row)}
- tooltip="Unpin line"
- tooltipPlacement="top"
- aria-label="Unpin line"
- />
-
- )}
- {/* TODO: fix keyboard a11y */}
- {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}
-
- {shouldShowContextToggle && (
-
- )}
-
+ {pinned && !mouseIsOver && (
+ onUnpinLine && onUnpinLine(row)}
+ tooltip="Unpin line"
tooltipPlacement="top"
+ aria-label="Unpin line"
/>
- {pinned && onUnpinLine && (
-
+ {shouldShowContextToggle && (
+
+ )}
+ onUnpinLine && onUnpinLine(row)}
- tooltip="Unpin line"
+ getText={getLogText}
+ tooltip="Copy to clipboard"
tooltipPlacement="top"
- aria-label="Unpin line"
/>
- )}
- {!pinned && onPinLine && (
- onPinLine && onPinLine(row)}
- tooltip="Pin line"
- tooltipPlacement="top"
- aria-label="Pin line"
- />
- )}
- {onPermalinkClick && row.uid && (
- onPermalinkClick(row)}
- />
- )}
-
- >
+ {pinned && onUnpinLine && (
+ onUnpinLine && onUnpinLine(row)}
+ tooltip="Unpin line"
+ tooltipPlacement="top"
+ aria-label="Unpin line"
+ />
+ )}
+ {!pinned && onPinLine && (
+ onPinLine && onPinLine(row)}
+ tooltip="Pin line"
+ tooltipPlacement="top"
+ aria-label="Pin line"
+ />
+ )}
+ {onPermalinkClick && row.uid && (
+ onPermalinkClick(row)}
+ />
+ )}
+ >
+ )}
+
);
}
);
diff --git a/public/app/features/logs/components/LogRowMessage.test.tsx b/public/app/features/logs/components/LogRowMessage.test.tsx
index a7133bdc999..0b1b791d9fc 100644
--- a/public/app/features/logs/components/LogRowMessage.test.tsx
+++ b/public/app/features/logs/components/LogRowMessage.test.tsx
@@ -1,4 +1,4 @@
-import { render, screen } from '@testing-library/react';
+import { render, screen, fireEvent } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React, { ComponentProps } from 'react';
@@ -18,6 +18,7 @@ const setup = (propOverrides?: Partial>, ro
prettifyLogMessage: false,
app: CoreApp.Explore,
styles,
+ mouseIsOver: true,
...(propOverrides || {}),
};
@@ -41,8 +42,9 @@ describe('LogRowMessage', () => {
});
describe('with show context', () => {
- it('should show context button', () => {
+ it('should show context button', async () => {
setup({ showContextToggle: () => true });
+ await userEvent.hover(screen.getByText('test123'));
expect(screen.queryByLabelText('Show context')).toBeInTheDocument();
});
@@ -54,6 +56,7 @@ describe('LogRowMessage', () => {
it('should call `onOpenContext` with row on click', async () => {
const showContextToggle = jest.fn();
const props = setup({ showContextToggle: () => true, onOpenContext: showContextToggle });
+ await userEvent.hover(screen.getByText('test123'));
const button = screen.getByLabelText('Show context');
await userEvent.click(button);
@@ -63,8 +66,9 @@ describe('LogRowMessage', () => {
});
describe('with permalinking', () => {
- it('should show permalinking button when `onPermalinkClick` is defined', () => {
+ it('should show permalinking button when `onPermalinkClick` is defined', async () => {
setup({ onPermalinkClick: jest.fn() });
+ await userEvent.hover(screen.getByText('test123'));
expect(screen.queryByLabelText('Copy shortlink')).toBeInTheDocument();
});
@@ -76,6 +80,7 @@ describe('LogRowMessage', () => {
it('should call `onPermalinkClick` with row on click', async () => {
const permalinkClick = jest.fn();
const props = setup({ onPermalinkClick: permalinkClick });
+ await userEvent.hover(screen.getByText('test123'));
const button = screen.getByLabelText('Copy shortlink');
await userEvent.click(button);
@@ -86,8 +91,9 @@ describe('LogRowMessage', () => {
describe('with pinning', () => {
describe('for `onPinLine`', () => {
- it('should show pinning button when `onPinLine` is defined', () => {
+ it('should show pinning button when `onPinLine` is defined', async () => {
setup({ onPinLine: jest.fn() });
+ await userEvent.hover(screen.getByText('test123'));
expect(screen.queryByLabelText('Pin line')).toBeInTheDocument();
});
@@ -104,6 +110,7 @@ describe('LogRowMessage', () => {
it('should call `onPinLine` on click', async () => {
const onPinLine = jest.fn();
setup({ onPinLine });
+ await userEvent.hover(screen.getByText('test123'));
const button = screen.getByLabelText('Pin line');
await userEvent.click(button);
@@ -118,10 +125,10 @@ describe('LogRowMessage', () => {
expect(screen.queryByLabelText('Unpin line')).not.toBeInTheDocument();
});
- it('should show 2 pinning buttons when `onUnpinLine` and `pinned` is defined', () => {
- // we show 2 because we now have an "always visible" menu, and a "hover" menu
+ it('should show 1 pinning buttons when `onUnpinLine` and `pinned` is defined', () => {
+ // we show 1 because we now have an "always visible" menu, the others are rendered on mouse over
setup({ onUnpinLine: jest.fn(), pinned: true });
- expect(screen.queryAllByLabelText('Unpin line').length).toBe(2);
+ expect(screen.queryAllByLabelText('Unpin line').length).toBe(1);
});
it('should not show pinning button when `onUnpinLine` is not defined', () => {
@@ -132,9 +139,10 @@ describe('LogRowMessage', () => {
it('should call `onUnpinLine` on click', async () => {
const onUnpinLine = jest.fn();
setup({ onUnpinLine, pinned: true });
- const button = screen.getAllByLabelText('Unpin line')[0];
+ const button = screen.getByLabelText('Unpin line');
- await userEvent.click(button);
+ // There's an issue with userEvent and this button, so we use fireEvent instead
+ fireEvent.click(button);
expect(onUnpinLine).toHaveBeenCalledTimes(1);
});
diff --git a/public/app/features/logs/components/LogRowMessage.tsx b/public/app/features/logs/components/LogRowMessage.tsx
index 206cd636968..e2a23b4e4d8 100644
--- a/public/app/features/logs/components/LogRowMessage.tsx
+++ b/public/app/features/logs/components/LogRowMessage.tsx
@@ -21,6 +21,7 @@ interface Props {
onUnpinLine?: (row: LogRowModel) => void;
pinned?: boolean;
styles: LogRowStyles;
+ mouseIsOver: boolean;
}
interface LogMessageProps {
@@ -73,9 +74,11 @@ export const LogRowMessage = React.memo((props: Props) => {
onUnpinLine,
onPinLine,
pinned,
+ mouseIsOver,
} = props;
const { hasAnsi, raw } = row;
const restructuredEntry = useMemo(() => restructureLog(raw, prettifyLogMessage), [raw, prettifyLogMessage]);
+ const shouldShowMenu = useMemo(() => mouseIsOver || pinned, [mouseIsOver, pinned]);
return (
<>
{
@@ -90,17 +93,20 @@ export const LogRowMessage = React.memo((props: Props) => {
-
+ {shouldShowMenu && (
+
+ )}
|
>
);
diff --git a/public/app/features/logs/components/LogRowMessageDisplayedFields.tsx b/public/app/features/logs/components/LogRowMessageDisplayedFields.tsx
index d8ed4f29ea4..6c74cd81445 100644
--- a/public/app/features/logs/components/LogRowMessageDisplayedFields.tsx
+++ b/public/app/features/logs/components/LogRowMessageDisplayedFields.tsx
@@ -1,5 +1,5 @@
import { css } from '@emotion/css';
-import React from 'react';
+import React, { useCallback, useMemo, useState } from 'react';
import { LogRowModel, Field, LinkModel, DataFrame } from '@grafana/data';
@@ -22,37 +22,52 @@ export interface Props {
}
export const LogRowMessageDisplayedFields = React.memo((props: Props) => {
- const { row, detectedFields, getFieldLinks, wrapLogMessage, styles, ...rest } = props;
+ const [hover, setHover] = useState(false);
+ const { row, detectedFields, getFieldLinks, wrapLogMessage, styles, pinned, ...rest } = props;
const fields = getAllFields(row, getFieldLinks);
const wrapClassName = wrapLogMessage ? '' : displayedFieldsStyles.noWrap;
// only single key/value rows are filterable, so we only need the first field key for filtering
- const line = detectedFields
- .map((parsedKey) => {
- const field = fields.find((field) => {
- const { keys } = field;
- return keys[0] === parsedKey;
- });
+ const line = useMemo(
+ () =>
+ detectedFields
+ .map((parsedKey) => {
+ const field = fields.find((field) => {
+ const { keys } = field;
+ return keys[0] === parsedKey;
+ });
- if (field !== undefined && field !== null) {
- return `${parsedKey}=${field.values}`;
- }
+ if (field !== undefined && field !== null) {
+ return `${parsedKey}=${field.values}`;
+ }
- if (row.labels[parsedKey] !== undefined && row.labels[parsedKey] !== null) {
- return `${parsedKey}=${row.labels[parsedKey]}`;
- }
+ if (row.labels[parsedKey] !== undefined && row.labels[parsedKey] !== null) {
+ return `${parsedKey}=${row.labels[parsedKey]}`;
+ }
- return null;
- })
- .filter((s) => s !== null)
- .join(' ');
+ return null;
+ })
+ .filter((s) => s !== null)
+ .join(' '),
+ [detectedFields, fields, row.labels]
+ );
+
+ const showMenu = useCallback(() => {
+ setHover(true);
+ }, []);
+ const hideMenu = useCallback(() => {
+ setHover(false);
+ }, []);
+ const shouldShowMenu = useMemo(() => hover || pinned, [hover, pinned]);
return (
<>
-
+ |
{line}
|
-
-
+ |
+ {shouldShowMenu && (
+
+ )}
|
>
);
diff --git a/public/app/features/logs/components/getLogRowStyles.ts b/public/app/features/logs/components/getLogRowStyles.ts
index c586473e257..ff1d29d4f13 100644
--- a/public/app/features/logs/components/getLogRowStyles.ts
+++ b/public/app/features/logs/components/getLogRowStyles.ts
@@ -85,14 +85,9 @@ export const getLogRowStyles = memoizeOne((theme: GrafanaTheme2) => {
&:hover {
.log-row-menu {
- visibility: visible;
z-index: 1;
}
- .log-row-menu-visible {
- visibility: hidden;
- }
-
background: ${hoverBgColor};
}
diff --git a/public/app/features/logs/components/log-context/LogRowContextModal.test.tsx b/public/app/features/logs/components/log-context/LogRowContextModal.test.tsx
index 74221c7c16d..f36f51b8ad3 100644
--- a/public/app/features/logs/components/log-context/LogRowContextModal.test.tsx
+++ b/public/app/features/logs/components/log-context/LogRowContextModal.test.tsx
@@ -1,4 +1,4 @@
-import { screen, waitFor } from '@testing-library/react';
+import { screen, waitFor, fireEvent } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { render } from 'test/redux-rtl';
@@ -475,8 +475,10 @@ describe('LogRowContextModal', () => {
expect(rows).toHaveStyle('position: sticky');
});
const unpinButtons = screen.getAllByLabelText('Unpin line')[0];
- await userEvent.click(unpinButtons);
- const rows = screen.getByTestId('entry-row');
- expect(rows).not.toHaveStyle('position: sticky');
+ fireEvent.click(unpinButtons);
+ await waitFor(() => {
+ const rows = screen.getByTestId('entry-row');
+ expect(rows).not.toHaveStyle('position: sticky');
+ });
});
});
diff --git a/public/app/plugins/datasource/alertmanager/ConfigEditor.tsx b/public/app/plugins/datasource/alertmanager/ConfigEditor.tsx
index b37ee8ffa22..25eabbe62f2 100644
--- a/public/app/plugins/datasource/alertmanager/ConfigEditor.tsx
+++ b/public/app/plugins/datasource/alertmanager/ConfigEditor.tsx
@@ -1,4 +1,4 @@
-import produce from 'immer';
+import { produce } from 'immer';
import React from 'react';
import { Link } from 'react-router-dom';
diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/utils.ts b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/utils.ts
index 33e02b5cef8..a4fa545477e 100644
--- a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/utils.ts
+++ b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/utils.ts
@@ -1,4 +1,4 @@
-import produce from 'immer';
+import { produce } from 'immer';
import { getTemplateSrv } from '@grafana/runtime';
diff --git a/public/app/plugins/datasource/influxdb/specs/influx_series.test.ts b/public/app/plugins/datasource/influxdb/specs/influx_series.test.ts
index ade1587f87e..3c4d84f6cb9 100644
--- a/public/app/plugins/datasource/influxdb/specs/influx_series.test.ts
+++ b/public/app/plugins/datasource/influxdb/specs/influx_series.test.ts
@@ -1,4 +1,4 @@
-import produce from 'immer';
+import { produce } from 'immer';
import InfluxSeries from '../influx_series';
diff --git a/public/app/plugins/datasource/loki/LanguageProvider.ts b/public/app/plugins/datasource/loki/LanguageProvider.ts
index 0021395d1f3..b10f21cb54f 100644
--- a/public/app/plugins/datasource/loki/LanguageProvider.ts
+++ b/public/app/plugins/datasource/loki/LanguageProvider.ts
@@ -1,5 +1,5 @@
import { chain, difference } from 'lodash';
-import LRU from 'lru-cache';
+import { LRUCache } from 'lru-cache';
import Prism, { Grammar } from 'prismjs';
import { dateTime, AbsoluteTimeRange, LanguageProvider, HistoryItem, AbstractQuery } from '@grafana/data';
@@ -79,8 +79,8 @@ export default class LokiLanguageProvider extends LanguageProvider {
* not account for different size of a response. If that is needed a `length` function can be added in the options.
* 10 as a max size is totally arbitrary right now.
*/
- private seriesCache = new LRU
>({ max: 10 });
- private labelsCache = new LRU({ max: 10 });
+ private seriesCache = new LRUCache>({ max: 10 });
+ private labelsCache = new LRUCache({ max: 10 });
constructor(datasource: LokiDatasource, initialValues?: any) {
super();
diff --git a/public/app/plugins/datasource/prometheus/datasource.tsx b/public/app/plugins/datasource/prometheus/datasource.tsx
index 8f522f2fba6..ebd6f2deb4a 100644
--- a/public/app/plugins/datasource/prometheus/datasource.tsx
+++ b/public/app/plugins/datasource/prometheus/datasource.tsx
@@ -1,5 +1,5 @@
import { cloneDeep, defaults } from 'lodash';
-import LRU from 'lru-cache';
+import { LRUCache } from 'lru-cache';
import React from 'react';
import { forkJoin, lastValueFrom, merge, Observable, of, OperatorFunction, pipe, throwError } from 'rxjs';
import { catchError, filter, map, tap } from 'rxjs/operators';
@@ -92,7 +92,7 @@ export class PrometheusDatasource
access: 'direct' | 'proxy';
basicAuth: any;
withCredentials: any;
- metricsNameCache = new LRU({ max: 10 });
+ metricsNameCache = new LRUCache({ max: 10 });
interval: string;
queryTimeout: string | undefined;
httpMethod: string;
diff --git a/public/app/plugins/datasource/prometheus/language_provider.ts b/public/app/plugins/datasource/prometheus/language_provider.ts
index b104c0a1df6..6067cfba8d7 100644
--- a/public/app/plugins/datasource/prometheus/language_provider.ts
+++ b/public/app/plugins/datasource/prometheus/language_provider.ts
@@ -1,5 +1,5 @@
import { chain, difference, once } from 'lodash';
-import LRU from 'lru-cache';
+import { LRUCache } from 'lru-cache';
import Prism from 'prismjs';
import { Value } from 'slate';
@@ -121,8 +121,8 @@ export default class PromQlLanguageProvider extends LanguageProvider {
* not account for different size of a response. If that is needed a `length` function can be added in the options.
* 10 as a max size is totally arbitrary right now.
*/
- private labelsCache = new LRU>({ max: 10 });
- private labelValuesCache = new LRU({ max: 10 });
+ private labelsCache = new LRUCache>({ max: 10 });
+ private labelValuesCache = new LRUCache({ max: 10 });
constructor(datasource: PrometheusDatasource, initialValues?: Partial) {
super();
diff --git a/public/app/plugins/panel/geomap/GeomapPanel.tsx b/public/app/plugins/panel/geomap/GeomapPanel.tsx
index ff2bdd7cced..f9cdad583d3 100644
--- a/public/app/plugins/panel/geomap/GeomapPanel.tsx
+++ b/public/app/plugins/panel/geomap/GeomapPanel.tsx
@@ -29,7 +29,7 @@ import { ControlsOptions, Options, MapLayerState, MapViewConfig, TooltipMode } f
import { getActions } from './utils/actions';
import { getLayersExtent } from './utils/getLayersExtent';
import { applyLayerFilter, initLayer } from './utils/layers';
-import { pointerClickListener, pointerMoveListener, setTooltipListeners } from './utils/tootltip';
+import { pointerClickListener, pointerMoveListener, setTooltipListeners } from './utils/tooltip';
import { updateMap, getNewOpenLayersMap, notifyPanelEditor } from './utils/utils';
import { centerPointRegistry, MapCenterID } from './view';
diff --git a/public/app/plugins/panel/geomap/utils/tootltip.ts b/public/app/plugins/panel/geomap/utils/tooltip.ts
similarity index 97%
rename from public/app/plugins/panel/geomap/utils/tootltip.ts
rename to public/app/plugins/panel/geomap/utils/tooltip.ts
index 1d5c601e823..aeb3722a008 100644
--- a/public/app/plugins/panel/geomap/utils/tootltip.ts
+++ b/public/app/plugins/panel/geomap/utils/tooltip.ts
@@ -1,3 +1,4 @@
+import { debounce } from 'lodash';
import { MapBrowserEvent } from 'ol';
import { toLonLat } from 'ol/proj';
@@ -12,7 +13,7 @@ import { getMapLayerState } from './layers';
export const setTooltipListeners = (panel: GeomapPanel) => {
// Tooltip listener
panel.map?.on('singleclick', panel.pointerClickListener);
- panel.map?.on('pointermove', panel.pointerMoveListener);
+ panel.map?.on('pointermove', debounce(panel.pointerMoveListener, 200));
panel.map?.getViewport().addEventListener('mouseout', (evt: MouseEvent) => {
panel.props.eventBus.publish(new DataHoverClearEvent());
});
diff --git a/public/app/plugins/panel/state-timeline/module.tsx b/public/app/plugins/panel/state-timeline/module.tsx
index f2ed7a9bb91..8dfab7fcdce 100644
--- a/public/app/plugins/panel/state-timeline/module.tsx
+++ b/public/app/plugins/panel/state-timeline/module.tsx
@@ -10,6 +10,7 @@ import { commonOptionsBuilder } from '@grafana/ui';
import { InsertNullsEditor } from '../timeseries/InsertNullsEditor';
import { SpanNullsEditor } from '../timeseries/SpanNullsEditor';
+import { NullEditorSettings } from '../timeseries/config';
import { StateTimelinePanel } from './StateTimelinePanel';
import { timelinePanelChangedHandler } from './migrations';
@@ -51,7 +52,7 @@ export const plugin = new PanelPlugin(StateTimelinePanel)
step: 1,
},
})
- .addCustomEditor({
+ .addCustomEditor({
id: 'spanNulls',
path: 'spanNulls',
name: 'Connect null values',
@@ -60,8 +61,9 @@ export const plugin = new PanelPlugin(StateTimelinePanel)
override: SpanNullsEditor,
shouldApply: (field) => field.type !== FieldType.time,
process: identityOverrideProcessor,
+ settings: { isTime: true },
})
- .addCustomEditor({
+ .addCustomEditor({
id: 'insertNulls',
path: 'insertNulls',
name: 'Disconnect values',
@@ -70,6 +72,7 @@ export const plugin = new PanelPlugin(StateTimelinePanel)
override: InsertNullsEditor,
shouldApply: (field) => field.type !== FieldType.time,
process: identityOverrideProcessor,
+ settings: { isTime: true },
});
commonOptionsBuilder.addHideFrom(builder);
diff --git a/public/app/plugins/panel/timeseries/InsertNullsEditor.tsx b/public/app/plugins/panel/timeseries/InsertNullsEditor.tsx
index 45115628499..b516f069cd5 100644
--- a/public/app/plugins/panel/timeseries/InsertNullsEditor.tsx
+++ b/public/app/plugins/panel/timeseries/InsertNullsEditor.tsx
@@ -18,14 +18,21 @@ const DISCONNECT_OPTIONS: Array> = [
type Props = FieldOverrideEditorProps;
-export const InsertNullsEditor = ({ value, onChange }: Props) => {
+export const InsertNullsEditor = ({ value, onChange, item }: Props) => {
const isThreshold = typeof value === 'number';
DISCONNECT_OPTIONS[1].value = isThreshold ? value : 3600000; // 1h
return (
- {isThreshold && }
+ {isThreshold && (
+
+ )}
);
};
diff --git a/public/app/plugins/panel/timeseries/NullsThresholdInput.tsx b/public/app/plugins/panel/timeseries/NullsThresholdInput.tsx
index 39797b3c25e..8d9df298714 100644
--- a/public/app/plugins/panel/timeseries/NullsThresholdInput.tsx
+++ b/public/app/plugins/panel/timeseries/NullsThresholdInput.tsx
@@ -8,15 +8,27 @@ export enum InputPrefix {
GreaterThan = 'greaterthan',
}
-type Props = { value: number; onChange: (value?: number | boolean | undefined) => void; inputPrefix?: InputPrefix };
+type Props = {
+ value: number;
+ onChange: (value?: number | boolean | undefined) => void;
+ inputPrefix?: InputPrefix;
+ isTime: boolean;
+};
-export const NullsThresholdInput = ({ value, onChange, inputPrefix }: Props) => {
- const formattedTime = rangeUtil.secondsToHms(value / 1000);
+export const NullsThresholdInput = ({ value, onChange, inputPrefix, isTime }: Props) => {
+ let defaultValue = rangeUtil.secondsToHms(value / 1000);
+ if (!isTime) {
+ defaultValue = '10';
+ }
const checkAndUpdate = (txt: string) => {
let val: boolean | number = false;
if (txt) {
try {
- val = rangeUtil.intervalToMs(txt);
+ if (isTime && rangeUtil.isValidTimeSpan(txt)) {
+ val = rangeUtil.intervalToMs(txt);
+ } else {
+ val = Number(txt);
+ }
} catch (err) {
console.warn('ERROR', err);
}
@@ -47,7 +59,7 @@ export const NullsThresholdInput = ({ value, onChange, inputPrefix }: Props) =>
autoFocus={false}
placeholder="never"
width={10}
- defaultValue={formattedTime}
+ defaultValue={defaultValue}
onKeyDown={handleEnterKey}
onBlur={handleBlur}
prefix={prefix}
diff --git a/public/app/plugins/panel/timeseries/SpanNullsEditor.tsx b/public/app/plugins/panel/timeseries/SpanNullsEditor.tsx
index ee80c9e8c34..9912abf383b 100644
--- a/public/app/plugins/panel/timeseries/SpanNullsEditor.tsx
+++ b/public/app/plugins/panel/timeseries/SpanNullsEditor.tsx
@@ -22,14 +22,21 @@ const GAPS_OPTIONS: Array> = [
type Props = FieldOverrideEditorProps;
-export const SpanNullsEditor = ({ value, onChange }: Props) => {
+export const SpanNullsEditor = ({ value, onChange, item }: Props) => {
const isThreshold = typeof value === 'number';
GAPS_OPTIONS[2].value = isThreshold ? value : 3600000; // 1h
return (
- {isThreshold && }
+ {isThreshold && (
+
+ )}
);
};
diff --git a/public/app/plugins/panel/timeseries/config.ts b/public/app/plugins/panel/timeseries/config.ts
index 08e039d5b60..f863475a36b 100644
--- a/public/app/plugins/panel/timeseries/config.ts
+++ b/public/app/plugins/panel/timeseries/config.ts
@@ -42,7 +42,9 @@ export const defaultGraphConfig: GraphFieldConfig = {
const categoryStyles = ['Graph styles'];
-export function getGraphFieldConfig(cfg: GraphFieldConfig): SetFieldConfigOptionsArgs {
+export type NullEditorSettings = { isTime: boolean };
+
+export function getGraphFieldConfig(cfg: GraphFieldConfig, isTime = true): SetFieldConfigOptionsArgs {
return {
standardOptions: {
[FieldConfigProperty.Color]: {
@@ -143,7 +145,7 @@ export function getGraphFieldConfig(cfg: GraphFieldConfig): SetFieldConfigOption
process: identityOverrideProcessor,
shouldApply: (field) => field.type === FieldType.number,
})
- .addCustomEditor({
+ .addCustomEditor({
id: 'spanNulls',
path: 'spanNulls',
name: 'Connect null values',
@@ -154,8 +156,9 @@ export function getGraphFieldConfig(cfg: GraphFieldConfig): SetFieldConfigOption
showIf: (config) => config.drawStyle === GraphDrawStyle.Line,
shouldApply: (field) => field.type !== FieldType.time,
process: identityOverrideProcessor,
+ settings: { isTime },
})
- .addCustomEditor({
+ .addCustomEditor({
id: 'insertNulls',
path: 'insertNulls',
name: 'Disconnect values',
@@ -166,6 +169,7 @@ export function getGraphFieldConfig(cfg: GraphFieldConfig): SetFieldConfigOption
showIf: (config) => config.drawStyle === GraphDrawStyle.Line,
shouldApply: (field) => field.type !== FieldType.time,
process: identityOverrideProcessor,
+ settings: { isTime },
})
.addRadio({
path: 'showPoints',
diff --git a/public/app/plugins/panel/trend/TrendPanel.tsx b/public/app/plugins/panel/trend/TrendPanel.tsx
index 3ae9c75b899..ccddf9b953b 100644
--- a/public/app/plugins/panel/trend/TrendPanel.tsx
+++ b/public/app/plugins/panel/trend/TrendPanel.tsx
@@ -1,9 +1,17 @@
import React, { useMemo } from 'react';
-import { FieldType, PanelProps } from '@grafana/data';
+import { DataFrame, FieldType, getFieldDisplayName, PanelProps, TimeRange } from '@grafana/data';
import { isLikelyAscendingVector } from '@grafana/data/src/transformations/transformers/joinDataFrames';
import { config, PanelDataErrorView } from '@grafana/runtime';
-import { KeyboardPlugin, TimeSeries, TooltipDisplayMode, TooltipPlugin, usePanelContext } from '@grafana/ui';
+import {
+ KeyboardPlugin,
+ preparePlotFrame,
+ TimeSeries,
+ TooltipDisplayMode,
+ TooltipPlugin,
+ usePanelContext,
+} from '@grafana/ui';
+import { XYFieldMatchers } from '@grafana/ui/src/components/GraphNG/types';
import { findFieldIndex } from 'app/features/dimensions';
import { ContextMenuPlugin } from '../timeseries/plugins/ContextMenuPlugin';
@@ -23,6 +31,20 @@ export const TrendPanel = ({
id,
}: PanelProps) => {
const { sync } = usePanelContext();
+ // Need to fallback to first number field if no xField is set in options otherwise panel crashes 😬
+ const trendXFieldName =
+ options.xField ?? data.series[0].fields.find((field) => field.type === FieldType.number)?.name;
+
+ const preparePlotFrameTimeless = (frames: DataFrame[], dimFields: XYFieldMatchers, timeRange?: TimeRange | null) => {
+ dimFields = {
+ ...dimFields,
+ x: (field, frame, frames) => {
+ return getFieldDisplayName(field, frame, frames) === trendXFieldName;
+ },
+ };
+
+ return preparePlotFrame(frames, dimFields);
+ };
const info = useMemo(() => {
if (data.series.length > 1) {
@@ -90,6 +112,7 @@ export const TrendPanel = ({
height={height}
legend={options.legend}
options={options}
+ preparePlotFrame={preparePlotFrameTimeless}
>
{(config, alignedDataFrame) => {
if (alignedDataFrame.fields.some((f) => Boolean(f.config.links?.length))) {
diff --git a/public/app/plugins/panel/trend/module.tsx b/public/app/plugins/panel/trend/module.tsx
index 422c263ee69..502840a9fe3 100644
--- a/public/app/plugins/panel/trend/module.tsx
+++ b/public/app/plugins/panel/trend/module.tsx
@@ -8,7 +8,7 @@ import { FieldConfig, Options } from './panelcfg.gen';
import { TrendSuggestionsSupplier } from './suggestions';
export const plugin = new PanelPlugin(TrendPanel)
- .useFieldConfig(getGraphFieldConfig(defaultGraphConfig))
+ .useFieldConfig(getGraphFieldConfig(defaultGraphConfig, false))
.setPanelOptions((builder) => {
const category = ['X Axis'];
builder.addFieldNamePicker({
diff --git a/public/app/types/lru-cache.d.ts b/public/app/types/lru-cache.d.ts
deleted file mode 100644
index f515ec58fe6..00000000000
--- a/public/app/types/lru-cache.d.ts
+++ /dev/null
@@ -1,259 +0,0 @@
-// Type definitions for lru-cache 7.1.0
-// TypeScript Version: 4.5
-declare class LRUCache {
- constructor(options?: LRUCache.Options);
-
- /**
- * Return total length of objects in cache taking into account `length` options function.
- */
- readonly length: number;
-
- /**
- * Return total quantity of objects currently in cache. Note,
- * that `stale` (see options) items are returned as part of this item count.
- */
- readonly itemCount: number;
-
- /**
- * Same as Options.allowStale.
- */
- allowStale: boolean;
-
- /**
- * Same as Options.length.
- */
- lengthCalculator(value: V): number;
-
- /**
- * Same as Options.max. Resizes the cache when the `max` changes.
- */
- max: number;
-
- /**
- * Same as Options.maxAge. Resizes the cache when the `maxAge` changes.
- */
- maxAge: number;
-
- /**
- * Will update the "recently used"-ness of the key. They do what you think.
- * `maxAge` is optional and overrides the cache `maxAge` option if provided.
- */
- set(key: K, value: V, options?: LRUCache.SetOptions): boolean;
-
- /**
- * Will update the "recently used"-ness of the key. They do what you think.
- * `maxAge` is optional and overrides the cache `maxAge` option if provided.
- *
- * If the key is not found, will return `undefined`.
- */
- get(key: K): V | undefined;
-
- /**
- * Returns the key value (or `undefined` if not found) without updating
- * the "recently used"-ness of the key.
- *
- * (If you find yourself using this a lot, you might be using the wrong
- * sort of data structure, but there are some use cases where it's handy.)
- */
- peek(key: K): V | undefined;
-
- /**
- * Check if a key is in the cache, without updating the recent-ness
- * or deleting it for being stale.
- */
- has(key: K): boolean;
-
- /**
- * Deletes a key out of the cache.
- */
- del(key: K): void;
-
- /**
- * Clear the cache entirely, throwing away all values.
- */
- reset(): void;
-
- /**
- * Manually iterates over the entire cache proactively pruning old entries.
- */
- prune(): void;
-
- /**
- * Just like `Array.prototype.forEach`. Iterates over all the keys in the cache,
- * in order of recent-ness. (Ie, more recently used items are iterated over first.)
- */
- forEach(callbackFn: (this: T, value: V, key: K, cache: this) => void, thisArg?: T): void;
-
- /**
- * The same as `cache.forEach(...)` but items are iterated over in reverse order.
- * (ie, less recently used items are iterated over first.)
- */
- forEach(callbackFn: (this: T, value: V, key: K, cache: this) => void, thisArg?: T): void;
-
- /**
- * Return an array of the keys in the cache.
- */
- keys(): K[];
-
- /**
- * Return an array of the values in the cache.
- */
- values(): V[];
-
- /**
- * Return an array of the cache entries ready for serialization and usage with `destinationCache.load(arr)`.
- */
- dump(): Array>;
-
- /**
- * Loads another cache entries array, obtained with `sourceCache.dump()`,
- * into the cache. The destination cache is reset before loading new entries
- *
- * @param cacheEntries Obtained from `sourceCache.dump()`
- */
- load(cacheEntries: ReadonlyArray>): void;
-}
-
-// eslint-disable-next-line no-redeclare
-declare namespace LRUCache {
- interface Options {
- /**
- * @type {number | undefined}
- * the number of most recently used items to keep.
- * note that we may store fewer items than this if maxSize is hit.
- */
- max?: number | undefined;
-
- // if you wish to track item size, you must provide a maxSize
- // note that we still will only keep up to max *actual items*,
- // so size tracking may cause fewer than max items to be stored.
- // At the extreme, a single item of maxSize size will cause everything
- // else in the cache to be dropped when it is added. Use with caution!
- // Note also that size tracking can negatively impact performance,
- // though for most cases, only minimally.
- maxSize?: number | undefined;
-
- // buffers or other items where memory size depends on the object itself.
- // also note that oversized items do NOT immediately get dropped from
- // the cache, though they will cause faster turnover in the storage.
- // Return an positive integer which is the size of the item,
- // if a positive integer is not returned, will use 0 as the size.
- sizeCalculation?: (value, key) => number;
-
- // function to call when the item is removed from the cache
- // Note that using this can negatively impact performance.
- dispose?: (value, key) => void;
-
- /**
- * By default, if you set a `dispose()` method, then it'll be called whenever
- * a `set()` operation overwrites an existing key. If you set this option,
- * `dispose()` will only be called when a key falls out of the cache,
- * not when it is overwritten.
- */
- noDisposeOnSet?: boolean | undefined;
-
- // max time to live for items before they are considered stale
- // note that stale items are NOT preemptively removed by default,
- // and MAY live in the cache, contributing to its LRU max, long after
- // they have expired.
- // Also, as this cache is optimized for LRU/MRU operations, some of
- // the staleness/TTL checks will reduce performance, as they will incur
- // overhead by deleting items.
- // Must be a positive integer in ms, defaults to 0, which means "no TTL"
- ttl?: number;
-
- // Minimum amount of time in ms in which to check for staleness.
- // Defaults to 1, which means that the current time
- // is checked at most once per millisecond.
- // Set to 0 to check the current time every time staleness is tested.
- // Note that setting this to a higher value
- // will improve performance somewhat while using ttl tracking,
- // albeit at the expense of keeping stale items
- // around a bit longer than intended.
- ttlResolution?: number;
-
- // Preemptively remove stale items from the cache.
- // Note that this may significantly degrade performance,
- // especially if the cache is storing a large number of items.
- // It is almost always best to just leave the stale items in the cache,
- // and let them fall out as new items are added.
- // Note that this means that allowStale is a bit pointless,
- // as stale items will be deleted almost as soon as they expire.
- // Use with caution!
- ttlAutopurge?: boolean;
-
- // By default, if you set ttl, it'll only delete stale items
- // from the cache when you get(key).
- // That is, it's not preemptively pruning items.
- // If you set allowStale:true, it'll return the stale value
- // as well as deleting it. If you don't set this,
- // then it'll return undefined when you try to get a stale entry.
- // Note that when a stale entry is fetched,
- // even if it is returned due to allowStale being set,
- // it is removed from the cache immediately.
- // You can immediately put it back in the cache if you wish,
- // thus resetting the TTL.
- // This may be overridden by passing an options object to cache.get().
- // The cache.has() method will always return false for stale items.
- // Boolean, default false, only relevant if ttl is set.
- allowStale?: boolean;
-
- // When using time-expiring entries with ttl,
- // setting this to true will make each item's
- // age reset to 0 whenever it is retrieved from cache with get(),
- // causing it to not expire.
- // (It can still fall out of cache based on recency of use, of course.)
- // This may be overridden by passing an options object to cache.get().
- // Boolean, default false, only relevant if ttl is set.
- updateAgeOnGet?: boolean;
-
- // update the age of items on cache.has(), renewing their TTL
- // boolean, default false
- updateAgeOnHas?: boolean;
-
- // update the "recently-used"-ness of items on cache.has()
- // boolean, default false
- updateRecencyOnHas?: boolean;
-
- /**
- * Function that is used to calculate the length of stored items.
- * If you're storing strings or buffers, then you probably want to do
- * something like `function(n, key){return n.length}`. The default
- * is `function(){return 1}`, which is fine if you want to store
- * `max` like-sized things. The item is passed as the first argument,
- * and the key is passed as the second argument.
- */
- length?(value: V, key?: K): number;
-
- /**
- * By default, if you set a `maxAge`, it'll only actually pull stale items
- * out of the cache when you `get(key)`. (That is, it's not pre-emptively
- * doing a `setTimeout` or anything.) If you set `stale:true`, it'll return
- * the stale value before deleting it. If you don't set this, then it'll
- * return `undefined` when you try to get a stale entry,
- * as if it had already been deleted.
- */
- stale?: boolean | undefined;
- }
-
- interface SetOptions {
- ttl?: number;
- // Will prevent calling the sizeCalculation function
- // and just use the specified number if it is a positive integer
- size?: number;
- // Same as above
- sizeCalculator?: (value: V) => number;
- // Will prevent calling a dispose function in the case of overwrites
- noDisposeOnSet?: boolean;
- }
-
- interface Entry {
- k: K;
- v: V;
- e: number;
- }
-}
-
-declare module 'lru-cache' {
- export = LRUCache;
-}
diff --git a/public/locales/de-DE/grafana.json b/public/locales/de-DE/grafana.json
index 6ac25367b48..00a747069c7 100644
--- a/public/locales/de-DE/grafana.json
+++ b/public/locales/de-DE/grafana.json
@@ -61,6 +61,13 @@
"manage-permissions": "",
"move": ""
},
+ "folder-picker": {
+ "button-label": "",
+ "empty-message": "",
+ "error-title": "",
+ "search-placeholder": "",
+ "unknown-error": ""
+ },
"manage-folder-nav": {
"alert-rules": "",
"dashboards": "",
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index ecccf6744f4..c659816e5bb 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -61,6 +61,13 @@
"manage-permissions": "Manage permissions",
"move": "Move"
},
+ "folder-picker": {
+ "button-label": "Select folder",
+ "empty-message": "No folders found",
+ "error-title": "Error loading folders",
+ "search-placeholder": "Search folders",
+ "unknown-error": "Unknown error"
+ },
"manage-folder-nav": {
"alert-rules": "Alert rules",
"dashboards": "Dashboards",
diff --git a/public/locales/es-ES/grafana.json b/public/locales/es-ES/grafana.json
index ce1d21e8ff6..fd6e4413b81 100644
--- a/public/locales/es-ES/grafana.json
+++ b/public/locales/es-ES/grafana.json
@@ -66,6 +66,13 @@
"manage-permissions": "",
"move": ""
},
+ "folder-picker": {
+ "button-label": "",
+ "empty-message": "",
+ "error-title": "",
+ "search-placeholder": "",
+ "unknown-error": ""
+ },
"manage-folder-nav": {
"alert-rules": "",
"dashboards": "",
diff --git a/public/locales/fr-FR/grafana.json b/public/locales/fr-FR/grafana.json
index 547011c0e4a..953a7b92a56 100644
--- a/public/locales/fr-FR/grafana.json
+++ b/public/locales/fr-FR/grafana.json
@@ -66,6 +66,13 @@
"manage-permissions": "",
"move": ""
},
+ "folder-picker": {
+ "button-label": "",
+ "empty-message": "",
+ "error-title": "",
+ "search-placeholder": "",
+ "unknown-error": ""
+ },
"manage-folder-nav": {
"alert-rules": "",
"dashboards": "",
diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json
index 6f52fecca31..b3f4ee574ed 100644
--- a/public/locales/pseudo-LOCALE/grafana.json
+++ b/public/locales/pseudo-LOCALE/grafana.json
@@ -61,6 +61,13 @@
"manage-permissions": "Mäʼnäģę pęřmįşşįőʼnş",
"move": "Mővę"
},
+ "folder-picker": {
+ "button-label": "Ŝęľęčŧ ƒőľđęř",
+ "empty-message": "Ńő ƒőľđęřş ƒőūʼnđ",
+ "error-title": "Ēřřőř ľőäđįʼnģ ƒőľđęřş",
+ "search-placeholder": "Ŝęäřčĥ ƒőľđęřş",
+ "unknown-error": "Ůʼnĸʼnőŵʼn ęřřőř"
+ },
"manage-folder-nav": {
"alert-rules": "Åľęřŧ řūľęş",
"dashboards": "Đäşĥþőäřđş",
diff --git a/public/locales/zh-Hans/grafana.json b/public/locales/zh-Hans/grafana.json
index c367870cca7..5af9c0ff9ac 100644
--- a/public/locales/zh-Hans/grafana.json
+++ b/public/locales/zh-Hans/grafana.json
@@ -56,6 +56,13 @@
"manage-permissions": "",
"move": ""
},
+ "folder-picker": {
+ "button-label": "",
+ "empty-message": "",
+ "error-title": "",
+ "search-placeholder": "",
+ "unknown-error": ""
+ },
"manage-folder-nav": {
"alert-rules": "",
"dashboards": "",
diff --git a/public/test/helpers/alertingRuleEditor.tsx b/public/test/helpers/alertingRuleEditor.tsx
index eb099bad304..544398579cc 100644
--- a/public/test/helpers/alertingRuleEditor.tsx
+++ b/public/test/helpers/alertingRuleEditor.tsx
@@ -28,9 +28,6 @@ export const ui = {
save: byRole('button', { name: 'Save rule' }),
addAnnotation: byRole('button', { name: /Add info/ }),
addLabel: byRole('button', { name: /Add label/ }),
- // alert type buttons
- grafanaManagedAlert: byRole('button', { name: /Grafana managed/ }),
- lotexAlert: byRole('button', { name: /Mimir or Loki alert/ }),
},
};
diff --git a/scripts/drone/events/main.star b/scripts/drone/events/main.star
index f3228431503..7c592c53ae8 100644
--- a/scripts/drone/events/main.star
+++ b/scripts/drone/events/main.star
@@ -88,7 +88,7 @@ def main_pipelines():
lint_backend_pipeline(trigger, ver_mode),
build_e2e(trigger, ver_mode),
integration_tests(trigger, prefix = ver_mode, ver_mode = ver_mode),
- windows(trigger, edition = "oss", ver_mode = ver_mode),
+ windows(trigger, ver_mode = ver_mode),
notify_pipeline(
name = "notify-drone-changes",
slack_channel = "slack-webhooks-test",
diff --git a/scripts/drone/events/release.star b/scripts/drone/events/release.star
index 7de6f14d91b..292e99619e1 100644
--- a/scripts/drone/events/release.star
+++ b/scripts/drone/events/release.star
@@ -10,23 +10,19 @@ load(
"build_frontend_step",
"build_plugins_step",
"build_storybook_step",
- "clone_enterprise_step",
"compile_build_cmd",
"copy_packages_for_docker_step",
"download_grabpl_step",
"e2e_tests_artifacts",
"e2e_tests_step",
- "fetch_images_step",
"get_windows_steps",
"grafana_server_step",
"identify_runner_step",
- "init_enterprise_step",
"memcached_integration_tests_step",
"mysql_integration_tests_step",
"package_step",
"postgres_integration_tests_step",
"publish_grafanacom_step",
- "publish_images_step",
"publish_linux_packages_step",
"redis_integration_tests_step",
"store_storybook_step",
@@ -46,17 +42,14 @@ load(
load(
"scripts/drone/utils/utils.star",
"pipeline",
- "with_deps",
)
load(
"scripts/drone/pipelines/test_frontend.star",
"test_frontend",
- "test_frontend_enterprise",
)
load(
"scripts/drone/pipelines/test_backend.star",
"test_backend",
- "test_backend_enterprise",
)
load("scripts/drone/vault.star", "from_secret", "prerelease_bucket")
load(
@@ -159,19 +152,18 @@ def oss_pipelines(ver_mode = ver_mode, trigger = release_trigger):
]
build_steps = [
- build_backend_step(edition = "oss", ver_mode = ver_mode),
- build_frontend_step(edition = "oss", ver_mode = ver_mode),
- build_frontend_package_step(edition = "oss", ver_mode = ver_mode),
- build_plugins_step(edition = "oss", ver_mode = ver_mode),
- package_step(edition = "oss", ver_mode = ver_mode),
+ build_backend_step(ver_mode = ver_mode),
+ build_frontend_step(ver_mode = ver_mode),
+ build_frontend_package_step(ver_mode = ver_mode),
+ build_plugins_step(ver_mode = ver_mode),
+ package_step(ver_mode = ver_mode),
copy_packages_for_docker_step(),
- build_docker_images_step(edition = "oss", publish = True),
+ build_docker_images_step(publish = True),
build_docker_images_step(
- edition = "oss",
publish = True,
ubuntu = True,
),
- grafana_server_step(edition = "oss"),
+ grafana_server_step(),
e2e_tests_step("dashboards-suite", tries = 3),
e2e_tests_step("smoke-tests-suite", tries = 3),
e2e_tests_step("panels-suite", tries = 3),
@@ -188,9 +180,8 @@ def oss_pipelines(ver_mode = ver_mode, trigger = release_trigger):
):
publish_steps.extend(
[
- upload_cdn_step(edition = "oss", ver_mode = ver_mode, trigger = trigger_oss),
+ upload_cdn_step(ver_mode = ver_mode, trigger = trigger_oss),
upload_packages_step(
- edition = "oss",
ver_mode = ver_mode,
trigger = trigger_oss,
),
@@ -223,13 +214,12 @@ def oss_pipelines(ver_mode = ver_mode, trigger = release_trigger):
volumes = []
windows_pipeline_dependencies = [
- "{}-oss-build-e2e-publish".format(ver_mode),
- "{}-oss-test-frontend".format(ver_mode),
+ "{}-build-e2e-publish".format(ver_mode),
+ "{}-test-frontend".format(ver_mode),
]
pipelines.extend([
pipeline(
- name = "{}-oss-build-e2e-publish".format(ver_mode),
- edition = "oss",
+ name = "{}-build-e2e-publish".format(ver_mode),
trigger = trigger,
services = [],
steps = init_steps + build_steps + publish_steps,
@@ -242,8 +232,7 @@ def oss_pipelines(ver_mode = ver_mode, trigger = release_trigger):
if ver_mode not in ("release"):
pipelines.append(pipeline(
- name = "{}-oss-integration-tests".format(ver_mode),
- edition = "oss",
+ name = "{}-integration-tests".format(ver_mode),
trigger = trigger,
services = services,
steps = [
@@ -259,10 +248,9 @@ def oss_pipelines(ver_mode = ver_mode, trigger = release_trigger):
))
windows_pipeline = pipeline(
- name = "{}-oss-windows".format(ver_mode),
- edition = "oss",
+ name = "{}-windows".format(ver_mode),
trigger = trigger,
- steps = get_windows_steps(edition = "oss", ver_mode = ver_mode),
+ steps = get_windows_steps(ver_mode = ver_mode),
platform = "windows",
depends_on = windows_pipeline_dependencies,
environment = environment,
@@ -272,288 +260,6 @@ def oss_pipelines(ver_mode = ver_mode, trigger = release_trigger):
return pipelines
-def enterprise_pipelines(ver_mode = ver_mode, trigger = release_trigger):
- """Generates all pipelines used for Grafana Enterprise.
-
- Args:
- ver_mode: controls which steps are included in the pipeline.
- Defaults to 'release'.
- trigger: controls which events can trigger the pipeline execution.
- Defaults to tag events for tags with a 'v' prefix.
-
- Returns:
- List of Drone pipelines.
- """
- if ver_mode == "release":
- source = "${DRONE_TAG}"
- elif ver_mode == "release-branch":
- source = "${DRONE_BRANCH}"
- else:
- source = "${DRONE_COMMIT}"
-
- environment = {"EDITION": "enterprise"}
-
- services = integration_test_services()
- volumes = integration_test_services_volumes()
-
- init_steps = [
- download_grabpl_step(),
- identify_runner_step(),
- clone_enterprise_step(source = source),
- init_enterprise_step(ver_mode),
- compile_build_cmd("enterprise"),
- ] + with_deps(
- [
- wire_install_step(),
- yarn_install_step(),
- verify_gen_cue_step(),
- verify_gen_jsonnet_step(),
- ],
- [
- "init-enterprise",
- ],
- )
-
- build_steps = [
- build_backend_step(edition = "enterprise", ver_mode = ver_mode),
- build_frontend_step(edition = "enterprise", ver_mode = ver_mode),
- build_frontend_package_step(edition = "enterprise", ver_mode = ver_mode),
- build_plugins_step(edition = "enterprise", ver_mode = ver_mode),
- package_step(
- edition = "enterprise",
- ver_mode = ver_mode,
- ),
- copy_packages_for_docker_step(),
- build_docker_images_step(edition = "enterprise", publish = True),
- build_docker_images_step(
- edition = "enterprise",
- publish = True,
- ubuntu = True,
- ),
- grafana_server_step(edition = "enterprise"),
- e2e_tests_step("dashboards-suite", tries = 3),
- e2e_tests_step("smoke-tests-suite", tries = 3),
- e2e_tests_step("panels-suite", tries = 3),
- e2e_tests_step("various-suite", tries = 3),
- e2e_tests_artifacts(),
- ]
-
- publish_steps = []
-
- if ver_mode in (
- "release",
- "release-branch",
- ):
- upload_packages_enterprise = upload_packages_step(
- edition = "enterprise",
- ver_mode = ver_mode,
- trigger = trigger_oss,
- )
- upload_packages_enterprise["depends_on"] = ["package"]
-
- publish_steps.extend(
- [
- upload_cdn_step(
- edition = "enterprise",
- ver_mode = ver_mode,
- trigger = trigger_oss,
- ),
- upload_packages_enterprise,
- ],
- )
-
- integration_test_steps = [
- postgres_integration_tests_step(),
- mysql_integration_tests_step("mysql57", "5.7"),
- mysql_integration_tests_step("mysql80", "8.0"),
- redis_integration_tests_step(),
- memcached_integration_tests_step(),
- ]
-
- # We don't need to run integration tests at release time since they have
- # been run multiple times before:
- if ver_mode in ("release"):
- integration_test_steps = []
- volumes = []
-
- windows_pipeline = pipeline(
- name = "{}-enterprise-windows".format(ver_mode),
- edition = "enterprise",
- trigger = trigger,
- steps = get_windows_steps(edition = "enterprise", ver_mode = ver_mode),
- platform = "windows",
- depends_on = [
- "{}-enterprise-build-e2e-publish".format(ver_mode),
- "{}-enterprise-test-frontend".format(ver_mode),
- "{}-enterprise-test-backend".format(ver_mode),
- ],
- environment = environment,
- )
-
- pipelines = [
- pipeline(
- name = "{}-enterprise-build-e2e-publish".format(ver_mode),
- edition = "enterprise",
- trigger = trigger,
- services = [],
- steps = init_steps + build_steps + publish_steps,
- environment = environment,
- volumes = volumes,
- ),
- test_frontend_enterprise(trigger, ver_mode, source = source),
- test_backend_enterprise(trigger, ver_mode, source = source),
- ]
-
- if ver_mode not in ("release"):
- pipelines.append(pipeline(
- name = "{}-enterprise-integration-tests".format(ver_mode),
- edition = "enterprise",
- trigger = trigger,
- services = services,
- steps = [
- download_grabpl_step(),
- identify_runner_step(),
- clone_enterprise_step(source = source),
- init_enterprise_step(ver_mode),
- ] +
- with_deps(
- [
- verify_gen_cue_step(),
- verify_gen_jsonnet_step(),
- ],
- [
- "init-enterprise",
- ],
- ) +
- [
- wire_install_step(),
- ] +
- integration_test_steps,
- environment = environment,
- volumes = volumes,
- ))
-
- pipelines.append(windows_pipeline)
-
- return pipelines
-
-def enterprise2_pipelines(prefix = "", ver_mode = ver_mode, trigger = release_trigger):
- """Generate the next generation of pipelines for Grafana Enterprise.
-
- Args:
- prefix: a prefix for the pipeline name used to differentiate multiple instances of
- the same pipeline.
- Defaults to ''.
- ver_mode: controls which steps are included in the pipeline.
- Defaults to 'release'.
- trigger: controls which events can trigger the pipeline execution.
- Defaults to tag events for tags with a 'v' prefix.
-
- Returns:
- List of Drone pipelines.
- """
- if ver_mode == "release":
- source = "${DRONE_TAG}"
- elif ver_mode == "release-branch":
- source = "${DRONE_BRANCH}"
- else:
- source = "${DRONE_COMMIT}"
-
- environment = {
- "EDITION": "enterprise2",
- }
-
- volumes = integration_test_services_volumes()
-
- init_steps = [
- download_grabpl_step(),
- identify_runner_step(),
- clone_enterprise_step(source = source),
- init_enterprise_step(ver_mode),
- compile_build_cmd("enterprise"),
- ] + with_deps(
- [
- wire_install_step(),
- yarn_install_step(),
- verify_gen_cue_step(),
- ],
- [
- "init-enterprise",
- ],
- )
-
- build_steps = [
- build_frontend_step(edition = "enterprise", ver_mode = ver_mode),
- build_frontend_package_step(edition = "enterprise", ver_mode = ver_mode),
- build_plugins_step(edition = "enterprise", ver_mode = ver_mode),
- build_backend_step(
- edition = "enterprise2",
- ver_mode = ver_mode,
- variants = ["linux-amd64"],
- ),
- ]
-
- fetch_images = fetch_images_step("enterprise2")
- fetch_images.update(
- {"depends_on": ["build-docker-images", "build-docker-images-ubuntu"]},
- )
-
- upload_cdn = upload_cdn_step(edition = "enterprise2", ver_mode = ver_mode)
- upload_cdn["environment"].update(
- {"ENTERPRISE2_CDN_PATH": from_secret("enterprise2-cdn-path")},
- )
-
- build_steps.extend(
- [
- package_step(
- edition = "enterprise2",
- ver_mode = ver_mode,
- ),
- upload_cdn,
- copy_packages_for_docker_step(edition = "enterprise2"),
- build_docker_images_step(
- edition = "enterprise2",
- publish = True,
- ),
- build_docker_images_step(
- edition = "enterprise2",
- publish = True,
- ubuntu = True,
- ),
- fetch_images,
- publish_images_step(
- "enterprise2",
- "release",
- docker_repo = "${{DOCKER_ENTERPRISE2_REPO}}",
- ),
- ],
- )
-
- publish_steps = []
-
- if ver_mode in (
- "release",
- "release-branch",
- ):
- step = upload_packages_step(edition = "enterprise2", ver_mode = ver_mode)
- step["depends_on"] = ["package-enterprise2"]
-
- publish_steps.append(step)
-
- pipelines = [
- pipeline(
- name = "{}{}-enterprise2-build-e2e-publish".format(prefix, ver_mode),
- edition = "enterprise",
- trigger = trigger,
- services = [],
- steps = init_steps + build_steps + publish_steps,
- volumes = volumes,
- environment = environment,
- ),
- ]
-
- return pipelines
-
def publish_artifacts_step():
return {
"name": "publish-artifacts",
@@ -578,7 +284,7 @@ def publish_static_assets_step():
"STATIC_ASSET_EDITIONS": from_secret("static_asset_editions"),
},
"commands": [
- "./bin/build artifacts static-assets --tag ${DRONE_TAG}",
+ "./bin/build artifacts static-assets --tag ${DRONE_TAG} --static-asset-editions=grafana-oss",
],
"depends_on": ["compile-build-cmd"],
}
@@ -623,13 +329,12 @@ def publish_artifacts_pipelines(mode):
name = "publish-artifacts-{}".format(mode),
trigger = trigger,
steps = steps,
- edition = "all",
- environment = {"EDITION": "all"},
+ environment = {"EDITION": "oss"},
),
]
def publish_packages_pipeline():
- """Generates pipelines used for publishing packages for both OSS and enterprise.
+ """Generates pipelines used for publishing packages for OSS.
Returns:
List of Drone pipelines. One for each of OSS and enterprise packages.
@@ -641,40 +346,24 @@ def publish_packages_pipeline():
}
oss_steps = [
compile_build_cmd(),
- publish_linux_packages_step(edition = "oss", package_manager = "deb"),
- publish_linux_packages_step(edition = "oss", package_manager = "rpm"),
- publish_grafanacom_step(edition = "oss", ver_mode = "release"),
+ publish_linux_packages_step(package_manager = "deb"),
+ publish_linux_packages_step(package_manager = "rpm"),
+ publish_grafanacom_step(ver_mode = "release"),
]
- enterprise_steps = [
- compile_build_cmd(),
- publish_linux_packages_step(edition = "enterprise", package_manager = "deb"),
- publish_linux_packages_step(edition = "enterprise", package_manager = "rpm"),
- publish_grafanacom_step(edition = "enterprise", ver_mode = "release"),
- ]
deps = [
"publish-artifacts-public",
- "publish-docker-oss-public",
- "publish-docker-enterprise-public",
+ "publish-docker-public",
]
return [
pipeline(
- name = "publish-packages-oss",
+ name = "publish-packages",
trigger = trigger,
steps = oss_steps,
- edition = "all",
depends_on = deps,
environment = {"EDITION": "oss"},
),
- pipeline(
- name = "publish-packages-enterprise",
- trigger = trigger,
- steps = enterprise_steps,
- edition = "all",
- depends_on = deps,
- environment = {"EDITION": "enterprise"},
- ),
]
def publish_npm_pipelines():
@@ -694,8 +383,7 @@ def publish_npm_pipelines():
name = "publish-npm-packages-public",
trigger = trigger,
steps = steps,
- edition = "all",
- environment = {"EDITION": "all"},
+ environment = {"EDITION": "oss"},
),
]
@@ -708,7 +396,7 @@ def integration_test_pipelines():
particular build.
Returns:
- List of Drone pipelines (one for enterprise and one for oss integration tests)
+ List of Drone pipelines
"""
trigger = {
"event": ["promote"],
@@ -723,11 +411,9 @@ def integration_test_pipelines():
redis_integration_tests_step(),
memcached_integration_tests_step(),
]
- source = "${DRONE_TAG}"
pipelines.append(pipeline(
- name = "integration-tests-oss",
- edition = "oss",
+ name = "integration-tests",
trigger = trigger,
services = integration_test_services(),
steps = [
@@ -742,34 +428,6 @@ def integration_test_pipelines():
volumes = volumes,
))
- pipelines.append(pipeline(
- name = "integration-tests-enterprise",
- edition = "enterprise",
- trigger = trigger,
- services = integration_test_services(),
- steps = [
- download_grabpl_step(),
- identify_runner_step(),
- clone_enterprise_step(source = source),
- init_enterprise_step(ver_mode),
- ] +
- with_deps(
- [
- verify_gen_cue_step(),
- verify_gen_jsonnet_step(),
- ],
- [
- "init-enterprise",
- ],
- ) +
- [
- wire_install_step(),
- ] +
- integration_test_steps,
- environment = {"EDITION": "enterprise"},
- volumes = volumes,
- ))
-
return pipelines
def verify_release_pipeline(
@@ -779,11 +437,8 @@ def verify_release_pipeline(
version = "${DRONE_TAG}",
trigger = release_trigger,
depends_on = [
- "release-oss-build-e2e-publish",
- "release-enterprise-build-e2e-publish",
- "release-enterprise2-build-e2e-publish",
- "release-oss-windows",
- "release-enterprise-windows",
+ "release-build-e2e-publish",
+ "release-windows",
]):
"""
Runs a script that 'gsutil stat's every artifact that should have been produced by the pre-release process.
@@ -809,7 +464,6 @@ def verify_release_pipeline(
return pipeline(
depends_on = depends_on,
name = name,
- edition = "all",
trigger = trigger,
steps = [step],
)
diff --git a/scripts/drone/pipelines/aws_marketplace.star b/scripts/drone/pipelines/aws_marketplace.star
index 82d40a4fa57..e69de29bb2d 100644
--- a/scripts/drone/pipelines/aws_marketplace.star
+++ b/scripts/drone/pipelines/aws_marketplace.star
@@ -1,45 +0,0 @@
-"""
-This module contains steps and pipelines publishing to AWS Marketplace.
-"""
-
-load(
- "scripts/drone/steps/lib.star",
- "compile_build_cmd",
-)
-load("scripts/drone/vault.star", "from_secret")
-load(
- "scripts/drone/utils/utils.star",
- "pipeline",
-)
-load(
- "scripts/drone/utils/images.star",
- "images",
-)
-
-def publish_aws_marketplace_step():
- return {
- "name": "publish-aws-marketplace",
- "image": images["publish_image"],
- "commands": ["./bin/build publish aws --image grafana/grafana-enterprise --repo grafana-labs/grafanaenterprise --product 422b46fb-bea6-4f27-8bcc-832117bd627e"],
- "depends_on": ["compile-build-cmd"],
- "environment": {
- "AWS_REGION": from_secret("aws_region"),
- "AWS_ACCESS_KEY_ID": from_secret("aws_access_key_id"),
- "AWS_SECRET_ACCESS_KEY": from_secret("aws_secret_access_key"),
- },
- "volumes": [{"name": "docker", "path": "/var/run/docker.sock"}],
- }
-
-def publish_aws_marketplace_pipeline(mode):
- trigger = {
- "event": ["promote"],
- "target": [mode],
- }
- return [pipeline(
- name = "publish-aws-marketplace-{}".format(mode),
- trigger = trigger,
- steps = [compile_build_cmd(), publish_aws_marketplace_step()],
- edition = "",
- depends_on = ["publish-docker-enterprise-public"],
- environment = {"EDITION": "enterprise2"},
- )]
diff --git a/scripts/drone/pipelines/benchmarks.star b/scripts/drone/pipelines/benchmarks.star
index f2d22670beb..5e1fc6a3ec1 100644
--- a/scripts/drone/pipelines/benchmarks.star
+++ b/scripts/drone/pipelines/benchmarks.star
@@ -71,7 +71,6 @@ def integration_benchmarks(prefix):
return pipeline(
name = "{}-integration-benchmarks".format(prefix),
- edition = "oss",
trigger = {
"event": ["promote"],
"target": ["gobenchmarks"],
diff --git a/scripts/drone/pipelines/build.star b/scripts/drone/pipelines/build.star
index 6add0e398ac..e4b88414148 100644
--- a/scripts/drone/pipelines/build.star
+++ b/scripts/drone/pipelines/build.star
@@ -49,8 +49,7 @@ def build_e2e(trigger, ver_mode):
Drone pipeline.
"""
- edition = "oss"
- environment = {"EDITION": edition}
+ environment = {"EDITION": "oss"}
init_steps = [
identify_runner_step(),
download_grabpl_step(),
@@ -73,12 +72,12 @@ def build_e2e(trigger, ver_mode):
build_steps.extend(
[
- build_backend_step(edition = edition, ver_mode = ver_mode),
- build_frontend_step(edition = edition, ver_mode = ver_mode),
- build_frontend_package_step(edition = edition, ver_mode = ver_mode),
- build_plugins_step(edition = edition, ver_mode = ver_mode),
- package_step(edition = edition, ver_mode = ver_mode),
- grafana_server_step(edition = edition),
+ build_backend_step(ver_mode = ver_mode),
+ build_frontend_step(ver_mode = ver_mode),
+ build_frontend_package_step(ver_mode = ver_mode),
+ build_plugins_step(ver_mode = ver_mode),
+ package_step(ver_mode = ver_mode),
+ grafana_server_step(),
e2e_tests_step("dashboards-suite"),
e2e_tests_step("smoke-tests-suite"),
e2e_tests_step("panels-suite"),
@@ -101,34 +100,28 @@ def build_e2e(trigger, ver_mode):
store_storybook_step(trigger = trigger_oss, ver_mode = ver_mode),
frontend_metrics_step(trigger = trigger_oss),
build_docker_images_step(
- edition = edition,
publish = False,
),
build_docker_images_step(
- edition = edition,
publish = False,
ubuntu = True,
),
publish_images_step(
docker_repo = "grafana",
- edition = edition,
trigger = trigger_oss,
ver_mode = ver_mode,
),
publish_images_step(
docker_repo = "grafana-oss",
- edition = edition,
trigger = trigger_oss,
ver_mode = ver_mode,
),
release_canary_npm_packages_step(trigger = trigger_oss),
upload_packages_step(
- edition = edition,
trigger = trigger_oss,
ver_mode = ver_mode,
),
upload_cdn_step(
- edition = edition,
trigger = trigger_oss,
ver_mode = ver_mode,
),
@@ -141,18 +134,15 @@ def build_e2e(trigger, ver_mode):
archs = [
"amd64",
],
- edition = edition,
),
build_docker_images_step(
archs = [
"amd64",
],
- edition = edition,
ubuntu = True,
),
publish_images_step(
docker_repo = "grafana",
- edition = edition,
trigger = trigger_oss,
ver_mode = ver_mode,
),
@@ -165,7 +155,6 @@ def build_e2e(trigger, ver_mode):
return pipeline(
name = "{}-build-e2e{}".format(ver_mode, publish_suffix),
- edition = "oss",
environment = environment,
services = [],
steps = init_steps + build_steps,
diff --git a/scripts/drone/pipelines/ci_images.star b/scripts/drone/pipelines/ci_images.star
index efda2339e35..65df476754b 100644
--- a/scripts/drone/pipelines/ci_images.star
+++ b/scripts/drone/pipelines/ci_images.star
@@ -28,7 +28,6 @@ def publish_ci_windows_test_image_pipeline():
pl = pipeline(
name = "publish-ci-windows-test-image",
trigger = trigger,
- edition = "",
platform = "windows",
steps = [
{
@@ -79,7 +78,6 @@ def publish_ci_build_container_image_pipeline():
pl = pipeline(
name = "publish-ci-build-container-image",
trigger = trigger,
- edition = "",
steps = [
{
"name": "validate-version",
diff --git a/scripts/drone/pipelines/docs.star b/scripts/drone/pipelines/docs.star
index d60fcdb6cad..5f2cbdb8ef3 100644
--- a/scripts/drone/pipelines/docs.star
+++ b/scripts/drone/pipelines/docs.star
@@ -39,7 +39,6 @@ def docs_pipelines(ver_mode, trigger):
return pipeline(
name = "{}-docs".format(ver_mode),
- edition = "oss",
trigger = trigger,
services = [],
steps = steps,
diff --git a/scripts/drone/pipelines/github.star b/scripts/drone/pipelines/github.star
index fc43638c504..e69de29bb2d 100644
--- a/scripts/drone/pipelines/github.star
+++ b/scripts/drone/pipelines/github.star
@@ -1,43 +0,0 @@
-"""
-This module contains steps and pipelines relating to GitHub.
-"""
-
-load(
- "scripts/drone/steps/lib.star",
- "compile_build_cmd",
- "fetch_images_step",
-)
-load("scripts/drone/vault.star", "from_secret")
-load(
- "scripts/drone/utils/utils.star",
- "pipeline",
-)
-load(
- "scripts/drone/utils/images.star",
- "images",
-)
-
-def publish_github_step():
- return {
- "name": "publish-github",
- "image": images["publish_image"],
- "commands": ["./bin/build publish github --repo $${GH_REGISTRY} --create"],
- "depends_on": ["fetch-images-enterprise2"],
- "environment": {
- "GH_TOKEN": from_secret("github_token"),
- "GH_REGISTRY": from_secret("gh_registry"),
- },
- }
-
-def publish_github_pipeline(mode):
- trigger = {
- "event": ["promote"],
- "target": [mode],
- }
- return [pipeline(
- name = "publish-github-{}".format(mode),
- trigger = trigger,
- steps = [compile_build_cmd(), fetch_images_step("enterprise2"), publish_github_step()],
- edition = "",
- environment = {"EDITION": "enterprise2"},
- )]
diff --git a/scripts/drone/pipelines/integration_tests.star b/scripts/drone/pipelines/integration_tests.star
index f6330bc6dd4..c72456b45cf 100644
--- a/scripts/drone/pipelines/integration_tests.star
+++ b/scripts/drone/pipelines/integration_tests.star
@@ -51,11 +51,6 @@ def integration_tests(trigger, prefix, ver_mode = "pr"):
# In pull requests, attempt to clone grafana enterprise.
init_steps.append(enterprise_setup_step())
- # Ensure that verif_gen_cue happens after we clone enterprise
- # At the time of writing this, very_gen_cue is depended on by the wire step which is what everything else depends on.
- verify_step["depends_on"].append("clone-enterprise")
- verify_jsonnet_step["depends_on"].append("clone-enterprise")
-
init_steps += [
download_grabpl_step(),
compile_build_cmd(),
@@ -75,7 +70,6 @@ def integration_tests(trigger, prefix, ver_mode = "pr"):
return pipeline(
name = "{}-integration-tests".format(prefix),
- edition = "oss",
trigger = trigger,
environment = environment,
services = services,
diff --git a/scripts/drone/pipelines/lint_backend.star b/scripts/drone/pipelines/lint_backend.star
index 523b59531f0..53877f889ba 100644
--- a/scripts/drone/pipelines/lint_backend.star
+++ b/scripts/drone/pipelines/lint_backend.star
@@ -40,7 +40,6 @@ def lint_backend_pipeline(trigger, ver_mode):
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
init_steps.append(enterprise_setup_step())
- wire_step["depends_on"].append("clone-enterprise")
init_steps.append(wire_step)
@@ -54,7 +53,6 @@ def lint_backend_pipeline(trigger, ver_mode):
return pipeline(
name = "{}-lint-backend".format(ver_mode),
- edition = "oss",
trigger = trigger,
services = [],
steps = init_steps + test_steps,
diff --git a/scripts/drone/pipelines/lint_frontend.star b/scripts/drone/pipelines/lint_frontend.star
index 7874408061b..c8a0c4f9671 100644
--- a/scripts/drone/pipelines/lint_frontend.star
+++ b/scripts/drone/pipelines/lint_frontend.star
@@ -34,9 +34,6 @@ def lint_frontend_pipeline(trigger, ver_mode):
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
init_steps = [enterprise_setup_step()]
- # Ensure the lint step happens after the clone-enterprise step
-
- lint_step["depends_on"].append("clone-enterprise")
init_steps += [
identify_runner_step(),
@@ -49,7 +46,6 @@ def lint_frontend_pipeline(trigger, ver_mode):
return pipeline(
name = "{}-lint-frontend".format(ver_mode),
- edition = "oss",
trigger = trigger,
services = [],
steps = init_steps + test_steps,
diff --git a/scripts/drone/pipelines/publish_images.star b/scripts/drone/pipelines/publish_images.star
index a644e13dc02..4f099eba389 100644
--- a/scripts/drone/pipelines/publish_images.star
+++ b/scripts/drone/pipelines/publish_images.star
@@ -15,13 +15,10 @@ load(
"pipeline",
)
-def publish_image_steps(edition, docker_repo):
+def publish_image_steps(docker_repo):
"""Generates the steps used for publising Docker images using grabpl.
Args:
- edition: controls which version of an image is fetched in the case of a release.
- It also controls which publishing implementation is used.
- If edition == 'oss', it additionally publishes the grafana/grafana-oss repository.
docker_repo: the Docker image name.
It is combined with the 'grafana/' library prefix.
@@ -32,15 +29,11 @@ def publish_image_steps(edition, docker_repo):
identify_runner_step(),
download_grabpl_step(),
compile_build_cmd(),
- fetch_images_step(edition),
- publish_images_step(edition, "release", docker_repo),
+ fetch_images_step(),
+ publish_images_step("release", docker_repo),
+ publish_images_step("release", "grafana-oss"),
]
- if edition == "oss":
- steps.append(
- publish_images_step(edition, "release", "grafana-oss"),
- )
-
return steps
def publish_image_pipelines_public():
@@ -56,20 +49,9 @@ def publish_image_pipelines_public():
}
return [
pipeline(
- name = "publish-docker-oss-{}".format(mode),
+ name = "publish-docker-{}".format(mode),
trigger = trigger,
- steps = publish_image_steps(edition = "oss", docker_repo = "grafana"),
- edition = "",
+ steps = publish_image_steps(docker_repo = "grafana"),
environment = {"EDITION": "oss"},
),
- pipeline(
- name = "publish-docker-enterprise-{}".format(mode),
- trigger = trigger,
- steps = publish_image_steps(
- edition = "enterprise",
- docker_repo = "grafana-enterprise",
- ),
- edition = "",
- environment = {"EDITION": "enterprise"},
- ),
]
diff --git a/scripts/drone/pipelines/shellcheck.star b/scripts/drone/pipelines/shellcheck.star
index b8ef57265d7..5b8d481094c 100644
--- a/scripts/drone/pipelines/shellcheck.star
+++ b/scripts/drone/pipelines/shellcheck.star
@@ -46,7 +46,6 @@ def shellcheck_pipeline():
]
return pipeline(
name = "pr-shellcheck",
- edition = "oss",
trigger = trigger,
services = [],
steps = steps,
diff --git a/scripts/drone/pipelines/test_backend.star b/scripts/drone/pipelines/test_backend.star
index bb91ae6f6dd..ad1394196f3 100644
--- a/scripts/drone/pipelines/test_backend.star
+++ b/scripts/drone/pipelines/test_backend.star
@@ -4,12 +4,9 @@ This module returns the pipeline used for testing backend code.
load(
"scripts/drone/steps/lib.star",
- "clone_enterprise_step",
"compile_build_cmd",
- "download_grabpl_step",
"enterprise_setup_step",
"identify_runner_step",
- "init_enterprise_step",
"test_backend_integration_step",
"test_backend_step",
"verify_gen_cue_step",
@@ -19,7 +16,6 @@ load(
load(
"scripts/drone/utils/utils.star",
"pipeline",
- "with_deps",
)
def test_backend(trigger, ver_mode):
@@ -43,14 +39,9 @@ def test_backend(trigger, ver_mode):
# In pull requests, attempt to clone grafana enterprise.
steps.append(enterprise_setup_step())
- # Ensure that verif_gen_cue happens after we clone enterprise
- # At the time of writing this, very_gen_cue is depended on by the wire step which is what everything else depends on.
- verify_step["depends_on"].append("clone-enterprise")
- verify_jsonnet_step["depends_on"].append("clone-enterprise")
-
steps += [
identify_runner_step(),
- compile_build_cmd(edition = "oss"),
+ compile_build_cmd(),
verify_step,
verify_jsonnet_step,
wire_install_step(),
@@ -58,63 +49,8 @@ def test_backend(trigger, ver_mode):
test_backend_integration_step(),
]
- pipeline_name = "{}-test-backend".format(ver_mode)
- if ver_mode in ("release-branch", "release"):
- pipeline_name = "{}-{}-test-backend".format(ver_mode, "oss")
-
return pipeline(
- name = pipeline_name,
- edition = "oss",
- trigger = trigger,
- steps = steps,
- environment = environment,
- )
-
-def test_backend_enterprise(trigger, ver_mode, source, edition = "enterprise"):
- """Generates the pipeline used for testing backend enterprise code.
-
- Args:
- trigger: a Drone trigger for the pipeline.
- ver_mode: affects the pipeline name.
- source: controls what revision of enterprise code to test with. The source of the PR, usually.
- edition: affects the clone step in the pipeline and also affects the pipeline name.
-
- Returns:
- Drone pipeline.
- """
- environment = {"EDITION": edition}
-
- steps = (
- [
- clone_enterprise_step(source),
- download_grabpl_step(),
- init_enterprise_step(ver_mode),
- identify_runner_step(),
- compile_build_cmd(edition),
- ] +
- with_deps(
- [
- verify_gen_cue_step(),
- verify_gen_jsonnet_step(),
- ],
- [
- "init-enterprise",
- ],
- ) +
- [
- wire_install_step(),
- test_backend_step(),
- test_backend_integration_step(),
- ]
- )
-
- pipeline_name = "{}-test-backend".format(ver_mode)
- if ver_mode in ("release-branch", "release"):
- pipeline_name = "{}-{}-test-backend".format(ver_mode, edition)
-
- return pipeline(
- name = pipeline_name,
- edition = edition,
+ name = "{}-test-backend".format(ver_mode),
trigger = trigger,
steps = steps,
environment = environment,
diff --git a/scripts/drone/pipelines/test_frontend.star b/scripts/drone/pipelines/test_frontend.star
index d41d1b7a08a..e9e353720bd 100644
--- a/scripts/drone/pipelines/test_frontend.star
+++ b/scripts/drone/pipelines/test_frontend.star
@@ -5,18 +5,15 @@ This module returns the pipeline used for testing backend code.
load(
"scripts/drone/steps/lib.star",
"betterer_frontend_step",
- "clone_enterprise_step",
"download_grabpl_step",
"enterprise_setup_step",
"identify_runner_step",
- "init_enterprise_step",
"test_frontend_step",
"yarn_install_step",
)
load(
"scripts/drone/utils/utils.star",
"pipeline",
- "with_deps",
)
def test_frontend(trigger, ver_mode):
@@ -35,68 +32,19 @@ def test_frontend(trigger, ver_mode):
identify_runner_step(),
download_grabpl_step(),
yarn_install_step(),
- betterer_frontend_step(edition = "oss"),
+ betterer_frontend_step(),
]
- pipeline_name = "{}-test-frontend".format(ver_mode)
-
- test_step = test_frontend_step(edition = "oss")
+ test_step = test_frontend_step()
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
steps.append(enterprise_setup_step())
- # Also, make the test step depend on 'clone-enterprise
- test_step["depends_on"].append("clone-enterprise")
-
steps.append(test_step)
- pipeline_name = "{}-test-frontend".format(ver_mode)
- if ver_mode in ("release-branch", "release"):
- pipeline_name = "{}-oss-test-frontend".format(ver_mode)
-
return pipeline(
- name = pipeline_name,
- edition = "oss",
- trigger = trigger,
- steps = steps,
- environment = environment,
- )
-
-def test_frontend_enterprise(trigger, ver_mode, source, edition = "enterprise"):
- """Generates the pipeline used for testing frontend enterprise code.
-
- Args:
- trigger: a Drone trigger for the pipeline.
- ver_mode: affects the pipeline name.
- source: controls what revision of Grafana code to test with.
- edition: affects the clone step in the pipeline and also affects the pipeline name.
-
- Returns:
- Drone pipeline.
- """
- environment = {"EDITION": edition}
- steps = (
- [
- download_grabpl_step(),
- clone_enterprise_step(source),
- init_enterprise_step(ver_mode),
- identify_runner_step(),
- ] +
- with_deps([yarn_install_step()], ["init-enterprise"]) +
- [
- betterer_frontend_step(edition),
- test_frontend_step(edition),
- ]
- )
-
- pipeline_name = "{}-test-frontend".format(ver_mode)
- if ver_mode in ("release-branch", "release"):
- pipeline_name = "{}-{}-test-frontend".format(ver_mode, edition)
-
- return pipeline(
- name = pipeline_name,
- edition = edition,
+ name = "{}-test-frontend".format(ver_mode),
trigger = trigger,
steps = steps,
environment = environment,
diff --git a/scripts/drone/pipelines/trigger_downstream.star b/scripts/drone/pipelines/trigger_downstream.star
index d3403de50f1..d35e2ce090a 100644
--- a/scripts/drone/pipelines/trigger_downstream.star
+++ b/scripts/drone/pipelines/trigger_downstream.star
@@ -36,7 +36,6 @@ def enterprise_downstream_pipeline():
]
return pipeline(
name = "main-trigger-downstream",
- edition = "oss",
trigger = trigger,
services = [],
steps = steps,
diff --git a/scripts/drone/pipelines/verify_drone.star b/scripts/drone/pipelines/verify_drone.star
index 8975abec2c8..366b702bd08 100644
--- a/scripts/drone/pipelines/verify_drone.star
+++ b/scripts/drone/pipelines/verify_drone.star
@@ -22,7 +22,6 @@ def verify_drone(trigger, ver_mode):
]
return pipeline(
name = "{}-verify-drone".format(ver_mode),
- edition = "oss",
trigger = trigger,
services = [],
steps = steps,
diff --git a/scripts/drone/pipelines/verify_starlark.star b/scripts/drone/pipelines/verify_starlark.star
index b95962b2eb5..9e058893d7b 100644
--- a/scripts/drone/pipelines/verify_starlark.star
+++ b/scripts/drone/pipelines/verify_starlark.star
@@ -22,7 +22,6 @@ def verify_starlark(trigger, ver_mode):
]
return pipeline(
name = "{}-verify-starlark".format(ver_mode),
- edition = "oss",
trigger = trigger,
services = [],
steps = steps,
diff --git a/scripts/drone/pipelines/whats_new_checker.star b/scripts/drone/pipelines/whats_new_checker.star
index b73acb2be0b..e15a8d7a291 100644
--- a/scripts/drone/pipelines/whats_new_checker.star
+++ b/scripts/drone/pipelines/whats_new_checker.star
@@ -35,7 +35,6 @@ def whats_new_checker_pipeline(trigger):
]
return pipeline(
name = "release-whatsnew-checker",
- edition = "oss",
trigger = trigger,
services = [],
steps = steps,
diff --git a/scripts/drone/pipelines/windows.star b/scripts/drone/pipelines/windows.star
index f20759c18e7..fd5b99c9bf0 100644
--- a/scripts/drone/pipelines/windows.star
+++ b/scripts/drone/pipelines/windows.star
@@ -10,7 +10,6 @@ load(
"scripts/drone/steps/lib.star",
"get_windows_steps",
"windows_clone_step",
- "windows_init_enterprise_steps",
"windows_test_backend_step",
"windows_wire_install_step",
)
@@ -34,23 +33,19 @@ def windows_test_backend(trigger, edition, ver_mode):
windows_clone_step(),
]
- if edition == "enterprise":
- steps.extend(windows_init_enterprise_steps(ver_mode))
- else:
- steps.extend([{
- "name": "windows-init",
- "image": windows_images["windows_go_image"],
- "depends_on": ["clone"],
- "commands": [],
- }])
+ steps.extend([{
+ "name": "windows-init",
+ "image": windows_images["windows_go_image"],
+ "depends_on": ["clone"],
+ "commands": [],
+ }])
steps.extend([
windows_wire_install_step(edition),
windows_test_backend_step(),
])
pl = pipeline(
- name = "{}-{}-test-backend-windows".format(ver_mode, edition),
- edition = edition,
+ name = "{}-test-backend-windows".format(ver_mode),
trigger = trigger,
steps = steps,
depends_on = [],
@@ -62,25 +57,23 @@ def windows_test_backend(trigger, edition, ver_mode):
}
return pl
-def windows(trigger, edition, ver_mode):
+def windows(trigger, ver_mode):
"""Generates the pipeline used for building Grafana on Windows.
Args:
trigger: a Drone trigger for the pipeline.
- edition: controls whether enterprise code is included in the pipeline steps.
ver_mode: controls whether a pre-release or actual release pipeline is generated.
Also indirectly controls which version of enterprise code is used.
Returns:
Drone pipeline.
"""
- environment = {"EDITION": edition}
+ environment = {"EDITION": "oss"}
return pipeline(
name = "main-windows",
- edition = edition,
trigger = dict(trigger, repo = ["grafana/grafana"]),
- steps = get_windows_steps(edition, ver_mode),
+ steps = get_windows_steps(ver_mode),
depends_on = [
"main-test-frontend",
"main-test-backend",
diff --git a/scripts/drone/rgm.star b/scripts/drone/rgm.star
index b7e81d65925..2d78a8a8aaf 100644
--- a/scripts/drone/rgm.star
+++ b/scripts/drone/rgm.star
@@ -70,7 +70,6 @@ def rgm_main():
return pipeline(
name = "rgm-main-prerelease",
- edition = "all",
trigger = trigger,
steps = rgm_build(),
depends_on = ["main-test-backend", "main-test-frontend"],
@@ -95,7 +94,6 @@ tag_trigger = {
def rgm_tag():
return pipeline(
name = "rgm-tag-prerelease",
- edition = "all",
trigger = tag_trigger,
steps = rgm_build(script = "drone_publish_tag.sh"),
depends_on = [],
diff --git a/scripts/drone/steps/lib.star b/scripts/drone/steps/lib.star
index a2e416e638e..43bcbd777fc 100644
--- a/scripts/drone/steps/lib.star
+++ b/scripts/drone/steps/lib.star
@@ -108,29 +108,6 @@ def enterprise_setup_step(source = "${DRONE_SOURCE_BRANCH}", canFail = True, isP
return step
-def clone_enterprise_step(source = "${DRONE_COMMIT}"):
- """Clone the enterprise source into the ./grafana-enterprise directory.
-
- Args:
- source: controls which revision of grafana-enterprise is checked out, if it exists. The name 'source' derives from the 'source branch' of a pull request.
- Returns:
- Drone step.
- """
- step = {
- "name": "clone-enterprise",
- "image": images["build_image"],
- "environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
- },
- "commands": [
- 'git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"',
- "cd grafana-enterprise",
- "git checkout {}".format(source),
- ],
- }
-
- return step
-
def clone_enterprise_step_pr(source = "${DRONE_COMMIT}", target = "main", canFail = False, location = "grafana-enterprise", isPromote = False):
"""Clone the enterprise source into the ./grafana-enterprise directory.
@@ -171,109 +148,6 @@ def clone_enterprise_step_pr(source = "${DRONE_COMMIT}", target = "main", canFai
return step
-def init_enterprise_step(ver_mode):
- """Adds the enterprise deployment configuration into the source directory.
-
- Args:
- ver_mode: controls what revision of the OSS source to use.
- If ver_mode is 'release', the step uses the tagged revision.
- Otherwise, the DRONE_SOURCE_BRANCH is used.
-
- Returns:
- Drone step.
- """
- source_commit = ""
- if ver_mode == "release":
- source_commit = " ${DRONE_TAG}"
- environment = {
- "GITHUB_TOKEN": from_secret("github_token"),
- }
- token = "--github-token $${GITHUB_TOKEN}"
- elif ver_mode == "release-branch":
- environment = {
- "GITHUB_TOKEN": from_secret("github_token"),
- }
- token = "--github-token $${GITHUB_TOKEN}"
- else:
- environment = {}
- token = ""
- return {
- "name": "init-enterprise",
- "image": images["build_image"],
- "depends_on": [
- "clone-enterprise",
- "grabpl",
- ],
- "environment": environment,
- "commands": [
- "mv bin/grabpl /tmp/",
- "rmdir bin",
- "mv grafana-enterprise /tmp/",
- "/tmp/grabpl init-enterprise {} /tmp/grafana-enterprise{}".format(
- token,
- source_commit,
- ).rstrip(),
- "mv /tmp/grafana-enterprise/deployment_tools_config.json deployment_tools_config.json",
- "mkdir bin",
- "mv /tmp/grabpl bin/",
- ],
- }
-
-def windows_init_enterprise_steps(ver_mode):
- """Performs init-enterprise steps in a Windows environment
-
- Args:
- ver_mode: in what mode should this be run
-
- Returns:
- A list of steps setting up an enterprise folder
- """
- if ver_mode == "release":
- source = "${DRONE_TAG}"
- elif ver_mode == "release-branch":
- source = "$$env:DRONE_BRANCH"
- else:
- source = "main"
-
- clone_cmds = [
- 'git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git"',
- "cd grafana-enterprise",
- "git checkout {}".format(source),
- ]
-
- init_cmds = [
- # Need to move grafana-enterprise out of the way, so directory is empty and can be cloned into
- "cp -r grafana-enterprise C:\\App\\grafana-enterprise",
- "rm -r -force grafana-enterprise",
- "cp grabpl.exe C:\\App\\grabpl.exe",
- "rm -force grabpl.exe",
- "C:\\App\\grabpl.exe init-enterprise --github-token $$env:GITHUB_TOKEN C:\\App\\grafana-enterprise {}".format(source),
- "cp C:\\App\\grabpl.exe grabpl.exe",
- ]
-
- steps = []
- steps.extend(
- [
- download_grabpl_step(platform = "windows"),
- {
- "name": "clone",
- "image": windows_images["wix_image"],
- "environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
- },
- "commands": clone_cmds,
- },
- {
- "name": "windows-init",
- "image": windows_images["wix_image"],
- "commands": init_cmds,
- "depends_on": ["clone"],
- "environment": {"GITHUB_TOKEN": from_secret("github_token")},
- },
- ],
- )
- return steps
-
def download_grabpl_step(platform = "linux"):
if platform == "windows":
return {
@@ -514,11 +388,10 @@ def e2e_tests_artifacts():
],
}
-def upload_cdn_step(edition, ver_mode, trigger = None):
+def upload_cdn_step(ver_mode, trigger = None):
"""Uploads CDN assets using the Grafana build tool.
Args:
- edition: controls the output directory for the CDN assets.
ver_mode: only uses the step trigger when ver_mode == 'release-branch' or 'main'
trigger: a Drone trigger for the step.
Defaults to None.
@@ -526,41 +399,29 @@ def upload_cdn_step(edition, ver_mode, trigger = None):
Returns:
Drone step.
"""
- deps = []
- if edition in "enterprise2":
- deps.extend(
- [
- "package" + enterprise2_suffix(edition),
- ],
- )
- else:
- deps.extend(
- [
- "grafana-server",
- ],
- )
step = {
- "name": "upload-cdn-assets" + enterprise2_suffix(edition),
+ "name": "upload-cdn-assets",
"image": images["publish_image"],
- "depends_on": deps,
+ "depends_on": [
+ "grafana-server",
+ ],
"environment": {
"GCP_KEY": from_secret("gcp_key"),
"PRERELEASE_BUCKET": from_secret(prerelease_bucket),
},
"commands": [
- "./bin/build upload-cdn --edition {}".format(edition),
+ "./bin/build upload-cdn --edition oss",
],
}
if trigger and ver_mode in ("release-branch", "main"):
step = dict(step, when = trigger)
return step
-def build_backend_step(edition, ver_mode, variants = None):
+def build_backend_step(ver_mode, variants = None):
"""Build the backend code using the Grafana build tool.
Args:
- edition: controls which edition of the backend is built.
ver_mode: if ver_mode != 'release', pass the DRONE_BUILD_NUMBER environment
variable as the value for the --build-id option.
TODO: is this option actually used by the build-backend subcommand?
@@ -578,22 +439,19 @@ def build_backend_step(edition, ver_mode, variants = None):
# TODO: Convert number of jobs to percentage
if ver_mode == "release":
cmds = [
- "./bin/build build-backend --jobs 8 --edition {} ${{DRONE_TAG}}".format(
- edition,
- ),
+ "./bin/build build-backend --jobs 8 --edition oss ${DRONE_TAG}",
]
else:
build_no = "${DRONE_BUILD_NUMBER}"
cmds = [
- "./bin/build build-backend --jobs 8 --edition {} --build-id {}{}".format(
- edition,
+ "./bin/build build-backend --jobs 8 --edition oss --build-id {}{}".format(
build_no,
variants_str,
),
]
return {
- "name": "build-backend" + enterprise2_suffix(edition),
+ "name": "build-backend",
"image": images["build_image"],
"depends_on": [
"wire-install",
@@ -602,11 +460,10 @@ def build_backend_step(edition, ver_mode, variants = None):
"commands": cmds,
}
-def build_frontend_step(edition, ver_mode):
+def build_frontend_step(ver_mode):
"""Build the frontend code using the Grafana build tool.
Args:
- edition: controls which edition of the frontend is built.
ver_mode: if ver_mode != 'release', use the DRONE_BUILD_NUMBER environment
variable as a build identifier.
@@ -619,11 +476,11 @@ def build_frontend_step(edition, ver_mode):
if ver_mode == "release":
cmds = [
"./bin/build build-frontend --jobs 8 " +
- "--edition {} ${{DRONE_TAG}}".format(edition),
+ "--edition oss ${DRONE_TAG}",
]
else:
cmds = [
- "./bin/build build-frontend --jobs 8 --edition {} ".format(edition) +
+ "./bin/build build-frontend --jobs 8 --edition oss" +
"--build-id {}".format(build_no),
]
@@ -640,11 +497,10 @@ def build_frontend_step(edition, ver_mode):
"commands": cmds,
}
-def build_frontend_package_step(edition, ver_mode):
+def build_frontend_package_step(ver_mode):
"""Build the frontend packages using the Grafana build tool.
Args:
- edition: controls which edition of the frontend is built.
ver_mode: if ver_mode != 'release', use the DRONE_BUILD_NUMBER environment
variable as a build identifier.
@@ -657,11 +513,11 @@ def build_frontend_package_step(edition, ver_mode):
if ver_mode == "release":
cmds = [
"./bin/build build-frontend-packages --jobs 8 " +
- "--edition {} ${{DRONE_TAG}}".format(edition),
+ "--edition oss ${DRONE_TAG}",
]
else:
cmds = [
- "./bin/build build-frontend-packages --jobs 8 --edition {} ".format(edition) +
+ "./bin/build build-frontend-packages --jobs 8 --edition oss" +
"--build-id {}".format(build_no),
"yarn packages:pack",
"./scripts/validate-npm-packages.sh",
@@ -680,7 +536,7 @@ def build_frontend_package_step(edition, ver_mode):
"commands": cmds,
}
-def build_plugins_step(edition, ver_mode):
+def build_plugins_step(ver_mode):
if ver_mode != "pr":
env = {
"GRAFANA_API_KEY": from_secret("grafana_api_key"),
@@ -697,7 +553,7 @@ def build_plugins_step(edition, ver_mode):
],
"commands": [
# TODO: Use percentage for num jobs
- "./bin/build build-plugins --jobs 8 --edition {}".format(edition),
+ "./bin/build build-plugins --jobs 8 --edition oss",
],
}
@@ -729,50 +585,40 @@ def test_backend_integration_step():
],
}
-def betterer_frontend_step(edition = "oss"):
+def betterer_frontend_step():
"""Run betterer on frontend code.
- Args:
- edition: controls whether enterprise code is also included in the source.
- Defaults to 'oss'.
-
Returns:
Drone step.
"""
- deps = []
- if edition == "enterprise":
- deps.extend(["init-enterprise"])
- deps.extend(["yarn-install"])
+
return {
"name": "betterer-frontend",
"image": images["build_image"],
- "depends_on": deps,
+ "depends_on": [
+ "yarn-install",
+ ],
"commands": [
"yarn betterer ci",
],
}
-def test_frontend_step(edition = "oss"):
+def test_frontend_step():
"""Runs tests on frontend code.
- Args:
- edition: controls whether enterprise code is also included in the source.
- Defaults to 'oss'.
-
Returns:
Drone step.
"""
- deps = []
- if edition == "enterprise":
- deps.extend(["init-enterprise"])
- deps.extend(["yarn-install"])
+
return {
"name": "test-frontend",
"image": images["build_image"],
"environment": {
"TEST_MAX_WORKERS": "50%",
},
- "depends_on": deps,
+ "depends_on": [
+ "yarn-install",
+ ],
"commands": [
"yarn run ci:test-frontend",
],
@@ -905,11 +751,10 @@ def codespell_step():
],
}
-def package_step(edition, ver_mode):
+def package_step(ver_mode):
"""Packages Grafana with the Grafana build tool.
Args:
- edition: controls which edition of Grafana is packaged.
ver_mode: controls whether the packages are signed for a release.
If ver_mode != 'release', use the DRONE_BUILD_NUMBER environment
variable as a build identifier.
@@ -919,7 +764,7 @@ def package_step(edition, ver_mode):
"""
deps = [
"build-plugins",
- "build-backend" + enterprise2_suffix(edition),
+ "build-backend",
"build-frontend",
"build-frontend-packages",
]
@@ -943,29 +788,28 @@ def package_step(edition, ver_mode):
# TODO: Use percentage for jobs
if ver_mode == "release":
cmds = [
- "{}./bin/build package --jobs 8 --edition {} ".format(test_args, edition) +
- "{} ${{DRONE_TAG}}".format(sign_args),
+ "{}./bin/build package --jobs 8 --edition oss ".format(test_args) +
+ "{} $${{DRONE_TAG}}".format(sign_args),
]
else:
build_no = "${DRONE_BUILD_NUMBER}"
cmds = [
- "{}./bin/build package --jobs 8 --edition {} ".format(test_args, edition) +
+ "{}./bin/build package --jobs 8 --edition oss ".format(test_args) +
"--build-id {}{}".format(build_no, sign_args),
]
return {
- "name": "package" + enterprise2_suffix(edition),
+ "name": "package",
"image": images["build_image"],
"depends_on": deps,
"environment": env,
"commands": cmds,
}
-def grafana_server_step(edition, port = 3001):
+def grafana_server_step(port = 3001):
"""Runs the grafana-server binary as a service.
Args:
- edition: controls which edition of grafana-server to run.
port: port to listen on.
Defaults to 3001.
@@ -973,8 +817,6 @@ def grafana_server_step(edition, port = 3001):
Drone step.
"""
environment = {"PORT": port, "ARCH": "linux-amd64"}
- if edition == "enterprise":
- environment["RUNDIR"] = "scripts/grafana-server/tmp-grafana-enterprise"
return {
"name": "grafana-server",
@@ -1072,12 +914,12 @@ def build_docs_website_step():
],
}
-def copy_packages_for_docker_step(edition = None):
+def copy_packages_for_docker_step():
return {
"name": "copy-packages-for-docker",
"image": images["build_image"],
"depends_on": [
- "package" + enterprise2_suffix(edition),
+ "package",
],
"commands": [
"ls dist/*.tar.gz*",
@@ -1085,11 +927,10 @@ def copy_packages_for_docker_step(edition = None):
],
}
-def build_docker_images_step(edition, archs = None, ubuntu = False, publish = False):
+def build_docker_images_step(archs = None, ubuntu = False, publish = False):
"""Build Docker images using the Grafana build tool.
Args:
- edition: controls which repository the image is published to.
archs: a list of architectures to build the image for.
Defaults to None.
ubuntu: controls whether the final image is built from an Ubuntu base image.
@@ -1100,7 +941,7 @@ def build_docker_images_step(edition, archs = None, ubuntu = False, publish = Fa
Returns:
Drone step.
"""
- cmd = "./bin/build build-docker --edition {}".format(edition)
+ cmd = "./bin/build build-docker --edition oss"
if publish:
cmd += " --shouldSave"
@@ -1116,11 +957,6 @@ def build_docker_images_step(edition, archs = None, ubuntu = False, publish = Fa
"GCP_KEY": from_secret("gcp_key"),
}
- if edition == "enterprise2":
- environment.update(
- {"DOCKER_ENTERPRISE2_REPO": from_secret("docker_enterprise2_repo")},
- )
-
return {
"name": "build-docker-images" + ubuntu_sfx,
"image": images["cloudsdk_image"],
@@ -1133,27 +969,24 @@ def build_docker_images_step(edition, archs = None, ubuntu = False, publish = Fa
"environment": environment,
}
-def fetch_images_step(edition):
+def fetch_images_step():
return {
- "name": "fetch-images-{}".format(edition),
+ "name": "fetch-images",
"image": images["cloudsdk_image"],
"environment": {
"GCP_KEY": from_secret("gcp_key"),
"DOCKER_USER": from_secret("docker_username"),
"DOCKER_PASSWORD": from_secret("docker_password"),
- "DOCKER_ENTERPRISE2_REPO": from_secret("docker_enterprise2_repo"),
},
- "commands": ["./bin/build artifacts docker fetch --edition {}".format(edition)],
+ "commands": ["./bin/build artifacts docker fetch --edition oss"],
"depends_on": ["compile-build-cmd"],
"volumes": [{"name": "docker", "path": "/var/run/docker.sock"}],
}
-def publish_images_step(edition, ver_mode, docker_repo, trigger = None):
+def publish_images_step(ver_mode, docker_repo, trigger = None):
"""Generates a step for publishing public Docker images with grabpl.
Args:
- edition: controls which version of an image is fetched in the case of a release.
- It also controls which publishing implementation is used.
ver_mode: controls whether the image needs to be built or retrieved from a previous build.
If ver_mode == 'release', the previously built image is fetched instead of being built again.
docker_repo: the Docker image name.
@@ -1182,22 +1015,9 @@ def publish_images_step(edition, ver_mode, docker_repo, trigger = None):
deps = ["build-docker-images", "build-docker-images-ubuntu"]
if ver_mode == "release":
- deps = ["fetch-images-{}".format(edition)]
+ deps = ["fetch-images"]
cmd += " --version-tag ${DRONE_TAG}"
- if edition == "enterprise2":
- name = edition
- docker_repo = "$${DOCKER_ENTERPRISE2_REPO}"
- environment.update(
- {
- "GCP_KEY": from_secret("gcp_key_hg"),
- "DOCKER_ENTERPRISE2_REPO": from_secret("docker_enterprise2_repo"),
- },
- )
- cmd = "./bin/build artifacts docker publish-enterprise2 --dockerhub-repo {}".format(
- docker_repo,
- )
-
if ver_mode == "pr":
environment = {
"DOCKER_USER": from_secret("docker_username_pr"),
@@ -1340,16 +1160,10 @@ def release_canary_npm_packages_step(trigger = None):
)
return step
-def enterprise2_suffix(edition):
- if edition == "enterprise2":
- return "-{}".format(edition)
- return ""
-
-def upload_packages_step(edition, ver_mode, trigger = None):
+def upload_packages_step(ver_mode, trigger = None):
"""Upload packages to object storage.
Args:
- edition: controls which edition of Grafana packages to upload.
ver_mode: when ver_mode == 'main', inhibit upload of enterprise
edition packages when executed.
trigger: a Drone trigger for the step.
@@ -1359,7 +1173,7 @@ def upload_packages_step(edition, ver_mode, trigger = None):
Drone step.
"""
step = {
- "name": "upload-packages" + enterprise2_suffix(edition),
+ "name": "upload-packages",
"image": images["publish_image"],
"depends_on": end_to_end_tests_deps(),
"environment": {
@@ -1367,18 +1181,17 @@ def upload_packages_step(edition, ver_mode, trigger = None):
"PRERELEASE_BUCKET": from_secret("prerelease_bucket"),
},
"commands": [
- "./bin/build upload-packages --edition {}".format(edition),
+ "./bin/build upload-packages --edition oss",
],
}
if trigger and ver_mode in ("release-branch", "main"):
step = dict(step, when = trigger)
return step
-def publish_grafanacom_step(edition, ver_mode):
+def publish_grafanacom_step(ver_mode):
"""Publishes Grafana packages to grafana.com.
Args:
- edition: controls which edition of Grafana to publish to.
ver_mode: if ver_mode == 'main', pass the DRONE_BUILD_NUMBER environment
variable as the value for the --build-id option.
TODO: is this actually used by the grafanacom subcommand? I think it might
@@ -1388,20 +1201,17 @@ def publish_grafanacom_step(edition, ver_mode):
Drone step.
"""
if ver_mode == "release":
- cmd = "./bin/build publish grafana-com --edition {} ${{DRONE_TAG}}".format(
- edition,
- )
+ cmd = "./bin/build publish grafana-com --edition oss ${DRONE_TAG}"
elif ver_mode == "main":
build_no = "${DRONE_BUILD_NUMBER}"
- cmd = "./bin/build publish grafana-com --edition {} --build-id {}".format(
- edition,
+ cmd = "./bin/build publish grafana-com --edition oss --build-id {}".format(
build_no,
)
else:
fail("Unexpected version mode {}".format(ver_mode))
return {
- "name": "publish-grafanacom-{}".format(edition),
+ "name": "publish-grafanacom",
"image": images["publish_image"],
"depends_on": [
"publish-linux-packages-deb",
@@ -1416,7 +1226,7 @@ def publish_grafanacom_step(edition, ver_mode):
],
}
-def publish_linux_packages_step(edition, package_manager = "deb"):
+def publish_linux_packages_step(package_manager = "deb"):
return {
"name": "publish-linux-packages-{}".format(package_manager),
# See https://github.com/grafana/deployment_tools/blob/master/docker/package-publish/README.md for docs on that image
@@ -1432,8 +1242,7 @@ def publish_linux_packages_step(edition, package_manager = "deb"):
"gpg_passphrase": from_secret("packages_gpg_passphrase"),
"gpg_public_key": from_secret("packages_gpg_public_key"),
"gpg_private_key": from_secret("packages_gpg_private_key"),
- "package_path": "gs://grafana-prerelease/artifacts/downloads/*${{DRONE_TAG}}/{}/**.{}".format(
- edition,
+ "package_path": "gs://grafana-prerelease/artifacts/downloads/*$${{DRONE_TAG}}/oss/**.{}".format(
package_manager,
),
},
@@ -1452,11 +1261,10 @@ def windows_clone_step():
],
}
-def get_windows_steps(edition, ver_mode):
+def get_windows_steps(ver_mode):
"""Generate the list of Windows steps.
Args:
- edition: used to differentiate steps for different Grafana editions.
ver_mode: used to differentiate steps for different version modes.
Returns:
@@ -1466,80 +1274,24 @@ def get_windows_steps(edition, ver_mode):
identify_runner_step("windows"),
]
- if edition in ("enterprise", "enterprise2"):
- if ver_mode == "release":
- source = "${DRONE_TAG}"
- elif ver_mode == "release-branch":
- source = "$$env:DRONE_BRANCH"
- else:
- source = "$$env:DRONE_COMMIT"
+ init_cmds = [
+ '$$ProgressPreference = "SilentlyContinue"',
+ "Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/{}/windows/grabpl.exe -OutFile grabpl.exe".format(
+ grabpl_version,
+ ),
+ ]
- # For enterprise, we have to clone both OSS and enterprise and merge the latter into the former
- download_grabpl_cmds = [
- '$$ProgressPreference = "SilentlyContinue"',
- "Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/{}/windows/grabpl.exe -OutFile grabpl.exe".format(
- grabpl_version,
- ),
- ]
+ steps.extend(
+ [
+ {
+ "name": "windows-init",
+ "image": windows_images["wix_image"],
+ "commands": init_cmds,
+ },
+ ],
+ )
- clone_cmds = [
- 'git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git"',
- "cd grafana-enterprise",
- "git checkout {}".format(source),
- ]
-
- init_cmds = [
- # Need to move grafana-enterprise out of the way, so directory is empty and can be cloned into
- "cp -r grafana-enterprise C:\\App\\grafana-enterprise",
- "rm -r -force grafana-enterprise",
- "cp grabpl.exe C:\\App\\grabpl.exe",
- "rm -force grabpl.exe",
- "C:\\App\\grabpl.exe init-enterprise --github-token $$env:GITHUB_TOKEN C:\\App\\grafana-enterprise {}".format(source),
- "cp C:\\App\\grabpl.exe grabpl.exe",
- ]
-
- steps.extend(
- [
- {
- "name": "clone",
- "image": windows_images["wix_image"],
- "environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
- },
- "commands": download_grabpl_cmds + clone_cmds,
- },
- {
- "name": "windows-init",
- "image": windows_images["wix_image"],
- "commands": init_cmds,
- "depends_on": ["clone"],
- "environment": {"GITHUB_TOKEN": from_secret("github_token")},
- },
- ],
- )
- else:
- init_cmds = [
- '$$ProgressPreference = "SilentlyContinue"',
- "Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/{}/windows/grabpl.exe -OutFile grabpl.exe".format(
- grabpl_version,
- ),
- ]
-
- steps.extend(
- [
- {
- "name": "windows-init",
- "image": windows_images["wix_image"],
- "commands": init_cmds,
- },
- ],
- )
-
- # TODO: Run windows backend tests
-
- if (
- ver_mode == "main" and (edition not in ("enterprise", "enterprise2"))
- ) or ver_mode in (
+ if ver_mode in (
"release",
"release-branch",
):
@@ -1561,13 +1313,11 @@ def get_windows_steps(edition, ver_mode):
"rm gcpkey.json",
"cp C:\\App\\nssm-2.24.zip .",
]
- if (
- ver_mode == "main" and (edition not in ("enterprise", "enterprise2"))
- ) or ver_mode in ("release",):
+
+ if ver_mode in ("release",):
installer_commands.extend(
[
- ".\\grabpl.exe windows-installer --edition {} {}".format(
- edition,
+ ".\\grabpl.exe windows-installer --edition oss {}".format(
ver_part,
),
'$$fname = ((Get-Childitem grafana*.msi -name) -split "`n")[0]',
@@ -1576,10 +1326,9 @@ def get_windows_steps(edition, ver_mode):
if ver_mode == "main":
installer_commands.extend(
[
- "gsutil cp $$fname gs://{}/{}/{}/".format(bucket, edition, dir),
- 'gsutil cp "$$fname.sha256" gs://{}/{}/{}/'.format(
+ "gsutil cp $$fname gs://{}/oss/{}/".format(bucket, dir),
+ 'gsutil cp "$$fname.sha256" gs://{}/oss/{}/'.format(
bucket,
- edition,
dir,
),
],
@@ -1587,16 +1336,14 @@ def get_windows_steps(edition, ver_mode):
else:
installer_commands.extend(
[
- "gsutil cp $$fname gs://{}/{}/{}/{}/".format(
+ "gsutil cp $$fname gs://{}/{}/oss/{}/".format(
bucket,
ver_part,
- edition,
dir,
),
- 'gsutil cp "$$fname.sha256" gs://{}/{}/{}/{}/'.format(
+ 'gsutil cp "$$fname.sha256" gs://{}/{}/oss/{}/'.format(
bucket,
ver_part,
- edition,
dir,
),
],
@@ -1685,12 +1432,9 @@ def end_to_end_tests_deps():
"end-to-end-tests-various-suite",
]
-def compile_build_cmd(edition = "oss"):
+def compile_build_cmd():
dependencies = []
- if edition in ("enterprise", "enterprise2"):
- dependencies = [
- "init-enterprise",
- ]
+
return {
"name": "compile-build-cmd",
"image": images["go_image"],
diff --git a/scripts/drone/utils/utils.star b/scripts/drone/utils/utils.star
index 81c1212e3f9..0d0e7966ec2 100644
--- a/scripts/drone/utils/utils.star
+++ b/scripts/drone/utils/utils.star
@@ -13,7 +13,6 @@ drone_change_template = "`.drone.yml` and `starlark` files have been changed on
def pipeline(
name,
- edition,
trigger,
steps,
services = [],
@@ -30,7 +29,6 @@ def pipeline(
Args:
name: controls the pipeline name.
- edition: used to differentiate the pipeline for enterprise builds.
trigger: a Drone trigger for the pipeline.
steps: the Drone steps for the pipeline.
services: auxiliary services used during the pipeline.
@@ -98,12 +96,6 @@ def pipeline(
pipeline["volumes"].extend(volumes)
pipeline.update(platform_conf)
- if edition in ("enterprise", "enterprise2"):
- # We have a custom clone step for enterprise
- pipeline["clone"] = {
- "disable": True,
- }
-
return pipeline
def notify_pipeline(
diff --git a/scripts/drone/vault.star b/scripts/drone/vault.star
index 35e2babb6fa..0cd39a04127 100644
--- a/scripts/drone/vault.star
+++ b/scripts/drone/vault.star
@@ -90,21 +90,6 @@ def secrets():
"infra/data/ci/packages-publish/bucket-credentials",
"Secret",
),
- vault_secret(
- "aws_region",
- "secret/data/common/aws-marketplace",
- "aws_region",
- ),
- vault_secret(
- "aws_access_key_id",
- "secret/data/common/aws-marketplace",
- "aws_access_key_id",
- ),
- vault_secret(
- "aws_secret_access_key",
- "secret/data/common/aws-marketplace",
- "aws_secret_access_key",
- ),
vault_secret(
"static_asset_editions",
"infra/data/ci/grafana-release-eng/artifact-publishing",
diff --git a/scripts/drone/version.star b/scripts/drone/version.star
index f56a8274000..140cd4d35d8 100644
--- a/scripts/drone/version.star
+++ b/scripts/drone/version.star
@@ -4,8 +4,6 @@ This module returns the pipeline used for version branches.
load(
"scripts/drone/events/release.star",
- "enterprise2_pipelines",
- "enterprise_pipelines",
"oss_pipelines",
)
@@ -14,7 +12,5 @@ trigger = {"ref": ["refs/heads/v[0-9]*"]}
def version_branch_pipelines():
return (
- oss_pipelines(ver_mode = ver_mode, trigger = trigger) +
- enterprise_pipelines(ver_mode = ver_mode, trigger = trigger) +
- enterprise2_pipelines(ver_mode = ver_mode, trigger = trigger)
+ oss_pipelines(ver_mode = ver_mode, trigger = trigger)
)
diff --git a/yarn.lock b/yarn.lock
index 6103dc00782..d6d4549e9d9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2219,7 +2219,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:7.22.3, @babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
+"@babel/runtime@npm:7.22.3, @babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
version: 7.22.3
resolution: "@babel/runtime@npm:7.22.3"
dependencies:
@@ -2624,7 +2624,7 @@ __metadata:
languageName: node
linkType: hard
-"@daybrush/utils@npm:1.13.0":
+"@daybrush/utils@npm:1.13.0, @daybrush/utils@npm:^1.13.0":
version: 1.13.0
resolution: "@daybrush/utils@npm:1.13.0"
checksum: 0ec0670016efc66b367fbef6581718eb5fc383b612d1290637845b9b9572e3cc19717ad63a35689f12d5a95a3dbdc9552fd1e57169077745ef0fee1a0b4e0fcd
@@ -2696,22 +2696,22 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/babel-plugin@npm:^11.10.6":
- version: 11.10.6
- resolution: "@emotion/babel-plugin@npm:11.10.6"
+"@emotion/babel-plugin@npm:^11.11.0":
+ version: 11.11.0
+ resolution: "@emotion/babel-plugin@npm:11.11.0"
dependencies:
"@babel/helper-module-imports": ^7.16.7
"@babel/runtime": ^7.18.3
- "@emotion/hash": ^0.9.0
- "@emotion/memoize": ^0.8.0
- "@emotion/serialize": ^1.1.1
+ "@emotion/hash": ^0.9.1
+ "@emotion/memoize": ^0.8.1
+ "@emotion/serialize": ^1.1.2
babel-plugin-macros: ^3.1.0
convert-source-map: ^1.5.0
escape-string-regexp: ^4.0.0
find-root: ^1.1.0
source-map: ^0.5.7
- stylis: 4.1.3
- checksum: 3eed138932e8edf2598352e69ad949b9db3051a4d6fcff190dacbac9aa838d7ef708b9f3e6c48660625d9311dae82d73477ae4e7a31139feef5eb001a5528421
+ stylis: 4.2.0
+ checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9
languageName: node
linkType: hard
@@ -2749,16 +2749,16 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/cache@npm:^11.10.5":
- version: 11.10.5
- resolution: "@emotion/cache@npm:11.10.5"
+"@emotion/cache@npm:^11.11.0":
+ version: 11.11.0
+ resolution: "@emotion/cache@npm:11.11.0"
dependencies:
- "@emotion/memoize": ^0.8.0
- "@emotion/sheet": ^1.2.1
- "@emotion/utils": ^1.2.0
- "@emotion/weak-memoize": ^0.3.0
- stylis: 4.1.3
- checksum: 1dd2d9af2d3ecbd3d4469ecdf91a335eef6034c851b57a474471b2d2280613eb35bbed98c0368cc4625f188619fbdaf04cf07e8107aaffce94b2178444c0fe7b
+ "@emotion/memoize": ^0.8.1
+ "@emotion/sheet": ^1.2.2
+ "@emotion/utils": ^1.2.1
+ "@emotion/weak-memoize": ^0.3.1
+ stylis: 4.2.0
+ checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08
languageName: node
linkType: hard
@@ -2788,25 +2788,25 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/css@npm:11.10.6":
- version: 11.10.6
- resolution: "@emotion/css@npm:11.10.6"
+"@emotion/css@npm:11.11.2":
+ version: 11.11.2
+ resolution: "@emotion/css@npm:11.11.2"
dependencies:
- "@emotion/babel-plugin": ^11.10.6
- "@emotion/cache": ^11.10.5
- "@emotion/serialize": ^1.1.1
- "@emotion/sheet": ^1.2.1
- "@emotion/utils": ^1.2.0
- checksum: 010ca5e1d0434923c431eab2c6f8226ab4415310a053ece6e4133011c7dc621de099469e57314b013e682c3b6ffd09a91cc6473538c185095d2afca79d81fb95
+ "@emotion/babel-plugin": ^11.11.0
+ "@emotion/cache": ^11.11.0
+ "@emotion/serialize": ^1.1.2
+ "@emotion/sheet": ^1.2.2
+ "@emotion/utils": ^1.2.1
+ checksum: 1edea109dfc31005243334bc351ba127220ea5c4986225e0f1b8f7aa71fb2f83fb8f51d8f5b8afb8432d4c6397c23f5061038449f2876888eecc6eac1dd2f0da
languageName: node
linkType: hard
-"@emotion/eslint-plugin@npm:11.10.0":
- version: 11.10.0
- resolution: "@emotion/eslint-plugin@npm:11.10.0"
+"@emotion/eslint-plugin@npm:11.11.0":
+ version: 11.11.0
+ resolution: "@emotion/eslint-plugin@npm:11.11.0"
peerDependencies:
eslint: 6 || 7 || 8
- checksum: b848600bbd047a5100e541369ab56ee84f7a4fae59f811b3835ba686c5b35d0c564953f946c9912d98df0e70fa5533b574f629aa10791e02bcd268263ff7adf1
+ checksum: 2d555b6790700e0d0c2862d4aa2fd697ea5851faa7e406ab459028e66daad2ee0dc3dec29362c2edc2656a63f826ac15629112d3e9aca64323fa40f9e5674bd4
languageName: node
linkType: hard
@@ -2817,10 +2817,10 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/hash@npm:^0.9.0":
- version: 0.9.0
- resolution: "@emotion/hash@npm:0.9.0"
- checksum: b63428f7c8186607acdca5d003700cecf0ded519d0b5c5cc3b3154eafcad6ff433f8361bd2bac8882715b557e6f06945694aeb6ba8b25c6095d7a88570e2e0bb
+"@emotion/hash@npm:^0.9.1":
+ version: 0.9.1
+ resolution: "@emotion/hash@npm:0.9.1"
+ checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876
languageName: node
linkType: hard
@@ -2838,31 +2838,31 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/memoize@npm:^0.8.0":
- version: 0.8.0
- resolution: "@emotion/memoize@npm:0.8.0"
- checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928
+"@emotion/memoize@npm:^0.8.1":
+ version: 0.8.1
+ resolution: "@emotion/memoize@npm:0.8.1"
+ checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0
languageName: node
linkType: hard
-"@emotion/react@npm:11.10.6":
- version: 11.10.6
- resolution: "@emotion/react@npm:11.10.6"
+"@emotion/react@npm:11.11.1":
+ version: 11.11.1
+ resolution: "@emotion/react@npm:11.11.1"
dependencies:
"@babel/runtime": ^7.18.3
- "@emotion/babel-plugin": ^11.10.6
- "@emotion/cache": ^11.10.5
- "@emotion/serialize": ^1.1.1
- "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0
- "@emotion/utils": ^1.2.0
- "@emotion/weak-memoize": ^0.3.0
+ "@emotion/babel-plugin": ^11.11.0
+ "@emotion/cache": ^11.11.0
+ "@emotion/serialize": ^1.1.2
+ "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1
+ "@emotion/utils": ^1.2.1
+ "@emotion/weak-memoize": ^0.3.1
hoist-non-react-statics: ^3.3.1
peerDependencies:
react: ">=16.8.0"
peerDependenciesMeta:
"@types/react":
optional: true
- checksum: 4762042e39126ffaffe76052dc65c9bb0ba6b8893013687ba3cc13ed4dd834c31597f1230684c3c078e90aecc13ab6cd0e3cde0dec8b7761affd2571f4d80019
+ checksum: aec3c36650f5f0d3d4445ff44d73dd88712b1609645b6af3e6d08049cfbc51f1785fe13dea1a1d4ab1b0800d68f2339ab11e459687180362b1ef98863155aae5
languageName: node
linkType: hard
@@ -2928,16 +2928,16 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/serialize@npm:^1.1.1":
- version: 1.1.1
- resolution: "@emotion/serialize@npm:1.1.1"
+"@emotion/serialize@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "@emotion/serialize@npm:1.1.2"
dependencies:
- "@emotion/hash": ^0.9.0
- "@emotion/memoize": ^0.8.0
- "@emotion/unitless": ^0.8.0
- "@emotion/utils": ^1.2.0
+ "@emotion/hash": ^0.9.1
+ "@emotion/memoize": ^0.8.1
+ "@emotion/unitless": ^0.8.1
+ "@emotion/utils": ^1.2.1
csstype: ^3.0.2
- checksum: 24cfd5b16e6f2335c032ca33804a876e0442aaf8f9c94d269d23735ebd194fb1ed142542dd92191a3e6ef8bad5bd560dfc5aaf363a1b70954726dbd4dd93085c
+ checksum: 413c352e657f1b5e27ea6437b3ef7dcc3860669b7ae17fd5c18bfbd44e033af1acc56b64d252284a813ca4f3b3e1b0841c42d3fb08e02d2df56fd3cd63d72986
languageName: node
linkType: hard
@@ -2962,10 +2962,10 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/sheet@npm:^1.2.1":
- version: 1.2.1
- resolution: "@emotion/sheet@npm:1.2.1"
- checksum: ce78763588ea522438156344d9f592203e2da582d8d67b32e1b0b98eaba26994c6c270f8c7ad46442fc9c0a9f048685d819cd73ca87e544520fd06f0e24a1562
+"@emotion/sheet@npm:^1.2.2":
+ version: 1.2.2
+ resolution: "@emotion/sheet@npm:1.2.2"
+ checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe
languageName: node
linkType: hard
@@ -2983,10 +2983,10 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/unitless@npm:^0.8.0":
- version: 0.8.0
- resolution: "@emotion/unitless@npm:0.8.0"
- checksum: 176141117ed23c0eb6e53a054a69c63e17ae532ec4210907a20b2208f91771821835f1c63dd2ec63e30e22fcc984026d7f933773ee6526dd038e0850919fae7a
+"@emotion/unitless@npm:^0.8.1":
+ version: 0.8.1
+ resolution: "@emotion/unitless@npm:0.8.1"
+ checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88
languageName: node
linkType: hard
@@ -2999,6 +2999,15 @@ __metadata:
languageName: node
linkType: hard
+"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1"
+ peerDependencies:
+ react: ">=16.8.0"
+ checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786
+ languageName: node
+ linkType: hard
+
"@emotion/utils@npm:0.11.3":
version: 0.11.3
resolution: "@emotion/utils@npm:0.11.3"
@@ -3020,10 +3029,10 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/utils@npm:^1.2.0":
- version: 1.2.0
- resolution: "@emotion/utils@npm:1.2.0"
- checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd
+"@emotion/utils@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@emotion/utils@npm:1.2.1"
+ checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73
languageName: node
linkType: hard
@@ -3034,21 +3043,10 @@ __metadata:
languageName: node
linkType: hard
-"@emotion/weak-memoize@npm:^0.3.0":
- version: 0.3.0
- resolution: "@emotion/weak-memoize@npm:0.3.0"
- checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0
- languageName: node
- linkType: hard
-
-"@es-joy/jsdoccomment@npm:~0.36.0":
- version: 0.36.0
- resolution: "@es-joy/jsdoccomment@npm:0.36.0"
- dependencies:
- comment-parser: 1.3.1
- esquery: ^1.4.0
- jsdoc-type-pratt-parser: ~3.1.0
- checksum: c2fa95bc01f6b2a0caa521adaa37562b10b12095b5308948f3e122880d2ae9684c09e5b0e0809ac3e31e17580886d2d3b41fbf4ff4831649efce8cba8e30cf5c
+"@emotion/weak-memoize@npm:^0.3.1":
+ version: 0.3.1
+ resolution: "@emotion/weak-memoize@npm:0.3.1"
+ checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594
languageName: node
linkType: hard
@@ -3543,24 +3541,7 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/eslintrc@npm:^1.3.3":
- version: 1.3.3
- resolution: "@eslint/eslintrc@npm:1.3.3"
- dependencies:
- ajv: ^6.12.4
- debug: ^4.3.2
- espree: ^9.4.0
- globals: ^13.15.0
- ignore: ^5.2.0
- import-fresh: ^3.2.1
- js-yaml: ^4.1.0
- minimatch: ^3.1.2
- strip-json-comments: ^3.1.1
- checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694
- languageName: node
- linkType: hard
-
-"@eslint/eslintrc@npm:^2.1.0":
+"@eslint/eslintrc@npm:^2.0.3, @eslint/eslintrc@npm:^2.1.0":
version: 2.1.0
resolution: "@eslint/eslintrc@npm:2.1.0"
dependencies:
@@ -3577,6 +3558,13 @@ __metadata:
languageName: node
linkType: hard
+"@eslint/js@npm:8.42.0":
+ version: 8.42.0
+ resolution: "@eslint/js@npm:8.42.0"
+ checksum: 750558843ac458f7da666122083ee05306fc087ecc1e5b21e7e14e23885775af6c55bcc92283dff1862b7b0d8863ec676c0f18c7faf1219c722fe91a8ece56b6
+ languageName: node
+ linkType: hard
+
"@eslint/js@npm:8.44.0":
version: 8.44.0
resolution: "@eslint/js@npm:8.44.0"
@@ -3735,8 +3723,8 @@ __metadata:
"@braintree/sanitize-url": 6.0.2
"@grafana/schema": 10.1.0-pre
"@grafana/tsconfig": ^1.2.0-rc1
- "@rollup/plugin-commonjs": 23.0.2
- "@rollup/plugin-json": 5.0.1
+ "@rollup/plugin-commonjs": 25.0.2
+ "@rollup/plugin-json": 6.0.0
"@rollup/plugin-node-resolve": 15.1.0
"@testing-library/dom": 9.3.0
"@testing-library/jest-dom": 5.16.5
@@ -3751,8 +3739,8 @@ __metadata:
"@types/marked": 4.0.8
"@types/node": 18.16.16
"@types/papaparse": 5.3.7
- "@types/react": 18.0.28
- "@types/react-dom": 18.0.11
+ "@types/react": 18.2.15
+ "@types/react-dom": 18.2.7
"@types/sinon": 10.0.13
"@types/string-hash": 1.1.1
"@types/testing-library__jest-dom": 5.14.5
@@ -3799,7 +3787,7 @@ __metadata:
resolution: "@grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors"
dependencies:
"@grafana/tsconfig": ^1.2.0-rc1
- "@rollup/plugin-commonjs": 23.0.2
+ "@rollup/plugin-commonjs": 25.0.2
"@rollup/plugin-node-resolve": 15.1.0
"@types/node": 18.16.16
esbuild: 0.18.6
@@ -3868,19 +3856,19 @@ __metadata:
languageName: unknown
linkType: soft
-"@grafana/eslint-config@npm:5.1.0":
- version: 5.1.0
- resolution: "@grafana/eslint-config@npm:5.1.0"
+"@grafana/eslint-config@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@grafana/eslint-config@npm:6.0.0"
dependencies:
- "@typescript-eslint/eslint-plugin": 5.42.0
- "@typescript-eslint/parser": 5.42.0
- eslint: 8.26.0
- eslint-config-prettier: 8.5.0
- eslint-plugin-jsdoc: 39.6.2
- eslint-plugin-react: 7.31.10
+ "@typescript-eslint/eslint-plugin": 5.59.9
+ "@typescript-eslint/parser": 5.59.9
+ eslint: 8.42.0
+ eslint-config-prettier: 8.8.0
+ eslint-plugin-jsdoc: 46.2.6
+ eslint-plugin-react: 7.32.2
eslint-plugin-react-hooks: 4.6.0
typescript: 4.8.4
- checksum: 525b3dfd956a895219979850b65a760ab19c9872e1c2432cc4f6a831fd3da1dd4e97bb1e046de2012dccd018f71ad88df57e2e1af357ad540d1f0107116d3550
+ checksum: a22d21282ba88a3b27d7a68ca6cbd01fe18c39aa3227b23079a0303d3c4265937c8371f8a0ea87acb843c9cec9fc82c649e2a8f47698613af8259edc85fd027c
languageName: node
linkType: hard
@@ -4015,7 +4003,7 @@ __metadata:
"@grafana/faro-web-sdk": 1.1.0
"@grafana/tsconfig": ^1.2.0-rc1
"@grafana/ui": 10.1.0-pre
- "@rollup/plugin-commonjs": 23.0.2
+ "@rollup/plugin-commonjs": 25.0.2
"@rollup/plugin-node-resolve": 15.1.0
"@testing-library/dom": 9.3.0
"@testing-library/react": 14.0.0
@@ -4024,8 +4012,8 @@ __metadata:
"@types/history": 4.7.11
"@types/jest": 29.2.3
"@types/lodash": 4.14.191
- "@types/react": 18.0.28
- "@types/react-dom": 18.0.11
+ "@types/react": 18.2.15
+ "@types/react-dom": 18.2.7
"@types/systemjs": ^0.20.6
esbuild: 0.18.6
history: 4.10.1
@@ -4068,8 +4056,8 @@ __metadata:
resolution: "@grafana/schema@workspace:packages/grafana-schema"
dependencies:
"@grafana/tsconfig": ^1.2.0-rc1
- "@rollup/plugin-commonjs": 23.0.2
- "@rollup/plugin-json": 5.0.1
+ "@rollup/plugin-commonjs": 25.0.2
+ "@rollup/plugin-json": 6.0.0
"@rollup/plugin-node-resolve": 15.1.0
esbuild: 0.18.6
glob: ^10.2.7
@@ -4118,8 +4106,8 @@ __metadata:
resolution: "@grafana/ui@workspace:packages/grafana-ui"
dependencies:
"@babel/core": 7.22.1
- "@emotion/css": 11.10.6
- "@emotion/react": 11.10.6
+ "@emotion/css": 11.11.2
+ "@emotion/react": 11.11.1
"@grafana/data": 10.1.0-pre
"@grafana/e2e-selectors": 10.1.0-pre
"@grafana/faro-web-sdk": 1.1.0
@@ -4166,11 +4154,11 @@ __metadata:
"@types/mock-raf": 1.0.3
"@types/node": 18.16.16
"@types/prismjs": 1.26.0
- "@types/react": 18.0.28
+ "@types/react": 18.2.15
"@types/react-beautiful-dnd": 13.1.3
"@types/react-calendar": 3.9.0
"@types/react-color": 3.0.6
- "@types/react-dom": 18.0.11
+ "@types/react-dom": 18.2.7
"@types/react-highlight-words": 0.16.4
"@types/react-router-dom": 5.3.3
"@types/react-table": 7.7.14
@@ -4196,6 +4184,7 @@ __metadata:
expose-loader: 4.1.0
hoist-non-react-statics: 3.3.2
i18next: ^22.0.0
+ i18next-browser-languagedetector: ^7.0.2
immutable: 4.3.0
is-hotkey: 0.2.0
jquery: 3.7.0
@@ -4211,7 +4200,7 @@ __metadata:
rc-drawer: 6.3.0
rc-slider: 10.2.1
rc-time-picker: ^3.7.3
- rc-tooltip: 5.3.1
+ rc-tooltip: 6.0.1
react: 18.2.0
react-beautiful-dnd: 13.1.1
react-calendar: 4.0.0
@@ -4300,17 +4289,6 @@ __metadata:
languageName: node
linkType: hard
-"@humanwhocodes/config-array@npm:^0.11.6":
- version: 0.11.7
- resolution: "@humanwhocodes/config-array@npm:0.11.7"
- dependencies:
- "@humanwhocodes/object-schema": ^1.2.1
- debug: ^4.1.1
- minimatch: ^3.0.5
- checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac
- languageName: node
- linkType: hard
-
"@humanwhocodes/module-importer@npm:^1.0.1":
version: 1.0.1
resolution: "@humanwhocodes/module-importer@npm:1.0.1"
@@ -4577,6 +4555,15 @@ __metadata:
languageName: node
linkType: hard
+"@jest/schemas@npm:^29.6.0":
+ version: 29.6.0
+ resolution: "@jest/schemas@npm:29.6.0"
+ dependencies:
+ "@sinclair/typebox": ^0.27.8
+ checksum: c00511c69cf89138a7d974404d3a5060af375b5a52b9c87215d91873129b382ca11c1ff25bd6d605951404bb381ddce5f8091004a61e76457da35db1f5c51365
+ languageName: node
+ linkType: hard
+
"@jest/source-map@npm:^29.2.0":
version: 29.2.0
resolution: "@jest/source-map@npm:29.2.0"
@@ -4661,20 +4648,6 @@ __metadata:
languageName: node
linkType: hard
-"@jest/types@npm:^29.2.1":
- version: 29.2.1
- resolution: "@jest/types@npm:29.2.1"
- dependencies:
- "@jest/schemas": ^29.0.0
- "@types/istanbul-lib-coverage": ^2.0.0
- "@types/istanbul-reports": ^3.0.0
- "@types/node": "*"
- "@types/yargs": ^17.0.8
- chalk: ^4.0.0
- checksum: a83f20727425179aa05974aa7553c307d207fbb6b7ae5ab1e37fbb6ba9b6655f26655301fc804f2545d33f4c4a6b59d41eed1737c005d2b83fce9e14841b4150
- languageName: node
- linkType: hard
-
"@jest/types@npm:^29.3.1":
version: 29.3.1
resolution: "@jest/types@npm:29.3.1"
@@ -4703,6 +4676,20 @@ __metadata:
languageName: node
linkType: hard
+"@jest/types@npm:^29.6.1":
+ version: 29.6.1
+ resolution: "@jest/types@npm:29.6.1"
+ dependencies:
+ "@jest/schemas": ^29.6.0
+ "@types/istanbul-lib-coverage": ^2.0.0
+ "@types/istanbul-reports": ^3.0.0
+ "@types/node": "*"
+ "@types/yargs": ^17.0.8
+ chalk: ^4.0.0
+ checksum: 89fc1ccf71a84fe0da643e0675b1cfe6a6f19ea72e935b2ab1dbdb56ec547e94433fb59b3536d3832a6e156c077865b7176fe9dae707dab9c3d2f9405ba6233c
+ languageName: node
+ linkType: hard
+
"@jridgewell/gen-mapping@npm:^0.1.0":
version: 0.1.1
resolution: "@jridgewell/gen-mapping@npm:0.1.1"
@@ -4787,7 +4774,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.4.15":
+"@jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.15":
version: 1.4.15
resolution: "@jridgewell/sourcemap-codec@npm:1.4.15"
checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8
@@ -4824,6 +4811,16 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/trace-mapping@npm:^0.3.18":
+ version: 0.3.18
+ resolution: "@jridgewell/trace-mapping@npm:0.3.18"
+ dependencies:
+ "@jridgewell/resolve-uri": 3.1.0
+ "@jridgewell/sourcemap-codec": 1.4.14
+ checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02
+ languageName: node
+ linkType: hard
+
"@jridgewell/trace-mapping@npm:^0.3.9":
version: 0.3.13
resolution: "@jridgewell/trace-mapping@npm:0.3.13"
@@ -6779,6 +6776,24 @@ __metadata:
languageName: node
linkType: hard
+"@rc-component/trigger@npm:^1.0.4":
+ version: 1.14.1
+ resolution: "@rc-component/trigger@npm:1.14.1"
+ dependencies:
+ "@babel/runtime": ^7.18.3
+ "@rc-component/portal": ^1.1.0
+ classnames: ^2.3.2
+ rc-align: ^4.0.0
+ rc-motion: ^2.0.0
+ rc-resize-observer: ^1.3.1
+ rc-util: ^5.33.0
+ peerDependencies:
+ react: ">=16.9.0"
+ react-dom: ">=16.9.0"
+ checksum: 51355dee2ff651e8a3333b01dbfcfcda64c149ee1396830d8d3c16be2bb2a518fe8625f94528f071b54231be6c339d90391cf22310d1b4341d0c778c42bfc678
+ languageName: node
+ linkType: hard
+
"@rc-component/trigger@npm:^1.5.0":
version: 1.9.0
resolution: "@rc-component/trigger@npm:1.9.0"
@@ -7220,28 +7235,28 @@ __metadata:
languageName: node
linkType: hard
-"@rollup/plugin-commonjs@npm:23.0.2":
- version: 23.0.2
- resolution: "@rollup/plugin-commonjs@npm:23.0.2"
+"@rollup/plugin-commonjs@npm:25.0.2":
+ version: 25.0.2
+ resolution: "@rollup/plugin-commonjs@npm:25.0.2"
dependencies:
"@rollup/pluginutils": ^5.0.1
commondir: ^1.0.1
estree-walker: ^2.0.2
glob: ^8.0.3
is-reference: 1.2.1
- magic-string: ^0.26.4
+ magic-string: ^0.27.0
peerDependencies:
rollup: ^2.68.0||^3.0.0
peerDependenciesMeta:
rollup:
optional: true
- checksum: bd203a6e6fbcdc523f5d47a8a9e6b719f853270fbfa608c636124c213ec4b2a15026121e1e4faa820f52546425050f4c833bbf6bc58959909025cbc99c6d5df3
+ checksum: d8c4e22d264c5b9286f697653c2f9288149c0fe0169d49b83b5dc8b542f96cc0b9113da3f30d241f2f277513fbf3f8c207d95def5559eb3800190f1872add794
languageName: node
linkType: hard
-"@rollup/plugin-json@npm:5.0.1":
- version: 5.0.1
- resolution: "@rollup/plugin-json@npm:5.0.1"
+"@rollup/plugin-json@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@rollup/plugin-json@npm:6.0.0"
dependencies:
"@rollup/pluginutils": ^5.0.1
peerDependencies:
@@ -7249,7 +7264,7 @@ __metadata:
peerDependenciesMeta:
rollup:
optional: true
- checksum: 1b2f45f49cd3f3dcf2bd1b5987f330cc23bb1abfe049d8ca3d441eacbb8f9a052692b3f062023e175359de7db6dd55ef804393beab15d90aeb3fbf540494a036
+ checksum: 77cfc941edaf77a5307977704ffaba706d83bea66f265b2b68f14be2a0af6d08b0fb1b04fdd773146c84cc70938ff64b00ae946808fd6ac057058af824d78128
languageName: node
linkType: hard
@@ -7392,6 +7407,13 @@ __metadata:
languageName: node
linkType: hard
+"@sinclair/typebox@npm:^0.27.8":
+ version: 0.27.8
+ resolution: "@sinclair/typebox@npm:0.27.8"
+ checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1
+ languageName: node
+ linkType: hard
+
"@sinonjs/commons@npm:^1.7.0":
version: 1.8.3
resolution: "@sinonjs/commons@npm:1.8.3"
@@ -9439,6 +9461,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/d3-array@npm:3.0.3":
+ version: 3.0.3
+ resolution: "@types/d3-array@npm:3.0.3"
+ checksum: 972c8ff009c97c9093883d7597aac7185d4e8c2832d7f25420d8312aa1ebd60182f85fe768615cbc9d73d8819add52eea7ce640e57f5b1668ef389f1dc9569bc
+ languageName: node
+ linkType: hard
+
"@types/d3-axis@npm:*":
version: 3.0.1
resolution: "@types/d3-axis@npm:3.0.1"
@@ -9471,6 +9500,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/d3-color@npm:3.1.0":
+ version: 3.1.0
+ resolution: "@types/d3-color@npm:3.1.0"
+ checksum: b1856f17d6366559a68eaba0164f30727e9dc5eaf1b3a6c8844354da228860240423d19fa4de65bff9da26b4ead8843eab14b1566962665412e8fd82c3810554
+ languageName: node
+ linkType: hard
+
"@types/d3-contour@npm:*":
version: 3.0.1
resolution: "@types/d3-contour@npm:3.0.1"
@@ -9488,6 +9524,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/d3-delaunay@npm:6.0.1":
+ version: 6.0.1
+ resolution: "@types/d3-delaunay@npm:6.0.1"
+ checksum: c46fd6f399ed604e9f40841851c432c936c4408af9e61b235a7f6030e93faa9b5c4f6c33a62be221e1d33f48a9162e9c4bbfa173746c0e4787483310da9a03b2
+ languageName: node
+ linkType: hard
+
"@types/d3-dispatch@npm:*":
version: 3.0.1
resolution: "@types/d3-dispatch@npm:3.0.1"
@@ -9541,7 +9584,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/d3-format@npm:*":
+"@types/d3-format@npm:*, @types/d3-format@npm:3.0.1":
version: 3.0.1
resolution: "@types/d3-format@npm:3.0.1"
checksum: 6819fae7e7c3fce1e44cd56e9b6d8ea5508f708cb7a42793edf82ff914b120bf6cddc35208b1b33ec82615ab82b843c284709f9cea5c3fe1ea5f012106b3d32c
@@ -9564,7 +9607,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:^3.0.0, @types/d3-interpolate@npm:^3.0.1":
+"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:3.0.1, @types/d3-interpolate@npm:^3.0.0":
version: 3.0.1
resolution: "@types/d3-interpolate@npm:3.0.1"
dependencies:
@@ -9615,7 +9658,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/d3-scale@npm:*":
+"@types/d3-scale@npm:*, @types/d3-scale@npm:4.0.2":
version: 4.0.2
resolution: "@types/d3-scale@npm:4.0.2"
dependencies:
@@ -9624,15 +9667,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/d3-scale@npm:^4.0.2":
- version: 4.0.3
- resolution: "@types/d3-scale@npm:4.0.3"
- dependencies:
- "@types/d3-time": "*"
- checksum: 76684da8519ab5f2210e647f74f96ece9c6816dea4ad5d76131121703a5268cc65687a8bc9ebbf4a44039482247336d98811ecc3fbfeb7f0122fdce4bb295547
- languageName: node
- linkType: hard
-
"@types/d3-selection@npm:*":
version: 3.0.1
resolution: "@types/d3-selection@npm:3.0.1"
@@ -9665,17 +9699,17 @@ __metadata:
languageName: node
linkType: hard
-"@types/d3-time@npm:*":
- version: 3.0.0
- resolution: "@types/d3-time@npm:3.0.0"
- checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e
+"@types/d3-time-format@npm:2.1.0":
+ version: 2.1.0
+ resolution: "@types/d3-time-format@npm:2.1.0"
+ checksum: 8493cc4676d7656becf0c1195abb1213827e4cf42a85849c5e0159fa89b1b80c5ff6ad8af54e54d0e8c76815b866adf68a948da9b966405bd12c2070f57a7efe
languageName: node
linkType: hard
-"@types/d3-time@npm:^2.0.0":
- version: 2.1.1
- resolution: "@types/d3-time@npm:2.1.1"
- checksum: 115048d0cd312a3172ef7c03615dfbdbd8b92a93fd7b6d9ca93c49c704fcdb9575f4c57955eb54eb757b9834acaaf47fc52eae103d06246c59ae120de4559cbc
+"@types/d3-time@npm:*, @types/d3-time@npm:3.0.0":
+ version: 3.0.0
+ resolution: "@types/d3-time@npm:3.0.0"
+ checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e
languageName: node
linkType: hard
@@ -10160,13 +10194,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/long@npm:^4.0.1":
- version: 4.0.2
- resolution: "@types/long@npm:4.0.2"
- checksum: d16cde7240d834cf44ba1eaec49e78ae3180e724cd667052b194a372f350d024cba8dd3f37b0864931683dab09ca935d52f0c4c1687178af5ada9fc85b0635f4
- languageName: node
- linkType: hard
-
"@types/marked@npm:4.0.8, @types/marked@npm:^4":
version: 4.0.8
resolution: "@types/marked@npm:4.0.8"
@@ -10412,21 +10439,12 @@ __metadata:
languageName: node
linkType: hard
-"@types/react-dom@npm:*":
- version: 17.0.10
- resolution: "@types/react-dom@npm:17.0.10"
+"@types/react-dom@npm:*, @types/react-dom@npm:18.2.7, @types/react-dom@npm:^18.0.0":
+ version: 18.2.7
+ resolution: "@types/react-dom@npm:18.2.7"
dependencies:
"@types/react": "*"
- checksum: cc7d8d5b77ee2f3b989c107abd8ec0f2460ba1b1ee6e6d637124e1939594b5619fa4166ef0ea7632a69b68358e0b71aa618de446ccc416dcc0017175549da601
- languageName: node
- linkType: hard
-
-"@types/react-dom@npm:18.0.11, @types/react-dom@npm:^18.0.0":
- version: 18.0.11
- resolution: "@types/react-dom@npm:18.0.11"
- dependencies:
- "@types/react": "*"
- checksum: 579691e4d5ec09688087568037c35edf8cfb1ab3e07f6c60029280733ee7b5c06d66df6fcc90786702c93ac8cb13bc7ff16c79ddfc75d082938fbaa36e1cdbf4
+ checksum: e02ea908289a7ad26053308248d2b87f6aeafd73d0e2de2a3d435947bcea0422599016ffd1c3e38ff36c42f5e1c87c7417f05b0a157e48649e4a02f21727d54f
languageName: node
linkType: hard
@@ -10566,7 +10584,18 @@ __metadata:
languageName: node
linkType: hard
-"@types/react@npm:*, @types/react@npm:18.0.28":
+"@types/react@npm:*, @types/react@npm:18.2.15, @types/react@npm:>=16":
+ version: 18.2.15
+ resolution: "@types/react@npm:18.2.15"
+ dependencies:
+ "@types/prop-types": "*"
+ "@types/scheduler": "*"
+ csstype: ^3.0.2
+ checksum: 36989f638201bfe2f4110b06c119180f6df9c0e13d7060481e82e7a745f81745a01ae543c478a25b61e0767cb52e82da2ad5b0dedacabf99339e523d06176705
+ languageName: node
+ linkType: hard
+
+"@types/react@npm:18.0.28":
version: 18.0.28
resolution: "@types/react@npm:18.0.28"
dependencies:
@@ -10577,17 +10606,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/react@npm:>=16":
- version: 18.0.33
- resolution: "@types/react@npm:18.0.33"
- dependencies:
- "@types/prop-types": "*"
- "@types/scheduler": "*"
- csstype: ^3.0.2
- checksum: 4fbd2b2b6a26378bdfde121081a6406ec2d39e4ba87ea5f6897ab7bb2198713165e6fd703ad4ed7ba1d4f23ef54a4c9f108f3105c7ed8e136411ee6bdebc5669
- languageName: node
- linkType: hard
-
"@types/reactcss@npm:*":
version: 1.2.6
resolution: "@types/reactcss@npm:1.2.6"
@@ -10917,6 +10935,30 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/eslint-plugin@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/eslint-plugin@npm:5.59.9"
+ dependencies:
+ "@eslint-community/regexpp": ^4.4.0
+ "@typescript-eslint/scope-manager": 5.59.9
+ "@typescript-eslint/type-utils": 5.59.9
+ "@typescript-eslint/utils": 5.59.9
+ debug: ^4.3.4
+ grapheme-splitter: ^1.0.4
+ ignore: ^5.2.0
+ natural-compare-lite: ^1.4.0
+ semver: ^7.3.7
+ tsutils: ^3.21.0
+ peerDependencies:
+ "@typescript-eslint/parser": ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: bd2428e307085d7fa6699913b6e61d65eb450bbcd26f884390cbf16722b80e1d80dc289c72774be1cdffd022744894204c3242f40ba3ffdfa05d3f210c4130bb
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/parser@npm:5.42.0":
version: 5.42.0
resolution: "@typescript-eslint/parser@npm:5.42.0"
@@ -10934,6 +10976,23 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/parser@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/parser@npm:5.59.9"
+ dependencies:
+ "@typescript-eslint/scope-manager": 5.59.9
+ "@typescript-eslint/types": 5.59.9
+ "@typescript-eslint/typescript-estree": 5.59.9
+ debug: ^4.3.4
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 69b07d0a5bc6e1d24d23916c057ea9f2f53a0e7fb6dabadff92987c299640edee2c013fb93269322c7124e87b5c515529001397eae33006dfb40e1dcdf1902d7
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/scope-manager@npm:5.11.0":
version: 5.11.0
resolution: "@typescript-eslint/scope-manager@npm:5.11.0"
@@ -10964,6 +11023,16 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/scope-manager@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/scope-manager@npm:5.59.9"
+ dependencies:
+ "@typescript-eslint/types": 5.59.9
+ "@typescript-eslint/visitor-keys": 5.59.9
+ checksum: 362c22662d844440a7e14223d8cc0722f77ff21ad8f78deb0ee3b3f21de01b8846bf25fbbf527544677e83d8ff48008b3f7d40b39ddec55994ea4a1863e9ec0a
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/type-utils@npm:5.42.0":
version: 5.42.0
resolution: "@typescript-eslint/type-utils@npm:5.42.0"
@@ -10981,6 +11050,23 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/type-utils@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/type-utils@npm:5.59.9"
+ dependencies:
+ "@typescript-eslint/typescript-estree": 5.59.9
+ "@typescript-eslint/utils": 5.59.9
+ debug: ^4.3.4
+ tsutils: ^3.21.0
+ peerDependencies:
+ eslint: "*"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 6bc2619c5024c152b181eff1f44c9b5e7d0fc75ce9403f03b39d59fc1e13191b2fbaf6730f26a1caae22922ac47489f39c2cebccdd713588f6963169ed2a7958
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/types@npm:5.11.0":
version: 5.11.0
resolution: "@typescript-eslint/types@npm:5.11.0"
@@ -11002,6 +11088,13 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/types@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/types@npm:5.59.9"
+ checksum: 283f8fee1ee590eeccc2e0fcd3526c856c4b1e2841af2cdcd09eeac842a42cfb32f6bc8b40385380f3dbc3ee29da30f1819115eedf9e16f69ff5a160aeddd8fa
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/typescript-estree@npm:5.11.0":
version: 5.11.0
resolution: "@typescript-eslint/typescript-estree@npm:5.11.0"
@@ -11056,6 +11149,24 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/typescript-estree@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/typescript-estree@npm:5.59.9"
+ dependencies:
+ "@typescript-eslint/types": 5.59.9
+ "@typescript-eslint/visitor-keys": 5.59.9
+ debug: ^4.3.4
+ globby: ^11.1.0
+ is-glob: ^4.0.3
+ semver: ^7.3.7
+ tsutils: ^3.21.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: c0c9b81f20a2a4337f07bc3ccdc9c1dabd765f59096255ed9a149e91e5c9517b25c2b6655f8f073807cfc13500c7451fbd9bb62e5e572c07cc07945ab042db89
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/utils@npm:5.42.0":
version: 5.42.0
resolution: "@typescript-eslint/utils@npm:5.42.0"
@@ -11074,6 +11185,24 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/utils@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/utils@npm:5.59.9"
+ dependencies:
+ "@eslint-community/eslint-utils": ^4.2.0
+ "@types/json-schema": ^7.0.9
+ "@types/semver": ^7.3.12
+ "@typescript-eslint/scope-manager": 5.59.9
+ "@typescript-eslint/types": 5.59.9
+ "@typescript-eslint/typescript-estree": 5.59.9
+ eslint-scope: ^5.1.1
+ semver: ^7.3.7
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: 22ec5962886de7dcf65f99c37aad9fb189a3bef6b2b07c81887fb82a0e8bf137246da58e64fb02141352285708440be13acd7f6db1ca19e96f86724813ac4646
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/utils@npm:^5.10.0":
version: 5.11.0
resolution: "@typescript-eslint/utils@npm:5.11.0"
@@ -11138,9 +11267,19 @@ __metadata:
languageName: node
linkType: hard
-"@visx/bounds@npm:3.0.0":
- version: 3.0.0
- resolution: "@visx/bounds@npm:3.0.0"
+"@typescript-eslint/visitor-keys@npm:5.59.9":
+ version: 5.59.9
+ resolution: "@typescript-eslint/visitor-keys@npm:5.59.9"
+ dependencies:
+ "@typescript-eslint/types": 5.59.9
+ eslint-visitor-keys: ^3.3.0
+ checksum: 2909ce761f7fe546592cd3c43e33263d8a5fa619375fd2fdffbc72ffc33e40d6feacafb28c79f36c638fcc2225048e7cc08c61cbac6ca63723dc68610d80e3e6
+ languageName: node
+ linkType: hard
+
+"@visx/bounds@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/bounds@npm:3.3.0"
dependencies:
"@types/react": "*"
"@types/react-dom": "*"
@@ -11148,87 +11287,82 @@ __metadata:
peerDependencies:
react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0
react-dom: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0
- checksum: 3c50dad1c78b526bebe20a690360ae5ad3dd2a31c86150553071671e49309a9fcf3bca3303eab7f7ac2e28be8d7987ac9ce5daa28b8df32c647b0aa97f118fa9
+ checksum: e682b343735f53d7eed04cc9e4bc40308583724faa0577f752449d59daea57030f05cb72a9711d7e7f46db932691fea6bb7a545b204b4df24b80ffff0ed04e78
languageName: node
linkType: hard
-"@visx/curve@npm:3.0.0":
- version: 3.0.0
- resolution: "@visx/curve@npm:3.0.0"
+"@visx/curve@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/curve@npm:3.3.0"
dependencies:
"@types/d3-shape": ^1.3.1
d3-shape: ^1.0.6
- checksum: 1707b2b0e002d35e77cec3c5fbf8a05e70f10881ffb123edf7e04e9ccfb05262e1cbbc0dfd45067e1c3ae5bc653325ef728fe880fecc7be9620ae267631f4149
+ checksum: 36db95911c567408de78851eee6d98b60065c9d07b5abc7652cef072eaf5040444d8d84e73255f91bca0cfb50837f3b47db7209183211c20bc4bc1adcf13794d
languageName: node
linkType: hard
-"@visx/event@npm:3.0.1":
- version: 3.0.1
- resolution: "@visx/event@npm:3.0.1"
+"@visx/event@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/event@npm:3.3.0"
dependencies:
"@types/react": "*"
- "@visx/point": 3.0.1
- checksum: 0cb4dd578bbe54bd428a0cfae9e64db141b039c2c6c1412d1cd1d04e1613d193212b031124948ca3b7eed877cdea87d161cc3a008b973c6f217e21a8a2dd27b0
+ "@visx/point": 3.3.0
+ checksum: 3cdb86848d9ae7cc8b6a14a0cc4efd7fc2186fca582ee374bb1f2dfe104ec5cd04dbdbbfc41ccb8c94e1885e2b6e6060a488f3a0a0554ad9e831ecc1b28339de
languageName: node
linkType: hard
-"@visx/gradient@npm:3.0.0":
- version: 3.0.0
- resolution: "@visx/gradient@npm:3.0.0"
+"@visx/gradient@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/gradient@npm:3.3.0"
dependencies:
"@types/react": "*"
prop-types: ^15.5.7
peerDependencies:
react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0
- checksum: 471b4a4e1ec329e26cedb5aeef627b7c6393b54d85f76fa2707ec4f2b75a67007c5d9e4c9ffbdf58d37853228c21e285780466ab958b22dbba41f209c5212182
+ checksum: 7a371c788a09c8fc53484cfe375444332c5893f3b6fe7a86ed1bb02761deaa92e53208dab140a5a7c8d610af9396a7bcf6794d9b70d6945048fc9aeb0f4757ce
languageName: node
linkType: hard
-"@visx/group@npm:3.0.0":
- version: 3.0.0
- resolution: "@visx/group@npm:3.0.0"
+"@visx/group@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/group@npm:3.3.0"
dependencies:
"@types/react": "*"
classnames: ^2.3.1
prop-types: ^15.6.2
peerDependencies:
react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0
- checksum: f52b946fb39cfcd4798bd5c77b729ceb41b2041e0464edeef2f15955c4022d51ed9f7626f2a7ac331f8430c84037254be5dd38f8282881a63d1680b27f41d04d
+ checksum: a2f950664f43f1f1700a329f3a66bc3921ce8be35a93095a9ea28334ae4f9943c1082f21ba0f57f2bda913d2a40da8b7124235c2ae666c0e5d58a900c7148a8b
languageName: node
linkType: hard
-"@visx/point@npm:3.0.1":
- version: 3.0.1
- resolution: "@visx/point@npm:3.0.1"
- checksum: 727f314826eb85a608b4088a9e2fedb7e6996a5f0fdddaeb40702a51aa04da07fdbc5fdcf2d595d914dfa083389c644f769fc69b3a247b4da274936dd58c7bb8
+"@visx/point@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/point@npm:3.3.0"
+ checksum: 79950f49828d12c67c856ac0b345292df03a154b50f739aab3dbab37abb73ba40f9cbdaa46d698b50691984e81b94afdafe64dd4fa18c6d2895298cf25f1a450
languageName: node
linkType: hard
-"@visx/scale@npm:3.0.0":
- version: 3.0.0
- resolution: "@visx/scale@npm:3.0.0"
+"@visx/scale@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/scale@npm:3.3.0"
dependencies:
- "@types/d3-interpolate": ^3.0.1
- "@types/d3-scale": ^4.0.2
- "@types/d3-time": ^2.0.0
- d3-interpolate: ^3.0.1
- d3-scale: ^4.0.2
- d3-time: ^2.1.1
- checksum: 3740fd0f6844b2297847f48f34afa9772e35d8b6faf26fb7b18c78fcd83634de57a44cd4aa9263dfb3a62bec609cf24b36db26f6db8ba36908dbdb83f359d9ed
+ "@visx/vendor": 3.3.0
+ checksum: a6a5589fc86c72df84d8d11bab255fa3bf0481ca13ff15c66228368afae60937bb0553d942202b007a5d50b93dfc62359b06fd53c00da0eeb472db09d662440d
languageName: node
linkType: hard
-"@visx/shape@npm:3.0.0":
- version: 3.0.0
- resolution: "@visx/shape@npm:3.0.0"
+"@visx/shape@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/shape@npm:3.3.0"
dependencies:
"@types/d3-path": ^1.0.8
"@types/d3-shape": ^1.3.1
"@types/lodash": ^4.14.172
"@types/react": "*"
- "@visx/curve": 3.0.0
- "@visx/group": 3.0.0
- "@visx/scale": 3.0.0
+ "@visx/curve": 3.3.0
+ "@visx/group": 3.3.0
+ "@visx/scale": 3.3.0
classnames: ^2.3.1
d3-path: ^1.0.5
d3-shape: ^1.2.0
@@ -11236,23 +11370,48 @@ __metadata:
prop-types: ^15.5.10
peerDependencies:
react: ^16.3.0-0 || ^17.0.0-0 || ^18.0.0-0
- checksum: d6e71e0c5dd90957a38b1404e8357cd2192f741f8c7b4f73fac3c007e4b0af398f5cf648f5f1ecc5ca72759e729cfa58fff4f8a409f95a344219309881e58b37
+ checksum: ab53910f6a2b5c2a36bfceed92ebafaf3bfa0c20272e3b86e7ec7e782628021fca4fb377edfe86b76d38df4f5ad9b846056ba358f63112988ff7346f23bad739
languageName: node
linkType: hard
-"@visx/tooltip@npm:3.1.2":
- version: 3.1.2
- resolution: "@visx/tooltip@npm:3.1.2"
+"@visx/tooltip@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/tooltip@npm:3.3.0"
dependencies:
"@types/react": "*"
- "@visx/bounds": 3.0.0
+ "@visx/bounds": 3.3.0
classnames: ^2.3.1
prop-types: ^15.5.10
react-use-measure: ^2.0.4
peerDependencies:
react: ^16.8.0-0 || ^17.0.0-0 || ^18.0.0-0
react-dom: ^16.8.0-0 || ^17.0.0-0 || ^18.0.0-0
- checksum: 4c2127068f22766e984ed3ed1452dcece919bacb0297b17ba862a6815bb7f04c4fc462a100d3934e0cb56a9c7962b82f7c4184748ef4b2dbef3b4b0d5b717fdd
+ checksum: eb525afd34bf108f9343e7998a8752e0002190afa76d2e9e7f47ec83f89139f611def8fe59ba55af4ab2d15bb7d31b836d372ef338e8aa4ca2e7e4cd68567c7f
+ languageName: node
+ linkType: hard
+
+"@visx/vendor@npm:3.3.0":
+ version: 3.3.0
+ resolution: "@visx/vendor@npm:3.3.0"
+ dependencies:
+ "@types/d3-array": 3.0.3
+ "@types/d3-color": 3.1.0
+ "@types/d3-delaunay": 6.0.1
+ "@types/d3-format": 3.0.1
+ "@types/d3-interpolate": 3.0.1
+ "@types/d3-scale": 4.0.2
+ "@types/d3-time": 3.0.0
+ "@types/d3-time-format": 2.1.0
+ d3-array: 3.2.1
+ d3-color: 3.1.0
+ d3-delaunay: 6.0.2
+ d3-format: 3.1.0
+ d3-interpolate: 3.0.1
+ d3-scale: 4.0.2
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ internmap: 2.0.3
+ checksum: eaab876b3898d44930e75a95ea1f6f1db490822fd9c93f2806f5673875f8b63bde08f41f43ab0c2c291301796b52d612e671d3f81dfaa20c986adc90d95d09cf
languageName: node
linkType: hard
@@ -11963,7 +12122,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv-keywords@npm:^5.0.0":
+"ajv-keywords@npm:^5.0.0, ajv-keywords@npm:^5.1.0":
version: 5.1.0
resolution: "ajv-keywords@npm:5.1.0"
dependencies:
@@ -12010,6 +12169,18 @@ __metadata:
languageName: node
linkType: hard
+"ajv@npm:^8.9.0":
+ version: 8.12.0
+ resolution: "ajv@npm:8.12.0"
+ dependencies:
+ fast-deep-equal: ^3.1.1
+ json-schema-traverse: ^1.0.0
+ require-from-string: ^2.0.2
+ uri-js: ^4.2.2
+ checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001
+ languageName: node
+ linkType: hard
+
"angular-bindonce@npm:0.3.1":
version: 0.3.1
resolution: "angular-bindonce@npm:0.3.1"
@@ -12361,18 +12532,6 @@ __metadata:
languageName: node
linkType: hard
-"array.prototype.flatmap@npm:^1.3.0":
- version: 1.3.0
- resolution: "array.prototype.flatmap@npm:1.3.0"
- dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.1.3
- es-abstract: ^1.19.2
- es-shim-unscopables: ^1.0.0
- checksum: 818538f39409c4045d874be85df0dbd195e1446b14d22f95bdcfefea44ae77db44e42dcd89a559254ec5a7c8b338cfc986cc6d641e3472f9a5326b21eb2976a2
- languageName: node
- linkType: hard
-
"array.prototype.flatmap@npm:^1.3.1":
version: 1.3.1
resolution: "array.prototype.flatmap@npm:1.3.1"
@@ -13206,7 +13365,7 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.20.3, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5":
+"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5":
version: 4.21.7
resolution: "browserslist@npm:4.21.7"
dependencies:
@@ -13558,13 +13717,13 @@ __metadata:
languageName: node
linkType: hard
-"centrifuge@npm:3.1.0":
- version: 3.1.0
- resolution: "centrifuge@npm:3.1.0"
+"centrifuge@npm:4.0.1":
+ version: 4.0.1
+ resolution: "centrifuge@npm:4.0.1"
dependencies:
events: ^3.3.0
- protobufjs: ^6.11.3
- checksum: 24bcf02ad896f66929b4c8f44632da708b6888c03bf09ed756940fda181e46197c28673b74680da33005ec3770725bd7f286c689bdf373cc25d1f10db4fb9fc5
+ protobufjs: ^7.2.4
+ checksum: 5cfa25d2688089e5c70e2a894b0f133cfc852828ff84d44a08a0ff2d60c2dceaea50f4ee5b1ffb37b1bab61ef28a25e6d803c63d03fd93566f1466e02b15262f
languageName: node
linkType: hard
@@ -14721,12 +14880,12 @@ __metadata:
languageName: node
linkType: hard
-"css-declaration-sorter@npm:^6.2.2":
- version: 6.2.2
- resolution: "css-declaration-sorter@npm:6.2.2"
+"css-declaration-sorter@npm:^6.3.1":
+ version: 6.4.1
+ resolution: "css-declaration-sorter@npm:6.4.1"
peerDependencies:
postcss: ^8.0.9
- checksum: afd3aea1b763b7abb5a9d0e10e973e99520b528522be421d9ef13d4fa7ead2cd48acd85d48c0fd0e954f596da2181dafbafc176a080ab017ebd1909a8231c9b4
+ checksum: cbdc9e0d481011b1a28fd5b60d4eb55fe204391d31a0b1b490b2cecf4baa85810f9b8c48adab4df644f4718104ed3ed72c64a9745e3216173767bf4aeca7f9b8
languageName: node
linkType: hard
@@ -14792,16 +14951,16 @@ __metadata:
languageName: node
linkType: hard
-"css-minimizer-webpack-plugin@npm:4.2.2":
- version: 4.2.2
- resolution: "css-minimizer-webpack-plugin@npm:4.2.2"
+"css-minimizer-webpack-plugin@npm:5.0.1":
+ version: 5.0.1
+ resolution: "css-minimizer-webpack-plugin@npm:5.0.1"
dependencies:
- cssnano: ^5.1.8
- jest-worker: ^29.1.2
- postcss: ^8.4.17
- schema-utils: ^4.0.0
- serialize-javascript: ^6.0.0
- source-map: ^0.6.1
+ "@jridgewell/trace-mapping": ^0.3.18
+ cssnano: ^6.0.1
+ jest-worker: ^29.4.3
+ postcss: ^8.4.24
+ schema-utils: ^4.0.1
+ serialize-javascript: ^6.0.1
peerDependencies:
webpack: ^5.0.0
peerDependenciesMeta:
@@ -14817,7 +14976,7 @@ __metadata:
optional: true
lightningcss:
optional: true
- checksum: 5417e76a445f35832aa96807c835b8e92834a6cd285b1b788dfe3ca0fa90fec7eb2dd6efa9d3649f9d8244b99b7da2d065951603b94918e8f6a366a5049cacdd
+ checksum: 10055802c61d1ae72584eac03b6bd221ecbefde11d337be44a5459d8de075b38f91b80949f95cd0c3a10295615ee013f82130bfac5fe9b5b3e8e75531f232680
languageName: node
linkType: hard
@@ -14859,6 +15018,15 @@ __metadata:
languageName: node
linkType: hard
+"css-styled@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "css-styled@npm:1.0.8"
+ dependencies:
+ "@daybrush/utils": ^1.13.0
+ checksum: ffd99f3403dff34fb682ba8a77fcc8cf0131dd3470efcd81b84c58be241904c0f877b929c54563c00994a01951c5afa45b164a56d8b7b1363c057e284f2b3061
+ languageName: node
+ linkType: hard
+
"css-styled@npm:~1.0.1":
version: 1.0.1
resolution: "css-styled@npm:1.0.1"
@@ -14881,7 +15049,17 @@ __metadata:
languageName: node
linkType: hard
-"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3":
+"css-to-mat@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "css-to-mat@npm:1.1.1"
+ dependencies:
+ "@daybrush/utils": ^1.13.0
+ "@scena/matrix": ^1.0.0
+ checksum: bc88b044a8b24882e06170ad6d5cedfd220119fa03a55accf54ff0e7f6450d85f9be71408900be595d8bb5c0e07346f79ab7a3de4c820869bced4de25497b3c5
+ languageName: node
+ linkType: hard
+
+"css-tree@npm:^1.1.2":
version: 1.1.3
resolution: "css-tree@npm:1.1.3"
dependencies:
@@ -14891,7 +15069,7 @@ __metadata:
languageName: node
linkType: hard
-"css-tree@npm:^2.3.1":
+"css-tree@npm:^2.2.1, css-tree@npm:^2.3.1":
version: 2.3.1
resolution: "css-tree@npm:2.3.1"
dependencies:
@@ -14901,6 +15079,16 @@ __metadata:
languageName: node
linkType: hard
+"css-tree@npm:~2.2.0":
+ version: 2.2.1
+ resolution: "css-tree@npm:2.2.1"
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: ^1.0.1
+ checksum: b94aa8cc2f09e6f66c91548411fcf74badcbad3e150345074715012d16333ce573596ff5dfca03c2a87edf1924716db765120f94247e919d72753628ba3aba27
+ languageName: node
+ linkType: hard
+
"css-what@npm:^5.0.0":
version: 5.1.0
resolution: "css-what@npm:5.1.0"
@@ -14952,73 +15140,72 @@ __metadata:
languageName: node
linkType: hard
-"cssnano-preset-default@npm:^5.2.8":
- version: 5.2.8
- resolution: "cssnano-preset-default@npm:5.2.8"
+"cssnano-preset-default@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "cssnano-preset-default@npm:6.0.1"
dependencies:
- css-declaration-sorter: ^6.2.2
- cssnano-utils: ^3.1.0
- postcss-calc: ^8.2.3
- postcss-colormin: ^5.3.0
- postcss-convert-values: ^5.1.1
- postcss-discard-comments: ^5.1.1
- postcss-discard-duplicates: ^5.1.0
- postcss-discard-empty: ^5.1.1
- postcss-discard-overridden: ^5.1.0
- postcss-merge-longhand: ^5.1.4
- postcss-merge-rules: ^5.1.1
- postcss-minify-font-values: ^5.1.0
- postcss-minify-gradients: ^5.1.1
- postcss-minify-params: ^5.1.3
- postcss-minify-selectors: ^5.2.0
- postcss-normalize-charset: ^5.1.0
- postcss-normalize-display-values: ^5.1.0
- postcss-normalize-positions: ^5.1.0
- postcss-normalize-repeat-style: ^5.1.0
- postcss-normalize-string: ^5.1.0
- postcss-normalize-timing-functions: ^5.1.0
- postcss-normalize-unicode: ^5.1.0
- postcss-normalize-url: ^5.1.0
- postcss-normalize-whitespace: ^5.1.1
- postcss-ordered-values: ^5.1.1
- postcss-reduce-initial: ^5.1.0
- postcss-reduce-transforms: ^5.1.0
- postcss-svgo: ^5.1.0
- postcss-unique-selectors: ^5.1.1
+ css-declaration-sorter: ^6.3.1
+ cssnano-utils: ^4.0.0
+ postcss-calc: ^9.0.0
+ postcss-colormin: ^6.0.0
+ postcss-convert-values: ^6.0.0
+ postcss-discard-comments: ^6.0.0
+ postcss-discard-duplicates: ^6.0.0
+ postcss-discard-empty: ^6.0.0
+ postcss-discard-overridden: ^6.0.0
+ postcss-merge-longhand: ^6.0.0
+ postcss-merge-rules: ^6.0.1
+ postcss-minify-font-values: ^6.0.0
+ postcss-minify-gradients: ^6.0.0
+ postcss-minify-params: ^6.0.0
+ postcss-minify-selectors: ^6.0.0
+ postcss-normalize-charset: ^6.0.0
+ postcss-normalize-display-values: ^6.0.0
+ postcss-normalize-positions: ^6.0.0
+ postcss-normalize-repeat-style: ^6.0.0
+ postcss-normalize-string: ^6.0.0
+ postcss-normalize-timing-functions: ^6.0.0
+ postcss-normalize-unicode: ^6.0.0
+ postcss-normalize-url: ^6.0.0
+ postcss-normalize-whitespace: ^6.0.0
+ postcss-ordered-values: ^6.0.0
+ postcss-reduce-initial: ^6.0.0
+ postcss-reduce-transforms: ^6.0.0
+ postcss-svgo: ^6.0.0
+ postcss-unique-selectors: ^6.0.0
peerDependencies:
postcss: ^8.2.15
- checksum: 3a95a4d9d3b9ee970df17132a939c2c0a22bc52854bbad6a06ebb682b2c4840716b0c7323ea39fb345eef53e5ee64be9ee4e7477cbc4ac63ba901cf2beed427d
+ checksum: 451080ae47c93e6525c7133c36426968ee758eb9115132ba481e6b12d50775f4d086635bb2f807957e017fc9d253aa876aa64800be6b3d000ada90721b9ea410
languageName: node
linkType: hard
-"cssnano-utils@npm:^3.1.0":
- version: 3.1.0
- resolution: "cssnano-utils@npm:3.1.0"
+"cssnano-utils@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "cssnano-utils@npm:4.0.0"
peerDependencies:
postcss: ^8.2.15
- checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2
+ checksum: 7db9b3eb4ec7cc7b2d1a3caf8c2d3b6b067bb8404b93dc183907325db3231e396350a50e5388beda02dab03404d5e8d226977b2b87adc11768173e0259e80219
languageName: node
linkType: hard
-"cssnano@npm:^5.1.8":
- version: 5.1.8
- resolution: "cssnano@npm:5.1.8"
+"cssnano@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "cssnano@npm:6.0.1"
dependencies:
- cssnano-preset-default: ^5.2.8
- lilconfig: ^2.0.3
- yaml: ^1.10.2
+ cssnano-preset-default: ^6.0.1
+ lilconfig: ^2.1.0
peerDependencies:
postcss: ^8.2.15
- checksum: 8ff769094400447a5ecf708e1a10050daf450bcf08d9c778806bbc7b942d68e0fac7a8c3b41dbb820620dab7f0395838e74b1c1fe1dbca57fd8cf00f0d1f8555
+ checksum: 15e0777189edf2d4287ed3628f65d78c9934a2c0729e29811e85bd760653a0142477b3c2dde9e0a51438c509b2b926e6482215cd8d4e6704e3eb1ab38d1dba0c
languageName: node
linkType: hard
-"csso@npm:^4.2.0":
- version: 4.2.0
- resolution: "csso@npm:4.2.0"
+"csso@npm:^5.0.5":
+ version: 5.0.5
+ resolution: "csso@npm:5.0.5"
dependencies:
- css-tree: ^1.1.2
- checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998
+ css-tree: ~2.2.0
+ checksum: 0ad858d36bf5012ed243e9ec69962a867509061986d2ee07cc040a4b26e4d062c00d4c07e5ba8d430706ceb02dd87edd30a52b5937fd45b1b6f2119c4993d59a
languageName: node
linkType: hard
@@ -15127,15 +15314,6 @@ __metadata:
languageName: node
linkType: hard
-"d3-array@npm:2":
- version: 2.12.1
- resolution: "d3-array@npm:2.12.1"
- dependencies:
- internmap: ^1.0.0
- checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb
- languageName: node
- linkType: hard
-
"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:3, d3-array@npm:^3.2.0":
version: 3.2.2
resolution: "d3-array@npm:3.2.2"
@@ -15145,6 +15323,15 @@ __metadata:
languageName: node
linkType: hard
+"d3-array@npm:3.2.1":
+ version: 3.2.1
+ resolution: "d3-array@npm:3.2.1"
+ dependencies:
+ internmap: 1 - 2
+ checksum: 0bed33cc33b70f9d48ccef3e7a5956e134862e09179bf14df0bf9c8fc0ec02b8f847d4f5e1d32729cd5e02032af1d0a32bcc968ff1333795028455a749994623
+ languageName: node
+ linkType: hard
+
"d3-axis@npm:3":
version: 3.0.0
resolution: "d3-axis@npm:3.0.0"
@@ -15174,7 +15361,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-color@npm:1 - 3, d3-color@npm:3":
+"d3-color@npm:1 - 3, d3-color@npm:3, d3-color@npm:3.1.0":
version: 3.1.0
resolution: "d3-color@npm:3.1.0"
checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b
@@ -15190,7 +15377,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-delaunay@npm:6":
+"d3-delaunay@npm:6, d3-delaunay@npm:6.0.2":
version: 6.0.2
resolution: "d3-delaunay@npm:6.0.2"
dependencies:
@@ -15264,7 +15451,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-format@npm:1 - 3, d3-format@npm:3":
+"d3-format@npm:1 - 3, d3-format@npm:3, d3-format@npm:3.1.0":
version: 3.1.0
resolution: "d3-format@npm:3.1.0"
checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2
@@ -15287,7 +15474,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:3, d3-interpolate@npm:3.0.1, d3-interpolate@npm:^3.0.1":
+"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:3, d3-interpolate@npm:3.0.1":
version: 3.0.1
resolution: "d3-interpolate@npm:3.0.1"
dependencies:
@@ -15341,7 +15528,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-scale@npm:4, d3-scale@npm:^4.0.2":
+"d3-scale@npm:4, d3-scale@npm:4.0.2":
version: 4.0.2
resolution: "d3-scale@npm:4.0.2"
dependencies:
@@ -15379,7 +15566,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-time-format@npm:2 - 4, d3-time-format@npm:4":
+"d3-time-format@npm:2 - 4, d3-time-format@npm:4, d3-time-format@npm:4.1.0":
version: 4.1.0
resolution: "d3-time-format@npm:4.1.0"
dependencies:
@@ -15388,7 +15575,7 @@ __metadata:
languageName: node
linkType: hard
-"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:3":
+"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:3, d3-time@npm:3.1.0":
version: 3.1.0
resolution: "d3-time@npm:3.1.0"
dependencies:
@@ -15397,15 +15584,6 @@ __metadata:
languageName: node
linkType: hard
-"d3-time@npm:^2.1.1":
- version: 2.1.1
- resolution: "d3-time@npm:2.1.1"
- dependencies:
- d3-array: 2
- checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6
- languageName: node
- linkType: hard
-
"d3-timer@npm:1 - 3, d3-timer@npm:3":
version: 3.0.1
resolution: "d3-timer@npm:3.0.1"
@@ -16540,34 +16718,6 @@ __metadata:
languageName: node
linkType: hard
-"es-abstract@npm:^1.19.2":
- version: 1.19.5
- resolution: "es-abstract@npm:1.19.5"
- dependencies:
- call-bind: ^1.0.2
- es-to-primitive: ^1.2.1
- function-bind: ^1.1.1
- get-intrinsic: ^1.1.1
- get-symbol-description: ^1.0.0
- has: ^1.0.3
- has-symbols: ^1.0.3
- internal-slot: ^1.0.3
- is-callable: ^1.2.4
- is-negative-zero: ^2.0.2
- is-regex: ^1.1.4
- is-shared-array-buffer: ^1.0.2
- is-string: ^1.0.7
- is-weakref: ^1.0.2
- object-inspect: ^1.12.0
- object-keys: ^1.1.1
- object.assign: ^4.1.2
- string.prototype.trimend: ^1.0.4
- string.prototype.trimstart: ^1.0.4
- unbox-primitive: ^1.0.1
- checksum: 55199b0f179a12b3b0ec9c9f2e3a27a7561686e4f88d46f9ef32c836448a336e367c14d8f792612fc83a64113896e478259e4dffbbcffb3efdd06650f6360324
- languageName: node
- linkType: hard
-
"es-abstract@npm:^1.19.5":
version: 1.20.1
resolution: "es-abstract@npm:1.20.1"
@@ -17046,17 +17196,6 @@ __metadata:
languageName: node
linkType: hard
-"eslint-config-prettier@npm:8.5.0":
- version: 8.5.0
- resolution: "eslint-config-prettier@npm:8.5.0"
- peerDependencies:
- eslint: ">=7.0.0"
- bin:
- eslint-config-prettier: bin/cli.js
- checksum: 0d0f5c32e7a0ad91249467ce71ca92394ccd343178277d318baf32063b79ea90216f4c81d1065d60f96366fdc60f151d4d68ae7811a58bd37228b84c2083f893
- languageName: node
- linkType: hard
-
"eslint-config-prettier@npm:8.8.0":
version: 8.8.0
resolution: "eslint-config-prettier@npm:8.8.0"
@@ -17133,20 +17272,22 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-jsdoc@npm:39.6.2":
- version: 39.6.2
- resolution: "eslint-plugin-jsdoc@npm:39.6.2"
+"eslint-plugin-jsdoc@npm:46.2.6":
+ version: 46.2.6
+ resolution: "eslint-plugin-jsdoc@npm:46.2.6"
dependencies:
- "@es-joy/jsdoccomment": ~0.36.0
+ "@es-joy/jsdoccomment": ~0.39.4
+ are-docs-informative: ^0.0.2
comment-parser: 1.3.1
debug: ^4.3.4
escape-string-regexp: ^4.0.0
- esquery: ^1.4.0
- semver: ^7.3.8
+ esquery: ^1.5.0
+ is-builtin-module: ^3.2.1
+ semver: ^7.5.1
spdx-expression-parse: ^3.0.1
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
- checksum: 613c541a644d441e5465139b2a1934842a29c701fb89f0380f105be28180c1fa2f3c08b421b134b87fef194d4fb4dab4006a972a084e476eebb14cf5bb9399fe
+ checksum: e082c3e88843521e121cdcad1999407a9c586bd55549b40b72865af8af853b06b7e883f80875930615796be71d79cf9d9a73d0e910b2fb67e9934f05400a34b8
languageName: node
linkType: hard
@@ -17215,30 +17356,6 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-react@npm:7.31.10":
- version: 7.31.10
- resolution: "eslint-plugin-react@npm:7.31.10"
- dependencies:
- array-includes: ^3.1.5
- array.prototype.flatmap: ^1.3.0
- doctrine: ^2.1.0
- estraverse: ^5.3.0
- jsx-ast-utils: ^2.4.1 || ^3.0.0
- minimatch: ^3.1.2
- object.entries: ^1.1.5
- object.fromentries: ^2.0.5
- object.hasown: ^1.1.1
- object.values: ^1.1.5
- prop-types: ^15.8.1
- resolve: ^2.0.0-next.3
- semver: ^6.3.0
- string.prototype.matchall: ^4.0.7
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
- checksum: f013669c296483559a760648fa06425f161b1aff93c668f14c4561c933d22a7836b745b88a795c53cab929c71513d5fd1f2ffdddff915709f01b77ac25f5b71b
- languageName: node
- linkType: hard
-
"eslint-plugin-react@npm:7.32.2":
version: 7.32.2
resolution: "eslint-plugin-react@npm:7.32.2"
@@ -17274,16 +17391,6 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:^7.1.1":
- version: 7.1.1
- resolution: "eslint-scope@npm:7.1.1"
- dependencies:
- esrecurse: ^4.3.0
- estraverse: ^5.2.0
- checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e
- languageName: node
- linkType: hard
-
"eslint-scope@npm:^7.2.0":
version: 7.2.0
resolution: "eslint-scope@npm:7.2.0"
@@ -17349,12 +17456,15 @@ __metadata:
languageName: node
linkType: hard
-"eslint@npm:8.26.0":
- version: 8.26.0
- resolution: "eslint@npm:8.26.0"
+"eslint@npm:8.42.0":
+ version: 8.42.0
+ resolution: "eslint@npm:8.42.0"
dependencies:
- "@eslint/eslintrc": ^1.3.3
- "@humanwhocodes/config-array": ^0.11.6
+ "@eslint-community/eslint-utils": ^4.2.0
+ "@eslint-community/regexpp": ^4.4.0
+ "@eslint/eslintrc": ^2.0.3
+ "@eslint/js": 8.42.0
+ "@humanwhocodes/config-array": ^0.11.10
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
ajv: ^6.10.0
@@ -17363,24 +17473,22 @@ __metadata:
debug: ^4.3.2
doctrine: ^3.0.0
escape-string-regexp: ^4.0.0
- eslint-scope: ^7.1.1
- eslint-utils: ^3.0.0
- eslint-visitor-keys: ^3.3.0
- espree: ^9.4.0
- esquery: ^1.4.0
+ eslint-scope: ^7.2.0
+ eslint-visitor-keys: ^3.4.1
+ espree: ^9.5.2
+ esquery: ^1.4.2
esutils: ^2.0.2
fast-deep-equal: ^3.1.3
file-entry-cache: ^6.0.1
find-up: ^5.0.0
glob-parent: ^6.0.2
- globals: ^13.15.0
- grapheme-splitter: ^1.0.4
+ globals: ^13.19.0
+ graphemer: ^1.4.0
ignore: ^5.2.0
import-fresh: ^3.0.0
imurmurhash: ^0.1.4
is-glob: ^4.0.0
is-path-inside: ^3.0.3
- js-sdsl: ^4.1.4
js-yaml: ^4.1.0
json-stable-stringify-without-jsonify: ^1.0.1
levn: ^0.4.1
@@ -17388,13 +17496,12 @@ __metadata:
minimatch: ^3.1.2
natural-compare: ^1.4.0
optionator: ^0.9.1
- regexpp: ^3.2.0
strip-ansi: ^6.0.1
strip-json-comments: ^3.1.0
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
- checksum: a2aced939ea060f77d10dcfced5cfeb940f63f383fd7ab1decadea64170ab552582e1c5909db1db641d4283178c9bc569f19b0f8900e00314a5f783e4b3f759d
+ checksum: 07105397b5f2ff4064b983b8971e8c379ec04b1dfcc9d918976b3e00377189000161dac991d82ba14f8759e466091b8c71146f602930ca810c290ee3fcb3faf0
languageName: node
linkType: hard
@@ -17447,18 +17554,7 @@ __metadata:
languageName: node
linkType: hard
-"espree@npm:^9.4.0":
- version: 9.4.0
- resolution: "espree@npm:9.4.0"
- dependencies:
- acorn: ^8.8.0
- acorn-jsx: ^5.3.2
- eslint-visitor-keys: ^3.3.0
- checksum: 2e3020dde67892d2ba3632413b44d0dc31d92c29ce72267d7ec24216a562f0a6494d3696e2fa39a3ec8c0e0088d773947ab2925fbb716801a11eb8dd313ac89c
- languageName: node
- linkType: hard
-
-"espree@npm:^9.6.0":
+"espree@npm:^9.5.2, espree@npm:^9.6.0":
version: 9.6.0
resolution: "espree@npm:9.6.0"
dependencies:
@@ -17479,7 +17575,7 @@ __metadata:
languageName: node
linkType: hard
-"esquery@npm:^1.0.1, esquery@npm:^1.3.1, esquery@npm:^1.4.0":
+"esquery@npm:^1.0.1, esquery@npm:^1.3.1":
version: 1.4.0
resolution: "esquery@npm:1.4.0"
dependencies:
@@ -18618,6 +18714,16 @@ __metadata:
languageName: node
linkType: hard
+"gesto@npm:^1.19.1":
+ version: 1.19.1
+ resolution: "gesto@npm:1.19.1"
+ dependencies:
+ "@daybrush/utils": ^1.13.0
+ "@scena/event-emitter": ^1.0.2
+ checksum: 3f341539cb529036d96b57855ed255a76902d6c0499fc1b193c5357604a64ef376739b3b44dd6324ab797128c8fe0a7f1ac651b6f3b51712a6fd8579601eab87
+ languageName: node
+ linkType: hard
+
"get-caller-file@npm:^2.0.5":
version: 2.0.5
resolution: "get-caller-file@npm:2.0.5"
@@ -19019,15 +19125,6 @@ __metadata:
languageName: node
linkType: hard
-"globals@npm:^13.15.0":
- version: 13.15.0
- resolution: "globals@npm:13.15.0"
- dependencies:
- type-fest: ^0.20.2
- checksum: 383ade0873b2ab29ce6d143466c203ed960491575bc97406395e5c8434026fb02472ab2dfff5bc16689b8460269b18fda1047975295cd0183904385c51258bae
- languageName: node
- linkType: hard
-
"globals@npm:^13.19.0":
version: 13.19.0
resolution: "globals@npm:13.19.0"
@@ -19146,15 +19243,15 @@ __metadata:
"@betterer/eslint": 5.4.0
"@betterer/regexp": 5.4.0
"@daybrush/utils": 1.13.0
- "@emotion/css": 11.10.6
- "@emotion/eslint-plugin": 11.10.0
- "@emotion/react": 11.10.6
+ "@emotion/css": 11.11.2
+ "@emotion/eslint-plugin": 11.11.0
+ "@emotion/react": 11.11.1
"@glideapps/glide-data-grid": ^5.2.1
"@grafana/aws-sdk": 0.0.44
"@grafana/data": "workspace:*"
"@grafana/e2e": "workspace:*"
"@grafana/e2e-selectors": "workspace:*"
- "@grafana/eslint-config": 5.1.0
+ "@grafana/eslint-config": 6.0.0
"@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules"
"@grafana/experimental": 1.4.2
"@grafana/faro-core": 1.1.0
@@ -19235,9 +19332,9 @@ __metadata:
"@types/papaparse": 5.3.7
"@types/pluralize": ^0.0.29
"@types/prismjs": 1.26.0
- "@types/react": 18.0.28
+ "@types/react": 18.2.15
"@types/react-beautiful-dnd": 13.1.3
- "@types/react-dom": 18.0.11
+ "@types/react-dom": 18.2.7
"@types/react-grid-layout": 1.3.2
"@types/react-highlight-words": 0.16.4
"@types/react-redux": 7.1.25
@@ -19262,12 +19359,12 @@ __metadata:
"@types/yargs": 17.0.22
"@typescript-eslint/eslint-plugin": 5.42.0
"@typescript-eslint/parser": 5.42.0
- "@visx/event": 3.0.1
- "@visx/gradient": 3.0.0
- "@visx/group": 3.0.0
- "@visx/scale": 3.0.0
- "@visx/shape": 3.0.0
- "@visx/tooltip": 3.1.2
+ "@visx/event": 3.3.0
+ "@visx/gradient": 3.3.0
+ "@visx/group": 3.3.0
+ "@visx/scale": 3.3.0
+ "@visx/shape": 3.3.0
+ "@visx/tooltip": 3.3.0
"@welldone-software/why-did-you-render": 7.0.1
angular: 1.8.3
angular-bindonce: 0.3.1
@@ -19285,7 +19382,7 @@ __metadata:
brace: 0.11.1
browserslist: ^4.21.4
calculate-size: 1.1.1
- centrifuge: 3.1.0
+ centrifuge: 4.0.1
chance: ^1.0.10
classnames: 2.3.2
codeowners: ^5.1.1
@@ -19295,7 +19392,7 @@ __metadata:
copy-webpack-plugin: 11.0.0
core-js: 3.31.0
css-loader: 6.8.1
- css-minimizer-webpack-plugin: 4.2.2
+ css-minimizer-webpack-plugin: 5.0.1
cypress: 9.5.1
d3: 7.8.5
d3-force: 3.0.0
@@ -19332,15 +19429,16 @@ __metadata:
http-server: 14.1.1
husky: 8.0.3
i18next: ^22.0.0
+ i18next-browser-languagedetector: ^7.0.2
i18next-parser: 6.6.0
- immer: 9.0.19
+ immer: 10.0.2
immutable: 4.3.0
jest: 29.3.1
jest-canvas-mock: 2.5.2
jest-date-mock: 1.0.8
jest-environment-jsdom: 29.3.1
jest-fail-on-console: 3.1.1
- jest-junit: 15.0.0
+ jest-junit: 16.0.0
jest-matcher-utils: 29.3.1
jquery: 3.7.0
js-yaml: ^4.1.0
@@ -19352,7 +19450,7 @@ __metadata:
lint-staged: 13.2.3
lodash: 4.17.21
logfmt: ^1.3.2
- lru-cache: 7.17.0
+ lru-cache: 10.0.0
lru-memoize: ^1.1.0
marked: ^4.3.0
memoize-one: 6.0.0
@@ -19427,11 +19525,11 @@ __metadata:
regenerator-runtime: 0.13.11
reselect: 4.1.7
rimraf: 5.0.1
- rudder-sdk-js: 2.25.0
+ rudder-sdk-js: 2.37.0
rxjs: 7.8.0
sass: 1.63.6
sass-loader: 13.3.2
- selecto: 1.22.0
+ selecto: 1.26.0
semver: 7.5.4
sinon: 15.2.0
slate: 0.47.9
@@ -20194,6 +20292,15 @@ __metadata:
languageName: node
linkType: hard
+"i18next-browser-languagedetector@npm:^7.0.2":
+ version: 7.0.2
+ resolution: "i18next-browser-languagedetector@npm:7.0.2"
+ dependencies:
+ "@babel/runtime": ^7.19.4
+ checksum: ea6c5254308965ff9fe9870c16b546b67d065cc00bd3af961f1414ba73fbe323a7d1b76fe7524b1581307f7849fa6d04c36336693818a23d3690ebefc60d9071
+ languageName: node
+ linkType: hard
+
"i18next-parser@npm:6.6.0":
version: 6.6.0
resolution: "i18next-parser@npm:6.6.0"
@@ -20311,10 +20418,10 @@ __metadata:
languageName: node
linkType: hard
-"immer@npm:9.0.19":
- version: 9.0.19
- resolution: "immer@npm:9.0.19"
- checksum: f02ee53989989c287cd548a3d817fccf0bfe56db919755ee94a72ea3ae78a00363fba93ee6c010fe54a664380c29c53d44ed4091c6a86cae60957ad2cfabc010
+"immer@npm:10.0.2":
+ version: 10.0.2
+ resolution: "immer@npm:10.0.2"
+ checksum: 525a3b14210d02ae420c3b9f6ca14f7e9bcf625611d1356e773e7739f14c7c8de50dac442e6c7de3a6e24a782f7b792b6b8666bc0b3f00269d21a95f8f68ca84
languageName: node
linkType: hard
@@ -20533,20 +20640,13 @@ __metadata:
languageName: node
linkType: hard
-"internmap@npm:1 - 2":
+"internmap@npm:1 - 2, internmap@npm:2.0.3":
version: 2.0.3
resolution: "internmap@npm:2.0.3"
checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241
languageName: node
linkType: hard
-"internmap@npm:^1.0.0":
- version: 1.0.1
- resolution: "internmap@npm:1.0.1"
- checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813
- languageName: node
- linkType: hard
-
"interpret@npm:^1.0.0":
version: 1.4.0
resolution: "interpret@npm:1.4.0"
@@ -21757,15 +21857,15 @@ __metadata:
languageName: node
linkType: hard
-"jest-junit@npm:15.0.0":
- version: 15.0.0
- resolution: "jest-junit@npm:15.0.0"
+"jest-junit@npm:16.0.0":
+ version: 16.0.0
+ resolution: "jest-junit@npm:16.0.0"
dependencies:
mkdirp: ^1.0.4
strip-ansi: ^6.0.1
uuid: ^8.3.2
xml: ^1.0.1
- checksum: e8fe4d2f2ab843383ac41820a6fe495739d154ec435cd44ba590b44ec7fd62095676f3eef13f98392f81d4a3727ea58b4f4fad231fe367ac31243952b9ad716f
+ checksum: 412aa4bfeec4254a9b34f417fda79107c7cbd295e56ffeb299ac9c977545910fbabe57c91c6cd1f12b700d4a1f60f79872b0075003f02da87d463e30fc2d9d78
languageName: node
linkType: hard
@@ -21970,20 +22070,6 @@ __metadata:
languageName: node
linkType: hard
-"jest-util@npm:^29.2.1":
- version: 29.2.1
- resolution: "jest-util@npm:29.2.1"
- dependencies:
- "@jest/types": ^29.2.1
- "@types/node": "*"
- chalk: ^4.0.0
- ci-info: ^3.2.0
- graceful-fs: ^4.2.9
- picomatch: ^2.2.3
- checksum: 781bd14a65599d24b7449877020f4da32e8cb8fbc31c4e849c589ffde58f0eec27de9f690dba182e3ca369fe651c0bb9c307de29a0927d12777677ded56bafb8
- languageName: node
- linkType: hard
-
"jest-util@npm:^29.5.0":
version: 29.5.0
resolution: "jest-util@npm:29.5.0"
@@ -21998,6 +22084,20 @@ __metadata:
languageName: node
linkType: hard
+"jest-util@npm:^29.6.1":
+ version: 29.6.1
+ resolution: "jest-util@npm:29.6.1"
+ dependencies:
+ "@jest/types": ^29.6.1
+ "@types/node": "*"
+ chalk: ^4.0.0
+ ci-info: ^3.2.0
+ graceful-fs: ^4.2.9
+ picomatch: ^2.2.3
+ checksum: fc553556c1350c443449cadaba5fb9d604628e8b5ceb6ceaf4e7e08975b24277d0a14bf2e0f956024e03c23e556fcb074659423422a06fbedf2ab52978697ac7
+ languageName: node
+ linkType: hard
+
"jest-validate@npm:^29.3.1":
version: 29.3.1
resolution: "jest-validate@npm:29.3.1"
@@ -22061,18 +22161,6 @@ __metadata:
languageName: node
linkType: hard
-"jest-worker@npm:^29.1.2":
- version: 29.2.1
- resolution: "jest-worker@npm:29.2.1"
- dependencies:
- "@types/node": "*"
- jest-util: ^29.2.1
- merge-stream: ^2.0.0
- supports-color: ^8.0.0
- checksum: 10365612fae02412376e963de9f069d854deaf5aec8ff818ce49c299cd0373256a387a2da68db8225fb0f18483f2cc9072a52d1846881d44b756b1e36bc7f4ed
- languageName: node
- linkType: hard
-
"jest-worker@npm:^29.3.1":
version: 29.3.1
resolution: "jest-worker@npm:29.3.1"
@@ -22097,6 +22185,18 @@ __metadata:
languageName: node
linkType: hard
+"jest-worker@npm:^29.4.3":
+ version: 29.6.1
+ resolution: "jest-worker@npm:29.6.1"
+ dependencies:
+ "@types/node": "*"
+ jest-util: ^29.6.1
+ merge-stream: ^2.0.0
+ supports-color: ^8.0.0
+ checksum: 0af309ea4db17c4c47e84a9246f907960a15577683c005fdeafc8f3c06bc455136f95a6f28fa2a3e924b767eb4dacd9b40915a7707305f88586f099af3ac27a8
+ languageName: node
+ linkType: hard
+
"jest@npm:29.3.1":
version: 29.3.1
resolution: "jest@npm:29.3.1"
@@ -22166,13 +22266,6 @@ __metadata:
languageName: node
linkType: hard
-"js-sdsl@npm:^4.1.4":
- version: 4.1.4
- resolution: "js-sdsl@npm:4.1.4"
- checksum: 1977cea4ab18e0e03e28bdf0371d8b443fad65ca0988e0faa216406faf6bb943714fe8f7cc7a5bfe5f35ba3d94ddae399f4d10200f547f2c3320688b0670d726
- languageName: node
- linkType: hard
-
"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
version: 4.0.0
resolution: "js-tokens@npm:4.0.0"
@@ -22241,13 +22334,6 @@ __metadata:
languageName: node
linkType: hard
-"jsdoc-type-pratt-parser@npm:~3.1.0":
- version: 3.1.0
- resolution: "jsdoc-type-pratt-parser@npm:3.1.0"
- checksum: 2f437b57621f1e481918165f6cf0e48256628a9e510d8b3f88a2ab667bf2128bf8b94c628b57c43e78f555ca61983e9c282814703840dc091d2623992214a061
- languageName: node
- linkType: hard
-
"jsdoc-type-pratt-parser@npm:~4.0.0":
version: 4.0.0
resolution: "jsdoc-type-pratt-parser@npm:4.0.0"
@@ -22758,20 +22844,13 @@ __metadata:
languageName: node
linkType: hard
-"lilconfig@npm:2.1.0":
+"lilconfig@npm:2.1.0, lilconfig@npm:^2.1.0":
version: 2.1.0
resolution: "lilconfig@npm:2.1.0"
checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117
languageName: node
linkType: hard
-"lilconfig@npm:^2.0.3":
- version: 2.0.3
- resolution: "lilconfig@npm:2.0.3"
- checksum: 39fcd06c9f94bec0f7be969f89abcead96cf9334682007df63e6fbe9bdb0566cf8e1ca53a8f56d2acca802f28e8acbabe8ed4e6265ed5e419b6a1397db003741
- languageName: node
- linkType: hard
-
"lines-and-columns@npm:^1.1.6":
version: 1.1.6
resolution: "lines-and-columns@npm:1.1.6"
@@ -23081,10 +23160,10 @@ __metadata:
languageName: node
linkType: hard
-"long@npm:^4.0.0":
- version: 4.0.0
- resolution: "long@npm:4.0.0"
- checksum: 16afbe8f749c7c849db1f4de4e2e6a31ac6e617cead3bdc4f9605cb703cd20e1e9fc1a7baba674ffcca57d660a6e5b53a9e236d7b25a295d3855cca79cc06744
+"long@npm:^5.0.0":
+ version: 5.2.3
+ resolution: "long@npm:5.2.3"
+ checksum: 885ede7c3de4facccbd2cacc6168bae3a02c3e836159ea4252c87b6e34d40af819824b2d4edce330bfb5c4d6e8ce3ec5864bdcf9473fa1f53a4f8225860e5897
languageName: node
linkType: hard
@@ -23118,10 +23197,10 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:7.17.0":
- version: 7.17.0
- resolution: "lru-cache@npm:7.17.0"
- checksum: 28c2a98ad313b8d61beac1f08257b6f0ca990e39d24a9bc831030b6e209447cfb11c6d9d1a774282189bfc9609d1dfd17ebe485228dd68f7b96b6b9b7740894e
+"lru-cache@npm:10.0.0, lru-cache@npm:^9.1.1 || ^10.0.0":
+ version: 10.0.0
+ resolution: "lru-cache@npm:10.0.0"
+ checksum: 18f101675fe283bc09cda0ef1e3cc83781aeb8373b439f086f758d1d91b28730950db785999cd060d3c825a8571c03073e8c14512b6655af2188d623031baf50
languageName: node
linkType: hard
@@ -23150,13 +23229,6 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:^9.1.1 || ^10.0.0":
- version: 10.0.0
- resolution: "lru-cache@npm:10.0.0"
- checksum: 18f101675fe283bc09cda0ef1e3cc83781aeb8373b439f086f758d1d91b28730950db785999cd060d3c825a8571c03073e8c14512b6655af2188d623031baf50
- languageName: node
- linkType: hard
-
"lru-memoize@npm:^1.1.0":
version: 1.1.0
resolution: "lru-memoize@npm:1.1.0"
@@ -23173,12 +23245,12 @@ __metadata:
languageName: node
linkType: hard
-"magic-string@npm:^0.26.4":
- version: 0.26.7
- resolution: "magic-string@npm:0.26.7"
+"magic-string@npm:^0.27.0":
+ version: 0.27.0
+ resolution: "magic-string@npm:0.27.0"
dependencies:
- sourcemap-codec: ^1.4.8
- checksum: 89b0d60cbb32bbf3d1e23c46ea93db082d18a8230b972027aecb10a40bba51be519ecce0674f995571e3affe917b76b09f59d8dbc9a1b2c9c4102a2b6e8a2b01
+ "@jridgewell/sourcemap-codec": ^1.4.13
+ checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e
languageName: node
linkType: hard
@@ -23369,6 +23441,13 @@ __metadata:
languageName: node
linkType: hard
+"mdn-data@npm:2.0.28":
+ version: 2.0.28
+ resolution: "mdn-data@npm:2.0.28"
+ checksum: f51d587a6ebe8e426c3376c74ea6df3e19ec8241ed8e2466c9c8a3904d5d04397199ea4f15b8d34d14524b5de926d8724ae85207984be47e165817c26e49e0aa
+ languageName: node
+ linkType: hard
+
"mdn-data@npm:2.0.30":
version: 2.0.30
resolution: "mdn-data@npm:2.0.30"
@@ -24420,13 +24499,6 @@ __metadata:
languageName: node
linkType: hard
-"normalize-url@npm:^6.0.1":
- version: 6.1.0
- resolution: "normalize-url@npm:6.1.0"
- checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50
- languageName: node
- linkType: hard
-
"now-and-later@npm:^2.0.0":
version: 2.0.1
resolution: "now-and-later@npm:2.0.1"
@@ -24775,17 +24847,6 @@ __metadata:
languageName: node
linkType: hard
-"object.entries@npm:^1.1.5":
- version: 1.1.5
- resolution: "object.entries@npm:1.1.5"
- dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.1.3
- es-abstract: ^1.19.1
- checksum: d658696f74fd222060d8428d2a9fda2ce736b700cb06f6bdf4a16a1892d145afb746f453502b2fa55d1dca8ead6f14ddbcf66c545df45adadea757a6c4cd86c7
- languageName: node
- linkType: hard
-
"object.entries@npm:^1.1.6":
version: 1.1.6
resolution: "object.entries@npm:1.1.6"
@@ -24797,17 +24858,6 @@ __metadata:
languageName: node
linkType: hard
-"object.fromentries@npm:^2.0.5":
- version: 2.0.5
- resolution: "object.fromentries@npm:2.0.5"
- dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.1.3
- es-abstract: ^1.19.1
- checksum: 61a0b565ded97b76df9e30b569729866e1824cce902f98e90bb106e84f378aea20163366f66dc75c9000e2aad2ed0caf65c6f530cb2abc4c0c0f6c982102db4b
- languageName: node
- linkType: hard
-
"object.fromentries@npm:^2.0.6":
version: 2.0.6
resolution: "object.fromentries@npm:2.0.6"
@@ -24819,16 +24869,6 @@ __metadata:
languageName: node
linkType: hard
-"object.hasown@npm:^1.1.1":
- version: 1.1.1
- resolution: "object.hasown@npm:1.1.1"
- dependencies:
- define-properties: ^1.1.4
- es-abstract: ^1.19.5
- checksum: d8ed4907ce57f48b93e3b53c418fd6787bf226a51e8d698c91e39b78e80fe5b124cb6282f6a9d5be21cf9e2c7829ab10206dcc6112b7748860eefe641880c793
- languageName: node
- linkType: hard
-
"object.hasown@npm:^1.1.2":
version: 1.1.2
resolution: "object.hasown@npm:1.1.2"
@@ -24839,17 +24879,6 @@ __metadata:
languageName: node
linkType: hard
-"object.values@npm:^1.1.5":
- version: 1.1.5
- resolution: "object.values@npm:1.1.5"
- dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.1.3
- es-abstract: ^1.19.1
- checksum: 0f17e99741ebfbd0fa55ce942f6184743d3070c61bd39221afc929c8422c4907618c8da694c6915bc04a83ab3224260c779ba37fc07bb668bdc5f33b66a902a4
- languageName: node
- linkType: hard
-
"object.values@npm:^1.1.6":
version: 1.1.6
resolution: "object.values@npm:1.1.6"
@@ -25729,77 +25758,77 @@ __metadata:
languageName: node
linkType: hard
-"postcss-calc@npm:^8.2.3":
- version: 8.2.4
- resolution: "postcss-calc@npm:8.2.4"
+"postcss-calc@npm:^9.0.0":
+ version: 9.0.1
+ resolution: "postcss-calc@npm:9.0.1"
dependencies:
- postcss-selector-parser: ^6.0.9
+ postcss-selector-parser: ^6.0.11
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.2
- checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb
+ checksum: 7327ed83bfec544ab8b3e38353baa72ff6d04378b856db4ad82dbd68ce0b73668867ef182b5d4025f9dd9aa9c64aacc50cd1bd9db8d8b51ccc4cb97866b9d72b
languageName: node
linkType: hard
-"postcss-colormin@npm:^5.3.0":
- version: 5.3.0
- resolution: "postcss-colormin@npm:5.3.0"
+"postcss-colormin@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-colormin@npm:6.0.0"
dependencies:
- browserslist: ^4.16.6
+ browserslist: ^4.21.4
caniuse-api: ^3.0.0
colord: ^2.9.1
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 3d3e3cc25071407fb73d68541ca1039ebd154fceb649041461a8a3cab0400cc89b42dbb34a4eeaf573be4ba2370ce23af5e01aff5e03a8d72275f40605577212
+ checksum: f7113758df45a198f4cf310b317e5bc49fcbd2648064245a5cddcb46e892593950592d4040136bf3b0c8fd64973b0dda3b4b0865b72b5bd94af244cf52418c67
languageName: node
linkType: hard
-"postcss-convert-values@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-convert-values@npm:5.1.1"
+"postcss-convert-values@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-convert-values@npm:6.0.0"
dependencies:
- browserslist: ^4.20.3
+ browserslist: ^4.21.4
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 5f582b2159a27faf8667fcba27bc0bbe953d89ceba33579a7b9cc6363555bf05e6aaad9708a2496a335d82e67e5164bdb69f9a58cdc7e3f68abd2e7a3178e5f8
+ checksum: 511ca9358148fc336808d0f58f1e6ad330b73c1a87f32581f3d541ffa66cb61f2a36c8e76d1defb7c54c577c83f11d9bf2eb0d27a83c963c315b8eb149935bd7
languageName: node
linkType: hard
-"postcss-discard-comments@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-discard-comments@npm:5.1.1"
+"postcss-discard-comments@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-discard-comments@npm:6.0.0"
peerDependencies:
postcss: ^8.2.15
- checksum: 578c3cb3e8c6194cf8b5f2170abd6636bf2fe1ec9ba6e03431f5a7e4aae22c6c6605a5e8e2731e824df07c1188f3defa2f4ba28da4adafe45c068af1189f1f2c
+ checksum: 9be073707b5ef781c616ddd32ffd98faf14bf8b40027f341d5a4fb7989fa7b017087ad54146a370fe38295b1f2568b9f5522f4e4c1a1d09fe0e01abd9f5ae00d
languageName: node
linkType: hard
-"postcss-discard-duplicates@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-discard-duplicates@npm:5.1.0"
+"postcss-discard-duplicates@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-discard-duplicates@npm:6.0.0"
peerDependencies:
postcss: ^8.2.15
- checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35
+ checksum: 999dfc652a60c96f782cc37fbe0d04a89bec88b5ed943f06555166eebf03c6ee47cd56947f1373d84c8161687d1ca23ff6badd1278b5482c506614cf617bc21d
languageName: node
linkType: hard
-"postcss-discard-empty@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-discard-empty@npm:5.1.1"
+"postcss-discard-empty@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-discard-empty@npm:6.0.0"
peerDependencies:
postcss: ^8.2.15
- checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4
+ checksum: 0d6cc604719d4a70569db77de75e60b3b7e9b99a4521879f6047d71325556e9f46d6bd13aecbbd857c35f075c503c1f8b1be442329fb8e9653c24cbf2fb42f3e
languageName: node
linkType: hard
-"postcss-discard-overridden@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-discard-overridden@npm:5.1.0"
+"postcss-discard-overridden@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-discard-overridden@npm:6.0.0"
peerDependencies:
postcss: ^8.2.15
- checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41
+ checksum: f2d244bb574cf2c0974c56a1af7131f3833e14515be99c68e6fa6fe82df47cb2c9befa413b9ec92f5f067567c682dc253980a0dede3cc697f6cc9135dfc17ec7
languageName: node
linkType: hard
@@ -25824,77 +25853,77 @@ __metadata:
languageName: node
linkType: hard
-"postcss-merge-longhand@npm:^5.1.4":
- version: 5.1.4
- resolution: "postcss-merge-longhand@npm:5.1.4"
+"postcss-merge-longhand@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-merge-longhand@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
- stylehacks: ^5.1.0
+ stylehacks: ^6.0.0
peerDependencies:
postcss: ^8.2.15
- checksum: 3245531aebcd0d2fe6982e142c088ae96ed5242885349e6160e68fc007cdc10d8b0f3e57d7987e3ba07fc9f7d0f6f278972fecaa517c0fa8594bdeaed82393f0
+ checksum: 86d1eda1b845cc7bc781a18db714d8e3ed639f673a7a9f416ecae8b8822235a87724e32d06477c707b40bc2ef96a16e87d831b89188354921791fce0de50103b
languageName: node
linkType: hard
-"postcss-merge-rules@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-merge-rules@npm:5.1.1"
+"postcss-merge-rules@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "postcss-merge-rules@npm:6.0.1"
dependencies:
- browserslist: ^4.16.6
+ browserslist: ^4.21.4
caniuse-api: ^3.0.0
- cssnano-utils: ^3.1.0
+ cssnano-utils: ^4.0.0
postcss-selector-parser: ^6.0.5
peerDependencies:
postcss: ^8.2.15
- checksum: 163cba5b688346b6bd142b677439257ada6f910dd32dbcffa2a7a58719a609bb9859f597da382bbd8be14a259bea26248aefd99aa890e8fd3753424dfedbde6e
+ checksum: db003c820319181647806f087ead22598faffee745713026b5c8ea637936dc737a55fdc8d7631731879f49ba675a880dda174f21ae62c8f5aa4b0fda1a81f19a
languageName: node
linkType: hard
-"postcss-minify-font-values@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-minify-font-values@npm:5.1.0"
+"postcss-minify-font-values@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-minify-font-values@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece
+ checksum: 60de1e405a8849387714980d85f30c8e3df4b7b3083850086656ef50cdaf41605426373f28c0c43dcadfd1d78816b8e425571f12a024120dced1c7e8facb5073
languageName: node
linkType: hard
-"postcss-minify-gradients@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-minify-gradients@npm:5.1.1"
+"postcss-minify-gradients@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-minify-gradients@npm:6.0.0"
dependencies:
colord: ^2.9.1
- cssnano-utils: ^3.1.0
+ cssnano-utils: ^4.0.0
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67
+ checksum: f2399211f78b88d122f4c7248cb2cc887b49304eb3315c7332c6216aec361113aca6fe0dac43289f70f0c3f25c97fb10cd74417aab5c2f5f51b64b1ef2c5af13
languageName: node
linkType: hard
-"postcss-minify-params@npm:^5.1.3":
- version: 5.1.3
- resolution: "postcss-minify-params@npm:5.1.3"
+"postcss-minify-params@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-minify-params@npm:6.0.0"
dependencies:
- browserslist: ^4.16.6
- cssnano-utils: ^3.1.0
+ browserslist: ^4.21.4
+ cssnano-utils: ^4.0.0
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 2d218f6b82474310c866b690210595a5e6a4c695f174f9100b018adb4a171bd67b1adaba26c241b3d41a4ea0f4962e0f5a77cf12ae60d9db76f80b0c7cbd6bcd
+ checksum: 1cd9e372cfa27a9849f6994b03cc031534b519299bd1e392062b524405ba76906d23261ab5c0bb505289343c8ffb6a44414265f96a3e04a28181493eb032af01
languageName: node
linkType: hard
-"postcss-minify-selectors@npm:^5.2.0":
- version: 5.2.0
- resolution: "postcss-minify-selectors@npm:5.2.0"
+"postcss-minify-selectors@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-minify-selectors@npm:6.0.0"
dependencies:
postcss-selector-parser: ^6.0.5
peerDependencies:
postcss: ^8.2.15
- checksum: 651fbac038aaba10efaf4ed793d008439042954e5025462c14964ce24ca4bde868bb25ee846a4ff41df8a719fb8ee9f159ef0a036f54e6a09ed937bcc6884cf0
+ checksum: 13ce0a1055fdc4571df8d289c4e5dac983e22ac9b449af2c1418ea536b9176a5354d1a487cc0047789f0981053263675d50c7db7cba99588ecb7ff0045fba818
languageName: node
linkType: hard
@@ -25955,137 +25984,136 @@ __metadata:
languageName: node
linkType: hard
-"postcss-normalize-charset@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-charset@npm:5.1.0"
+"postcss-normalize-charset@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-charset@npm:6.0.0"
peerDependencies:
postcss: ^8.2.15
- checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4
+ checksum: 186a94083f6d41dbda884bf915ff7fe9d9d19828c50dbf02a7e00c90673bec52e5962afd648220598c40940fb1ed5b93bc25697c395cd38ef30b6fd04e48580e
languageName: node
linkType: hard
-"postcss-normalize-display-values@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-display-values@npm:5.1.0"
+"postcss-normalize-display-values@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-display-values@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86
+ checksum: 4f8da7cf817e4c66004d3b2d88603aeadc7f9b55caca1bbba27f45e81ae8c65db8ff252488c8fd9ebb3e5c62f85e475131dcee9754346320453bc2b40865afd9
languageName: node
linkType: hard
-"postcss-normalize-positions@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-positions@npm:5.1.0"
+"postcss-normalize-positions@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-positions@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 08a1f12cc8e192120c1ee14dc93e603546be507d826a75c2c6ef3224b5e3a17628a42a952317e8349b2708ffdef0560b84dcc20521104317eaa62291cca009f6
+ checksum: 34dedb07f906b28eb77c57be34899c5c694b81b91c6bfff1e6e9a251aa8f28fea0fdb35a7cdda0fc83e4248b078343a2d76e4485c3ef87f469b24332fa1788cd
languageName: node
linkType: hard
-"postcss-normalize-repeat-style@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-repeat-style@npm:5.1.0"
+"postcss-normalize-repeat-style@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-repeat-style@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 65176c37741d3321fd346586bf42c292a9dab1e4b77a1004d9cde2ae9e015f6fe330c57b44d0ca854a48bd7db0b169875b8d2b5ca501ac9b5381068c337aac19
+ checksum: a53b994bb6594f5c48bd7083a46e6a47c1cf02843bcb864d37e7919c08a6f1d7dbbfee8a6abc2afb5d15554b667abc69d696b90d43066ceb97f835e6c8272098
languageName: node
linkType: hard
-"postcss-normalize-string@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-string@npm:5.1.0"
+"postcss-normalize-string@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-string@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada
+ checksum: 3d55f31ec0d008e7c8e8db0dc03e6e4f2cf8365f6578a0929b7098753c9db3c7de56a134d011fb3c9d8af8b004f0776169194cdfa25654af4919634cdb6ba7b0
languageName: node
linkType: hard
-"postcss-normalize-timing-functions@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-timing-functions@npm:5.1.0"
+"postcss-normalize-timing-functions@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-timing-functions@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa
+ checksum: 67021374f8f18474788d8bc99d31af6a13efc5baf961c1e9f0c6b1e265fb21ac1ad56c489d988fcde9e0d049e9b62c8b0b350cc1e79d7d3bff9f00f7c97d6221
languageName: node
linkType: hard
-"postcss-normalize-unicode@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-unicode@npm:5.1.0"
+"postcss-normalize-unicode@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-unicode@npm:6.0.0"
dependencies:
- browserslist: ^4.16.6
+ browserslist: ^4.21.4
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 3570c90050f190811b5dbf7b4cf4f30f0b627c1ba5fbe5ad332e8b0aa7ef14b3d0aa2af1cb1074d0267aec8c9771e28866d867c8a8a0c433b6c34e50445f9c16
+ checksum: 0f246bf5511ae2294d8ec0decda6abee58c62e301a3a8f6542fa090bb426359caee156b96cc1e7f4b3a3f2cd9f62b410a446cf101e710d8fa71c704cfb057a5d
languageName: node
linkType: hard
-"postcss-normalize-url@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-normalize-url@npm:5.1.0"
- dependencies:
- normalize-url: ^6.0.1
- postcss-value-parser: ^4.2.0
- peerDependencies:
- postcss: ^8.2.15
- checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0
- languageName: node
- linkType: hard
-
-"postcss-normalize-whitespace@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-normalize-whitespace@npm:5.1.1"
+"postcss-normalize-url@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-url@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19
+ checksum: 93160c02e54c45cbe8ade7122bf34e25c41ac39656b2ddb15d342ce557efc17873fc6dd1439dd8d814152ebdfbba3ee2c16601d41b085ecaad73e6f2d037cd43
languageName: node
linkType: hard
-"postcss-ordered-values@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-ordered-values@npm:5.1.1"
+"postcss-normalize-whitespace@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-normalize-whitespace@npm:6.0.0"
dependencies:
- cssnano-utils: ^3.1.0
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: d56825ef03225ccaeff9704b86008d012b91b0ace4b219f6d443aca628b7f0a1da922abc4a3fb8ca802baf09320abaa983f278ac416e1caf2658d119491686a4
+ checksum: 77940955fb0b47b46468a3e17bb9b86eb2f2c572649271a4db600b981f68c9c1ed71197b58d7a351c1b2d1aee2eb79b1e11b3021eb28604fd1a8d0ded21dfb2a
languageName: node
linkType: hard
-"postcss-reduce-initial@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-reduce-initial@npm:5.1.0"
+"postcss-ordered-values@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-ordered-values@npm:6.0.0"
dependencies:
- browserslist: ^4.16.6
+ cssnano-utils: ^4.0.0
+ postcss-value-parser: ^4.2.0
+ peerDependencies:
+ postcss: ^8.2.15
+ checksum: 162d60e9fd7d6717457194e943ba63ed6d149ae3b4f150324e65b485312be5d1c99ae140e47698e9f8943967c1575b65c922081263a8fa22a2489ed705eb0202
+ languageName: node
+ linkType: hard
+
+"postcss-reduce-initial@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-reduce-initial@npm:6.0.0"
+ dependencies:
+ browserslist: ^4.21.4
caniuse-api: ^3.0.0
peerDependencies:
postcss: ^8.2.15
- checksum: 2cb10fa3fa7d7df9e4376df64d19177debd5cfe6d8fde52327d27de425eb28d5d85fa45c857cf7c0aed35d16455b6f4762b53959480f92a1dfa4b51a1d780a32
+ checksum: 988001da75b969733756d9cec9bb37cfae9a667c888c0394d8aa84af7fa6fe134cdd997b63d657900f72541310c5a396db3436367bf91908bc4c7f7ce965c511
languageName: node
linkType: hard
-"postcss-reduce-transforms@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-reduce-transforms@npm:5.1.0"
+"postcss-reduce-transforms@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-reduce-transforms@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
peerDependencies:
postcss: ^8.2.15
- checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f
+ checksum: 17c27b1858897ee37a4f80af0d76c5ce895466392acac1ead75cbb71ac290ab57b209f47d5d205f6ea60c1697109f09531de005ef17d8826d545bbc02891351a
languageName: node
linkType: hard
@@ -26135,7 +26163,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss-selector-parser@npm:^6.0.13":
+"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.13":
version: 6.0.13
resolution: "postcss-selector-parser@npm:6.0.13"
dependencies:
@@ -26155,16 +26183,6 @@ __metadata:
languageName: node
linkType: hard
-"postcss-selector-parser@npm:^6.0.9":
- version: 6.0.9
- resolution: "postcss-selector-parser@npm:6.0.9"
- dependencies:
- cssesc: ^3.0.0
- util-deprecate: ^1.0.2
- checksum: f8161ab4d3e5c76b8467189c6d164ba0f6b6e74677435f29e34caa1df01e052b582b4ae4f7468b2243c4befdd8bdcdb7685542d1b2fca8deae21b3e849c78802
- languageName: node
- linkType: hard
-
"postcss-sorting@npm:^7.0.1":
version: 7.0.1
resolution: "postcss-sorting@npm:7.0.1"
@@ -26174,26 +26192,26 @@ __metadata:
languageName: node
linkType: hard
-"postcss-svgo@npm:^5.1.0":
- version: 5.1.0
- resolution: "postcss-svgo@npm:5.1.0"
+"postcss-svgo@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-svgo@npm:6.0.0"
dependencies:
postcss-value-parser: ^4.2.0
- svgo: ^2.7.0
+ svgo: ^3.0.2
peerDependencies:
postcss: ^8.2.15
- checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd
+ checksum: 14c68b7c275dbbbbf1f954e313ff812dacea88970165d7859c1683e2530ea51cd333372b8c0d440d4e9525768f34a8dab5f0846d3445bbb478a87a99f69e9abb
languageName: node
linkType: hard
-"postcss-unique-selectors@npm:^5.1.1":
- version: 5.1.1
- resolution: "postcss-unique-selectors@npm:5.1.1"
+"postcss-unique-selectors@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "postcss-unique-selectors@npm:6.0.0"
dependencies:
postcss-selector-parser: ^6.0.5
peerDependencies:
postcss: ^8.2.15
- checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278
+ checksum: 5fbfeaf796c6442853ce3afd03ae8c306fcb83b0b7ee59cbdc9aad57a1e601e65a2a5efd1e25edaa5c7c62e05d3795f357fe95933de0868a78a5d1d1f541be34
languageName: node
linkType: hard
@@ -26233,17 +26251,6 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:^8.4.17":
- version: 8.4.18
- resolution: "postcss@npm:8.4.18"
- dependencies:
- nanoid: ^3.3.4
- picocolors: ^1.0.0
- source-map-js: ^1.0.2
- checksum: 9349fd99849b2e3d2e134ff949b7770ecb12375f352723ce2bcc06167eba3850ea7844c1b191a85cd915d6a396b4e8ee9a5267e6cc5d8d003d0cbc7a97555d39
- languageName: node
- linkType: hard
-
"postcss@npm:^8.4.24":
version: 8.4.25
resolution: "postcss@npm:8.4.25"
@@ -26549,9 +26556,9 @@ __metadata:
languageName: node
linkType: hard
-"protobufjs@npm:^6.11.3":
- version: 6.11.3
- resolution: "protobufjs@npm:6.11.3"
+"protobufjs@npm:^7.2.4":
+ version: 7.2.4
+ resolution: "protobufjs@npm:7.2.4"
dependencies:
"@protobufjs/aspromise": ^1.1.2
"@protobufjs/base64": ^1.1.2
@@ -26563,13 +26570,9 @@ __metadata:
"@protobufjs/path": ^1.1.2
"@protobufjs/pool": ^1.1.0
"@protobufjs/utf8": ^1.1.0
- "@types/long": ^4.0.1
"@types/node": ">=13.7.0"
- long: ^4.0.0
- bin:
- pbjs: bin/pbjs
- pbts: bin/pbts
- checksum: 4a6ce1964167e4c45c53fd8a312d7646415c777dd31b4ba346719947b88e61654912326101f927da387d6b6473ab52a7ea4f54d6f15d63b31130ce28e2e15070
+ long: ^5.0.0
+ checksum: a952cdf2a5e5250c16ae651b570849b6f5b20a5475c3eef63ffb290ad239aa2916adfc1cc676f7fc93c69f48113df268761c0c246f7f023118c85bdd1a170044
languageName: node
linkType: hard
@@ -27059,17 +27062,17 @@ __metadata:
languageName: node
linkType: hard
-"rc-tooltip@npm:5.3.1":
- version: 5.3.1
- resolution: "rc-tooltip@npm:5.3.1"
+"rc-tooltip@npm:6.0.1":
+ version: 6.0.1
+ resolution: "rc-tooltip@npm:6.0.1"
dependencies:
"@babel/runtime": ^7.11.2
+ "@rc-component/trigger": ^1.0.4
classnames: ^2.3.1
- rc-trigger: ^5.3.1
peerDependencies:
react: ">=16.9.0"
react-dom: ">=16.9.0"
- checksum: 93a99dd8f83ca6187cae7d09e498156e660331837f7ff16d6c50165e5cbc810d566552535d8c92c6fb3093f45cadfa0b62a03b9f78ba22e8b6123eda27333cf4
+ checksum: fe7f617a4f4e0085d8f5eb5e8da5598f0164841c841f62f77966706ae604491246441a469aeb44f1dec7001bb4716ee81d11ec646e8889f4164fcba3a024eea5
languageName: node
linkType: hard
@@ -27120,22 +27123,6 @@ __metadata:
languageName: node
linkType: hard
-"rc-trigger@npm:^5.3.1":
- version: 5.3.4
- resolution: "rc-trigger@npm:5.3.4"
- dependencies:
- "@babel/runtime": ^7.18.3
- classnames: ^2.2.6
- rc-align: ^4.0.0
- rc-motion: ^2.0.0
- rc-util: ^5.19.2
- peerDependencies:
- react: ">=16.9.0"
- react-dom: ">=16.9.0"
- checksum: 6ca7694a4cf064040b5e0fd9b4629b0e0a19ebb29c4eb5614ee9eb22b4193e21909171fd95e48be73a94e44f249cb9616d7670b696164620b722d3de6f280017
- languageName: node
- linkType: hard
-
"rc-util@npm:^4.0.4, rc-util@npm:^4.15.3, rc-util@npm:^4.4.0":
version: 4.21.1
resolution: "rc-util@npm:4.21.1"
@@ -27163,20 +27150,6 @@ __metadata:
languageName: node
linkType: hard
-"rc-util@npm:^5.19.2, rc-util@npm:^5.21.0, rc-util@npm:^5.21.2, rc-util@npm:^5.24.4":
- version: 5.24.4
- resolution: "rc-util@npm:5.24.4"
- dependencies:
- "@babel/runtime": ^7.18.3
- react-is: ^16.12.0
- shallowequal: ^1.1.0
- peerDependencies:
- react: ">=16.9.0"
- react-dom: ">=16.9.0"
- checksum: efda306dcf9eeb0df6d3a8d315d18ec73c653d463174355bd91d34f4d42acc092b2d6ffee47993312841ea4d13b4fe036c764a3a46fa935f307d51a8807e2c10
- languageName: node
- linkType: hard
-
"rc-util@npm:^5.2.1, rc-util@npm:^5.3.0":
version: 5.14.0
resolution: "rc-util@npm:5.14.0"
@@ -27191,6 +27164,20 @@ __metadata:
languageName: node
linkType: hard
+"rc-util@npm:^5.21.0, rc-util@npm:^5.21.2, rc-util@npm:^5.24.4":
+ version: 5.24.4
+ resolution: "rc-util@npm:5.24.4"
+ dependencies:
+ "@babel/runtime": ^7.18.3
+ react-is: ^16.12.0
+ shallowequal: ^1.1.0
+ peerDependencies:
+ react: ">=16.9.0"
+ react-dom: ">=16.9.0"
+ checksum: efda306dcf9eeb0df6d3a8d315d18ec73c653d463174355bd91d34f4d42acc092b2d6ffee47993312841ea4d13b4fe036c764a3a46fa935f307d51a8807e2c10
+ languageName: node
+ linkType: hard
+
"rc-util@npm:^5.27.0":
version: 5.28.0
resolution: "rc-util@npm:5.28.0"
@@ -27217,6 +27204,19 @@ __metadata:
languageName: node
linkType: hard
+"rc-util@npm:^5.33.0":
+ version: 5.34.1
+ resolution: "rc-util@npm:5.34.1"
+ dependencies:
+ "@babel/runtime": ^7.18.3
+ react-is: ^16.12.0
+ peerDependencies:
+ react: ">=16.9.0"
+ react-dom: ">=16.9.0"
+ checksum: ef4f0834db975ff77b1940c32f7ab75e201e06e16218dfc993066e994a0199330f433ab8587ab0a49101aa94ac009f8d553e3e8818185d9b6889e62791c77a16
+ languageName: node
+ linkType: hard
+
"rc-virtual-list@npm:^3.4.8":
version: 3.4.8
resolution: "rc-virtual-list@npm:3.4.8"
@@ -28810,16 +28810,6 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^2.0.0-next.3":
- version: 2.0.0-next.3
- resolution: "resolve@npm:2.0.0-next.3"
- dependencies:
- is-core-module: ^2.2.0
- path-parse: ^1.0.6
- checksum: f34b3b93ada77d64a6d590c06a83e198f3a827624c4ec972260905fa6c4d612164fbf0200d16d2beefea4ad1755b001f4a9a1293d8fc2322a8f7d6bf692c4ff5
- languageName: node
- linkType: hard
-
"resolve@npm:^2.0.0-next.4":
version: 2.0.0-next.4
resolution: "resolve@npm:2.0.0-next.4"
@@ -28856,16 +28846,6 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@^2.0.0-next.3#~builtin":
- version: 2.0.0-next.3
- resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=c3c19d"
- dependencies:
- is-core-module: ^2.2.0
- path-parse: ^1.0.6
- checksum: 21684b4d99a4877337cdbd5484311c811b3e8910edb5d868eec85c6e6550b0f570d911f9a384f9e176172d6713f2715bd0b0887fa512cb8c6aeece018de6a9f8
- languageName: node
- linkType: hard
-
"resolve@patch:resolve@^2.0.0-next.4#~builtin":
version: 2.0.0-next.4
resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=c3c19d"
@@ -29094,10 +29074,10 @@ __metadata:
languageName: node
linkType: hard
-"rudder-sdk-js@npm:2.25.0":
- version: 2.25.0
- resolution: "rudder-sdk-js@npm:2.25.0"
- checksum: f4ddc07760ae234219bfc804bdd6135dacc830246584b83a418b983cee6261670795e32c3e72c920f950a4e2017ee186a768656fa286b46c97a657795d9c71c2
+"rudder-sdk-js@npm:2.37.0":
+ version: 2.37.0
+ resolution: "rudder-sdk-js@npm:2.37.0"
+ checksum: df4e6a62a3c41ec9a616a2d1c3b2e0ee63aec345d6947c01b8b8e5aafa67f5ffd5cebfec0a8e8942c03070b5d7feb30f236896ef64932c30d7c8663b86d8de7a
languageName: node
linkType: hard
@@ -29270,6 +29250,18 @@ __metadata:
languageName: node
linkType: hard
+"schema-utils@npm:^4.0.1":
+ version: 4.2.0
+ resolution: "schema-utils@npm:4.2.0"
+ dependencies:
+ "@types/json-schema": ^7.0.9
+ ajv: ^8.9.0
+ ajv-formats: ^2.1.1
+ ajv-keywords: ^5.1.0
+ checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde
+ languageName: node
+ linkType: hard
+
"screenfull@npm:^5.1.0":
version: 5.1.0
resolution: "screenfull@npm:5.1.0"
@@ -29298,21 +29290,21 @@ __metadata:
languageName: node
linkType: hard
-"selecto@npm:1.22.0":
- version: 1.22.0
- resolution: "selecto@npm:1.22.0"
+"selecto@npm:1.26.0":
+ version: 1.26.0
+ resolution: "selecto@npm:1.26.0"
dependencies:
- "@daybrush/utils": ^1.7.1
+ "@daybrush/utils": ^1.13.0
"@egjs/children-differ": ^1.0.1
"@scena/dragscroll": ^1.4.0
"@scena/event-emitter": ^1.0.5
- css-styled: ^1.0.0
- css-to-mat: ^1.0.3
+ css-styled: ^1.0.8
+ css-to-mat: ^1.1.1
framework-utils: ^1.1.0
- gesto: ^1.15.1
+ gesto: ^1.19.1
keycon: ^1.2.0
overlap-area: ^1.1.0
- checksum: b62ac5710ff7d031f5f42745d97921642cb5b1b3ab07fcc37044fd580e0d483cb23bdb5b0631dfb1b464f02cfc5867f6acc50bf73b9873cf5b1a196df28d1329
+ checksum: 401e1c2b47aa96ad2c7e9878278b70dfd4a71861fc4616f345088d3e1e20a3b33f6cb731e0015a8b9e85581c4edf896785e5cb9217802262c5a2d179d78e003d
languageName: node
linkType: hard
@@ -30229,13 +30221,6 @@ __metadata:
languageName: node
linkType: hard
-"stable@npm:^0.1.8":
- version: 0.1.8
- resolution: "stable@npm:0.1.8"
- checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb
- languageName: node
- linkType: hard
-
"stack-generator@npm:^2.0.5":
version: 2.0.5
resolution: "stack-generator@npm:2.0.5"
@@ -30484,7 +30469,7 @@ __metadata:
languageName: node
linkType: hard
-"string.prototype.matchall@npm:^4.0.7, string.prototype.matchall@npm:^4.0.8":
+"string.prototype.matchall@npm:^4.0.8":
version: 4.0.8
resolution: "string.prototype.matchall@npm:4.0.8"
dependencies:
@@ -30707,15 +30692,15 @@ __metadata:
languageName: node
linkType: hard
-"stylehacks@npm:^5.1.0":
- version: 5.1.0
- resolution: "stylehacks@npm:5.1.0"
+"stylehacks@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "stylehacks@npm:6.0.0"
dependencies:
- browserslist: ^4.16.6
+ browserslist: ^4.21.4
postcss-selector-parser: ^6.0.4
peerDependencies:
postcss: ^8.2.15
- checksum: 310b3452c11fd443b0d327aa2d5b43ae7479407339204b7ad11cf2e16d33b690c1cbf47a21b737ef112411e53563f0f996c5fa3642d135c896329950a008277f
+ checksum: b6071ab5f4451576e3a445f7304b41c43329f84d7a7987a91442febaabc1de51e62f1e37c4f37fad21990d3f573a8110bd31e09f9df7b8628465e19b1cdc702b
languageName: node
linkType: hard
@@ -30829,10 +30814,10 @@ __metadata:
languageName: node
linkType: hard
-"stylis@npm:4.1.3":
- version: 4.1.3
- resolution: "stylis@npm:4.1.3"
- checksum: d04dbffcb9bf2c5ca8d8dc09534203c75df3bf711d33973ea22038a99cc475412a350b661ebd99cbc01daa50d7eedcf0d130d121800eb7318759a197023442a6
+"stylis@npm:4.2.0":
+ version: 4.2.0
+ resolution: "stylis@npm:4.2.0"
+ checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584
languageName: node
linkType: hard
@@ -30901,20 +30886,19 @@ __metadata:
languageName: node
linkType: hard
-"svgo@npm:^2.7.0":
- version: 2.8.0
- resolution: "svgo@npm:2.8.0"
+"svgo@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "svgo@npm:3.0.2"
dependencies:
"@trysound/sax": 0.2.0
commander: ^7.2.0
- css-select: ^4.1.3
- css-tree: ^1.1.3
- csso: ^4.2.0
+ css-select: ^5.1.0
+ css-tree: ^2.2.1
+ csso: ^5.0.5
picocolors: ^1.0.0
- stable: ^0.1.8
bin:
svgo: bin/svgo
- checksum: b92f71a8541468ffd0b81b8cdb36b1e242eea320bf3c1a9b2c8809945853e9d8c80c19744267eb91cabf06ae9d5fff3592d677df85a31be4ed59ff78534fa420
+ checksum: 381ba14aa782e71ab7033227634a3041c11fa3e2769aeaf0df43a08a615de61925108e34f55af6e7c5146f4a3109e78deabb4fa9d687e36d45d1f848b4e23d17
languageName: node
linkType: hard
@@ -33600,7 +33584,7 @@ __metadata:
languageName: node
linkType: hard
-"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2":
+"yaml@npm:^1.10.0, yaml@npm:^1.7.2":
version: 1.10.2
resolution: "yaml@npm:1.10.2"
checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f