Lexical is an extensible text editor framework that provides excellent reliability, accessibility and performance.
230 matches across 6 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | libdefs/yjs.js | 725 | declare export function createRelativePositionFromTypeIndex( |
| LOW | libdefs/yjs.js | 730 | declare export function createRelativePositionFromJSON( |
| LOW | libdefs/yjs.js | 734 | declare export function createAbsolutePositionFromRelativePosition( |
| LOW | …mples/node-state-style/src/plugins/StyleViewPlugin.tsx | 460 | function LexicalTextSelectionPaneContents({node}: {node: LexicalNode}) { |
| LOW | …mples/node-state-style/src/plugins/StyleViewPlugin.tsx | 562 | function initTextSelectionPaneReducer(action: SelectedNodeStateAction) { |
| LOW | …mples/node-state-style/src/plugins/StyleViewPlugin.tsx | 624 | function useSuggestedStylesCombobox(props: CSSPropertyComboBoxProps) { |
| LOW | …mples/node-state-style/src/plugins/StyleViewPlugin.tsx | 460 | function LexicalTextSelectionPaneContents({node}: {node: LexicalNode}) { |
| LOW | …mples/node-state-style/src/plugins/StyleViewPlugin.tsx | 562 | function initTextSelectionPaneReducer(action: SelectedNodeStateAction) { |
| LOW | …mples/node-state-style/src/plugins/StyleViewPlugin.tsx | 624 | function useSuggestedStylesCombobox(props: CSSPropertyComboBoxProps) { |
| LOW | …n-host/src/stackblitz-workaround/TreeViewExtension.tsx | 17 | export function TreeViewExtensionComponent( |
| LOW | examples/agent-example/src/ai/AIExtension.ts | 266 | function extractEntitiesFromWorker( |
| LOW | packages/lexical-code-core/src/CodeImportExtension.ts | 138 | function splitMonospaceWrapperLines(el: HTMLElement): string[] | null { |
| LOW | packages/lexical-hashtag/src/LexicalHashtagExtension.ts | 15 | function getHashtagRegexStringChars(): Readonly<{ |
| LOW | packages/lexical-react/src/TreeViewExtension.tsx | 17 | export function TreeViewExtensionComponent( |
| LOW | …exical-react/src/LexicalBlockWithAlignableContents.tsx | 41 | export function BlockWithAlignableContents({ |
| LOW | packages/lexical-react/src/LexicalComposerContext.ts | 29 | export function createLexicalComposerContext( |
| LOW | packages/lexical-react/src/LexicalComposerContext.ts | 52 | export function useLexicalComposerContext(): LexicalComposerContextWithEditor { |
| LOW | packages/lexical-react/src/ReactExtension.tsx | 42 | export function DefaultEditorChildrenComponent({ |
| LOW | …kages/lexical-react/src/LexicalTypeaheadMenuPlugin.tsx | 91 | function isSelectionOnEntityBoundary( |
| LOW | …kages/lexical-react/src/LexicalTypeaheadMenuPlugin.tsx | 147 | export function useBasicTypeaheadTriggerMatch( |
| LOW | …ages/lexical-react/src/useLexicalIsTextContentEmpty.ts | 16 | export function useLexicalIsTextContentEmpty( |
| LOW | …s/lexical-react/src/LexicalExtensionEditorComposer.tsx | 37 | export function LexicalExtensionEditorComposer({ |
| LOW | …ages/lexical-react/src/shared/useCanShowPlaceholder.ts | 17 | function canShowPlaceholderFromCurrentEditorState( |
| LOW | packages/lexical-react/src/shared/LexicalMenu.tsx | 191 | function isTriggerVisibleInNearestScrollContainer( |
| LOW | packages/lexical-react/src/shared/LexicalMenu.tsx | 597 | function setContainerDivAttributes( |
| LOW | …cal-react/src/shared/LexicalContentEditableElement.tsx | 36 | function ContentEditableElementImpl( |
| LOW | …lexical-react/src/__tests__/unit/Collaboration.test.ts | 48 | async function expectCorrectInitialContent(client1: Client, client2: Client) { |
| LOW | …eact/src/__tests__/unit/LexicalNodeMenuPlugin.test.tsx | 40 | function NodeMenuPluginWithMenuRenderFn({ |
| LOW | …eact/src/__tests__/unit/LexicalNodeMenuPlugin.test.tsx | 89 | function NodeMenuPluginWithoutMenuRenderFn({ |
| LOW | …src/__tests__/unit/LexicalTypeaheadMenuPlugin.test.tsx | 48 | function TypeaheadPluginWithMenuRenderFn({ |
| LOW | …src/__tests__/unit/LexicalTypeaheadMenuPlugin.test.tsx | 107 | function TypeaheadPluginWithoutMenuRenderFn({ |
| LOW | packages/lexical/src/LexicalMutations.ts | 99 | function shouldUpdateTextNodeFromMutation( |
| LOW | packages/lexical/src/LexicalEditor.ts | 685 | function initializeConversionCache( |
| LOW | packages/lexical/src/LexicalNodeState.ts | 927 | function parseAndPruneNextUnknownState( |
| LOW | packages/lexical/src/LexicalReconciler.ts | 602 | function isLastChildLineBreakOrDecorator( |
| LOW | packages/lexical/src/LexicalReconciler.ts | 1781 | function getPrevElementByKeyOrThrow(key: NodeKey): HTMLElement { |
| LOW | packages/lexical/src/LexicalSelection.ts | 2186 | function shouldDeleteExactlyOneCodeUnit(text: string) { |
| LOW | packages/lexical/src/LexicalSelection.ts | 2485 | function resolveSelectionPointOnBoundary( |
| LOW | packages/lexical/src/LexicalSelection.ts | 2996 | export function moveSelectionPointToSibling( |
| LOW | packages/lexical/src/LexicalSelection.ts | 3037 | export function adjustPointOffsetForMergedSibling( |
| LOW | packages/lexical/src/LexicalSelection.ts | 3051 | function setDOMSelectionBaseAndExtent( |
| LOW | packages/lexical/src/LexicalEvents.ts | 285 | function shouldSkipSelectionChange( |
| LOW | packages/lexical/src/LexicalEvents.ts | 655 | function isPossiblyAndroidKeyPress(timeStamp: number): boolean { |
| LOW | packages/lexical/src/LexicalEvents.ts | 662 | function clearHandledSelectionCommandInsertText(): void { |
| LOW | packages/lexical/src/LexicalEvents.ts | 670 | function markHandledSelectionCommandInsertText(): void { |
| LOW | packages/lexical/src/LexicalEvents.ts | 679 | export function registerDefaultCommandHandlers(editor: LexicalEditor) { |
| LOW | packages/lexical/src/LexicalEvents.ts | 1441 | function getRootElementRemoveHandles( |
| LOW | packages/lexical/src/LexicalEvents.ts | 1460 | function onDocumentSelectionChange(event: Event): void { |
| LOW | packages/lexical/src/LexicalEvents.ts | 1522 | function hasStoppedLexicalPropagation(event: Event): boolean { |
| LOW | packages/lexical/src/LexicalEvents.ts | 1687 | function cleanActiveNestedEditorsMap(editor: LexicalEditor) { |
| LOW | packages/lexical/src/LexicalEvents.ts | 1703 | export function markSelectionChangeFromDOMUpdate(): void { |
| LOW | packages/lexical/src/LexicalEvents.ts | 1707 | export function markCollapsedSelectionFormat( |
| LOW | packages/lexical/src/LexicalUpdates.ts | 94 | export function errorOnInfiniteTransforms(): void { |
| LOW | packages/lexical/src/LexicalUpdates.ts | 195 | export function internalGetActiveEditorState(): EditorState | null { |
| LOW | packages/lexical/src/LexicalUpdates.ts | 513 | function handleDEVOnlyPendingUpdateGuarantees( |
| LOW | packages/lexical/src/LexicalUpdates.ts | 746 | function triggerTextContentListeners( |
| LOW | packages/lexical/src/LexicalUpdates.ts | 899 | function triggerDeferredUpdateCallbacks( |
| LOW | packages/lexical/src/LexicalEditorState.ts | 29 | export function editorStateHasDirtySelection( |
| LOW | packages/lexical/src/LexicalUtils.ts | 162 | export function isSelectionCapturedInDecoratorInput(anchorDOM: Node): boolean { |
| LOW | packages/lexical/src/LexicalUtils.ts | 208 | export function getNearestEditorFromDOMNode( |
| 105 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …arkdown-editor/src/extensions/ToolbarStateExtension.ts | 101 | // The HistoryState object the signal holds is mutated in |
| LOW | …a-react-plugin-host/src/stackblitz-workaround/index.ts | 41 | // boolean: 'PlaygroundEditorTheme__tokenProperty', |
| LOW | …a-react-plugin-host/src/stackblitz-workaround/index.ts | 61 | // punctuation: 'PlaygroundEditorTheme__tokenPunctuation', |
| LOW | …a-react-plugin-host/src/stackblitz-workaround/index.ts | 141 | // 'PlaygroundEditorTheme__tableCellActionButtonContainer', |
| LOW | …tension-sveltekit-ssr-hydration/vitest-setup-client.ts | 1 | /// <reference types="@vitest/browser/matchers" /> |
| LOW | …on-vanilla-tailwind/src/stackblitz-workaround/index.ts | 41 | // boolean: 'PlaygroundEditorTheme__tokenProperty', |
| LOW | …on-vanilla-tailwind/src/stackblitz-workaround/index.ts | 61 | // punctuation: 'PlaygroundEditorTheme__tokenPunctuation', |
| LOW | …on-vanilla-tailwind/src/stackblitz-workaround/index.ts | 141 | // 'PlaygroundEditorTheme__tableCellActionButtonContainer', |
| LOW | packages/lexical-devtools/wxt.config.ts | 61 | ], |
| LOW | packages/lexical-tailwind/src/index.ts | 41 | // boolean: 'PlaygroundEditorTheme__tokenProperty', |
| LOW | packages/lexical-tailwind/src/index.ts | 61 | // punctuation: 'PlaygroundEditorTheme__tokenPunctuation', |
| LOW | packages/lexical-tailwind/src/index.ts | 141 | // 'PlaygroundEditorTheme__tableCellActionButtonContainer', |
| LOW | …de-core/src/__tests__/unit/CodeImportExtension.test.ts | 141 | }); |
| LOW | …t/src/__tests__/unit/LexicalExtensionComposer.test.tsx | 61 | ); |
| LOW | packages/lexical/src/LexicalReconciler.ts | 101 | // `startKey` (in next-map order, which equals prev order across the size-0 and |
| LOW | packages/lexical/src/LexicalReconciler.ts | 741 | if (i !== k) { |
| LOW | packages/lexical/src/LexicalReconciler.ts | 1041 | // the paragraphs it came from) the walk reaches a next-only key and |
| LOW | packages/lexical/src/LexicalReconciler.ts | 1521 | // in the map carries `null` (RootNode constructor's default). |
| LOW | packages/lexical/src/LexicalReconciler.ts | 1741 | // so instead we make it seem that these values are always set. |
| LOW | packages/lexical/src/LexicalSelection.ts | 781 | // const anchorNode = this.anchor.getNode(); |
| LOW | packages/lexical/src/LexicalSelection.ts | 801 | // before.insertAfter(textNode); |
| LOW | packages/lexical/src/LexicalSelection.ts | 2301 | // caret back instead of leaving the user's cursor "stuck" inside |
| LOW | packages/lexical/src/LexicalSelection.ts | 2321 | resolvedOffset = childNodesLength - 1; |
| LOW | packages/lexical/src/LexicalSelection.ts | 2701 | ): null | RangeSelection { |
| LOW | packages/lexical/src/LexicalEvents.ts | 241 | // If we're working with a non-text node. |
| LOW | packages/lexical/src/LexicalEvents.ts | 781 | $updateSelectionFormatStyleFromTextNode(selection, anchorNode); |
| LOW | …xical/src/nodes/__tests__/unit/LexicalTabNode.test.tsx | 81 | // test('can paste HTML with tabs and new lines #4429', async () => { |
| LOW | …rc/__tests__/unit/FastPathCrossParentTextCache.test.ts | 61 | |
| LOW | …s/lexical/src/__tests__/unit/LexicalReconciler.test.ts | 761 | // Verifies the cached-text-size invariant under sustained typing on the |
| LOW | …s/lexical/src/__tests__/unit/LexicalReconciler.test.ts | 1321 | // child's recursive reconcile resets the module state at entry and |
| LOW | …s/lexical/src/__tests__/unit/LexicalReconciler.test.ts | 1381 | editor.read(() => { |
| LOW | …s/lexical/src/__tests__/unit/LexicalReconciler.test.ts | 1461 | // textA, format 0). `__lexicalFirstTextKey` should reflect that. |
| LOW | …s/lexical/src/__tests__/unit/LexicalReconciler.test.ts | 1921 | // AUDIT-7: the suffix size-delta helper hardcodes expectedK = 2 for |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 861 | // moveNativeSelection([0, 0, 0], 0, [0, 0, 0], 0), |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 881 | // insertText('lexical'), |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 901 | // '<strong class="editor-text-bold" data-lexical-text="true">draft</strong><span data-lexical-text="true">!</sp |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 921 | // anchorOffset: 0, |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 941 | // focusOffset: 5, |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 961 | // { |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 981 | // insertText('Hello draft!'), |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 1001 | // insertText('This works!'), |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 1021 | // expectedHTML: |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 1041 | // }, |
| LOW | …selection/src/__tests__/unit/LexicalSelection.test.tsx | 1061 | // ], |
| LOW | packages/lexical-list/src/checkList.ts | 61 | |
| LOW | …al-list/src/__tests__/unit/ListImportExtension.test.ts | 161 | // nested <span style='mso-list:Ignore'>...</span>. There are no <ol>/<ul> |
| LOW | …-utils/src/__tests__/unit/LexicalEventHelpers.test.tsx | 541 | b |
| LOW | …/lexical-extension/src/ClickAfterLastBlockExtension.ts | 141 | effect(() => { |
| LOW | packages/lexical-html/src/DOMRenderRuntime.ts | 201 | overrides: next as AnyDOMRenderMatch[], |
| LOW | …al-markdown/src/__tests__/unit/LexicalMarkdown.test.ts | 321 | // Multiline paragraphs |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | packages/lexical-table/src/LexicalTablePluginHelpers.ts | 564 | // Step 1: Unmerge all merged cells within the affected area |
| LOW | packages/lexical-table/src/LexicalTablePluginHelpers.ts | 592 | // Step 2: Expand current table (if needed) |
| LOW | packages/lexical-table/src/LexicalTablePluginHelpers.ts | 610 | // Step 3: Merge cells and set cell content, to match template grid |
| LOW | …rc/__tests__/unit/LexicalTableMobileSelection.test.tsx | 291 | // Step 1: Start a mouse drag selection (pointerdown with buttons: 1) |
| LOW | …rc/__tests__/unit/LexicalTableMobileSelection.test.tsx | 297 | // Step 2: Move to another cell (normal drag, buttons: 1) |
| LOW | …rc/__tests__/unit/LexicalTableMobileSelection.test.tsx | 303 | // Step 3: Simulate mouse re-entering window after leaving |
| LOW | …-playground/__tests__/unit/LayoutContainerNode.test.ts | 106 | // Step 1: Create a layout container and export to HTML |
| LOW | …-playground/__tests__/unit/LayoutContainerNode.test.ts | 118 | // Step 2: Clear the editor and re-import the exported HTML |
| LOW | …-playground/__tests__/unit/LayoutContainerNode.test.ts | 127 | // Step 3: Verify the imported node has the correct templateColumns |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | packages/lexical/src/LexicalUpdates.ts | 301 | // We leverage editor._dirtyLeaves to track the new dirty leaves after the transforms |
| MEDIUM | …ages/lexical/src/__tests__/unit/LexicalEditor.test.tsx | 786 | // Add transform makes everything dirty the first time (let's not leverage this here) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …ct/src/__tests__/unit/useExtensionSignalValue.test.tsx | 334 | name: 'John Doe', |
| LOW | …exical-link/src/__tests__/unit/LexicalLinkNode.test.ts | 262 | {input: 'user@example.com', output: 'mailto:user@example.com'}, |
| LOW | …exical-link/src/__tests__/unit/LexicalLinkNode.test.ts | 875 | expect(formatUrl('user@example.com')).toBe('mailto:user@example.com'); |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …exical/src/__tests__/unit/LexicalSerialization.test.ts | 114 | const expectedStringifiedEditorState = `{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal"," |