diff --git a/frontend/components/DeviceUserError/DeviceUserError.tsx b/frontend/components/DeviceUserError/DeviceUserError.tsx index f039e7348a9..36f9586f0cd 100644 --- a/frontend/components/DeviceUserError/DeviceUserError.tsx +++ b/frontend/components/DeviceUserError/DeviceUserError.tsx @@ -58,8 +58,8 @@ const DeviceUserError = ({ "Couldn't authenticate this device. Please contact your IT admin." ) : ( <> - To access your device information, please click
- “My Device” from the Fleet Desktop menu icon. + To access your device information, please click “My Device” from the + Fleet Desktop menu icon. ); } diff --git a/frontend/components/LastUpdatedHostCount/LastUpdatedHostCount.tsx b/frontend/components/LastUpdatedHostCount/LastUpdatedHostCount.tsx index 34be3bdba9a..ed2abef1ddd 100644 --- a/frontend/components/LastUpdatedHostCount/LastUpdatedHostCount.tsx +++ b/frontend/components/LastUpdatedHostCount/LastUpdatedHostCount.tsx @@ -15,7 +15,7 @@ const LastUpdatedHostCount = ({ const tooltipContent = ( <> The last time host data was updated.
- Click View all hosts to see the most + Click the host count to see the most
up-to-date host count. ); diff --git a/frontend/components/LiveQuery/SelectTargets.tsx b/frontend/components/LiveQuery/SelectTargets.tsx index f13530ab233..a9c40bbfa59 100644 --- a/frontend/components/LiveQuery/SelectTargets.tsx +++ b/frontend/components/LiveQuery/SelectTargets.tsx @@ -523,11 +523,7 @@ const SelectTargets = ({ %  - Hosts are online if they
- have recently checked
- into Fleet. - + <>Hosts are online if they have recently checked into Fleet. } > online diff --git a/frontend/components/ProbabilityOfExploit/ProbabilityOfExploit.tsx b/frontend/components/ProbabilityOfExploit/ProbabilityOfExploit.tsx index a13279a72e5..e51fc4baead 100644 --- a/frontend/components/ProbabilityOfExploit/ProbabilityOfExploit.tsx +++ b/frontend/components/ProbabilityOfExploit/ProbabilityOfExploit.tsx @@ -32,20 +32,18 @@ const ProbabilityOfExploit = ({ return ( - The vulnerability has been actively exploited in the
- wild. This data is reported by the Cybersecurity
- and Infrastructure Security Agency (CISA). - + <> + The vulnerability has been actively exploited in the wild. This data + is reported by the Cybersecurity and Infrastructure Security Agency + (CISA). + } position={tooltipPosition} underline={false} showArrow tipOffset={8} > - - - +
); }; diff --git a/frontend/components/SoftwareInstallPolicyBadges/SoftwareInstallPolicyBadges.tsx b/frontend/components/SoftwareInstallPolicyBadges/SoftwareInstallPolicyBadges.tsx index cde9c198185..57b8ae87399 100644 --- a/frontend/components/SoftwareInstallPolicyBadges/SoftwareInstallPolicyBadges.tsx +++ b/frontend/components/SoftwareInstallPolicyBadges/SoftwareInstallPolicyBadges.tsx @@ -30,8 +30,7 @@ const SoftwareInstallPolicyBadges = ({ policyType }: IPatchBadgesProps) => { className={`${baseClass}__dynamic-policy-tooltip`} tipContent={ <> - Software will be automatically installed
- when hosts fail this policy. + Software will be automatically installed when hosts fail this policy. } tipOffset={14} diff --git a/frontend/components/TableContainer/DataTable/LiveQueryIssueCell/LiveQueryIssueCell.tsx b/frontend/components/TableContainer/DataTable/LiveQueryIssueCell/LiveQueryIssueCell.tsx index 15a977ebe67..c44ecf1aafc 100644 --- a/frontend/components/TableContainer/DataTable/LiveQueryIssueCell/LiveQueryIssueCell.tsx +++ b/frontend/components/TableContainer/DataTable/LiveQueryIssueCell/LiveQueryIssueCell.tsx @@ -25,14 +25,11 @@ const LiveQueryIssueCell = ({ tipContent={ {status === "offline" ? ( - <> - Offline hosts will not
- respond to a live report. - + <>Offline hosts will not respond to a live report. ) : ( <> - This host might take up to -
{distributedInterval} seconds to respond. + This host might take up to {distributedInterval} seconds to + respond. )}
diff --git a/frontend/components/TooltipWrapper/TooltipWrapper.stories.tsx b/frontend/components/TooltipWrapper/TooltipWrapper.stories.tsx index 3187631d578..a7958a911bd 100644 --- a/frontend/components/TooltipWrapper/TooltipWrapper.stories.tsx +++ b/frontend/components/TooltipWrapper/TooltipWrapper.stories.tsx @@ -27,6 +27,13 @@ const meta: Meta = { 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"}. );