From 845eaa42c5d926e9a6b8ba1d700bdceb5a6257e9 Mon Sep 17 00:00:00 2001 From: awesomerobot Date: Fri, 5 Dec 2025 17:38:57 -0500 Subject: [PATCH 1/4] UX: add hover delay to reduce annoyance --- .../components/topic-list-tooltip.gjs | 28 +++++++++++++++++++ settings.yml | 7 +++++ 2 files changed, 35 insertions(+) diff --git a/javascripts/discourse/components/topic-list-tooltip.gjs b/javascripts/discourse/components/topic-list-tooltip.gjs index 0534822..d5d9228 100644 --- a/javascripts/discourse/components/topic-list-tooltip.gjs +++ b/javascripts/discourse/components/topic-list-tooltip.gjs @@ -1,7 +1,9 @@ import Component from "@glimmer/component"; +import { cancel } from "@ember/runloop"; import { getOwner } from "@ember/owner"; import { htmlSafe } from "@ember/template"; import replaceEmoji from "discourse/helpers/replace-emoji"; +import discourseLater from "discourse/lib/later"; import DTooltip from "float-kit/components/d-tooltip"; const triggers = { @@ -19,6 +21,8 @@ import("discourse/plugins/discourse-ai/discourse/services/gists") }); export default class TopicListTooltip extends Component { + hoverTimeout = null; + get gistsService() { try { return getOwner(this).lookup("service:gists"); @@ -65,12 +69,36 @@ export default class TopicListTooltip extends Component { return null; } + cancelPending() { + if (this.hoverTimeout) { + cancel(this.hoverTimeout); + this.hoverTimeout = null; + } + } + + beforeTrigger = async (instance) => { + this.cancelPending(); + + return new Promise((resolve) => { + this.hoverTimeout = discourseLater(() => { + this.hoverTimeout = null; + resolve(); + }, settings.hover_delay_seconds * 1000); + }); + }; + + onClose = () => { + this.cancelPending(); + }; +