diff --git a/javascript/sdnext.css b/javascript/sdnext.css index af5b39464..4ac257c89 100644 --- a/javascript/sdnext.css +++ b/javascript/sdnext.css @@ -602,6 +602,7 @@ div#extras_scale_to_tab div.form { display: block; font-size: var(--text-xs); min-height: 1.3em; + max-width: 40em; opacity: 0; padding: 0.5em; pointer-events: none; @@ -611,12 +612,87 @@ div#extras_scale_to_tab div.form { transition: opacity 0.2s ease-in; width: 22em; z-index: 999; + overflow: visible; } .tooltip-show { opacity: 0.9; } +.tooltip-expanded { + width: 32em; +} + +.tooltip .separator { + display: block; + height: 1px; + background: linear-gradient(to right, transparent, var(--button-primary-border-color), transparent); + margin: 0.5em 0; + opacity: 0.6; +} + +.tooltip .long-content { + opacity: 0; + max-height: 0; + overflow: hidden; + transition: opacity 0.3s ease-in, max-height 0.3s ease-in-out; +} + +.tooltip .long-content.show { + opacity: 1; + max-height: 50em; +} + +.tooltip-header { + position: relative; + display: flex; + align-items: center; + justify-content: space-between; +} + +.tooltip-progress-ring { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + width: 1.2em; + height: 1.2em; + opacity: 0; + transition: opacity 0.2s ease-in; + flex-shrink: 0; +} + +.tooltip-progress-ring.active { + opacity: 0.8; +} + +.tooltip-progress-ring svg { + width: 100%; + height: 100%; + transform: rotate(-90deg); +} + +.tooltip-progress-ring .ring-background { + fill: none; + stroke: var(--button-primary-border-color); + stroke-width: 2; + opacity: 0.3; +} + +.tooltip-progress-ring .ring-progress { + fill: none; + stroke: var(--body-text-color); + stroke-width: 2; + stroke-linecap: round; + stroke-dasharray: 31.4; /* Circumference of circle with radius 5 (2πr = 2π×5 ≈ 31.4) */ + stroke-dashoffset: 31.4; + transition: stroke-dashoffset 3s linear; +} + +.tooltip-progress-ring .ring-progress.animate { + stroke-dashoffset: 0; +} + .toolbutton-selected { background: var(--background-fill-primary) !important; } @@ -680,19 +756,8 @@ div#extras_scale_to_tab div.form { #quicksettings>button { align-self: end; - height: 1.3em; - margin: 0em 0.7em 0.3em -0.5em; - line-height: 1em; - background-color: var(--background-fill-primary); -} - -#quicksettings>button:hover { - background-color: var(--button-cancel-border-color-hover); -} - -button#quicksettings_reset { - position: absolute; - right: 0; + margin-bottom: 6px; + padding: 0 1em 0 0; } #settings { diff --git a/javascript/setHints.js b/javascript/setHints.js index 086367a6e..e135f16d4 100644 --- a/javascript/setHints.js +++ b/javascript/setHints.js @@ -9,6 +9,8 @@ const localeData = { type: 2, hint: null, btn: null, + expandTimeout: null, // New property for expansion timeout + currentElement: null, // Track current element for expansion }; async function cycleLocale() { @@ -44,20 +46,103 @@ async function tooltipCreate() { if (window.opts.tooltips === 'UI tooltips') localeData.type = 2; } +async function expandTooltip(element, longHint) { + if (localeData.currentElement === element && localeData.hint.classList.contains('tooltip-show')) { + // Hide the progress ring + const ring = localeData.hint.querySelector('.tooltip-progress-ring'); + if (ring) { + ring.style.opacity = '0'; + } + + // Expand the container + localeData.hint.classList.add('tooltip-expanded'); + + // After container starts expanding, reveal the long content + setTimeout(() => { + const longContent = localeData.hint.querySelector('.long-content'); + if (longContent) { + longContent.classList.add('show'); + } + }, 100); + } +} + async function tooltipShow(e) { + // Clear any existing expansion timeout + if (localeData.expandTimeout) { + clearTimeout(localeData.expandTimeout); + localeData.expandTimeout = null; + } + + // Remove expanded class and reset current element + localeData.hint.classList.remove('tooltip-expanded'); + localeData.currentElement = e.target; + if (e.target.dataset.hint) { + // Create progress ring SVG + const progressRing = ` +