json-joy
Version:
Collection of libraries for building collaborative editing apps.
47 lines (46 loc) • 2.07 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.RenderCaret = void 0;
const tslib_1 = require("tslib");
const React = tslib_1.__importStar(require("react"));
const nano_theme_1 = require("nano-theme");
const CaretToolbar_1 = require("nice-ui/lib/4-card/Toolbar/ToolbarMenu/CaretToolbar");
const context_1 = require("./context");
const hooks_1 = require("../../web/react/hooks");
const AfterTimeout_1 = require("../../web/react/util/AfterTimeout");
const height = 1.8;
const blockClass = (0, nano_theme_1.rule)({
pos: 'relative',
w: '0px',
h: '100%',
va: 'bottom',
});
const overClass = (0, nano_theme_1.rule)({
pos: 'absolute',
b: `${height}em`,
l: 0,
isolation: 'isolate',
us: 'none',
transform: 'translateX(calc(-50% + 0px))',
});
const RenderCaret = ({ children }) => {
const { toolbar } = (0, context_1.useToolbarPlugin)();
const showInlineToolbar = toolbar.showInlineToolbar;
const [showCaretToolbarValue, toolbarVisibilityChangeTime] = (0, hooks_1.useSyncStore)(showInlineToolbar);
const focus = (0, hooks_1.useSyncStoreOpt)(toolbar.surface.dom?.cursor.focus) || false;
const doHideForCoolDown = toolbarVisibilityChangeTime + 500 > Date.now();
const enableAfterCoolDown = (0, hooks_1.useTimeout)(500, [doHideForCoolDown]);
// biome-ignore lint/correctness/useExhaustiveDependencies: showInlineToolbar.next do not need to memoize
const handleClose = React.useCallback(() => {
setTimeout(() => {
if (showInlineToolbar.value)
showInlineToolbar.next([false, Date.now()]);
}, 5);
}, []);
let toolbarElement = (React.createElement(CaretToolbar_1.CaretToolbar, { disabled: !enableAfterCoolDown, menu: toolbar.getCaretMenu(), onPopupClose: handleClose }));
if (doHideForCoolDown) {
toolbarElement = React.createElement(AfterTimeout_1.AfterTimeout, { ms: 500 }, toolbarElement);
}
return (React.createElement("span", { className: blockClass }, children));
};
exports.RenderCaret = RenderCaret;
;