focus selection stuff

This commit is contained in:
sawka 2024-09-19 16:47:59 -07:00
parent 7c2268fb81
commit 8fb831fac6
3 changed files with 11 additions and 22 deletions

View File

@ -14,7 +14,7 @@ import {
unregisterBlockComponentModel,
} from "@/store/global";
import * as WOS from "@/store/wos";
import { getElemAsStr } from "@/util/focusutil";
import { focusedBlockId, getElemAsStr } from "@/util/focusutil";
import * as util from "@/util/util";
import { CpuPlotView, CpuPlotViewModel, makeCpuPlotViewModel } from "@/view/cpuplot/cpuplot";
import { HelpView, HelpViewModel, makeHelpViewModel } from "@/view/helpview/helpview";
@ -159,12 +159,11 @@ const BlockFull = React.memo(({ nodeModel, viewModel }: FullBlockProps) => {
return;
}
setBlockClicked(false);
const focusWithin = blockRef.current?.contains(document.activeElement);
const focusWithin = focusedBlockId() == nodeModel.blockId;
if (!focusWithin) {
setFocusTarget();
}
if (!isFocused) {
console.log("blockClicked focus", nodeModel.blockId);
nodeModel.focusNode();
}
}, [blockClicked, isFocused]);

View File

@ -342,18 +342,24 @@ const ChatWindow = memo(
const handleScrollbarInitialized = (instance: OverlayScrollbars) => {
const { viewport } = instance.elements();
viewport.removeAttribute("tabindex");
viewport.scrollTo({
behavior: "auto",
top: chatWindowRef.current?.scrollHeight || 0,
});
};
const handleScrollbarUpdated = (instance: OverlayScrollbars) => {
const { viewport } = instance.elements();
viewport.removeAttribute("tabindex");
};
return (
<OverlayScrollbarsComponent
ref={osRef}
className="scrollable"
options={{ scrollbars: { autoHide: "leave" } }}
events={{ initialized: handleScrollbarInitialized }}
events={{ initialized: handleScrollbarInitialized, updated: handleScrollbarUpdated }}
>
<div ref={chatWindowRef} className="chat-window" style={msgWidths}>
<div className="filler"></div>
@ -491,22 +497,6 @@ const WaveAi = ({ model }: { model: WaveAiModel; blockId: string }) => {
setSelectedBlockIdx(null);
}, [messages, value]);
const handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {
inputRef.current?.focus();
const target = event.target as HTMLElement;
if (
target.closest(".copy-button") ||
target.closest(".fa-square-terminal") ||
target.closest(".waveai-input")
) {
return;
}
const pre = target.closest("pre");
updatePreTagOutline(pre);
};
const updateScrollTop = () => {
const pres = chatWindowRef.current?.querySelectorAll("pre");
if (!pres || selectedBlockIdx === null) return;
@ -610,7 +600,7 @@ const WaveAi = ({ model }: { model: WaveAiModel; blockId: string }) => {
}, [locked, handleEnterKeyPressed]);
return (
<div ref={waveaiRef} className="waveai" onClick={handleContainerClick}>
<div ref={waveaiRef} className="waveai">
<ChatWindow ref={osRef} chatWindowRef={chatWindowRef} messages={messages} msgWidths={msgWidths} />
<div className="waveai-controls">
<div className="waveai-input-wrapper">

View File

@ -54,7 +54,7 @@ export function focusedBlockId(): string {
}
}
const sel = document.getSelection();
if (sel && sel.anchorNode) {
if (sel && sel.anchorNode && sel.rangeCount > 0 && !sel.isCollapsed) {
let anchor = sel.anchorNode;
if (anchor instanceof Text) {
anchor = anchor.parentElement;