diff --git a/.betterer.results b/.betterer.results
index f9e1356e3e1..953b94bc7b5 100644
--- a/.betterer.results
+++ b/.betterer.results
@@ -393,8 +393,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "8"]
],
"packages/grafana-data/test/helpers/pluginMocks.ts:5381": [
- [0, 0, 0, "Do not use any type assertions.", "0"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "1"]
+ [0, 0, 0, "Do not use any type assertions.", "0"]
],
"packages/grafana-e2e-selectors/src/resolver.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -465,11 +464,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"]
],
- "packages/grafana-runtime/src/services/AngularLoader.ts:5381": [
- [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "2"]
- ],
"packages/grafana-runtime/src/services/EchoSrv.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
@@ -2889,8 +2883,7 @@ exports[`better eslint`] = {
],
"public/app/features/dashboard/components/PanelEditor/OptionsPaneOptions.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"]
],
"public/app/features/dashboard/components/PanelEditor/OverrideCategoryTitle.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"]
@@ -2998,10 +2991,9 @@ exports[`better eslint`] = {
"public/app/features/dashboard/containers/DashboardPage.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
- [0, 0, 0, "Do not use any type assertions.", "2"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "2"],
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "4"],
- [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "5"]
+ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"]
],
"public/app/features/dashboard/containers/DashboardPageProxy.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -3033,9 +3025,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "6"],
[0, 0, 0, "Unexpected any. Specify a different type.", "7"],
[0, 0, 0, "Unexpected any. Specify a different type.", "8"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "9"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "10"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "11"]
+ [0, 0, 0, "Unexpected any. Specify a different type.", "9"]
],
"public/app/features/dashboard/state/DashboardMigrator.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
@@ -3728,16 +3718,12 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not re-export imported variable (\`./remotePlugin.mock\`)", "1"],
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "2"]
],
- "public/app/features/plugins/admin/components/Badges/PluginAngularBadge.tsx:5381": [
- [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
- ],
"public/app/features/plugins/admin/components/Badges/index.ts:5381": [
- [0, 0, 0, "Do not re-export imported variable (\`./PluginAngularBadge\`)", "0"],
- [0, 0, 0, "Do not re-export imported variable (\`./PluginDeprecatedBadge\`)", "1"],
- [0, 0, 0, "Do not re-export imported variable (\`./PluginDisabledBadge\`)", "2"],
- [0, 0, 0, "Do not re-export imported variable (\`./PluginEnterpriseBadge\`)", "3"],
- [0, 0, 0, "Do not re-export imported variable (\`./PluginInstallBadge\`)", "4"],
- [0, 0, 0, "Do not re-export imported variable (\`./PluginUpdateAvailableBadge\`)", "5"]
+ [0, 0, 0, "Do not re-export imported variable (\`./PluginDeprecatedBadge\`)", "0"],
+ [0, 0, 0, "Do not re-export imported variable (\`./PluginDisabledBadge\`)", "1"],
+ [0, 0, 0, "Do not re-export imported variable (\`./PluginEnterpriseBadge\`)", "2"],
+ [0, 0, 0, "Do not re-export imported variable (\`./PluginInstallBadge\`)", "3"],
+ [0, 0, 0, "Do not re-export imported variable (\`./PluginUpdateAvailableBadge\`)", "4"]
],
"public/app/features/plugins/admin/components/GetStartedWithPlugin/GetStartedWithDataSource.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -3759,8 +3745,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not re-export imported variable (\`./InstallControlsWarning\`)", "1"]
],
"public/app/features/plugins/admin/components/PluginDetailsBody.tsx:5381": [
- [0, 0, 0, "Do not use any type assertions.", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/plugins/admin/components/PluginDetailsDeprecatedWarning.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -3799,12 +3784,6 @@ exports[`better eslint`] = {
"public/app/features/plugins/admin/types.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
- "public/app/features/plugins/angularDeprecation/AngularDeprecationNotice.tsx:5381": [
- [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
- ],
- "public/app/features/plugins/angularDeprecation/AngularMigrationNotice.tsx:5381": [
- [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
- ],
"public/app/features/plugins/components/PluginsErrorsInfo.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
@@ -3873,8 +3852,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
[0, 0, 0, "Do not use any type assertions.", "2"],
- [0, 0, 0, "Do not use any type assertions.", "3"],
- [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"]
+ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"]
],
"public/app/features/query/components/QueryEditorRowHeader.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -5351,9 +5329,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "16"],
[0, 0, 0, "Unexpected any. Specify a different type.", "17"]
],
- "public/app/plugins/sdk.ts:5381": [
- [0, 0, 0, "Do not re-export imported variable (\`loadPluginCss\`)", "0"]
- ],
"public/app/routes/RoutesWrapper.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
],
@@ -5374,13 +5349,6 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
[0, 0, 0, "Unexpected any. Specify a different type.", "4"]
],
- "public/app/types/appEvent.ts:5381": [
- [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "1"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "2"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "3"],
- [0, 0, 0, "Unexpected any. Specify a different type.", "4"]
- ],
"public/app/types/dashboard.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
],
@@ -5416,8 +5384,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "17"],
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "18"],
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "19"],
- [0, 0, 0, "Do not use export all (\`export * from ...\`)", "20"],
- [0, 0, 0, "Do not use export all (\`export * from ...\`)", "21"]
+ [0, 0, 0, "Do not use export all (\`export * from ...\`)", "20"]
],
"public/app/types/jquery/jquery.d.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
@@ -5678,89 +5645,6 @@ exports[`no gf-form usage`] = {
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
- "public/app/angular/components/PageHeader/PageHeader.tsx:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/components/code_editor/code_editor.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/components/form_dropdown/form_dropdown.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/components/info_popover.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/components/switch.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/dropdown_typeahead.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/metric_segment.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/misc.ts:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/panel/partials/query_editor_row.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/angular/partials/tls_auth_settings.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
"public/app/core/components/AccessControl/PermissionList.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
@@ -5808,9 +5692,6 @@ exports[`no gf-form usage`] = {
"public/app/features/datasources/components/DataSourceTestingStatus.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
- "public/app/features/plugins/admin/components/AppConfigWrapper.tsx:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
"public/app/features/query/components/QueryEditorRow.tsx:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
@@ -5977,239 +5858,6 @@ exports[`no gf-form usage`] = {
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
],
- "public/app/plugins/panel/graph/axes_editor.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/graph/tab_display.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/graph/tab_legend.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/graph/tab_series_overrides.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/graph/thresholds_form.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/graph/time_regions_form.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
"public/app/plugins/panel/heatmap/partials/axes_editor.html:5381": [
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
@@ -6317,123 +5965,6 @@ exports[`no gf-form usage`] = {
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
[0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/table-old/column_options.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
- ],
- "public/app/plugins/panel/table-old/editor.html:5381": [
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"],
- [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"]
]
}`
};
diff --git a/.bingo/README.md b/.bingo/README.md
index 7a5c2d4f6da..1d8a1360ccf 100644
--- a/.bingo/README.md
+++ b/.bingo/README.md
@@ -2,13 +2,13 @@
This is directory which stores Go modules with pinned buildable package that is used within this repository, managed by https://github.com/bwplotka/bingo.
-* Run `bingo get` to install all tools having each own module file in this directory.
-* Run `bingo get ` to install that have own module file in this directory.
-* For Makefile: Make sure to put `include .bingo/Variables.mk` in your Makefile, then use $() variable where is the .bingo/.mod.
-* For shell: Run `source .bingo/variables.env` to source all environment variable for each tool.
-* For go: Import `.bingo/variables.go` to for variable names.
-* See https://github.com/bwplotka/bingo or -h on how to add, remove or change binaries dependencies.
+- Run `bingo get` to install all tools having each own module file in this directory.
+- Run `bingo get ` to install that have own module file in this directory.
+- For Makefile: Make sure to put `include .bingo/Variables.mk` in your Makefile, then use $() variable where is the .bingo/.mod.
+- For shell: Run `source .bingo/variables.env` to source all environment variable for each tool.
+- For go: Import `.bingo/variables.go` to for variable names.
+- See https://github.com/bwplotka/bingo or -h on how to add, remove or change binaries dependencies.
## Requirements
-* Go 1.14+
+- Go 1.14+
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 2de6c285a10..6cdfd44466b 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -543,7 +543,6 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/plugins/panel/datagrid/ @grafana/dataviz-squad
/public/app/plugins/panel/gauge/ @grafana/dataviz-squad
/public/app/plugins/panel/gettingstarted/ @grafana/grafana-frontend-platform
-/public/app/plugins/panel/graph/ @grafana/dataviz-squad
/public/app/plugins/panel/heatmap/ @grafana/dataviz-squad
/public/app/plugins/panel/histogram/ @grafana/dataviz-squad
/public/app/plugins/panel/logs/ @grafana/observability-logs
@@ -556,7 +555,6 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/plugins/panel/status-history/ @grafana/dataviz-squad
/public/app/plugins/panel/table/ @grafana/dataviz-squad
/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations
-/public/app/plugins/panel/table-old/ @grafana/dataviz-squad
/public/app/plugins/panel/timeseries/ @grafana/dataviz-squad
/public/app/plugins/panel/trend/ @grafana/dataviz-squad
/public/app/plugins/panel/geomap/ @grafana/dataviz-squad
@@ -568,7 +566,6 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/plugins/panel/text/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/welcome/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/xychart/ @grafana/dataviz-squad
-/public/app/plugins/sdk.ts @grafana/plugins-platform-frontend
/public/app/routes/ @grafana/grafana-frontend-platform
/public/app/store/ @grafana/grafana-frontend-platform
/public/app/types/ @grafana/grafana-frontend-platform
@@ -601,7 +598,6 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/api-merged.json @grafana/grafana-backend-group
/public/api-enterprise-spec.json @grafana/grafana-backend-group
/public/openapi3.json @grafana/grafana-backend-group
-/public/app/angular/ @torkelo
/public/app/app.ts @grafana/frontend-ops
/public/app/dev.ts @grafana/frontend-ops
/public/app/core/utils/metrics.ts @grafana/plugins-platform-frontend
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 5d75c9b82b8..59c388840b2 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -6,7 +6,6 @@
"history", // we should bump this together with react-router-dom (see https://github.com/grafana/grafana/issues/76744)
"react-router", // we should bump this together with history and react-router-dom
"react-router-dom", // we should bump this together with history (see https://github.com/grafana/grafana/issues/76744)
- "loader-utils", // v3 requires upstream changes in ngtemplate-loader. ignore, and remove when we remove angular.
"monaco-editor", // due to us exposing this via @grafana/ui/CodeEditor's props bumping can break plugins
"@fingerprintjs/fingerprintjs", // we don't want to bump to v4 due to licensing changes
"slate", // we don't want to continue using this on the long run, use Monaco editor instead of Slate
diff --git a/.prettierignore b/.prettierignore
index b9f59a37afb..23d9231bc49 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,7 +1,6 @@
.git
.github
.yarn
-.bingo
build
compiled
data
diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
index 4e533356d89..dcc1a40655e 100644
--- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
+++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md
@@ -91,38 +91,31 @@ Most [generally available](https://grafana.com/docs/release-life-cycle/#general-
[Public preview](https://grafana.com/docs/release-life-cycle/#public-preview) features are supported by our Support teams, but might be limited to enablement, configuration, and some troubleshooting.
-| Feature toggle name | Description |
-| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `panelTitleSearch` | Search for dashboards using panel title |
-| `autoMigrateOldPanels` | Migrate old angular panels to supported versions (graph, table-old, worldmap, etc) |
-| `autoMigrateGraphPanel` | Migrate old graph panel to supported time series panel - broken out from autoMigrateOldPanels to enable granular tracking |
-| `autoMigrateTablePanel` | Migrate old table panel to supported table panel - broken out from autoMigrateOldPanels to enable granular tracking |
-| `autoMigratePiechartPanel` | Migrate old piechart panel to supported piechart panel - broken out from autoMigrateOldPanels to enable granular tracking |
-| `autoMigrateWorldmapPanel` | Migrate old worldmap panel to supported geomap panel - broken out from autoMigrateOldPanels to enable granular tracking |
-| `autoMigrateStatPanel` | Migrate old stat panel to supported stat panel - broken out from autoMigrateOldPanels to enable granular tracking |
-| `disableAngular` | Dynamic flag to disable angular at runtime. The preferred method is to set `angular_support_enabled` to `false` in the [security] settings, which allows you to change the state at runtime. |
-| `grpcServer` | Run the GRPC server |
-| `renderAuthJWT` | Uses JWT-based auth for rendering instead of relying on remote cache |
-| `refactorVariablesTimeRange` | Refactor time range variables flow to reduce number of API calls made when query variables are chained |
-| `faroDatasourceSelector` | Enable the data source selector within the Frontend Apps section of the Frontend Observability |
-| `enableDatagridEditing` | Enables the edit functionality in the datagrid panel |
-| `sqlDatasourceDatabaseSelection` | Enables previous SQL data source dataset dropdown behavior |
-| `reportingRetries` | Enables rendering retries for the reporting feature |
-| `externalServiceAccounts` | Automatic service account and token setup for plugins |
-| `cloudWatchBatchQueries` | Runs CloudWatch metrics queries as separate batches |
-| `pdfTables` | Enables generating table data as PDF in reporting |
-| `canvasPanelPanZoom` | Allow pan and zoom in canvas panel |
-| `regressionTransformation` | Enables regression analysis transformation |
-| `onPremToCloudMigrations` | Enable the Grafana Migration Assistant, which helps you easily migrate on-prem resources, such as dashboards, folders, and data source configurations, to your Grafana Cloud stack. |
-| `alertingSaveStateCompressed` | Enables the compressed protobuf-based alert state storage |
-| `ssoSettingsLDAP` | Use the new SSO Settings API to configure LDAP |
-| `improvedExternalSessionHandling` | Enables improved support for OAuth external sessions. After enabling this feature, users might need to re-authenticate themselves. |
-| `elasticsearchCrossClusterSearch` | Enables cross cluster search in the Elasticsearch datasource |
-| `improvedExternalSessionHandlingSAML` | Enables improved support for SAML external sessions. Ensure the NameID format is correctly configured in Grafana for SAML Single Logout to function properly. |
-| `teamHttpHeadersMimir` | Enables LBAC for datasources for Mimir to apply LBAC filtering of metrics to the client requests for users in teams |
-| `exploreMetricsUseExternalAppPlugin` | Use the externalized Grafana Metrics Drilldown (formerly known as Explore Metrics) app plugin |
-| `alertRuleRestore` | Enables the alert rule restore feature |
-| `azureMonitorLogsBuilderEditor` | Enables the logs builder mode for the Azure Monitor data source |
+| Feature toggle name | Description |
+| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `panelTitleSearch` | Search for dashboards using panel title |
+| `grpcServer` | Run the GRPC server |
+| `renderAuthJWT` | Uses JWT-based auth for rendering instead of relying on remote cache |
+| `refactorVariablesTimeRange` | Refactor time range variables flow to reduce number of API calls made when query variables are chained |
+| `faroDatasourceSelector` | Enable the data source selector within the Frontend Apps section of the Frontend Observability |
+| `enableDatagridEditing` | Enables the edit functionality in the datagrid panel |
+| `sqlDatasourceDatabaseSelection` | Enables previous SQL data source dataset dropdown behavior |
+| `reportingRetries` | Enables rendering retries for the reporting feature |
+| `externalServiceAccounts` | Automatic service account and token setup for plugins |
+| `cloudWatchBatchQueries` | Runs CloudWatch metrics queries as separate batches |
+| `pdfTables` | Enables generating table data as PDF in reporting |
+| `canvasPanelPanZoom` | Allow pan and zoom in canvas panel |
+| `regressionTransformation` | Enables regression analysis transformation |
+| `onPremToCloudMigrations` | Enable the Grafana Migration Assistant, which helps you easily migrate on-prem resources, such as dashboards, folders, and data source configurations, to your Grafana Cloud stack. |
+| `alertingSaveStateCompressed` | Enables the compressed protobuf-based alert state storage |
+| `ssoSettingsLDAP` | Use the new SSO Settings API to configure LDAP |
+| `improvedExternalSessionHandling` | Enables improved support for OAuth external sessions. After enabling this feature, users might need to re-authenticate themselves. |
+| `elasticsearchCrossClusterSearch` | Enables cross cluster search in the Elasticsearch datasource |
+| `improvedExternalSessionHandlingSAML` | Enables improved support for SAML external sessions. Ensure the NameID format is correctly configured in Grafana for SAML Single Logout to function properly. |
+| `teamHttpHeadersMimir` | Enables LBAC for datasources for Mimir to apply LBAC filtering of metrics to the client requests for users in teams |
+| `exploreMetricsUseExternalAppPlugin` | Use the externalized Grafana Metrics Drilldown (formerly known as Explore Metrics) app plugin |
+| `alertRuleRestore` | Enables the alert rule restore feature |
+| `azureMonitorLogsBuilderEditor` | Enables the logs builder mode for the Azure Monitor data source |
## Experimental feature toggles
diff --git a/e2e/old-arch/various-suite/graph-auto-migrate.spec.ts b/e2e/old-arch/various-suite/graph-auto-migrate.spec.ts
index edbfd0ecab0..cddf07d0660 100644
--- a/e2e/old-arch/various-suite/graph-auto-migrate.spec.ts
+++ b/e2e/old-arch/various-suite/graph-auto-migrate.spec.ts
@@ -9,32 +9,12 @@ describe('Auto-migrate graph panel', () => {
e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD'));
});
- it('Graph panel is migrated with `autoMigrateOldPanels` feature toggle', () => {
+ it('Graph panel is auto-migrated', () => {
e2e.flows.openDashboard({ uid: DASHBOARD_ID });
cy.contains(DASHBOARD_NAME).should('be.visible');
cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.autoMigrateOldPanels': true } });
-
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('exist');
- });
-
- it('Graph panel is migrated with config `disableAngular` feature toggle', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID });
- cy.contains(DASHBOARD_NAME).should('be.visible');
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
-
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.disableAngular': true } });
-
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('exist');
- });
-
- it('Graph panel is migrated with `autoMigrateGraphPanel` feature toggle', () => {
e2e.flows.openDashboard({ uid: DASHBOARD_ID });
- cy.contains(DASHBOARD_NAME).should('be.visible');
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
-
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.autoMigrateGraphPanel': true } });
cy.get(UPLOT_MAIN_DIV_SELECTOR).should('exist');
});
@@ -44,7 +24,7 @@ describe('Auto-migrate graph panel', () => {
cy.contains(DASHBOARD_NAME).should('be.visible');
cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.autoMigrateGraphPanel': true } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID });
e2e.components.Panels.Panel.title('Business Hours')
.should('exist')
diff --git a/e2e/various-suite/graph-auto-migrate.spec.ts b/e2e/various-suite/graph-auto-migrate.spec.ts
index edbfd0ecab0..cddf07d0660 100644
--- a/e2e/various-suite/graph-auto-migrate.spec.ts
+++ b/e2e/various-suite/graph-auto-migrate.spec.ts
@@ -9,32 +9,12 @@ describe('Auto-migrate graph panel', () => {
e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD'));
});
- it('Graph panel is migrated with `autoMigrateOldPanels` feature toggle', () => {
+ it('Graph panel is auto-migrated', () => {
e2e.flows.openDashboard({ uid: DASHBOARD_ID });
cy.contains(DASHBOARD_NAME).should('be.visible');
cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.autoMigrateOldPanels': true } });
-
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('exist');
- });
-
- it('Graph panel is migrated with config `disableAngular` feature toggle', () => {
- e2e.flows.openDashboard({ uid: DASHBOARD_ID });
- cy.contains(DASHBOARD_NAME).should('be.visible');
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
-
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.disableAngular': true } });
-
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('exist');
- });
-
- it('Graph panel is migrated with `autoMigrateGraphPanel` feature toggle', () => {
e2e.flows.openDashboard({ uid: DASHBOARD_ID });
- cy.contains(DASHBOARD_NAME).should('be.visible');
- cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
-
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.autoMigrateGraphPanel': true } });
cy.get(UPLOT_MAIN_DIV_SELECTOR).should('exist');
});
@@ -44,7 +24,7 @@ describe('Auto-migrate graph panel', () => {
cy.contains(DASHBOARD_NAME).should('be.visible');
cy.get(UPLOT_MAIN_DIV_SELECTOR).should('not.exist');
- e2e.flows.openDashboard({ uid: DASHBOARD_ID, queryParams: { '__feature.autoMigrateGraphPanel': true } });
+ e2e.flows.openDashboard({ uid: DASHBOARD_ID });
e2e.components.Panels.Panel.title('Business Hours')
.should('exist')
diff --git a/package.json b/package.json
index 43e6102ebb7..93fbe086f19 100644
--- a/package.json
+++ b/package.json
@@ -101,8 +101,6 @@
"@testing-library/jest-dom": "6.6.3",
"@testing-library/react": "16.2.0",
"@testing-library/user-event": "14.6.1",
- "@types/angular": "1.8.9",
- "@types/angular-route": "1.7.6",
"@types/babel__core": "^7",
"@types/babel__preset-env": "^7",
"@types/chance": "^1.1.3",
@@ -214,7 +212,6 @@
"mini-css-extract-plugin": "2.9.2",
"msw": "2.7.0",
"mutationobserver-shim": "0.3.7",
- "ngtemplate-loader": "2.1.0",
"node-notifier": "10.0.1",
"nx": "20.7.1",
"openapi-types": "^12.1.3",
@@ -310,10 +307,6 @@
"@visx/shape": "3.12.0",
"@visx/tooltip": "3.12.0",
"@welldone-software/why-did-you-render": "8.0.3",
- "angular": "1.8.3",
- "angular-bindonce": "0.3.1",
- "angular-route": "1.8.3",
- "angular-sanitize": "1.8.3",
"ansicolor": "2.0.3",
"baron": "3.0.3",
"brace": "0.11.1",
@@ -412,8 +405,6 @@
"swagger-ui-react": "5.20.5",
"symbol-observable": "4.0.0",
"systemjs": "6.15.1",
- "systemjs-cjs-extra": "0.2.1",
- "tether-drop": "https://github.com/torkelo/drop",
"tinycolor2": "1.6.0",
"tslib": "2.8.1",
"tween-functions": "^1.2.0",
@@ -426,7 +417,6 @@
"resolutions": {
"underscore": "1.13.7",
"@types/slate": "0.47.11",
- "ngtemplate-loader/loader-utils": "^2.0.0",
"semver@~7.0.0": "7.5.4",
"semver@7.3.4": "7.5.4",
"debug@npm:^0.7.2": "2.6.9",
diff --git a/packages/grafana-data/src/events/EventBus.ts b/packages/grafana-data/src/events/EventBus.ts
index cdcd16b2e89..39cd895c37a 100644
--- a/packages/grafana-data/src/events/EventBus.ts
+++ b/packages/grafana-data/src/events/EventBus.ts
@@ -1,4 +1,3 @@
-import { IScope } from 'angular';
import EventEmitter from 'eventemitter3';
import { Unsubscribable, Observable, Subscriber } from 'rxjs';
import { filter } from 'rxjs/operators';
@@ -66,7 +65,7 @@ export class EventBusSrv implements EventBus, LegacyEmitter {
}
}
- on(event: AppEvent | string, handler: LegacyEventHandler, scope?: IScope) {
+ on(event: AppEvent | string, handler: LegacyEventHandler) {
// console.log(`Deprecated emitter function used (on), use $on`);
// need this wrapper to make old events compatible with old handlers
@@ -79,13 +78,6 @@ export class EventBusSrv implements EventBus, LegacyEmitter {
} else {
this.emitter.on(event.name, handler.wrapper);
}
-
- if (scope) {
- const unbind = scope.$on('$destroy', () => {
- this.off(event, handler);
- unbind();
- });
- }
}
off(event: AppEvent | string, handler: LegacyEventHandler) {
diff --git a/packages/grafana-data/src/events/types.ts b/packages/grafana-data/src/events/types.ts
index ad4fec0a025..514b980d1b4 100644
--- a/packages/grafana-data/src/events/types.ts
+++ b/packages/grafana-data/src/events/types.ts
@@ -1,4 +1,3 @@
-import { IScope } from 'angular';
import { Unsubscribable, Observable } from 'rxjs';
/**
@@ -129,7 +128,7 @@ export interface LegacyEmitter {
/**
* @deprecated use $on
*/
- on(event: AppEvent | string, handler: LegacyEventHandler, scope?: IScope): void;
+ on(event: AppEvent | string, handler: LegacyEventHandler): void;
/**
* @deprecated use $on
diff --git a/packages/grafana-data/src/index.ts b/packages/grafana-data/src/index.ts
index ce7a0339f67..a3af39ded7c 100644
--- a/packages/grafana-data/src/index.ts
+++ b/packages/grafana-data/src/index.ts
@@ -257,6 +257,7 @@ export { toOption } from './utils/selectUtils';
export * as arrayUtils from './utils/arrayUtils';
export { store, Store } from './utils/store';
export { LocalStorageValueProvider } from './utils/LocalStorageValueProvider';
+export { throwIfAngular } from './utils/throwIfAngular';
// Tranformations
export { standardTransformers } from './transformations/transformers';
diff --git a/packages/grafana-data/src/types/app.ts b/packages/grafana-data/src/types/app.ts
index 38a20ad12b8..e9e792dfc7e 100644
--- a/packages/grafana-data/src/types/app.ts
+++ b/packages/grafana-data/src/types/app.ts
@@ -1,5 +1,7 @@
import { ComponentType } from 'react';
+import { throwIfAngular } from '../utils/throwIfAngular';
+
import { KeyValue } from './data';
import { NavModel } from './navModel';
import { PluginMeta, GrafanaPlugin, PluginIncludeType } from './plugin';
@@ -85,9 +87,7 @@ export class AppPlugin extends GrafanaPlugin {
+ /** @deprecated it will be removed in a future release */
QueryCtrl?: any;
+ /** @deprecated it will be removed in a future release */
AnnotationsQueryCtrl?: any;
VariableQueryEditor?: any;
QueryEditor?: ComponentType>;
diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts
index 2ffc97577c3..c8ed12cb035 100644
--- a/packages/grafana-data/src/types/featureToggles.gen.ts
+++ b/packages/grafana-data/src/types/featureToggles.gen.ts
@@ -63,34 +63,6 @@ export interface FeatureToggles {
*/
correlations?: boolean;
/**
- * Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)
- */
- autoMigrateOldPanels?: boolean;
- /**
- * Migrate old graph panel to supported time series panel - broken out from autoMigrateOldPanels to enable granular tracking
- */
- autoMigrateGraphPanel?: boolean;
- /**
- * Migrate old table panel to supported table panel - broken out from autoMigrateOldPanels to enable granular tracking
- */
- autoMigrateTablePanel?: boolean;
- /**
- * Migrate old piechart panel to supported piechart panel - broken out from autoMigrateOldPanels to enable granular tracking
- */
- autoMigratePiechartPanel?: boolean;
- /**
- * Migrate old worldmap panel to supported geomap panel - broken out from autoMigrateOldPanels to enable granular tracking
- */
- autoMigrateWorldmapPanel?: boolean;
- /**
- * Migrate old stat panel to supported stat panel - broken out from autoMigrateOldPanels to enable granular tracking
- */
- autoMigrateStatPanel?: boolean;
- /**
- * Dynamic flag to disable angular at runtime. The preferred method is to set `angular_support_enabled` to `false` in the [security] settings, which allows you to change the state at runtime.
- */
- disableAngular?: boolean;
- /**
* Allow elements nesting
*/
canvasPanelNesting?: boolean;
diff --git a/packages/grafana-data/src/types/plugin.ts b/packages/grafana-data/src/types/plugin.ts
index b279d885db6..045dfdcee0b 100644
--- a/packages/grafana-data/src/types/plugin.ts
+++ b/packages/grafana-data/src/types/plugin.ts
@@ -239,6 +239,7 @@ export class GrafanaPlugin {
loadError?: boolean;
// Config control (app/datasource)
+ /** @deprecated it will be removed in a future release */
angularConfigCtrl?: any;
// Show configuration tabs on the plugin page
diff --git a/packages/grafana-data/src/utils/throwIfAngular.test.ts b/packages/grafana-data/src/utils/throwIfAngular.test.ts
new file mode 100644
index 00000000000..6e3bf3c0f83
--- /dev/null
+++ b/packages/grafana-data/src/utils/throwIfAngular.test.ts
@@ -0,0 +1,63 @@
+import { PanelPlugin, PluginMeta, PluginType } from '@grafana/data';
+
+import { throwIfAngular } from './throwIfAngular';
+
+const plugin: PluginMeta = {
+ id: 'test',
+ name: 'Test',
+ type: PluginType.datasource,
+ info: {
+ author: { name: 'Test', url: 'https://test.com' },
+ description: 'Test',
+ links: [],
+ logos: { large: '', small: '' },
+ screenshots: [],
+ updated: '2021-01-01',
+ version: '1.0.0',
+ },
+ module: 'test',
+ baseUrl: 'test',
+};
+
+describe('throwIfAngular', () => {
+ it('should throw if angular plugin', () => {
+ const underTest = { ...plugin, angular: { detected: true, hideDeprecation: false } };
+ expect(() => throwIfAngular(underTest)).toThrow('Angular plugins are not supported');
+ });
+
+ it('should throw if angular plugin', () => {
+ const underTest = { ...plugin, angularDetected: true };
+ expect(() => throwIfAngular(underTest)).toThrow('Angular plugins are not supported');
+ });
+
+ it('should throw if angular panel', () => {
+ const underTest = new PanelPlugin(null);
+ underTest.angularPanelCtrl = {};
+ expect(() => throwIfAngular(underTest)).toThrow('Angular plugins are not supported');
+ });
+
+ it('should throw if angular module', () => {
+ const underTest: System.Module = { PanelCtrl: {} };
+ expect(() => throwIfAngular(underTest)).toThrow('Angular plugins are not supported');
+ });
+
+ it('should throw if angular module', () => {
+ const underTest: System.Module = { ConfigCtrl: {} };
+ expect(() => throwIfAngular(underTest)).toThrow('Angular plugins are not supported');
+ });
+
+ it('should not throw if not angular plugin', () => {
+ const underTest = { ...plugin, angular: { detected: false, hideDeprecation: false } };
+ expect(() => throwIfAngular(underTest)).not.toThrow();
+ });
+
+ it('should not throw if not angular panel', () => {
+ const underTest = new PanelPlugin(null);
+ expect(() => throwIfAngular(underTest)).not.toThrow();
+ });
+
+ it('should not throw if not angular module', () => {
+ const underTest: System.Module = {};
+ expect(() => throwIfAngular(underTest)).not.toThrow();
+ });
+});
diff --git a/packages/grafana-data/src/utils/throwIfAngular.ts b/packages/grafana-data/src/utils/throwIfAngular.ts
new file mode 100644
index 00000000000..7e542b14462
--- /dev/null
+++ b/packages/grafana-data/src/utils/throwIfAngular.ts
@@ -0,0 +1,15 @@
+import { PanelPlugin } from '../panel/PanelPlugin';
+import { PluginMeta } from '../types/plugin';
+
+export function throwIfAngular(module?: System.Module): void;
+export function throwIfAngular(panel?: PanelPlugin): void;
+export function throwIfAngular(plugin?: PluginMeta): void;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export function throwIfAngular(data?: any): void {
+ const isAngularPlugin = data?.angular?.detected ?? data?.angularDetected ?? false;
+ const isAngularPanel = data?.angularPanelCtrl ?? false;
+ const isAngularModule = data.PanelCtrl ?? data?.ConfigCtrl ?? false;
+ if (isAngularPlugin || isAngularPanel || isAngularModule) {
+ throw new Error('Angular plugins are not supported');
+ }
+}
diff --git a/packages/grafana-data/test/helpers/pluginMocks.ts b/packages/grafana-data/test/helpers/pluginMocks.ts
index 226d6eb87cb..66139a02e2a 100644
--- a/packages/grafana-data/test/helpers/pluginMocks.ts
+++ b/packages/grafana-data/test/helpers/pluginMocks.ts
@@ -37,13 +37,8 @@ export const getMockPlugins = (amount: number): PluginMeta[] => {
return plugins;
};
-export function getPanelPlugin(
- options: Partial,
- reactPanel?: ComponentType,
- angularPanel?: any
-): PanelPlugin {
+export function getPanelPlugin(options: Partial, reactPanel?: ComponentType): PanelPlugin {
const plugin = new PanelPlugin(reactPanel!);
- plugin.angularPanelCtrl = angularPanel;
plugin.meta = {
id: options.id!,
type: PluginType.panel,
diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json
index a03d9fbc051..fe80ca32676 100644
--- a/packages/grafana-runtime/package.json
+++ b/packages/grafana-runtime/package.json
@@ -73,7 +73,6 @@
"@testing-library/dom": "10.4.0",
"@testing-library/react": "16.2.0",
"@testing-library/user-event": "14.6.1",
- "@types/angular": "1.8.9",
"@types/history": "4.7.11",
"@types/jest": "29.5.14",
"@types/lodash": "4.17.15",
diff --git a/packages/grafana-runtime/src/config.ts b/packages/grafana-runtime/src/config.ts
index 47342cc0dbf..e6444cdb80c 100644
--- a/packages/grafana-runtime/src/config.ts
+++ b/packages/grafana-runtime/src/config.ts
@@ -78,7 +78,6 @@ export class GrafanaBootConfig implements GrafanaConfig {
feedbackLinksEnabled = true;
disableLoginForm = false;
defaultDatasource = ''; // UID
- angularSupportEnabled = false;
authProxyEnabled = false;
exploreEnabled = false;
queryHistoryEnabled = false;
@@ -240,10 +239,6 @@ export class GrafanaBootConfig implements GrafanaConfig {
overrideFeatureTogglesFromUrl(this);
overrideFeatureTogglesFromLocalStorage(this);
- if (this.featureToggles.disableAngular) {
- this.angularSupportEnabled = false;
- }
-
// Creating theme after applying feature toggle overrides in case we need to toggle anything
this.theme2 = getThemeById(this.bootData.user.theme);
this.bootData.user.lightTheme = this.theme2.isLight;
diff --git a/packages/grafana-runtime/src/services/AngularLoader.ts b/packages/grafana-runtime/src/services/AngularLoader.ts
deleted file mode 100644
index c7beac4fbb5..00000000000
--- a/packages/grafana-runtime/src/services/AngularLoader.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Used to enable rendering of Angular components within a
- * React component without losing proper typings.
- *
- * @example
- * ```typescript
- * class Component extends PureComponent {
- * element: HTMLElement;
- * angularComponent: AngularComponent;
- *
- * componentDidMount() {
- * const template = '' // angular template here;
- * const scopeProps = { ctrl: angularController }; // angular scope properties here
- * const loader = getAngularLoader();
- * this.angularComponent = loader.load(this.element, scopeProps, template);
- * }
- *
- * componentWillUnmount() {
- * if (this.angularComponent) {
- * this.angularComponent.destroy();
- * }
- * }
- *
- * render() {
- * return (
- *
(this.element = element)} />
- * );
- * }
- * }
- * ```
- *
- * @public
- */
-export interface AngularComponent {
- /**
- * Should be called when the React component will unmount.
- */
- destroy(): void;
- /**
- * Can be used to trigger a re-render of the Angular component.
- */
- digest(): void;
- /**
- * Used to access the Angular scope from the React component.
- */
- getScope(): any;
-}
-
-/**
- * Used to load an Angular component from the context of a React component.
- * Please see the {@link AngularComponent} for a proper example.
- *
- * @public
- */
-export interface AngularLoader {
- /**
- *
- * @param elem - the element that the Angular component will be loaded into.
- * @param scopeProps - values that will be accessed via the Angular scope.
- * @param template - template used by the Angular component.
- */
- load(elem: any, scopeProps: any, template: string): AngularComponent;
-}
-
-let instance: AngularLoader;
-
-/**
- * Used during startup by Grafana to set the AngularLoader so it is available
- * via the {@link getAngularLoader} to the rest of the application.
- *
- * @internal
- */
-export function setAngularLoader(v: AngularLoader) {
- instance = v;
-}
-
-/**
- * Used to retrieve the {@link AngularLoader} that enables the use of Angular
- * components within a React component.
- *
- * Please see the {@link AngularComponent} for a proper example.
- *
- * @public
- */
-export function getAngularLoader(): AngularLoader {
- return instance;
-}
diff --git a/packages/grafana-runtime/src/services/index.ts b/packages/grafana-runtime/src/services/index.ts
index 9503007d68c..c8bf24d6cb5 100644
--- a/packages/grafana-runtime/src/services/index.ts
+++ b/packages/grafana-runtime/src/services/index.ts
@@ -1,10 +1,8 @@
export * from './backendSrv';
-export * from './AngularLoader';
export * from './dataSourceSrv';
export * from './LocationSrv';
export * from './EchoSrv';
export * from './templateSrv';
-export * from './legacyAngularInjector';
export * from './live';
export * from './LocationService';
export * from './appEvents';
diff --git a/packages/grafana-runtime/src/services/legacyAngularInjector.ts b/packages/grafana-runtime/src/services/legacyAngularInjector.ts
deleted file mode 100644
index 4c581ffd97d..00000000000
--- a/packages/grafana-runtime/src/services/legacyAngularInjector.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { auto } from 'angular';
-
-let singleton: auto.IInjectorService;
-
-/**
- * Used during startup by Grafana to temporarily expose the angular injector to
- * pure javascript plugins using {@link getLegacyAngularInjector}.
- *
- * @internal
- */
-export const setLegacyAngularInjector = (instance: auto.IInjectorService) => {
- singleton = instance;
-};
-
-/**
- * WARNING: this function provides a temporary way for plugins to access anything in the
- * angular injector. While the migration from angular to react continues, there are a few
- * options that do not yet have good alternatives. Note that use of this function will
- * be removed in the future.
- *
- * @beta
- */
-export const getLegacyAngularInjector = (): auto.IInjectorService => singleton;
diff --git a/packages/grafana-ui/src/themes/GlobalStyles/GlobalStyles.tsx b/packages/grafana-ui/src/themes/GlobalStyles/GlobalStyles.tsx
index 06c6801aae5..f0952c4ccaf 100644
--- a/packages/grafana-ui/src/themes/GlobalStyles/GlobalStyles.tsx
+++ b/packages/grafana-ui/src/themes/GlobalStyles/GlobalStyles.tsx
@@ -4,7 +4,6 @@ import { useTheme2 } from '../ThemeContext';
import { getAccessibilityStyles } from './accessibility';
import { getAlertingStyles } from './alerting';
-import { getAgularPanelStyles } from './angularPanelStyles';
import { getCardStyles } from './card';
import { getCodeStyles } from './code';
import { getDashboardGridStyles } from './dashboardGrid';
@@ -39,7 +38,6 @@ export function GlobalStyles(props: GlobalStylesProps) {
{
}
async componentDidMount() {
- await loadAndInitAngularIfEnabled();
this.setState({ ready: true });
$('.preloader').remove();
diff --git a/public/app/angular/AngularApp.ts b/public/app/angular/AngularApp.ts
deleted file mode 100644
index 438cbd1a637..00000000000
--- a/public/app/angular/AngularApp.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import 'angular';
-import 'angular-route';
-import 'angular-sanitize';
-import 'angular-bindonce';
-import 'vendor/bootstrap/bootstrap';
-
-import angular from 'angular'; // eslint-disable-line no-duplicate-imports
-import { extend } from 'lodash';
-
-import { getTemplateSrv } from '@grafana/runtime';
-import { coreModule, angularModules } from 'app/angular/core_module';
-import appEvents from 'app/core/app_events';
-import { config } from 'app/core/config';
-import { contextSrv } from 'app/core/services/context_srv';
-import { DashboardLoaderSrv } from 'app/features/dashboard/services/DashboardLoaderSrv';
-import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
-import { setAngularPanelReactWrapper } from 'app/features/plugins/importPanelPlugin';
-import { SystemJS } from 'app/features/plugins/loader/systemjs';
-import { buildImportMap } from 'app/features/plugins/loader/utils';
-import * as sdk from 'app/plugins/sdk';
-
-import { registerAngularDirectives } from './angular_wrappers';
-import { initAngularRoutingBridge } from './bridgeReactAngularRouting';
-import { monkeyPatchInjectorWithPreAssignedBindings } from './injectorMonkeyPatch';
-import { getAngularPanelReactWrapper } from './panel/AngularPanelReactWrapper';
-import { promiseToDigest } from './promiseToDigest';
-import { registerComponents } from './registerComponents';
-
-// Angular plugin dependencies map
-const importMap = {
- angular: {
- ...angular,
- default: angular,
- },
- 'app/core/core_module': {
- default: coreModule,
- __useDefault: true,
- },
- 'app/core/core': {
- appEvents: appEvents,
- contextSrv: contextSrv,
- coreModule: coreModule,
- },
- 'app/plugins/sdk': sdk,
- 'app/core/utils/promiseToDigest': { promiseToDigest },
-} as Record;
-
-export class AngularApp {
- ngModuleDependencies: any[];
- preBootModules: any[];
- registerFunctions: any;
-
- constructor() {
- this.preBootModules = [];
- this.ngModuleDependencies = [];
- this.registerFunctions = {};
- }
-
- init() {
- const app = angular.module('grafana', []);
-
- setAngularPanelReactWrapper(getAngularPanelReactWrapper);
-
- app.config([
- '$controllerProvider',
- '$compileProvider',
- '$filterProvider',
- '$httpProvider',
- '$provide',
- '$sceDelegateProvider',
- (
- $controllerProvider: angular.IControllerProvider,
- $compileProvider: angular.ICompileProvider,
- $filterProvider: angular.IFilterProvider,
- $httpProvider: angular.IHttpProvider,
- $provide: angular.auto.IProvideService,
- $sceDelegateProvider: angular.ISCEDelegateProvider
- ) => {
- if (config.buildInfo.env !== 'development') {
- $compileProvider.debugInfoEnabled(false);
- }
-
- $httpProvider.useApplyAsync(true);
-
- if (Boolean(config.pluginsCDNBaseURL)) {
- $sceDelegateProvider.trustedResourceUrlList(['self', `${config.pluginsCDNBaseURL}/**`]);
- }
-
- this.registerFunctions.controller = $controllerProvider.register;
- this.registerFunctions.directive = $compileProvider.directive;
- this.registerFunctions.factory = $provide.factory;
- this.registerFunctions.service = $provide.service;
- this.registerFunctions.filter = $filterProvider.register;
-
- $provide.decorator('$http', [
- '$delegate',
- '$templateCache',
- ($delegate: any, $templateCache: any) => {
- const get = $delegate.get;
- $delegate.get = (url: string, config: any) => {
- if (url.match(/\.html$/)) {
- // some template's already exist in the cache
- if (!$templateCache.get(url)) {
- url += '?v=' + new Date().getTime();
- }
- }
- return get(url, config);
- };
- return $delegate;
- },
- ]);
- },
- ]);
-
- this.ngModuleDependencies = ['grafana.core', 'ngSanitize', 'grafana', 'pasvaz.bindonce', 'react'];
-
- // makes it possible to add dynamic stuff
- angularModules.forEach((m: angular.IModule) => {
- this.useModule(m);
- });
-
- // register react angular wrappers
- angular.module('grafana.services').service('dashboardLoaderSrv', DashboardLoaderSrv);
-
- coreModule.factory('timeSrv', () => getTimeSrv());
- coreModule.factory('templateSrv', () => getTemplateSrv());
-
- registerAngularDirectives();
- registerComponents();
- initAngularRoutingBridge();
-
- const imports = buildImportMap(importMap);
- // pass the map of module names so systemjs can resolve them
- SystemJS.addImportMap({ imports });
-
- // disable tool tip animation
- $.fn.tooltip.defaults.animation = false;
- }
-
- useModule(module: angular.IModule) {
- if (this.preBootModules) {
- this.preBootModules.push(module);
- } else {
- extend(module, this.registerFunctions);
- }
- this.ngModuleDependencies.push(module.name);
- return module;
- }
-
- bootstrap() {
- const injector = angular.bootstrap(document.getElementById('ngRoot')!, this.ngModuleDependencies);
-
- monkeyPatchInjectorWithPreAssignedBindings(injector);
-
- injector.invoke(() => {
- this.preBootModules.forEach((module) => {
- extend(module, this.registerFunctions);
- });
-
- // I don't know
- return () => {};
- });
-
- return injector;
- }
-}
diff --git a/public/app/angular/AngularLocationWrapper.test.ts b/public/app/angular/AngularLocationWrapper.test.ts
deleted file mode 100644
index 7bd20c89f8c..00000000000
--- a/public/app/angular/AngularLocationWrapper.test.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-import { HistoryWrapper, locationService, setLocationService } from '@grafana/runtime';
-
-import { AngularLocationWrapper } from './AngularLocationWrapper';
-
-// The methods in this file are deprecated
-// Stub the deprecation warning here to prevent polluting the test output
-jest.mock('@grafana/data', () => ({
- ...jest.requireActual('@grafana/data'),
- deprecationWarning: () => {},
-}));
-
-describe('AngularLocationWrapper', () => {
- const { location } = window;
-
- beforeEach(() => {
- setLocationService(new HistoryWrapper());
- });
-
- beforeAll(() => {
- // @ts-ignore
- delete window.location;
-
- window.location = {
- ...location,
- hash: '#hash',
- host: 'localhost:3000',
- hostname: 'localhost',
- href: 'http://www.domain.com:9877/path/b?search=a&b=c&d#hash',
- origin: 'http://www.domain.com:9877',
- pathname: '/path/b',
- port: '9877',
- protocol: 'http:',
- search: '?search=a&b=c&d',
- };
- });
-
- afterAll(() => {
- window.location = location;
- });
-
- const wrapper = new AngularLocationWrapper();
- it('should provide common getters', () => {
- locationService.push('/path/b?search=a&b=c&d#hash');
-
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b?search=a&b=c&d#hash');
- expect(wrapper.protocol()).toBe('http');
- expect(wrapper.host()).toBe('www.domain.com');
- expect(wrapper.port()).toBe(9877);
- expect(wrapper.path()).toBe('/path/b');
- expect(wrapper.search()).toEqual({ search: 'a', b: 'c', d: true });
- expect(wrapper.hash()).toBe('hash');
- expect(wrapper.url()).toBe('/path/b?search=a&b=c&d#hash');
- });
-
- describe('path', () => {
- it('should change path', function () {
- locationService.push('/path/b?search=a&b=c&d#hash');
- wrapper.path('/new/path');
-
- expect(wrapper.path()).toBe('/new/path');
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/new/path?search=a&b=c&d#hash');
- });
-
- it('should not break on numeric values', function () {
- locationService.push('/path/b?search=a&b=c&d#hash');
- wrapper.path(1);
- expect(wrapper.path()).toBe('/1');
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/1?search=a&b=c&d#hash');
- });
-
- it('should allow using 0 as path', function () {
- locationService.push('/path/b?search=a&b=c&d#hash');
- wrapper.path(0);
- expect(wrapper.path()).toBe('/0');
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/0?search=a&b=c&d#hash');
- });
- it('should set to empty path on null value', function () {
- locationService.push('/path/b?search=a&b=c&d#hash');
- wrapper.path('/foo');
- expect(wrapper.path()).toBe('/foo');
- wrapper.path(null);
- expect(wrapper.path()).toBe('/');
- });
- });
-
- describe('search', () => {
- it('should accept string', function () {
- locationService.push('/path/b');
- wrapper.search('x=y&c');
- expect(wrapper.search()).toEqual({ x: 'y', c: true });
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b?x=y&c');
- });
-
- it('search() should accept object', function () {
- locationService.push('/path/b');
- wrapper.search({ one: '1', two: true });
- expect(wrapper.search()).toEqual({ one: '1', two: true });
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b?one=1&two');
- });
-
- it('should copy object', function () {
- locationService.push('/path/b');
- const obj: Record = { one: '1', two: true, three: null };
- wrapper.search(obj);
- expect(obj).toEqual({ one: '1', two: true, three: null });
- obj.one = 'changed';
-
- expect(wrapper.search()).toEqual({ one: '1', two: true });
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b?one=1&two');
- });
-
- it('should change single parameter', function () {
- wrapper.search({ id: 'old', preserved: true });
- wrapper.search('id', 'new');
-
- expect(wrapper.search()).toEqual({ id: 'new', preserved: true });
- });
-
- it('should remove single parameter', function () {
- wrapper.search({ id: 'old', preserved: true });
- wrapper.search('id', null);
-
- expect(wrapper.search()).toEqual({ preserved: true });
- });
-
- it('should remove multiple parameters', function () {
- locationService.push('/path/b');
- wrapper.search({ one: '1', two: true });
- expect(wrapper.search()).toEqual({ one: '1', two: true });
-
- wrapper.search({ one: null, two: null });
- expect(wrapper.search()).toEqual({});
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b');
- });
-
- it('should accept numeric keys', function () {
- locationService.push('/path/b');
- wrapper.search({ 1: 'one', 2: 'two' });
- expect(wrapper.search()).toEqual({ '1': 'one', '2': 'two' });
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b?1=one&2=two');
- });
-
- it('should handle multiple value', function () {
- wrapper.search('a&b');
- expect(wrapper.search()).toEqual({ a: true, b: true });
-
- wrapper.search('a', null);
-
- expect(wrapper.search()).toEqual({ b: true });
-
- wrapper.search('b', undefined);
- expect(wrapper.search()).toEqual({});
- });
-
- it('should handle single value', function () {
- wrapper.search('ignore');
- expect(wrapper.search()).toEqual({ ignore: true });
- wrapper.search(1);
- expect(wrapper.search()).toEqual({ 1: true });
- });
- });
-
- describe('url', () => {
- it('should change the path, search and hash', function () {
- wrapper.url('/some/path?a=b&c=d#hhh');
- expect(wrapper.url()).toBe('/some/path?a=b&c=d#hhh');
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/some/path?a=b&c=d#hhh');
- expect(wrapper.path()).toBe('/some/path');
- expect(wrapper.search()).toEqual({ a: 'b', c: 'd' });
- expect(wrapper.hash()).toBe('hhh');
- });
-
- it('should change only hash when no search and path specified', function () {
- locationService.push('/path/b?search=a&b=c&d');
- wrapper.url('#some-hash');
-
- expect(wrapper.hash()).toBe('some-hash');
- expect(wrapper.url()).toBe('/path/b?search=a&b=c&d#some-hash');
- expect(wrapper.absUrl()).toBe('http://www.domain.com:9877/path/b?search=a&b=c&d#some-hash');
- });
-
- it('should change only search and hash when no path specified', function () {
- locationService.push('/path/b');
- wrapper.url('?a=b');
-
- expect(wrapper.search()).toEqual({ a: 'b' });
- expect(wrapper.hash()).toBe('');
- expect(wrapper.path()).toBe('/path/b');
- });
-
- it('should reset search and hash when only path specified', function () {
- locationService.push('/path/b?search=a&b=c&d#hash');
- wrapper.url('/new/path');
-
- expect(wrapper.path()).toBe('/new/path');
- expect(wrapper.search()).toEqual({});
- expect(wrapper.hash()).toBe('');
- });
-
- it('should change path when empty string specified', function () {
- locationService.push('/path/b?search=a&b=c&d#hash');
- wrapper.url('');
-
- expect(wrapper.path()).toBe('/');
- expect(wrapper.search()).toEqual({});
- expect(wrapper.hash()).toBe('');
- });
- });
-});
diff --git a/public/app/angular/AngularLocationWrapper.ts b/public/app/angular/AngularLocationWrapper.ts
deleted file mode 100644
index 05e82e2e245..00000000000
--- a/public/app/angular/AngularLocationWrapper.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import { deprecationWarning, urlUtil } from '@grafana/data';
-import { locationSearchToObject, locationService, navigationLogger } from '@grafana/runtime';
-
-// Ref: https://github.com/angular/angular.js/blob/ae8e903edf88a83fedd116ae02c0628bf72b150c/src/ng/location.js#L5
-const DEFAULT_PORTS: Record = { http: 80, https: 443, ftp: 21 };
-
-export class AngularLocationWrapper {
- constructor() {
- this.absUrl = this.wrapInDeprecationWarning(this.absUrl);
- this.hash = this.wrapInDeprecationWarning(this.hash);
- this.host = this.wrapInDeprecationWarning(this.host);
- this.path = this.wrapInDeprecationWarning(this.path);
- this.port = this.wrapInDeprecationWarning(this.port, 'window.location');
- this.protocol = this.wrapInDeprecationWarning(this.protocol, 'window.location');
- this.replace = this.wrapInDeprecationWarning(this.replace);
- this.search = this.wrapInDeprecationWarning(this.search);
- this.state = this.wrapInDeprecationWarning(this.state);
- this.url = this.wrapInDeprecationWarning(this.url);
- }
-
- wrapInDeprecationWarning(fn: Function, replacement?: string) {
- let self = this;
-
- return function wrapper() {
- deprecationWarning('$location', fn.name, replacement || 'locationService');
- return fn.apply(self, arguments);
- };
- }
-
- absUrl(): string {
- return `${window.location.origin}${this.url()}`;
- }
-
- hash(newHash?: string | null) {
- navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: hash');
-
- if (!newHash) {
- return locationService.getLocation().hash.slice(1);
- } else {
- throw new Error('AngularLocationWrapper method not implemented.');
- }
- }
-
- host(): string {
- return new URL(window.location.href).hostname;
- }
-
- path(pathname?: any) {
- navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: path');
-
- const location = locationService.getLocation();
-
- if (pathname !== undefined && pathname !== null) {
- let parsedPath = String(pathname);
- parsedPath = parsedPath.startsWith('/') ? parsedPath : `/${parsedPath}`;
- const url = new URL(`${window.location.origin}${parsedPath}`);
-
- locationService.push({
- pathname: url.pathname,
- search: url.search.length > 0 ? url.search : location.search,
- hash: url.hash.length > 0 ? url.hash : location.hash,
- });
- return this;
- }
-
- if (pathname === null) {
- locationService.push('/');
- return this;
- }
-
- return location.pathname;
- }
-
- port(): number | null {
- const url = new URL(window.location.href);
- return parseInt(url.port, 10) || DEFAULT_PORTS[url.protocol] || null;
- }
-
- protocol(): string {
- return new URL(window.location.href).protocol.slice(0, -1);
- }
-
- replace() {
- throw new Error('AngularLocationWrapper method not implemented.');
- }
-
- search(search?: any, paramValue?: any) {
- navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: search');
- if (!search) {
- return locationService.getSearchObject();
- }
-
- if (search && arguments.length > 1) {
- locationService.partial({
- [search]: paramValue,
- });
-
- return this;
- }
-
- if (search) {
- let newQuery;
-
- if (typeof search === 'object') {
- newQuery = { ...search };
- } else {
- newQuery = locationSearchToObject(search);
- }
-
- for (const key in newQuery) {
- // removing params with null | undefined
- if (newQuery[key] === null || newQuery[key] === undefined) {
- delete newQuery[key];
- }
- }
-
- const updatedUrl = urlUtil.renderUrl(locationService.getLocation().pathname, newQuery);
- locationService.push(updatedUrl);
- }
-
- return this;
- }
-
- state(state?: any) {
- navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: state');
- throw new Error('AngularLocationWrapper method not implemented.');
- }
-
- url(newUrl?: any) {
- navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: url');
-
- if (newUrl !== undefined) {
- if (newUrl.startsWith('#')) {
- locationService.push({ ...locationService.getLocation(), hash: newUrl });
- } else if (newUrl.startsWith('?')) {
- locationService.push({ ...locationService.getLocation(), search: newUrl });
- } else if (newUrl.trim().length === 0) {
- locationService.push('/');
- } else {
- locationService.push(newUrl);
- }
-
- return locationService;
- }
-
- const location = locationService.getLocation();
- return `${location.pathname}${location.search}${location.hash}`;
- }
-}
diff --git a/public/app/angular/AngularRoot.tsx b/public/app/angular/AngularRoot.tsx
deleted file mode 100644
index d780685c97c..00000000000
--- a/public/app/angular/AngularRoot.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { forwardRef } from 'react';
-
-export const AngularRoot = forwardRef((props, ref) => {
- return (
-