UNPKG

@lexical/react

Version:

This package provides Lexical components and hooks for React applications.

103 lines (95 loc) 3.16 kB
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ 'use strict'; var extension = require('@lexical/extension'); var LexicalComposerContext = require('@lexical/react/LexicalComposerContext'); var useLexicalNodeSelection = require('@lexical/react/useLexicalNodeSelection'); var utils = require('@lexical/utils'); var lexical = require('lexical'); var react = require('react'); var jsxRuntime = require('react/jsx-runtime'); /** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ function HorizontalRuleComponent({ nodeKey }) { const [editor] = LexicalComposerContext.useLexicalComposerContext(); const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection.useLexicalNodeSelection(nodeKey); react.useEffect(() => { return utils.mergeRegister(editor.registerCommand(lexical.CLICK_COMMAND, event => { const hrElem = editor.getElementByKey(nodeKey); if (event.target === hrElem) { if (!event.shiftKey) { clearSelection(); } setSelected(!isSelected); return true; } return false; }, lexical.COMMAND_PRIORITY_LOW)); }, [clearSelection, editor, isSelected, nodeKey, setSelected]); react.useEffect(() => { const hrElem = editor.getElementByKey(nodeKey); const isSelectedClassName = editor._config.theme.hrSelected ?? 'selected'; if (hrElem !== null) { if (isSelected) { utils.addClassNamesToElement(hrElem, isSelectedClassName); } else { utils.removeClassNamesFromElement(hrElem, isSelectedClassName); } } }, [editor, isSelected, nodeKey]); return null; } /** * @deprecated A pure Lexical implementation is available in `@lexical/extension` as HorizontalRuleExtension */ class HorizontalRuleNode extends extension.HorizontalRuleNode { static getType() { return 'horizontalrule'; } static clone(node) { return new HorizontalRuleNode(node.__key); } static importJSON(serializedNode) { return $createHorizontalRuleNode().updateFromJSON(serializedNode); } static importDOM() { return { hr: () => ({ conversion: $convertHorizontalRuleElement, priority: 0 }) }; } decorate() { return /*#__PURE__*/jsxRuntime.jsx(HorizontalRuleComponent, { nodeKey: this.__key }); } } function $convertHorizontalRuleElement() { return { node: $createHorizontalRuleNode() }; } /** * @deprecated A pure Lexical implementation is available in `@lexical/extension` as HorizontalRuleExtension */ function $createHorizontalRuleNode() { return lexical.$applyNodeReplacement(new HorizontalRuleNode()); } exports.$isHorizontalRuleNode = extension.$isHorizontalRuleNode; exports.INSERT_HORIZONTAL_RULE_COMMAND = extension.INSERT_HORIZONTAL_RULE_COMMAND; exports.$createHorizontalRuleNode = $createHorizontalRuleNode; exports.HorizontalRuleNode = HorizontalRuleNode;