mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-07-12 07:42:55 +02:00
Add FocusTrap to dropdown menu to fix filtering
This commit is contained in:
@@ -12,6 +12,7 @@ interface Props {
|
|||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
zIndex?: keyof typeof zIndexes;
|
zIndex?: keyof typeof zIndexes;
|
||||||
variant?: 'default' | 'transparent';
|
variant?: 'default' | 'transparent';
|
||||||
|
noBackdrop?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const zIndexes: Record<number, string> = {
|
const zIndexes: Record<number, string> = {
|
||||||
@@ -28,8 +29,21 @@ export function Overlay({
|
|||||||
open,
|
open,
|
||||||
onClose,
|
onClose,
|
||||||
portalName,
|
portalName,
|
||||||
|
noBackdrop,
|
||||||
children,
|
children,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
|
if (noBackdrop) {
|
||||||
|
return (
|
||||||
|
<Portal name={portalName}>
|
||||||
|
{open && (
|
||||||
|
<FocusTrap focusTrapOptions={{ clickOutsideDeactivates: true }}>
|
||||||
|
{/* NOTE: <div> wrapper is required for some reason, or FocusTrap complains */}
|
||||||
|
<div>{children}</div>
|
||||||
|
</FocusTrap>
|
||||||
|
)}
|
||||||
|
</Portal>
|
||||||
|
);
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<Portal name={portalName}>
|
<Portal name={portalName}>
|
||||||
{open && (
|
{open && (
|
||||||
@@ -48,7 +62,7 @@ export function Overlay({
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* Show draggable region at the top */}
|
{/* Show the draggable region at the top */}
|
||||||
{/* TODO: Figure out tauri drag region and also make clickable still */}
|
{/* TODO: Figure out tauri drag region and also make clickable still */}
|
||||||
{variant === 'default' && (
|
{variant === 'default' && (
|
||||||
<div data-tauri-drag-region className="absolute top-0 left-0 h-md right-0" />
|
<div data-tauri-drag-region className="absolute top-0 left-0 h-md right-0" />
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import type {
|
|||||||
SetStateAction,
|
SetStateAction,
|
||||||
} from 'react';
|
} from 'react';
|
||||||
import React, {
|
import React, {
|
||||||
useEffect,
|
|
||||||
Children,
|
Children,
|
||||||
cloneElement,
|
cloneElement,
|
||||||
forwardRef,
|
forwardRef,
|
||||||
useCallback,
|
useCallback,
|
||||||
|
useEffect,
|
||||||
useImperativeHandle,
|
useImperativeHandle,
|
||||||
useMemo,
|
useMemo,
|
||||||
useRef,
|
useRef,
|
||||||
@@ -27,7 +27,7 @@ import type { HotkeyAction } from '../../hooks/useHotKey';
|
|||||||
import { useHotKey } from '../../hooks/useHotKey';
|
import { useHotKey } from '../../hooks/useHotKey';
|
||||||
import { useStateWithDeps } from '../../hooks/useStateWithDeps';
|
import { useStateWithDeps } from '../../hooks/useStateWithDeps';
|
||||||
import { getNodeText } from '../../lib/getNodeText';
|
import { getNodeText } from '../../lib/getNodeText';
|
||||||
import { Portal } from '../Portal';
|
import { Overlay } from '../Overlay';
|
||||||
import { Button } from './Button';
|
import { Button } from './Button';
|
||||||
import { HotKey } from './HotKey';
|
import { HotKey } from './HotKey';
|
||||||
import { Icon } from './Icon';
|
import { Icon } from './Icon';
|
||||||
@@ -446,9 +446,9 @@ const Menu = forwardRef<Omit<DropdownRef, 'open' | 'isOpen' | 'toggle' | 'items'
|
|||||||
),
|
),
|
||||||
)}
|
)}
|
||||||
{isOpen && (
|
{isOpen && (
|
||||||
<Portal name="dropdown-menu">
|
<Overlay noBackdrop open={isOpen} portalName="dropdown-menu">
|
||||||
<div ref={menuRef} className="x-theme-menu">
|
|
||||||
<motion.div
|
<motion.div
|
||||||
|
ref={menuRef}
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
onKeyDown={handleMenuKeyDown}
|
onKeyDown={handleMenuKeyDown}
|
||||||
onContextMenu={(e) => {
|
onContextMenu={(e) => {
|
||||||
@@ -464,6 +464,7 @@ const Menu = forwardRef<Omit<DropdownRef, 'open' | 'isOpen' | 'toggle' | 'items'
|
|||||||
style={styles.container}
|
style={styles.container}
|
||||||
className={classNames(
|
className={classNames(
|
||||||
className,
|
className,
|
||||||
|
'x-theme-menu',
|
||||||
'outline-none my-1 pointer-events-auto fixed z-50',
|
'outline-none my-1 pointer-events-auto fixed z-50',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
@@ -517,8 +518,7 @@ const Menu = forwardRef<Omit<DropdownRef, 'open' | 'isOpen' | 'toggle' | 'items'
|
|||||||
})}
|
})}
|
||||||
</VStack>
|
</VStack>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div>
|
</Overlay>
|
||||||
</Portal>
|
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -105,7 +105,6 @@ export function getLanguageExtension({
|
|||||||
return graphql();
|
return graphql();
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("SELECTING SYNTAX", language);
|
|
||||||
const base = syntaxExtensions[language ?? 'text'] ?? text();
|
const base = syntaxExtensions[language ?? 'text'] ?? text();
|
||||||
if (!useTemplating) {
|
if (!useTemplating) {
|
||||||
return base;
|
return base;
|
||||||
|
|||||||
Reference in New Issue
Block a user