@payloadcms/richtext-lexical 3.0.0-beta.90 → 3.0.0-beta.92

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.
Files changed (90) hide show
  1. package/dist/exports/client/Field-SUWHJ4HF.js +2 -0
  2. package/dist/exports/client/Field-SUWHJ4HF.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-EZORSGUZ.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-EZORSGUZ.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/{chunk-NI6Z4GBD.js → chunk-OLSILJA6.js} +1 -1
  7. package/dist/exports/client/{chunk-NI6Z4GBD.js.map → chunk-OLSILJA6.js.map} +1 -1
  8. package/dist/exports/client/{chunk-G5DTIOPI.js → chunk-TD7O23AB.js} +2 -2
  9. package/dist/exports/client/{chunk-G5DTIOPI.js.map → chunk-TD7O23AB.js.map} +2 -2
  10. package/dist/exports/client/{chunk-LGUXX2QH.js → chunk-UJDWBQ2K.js} +2 -2
  11. package/dist/exports/client/{chunk-LGUXX2QH.js.map → chunk-UJDWBQ2K.js.map} +2 -2
  12. package/dist/exports/client/{chunk-OKMIHD2R.js → chunk-YL453UOS.js} +2 -2
  13. package/dist/exports/client/chunk-YSI2QILQ.js +2 -0
  14. package/dist/exports/client/{chunk-TO2W7Q2G.js.map → chunk-YSI2QILQ.js.map} +2 -2
  15. package/dist/exports/client/component-2YLEVOFH.js +2 -0
  16. package/dist/exports/client/component-2YLEVOFH.js.map +7 -0
  17. package/dist/exports/client/{component-LCAAX56T.js → component-7RAP75FW.js} +2 -2
  18. package/dist/exports/client/{componentInline-72VZAAHP.js → componentInline-YSHGRL2J.js} +2 -2
  19. package/dist/exports/client/index.js +12 -12
  20. package/dist/exports/client/index.js.map +3 -3
  21. package/dist/features/debug/testRecorder/client/plugin/index.js +187 -363
  22. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  23. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js +234 -470
  24. package/dist/features/experimental_table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  25. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +3 -16
  26. package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  27. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +59 -123
  28. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  29. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  30. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +5 -3
  31. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  32. package/dist/features/link/server/baseFields.d.ts.map +1 -1
  33. package/dist/features/link/server/baseFields.js +12 -2
  34. package/dist/features/link/server/baseFields.js.map +1 -1
  35. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js +1 -1
  36. package/dist/features/migrations/slateToLexical/converter/converters/link/converter.js.map +1 -1
  37. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  38. package/dist/features/relationship/client/components/RelationshipComponent.js +8 -5
  39. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  40. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts +6 -4
  41. package/dist/features/relationship/server/nodes/RelationshipNode.d.ts.map +1 -1
  42. package/dist/features/relationship/server/nodes/RelationshipNode.js.map +1 -1
  43. package/dist/features/toolbars/inline/client/Toolbar/index.js +53 -94
  44. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  45. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  46. package/dist/features/upload/client/component/index.js +3 -0
  47. package/dist/features/upload/client/component/index.js.map +1 -1
  48. package/dist/features/upload/server/nodes/UploadNode.d.ts +9 -7
  49. package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
  50. package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
  51. package/dist/field/bundled.css +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +8 -19
  54. package/dist/index.js.map +1 -1
  55. package/dist/lexical/config/client/EditorConfigProvider.js +1 -1
  56. package/dist/lexical/config/client/EditorConfigProvider.js.map +1 -1
  57. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +71 -109
  58. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  59. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js +96 -135
  60. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  61. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  62. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +114 -139
  63. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  64. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.d.ts.map +1 -1
  65. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js +7 -25
  66. package/dist/lexical/plugins/handles/DraggableBlockPlugin/setTargetLine.js.map +1 -1
  67. package/dist/lexical/plugins/handles/utils/setHandlePosition.d.ts.map +1 -1
  68. package/dist/lexical/plugins/handles/utils/setHandlePosition.js +4 -6
  69. package/dist/lexical/plugins/handles/utils/setHandlePosition.js.map +1 -1
  70. package/dist/lexical/ui/icons/Caret/index.svg +2 -2
  71. package/dist/lexical/utils/setFloatingElemPosition.js +1 -1
  72. package/dist/lexical/utils/setFloatingElemPosition.js.map +1 -1
  73. package/dist/lexical/utils/url.d.ts +5 -0
  74. package/dist/lexical/utils/url.d.ts.map +1 -1
  75. package/dist/lexical/utils/url.js +7 -0
  76. package/dist/lexical/utils/url.js.map +1 -1
  77. package/dist/utilities/migrateSlateToLexical/index.d.ts.map +1 -1
  78. package/dist/utilities/migrateSlateToLexical/index.js +16 -1
  79. package/dist/utilities/migrateSlateToLexical/index.js.map +1 -1
  80. package/package.json +13 -13
  81. package/dist/exports/client/Field-63NGLPJB.js +0 -2
  82. package/dist/exports/client/Field-63NGLPJB.js.map +0 -7
  83. package/dist/exports/client/RelationshipComponent-3QWBV4GT.js +0 -2
  84. package/dist/exports/client/RelationshipComponent-3QWBV4GT.js.map +0 -7
  85. package/dist/exports/client/chunk-TO2W7Q2G.js +0 -2
  86. package/dist/exports/client/component-3OFD6Q4Z.js +0 -2
  87. package/dist/exports/client/component-3OFD6Q4Z.js.map +0 -7
  88. /package/dist/exports/client/{chunk-OKMIHD2R.js.map → chunk-YL453UOS.js.map} +0 -0
  89. /package/dist/exports/client/{component-LCAAX56T.js.map → component-7RAP75FW.js.map} +0 -0
  90. /package/dist/exports/client/{componentInline-72VZAAHP.js.map → componentInline-YSHGRL2J.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$createParagraphNode","$createTextNode","$getRoot","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","key","toLowerCase","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","$","t0","Symbol","for","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","t1","getCurrentEditor","t2","getRootElement","browserSelection","window","getSelection","contains","map","generateTestContent","t3","currentSteps","currentIndex","length","lastStep","slice","pushStep","t4","t5","onKeyDown","has","onKeyUp","event_0","key_0","registerRootListener","rootElement_0","prevRootElement","removeEventListener","addEventListener","t6","current","scrollTo","scrollHeight","t7","testContent","t8","removeUpdateListener","registerUpdateListener","t9","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","browserSelection_0","testContent_0","t10","removeUpdateListener_0","rootElement_1","innerHTML","t11","t12","currentEditor","update","root","clear","append","currentIsRecording","toggleEditorSelection","t13","browserSelection_1","rootElement_2","onSnapshotClick","t14","onCopyClick","t15","onDownloadClick","t16","t17","e","preventDefault","t18","t19","t20","_jsx","className","id","onClick","title","type","children","button","output","_jsxs","e_0","e_1","e_2","ref","t21","TestRecorderPlugin","testRecorderButton","testRecorderOutput","Fragment"],"sources":["../../../../../../src/features/debug/testRecorder/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { IS_APPLE } from '../../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.key.toLowerCase() === 'a' && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useLexicalComposerContext","$createParagraphNode","$createTextNode","$getRoot","React","useCallback","useEffect","useLayoutEffect","useRef","useState","IS_APPLE","copy","text","textArea","document","createElement","value","style","position","opacity","body","appendChild","focus","select","result","execCommand","console","log","error","removeChild","download","filename","a","setAttribute","encodeURIComponent","display","click","formatStep","step","formatOneStep","name","x","y","anchorPath","toString","anchorOffset","focusPath","focusOffset","formattedStep","count","join","isSelectAll","event","key","toLowerCase","metaKey","ctrlKey","sanitizeSelection","selection","anchorNode","focusNode","getPathFromNodeToEditor","node","rootElement","currentNode","path","undefined","unshift","Array","from","parentNode","childNodes","indexOf","keyPresses","Set","useTestRecorder","editor","steps","setSteps","isRecording","setIsRecording","setCurrentInnerHTML","templatedTest","setTemplatedTest","previousSelectionRef","skipNextSelectionChangeRef","preRef","getCurrentEditor","generateTestContent","getRootElement","browserSelection","window","getSelection","contains","map","pushStep","currentSteps","currentIndex","length","lastStep","slice","onKeyDown","has","onKeyUp","registerRootListener","prevRootElement","removeEventListener","addEventListener","current","scrollTo","scrollHeight","testContent","removeUpdateListener","registerUpdateListener","dirtyElements","dirtyLeaves","editorState","currentSelection","_selection","previousSelection","skipNextSelectionChange","size","innerHTML","toggleEditorSelection","currentEditor","update","root","clear","append","currentIsRecording","onSnapshotClick","onCopyClick","onDownloadClick","button","_jsx","className","id","onClick","e","preventDefault","title","type","output","_jsxs","ref","TestRecorderPlugin","testRecorderButton","testRecorderOutput","Fragment"],"sources":["../../../../../../src/features/debug/testRecorder/client/plugin/index.tsx"],"sourcesContent":["'use client'\nimport type { BaseSelection, LexicalEditor } from 'lexical'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { $createParagraphNode, $createTextNode, $getRoot } from 'lexical'\nimport * as React from 'react'\nimport { type JSX, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { IS_APPLE } from '../../../../../lexical/utils/environment.js'\nimport './index.scss'\n\nconst copy = (text: null | string) => {\n const textArea = document.createElement('textarea')\n textArea.value = text || ''\n textArea.style.position = 'absolute'\n textArea.style.opacity = '0'\n document.body?.appendChild(textArea)\n textArea.focus()\n textArea.select()\n try {\n const result = document.execCommand('copy')\n // eslint-disable-next-line no-console\n console.log(result)\n } catch (error) {\n console.error(error)\n }\n document.body?.removeChild(textArea)\n}\n\nconst download = (filename: string, text: null | string) => {\n const a = document.createElement('a')\n a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text || ''))\n a.setAttribute('download', filename)\n a.style.display = 'none'\n document.body?.appendChild(a)\n a.click()\n document.body?.removeChild(a)\n}\n\nconst formatStep = (step: Step) => {\n const formatOneStep = (name: string, value: Step['value']) => {\n switch (name) {\n case 'click': {\n return ` await page.mouse.click(${value.x}, ${value.y});`\n }\n case 'press': {\n return ` await page.keyboard.press('${value}');`\n }\n case 'keydown': {\n return ` await page.keyboard.keydown('${value}');`\n }\n case 'keyup': {\n return ` await page.keyboard.keyup('${value}');`\n }\n case 'type': {\n return ` await page.keyboard.type('${value}');`\n }\n case 'selectAll': {\n return ` await selectAll(page);`\n }\n case 'snapshot': {\n return ` await assertHTMLSnapshot(page);\n await assertSelection(page, {\n anchorPath: [${value.anchorPath.toString()}],\n anchorOffset: ${value.anchorOffset},\n focusPath: [${value.focusPath.toString()}],\n focusOffset: ${value.focusOffset},\n });\n`\n }\n default:\n return ``\n }\n }\n const formattedStep = formatOneStep(step.name, step.value)\n switch (step.count) {\n case 1:\n return formattedStep\n case 2:\n return [formattedStep, formattedStep].join(`\\n`)\n default:\n return ` await repeat(${step.count}, async () => {\n ${formattedStep}\n );`\n }\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return event.key.toLowerCase() === 'a' && (IS_APPLE ? event.metaKey : event.ctrlKey)\n}\n\n// stolen from LexicalSelection-test\nfunction sanitizeSelection(selection: Selection) {\n const { anchorNode, focusNode } = selection\n let { anchorOffset, focusOffset } = selection\n if (anchorOffset !== 0) {\n anchorOffset--\n }\n if (focusOffset !== 0) {\n focusOffset--\n }\n return { anchorNode, anchorOffset, focusNode, focusOffset }\n}\n\nfunction getPathFromNodeToEditor(node: Node, rootElement: HTMLElement | null) {\n let currentNode: Node | null | undefined = node\n const path = []\n while (currentNode !== rootElement) {\n if (currentNode !== null && currentNode !== undefined) {\n path.unshift(\n Array.from(currentNode?.parentNode?.childNodes ?? []).indexOf(currentNode as ChildNode),\n )\n }\n currentNode = currentNode?.parentNode\n }\n return path\n}\n\nconst keyPresses = new Set([\n 'Enter',\n 'Backspace',\n 'Delete',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n])\n\ntype Step = {\n count: number\n name: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n}\n\ntype Steps = Step[]\n\nfunction useTestRecorder(editor: LexicalEditor): [JSX.Element, JSX.Element | null] {\n const [steps, setSteps] = useState<Steps>([])\n const [isRecording, setIsRecording] = useState(false)\n const [, setCurrentInnerHTML] = useState('')\n const [templatedTest, setTemplatedTest] = useState('')\n const previousSelectionRef = useRef<BaseSelection | null>(null)\n const skipNextSelectionChangeRef = useRef(false)\n const preRef = useRef<HTMLPreElement>(null)\n\n const getCurrentEditor = useCallback(() => {\n return editor\n }, [editor])\n\n const generateTestContent = useCallback(() => {\n const rootElement = editor.getRootElement()\n const browserSelection = window.getSelection()\n\n if (\n rootElement == null ||\n browserSelection == null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null ||\n !rootElement.contains(browserSelection.anchorNode) ||\n !rootElement.contains(browserSelection.focusNode)\n ) {\n return null\n }\n\n return `\nimport {\n initializeE2E,\n assertHTMLSnapshot,\n assertSelection,\n repeat,\n} from '../utils';\nimport {selectAll} from '../keyboardShortcuts';\nimport { RangeSelection } from 'lexical';\nimport { NodeSelection } from 'lexical';\n\ndescribe('Test case', () => {\n initializeE2E((e2e) => {\n it('Should pass this test', async () => {\n const {page} = e2e;\n\n await page.focus('div[contenteditable=\"true\"]');\n${steps.map(formatStep).join(`\\n`)}\n });\n});\n `\n }, [editor, steps])\n\n // just a wrapper around inserting new actions so that we can\n // coalesce some actions like insertText/moveNativeSelection\n const pushStep = useCallback(\n (name: string, value: Step['value']) => {\n setSteps((currentSteps) => {\n // trying to group steps\n const currentIndex = steps.length - 1\n const lastStep = steps[currentIndex]\n if (lastStep) {\n if (lastStep.name === name) {\n if (name === 'type') {\n // for typing events we just append the text\n return [\n ...steps.slice(0, currentIndex),\n { ...lastStep, value: lastStep.value + value },\n ]\n } else {\n // for other events we bump the counter if their values are the same\n if (lastStep.value === value) {\n return [...steps.slice(0, currentIndex), { ...lastStep, count: lastStep.count + 1 }]\n }\n }\n }\n }\n // could not group, just append a new one\n return [...currentSteps, { name, count: 1, value }]\n })\n },\n [steps, setSteps],\n )\n\n useLayoutEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (isSelectAll(event)) {\n pushStep('selectAll', '')\n } else if (keyPresses.has(key)) {\n pushStep('press', event.key)\n } else if ([...key].length > 1) {\n pushStep('keydown', event.key)\n } else {\n pushStep('type', event.key)\n }\n }\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!isRecording) {\n return\n }\n const key = event.key\n if (!keyPresses.has(key) && [...key].length > 1) {\n pushStep('keyup', event.key)\n }\n }\n\n return editor.registerRootListener(\n (rootElement: HTMLElement | null, prevRootElement: HTMLElement | null) => {\n if (prevRootElement !== null) {\n prevRootElement.removeEventListener('keydown', onKeyDown)\n prevRootElement.removeEventListener('keyup', onKeyUp)\n }\n if (rootElement !== null) {\n rootElement.addEventListener('keydown', onKeyDown)\n rootElement.addEventListener('keyup', onKeyUp)\n }\n },\n )\n }, [editor, isRecording, pushStep])\n\n useLayoutEffect(() => {\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }, [generateTestContent])\n\n useEffect(() => {\n if (steps) {\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n if (preRef.current) {\n preRef.current.scrollTo(0, preRef.current.scrollHeight)\n }\n }\n }, [generateTestContent, steps])\n\n useEffect(() => {\n const removeUpdateListener = editor.registerUpdateListener(\n ({ dirtyElements, dirtyLeaves, editorState }) => {\n if (!isRecording) {\n return\n }\n const currentSelection = editorState._selection\n const previousSelection = previousSelectionRef.current\n const skipNextSelectionChange = skipNextSelectionChangeRef.current\n if (previousSelection !== currentSelection) {\n if (dirtyLeaves.size === 0 && dirtyElements.size === 0 && !skipNextSelectionChange) {\n const browserSelection = window.getSelection()\n if (\n browserSelection &&\n (browserSelection.anchorNode == null || browserSelection.focusNode == null)\n ) {\n return\n }\n }\n previousSelectionRef.current = currentSelection\n }\n skipNextSelectionChangeRef.current = false\n const testContent = generateTestContent()\n if (testContent !== null) {\n setTemplatedTest(testContent)\n }\n },\n )\n return removeUpdateListener\n }, [editor, generateTestContent, isRecording, pushStep])\n\n // save innerHTML\n useEffect(() => {\n if (!isRecording) {\n return\n }\n const removeUpdateListener = editor.registerUpdateListener(() => {\n const rootElement = editor.getRootElement()\n if (rootElement !== null) {\n setCurrentInnerHTML(rootElement?.innerHTML)\n }\n })\n return removeUpdateListener\n }, [editor, isRecording])\n\n // clear editor and start recording\n const toggleEditorSelection = useCallback(\n (currentEditor: LexicalEditor) => {\n if (!isRecording) {\n currentEditor.update(() => {\n const root = $getRoot()\n root.clear()\n const text = $createTextNode()\n root.append($createParagraphNode().append(text))\n text.select()\n })\n setSteps([])\n }\n setIsRecording((currentIsRecording) => !currentIsRecording)\n },\n [isRecording],\n )\n\n const onSnapshotClick = useCallback(() => {\n if (!isRecording) {\n return\n }\n const browserSelection = window.getSelection()\n if (\n browserSelection === null ||\n browserSelection.anchorNode == null ||\n browserSelection.focusNode == null\n ) {\n return\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = sanitizeSelection(browserSelection)\n const rootElement = getCurrentEditor().getRootElement()\n let anchorPath\n if (anchorNode !== null) {\n anchorPath = getPathFromNodeToEditor(anchorNode, rootElement)\n }\n let focusPath\n if (focusNode !== null) {\n focusPath = getPathFromNodeToEditor(focusNode, rootElement)\n }\n pushStep('snapshot', {\n anchorNode,\n anchorOffset,\n anchorPath,\n focusNode,\n focusOffset,\n focusPath,\n })\n }, [pushStep, isRecording, getCurrentEditor])\n\n const onCopyClick = useCallback(() => {\n copy(generateTestContent())\n }, [generateTestContent])\n\n const onDownloadClick = useCallback(() => {\n download('test.js', generateTestContent())\n }, [generateTestContent])\n\n const button = (\n <button\n className={`editor-dev-button ${isRecording ? 'active' : ''}`}\n id=\"test-recorder-button\"\n onClick={(e) => {\n toggleEditorSelection(getCurrentEditor())\n e.preventDefault()\n }}\n title={isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n type=\"button\"\n >\n {isRecording ? 'Disable test recorder' : 'Enable test recorder'}\n </button>\n )\n const output = isRecording ? (\n <div className=\"test-recorder-output\">\n <div className=\"test-recorder-toolbar\">\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-snapshot\"\n onClick={(e) => {\n onSnapshotClick()\n e.preventDefault()\n }}\n title=\"Insert snapshot\"\n type=\"button\"\n >\n Insert Snapshot\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-copy\"\n onClick={(e) => {\n onCopyClick()\n e.preventDefault()\n }}\n title=\"Copy to clipboard\"\n type=\"button\"\n >\n Copy\n </button>\n <button\n className=\"test-recorder-button\"\n id=\"test-recorder-button-download\"\n onClick={(e) => {\n onDownloadClick()\n e.preventDefault()\n }}\n title=\"Download as a file\"\n type=\"button\"\n >\n Download\n </button>\n </div>\n <pre id=\"test-recorder\" ref={preRef}>\n {templatedTest}\n </pre>\n </div>\n ) : null\n\n return [button, output]\n}\nexport const TestRecorderPlugin: PluginComponent<undefined> = () => {\n const [editor] = useLexicalComposerContext()\n const [testRecorderButton, testRecorderOutput] = useTestRecorder(editor)\n\n return (\n <React.Fragment>\n <p>HI</p>\n {testRecorderButton}\n {testRecorderOutput}\n <p>DONE</p>\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}