diff --git a/public/app/angular/AngularApp.ts b/public/app/angular/AngularApp.ts
index 7fab2829548..c17f7ac6e0e 100644
--- a/public/app/angular/AngularApp.ts
+++ b/public/app/angular/AngularApp.ts
@@ -5,7 +5,7 @@ import 'angular-bindonce';
import 'vendor/bootstrap/bootstrap';
import 'vendor/angular-other/angular-strap';
import { config } from 'app/core/config';
-import coreModule, { angularModules } from 'app/core/core_module';
+import coreModule, { angularModules } from 'app/angular/core_module';
import { DashboardLoaderSrv } from 'app/features/dashboard/services/DashboardLoaderSrv';
import { registerAngularDirectives } from './angular_wrappers';
import { initAngularRoutingBridge } from './bridgeReactAngularRouting';
@@ -13,6 +13,7 @@ import { monkeyPatchInjectorWithPreAssignedBindings } from './injectorMonkeyPatc
import { extend } from 'lodash';
import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
import { getTemplateSrv } from '@grafana/runtime';
+import { registerComponents } from './registerComponents';
export class AngularApp {
ngModuleDependencies: any[];
@@ -89,6 +90,7 @@ export class AngularApp {
coreModule.factory('templateSrv', () => getTemplateSrv());
registerAngularDirectives();
+ registerComponents();
initAngularRoutingBridge();
}
diff --git a/public/app/angular/angular_wrappers.ts b/public/app/angular/angular_wrappers.ts
index c678704635e..2ce3911600a 100644
--- a/public/app/angular/angular_wrappers.ts
+++ b/public/app/angular/angular_wrappers.ts
@@ -1,4 +1,4 @@
-import { react2AngularDirective } from 'app/core/utils/react2angular';
+import { react2AngularDirective } from 'app/angular/react2angular';
import { QueryEditor as CloudMonitoringQueryEditor } from 'app/plugins/datasource/cloud-monitoring/components/QueryEditor';
import { AnnotationQueryEditor as CloudMonitoringAnnotationQueryEditor } from 'app/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor';
import { AnnotationQueryEditor as CloudWatchAnnotationQueryEditor } from 'app/plugins/datasource/cloudwatch/components/AnnotationQueryEditor';
diff --git a/public/app/angular/array_join.ts b/public/app/angular/array_join.ts
index 5bf12b795b7..b81d3596760 100644
--- a/public/app/angular/array_join.ts
+++ b/public/app/angular/array_join.ts
@@ -1,5 +1,5 @@
import { isArray } from 'lodash';
-import coreModule from '../core/core_module';
+import coreModule from './core_module';
export function arrayJoin() {
'use strict';
diff --git a/public/app/angular/autofill_event_fix.ts b/public/app/angular/autofill_event_fix.ts
index 922b0c2b497..d885a5c59e6 100644
--- a/public/app/angular/autofill_event_fix.ts
+++ b/public/app/angular/autofill_event_fix.ts
@@ -1,4 +1,4 @@
-import coreModule from '../core/core_module';
+import coreModule from './core_module';
/** @ngInject */
export function autofillEventFix($compile: any) {
diff --git a/public/app/angular/bridgeReactAngularRouting.ts b/public/app/angular/bridgeReactAngularRouting.ts
index d25aa7e92d7..d3afb95e212 100644
--- a/public/app/angular/bridgeReactAngularRouting.ts
+++ b/public/app/angular/bridgeReactAngularRouting.ts
@@ -1,4 +1,4 @@
-import { coreModule } from '../core/core_module';
+import { coreModule } from './core_module';
import { RouteProvider } from '../core/navigation/patch/RouteProvider';
import { RouteParamsProvider } from '../core/navigation/patch/RouteParamsProvider';
import { ILocationService } from 'angular';
diff --git a/public/app/angular/components/code_editor/code_editor.ts b/public/app/angular/components/code_editor/code_editor.ts
index bd109ed7891..c6e144249d6 100644
--- a/public/app/angular/components/code_editor/code_editor.ts
+++ b/public/app/angular/components/code_editor/code_editor.ts
@@ -28,7 +28,7 @@
* Ctrl-Enter (Command-Enter): run onChange() function
*/
-import coreModule from 'app/core/core_module';
+import coreModule from 'app/angular/core_module';
import config from 'app/core/config';
const DEFAULT_THEME_DARK = 'ace/theme/grafana-dark';
diff --git a/public/app/angular/components/form_dropdown/form_dropdown.ts b/public/app/angular/components/form_dropdown/form_dropdown.ts
index fbe0107a7b0..3fbec41def6 100644
--- a/public/app/angular/components/form_dropdown/form_dropdown.ts
+++ b/public/app/angular/components/form_dropdown/form_dropdown.ts
@@ -1,7 +1,7 @@
import { debounce, find, indexOf, map, isObject, escape, unescape } from 'lodash';
-import coreModule from '../../../core/core_module';
+import coreModule from '../../core_module';
import { ISCEService } from 'angular';
-import { promiseToDigest } from 'app/core/utils/promiseToDigest';
+import { promiseToDigest } from '../../promiseToDigest';
function typeaheadMatcher(this: any, item: string) {
let str = this.query;
diff --git a/public/app/angular/components/info_popover.ts b/public/app/angular/components/info_popover.ts
index 7e4d0e0524f..37fe61de5ba 100644
--- a/public/app/angular/components/info_popover.ts
+++ b/public/app/angular/components/info_popover.ts
@@ -1,5 +1,5 @@
import { each } from 'lodash';
-import coreModule from 'app/core/core_module';
+import coreModule from 'app/angular/core_module';
// @ts-ignore
import Drop from 'tether-drop';
diff --git a/public/app/angular/components/jsontree.ts b/public/app/angular/components/jsontree.ts
index f88e317d07c..1628de803f0 100644
--- a/public/app/angular/components/jsontree.ts
+++ b/public/app/angular/components/jsontree.ts
@@ -1,4 +1,4 @@
-import coreModule from 'app/core/core_module';
+import coreModule from 'app/angular/core_module';
import { JsonExplorer } from '@grafana/ui';
coreModule.directive('jsonTree', [
diff --git a/public/app/angular/components/query_part_editor.ts b/public/app/angular/components/query_part_editor.ts
index 9f0c350e287..3f85e55498b 100644
--- a/public/app/angular/components/query_part_editor.ts
+++ b/public/app/angular/components/query_part_editor.ts
@@ -1,7 +1,7 @@
import { debounce, each, map, partial, escape, unescape } from 'lodash';
import $ from 'jquery';
-import coreModule from 'app/core/core_module';
-import { promiseToDigest } from '../../core/utils/promiseToDigest';
+import coreModule from 'app/angular/core_module';
+import { promiseToDigest } from '../promiseToDigest';
const template = `
diff --git a/public/app/angular/components/scroll.ts b/public/app/angular/components/scroll.ts
index 40f0dd0641b..961241a1068 100644
--- a/public/app/angular/components/scroll.ts
+++ b/public/app/angular/components/scroll.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
// @ts-ignore
import baron from 'baron';
-import coreModule from 'app/core/core_module';
+import coreModule from 'app/angular/core_module';
const scrollBarHTML = `
diff --git a/public/app/angular/components/spectrum_picker.ts b/public/app/angular/components/spectrum_picker.ts
index 560d50f15da..9cb84bcd9d9 100644
--- a/public/app/angular/components/spectrum_picker.ts
+++ b/public/app/angular/components/spectrum_picker.ts
@@ -3,7 +3,7 @@
* Allows remaining
untouched in outdated plugins.
* Technically, it's just a wrapper for react component with two-way data binding support.
*/
-import coreModule from '../../core/core_module';
+import coreModule from '../core_module';
/** @ngInject */
export function spectrumPicker() {
diff --git a/public/app/angular/components/sql_part/sql_part_editor.ts b/public/app/angular/components/sql_part/sql_part_editor.ts
index f944b2d48f1..29bf91e9ca5 100644
--- a/public/app/angular/components/sql_part/sql_part_editor.ts
+++ b/public/app/angular/components/sql_part/sql_part_editor.ts
@@ -1,6 +1,6 @@
import { debounce, each, indexOf, map, partial, escape, unescape } from 'lodash';
import $ from 'jquery';
-import coreModule from 'app/core/core_module';
+import coreModule from 'app/angular/core_module';
const template = `
diff --git a/public/app/angular/components/switch.ts b/public/app/angular/components/switch.ts
index 3d213f6a6de..5e8f89e7188 100644
--- a/public/app/angular/components/switch.ts
+++ b/public/app/angular/components/switch.ts
@@ -1,4 +1,4 @@
-import coreModule from 'app/core/core_module';
+import coreModule from 'app/angular/core_module';
const template = `