import React from 'react'; /** * 判断「焦点离开了这个单元格」的作用域,给懒挂载格「用完卸回纯文本」用。 * * 用 React 合成的 onFocus/onBlur 判断焦点变化:合成事件会沿 React 树冒泡,穿过 portal。 * 下拉面板、日期面板、选择对话框这类渲染到 body 上的弹层,焦点进去时对本格仍是「格内」。 * 同时监听指针离开:点击到不可聚焦的文本格或页面空白不会触发 blur,需要按点击位置恢复展示态; * portal 内的指针事件仍沿 React 树到达本作用域,不会被当作离开。 * * 离开不立刻判定,而是推到下一个任务再看:焦点从输入框换到格内别的元素(或弹层)时, * blur 之后紧跟着 focus,后者会作废这次判定。单纯 blur 时若 activeElement 仍在格内 * (如窗口切走),不算离开;指针明确点击到作用域外则按离开处理。 * * 用 display: contents,不产生盒子,不改变单元格里原有的布局。 * * @author nokecy */ export type CellLeaveHandler = (isStale: () => boolean, hadFocus: boolean) => void; export declare const CellFocusScope: ({ onLeave, children }: { onLeave: CellLeaveHandler; children: React.ReactNode; }) => React.JSX.Element;