codexly-ui 0.19.2 → 0.19.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3129,7 +3129,15 @@ class ClxTooltipDirective {
3129
3129
  const { signal } = this._abort;
3130
3130
  host.addEventListener('mouseenter', () => this._scheduleShow(), { signal });
3131
3131
  host.addEventListener('mouseleave', () => this._scheduleHide(), { signal });
3132
- host.addEventListener('focus', () => this._scheduleShow(), { signal });
3132
+ // :focus-visible, not a bare 'focus' check — a modal/drawer restores focus to its trigger
3133
+ // button programmatically when it closes (standard a11y behavior), which fires 'focus' on
3134
+ // this host with no real hover/keyboard interaction behind it. That reopened the tooltip and
3135
+ // left it stuck floating over the page after the modal was dismissed. :focus-visible only
3136
+ // matches when the browser itself determines the focus came from keyboard navigation, not
3137
+ // from a programmatic .focus() call or a mouse/touch click — exactly the real-vs-restored
3138
+ // distinction needed here.
3139
+ host.addEventListener('focus', () => { if (host.matches(':focus-visible'))
3140
+ this._scheduleShow(); }, { signal });
3133
3141
  host.addEventListener('blur', () => this._scheduleHide(), { signal });
3134
3142
  // Touch devices fire 'mouseenter'/'focus' on tap but never a real
3135
3143
  // 'mouseleave' — dismiss immediately (no fade) so the bubble can't
@@ -9029,7 +9037,11 @@ const MODAL_SIZE_MAP = {
9029
9037
  md: 'w-full',
9030
9038
  lg: 'w-full',
9031
9039
  xl: 'w-full',
9032
- full: 'w-full h-screen rounded-none',
9040
+ // h-dvh, not h-screen (100vh) — same Android Chrome issue as DRAWER_CONTAINER_CLASS/
9041
+ // ClxAppLayoutComponent: 100vh is computed against the largest possible viewport, so once the
9042
+ // browser's own chrome (address bar, nav buttons) is actually on-screen, a full-size modal ends
9043
+ // up taller than what's visible and clips its own footer/content below the fold.
9044
+ full: 'w-full h-dvh rounded-none',
9033
9045
  };
9034
9046
  const MODAL_CONTAINER_CLASS = 'flex flex-col bg-clx-surface rounded-2xl shadow-2xl overflow-hidden';
9035
9047
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -12045,7 +12057,12 @@ const DRAWER_WIDTH_MAP = {
12045
12057
  md: '420px',
12046
12058
  lg: '560px',
12047
12059
  };
12048
- const DRAWER_CONTAINER_CLASS = 'flex flex-col bg-clx-surface shadow-2xl overflow-hidden h-screen';
12060
+ // h-dvh (dynamic viewport height), not h-screen (100vh): on Android Chrome, 100vh is computed
12061
+ // against the *largest* viewport (as if the address bar were hidden), so once that browser chrome
12062
+ // is actually on-screen the drawer is taller than what's visible — pushing its footer (confirm/
12063
+ // cancel buttons) below the fold even though the body above it still scrolls fine. Same root cause
12064
+ // already fixed in ClxAppLayoutComponent's host class — see its own doc comment.
12065
+ const DRAWER_CONTAINER_CLASS = 'flex flex-col bg-clx-surface shadow-2xl overflow-hidden h-dvh';
12049
12066
  const CLX_DRAWER_SIZE = new InjectionToken('CLX_DRAWER_SIZE');
12050
12067
 
12051
12068
  class ClxDrawerComponent {