= {
control: "radio",
},
},
+ decorators: [
+ (Story) => (
+
+
+
+ ),
+ ],
};
export default meta;
@@ -38,11 +45,94 @@ export const Default: Story = {
tipContent: "This is an example tooltip.",
children: "Example text",
},
- decorators: [
- (Story) => (
-
-
-
+};
+
+/** Medium prose that wraps to two lines. Balance evens the line widths so
+ * neither has a hanging widow, and the tooltip shrinks to hug the widest
+ * balanced line rather than sitting at `max-width`. */
+export const BalancedTwoLines: Story = {
+ args: {
+ tipContent:
+ "Bypassing is valid for a single login attempt and is tracked in audit logs.",
+ children: "Two lines",
+ },
+};
+
+/** Dense prose that wraps to three or four lines. Compare the tidiness of the
+ * ragged right against a normal wrap. */
+export const BalancedDensePassage: Story = {
+ args: {
+ tipContent:
+ "When enabled, allows automatic cleanup of hosts that have not communicated with Fleet in the number of days specified.",
+ children: "Dense passage",
+ },
+};
+
+/** Opt out of balancing via `textBalanced={false}`. Rendered next to the
+ * balanced version of the same content so the difference is visible. */
+export const BalancedVsUnbalanced: Story = {
+ render: () => (
+
+
+ textBalanced=false
+
+
+ textBalanced=true (default)
+
+
+ ),
+};
+
+/** The Fleet settings convention: main tooltip prose above, a single `
`,
+ * and the `(Default: X)` annotation on its own line wrapped in ``. Balance
+ * runs on the prose above the hard break independently. */
+export const BalancedWithDefaultFootnote: Story = {
+ args: {
+ tipContent: (
+ <>
+ When disabled, removes AI features such as pre-filling forms with
+ descriptions generated by a large language model (LLM).
+
+
+ (Default: On)
+
+ >
),
- ],
+ children: "With (Default:) footnote",
+ },
+};
+
+/** Balance flows through nested inline elements (``, ``, ``)
+ * without breaking. Line rects still resolve correctly. */
+export const BalancedWithNestedMarkup: Story = {
+ args: {
+ tipContent: (
+ <>
+ When enabled, preserves host activities after a wipe and re-enrollment.
+ Currently only supported for company-owned (AB) Apple hosts.{" "}
+ Delete activities > Max activity age still applies.
+ >
+ ),
+ children: "With nested markup",
+ },
+};
+
+/** Structural `
`s (list separators) are respected as forced breaks —
+ * balance runs within each segment rather than across the whole flow. */
+export const BalancedWithForcedBreaks: Story = {
+ args: {
+ tipContent: (
+ <>
+ Admin: Alice, Bob, Charlie
+
+ Maintainer: Dana, Eli
+
+ Observer: Faye, Gil, Henry, Ida
+ >
+ ),
+ children: "With forced breaks",
+ },
};
diff --git a/frontend/components/TooltipWrapper/TooltipWrapper.tests.tsx b/frontend/components/TooltipWrapper/TooltipWrapper.tests.tsx
index 83b3ec7caee..7050529e8a2 100644
--- a/frontend/components/TooltipWrapper/TooltipWrapper.tests.tsx
+++ b/frontend/components/TooltipWrapper/TooltipWrapper.tests.tsx
@@ -56,4 +56,81 @@ describe("TooltipWrapper", () => {
const element = screen.getByText("Hover me").parentElement;
expect(element).not.toHaveClass("component__tooltip-wrapper__underline");
});
+
+ it("wraps tipContent in a display:contents span by default (textBalanced)", async () => {
+ const { user } = renderWithSetup(
+
+ Hover me
+
+ );
+
+ await user.hover(screen.getByText("Hover me"));
+
+ await waitFor(() => {
+ const tipText = screen.getByText("Balanced tooltip");
+ // BalancedTipContent wraps content in a span with display:contents so
+ // measurement can find the tooltip root via el.parentElement.
+ const balancedWrapper = tipText.closest('span[style*="contents"]');
+ expect(balancedWrapper).not.toBeNull();
+ });
+ });
+
+ it("renders tipContent directly when textBalanced is false", async () => {
+ const { user } = renderWithSetup(
+
+ Hover me
+
+ );
+
+ await user.hover(screen.getByText("Hover me"));
+
+ await waitFor(() => {
+ const tipText = screen.getByText("Unbalanced tooltip");
+ // Opt-out skips the BalancedTipContent span entirely — no display:contents
+ // wrapper should exist anywhere in the tooltip's DOM.
+ expect(tipText.closest('span[style*="contents"]')).toBeNull();
+ });
+ });
+
+ it("does not throw when Range.getClientRects is unavailable (jsdom)", async () => {
+ // jsdom doesn't implement Range.getClientRects; the effect should feature-
+ // detect and no-op rather than throw. If the guard regresses this test
+ // will surface as an unhandled TypeError during the hover.
+ const errorSpy = jest
+ .spyOn(console, "error")
+ .mockImplementation(() => undefined);
+
+ try {
+ const { user } = renderWithSetup(
+
+ Hover me
+
+ );
+
+ await user.hover(screen.getByText("Hover me"));
+
+ await waitFor(() => {
+ expect(screen.getByText("Guarded tooltip")).toBeInTheDocument();
+ });
+
+ // BalancedTipContent's measurement runs inside a requestAnimationFrame
+ // scheduled from useLayoutEffect — waitFor above may resolve before it
+ // fires. Flush one animation frame so the getClientRects call (and any
+ // TypeError it would throw without the guard) is captured by the spy
+ // before we assert.
+ await new Promise((resolve) => {
+ requestAnimationFrame(() => resolve());
+ });
+
+ // No TypeError from getClientRects should have been logged.
+ const errorCalls = errorSpy.mock.calls.map((args) => String(args[0]));
+ expect(
+ errorCalls.some((msg) =>
+ msg.includes("getClientRects is not a function")
+ )
+ ).toBe(false);
+ } finally {
+ errorSpy.mockRestore();
+ }
+ });
});
diff --git a/frontend/components/TooltipWrapper/TooltipWrapper.tsx b/frontend/components/TooltipWrapper/TooltipWrapper.tsx
index 282ba0f00a8..b0cadd8fe94 100644
--- a/frontend/components/TooltipWrapper/TooltipWrapper.tsx
+++ b/frontend/components/TooltipWrapper/TooltipWrapper.tsx
@@ -1,9 +1,84 @@
import classnames from "classnames";
-import React from "react";
+import React, { useLayoutEffect, useRef } from "react";
import { Tooltip as ReactTooltip5, PlacesType } from "react-tooltip-5";
import { uniqueId } from "lodash";
+/** Renders tooltip content as-is, but on mount applies `text-wrap: balance`
+ * to the tooltip's root element and measures the widest balanced line to set
+ * an explicit width on the root — so the tooltip's background hugs the
+ * balanced text. CSS alone can't shrink the container: the intrinsic width of
+ * a `text-wrap: balance` box is computed as if wrap were `normal`, so it
+ * stays at `max-width` even when the balanced text is narrower. */
+const BalancedTipContent = ({ children }: { children: React.ReactNode }) => {
+ const ref = useRef(null);
+
+ useLayoutEffect(() => {
+ const el = ref.current;
+ if (!el) return undefined;
+ const root = el.parentElement;
+ if (!root) return undefined;
+
+ // react-tooltip positions/sizes the tip via floating-ui after mount, so
+ // measuring synchronously here can land while the tooltip is still at
+ // (0, 0) with an initial width. Defer to the next frame.
+ const rafId = requestAnimationFrame(() => {
+ // Clear any prior explicit width so wrap uses the mixin's max-width.
+ root.style.width = "";
+ root.style.textWrap = "balance";
+ const range = document.createRange();
+ range.selectNodeContents(root);
+ // jsdom (Jest) doesn't implement Range.getClientRects, so measurement is
+ // a no-op there — balancing is a visual concern with no test coverage
+ // to preserve.
+ if (typeof range.getClientRects !== "function") return;
+ const rects = range.getClientRects();
+ // Range.getClientRects returns one rect per text run per line, so a line
+ // containing text plus a nested // produces multiple
+ // narrower rects. Taking the widest single rect would under-measure the
+ // line width. Group rects by their top edge (visual line) and compute
+ // each line's true width from the leftmost/rightmost extents, then pick
+ // the widest line.
+ const lineBounds = new Map();
+ for (let i = 0; i < rects.length; i += 1) {
+ const rect = rects[i];
+ if (rect.width !== 0) {
+ // Round to bucket sub-pixel variation on the same visual line.
+ const lineKey = Math.round(rect.top);
+ const bounds = lineBounds.get(lineKey);
+ if (bounds) {
+ if (rect.left < bounds.left) bounds.left = rect.left;
+ if (rect.right > bounds.right) bounds.right = rect.right;
+ } else {
+ lineBounds.set(lineKey, { left: rect.left, right: rect.right });
+ }
+ }
+ }
+ let widest = 0;
+ lineBounds.forEach(({ left, right }) => {
+ const lineWidth = right - left;
+ if (lineWidth > widest) widest = lineWidth;
+ });
+ if (widest > 0) {
+ const style = window.getComputedStyle(root);
+ const padLeft = parseFloat(style.paddingLeft) || 0;
+ const padRight = parseFloat(style.paddingRight) || 0;
+ root.style.width = `${Math.ceil(widest + padLeft + padRight)}px`;
+ }
+ });
+
+ return () => cancelAnimationFrame(rafId);
+ }, [children]);
+
+ // display: contents so this span leaves no layout box — its children render
+ // as direct children of the tooltip root, and `el.parentElement` is that root.
+ return (
+
+ {children}
+
+ );
+};
+
export interface ITooltipWrapper {
children: React.ReactNode;
// default is bottom-start
@@ -49,6 +124,11 @@ and mouseout from the element. If a boolean, sets delay to the default below. If
* */
fixedPositionStrategy?: boolean;
isMobileView?: boolean;
+ /** If `true`, evenly distributes characters across lines and shrinks the
+ * tooltip to hug the balanced text so there's no widow word or trailing
+ * whitespace on the right. Adds a one-time layout measurement per content
+ * change. */
+ textBalanced?: boolean;
}
const baseClass = "component__tooltip-wrapper";
@@ -75,6 +155,7 @@ const TooltipWrapper = ({
showArrow = false,
fixedPositionStrategy = false,
isMobileView = false,
+ textBalanced = true,
}: ITooltipWrapper) => {
const wrapperClassNames = classnames(baseClass, className, {
"show-arrow": showArrow,
@@ -143,7 +224,11 @@ const TooltipWrapper = ({
openEvents={isMobileView ? { click: true } : { mouseenter: true }}
closeEvents={isMobileView ? { click: true } : { mouseleave: true }}
>
- {tipContent}
+ {textBalanced ? (
+ {tipContent}
+ ) : (
+ tipContent
+ )}
)}
diff --git a/frontend/components/queries/LiveResults/LiveResultsHeading/LiveResultsHeading.tsx b/frontend/components/queries/LiveResults/LiveResultsHeading/LiveResultsHeading.tsx
index 241df0666d0..a8d59ee0055 100644
--- a/frontend/components/queries/LiveResults/LiveResultsHeading/LiveResultsHeading.tsx
+++ b/frontend/components/queries/LiveResults/LiveResultsHeading/LiveResultsHeading.tsx
@@ -108,22 +108,22 @@ const LiveResultsHeading = ({
isFinished ? (
<>
Results from{" "}
-
+
{numHostsRespondedResults}{" "}
{pluralizeHost(numHostsRespondedResults)}
-
+
No results from{" "}
-
+
{numHostsRespondedNoErrorsAndNoResults}{" "}
{pluralizeHost(numHostsRespondedNoErrorsAndNoResults)}
-
+
Errors from{" "}
-
+
{numHostsRespondedErrors}{" "}
{pluralizeHost(numHostsRespondedErrors)}
-
+
>
) : (
<>
@@ -151,8 +151,8 @@ const LiveResultsHeading = ({
- The hosts' distributed interval can
- impact live report response times.
+ The hosts' distributed interval can impact live report
+ response times.
>
}
>
diff --git a/frontend/pages/DashboardPage/DashboardPage.tsx b/frontend/pages/DashboardPage/DashboardPage.tsx
index fc7a038f055..b3de4717cec 100644
--- a/frontend/pages/DashboardPage/DashboardPage.tsx
+++ b/frontend/pages/DashboardPage/DashboardPage.tsx
@@ -402,15 +402,7 @@ const DashboardPage = ({ router, location }: IDashboardProps): JSX.Element => {
setSoftwareTitleDetail(
- Fleet periodically queries all hosts to
-
- retrieve software. Click to view
-
- hosts for the most up-to-date lists.
- >
- }
+ customTooltipText="Fleet periodically queries all hosts to retrieve software. Click to view hosts for the most up-to-date lists."
/>
);
} else if (!isViewingVulnerableSoftware) {
diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/GlobalActivityItem/GlobalActivityItem.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/GlobalActivityItem/GlobalActivityItem.tsx
index ce49d5cc608..ac751a652d7 100644
--- a/frontend/pages/DashboardPage/cards/ActivityFeed/GlobalActivityItem/GlobalActivityItem.tsx
+++ b/frontend/pages/DashboardPage/cards/ActivityFeed/GlobalActivityItem/GlobalActivityItem.tsx
@@ -307,8 +307,10 @@ const TAGGED_TEMPLATES = {
- The host expiry window configured in
- Settings > Organization settings > Advanced options
+ The host expiry window configured in{" "}
+
+ Settings > Organization settings > Advanced options
+
>
}
>
diff --git a/frontend/pages/DashboardPage/cards/ChartCard/ChartFilterModal/SoftwareFilters/SoftwareFilters.tsx b/frontend/pages/DashboardPage/cards/ChartCard/ChartFilterModal/SoftwareFilters/SoftwareFilters.tsx
index 83846f81778..df4be038b6e 100644
--- a/frontend/pages/DashboardPage/cards/ChartCard/ChartFilterModal/SoftwareFilters/SoftwareFilters.tsx
+++ b/frontend/pages/DashboardPage/cards/ChartCard/ChartFilterModal/SoftwareFilters/SoftwareFilters.tsx
@@ -179,8 +179,8 @@ const SoftwareFilters = ({
tipContent={
<>
The probability that this vulnerability will be exploited in
- the next 30 days (EPSS probability).
- This data is reported by FIRST.org.
+ the next 30 days (EPSS probability). This data is reported
+ by FIRST.org.
>
}
>
diff --git a/frontend/pages/DashboardPage/cards/ChartCard/_styles.scss b/frontend/pages/DashboardPage/cards/ChartCard/_styles.scss
index 98baf6f2a41..7c32d1cface 100644
--- a/frontend/pages/DashboardPage/cards/ChartCard/_styles.scss
+++ b/frontend/pages/DashboardPage/cards/ChartCard/_styles.scss
@@ -139,17 +139,13 @@
}
&__tooltip {
- background: $core-fleet-black;
- color: $core-fleet-white;
- padding: $pad-small $pad-medium;
- border-radius: $border-radius;
- font-size: $xx-small;
+ @include tooltip-text;
+
box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1);
}
&__tooltip-label {
margin-bottom: $pad-xsmall;
- opacity: 0.8;
}
&__tooltip-value {
@@ -168,7 +164,6 @@
&__tooltip-section-header {
font-weight: $regular;
- opacity: 0.8;
}
&__tooltip-section-line {
diff --git a/frontend/pages/DashboardPage/cards/HostsEnrolledCard/_styles.scss b/frontend/pages/DashboardPage/cards/HostsEnrolledCard/_styles.scss
index 141fc83d176..03d49ae5143 100644
--- a/frontend/pages/DashboardPage/cards/HostsEnrolledCard/_styles.scss
+++ b/frontend/pages/DashboardPage/cards/HostsEnrolledCard/_styles.scss
@@ -45,18 +45,16 @@
}
&__tooltip {
- background: $core-fleet-black;
- color: $core-fleet-white;
- padding: $pad-small $pad-medium;
- border-radius: $border-radius;
- font-size: $xx-small;
+ @include tooltip-text;
+
box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1);
+ // Bar hover shows short "N hosts" / "X% of fleet" values that fit on one
+ // line each; keep them from wrapping so the tooltip stays compact.
white-space: nowrap;
}
&__tooltip-label {
margin-bottom: $pad-xsmall;
- opacity: 0.8;
}
&__tooltip-value {
@@ -65,7 +63,6 @@
&__tooltip-share {
margin-top: $pad-xsmall;
- opacity: 0.8;
}
// Suppress browser focus/click outlines on the chart wrapper, SVG surface,
diff --git a/frontend/pages/ManageControlsPage/OSSettings/cards/DiskEncryption/DiskEncryption.tsx b/frontend/pages/ManageControlsPage/OSSettings/cards/DiskEncryption/DiskEncryption.tsx
index 06c3e235b44..54ac148d837 100644
--- a/frontend/pages/ManageControlsPage/OSSettings/cards/DiskEncryption/DiskEncryption.tsx
+++ b/frontend/pages/ManageControlsPage/OSSettings/cards/DiskEncryption/DiskEncryption.tsx
@@ -151,17 +151,9 @@ const DiskEncryption = ({
if (platform === "linux") {
return (
<>
- For Ubuntu and Fedora Linux.
-
- Currently, full disk encryption must be turned on{" "}
-
- during OS
-
- setup
-
- . If disk encryption is off, the end user must re-install
-
- their operating system.
+ For Ubuntu and Fedora Linux. Currently, full disk encryption must be
+ turned on during OS setup. If disk encryption is off,
+ the end user must re-install their operating system.
>
);
}
@@ -171,9 +163,11 @@ const DiskEncryption = ({
: ["Apple", "FileVault"];
return (
<>
- {AppleOrWindows} MDM must be turned on in Settings >{" "}
- Integrations > Mobile Device Management (MDM) to
- enforce disk encryption via {DEMethod}.
+ {AppleOrWindows} MDM must be turned on in{" "}
+
+ Settings > Integrations > Mobile Device Management (MDM)
+ {" "}
+ to enforce disk encryption via {DEMethod}.
>
);
};
@@ -251,9 +245,7 @@ const DiskEncryption = ({
<>
If enabled, end users on Windows hosts will be required to
set a BitLocker PIN.
- >
-
- <>
+
When the PIN is set, it’s required to unlock Windows
hosts during startup.
>
diff --git a/frontend/pages/ManageControlsPage/OSUpdates/components/CurrentVersionSection/CurrentVersionSection.tsx b/frontend/pages/ManageControlsPage/OSUpdates/components/CurrentVersionSection/CurrentVersionSection.tsx
index 1c7e0837fee..432f9de84b6 100644
--- a/frontend/pages/ManageControlsPage/OSUpdates/components/CurrentVersionSection/CurrentVersionSection.tsx
+++ b/frontend/pages/ManageControlsPage/OSUpdates/components/CurrentVersionSection/CurrentVersionSection.tsx
@@ -86,17 +86,7 @@ const CurrentVersionSection = ({
return (
- Fleet periodically queries all hosts to
-
- retrieve operating systems. Click to
-
- view hosts for the most up-to-date
-
- lists.
- >
- }
+ customTooltipText="Fleet periodically queries all hosts to retrieve operating systems. Click to view hosts for the most up-to-date lists."
/>
);
};
diff --git a/frontend/pages/ManageControlsPage/SetupExperience/cards/SetupAssistant/components/AdvancedOptionsForm/AdvancedOptionsForm.tsx b/frontend/pages/ManageControlsPage/SetupExperience/cards/SetupAssistant/components/AdvancedOptionsForm/AdvancedOptionsForm.tsx
index 7242d9bc4c7..a96433259ed 100644
--- a/frontend/pages/ManageControlsPage/SetupExperience/cards/SetupAssistant/components/AdvancedOptionsForm/AdvancedOptionsForm.tsx
+++ b/frontend/pages/ManageControlsPage/SetupExperience/cards/SetupAssistant/components/AdvancedOptionsForm/AdvancedOptionsForm.tsx
@@ -38,7 +38,11 @@ const AdvancedOptionsForm = ({
const tooltip = (
<>
When enabled, you're responsible for sending the DeviceConfigured
- command. (Default: Off)
+ command.
+
+
+ (Default: Off)
+
>
);
diff --git a/frontend/pages/ManageControlsPage/SetupExperience/cards/Users/components/UsersForm/components/EndUserAuthSection/EndUserAuthSection.tsx b/frontend/pages/ManageControlsPage/SetupExperience/cards/Users/components/UsersForm/components/EndUserAuthSection/EndUserAuthSection.tsx
index bd70451e161..50296b4bb34 100644
--- a/frontend/pages/ManageControlsPage/SetupExperience/cards/Users/components/UsersForm/components/EndUserAuthSection/EndUserAuthSection.tsx
+++ b/frontend/pages/ManageControlsPage/SetupExperience/cards/Users/components/UsersForm/components/EndUserAuthSection/EndUserAuthSection.tsx
@@ -35,17 +35,15 @@ const EndUserAuthSection = ({
- To enable, first connect Fleet to
-
- your{" "}
+ <>
+ To enable, first connect Fleet to your{" "}
.
-
+ >
) : undefined
}
disableTooltip={isIdPConfigured}
diff --git a/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetAppDetailsModal/FleetAppDetailsModal.tsx b/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetAppDetailsModal/FleetAppDetailsModal.tsx
index c6b4b430b63..982a673c12c 100644
--- a/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetAppDetailsModal/FleetAppDetailsModal.tsx
+++ b/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetAppDetailsModal/FleetAppDetailsModal.tsx
@@ -38,9 +38,8 @@ const SLUG_TOOLTIP_MESSAGE = (
const URL_TOOLTIP_MESSAGE = (
<>
- Fleet downloads the package from the URL and stores it.
-
- Hosts download it from Fleet before install.
+ Fleet downloads the package from the URL and stores it. Hosts download it
+ from Fleet before install.
>
);
@@ -57,11 +56,7 @@ const FleetAppDetailsModal = ({
versionElement = (
- To preview the version download
-
- {name} using the URL below.
- >
+ <>To preview the version, download {name} using the URL below.>
}
>
Latest
diff --git a/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetMaintainedAppDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetMaintainedAppDetailsPage.tsx
index 11ed62939f3..4d767c5f943 100644
--- a/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetMaintainedAppDetailsPage.tsx
+++ b/frontend/pages/SoftwarePage/SoftwareAddPage/SoftwareFleetMaintained/FleetMaintainedAppDetailsPage/FleetMaintainedAppDetailsPage.tsx
@@ -57,9 +57,8 @@ const FleetAppSummary = ({
- To preview the version select Show details
-
- and download {name} using the URL.
+ To preview the version, select Show details and
+ download {name} using the URL.
>
}
>
diff --git a/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx
index 2a1a3bb79d8..6d4bcc25f29 100644
--- a/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx
+++ b/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx
@@ -449,9 +449,8 @@ const SoftwareTitleDetailsPage = ({
- This title already has {MAX_PACKAGES_PER_TITLE} packages.
-
- Delete one you no longer use before adding.
+ This title already has {MAX_PACKAGES_PER_TITLE} packages. Delete
+ one you no longer use before adding.
>
}
showArrow
diff --git a/frontend/pages/SoftwarePage/components/forms/PackageAdvancedOptions/PackageAdvancedOptions.tsx b/frontend/pages/SoftwarePage/components/forms/PackageAdvancedOptions/PackageAdvancedOptions.tsx
index abaf4594b21..ac9e9d28c77 100644
--- a/frontend/pages/SoftwarePage/components/forms/PackageAdvancedOptions/PackageAdvancedOptions.tsx
+++ b/frontend/pages/SoftwarePage/components/forms/PackageAdvancedOptions/PackageAdvancedOptions.tsx
@@ -294,10 +294,7 @@ const PackageAdvancedOptions = ({
requiresAdvancedOptions ? (
<>Install and uninstall scripts are required for .{ext} packages.>
) : (
- <>
- Choose a file to modify
- advanced options.
- >
+ <>Choose a file to modify advanced options.>
)
}
/>
diff --git a/frontend/pages/SoftwarePage/components/modals/ManageSoftwareAutomationsModal/ManageSoftwareAutomationsModal.tsx b/frontend/pages/SoftwarePage/components/modals/ManageSoftwareAutomationsModal/ManageSoftwareAutomationsModal.tsx
index ee0ba799307..c12bf03b68d 100644
--- a/frontend/pages/SoftwarePage/components/modals/ManageSoftwareAutomationsModal/ManageSoftwareAutomationsModal.tsx
+++ b/frontend/pages/SoftwarePage/components/modals/ManageSoftwareAutomationsModal/ManageSoftwareAutomationsModal.tsx
@@ -515,8 +515,7 @@ const ManageAutomationsModal = ({
- Add an integration to create
-
tickets for vulnerability automations.
+ Add an integration to create tickets for vulnerability automations.
>
}
disableTooltip={hasIntegrations || gomDisabled}
diff --git a/frontend/pages/SoftwarePage/components/modals/SoftwareFiltersModal/SoftwareFiltersModal.tsx b/frontend/pages/SoftwarePage/components/modals/SoftwareFiltersModal/SoftwareFiltersModal.tsx
index 23452d36dc5..d655d417a63 100644
--- a/frontend/pages/SoftwarePage/components/modals/SoftwareFiltersModal/SoftwareFiltersModal.tsx
+++ b/frontend/pages/SoftwarePage/components/modals/SoftwareFiltersModal/SoftwareFiltersModal.tsx
@@ -76,10 +76,13 @@ const validate = (data: IFormData): IFormErrors => {
max !== undefined &&
min > max
) {
+ // Manual
so the first line runs longer than the second — balance
+ // would even them out, which reads more awkwardly here than the deliberate
+ // top-heavy shape.
errors.disableApplyButton = (
<>
- Minimum CVSS score cannot be greater
-
than the maximum CVSS score.
+ Minimum CVSS score cannot be greater
+ than the maximum CVSS score.
>
);
}
@@ -178,9 +181,8 @@ const SoftwareFiltersModal = ({
- The worst case impact across different environments
-
- (CVSS version 3.x base score).
+ The worst case impact across different environments (CVSS version
+ 3.x base score).
>
}
clickable={false}
diff --git a/frontend/pages/admin/IntegrationsPage/cards/ConditionalAccess/ConditionalAccess.tsx b/frontend/pages/admin/IntegrationsPage/cards/ConditionalAccess/ConditionalAccess.tsx
index 422c1268892..970637bc697 100644
--- a/frontend/pages/admin/IntegrationsPage/cards/ConditionalAccess/ConditionalAccess.tsx
+++ b/frontend/pages/admin/IntegrationsPage/cards/ConditionalAccess/ConditionalAccess.tsx
@@ -543,10 +543,11 @@ const ConditionalAccess = () => {
tipContent={
<>
Bypassing is valid for a single login attempt and is tracked
- in audit logs. Critical policies can never be bypassed.{" "}
-
+ in audit logs. Critical policies can never be bypassed.
+
+
(Default: On)
-
+
>
}
showArrow={false}
diff --git a/frontend/pages/admin/IntegrationsPage/cards/GlobalHostStatusWebhook/GlobalHostStatusWebhook.tsx b/frontend/pages/admin/IntegrationsPage/cards/GlobalHostStatusWebhook/GlobalHostStatusWebhook.tsx
index 98d68a1162e..99cf07a4d1a 100644
--- a/frontend/pages/admin/IntegrationsPage/cards/GlobalHostStatusWebhook/GlobalHostStatusWebhook.tsx
+++ b/frontend/pages/admin/IntegrationsPage/cards/GlobalHostStatusWebhook/GlobalHostStatusWebhook.tsx
@@ -191,12 +191,7 @@ const GlobalHostStatusWebhook = ({
parseTarget
onBlur={validateForm}
error={formErrors.destination_url}
- tooltip={
- <>
- Provide a URL to deliver
- the webhook request to.
- >
- }
+ tooltip="Provide a URL to deliver the webhook request to."
/>
- Select the minimum percentage of hosts that
-
- must fail to check into Fleet in order to trigger
-
- the webhook request.
+ Select the minimum percentage of hosts that must fail to
+ check into Fleet in order to trigger the webhook request.
>
}
/>
@@ -228,13 +220,9 @@ const GlobalHostStatusWebhook = ({
onBlur={validateForm}
tooltip={
<>
- Select the minimum number of days that the
-
- configured Percentage of hosts must fail to
-
- check into Fleet in order to trigger the
-
- webhook request.
+ Select the minimum number of days that the configured{" "}
+ Percentage of hosts must fail to check
+ into Fleet in order to trigger the webhook request.
>
}
/>
diff --git a/frontend/pages/admin/IntegrationsPage/cards/Integrations/components/IntegrationForm/IntegrationForm.tsx b/frontend/pages/admin/IntegrationsPage/cards/Integrations/components/IntegrationForm/IntegrationForm.tsx
index dc7eda612d4..b667abff33a 100644
--- a/frontend/pages/admin/IntegrationsPage/cards/Integrations/components/IntegrationForm/IntegrationForm.tsx
+++ b/frontend/pages/admin/IntegrationsPage/cards/Integrations/components/IntegrationForm/IntegrationForm.tsx
@@ -253,12 +253,8 @@ const IntegrationForm = ({
tooltip={
<>
To find the Zendesk group ID, select{" "}
-
- Admin >
- People > Groups
-
- . Find the group and select it.
- The group ID will appear in the search field.
+ Admin > People > Groups. Find the group
+ and select it. The group ID will appear in the search field.
>
}
/>
@@ -281,11 +277,7 @@ const IntegrationForm = ({
formData.groupId === 0;
return (
- Complete all fields to save
the integration.
- >
- }
+ tipContent="Complete all fields to save the integration."
tooltipClass="add-integration-tooltip"
position="top"
disableTooltip={!formInvalid || disableChildren}
diff --git a/frontend/pages/admin/IntegrationsPage/cards/MdmSettings/AppleBusinessManagerPage/components/AppleBusinessManagerTable/OrgNameCell/OrgNameCell.tsx b/frontend/pages/admin/IntegrationsPage/cards/MdmSettings/AppleBusinessManagerPage/components/AppleBusinessManagerTable/OrgNameCell/OrgNameCell.tsx
index 6eaf047f2e1..a10ef7c3d44 100644
--- a/frontend/pages/admin/IntegrationsPage/cards/MdmSettings/AppleBusinessManagerPage/components/AppleBusinessManagerTable/OrgNameCell/OrgNameCell.tsx
+++ b/frontend/pages/admin/IntegrationsPage/cards/MdmSettings/AppleBusinessManagerPage/components/AppleBusinessManagerTable/OrgNameCell/OrgNameCell.tsx
@@ -17,13 +17,7 @@ const OrgNameCell = ({ orgName, termsExpired }: IOrgNameCellProps) => {
showArrow
underline={false}
position="top"
- tipContent={
- <>
- The AB terms have changed.
-
- To accept terms, go to AB.
- >
- }
+ tipContent="The AB terms have changed. To accept terms, go to AB."
className={`${baseClass}__tooltip-wrapper`}
>
{orgName}
diff --git a/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/TeamSettings.tsx b/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/TeamSettings.tsx
index 15e5c949ad5..2ffc3795188 100644
--- a/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/TeamSettings.tsx
+++ b/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/TeamSettings.tsx
@@ -408,12 +408,7 @@ const TeamSettings = ({ location, router }: ITeamSubnavProps) => {
onBlur={onHostStatusWebhookUrlBlur}
error={formErrors.host_status_webhook_destination_url}
disabled={gitopsModeEnabled}
- tooltip={
-
- Provide a URL to deliver
- the webhook request to.
-
- }
+ tooltip={<>Provide a URL to deliver the webhook request to.>}
/>
- When enabled, Fleet stops collecting hosts online
-
- data for this fleet's contribution to the
-
- dashboard chart.
+ When enabled, Fleet stops collecting hosts online data for
+ this fleet's contribution to the dashboard chart.
>
)
}
@@ -64,10 +61,8 @@ const HistoricalDataTeamControls = ({
: !disableChildren && (
<>
When enabled, Fleet stops collecting vulnerability
-
- exposure data for this fleet's contribution
-
- to the dashboard chart.
+ exposure data for this fleet's contribution to the
+ dashboard chart.
>
)
}
diff --git a/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/components/TeamHostExpiryToggle/TeamHostExpiryToggle.tsx b/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/components/TeamHostExpiryToggle/TeamHostExpiryToggle.tsx
index 75ad706c934..0ce177db1c7 100644
--- a/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/components/TeamHostExpiryToggle/TeamHostExpiryToggle.tsx
+++ b/frontend/pages/admin/ManageFleetsPage/TeamDetailsWrapper/TeamSettings/components/TeamHostExpiryToggle/TeamHostExpiryToggle.tsx
@@ -61,20 +61,13 @@ const TeamHostExpiryToggle = ({
helpText={renderHelpText()}
labelTooltipContent={
<>
- When enabled, allows automatic cleanup of
+ When enabled, allows automatic cleanup of hosts that have not
+ communicated with Fleet in the number of days specified in the{" "}
+ Host expiry window setting.
- hosts that have not communicated with Fleet in
-
- the number of days specified in the{" "}
-
- Host expiry
-
- window
- {" "}
- setting.{" "}
-
+
(Default: Off)
-
+
>
}
>
diff --git a/frontend/pages/admin/ManageUsersPage/components/UserForm/UserForm.tsx b/frontend/pages/admin/ManageUsersPage/components/UserForm/UserForm.tsx
index fd8477c8b0d..e5ff4ac7df6 100644
--- a/frontend/pages/admin/ManageUsersPage/components/UserForm/UserForm.tsx
+++ b/frontend/pages/admin/ManageUsersPage/components/UserForm/UserForm.tsx
@@ -563,9 +563,8 @@ const UserForm = ({
- SSO is not enabled in organization settings.
-
- User must sign in with a password.
+ SSO is not enabled in organization settings. User must sign in
+ with a password.
>
}
>
diff --git a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ActivityDataRetentionSection/ActivityDataRetentionSection.tsx b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ActivityDataRetentionSection/ActivityDataRetentionSection.tsx
index a401bc44ab1..dd309d835aa 100644
--- a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ActivityDataRetentionSection/ActivityDataRetentionSection.tsx
+++ b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ActivityDataRetentionSection/ActivityDataRetentionSection.tsx
@@ -53,14 +53,12 @@ const ActivityDataRetentionSection = ({
labelTooltipContent={
!disableChildren && (
<>
- When enabled, allows automatic cleanup of
+ When enabled, allows automatic cleanup of audit logs older
+ than the number of days specified.
- audit logs older than the number of days
-
- specified.{" "}
-
+
(Default: Off)
-
+
>
)
}
@@ -100,21 +98,15 @@ const ActivityDataRetentionSection = ({
labelTooltipContent={
!disableChildren && (
<>
- <>
- When enabled, preserves host activities after
-
- a wipe and re-enrollment. Currently only
-
- supported for company-owned (AB) Apple
-
- hosts.{" "}
- Delete activities > Max activity age
-
- still applies.{" "}
-
- (Default: Off)
-
- >
+ When enabled, preserves host activities after a wipe and
+ re-enrollment. Currently only supported for company-owned (AB)
+ Apple hosts.{" "}
+ Delete activities > Max activity age
+ still applies.
+
+
+ (Default: Off)
+
>
)
}
@@ -139,16 +131,14 @@ const ActivityDataRetentionSection = ({
labelTooltipContent={
!disableChildren && (
<>
- Disabling stored results will decrease database usage,
+ Disabling stored results will decrease database usage, but
+ will prevent you from accessing report results in Fleet and
+ will delete existing results. This can also be disabled on a
+ per-report basis.
- but will prevent you from accessing report results in
-
- Fleet and will delete existing results. This can also be
-
- disabled on a per-report basis.{" "}
-
- (Default: On)
-
+
+ (Default: On)
+
>
)
}
@@ -174,12 +164,12 @@ const ActivityDataRetentionSection = ({
labelTooltipContent={
!disableChildren && (
<>
- When disabled, Fleet stops collecting hourly hosts online
+ When disabled, Fleet stops collecting hourly hosts online data
+ used by the dashboard chart.
- data used by the dashboard chart.{" "}
-
+
(Default: On)
-
+
>
)
}
@@ -206,11 +196,11 @@ const ActivityDataRetentionSection = ({
!disableChildren && (
<>
When disabled, Fleet stops collecting historical
+ vulnerability exposure data used by the dashboard chart.
- vulnerability exposure data used by the dashboard chart.{" "}
-
+
(Default: On)
-
+
>
)
}
diff --git a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/FeaturesSection/FeaturesSection.tsx b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/FeaturesSection/FeaturesSection.tsx
index 0bb0fe897e8..85982de36d5 100644
--- a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/FeaturesSection/FeaturesSection.tsx
+++ b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/FeaturesSection/FeaturesSection.tsx
@@ -29,12 +29,12 @@ const FeaturesSection = ({
labelTooltipContent={
!disableChildren && (
<>
- When disabled, removes the ability to run live reports
+ When disabled, removes the ability to run live reports (ad hoc
+ reports executed via the UI or fleetctl).
- (ad hoc reports executed via the UI or fleetctl).{" "}
-
+
(Default: On)
-
+
>
)
}
@@ -58,17 +58,14 @@ const FeaturesSection = ({
!disableChildren && (
<>
Disabling script execution will block access to run scripts.
-
Scripts may still be added and removed in the UI and API.
-
Features that run scripts under-the-hood (e.g. software
-
install, lock/wipe, script-only packages) will still be
available.
-
+
(Default: On)
-
+
>
)
}
@@ -94,13 +91,11 @@ const FeaturesSection = ({
!disableChildren && (
<>
When disabled, removes AI features such as pre-filling forms
+ with descriptions generated by a large language model (LLM).{" "}
- with descriptions generated by a large language model
-
- (LLM).{" "}
-
+
(Default: On)
-
+
>
)
}
diff --git a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/HostLifecycleSection/HostLifecycleSection.tsx b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/HostLifecycleSection/HostLifecycleSection.tsx
index 13f16ec7519..259ceffa9a2 100644
--- a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/HostLifecycleSection/HostLifecycleSection.tsx
+++ b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/HostLifecycleSection/HostLifecycleSection.tsx
@@ -32,14 +32,12 @@ const HostLifecycleSection = ({
labelTooltipContent={
!disableChildren && (
<>
- When enabled, allows automatic cleanup of
+ When enabled, allows automatic cleanup of hosts that have not
+ communicated with Fleet in the number of days specified.
- hosts that have not communicated with Fleet
-
- in the number of days specified.{" "}
-
+
(Default: Off)
-
+
>
)
}
diff --git a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ServerAuthenticationSection/ServerAuthenticationSection.tsx b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ServerAuthenticationSection/ServerAuthenticationSection.tsx
index df3256e1da3..8479484fabb 100644
--- a/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ServerAuthenticationSection/ServerAuthenticationSection.tsx
+++ b/frontend/pages/admin/OrgSettingsPage/cards/Advanced/components/ServerAuthenticationSection/ServerAuthenticationSection.tsx
@@ -75,11 +75,11 @@ const ServerAuthenticationSection = ({
error={formErrors.domain}
tooltip={
<>
- If you need to specify a HELO domain,
- you can do it here{" "}
-
+ If you need to specify a HELO domain, you can do it here.
+
+
(Default: Blank)
-
+
>
}
/>
@@ -90,12 +90,12 @@ const ServerAuthenticationSection = ({
parseTarget
labelTooltipContent={
<>
- Turn this off (not recommended)
- if you use a self-signed certificate{" "}
-
-
+ Turn this off (not recommended) if you use a self-signed
+ certificate.
+
+
(Default: On)
-
+
>
}
>
@@ -108,12 +108,12 @@ const ServerAuthenticationSection = ({
parseTarget
labelTooltipContent={
<>
- Detects if STARTTLS is enabled
- in your SMTP server and starts
- to use it.{" "}
-
+ Detects if STARTTLS is enabled in your SMTP server and starts to use
+ it.
+
+
(Default: On)
-
+
>
}
>
diff --git a/frontend/pages/admin/OrgSettingsPage/cards/FleetDesktop/FleetDesktop.tsx b/frontend/pages/admin/OrgSettingsPage/cards/FleetDesktop/FleetDesktop.tsx
index 7367ab82c17..8828be490fe 100644
--- a/frontend/pages/admin/OrgSettingsPage/cards/FleetDesktop/FleetDesktop.tsx
+++ b/frontend/pages/admin/OrgSettingsPage/cards/FleetDesktop/FleetDesktop.tsx
@@ -75,7 +75,7 @@ const FleetDesktop = ({
const getAlternativeBrowserHostUrlTooltip = () => (
<>
If you are using mTLS for your agent-server communication, specify an
- alternative host to direct Fleet Desktop through.
+ alternative host to direct Fleet Desktop through.{" "}
URL is used in "Reach out to IT" links shown to the
- end
-
- user (e.g. self service and during MDM migration).
+ end user (e.g. self service and during MDM migration).
>
}
>
diff --git a/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx b/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx
index 39defbceb70..3a1e83a32fb 100644
--- a/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx
+++ b/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx
@@ -1969,10 +1969,7 @@ const ManageHostsPage = ({
let disableRunScriptBatchTooltipContent: React.ReactNode;
if (config?.server_settings?.scripts_disabled) {
disableRunScriptBatchTooltipContent = (
- <>
- Running scripts is disabled in
- organization settings.
- >
+ <>Running scripts is disabled in organization settings.>
);
} else if (isAllTeamsSelected && isPremiumTier) {
disableRunScriptBatchTooltipContent = "Select a fleet to run a script.";
diff --git a/frontend/pages/hosts/components/DiskSpaceIndicator/DiskSpaceIndicator.tsx b/frontend/pages/hosts/components/DiskSpaceIndicator/DiskSpaceIndicator.tsx
index df33d951b1e..4356d2ec9a9 100644
--- a/frontend/pages/hosts/components/DiskSpaceIndicator/DiskSpaceIndicator.tsx
+++ b/frontend/pages/hosts/components/DiskSpaceIndicator/DiskSpaceIndicator.tsx
@@ -77,10 +77,7 @@ const DiskSpaceIndicator = ({
// get disk space tooltip content for Linux hosts
const totalDiskSpaceContent = gigsTotalDiskSpace ? (
- <>
- System disk space: {gigsTotalDiskSpace} GB
-
- >
+ <>System disk space: {gigsTotalDiskSpace} GB>
) : null;
const allPartitionsContent = gigsAllDiskSpace ? (
<>All partitions: {gigsAllDiskSpace} GB>
@@ -90,6 +87,7 @@ const DiskSpaceIndicator = ({
totalDiskSpaceContent || allPartitionsContent ? (
<>
{totalDiskSpaceContent}
+ {totalDiskSpaceContent && allPartitionsContent &&
}
{allPartitionsContent}
>
) : null;
diff --git a/frontend/pages/hosts/details/HostDetailsPage/modals/RunScriptModal/ScriptsTableConfig.tsx b/frontend/pages/hosts/details/HostDetailsPage/modals/RunScriptModal/ScriptsTableConfig.tsx
index 61d549b20bb..18bdd71373e 100644
--- a/frontend/pages/hosts/details/HostDetailsPage/modals/RunScriptModal/ScriptsTableConfig.tsx
+++ b/frontend/pages/hosts/details/HostDetailsPage/modals/RunScriptModal/ScriptsTableConfig.tsx
@@ -140,9 +140,7 @@ export const generateTableColumnConfigs = (
- Running scripts is disabled in organization settings.
-
+ <>Running scripts is disabled in organization settings.>
}
>
Actions
diff --git a/frontend/pages/hosts/details/OSSettingsModal/OSSettingsTable/OSSettingsNameCell/OSSettingsNameCell.tsx b/frontend/pages/hosts/details/OSSettingsModal/OSSettingsTable/OSSettingsNameCell/OSSettingsNameCell.tsx
index 376ad86db73..96d5d4c8560 100644
--- a/frontend/pages/hosts/details/OSSettingsModal/OSSettingsTable/OSSettingsNameCell/OSSettingsNameCell.tsx
+++ b/frontend/pages/hosts/details/OSSettingsModal/OSSettingsTable/OSSettingsNameCell/OSSettingsNameCell.tsx
@@ -32,7 +32,7 @@ const OSSettingsNameCell = ({
<>
Scoped to local user account:
- {managedAccount}
+ {managedAccount}
>
}
position="top"
diff --git a/frontend/pages/hosts/details/cards/Queries/ReportUpdatedCell/ReportUpdatedCell.tsx b/frontend/pages/hosts/details/cards/Queries/ReportUpdatedCell/ReportUpdatedCell.tsx
index ad3971473e5..6d83c1a342c 100644
--- a/frontend/pages/hosts/details/cards/Queries/ReportUpdatedCell/ReportUpdatedCell.tsx
+++ b/frontend/pages/hosts/details/cards/Queries/ReportUpdatedCell/ReportUpdatedCell.tsx
@@ -44,9 +44,8 @@ const ReportUpdatedCell = ({
- Results from this report are not reported in Fleet.
-
- Data is being sent to your log destination.
+ Results from this report are not reported in Fleet. Data is
+ being sent to your log destination.
>
}
position="top"
diff --git a/frontend/pages/hosts/details/components/InventoryVersions/InventoryVersions.tsx b/frontend/pages/hosts/details/components/InventoryVersions/InventoryVersions.tsx
index 88bcba9edae..5dfa85bd7ff 100644
--- a/frontend/pages/hosts/details/components/InventoryVersions/InventoryVersions.tsx
+++ b/frontend/pages/hosts/details/components/InventoryVersions/InventoryVersions.tsx
@@ -39,14 +39,7 @@ const InventoryVersion = ({
const lastOpenedTitle =
INSTALLABLE_SOURCE_PLATFORM_CONVERSION[source] === "linux" ? (
-
- The last time the package was opened by the end user
- or accessed by any process on the host.
- >
- }
- >
+
Last opened
) : (
diff --git a/frontend/pages/policies/ManagePoliciesPage/ManagePoliciesPage.tsx b/frontend/pages/policies/ManagePoliciesPage/ManagePoliciesPage.tsx
index 65ec106f88d..2d28dfaedf9 100644
--- a/frontend/pages/policies/ManagePoliciesPage/ManagePoliciesPage.tsx
+++ b/frontend/pages/policies/ManagePoliciesPage/ManagePoliciesPage.tsx
@@ -730,9 +730,8 @@ const ManagePolicyPage = ({
lastUpdatedAt={updatedAt}
customTooltipText={
<>
- Counts are updated hourly. Click host
-
- counts for the most up-to-date count.
+ Counts are updated hourly. Click host counts for the most
+ up-to-date count.
>
}
/>
diff --git a/frontend/pages/policies/edit/components/PolicyForm/PolicyForm.tsx b/frontend/pages/policies/edit/components/PolicyForm/PolicyForm.tsx
index a86e4f12ee3..8e1c37f090a 100644
--- a/frontend/pages/policies/edit/components/PolicyForm/PolicyForm.tsx
+++ b/frontend/pages/policies/edit/components/PolicyForm/PolicyForm.tsx
@@ -813,15 +813,7 @@ const PolicyForm = ({
(
- Select the platforms this
-
- policy will be checked on
-
- to save or run the policy.
- >
- }
+ tipContent="Select the platforms this policy will be checked on to save or run the policy."
tooltipClass={`${baseClass}__button-wrap--tooltip`}
position="top"
disableTooltip={!isEditMode || isAnyPlatformSelected}
@@ -843,15 +835,11 @@ const PolicyForm = ({
- Live reports are disabled
- in organization settings.
- >
+ <>Live reports are disabled in organization settings.>
) : (
<>
- Select the platforms this
- policy will be checked on
- to save or run the policy.
+ Select the platforms this policy will be checked on to save
+ or run the policy.
>
)
}
diff --git a/frontend/pages/queries/ManageQueriesPage/ManageQueriesPage.tsx b/frontend/pages/queries/ManageQueriesPage/ManageQueriesPage.tsx
index 36e310e3193..4b73bc59987 100644
--- a/frontend/pages/queries/ManageQueriesPage/ManageQueriesPage.tsx
+++ b/frontend/pages/queries/ManageQueriesPage/ManageQueriesPage.tsx
@@ -439,7 +439,6 @@ const ManageQueriesPage = ({
(queriesResponse?.count ?? 0) > 0 ? (
<>
To manage automations add a report to this fleet.
-
For inherited reports select “All
fleets”.
>
diff --git a/frontend/pages/queries/details/QueryDetailsPage/QueryDetailsPage.tsx b/frontend/pages/queries/details/QueryDetailsPage/QueryDetailsPage.tsx
index 0d1ef79b2a4..ffb10cf2cd4 100644
--- a/frontend/pages/queries/details/QueryDetailsPage/QueryDetailsPage.tsx
+++ b/frontend/pages/queries/details/QueryDetailsPage/QueryDetailsPage.tsx
@@ -332,11 +332,10 @@ const QueryDetailsPage = ({
- Report automations let you send data to your log
- destination on a schedule. When automations are
- on
- ,
- data is sent according to a report's interval.
+ Report automations let you send data to your log
+ destination on a schedule. When automations are{" "}
+ on, data is sent according to a
+ report's interval.
>
}
>
diff --git a/frontend/pages/queries/edit/components/DiscardDataOption/DiscardDataOption.tsx b/frontend/pages/queries/edit/components/DiscardDataOption/DiscardDataOption.tsx
index 815602a2c96..2b76d4ba476 100644
--- a/frontend/pages/queries/edit/components/DiscardDataOption/DiscardDataOption.tsx
+++ b/frontend/pages/queries/edit/components/DiscardDataOption/DiscardDataOption.tsx
@@ -38,11 +38,11 @@ const DiscardDataOption = ({
- A Fleet administrator can enable report results under
-
+ A Fleet administrator can enable report results under
+
Organization settings > Advanced options > Store report
results
-
+
.
>
}
diff --git a/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx b/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx
index 6b95fbaa951..e00cbb5c804 100644
--- a/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx
+++ b/frontend/pages/queries/edit/components/EditQueryForm/EditQueryForm.tsx
@@ -695,8 +695,8 @@ const EditQueryForm = ({
- Automations and reporting will be paused
- for this report until an interval is set.
+ Automations and reporting will be paused for this
+ report until an interval is set.
>
}
position="right"
diff --git a/frontend/pages/queries/edit/components/SaveNewQueryModal/SaveNewQueryModal.tsx b/frontend/pages/queries/edit/components/SaveNewQueryModal/SaveNewQueryModal.tsx
index 177eeed2676..5bc1fdb0198 100644
--- a/frontend/pages/queries/edit/components/SaveNewQueryModal/SaveNewQueryModal.tsx
+++ b/frontend/pages/queries/edit/components/SaveNewQueryModal/SaveNewQueryModal.tsx
@@ -282,8 +282,8 @@ const SaveNewQueryModal = ({
- Automations and reporting will be paused
- for this report until an interval is set.
+ Automations and reporting will be paused for this report
+ until an interval is set.
>
}
position="right"
diff --git a/frontend/styles/var/mixins.scss b/frontend/styles/var/mixins.scss
index 9be6e66c999..587afde8e5f 100644
--- a/frontend/styles/var/mixins.scss
+++ b/frontend/styles/var/mixins.scss
@@ -205,7 +205,7 @@ $max-width: 2560px;
@mixin tooltip-text {
width: max-content;
- max-width: 360px;
+ max-width: 280px;
padding: 6px;
color: $static-white;
background-color: $tooltip-bg;
diff --git a/frontend/utilities/constants.tsx b/frontend/utilities/constants.tsx
index 4daa2127f1f..ff06610561b 100644
--- a/frontend/utilities/constants.tsx
+++ b/frontend/utilities/constants.tsx
@@ -392,9 +392,8 @@ export const MDM_STATUS_TOOLTIP: Record<
Off: undefined, // no tooltip specified
Pending: (
- Hosts ordered via Apple Business (AB).
-
These will automatically enroll to Fleet
and turn on MDM
- when they're unboxed.
+ Hosts ordered via Apple Business (AB). These will automatically enroll to
+ Fleet and turn on MDM when they're unboxed.
),
};
diff --git a/frontend/utilities/helpers.tsx b/frontend/utilities/helpers.tsx
index f28997a3430..5274bda7a81 100644
--- a/frontend/utilities/helpers.tsx
+++ b/frontend/utilities/helpers.tsx
@@ -725,36 +725,36 @@ export const getPerformanceImpactIndicatorTooltip = (
case PerformanceImpactIndicatorValue.MINIMAL:
return (
<>
- Running this report very frequently has little to no
impact on
- your device's performance.
+ Running this report very frequently has little to no impact on your
+ device's performance.
>
);
case PerformanceImpactIndicatorValue.CONSIDERABLE:
return (
<>
- Running this report frequently can have a noticeable
- impact on your device's performance.
+ Running this report frequently can have a noticeable impact on your
+ device's performance.
>
);
case PerformanceImpactIndicatorValue.EXCESSIVE:
return (
<>
- Running this report, even infrequently, can have a
- significant impact on your device's performance.
+ Running this report, even infrequently, can have a significant impact
+ on your device's performance.
>
);
case PerformanceImpactIndicatorValue.DENYLISTED:
return (
<>
- This report has been
stopped from running
because of
- excessive
resource consumption.
+ This report has been stopped from running because of excessive
+ resource consumption.
>
);
case PerformanceImpactIndicatorValue.UNDETERMINED:
return (
<>
- Performance impact will be available
-
when {isHostSpecific ? "the" : "this"} report runs
+ Performance impact will be available when{" "}
+ {isHostSpecific ? "the" : "this"} report runs
{isHostSpecific && " on this host"}.
>
);