From df15f5398542f9bc5aae0a3212ab3f33cc5a4462 Mon Sep 17 00:00:00 2001
From: Oluwasanya Olaoluwa
Date: Wed, 11 Dec 2024 03:54:55 +1100
Subject: [PATCH 1/3] [lexical-playground] Fix: tabs do not show
strikethrough/underline (#6811)
Co-authored-by: Bob Ippolito
---
.../__tests__/e2e/CodeBlock.spec.mjs | 60 ++++++++++++++-----
.../__tests__/e2e/Tab.spec.mjs | 8 ++-
.../src/themes/PlaygroundEditorTheme.css | 44 ++++++++++++++
.../src/themes/PlaygroundEditorTheme.ts | 1 +
packages/lexical/src/LexicalEditor.ts | 1 +
packages/lexical/src/nodes/LexicalTabNode.ts | 14 ++++-
6 files changed, 109 insertions(+), 19 deletions(-)
diff --git a/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs b/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs
index 34dd9972778..dab99d16c5d 100644
--- a/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs
+++ b/packages/lexical-playground/__tests__/e2e/CodeBlock.spec.mjs
@@ -366,7 +366,9 @@ test.describe('CodeBlock', () => {
;
-
+
@@ -393,7 +395,9 @@ test.describe('CodeBlock', () => {
;
-
+
@@ -453,7 +457,9 @@ test.describe('CodeBlock', () => {
{
-
+
@@ -501,8 +507,12 @@ test.describe('CodeBlock', () => {
data-gutter="123"
data-highlight-language="javascript"
data-language="javascript">
-
-
+
+
@@ -527,9 +537,15 @@ test.describe('CodeBlock', () => {
{
-
-
-
+
+
+
@@ -551,8 +567,12 @@ test.describe('CodeBlock', () => {
;
-
-
+
+
@@ -575,7 +595,9 @@ test.describe('CodeBlock', () => {
data-gutter="123"
data-highlight-language="javascript"
data-language="javascript">
-
+
@@ -600,8 +622,12 @@ test.describe('CodeBlock', () => {
{
-
-
+
+
@@ -623,7 +649,9 @@ test.describe('CodeBlock', () => {
;
-
+
@@ -913,10 +941,10 @@ test.describe('CodeBlock', () => {
data-gutter="12"
data-language="javascript"
data-highlight-language="javascript">
-
+
a b
-
+
c d
`,
diff --git a/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs b/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs
index 118e39536d4..b9198e193de 100644
--- a/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs
+++ b/packages/lexical-playground/__tests__/e2e/Tab.spec.mjs
@@ -81,7 +81,9 @@ test.describe('Tab', () => {
dir="ltr"
style="padding-inline-start: calc(40px)">
すし
-
+
すし
`,
@@ -106,7 +108,9 @@ test.describe('Tab', () => {
data-gutter="1"
data-highlight-language="javascript"
data-language="javascript">
-
+
diff --git a/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css b/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css
index 527085b7539..031173135f9 100644
--- a/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css
+++ b/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css
@@ -57,12 +57,56 @@
.PlaygroundEditorTheme__textUnderline {
text-decoration: underline;
}
+
.PlaygroundEditorTheme__textStrikethrough {
text-decoration: line-through;
}
+
.PlaygroundEditorTheme__textUnderlineStrikethrough {
text-decoration: underline line-through;
}
+
+.PlaygroundEditorTheme__tabNode {
+ position: relative;
+ text-decoration: none;
+}
+
+.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderline::after {
+ content: '';
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0.15em;
+ border-bottom: 0.1em solid currentColor;
+}
+
+.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textStrikethrough::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0.69em;
+ border-top: 0.1em solid currentColor;
+}
+
+.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::before,
+.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::after {
+ content: '';
+ position: absolute;
+ left: 0;
+ right: 0;
+}
+
+.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::before {
+ top: 0.69em;
+ border-top: 0.1em solid currentColor;
+}
+
+.PlaygroundEditorTheme__tabNode.PlaygroundEditorTheme__textUnderlineStrikethrough::after {
+ bottom: 0.05em;
+ border-bottom: 0.1em solid currentColor;
+}
+
.PlaygroundEditorTheme__textSubscript {
font-size: 0.8em;
vertical-align: sub !important;
diff --git a/packages/lexical-playground/src/themes/PlaygroundEditorTheme.ts b/packages/lexical-playground/src/themes/PlaygroundEditorTheme.ts
index 0b45916782b..e473ada671c 100644
--- a/packages/lexical-playground/src/themes/PlaygroundEditorTheme.ts
+++ b/packages/lexical-playground/src/themes/PlaygroundEditorTheme.ts
@@ -91,6 +91,7 @@ const theme: EditorThemeClasses = {
quote: 'PlaygroundEditorTheme__quote',
rtl: 'PlaygroundEditorTheme__rtl',
specialText: 'PlaygroundEditorTheme__specialText',
+ tab: 'PlaygroundEditorTheme__tabNode',
table: 'PlaygroundEditorTheme__table',
tableCell: 'PlaygroundEditorTheme__tableCell',
tableCellActionButton: 'PlaygroundEditorTheme__tableCellActionButton',
diff --git a/packages/lexical/src/LexicalEditor.ts b/packages/lexical/src/LexicalEditor.ts
index 1a67571c1a0..dcc91e85658 100644
--- a/packages/lexical/src/LexicalEditor.ts
+++ b/packages/lexical/src/LexicalEditor.ts
@@ -131,6 +131,7 @@ export type EditorThemeClasses = {
quote?: EditorThemeClassName;
root?: EditorThemeClassName;
rtl?: EditorThemeClassName;
+ tab?: EditorThemeClassName;
table?: EditorThemeClassName;
tableAddColumns?: EditorThemeClassName;
tableAddRows?: EditorThemeClassName;
diff --git a/packages/lexical/src/nodes/LexicalTabNode.ts b/packages/lexical/src/nodes/LexicalTabNode.ts
index d3182e40df0..8c5999b33c2 100644
--- a/packages/lexical/src/nodes/LexicalTabNode.ts
+++ b/packages/lexical/src/nodes/LexicalTabNode.ts
@@ -11,8 +11,9 @@ import type {DOMConversionMap, NodeKey} from '../LexicalNode';
import invariant from 'shared/invariant';
import {IS_UNMERGEABLE} from '../LexicalConstants';
+import {EditorConfig} from '../LexicalEditor';
import {LexicalNode} from '../LexicalNode';
-import {$applyNodeReplacement} from '../LexicalUtils';
+import {$applyNodeReplacement, getCachedClassNameArray} from '../LexicalUtils';
import {
SerializedTextNode,
TextDetailType,
@@ -47,6 +48,17 @@ export class TabNode extends TextNode {
return null;
}
+ createDOM(config: EditorConfig): HTMLElement {
+ const dom = super.createDOM(config);
+ const classNames = getCachedClassNameArray(config.theme, 'tab');
+
+ if (classNames !== undefined) {
+ const domClassList = dom.classList;
+ domClassList.add(...classNames);
+ }
+ return dom;
+ }
+
static importJSON(serializedTabNode: SerializedTabNode): TabNode {
const node = $createTabNode();
node.setFormat(serializedTabNode.format);
From dba254081e59ae7f49e3b3a838f6f8958381cc2e Mon Sep 17 00:00:00 2001
From: Syed Umar Anis
Date: Wed, 11 Dec 2024 03:55:40 +1100
Subject: [PATCH 2/3] [lexical-playground] Refactor: editor styles should in
PlaygroundEditorTheme.css (#6934)
---
packages/lexical-playground/src/index.css | 22 -------------------
.../src/themes/PlaygroundEditorTheme.css | 19 ++++++++++++++++
2 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/packages/lexical-playground/src/index.css b/packages/lexical-playground/src/index.css
index 87fb8fdbbff..8ad3159aeeb 100644
--- a/packages/lexical-playground/src/index.css
+++ b/packages/lexical-playground/src/index.css
@@ -1766,28 +1766,6 @@ button.item.dropdown-item-active i {
z-index: 3;
}
-.PlaygroundEditorTheme__blockCursor {
- display: block;
- pointer-events: none;
- position: absolute;
-}
-
-.PlaygroundEditorTheme__blockCursor:after {
- content: '';
- display: block;
- position: absolute;
- top: -2px;
- width: 20px;
- border-top: 1px solid black;
- animation: CursorBlink 1.1s steps(2, start) infinite;
-}
-
-@keyframes CursorBlink {
- to {
- visibility: hidden;
- }
-}
-
.dialog-dropdown {
background-color: #eee !important;
margin-bottom: 10px;
diff --git a/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css b/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css
index 031173135f9..2e985c4dc8d 100644
--- a/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css
+++ b/packages/lexical-playground/src/themes/PlaygroundEditorTheme.css
@@ -133,6 +133,25 @@
text-decoration: underline;
cursor: pointer;
}
+.PlaygroundEditorTheme__blockCursor {
+ display: block;
+ pointer-events: none;
+ position: absolute;
+}
+.PlaygroundEditorTheme__blockCursor:after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: -2px;
+ width: 20px;
+ border-top: 1px solid black;
+ animation: CursorBlink 1.1s steps(2, start) infinite;
+}
+@keyframes CursorBlink {
+ to {
+ visibility: hidden;
+ }
+}
.PlaygroundEditorTheme__code {
background-color: rgb(240, 242, 245);
font-family: Menlo, Consolas, Monaco, monospace;
From 42bd45d7e71bff9a2fe44aff18f50be3b3db1a14 Mon Sep 17 00:00:00 2001
From: lin-mt
Date: Wed, 11 Dec 2024 00:58:35 +0800
Subject: [PATCH 3/3] [lexical-react]Bug Fix: the location of
draggable-block-menu cannot be calculated #6818 (#6915)
Co-authored-by: Bob Ippolito
---
.../lexical-react/src/LexicalDraggableBlockPlugin.tsx | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/packages/lexical-react/src/LexicalDraggableBlockPlugin.tsx b/packages/lexical-react/src/LexicalDraggableBlockPlugin.tsx
index d37bd69f3c9..ef7303ee281 100644
--- a/packages/lexical-react/src/LexicalDraggableBlockPlugin.tsx
+++ b/packages/lexical-react/src/LexicalDraggableBlockPlugin.tsx
@@ -191,9 +191,15 @@ function setMenuPosition(
const floatingElemRect = floatingElem.getBoundingClientRect();
const anchorElementRect = anchorElem.getBoundingClientRect();
+ // top left
+ let targetCalculateHeight: number = parseInt(targetStyle.lineHeight, 10);
+ if (isNaN(targetCalculateHeight)) {
+ // middle
+ targetCalculateHeight = targetRect.bottom - targetRect.top;
+ }
const top =
targetRect.top +
- (parseInt(targetStyle.lineHeight, 10) - floatingElemRect.height) / 2 -
+ (targetCalculateHeight - floatingElemRect.height) / 2 -
anchorElementRect.top;
const left = SPACE;