Chore: Reorg packages (#20111)

Primarily- moving majority of the types and utils from @grafana/ui to @grafana/data

* Move types from grafana-ui to grafana-data

* Move valueFormats to grafana-data

* Move utils from grafana-ui to grafana-data

* Update imports in grafana-ui

* revert data's tsconfig change

* Update imports in grafana-runtime

* Fix import paths in grafana-ui

* Move rxjs to devDeps

* Core import updates batch 1

* Import updates batch 2

* Imports fix batch 3

* Imports fixes batch i don't know

* Fix imorts in grafana-toolkit

* Fix imports after master merge
This commit is contained in:
Dominik Prokop
2019-10-31 10:48:05 +01:00
committed by GitHub
parent 3e8c00dad1
commit 9b7748ec13
379 changed files with 984 additions and 892 deletions

View File

@@ -8,7 +8,7 @@ import appEvents from 'app/core/app_events';
import { BackendSrv } from 'app/core/services/backend_srv';
import { DashboardSrv } from '../dashboard/services/DashboardSrv';
import DatasourceSrv from '../plugins/datasource_srv';
import { DataQuery } from '@grafana/ui/src/types/datasource';
import { DataQuery } from '@grafana/data';
import { PanelModel } from 'app/features/dashboard/state';
import { getDefaultCondition } from './getAlertingValidationMessage';
import { CoreEvents } from 'app/types';

View File

@@ -1,6 +1,5 @@
import { DataSourceSrv } from '@grafana/runtime';
import { DataSourceApi, PluginMeta } from '@grafana/ui';
import { DataTransformerConfig } from '@grafana/data';
import { DataSourceApi, PluginMeta, DataTransformerConfig } from '@grafana/data';
import { ElasticsearchQuery } from '../../plugins/datasource/elasticsearch/types';
import { getAlertingValidationMessage } from './getAlertingValidationMessage';

View File

@@ -1,4 +1,4 @@
import { DataQuery } from '@grafana/ui';
import { DataQuery } from '@grafana/data';
import { DataSourceSrv } from '@grafana/runtime';
import { DataTransformerConfig } from '@grafana/data';

View File

@@ -14,8 +14,7 @@ import { DashboardModel } from '../dashboard/state/DashboardModel';
import DatasourceSrv from '../plugins/datasource_srv';
import { BackendSrv } from 'app/core/services/backend_srv';
import { TimeSrv } from '../dashboard/services/TimeSrv';
import { DataSourceApi, PanelEvents } from '@grafana/ui';
import { AnnotationEvent, AppEvents } from '@grafana/data';
import { DataSourceApi, PanelEvents, AnnotationEvent, AppEvents } from '@grafana/data';
import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';
export class AnnotationsSrv {

View File

@@ -9,7 +9,7 @@ import config from 'app/core/config';
import { DashboardExporter } from './DashboardExporter';
import { DashboardModel } from '../../state/DashboardModel';
import { DatasourceSrv } from 'app/features/plugins/datasource_srv';
import { PanelPluginMeta } from '@grafana/ui';
import { PanelPluginMeta } from '@grafana/data';
describe('given dashboard with repeated panels', () => {
let dash: any, exported: any;

View File

@@ -4,7 +4,7 @@ import config from 'app/core/config';
import { DashboardModel } from '../../state/DashboardModel';
import DatasourceSrv from 'app/features/plugins/datasource_srv';
import { PanelModel } from 'app/features/dashboard/state';
import { PanelPluginMeta } from '@grafana/ui';
import { PanelPluginMeta } from '@grafana/data';
interface Input {
name: string;

View File

@@ -4,7 +4,7 @@ import { iconMap } from './DashLinksEditorCtrl';
import { LinkSrv } from 'app/features/panel/panellinks/link_srv';
import { BackendSrv } from 'app/core/services/backend_srv';
import { DashboardSrv } from '../../services/DashboardSrv';
import { PanelEvents } from '@grafana/ui';
import { PanelEvents } from '@grafana/data';
import { CoreEvents } from 'app/types';
import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';

View File

@@ -11,7 +11,7 @@ import { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT } from 'app/core
import { DashboardPanel } from './DashboardPanel';
import { DashboardModel, PanelModel } from '../state';
import { CoreEvents } from 'app/types';
import { PanelEvents } from '@grafana/ui';
import { PanelEvents } from '@grafana/data';
import { panelAdded, panelRemoved } from '../state/PanelModel';
let lastGridWidth = 1200;

View File

@@ -15,7 +15,7 @@ import { PanelResizer } from './PanelResizer';
// Types
import { PanelModel, DashboardModel } from '../state';
import { PanelPluginMeta, PanelPlugin } from '@grafana/ui/src/types/panel';
import { PanelPluginMeta, PanelPlugin } from '@grafana/data';
import { AutoSizer } from 'react-virtualized';
export interface Props {

View File

@@ -4,7 +4,7 @@ import classNames from 'classnames';
import { Unsubscribable } from 'rxjs';
// Components
import { PanelHeader } from './PanelHeader/PanelHeader';
import { ErrorBoundary, PanelData, PanelPlugin } from '@grafana/ui';
import { ErrorBoundary } from '@grafana/ui';
// Utils & Services
import { getTimeSrv, TimeSrv } from '../services/TimeSrv';
import { applyPanelTimeOverrides, calculateInnerPanelHeight } from 'app/features/dashboard/utils/panel';
@@ -14,8 +14,17 @@ import templateSrv from 'app/features/templating/template_srv';
import config from 'app/core/config';
// Types
import { DashboardModel, PanelModel } from '../state';
import { LoadingState, ScopedVars, AbsoluteTimeRange, DefaultTimeRange, toUtc, toDataFrameDTO } from '@grafana/data';
import { PanelEvents } from '@grafana/ui';
import {
LoadingState,
ScopedVars,
AbsoluteTimeRange,
DefaultTimeRange,
toUtc,
toDataFrameDTO,
PanelEvents,
PanelData,
PanelPlugin,
} from '@grafana/data';
const DEFAULT_PLUGIN_ERROR = 'Error in plugin';

View File

@@ -3,7 +3,7 @@ import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
import { PanelHeaderMenuItem } from './PanelHeaderMenuItem';
import { getPanelMenu } from 'app/features/dashboard/utils/getPanelMenu';
import { PanelMenuItem } from '@grafana/ui';
import { PanelMenuItem } from '@grafana/data';
export interface Props {
panel: PanelModel;

View File

@@ -1,5 +1,5 @@
import React, { FC } from 'react';
import { PanelMenuItem } from '@grafana/ui';
import { PanelMenuItem } from '@grafana/data';
interface Props {
children: any;

View File

@@ -4,7 +4,8 @@ import React, { PureComponent, ReactNode } from 'react';
// Types
import { AppNotificationSeverity } from 'app/types';
import { PanelProps, PanelPlugin, PluginType, PanelPluginMeta, Alert } from '@grafana/ui';
import { Alert } from '@grafana/ui';
import { PanelProps, PanelPlugin, PluginType, PanelPluginMeta } from '@grafana/data';
interface Props {
title: string;

View File

@@ -2,7 +2,8 @@ import React, { PureComponent } from 'react';
import classNames from 'classnames';
import { hot } from 'react-hot-loader';
import { connect } from 'react-redux';
import { PanelPlugin, PanelPluginMeta, Tooltip } from '@grafana/ui';
import { Tooltip } from '@grafana/ui';
import { PanelPlugin, PanelPluginMeta } from '@grafana/data';
import { AngularComponent, config } from '@grafana/runtime';
import { QueriesTab } from './QueriesTab';

View File

@@ -7,15 +7,7 @@ import { EditorTabBody, EditorToolbarView } from './EditorTabBody';
import { DataSourcePicker } from 'app/core/components/Select/DataSourcePicker';
import { QueryInspector } from './QueryInspector';
import { QueryOptions } from './QueryOptions';
import {
PanelOptionsGroup,
TransformationsEditor,
DataQuery,
DataSourceSelectItem,
PanelData,
AlphaNotice,
PluginState,
} from '@grafana/ui';
import { PanelOptionsGroup, TransformationsEditor, AlphaNotice } from '@grafana/ui';
import { QueryEditorRows } from './QueryEditorRows';
// Services
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
@@ -24,7 +16,15 @@ import config from 'app/core/config';
// Types
import { PanelModel } from '../state/PanelModel';
import { DashboardModel } from '../state/DashboardModel';
import { LoadingState, DataTransformerConfig, DefaultTimeRange } from '@grafana/data';
import {
LoadingState,
DataTransformerConfig,
DefaultTimeRange,
DataSourceSelectItem,
DataQuery,
PanelData,
PluginState,
} from '@grafana/data';
import { PluginHelp } from 'app/core/components/PluginHelp/PluginHelp';
import { addQuery } from 'app/core/utils/query';
import { Unsubscribable } from 'rxjs';

View File

@@ -1,5 +1,4 @@
import { LoadingState, toDataFrame, dateTime } from '@grafana/data';
import { PanelData, DataQueryRequest } from '@grafana/ui';
import { LoadingState, toDataFrame, dateTime, PanelData, DataQueryRequest } from '@grafana/data';
import { filterPanelDataToQuery } from './QueryEditorRow';
function makePretendRequest(requestId: string, subRequests?: DataQueryRequest[]): DataQueryRequest {

View File

@@ -9,8 +9,17 @@ import { Emitter } from 'app/core/utils/emitter';
import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
// Types
import { PanelModel } from '../state/PanelModel';
import { DataQuery, DataSourceApi, PanelData, DataQueryRequest, ErrorBoundaryAlert, PanelEvents } from '@grafana/ui';
import { TimeRange, LoadingState, toLegacyResponseData } from '@grafana/data';
import { ErrorBoundaryAlert } from '@grafana/ui';
import {
DataQuery,
DataSourceApi,
PanelData,
DataQueryRequest,
PanelEvents,
TimeRange,
LoadingState,
toLegacyResponseData,
} from '@grafana/data';
import { DashboardModel } from '../state/DashboardModel';
interface Props {

View File

@@ -6,7 +6,7 @@ import _ from 'lodash';
// Types
import { PanelModel } from '../state/PanelModel';
import { DataQuery, PanelData, DataSourceSelectItem } from '@grafana/ui';
import { DataQuery, PanelData, DataSourceSelectItem } from '@grafana/data';
import { DashboardModel } from '../state/DashboardModel';
import { QueryEditorRow } from './QueryEditorRow';
import { addQuery } from 'app/core/utils/query';

View File

@@ -1,9 +1,9 @@
import React, { PureComponent } from 'react';
import appEvents from 'app/core/app_events';
import { CopyToClipboard } from 'app/core/components/CopyToClipboard/CopyToClipboard';
import { LoadingPlaceholder, JSONFormatter, PanelEvents } from '@grafana/ui';
import { LoadingPlaceholder, JSONFormatter } from '@grafana/ui';
import { CoreEvents } from 'app/types';
import { AppEvents } from '@grafana/data';
import { AppEvents, PanelEvents } from '@grafana/data';
interface DsQuery {
isLoading: boolean;

View File

@@ -2,18 +2,10 @@
import React, { PureComponent, ChangeEvent, FocusEvent, ReactText } from 'react';
// Utils
import { rangeUtil } from '@grafana/data';
import { rangeUtil, DataSourceSelectItem } from '@grafana/data';
// Components
import {
DataSourceSelectItem,
EventsWithValidation,
Input,
InputStatus,
Switch,
ValidationEvents,
FormLabel,
} from '@grafana/ui';
import { EventsWithValidation, Input, InputStatus, Switch, ValidationEvents, FormLabel } from '@grafana/ui';
import { DataSourceOption } from './DataSourceOption';
// Types

View File

@@ -14,10 +14,9 @@ import { FadeIn } from 'app/core/components/Animations/FadeIn';
import { PanelModel, DashboardModel } from '../state';
import { VizPickerSearch } from './VizPickerSearch';
import PluginStateinfo from 'app/features/plugins/PluginStateInfo';
import { PanelPlugin, PanelPluginMeta, PanelData } from '@grafana/ui';
import { PanelCtrl } from 'app/plugins/sdk';
import { Unsubscribable } from 'rxjs';
import { LoadingState, DefaultTimeRange } from '@grafana/data';
import { PanelPlugin, PanelPluginMeta, PanelData, LoadingState, DefaultTimeRange } from '@grafana/data';
interface Props {
panel: PanelModel;

View File

@@ -1,7 +1,7 @@
import React, { PureComponent } from 'react';
import { FilterInput } from 'app/core/components/FilterInput/FilterInput';
import { PanelPluginMeta } from '@grafana/ui';
import { PanelPluginMeta } from '@grafana/data';
interface Props {
plugin: PanelPluginMeta;

View File

@@ -2,7 +2,8 @@ import React, { PureComponent } from 'react';
import config from 'app/core/config';
import VizTypePickerPlugin from './VizTypePickerPlugin';
import { PanelPluginMeta, EmptySearchResult } from '@grafana/ui';
import { EmptySearchResult } from '@grafana/ui';
import { PanelPluginMeta } from '@grafana/data';
export interface Props {
current: PanelPluginMeta;

View File

@@ -1,6 +1,6 @@
import React from 'react';
import classNames from 'classnames';
import { PanelPluginMeta } from '@grafana/ui';
import { PanelPluginMeta } from '@grafana/data';
interface Props {
isCurrent: boolean;

View File

@@ -8,7 +8,7 @@ import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';
import { BackendSrv } from 'app/core/services/backend_srv';
import { ILocationService } from 'angular';
import { AppEvents } from '@grafana/data';
import { PanelEvents } from '@grafana/ui';
import { PanelEvents } from '@grafana/data';
interface DashboardSaveOptions {
folderId?: number;

View File

@@ -15,7 +15,7 @@ import { PanelModel, GridPos, panelAdded, panelRemoved } from './PanelModel';
import { DashboardMigrator } from './DashboardMigrator';
import { TimeRange, TimeZone, AppEvent } from '@grafana/data';
import { UrlQueryValue } from '@grafana/runtime';
import { PanelEvents } from '@grafana/ui';
import { PanelEvents } from '@grafana/data';
import { KIOSK_MODE_TV, DashboardMeta, CoreEvents } from 'app/types';
import { toUtc, DateTimeInput, dateTime, isDateTime } from '@grafana/data';

View File

@@ -1,6 +1,6 @@
import { PanelModel } from './PanelModel';
import { getPanelPlugin } from '../../plugins/__mocks__/pluginMocks';
import { PanelEvents } from '@grafana/ui';
import { PanelEvents } from '@grafana/data';
class TablePanelCtrl {}

View File

@@ -4,8 +4,15 @@ import _ from 'lodash';
import { Emitter } from 'app/core/utils/emitter';
import { getNextRefIdChar } from 'app/core/utils/query';
// Types
import { DataQuery, DataQueryResponseData, PanelPlugin, PanelEvents } from '@grafana/ui';
import { DataLink, DataTransformerConfig, ScopedVars } from '@grafana/data';
import {
DataQuery,
DataQueryResponseData,
PanelPlugin,
PanelEvents,
DataLink,
DataTransformerConfig,
ScopedVars,
} from '@grafana/data';
import config from 'app/core/config';

View File

@@ -1,6 +1,5 @@
import { PanelQueryRunner } from './PanelQueryRunner';
import { PanelData, DataQueryRequest } from '@grafana/ui';
import { dateTime, ScopedVars } from '@grafana/data';
import { PanelData, DataQueryRequest, dateTime, ScopedVars } from '@grafana/data';
import { PanelModel } from './PanelModel';
jest.mock('app/core/services/backend_srv');

View File

@@ -12,8 +12,17 @@ import { runRequest, preProcessPanelData } from './runRequest';
import { runSharedRequest, isSharedDashboardQuery } from '../../../plugins/datasource/dashboard';
// Types
import { PanelData, DataQuery, DataQueryRequest, DataSourceApi, DataSourceJsonData } from '@grafana/ui';
import { TimeRange, DataTransformerConfig, transformDataFrame, ScopedVars } from '@grafana/data';
import {
PanelData,
DataQuery,
DataQueryRequest,
DataSourceApi,
DataSourceJsonData,
TimeRange,
DataTransformerConfig,
transformDataFrame,
ScopedVars,
} from '@grafana/data';
export interface QueryRunnerOptions<
TQuery extends DataQuery = DataQuery,

View File

@@ -24,7 +24,7 @@ import {
import { DashboardRouteInfo, StoreState, ThunkDispatch, ThunkResult, DashboardDTO, ExploreItemState } from 'app/types';
import { DashboardModel } from './DashboardModel';
import { resetExploreAction } from 'app/features/explore/state/actionTypes';
import { DataQuery } from '@grafana/ui';
import { DataQuery } from '@grafana/data';
export interface InitDashboardArgs {
$injector: any;

View File

@@ -1,5 +1,12 @@
import { DataFrame, LoadingState, dateTime } from '@grafana/data';
import { PanelData, DataSourceApi, DataQueryRequest, DataQueryResponse } from '@grafana/ui';
import {
DataFrame,
LoadingState,
dateTime,
PanelData,
DataSourceApi,
DataQueryRequest,
DataQueryResponse,
} from '@grafana/data';
import { Subscriber, Observable, Subscription } from 'rxjs';
import { runRequest } from './runRequest';
import { deepFreeze } from '../../../../test/core/redux/reducerTester';

View File

@@ -12,8 +12,12 @@ import {
DataQueryResponse,
DataQueryResponseData,
DataQueryError,
} from '@grafana/ui';
import { LoadingState, dateMath, toDataFrame, DataFrame, guessFieldTypes } from '@grafana/data';
LoadingState,
dateMath,
toDataFrame,
DataFrame,
guessFieldTypes,
} from '@grafana/data';
import { ExpressionDatasourceID, expressionDatasource } from 'app/features/expressions/ExpressionDatasource';
type MapOfResponsePackets = { [str: string]: DataQueryResponse };

View File

@@ -4,7 +4,7 @@ import { store } from 'app/store/store';
import { removePanel, duplicatePanel, copyPanel, editPanelJson, sharePanel } from 'app/features/dashboard/utils/panel';
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
import { PanelMenuItem } from '@grafana/ui';
import { PanelMenuItem } from '@grafana/data';
export const getPanelMenu = (dashboard: DashboardModel, panel: PanelModel) => {
const onViewPanel = () => {

View File

@@ -1,7 +1,7 @@
import React from 'react';
import { shallow } from 'enzyme';
import { DataSourceDashboards, Props } from './DataSourceDashboards';
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
import { NavModel } from '@grafana/data';
import { PluginDashboard } from 'app/types';

View File

@@ -17,7 +17,7 @@ import { getDataSource } from './state/selectors';
// Types
import { PluginDashboard, StoreState } from 'app/types';
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
import { NavModel } from '@grafana/data';
export interface Props {

View File

@@ -6,7 +6,7 @@ import classNames from 'classnames';
import DataSourcesListItem from './DataSourcesListItem';
// Types
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
import { LayoutMode, LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';
export interface Props {

View File

@@ -1,5 +1,5 @@
import React, { PureComponent } from 'react';
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
export interface Props {
dataSource: DataSourceSettings;

View File

@@ -1,7 +1,7 @@
import React from 'react';
import { shallow } from 'enzyme';
import { DataSourcesListPage, Props } from './DataSourcesListPage';
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
import { NavModel } from '@grafana/data';
import { LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';
import { getMockDataSources } from './__mocks__/dataSourcesMocks';

View File

@@ -10,7 +10,7 @@ import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';
import DataSourcesList from './DataSourcesList';
// Types
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
import { NavModel } from '@grafana/data';
import { StoreState } from 'app/types';
import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector';

View File

@@ -6,8 +6,8 @@ import { StoreState } from 'app/types';
import { addDataSource, loadDataSourceTypes, setDataSourceTypeSearchQuery } from './state/actions';
import { getDataSourceTypes } from './state/selectors';
import { FilterInput } from 'app/core/components/FilterInput/FilterInput';
import { DataSourcePluginMeta, List, PluginType } from '@grafana/ui';
import { NavModel } from '@grafana/data';
import { List } from '@grafana/ui';
import { DataSourcePluginMeta, NavModel, PluginType } from '@grafana/data';
export interface Props {
navModel: NavModel;

View File

@@ -1,4 +1,4 @@
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
export const getMockDataSources = (amount: number) => {
const dataSources = [];

View File

@@ -1,4 +1,4 @@
import { DataSourceSettings } from '@grafana/ui';
import { DataSourceSettings } from '@grafana/data';
export function createDatasourceSettings<T>(jsonData: T): DataSourceSettings<T> {
return {

View File

@@ -1,8 +1,7 @@
import React from 'react';
import { shallow } from 'enzyme';
import { DataSourceSettingsPage, Props } from './DataSourceSettingsPage';
import { DataSourceSettings, DataSourcePlugin, DataSourceConstructor } from '@grafana/ui';
import { NavModel } from '@grafana/data';
import { DataSourceSettings, DataSourcePlugin, DataSourceConstructor, NavModel } from '@grafana/data';
import { getMockDataSource } from '../__mocks__/dataSourcesMocks';
import { getMockPlugin } from '../../plugins/__mocks__/pluginMocks';
import { setDataSourceName, setIsDefault, dataSourceLoaded } from '../state/actions';

View File

@@ -31,7 +31,7 @@ import { getRouteParamsId } from 'app/core/selectors/location';
// Types
import { StoreState, CoreEvents } from 'app/types/';
import { UrlQueryMap } from '@grafana/runtime';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/ui';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/data';
import { NavModel } from '@grafana/data';
import { getDataSourceLoadingNav } from '../state/navModel';
import PluginStateinfo from 'app/features/plugins/PluginStateInfo';

View File

@@ -7,7 +7,7 @@ import {
DataSourceApi,
DataQuery,
DataSourceJsonData,
} from '@grafana/ui';
} from '@grafana/data';
import { getAngularLoader, AngularComponent } from '@grafana/runtime';
export type GenericDataSourcePlugin = DataSourcePlugin<DataSourceApi<DataQuery, DataSourceJsonData>>;

View File

@@ -5,7 +5,7 @@ import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector';
import { updateLocation, updateNavIndex, UpdateNavIndexAction } from 'app/core/actions';
import { buildNavModel } from './navModel';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/ui';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/data';
import { StoreState } from 'app/types';
import { LocationUpdate } from '@grafana/runtime';
import { actionCreatorFactory } from 'app/core/redux';

View File

@@ -1,5 +1,4 @@
import { DataSourceSettings, PluginType, PluginInclude } from '@grafana/ui';
import { NavModel, NavModelItem } from '@grafana/data';
import { DataSourceSettings, PluginType, PluginInclude, NavModel, NavModelItem } from '@grafana/data';
import config from 'app/core/config';
import { GenericDataSourcePlugin } from '../settings/PluginSettings';

View File

@@ -15,7 +15,7 @@ import {
import { getMockDataSources, getMockDataSource } from '../__mocks__/dataSourcesMocks';
import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
import { DataSourcesState } from 'app/types';
import { PluginMetaInfo, PluginType, PluginMeta } from '@grafana/ui';
import { PluginMetaInfo, PluginType, PluginMeta } from '@grafana/data';
const mockPlugin = () =>
({

View File

@@ -1,5 +1,5 @@
import { DataSourcesState } from 'app/types';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/ui';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/data';
import {
dataSourceLoaded,
dataSourcesLoaded,

View File

@@ -1,4 +1,4 @@
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/ui';
import { DataSourceSettings, DataSourcePluginMeta } from '@grafana/data';
import { DataSourcesState } from '../../../types/datasources';
import { UrlQueryValue } from '@grafana/runtime';

View File

@@ -1,7 +1,7 @@
import React, { useContext } from 'react';
import { Select, GrafanaTheme, ThemeContext } from '@grafana/ui';
import { Select, ThemeContext } from '@grafana/ui';
import { css, cx } from 'emotion';
import { SelectableValue } from '@grafana/data';
import { GrafanaTheme, SelectableValue } from '@grafana/data';
const getStyles = (theme: GrafanaTheme) => ({
keyValueContainer: css`

View File

@@ -1,6 +1,6 @@
import React from 'react';
import { mount, shallow } from 'enzyme';
import { DataSourceApi } from '@grafana/ui';
import { DataSourceApi } from '@grafana/data';
import { AdHocFilterField, DEFAULT_REMOVE_FILTER_VALUE, KeyValuePair, Props } from './AdHocFilterField';
import { AdHocFilter } from './AdHocFilter';

View File

@@ -1,6 +1,6 @@
import React from 'react';
import _ from 'lodash';
import { DataSourceApi, DataQuery, DataSourceJsonData } from '@grafana/ui';
import { DataSourceApi, DataQuery, DataSourceJsonData } from '@grafana/data';
import { AdHocFilter } from './AdHocFilter';
export const DEFAULT_REMOVE_FILTER_VALUE = '-- remove filter --';

View File

@@ -1,5 +1,5 @@
import React, { FunctionComponent } from 'react';
import { DataQueryError } from '@grafana/ui';
import { DataQueryError } from '@grafana/data';
import { FadeIn } from 'app/core/components/Animations/FadeIn';
import { getFirstQueryErrorWithoutRefId, getValueWithRefId } from 'app/core/utils/explore';

View File

@@ -9,7 +9,7 @@ import memoizeOne from 'memoize-one';
// Services & Utils
import store from 'app/core/store';
// Components
import { ErrorBoundaryAlert, DataQuery, ExploreStartPageProps, DataSourceApi, PanelData } from '@grafana/ui';
import { ErrorBoundaryAlert } from '@grafana/ui';
import LogsContainer from './LogsContainer';
import QueryRows from './QueryRows';
import TableContainer from './TableContainer';
@@ -25,7 +25,16 @@ import {
toggleGraph,
} from './state/actions';
// Types
import { RawTimeRange, GraphSeriesXY, TimeZone, AbsoluteTimeRange } from '@grafana/data';
import {
DataQuery,
ExploreStartPageProps,
DataSourceApi,
PanelData,
RawTimeRange,
GraphSeriesXY,
TimeZone,
AbsoluteTimeRange,
} from '@grafana/data';
import {
ExploreItemState,
ExploreUrlState,

View File

@@ -1,9 +1,8 @@
import React, { PureComponent } from 'react';
import { css, cx } from 'emotion';
import { TimeZone, AbsoluteTimeRange, GraphSeriesXY, dateTimeForTimeZone } from '@grafana/data';
import { GrafanaTheme, TimeZone, AbsoluteTimeRange, GraphSeriesXY, dateTimeForTimeZone } from '@grafana/data';
import {
GrafanaTheme,
selectThemeVariant,
Themeable,
GraphWithLegend,

View File

@@ -7,16 +7,8 @@ import classNames from 'classnames';
import { css } from 'emotion';
import { ExploreId, ExploreItemState, ExploreMode } from 'app/types/explore';
import {
DataSourceSelectItem,
ToggleButtonGroup,
ToggleButton,
DataQuery,
Tooltip,
ButtonSelect,
SetInterval,
} from '@grafana/ui';
import { RawTimeRange, TimeZone, TimeRange } from '@grafana/data';
import { ToggleButtonGroup, ToggleButton, Tooltip, ButtonSelect, SetInterval } from '@grafana/ui';
import { RawTimeRange, TimeZone, TimeRange, DataSourceSelectItem, DataQuery } from '@grafana/data';
import { DataSourcePicker } from 'app/core/components/Select/DataSourcePicker';
import { StoreState } from 'app/types/store';
import {

View File

@@ -2,8 +2,8 @@ import React, { PureComponent } from 'react';
import { css, cx } from 'emotion';
import tinycolor from 'tinycolor2';
import { Themeable, withTheme, GrafanaTheme, getLogRowStyles } from '@grafana/ui';
import { LogsModel, LogRowModel, TimeZone } from '@grafana/data';
import { Themeable, withTheme, getLogRowStyles } from '@grafana/ui';
import { GrafanaTheme, LogsModel, LogRowModel, TimeZone } from '@grafana/data';
import ElapsedTime from './ElapsedTime';

View File

@@ -6,7 +6,8 @@ import tinycolor from 'tinycolor2';
import { CSSTransition } from 'react-transition-group';
import { ResponsiveButton } from './ResponsiveButton';
import { GrafanaTheme, useTheme, Tooltip } from '@grafana/ui';
import { useTheme, Tooltip } from '@grafana/ui';
import { GrafanaTheme } from '@grafana/data';
const getStyles = memoizeOne((theme: GrafanaTheme) => {
const orangeLighter = tinycolor(theme.colors.orangeDark)

View File

@@ -1,9 +1,10 @@
import React, { PureComponent } from 'react';
import { hot } from 'react-hot-loader';
import { connect } from 'react-redux';
import { DataSourceApi, Collapse } from '@grafana/ui';
import { Collapse } from '@grafana/ui';
import {
DataSourceApi,
RawTimeRange,
LogLevel,
TimeZone,

View File

@@ -7,7 +7,7 @@ import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
// Types
import { Emitter } from 'app/core/utils/emitter';
import { DataQuery } from '@grafana/ui';
import { DataQuery } from '@grafana/data';
import { TimeRange } from '@grafana/data';
import 'app/features/plugins/plugin_loader';
import { dateTime } from '@grafana/data';

View File

@@ -12,8 +12,17 @@ import { QueryRowActions } from './QueryRowActions';
import { changeQuery, modifyQueries, runQueries, addQueryRow } from './state/actions';
// Types
import { StoreState } from 'app/types';
import { TimeRange, AbsoluteTimeRange, LoadingState } from '@grafana/data';
import { DataQuery, DataSourceApi, QueryFixAction, PanelData, HistoryItem } from '@grafana/ui';
import {
DataQuery,
DataSourceApi,
QueryFixAction,
PanelData,
HistoryItem,
TimeRange,
AbsoluteTimeRange,
LoadingState,
} from '@grafana/data';
import { ExploreItemState, ExploreId, ExploreMode } from 'app/types/explore';
import { Emitter } from 'app/core/utils/emitter';
import { highlightLogsExpressionAction, removeQueryRowAction } from './state/actionTypes';

View File

@@ -1,8 +1,7 @@
import React from 'react';
import { shallow } from 'enzyme';
import { LoadingState, TimeRange } from '@grafana/data';
import { PanelData } from '@grafana/ui';
import { LoadingState, TimeRange, PanelData } from '@grafana/data';
import QueryStatus from './QueryStatus';

View File

@@ -1,8 +1,7 @@
import React, { PureComponent } from 'react';
import ElapsedTime from './ElapsedTime';
import { LoadingState } from '@grafana/data';
import { PanelData } from '@grafana/ui';
import { PanelData, LoadingState } from '@grafana/data';
function formatLatency(value: number) {
return `${(value / 1000).toFixed(1)}s`;

View File

@@ -2,10 +2,8 @@ import React from 'react';
import classNames from 'classnames';
import { css } from 'emotion';
import { GrafanaTheme, useTheme, stylesFactory } from '@grafana/ui';
//Components
import { Tooltip } from '@grafana/ui';
import { Tooltip, useTheme, stylesFactory } from '@grafana/ui';
import { GrafanaTheme } from '@grafana/data';
const getStyles = stylesFactory((theme: GrafanaTheme) => {
return {

View File

@@ -1,9 +1,19 @@
// Types
import { Unsubscribable } from 'rxjs';
import { Emitter } from 'app/core/core';
import { DataQuery, DataSourceSelectItem, DataSourceApi, QueryFixAction, PanelData, HistoryItem } from '@grafana/ui';
import { LogLevel, TimeRange, LoadingState, AbsoluteTimeRange } from '@grafana/data';
import {
DataQuery,
DataSourceSelectItem,
DataSourceApi,
QueryFixAction,
PanelData,
HistoryItem,
LogLevel,
TimeRange,
LoadingState,
AbsoluteTimeRange,
} from '@grafana/data';
import { ExploreId, ExploreItemState, ExploreUIState, ExploreMode } from 'app/types/explore';
import { actionCreatorFactory, ActionOf } from 'app/core/redux/actionCreatorFactory';

View File

@@ -12,8 +12,7 @@ import {
import { Emitter } from 'app/core/core';
import { ActionOf } from 'app/core/redux/actionCreatorFactory';
import { makeInitialUpdateState } from './reducers';
import { DataQuery } from '@grafana/ui/src/types/datasource';
import { DefaultTimeZone, RawTimeRange, LogsDedupStrategy, toUtc } from '@grafana/data';
import { DataQuery, DefaultTimeZone, RawTimeRange, LogsDedupStrategy, toUtc } from '@grafana/data';
jest.mock('app/features/plugins/datasource_srv', () => ({
getDatasourceSrv: () => ({

View File

@@ -22,9 +22,14 @@ import {
} from 'app/core/utils/explore';
// Types
import { ThunkResult, ExploreUrlState, ExploreItemState } from 'app/types';
import { DataSourceApi, DataQuery, DataSourceSelectItem, QueryFixAction, PanelData, RefreshPicker } from '@grafana/ui';
import { RefreshPicker } from '@grafana/ui';
import {
DataSourceApi,
DataQuery,
DataSourceSelectItem,
QueryFixAction,
PanelData,
RawTimeRange,
LogsDedupStrategy,
AbsoluteTimeRange,

View File

@@ -25,8 +25,7 @@ import { ActionOf } from 'app/core/redux/actionCreatorFactory';
import { updateLocation } from 'app/core/actions/location';
import { serializeStateToUrlParam } from 'app/core/utils/explore';
import TableModel from 'app/core/table_model';
import { DataSourceApi, DataQuery } from '@grafana/ui';
import { LogsDedupStrategy, dateTime, LoadingState } from '@grafana/data';
import { DataSourceApi, DataQuery, LogsDedupStrategy, dateTime, LoadingState } from '@grafana/data';
describe('Explore item reducer', () => {
describe('scanning', () => {

View File

@@ -10,8 +10,17 @@ import {
refreshIntervalToSortOrder,
} from 'app/core/utils/explore';
import { ExploreItemState, ExploreState, ExploreId, ExploreUpdateState, ExploreMode } from 'app/types/explore';
import { LoadingState, toLegacyResponseData, DefaultTimeRange } from '@grafana/data';
import { DataQuery, DataSourceApi, PanelData, DataQueryRequest, RefreshPicker, PanelEvents } from '@grafana/ui';
import {
LoadingState,
toLegacyResponseData,
DefaultTimeRange,
DataQuery,
DataSourceApi,
PanelData,
DataQueryRequest,
PanelEvents,
} from '@grafana/data';
import { RefreshPicker } from '@grafana/ui';
import {
HigherOrderAction,
ActionTypes,

View File

@@ -4,7 +4,7 @@ import {
DataQueryResponse,
DataSourceInstanceSettings,
DataSourcePluginMeta,
} from '@grafana/ui';
} from '@grafana/data';
import { ExpressionQuery, GELQueryType } from './types';
import { ExpressionQueryEditor } from './ExpressionQueryEditor';
import { Observable, from } from 'rxjs';

View File

@@ -1,8 +1,8 @@
// Libraries
import React, { PureComponent, ChangeEvent } from 'react';
import { FormLabel, QueryEditorProps, Select, FormField } from '@grafana/ui';
import { SelectableValue, ReducerID } from '@grafana/data';
import { FormLabel, Select, FormField } from '@grafana/ui';
import { SelectableValue, ReducerID, QueryEditorProps } from '@grafana/data';
// Types
import { ExpressionQuery, GELQueryType } from './types';

View File

@@ -1,4 +1,4 @@
import { DataQuery } from '@grafana/ui';
import { DataQuery } from '@grafana/data';
export enum GELQueryType {
math = 'math',

View File

@@ -6,9 +6,18 @@ import { PanelCtrl } from 'app/features/panel/panel_ctrl';
import { getExploreUrl } from 'app/core/utils/explore';
import { applyPanelTimeOverrides, getResolution } from 'app/features/dashboard/utils/panel';
import { ContextSrv } from 'app/core/services/context_srv';
import { toLegacyResponseData, toDataFrameDTO, TimeRange, LoadingState, DataFrame } from '@grafana/data';
import { LegacyResponseData, DataSourceApi, PanelData, DataQueryResponse, PanelEvents } from '@grafana/ui';
import {
toLegacyResponseData,
toDataFrameDTO,
TimeRange,
LoadingState,
DataFrame,
LegacyResponseData,
DataSourceApi,
PanelData,
DataQueryResponse,
PanelEvents,
} from '@grafana/data';
import { Unsubscribable } from 'rxjs';
import { PanelModel } from 'app/features/dashboard/state';
import { CoreEvents } from 'app/types';

View File

@@ -1,6 +1,5 @@
import _ from 'lodash';
import { sanitize, escapeHtml } from 'app/core/utils/text';
import { renderMarkdown, AppEvent } from '@grafana/data';
import config from 'app/core/config';
import { profiler } from 'app/core/core';
@@ -17,9 +16,8 @@ import {
import { GRID_COLUMN_COUNT } from 'app/core/constants';
import { auto } from 'angular';
import { TemplateSrv } from '../templating/template_srv';
import { PanelPluginMeta } from '@grafana/ui/src/types/panel';
import { getPanelLinksSupplier } from './panellinks/linkSuppliers';
import { PanelEvents } from '@grafana/ui';
import { renderMarkdown, AppEvent, PanelEvents, PanelPluginMeta } from '@grafana/data';
export class PanelCtrl {
panel: any;

View File

@@ -4,7 +4,7 @@ import $ from 'jquery';
import Drop from 'tether-drop';
// @ts-ignore
import baron from 'baron';
import { PanelEvents } from '@grafana/ui';
import { PanelEvents } from '@grafana/data';
const module = angular.module('grafana.directives');

View File

@@ -1,5 +1,5 @@
import { coreModule } from 'app/core/core';
import { AngularPanelMenuItem } from '@grafana/ui';
import { AngularPanelMenuItem } from '@grafana/data';
const template = `
<span class="panel-title">

View File

@@ -1,5 +1,5 @@
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
import { FieldDisplay } from '@grafana/ui';
import { FieldDisplay } from '@grafana/data';
import { LinkModelSupplier, getTimeField, Labels, ScopedVars, ScopedVar } from '@grafana/data';
import { getLinkSrv } from './link_srv';

View File

@@ -10,8 +10,7 @@ import { UrlQueryMap } from '@grafana/runtime';
import Page from 'app/core/components/Page/Page';
import { getPluginSettings } from './PluginSettingsCache';
import { importAppPlugin } from './plugin_loader';
import { AppPlugin, AppPluginMeta, PluginType } from '@grafana/ui';
import { NavModel, AppEvents } from '@grafana/data';
import { AppPlugin, AppPluginMeta, PluginType, NavModel, AppEvents } from '@grafana/data';
import { getLoadingNav } from './PluginPage';
import { getNotFoundNav, getWarningNav } from 'app/core/nav_model_srv';
import { appEvents } from 'app/core/core';

View File

@@ -2,12 +2,11 @@ import React, { PureComponent } from 'react';
import extend from 'lodash/extend';
import { PluginMeta, DataSourceApi } from '@grafana/ui';
import { PluginDashboard } from 'app/types';
import { getBackendSrv } from 'app/core/services/backend_srv';
import { appEvents } from 'app/core/core';
import DashboardsTable from 'app/features/datasources/DashboardsTable';
import { AppEvents } from '@grafana/data';
import { AppEvents, PluginMeta, DataSourceApi } from '@grafana/data';
interface Props {
plugin: PluginMeta;

View File

@@ -1,7 +1,7 @@
import React, { FC } from 'react';
import classNames from 'classnames';
import PluginListItem from './PluginListItem';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
import { LayoutMode, LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';
interface Props {

View File

@@ -1,5 +1,5 @@
import React, { FC } from 'react';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
interface Props {
plugin: PluginMeta;

View File

@@ -3,7 +3,7 @@ import { shallow } from 'enzyme';
import { PluginListPage, Props } from './PluginListPage';
import { LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';
import { NavModel } from '@grafana/data';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
const setup = (propOverrides?: object) => {
const props: Props = {

View File

@@ -9,7 +9,7 @@ import { getNavModel } from 'app/core/selectors/navModel';
import { getLayoutMode, getPlugins, getPluginsSearchQuery } from './state/selectors';
import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector';
import { NavModel } from '@grafana/data';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
import { StoreState } from 'app/types';
export interface Props {

View File

@@ -6,8 +6,8 @@ import find from 'lodash/find';
// Types
import { UrlQueryMap } from '@grafana/runtime';
import { StoreState, AppNotificationSeverity, CoreEvents } from 'app/types';
import { Alert, Tooltip } from '@grafana/ui';
import {
Alert,
AppPlugin,
GrafanaPlugin,
PluginDependencies,
@@ -16,9 +16,9 @@ import {
PluginMeta,
PluginMetaInfo,
PluginType,
Tooltip,
} from '@grafana/ui';
import { NavModel, NavModelItem } from '@grafana/data';
NavModel,
NavModelItem,
} from '@grafana/data';
import Page from 'app/core/components/Page/Page';
import { getPluginSettings } from './PluginSettingsCache';

View File

@@ -1,5 +1,5 @@
import { getBackendSrv } from 'app/core/services/backend_srv';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
type PluginCache = {
[key: string]: PluginMeta;

View File

@@ -1,5 +1,6 @@
import React, { FC } from 'react';
import { PluginState, AlphaNotice } from '@grafana/ui';
import { AlphaNotice } from '@grafana/ui';
import { PluginState } from '@grafana/data';
import { css } from 'emotion';
interface Props {

View File

@@ -1,4 +1,4 @@
import { PanelPluginMeta, PluginMeta, PluginType, PanelPlugin, PanelProps } from '@grafana/ui';
import { PanelPluginMeta, PluginMeta, PluginType, PanelPlugin, PanelProps } from '@grafana/data';
import { ComponentType } from 'enzyme';
export const getMockPlugins = (amount: number): PluginMeta[] => {

View File

@@ -8,8 +8,7 @@ import { importDataSourcePlugin } from './plugin_loader';
import { DataSourceSrv as DataSourceService, getDataSourceSrv as getDataSourceService } from '@grafana/runtime';
// Types
import { DataSourceApi, DataSourceSelectItem } from '@grafana/ui';
import { ScopedVars, AppEvents } from '@grafana/data';
import { DataSourceApi, DataSourceSelectItem, ScopedVars, AppEvents } from '@grafana/data';
import { auto } from 'angular';
import { TemplateSrv } from '../templating/template_srv';
import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';

View File

@@ -4,7 +4,7 @@ import _ from 'lodash';
import config from 'app/core/config';
import coreModule from 'app/core/core_module';
import { DataSourceApi } from '@grafana/ui';
import { DataSourceApi } from '@grafana/data';
import { importPanelPlugin, importDataSourcePlugin, importAppPlugin } from './plugin_loader';
import DatasourceSrv from './datasource_srv';
import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';

View File

@@ -14,7 +14,7 @@ jest.mock('app/core/core', () => {
});
import { SystemJS } from '@grafana/runtime';
import { AppPluginMeta, PluginMetaInfo, PluginType, PluginIncludeType, AppPlugin } from '@grafana/ui';
import { AppPluginMeta, PluginMetaInfo, PluginType, PluginIncludeType, AppPlugin } from '@grafana/data';
import { importAppPlugin } from './plugin_loader';
class MyCustomApp extends AppPlugin {

View File

@@ -22,8 +22,7 @@ import config from 'app/core/config';
import TimeSeries from 'app/core/time_series2';
import TableModel from 'app/core/table_model';
import { coreModule, appEvents, contextSrv } from 'app/core/core';
import { DataSourcePlugin, AppPlugin, PanelPlugin, PluginMeta, DataSourcePluginMeta } from '@grafana/ui';
import { dateMath } from '@grafana/data';
import { DataSourcePlugin, AppPlugin, PanelPlugin, PluginMeta, DataSourcePluginMeta, dateMath } from '@grafana/data';
import * as fileExport from 'app/core/utils/file_export';
import * as flatten from 'app/core/utils/flatten';
import * as ticks from 'app/core/utils/ticks';

View File

@@ -2,7 +2,7 @@ import angular, { IQService } from 'angular';
import _ from 'lodash';
import { getPluginSettings } from './PluginSettingsCache';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
import { NavModelSrv } from 'app/core/core';
import { GrafanaRootScope } from 'app/routes/GrafanaCtrl';
import { AppEvents } from '@grafana/data';

View File

@@ -1,7 +1,7 @@
import config from 'app/core/config';
import 'app/features/plugins/datasource_srv';
import { DatasourceSrv } from 'app/features/plugins/datasource_srv';
import { PluginMeta, DataSourcePluginMeta } from '@grafana/ui';
import { PluginMeta, DataSourcePluginMeta } from '@grafana/data';
// Datasource variable $datasource with current value 'BBB'
const templateSrv: any = {

View File

@@ -3,7 +3,7 @@ import { ThunkAction } from 'redux-thunk';
import { getBackendSrv } from '@grafana/runtime';
import { LayoutMode } from '../../../core/components/LayoutSelector/LayoutSelector';
import { PluginDashboard } from '../../../types/plugins';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
export enum ActionTypes {
LoadPlugins = 'LOAD_PLUGINS',

View File

@@ -2,7 +2,7 @@ import { Action, ActionTypes } from './actions';
import { PluginsState } from 'app/types';
import { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector';
import { PluginDashboard } from '../../../types/plugins';
import { PluginMeta } from '@grafana/ui';
import { PluginMeta } from '@grafana/data';
export const initialState: PluginsState = {
plugins: [] as PluginMeta[],

View File

@@ -3,7 +3,7 @@ import { importDataSourcePlugin } from './plugin_loader';
import React from 'react';
import ReactDOM from 'react-dom';
import DefaultVariableQueryEditor from '../templating/DefaultVariableQueryEditor';
import { DataSourcePluginMeta } from '@grafana/ui';
import { DataSourcePluginMeta } from '@grafana/data';
import { TemplateSrv } from '../templating/template_srv';
async function loadComponent(meta: DataSourcePluginMeta) {

View File

@@ -3,8 +3,8 @@ import React, { PureComponent } from 'react';
import cloneDeep from 'lodash/cloneDeep';
import extend from 'lodash/extend';
import { PluginMeta, AppPlugin, Button } from '@grafana/ui';
import { deprecationWarning } from '@grafana/data';
import { Button } from '@grafana/ui';
import { PluginMeta, AppPlugin, deprecationWarning } from '@grafana/data';
import { AngularComponent, getAngularLoader } from '@grafana/runtime';
import { getBackendSrv } from 'app/core/services/backend_srv';