(Component: React.ComponentType
) => {
diff --git a/packages/grafana-ui/src/themes/index.ts b/packages/grafana-ui/src/themes/index.ts
index 4be9327ffb6..31d4208cf8a 100644
--- a/packages/grafana-ui/src/themes/index.ts
+++ b/packages/grafana-ui/src/themes/index.ts
@@ -1,13 +1,7 @@
-export {
- ThemeContext,
- withTheme,
- withTheme2,
- useTheme,
- useTheme2,
- useStyles,
- useStyles2,
- mockThemeContext,
-} from './ThemeContext';
+// @deprecated use ThemeContext from @grafana/data instead
+export { ThemeContext } from '@grafana/data';
+
+export { withTheme, withTheme2, useTheme, useTheme2, useStyles, useStyles2, mockThemeContext } from './ThemeContext';
export { getTheme, mockTheme } from './getTheme';
export { stylesFactory } from './stylesFactory';
export { GlobalStyles } from './GlobalStyles/GlobalStyles';
diff --git a/packages/grafana-ui/src/utils/storybook/withTheme.tsx b/packages/grafana-ui/src/utils/storybook/withTheme.tsx
index 9c1d14c00d1..d16bc699298 100644
--- a/packages/grafana-ui/src/utils/storybook/withTheme.tsx
+++ b/packages/grafana-ui/src/utils/storybook/withTheme.tsx
@@ -2,10 +2,9 @@ import { DecoratorFn } from '@storybook/react';
import React from 'react';
import { useDarkMode } from 'storybook-dark-mode';
-import { createTheme, GrafanaTheme2 } from '@grafana/data';
+import { createTheme, GrafanaTheme2, ThemeContext } from '@grafana/data';
import { GlobalStyles } from '../../themes/GlobalStyles/GlobalStyles';
-import { ThemeContext } from '../../themes/ThemeContext';
type SassThemeChangeHandler = (theme: GrafanaTheme2) => void;
const ThemeableStory = ({
diff --git a/public/app/app.ts b/public/app/app.ts
index 97bff0eb9cc..b910cf67af5 100644
--- a/public/app/app.ts
+++ b/public/app/app.ts
@@ -52,6 +52,7 @@ import { AppChromeService } from './core/components/AppChrome/AppChromeService';
import { getAllOptionEditors, getAllStandardFieldConfigs } from './core/components/OptionsUI/registry';
import { PluginPage } from './core/components/Page/PluginPage';
import { GrafanaContextType } from './core/context/GrafanaContext';
+import { initIconCache } from './core/icons/iconBundle';
import { initializeI18n } from './core/internationalization';
import { interceptLinkClicks } from './core/navigation/patch/interceptLinkClicks';
import { ModalManager } from './core/services/ModalManager';
@@ -122,6 +123,7 @@ export class GrafanaApp {
setBackendSrv(backendSrv);
initEchoSrv();
+ initIconCache();
// This needs to be done after the `initEchoSrv` since it is being used under the hood.
startMeasure('frontend_app_init');
addClassIfNoOverlayScrollbar();
diff --git a/packages/grafana-ui/src/components/Icon/cached.json b/public/app/core/icons/cached.json
similarity index 100%
rename from packages/grafana-ui/src/components/Icon/cached.json
rename to public/app/core/icons/cached.json
diff --git a/public/app/core/icons/iconBundle.ts b/public/app/core/icons/iconBundle.ts
new file mode 100644
index 00000000000..f493d0a71c2
--- /dev/null
+++ b/public/app/core/icons/iconBundle.ts
@@ -0,0 +1,389 @@
+/* eslint-disable import/order */
+// DO NOT EDIT THIS FILE
+// This file is automatically generated (do not edit it here)
+// see @grafana/ui/scripts/generate-icon-bundle.js
+
+import { cacheStore } from 'react-inlinesvg';
+
+// do not edit this list directly
+// the list of icons live here: @grafana/ui/components/Icon/cached.json
+import u1000 from '../../../img/icons/unicons/at.svg';
+import u1001 from '../../../img/icons/unicons/adjust-circle.svg';
+import u1002 from '../../../img/icons/unicons/align-left.svg';
+import u1003 from '../../../img/icons/unicons/align-right.svg';
+import u1004 from '../../../img/icons/unicons/angle-double-down.svg';
+import u1005 from '../../../img/icons/unicons/angle-double-right.svg';
+import u1006 from '../../../img/icons/unicons/angle-down.svg';
+import u1007 from '../../../img/icons/unicons/angle-left.svg';
+import u1008 from '../../../img/icons/unicons/angle-right.svg';
+import u1009 from '../../../img/icons/unicons/angle-up.svg';
+import u1010 from '../../../img/icons/unicons/apps.svg';
+import u1011 from '../../../img/icons/unicons/arrow.svg';
+import u1012 from '../../../img/icons/unicons/arrow-down.svg';
+import u1013 from '../../../img/icons/unicons/arrow-from-right.svg';
+import u1014 from '../../../img/icons/unicons/arrow-left.svg';
+import u1015 from '../../../img/icons/unicons/arrow-random.svg';
+import u1016 from '../../../img/icons/unicons/arrow-right.svg';
+import u1017 from '../../../img/icons/unicons/arrow-to-right.svg';
+import u1018 from '../../../img/icons/unicons/arrow-up.svg';
+import u1019 from '../../../img/icons/unicons/arrows-h.svg';
+import u1020 from '../../../img/icons/unicons/backward.svg';
+import u1021 from '../../../img/icons/unicons/bars.svg';
+import u1022 from '../../../img/icons/unicons/bell.svg';
+import u1023 from '../../../img/icons/unicons/bell-slash.svg';
+import u1024 from '../../../img/icons/unicons/bolt.svg';
+import u1025 from '../../../img/icons/unicons/book.svg';
+import u1026 from '../../../img/icons/unicons/book-open.svg';
+import u1027 from '../../../img/icons/unicons/brackets-curly.svg';
+import u1028 from '../../../img/icons/unicons/bug.svg';
+import u1029 from '../../../img/icons/unicons/building.svg';
+import u1030 from '../../../img/icons/unicons/calculator-alt.svg';
+import u1031 from '../../../img/icons/unicons/calendar-alt.svg';
+import u1032 from '../../../img/icons/unicons/calendar-slash.svg';
+import u1033 from '../../../img/icons/unicons/camera.svg';
+import u1034 from '../../../img/icons/unicons/channel-add.svg';
+import u1035 from '../../../img/icons/unicons/chart-line.svg';
+import u1036 from '../../../img/icons/unicons/check.svg';
+import u1037 from '../../../img/icons/unicons/check-circle.svg';
+import u1038 from '../../../img/icons/unicons/circle.svg';
+import u1039 from '../../../img/icons/unicons/clipboard-alt.svg';
+import u1040 from '../../../img/icons/unicons/clock-nine.svg';
+import u1041 from '../../../img/icons/unicons/cloud.svg';
+import u1042 from '../../../img/icons/unicons/cloud-download.svg';
+import u1043 from '../../../img/icons/unicons/code-branch.svg';
+import u1044 from '../../../img/icons/unicons/cog.svg';
+import u1045 from '../../../img/icons/unicons/columns.svg';
+import u1046 from '../../../img/icons/unicons/comment-alt.svg';
+import u1047 from '../../../img/icons/unicons/comment-alt-share.svg';
+import u1048 from '../../../img/icons/unicons/comments-alt.svg';
+import u1049 from '../../../img/icons/unicons/compass.svg';
+import u1050 from '../../../img/icons/unicons/copy.svg';
+import u1051 from '../../../img/icons/unicons/corner-down-right-alt.svg';
+import u1052 from '../../../img/icons/unicons/cube.svg';
+import u1053 from '../../../img/icons/unicons/dashboard.svg';
+import u1054 from '../../../img/icons/unicons/database.svg';
+import u1055 from '../../../img/icons/unicons/document-info.svg';
+import u1056 from '../../../img/icons/unicons/download-alt.svg';
+import u1057 from '../../../img/icons/unicons/draggabledots.svg';
+import u1058 from '../../../img/icons/unicons/edit.svg';
+import u1059 from '../../../img/icons/unicons/ellipsis-v.svg';
+import u1060 from '../../../img/icons/unicons/ellipsis-h.svg';
+import u1061 from '../../../img/icons/unicons/envelope.svg';
+import u1062 from '../../../img/icons/unicons/exchange-alt.svg';
+import u1063 from '../../../img/icons/unicons/exclamation-circle.svg';
+import u1064 from '../../../img/icons/unicons/exclamation-triangle.svg';
+import u1065 from '../../../img/icons/unicons/external-link-alt.svg';
+import u1066 from '../../../img/icons/unicons/eye.svg';
+import u1067 from '../../../img/icons/unicons/eye-slash.svg';
+import u1068 from '../../../img/icons/unicons/file-alt.svg';
+import u1069 from '../../../img/icons/unicons/file-blank.svg';
+import u1070 from '../../../img/icons/unicons/filter.svg';
+import u1071 from '../../../img/icons/unicons/folder.svg';
+import u1072 from '../../../img/icons/unicons/folder-open.svg';
+import u1073 from '../../../img/icons/unicons/folder-plus.svg';
+import u1074 from '../../../img/icons/unicons/folder-upload.svg';
+import u1075 from '../../../img/icons/unicons/forward.svg';
+import u1076 from '../../../img/icons/unicons/graph-bar.svg';
+import u1077 from '../../../img/icons/unicons/history.svg';
+import u1078 from '../../../img/icons/unicons/history-alt.svg';
+import u1079 from '../../../img/icons/unicons/home-alt.svg';
+import u1080 from '../../../img/icons/unicons/import.svg';
+import u1081 from '../../../img/icons/unicons/info.svg';
+import u1082 from '../../../img/icons/unicons/info-circle.svg';
+import u1083 from '../../../img/icons/unicons/k6.svg';
+import u1084 from '../../../img/icons/unicons/key-skeleton-alt.svg';
+import u1085 from '../../../img/icons/unicons/keyboard.svg';
+import u1086 from '../../../img/icons/unicons/link.svg';
+import u1087 from '../../../img/icons/unicons/list-ul.svg';
+import u1088 from '../../../img/icons/unicons/lock.svg';
+import u1089 from '../../../img/icons/unicons/minus.svg';
+import u1090 from '../../../img/icons/unicons/minus-circle.svg';
+import u1091 from '../../../img/icons/unicons/mobile-android.svg';
+import u1092 from '../../../img/icons/unicons/monitor.svg';
+import u1093 from '../../../img/icons/unicons/pause.svg';
+import u1094 from '../../../img/icons/unicons/pen.svg';
+import u1095 from '../../../img/icons/unicons/play.svg';
+import u1096 from '../../../img/icons/unicons/plug.svg';
+import u1097 from '../../../img/icons/unicons/plus.svg';
+import u1098 from '../../../img/icons/unicons/plus-circle.svg';
+import u1099 from '../../../img/icons/unicons/power.svg';
+import u1100 from '../../../img/icons/unicons/presentation-play.svg';
+import u1101 from '../../../img/icons/unicons/process.svg';
+import u1102 from '../../../img/icons/unicons/question-circle.svg';
+import u1103 from '../../../img/icons/unicons/repeat.svg';
+import u1104 from '../../../img/icons/unicons/rocket.svg';
+import u1105 from '../../../img/icons/unicons/rss.svg';
+import u1106 from '../../../img/icons/unicons/save.svg';
+import u1107 from '../../../img/icons/unicons/search.svg';
+import u1108 from '../../../img/icons/unicons/search-minus.svg';
+import u1109 from '../../../img/icons/unicons/search-plus.svg';
+import u1110 from '../../../img/icons/unicons/share-alt.svg';
+import u1111 from '../../../img/icons/unicons/shield.svg';
+import u1112 from '../../../img/icons/unicons/signal.svg';
+import u1113 from '../../../img/icons/unicons/signin.svg';
+import u1114 from '../../../img/icons/unicons/signout.svg';
+import u1115 from '../../../img/icons/unicons/sitemap.svg';
+import u1116 from '../../../img/icons/unicons/slack.svg';
+import u1117 from '../../../img/icons/unicons/sliders-v-alt.svg';
+import u1118 from '../../../img/icons/unicons/sort-amount-down.svg';
+import u1119 from '../../../img/icons/unicons/sort-amount-up.svg';
+import u1120 from '../../../img/icons/unicons/square-shape.svg';
+import u1121 from '../../../img/icons/unicons/star.svg';
+import u1122 from '../../../img/icons/unicons/step-backward.svg';
+import u1123 from '../../../img/icons/unicons/sync.svg';
+import u1124 from '../../../img/icons/unicons/stopwatch.svg';
+import u1125 from '../../../img/icons/unicons/table.svg';
+import u1126 from '../../../img/icons/unicons/tag-alt.svg';
+import u1127 from '../../../img/icons/unicons/times.svg';
+import u1128 from '../../../img/icons/unicons/trash-alt.svg';
+import u1129 from '../../../img/icons/unicons/unlock.svg';
+import u1130 from '../../../img/icons/unicons/upload.svg';
+import u1131 from '../../../img/icons/unicons/user.svg';
+import u1132 from '../../../img/icons/unicons/users-alt.svg';
+import u1133 from '../../../img/icons/unicons/wrap-text.svg';
+import u1134 from '../../../img/icons/unicons/cloud-upload.svg';
+import u1135 from '../../../img/icons/unicons/credit-card.svg';
+import u1136 from '../../../img/icons/unicons/file-copy-alt.svg';
+import u1137 from '../../../img/icons/unicons/fire.svg';
+import u1138 from '../../../img/icons/unicons/hourglass.svg';
+import u1139 from '../../../img/icons/unicons/layer-group.svg';
+import u1140 from '../../../img/icons/unicons/layers-alt.svg';
+import u1141 from '../../../img/icons/unicons/line-alt.svg';
+import u1142 from '../../../img/icons/unicons/list-ui-alt.svg';
+import u1143 from '../../../img/icons/unicons/message.svg';
+import u1144 from '../../../img/icons/unicons/palette.svg';
+import u1145 from '../../../img/icons/unicons/percentage.svg';
+import u1146 from '../../../img/icons/unicons/shield-exclamation.svg';
+import u1147 from '../../../img/icons/unicons/plus-square.svg';
+import u1148 from '../../../img/icons/unicons/x.svg';
+import u1149 from '../../../img/icons/unicons/capture.svg';
+import u1150 from '../../../img/icons/custom/gf-grid.svg';
+import u1151 from '../../../img/icons/custom/gf-landscape.svg';
+import u1152 from '../../../img/icons/custom/gf-layout-simple.svg';
+import u1153 from '../../../img/icons/custom/gf-portrait.svg';
+import u1154 from '../../../img/icons/custom/gf-show-context.svg';
+import u1155 from '../../../img/icons/custom/gf-bar-alignment-after.svg';
+import u1156 from '../../../img/icons/custom/gf-bar-alignment-before.svg';
+import u1157 from '../../../img/icons/custom/gf-bar-alignment-center.svg';
+import u1158 from '../../../img/icons/custom/gf-interpolation-linear.svg';
+import u1159 from '../../../img/icons/custom/gf-interpolation-smooth.svg';
+import u1160 from '../../../img/icons/custom/gf-interpolation-step-after.svg';
+import u1161 from '../../../img/icons/custom/gf-interpolation-step-before.svg';
+import u1162 from '../../../img/icons/custom/gf-logs.svg';
+import u1163 from '../../../img/icons/custom/gf-movepane-left.svg';
+import u1164 from '../../../img/icons/custom/gf-movepane-right.svg';
+import u1165 from '../../../img/icons/mono/favorite.svg';
+import u1166 from '../../../img/icons/mono/grafana.svg';
+import u1167 from '../../../img/icons/mono/heart.svg';
+import u1168 from '../../../img/icons/mono/heart-break.svg';
+import u1169 from '../../../img/icons/mono/panel-add.svg';
+import u1170 from '../../../img/icons/mono/library-panel.svg';
+import u1171 from '../../../img/icons/unicons/record-audio.svg';
+// do not edit this list directly
+// the list of icons live here: @grafana/ui/components/Icon/cached.json
+
+let cacheInitialized = false;
+
+function cacheItem(content: string, path: string) {
+ cacheStore[path] = { content, status: 'loaded' };
+}
+
+function createPathResolver() {
+ let root = 'public/img/icons/';
+
+ // This function needs to be called after index.js loads to give the
+ // application time to modify __webpack_public_path__ with a CDN path
+ const grafanaPublicPath = typeof window !== 'undefined' && window.__grafana_public_path__;
+ if (grafanaPublicPath) {
+ root = grafanaPublicPath + 'img/icons/';
+ }
+
+ return (path: string) => {
+ return root + path;
+ };
+}
+
+export function initIconCache() {
+ if (cacheInitialized) {
+ return;
+ }
+ cacheInitialized = true;
+ const resolvePath = createPathResolver();
+
+ // do not edit this list directly
+ // the list of icons live here: @grafana/ui/components/Icon/cached.json
+ cacheItem(u1000, resolvePath('unicons/at.svg'));
+ cacheItem(u1001, resolvePath('unicons/adjust-circle.svg'));
+ cacheItem(u1002, resolvePath('unicons/align-left.svg'));
+ cacheItem(u1003, resolvePath('unicons/align-right.svg'));
+ cacheItem(u1004, resolvePath('unicons/angle-double-down.svg'));
+ cacheItem(u1005, resolvePath('unicons/angle-double-right.svg'));
+ cacheItem(u1006, resolvePath('unicons/angle-down.svg'));
+ cacheItem(u1007, resolvePath('unicons/angle-left.svg'));
+ cacheItem(u1008, resolvePath('unicons/angle-right.svg'));
+ cacheItem(u1009, resolvePath('unicons/angle-up.svg'));
+ cacheItem(u1010, resolvePath('unicons/apps.svg'));
+ cacheItem(u1011, resolvePath('unicons/arrow.svg'));
+ cacheItem(u1012, resolvePath('unicons/arrow-down.svg'));
+ cacheItem(u1013, resolvePath('unicons/arrow-from-right.svg'));
+ cacheItem(u1014, resolvePath('unicons/arrow-left.svg'));
+ cacheItem(u1015, resolvePath('unicons/arrow-random.svg'));
+ cacheItem(u1016, resolvePath('unicons/arrow-right.svg'));
+ cacheItem(u1017, resolvePath('unicons/arrow-to-right.svg'));
+ cacheItem(u1018, resolvePath('unicons/arrow-up.svg'));
+ cacheItem(u1019, resolvePath('unicons/arrows-h.svg'));
+ cacheItem(u1020, resolvePath('unicons/backward.svg'));
+ cacheItem(u1021, resolvePath('unicons/bars.svg'));
+ cacheItem(u1022, resolvePath('unicons/bell.svg'));
+ cacheItem(u1023, resolvePath('unicons/bell-slash.svg'));
+ cacheItem(u1024, resolvePath('unicons/bolt.svg'));
+ cacheItem(u1025, resolvePath('unicons/book.svg'));
+ cacheItem(u1026, resolvePath('unicons/book-open.svg'));
+ cacheItem(u1027, resolvePath('unicons/brackets-curly.svg'));
+ cacheItem(u1028, resolvePath('unicons/bug.svg'));
+ cacheItem(u1029, resolvePath('unicons/building.svg'));
+ cacheItem(u1030, resolvePath('unicons/calculator-alt.svg'));
+ cacheItem(u1031, resolvePath('unicons/calendar-alt.svg'));
+ cacheItem(u1032, resolvePath('unicons/calendar-slash.svg'));
+ cacheItem(u1033, resolvePath('unicons/camera.svg'));
+ cacheItem(u1034, resolvePath('unicons/channel-add.svg'));
+ cacheItem(u1035, resolvePath('unicons/chart-line.svg'));
+ cacheItem(u1036, resolvePath('unicons/check.svg'));
+ cacheItem(u1037, resolvePath('unicons/check-circle.svg'));
+ cacheItem(u1038, resolvePath('unicons/circle.svg'));
+ cacheItem(u1039, resolvePath('unicons/clipboard-alt.svg'));
+ cacheItem(u1040, resolvePath('unicons/clock-nine.svg'));
+ cacheItem(u1041, resolvePath('unicons/cloud.svg'));
+ cacheItem(u1042, resolvePath('unicons/cloud-download.svg'));
+ cacheItem(u1043, resolvePath('unicons/code-branch.svg'));
+ cacheItem(u1044, resolvePath('unicons/cog.svg'));
+ cacheItem(u1045, resolvePath('unicons/columns.svg'));
+ cacheItem(u1046, resolvePath('unicons/comment-alt.svg'));
+ cacheItem(u1047, resolvePath('unicons/comment-alt-share.svg'));
+ cacheItem(u1048, resolvePath('unicons/comments-alt.svg'));
+ cacheItem(u1049, resolvePath('unicons/compass.svg'));
+ cacheItem(u1050, resolvePath('unicons/copy.svg'));
+ cacheItem(u1051, resolvePath('unicons/corner-down-right-alt.svg'));
+ cacheItem(u1052, resolvePath('unicons/cube.svg'));
+ cacheItem(u1053, resolvePath('unicons/dashboard.svg'));
+ cacheItem(u1054, resolvePath('unicons/database.svg'));
+ cacheItem(u1055, resolvePath('unicons/document-info.svg'));
+ cacheItem(u1056, resolvePath('unicons/download-alt.svg'));
+ cacheItem(u1057, resolvePath('unicons/draggabledots.svg'));
+ cacheItem(u1058, resolvePath('unicons/edit.svg'));
+ cacheItem(u1059, resolvePath('unicons/ellipsis-v.svg'));
+ cacheItem(u1060, resolvePath('unicons/ellipsis-h.svg'));
+ cacheItem(u1061, resolvePath('unicons/envelope.svg'));
+ cacheItem(u1062, resolvePath('unicons/exchange-alt.svg'));
+ cacheItem(u1063, resolvePath('unicons/exclamation-circle.svg'));
+ cacheItem(u1064, resolvePath('unicons/exclamation-triangle.svg'));
+ cacheItem(u1065, resolvePath('unicons/external-link-alt.svg'));
+ cacheItem(u1066, resolvePath('unicons/eye.svg'));
+ cacheItem(u1067, resolvePath('unicons/eye-slash.svg'));
+ cacheItem(u1068, resolvePath('unicons/file-alt.svg'));
+ cacheItem(u1069, resolvePath('unicons/file-blank.svg'));
+ cacheItem(u1070, resolvePath('unicons/filter.svg'));
+ cacheItem(u1071, resolvePath('unicons/folder.svg'));
+ cacheItem(u1072, resolvePath('unicons/folder-open.svg'));
+ cacheItem(u1073, resolvePath('unicons/folder-plus.svg'));
+ cacheItem(u1074, resolvePath('unicons/folder-upload.svg'));
+ cacheItem(u1075, resolvePath('unicons/forward.svg'));
+ cacheItem(u1076, resolvePath('unicons/graph-bar.svg'));
+ cacheItem(u1077, resolvePath('unicons/history.svg'));
+ cacheItem(u1078, resolvePath('unicons/history-alt.svg'));
+ cacheItem(u1079, resolvePath('unicons/home-alt.svg'));
+ cacheItem(u1080, resolvePath('unicons/import.svg'));
+ cacheItem(u1081, resolvePath('unicons/info.svg'));
+ cacheItem(u1082, resolvePath('unicons/info-circle.svg'));
+ cacheItem(u1083, resolvePath('unicons/k6.svg'));
+ cacheItem(u1084, resolvePath('unicons/key-skeleton-alt.svg'));
+ cacheItem(u1085, resolvePath('unicons/keyboard.svg'));
+ cacheItem(u1086, resolvePath('unicons/link.svg'));
+ cacheItem(u1087, resolvePath('unicons/list-ul.svg'));
+ cacheItem(u1088, resolvePath('unicons/lock.svg'));
+ cacheItem(u1089, resolvePath('unicons/minus.svg'));
+ cacheItem(u1090, resolvePath('unicons/minus-circle.svg'));
+ cacheItem(u1091, resolvePath('unicons/mobile-android.svg'));
+ cacheItem(u1092, resolvePath('unicons/monitor.svg'));
+ cacheItem(u1093, resolvePath('unicons/pause.svg'));
+ cacheItem(u1094, resolvePath('unicons/pen.svg'));
+ cacheItem(u1095, resolvePath('unicons/play.svg'));
+ cacheItem(u1096, resolvePath('unicons/plug.svg'));
+ cacheItem(u1097, resolvePath('unicons/plus.svg'));
+ cacheItem(u1098, resolvePath('unicons/plus-circle.svg'));
+ cacheItem(u1099, resolvePath('unicons/power.svg'));
+ cacheItem(u1100, resolvePath('unicons/presentation-play.svg'));
+ cacheItem(u1101, resolvePath('unicons/process.svg'));
+ cacheItem(u1102, resolvePath('unicons/question-circle.svg'));
+ cacheItem(u1103, resolvePath('unicons/repeat.svg'));
+ cacheItem(u1104, resolvePath('unicons/rocket.svg'));
+ cacheItem(u1105, resolvePath('unicons/rss.svg'));
+ cacheItem(u1106, resolvePath('unicons/save.svg'));
+ cacheItem(u1107, resolvePath('unicons/search.svg'));
+ cacheItem(u1108, resolvePath('unicons/search-minus.svg'));
+ cacheItem(u1109, resolvePath('unicons/search-plus.svg'));
+ cacheItem(u1110, resolvePath('unicons/share-alt.svg'));
+ cacheItem(u1111, resolvePath('unicons/shield.svg'));
+ cacheItem(u1112, resolvePath('unicons/signal.svg'));
+ cacheItem(u1113, resolvePath('unicons/signin.svg'));
+ cacheItem(u1114, resolvePath('unicons/signout.svg'));
+ cacheItem(u1115, resolvePath('unicons/sitemap.svg'));
+ cacheItem(u1116, resolvePath('unicons/slack.svg'));
+ cacheItem(u1117, resolvePath('unicons/sliders-v-alt.svg'));
+ cacheItem(u1118, resolvePath('unicons/sort-amount-down.svg'));
+ cacheItem(u1119, resolvePath('unicons/sort-amount-up.svg'));
+ cacheItem(u1120, resolvePath('unicons/square-shape.svg'));
+ cacheItem(u1121, resolvePath('unicons/star.svg'));
+ cacheItem(u1122, resolvePath('unicons/step-backward.svg'));
+ cacheItem(u1123, resolvePath('unicons/sync.svg'));
+ cacheItem(u1124, resolvePath('unicons/stopwatch.svg'));
+ cacheItem(u1125, resolvePath('unicons/table.svg'));
+ cacheItem(u1126, resolvePath('unicons/tag-alt.svg'));
+ cacheItem(u1127, resolvePath('unicons/times.svg'));
+ cacheItem(u1128, resolvePath('unicons/trash-alt.svg'));
+ cacheItem(u1129, resolvePath('unicons/unlock.svg'));
+ cacheItem(u1130, resolvePath('unicons/upload.svg'));
+ cacheItem(u1131, resolvePath('unicons/user.svg'));
+ cacheItem(u1132, resolvePath('unicons/users-alt.svg'));
+ cacheItem(u1133, resolvePath('unicons/wrap-text.svg'));
+ cacheItem(u1134, resolvePath('unicons/cloud-upload.svg'));
+ cacheItem(u1135, resolvePath('unicons/credit-card.svg'));
+ cacheItem(u1136, resolvePath('unicons/file-copy-alt.svg'));
+ cacheItem(u1137, resolvePath('unicons/fire.svg'));
+ cacheItem(u1138, resolvePath('unicons/hourglass.svg'));
+ cacheItem(u1139, resolvePath('unicons/layer-group.svg'));
+ cacheItem(u1140, resolvePath('unicons/layers-alt.svg'));
+ cacheItem(u1141, resolvePath('unicons/line-alt.svg'));
+ cacheItem(u1142, resolvePath('unicons/list-ui-alt.svg'));
+ cacheItem(u1143, resolvePath('unicons/message.svg'));
+ cacheItem(u1144, resolvePath('unicons/palette.svg'));
+ cacheItem(u1145, resolvePath('unicons/percentage.svg'));
+ cacheItem(u1146, resolvePath('unicons/shield-exclamation.svg'));
+ cacheItem(u1147, resolvePath('unicons/plus-square.svg'));
+ cacheItem(u1148, resolvePath('unicons/x.svg'));
+ cacheItem(u1149, resolvePath('unicons/capture.svg'));
+ cacheItem(u1150, resolvePath('custom/gf-grid.svg'));
+ cacheItem(u1151, resolvePath('custom/gf-landscape.svg'));
+ cacheItem(u1152, resolvePath('custom/gf-layout-simple.svg'));
+ cacheItem(u1153, resolvePath('custom/gf-portrait.svg'));
+ cacheItem(u1154, resolvePath('custom/gf-show-context.svg'));
+ cacheItem(u1155, resolvePath('custom/gf-bar-alignment-after.svg'));
+ cacheItem(u1156, resolvePath('custom/gf-bar-alignment-before.svg'));
+ cacheItem(u1157, resolvePath('custom/gf-bar-alignment-center.svg'));
+ cacheItem(u1158, resolvePath('custom/gf-interpolation-linear.svg'));
+ cacheItem(u1159, resolvePath('custom/gf-interpolation-smooth.svg'));
+ cacheItem(u1160, resolvePath('custom/gf-interpolation-step-after.svg'));
+ cacheItem(u1161, resolvePath('custom/gf-interpolation-step-before.svg'));
+ cacheItem(u1162, resolvePath('custom/gf-logs.svg'));
+ cacheItem(u1163, resolvePath('custom/gf-movepane-left.svg'));
+ cacheItem(u1164, resolvePath('custom/gf-movepane-right.svg'));
+ cacheItem(u1165, resolvePath('mono/favorite.svg'));
+ cacheItem(u1166, resolvePath('mono/grafana.svg'));
+ cacheItem(u1167, resolvePath('mono/heart.svg'));
+ cacheItem(u1168, resolvePath('mono/heart-break.svg'));
+ cacheItem(u1169, resolvePath('mono/panel-add.svg'));
+ cacheItem(u1170, resolvePath('mono/library-panel.svg'));
+ cacheItem(u1171, resolvePath('unicons/record-audio.svg'));
+ // do not edit this list directly
+ // the list of icons live here: @grafana/ui/components/Icon/cached.json
+}
diff --git a/packages/grafana-ui/src/components/Icon/iconBundle.ts.template b/public/app/core/icons/iconBundle.ts.template
similarity index 72%
rename from packages/grafana-ui/src/components/Icon/iconBundle.ts.template
rename to public/app/core/icons/iconBundle.ts.template
index db75ce7d011..ffb748cfbad 100644
--- a/packages/grafana-ui/src/components/Icon/iconBundle.ts.template
+++ b/public/app/core/icons/iconBundle.ts.template
@@ -12,23 +12,34 @@ import { cacheStore } from 'react-inlinesvg';
// do not edit this list directly
// the list of icons live here: @grafana/ui/components/Icon/cached.json
-export let cacheInitialized = false;
-export let iconRoot = 'public/img/icons/';
+let cacheInitialized = false;
-export function cacheItem(content: string, path: string) {
- cacheStore[iconRoot + path] = { content, status: 'loaded' };
+function cacheItem(content: string, path: string) {
+ cacheStore[path] = { content, status: 'loaded' };
}
-export function initIconCache() {
- cacheInitialized = true;
+function createPathResolver() {
+ let root = 'public/img/icons/';
// This function needs to be called after index.js loads to give the
// application time to modify __webpack_public_path__ with a CDN path
const grafanaPublicPath = typeof window !== 'undefined' && window.__grafana_public_path__;
if (grafanaPublicPath) {
- iconRoot = grafanaPublicPath + 'img/icons/';
+ root = grafanaPublicPath + 'img/icons/';
}
+ return (path: string) => {
+ return root + path;
+ };
+}
+
+export function initIconCache() {
+ if (cacheInitialized) {
+ return;
+ }
+ cacheInitialized = true;
+ const resolvePath = createPathResolver();
+
// do not edit this list directly
// the list of icons live here: @grafana/ui/components/Icon/cached.json
//{{cacheItems}}
diff --git a/public/app/core/utils/ConfigProvider.tsx b/public/app/core/utils/ConfigProvider.tsx
index 43851d729a7..3a8e5c4f99e 100644
--- a/public/app/core/utils/ConfigProvider.tsx
+++ b/public/app/core/utils/ConfigProvider.tsx
@@ -1,9 +1,8 @@
import React, { useEffect, useState } from 'react';
import { SkeletonTheme } from 'react-loading-skeleton';
-import { GrafanaTheme2 } from '@grafana/data';
+import { GrafanaTheme2, ThemeContext } from '@grafana/data';
import { ThemeChangedEvent, config } from '@grafana/runtime';
-import { ThemeContext } from '@grafana/ui';
import { appEvents } from '../core';
diff --git a/public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx b/public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx
index 0d5578265fb..b980f611d4f 100644
--- a/public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx
+++ b/public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx
@@ -9,18 +9,9 @@ import {
Threshold,
ThresholdsConfig,
ThresholdsMode,
-} from '@grafana/data';
-import {
- Button,
- ColorPicker,
- colors,
- IconButton,
- Input,
- Label,
- RadioButtonGroup,
- stylesFactory,
ThemeContext,
-} from '@grafana/ui';
+} from '@grafana/data';
+import { Button, ColorPicker, colors, IconButton, Input, Label, RadioButtonGroup, stylesFactory } from '@grafana/ui';
const modes: Array