AFAIK there is no out of the box option to achieve that, e.g. via ggtext we could only set the text color using some HTML/CSS and ggtext::element_markdown. Hence, the best "hack" I could come up with is to add the pills or boxes using ggtext::geom_textbox which however requires some fiddling or computations to set the x position of the text box, the box width and the box margin:
library(ggplot2)
library(ggtext)
base <- mtcars |>
dplyr::mutate(
color =
c("BLUE", "RED") |> rep_len(dplyr::n()) |>
factor()
) |>
ggplot(aes(x = mpg, y = color)) +
geom_point() +
scale_y_discrete(labels = ~ "BLUEBLUE") +
scale_fill_identity() +
labs(y = NULL) +
coord_cartesian(clip = "off") +
theme(axis.text.y.left = element_text(color = "transparent"))
base +
ggtext::geom_textbox(data = ~ dplyr::distinct(.x, color), aes(fill = tolower(color)), label = "BLUE", hjust = 1, box.margin = unit(5, "pt"),
x = range(mtcars$mpg)[1] - .05 * diff(range(mtcars$mpg)), color = "transparent",
width = unit(.75, "inch"))

And another option would be to simply use geom_label which however requires some more fiddling as e.g. ggtext::geom_textbox offers some additional arguments like box.margin and width.
base +
geom_label(data = ~ dplyr::distinct(.x, color), aes(fill = tolower(color)), label = "BLUE", hjust = 1,
label.r = unit(0.25, "lines"),
x = range(mtcars$mpg)[1] - .05 * diff(range(mtcars$mpg)) - .25, color = "transparent")
