mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 05:25:40 +09:00
fix(ui): keep the focus ring stable across refocus (#2366)
This commit is contained in:
1 parent
1acd61a112
commit
ee8fbd6f4f
2 files changed
+19
-10
No files matched your search
@@ -1,15 +1,17 @@
|
|||||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
import {ACTIVE_RING_CONTEXT_MANAGER} from '@app/features/ui/focus_ring/FocusRingContext';
|
import {makeAutoObservable} from 'mobx';
|
||||||
|
|
||||||
class FocusRingManagerClass {
|
class FocusRingManagerClass {
|
||||||
ringsEnabled = true;
|
ringsEnabled = true;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
makeAutoObservable(this, {}, {autoBind: true});
|
||||||
|
}
|
||||||
|
|
||||||
setRingsEnabled(enabled: boolean) {
|
setRingsEnabled(enabled: boolean) {
|
||||||
|
if (this.ringsEnabled === enabled) return;
|
||||||
this.ringsEnabled = enabled;
|
this.ringsEnabled = enabled;
|
||||||
if (!enabled) {
|
|
||||||
ACTIVE_RING_CONTEXT_MANAGER?.hide();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import styles from '@app/features/ui/focus_ring/FocusRing.module.css';
|
|||||||
import FocusRingContext, {FocusRingContextManager} from '@app/features/ui/focus_ring/FocusRingContext';
|
import FocusRingContext, {FocusRingContextManager} from '@app/features/ui/focus_ring/FocusRingContext';
|
||||||
import FocusRingManager from '@app/features/ui/focus_ring/FocusRingManager';
|
import FocusRingManager from '@app/features/ui/focus_ring/FocusRingManager';
|
||||||
import {clsx} from 'clsx';
|
import {clsx} from 'clsx';
|
||||||
|
import {Observer} from 'mobx-react-lite';
|
||||||
import type * as React from 'react';
|
import type * as React from 'react';
|
||||||
import {useContext, useEffect, useReducer, useRef} from 'react';
|
import {useContext, useEffect, useReducer, useRef} from 'react';
|
||||||
|
|
||||||
@@ -55,12 +56,18 @@ function Ring() {
|
|||||||
resizeObserver.disconnect();
|
resizeObserver.disconnect();
|
||||||
};
|
};
|
||||||
}, [ringContext, targetElement]);
|
}, [ringContext, targetElement]);
|
||||||
if (!FocusRingManager.ringsEnabled || !ringContext.visible) return null;
|
|
||||||
return (
|
return (
|
||||||
<div
|
<Observer data-flx="ui.focus-ring.focus-ring-scope.ring.observer">
|
||||||
className={clsx(styles.focusRing, ringContext.className)}
|
{() => {
|
||||||
style={ringContext.getStyle()}
|
if (!FocusRingManager.ringsEnabled || !ringContext.visible) return null;
|
||||||
data-flx="ui.focus-ring.focus-ring-scope.ring.focus-ring"
|
return (
|
||||||
/>
|
<div
|
||||||
|
className={clsx(styles.focusRing, ringContext.className)}
|
||||||
|
style={ringContext.getStyle()}
|
||||||
|
data-flx="ui.focus-ring.focus-ring-scope.ring.focus-ring"
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
</Observer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user