{"version":3,"file":"js/93488-f761cfc4d13f7e1df578.js","mappings":"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","sources":["webpack:///./app/javascript/components/LexicalEditor/editorTheme.js","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/UndoRedo/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/TextBold/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/TextItalic/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/TextUnderline/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/TextStrikethrough/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/ClearFormat/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/TextSuperscript/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/TextFormat/TextSubscript/index.jsx","webpack:///./app/javascript/components/LexicalEditor/utils/url.js","webpack:///./app/javascript/components/LexicalEditor/utils/getSelectedNode.js","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/Link/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Dropdown.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/ElementFormat/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/Table/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/HorizontalRule/index.jsx","webpack:///./app/javascript/components/LexicalEditor/utils/joinClasses.js","webpack:///./app/javascript/components/LexicalEditor/ui/Button/index.jsx","webpack:///./app/javascript/components/LexicalEditor/nodes/LayoutContainerNode.js","webpack:///./app/javascript/components/LexicalEditor/nodes/LayoutItemNode.js","webpack:///./app/javascript/components/LexicalEditor/plugins/LayoutPlugin/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/ColumnLayout/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/YouTube/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Modal/Modal.jsx","webpack:///./app/javascript/components/LexicalEditor/hooks/useModal.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/ImagesPlugin/hooks/useContentImage.js","webpack:///./app/javascript/components/LexicalEditor/ui/Dialog/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/FileInput/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/TextInput/TextInput.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/ImagesPlugin/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/InsertImage/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/Insert/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/BlockFormatDropdown/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/Toolbar/index.jsx","webpack:///./app/javascript/components/LexicalEditor/loading.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/SubmitButton/index.jsx","webpack:///./app/javascript/components/LexicalEditor/translations.js","webpack:///./app/javascript/components/LexicalEditor/utils/setFloatingElemPosition.js","webpack:///./app/javascript/components/LexicalEditor/plugins/FloatingLinkEditor/index.jsx","webpack:///./app/javascript/components/LexicalEditor/ui/ColorPicker/ColorPicker.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/Table/TableCellActionMenu/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/Table/TableCellResizer/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/Table/TableHoverActionsPlugin/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/YouTubePlugin/YouTubeNode.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/YouTubePlugin/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/AutoEmbedPlugin/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/InitializeContent/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/TableOfContentsStatePlugin/index.jsx","webpack:///./app/javascript/components/LexicalEditor/index.jsx","webpack:///./app/javascript/components/LexicalEditor/plugins/ImagesPlugin/ImageNode.jsx","webpack:///./app/javascript/utilities/uploadToS3.js","webpack:///./app/javascript/graphql/mutations/CreateDirectUploadUrl.js"],"sourcesContent":["// NOTE: Copied from lexical.dev example\n\nexport const THEME = {\n code: 'editor-code',\n heading: {\n h1: 'editor-heading-h1',\n h2: 'editor-heading-h2',\n h3: 'editor-heading-h3',\n h4: 'editor-heading-h4',\n h5: 'editor-heading-h5',\n },\n image: 'editor-image',\n displayImage: 'editor-display-image',\n link: 'editor-link',\n ltr: 'ltr',\n paragraph: 'editor-paragraph',\n rtl: 'rtl',\n text: {\n bold: 'editor-text-bold',\n code: 'editor-text-code',\n hashtag: 'editor-text-hashtag',\n italic: 'editor-text-italic',\n overflowed: 'editor-text-overflowed',\n strikethrough: 'editor-text-strikethrough',\n underline: 'editor-text-underline',\n underlineStrikethrough: 'editor-text-underlineStrikethrough',\n subscript: 'editor-text-subscript',\n superscript: 'editor-text-superscript',\n },\n table: 'PlaygroundEditorTheme__table',\n tableCell: 'PlaygroundEditorTheme__tableCell',\n tableCellActionButton: 'PlaygroundEditorTheme__tableCellActionButton',\n tableCellActionButtonContainer:\n 'PlaygroundEditorTheme__tableCellActionButtonContainer',\n tableCellEditing: 'PlaygroundEditorTheme__tableCellEditing',\n tableCellHeader: 'PlaygroundEditorTheme__tableCellHeader',\n tableCellPrimarySelected: 'PlaygroundEditorTheme__tableCellPrimarySelected',\n tableCellResizer: 'PlaygroundEditorTheme__tableCellResizer',\n tableCellSelected: 'PlaygroundEditorTheme__tableCellSelected',\n tableCellSortedIndicator: 'PlaygroundEditorTheme__tableCellSortedIndicator',\n tableResizeRuler: 'PlaygroundEditorTheme__tableCellResizeRuler',\n tableRowStriping: 'PlaygroundEditorTheme__tableRowStriping',\n tableSelected: 'PlaygroundEditorTheme__tableSelected',\n tableSelection: 'PlaygroundEditorTheme__tableSelection',\n list: {\n checklist: 'PlaygroundEditorTheme__checklist',\n listitem: 'PlaygroundEditorTheme__listItem',\n listitemChecked: 'PlaygroundEditorTheme__listItemChecked',\n listitemUnchecked: 'PlaygroundEditorTheme__listItemUnchecked',\n nested: {\n listitem: 'PlaygroundEditorTheme__nestedListItem',\n },\n olDepth: [\n 'PlaygroundEditorTheme__ol1',\n 'PlaygroundEditorTheme__ol2',\n 'PlaygroundEditorTheme__ol3',\n 'PlaygroundEditorTheme__ol4',\n 'PlaygroundEditorTheme__ol5',\n ],\n ul: 'PlaygroundEditorTheme__ul',\n },\n quote: 'PlaygroundEditorTheme__quote',\n hr: 'PlaygroundEditorTheme__hr',\n layoutContainer: 'PlaygroundEditorTheme__layoutContainer',\n layoutItem: 'PlaygroundEditorTheme__layoutItem',\n embedBlock: {\n base: 'PlaygroundEditorTheme__embedBlock',\n focus: 'PlaygroundEditorTheme__embedBlockFocus',\n },\n displayYoutube: 'editor-display-youtube',\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n COMMAND_PRIORITY_LOW,\n CAN_UNDO_COMMAND,\n CAN_REDO_COMMAND,\n UNDO_COMMAND,\n REDO_COMMAND\n} from 'lexical'\nimport React, { useEffect, useState } from 'react'\n\nexport const RedoAction = () => {\n const [canRedo, setCanRedo] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n CAN_REDO_COMMAND,\n (payload) => {\n setCanRedo(payload)\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return (\n <button\n title='Redo'\n disabled={!canRedo}\n onClick={() => {\n editor.dispatchCommand(REDO_COMMAND, undefined)\n }}\n className=\"editor-toolbar-item\"\n aria-label=\"Redo\">\n <i className=\"fa-regular fa-rotate-right\" />\n </button>\n )\n}\n\nexport const UndoAction = () => {\n const [canUndo, setCanUndo] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand(\n CAN_UNDO_COMMAND,\n (payload) => {\n setCanUndo(payload)\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor])\n\n return (\n <button\n title='Undo'\n disabled={!canUndo}\n onClick={() => {\n editor.dispatchCommand(UNDO_COMMAND, undefined)\n }}\n className=\"editor-toolbar-item\"\n aria-label=\"Undo\">\n <i className=\"fa-regular fa-rotate-left\" />\n </button>\n )\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n FORMAT_TEXT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\n\nimport React, { useState, useCallback, useEffect } from 'react'\n\nexport const TextBoldAction = () => {\n const [isBold, setIsBold] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update text format\n setIsBold(selection.hasFormat('bold'))\n }\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title='Bold'\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\n }}\n className={'editor-toolbar-item ' + (isBold ? 'active' : '')}\n aria-label=\"Text Bold\">\n <i className=\"fa-regular fa-bold\" />\n </button>\n )\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n FORMAT_TEXT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\n\nimport React, { useState, useCallback, useEffect } from 'react'\n\nexport const TextItalicAction = () => {\n const [isItalic, setIsItalic] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update text format\n setIsItalic(selection.hasFormat('italic'))\n }\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title='Italic'\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')\n }}\n className={'editor-toolbar-item ' + (isItalic ? 'active' : '')}\n aria-label=\"Text Italic\">\n <i className=\"fa-regular fa-italic\" />\n </button>\n )\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n FORMAT_TEXT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\n\nimport React, { useState, useCallback, useEffect } from 'react'\n\nexport const TextUnderlineAction = () => {\n const [isUnderline, setIsUnderline] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update text format\n setIsUnderline(selection.hasFormat('underline'))\n }\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title='Underline'\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')\n }}\n className={'editor-toolbar-item ' + (isUnderline ? 'active' : '')}\n aria-label=\"Text Underline\">\n <i className=\"fa-regular fa-underline\" />\n </button>\n )\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n FORMAT_TEXT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\n\nimport React, { useState, useCallback, useEffect } from 'react'\n\nexport const TextStrikethroughAction = () => {\n const [isStrikethrough, setIsStrikethrough] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update text format\n setIsStrikethrough(selection.hasFormat('strikethrough'))\n }\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title='Strikethrough'\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')\n }}\n className={'editor-toolbar-item ' + (isStrikethrough ? 'active' : '')}\n aria-label=\"Text Strikethrough\">\n <i className=\"fa-regular fa-strikethrough\" />\n </button>\n )\n}","// Based on lexical playground\n\n// TODO: Clear element format\n// For now, if only element format is applied, clear format will do nothing\n// try console.log(textNode.getParent().getFormatType())\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n $isTextNode\n} from 'lexical'\nimport {$isDecoratorBlockNode} from '@lexical/react/LexicalDecoratorBlockNode'\nimport { $isHeadingNode, $isQuoteNode } from '@lexical/rich-text'\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils'\nimport { $isTableSelection } from '@lexical/table'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport React, { useCallback } from 'react'\n\nexport const ClearFormatAction = () => {\n const [editor] = useLexicalComposerContext()\n\n const clearFormatting = useCallback(() => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection) || $isTableSelection(selection)) {\n const anchor = selection.anchor\n const focus = selection.focus\n const nodes = selection.getNodes()\n const extractedNodes = selection.extract()\n\n if (anchor.key === focus.key && anchor.offset === focus.offset) {\n return\n }\n\n nodes.forEach((node, idx) => {\n // We split the first and last node by the selection\n // So that we don't format unselected text inside those nodes\n if ($isTextNode(node)) {\n // Use a separate variable to ensure TS does not lose the refinement\n let textNode = node\n if (idx === 0 && anchor.offset !== 0) {\n textNode = textNode.splitText(anchor.offset)[1] || textNode\n }\n if (idx === nodes.length - 1) {\n textNode = textNode.splitText(focus.offset)[0] || textNode\n }\n /**\n * If the selected text has one format applied\n * selecting a portion of the text, could\n * clear the format to the wrong portion of the text.\n *\n * The cleared text is based on the length of the selected text.\n */\n // We need this in case the selected text only has one format\n const extractedTextNode = extractedNodes[0]\n if (nodes.length === 1 && $isTextNode(extractedTextNode)) {\n textNode = extractedTextNode\n }\n\n if (textNode.__style !== '') {\n textNode.setStyle('')\n }\n if (textNode.__format !== 0) {\n textNode.setFormat(0)\n $getNearestBlockElementAncestorOrThrow(textNode).setFormat('')\n }\n node = textNode\n } else if ($isHeadingNode(node) || $isQuoteNode(node)) {\n node.replace($createParagraphNode(), true)\n } else if ($isDecoratorBlockNode(node)) {\n node.setFormat('')\n }\n })\n }\n })\n }, [editor])\n\n return (\n <button\n title='Clear Format'\n onClick={clearFormatting}\n className='editor-toolbar-item'\n aria-label='Clear Format'\n >\n <i className='fa-regular fa-eraser' />\n </button>\n )\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n FORMAT_TEXT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\n\nimport React, { useState, useCallback, useEffect } from 'react'\n\nexport const TextSuperscriptAction = () => {\n const [isSuperscript, setIsSuperscript] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update text format\n setIsSuperscript(selection.hasFormat('superscript'))\n }\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title='Superscript'\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript')\n }}\n className={'editor-toolbar-item ' + (isSuperscript ? 'active' : '')}\n aria-label=\"Text Superscript\">\n <i className=\"fa-regular fa-superscript\" />\n </button>\n )\n}","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n FORMAT_TEXT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\n\nimport React, { useState, useCallback, useEffect } from 'react'\n\nexport const TextSubscriptAction = () => {\n const [isSubscript, setIsSubscript] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update text format\n setIsSubscript(selection.hasFormat('subscript'))\n }\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW,\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title='Subscript'\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript')\n }}\n className={'editor-toolbar-item ' + (isSubscript ? 'active' : '')}\n aria-label=\"Text Subscript\">\n <i className=\"fa-regular fa-subscript\" />\n </button>\n )\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst SUPPORTED_URL_PROTOCOLS = [\n 'http:',\n 'https:',\n 'mailto:',\n 'sms:',\n 'tel:',\n]\n\nexport const sanitizeUrl = (url) => {\n try {\n const parsedUrl = new URL(url)\n if (!SUPPORTED_URL_PROTOCOLS.includes(parsedUrl.protocol)) {\n return 'about:blank'\n }\n } catch {\n return url\n }\n return url\n}\n\n// Source: https://stackoverflow.com/a/8234912/2013580\nconst urlRegExp = new RegExp(\n /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/,\n)\nexport const validateUrl = (url) => {\n // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\n // Maybe show a dialog where they user can type the URL before inserting it.\n return url === 'https://' || urlRegExp.test(url)\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isAtNodeEnd } from '@lexical/selection'\n\nexport const getSelectedNode = (selection) => {\n const anchor = selection.anchor\n const focus = selection.focus\n const anchorNode = selection.anchor.getNode()\n const focusNode = selection.focus.getNode()\n if (anchorNode === focusNode) {\n return anchorNode\n }\n const isBackward = selection.isBackward()\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode\n } else {\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode\n }\n}","import { sanitizeUrl } from '../../../utils/url'\nimport { getSelectedNode } from '../../../utils/getSelectedNode'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'\nimport {\n $getSelection,\n $isRangeSelection,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\nimport { mergeRegister } from '@lexical/utils'\n\nimport React, { useState, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nexport const LinkAction = ({\n setIsLinkEditMode\n}) => {\n const [isLink, setIsLink] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n // Update links\n const node = getSelectedNode(selection)\n const parent = node.getParent()\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n setIsLink(true)\n } else {\n setIsLink(false)\n }\n }\n }, [editor])\n\n const insertLink = useCallback(() => {\n if (!isLink) {\n setIsLinkEditMode(true)\n editor.dispatchCommand(\n TOGGLE_LINK_COMMAND,\n sanitizeUrl('https://'),\n )\n } else {\n setIsLinkEditMode(false)\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }\n }, [editor, isLink, setIsLinkEditMode])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => $updateToolbar(),\n COMMAND_PRIORITY_LOW\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <button\n title=\"Insert link\"\n onClick={insertLink}\n className={'editor-toolbar-item ' + (isLink ? 'active' : '')}\n aria-label=\"Insert link\"\n >\n <i className=\"fa-regular fa-link\" />\n </button>\n )\n}\nLinkAction.propTypes = {\n setIsLinkEditMode: PropTypes.func\n}","import React, { useRef, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nexport const Dropdown = ({\n children,\n buttonLabel,\n buttonAriaLabel,\n buttonIconClassName,\n expand,\n setExpand,\n closeOnClickOutside = true,\n minimalToolbar = false\n}) => {\n const node = useRef()\n\n return (\n <div className='editor-dropdown-container' ref={node}>\n <button\n title={buttonLabel}\n aria-label={buttonAriaLabel}\n onClick={() => {setExpand(!expand)}}\n className={'editor-toolbar-item ' + (expand ? 'active' : '')}\n >\n {buttonIconClassName && <i className={buttonIconClassName} />}\n { !minimalToolbar && <span>{buttonLabel}</span> }\n <i className=\"fa-regular fa-chevron-down\" />\n </button>\n {expand && (\n <DropdownList nodeRef={node} setExpand={setExpand} closeOnClickOutside={closeOnClickOutside}>\n {children}\n </DropdownList>\n )}\n </div>\n )\n}\nDropdown.propTypes = {\n children: PropTypes.node.isRequired,\n buttonLabel: PropTypes.string.isRequired,\n buttonAriaLabel: PropTypes.string.isRequired,\n buttonIconClassName: PropTypes.string,\n expand: PropTypes.bool.isRequired,\n setExpand: PropTypes.func.isRequired,\n closeOnClickOutside: PropTypes.bool,\n minimalToolbar: PropTypes.bool,\n}\n\nconst DropdownList = ({ children, nodeRef, setExpand, closeOnClickOutside }) => {\n // Close dropdown when clicked outside\n // Big thanks to https://stackoverflow.com/questions/59017954/react-close-modal-on-click-outside\n const handleOutsideClick = useCallback((e) => {\n if (!nodeRef.current?.contains(e.target)) setExpand(false)\n }, [nodeRef, setExpand])\n\n useEffect(() => {\n if (!closeOnClickOutside) return\n\n document.addEventListener('click', handleOutsideClick, false)\n return () => {\n document.removeEventListener('click', handleOutsideClick, false)\n }\n }, [closeOnClickOutside])\n\n return (\n <div className='editor-dropdown-list'>\n {children}\n </div>\n )\n}\nDropdownList.propTypes = {\n children: PropTypes.node.isRequired,\n nodeRef: PropTypes.object.isRequired,\n setExpand: PropTypes.func.isRequired,\n closeOnClickOutside: PropTypes.bool.isRequired,\n}","import { Dropdown } from '../../Dropdown'\nimport { getSelectedNode } from '../../../utils/getSelectedNode'\n\nimport React, { useState, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getSelection,\n $isRangeSelection,\n $isElementNode,\n FORMAT_ELEMENT_COMMAND,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW\n} from 'lexical'\nimport { $isLinkNode } from '@lexical/link'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\n\nconst ELEMENT_FORMAT_OPTIONS = {\n left: {\n icon: 'fa-align-left',\n name: 'Left Align',\n commandPayload: 'left',\n },\n center: {\n icon: 'fa-align-center',\n name: 'Center Align',\n commandPayload: 'center',\n },\n right: {\n icon: 'fa-align-right',\n name: 'Right Align',\n commandPayload: 'right',\n },\n justify: {\n icon: 'fa-align-justify',\n name: 'Justify Align',\n commandPayload: 'justify',\n },\n start: {\n icon: 'fa-align-left',\n name: 'Start Align',\n commandPayload: 'start',\n },\n end: {\n icon: 'fa-align-right',\n name: 'End Align',\n commandPayload: 'end',\n },\n}\n\nexport const ElementFormatDropdownPlugin = ({ minimalToolbar }) => {\n const [elementFormat, setElementFormat] = useState('left')\n const [expand, setExpand] = useState(false)\n const [editor] = useLexicalComposerContext()\n const formatOption = ELEMENT_FORMAT_OPTIONS[elementFormat || 'left']\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection)\n const parent = node.getParent()\n let matchingParent\n if ($isLinkNode(parent)) {\n // If node is a link, we need to fetch the parent paragraph node to set format\n matchingParent = $findMatchingParent(\n node,\n (parentNode) => $isElementNode(parentNode) && !parentNode.isInline(),\n )\n }\n\n // If matchingParent is a valid node, pass it's format type\n setElementFormat(\n $isElementNode(matchingParent)\n ? matchingParent.getFormatType()\n : $isElementNode(node)\n ? node.getFormatType()\n : parent?.getFormatType() || 'left',\n )\n }\n }, [editor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW\n )\n )\n }, [editor, $updateToolbar])\n\n return (\n <Dropdown\n buttonLabel={formatOption.name}\n buttonIconClassName={`fa-regular ${formatOption.icon}`}\n buttonAriaLabel=\"Formatting options for text alignment\"\n expand={expand}\n setExpand={setExpand}\n minimalToolbar={minimalToolbar}\n >\n {Object.keys(ELEMENT_FORMAT_OPTIONS).map((key) => {\n const option = ELEMENT_FORMAT_OPTIONS[key]\n return (\n <button\n key={key}\n onClick={() => {\n setElementFormat(key)\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, option.commandPayload)\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${option.icon}`} />\n <span>{option.name}</span>\n </button>\n )\n })}\n </Dropdown>\n )\n}\nElementFormatDropdownPlugin.propTypes = {\n minimalToolbar: PropTypes.bool,\n}","import { Modal } from '../../../../../elements'\n\nimport {\n INSERT_TABLE_COMMAND\n} from '@lexical/table'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' \nimport React, { useState, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\nconst InsertTableModal = ({ editor, visible, onCloseModal }) => {\n const [rows, setRows] = useState('5')\n const [columns, setColumns] = useState('5')\n const [isDisabled, setIsDisabled] = useState(true)\n\n const onClick = useCallback(() => {\n editor.dispatchCommand(INSERT_TABLE_COMMAND, {\n columns,\n rows,\n })\n\n onCloseModal()\n }, [editor, columns, rows, onCloseModal])\n\n useEffect(() => {\n const row = Number(rows)\n const column = Number(columns)\n if (row && row > 0 && row <= 500 && column && column > 0 && column <= 50) {\n setIsDisabled(false)\n } else {\n setIsDisabled(true)\n }\n }, [rows, columns])\n\n return (\n <Modal\n width='420px'\n visible={visible}\n onClose={onCloseModal}\n contentStyle={{\n borderRadius: '8px',\n }}\n >\n <div className='editor-insert-table-modal'>\n <div className='editor-insert-table-modal-input'>\n <label>Rows</label>\n <input\n type='number'\n value={rows}\n onChange={(e) => setRows(e.target.value)}\n />\n </div>\n <div className='editor-insert-table-modal-input'>\n <label>Columns</label>\n <input\n type='number'\n value={columns}\n onChange={(e) => setColumns(e.target.value)}\n />\n </div>\n <button\n disabled={isDisabled}\n onClick={onClick}\n >\n Insert Table\n </button>\n </div>\n </Modal>\n )\n}\nInsertTableModal.propTypes = {\n editor: PropTypes.object,\n visible: PropTypes.bool,\n onCloseModal: PropTypes.func.isRequired,\n}\n\nexport const InsertTableButton = ({ onClickButton = () => {} }) => {\n const [visible, setVisible] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n return (\n <>\n <button\n onClick={() => {\n setVisible(true)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={'fa-regular fa-table'} />\n <span>Table</span>\n </button>\n <InsertTableModal\n editor={editor}\n visible={visible}\n onCloseModal={() => {\n setVisible(false)\n onClickButton()\n }}\n />\n </>\n )\n}\nInsertTableButton.propTypes = {\n onClickButton: PropTypes.func,\n}","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { INSERT_HORIZONTAL_RULE_COMMAND } from '@lexical/react/LexicalHorizontalRuleNode'\n\nexport const HorizontalRuleButton = ({ onClickButton = () => {} }) => {\n const [editor] = useLexicalComposerContext()\n return (\n <button\n onClick={() => {\n editor.dispatchCommand(\n INSERT_HORIZONTAL_RULE_COMMAND,\n undefined,\n )\n onClickButton()\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={'fa-regular fa-horizontal-rule'} />\n <span>Horizontal Rule</span>\n </button>\n )\n}\nHorizontalRuleButton.propTypes = {\n onClickButton: PropTypes.func,\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nexport default function joinClasses(\n ...args\n) {\n return args.filter(Boolean).join(' ')\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport joinClasses from '../../utils/joinClasses'\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nexport function Button({\n 'data-test-id': dataTestId,\n children,\n className,\n onClick,\n disabled,\n small,\n title,\n}) {\n return (\n <button\n disabled={disabled}\n className={joinClasses(\n 'Button__root',\n disabled && 'Button__disabled',\n small && 'Button__small',\n className,\n )}\n onClick={onClick}\n title={title}\n aria-label={title}\n {...(dataTestId && {'data-test-id': dataTestId})}>\n {children}\n </button>\n )\n}\nButton.propTypes = {\n 'data-test-id': PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n onClick: PropTypes.func,\n disabled: PropTypes.bool,\n small: PropTypes.bool,\n title: PropTypes.string,\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport {addClassNamesToElement} from '@lexical/utils'\nimport {ElementNode} from 'lexical'\n\nfunction $convertLayoutContainerElement(\n domNode,\n) {\n const styleAttributes = window.getComputedStyle(domNode)\n const templateColumns = styleAttributes.getPropertyValue(\n 'grid-template-columns',\n )\n if (templateColumns) {\n const node = $createLayoutContainerNode(templateColumns)\n return {node}\n }\n return null\n}\n\nexport class LayoutContainerNode extends ElementNode {\n __templateColumns\n\n constructor(templateColumns, key) {\n super(key)\n this.__templateColumns = templateColumns\n }\n\n static getType() {\n return 'layout-container'\n }\n\n static clone(node) {\n return new LayoutContainerNode(node.__templateColumns, node.__key)\n }\n\n createDOM(config) {\n const dom = document.createElement('div')\n dom.style.gridTemplateColumns = this.__templateColumns\n if (typeof config.theme.layoutContainer === 'string') {\n addClassNamesToElement(dom, config.theme.layoutContainer)\n }\n return dom\n }\n\n exportDOM(editor) {\n let { element } = super.exportDOM(editor)\n element.style.gridTemplateColumns = this.__templateColumns\n element.setAttribute('data-lexical-layout-container', 'true')\n return {element}\n }\n\n updateDOM(prevNode, dom) {\n if (prevNode.__templateColumns !== this.__templateColumns) {\n dom.style.gridTemplateColumns = this.__templateColumns\n }\n return false\n }\n\n static importDOM() {\n return {\n div: (domNode) => {\n if (!domNode.hasAttribute('data-lexical-layout-container')) {\n return null\n }\n return {\n conversion: $convertLayoutContainerElement,\n priority: 2,\n }\n },\n }\n }\n\n static importJSON(json) {\n return $createLayoutContainerNode(json.templateColumns)\n }\n\n isShadowRoot() {\n return true\n }\n\n canBeEmpty() {\n return false\n }\n\n exportJSON() {\n return {\n ...super.exportJSON(),\n templateColumns: this.__templateColumns,\n type: 'layout-container',\n version: 1,\n }\n }\n\n getTemplateColumns() {\n return this.getLatest().__templateColumns\n }\n\n setTemplateColumns(templateColumns) {\n this.getWritable().__templateColumns = templateColumns\n }\n}\n\nexport function $createLayoutContainerNode(\n templateColumns,\n) {\n return new LayoutContainerNode(templateColumns)\n}\n\nexport function $isLayoutContainerNode(\n node,\n) {\n return node instanceof LayoutContainerNode\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport {addClassNamesToElement} from '@lexical/utils'\nimport {ElementNode} from 'lexical'\n\nexport class LayoutItemNode extends ElementNode {\n static getType() {\n return 'layout-item'\n }\n\n static clone(node) {\n return new LayoutItemNode(node.__key)\n }\n\n createDOM(config) {\n const dom = document.createElement('div')\n if (typeof config.theme.layoutItem === 'string') {\n addClassNamesToElement(dom, config.theme.layoutItem)\n }\n return dom\n }\n\n updateDOM() {\n return false\n }\n\n static importDOM() {\n return {}\n }\n\n static importJSON() {\n return $createLayoutItemNode()\n }\n\n isShadowRoot() {\n return true\n }\n\n exportJSON() {\n return {\n ...super.exportJSON(),\n type: 'layout-item',\n version: 1,\n }\n }\n}\n\nexport function $createLayoutItemNode() {\n return new LayoutItemNode()\n}\n\nexport function $isLayoutItemNode(\n node,\n) {\n return node instanceof LayoutItemNode\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport {\n $createLayoutContainerNode,\n $isLayoutContainerNode,\n LayoutContainerNode,\n} from '../../nodes/LayoutContainerNode'\nimport {\n $createLayoutItemNode,\n $isLayoutItemNode,\n LayoutItemNode,\n} from '../../nodes/LayoutItemNode'\n\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport {\n $findMatchingParent,\n $insertNodeToNearestRoot,\n mergeRegister,\n} from '@lexical/utils'\nimport {\n $createParagraphNode,\n $getNodeByKey,\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n COMMAND_PRIORITY_LOW,\n createCommand,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_LEFT_COMMAND,\n KEY_ARROW_RIGHT_COMMAND,\n KEY_ARROW_UP_COMMAND,\n} from 'lexical'\nimport {useEffect} from 'react'\n\nexport const INSERT_LAYOUT_COMMAND =createCommand()\nexport const UPDATE_LAYOUT_COMMAND = createCommand()\n\nexport const LayoutPlugin = () => {\n const [editor] = useLexicalComposerContext()\n useEffect(() => {\n if (!editor.hasNodes([LayoutContainerNode, LayoutItemNode])) {\n throw new Error(\n 'LayoutPlugin: LayoutContainerNode, or LayoutItemNode not registered on editor',\n )\n }\n\n const $onEscape = (before) => {\n const selection = $getSelection()\n if (\n $isRangeSelection(selection) &&\n selection.isCollapsed() &&\n selection.anchor.offset === 0\n ) {\n const container = $findMatchingParent(\n selection.anchor.getNode(),\n $isLayoutContainerNode,\n )\n\n if ($isLayoutContainerNode(container)) {\n const parent = container.getParent()\n const child =\n parent &&\n (before\n ? parent.getFirstChild()\n : parent?.getLastChild())\n const descendant = before\n ? container.getFirstDescendant()?.getKey()\n : container.getLastDescendant()?.getKey()\n\n if (\n parent !== null &&\n child === container &&\n selection.anchor.key === descendant\n ) {\n if (before) {\n container.insertBefore($createParagraphNode())\n } else {\n container.insertAfter($createParagraphNode())\n }\n }\n }\n }\n\n return false\n }\n\n return mergeRegister(\n // When layout is the last child pressing down/right arrow will insert paragraph\n // below it to allow adding more content. It's similar what $insertBlockNode\n // (mainly for decorators), except it'll always be possible to continue adding\n // new content even if trailing paragraph is accidentally deleted\n editor.registerCommand(\n KEY_ARROW_DOWN_COMMAND,\n () => $onEscape(false),\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ARROW_RIGHT_COMMAND,\n () => $onEscape(false),\n COMMAND_PRIORITY_LOW,\n ),\n // When layout is the first child pressing up/left arrow will insert paragraph\n // above it to allow adding more content. It's similar what $insertBlockNode\n // (mainly for decorators), except it'll always be possible to continue adding\n // new content even if leading paragraph is accidentally deleted\n editor.registerCommand(\n KEY_ARROW_UP_COMMAND,\n () => $onEscape(true),\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ARROW_LEFT_COMMAND,\n () => $onEscape(true),\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n INSERT_LAYOUT_COMMAND,\n (template) => {\n editor.update(() => {\n const container = $createLayoutContainerNode(template)\n const itemsCount = getItemsCountFromTemplate(template)\n\n for (let i = 0; i < itemsCount; i++) {\n container.append(\n $createLayoutItemNode().append($createParagraphNode()),\n )\n }\n\n $insertNodeToNearestRoot(container)\n container.selectStart()\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n editor.registerCommand(\n UPDATE_LAYOUT_COMMAND,\n ({template, nodeKey}) => {\n editor.update(() => {\n const container = $getNodeByKey(nodeKey)\n\n if (!$isLayoutContainerNode(container)) {\n return\n }\n\n const itemsCount = getItemsCountFromTemplate(template)\n const prevItemsCount = getItemsCountFromTemplate(\n container.getTemplateColumns(),\n )\n\n // Add or remove extra columns if new template does not match existing one\n if (itemsCount > prevItemsCount) {\n for (let i = prevItemsCount; i < itemsCount; i++) {\n container.append(\n $createLayoutItemNode().append($createParagraphNode()),\n )\n }\n } else if (itemsCount < prevItemsCount) {\n for (let i = prevItemsCount - 1; i >= itemsCount; i--) {\n const layoutItem = container.getChildAtIndex(i)\n\n if ($isLayoutItemNode(layoutItem)) {\n layoutItem.remove()\n }\n }\n }\n\n container.setTemplateColumns(template)\n })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n ),\n // Structure enforcing transformers for each node type. In case nesting structure is not\n // \"Container > Item\" it'll unwrap nodes and convert it back\n // to regular content.\n editor.registerNodeTransform(LayoutItemNode, (node) => {\n const parent = node.getParent()\n if (!$isLayoutContainerNode(parent)) {\n const children = node.getChildren()\n for (const child of children) {\n node.insertBefore(child)\n }\n node.remove()\n }\n }),\n editor.registerNodeTransform(LayoutContainerNode, (node) => {\n const children = node.getChildren()\n if (!children.every($isLayoutItemNode)) {\n for (const child of children) {\n node.insertBefore(child)\n }\n node.remove()\n }\n }),\n )\n }, [editor])\n\n return null\n}\n\nfunction getItemsCountFromTemplate(template) {\n return template.trim().split(/\\s+/).length\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { Modal } from '../../../../../elements'\nimport { Button } from '../../Button'\nimport { Dropdown } from '../../Dropdown'\nimport { INSERT_LAYOUT_COMMAND } from '../../../plugins/LayoutPlugin'\n\nimport React, { useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\n\nconst LAYOUTS = [\n {label: '2 columns (equal width)', value: '1fr 1fr'},\n {label: '2 columns (25% - 75%)', value: '1fr 3fr'},\n {label: '3 columns (equal width)', value: '1fr 1fr 1fr'},\n {label: '3 columns (25% - 50% - 25%)', value: '1fr 2fr 1fr'},\n {label: '4 columns (equal width)', value: '1fr 1fr 1fr 1fr'},\n]\n\nconst InsertColumnLayoutModal = ({ editor, visible, onCloseModal }) => {\n const [layout, setLayout] = useState(LAYOUTS[0].value)\n const [expand, setExpand] = useState(false)\n\n const onInsert = useCallback(() => {\n editor.dispatchCommand(INSERT_LAYOUT_COMMAND, layout)\n onCloseModal()\n }, [editor, layout, onCloseModal])\n\n return (\n <Modal\n width='420px'\n visible={visible}\n onClose={onCloseModal}\n contentStyle={{\n borderRadius: '8px',\n }}\n >\n <div className='editor-insert-column-modal'>\n <Dropdown\n buttonLabel={LAYOUTS.find((item) => item.value === layout)?.label}\n buttonAriaLabel=\"Formatting options for text alignment\"\n expand={expand}\n setExpand={setExpand}\n >\n {LAYOUTS.map(({label, value}) => (\n <Button\n key={value}\n onClick={() => {\n setLayout(value)\n setExpand(false)\n }}\n >\n {label}\n </Button>\n ))}\n </Dropdown>\n <Button onClick={onInsert}>\n Insert Table\n </Button>\n </div>\n </Modal>\n )\n}\nInsertColumnLayoutModal.propTypes = {\n editor: PropTypes.object,\n visible: PropTypes.bool,\n onCloseModal: PropTypes.func.isRequired,\n}\n\nexport const InsertColumnLayoutButton = ({ onClickButton = () => {} }) => {\n const [visible, setVisible] = useState(false)\n const [editor] = useLexicalComposerContext()\n\n return (\n <>\n <button\n onClick={() => {\n setVisible(true)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={'fa-regular fa-columns-3'} />\n <span>Columns Layout</span>\n </button>\n <InsertColumnLayoutModal\n editor={editor}\n visible={visible}\n onCloseModal={() => {\n setVisible(false)\n onClickButton()\n }}\n />\n </>\n )\n}\nInsertColumnLayoutButton.propTypes = {\n onClickButton: PropTypes.func,\n}","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { INSERT_EMBED_COMMAND } from '@lexical/react/LexicalAutoEmbedPlugin'\n\nexport const InsertYouTubeButton = ({ onClickButton = () => {}}) => {\n const [editor] = useLexicalComposerContext()\n return (\n <button\n onClick={() => {\n editor.dispatchCommand(\n INSERT_EMBED_COMMAND,\n 'youtube-video',\n )\n onClickButton()\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={'fa-brands fa-youtube'} />\n <span>YouTube Video</span>\n </button>\n )\n}\nInsertYouTubeButton.propTypes = {\n onClickButton: PropTypes.func,\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport React, { useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport {createPortal} from 'react-dom'\n\nfunction PortalImpl({\n onClose,\n children,\n title,\n closeOnClickOutside,\n}) {\n const modalRef = useRef(null)\n\n useEffect(() => {\n if (modalRef.current !== null) {\n modalRef.current.focus()\n }\n }, [])\n\n useEffect(() => {\n let modalOverlayElement = null\n const handler = (event) => {\n if (event.key === 'Escape') {\n onClose()\n }\n }\n const clickOutsideHandler = (event) => {\n const target = event.target\n if (\n modalRef.current !== null &&\n !modalRef.current.contains(target) &&\n closeOnClickOutside\n ) {\n onClose()\n }\n }\n const modelElement = modalRef.current\n if (modelElement !== null) {\n modalOverlayElement = modelElement.parentElement\n if (modalOverlayElement !== null) {\n modalOverlayElement.addEventListener('click', clickOutsideHandler)\n }\n }\n\n window.addEventListener('keydown', handler)\n\n return () => {\n window.removeEventListener('keydown', handler)\n if (modalOverlayElement !== null) {\n modalOverlayElement?.removeEventListener('click', clickOutsideHandler)\n }\n }\n }, [closeOnClickOutside, onClose])\n\n return (\n <div className=\"Modal__overlay\" role=\"dialog\">\n <div className=\"Modal__modal\" tabIndex={-1} ref={modalRef}>\n <h2 className=\"Modal__title\">{title}</h2>\n <button\n className=\"Modal__closeButton\"\n aria-label=\"Close modal\"\n type=\"button\"\n onClick={onClose}>\n X\n </button>\n <div className=\"Modal__content\">{children}</div>\n </div>\n </div>\n )\n}\nPortalImpl.propTypes = {\n onClose: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n title: PropTypes.string.isRequired,\n closeOnClickOutside: PropTypes.bool,\n}\n\nexport default function Modal({\n onClose,\n children,\n title,\n closeOnClickOutside = false,\n}) {\n return createPortal(\n <PortalImpl\n onClose={onClose}\n title={title}\n closeOnClickOutside={closeOnClickOutside}>\n {children}\n </PortalImpl>,\n document.body,\n )\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport Modal from '../ui/Modal/Modal'\n\nimport {useCallback, useMemo, useState} from 'react'\nimport * as React from 'react'\n\nexport default function useModal() {\n const [modalContent, setModalContent] = useState(null)\n\n const onClose = useCallback(() => {\n setModalContent(null)\n }, [])\n\n const modal = useMemo(() => {\n if (modalContent === null) {\n return null\n }\n const {title, content, closeOnClickOutside} = modalContent\n return (\n <Modal\n onClose={onClose}\n title={title}\n closeOnClickOutside={closeOnClickOutside}>\n {content}\n </Modal>\n )\n }, [modalContent, onClose])\n\n const showModal = useCallback(\n (\n title,\n // eslint-disable-next-line no-shadow\n getContent,\n closeOnClickOutside = false,\n ) => {\n setModalContent({\n closeOnClickOutside,\n content: getContent(onClose),\n title,\n })\n },\n [onClose],\n )\n\n return [modal, showModal]\n}\n","import { gql, useMutation } from '@apollo/client'\n\nconst CREATE_CONTENT_IMAGE_MUTATION = gql`\n mutation CreateContentImage($image: RemoteFileInput!) {\n createContentImage(image: $image) {\n uploadedImage {\n id\n image {\n url\n }\n }\n }\n }\n`\n\nexport const useCreateContentImage = () => {\n return useMutation(CREATE_CONTENT_IMAGE_MUTATION)\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nexport function DialogButtonsList({children}) {\n return <div className=\"DialogButtonsList\">{children}</div>\n}\nDialogButtonsList.propTypes = {\n children: PropTypes.node,\n}\n\nexport function DialogActions({\n 'data-test-id': dataTestId,\n children,\n}) {\n return (\n <div className=\"DialogActions\" data-test-id={dataTestId}>\n {children}\n </div>\n )\n}\nDialogActions.propTypes = {\n 'data-test-id': PropTypes.string,\n children: PropTypes.node,\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nexport function FileInput({\n accept,\n label,\n onChange,\n 'data-test-id': dataTestId,\n}) {\n return (\n <div className=\"Input__wrapper\">\n <label className=\"Input__label\">{label}</label>\n <input\n type=\"file\"\n accept={accept}\n className=\"Input__input\"\n onChange={(e) => onChange(e.target.files)}\n data-test-id={dataTestId}\n />\n </div>\n )\n}\nFileInput.propTypes = {\n accept: PropTypes.string,\n label: PropTypes.string,\n onChange: PropTypes.func,\n 'data-test-id': PropTypes.string,\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport * as React from 'react'\nimport PropTypes from 'prop-types'\n\nexport default function TextInput({\n label,\n value,\n onChange,\n placeholder = '',\n 'data-test-id': dataTestId,\n type = 'text',\n}) {\n return (\n <div className=\"Input__wrapper\">\n <label className=\"Input__label\">{label}</label>\n <input\n type={type}\n className=\"Input__input\"\n placeholder={placeholder}\n value={value}\n onChange={(e) => {\n onChange(e.target.value)\n }}\n data-test-id={dataTestId}\n />\n </div>\n )\n}\nTextInput.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.string,\n 'data-test-id': PropTypes.string,\n type: PropTypes.string,\n}","import {\n $createImageNode,\n ImageNode,\n} from './ImageNode'\n\nimport { useCreateContentImage } from './hooks/useContentImage'\n\nimport { Button } from '../../ui/Button'\nimport { DialogActions } from '../../ui/Dialog'\nimport { FileInput } from '../../ui/FileInput'\nimport TextInput from '../../ui/TextInput/TextInput'\nimport { uploadToS3 } from '../../../../utilities/uploadToS3'\n\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport {$wrapNodeInElement, mergeRegister} from '@lexical/utils'\nimport {\n $createParagraphNode,\n $insertNodes,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_EDITOR,\n createCommand,\n $getNodeByKey\n} from 'lexical'\n\nimport React, {useEffect, useState} from 'react'\nimport PropTypes from 'prop-types'\n\nexport const INSERT_IMAGE_COMMAND =\n createCommand('INSERT_IMAGE_COMMAND')\n\nexport function InsertImageDialog({ activeEditor, onClose }) {\n const [uploading, setUploading] = useState(false)\n const [src, setSrc] = useState('')\n const [contentImageId, setContentImageId] = useState('')\n const [altText, setAltText] = useState('')\n const [createContentImage] = useCreateContentImage()\n\n const isDiabled = uploading || src === ''\n\n const onClick = (payload) => {\n activeEditor.dispatchCommand(INSERT_IMAGE_COMMAND, payload)\n onClose()\n }\n\n const loadImage = async (files) => {\n setUploading(true)\n setUploading(true)\n // REF: https://stackoverflow.com/questions/37576685/using-async-await-with-a-foreach-loop\n for (const file of files) {\n const tmpImageUrl = await uploadToS3(file)\n const { data } = await createContentImage({\n variables: { image: { remoteFileUrl: tmpImageUrl } }\n })\n const { uploadedImage } = data.createContentImage || {}\n const { id, image } = uploadedImage || {}\n setContentImageId(id)\n setSrc(image?.url)\n }\n setUploading(false)\n }\n\n return (\n <>\n <FileInput\n label=\"Image Upload\"\n onChange={loadImage}\n accept=\"image/*\"\n data-test-id=\"image-modal-file-upload\"\n />\n <TextInput\n label=\"Alt Text\"\n placeholder=\"Descriptive alternative text\"\n onChange={setAltText}\n value={altText}\n data-test-id=\"image-modal-alt-text-input\"\n />\n <DialogActions>\n <Button\n data-test-id=\"image-modal-file-upload-btn\"\n disabled={isDiabled}\n onClick={() => onClick({altText, src, contentImageId})}>\n {uploading ? 'Uploading...' : 'Insert'}\n </Button>\n </DialogActions>\n </>\n )\n}\nInsertImageDialog.propTypes = {\n activeEditor: PropTypes.object,\n onClose: PropTypes.func,\n}\n\nexport function ImagesPlugin({ setContentImageIds, setDeleteImageIds }) {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([ImageNode])) {\n throw new Error('ImagesPlugin: ImageNode not registered on editor')\n }\n\n return mergeRegister(\n editor.registerCommand(\n INSERT_IMAGE_COMMAND,\n (payload) => {\n const imageNode = $createImageNode(payload)\n $insertNodes([imageNode])\n if ($isRootOrShadowRoot(imageNode.getParentOrThrow())) {\n $wrapNodeInElement(imageNode, $createParagraphNode).selectEnd()\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n )\n }, [editor])\n\n // REF: https://github.com/facebook/lexical/discussions/3186\n useEffect(() => {\n const imageNodeList = new Map()\n\n if (!editor.hasNodes([ImageNode])) {\n throw new Error('ImagesPlugin: ImageNode not registered on editor')\n }\n\n return editor.registerMutationListener(ImageNode, (\n // eslint-disable-next-line no-unused-vars\n nodeMutations, { updateTags, dirtyLeaves, prevEditorState }\n ) => {\n for (const [nodeKey, mutation] of nodeMutations) {\n // NOTE: create/update add node in list\n // destroyed add node in delete List\n if (mutation === 'created' || mutation === 'updated') {\n editor.update(() => {\n const imageNode = $getNodeByKey(nodeKey)\n const contentImageId = imageNode?.getContentImageId()\n // console.log('contentImageId', contentImageId)\n if (contentImageId) {\n setContentImageIds((prev) => {\n return [...prev, contentImageId]\n })\n imageNodeList.set(nodeKey, contentImageId)\n }\n })\n }\n if (mutation === 'destroyed') {\n const contentImageId = imageNodeList.get(nodeKey)\n if (contentImageId) {\n setDeleteImageIds((prev) => {\n return [...prev, contentImageId]\n })\n setContentImageIds((prev) => {\n return prev.filter((id) => id !== contentImageId)\n })\n imageNodeList.delete(nodeKey)\n }\n }\n }\n })\n }, [editor])\n\n return null\n}\nImagesPlugin.propTypes = {\n setContentImageIds: PropTypes.func,\n setDeleteImageIds: PropTypes.func,\n}\n\nexport * from './ImageNode'","import useModal from '../../../hooks/useModal'\nimport { InsertImageDialog } from '../../../plugins/ImagesPlugin'\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\n\nexport const InsertImageButton = ({ onClickButton = () => {}}) => {\n const [modal, showModal] = useModal()\n const [editor] = useLexicalComposerContext()\n\n return (\n <>\n <button\n onClick={() => {\n showModal('Insert Image', (onClose) => (\n <InsertImageDialog\n activeEditor={editor}\n onClose={() => {\n onClose()\n onClickButton()\n }}\n />\n ))\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={'fa-regular fa-image'} />\n <span>Image</span>\n </button>\n {modal}\n </>\n )\n}\nInsertImageButton.propTypes = {\n onClickButton: PropTypes.func,\n}","import { Dropdown } from '../../Dropdown'\nimport { InsertTableButton } from '../Table'\nimport { HorizontalRuleButton } from '../HorizontalRule'\nimport { InsertColumnLayoutButton } from '../ColumnLayout'\nimport { InsertYouTubeButton } from '../YouTube'\nimport { InsertImageButton } from '../InsertImage'\n\nimport React, { useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\nexport const InsertDropdown = ({ minimalToolbar }) => {\n const [expand, setExpand] = useState(false)\n\n const closeOnClickButton = useCallback(() => {\n setExpand(false)\n }, [setExpand])\n\n return (\n <Dropdown\n buttonLabel={'Insert'}\n buttonIconClassName={'fa-regular fa-plus'}\n buttonAriaLabel='Insert options'\n expand={expand}\n setExpand={setExpand}\n closeOnClickOutside={false}\n minimalToolbar={minimalToolbar}\n >\n {/* TODO: Refactor onClickButton, it's purpose is to close dropdown when clicked */}\n <HorizontalRuleButton onClickButton={() => closeOnClickButton()} />\n <InsertImageButton onClickButton={() => closeOnClickButton()} />\n <InsertTableButton onClickButton={() => closeOnClickButton()} />\n <InsertColumnLayoutButton onClickButton={() => closeOnClickButton()} />\n <InsertYouTubeButton onClickButton={() => closeOnClickButton()} />\n </Dropdown>\n )\n}\nInsertDropdown.propTypes = {\n minimalToolbar: PropTypes.bool,\n}","import { Dropdown } from '../../../ui/Dropdown'\n\nimport React, { useState, useCallback, useEffect } from 'react'\nimport {\n $getSelection,\n $isRangeSelection,\n $createParagraphNode,\n $isRootOrShadowRoot,\n SELECTION_CHANGE_COMMAND,\n COMMAND_PRIORITY_LOW,\n} from 'lexical'\nimport {\n $setBlocksType\n} from '@lexical/selection'\nimport {\n $createHeadingNode,\n $createQuoteNode,\n $isHeadingNode\n} from '@lexical/rich-text'\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n $isListNode,\n ListNode\n} from '@lexical/list'\nimport {\n $findMatchingParent,\n $getNearestNodeOfType,\n mergeRegister\n} from '@lexical/utils'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\n\nexport const blockTypeToBlockName = {\n bullet: {\n name: 'Bulleted List',\n icon: 'fa-list'\n },\n check: {\n name: 'Check List',\n icon: 'fa-square-check'\n },\n code: {\n name: 'Code Block',\n icon: ''\n }, // Not implemented yet\n h1: {\n name: 'Heading 1',\n icon: 'fa-h1'\n },\n h2: {\n name: 'Heading 2',\n icon: 'fa-h2'\n },\n h3: {\n name: 'Heading 3',\n icon: 'fa-h3'\n },\n h4: {\n name: 'Heading 4',\n icon: 'fa-h4'\n },\n h5: {\n name: 'Heading 5',\n icon: 'fa-h5'\n },\n h6: {\n name: 'Heading 6',\n icon: 'fa-h6'\n },\n number: {\n name: 'Numbered List',\n icon: 'fa-list-ol'\n },\n paragraph: {\n name: 'Normal',\n icon: 'fa-align-left'\n },\n quote: {\n name: 'Quote',\n icon: 'fa-message-quote'\n },\n}\n\nexport const BlockFormatDropDown = () => {\n const [blockType, setBlockType] = useState('paragraph')\n const [expand, setExpand] = useState(false)\n const [editor] = useLexicalComposerContext()\n const formatOption = blockTypeToBlockName[blockType]\n\n const $updateToolbar = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode()\n let element =\n anchorNode.getKey() === 'root'\n ? anchorNode\n : $findMatchingParent(anchorNode, (e) => {\n const parent = e.getParent()\n return parent !== null && $isRootOrShadowRoot(parent)\n })\n\n if (element === null) {\n element = anchorNode.getTopLevelElementOrThrow()\n }\n\n const elementKey = element.getKey()\n const elementDOM = editor.getElementByKey(elementKey)\n\n if (elementDOM !== null) {\n if ($isListNode(element)) {\n const parentList = $getNearestNodeOfType(\n anchorNode,\n ListNode,\n )\n const type = parentList\n ? parentList.getListType()\n : element.getListType()\n setBlockType(type)\n } else {\n const type = $isHeadingNode(element)\n ? element.getTag()\n : element.getType()\n if (type in blockTypeToBlockName) {\n setBlockType(type)\n }\n }\n }\n }\n }, [editor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n // eslint-disable-next-line no-unused-vars\n (_payload, _newEditor) => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_LOW\n )\n )\n }, [editor, $updateToolbar])\n\n const formatParagraph = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n $setBlocksType(selection, () => $createParagraphNode())\n }\n })\n }\n\n const formatHeading = (headingSize) => {\n if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createHeadingNode(headingSize))\n })\n }\n }\n\n const formatBulletList = () => {\n if (blockType !== 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\n } else {\n formatParagraph()\n }\n }\n\n const formatCheckList = () => {\n console.log('blockType', blockType)\n if (blockType !== 'check') {\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\n } else {\n formatParagraph()\n }\n }\n\n const formatNumberedList = () => {\n if (blockType !== 'number') {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\n } else {\n formatParagraph()\n }\n }\n\n const formatQuote = () => {\n if (blockType !== 'quote') {\n editor.update(() => {\n const selection = $getSelection()\n $setBlocksType(selection, () => $createQuoteNode())\n })\n }\n }\n\n return (\n <Dropdown\n buttonLabel={formatOption.name}\n buttonIconClassName={`fa-regular ${formatOption.icon}`}\n buttonAriaLabel=\"Formatting options for text style\"\n expand={expand}\n setExpand={setExpand}\n >\n <button\n onClick={() => {\n formatParagraph()\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['paragraph'].icon}`} />\n <span>{blockTypeToBlockName['paragraph'].name}</span>\n </button>\n <button\n onClick={() => {\n formatHeading('h1')\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['h1'].icon}`} />\n <span>{blockTypeToBlockName['h1'].name}</span>\n </button>\n <button\n onClick={() => {\n formatHeading('h2')\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['h2'].icon}`} />\n <span>{blockTypeToBlockName['h2'].name}</span>\n </button>\n <button\n onClick={() => {\n formatHeading('h3')\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['h3'].icon}`} />\n <span>{blockTypeToBlockName['h3'].name}</span>\n </button>\n <button\n onClick={() => {\n formatHeading('h4')\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['h4'].icon}`} />\n <span>{blockTypeToBlockName['h4'].name}</span>\n </button>\n <button\n onClick={() => {\n formatBulletList()\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['bullet'].icon}`} />\n <span>{blockTypeToBlockName['bullet'].name}</span>\n </button>\n <button\n onClick={() => {\n formatNumberedList()\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['number'].icon}`} />\n <span>{blockTypeToBlockName['number'].name}</span>\n </button>\n <button\n onClick={() => {\n formatCheckList()\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['check'].icon}`} />\n <span>{blockTypeToBlockName['check'].name}</span>\n </button>\n <button\n onClick={() => {\n formatQuote()\n setExpand(false)\n }}\n className=\"editor-toolbar-item\"\n >\n <i className={`fa-regular ${blockTypeToBlockName['quote'].icon}`} />\n <span>{blockTypeToBlockName['quote'].name}</span>\n </button>\n </Dropdown>\n )\n}\nBlockFormatDropDown.propTypes = {}","import { UndoAction, RedoAction } from './UndoRedo'\nimport {\n TextBoldAction,\n TextItalicAction,\n TextUnderlineAction,\n TextStrikethroughAction,\n TextSuperscriptAction,\n TextSubscriptAction,\n ClearFormatAction\n} from './TextFormat'\nimport { LinkAction } from './Link'\nimport { ElementFormatDropdownPlugin } from './ElementFormat'\nimport { InsertDropdown } from './Insert'\nimport { BlockFormatDropDown } from './BlockFormatDropdown'\n// import { FontColorDropdown, BGColorDropdown } from './ColorPickerDropdown'\n\nimport React, { useEffect, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nconst Divider = () => {\n return <div className='divider' />\n}\n\nexport const Toolbar = ({\n setIsLinkEditMode,\n}) => {\n const editorToolbarRef = useRef(null)\n const [minimalToolbar, setMinimalToolbar] = useState(false)\n useEffect(() => {\n const toolbar = editorToolbarRef?.current\n if (!toolbar) return\n\n setMinimalToolbar(toolbar.getBoundingClientRect().width < 840)\n }, [editorToolbarRef])\n\n return (\n <div className='editor-toolbar-container' ref={editorToolbarRef}>\n <UndoAction />\n <RedoAction />\n <Divider />\n <BlockFormatDropDown />\n <Divider />\n <TextBoldAction />\n <TextItalicAction />\n <TextUnderlineAction />\n <TextStrikethroughAction />\n <TextSuperscriptAction/>\n <TextSubscriptAction />\n {/*\n * NOTE: Hide this because there is bug where\n * $generateNodesFromDOM does not parse style properly for font and bg color\n * https://github.com/facebook/lexical/issues/3929\n */}\n {/* <FontColorDropdown />\n <BGColorDropdown /> */}\n <ClearFormatAction/>\n <Divider />\n <LinkAction setIsLinkEditMode={setIsLinkEditMode} />\n <Divider />\n <ElementFormatDropdownPlugin minimalToolbar={minimalToolbar} />\n <Divider/>\n <InsertDropdown minimalToolbar={minimalToolbar} />\n </div>\n )\n}\nToolbar.propTypes = {\n setIsLinkEditMode: PropTypes.func,\n}","import { Skeleton } from '../../elements'\n\nimport React, { Fragment } from 'react'\n\nconst LexicalEditorLoading = () => {\n return (\n <Fragment>\n <Skeleton\n width=\"100%\"\n height=\"50px\"\n customStyle={{ borderRadius: '10px 10px 0 0' }}\n type=\"box\" />\n\n <Skeleton\n width=\"100%\"\n height=\"100px\"\n customStyle={{ borderTop: 'none' }}\n type=\"box\" />\n </Fragment>\n )\n}\n\nLexicalEditorLoading.propTypes = {}\n\nexport default LexicalEditorLoading\n","import translations from '../../translations'\nimport { Button } from '../../../../elements'\nimport { i18n, initializeI18n } from '../../../../utilities/i18n'\n\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\ninitializeI18n({ localeFiles: translations })\n\nexport const SubmitContentButton = ({\n onSubmit,\n rawContent,\n htmlContent,\n contentImageIds = [],\n deleteImageIds = [],\n tableOfContents = []\n}) => {\n const [isSaving, setIsSaving] = useState(false)\n\n return (\n <Button\n customStyle={{ width: '100%', marginTop: '16px' }}\n disabled={isSaving}\n onClick={async () => {\n setIsSaving(true)\n await onSubmit({\n htmlContent,\n rawContent,\n contentImageIds,\n deleteImageIds,\n tableOfContents\n })\n setIsSaving(false)\n }}\n >\n {i18n.t('LexicalEditor.save')}{isSaving ? '...' : ''}\n </Button>\n )\n}\nSubmitContentButton.propTypes = {\n onSubmit: PropTypes.func,\n rawContent: PropTypes.string,\n htmlContent: PropTypes.string,\n contentImageIds: PropTypes.array,\n deleteImageIds: PropTypes.array,\n tableOfContents: PropTypes.array,\n}","export default {\n th: {\n LexicalEditor: {\n save: 'บันทึà¸'\n }\n },\n en: {\n LexicalEditor: {\n save: 'Save'\n }\n }\n}","/**\n * The code below is a modified version of the original code from lexical playground.\n */\nconst VERTICAL_GAP = 10\nconst HORIZONTAL_OFFSET = 5\n\nexport function setFloatingElemPosition(\n targetRect,\n floatingElem,\n anchorElem,\n isLink = false,\n verticalGap = VERTICAL_GAP,\n horizontalOffset = HORIZONTAL_OFFSET,\n) {\n const scrollerElem = anchorElem.parentElement\n if (!floatingElem) return\n if (targetRect === null || !scrollerElem) return\n\n const floatingElemRect = floatingElem.getBoundingClientRect()\n const anchorElementRect = anchorElem.getBoundingClientRect()\n const editorScrollerRect = scrollerElem.getBoundingClientRect()\n\n let top = targetRect.top - floatingElemRect.height - verticalGap\n let left = targetRect.left - horizontalOffset\n\n if (top < editorScrollerRect.top) {\n // adjusted height for link element if the element is at top\n top +=\n floatingElemRect.height +\n targetRect.height +\n verticalGap * (isLink ? 9 : 2)\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset\n }\n\n top -= anchorElementRect.top\n left -= anchorElementRect.left\n\n floatingElem.style.opacity = '1'\n floatingElem.style.transform = `translate(${left}px, ${top}px)`\n}\n","// TODO: This is copied from lexical playground, need to be refactored\n// To be react\n\nimport { getSelectedNode } from '../../utils/getSelectedNode'\nimport { setFloatingElemPosition } from '../../utils/setFloatingElemPosition'\nimport { sanitizeUrl } from '../../utils/url'\n\nimport {\n $createLinkNode,\n $isAutoLinkNode,\n $isLinkNode,\n TOGGLE_LINK_COMMAND,\n} from '@lexical/link'\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport {$findMatchingParent, mergeRegister} from '@lexical/utils'\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { createPortal } from 'react-dom'\n\nfunction FloatingLinkEditor({\n editor,\n isLink,\n setIsLink,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n}) {\n const editorRef = useRef(null)\n const inputRef = useRef(null)\n const [linkUrl, setLinkUrl] = useState('')\n const [editedLinkUrl, setEditedLinkUrl] = useState('https://')\n const [lastSelection, setLastSelection] = useState(null)\n\n const $updateLinkEditor = useCallback(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection)\n const linkParent = $findMatchingParent(node, $isLinkNode)\n\n if (linkParent) {\n setLinkUrl(linkParent.getURL())\n } else if ($isLinkNode(node)) {\n setLinkUrl(node.getURL())\n } else {\n setLinkUrl('')\n }\n if (isLinkEditMode) {\n setEditedLinkUrl(linkUrl)\n }\n }\n const editorElem = editorRef.current\n const nativeSelection = window.getSelection()\n const activeElement = document.activeElement\n\n if (editorElem === null) {\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n selection !== null &&\n nativeSelection !== null &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const domRect =\n nativeSelection.focusNode?.parentElement?.getBoundingClientRect()\n if (domRect) {\n domRect.y += 40\n setFloatingElemPosition(domRect, editorElem, anchorElem)\n }\n setLastSelection(selection)\n } else if (!activeElement || activeElement.className !== 'link-input') {\n if (rootElement !== null) {\n setFloatingElemPosition(null, editorElem, anchorElem)\n }\n setLastSelection(null)\n setIsLinkEditMode(false)\n setLinkUrl('')\n }\n\n return true\n }, [anchorElem, editor, setIsLinkEditMode, isLinkEditMode, linkUrl])\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateLinkEditor()\n })\n }\n\n window.addEventListener('resize', update)\n\n if (scrollerElem) {\n scrollerElem.addEventListener('scroll', update)\n }\n\n return () => {\n window.removeEventListener('resize', update)\n\n if (scrollerElem) {\n scrollerElem.removeEventListener('scroll', update)\n }\n }\n }, [anchorElem.parentElement, editor, $updateLinkEditor])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({editorState}) => {\n editorState.read(() => {\n $updateLinkEditor()\n })\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateLinkEditor()\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setIsLink(false)\n return true\n }\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }, [editor, $updateLinkEditor, setIsLink, isLink])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n $updateLinkEditor()\n })\n }, [editor, $updateLinkEditor])\n\n useEffect(() => {\n if (isLinkEditMode && inputRef.current) {\n inputRef.current.focus()\n }\n }, [isLinkEditMode, isLink])\n\n const monitorInputInteraction = (\n event\n ) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n handleLinkSubmission()\n } else if (event.key === 'Escape') {\n event.preventDefault()\n setIsLinkEditMode(false)\n }\n }\n\n const handleLinkSubmission = () => {\n if (lastSelection !== null) {\n if (linkUrl !== '') {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(editedLinkUrl))\n editor.update(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const parent = getSelectedNode(selection).getParent()\n if ($isAutoLinkNode(parent)) {\n const linkNode = $createLinkNode(parent.getURL(), {\n rel: parent.__rel,\n target: parent.__target,\n title: parent.__title,\n })\n parent.replace(linkNode, true)\n }\n }\n })\n }\n setEditedLinkUrl('https://')\n setIsLinkEditMode(false)\n }\n }\n\n return (\n <div ref={editorRef} className=\"link-editor\">\n {!isLink ? null : isLinkEditMode ? (\n <>\n <input\n ref={inputRef}\n className=\"link-input\"\n value={editedLinkUrl}\n onChange={(event) => {\n setEditedLinkUrl(event.target.value)\n }}\n onKeyDown={(event) => {\n monitorInputInteraction(event)\n }}\n />\n <div className='link-editor-button-section'>\n <div\n className=\"fa-regular fa-times\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n setIsLinkEditMode(false)\n }}\n />\n\n <div\n className=\"fa-regular fa-check\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={(event) => event.preventDefault()}\n onClick={handleLinkSubmission}\n />\n </div>\n </>\n ) : (\n <div className=\"link-view\">\n <a\n href={sanitizeUrl(linkUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {linkUrl}\n </a>\n <div\n className=\"fa-regular fa-edit\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n setEditedLinkUrl(linkUrl)\n setIsLinkEditMode(true)\n }}\n />\n <div\n className=\"fa-regular fa-trash\"\n role=\"button\"\n tabIndex={0}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }}\n />\n </div>\n )}\n </div>\n )\n}\nFloatingLinkEditor.propTypes = {\n editor: PropTypes.object,\n isLink: PropTypes.bool,\n setIsLink: PropTypes.func,\n anchorElem: PropTypes.object,\n isLinkEditMode: PropTypes.bool,\n setIsLinkEditMode: PropTypes.func,\n}\n\nfunction useFloatingLinkEditorToolbar(\n editor,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n) {\n const [isLink, setIsLink] = useState(false)\n\n useEffect(() => {\n function $updateToolbar() {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const focusNode = getSelectedNode(selection)\n const focusLinkNode = $findMatchingParent(focusNode, $isLinkNode)\n const focusAutoLinkNode = $findMatchingParent(\n focusNode,\n $isAutoLinkNode,\n )\n if (!(focusLinkNode || focusAutoLinkNode)) {\n setIsLink(false)\n return\n }\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode)\n const autoLinkNode = $findMatchingParent(node, $isAutoLinkNode)\n return (\n (focusLinkNode && !focusLinkNode.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkNode)) ||\n (focusAutoLinkNode && !focusAutoLinkNode.is(autoLinkNode)) ||\n (autoLinkNode &&\n (!autoLinkNode.is(focusAutoLinkNode) ||\n autoLinkNode.getIsUnlinked()))\n )\n })\n if (!badNode) {\n setIsLink(true)\n } else {\n setIsLink(false)\n }\n }\n }\n return mergeRegister(\n editor.registerUpdateListener(({editorState}) => {\n editorState.read(() => {\n $updateToolbar()\n })\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n $updateToolbar()\n return false\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (payload) => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection)\n const linkNode = $findMatchingParent(node, $isLinkNode)\n if ($isLinkNode(linkNode) && (payload.metaKey || payload.ctrlKey)) {\n window.open(linkNode.getURL(), '_blank')\n return true\n }\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor])\n\n return createPortal(\n <FloatingLinkEditor\n editor={editor}\n isLink={isLink}\n anchorElem={anchorElem}\n setIsLink={setIsLink}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />,\n anchorElem,\n )\n}\n\nexport const FloatingLinkEditorPlugin = ({\n anchorElem = document.body,\n isLinkEditMode,\n setIsLinkEditMode,\n}) => {\n const [editor] = useLexicalComposerContext()\n return useFloatingLinkEditorToolbar(\n editor,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n )\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport TextInput from '../TextInput/TextInput';\n\nimport {calculateZoomLevel} from '@lexical/utils';\nimport {useEffect, useMemo, useRef, useState} from 'react';\nimport * as React from 'react';\n\nlet skipAddingToHistoryStack = false;\n\nconst basicColors = [\n '#d0021b',\n '#f5a623',\n '#f8e71c',\n '#8b572a',\n '#7ed321',\n '#417505',\n '#bd10e0',\n '#9013fe',\n '#4a90e2',\n '#50e3c2',\n '#b8e986',\n '#000000',\n '#4a4a4a',\n '#9b9b9b',\n '#ffffff',\n];\n\nconst WIDTH = 214;\nconst HEIGHT = 150;\n\nexport default function ColorPicker({\n color,\n onChange,\n}) {\n const [selfColor, setSelfColor] = useState(transformColor('hex', color));\n const [inputColor, setInputColor] = useState(color);\n const innerDivRef = useRef(null);\n\n const saturationPosition = useMemo(\n () => ({\n x: (selfColor.hsv.s / 100) * WIDTH,\n y: ((100 - selfColor.hsv.v) / 100) * HEIGHT,\n }),\n [selfColor.hsv.s, selfColor.hsv.v],\n );\n\n const huePosition = useMemo(\n () => ({\n x: (selfColor.hsv.h / 360) * WIDTH,\n }),\n [selfColor.hsv],\n );\n\n const onSetHex = (hex) => {\n setInputColor(hex);\n if (/^#[0-9A-Fa-f]{6}$/i.test(hex)) {\n const newColor = transformColor('hex', hex);\n setSelfColor(newColor);\n }\n };\n\n const onMoveSaturation = ({x, y}) => {\n const newHsv = {\n ...selfColor.hsv,\n s: (x / WIDTH) * 100,\n v: 100 - (y / HEIGHT) * 100,\n };\n const newColor = transformColor('hsv', newHsv);\n setSelfColor(newColor);\n setInputColor(newColor.hex);\n };\n\n const onMoveHue = ({x}) => {\n const newHsv = {...selfColor.hsv, h: (x / WIDTH) * 360};\n const newColor = transformColor('hsv', newHsv);\n\n setSelfColor(newColor);\n setInputColor(newColor.hex);\n };\n\n useEffect(() => {\n // Check if the dropdown is actually active\n if (innerDivRef.current !== null && onChange) {\n onChange(selfColor.hex, skipAddingToHistoryStack);\n setInputColor(selfColor.hex);\n }\n }, [selfColor, onChange]);\n\n useEffect(() => {\n if (color === undefined) {\n return;\n }\n const newColor = transformColor('hex', color);\n setSelfColor(newColor);\n setInputColor(newColor.hex);\n }, [color]);\n\n return (\n <div\n className=\"color-picker-wrapper\"\n style={{width: WIDTH}}\n ref={innerDivRef}>\n <TextInput label=\"Hex\" onChange={onSetHex} value={inputColor} />\n <div className=\"color-picker-basic-color\">\n {basicColors.map((basicColor) => (\n <button\n className={basicColor === selfColor.hex ? ' active' : ''}\n key={basicColor}\n style={{backgroundColor: basicColor}}\n onClick={() => {\n setInputColor(basicColor);\n setSelfColor(transformColor('hex', basicColor));\n }}\n />\n ))}\n </div>\n <MoveWrapper\n className=\"color-picker-saturation\"\n style={{backgroundColor: `hsl(${selfColor.hsv.h}, 100%, 50%)`}}\n onChange={onMoveSaturation}>\n <div\n className=\"color-picker-saturation_cursor\"\n style={{\n backgroundColor: selfColor.hex,\n left: saturationPosition.x,\n top: saturationPosition.y,\n }}\n />\n </MoveWrapper>\n <MoveWrapper className=\"color-picker-hue\" onChange={onMoveHue}>\n <div\n className=\"color-picker-hue_cursor\"\n style={{\n backgroundColor: `hsl(${selfColor.hsv.h}, 100%, 50%)`,\n left: huePosition.x,\n }}\n />\n </MoveWrapper>\n <div\n className=\"color-picker-color\"\n style={{backgroundColor: selfColor.hex}}\n />\n </div>\n );\n}\n\nfunction MoveWrapper({className, style, onChange, children}) {\n const divRef = useRef(null);\n const draggedRef = useRef(false);\n\n const move = (e) => {\n if (divRef.current) {\n const {current: div} = divRef;\n const {width, height, left, top} = div.getBoundingClientRect();\n const zoom = calculateZoomLevel(div);\n const x = clamp(e.clientX / zoom - left, width, 0);\n const y = clamp(e.clientY / zoom - top, height, 0);\n\n onChange({x, y});\n }\n };\n\n const onMouseDown = (e) => {\n if (e.button !== 0) {\n return;\n }\n\n move(e);\n\n const onMouseMove = (_e) => {\n draggedRef.current = true;\n skipAddingToHistoryStack = true;\n move(_e);\n };\n\n const onMouseUp = (_e) => {\n if (draggedRef.current) {\n skipAddingToHistoryStack = false;\n }\n\n document.removeEventListener('mousemove', onMouseMove, false);\n document.removeEventListener('mouseup', onMouseUp, false);\n\n move(_e);\n draggedRef.current = false;\n };\n\n document.addEventListener('mousemove', onMouseMove, false);\n document.addEventListener('mouseup', onMouseUp, false);\n };\n\n return (\n <div\n ref={divRef}\n className={className}\n style={style}\n onMouseDown={onMouseDown}>\n {children}\n </div>\n );\n}\n\nfunction clamp(value, max, min) {\n return value > max ? max : value < min ? min : value;\n}\n\nexport function toHex(value) {\n if (!value.startsWith('#')) {\n const ctx = document.createElement('canvas').getContext('2d');\n\n if (!ctx) {\n throw new Error('2d context not supported or canvas already initialized');\n }\n\n ctx.fillStyle = value;\n\n return ctx.fillStyle;\n } else if (value.length === 4 || value.length === 5) {\n value = value\n .split('')\n .map((v, i) => (i ? v + v : '#'))\n .join('');\n\n return value;\n } else if (value.length === 7 || value.length === 9) {\n return value;\n }\n\n return '#000000';\n}\n\nfunction hex2rgb(hex) {\n const rbgArr = (\n hex\n .replace(\n /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,\n (m, r, g, b) => '#' + r + r + g + g + b + b,\n )\n .substring(1)\n .match(/.{2}/g) || []\n ).map((x) => parseInt(x, 16));\n\n return {\n b: rbgArr[2],\n g: rbgArr[1],\n r: rbgArr[0],\n };\n}\n\nfunction rgb2hsv({r, g, b}) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const d = max - Math.min(r, g, b);\n\n const h = d\n ? (max === r\n ? (g - b) / d + (g < b ? 6 : 0)\n : max === g\n ? 2 + (b - r) / d\n : 4 + (r - g) / d) * 60\n : 0;\n const s = max ? (d / max) * 100 : 0;\n const v = max * 100;\n\n return {h, s, v};\n}\n\nfunction hsv2rgb({h, s, v}) {\n s /= 100;\n v /= 100;\n\n const i = ~~(h / 60);\n const f = h / 60 - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n const index = i % 6;\n\n const r = Math.round([v, q, p, p, t, v][index] * 255);\n const g = Math.round([t, v, v, q, p, p][index] * 255);\n const b = Math.round([p, p, t, v, v, q][index] * 255);\n\n return {b, g, r};\n}\n\nfunction rgb2hex({b, g, r}) {\n return '#' + [r, g, b].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\nfunction transformColor(\n format,\n color,\n) {\n let hex = toHex('#121212');\n let rgb = hex2rgb(hex);\n let hsv = rgb2hsv(rgb);\n\n if (format === 'hex') {\n const value = color;\n\n hex = toHex(value);\n rgb = hex2rgb(hex);\n hsv = rgb2hsv(rgb);\n } else if (format === 'rgb') {\n const value = color;\n\n rgb = value;\n hex = rgb2hex(rgb);\n hsv = rgb2hsv(rgb);\n } else if (format === 'hsv') {\n const value = color;\n\n hsv = value;\n rgb = hsv2rgb(hsv);\n hex = rgb2hex(rgb);\n }\n\n return {hex, hsv, rgb};\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport ColorPicker from '../../../ui/ColorPicker/ColorPicker'\nimport useModal from '../../../hooks/useModal'\n\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport {useLexicalEditable} from '@lexical/react/useLexicalEditable'\nimport {\n $deleteTableColumn__EXPERIMENTAL,\n $deleteTableRow__EXPERIMENTAL,\n $getNodeTriplet,\n $getTableCellNodeFromLexicalNode,\n $getTableColumnIndexFromTableCellNode,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableRowNode,\n $isTableSelection,\n $unmergeCell,\n getTableObserverFromTableElement,\n TableCellHeaderStates,\n TableCellNode,\n} from '@lexical/table'\nimport {\n $createParagraphNode,\n $getRoot,\n $getSelection,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n} from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nfunction computeSelectionCount(selection) {\n const selectionShape = selection.getShape()\n return {\n columns: selectionShape.toX - selectionShape.fromX + 1,\n rows: selectionShape.toY - selectionShape.fromY + 1,\n }\n}\n\nfunction $canUnmerge() {\n const selection = $getSelection()\n if (\n ($isRangeSelection(selection) && !selection.isCollapsed()) ||\n ($isTableSelection(selection) && !selection.anchor.is(selection.focus)) ||\n (!$isRangeSelection(selection) && !$isTableSelection(selection))\n ) {\n return false\n }\n const [cell] = $getNodeTriplet(selection.anchor)\n return cell.__colSpan > 1 || cell.__rowSpan > 1\n}\n\nfunction $cellContainsEmptyParagraph(cell) {\n if (cell.getChildrenSize() !== 1) {\n return false\n }\n const firstChild = cell.getFirstChildOrThrow()\n if (!$isParagraphNode(firstChild) || !firstChild.isEmpty()) {\n return false\n }\n return true\n}\n\nfunction $selectLastDescendant(node) {\n const lastDescendant = node.getLastDescendant()\n if ($isTextNode(lastDescendant)) {\n lastDescendant.select()\n } else if ($isElementNode(lastDescendant)) {\n lastDescendant.selectEnd()\n } else if (lastDescendant !== null) {\n lastDescendant.selectNext()\n }\n}\n\nfunction currentCellBackgroundColor(editor) {\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection) || $isTableSelection(selection)) {\n const [cell] = $getNodeTriplet(selection.anchor)\n if ($isTableCellNode(cell)) {\n return cell.getBackgroundColor()\n }\n }\n return null\n })\n}\n\nfunction TableActionMenu({\n onClose,\n tableCellNode: _tableCellNode,\n setIsMenuOpen,\n contextRef,\n cellMerge,\n showColorPickerModal,\n}) {\n const [editor] = useLexicalComposerContext()\n const dropDownRef = useRef(null)\n const [tableCellNode, updateTableCellNode] = useState(_tableCellNode)\n const [selectionCounts, updateSelectionCounts] = useState({\n columns: 1,\n rows: 1,\n })\n const [canMergeCells, setCanMergeCells] = useState(false)\n const [canUnmergeCell, setCanUnmergeCell] = useState(false)\n const [backgroundColor, setBackgroundColor] = useState(\n () => currentCellBackgroundColor(editor) || '',\n )\n\n useEffect(() => {\n return editor.registerMutationListener(\n TableCellNode,\n (nodeMutations) => {\n const nodeUpdated =\n nodeMutations.get(tableCellNode.getKey()) === 'updated'\n\n if (nodeUpdated) {\n editor.getEditorState().read(() => {\n updateTableCellNode(tableCellNode.getLatest())\n })\n setBackgroundColor(currentCellBackgroundColor(editor) || '')\n }\n },\n {skipInitialization: true},\n )\n }, [editor, tableCellNode])\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection()\n // Merge cells\n if ($isTableSelection(selection)) {\n const currentSelectionCounts = computeSelectionCount(selection)\n updateSelectionCounts(computeSelectionCount(selection))\n setCanMergeCells(\n currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1,\n )\n }\n // Unmerge cell\n setCanUnmergeCell($canUnmerge())\n })\n }, [editor])\n\n useEffect(() => {\n const menuButtonElement = contextRef.current\n const dropDownElement = dropDownRef.current\n const rootElement = editor.getRootElement()\n\n if (\n menuButtonElement != null &&\n dropDownElement != null &&\n rootElement != null\n ) {\n const rootEleRect = rootElement.getBoundingClientRect()\n const menuButtonRect = menuButtonElement.getBoundingClientRect()\n dropDownElement.style.opacity = '1'\n const dropDownElementRect = dropDownElement.getBoundingClientRect()\n const margin = 5\n let leftPosition = menuButtonRect.right + margin\n if (\n leftPosition + dropDownElementRect.width > window.innerWidth ||\n leftPosition + dropDownElementRect.width > rootEleRect.right\n ) {\n const position =\n menuButtonRect.left - dropDownElementRect.width - margin\n leftPosition = (position < 0 ? margin : position) + window.pageXOffset\n }\n dropDownElement.style.left = `${leftPosition + window.pageXOffset}px`\n\n let topPosition = menuButtonRect.top - 130 // 130 is navbar offset\n // Remove below, we show only expand bottom\n // It causes bug when the screen is not fit for both top and bottom\n // if (topPosition + dropDownElementRect.height > window.innerHeight)\n // if (topPosition + dropDownElementRect.height > window.innerHeight) {\n // const position = menuButtonRect.bottom - dropDownElementRect.height\n // topPosition = (position < 0 ? margin : position) + window.pageYOffset\n // }\n dropDownElement.style.top = `${topPosition}px`\n }\n }, [contextRef, dropDownRef, editor])\n\n useEffect(() => {\n function handleClickOutside(event) {\n if (\n dropDownRef.current != null &&\n contextRef.current != null &&\n !dropDownRef.current.contains(event.target) &&\n !contextRef.current.contains(event.target)\n ) {\n setIsMenuOpen(false)\n }\n }\n\n window.addEventListener('click', handleClickOutside)\n\n return () => window.removeEventListener('click', handleClickOutside)\n }, [setIsMenuOpen, contextRef])\n\n const clearTableSelection = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(\n tableNode.getKey(),\n )\n\n if (!tableElement) {\n throw new Error('Expected to find tableElement in DOM')\n }\n\n const tableObserver = getTableObserverFromTableElement(tableElement)\n if (tableObserver !== null) {\n tableObserver.clearHighlight()\n }\n\n tableNode.markDirty()\n updateTableCellNode(tableCellNode.getLatest())\n }\n\n const rootNode = $getRoot()\n rootNode.selectStart()\n })\n }, [editor, tableCellNode])\n\n const mergeTableCellsAtSelection = () => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isTableSelection(selection)) {\n const {columns, rows} = computeSelectionCount(selection)\n const nodes = selection.getNodes()\n let firstCell = null\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n if (firstCell === null) {\n node.setColSpan(columns).setRowSpan(rows)\n firstCell = node\n const isEmpty = $cellContainsEmptyParagraph(node)\n let firstChild\n if (\n isEmpty &&\n $isParagraphNode((firstChild = node.getFirstChild()))\n ) {\n firstChild.remove()\n }\n } else if ($isTableCellNode(firstCell)) {\n const isEmpty = $cellContainsEmptyParagraph(node)\n if (!isEmpty) {\n firstCell.append(...node.getChildren())\n }\n node.remove()\n }\n }\n }\n if (firstCell !== null) {\n if (firstCell.getChildrenSize() === 0) {\n firstCell.append($createParagraphNode())\n }\n $selectLastDescendant(firstCell)\n }\n onClose()\n }\n })\n }\n\n const unmergeTableCellsAtSelection = () => {\n editor.update(() => {\n $unmergeCell()\n })\n }\n\n const insertTableRowAtSelection = useCallback(\n (shouldInsertAfter) => {\n editor.update(() => {\n $insertTableRow__EXPERIMENTAL(shouldInsertAfter)\n onClose()\n })\n },\n [editor, onClose],\n )\n\n const insertTableColumnAtSelection = useCallback(\n (shouldInsertAfter) => {\n editor.update(() => {\n for (let i = 0; i < selectionCounts.columns; i++) {\n $insertTableColumn__EXPERIMENTAL(shouldInsertAfter)\n }\n onClose()\n })\n },\n [editor, onClose, selectionCounts.columns],\n )\n\n const deleteTableRowAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableRow__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const deleteTableAtSelection = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n tableNode.remove()\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const deleteTableColumnAtSelection = useCallback(() => {\n editor.update(() => {\n $deleteTableColumn__EXPERIMENTAL()\n onClose()\n })\n }, [editor, onClose])\n\n const toggleTableRowIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const newStyle =\n tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.ROW\n tableRow.getChildren().forEach((tableCell) => {\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.ROW)\n })\n\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleTableColumnIsHeader = useCallback(() => {\n editor.update(() => {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableColumnIndex =\n $getTableColumnIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n const maxRowsLength = Math.max(\n ...tableRows.map((row) => row.getChildren().length),\n )\n\n if (tableColumnIndex >= maxRowsLength || tableColumnIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const newStyle =\n tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.COLUMN\n for (let r = 0; r < tableRows.length; r++) {\n const tableRow = tableRows[r]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n const tableCells = tableRow.getChildren()\n if (tableColumnIndex >= tableCells.length) {\n // if cell is outside of bounds for the current row (for example various merge cell cases) we shouldn't highlight it\n continue\n }\n\n const tableCell = tableCells[tableColumnIndex]\n\n if (!$isTableCellNode(tableCell)) {\n throw new Error('Expected table cell')\n }\n\n tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.COLUMN)\n }\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const toggleRowStriping = useCallback(() => {\n editor.update(() => {\n if (tableCellNode.isAttached()) {\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n if (tableNode) {\n tableNode.setRowStriping(!tableNode.getRowStriping())\n }\n }\n clearTableSelection()\n onClose()\n })\n }, [editor, tableCellNode, clearTableSelection, onClose])\n\n const handleCellBackgroundColor = useCallback(\n (value) => {\n editor.update(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection) || $isTableSelection(selection)) {\n const [cell] = $getNodeTriplet(selection.anchor)\n if ($isTableCellNode(cell)) {\n cell.setBackgroundColor(value)\n }\n\n if ($isTableSelection(selection)) {\n const nodes = selection.getNodes()\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]\n if ($isTableCellNode(node)) {\n node.setBackgroundColor(value)\n }\n }\n }\n }\n })\n },\n [editor],\n )\n\n let mergeCellButton = null\n if (cellMerge) {\n if (canMergeCells) {\n mergeCellButton = (\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => mergeTableCellsAtSelection()}\n data-test-id=\"table-merge-cells\">\n Merge cells\n </button>\n )\n } else if (canUnmergeCell) {\n mergeCellButton = (\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => unmergeTableCellsAtSelection()}\n data-test-id=\"table-unmerge-cells\">\n Unmerge cells\n </button>\n )\n }\n }\n\n return createPortal(\n <div\n className=\"dropdown\"\n ref={dropDownRef}\n onClick={(e) => {\n e.stopPropagation()\n }}>\n {mergeCellButton}\n <button\n type=\"button\"\n className=\"item\"\n onClick={() =>\n showColorPickerModal('Cell background color', () => (\n <ColorPicker\n color={backgroundColor}\n onChange={handleCellBackgroundColor}\n />\n ))\n }\n data-test-id=\"table-background-color\">\n <span className=\"text\">Background color</span>\n </button>\n {/* TODO: Bring back this when lexical table node is updated to newer version */}\n {/* <button\n type=\"button\"\n className=\"item\"\n onClick={() => toggleRowStriping()}\n data-test-id=\"table-row-striping\">\n <span className=\"text\">Toggle Row Striping</span>\n </button> */}\n <hr />\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => insertTableRowAtSelection(false)}\n data-test-id=\"table-insert-row-above\">\n <span className=\"text\">\n Insert{' '}\n {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`}{' '}\n above\n </span>\n </button>\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => insertTableRowAtSelection(true)}\n data-test-id=\"table-insert-row-below\">\n <span className=\"text\">\n Insert{' '}\n {selectionCounts.rows === 1 ? 'row' : `${selectionCounts.rows} rows`}{' '}\n below\n </span>\n </button>\n <hr />\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => insertTableColumnAtSelection(false)}\n data-test-id=\"table-insert-column-before\">\n <span className=\"text\">\n Insert{' '}\n {selectionCounts.columns === 1\n ? 'column'\n : `${selectionCounts.columns} columns`}{' '}\n left\n </span>\n </button>\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => insertTableColumnAtSelection(true)}\n data-test-id=\"table-insert-column-after\">\n <span className=\"text\">\n Insert{' '}\n {selectionCounts.columns === 1\n ? 'column'\n : `${selectionCounts.columns} columns`}{' '}\n right\n </span>\n </button>\n <hr />\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => deleteTableColumnAtSelection()}\n data-test-id=\"table-delete-columns\">\n <span className=\"text\">Delete column</span>\n </button>\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => deleteTableRowAtSelection()}\n data-test-id=\"table-delete-rows\">\n <span className=\"text\">Delete row</span>\n </button>\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => deleteTableAtSelection()}\n data-test-id=\"table-delete\">\n <span className=\"text\">Delete table</span>\n </button>\n <hr />\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => toggleTableRowIsHeader()}>\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.ROW) ===\n TableCellHeaderStates.ROW\n ? 'Remove'\n : 'Add'}{' '}\n row header\n </span>\n </button>\n <button\n type=\"button\"\n className=\"item\"\n onClick={() => toggleTableColumnIsHeader()}\n data-test-id=\"table-column-header\">\n <span className=\"text\">\n {(tableCellNode.__headerState & TableCellHeaderStates.COLUMN) ===\n TableCellHeaderStates.COLUMN\n ? 'Remove'\n : 'Add'}{' '}\n column header\n </span>\n </button>\n </div>,\n document.body,\n )\n}\n\nfunction TableCellActionMenuContainer({\n anchorElem,\n cellMerge,\n}) {\n const [editor] = useLexicalComposerContext()\n\n const menuButtonRef = useRef(null)\n const menuRootRef = useRef(null)\n const [isMenuOpen, setIsMenuOpen] = useState(false)\n\n const [tableCellNode, setTableMenuCellNode] = useState(\n null,\n )\n\n const [colorPickerModal, showColorPickerModal] = useModal()\n\n const $moveMenu = useCallback(() => {\n const menu = menuButtonRef.current\n const selection = $getSelection()\n const nativeSelection = window.getSelection()\n const activeElement = document.activeElement\n\n if (selection == null || menu == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const rootElement = editor.getRootElement()\n\n if (\n $isRangeSelection(selection) &&\n rootElement !== null &&\n nativeSelection !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const tableCellNodeFromSelection = $getTableCellNodeFromLexicalNode(\n selection.anchor.getNode(),\n )\n\n if (tableCellNodeFromSelection == null) {\n setTableMenuCellNode(null)\n return\n }\n\n const tableCellParentNodeDOM = editor.getElementByKey(\n tableCellNodeFromSelection.getKey(),\n )\n\n if (tableCellParentNodeDOM == null) {\n setTableMenuCellNode(null)\n return\n }\n\n setTableMenuCellNode(tableCellNodeFromSelection)\n } else if (!activeElement) {\n setTableMenuCellNode(null)\n }\n }, [editor])\n\n useEffect(() => {\n return editor.registerUpdateListener(() => {\n editor.getEditorState().read(() => {\n $moveMenu()\n })\n })\n })\n\n useEffect(() => {\n const menuButtonDOM = menuButtonRef.current\n\n if (menuButtonDOM != null && tableCellNode != null) {\n const tableCellNodeDOM = editor.getElementByKey(tableCellNode.getKey())\n\n if (tableCellNodeDOM != null) {\n const tableCellRect = tableCellNodeDOM.getBoundingClientRect()\n const menuRect = menuButtonDOM.getBoundingClientRect()\n const anchorRect = anchorElem.getBoundingClientRect()\n\n const top = tableCellRect.top - anchorRect.top + 4\n const left =\n tableCellRect.right - menuRect.width - 10 - anchorRect.left\n\n menuButtonDOM.style.opacity = '1'\n menuButtonDOM.style.transform = `translate(${left}px, ${top}px)`\n } else {\n menuButtonDOM.style.opacity = '0'\n menuButtonDOM.style.transform = 'translate(-10000px, -10000px)'\n }\n }\n }, [menuButtonRef, tableCellNode, editor, anchorElem])\n\n const prevTableCellDOM = useRef(tableCellNode)\n\n useEffect(() => {\n if (prevTableCellDOM.current !== tableCellNode) {\n setIsMenuOpen(false)\n }\n\n prevTableCellDOM.current = tableCellNode\n }, [prevTableCellDOM, tableCellNode])\n\n return (\n <div className=\"table-cell-action-button-container\" ref={menuButtonRef}>\n {tableCellNode != null && (\n <>\n <button\n type=\"button\"\n className=\"fa-regular fa-chevron-down\"\n onClick={(e) => {\n e.stopPropagation()\n setIsMenuOpen(!isMenuOpen)\n }}\n ref={menuRootRef}>\n <i className=\"chevron-down\" />\n </button>\n {colorPickerModal}\n {isMenuOpen && (\n <TableActionMenu\n contextRef={menuRootRef}\n setIsMenuOpen={setIsMenuOpen}\n onClose={() => setIsMenuOpen(false)}\n tableCellNode={tableCellNode}\n cellMerge={cellMerge}\n showColorPickerModal={showColorPickerModal}\n />\n )}\n </>\n )}\n </div>\n )\n}\n\nexport const TableCellActionMenuPlugin = ({\n anchorElem = document.body,\n cellMerge = false,\n}) => {\n const isEditable = useLexicalEditable()\n return createPortal(\n isEditable ? (\n <TableCellActionMenuContainer\n anchorElem={anchorElem}\n cellMerge={cellMerge}\n />\n ) : null,\n anchorElem,\n )\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport {useLexicalEditable} from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n} from '@lexical/table'\nimport {calculateZoomLevel} from '@lexical/utils'\nimport {$getNearestNodeFromDOMNode} from 'lexical'\nimport * as React from 'react'\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {createPortal} from 'react-dom'\n\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 50\n\nfunction TableCellResizer({editor}) {\n const targetRef = useRef(null)\n const resizerRef = useRef(null)\n const tableRectRef = useRef(null)\n\n const mouseStartPosRef = useRef(null)\n const [mouseCurrentPos, updateMouseCurrentPos] =\n useState(null)\n\n const [activeCell, updateActiveCell] = useState(null)\n const [isMouseDown, updateIsMouseDown] = useState(false)\n const [draggingDirection, updateDraggingDirection] =\n useState(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n const onMouseMove = (event) => {\n setTimeout(() => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target\n const cell = getDOMCellFromTarget(target)\n\n if (cell && activeCell !== cell) {\n editor.update(() => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode =\n $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = editor.getElementByKey(tableNode.getKey())\n\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n })\n } else if (cell == null) {\n resetState()\n }\n }\n }, 0)\n }\n\n const onMouseDown = (event) => {\n setTimeout(() => {\n updateIsMouseDown(true)\n }, 0)\n }\n\n const onMouseUp = (event) => {\n setTimeout(() => {\n updateIsMouseDown(false)\n }, 0)\n }\n\n const removeRootListener = editor.registerRootListener(\n (rootElement, prevRootElement) => {\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n },\n )\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex =\n $getTableRowIndexFromTableCellNode(tableCellNode)\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren()\n height = Math.min(\n ...rowCells.map(\n (cell) => getCellNodeHeight(cell, editor) ?? Infinity,\n ),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n {tag: 'skip-scroll-into-view'},\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeWidth = (\n cell,\n activeEditor,\n ) => {\n const width = cell.getWidth()\n if (width !== undefined) {\n return width\n }\n\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n if (domCellNode == null) {\n return undefined\n }\n const computedStyle = getComputedStyle(domCellNode)\n return (\n domCellNode.clientWidth -\n parseFloat(computedStyle.paddingLeft) -\n parseFloat(computedStyle.paddingRight)\n )\n }\n\n const getCellNodeHeight = (\n cell,\n activeEditor,\n ) => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (\n tableCellNode,\n tableMap,\n ) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column\n }\n }\n }\n }\n\n const updateColumnWidth = useCallback(\n (widthChange) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(\n tableNode,\n null,\n null,\n )\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n for (let row = 0; row < tableMap.length; row++) {\n const cell = tableMap[row][columnIndex]\n if (\n cell.startRow === row &&\n (columnIndex === tableMap[row].length - 1 ||\n tableMap[row][columnIndex].cell !==\n tableMap[row][columnIndex + 1].cell)\n ) {\n const width = getCellNodeWidth(cell.cell, editor)\n if (width === undefined) {\n continue\n }\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n cell.cell.setWidth(newWidth)\n }\n }\n },\n {tag: 'skip-scroll-into-view'},\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction) => {\n const handler = (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const {x, y} = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction) =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const getResizers = useCallback(() => {\n if (activeCell) {\n const {height, width, top, left} =\n activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.pageXOffset + left}px`,\n top: `${window.pageYOffset + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.pageXOffset + left + width - zoneWidth / 2}px`,\n top: `${window.pageYOffset + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${\n window.pageXOffset + tableRect.left\n }px`\n styles[draggingDirection].top = `${\n window.pageYOffset + mouseCurrentPos.y / zoom\n }px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${\n window.pageYOffset + tableRect.top\n }px`\n styles[draggingDirection].left = `${\n window.pageXOffset + mouseCurrentPos.x / zoom\n }px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n return styles\n }\n\n return {\n bottom: null,\n left: null,\n right: null,\n top: null,\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n const resizerStyles = getResizers()\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <>\n <div\n className=\"TableCellResizer__resizer TableCellResizer__ui\"\n style={resizerStyles.right || undefined}\n onMouseDown={toggleResize('right')}\n />\n <div\n className=\"TableCellResizer__resizer TableCellResizer__ui\"\n style={resizerStyles.bottom || undefined}\n onMouseDown={toggleResize('bottom')}\n />\n </>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () =>\n isEditable\n ? createPortal(<TableCellResizer editor={editor} />, document.body)\n : null,\n [editor, isEditable],\n )\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport {\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableNode,\n TableNode,\n} from '@lexical/table'\nimport {$findMatchingParent, mergeRegister} from '@lexical/utils'\nimport {$getNearestNodeFromDOMNode} from 'lexical'\nimport {useEffect, useRef, useState} from 'react'\nimport * as React from 'react'\nimport {createPortal} from 'react-dom'\nimport { useDebouncedCallback } from 'use-debounce'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}) {\n const [editor] = useLexicalComposerContext()\n const [isShownRow, setShownRow] = useState(false)\n const [isShownColumn, setShownColumn] = useState(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] =\n useState(false)\n const [position, setPosition] = useState({})\n const codeSetRef = useRef(new Set())\n const tableDOMNodeRef = useRef(null)\n\n const debouncedOnMouseMove = useDebouncedCallback(\n (event) => {\n const {isOutside, tableDOMNode} = getMouseInfo(event)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode = null\n let hoveredColumnNode = null\n let tableDOMElement = null\n\n editor.update(() => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) =>\n $isTableNode(node),\n )\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = editor.getElementByKey(table?.getKey())\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount = (\n (table).getChildAtIndex(0)\n )?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex =\n $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n })\n\n if (tableDOMElement) {\n const {\n width: tableElemWidth,\n y: tableElemY,\n x: tableElemX,\n right: tableElemRight,\n bottom: tableElemBottom,\n height: tableElemHeight,\n } = (tableDOMElement).getBoundingClientRect()\n\n const {y: editorElemY} = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left: tableElemX,\n top: tableElemBottom - editorElemY + 5,\n width: tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n }\n },\n 50,\n {\n maxWait: 250\n }\n )\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n debouncedOnMouseMove.cancel()\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(() => {\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created':\n codeSetRef.current.add(key)\n setShouldListenMouseMove(codeSetRef.current.size > 0)\n break\n\n case 'destroyed':\n codeSetRef.current.delete(key)\n setShouldListenMouseMove(codeSetRef.current.size > 0)\n break\n\n default:\n break\n }\n }\n })\n },\n {skipInitialization: false},\n ),\n )\n }, [editor])\n\n const insertAction = (insertRow) => {\n editor.update(() => {\n if (tableDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(\n tableDOMNodeRef.current,\n )\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRow__EXPERIMENTAL()\n setShownRow(false)\n } else {\n $insertTableColumn__EXPERIMENTAL()\n setShownColumn(false)\n }\n }\n })\n }\n\n return (\n <>\n {isShownRow && (\n <button\n className={'PlaygroundEditorTheme__tableAddRows'}\n style={{...position}}\n onClick={() => insertAction(true)}\n />\n )}\n {isShownColumn && (\n <button\n className={'PlaygroundEditorTheme__tableAddColumns'}\n style={{...position}}\n onClick={() => insertAction(false)}\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(event) {\n const target = event.target\n\n if (target && target instanceof HTMLElement) {\n const tableDOMNode = target.closest(\n 'td.PlaygroundEditorTheme__tableCell, th.PlaygroundEditorTheme__tableCell',\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest(\n 'button.PlaygroundEditorTheme__tableAddRows',\n ) ||\n target.closest(\n 'button.PlaygroundEditorTheme__tableAddColumns',\n ) ||\n target.closest('div.TableCellResizer__resizer')\n )\n\n return {isOutside, tableDOMNode}\n } else {\n return {isOutside: true, tableDOMNode: null}\n }\n}\n\nexport const TableHoverActionsPlugin = ({\n anchorElem = document.body,\n}) => {\n return createPortal(\n <TableHoverActionsContainer anchorElem={anchorElem} />,\n anchorElem,\n )\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { BlockWithAlignableContents } from '@lexical/react/LexicalBlockWithAlignableContents'\nimport {\n DecoratorBlockNode\n} from '@lexical/react/LexicalDecoratorBlockNode'\nimport { addClassNamesToElement } from '@lexical/utils'\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// TODO: Add element format to cover this node\n// To align the YouTube video, when we export as html\nfunction YouTubeComponent({\n className,\n format,\n nodeKey,\n videoID,\n}) {\n return (\n <BlockWithAlignableContents\n className={className}\n format={format}\n nodeKey={nodeKey}>\n <iframe\n width=\"50%\"\n height=\"auto\"\n style={{ aspectRatio: '16 / 9' }}\n src={`https://www.youtube-nocookie.com/embed/${videoID}`}\n frameBorder=\"0\"\n allow=\"accelerometer autoplay clipboard-write encrypted-media gyroscope picture-in-picture\"\n allowFullScreen={true}\n title=\"YouTube video\"\n />\n </BlockWithAlignableContents>\n )\n}\nYouTubeComponent.propTypes = {\n className: PropTypes.object,\n format: PropTypes.string,\n nodeKey: PropTypes.string,\n videoID: PropTypes.string,\n}\n\nfunction $convertYoutubeElement(\n domNode,\n) {\n const isYoutubeSrc = domNode.src.includes('youtube.com')\n const videoID = isYoutubeSrc ? domNode.src.split('embed/')[1]\n : domNode.getAttribute('data-lexical-youtube')\n if (videoID) {\n const node = $createYouTubeNode(videoID)\n return {node}\n }\n return null\n}\n\nexport class YouTubeNode extends DecoratorBlockNode {\n __id\n\n constructor(id, format, key) {\n super(format, key)\n this.__id = id\n }\n\n static getType() {\n return 'youtube'\n }\n\n static clone(node) {\n return new YouTubeNode(node.__id, node.__format, node.__key)\n }\n\n static importJSON(serializedNode) {\n const node = $createYouTubeNode(serializedNode.videoID)\n node.setFormat(serializedNode.format)\n return node\n }\n\n exportJSON() {\n return {\n ...super.exportJSON(),\n type: 'youtube',\n version: 1,\n videoID: this.__id,\n }\n }\n\n exportDOM(editor) {\n const parentElement = document.createElement('div')\n const element = document.createElement('iframe')\n addClassNamesToElement(element, editor._config.theme.displayYoutube)\n element.setAttribute('data-lexical-youtube', this.__id)\n element.setAttribute(\n 'src',\n `https://www.youtube-nocookie.com/embed/${this.__id}`,\n )\n element.setAttribute('frameborder', '0')\n element.setAttribute(\n 'allow',\n 'accelerometer autoplay clipboard-write encrypted-media gyroscope picture-in-picture',\n )\n element.setAttribute('allowfullscreen', 'true')\n element.setAttribute('title', 'YouTube video')\n parentElement.setAttribute('style', `text-align: ${this.__format || 'left'};`)\n parentElement.appendChild(element)\n return {element: parentElement}\n }\n\n static importDOM() {\n return {\n iframe: (domNode) => {\n const isYoutubeSrc = domNode.src.includes('youtube.com')\n if (!domNode.hasAttribute('data-lexical-youtube') && !isYoutubeSrc) {\n return null\n }\n return {\n conversion: $convertYoutubeElement,\n priority: 1,\n }\n },\n }\n }\n\n updateDOM() {\n return false\n }\n\n getId() {\n return this.__id\n }\n\n getTextContent() {\n return `https://www.youtube.com/watch?v=${this.__id}`\n }\n\n decorate(_editor, config) {\n const embedBlockTheme = config.theme.embedBlock || {}\n const className = {\n base: embedBlockTheme.base || '',\n focus: embedBlockTheme.focus || '',\n }\n return (\n <YouTubeComponent\n className={className}\n format={this.__format}\n nodeKey={this.getKey()}\n videoID={this.__id}\n />\n )\n }\n}\n\nexport function $createYouTubeNode(videoID) {\n return new YouTubeNode(videoID)\n}\n\nexport function $isYouTubeNode(node) {\n return node instanceof YouTubeNode\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { $createYouTubeNode, YouTubeNode } from './YouTubeNode'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { $insertNodeToNearestRoot } from '@lexical/utils'\nimport { COMMAND_PRIORITY_EDITOR, createCommand } from 'lexical'\nimport { useEffect } from 'react'\n\nexport const INSERT_YOUTUBE_COMMAND = createCommand('INSERT_YOUTUBE_COMMAND')\n\nexport const YouTubePlugin = () => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!editor.hasNodes([YouTubeNode])) {\n throw new Error('YouTubePlugin: YouTubeNode not registered on editor')\n }\n\n return editor.registerCommand(\n INSERT_YOUTUBE_COMMAND,\n (payload) => {\n const youTubeNode = $createYouTubeNode(payload)\n $insertNodeToNearestRoot(youTubeNode)\n return true\n },\n COMMAND_PRIORITY_EDITOR,\n )\n }, [editor])\n\n return null\n}\n\nexport * from './YouTubeNode'","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport useModal from '../../hooks/useModal'\nimport { Button } from '../../ui/Button'\nimport { DialogActions } from '../../ui/Dialog'\nimport { INSERT_YOUTUBE_COMMAND } from '../YouTubePlugin'\n\nimport {\n AutoEmbedOption,\n LexicalAutoEmbedPlugin,\n URL_MATCHER,\n} from '@lexical/react/LexicalAutoEmbedPlugin'\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'\nimport React, {useMemo, useState} from 'react'\nimport PropTypes from 'prop-types'\nimport ReactDOM from 'react-dom'\n\nexport const YoutubeEmbedConfig = {\n contentName: 'Youtube Video',\n\n exampleUrl: 'https://www.youtube.com/watch?v=jNQXAC9IVRw',\n\n // Icon for display.\n icon: <i className=\"icon youtube\" />,\n\n insertNode: (editor, result) => {\n editor.dispatchCommand(INSERT_YOUTUBE_COMMAND, result.id)\n },\n\n keywords: ['youtube', 'video'],\n\n // Determine if a given URL is a match and return url data.\n parseUrl: async (url) => {\n const match =\n /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/.exec(url)\n\n const id = match ? (match?.[2].length === 11 ? match[2] : null) : null\n\n if (id != null) {\n return {\n id,\n url,\n }\n }\n\n return null\n },\n\n type: 'youtube-video',\n}\n\nfunction AutoEmbedMenuItem({\n index,\n isSelected,\n onClick,\n onMouseEnter,\n option,\n}) {\n let className = 'item'\n if (isSelected) {\n className += ' selected'\n }\n return (\n <li\n key={option.key}\n tabIndex={-1}\n className={className}\n ref={option.setRefElement}\n role=\"option\"\n aria-selected={isSelected}\n id={'typeahead-item-' + index}\n onMouseEnter={onMouseEnter}\n onClick={onClick}>\n <span className=\"text\">{option.title}</span>\n </li>\n )\n}\nAutoEmbedMenuItem.propTypes = {\n index: PropTypes.number,\n isSelected: PropTypes.bool,\n onClick: PropTypes.func,\n onMouseEnter: PropTypes.func,\n option: PropTypes.instanceOf(AutoEmbedOption),\n}\n\nfunction AutoEmbedMenu({\n options,\n selectedItemIndex,\n onOptionClick,\n onOptionMouseEnter,\n}) {\n return (\n <div className=\"typeahead-popover\">\n <ul>\n {options.map((option, i) => (\n <AutoEmbedMenuItem\n index={i}\n isSelected={selectedItemIndex === i}\n onClick={() => onOptionClick(option, i)}\n onMouseEnter={() => onOptionMouseEnter(i)}\n key={option.key}\n option={option}\n />\n ))}\n </ul>\n </div>\n )\n}\nAutoEmbedMenu.propTypes = {\n onOptionClick: PropTypes.func,\n onOptionMouseEnter: PropTypes.func,\n options: PropTypes.arrayOf(PropTypes.instanceOf(AutoEmbedOption)),\n selectedItemIndex: PropTypes.number,\n}\n\nconst debounce = (callback, delay) => {\n let timeoutId\n return (text) => {\n window.clearTimeout(timeoutId)\n timeoutId = window.setTimeout(() => {\n callback(text)\n }, delay)\n }\n}\n\nexport function AutoEmbedDialog({\n embedConfig,\n onClose,\n}) {\n const [text, setText] = useState('')\n const [editor] = useLexicalComposerContext()\n const [embedResult, setEmbedResult] = useState(null)\n\n const validateText = useMemo(\n () =>\n debounce((inputText) => {\n const urlMatch = URL_MATCHER.exec(inputText)\n if (embedConfig != null && inputText != null && urlMatch != null) {\n Promise.resolve(embedConfig.parseUrl(inputText)).then(\n (parseResult) => {\n setEmbedResult(parseResult)\n },\n )\n } else if (embedResult != null) {\n setEmbedResult(null)\n }\n }, 200),\n [embedConfig, embedResult],\n )\n\n const onClick = () => {\n if (embedResult != null) {\n embedConfig.insertNode(editor, embedResult)\n onClose()\n }\n }\n\n return (\n <div style={{width: '600px'}}>\n <div className=\"Input__wrapper\">\n <input\n type=\"text\"\n className=\"Input__input\"\n placeholder={embedConfig.exampleUrl}\n value={text}\n data-test-id={`${embedConfig.type}-embed-modal-url`}\n onChange={(e) => {\n const {value} = e.target\n setText(value)\n validateText(value)\n }}\n />\n </div>\n <DialogActions>\n <Button\n disabled={!embedResult}\n onClick={onClick}\n data-test-id={`${embedConfig.type}-embed-modal-submit-btn`}>\n Embed\n </Button>\n </DialogActions>\n </div>\n )\n}\nAutoEmbedDialog.propTypes = {\n embedConfig: PropTypes.object,\n onClose: PropTypes.func,\n}\n\nexport function AutoEmbedPlugin() {\n const [modal, showModal] = useModal()\n\n const openEmbedModal = (embedConfig) => {\n showModal(`Embed ${embedConfig.contentName}`, (onClose) => (\n <AutoEmbedDialog embedConfig={embedConfig} onClose={onClose} />\n ))\n }\n\n const getMenuOptions = (\n activeEmbedConfig,\n embedFn,\n dismissFn,\n ) => {\n return [\n new AutoEmbedOption('Dismiss', {\n onSelect: dismissFn,\n }),\n new AutoEmbedOption(`Embed ${activeEmbedConfig.contentName}`, {\n onSelect: embedFn,\n }),\n ]\n }\n\n return (\n <>\n {modal}\n <LexicalAutoEmbedPlugin\n embedConfigs={[YoutubeEmbedConfig]}\n onOpenEmbedModalForConfig={openEmbedModal}\n getMenuOptions={getMenuOptions}\n menuRenderFn={(\n anchorElementRef,\n {selectedIndex, options, selectOptionAndCleanUp, setHighlightedIndex},\n ) =>\n anchorElementRef.current\n ? ReactDOM.createPortal(\n <div\n className=\"typeahead-popover auto-embed-menu\"\n style={{\n marginLeft: `${Math.max(\n parseFloat(anchorElementRef.current.style.width) - 200,\n 0,\n )}px`,\n width: 200,\n }}>\n <AutoEmbedMenu\n options={options}\n selectedItemIndex={selectedIndex}\n onOptionClick={(option, index) => {\n setHighlightedIndex(index)\n selectOptionAndCleanUp(option)\n }}\n onOptionMouseEnter={(index) => {\n setHighlightedIndex(index)\n }}\n />\n </div>,\n anchorElementRef.current,\n )\n : null\n }\n />\n </>\n )\n}\n","\nimport { $generateNodesFromDOM } from '@lexical/html'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getRoot,\n $insertNodes,\n} from 'lexical'\nimport { useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nexport const InitializeContentFromHtmlPlugin = ({ fallBackHtmlContent, initFromHtml }) => {\n const [editor] = useLexicalComposerContext()\n\n useEffect(() => {\n if (!fallBackHtmlContent || !initFromHtml) return\n\n editor.update(() => {\n const parser = new DOMParser()\n const dom = parser.parseFromString(fallBackHtmlContent, 'text/html')\n const nodes = $generateNodesFromDOM(editor, dom)\n $getRoot().clear()\n $getRoot().select()\n $insertNodes(nodes)\n })\n }, [])\n\n return null\n}\nInitializeContentFromHtmlPlugin.propTypes = {\n fallBackHtmlContent: PropTypes.string,\n initFromHtml: PropTypes.bool,\n}","import { TableOfContentsPlugin } from '@lexical/react/LexicalTableOfContentsPlugin'\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// NOTE: More function could be added here\n// Ref: https://lexical.dev/docs/react/plugins#lexicaltableofcontentsplugin\nexport const TableOfContentsStatePlugin = ({ setTableOfContents }) => {\n return (\n <TableOfContentsPlugin>\n {(tableOfContents) => {\n setTableOfContents(tableOfContents)\n }}\n </TableOfContentsPlugin>\n )\n}\nTableOfContentsStatePlugin.propTypes = {\n setTableOfContents: PropTypes.func.isRequired,\n}","import { THEME } from './editorTheme'\nimport { Toolbar } from './ui/Toolbar'\nimport LexicalEditorLoading from './loading'\nimport { SubmitContentButton } from './ui/SubmitButton'\nimport { FloatingLinkEditorPlugin } from './plugins/FloatingLinkEditor'\nimport {\n TableCellActionMenuPlugin,\n TableHoverActionsPlugin\n} from './plugins/Table'\nimport { LayoutPlugin } from './plugins/LayoutPlugin'\nimport { LayoutContainerNode } from './nodes/LayoutContainerNode'\nimport { LayoutItemNode } from './nodes/LayoutItemNode'\nimport { YouTubeNode, YouTubePlugin } from './plugins/YouTubePlugin'\nimport { AutoEmbedPlugin } from './plugins/AutoEmbedPlugin'\nimport { InitializeContentFromHtmlPlugin } from './plugins/InitializeContent'\nimport { ImagesPlugin, ImageNode } from './plugins/ImagesPlugin'\nimport { TableOfContentsStatePlugin } from './plugins/TableOfContentsStatePlugin'\n\nimport { validateUrl } from './utils/url'\n\nimport { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin'\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable'\nimport { LexicalComposer } from '@lexical/react/LexicalComposer'\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin'\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary'\nimport { LinkPlugin } from '@lexical/react/LexicalLinkPlugin'\nimport { LinkNode, AutoLinkNode } from '@lexical/link'\nimport { TablePlugin } from '@lexical/react/LexicalTablePlugin'\nimport { TabIndentationPlugin } from '@lexical/react/LexicalTabIndentationPlugin'\nimport { TableNode, TableCellNode, TableRowNode } from '@lexical/table'\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text'\nimport { ListItemNode, ListNode } from '@lexical/list'\nimport { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin'\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin'\nimport { HorizontalRulePlugin } from '@lexical/react/LexicalHorizontalRulePlugin'\nimport { HorizontalRuleNode } from '@lexical/react/LexicalHorizontalRuleNode'\nimport { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin'\nimport { $generateHtmlFromNodes } from '@lexical/html'\n\nimport React, { useState, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nconst PLACEHOLDER = 'Type here...'\n\n// NOTE: Cannot disable importDOM for ImageNode,\n// because it will not parse any images\n// NOTE: setOnSaveParams is used if need to submit outside of the editor\nexport const LexicalEditor = ({ loading, onSaveEditor, setOnSaveParams, initialState, fallBackHtmlContent, hideSubmitContentButton = false }) => {\n const [rawContent, setRawContent] = useState(null)\n const [htmlContent, setHtmlContent] = useState(null)\n const [contentImageIds, setContentImageIds] = useState([])\n const [deleteImageIds, setDeleteImageIds] = useState([])\n const [tableOfContents, setTableOfContents] = useState(null)\n\n // NOTE: Set onSaveParams from parent\n useEffect(() => {\n if (setOnSaveParams) {\n setOnSaveParams({\n rawContent,\n htmlContent,\n contentImageIds,\n deleteImageIds,\n tableOfContents\n })\n }\n }, [rawContent, htmlContent, contentImageIds, deleteImageIds, tableOfContents])\n\n const [initFromHtml, setInitFromHtml] = useState(false)\n const [isParseError, setIsParseError] = useState(false)\n const initialConfig = {\n namespace: 'Content Editor',\n editorState: initFromHtml ? undefined: initialState,\n theme: THEME,\n nodes: [\n LinkNode, TableNode, TableCellNode, TableRowNode,\n HeadingNode, QuoteNode, ListItemNode, ListNode,\n HorizontalRuleNode, LayoutContainerNode, LayoutItemNode,\n YouTubeNode, AutoLinkNode, ImageNode\n ],\n onError: (error) => {\n console.error(error)\n },\n html: {\n export: new Map([[HeadingNode, (editor, headingNode) => {\n const { element } = headingNode.exportDOM(editor)\n element.setAttribute('id', headingNode.getKey())\n return {\n element\n }\n }]])\n }\n }\n // Floating anchor element for the floating toolbar\n const [floatingAnchorElem, setFloatingAnchorElem] = useState(null)\n // Link edit mode (floating toolbar)\n const [isLinkEditMode, setIsLinkEditMode] = useState(false)\n const onRef = useCallback((elem) => {\n setFloatingAnchorElem(elem)\n }, [setFloatingAnchorElem])\n\n if (loading) return <LexicalEditorLoading />\n if (isParseError) {\n return <ParseErrorHandler\n setInitFromHtml={setInitFromHtml}\n setIsParseError={setIsParseError}\n />\n }\n\n return (\n <LexicalErrorBoundary onError={() => setIsParseError(true)}>\n <LexicalComposer initialConfig={initialConfig}>\n <InitializeContentFromHtmlPlugin\n fallBackHtmlContent={fallBackHtmlContent}\n initFromHtml={initFromHtml}\n />\n <Toolbar setIsLinkEditMode={setIsLinkEditMode} />\n <div className='editor-container'>\n <RichTextPlugin\n contentEditable={\n <div className=\"floating-anchor-container\" ref={onRef}>\n <ContentEditable\n className='editor-content-editable'\n aria-placeholder={PLACEHOLDER}\n placeholder={\n <div className='editor-placeholder'>{PLACEHOLDER}</div>\n }\n />\n </div>\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n </div>\n <HistoryPlugin />\n <AutoFocusPlugin />\n <TabIndentationPlugin />\n <LinkPlugin validateUrl={validateUrl} />\n <TablePlugin\n hasCellMerge={true}\n hasCellBackgroundColor={true}\n />\n {/* NOTE: Disable table resizer, for now we use width 100% */}\n {/* <TableCellResizerPlugin /> */}\n <TableHoverActionsPlugin />\n <CheckListPlugin />\n <ListPlugin />\n <HorizontalRulePlugin />\n <LayoutPlugin />\n <YouTubePlugin />\n <AutoEmbedPlugin />\n <ImagesPlugin\n setContentImageIds={setContentImageIds}\n setDeleteImageIds={setDeleteImageIds}\n />\n <TableOfContentsStatePlugin setTableOfContents={setTableOfContents} />\n <OnChangePlugin ignoreSelectionChange onChange={(editorState, editor) => {\n editor.read(() => {\n setRawContent(JSON.stringify(editorState))\n setHtmlContent($generateHtmlFromNodes(editor))\n })\n }} />\n { floatingAnchorElem && (\n <>\n {/*\n TODO: Bring back only selected tools if necessary\n See './plugins/FloatingToolbar' for more details\n */}\n {/* <FloatingToolbarPlugin\n anchorElem={floatingAnchorElem}\n setIsLinkEditMode={setIsLinkEditMode}\n /> */}\n <FloatingLinkEditorPlugin\n anchorElem={floatingAnchorElem}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />\n <TableCellActionMenuPlugin\n anchorElem={floatingAnchorElem}\n cellMerge={true}\n />\n </>\n )}\n\n {!hideSubmitContentButton && (\n <SubmitContentButton\n onSubmit={onSaveEditor}\n rawContent={rawContent}\n htmlContent={htmlContent}\n contentImageIds={contentImageIds}\n deleteImageIds={deleteImageIds}\n tableOfContents={tableOfContents}\n />\n )}\n </LexicalComposer>\n </LexicalErrorBoundary>\n )\n}\nLexicalEditor.propTypes = {\n loading: PropTypes.bool,\n onSaveEditor: PropTypes.func,\n setOnSaveParams: PropTypes.func,\n initialState: PropTypes.string,\n fallBackHtmlContent: PropTypes.string,\n hideSubmitContentButton: PropTypes.bool\n}\n\nconst ParseErrorHandler = ({ setInitFromHtml, setIsParseError}) => {\n return (\n <div>\n <div>\n Parse existing content error\n </div>\n <button onClick={() => {\n setInitFromHtml(true)\n setIsParseError(false)\n }}>\n Load from existing Content\n </button>\n </div>\n )\n}\nParseErrorHandler.propTypes = {\n setInitFromHtml: PropTypes.func,\n setIsParseError: PropTypes.func,\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport {$applyNodeReplacement, createEditor, DecoratorNode} from 'lexical'\nimport { addClassNamesToElement } from '@lexical/utils'\nimport React, { Suspense } from 'react'\n\n\nconst ImageComponent = React.lazy(() => import('./ImageComponent'))\n\nfunction isGoogleDocCheckboxImg(img) {\n return (\n img.parentElement != null &&\n img.parentElement.tagName === 'LI' &&\n img.previousSibling === null &&\n img.getAttribute('aria-roledescription') === 'checkbox'\n )\n}\n\n// TODO: add uploadToS3 here\n// for case copy paste image from internet\nfunction $convertImageElement(domNode) {\n const img = domNode\n if (img.src.startsWith('file:///') || isGoogleDocCheckboxImg(img)) {\n return null\n }\n const {alt: altText, src, width, height, contentImageId} = img\n const node = $createImageNode({altText, height, src, width, contentImageId})\n return {node}\n}\n\nexport class ImageNode extends DecoratorNode {\n __src\n __altText\n __width\n __height\n __maxWidth\n __showCaption\n __caption\n // Captions cannot yet be used within editor cells\n __captionsEnabled\n __contentImageId\n\n static getType() {\n return 'image'\n }\n\n static clone(node) {\n return new ImageNode(\n node.__src,\n node.__altText,\n node.__maxWidth,\n node.__width,\n node.__height,\n node.__showCaption,\n node.__caption,\n node.__captionsEnabled,\n node.__key,\n node.__contentImageId\n )\n }\n\n static importJSON(serializedNode) {\n const {altText, height, width, maxWidth, caption, src, showCaption, contentImageId} =\n serializedNode\n const node = $createImageNode({\n altText,\n height,\n maxWidth,\n showCaption,\n src,\n width,\n contentImageId\n })\n const nestedEditor = node.__caption\n const editorState = nestedEditor.parseEditorState(caption.editorState)\n if (!editorState.isEmpty()) {\n nestedEditor.setEditorState(editorState)\n }\n return node\n }\n\n exportDOM(editor) {\n const element = document.createElement('img')\n element.setAttribute('src', this.__src)\n element.setAttribute('alt', this.__altText)\n element.setAttribute('width', this.__width.toString())\n element.setAttribute('height', this.__height.toString())\n element.setAttribute('loading', 'lazy')\n addClassNamesToElement(element, editor._config.theme.displayImage)\n return {element}\n }\n\n static importDOM() {\n return {\n img: () => ({\n conversion: $convertImageElement,\n priority: 0,\n }),\n }\n }\n\n constructor(\n src,\n altText,\n maxWidth,\n width,\n height,\n showCaption,\n caption,\n captionsEnabled,\n key,\n contentImageId\n ) {\n super(key)\n this.__src = src\n this.__altText = altText\n this.__maxWidth = maxWidth\n this.__width = width || 'inherit'\n this.__height = height || 'inherit'\n this.__showCaption = showCaption || false\n this.__caption =\n caption ||\n createEditor({\n nodes: [],\n })\n this.__captionsEnabled = captionsEnabled || captionsEnabled === undefined\n this.__contentImageId = contentImageId\n }\n\n exportJSON() {\n return {\n altText: this.getAltText(),\n caption: this.__caption.toJSON(),\n height: this.__height === 'inherit' ? 0 : this.__height,\n maxWidth: this.__maxWidth,\n showCaption: this.__showCaption,\n src: this.getSrc(),\n type: 'image',\n version: 1,\n width: this.__width === 'inherit' ? 0 : this.__width,\n contentImageId: this.__contentImageId\n }\n }\n\n setWidthAndHeight(\n width,\n height,\n ) {\n const writable = this.getWritable()\n writable.__width = width\n writable.__height = height\n }\n\n setShowCaption(showCaption) {\n const writable = this.getWritable()\n writable.__showCaption = showCaption\n }\n\n // View\n\n createDOM(config) {\n const span = document.createElement('span')\n const theme = config.theme\n const className = theme.image\n if (className !== undefined) {\n span.className = className\n }\n return span\n }\n\n updateDOM() {\n return false\n }\n\n getSrc() {\n return this.__src\n }\n\n getAltText() {\n return this.__altText\n }\n\n getContentImageId() {\n return this.__contentImageId\n }\n\n decorate() {\n return (\n <Suspense fallback={null}>\n <ImageComponent\n src={this.__src}\n altText={this.__altText}\n width={this.__width}\n height={this.__height}\n maxWidth={this.__maxWidth}\n nodeKey={this.getKey()}\n resizable={true}\n />\n </Suspense>\n )\n }\n}\n\nexport function $createImageNode({\n altText,\n height,\n maxWidth = '100%',\n captionsEnabled,\n src,\n width,\n showCaption,\n caption,\n key,\n contentImageId\n}) {\n return $applyNodeReplacement(\n new ImageNode(\n src,\n altText,\n maxWidth,\n width,\n height,\n showCaption,\n caption,\n captionsEnabled,\n key,\n contentImageId\n ),\n )\n}\n\nexport function $isImageNode(\n node,\n) {\n return node instanceof ImageNode\n}\n","import _ from 'lodash'\n\nimport { client } from '../utilities/apolloGraphqlRequest'\nimport { createDirectUploadUrlMutationGenerator } from '../graphql/mutations/CreateDirectUploadUrl'\n\nconst CREATE_DIRECT_UPLOAD_URL = createDirectUploadUrlMutationGenerator(`\n {\n contentType\n filename\n fileUrl\n directUploadUrl\n s3ObjectKey\n }\n`)\n\nexport const uploadToS3 = async (file) => {\n const { data } = await client.mutate({\n mutation: CREATE_DIRECT_UPLOAD_URL,\n variables: { filename: file.name },\n fetchPolicy: 'no-cache'\n })\n\n await fetch(\n _.get(data, 'createDirectUploadUrl.directUploadUrl'),\n {\n method: 'PUT',\n headers: {\n 'Content-Type': file.type\n },\n body: file\n }\n )\n\n return await _.get(data, 'createDirectUploadUrl.fileUrl')\n}\n","import { gql } from '@apollo/client'\n\nexport const createDirectUploadUrlMutationGenerator = (fields) => {\n return gql`\n mutation CreateDirectUploadUrl ($filename: String!) {\n createDirectUploadUrl (filename: $filename)\n ${fields}\n }\n `\n}\n"],"names":["THEME","code","heading","h1","h2","h3","h4","h5","image","displayImage","link","ltr","paragraph","rtl","text","bold","hashtag","italic","overflowed","strikethrough","underline","underlineStrikethrough","subscript","superscript","table","tableCell","tableCellActionButton","tableCellActionButtonContainer","tableCellEditing","tableCellHeader","tableCellPrimarySelected","tableCellResizer","tableCellSelected","tableCellSortedIndicator","tableResizeRuler","tableRowStriping","tableSelected","tableSelection","list","checklist","listitem","listitemChecked","listitemUnchecked","nested","olDepth","ul","quote","hr","layoutContainer","layoutItem","embedBlock","base","focus","displayYoutube","RedoAction","_useState2","_slicedToArray","useState","canRedo","setCanRedo","editor","useLexicalComposerContext","useEffect","mergeRegister","registerCommand","CAN_REDO_COMMAND","payload","COMMAND_PRIORITY_LOW","React","title","disabled","onClick","dispatchCommand","REDO_COMMAND","undefined","className","UndoAction","_useState4","canUndo","setCanUndo","CAN_UNDO_COMMAND","UNDO_COMMAND","TextBoldAction","isBold","setIsBold","$updateToolbar","useCallback","selection","$getSelection","$isRangeSelection","hasFormat","registerUpdateListener","_ref","editorState","read","SELECTION_CHANGE_COMMAND","_payload","_newEditor","FORMAT_TEXT_COMMAND","TextItalicAction","isItalic","setIsItalic","TextUnderlineAction","isUnderline","setIsUnderline","TextStrikethroughAction","isStrikethrough","setIsStrikethrough","ClearFormatAction","clearFormatting","update","$isTableSelection","anchor","nodes","getNodes","extractedNodes","extract","key","offset","forEach","node","idx","$isTextNode","textNode","splitText","length","extractedTextNode","__style","setStyle","__format","setFormat","$getNearestBlockElementAncestorOrThrow","$isHeadingNode","$isQuoteNode","replace","$createParagraphNode","$isDecoratorBlockNode","TextSuperscriptAction","isSuperscript","setIsSuperscript","TextSubscriptAction","isSubscript","setIsSubscript","SUPPORTED_URL_PROTOCOLS","sanitizeUrl","url","parsedUrl","URL","includes","protocol","_unused","urlRegExp","RegExp","validateUrl","test","getSelectedNode","anchorNode","getNode","focusNode","isBackward","$isAtNodeEnd","LinkAction","setIsLinkEditMode","isLink","setIsLink","parent","getParent","$isLinkNode","insertLink","TOGGLE_LINK_COMMAND","_ref2","Dropdown","children","buttonLabel","buttonAriaLabel","buttonIconClassName","expand","setExpand","_ref$closeOnClickOuts","closeOnClickOutside","_ref$minimalToolbar","minimalToolbar","useRef","ref","DropdownList","nodeRef","handleOutsideClick","e","_nodeRef$current","current","contains","target","document","addEventListener","removeEventListener","ELEMENT_FORMAT_OPTIONS","left","icon","name","commandPayload","center","right","justify","start","end","ElementFormatDropdownPlugin","elementFormat","setElementFormat","formatOption","matchingParent","$findMatchingParent","parentNode","$isElementNode","isInline","getFormatType","concat","Object","keys","map","option","FORMAT_ELEMENT_COMMAND","InsertTableModal","visible","onCloseModal","rows","setRows","columns","setColumns","_useState6","isDisabled","setIsDisabled","INSERT_TABLE_COMMAND","row","Number","column","Modal","width","onClose","contentStyle","borderRadius","type","value","onChange","InsertTableButton","_ref2$onClickButton","onClickButton","_useState8","setVisible","HorizontalRuleButton","_ref$onClickButton","INSERT_HORIZONTAL_RULE_COMMAND","joinClasses","_len","arguments","args","Array","_key","filter","Boolean","join","Button","dataTestId","small","assign","$convertLayoutContainerElement","domNode","templateColumns","window","getComputedStyle","getPropertyValue","$createLayoutContainerNode","LayoutContainerNode","_ElementNode","_inherits","_super","_createSuper","_this","_classCallCheck","_defineProperty","_assertThisInitialized","call","__templateColumns","__key","div","hasAttribute","conversion","priority","json","config","dom","createElement","style","gridTemplateColumns","this","theme","addClassNamesToElement","element","_get","_getPrototypeOf","prototype","setAttribute","prevNode","_objectSpread","version","getLatest","getWritable","ElementNode","$isLayoutContainerNode","LayoutItemNode","apply","$createLayoutItemNode","$isLayoutItemNode","INSERT_LAYOUT_COMMAND","createCommand","UPDATE_LAYOUT_COMMAND","LayoutPlugin","hasNodes","Error","$onEscape","before","isCollapsed","container","_container$getFirstDe","_container$getLastDes","child","getFirstChild","getLastChild","descendant","getFirstDescendant","getKey","getLastDescendant","insertBefore","insertAfter","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_RIGHT_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ARROW_LEFT_COMMAND","template","itemsCount","getItemsCountFromTemplate","i","append","$insertNodeToNearestRoot","selectStart","COMMAND_PRIORITY_EDITOR","nodeKey","$getNodeByKey","prevItemsCount","getTemplateColumns","getChildAtIndex","remove","setTemplateColumns","registerNodeTransform","_step","_iterator","_createForOfIteratorHelper","getChildren","s","n","done","err","f","every","_step2","_iterator2","trim","split","LAYOUTS","label","InsertColumnLayoutModal","_LAYOUTS$find","layout","setLayout","onInsert","find","item","InsertColumnLayoutButton","_ref3","_ref3$onClickButton","InsertYouTubeButton","INSERT_EMBED_COMMAND","PortalImpl","modalRef","modalOverlayElement","handler","event","clickOutsideHandler","modelElement","parentElement","_modalOverlayElement","role","tabIndex","_ref2$closeOnClickOut","createPortal","body","useModal","modalContent","setModalContent","modal","useMemo","content","showModal","getContent","CREATE_CONTENT_IMAGE_MUTATION","gql","_templateObject","DialogActions","FileInput","accept","files","TextInput","_ref$placeholder","placeholder","_ref$type","_regeneratorRuntime","t","r","hasOwnProperty","o","defineProperty","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","h","l","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","delegateYield","allowArrayLike","it","isArray","_unsupportedIterableToArray","F","_e","normalCompletion","didErr","step","_e2","asyncGeneratorStep","gen","reject","_next","_throw","info","error","arr","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","minLen","_arrayLikeToArray","toString","from","len","arr2","INSERT_IMAGE_COMMAND","InsertImageDialog","activeEditor","uploading","setUploading","src","setSrc","contentImageId","setContentImageId","altText","setAltText","createContentImage","useMutation","isDiabled","loadImage","fn","_callee","file","tmpImageUrl","_yield$createContentI","data","uploadedImage","_ref4","id","_context","uploadToS3","variables","remoteFileUrl","t0","self","_x","ImagesPlugin","_ref5","setContentImageIds","setDeleteImageIds","ImageNode","imageNode","$createImageNode","$insertNodes","$isRootOrShadowRoot","getParentOrThrow","$wrapNodeInElement","selectEnd","imageNodeList","Map","registerMutationListener","nodeMutations","_ref6","updateTags","dirtyLeaves","prevEditorState","_loop","_step2$value","mutation","getContentImageId","_toConsumableArray","set","get","propTypes","PropTypes","InsertImageButton","_useModal2","InsertDropdown","closeOnClickButton","blockTypeToBlockName","bullet","check","h6","number","BlockFormatDropDown","blockType","setBlockType","getTopLevelElementOrThrow","elementKey","getElementByKey","$isListNode","parentList","$getNearestNodeOfType","ListNode","getListType","getTag","getType","formatParagraph","$setBlocksType","formatHeading","headingSize","$createHeadingNode","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","console","log","INSERT_CHECK_LIST_COMMAND","$createQuoteNode","Divider","Toolbar","editorToolbarRef","setMinimalToolbar","toolbar","getBoundingClientRect","Fragment","Skeleton","height","customStyle","borderTop","_asyncToGenerator","initializeI18n","localeFiles","th","LexicalEditor","save","en","SubmitContentButton","onSubmit","rawContent","htmlContent","_ref$contentImageIds","contentImageIds","_ref$deleteImageIds","deleteImageIds","_ref$tableOfContents","tableOfContents","isSaving","setIsSaving","marginTop","i18n","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPosition","targetRect","floatingElem","anchorElem","verticalGap","horizontalOffset","scrollerElem","floatingElemRect","anchorElementRect","editorScrollerRect","top","opacity","transform","FloatingLinkEditor","isLinkEditMode","editorRef","inputRef","linkUrl","setLinkUrl","editedLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","$updateLinkEditor","linkParent","getURL","editorElem","nativeSelection","getSelection","activeElement","rootElement","getRootElement","isEditable","_nativeSelection$focu","domRect","getEditorState","KEY_ESCAPE_COMMAND","COMMAND_PRIORITY_HIGH","handleLinkSubmission","$isAutoLinkNode","linkNode","$createLinkNode","rel","__rel","__target","__title","onKeyDown","preventDefault","monitorInputInteraction","onMouseDown","href","FloatingLinkEditorPlugin","_ref4$anchorElem","focusLinkNode","focusAutoLinkNode","badNode","$isLineBreakNode","autoLinkNode","is","getIsUnlinked","COMMAND_PRIORITY_CRITICAL","CLICK_COMMAND","metaKey","ctrlKey","open","useFloatingLinkEditorToolbar","skipAddingToHistoryStack","basicColors","WIDTH","HEIGHT","ColorPicker","color","transformColor","selfColor","setSelfColor","inputColor","setInputColor","innerDivRef","saturationPosition","x","hsv","huePosition","hex","newColor","basicColor","backgroundColor","MoveWrapper","divRef","draggedRef","move","_div$getBoundingClien","zoom","calculateZoomLevel","clamp","clientX","clientY","button","onMouseMove","onMouseUp","max","min","toHex","startsWith","ctx","getContext","fillStyle","hex2rgb","rbgArr","m","b","substring","match","parseInt","rgb2hsv","Math","rgb2hex","_ref7","padStart","format","q","index","rgb","round","computeSelectionCount","selectionShape","getShape","toX","fromX","toY","fromY","$cellContainsEmptyParagraph","cell","getChildrenSize","firstChild","getFirstChildOrThrow","$isParagraphNode","isEmpty","currentCellBackgroundColor","$getNodeTriplet","$isTableCellNode","getBackgroundColor","TableActionMenu","_tableCellNode","tableCellNode","setIsMenuOpen","contextRef","cellMerge","showColorPickerModal","dropDownRef","updateTableCellNode","selectionCounts","updateSelectionCounts","canMergeCells","setCanMergeCells","canUnmergeCell","setCanUnmergeCell","_useState10","setBackgroundColor","TableCellNode","skipInitialization","currentSelectionCounts","__colSpan","__rowSpan","$canUnmerge","menuButtonElement","dropDownElement","rootEleRect","menuButtonRect","dropDownElementRect","leftPosition","innerWidth","position","pageXOffset","topPosition","handleClickOutside","clearTableSelection","isAttached","tableNode","$getTableNodeFromLexicalNodeOrThrow","tableElement","tableObserver","getTableObserverFromTableElement","clearHighlight","markDirty","$getRoot","mergeTableCellsAtSelection","_computeSelectionCoun","firstCell","setColSpan","setRowSpan","_firstCell","lastDescendant","select","selectNext","$selectLastDescendant","insertTableRowAtSelection","shouldInsertAfter","$insertTableRow__EXPERIMENTAL","insertTableColumnAtSelection","$insertTableColumn__EXPERIMENTAL","deleteTableRowAtSelection","$deleteTableRow__EXPERIMENTAL","deleteTableAtSelection","deleteTableColumnAtSelection","$deleteTableColumn__EXPERIMENTAL","toggleTableRowIsHeader","tableRowIndex","$getTableRowIndexFromTableCellNode","tableRows","tableRow","$isTableRowNode","newStyle","getHeaderStyles","TableCellHeaderStates","ROW","setHeaderStyles","toggleTableColumnIsHeader","tableColumnIndex","$getTableColumnIndexFromTableCellNode","COLUMN","tableCells","handleCellBackgroundColor","setRowStriping","getRowStriping","mergeCellButton","$unmergeCell","stopPropagation","__headerState","TableCellActionMenuContainer","menuButtonRef","menuRootRef","_useState12","isMenuOpen","_useState14","setTableMenuCellNode","colorPickerModal","$moveMenu","menu","tableCellNodeFromSelection","$getTableCellNodeFromLexicalNode","menuButtonDOM","tableCellNodeDOM","tableCellRect","menuRect","anchorRect","prevTableCellDOM","TableCellActionMenuPlugin","_ref3$anchorElem","_ref3$cellMerge","useLexicalEditable","TableHoverActionsContainer","isShownRow","setShownRow","isShownColumn","setShownColumn","shouldListenMouseMove","setShouldListenMouseMove","setPosition","codeSetRef","Set","tableDOMNodeRef","debouncedOnMouseMove","useDebouncedCallback","_getMouseInfo","HTMLElement","tableDOMNode","closest","isOutside","getMouseInfo","hoveredRowNode","hoveredColumnNode","tableDOMElement","maybeTableCell","$getNearestNodeFromDOMNode","$isTableNode","_table$getChildAtInde","rowCount","colCount","rowIndex","colIndex","_tableDOMElement$getB","tableElemWidth","tableElemY","tableElemX","tableElemRight","tableElemBottom","bottom","tableElemHeight","editorElemY","maxWait","cancel","TableNode","mutations","_step$value","add","size","insertAction","insertRow","maybeTableNode","TableHoverActionsPlugin","_ref2$anchorElem","YouTubeComponent","videoID","BlockWithAlignableContents","aspectRatio","frameBorder","allow","allowFullScreen","$convertYoutubeElement","getAttribute","$createYouTubeNode","YouTubeNode","_DecoratorBlockNode","__id","serializedNode","iframe","isYoutubeSrc","_config","appendChild","_editor","embedBlockTheme","DecoratorBlockNode","INSERT_YOUTUBE_COMMAND","YouTubePlugin","youTubeNode","_parseUrl","YoutubeEmbedConfig","contentName","exampleUrl","insertNode","result","keywords","parseUrl","exec","AutoEmbedMenuItem","isSelected","onMouseEnter","setRefElement","AutoEmbedMenu","options","selectedItemIndex","onOptionClick","onOptionMouseEnter","debounce","callback","delay","timeoutId","clearTimeout","setTimeout","AutoEmbedDialog","embedConfig","setText","embedResult","setEmbedResult","validateText","inputText","urlMatch","URL_MATCHER","parseResult","AutoEmbedPlugin","LexicalAutoEmbedPlugin","embedConfigs","onOpenEmbedModalForConfig","getMenuOptions","activeEmbedConfig","embedFn","dismissFn","AutoEmbedOption","onSelect","menuRenderFn","anchorElementRef","selectedIndex","selectOptionAndCleanUp","setHighlightedIndex","ReactDOM","marginLeft","parseFloat","InitializeContentFromHtmlPlugin","fallBackHtmlContent","initFromHtml","DOMParser","parseFromString","$generateNodesFromDOM","clear","TableOfContentsStatePlugin","setTableOfContents","TableOfContentsPlugin","PLACEHOLDER","loading","onSaveEditor","setOnSaveParams","initialState","_ref$hideSubmitConten","hideSubmitContentButton","setRawContent","setHtmlContent","setInitFromHtml","isParseError","setIsParseError","initialConfig","namespace","LinkNode","TableRowNode","HeadingNode","QuoteNode","ListItemNode","HorizontalRuleNode","AutoLinkNode","onError","html","export","headingNode","exportDOM","_useState16","floatingAnchorElem","setFloatingAnchorElem","_useState18","onRef","elem","LexicalEditorLoading","ParseErrorHandler","LexicalErrorBoundary","LexicalComposer","RichTextPlugin","contentEditable","ContentEditable","ErrorBoundary","HistoryPlugin","AutoFocusPlugin","TabIndentationPlugin","LinkPlugin","TablePlugin","hasCellMerge","hasCellBackgroundColor","CheckListPlugin","ListPlugin","HorizontalRulePlugin","OnChangePlugin","ignoreSelectionChange","JSON","stringify","$generateHtmlFromNodes","ImageComponent","$convertImageElement","img","tagName","previousSibling","isGoogleDocCheckboxImg","alt","_DecoratorNode","maxWidth","showCaption","caption","captionsEnabled","__src","__altText","__maxWidth","__width","__height","__showCaption","__caption","createEditor","__captionsEnabled","__contentImageId","nestedEditor","parseEditorState","setEditorState","getAltText","toJSON","getSrc","span","Suspense","fallback","resizable","DecoratorNode","_ref$maxWidth","$applyNodeReplacement","$isImageNode","fields","CREATE_DIRECT_UPLOAD_URL","_yield$client$mutate","client","mutate","filename","fetchPolicy","fetch","_","headers"],"sourceRoot":""}