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.
- package/fesm2022/codexly-ui.mjs +20 -3
- package/fesm2022/codexly-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/codexly-ui.d.ts +11 -11
package/fesm2022/codexly-ui.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|