sykpcomposer 1.20.2 → 1.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"InlineImageComponent-f56a0b88.js","sources":["../src/lexical/utils/getDOMRangeRect.ts","../src/lexical/utils/setFloatingElemPosition.ts","../src/lexical/plugins/FloatingTextFormatToolbarPlugin/index.tsx","../src/lexical/ui/Select.tsx","../src/lexical/nodes/InlineImageComponent.tsx"],"sourcesContent":["/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\nexport function getDOMRangeRect(\r\n nativeSelection: Selection,\r\n rootElement: HTMLElement,\r\n): DOMRect {\r\n const domRange = nativeSelection.getRangeAt(0);\r\n\r\n let rect;\r\n\r\n if (nativeSelection.anchorNode === rootElement) {\r\n let inner = rootElement;\r\n while (inner.firstElementChild != null) {\r\n inner = inner.firstElementChild as HTMLElement;\r\n }\r\n rect = inner.getBoundingClientRect();\r\n } else {\r\n rect = domRange.getBoundingClientRect();\r\n }\r\n\r\n return rect;\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\nconst VERTICAL_GAP = 10;\r\nconst HORIZONTAL_OFFSET = 5;\r\n\r\nexport function setFloatingElemPosition(\r\n targetRect: DOMRect | null,\r\n floatingElem: HTMLElement,\r\n anchorElem: HTMLElement,\r\n isLink: boolean = false,\r\n verticalGap: number = VERTICAL_GAP,\r\n horizontalOffset: number = HORIZONTAL_OFFSET,\r\n): void {\r\n const scrollerElem = anchorElem.parentElement;\r\n\r\n if (targetRect === null || !scrollerElem) {\r\n floatingElem.style.opacity = '0';\r\n floatingElem.style.transform = 'translate(-10000px, -10000px)';\r\n return;\r\n }\r\n\r\n const floatingElemRect = floatingElem.getBoundingClientRect();\r\n const anchorElementRect = anchorElem.getBoundingClientRect();\r\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\r\n\r\n let top = targetRect.top - floatingElemRect.height - verticalGap;\r\n let left = targetRect.left - horizontalOffset;\r\n\r\n if (top < editorScrollerRect.top) {\r\n // adjusted height for link element if the element is at top\r\n top +=\r\n floatingElemRect.height +\r\n targetRect.height +\r\n verticalGap * (isLink ? 9 : 2);\r\n }\r\n\r\n if (left + floatingElemRect.width > editorScrollerRect.right) {\r\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\r\n }\r\n\r\n top -= anchorElementRect.top;\r\n left -= anchorElementRect.left;\r\n\r\n floatingElem.style.opacity = '1';\r\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport './index.css';\r\n\r\nimport {$isCodeHighlightNode} from '@lexical/code';\r\nimport {$isLinkNode, TOGGLE_LINK_COMMAND} from '@lexical/link';\r\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\r\nimport {mergeRegister} from '@lexical/utils';\r\nimport {\r\n $getSelection,\r\n $isParagraphNode,\r\n $isRangeSelection,\r\n $isTextNode,\r\n COMMAND_PRIORITY_LOW,\r\n FORMAT_TEXT_COMMAND,\r\n LexicalEditor,\r\n SELECTION_CHANGE_COMMAND,\r\n} from 'lexical';\r\nimport {useCallback, useEffect, useRef, useState} from 'react';\r\nimport * as React from 'react';\r\nimport {createPortal} from 'react-dom';\r\n\r\nimport {getDOMRangeRect} from '../../utils/getDOMRangeRect';\r\nimport {getSelectedNode} from '../../utils/getSelectedNode';\r\nimport {setFloatingElemPosition} from '../../utils/setFloatingElemPosition';\r\nimport {INSERT_INLINE_COMMAND} from '../CommentPlugin';\r\n\r\nfunction TextFormatFloatingToolbar({\r\n editor,\r\n anchorElem,\r\n isLink,\r\n isBold,\r\n isItalic,\r\n isUnderline,\r\n isCode,\r\n isStrikethrough,\r\n isSubscript,\r\n isSuperscript,\r\n}: {\r\n editor: LexicalEditor;\r\n anchorElem: HTMLElement;\r\n isBold: boolean;\r\n isCode: boolean;\r\n isItalic: boolean;\r\n isLink: boolean;\r\n isStrikethrough: boolean;\r\n isSubscript: boolean;\r\n isSuperscript: boolean;\r\n isUnderline: boolean;\r\n}): JSX.Element {\r\n const popupCharStylesEditorRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const insertLink = useCallback(() => {\r\n if (!isLink) {\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, 'https://');\r\n } else {\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\r\n }\r\n }, [editor, isLink]);\r\n\r\n const insertComment = () => {\r\n editor.dispatchCommand(INSERT_INLINE_COMMAND, undefined);\r\n };\r\n\r\n function mouseMoveListener(e: MouseEvent) {\r\n if (\r\n popupCharStylesEditorRef?.current &&\r\n (e.buttons === 1 || e.buttons === 3)\r\n ) {\r\n if (popupCharStylesEditorRef.current.style.pointerEvents !== 'none') {\r\n const x = e.clientX;\r\n const y = e.clientY;\r\n const elementUnderMouse = document.elementFromPoint(x, y);\r\n\r\n if (!popupCharStylesEditorRef.current.contains(elementUnderMouse)) {\r\n // Mouse is not over the target element => not a normal click, but probably a drag\r\n popupCharStylesEditorRef.current.style.pointerEvents = 'none';\r\n }\r\n }\r\n }\r\n }\r\n function mouseUpListener(e: MouseEvent) {\r\n if (popupCharStylesEditorRef?.current) {\r\n if (popupCharStylesEditorRef.current.style.pointerEvents !== 'auto') {\r\n popupCharStylesEditorRef.current.style.pointerEvents = 'auto';\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (popupCharStylesEditorRef?.current) {\r\n document.addEventListener('mousemove', mouseMoveListener);\r\n document.addEventListener('mouseup', mouseUpListener);\r\n\r\n return () => {\r\n document.removeEventListener('mousemove', mouseMoveListener);\r\n document.removeEventListener('mouseup', mouseUpListener);\r\n };\r\n }\r\n }, [popupCharStylesEditorRef]);\r\n\r\n const updateTextFormatFloatingToolbar = useCallback(() => {\r\n const selection = $getSelection();\r\n\r\n const popupCharStylesEditorElem = popupCharStylesEditorRef.current;\r\n const nativeSelection = window.getSelection();\r\n\r\n if (popupCharStylesEditorElem === null) {\r\n return;\r\n }\r\n\r\n const rootElement = editor.getRootElement();\r\n if (\r\n selection !== null &&\r\n nativeSelection !== null &&\r\n !nativeSelection.isCollapsed &&\r\n rootElement !== null &&\r\n rootElement.contains(nativeSelection.anchorNode)\r\n ) {\r\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\r\n\r\n setFloatingElemPosition(\r\n rangeRect,\r\n popupCharStylesEditorElem,\r\n anchorElem,\r\n isLink,\r\n );\r\n }\r\n }, [editor, anchorElem, isLink]);\r\n\r\n useEffect(() => {\r\n const scrollerElem = anchorElem.parentElement;\r\n\r\n const update = () => {\r\n editor.getEditorState().read(() => {\r\n updateTextFormatFloatingToolbar();\r\n });\r\n };\r\n\r\n window.addEventListener('resize', update);\r\n if (scrollerElem) {\r\n scrollerElem.addEventListener('scroll', update);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('resize', update);\r\n if (scrollerElem) {\r\n scrollerElem.removeEventListener('scroll', update);\r\n }\r\n };\r\n }, [editor, updateTextFormatFloatingToolbar, anchorElem]);\r\n\r\n useEffect(() => {\r\n editor.getEditorState().read(() => {\r\n updateTextFormatFloatingToolbar();\r\n });\r\n return mergeRegister(\r\n editor.registerUpdateListener(({editorState}) => {\r\n editorState.read(() => {\r\n updateTextFormatFloatingToolbar();\r\n });\r\n }),\r\n\r\n editor.registerCommand(\r\n SELECTION_CHANGE_COMMAND,\r\n () => {\r\n updateTextFormatFloatingToolbar();\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n );\r\n }, [editor, updateTextFormatFloatingToolbar]);\r\n\r\n return (\r\n <div ref={popupCharStylesEditorRef} className=\"floating-text-format-popup\">\r\n {editor.isEditable() && (\r\n <>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');\r\n }}\r\n className={'popup-item spaced ' + (isBold ? 'active' : '')}\r\n aria-label=\"Format text as bold\">\r\n <i className=\"format bold\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic');\r\n }}\r\n className={'popup-item spaced ' + (isItalic ? 'active' : '')}\r\n aria-label=\"Format text as italics\">\r\n <i className=\"format italic\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline');\r\n }}\r\n className={'popup-item spaced ' + (isUnderline ? 'active' : '')}\r\n aria-label=\"Format text to underlined\">\r\n <i className=\"format underline\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough');\r\n }}\r\n className={'popup-item spaced ' + (isStrikethrough ? 'active' : '')}\r\n aria-label=\"Format text with a strikethrough\">\r\n <i className=\"format strikethrough\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript');\r\n }}\r\n className={'popup-item spaced ' + (isSubscript ? 'active' : '')}\r\n title=\"Subscript\"\r\n aria-label=\"Format Subscript\">\r\n <i className=\"format subscript\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript');\r\n }}\r\n className={'popup-item spaced ' + (isSuperscript ? 'active' : '')}\r\n title=\"Superscript\"\r\n aria-label=\"Format Superscript\">\r\n <i className=\"format superscript\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code');\r\n }}\r\n className={'popup-item spaced ' + (isCode ? 'active' : '')}\r\n aria-label=\"Insert code block\">\r\n <i className=\"format code\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={insertLink}\r\n className={'popup-item spaced ' + (isLink ? 'active' : '')}\r\n aria-label=\"Insert link\">\r\n <i className=\"format link\" />\r\n </button>\r\n </>\r\n )}\r\n <button\r\n type=\"button\"\r\n onClick={insertComment}\r\n className={'popup-item spaced insert-comment'}\r\n aria-label=\"Insert comment\">\r\n <i className=\"format add-comment\" />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nfunction useFloatingTextFormatToolbar(\r\n editor: LexicalEditor,\r\n anchorElem: HTMLElement,\r\n): JSX.Element | null {\r\n const [isText, setIsText] = useState(false);\r\n const [isLink, setIsLink] = useState(false);\r\n const [isBold, setIsBold] = useState(false);\r\n const [isItalic, setIsItalic] = useState(false);\r\n const [isUnderline, setIsUnderline] = useState(false);\r\n const [isStrikethrough, setIsStrikethrough] = useState(false);\r\n const [isSubscript, setIsSubscript] = useState(false);\r\n const [isSuperscript, setIsSuperscript] = useState(false);\r\n const [isCode, setIsCode] = useState(false);\r\n\r\n const updatePopup = useCallback(() => {\r\n editor.getEditorState().read(() => {\r\n // Should not to pop up the floating toolbar when using IME input\r\n if (editor.isComposing()) {\r\n return;\r\n }\r\n const selection = $getSelection();\r\n const nativeSelection = window.getSelection();\r\n const rootElement = editor.getRootElement();\r\n\r\n if (\r\n nativeSelection !== null &&\r\n (!$isRangeSelection(selection) ||\r\n rootElement === null ||\r\n !rootElement.contains(nativeSelection.anchorNode))\r\n ) {\r\n setIsText(false);\r\n return;\r\n }\r\n\r\n if (!$isRangeSelection(selection)) {\r\n return;\r\n }\r\n\r\n const node = getSelectedNode(selection);\r\n\r\n // Update text format\r\n setIsBold(selection.hasFormat('bold'));\r\n setIsItalic(selection.hasFormat('italic'));\r\n setIsUnderline(selection.hasFormat('underline'));\r\n setIsStrikethrough(selection.hasFormat('strikethrough'));\r\n setIsSubscript(selection.hasFormat('subscript'));\r\n setIsSuperscript(selection.hasFormat('superscript'));\r\n setIsCode(selection.hasFormat('code'));\r\n\r\n // Update links\r\n const parent = node.getParent();\r\n if ($isLinkNode(parent) || $isLinkNode(node)) {\r\n setIsLink(true);\r\n } else {\r\n setIsLink(false);\r\n }\r\n\r\n if (\r\n !$isCodeHighlightNode(selection.anchor.getNode()) &&\r\n selection.getTextContent() !== ''\r\n ) {\r\n setIsText($isTextNode(node) || $isParagraphNode(node));\r\n } else {\r\n setIsText(false);\r\n }\r\n\r\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '');\r\n if (!selection.isCollapsed() && rawTextContent === '') {\r\n setIsText(false);\r\n return;\r\n }\r\n });\r\n }, [editor]);\r\n\r\n useEffect(() => {\r\n document.addEventListener('selectionchange', updatePopup);\r\n return () => {\r\n document.removeEventListener('selectionchange', updatePopup);\r\n };\r\n }, [updatePopup]);\r\n\r\n useEffect(() => {\r\n return mergeRegister(\r\n editor.registerUpdateListener(() => {\r\n updatePopup();\r\n }),\r\n editor.registerRootListener(() => {\r\n if (editor.getRootElement() === null) {\r\n setIsText(false);\r\n }\r\n }),\r\n );\r\n }, [editor, updatePopup]);\r\n\r\n if (!isText) {\r\n return null;\r\n }\r\n\r\n return createPortal(\r\n <TextFormatFloatingToolbar\r\n editor={editor}\r\n anchorElem={anchorElem}\r\n isLink={isLink}\r\n isBold={isBold}\r\n isItalic={isItalic}\r\n isStrikethrough={isStrikethrough}\r\n isSubscript={isSubscript}\r\n isSuperscript={isSuperscript}\r\n isUnderline={isUnderline}\r\n isCode={isCode}\r\n />,\r\n anchorElem,\r\n );\r\n}\r\n\r\nexport default function FloatingTextFormatToolbarPlugin({\r\n anchorElem = document.body,\r\n}: {\r\n anchorElem?: HTMLElement;\r\n}): JSX.Element | null {\r\n const [editor] = useLexicalComposerContext();\r\n return useFloatingTextFormatToolbar(editor, anchorElem);\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport './Select.css';\r\n\r\nimport * as React from 'react';\r\n\r\ntype SelectIntrinsicProps = JSX.IntrinsicElements['select'];\r\ninterface SelectProps extends SelectIntrinsicProps {\r\n label: string;\r\n}\r\n\r\nexport default function Select({\r\n children,\r\n label,\r\n className,\r\n ...other\r\n}: SelectProps): JSX.Element {\r\n return (\r\n <div className=\"Input__wrapper\">\r\n <label style={{marginTop: '-1em'}} className=\"Input__label\">\r\n {label}\r\n </label>\r\n <select {...other} className={className || 'select'}>\r\n {children}\r\n </select>\r\n </div>\r\n );\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\nimport type {Position} from './InlineImageNode';\r\nimport type {BaseSelection, LexicalEditor, NodeKey} from 'lexical';\r\n\r\nimport './InlineImageNode.css';\r\n\r\nimport {AutoFocusPlugin} from '@lexical/react/LexicalAutoFocusPlugin';\r\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\r\nimport LexicalErrorBoundary from '@lexical/react/LexicalErrorBoundary';\r\nimport {LexicalNestedComposer} from '@lexical/react/LexicalNestedComposer';\r\nimport {RichTextPlugin} from '@lexical/react/LexicalRichTextPlugin';\r\nimport {useLexicalNodeSelection} from '@lexical/react/useLexicalNodeSelection';\r\nimport {mergeRegister} from '@lexical/utils';\r\nimport {\r\n $getNodeByKey,\r\n $getSelection,\r\n $isNodeSelection,\r\n $setSelection,\r\n CLICK_COMMAND,\r\n COMMAND_PRIORITY_LOW,\r\n DRAGSTART_COMMAND,\r\n KEY_BACKSPACE_COMMAND,\r\n KEY_DELETE_COMMAND,\r\n KEY_ENTER_COMMAND,\r\n KEY_ESCAPE_COMMAND,\r\n SELECTION_CHANGE_COMMAND,\r\n} from 'lexical';\r\nimport * as React from 'react';\r\nimport {Suspense, useCallback, useEffect, useRef, useState} from 'react';\r\n\r\nimport useModal from '../hooks/useModal';\r\nimport FloatingTextFormatToolbarPlugin from '../plugins/FloatingTextFormatToolbarPlugin/index';\r\nimport LinkPlugin from '../plugins/LinkPlugin';\r\nimport Button from '../ui/Button';\r\nimport ContentEditable from '../ui/ContentEditable';\r\nimport {DialogActions} from '../ui/Dialog';\r\nimport Placeholder from '../ui/Placeholder';\r\nimport Select from '../ui/Select';\r\nimport TextInput from '../ui/TextInput';\r\nimport {$isInlineImageNode, InlineImageNode} from './InlineImageNode';\r\n\r\nconst imageCache = new Set();\r\n\r\nfunction useSuspenseImage(src: string) {\r\n if (!imageCache.has(src)) {\r\n throw new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = src;\r\n img.onload = () => {\r\n imageCache.add(src);\r\n resolve(null);\r\n };\r\n });\r\n }\r\n}\r\n\r\nfunction LazyImage({\r\n altText,\r\n className,\r\n imageRef,\r\n src,\r\n width,\r\n height,\r\n position,\r\n}: {\r\n altText: string;\r\n className: string | null;\r\n height: 'inherit' | number;\r\n imageRef: {current: null | HTMLImageElement};\r\n src: string;\r\n width: 'inherit' | number;\r\n position: Position;\r\n}): JSX.Element {\r\n useSuspenseImage(src);\r\n return (\r\n <img\r\n className={className || undefined}\r\n src={src}\r\n alt={altText}\r\n ref={imageRef}\r\n data-position={position}\r\n style={{\r\n display: 'block',\r\n height,\r\n width,\r\n }}\r\n draggable=\"false\"\r\n />\r\n );\r\n}\r\n\r\nexport function UpdateInlineImageDialog({\r\n activeEditor,\r\n nodeKey,\r\n onClose,\r\n}: {\r\n activeEditor: LexicalEditor;\r\n nodeKey: NodeKey;\r\n onClose: () => void;\r\n}): JSX.Element {\r\n const editorState = activeEditor.getEditorState();\r\n const node = editorState.read(\r\n () => $getNodeByKey(nodeKey) as InlineImageNode,\r\n );\r\n const [altText, setAltText] = useState(node.getAltText());\r\n const [showCaption, setShowCaption] = useState(node.getShowCaption());\r\n const [position, setPosition] = useState<Position>(node.getPosition());\r\n\r\n const handleShowCaptionChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setShowCaption(e.target.checked);\r\n };\r\n\r\n const handlePositionChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n setPosition(e.target.value as Position);\r\n };\r\n\r\n const handleOnConfirm = () => {\r\n const payload = {altText, position, showCaption};\r\n if (node) {\r\n activeEditor.update(() => {\r\n node.update(payload);\r\n });\r\n }\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n <div style={{marginBottom: '1em'}}>\r\n <TextInput\r\n label=\"Alt Text\"\r\n placeholder=\"Descriptive alternative text\"\r\n onChange={setAltText}\r\n value={altText}\r\n data-test-id=\"image-modal-alt-text-input\"\r\n />\r\n </div>\r\n\r\n <Select\r\n style={{marginBottom: '1em', width: '208px'}}\r\n value={position}\r\n label=\"Position\"\r\n name=\"position\"\r\n id=\"position-select\"\r\n onChange={handlePositionChange}>\r\n <option value=\"left\">Left</option>\r\n <option value=\"right\">Right</option>\r\n <option value=\"full\">Full Width</option>\r\n </Select>\r\n\r\n <div className=\"Input__wrapper\">\r\n <input\r\n id=\"caption\"\r\n type=\"checkbox\"\r\n checked={showCaption}\r\n onChange={handleShowCaptionChange}\r\n />\r\n <label htmlFor=\"caption\">Show Caption</label>\r\n </div>\r\n\r\n <DialogActions>\r\n <Button\r\n data-test-id=\"image-modal-file-upload-btn\"\r\n onClick={() => handleOnConfirm()}>\r\n Confirm\r\n </Button>\r\n </DialogActions>\r\n </>\r\n );\r\n}\r\n\r\nexport default function InlineImageComponent({\r\n src,\r\n altText,\r\n nodeKey,\r\n width,\r\n height,\r\n showCaption,\r\n caption,\r\n position,\r\n}: {\r\n altText: string;\r\n caption: LexicalEditor;\r\n height: 'inherit' | number;\r\n nodeKey: NodeKey;\r\n showCaption: boolean;\r\n src: string;\r\n width: 'inherit' | number;\r\n position: Position;\r\n}): JSX.Element {\r\n const [modal, showModal] = useModal();\r\n const imageRef = useRef<null | HTMLImageElement>(null);\r\n const buttonRef = useRef<HTMLButtonElement | null>(null);\r\n const [isSelected, setSelected, clearSelection] =\r\n useLexicalNodeSelection(nodeKey);\r\n const [editor] = useLexicalComposerContext();\r\n const [selection, setSelection] = useState<BaseSelection | null>(null);\r\n const activeEditorRef = useRef<LexicalEditor | null>(null);\r\n\r\n const onDelete = useCallback(\r\n (payload: KeyboardEvent) => {\r\n if (isSelected && $isNodeSelection($getSelection())) {\r\n const event: KeyboardEvent = payload;\r\n event.preventDefault();\r\n const node = $getNodeByKey(nodeKey);\r\n if ($isInlineImageNode(node)) {\r\n node.remove();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n [isSelected, nodeKey],\r\n );\r\n\r\n const onEnter = useCallback(\r\n (event: KeyboardEvent) => {\r\n const latestSelection = $getSelection();\r\n const buttonElem = buttonRef.current;\r\n if (\r\n isSelected &&\r\n $isNodeSelection(latestSelection) &&\r\n latestSelection.getNodes().length === 1\r\n ) {\r\n if (showCaption) {\r\n // Move focus into nested editor\r\n $setSelection(null);\r\n event.preventDefault();\r\n caption.focus();\r\n return true;\r\n } else if (\r\n buttonElem !== null &&\r\n buttonElem !== document.activeElement\r\n ) {\r\n event.preventDefault();\r\n buttonElem.focus();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n [caption, isSelected, showCaption],\r\n );\r\n\r\n const onEscape = useCallback(\r\n (event: KeyboardEvent) => {\r\n if (\r\n activeEditorRef.current === caption ||\r\n buttonRef.current === event.target\r\n ) {\r\n $setSelection(null);\r\n editor.update(() => {\r\n setSelected(true);\r\n const parentRootElement = editor.getRootElement();\r\n if (parentRootElement !== null) {\r\n parentRootElement.focus();\r\n }\r\n });\r\n return true;\r\n }\r\n return false;\r\n },\r\n [caption, editor, setSelected],\r\n );\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n const unregister = mergeRegister(\r\n editor.registerUpdateListener(({editorState}) => {\r\n if (isMounted) {\r\n setSelection(editorState.read(() => $getSelection()));\r\n }\r\n }),\r\n editor.registerCommand(\r\n SELECTION_CHANGE_COMMAND,\r\n (_, activeEditor) => {\r\n activeEditorRef.current = activeEditor;\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand<MouseEvent>(\r\n CLICK_COMMAND,\r\n (payload) => {\r\n const event = payload;\r\n if (event.target === imageRef.current) {\r\n if (event.shiftKey) {\r\n setSelected(!isSelected);\r\n } else {\r\n clearSelection();\r\n setSelected(true);\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n DRAGSTART_COMMAND,\r\n (event) => {\r\n if (event.target === imageRef.current) {\r\n // TODO This is just a temporary workaround for FF to behave like other browsers.\r\n // Ideally, this handles drag & drop too (and all browsers).\r\n event.preventDefault();\r\n return true;\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_DELETE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_BACKSPACE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(KEY_ENTER_COMMAND, onEnter, COMMAND_PRIORITY_LOW),\r\n editor.registerCommand(\r\n KEY_ESCAPE_COMMAND,\r\n onEscape,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n );\r\n return () => {\r\n isMounted = false;\r\n unregister();\r\n };\r\n }, [\r\n clearSelection,\r\n editor,\r\n isSelected,\r\n nodeKey,\r\n onDelete,\r\n onEnter,\r\n onEscape,\r\n setSelected,\r\n ]);\r\n\r\n const draggable = isSelected && $isNodeSelection(selection);\r\n const isFocused = isSelected;\r\n return (\r\n <Suspense fallback={null}>\r\n <>\r\n <div draggable={draggable}>\r\n <button\r\n className=\"image-edit-button\"\r\n ref={buttonRef}\r\n onClick={() => {\r\n showModal('Update Inline Image', (onClose) => (\r\n <UpdateInlineImageDialog\r\n activeEditor={editor}\r\n nodeKey={nodeKey}\r\n onClose={onClose}\r\n />\r\n ));\r\n }}>\r\n Edit\r\n </button>\r\n <LazyImage\r\n className={\r\n isFocused\r\n ? `focused ${$isNodeSelection(selection) ? 'draggable' : ''}`\r\n : null\r\n }\r\n src={src}\r\n altText={altText}\r\n imageRef={imageRef}\r\n width={width}\r\n height={height}\r\n position={position}\r\n />\r\n </div>\r\n {showCaption && (\r\n <div className=\"image-caption-container\">\r\n <LexicalNestedComposer initialEditor={caption}>\r\n <AutoFocusPlugin />\r\n <LinkPlugin />\r\n <FloatingTextFormatToolbarPlugin />\r\n <RichTextPlugin\r\n contentEditable={\r\n <ContentEditable className=\"InlineImageNode__contentEditable\" />\r\n }\r\n placeholder={\r\n <Placeholder className=\"InlineImageNode__placeholder\">\r\n Enter a caption...\r\n </Placeholder>\r\n }\r\n ErrorBoundary={LexicalErrorBoundary}\r\n />\r\n </LexicalNestedComposer>\r\n </div>\r\n )}\r\n </>\r\n {modal}\r\n </Suspense>\r\n );\r\n}\r\n"],"names":["getDOMRangeRect","nativeSelection","rootElement","domRange","rect","inner","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPosition","targetRect","floatingElem","anchorElem","isLink","verticalGap","horizontalOffset","scrollerElem","floatingElemRect","anchorElementRect","editorScrollerRect","top","left","TextFormatFloatingToolbar","editor","isBold","isItalic","isUnderline","isCode","isStrikethrough","isSubscript","isSuperscript","popupCharStylesEditorRef","useRef","insertLink","useCallback","TOGGLE_LINK_COMMAND","insertComment","INSERT_INLINE_COMMAND","mouseMoveListener","e","x","y","elementUnderMouse","mouseUpListener","useEffect","updateTextFormatFloatingToolbar","selection","$getSelection","popupCharStylesEditorElem","rangeRect","update","mergeRegister","editorState","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_LOW","jsxs","Fragment","jsx","FORMAT_TEXT_COMMAND","useFloatingTextFormatToolbar","isText","setIsText","useState","setIsLink","setIsBold","setIsItalic","setIsUnderline","setIsStrikethrough","setIsSubscript","setIsSuperscript","setIsCode","updatePopup","$isRangeSelection","node","getSelectedNode","parent","$isLinkNode","$isCodeHighlightNode","$isTextNode","$isParagraphNode","rawTextContent","createPortal","FloatingTextFormatToolbarPlugin","useLexicalComposerContext","Select","children","label","className","other","imageCache","useSuspenseImage","src","resolve","img","LazyImage","altText","imageRef","width","height","position","UpdateInlineImageDialog","activeEditor","nodeKey","onClose","$getNodeByKey","setAltText","showCaption","setShowCaption","setPosition","handleShowCaptionChange","handlePositionChange","handleOnConfirm","payload","TextInput","DialogActions","Button","InlineImageComponent","caption","modal","showModal","useModal","buttonRef","isSelected","setSelected","clearSelection","useLexicalNodeSelection","setSelection","activeEditorRef","onDelete","$isNodeSelection","$isInlineImageNode","onEnter","event","latestSelection","buttonElem","$setSelection","onEscape","parentRootElement","isMounted","unregister","_","CLICK_COMMAND","DRAGSTART_COMMAND","KEY_DELETE_COMMAND","KEY_BACKSPACE_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","draggable","isFocused","Suspense","LexicalNestedComposer","AutoFocusPlugin","LinkPlugin","RichTextPlugin","ContentEditable","Placeholder","LexicalErrorBoundary"],"mappings":"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"}
1
+ {"version":3,"file":"InlineImageComponent-0a7fa33a.js","sources":["../src/lexical/utils/getDOMRangeRect.ts","../src/lexical/utils/setFloatingElemPosition.ts","../src/lexical/plugins/FloatingTextFormatToolbarPlugin/index.tsx","../src/lexical/ui/Select.tsx","../src/lexical/nodes/InlineImageComponent.tsx"],"sourcesContent":["/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\nexport function getDOMRangeRect(\r\n nativeSelection: Selection,\r\n rootElement: HTMLElement,\r\n): DOMRect {\r\n const domRange = nativeSelection.getRangeAt(0);\r\n\r\n let rect;\r\n\r\n if (nativeSelection.anchorNode === rootElement) {\r\n let inner = rootElement;\r\n while (inner.firstElementChild != null) {\r\n inner = inner.firstElementChild as HTMLElement;\r\n }\r\n rect = inner.getBoundingClientRect();\r\n } else {\r\n rect = domRange.getBoundingClientRect();\r\n }\r\n\r\n return rect;\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\nconst VERTICAL_GAP = 10;\r\nconst HORIZONTAL_OFFSET = 5;\r\n\r\nexport function setFloatingElemPosition(\r\n targetRect: DOMRect | null,\r\n floatingElem: HTMLElement,\r\n anchorElem: HTMLElement,\r\n isLink: boolean = false,\r\n verticalGap: number = VERTICAL_GAP,\r\n horizontalOffset: number = HORIZONTAL_OFFSET,\r\n): void {\r\n const scrollerElem = anchorElem.parentElement;\r\n\r\n if (targetRect === null || !scrollerElem) {\r\n floatingElem.style.opacity = '0';\r\n floatingElem.style.transform = 'translate(-10000px, -10000px)';\r\n return;\r\n }\r\n\r\n const floatingElemRect = floatingElem.getBoundingClientRect();\r\n const anchorElementRect = anchorElem.getBoundingClientRect();\r\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\r\n\r\n let top = targetRect.top - floatingElemRect.height - verticalGap;\r\n let left = targetRect.left - horizontalOffset;\r\n\r\n if (top < editorScrollerRect.top) {\r\n // adjusted height for link element if the element is at top\r\n top +=\r\n floatingElemRect.height +\r\n targetRect.height +\r\n verticalGap * (isLink ? 9 : 2);\r\n }\r\n\r\n if (left + floatingElemRect.width > editorScrollerRect.right) {\r\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\r\n }\r\n\r\n top -= anchorElementRect.top;\r\n left -= anchorElementRect.left;\r\n\r\n floatingElem.style.opacity = '1';\r\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport './index.css';\r\n\r\nimport {$isCodeHighlightNode} from '@lexical/code';\r\nimport {$isLinkNode, TOGGLE_LINK_COMMAND} from '@lexical/link';\r\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\r\nimport {mergeRegister} from '@lexical/utils';\r\nimport {\r\n $getSelection,\r\n $isParagraphNode,\r\n $isRangeSelection,\r\n $isTextNode,\r\n COMMAND_PRIORITY_LOW,\r\n FORMAT_TEXT_COMMAND,\r\n LexicalEditor,\r\n SELECTION_CHANGE_COMMAND,\r\n} from 'lexical';\r\nimport {useCallback, useEffect, useRef, useState} from 'react';\r\nimport * as React from 'react';\r\nimport {createPortal} from 'react-dom';\r\n\r\nimport {getDOMRangeRect} from '../../utils/getDOMRangeRect';\r\nimport {getSelectedNode} from '../../utils/getSelectedNode';\r\nimport {setFloatingElemPosition} from '../../utils/setFloatingElemPosition';\r\nimport {INSERT_INLINE_COMMAND} from '../CommentPlugin';\r\n\r\nfunction TextFormatFloatingToolbar({\r\n editor,\r\n anchorElem,\r\n isLink,\r\n isBold,\r\n isItalic,\r\n isUnderline,\r\n isCode,\r\n isStrikethrough,\r\n isSubscript,\r\n isSuperscript,\r\n}: {\r\n editor: LexicalEditor;\r\n anchorElem: HTMLElement;\r\n isBold: boolean;\r\n isCode: boolean;\r\n isItalic: boolean;\r\n isLink: boolean;\r\n isStrikethrough: boolean;\r\n isSubscript: boolean;\r\n isSuperscript: boolean;\r\n isUnderline: boolean;\r\n}): JSX.Element {\r\n const popupCharStylesEditorRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const insertLink = useCallback(() => {\r\n if (!isLink) {\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, 'https://');\r\n } else {\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\r\n }\r\n }, [editor, isLink]);\r\n\r\n const insertComment = () => {\r\n editor.dispatchCommand(INSERT_INLINE_COMMAND, undefined);\r\n };\r\n\r\n function mouseMoveListener(e: MouseEvent) {\r\n if (\r\n popupCharStylesEditorRef?.current &&\r\n (e.buttons === 1 || e.buttons === 3)\r\n ) {\r\n if (popupCharStylesEditorRef.current.style.pointerEvents !== 'none') {\r\n const x = e.clientX;\r\n const y = e.clientY;\r\n const elementUnderMouse = document.elementFromPoint(x, y);\r\n\r\n if (!popupCharStylesEditorRef.current.contains(elementUnderMouse)) {\r\n // Mouse is not over the target element => not a normal click, but probably a drag\r\n popupCharStylesEditorRef.current.style.pointerEvents = 'none';\r\n }\r\n }\r\n }\r\n }\r\n function mouseUpListener(e: MouseEvent) {\r\n if (popupCharStylesEditorRef?.current) {\r\n if (popupCharStylesEditorRef.current.style.pointerEvents !== 'auto') {\r\n popupCharStylesEditorRef.current.style.pointerEvents = 'auto';\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (popupCharStylesEditorRef?.current) {\r\n document.addEventListener('mousemove', mouseMoveListener);\r\n document.addEventListener('mouseup', mouseUpListener);\r\n\r\n return () => {\r\n document.removeEventListener('mousemove', mouseMoveListener);\r\n document.removeEventListener('mouseup', mouseUpListener);\r\n };\r\n }\r\n }, [popupCharStylesEditorRef]);\r\n\r\n const updateTextFormatFloatingToolbar = useCallback(() => {\r\n const selection = $getSelection();\r\n\r\n const popupCharStylesEditorElem = popupCharStylesEditorRef.current;\r\n const nativeSelection = window.getSelection();\r\n\r\n if (popupCharStylesEditorElem === null) {\r\n return;\r\n }\r\n\r\n const rootElement = editor.getRootElement();\r\n if (\r\n selection !== null &&\r\n nativeSelection !== null &&\r\n !nativeSelection.isCollapsed &&\r\n rootElement !== null &&\r\n rootElement.contains(nativeSelection.anchorNode)\r\n ) {\r\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\r\n\r\n setFloatingElemPosition(\r\n rangeRect,\r\n popupCharStylesEditorElem,\r\n anchorElem,\r\n isLink,\r\n );\r\n }\r\n }, [editor, anchorElem, isLink]);\r\n\r\n useEffect(() => {\r\n const scrollerElem = anchorElem.parentElement;\r\n\r\n const update = () => {\r\n editor.getEditorState().read(() => {\r\n updateTextFormatFloatingToolbar();\r\n });\r\n };\r\n\r\n window.addEventListener('resize', update);\r\n if (scrollerElem) {\r\n scrollerElem.addEventListener('scroll', update);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('resize', update);\r\n if (scrollerElem) {\r\n scrollerElem.removeEventListener('scroll', update);\r\n }\r\n };\r\n }, [editor, updateTextFormatFloatingToolbar, anchorElem]);\r\n\r\n useEffect(() => {\r\n editor.getEditorState().read(() => {\r\n updateTextFormatFloatingToolbar();\r\n });\r\n return mergeRegister(\r\n editor.registerUpdateListener(({editorState}) => {\r\n editorState.read(() => {\r\n updateTextFormatFloatingToolbar();\r\n });\r\n }),\r\n\r\n editor.registerCommand(\r\n SELECTION_CHANGE_COMMAND,\r\n () => {\r\n updateTextFormatFloatingToolbar();\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n );\r\n }, [editor, updateTextFormatFloatingToolbar]);\r\n\r\n return (\r\n <div ref={popupCharStylesEditorRef} className=\"floating-text-format-popup\">\r\n {editor.isEditable() && (\r\n <>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold');\r\n }}\r\n className={'popup-item spaced ' + (isBold ? 'active' : '')}\r\n aria-label=\"Format text as bold\">\r\n <i className=\"format bold\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic');\r\n }}\r\n className={'popup-item spaced ' + (isItalic ? 'active' : '')}\r\n aria-label=\"Format text as italics\">\r\n <i className=\"format italic\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline');\r\n }}\r\n className={'popup-item spaced ' + (isUnderline ? 'active' : '')}\r\n aria-label=\"Format text to underlined\">\r\n <i className=\"format underline\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough');\r\n }}\r\n className={'popup-item spaced ' + (isStrikethrough ? 'active' : '')}\r\n aria-label=\"Format text with a strikethrough\">\r\n <i className=\"format strikethrough\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript');\r\n }}\r\n className={'popup-item spaced ' + (isSubscript ? 'active' : '')}\r\n title=\"Subscript\"\r\n aria-label=\"Format Subscript\">\r\n <i className=\"format subscript\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript');\r\n }}\r\n className={'popup-item spaced ' + (isSuperscript ? 'active' : '')}\r\n title=\"Superscript\"\r\n aria-label=\"Format Superscript\">\r\n <i className=\"format superscript\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code');\r\n }}\r\n className={'popup-item spaced ' + (isCode ? 'active' : '')}\r\n aria-label=\"Insert code block\">\r\n <i className=\"format code\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={insertLink}\r\n className={'popup-item spaced ' + (isLink ? 'active' : '')}\r\n aria-label=\"Insert link\">\r\n <i className=\"format link\" />\r\n </button>\r\n </>\r\n )}\r\n <button\r\n type=\"button\"\r\n onClick={insertComment}\r\n className={'popup-item spaced insert-comment'}\r\n aria-label=\"Insert comment\">\r\n <i className=\"format add-comment\" />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nfunction useFloatingTextFormatToolbar(\r\n editor: LexicalEditor,\r\n anchorElem: HTMLElement,\r\n): JSX.Element | null {\r\n const [isText, setIsText] = useState(false);\r\n const [isLink, setIsLink] = useState(false);\r\n const [isBold, setIsBold] = useState(false);\r\n const [isItalic, setIsItalic] = useState(false);\r\n const [isUnderline, setIsUnderline] = useState(false);\r\n const [isStrikethrough, setIsStrikethrough] = useState(false);\r\n const [isSubscript, setIsSubscript] = useState(false);\r\n const [isSuperscript, setIsSuperscript] = useState(false);\r\n const [isCode, setIsCode] = useState(false);\r\n\r\n const updatePopup = useCallback(() => {\r\n editor.getEditorState().read(() => {\r\n // Should not to pop up the floating toolbar when using IME input\r\n if (editor.isComposing()) {\r\n return;\r\n }\r\n const selection = $getSelection();\r\n const nativeSelection = window.getSelection();\r\n const rootElement = editor.getRootElement();\r\n\r\n if (\r\n nativeSelection !== null &&\r\n (!$isRangeSelection(selection) ||\r\n rootElement === null ||\r\n !rootElement.contains(nativeSelection.anchorNode))\r\n ) {\r\n setIsText(false);\r\n return;\r\n }\r\n\r\n if (!$isRangeSelection(selection)) {\r\n return;\r\n }\r\n\r\n const node = getSelectedNode(selection);\r\n\r\n // Update text format\r\n setIsBold(selection.hasFormat('bold'));\r\n setIsItalic(selection.hasFormat('italic'));\r\n setIsUnderline(selection.hasFormat('underline'));\r\n setIsStrikethrough(selection.hasFormat('strikethrough'));\r\n setIsSubscript(selection.hasFormat('subscript'));\r\n setIsSuperscript(selection.hasFormat('superscript'));\r\n setIsCode(selection.hasFormat('code'));\r\n\r\n // Update links\r\n const parent = node.getParent();\r\n if ($isLinkNode(parent) || $isLinkNode(node)) {\r\n setIsLink(true);\r\n } else {\r\n setIsLink(false);\r\n }\r\n\r\n if (\r\n !$isCodeHighlightNode(selection.anchor.getNode()) &&\r\n selection.getTextContent() !== ''\r\n ) {\r\n setIsText($isTextNode(node) || $isParagraphNode(node));\r\n } else {\r\n setIsText(false);\r\n }\r\n\r\n const rawTextContent = selection.getTextContent().replace(/\\n/g, '');\r\n if (!selection.isCollapsed() && rawTextContent === '') {\r\n setIsText(false);\r\n return;\r\n }\r\n });\r\n }, [editor]);\r\n\r\n useEffect(() => {\r\n document.addEventListener('selectionchange', updatePopup);\r\n return () => {\r\n document.removeEventListener('selectionchange', updatePopup);\r\n };\r\n }, [updatePopup]);\r\n\r\n useEffect(() => {\r\n return mergeRegister(\r\n editor.registerUpdateListener(() => {\r\n updatePopup();\r\n }),\r\n editor.registerRootListener(() => {\r\n if (editor.getRootElement() === null) {\r\n setIsText(false);\r\n }\r\n }),\r\n );\r\n }, [editor, updatePopup]);\r\n\r\n if (!isText) {\r\n return null;\r\n }\r\n\r\n return createPortal(\r\n <TextFormatFloatingToolbar\r\n editor={editor}\r\n anchorElem={anchorElem}\r\n isLink={isLink}\r\n isBold={isBold}\r\n isItalic={isItalic}\r\n isStrikethrough={isStrikethrough}\r\n isSubscript={isSubscript}\r\n isSuperscript={isSuperscript}\r\n isUnderline={isUnderline}\r\n isCode={isCode}\r\n />,\r\n anchorElem,\r\n );\r\n}\r\n\r\nexport default function FloatingTextFormatToolbarPlugin({\r\n anchorElem = document.body,\r\n}: {\r\n anchorElem?: HTMLElement;\r\n}): JSX.Element | null {\r\n const [editor] = useLexicalComposerContext();\r\n return useFloatingTextFormatToolbar(editor, anchorElem);\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport './Select.css';\r\n\r\nimport * as React from 'react';\r\n\r\ntype SelectIntrinsicProps = JSX.IntrinsicElements['select'];\r\ninterface SelectProps extends SelectIntrinsicProps {\r\n label: string;\r\n}\r\n\r\nexport default function Select({\r\n children,\r\n label,\r\n className,\r\n ...other\r\n}: SelectProps): JSX.Element {\r\n return (\r\n <div className=\"Input__wrapper\">\r\n <label style={{marginTop: '-1em'}} className=\"Input__label\">\r\n {label}\r\n </label>\r\n <select {...other} className={className || 'select'}>\r\n {children}\r\n </select>\r\n </div>\r\n );\r\n}\r\n","/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\nimport type {Position} from './InlineImageNode';\r\nimport type {BaseSelection, LexicalEditor, NodeKey} from 'lexical';\r\n\r\nimport './InlineImageNode.css';\r\n\r\nimport {AutoFocusPlugin} from '@lexical/react/LexicalAutoFocusPlugin';\r\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\r\nimport LexicalErrorBoundary from '@lexical/react/LexicalErrorBoundary';\r\nimport {LexicalNestedComposer} from '@lexical/react/LexicalNestedComposer';\r\nimport {RichTextPlugin} from '@lexical/react/LexicalRichTextPlugin';\r\nimport {useLexicalNodeSelection} from '@lexical/react/useLexicalNodeSelection';\r\nimport {mergeRegister} from '@lexical/utils';\r\nimport {\r\n $getNodeByKey,\r\n $getSelection,\r\n $isNodeSelection,\r\n $setSelection,\r\n CLICK_COMMAND,\r\n COMMAND_PRIORITY_LOW,\r\n DRAGSTART_COMMAND,\r\n KEY_BACKSPACE_COMMAND,\r\n KEY_DELETE_COMMAND,\r\n KEY_ENTER_COMMAND,\r\n KEY_ESCAPE_COMMAND,\r\n SELECTION_CHANGE_COMMAND,\r\n} from 'lexical';\r\nimport * as React from 'react';\r\nimport {Suspense, useCallback, useEffect, useRef, useState} from 'react';\r\n\r\nimport useModal from '../hooks/useModal';\r\nimport FloatingTextFormatToolbarPlugin from '../plugins/FloatingTextFormatToolbarPlugin/index';\r\nimport LinkPlugin from '../plugins/LinkPlugin';\r\nimport Button from '../ui/Button';\r\nimport ContentEditable from '../ui/ContentEditable';\r\nimport {DialogActions} from '../ui/Dialog';\r\nimport Placeholder from '../ui/Placeholder';\r\nimport Select from '../ui/Select';\r\nimport TextInput from '../ui/TextInput';\r\nimport {$isInlineImageNode, InlineImageNode} from './InlineImageNode';\r\n\r\nconst imageCache = new Set();\r\n\r\nfunction useSuspenseImage(src: string) {\r\n if (!imageCache.has(src)) {\r\n throw new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = src;\r\n img.onload = () => {\r\n imageCache.add(src);\r\n resolve(null);\r\n };\r\n });\r\n }\r\n}\r\n\r\nfunction LazyImage({\r\n altText,\r\n className,\r\n imageRef,\r\n src,\r\n width,\r\n height,\r\n position,\r\n}: {\r\n altText: string;\r\n className: string | null;\r\n height: 'inherit' | number;\r\n imageRef: {current: null | HTMLImageElement};\r\n src: string;\r\n width: 'inherit' | number;\r\n position: Position;\r\n}): JSX.Element {\r\n useSuspenseImage(src);\r\n return (\r\n <img\r\n className={className || undefined}\r\n src={src}\r\n alt={altText}\r\n ref={imageRef}\r\n data-position={position}\r\n style={{\r\n display: 'block',\r\n height,\r\n width,\r\n }}\r\n draggable=\"false\"\r\n />\r\n );\r\n}\r\n\r\nexport function UpdateInlineImageDialog({\r\n activeEditor,\r\n nodeKey,\r\n onClose,\r\n}: {\r\n activeEditor: LexicalEditor;\r\n nodeKey: NodeKey;\r\n onClose: () => void;\r\n}): JSX.Element {\r\n const editorState = activeEditor.getEditorState();\r\n const node = editorState.read(\r\n () => $getNodeByKey(nodeKey) as InlineImageNode,\r\n );\r\n const [altText, setAltText] = useState(node.getAltText());\r\n const [showCaption, setShowCaption] = useState(node.getShowCaption());\r\n const [position, setPosition] = useState<Position>(node.getPosition());\r\n\r\n const handleShowCaptionChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setShowCaption(e.target.checked);\r\n };\r\n\r\n const handlePositionChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n setPosition(e.target.value as Position);\r\n };\r\n\r\n const handleOnConfirm = () => {\r\n const payload = {altText, position, showCaption};\r\n if (node) {\r\n activeEditor.update(() => {\r\n node.update(payload);\r\n });\r\n }\r\n onClose();\r\n };\r\n\r\n return (\r\n <>\r\n <div style={{marginBottom: '1em'}}>\r\n <TextInput\r\n label=\"Alt Text\"\r\n placeholder=\"Descriptive alternative text\"\r\n onChange={setAltText}\r\n value={altText}\r\n data-test-id=\"image-modal-alt-text-input\"\r\n />\r\n </div>\r\n\r\n <Select\r\n style={{marginBottom: '1em', width: '208px'}}\r\n value={position}\r\n label=\"Position\"\r\n name=\"position\"\r\n id=\"position-select\"\r\n onChange={handlePositionChange}>\r\n <option value=\"left\">Left</option>\r\n <option value=\"right\">Right</option>\r\n <option value=\"full\">Full Width</option>\r\n </Select>\r\n\r\n <div className=\"Input__wrapper\">\r\n <input\r\n id=\"caption\"\r\n type=\"checkbox\"\r\n checked={showCaption}\r\n onChange={handleShowCaptionChange}\r\n />\r\n <label htmlFor=\"caption\">Show Caption</label>\r\n </div>\r\n\r\n <DialogActions>\r\n <Button\r\n data-test-id=\"image-modal-file-upload-btn\"\r\n onClick={() => handleOnConfirm()}>\r\n Confirm\r\n </Button>\r\n </DialogActions>\r\n </>\r\n );\r\n}\r\n\r\nexport default function InlineImageComponent({\r\n src,\r\n altText,\r\n nodeKey,\r\n width,\r\n height,\r\n showCaption,\r\n caption,\r\n position,\r\n}: {\r\n altText: string;\r\n caption: LexicalEditor;\r\n height: 'inherit' | number;\r\n nodeKey: NodeKey;\r\n showCaption: boolean;\r\n src: string;\r\n width: 'inherit' | number;\r\n position: Position;\r\n}): JSX.Element {\r\n const [modal, showModal] = useModal();\r\n const imageRef = useRef<null | HTMLImageElement>(null);\r\n const buttonRef = useRef<HTMLButtonElement | null>(null);\r\n const [isSelected, setSelected, clearSelection] =\r\n useLexicalNodeSelection(nodeKey);\r\n const [editor] = useLexicalComposerContext();\r\n const [selection, setSelection] = useState<BaseSelection | null>(null);\r\n const activeEditorRef = useRef<LexicalEditor | null>(null);\r\n\r\n const onDelete = useCallback(\r\n (payload: KeyboardEvent) => {\r\n if (isSelected && $isNodeSelection($getSelection())) {\r\n const event: KeyboardEvent = payload;\r\n event.preventDefault();\r\n const node = $getNodeByKey(nodeKey);\r\n if ($isInlineImageNode(node)) {\r\n node.remove();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n [isSelected, nodeKey],\r\n );\r\n\r\n const onEnter = useCallback(\r\n (event: KeyboardEvent) => {\r\n const latestSelection = $getSelection();\r\n const buttonElem = buttonRef.current;\r\n if (\r\n isSelected &&\r\n $isNodeSelection(latestSelection) &&\r\n latestSelection.getNodes().length === 1\r\n ) {\r\n if (showCaption) {\r\n // Move focus into nested editor\r\n $setSelection(null);\r\n event.preventDefault();\r\n caption.focus();\r\n return true;\r\n } else if (\r\n buttonElem !== null &&\r\n buttonElem !== document.activeElement\r\n ) {\r\n event.preventDefault();\r\n buttonElem.focus();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n [caption, isSelected, showCaption],\r\n );\r\n\r\n const onEscape = useCallback(\r\n (event: KeyboardEvent) => {\r\n if (\r\n activeEditorRef.current === caption ||\r\n buttonRef.current === event.target\r\n ) {\r\n $setSelection(null);\r\n editor.update(() => {\r\n setSelected(true);\r\n const parentRootElement = editor.getRootElement();\r\n if (parentRootElement !== null) {\r\n parentRootElement.focus();\r\n }\r\n });\r\n return true;\r\n }\r\n return false;\r\n },\r\n [caption, editor, setSelected],\r\n );\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n const unregister = mergeRegister(\r\n editor.registerUpdateListener(({editorState}) => {\r\n if (isMounted) {\r\n setSelection(editorState.read(() => $getSelection()));\r\n }\r\n }),\r\n editor.registerCommand(\r\n SELECTION_CHANGE_COMMAND,\r\n (_, activeEditor) => {\r\n activeEditorRef.current = activeEditor;\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand<MouseEvent>(\r\n CLICK_COMMAND,\r\n (payload) => {\r\n const event = payload;\r\n if (event.target === imageRef.current) {\r\n if (event.shiftKey) {\r\n setSelected(!isSelected);\r\n } else {\r\n clearSelection();\r\n setSelected(true);\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n DRAGSTART_COMMAND,\r\n (event) => {\r\n if (event.target === imageRef.current) {\r\n // TODO This is just a temporary workaround for FF to behave like other browsers.\r\n // Ideally, this handles drag & drop too (and all browsers).\r\n event.preventDefault();\r\n return true;\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_DELETE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_BACKSPACE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(KEY_ENTER_COMMAND, onEnter, COMMAND_PRIORITY_LOW),\r\n editor.registerCommand(\r\n KEY_ESCAPE_COMMAND,\r\n onEscape,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n );\r\n return () => {\r\n isMounted = false;\r\n unregister();\r\n };\r\n }, [\r\n clearSelection,\r\n editor,\r\n isSelected,\r\n nodeKey,\r\n onDelete,\r\n onEnter,\r\n onEscape,\r\n setSelected,\r\n ]);\r\n\r\n const draggable = isSelected && $isNodeSelection(selection);\r\n const isFocused = isSelected;\r\n return (\r\n <Suspense fallback={null}>\r\n <>\r\n <div draggable={draggable}>\r\n <button\r\n className=\"image-edit-button\"\r\n ref={buttonRef}\r\n onClick={() => {\r\n showModal('Update Inline Image', (onClose) => (\r\n <UpdateInlineImageDialog\r\n activeEditor={editor}\r\n nodeKey={nodeKey}\r\n onClose={onClose}\r\n />\r\n ));\r\n }}>\r\n Edit\r\n </button>\r\n <LazyImage\r\n className={\r\n isFocused\r\n ? `focused ${$isNodeSelection(selection) ? 'draggable' : ''}`\r\n : null\r\n }\r\n src={src}\r\n altText={altText}\r\n imageRef={imageRef}\r\n width={width}\r\n height={height}\r\n position={position}\r\n />\r\n </div>\r\n {showCaption && (\r\n <div className=\"image-caption-container\">\r\n <LexicalNestedComposer initialEditor={caption}>\r\n <AutoFocusPlugin />\r\n <LinkPlugin />\r\n <FloatingTextFormatToolbarPlugin />\r\n <RichTextPlugin\r\n contentEditable={\r\n <ContentEditable className=\"InlineImageNode__contentEditable\" />\r\n }\r\n placeholder={\r\n <Placeholder className=\"InlineImageNode__placeholder\">\r\n Enter a caption...\r\n </Placeholder>\r\n }\r\n ErrorBoundary={LexicalErrorBoundary}\r\n />\r\n </LexicalNestedComposer>\r\n </div>\r\n )}\r\n </>\r\n {modal}\r\n </Suspense>\r\n );\r\n}\r\n"],"names":["getDOMRangeRect","nativeSelection","rootElement","domRange","rect","inner","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPosition","targetRect","floatingElem","anchorElem","isLink","verticalGap","horizontalOffset","scrollerElem","floatingElemRect","anchorElementRect","editorScrollerRect","top","left","TextFormatFloatingToolbar","editor","isBold","isItalic","isUnderline","isCode","isStrikethrough","isSubscript","isSuperscript","popupCharStylesEditorRef","useRef","insertLink","useCallback","TOGGLE_LINK_COMMAND","insertComment","INSERT_INLINE_COMMAND","mouseMoveListener","e","x","y","elementUnderMouse","mouseUpListener","useEffect","updateTextFormatFloatingToolbar","selection","$getSelection","popupCharStylesEditorElem","rangeRect","update","mergeRegister","editorState","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_LOW","jsxs","Fragment","jsx","FORMAT_TEXT_COMMAND","useFloatingTextFormatToolbar","isText","setIsText","useState","setIsLink","setIsBold","setIsItalic","setIsUnderline","setIsStrikethrough","setIsSubscript","setIsSuperscript","setIsCode","updatePopup","$isRangeSelection","node","getSelectedNode","parent","$isLinkNode","$isCodeHighlightNode","$isTextNode","$isParagraphNode","rawTextContent","createPortal","FloatingTextFormatToolbarPlugin","useLexicalComposerContext","Select","children","label","className","other","imageCache","useSuspenseImage","src","resolve","img","LazyImage","altText","imageRef","width","height","position","UpdateInlineImageDialog","activeEditor","nodeKey","onClose","$getNodeByKey","setAltText","showCaption","setShowCaption","setPosition","handleShowCaptionChange","handlePositionChange","handleOnConfirm","payload","TextInput","DialogActions","Button","InlineImageComponent","caption","modal","showModal","useModal","buttonRef","isSelected","setSelected","clearSelection","useLexicalNodeSelection","setSelection","activeEditorRef","onDelete","$isNodeSelection","$isInlineImageNode","onEnter","event","latestSelection","buttonElem","$setSelection","onEscape","parentRootElement","isMounted","unregister","_","CLICK_COMMAND","DRAGSTART_COMMAND","KEY_DELETE_COMMAND","KEY_BACKSPACE_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","draggable","isFocused","Suspense","LexicalNestedComposer","AutoFocusPlugin","LinkPlugin","RichTextPlugin","ContentEditable","Placeholder","LexicalErrorBoundary"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { F as u, H as y, J as E, j as k } from "./index-eb13da6f.js";
1
+ import { F as u, H as y, J as E, j as k } from "./index-383f935b.js";
2
2
  import { useRef as O, useContext as j, useMemo as D, useEffect as h } from "react";
3
3
  function K(e) {
4
4
  return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
@@ -45,4 +45,4 @@ function P({ initialEditor: e, children: r, initialNodes: o, initialTheme: g, sk
45
45
  export {
46
46
  P as d
47
47
  };
48
- //# sourceMappingURL=LexicalNestedComposer.prod-955fd916.js.map
48
+ //# sourceMappingURL=LexicalNestedComposer.prod-8341e4fa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalNestedComposer.prod-955fd916.js","sources":["../node_modules/@lexical/react/LexicalNestedComposer.prod.mjs"],"sourcesContent":["/**\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{useCollaborationContext as e}from\"@lexical/react/LexicalCollaborationContext\";import{LexicalComposerContext as t,createLexicalComposerContext as r}from\"@lexical/react/LexicalComposerContext\";import{useRef as o,useContext as n,useMemo as l,useEffect as i}from\"react\";import{jsx as a}from\"react/jsx-runtime\";function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var c=s((function(e){const t=new URLSearchParams;t.append(\"code\",e);for(let e=1;e<arguments.length;e++)t.append(\"v\",arguments[e]);throw Error(`Minified Lexical error #${e}; visit https://lexical.dev/docs/error?${t} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}));function p(e){const t=e.transform();return null!==t?new Set([t]):new Set}function d({initialEditor:s,children:d,initialNodes:f,initialTheme:u,skipCollabChecks:m}){const h=o(!1),x=n(t);null==x&&c(9);const[_,{getTheme:g}]=x,v=l((()=>{const e=u||g()||void 0,t=r(x,e);if(void 0!==e&&(s._config.theme=e),s._parentEditor=_,f)for(let e of f){let t=null,r=null;if(\"function\"!=typeof e){const o=e;e=o.replace,t=o.with,r=o.withKlass||null}const o=s._nodes.get(e.getType());s._nodes.set(e.getType(),{exportDOM:o?o.exportDOM:void 0,klass:e,replace:t,replaceWithKlass:r,transforms:p(e)})}else{const e=s._nodes=new Map(_._nodes);for(const[t,r]of e)s._nodes.set(t,{exportDOM:r.exportDOM,klass:r.klass,replace:r.replace,replaceWithKlass:r.replaceWithKlass,transforms:p(r.klass)})}return s._config.namespace=_._config.namespace,s._editable=_._editable,[s,t]}),[]),{isCollabActive:w,yjsDocMap:b}=e(),M=m||h.current||b.has(s.getKey());return i((()=>{M&&(h.current=!0)}),[M]),i((()=>_.registerEditableListener((e=>{s.setEditable(e)}))),[s,_]),a(t.Provider,{value:v,children:!w||M?d:null})}export{d as LexicalNestedComposer};\n"],"names":["s","c","t","e","p","d","f","u","m","h","o","x","n","_","g","v","l","r","b","M","i","a"],"mappings":";;AAQyT,SAASA,EAAE,GAAE;AAAC,SAAO,KAAG,EAAE,cAAY,OAAO,UAAU,eAAe,KAAK,GAAE,SAAS,IAAE,EAAE,UAAQ;AAAC;AAAC,IAAIC,IAAED,EAAG,SAAS,GAAE;AAAC,QAAME,IAAE,IAAI;AAAgB,EAAAA,EAAE,OAAO,QAAO,CAAC;AAAE,WAAQC,IAAE,GAAEA,IAAE,UAAU,QAAOA;AAAI,IAAAD,EAAE,OAAO,KAAI,UAAUC,CAAC,CAAC;AAAE,QAAM,MAAM,2BAA2B,CAAC,0CAA0CD,CAAC,gHAAgH;AAAC,CAAC;AAAG,SAASE,EAAE,GAAE;AAAC,QAAMF,IAAE,EAAE,UAAW;AAAC,SAAcA,MAAP,OAAS,oBAAI,IAAI,CAACA,CAAC,CAAC,IAAE,oBAAI;AAAG;AAAC,SAASG,EAAE,EAAC,eAAcL,GAAE,UAASK,GAAE,cAAaC,GAAE,cAAaC,GAAE,kBAAiBC,EAAC,GAAE;AAAC,QAAMC,IAAEC,EAAE,EAAE,GAAEC,IAAEC,EAAEV,CAAC;AAAE,EAAMS,KAAN,QAASV,EAAE,CAAC;AAAE,QAAK,CAACY,GAAE,EAAC,UAASC,EAAC,CAAC,IAAEH,GAAEI,IAAEC,EAAG,MAAI;AAAC,UAAMb,IAAEI,KAAGO,EAAG,KAAE,QAAOZ,IAAEe,EAAEN,GAAER,CAAC;AAAE,QAAYA,MAAT,WAAaH,EAAE,QAAQ,QAAMG,IAAGH,EAAE,gBAAca,GAAEP;AAAE,eAAQH,KAAKG,GAAE;AAAC,YAAIJ,IAAE,MAAKe,IAAE;AAAK,YAAe,OAAOd,KAAnB,YAAqB;AAAC,gBAAMO,IAAEP;AAAE,UAAAA,IAAEO,EAAE,SAAQR,IAAEQ,EAAE,MAAKO,IAAEP,EAAE,aAAW;AAAA,QAAI;AAAC,cAAMA,IAAEV,EAAE,OAAO,IAAIG,EAAE,QAAS,CAAA;AAAE,QAAAH,EAAE,OAAO,IAAIG,EAAE,QAAO,GAAG,EAAC,WAAUO,IAAEA,EAAE,YAAU,QAAO,OAAMP,GAAE,SAAQD,GAAE,kBAAiBe,GAAE,YAAWb,EAAED,CAAC,EAAC,CAAC;AAAA,MAAC;AAAA,SAAK;AAAC,YAAMA,IAAEH,EAAE,SAAO,IAAI,IAAIa,EAAE,MAAM;AAAE,iBAAS,CAACX,GAAEe,CAAC,KAAId;AAAE,QAAAH,EAAE,OAAO,IAAIE,GAAE,EAAC,WAAUe,EAAE,WAAU,OAAMA,EAAE,OAAM,SAAQA,EAAE,SAAQ,kBAAiBA,EAAE,kBAAiB,YAAWb,EAAEa,EAAE,KAAK,EAAC,CAAC;AAAA,IAAC;AAAC,WAAOjB,EAAE,QAAQ,YAAUa,EAAE,QAAQ,WAAUb,EAAE,YAAUa,EAAE,WAAU,CAACb,GAAEE,CAAC;AAAA,EAAC,GAAG,CAAE,CAAA,GAAE,EAAC,gBAAe,GAAE,WAAUgB,EAAC,IAAEf,KAAIgB,IAAEX,KAAGC,EAAE,WAASS,EAAE,IAAIlB,EAAE,OAAM,CAAE;AAAE,SAAOoB,EAAG,MAAI;AAAC,IAAAD,MAAIV,EAAE,UAAQ;AAAA,EAAG,GAAG,CAACU,CAAC,CAAC,GAAEC,EAAG,MAAIP,EAAE,yBAA0B,CAAAV,MAAG;AAAC,IAAAH,EAAE,YAAYG,CAAC;AAAA,EAAC,CAAG,GAAE,CAACH,GAAEa,CAAC,CAAC,GAAEQ,EAAAA,IAAEnB,EAAE,UAAS,EAAC,OAAMa,GAAE,UAAS,CAAC,KAAGI,IAAEd,IAAE,KAAI,CAAC;AAAC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"LexicalNestedComposer.prod-8341e4fa.js","sources":["../node_modules/@lexical/react/LexicalNestedComposer.prod.mjs"],"sourcesContent":["/**\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{useCollaborationContext as e}from\"@lexical/react/LexicalCollaborationContext\";import{LexicalComposerContext as t,createLexicalComposerContext as r}from\"@lexical/react/LexicalComposerContext\";import{useRef as o,useContext as n,useMemo as l,useEffect as i}from\"react\";import{jsx as a}from\"react/jsx-runtime\";function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var c=s((function(e){const t=new URLSearchParams;t.append(\"code\",e);for(let e=1;e<arguments.length;e++)t.append(\"v\",arguments[e]);throw Error(`Minified Lexical error #${e}; visit https://lexical.dev/docs/error?${t} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}));function p(e){const t=e.transform();return null!==t?new Set([t]):new Set}function d({initialEditor:s,children:d,initialNodes:f,initialTheme:u,skipCollabChecks:m}){const h=o(!1),x=n(t);null==x&&c(9);const[_,{getTheme:g}]=x,v=l((()=>{const e=u||g()||void 0,t=r(x,e);if(void 0!==e&&(s._config.theme=e),s._parentEditor=_,f)for(let e of f){let t=null,r=null;if(\"function\"!=typeof e){const o=e;e=o.replace,t=o.with,r=o.withKlass||null}const o=s._nodes.get(e.getType());s._nodes.set(e.getType(),{exportDOM:o?o.exportDOM:void 0,klass:e,replace:t,replaceWithKlass:r,transforms:p(e)})}else{const e=s._nodes=new Map(_._nodes);for(const[t,r]of e)s._nodes.set(t,{exportDOM:r.exportDOM,klass:r.klass,replace:r.replace,replaceWithKlass:r.replaceWithKlass,transforms:p(r.klass)})}return s._config.namespace=_._config.namespace,s._editable=_._editable,[s,t]}),[]),{isCollabActive:w,yjsDocMap:b}=e(),M=m||h.current||b.has(s.getKey());return i((()=>{M&&(h.current=!0)}),[M]),i((()=>_.registerEditableListener((e=>{s.setEditable(e)}))),[s,_]),a(t.Provider,{value:v,children:!w||M?d:null})}export{d as LexicalNestedComposer};\n"],"names":["s","c","t","e","p","d","f","u","m","h","o","x","n","_","g","v","l","r","b","M","i","a"],"mappings":";;AAQyT,SAASA,EAAE,GAAE;AAAC,SAAO,KAAG,EAAE,cAAY,OAAO,UAAU,eAAe,KAAK,GAAE,SAAS,IAAE,EAAE,UAAQ;AAAC;AAAC,IAAIC,IAAED,EAAG,SAAS,GAAE;AAAC,QAAME,IAAE,IAAI;AAAgB,EAAAA,EAAE,OAAO,QAAO,CAAC;AAAE,WAAQC,IAAE,GAAEA,IAAE,UAAU,QAAOA;AAAI,IAAAD,EAAE,OAAO,KAAI,UAAUC,CAAC,CAAC;AAAE,QAAM,MAAM,2BAA2B,CAAC,0CAA0CD,CAAC,gHAAgH;AAAC,CAAC;AAAG,SAASE,EAAE,GAAE;AAAC,QAAMF,IAAE,EAAE,UAAW;AAAC,SAAcA,MAAP,OAAS,oBAAI,IAAI,CAACA,CAAC,CAAC,IAAE,oBAAI;AAAG;AAAC,SAASG,EAAE,EAAC,eAAcL,GAAE,UAASK,GAAE,cAAaC,GAAE,cAAaC,GAAE,kBAAiBC,EAAC,GAAE;AAAC,QAAMC,IAAEC,EAAE,EAAE,GAAEC,IAAEC,EAAEV,CAAC;AAAE,EAAMS,KAAN,QAASV,EAAE,CAAC;AAAE,QAAK,CAACY,GAAE,EAAC,UAASC,EAAC,CAAC,IAAEH,GAAEI,IAAEC,EAAG,MAAI;AAAC,UAAMb,IAAEI,KAAGO,EAAG,KAAE,QAAOZ,IAAEe,EAAEN,GAAER,CAAC;AAAE,QAAYA,MAAT,WAAaH,EAAE,QAAQ,QAAMG,IAAGH,EAAE,gBAAca,GAAEP;AAAE,eAAQH,KAAKG,GAAE;AAAC,YAAIJ,IAAE,MAAKe,IAAE;AAAK,YAAe,OAAOd,KAAnB,YAAqB;AAAC,gBAAMO,IAAEP;AAAE,UAAAA,IAAEO,EAAE,SAAQR,IAAEQ,EAAE,MAAKO,IAAEP,EAAE,aAAW;AAAA,QAAI;AAAC,cAAMA,IAAEV,EAAE,OAAO,IAAIG,EAAE,QAAS,CAAA;AAAE,QAAAH,EAAE,OAAO,IAAIG,EAAE,QAAO,GAAG,EAAC,WAAUO,IAAEA,EAAE,YAAU,QAAO,OAAMP,GAAE,SAAQD,GAAE,kBAAiBe,GAAE,YAAWb,EAAED,CAAC,EAAC,CAAC;AAAA,MAAC;AAAA,SAAK;AAAC,YAAMA,IAAEH,EAAE,SAAO,IAAI,IAAIa,EAAE,MAAM;AAAE,iBAAS,CAACX,GAAEe,CAAC,KAAId;AAAE,QAAAH,EAAE,OAAO,IAAIE,GAAE,EAAC,WAAUe,EAAE,WAAU,OAAMA,EAAE,OAAM,SAAQA,EAAE,SAAQ,kBAAiBA,EAAE,kBAAiB,YAAWb,EAAEa,EAAE,KAAK,EAAC,CAAC;AAAA,IAAC;AAAC,WAAOjB,EAAE,QAAQ,YAAUa,EAAE,QAAQ,WAAUb,EAAE,YAAUa,EAAE,WAAU,CAACb,GAAEE,CAAC;AAAA,EAAC,GAAG,CAAE,CAAA,GAAE,EAAC,gBAAe,GAAE,WAAUgB,EAAC,IAAEf,KAAIgB,IAAEX,KAAGC,EAAE,WAASS,EAAE,IAAIlB,EAAE,OAAM,CAAE;AAAE,SAAOoB,EAAG,MAAI;AAAC,IAAAD,MAAIV,EAAE,UAAQ;AAAA,EAAG,GAAG,CAACU,CAAC,CAAC,GAAEC,EAAG,MAAIP,EAAE,yBAA0B,CAAAV,MAAG;AAAC,IAAAH,EAAE,YAAYG,CAAC;AAAA,EAAC,CAAG,GAAE,CAACH,GAAEa,CAAC,CAAC,GAAEQ,EAAAA,IAAEnB,EAAE,UAAS,EAAC,OAAMa,GAAE,UAAS,CAAC,KAAGI,IAAEd,IAAE,KAAI,CAAC;AAAC;","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import { a as O, u as S, d as C, w as P, x as g, K as j, e as I, k as D, C as f, h as E, r as $, j as t, E as V, J as R, M as k, N as w } from "./index-eb13da6f.js";
1
+ import { a as O, u as S, d as C, w as P, x as g, K as j, e as I, k as D, C as f, h as E, r as $, j as t, E as V, J as R, M as k, N as w } from "./index-383f935b.js";
2
2
  import { useMemo as y, useState as A, useRef as b, useCallback as M, useEffect as T } from "react";
3
3
  import "react-dom";
4
4
  function W(s) {
@@ -166,4 +166,4 @@ function U({
166
166
  export {
167
167
  U as default
168
168
  };
169
- //# sourceMappingURL=PollComponent-a98e901d.js.map
169
+ //# sourceMappingURL=PollComponent-3e94abe5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PollComponent-a98e901d.js","sources":["../src/lexical/nodes/PollComponent.tsx"],"sourcesContent":["/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport type {Option, Options, PollNode} from './PollNode';\r\n\r\nimport './PollNode.css';\r\n\r\nimport {useCollaborationContext} from '@lexical/react/LexicalCollaborationContext';\r\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\r\nimport {useLexicalNodeSelection} from '@lexical/react/useLexicalNodeSelection';\r\nimport {mergeRegister} from '@lexical/utils';\r\nimport {\r\n $getNodeByKey,\r\n $getSelection,\r\n $isNodeSelection,\r\n BaseSelection,\r\n CLICK_COMMAND,\r\n COMMAND_PRIORITY_LOW,\r\n KEY_BACKSPACE_COMMAND,\r\n KEY_DELETE_COMMAND,\r\n NodeKey,\r\n} from 'lexical';\r\nimport * as React from 'react';\r\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react';\r\n\r\nimport Button from '../ui/Button';\r\nimport joinClasses from '../utils/joinClasses';\r\nimport {$isPollNode, createPollOption} from './PollNode';\r\n\r\nfunction getTotalVotes(options: Options): number {\r\n return options.reduce((totalVotes, next) => {\r\n return totalVotes + next.votes.length;\r\n }, 0);\r\n}\r\n\r\nfunction PollOptionComponent({\r\n option,\r\n index,\r\n options,\r\n totalVotes,\r\n withPollNode,\r\n}: {\r\n index: number;\r\n option: Option;\r\n options: Options;\r\n totalVotes: number;\r\n withPollNode: (\r\n cb: (pollNode: PollNode) => void,\r\n onSelect?: () => void,\r\n ) => void;\r\n}): JSX.Element {\r\n const {clientID} = useCollaborationContext();\r\n const checkboxRef = useRef(null);\r\n const votesArray = option.votes;\r\n const checkedIndex = votesArray.indexOf(clientID);\r\n const checked = checkedIndex !== -1;\r\n const votes = votesArray.length;\r\n const text = option.text;\r\n\r\n return (\r\n <div className=\"PollNode__optionContainer\">\r\n <div\r\n className={joinClasses(\r\n 'PollNode__optionCheckboxWrapper',\r\n checked && 'PollNode__optionCheckboxChecked',\r\n )}>\r\n <input\r\n ref={checkboxRef}\r\n className=\"PollNode__optionCheckbox\"\r\n type=\"checkbox\"\r\n onChange={(e) => {\r\n withPollNode((node) => {\r\n node.toggleVote(option, clientID);\r\n });\r\n }}\r\n checked={checked}\r\n />\r\n </div>\r\n <div className=\"PollNode__optionInputWrapper\">\r\n <div\r\n className=\"PollNode__optionInputVotes\"\r\n style={{width: `${votes === 0 ? 0 : (votes / totalVotes) * 100}%`}}\r\n />\r\n <span className=\"PollNode__optionInputVotesCount\">\r\n {votes > 0 && (votes === 1 ? '1 vote' : `${votes} votes`)}\r\n </span>\r\n <input\r\n className=\"PollNode__optionInput\"\r\n type=\"text\"\r\n value={text}\r\n onChange={(e) => {\r\n const target = e.target;\r\n const value = target.value;\r\n const selectionStart = target.selectionStart;\r\n const selectionEnd = target.selectionEnd;\r\n withPollNode(\r\n (node) => {\r\n node.setOptionText(option, value);\r\n },\r\n () => {\r\n target.selectionStart = selectionStart;\r\n target.selectionEnd = selectionEnd;\r\n },\r\n );\r\n }}\r\n placeholder={`Option ${index + 1}`}\r\n />\r\n </div>\r\n <button\r\n disabled={options.length < 3}\r\n className={joinClasses(\r\n 'PollNode__optionDelete',\r\n options.length < 3 && 'PollNode__optionDeleteDisabled',\r\n )}\r\n aria-label=\"Remove\"\r\n onClick={() => {\r\n withPollNode((node) => {\r\n node.deleteOption(option);\r\n });\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default function PollComponent({\r\n question,\r\n options,\r\n nodeKey,\r\n}: {\r\n nodeKey: NodeKey;\r\n options: Options;\r\n question: string;\r\n}): JSX.Element {\r\n const [editor] = useLexicalComposerContext();\r\n const totalVotes = useMemo(() => getTotalVotes(options), [options]);\r\n const [isSelected, setSelected, clearSelection] =\r\n useLexicalNodeSelection(nodeKey);\r\n const [selection, setSelection] = useState<BaseSelection | null>(null);\r\n const ref = useRef(null);\r\n\r\n const onDelete = useCallback(\r\n (payload: KeyboardEvent) => {\r\n if (isSelected && $isNodeSelection($getSelection())) {\r\n const event: KeyboardEvent = payload;\r\n event.preventDefault();\r\n const node = $getNodeByKey(nodeKey);\r\n if ($isPollNode(node)) {\r\n node.remove();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n [isSelected, nodeKey],\r\n );\r\n\r\n useEffect(() => {\r\n return mergeRegister(\r\n editor.registerUpdateListener(({editorState}) => {\r\n setSelection(editorState.read(() => $getSelection()));\r\n }),\r\n editor.registerCommand<MouseEvent>(\r\n CLICK_COMMAND,\r\n (payload) => {\r\n const event = payload;\r\n\r\n if (event.target === ref.current) {\r\n if (!event.shiftKey) {\r\n clearSelection();\r\n }\r\n setSelected(!isSelected);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_DELETE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_BACKSPACE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n );\r\n }, [clearSelection, editor, isSelected, nodeKey, onDelete, setSelected]);\r\n\r\n const withPollNode = (\r\n cb: (node: PollNode) => void,\r\n onUpdate?: () => void,\r\n ): void => {\r\n editor.update(\r\n () => {\r\n const node = $getNodeByKey(nodeKey);\r\n if ($isPollNode(node)) {\r\n cb(node);\r\n }\r\n },\r\n {onUpdate},\r\n );\r\n };\r\n\r\n const addOption = () => {\r\n withPollNode((node) => {\r\n node.addOption(createPollOption());\r\n });\r\n };\r\n\r\n const isFocused = $isNodeSelection(selection) && isSelected;\r\n\r\n return (\r\n <div\r\n className={`PollNode__container ${isFocused ? 'focused' : ''}`}\r\n ref={ref}>\r\n <div className=\"PollNode__inner\">\r\n <h2 className=\"PollNode__heading\">{question}</h2>\r\n {options.map((option, index) => {\r\n const key = option.uid;\r\n return (\r\n <PollOptionComponent\r\n key={key}\r\n withPollNode={withPollNode}\r\n option={option}\r\n index={index}\r\n options={options}\r\n totalVotes={totalVotes}\r\n />\r\n );\r\n })}\r\n <div className=\"PollNode__footer\">\r\n <Button onClick={addOption} small={true}>\r\n Add Option\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["getTotalVotes","options","totalVotes","next","PollOptionComponent","option","index","withPollNode","clientID","useCollaborationContext","checkboxRef","useRef","votesArray","checked","votes","text","jsxs","jsx","joinClasses","e","node","target","value","selectionStart","selectionEnd","PollComponent","question","nodeKey","editor","useLexicalComposerContext","useMemo","isSelected","setSelected","clearSelection","useLexicalNodeSelection","selection","setSelection","useState","ref","onDelete","useCallback","payload","$isNodeSelection","$getSelection","$getNodeByKey","$isPollNode","useEffect","mergeRegister","editorState","CLICK_COMMAND","event","COMMAND_PRIORITY_LOW","KEY_DELETE_COMMAND","KEY_BACKSPACE_COMMAND","cb","onUpdate","addOption","createPollOption","isFocused","key","Button"],"mappings":"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"}
1
+ {"version":3,"file":"PollComponent-3e94abe5.js","sources":["../src/lexical/nodes/PollComponent.tsx"],"sourcesContent":["/**\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n *\r\n */\r\n\r\nimport type {Option, Options, PollNode} from './PollNode';\r\n\r\nimport './PollNode.css';\r\n\r\nimport {useCollaborationContext} from '@lexical/react/LexicalCollaborationContext';\r\nimport {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';\r\nimport {useLexicalNodeSelection} from '@lexical/react/useLexicalNodeSelection';\r\nimport {mergeRegister} from '@lexical/utils';\r\nimport {\r\n $getNodeByKey,\r\n $getSelection,\r\n $isNodeSelection,\r\n BaseSelection,\r\n CLICK_COMMAND,\r\n COMMAND_PRIORITY_LOW,\r\n KEY_BACKSPACE_COMMAND,\r\n KEY_DELETE_COMMAND,\r\n NodeKey,\r\n} from 'lexical';\r\nimport * as React from 'react';\r\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react';\r\n\r\nimport Button from '../ui/Button';\r\nimport joinClasses from '../utils/joinClasses';\r\nimport {$isPollNode, createPollOption} from './PollNode';\r\n\r\nfunction getTotalVotes(options: Options): number {\r\n return options.reduce((totalVotes, next) => {\r\n return totalVotes + next.votes.length;\r\n }, 0);\r\n}\r\n\r\nfunction PollOptionComponent({\r\n option,\r\n index,\r\n options,\r\n totalVotes,\r\n withPollNode,\r\n}: {\r\n index: number;\r\n option: Option;\r\n options: Options;\r\n totalVotes: number;\r\n withPollNode: (\r\n cb: (pollNode: PollNode) => void,\r\n onSelect?: () => void,\r\n ) => void;\r\n}): JSX.Element {\r\n const {clientID} = useCollaborationContext();\r\n const checkboxRef = useRef(null);\r\n const votesArray = option.votes;\r\n const checkedIndex = votesArray.indexOf(clientID);\r\n const checked = checkedIndex !== -1;\r\n const votes = votesArray.length;\r\n const text = option.text;\r\n\r\n return (\r\n <div className=\"PollNode__optionContainer\">\r\n <div\r\n className={joinClasses(\r\n 'PollNode__optionCheckboxWrapper',\r\n checked && 'PollNode__optionCheckboxChecked',\r\n )}>\r\n <input\r\n ref={checkboxRef}\r\n className=\"PollNode__optionCheckbox\"\r\n type=\"checkbox\"\r\n onChange={(e) => {\r\n withPollNode((node) => {\r\n node.toggleVote(option, clientID);\r\n });\r\n }}\r\n checked={checked}\r\n />\r\n </div>\r\n <div className=\"PollNode__optionInputWrapper\">\r\n <div\r\n className=\"PollNode__optionInputVotes\"\r\n style={{width: `${votes === 0 ? 0 : (votes / totalVotes) * 100}%`}}\r\n />\r\n <span className=\"PollNode__optionInputVotesCount\">\r\n {votes > 0 && (votes === 1 ? '1 vote' : `${votes} votes`)}\r\n </span>\r\n <input\r\n className=\"PollNode__optionInput\"\r\n type=\"text\"\r\n value={text}\r\n onChange={(e) => {\r\n const target = e.target;\r\n const value = target.value;\r\n const selectionStart = target.selectionStart;\r\n const selectionEnd = target.selectionEnd;\r\n withPollNode(\r\n (node) => {\r\n node.setOptionText(option, value);\r\n },\r\n () => {\r\n target.selectionStart = selectionStart;\r\n target.selectionEnd = selectionEnd;\r\n },\r\n );\r\n }}\r\n placeholder={`Option ${index + 1}`}\r\n />\r\n </div>\r\n <button\r\n disabled={options.length < 3}\r\n className={joinClasses(\r\n 'PollNode__optionDelete',\r\n options.length < 3 && 'PollNode__optionDeleteDisabled',\r\n )}\r\n aria-label=\"Remove\"\r\n onClick={() => {\r\n withPollNode((node) => {\r\n node.deleteOption(option);\r\n });\r\n }}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default function PollComponent({\r\n question,\r\n options,\r\n nodeKey,\r\n}: {\r\n nodeKey: NodeKey;\r\n options: Options;\r\n question: string;\r\n}): JSX.Element {\r\n const [editor] = useLexicalComposerContext();\r\n const totalVotes = useMemo(() => getTotalVotes(options), [options]);\r\n const [isSelected, setSelected, clearSelection] =\r\n useLexicalNodeSelection(nodeKey);\r\n const [selection, setSelection] = useState<BaseSelection | null>(null);\r\n const ref = useRef(null);\r\n\r\n const onDelete = useCallback(\r\n (payload: KeyboardEvent) => {\r\n if (isSelected && $isNodeSelection($getSelection())) {\r\n const event: KeyboardEvent = payload;\r\n event.preventDefault();\r\n const node = $getNodeByKey(nodeKey);\r\n if ($isPollNode(node)) {\r\n node.remove();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n [isSelected, nodeKey],\r\n );\r\n\r\n useEffect(() => {\r\n return mergeRegister(\r\n editor.registerUpdateListener(({editorState}) => {\r\n setSelection(editorState.read(() => $getSelection()));\r\n }),\r\n editor.registerCommand<MouseEvent>(\r\n CLICK_COMMAND,\r\n (payload) => {\r\n const event = payload;\r\n\r\n if (event.target === ref.current) {\r\n if (!event.shiftKey) {\r\n clearSelection();\r\n }\r\n setSelected(!isSelected);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_DELETE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n editor.registerCommand(\r\n KEY_BACKSPACE_COMMAND,\r\n onDelete,\r\n COMMAND_PRIORITY_LOW,\r\n ),\r\n );\r\n }, [clearSelection, editor, isSelected, nodeKey, onDelete, setSelected]);\r\n\r\n const withPollNode = (\r\n cb: (node: PollNode) => void,\r\n onUpdate?: () => void,\r\n ): void => {\r\n editor.update(\r\n () => {\r\n const node = $getNodeByKey(nodeKey);\r\n if ($isPollNode(node)) {\r\n cb(node);\r\n }\r\n },\r\n {onUpdate},\r\n );\r\n };\r\n\r\n const addOption = () => {\r\n withPollNode((node) => {\r\n node.addOption(createPollOption());\r\n });\r\n };\r\n\r\n const isFocused = $isNodeSelection(selection) && isSelected;\r\n\r\n return (\r\n <div\r\n className={`PollNode__container ${isFocused ? 'focused' : ''}`}\r\n ref={ref}>\r\n <div className=\"PollNode__inner\">\r\n <h2 className=\"PollNode__heading\">{question}</h2>\r\n {options.map((option, index) => {\r\n const key = option.uid;\r\n return (\r\n <PollOptionComponent\r\n key={key}\r\n withPollNode={withPollNode}\r\n option={option}\r\n index={index}\r\n options={options}\r\n totalVotes={totalVotes}\r\n />\r\n );\r\n })}\r\n <div className=\"PollNode__footer\">\r\n <Button onClick={addOption} small={true}>\r\n Add Option\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["getTotalVotes","options","totalVotes","next","PollOptionComponent","option","index","withPollNode","clientID","useCollaborationContext","checkboxRef","useRef","votesArray","checked","votes","text","jsxs","jsx","joinClasses","e","node","target","value","selectionStart","selectionEnd","PollComponent","question","nodeKey","editor","useLexicalComposerContext","useMemo","isSelected","setSelected","clearSelection","useLexicalNodeSelection","selection","setSelection","useState","ref","onDelete","useCallback","payload","$isNodeSelection","$getSelection","$getNodeByKey","$isPollNode","useEffect","mergeRegister","editorState","CLICK_COMMAND","event","COMMAND_PRIORITY_LOW","KEY_DELETE_COMMAND","KEY_BACKSPACE_COMMAND","cb","onUpdate","addOption","createPollOption","isFocused","key","Button"],"mappings":"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"}
@@ -11080,7 +11080,7 @@ class Kh extends D0 {
11080
11080
  function pO(c) {
11081
11081
  return new Kh(c);
11082
11082
  }
11083
- const hO = cr.lazy(() => import("./ImageComponent-2dd9ce3a.js"));
11083
+ const hO = cr.lazy(() => import("./ImageComponent-4c1337dd.js"));
11084
11084
  function gO(c) {
11085
11085
  const t = c;
11086
11086
  if (t.src.startsWith("file:///"))
@@ -11226,7 +11226,7 @@ function eu({
11226
11226
  function L0(c) {
11227
11227
  return c instanceof yu;
11228
11228
  }
11229
- const mO = cr.lazy(() => import("./InlineImageComponent-f56a0b88.js"));
11229
+ const mO = cr.lazy(() => import("./InlineImageComponent-0a7fa33a.js"));
11230
11230
  function yO(c) {
11231
11231
  if (c instanceof HTMLImageElement) {
11232
11232
  const { alt: t, src: n, width: e, height: s } = c;
@@ -11665,7 +11665,7 @@ function GS() {
11665
11665
  function EO(c) {
11666
11666
  return c instanceof uf;
11667
11667
  }
11668
- const CO = cr.lazy(() => import("./PollComponent-a98e901d.js"));
11668
+ const CO = cr.lazy(() => import("./PollComponent-3e94abe5.js"));
11669
11669
  function TO() {
11670
11670
  return Math.random().toString(36).replace(/[^a-z]+/g, "").substr(0, 5);
11671
11671
  }
@@ -12853,18 +12853,14 @@ function FO({
12853
12853
  `Table ${v}:`,
12854
12854
  "black",
12855
12855
  F
12856
- );
12857
- B.setStyle("font-weight: bold; margin-right: 5px;");
12858
- const R = _.getFirstChild();
12856
+ ), R = _.getFirstChild();
12859
12857
  R !== null ? R.insertBefore(B) : _.append(B);
12860
12858
  } else if (n) {
12861
12859
  const F = new Ji(
12862
12860
  `Table ${v}:`,
12863
12861
  "black",
12864
12862
  y
12865
- );
12866
- F.setStyle("font-weight: bold; margin-right: 5px;");
12867
- const B = _.getFirstChild();
12863
+ ), B = _.getFirstChild();
12868
12864
  B !== null ? B.insertBefore(F) : _.append(F);
12869
12865
  }
12870
12866
  } else {
@@ -14445,9 +14441,7 @@ function EE({
14445
14441
  "black",
14446
14442
  m
14447
14443
  );
14448
- g.setStyle(
14449
- "font-weight:bold;display:block;text-align:center;margin-top:5px;font-size:14px;"
14450
- ), g.__captionId = m, u.replace(g), i++;
14444
+ g.__captionId = m, u.replace(g), i++;
14451
14445
  });
14452
14446
  }), !0;
14453
14447
  },
@@ -66322,7 +66316,7 @@ function O3({
66322
66316
  isEditable: b = !1,
66323
66317
  showTabContent: _ = !0,
66324
66318
  wpAndTaskId: S,
66325
- enableCaptions: E
66319
+ enableCaptions: E = !0
66326
66320
  }) {
66327
66321
  const x = nr(null), { historyState: y } = lS(), [w, C] = Dt([]), [O, F] = Dt(""), [B, R] = Dt("skyp_1"), [L, N] = Dt([]), [T, P] = Dt(!1), [D, A] = Yl(), [$, M] = Dt(null), [z, V] = Dt([]), [K, j] = Dt(null), [q, W] = Dt(!1), [U, G] = Dt(!1);
66328
66322
  Dt(!1);
@@ -67181,7 +67175,7 @@ function A3({
67181
67175
  isEditable: b = !1,
67182
67176
  showTabContent: _ = !0,
67183
67177
  wpAndTaskId: S,
67184
- enableCaptions: E
67178
+ enableCaptions: E = !0
67185
67179
  }) {
67186
67180
  const x = nr(null), { historyState: y } = lS(), [w, C] = Dt([]), [O, F] = Dt("skyp_1"), [B, R] = Dt([]), [L, N] = Dt(!1), [T, P] = Yl(), [D, A] = Dt(null), [$, M] = Dt([]), [z, V] = Dt(null), [K, j] = Dt(!1), [q, W] = Dt(!1);
67187
67181
  Dt(!1);
@@ -67495,4 +67489,4 @@ export {
67495
67489
  Yl as y,
67496
67490
  E3 as z
67497
67491
  };
67498
- //# sourceMappingURL=index-eb13da6f.js.map
67492
+ //# sourceMappingURL=index-383f935b.js.map