UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

47 lines (46 loc) 2.07 kB
"use strict"; 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;