From ab914d8bf2ad03aa6aa1208610e2313934cd042c Mon Sep 17 00:00:00 2001 From: pk Date: Sat, 5 Jul 2025 23:49:12 +0200 Subject: [PATCH] Improve _posFixed to make sure content never gets cut off on very small view ports. --- package.json | 2 +- position.js | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 177c9a7..9f6928f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tp/helpers", - "version": "2.6.0", + "version": "2.7.0", "description": "", "main": "closest.js", "scripts": { diff --git a/position.js b/position.js index 5ef5444..8b07f4a 100644 --- a/position.js +++ b/position.js @@ -52,6 +52,12 @@ export const Position = function(superClass) { } } + // Ensure top never goes below 0 + if (top < 0) { + compTop += Math.abs(top); + top = 0; + } + if (options.halign === 'left') { left = anchorRect.left; } @@ -74,6 +80,17 @@ export const Position = function(superClass) { left = 0; } + // Constrain height to viewport - calculate available height from final top position + const availableHeight = window.innerHeight - top; + if (elRect.height > availableHeight) { + el.style.maxHeight = availableHeight + 'px'; + el.style.overflowY = 'auto'; + } else { + // Reset max-height if element fits + el.style.maxHeight = ''; + el.style.overflowY = ''; + } + el.style.top = (top - fixTop) + 'px'; el.style.left = (left - fixLeft) + 'px';