diff --git a/@xen-orchestra/lite/package.json b/@xen-orchestra/lite/package.json
index 48c5f9de9..4a177b611 100644
--- a/@xen-orchestra/lite/package.json
+++ b/@xen-orchestra/lite/package.json
@@ -30,6 +30,7 @@
"lodash-es": "^4.17.21",
"make-error": "^1.3.6",
"pinia": "^2.0.14",
+ "placement.js": "^1.0.0-beta.5",
"vue": "^3.2.37",
"vue-echarts": "^6.2.3",
"vue-i18n": "9",
diff --git a/@xen-orchestra/lite/src/App.vue b/@xen-orchestra/lite/src/App.vue
index 471e8e0cf..9564b6606 100644
--- a/@xen-orchestra/lite/src/App.vue
+++ b/@xen-orchestra/lite/src/App.vue
@@ -12,6 +12,7 @@
+
@@ -20,6 +21,7 @@ import { watchEffect } from "vue";
import favicon from "@/assets/favicon.svg";
import AppHeader from "@/components/AppHeader.vue";
import AppLogin from "@/components/AppLogin.vue";
+import AppTooltips from "@/components/AppTooltips.vue";
import InfraPoolList from "@/components/infra/InfraPoolList.vue";
import { useChartTheme } from "@/composables/chart-theme.composable";
import { useXenApiStore } from "@/stores/xen-api.store";
diff --git a/@xen-orchestra/lite/src/components/AppTooltip.vue b/@xen-orchestra/lite/src/components/AppTooltip.vue
new file mode 100644
index 000000000..ac13b4845
--- /dev/null
+++ b/@xen-orchestra/lite/src/components/AppTooltip.vue
@@ -0,0 +1,167 @@
+
+
+
+ {{ content }}
+
+
+
+
+
+
diff --git a/@xen-orchestra/lite/src/components/AppTooltips.vue b/@xen-orchestra/lite/src/components/AppTooltips.vue
new file mode 100644
index 000000000..6059ce2aa
--- /dev/null
+++ b/@xen-orchestra/lite/src/components/AppTooltips.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/@xen-orchestra/lite/src/components/infra/InfraHostItem.vue b/@xen-orchestra/lite/src/components/infra/InfraHostItem.vue
index ba3d9c8c5..abf175d43 100644
--- a/@xen-orchestra/lite/src/components/infra/InfraHostItem.vue
+++ b/@xen-orchestra/lite/src/components/infra/InfraHostItem.vue
@@ -1,5 +1,12 @@
-
+
import { computed } from "vue";
+import { vTooltip } from "@/directives/tooltip.directive";
import {
faAngleDown,
faAngleUp,
@@ -29,6 +37,7 @@ import { useToggle } from "@vueuse/core";
import InfraAction from "@/components/infra/InfraAction.vue";
import InfraItemLabel from "@/components/infra/InfraItemLabel.vue";
import InfraVmList from "@/components/infra/InfraVmList.vue";
+import { hasEllipsis } from "@/libs/utils";
import { useHostStore } from "@/stores/host.store";
import { useUiStore } from "@/stores/ui.store";
@@ -45,6 +54,9 @@ const isCurrentHost = computed(
() => props.hostOpaqueRef === uiStore.currentHostOpaqueRef
);
const [isExpanded, toggle] = useToggle();
+
+const isTooltipDisabled = (target: HTMLElement) =>
+ !hasEllipsis(target.querySelector(".text"));