diff --git a/app/app.js b/app/app.js
index a226c7337..6627733f4 100644
--- a/app/app.js
+++ b/app/app.js
@@ -7,7 +7,14 @@ export function onStartupAngular($rootScope, $state, $interval, LocalStorage, En
EndpointProvider.initialize();
$rootScope.$state = $state;
- $rootScope.defaultTitle = document.title;
+ const defaultTitle = document.title;
+
+ $transitions.onEnter({}, () => {
+ const endpoint = EndpointProvider.currentEndpoint();
+ if (endpoint) {
+ document.title = `${defaultTitle} | ${endpoint.Name}`;
+ }
+ });
// Workaround to prevent the loading bar from going backward
// https://github.com/chieffancypants/angular-loading-bar/issues/273
diff --git a/app/assets/css/app.css b/app/assets/css/app.css
index b38fb99c3..3cc59643e 100644
--- a/app/assets/css/app.css
+++ b/app/assets/css/app.css
@@ -809,11 +809,12 @@ json-tree .branch-preview {
}
/* !spinkit override */
-.kubectl-shell {
- display: block;
- text-align: center;
- padding-bottom: 5px;
+/* uib-typeahead override */
+#scrollable-dropdown-menu .dropdown-menu {
+ max-height: 300px;
+ overflow-y: auto;
}
+/* !uib-typeahead override */
.no-margin {
margin: 0 !important;
diff --git a/app/assets/css/rdash.css b/app/assets/css/rdash.css
index f52c20bfc..18affc7d4 100644
--- a/app/assets/css/rdash.css
+++ b/app/assets/css/rdash.css
@@ -15,39 +15,6 @@
}
}
-/**
- * Hamburg Menu
- * When the class of 'hamburg' is applied to the body tag of the document,
- * the sidebar changes it's style to attempt to mimic a menu on a phone app,
- * where the content is overlaying the content, rather than push it.
- */
-@media only screen and (max-width: 560px) {
- body.hamburg #page-wrapper {
- padding-left: 0;
- }
- body.hamburg #page-wrapper:not(.open) #sidebar-wrapper {
- position: absolute;
- left: -100px;
- }
- body.hamburg #page-wrapper:not(.open) ul.sidebar .sidebar-title.separator {
- display: none;
- }
- body.hamburg #page-wrapper.open #sidebar-wrapper {
- position: fixed;
- }
- body.hamburg #page-wrapper.open #sidebar-wrapper ul.sidebar li.sidebar-main {
- margin-left: 0px;
- }
- body.hamburg #sidebar-wrapper ul.sidebar li.sidebar-main,
- body.hamburg .row.header .meta {
- margin-left: 70px;
- }
- body.hamburg #sidebar-wrapper ul.sidebar li.sidebar-main,
- body.hamburg #page-wrapper.open #sidebar-wrapper ul.sidebar li.sidebar-main {
- transition: margin-left 0.4s ease 0s;
- }
-}
-
.loading {
width: 40px;
height: 40px;
@@ -131,16 +98,8 @@ body {
padding-left: 70px;
height: 100%;
}
-#sidebar-wrapper {
- margin-left: -150px;
- left: -30px;
- width: 250px;
- position: fixed;
- height: 100%;
- z-index: 999;
-}
-#page-wrapper,
-#sidebar-wrapper {
+
+#page-wrapper {
transition: all 0.4s ease 0s;
}
.green {
diff --git a/app/assets/css/theme.css b/app/assets/css/theme.css
index b3a48046a..672ba2ec5 100644
--- a/app/assets/css/theme.css
+++ b/app/assets/css/theme.css
@@ -115,7 +115,6 @@
--bg-main-color: var(--white-color);
--bg-body-color: var(--grey-9);
--bg-checkbox-border-color: var(--grey-49);
- --bg-sidebar-color: var(--grey-37);
--bg-sidebar-header-color: var(--grey-37);
--bg-widget-color: var(--white-color);
--bg-widget-header-color: var(--grey-10);
@@ -152,7 +151,6 @@
--bg-row-header-color: var(--white-color);
--bg-image-multiselect-button: linear-gradient(var(--white-color), var(--grey-17));
--bg-multiselect-checkbox-color: var(--white-color);
- --bg-sidebar-wrapper-color: var(--blue-5);
--bg-panel-body-color: var(--white-color);
--bg-codemirror-color: var(--white-color);
--bg-codemirror-selected-color: var(--grey-22);
@@ -223,14 +221,11 @@
--text-ui-select-hover-color: var(--grey-28);
--text-summary-color: var(--black-color);
--text-tooltip-color: var(--white-color);
- --text-sidebar-list-color: var(--grey-56);
-
--text-rzslider-color: var(--grey-36);
--text-rzslider-limit-color: var(--grey-36);
--text-daterangepicker-end-date: var(--grey-57);
--text-daterangepicker-in-range: var(--black-color);
--text-daterangepicker-active: var(--white-color);
- --text-tooltip-color: var(--grey-6);
--text-input-autofill-color: var(--black-color);
--text-button-hover-color: var(--grey-6);
--text-small-select-color: var(--grey-25);
@@ -273,7 +268,6 @@
--border-blocklist: var(--ui-grey-1);
--border-widget: var(--ui-grey-1);
- --hover-sidebar-color: var(--grey-37);
--shadow-box-color: 0 3px 10px -2px var(--grey-50);
--shadow-boxselector-color: 0 3px 10px -2px var(--grey-50);
--blue-color: var(--blue-13);
@@ -307,7 +301,6 @@
--bg-main-color: var(--grey-2);
--bg-body-color: var(--grey-2);
--bg-checkbox-border-color: var(--grey-8);
- --bg-sidebar-color: var(--grey-3);
--bg-widget-color: var(--grey-1);
--bg-widget-header-color: var(--grey-1);
--bg-widget-table-color: var(--grey-1);
@@ -345,7 +338,6 @@
--bg-multiselect-button-color: var(--grey-3);
--bg-image-multiselect-button: none !important;
--bg-multiselect-checkbox-color: var(--grey-3);
- --bg-sidebar-wrapper-color: var(--grey-1);
--bg-panel-body-color: var(--grey-1);
--bg-boxselector-wrapper-disabled-color: var(--grey-39);
--bg-codemirror-selected-color: var(--grey-3);
@@ -411,7 +403,6 @@
--text-summary-color: var(--white-color);
--text-multiselect-button-color: var(--white-color);
--text-multiselect-item-color: var(--white-color);
- --text-sidebar-list-color: var(--white-color);
--text-boxselector-wrapper-color: var(--white-color);
--text-daterangepicker-end-date: var(--grey-7);
--text-daterangepicker-in-range: var(--white-color);
@@ -459,7 +450,6 @@
--border-blocklist: var(--ui-grey-3);
--border-widget: var(--ui-grey-3);
- --hover-sidebar-color: var(--grey-3);
--blue-color: var(--blue-2);
--button-close-color: var(--white-color);
--button-opacity: 0.6;
@@ -491,7 +481,6 @@
--bg-main-color: var(--black-color);
--bg-body-color: var(--black-color);
--bg-checkbox-border-color: var(--grey-8);
- --bg-sidebar-color: var(--black-color);
--bg-widget-color: var(--black-color);
--bg-widget-header-color: var(--black-color);
--bg-widget-table-color: var(--black-color);
@@ -503,7 +492,6 @@
--bg-dropdown-menu-color: var(--black-color);
--bg-codemirror-selected-color: var(--grey-3);
--bg-row-header-color: var(--black-color);
- --bg-sidebar-wrapper-color: var(--black-color);
--bg-motd-body-color: var(--black-color);
--bg-blocklist-hover-color: var(--black-color);
--bg-blocklist-item-selected-color: var(--black-color);
@@ -585,7 +573,6 @@
--text-daterangepicker-end-date: var(--grey-7);
--text-daterangepicker-in-range: var(--white-color);
--text-daterangepicker-active: var(--white-color);
- --text-sidebar-list-color: var(--white-color);
--text-ui-select-color: var(--white-color);
--text-btn-default-color: var(--white-color);
--text-json-tree-color: var(--white-color);
@@ -634,8 +621,6 @@
--border-blocklist: var(--white-color);
--border-widget: var(--white-color);
- --hover-sidebar-color: var(--blue-9);
- --hover-sidebar-color: var(--black-color);
--shadow-box-color: none;
--shadow-boxselector-color: none;
diff --git a/app/azure/AzureSidebar/AzureSidebar.tsx b/app/azure/AzureSidebar/AzureSidebar.tsx
deleted file mode 100644
index ca83d51b5..000000000
--- a/app/azure/AzureSidebar/AzureSidebar.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { r2a } from '@/react-tools/react2angular';
-import { SidebarMenuItem } from '@/portainer/components/sidebar/SidebarMenuItem';
-import type { EnvironmentId } from '@/portainer/environments/types';
-
-interface Props {
- environmentId: EnvironmentId;
-}
-
-export function AzureSidebar({ environmentId }: Props) {
- return (
- <>
-
- Dashboard
-
-
- Container instances
-
- >
- );
-}
-
-export const AzureSidebarAngular = r2a(AzureSidebar, ['environmentId']);
diff --git a/app/azure/AzureSidebar/index.ts b/app/azure/AzureSidebar/index.ts
deleted file mode 100644
index 23b4fe95c..000000000
--- a/app/azure/AzureSidebar/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { AzureSidebar, AzureSidebarAngular } from './AzureSidebar';
diff --git a/app/azure/_module.js b/app/azure/_module.js
index 898303081..90eb8f37a 100644
--- a/app/azure/_module.js
+++ b/app/azure/_module.js
@@ -1,6 +1,5 @@
import angular from 'angular';
-import { AzureSidebarAngular } from './AzureSidebar/AzureSidebar';
import { DashboardViewAngular } from './Dashboard/DashboardView';
import { containerInstancesModule } from './ContainerInstances';
import { reactModule } from './react';
@@ -84,5 +83,4 @@ angular
$stateRegistryProvider.register(dashboard);
},
])
- .component('azureSidebar', AzureSidebarAngular)
.component('dashboardView', DashboardViewAngular);
diff --git a/app/docker/components/docker-sidebar/docker-sidebar.html b/app/docker/components/docker-sidebar/docker-sidebar.html
deleted file mode 100644
index 8e4245eae..000000000
--- a/app/docker/components/docker-sidebar/docker-sidebar.html
+++ /dev/null
@@ -1,186 +0,0 @@
-
- Dashboard
-
-
-
-
- Custom Templates
-
-
-
-
- Stacks
-
-
-
- Services
-
-
-
- Containers
-
-
-
- Images
-
-
-
- Networks
-
-
-
- Volumes
-
-
-
- Configs
-
-
-
- Secrets
-
-
-
- Events
-
-
-
-
- Setup
-
-
-
- Registries
-
-
-
-
-
- Setup
-
-
-
- Registries
-
-
diff --git a/app/docker/components/docker-sidebar/docker-sidebar.js b/app/docker/components/docker-sidebar/docker-sidebar.js
deleted file mode 100644
index 65e679262..000000000
--- a/app/docker/components/docker-sidebar/docker-sidebar.js
+++ /dev/null
@@ -1,15 +0,0 @@
-angular.module('portainer.docker').component('dockerSidebar', {
- templateUrl: './docker-sidebar.html',
- bindings: {
- isSidebarOpen: '<',
-
- endpointApiVersion: '<',
- swarmManagement: '<',
- standaloneManagement: '<',
- adminAccess: '<',
- offlineMode: '<',
- currentRouteName: '<',
- endpointId: '<',
- showStacks: '<',
- },
-});
diff --git a/app/docker/networks/edit/NetworkContainersTable.tsx b/app/docker/networks/edit/NetworkContainersTable.tsx
index cb18ba10e..935ff29f1 100644
--- a/app/docker/networks/edit/NetworkContainersTable.tsx
+++ b/app/docker/networks/edit/NetworkContainersTable.tsx
@@ -66,7 +66,7 @@ export function NetworkContainersTable({
|