@payloadcms/richtext-lexical 3.21.0 → 3.23.0-canary.597254e
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.
- package/dist/exports/client/Field-ZQTPXWY3.js +2 -0
- package/dist/exports/client/Field-ZQTPXWY3.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/{chunk-JKFXKPNG.js → chunk-CIY6PKN6.js} +2 -2
- package/dist/exports/client/chunk-CIY6PKN6.js.map +7 -0
- package/dist/exports/client/chunk-KEEUF5NK.js +2 -0
- package/dist/exports/client/chunk-KEEUF5NK.js.map +7 -0
- package/dist/exports/client/chunk-PUXDVIHC.js +2 -0
- package/dist/exports/client/chunk-PUXDVIHC.js.map +7 -0
- package/dist/exports/client/{component-VJVZFYZJ.js → component-P5K7Z5NW.js} +2 -2
- package/dist/exports/client/componentInline-UG3ZWWJY.js +2 -0
- package/dist/exports/client/index.js +10 -10
- package/dist/exports/client/index.js.map +3 -3
- package/dist/features/blocks/client/component/index.d.ts.map +1 -1
- package/dist/features/blocks/client/component/index.js +61 -30
- package/dist/features/blocks/client/component/index.js.map +1 -1
- package/dist/features/blocks/client/component/removeEmptyArrayValues.js +1 -1
- package/dist/features/blocks/client/component/removeEmptyArrayValues.js.map +1 -1
- package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
- package/dist/features/blocks/client/componentInline/index.js +42 -13
- package/dist/features/blocks/client/componentInline/index.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +7 -4
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/markdownTransformer.js +1 -1
- package/dist/features/blocks/client/markdownTransformer.js.map +1 -1
- package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js +4 -4
- package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +1 -1
- package/dist/features/blocks/server/markdownTransformer.d.ts.map +1 -1
- package/dist/features/blocks/server/markdownTransformer.js +5 -4
- package/dist/features/blocks/server/markdownTransformer.js.map +1 -1
- package/dist/features/blocks/server/validate.d.ts.map +1 -1
- package/dist/features/blocks/server/validate.js +9 -3
- package/dist/features/blocks/server/validate.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js +12 -10
- package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +39 -31
- package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
- package/dist/features/experimental_table/markdownTransformer.d.ts.map +1 -1
- package/dist/features/experimental_table/markdownTransformer.js +6 -2
- package/dist/features/experimental_table/markdownTransformer.js.map +1 -1
- package/dist/features/heading/markdownTransformer.js +1 -1
- package/dist/features/heading/markdownTransformer.js.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.d.ts.map +1 -1
- package/dist/features/link/client/plugins/autoLink/index.js +35 -35
- package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +1 -1
- package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
- package/dist/features/link/nodes/LinkNode.d.ts.map +1 -1
- package/dist/features/link/nodes/LinkNode.js +4 -6
- package/dist/features/link/nodes/LinkNode.js.map +1 -1
- package/dist/features/link/server/baseFields.d.ts.map +1 -1
- package/dist/features/link/server/baseFields.js +5 -8
- package/dist/features/link/server/baseFields.js.map +1 -1
- package/dist/features/link/server/validate.d.ts.map +1 -1
- package/dist/features/link/server/validate.js +9 -3
- package/dist/features/link/server/validate.js.map +1 -1
- package/dist/features/lists/shared/markdown.js.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/typesClient.d.ts +2 -1
- package/dist/features/typesClient.d.ts.map +1 -1
- package/dist/features/typesClient.js.map +1 -1
- package/dist/features/upload/server/feature.server.d.ts.map +1 -1
- package/dist/features/upload/server/feature.server.js +10 -8
- package/dist/features/upload/server/feature.server.js.map +1 -1
- package/dist/features/upload/server/validate.d.ts.map +1 -1
- package/dist/features/upload/server/validate.js +9 -3
- package/dist/features/upload/server/validate.js.map +1 -1
- package/dist/field/Field.d.ts +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +17 -7
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/field/index.d.ts.map +1 -1
- package/dist/field/index.js +23 -18
- package/dist/field/index.js.map +1 -1
- package/dist/field/rscEntry.d.ts.map +1 -1
- package/dist/field/rscEntry.js +1 -0
- package/dist/field/rscEntry.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/lexical/config/client/loader.d.ts +3 -2
- package/dist/lexical/config/client/loader.d.ts.map +1 -1
- package/dist/lexical/config/client/loader.js +2 -0
- package/dist/lexical/config/client/loader.js.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.d.ts +12 -0
- package/dist/lexical/plugins/DecoratorPlugin/index.d.ts.map +1 -1
- package/dist/lexical/plugins/DecoratorPlugin/index.js +198 -19
- package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +10 -4
- package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
- package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.d.ts.map +1 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js +2 -1
- package/dist/lexical/plugins/handles/utils/getNodeCloseToPoint.js.map +1 -1
- package/dist/utilities/buildInitialState.d.ts +1 -0
- package/dist/utilities/buildInitialState.d.ts.map +1 -1
- package/dist/utilities/buildInitialState.js +2 -0
- package/dist/utilities/buildInitialState.js.map +1 -1
- package/dist/utilities/createClientFeature.d.ts +2 -1
- package/dist/utilities/createClientFeature.d.ts.map +1 -1
- package/dist/utilities/createClientFeature.js +2 -0
- package/dist/utilities/createClientFeature.js.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/utilities/fieldsDrawer/DrawerContent.js +11 -3
- package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
- package/package.json +6 -6
- package/dist/exports/client/Field-LOLYH42M.js +0 -2
- package/dist/exports/client/Field-LOLYH42M.js.map +0 -7
- package/dist/exports/client/chunk-JKFXKPNG.js.map +0 -7
- package/dist/exports/client/chunk-KDV47ZNZ.js +0 -2
- package/dist/exports/client/chunk-KDV47ZNZ.js.map +0 -7
- package/dist/exports/client/chunk-QP2NYEWJ.js +0 -2
- package/dist/exports/client/chunk-QP2NYEWJ.js.map +0 -7
- package/dist/exports/client/componentInline-DTNGYZCL.js +0 -2
- /package/dist/exports/client/{component-VJVZFYZJ.js.map → component-P5K7Z5NW.js.map} +0 -0
- /package/dist/exports/client/{componentInline-DTNGYZCL.js.map → componentInline-UG3ZWWJY.js.map} +0 -0
|
@@ -9,6 +9,7 @@ export const blockValidationHOC = blocks => {
|
|
|
9
9
|
options: {
|
|
10
10
|
id,
|
|
11
11
|
collectionSlug,
|
|
12
|
+
data,
|
|
12
13
|
operation,
|
|
13
14
|
preferences,
|
|
14
15
|
req
|
|
@@ -27,8 +28,10 @@ export const blockValidationHOC = blocks => {
|
|
|
27
28
|
id,
|
|
28
29
|
collectionSlug,
|
|
29
30
|
data: blockFieldData,
|
|
31
|
+
documentData: data,
|
|
30
32
|
fields: block.fields,
|
|
31
33
|
fieldSchemaMap: undefined,
|
|
34
|
+
initialBlockData: blockFieldData,
|
|
32
35
|
operation: operation === 'create' || operation === 'update' ? operation : 'update',
|
|
33
36
|
permissions: {},
|
|
34
37
|
preferences,
|
|
@@ -36,12 +39,15 @@ export const blockValidationHOC = blocks => {
|
|
|
36
39
|
req,
|
|
37
40
|
schemaPath: ''
|
|
38
41
|
});
|
|
39
|
-
|
|
42
|
+
const errorPathsSet = new Set();
|
|
40
43
|
for (const fieldKey in result) {
|
|
41
|
-
if (result[fieldKey].errorPaths) {
|
|
42
|
-
|
|
44
|
+
if (result[fieldKey].errorPaths?.length) {
|
|
45
|
+
for (const errorPath of result[fieldKey].errorPaths) {
|
|
46
|
+
errorPathsSet.add(errorPath);
|
|
47
|
+
}
|
|
43
48
|
}
|
|
44
49
|
}
|
|
50
|
+
const errorPaths = Array.from(errorPathsSet);
|
|
45
51
|
if (errorPaths.length) {
|
|
46
52
|
return 'The following fields are invalid: ' + errorPaths.join(', ');
|
|
47
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","names":["fieldSchemasToFormState","blockValidationHOC","blocks","node","validation","blockFieldData","fields","options","id","collectionSlug","operation","preferences","req","block","find","slug","blockType","result","
|
|
1
|
+
{"version":3,"file":"validate.js","names":["fieldSchemasToFormState","blockValidationHOC","blocks","node","validation","blockFieldData","fields","options","id","collectionSlug","data","operation","preferences","req","block","find","slug","blockType","result","documentData","fieldSchemaMap","undefined","initialBlockData","permissions","renderAllFields","schemaPath","errorPathsSet","Set","fieldKey","errorPaths","length","errorPath","add","Array","from","join"],"sources":["../../../../src/features/blocks/server/validate.ts"],"sourcesContent":["import type { Block } from 'payload'\n\nimport { fieldSchemasToFormState } from '@payloadcms/ui/forms/fieldSchemasToFormState'\n\nimport type { NodeValidation } from '../../typesServer.js'\nimport type { BlockFields, SerializedBlockNode } from './nodes/BlocksNode.js'\nimport type { SerializedInlineBlockNode } from './nodes/InlineBlocksNode.js'\n\nexport const blockValidationHOC = (\n blocks: Block[],\n): NodeValidation<SerializedBlockNode | SerializedInlineBlockNode> => {\n return async ({ node, validation }) => {\n const blockFieldData = node.fields ?? ({} as BlockFields)\n\n const {\n options: { id, collectionSlug, data, operation, preferences, req },\n } = validation\n\n // find block\n const block = blocks.find((block) => block.slug === blockFieldData.blockType)\n\n // validate block\n if (!block) {\n return `Block ${blockFieldData.blockType} not found`\n }\n\n /**\n * Run fieldSchemasToFormState as that properly validates block and block sub-fields\n */\n\n const result = await fieldSchemasToFormState({\n id,\n collectionSlug,\n data: blockFieldData,\n documentData: data,\n fields: block.fields,\n fieldSchemaMap: undefined,\n initialBlockData: blockFieldData,\n operation: operation === 'create' || operation === 'update' ? operation : 'update',\n permissions: {},\n preferences,\n renderAllFields: false,\n req,\n schemaPath: '',\n })\n\n const errorPathsSet = new Set<string>()\n for (const fieldKey in result) {\n if (result[fieldKey].errorPaths?.length) {\n for (const errorPath of result[fieldKey].errorPaths) {\n errorPathsSet.add(errorPath)\n }\n }\n }\n const errorPaths = Array.from(errorPathsSet)\n\n if (errorPaths.length) {\n return 'The following fields are invalid: ' + errorPaths.join(', ')\n }\n\n return true\n }\n}\n"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ;AAMxC,OAAO,MAAMC,kBAAA,GACXC,MAAA;EAEA,OAAO,OAAO;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAChC,MAAMC,cAAA,GAAiBF,IAAA,CAAKG,MAAM,IAAK,CAAC;IAExC,MAAM;MACJC,OAAA,EAAS;QAAEC,EAAE;QAAEC,cAAc;QAAEC,IAAI;QAAEC,SAAS;QAAEC,WAAW;QAAEC;MAAG;IAAE,CACnE,GAAGT,UAAA;IAEJ;IACA,MAAMU,KAAA,GAAQZ,MAAA,CAAOa,IAAI,CAAED,KAAA,IAAUA,KAAA,CAAME,IAAI,KAAKX,cAAA,CAAeY,SAAS;IAE5E;IACA,IAAI,CAACH,KAAA,EAAO;MACV,OAAO,SAAST,cAAA,CAAeY,SAAS,YAAY;IACtD;IAEA;;;IAIA,MAAMC,MAAA,GAAS,MAAMlB,uBAAA,CAAwB;MAC3CQ,EAAA;MACAC,cAAA;MACAC,IAAA,EAAML,cAAA;MACNc,YAAA,EAAcT,IAAA;MACdJ,MAAA,EAAQQ,KAAA,CAAMR,MAAM;MACpBc,cAAA,EAAgBC,SAAA;MAChBC,gBAAA,EAAkBjB,cAAA;MAClBM,SAAA,EAAWA,SAAA,KAAc,YAAYA,SAAA,KAAc,WAAWA,SAAA,GAAY;MAC1EY,WAAA,EAAa,CAAC;MACdX,WAAA;MACAY,eAAA,EAAiB;MACjBX,GAAA;MACAY,UAAA,EAAY;IACd;IAEA,MAAMC,aAAA,GAAgB,IAAIC,GAAA;IAC1B,KAAK,MAAMC,QAAA,IAAYV,MAAA,EAAQ;MAC7B,IAAIA,MAAM,CAACU,QAAA,CAAS,CAACC,UAAU,EAAEC,MAAA,EAAQ;QACvC,KAAK,MAAMC,SAAA,IAAab,MAAM,CAACU,QAAA,CAAS,CAACC,UAAU,EAAE;UACnDH,aAAA,CAAcM,GAAG,CAACD,SAAA;QACpB;MACF;IACF;IACA,MAAMF,UAAA,GAAaI,KAAA,CAAMC,IAAI,CAACR,aAAA;IAE9B,IAAIG,UAAA,CAAWC,MAAM,EAAE;MACrB,OAAO,uCAAuCD,UAAA,CAAWM,IAAI,CAAC;IAChE;IAEA,OAAO;EACT;AACF","ignoreList":[]}
|
package/dist/features/experimental_table/client/plugins/TableCellResizerPlugin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AA2XjE,eAAO,MAAM,sBAAsB,EAAE,eAQpC,CAAA"}
|
|
@@ -144,13 +144,15 @@ function TableCellResizer({
|
|
|
144
144
|
return domCellNode?.clientHeight;
|
|
145
145
|
};
|
|
146
146
|
const getCellColumnIndex = (tableCellNode_1, tableMap) => {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
let columnIndex;
|
|
148
|
+
tableMap.forEach(row => {
|
|
149
|
+
row.forEach((cell_2, columnIndexInner) => {
|
|
150
|
+
if (cell_2.cell === tableCellNode_1) {
|
|
151
|
+
columnIndex = columnIndexInner;
|
|
151
152
|
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
return columnIndex;
|
|
154
156
|
};
|
|
155
157
|
const updateColumnWidth = useCallback(widthChange => {
|
|
156
158
|
if (!activeCell) {
|
|
@@ -163,21 +165,21 @@ function TableCellResizer({
|
|
|
163
165
|
}
|
|
164
166
|
const tableNode_2 = $getTableNodeFromLexicalNodeOrThrow(tableCellNode_2);
|
|
165
167
|
const [tableMap_0] = $computeTableMapSkipCellCheck(tableNode_2, null, null);
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
168
|
+
const columnIndex_0 = getCellColumnIndex(tableCellNode_2, tableMap_0);
|
|
169
|
+
if (columnIndex_0 === undefined) {
|
|
168
170
|
throw new Error('TableCellResizer: Table column not found.');
|
|
169
171
|
}
|
|
170
172
|
const colWidths = tableNode_2.getColWidths();
|
|
171
173
|
if (!colWidths) {
|
|
172
174
|
return;
|
|
173
175
|
}
|
|
174
|
-
const width = colWidths[
|
|
176
|
+
const width = colWidths[columnIndex_0];
|
|
175
177
|
if (width === undefined) {
|
|
176
178
|
return;
|
|
177
179
|
}
|
|
178
180
|
const newColWidths = [...colWidths];
|
|
179
181
|
const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH);
|
|
180
|
-
newColWidths[
|
|
182
|
+
newColWidths[columnIndex_0] = newWidth;
|
|
181
183
|
tableNode_2.setColWidths(newColWidths);
|
|
182
184
|
}, {
|
|
183
185
|
tag: 'skip-scroll-into-view'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$isTableCellNode","$isTableRowNode","getDOMCellFromTarget","getTableElement","TableNode","calculateZoomLevel","$getNearestNodeFromDOMNode","React","useCallback","useEffect","useMemo","useRef","useState","createPortal","useEditorConfigContext","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","TableCellResizer","editor","targetRef","resizerRef","tableRectRef","editorConfig","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","current","isMouseDownOnEvent","event","buttons","registerNodeTransform","tableNode","getColWidths","numColumns","getColumnCount","columnWidth","setColWidths","Array","fill","onMouseMove","target","x","clientX","y","clientY","contains","cell","getEditorState","read","tableCellNode","elem","Error","tableElement","getElementByKey","getKey","getBoundingClientRect","onMouseDown","onMouseUp","removeRootListener","registerRootListener","rootElement","prevRootElement","removeEventListener","addEventListener","isHeightChanging","direction","updateRowHeight","heightChange","update","tableRowIndex","getRowSpan","tableRows","getChildren","length","tableRow","height","getHeight","undefined","rowCells","Math","min","map","getCellNodeHeight","Infinity","newHeight","max","setHeight","tag","activeEditor","domCellNode","clientHeight","getCellColumnIndex","tableMap","row","column","updateColumnWidth","widthChange","columnIndex","colWidths","width","newColWidths","newWidth","mouseUpHandler","handler","preventDefault","stopPropagation","zoom","document","toggleResize","resizerStyles","setResizerStyles","bottom","left","right","top","zoneWidth","styles","backgroundColor","cursor","window","scrollX","scrollY","tableRect","_jsx","ref","_jsxs","Fragment","className","lexical","theme","tableCellResizer","style","TableCellResizerPlugin","$","isEditable","t0","t1"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType } from '@lexical/table'\nimport type { LexicalEditor } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { calculateZoomLevel } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 92\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<null | TableDOMCell>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n return editor.registerNodeTransform(TableNode, (tableNode) => {\n if (tableNode.getColWidths()) {\n return tableNode\n }\n\n const numColumns = tableNode.getColumnCount()\n const columnWidth = MIN_COLUMN_WIDTH\n\n tableNode.setColWidths(Array(numColumns).fill(columnWidth))\n return tableNode\n })\n }, [editor])\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target as Node)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target as HTMLElement\n const cell = getDOMCellFromTarget(target as HTMLElement)\n\n if (cell && activeCell !== cell) {\n editor.getEditorState().read(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey()),\n )\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target as HTMLElement\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n },\n { editor },\n )\n } else if (cell == null) {\n resetState()\n }\n }\n }\n\n const onMouseDown = (event: MouseEvent) => {\n updateIsMouseDown(true)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n updateIsMouseDown(false)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex =\n $getTableRowIndexFromTableCellNode(tableCellNode) + tableCellNode.getRowSpan() - 1\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n for (let row = 0; row < tableMap.length; row++) {\n for (let column = 0; column < tableMap[row].length; column++) {\n if (tableMap[row][column].cell === tableCellNode) {\n return column\n }\n }\n }\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n const colWidths = tableNode.getColWidths()\n if (!colWidths) {\n return\n }\n const width = colWidths[columnIndex]\n if (width === undefined) {\n return\n }\n const newColWidths = [...colWidths]\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n newColWidths[columnIndex] = newWidth\n tableNode.setColWidths(newColWidths)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const [resizerStyles, setResizerStyles] = useState<{\n bottom?: null | React.CSSProperties\n left?: null | React.CSSProperties\n right?: null | React.CSSProperties\n top?: null | React.CSSProperties\n }>({\n bottom: null,\n left: null,\n right: null,\n top: null,\n })\n\n useEffect(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.scrollX + left}px`,\n top: `${window.scrollY + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.scrollX + left + width - zoneWidth / 2}px`,\n top: `${window.scrollY + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.scrollX + tableRect.left}px`\n styles[draggingDirection].top = `${window.scrollY + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.scrollY + tableRect.top}px`\n styles[draggingDirection].left = `${window.scrollX + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n setResizerStyles(styles)\n } else {\n setResizerStyles({\n bottom: null,\n left: null,\n right: null,\n top: null,\n })\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useLexicalEditable","$computeTableMapSkipCellCheck","$getTableNodeFromLexicalNodeOrThrow","$getTableRowIndexFromTableCellNode","$isTableCellNode","$isTableRowNode","getDOMCellFromTarget","getTableElement","TableNode","calculateZoomLevel","$getNearestNodeFromDOMNode","React","useCallback","useEffect","useMemo","useRef","useState","createPortal","useEditorConfigContext","MIN_ROW_HEIGHT","MIN_COLUMN_WIDTH","TableCellResizer","editor","targetRef","resizerRef","tableRectRef","editorConfig","mouseStartPosRef","mouseCurrentPos","updateMouseCurrentPos","activeCell","updateActiveCell","isMouseDown","updateIsMouseDown","draggingDirection","updateDraggingDirection","resetState","current","isMouseDownOnEvent","event","buttons","registerNodeTransform","tableNode","getColWidths","numColumns","getColumnCount","columnWidth","setColWidths","Array","fill","onMouseMove","target","x","clientX","y","clientY","contains","cell","getEditorState","read","tableCellNode","elem","Error","tableElement","getElementByKey","getKey","getBoundingClientRect","onMouseDown","onMouseUp","removeRootListener","registerRootListener","rootElement","prevRootElement","removeEventListener","addEventListener","isHeightChanging","direction","updateRowHeight","heightChange","update","tableRowIndex","getRowSpan","tableRows","getChildren","length","tableRow","height","getHeight","undefined","rowCells","Math","min","map","getCellNodeHeight","Infinity","newHeight","max","setHeight","tag","activeEditor","domCellNode","clientHeight","getCellColumnIndex","tableMap","columnIndex","forEach","row","columnIndexInner","updateColumnWidth","widthChange","colWidths","width","newColWidths","newWidth","mouseUpHandler","handler","preventDefault","stopPropagation","zoom","document","toggleResize","resizerStyles","setResizerStyles","bottom","left","right","top","zoneWidth","styles","backgroundColor","cursor","window","scrollX","scrollY","tableRect","_jsx","ref","_jsxs","Fragment","className","lexical","theme","tableCellResizer","style","TableCellResizerPlugin","$","isEditable","t0","t1"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableCellResizerPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableDOMCell, TableMapType } from '@lexical/table'\nimport type { LexicalEditor } from 'lexical'\nimport type { JSX, MouseEventHandler } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\nimport {\n $computeTableMapSkipCellCheck,\n $getTableNodeFromLexicalNodeOrThrow,\n $getTableRowIndexFromTableCellNode,\n $isTableCellNode,\n $isTableRowNode,\n getDOMCellFromTarget,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { calculateZoomLevel } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport * as React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { PluginComponent } from '../../../../typesClient.js'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\n\ntype MousePosition = {\n x: number\n y: number\n}\n\ntype MouseDraggingDirection = 'bottom' | 'right'\n\nconst MIN_ROW_HEIGHT = 33\nconst MIN_COLUMN_WIDTH = 92\n\nfunction TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {\n const targetRef = useRef<HTMLElement | null>(null)\n const resizerRef = useRef<HTMLDivElement | null>(null)\n const tableRectRef = useRef<ClientRect | null>(null)\n const editorConfig = useEditorConfigContext()\n\n const mouseStartPosRef = useRef<MousePosition | null>(null)\n const [mouseCurrentPos, updateMouseCurrentPos] = useState<MousePosition | null>(null)\n\n const [activeCell, updateActiveCell] = useState<null | TableDOMCell>(null)\n const [isMouseDown, updateIsMouseDown] = useState<boolean>(false)\n const [draggingDirection, updateDraggingDirection] = useState<MouseDraggingDirection | null>(null)\n\n const resetState = useCallback(() => {\n updateActiveCell(null)\n targetRef.current = null\n updateDraggingDirection(null)\n mouseStartPosRef.current = null\n tableRectRef.current = null\n }, [])\n\n const isMouseDownOnEvent = (event: MouseEvent) => {\n return (event.buttons & 1) === 1\n }\n\n useEffect(() => {\n return editor.registerNodeTransform(TableNode, (tableNode) => {\n if (tableNode.getColWidths()) {\n return tableNode\n }\n\n const numColumns = tableNode.getColumnCount()\n const columnWidth = MIN_COLUMN_WIDTH\n\n tableNode.setColWidths(Array(numColumns).fill(columnWidth))\n return tableNode\n })\n }, [editor])\n\n useEffect(() => {\n const onMouseMove = (event: MouseEvent) => {\n const target = event.target\n\n if (draggingDirection) {\n updateMouseCurrentPos({\n x: event.clientX,\n y: event.clientY,\n })\n return\n }\n updateIsMouseDown(isMouseDownOnEvent(event))\n if (resizerRef.current && resizerRef.current.contains(target as Node)) {\n return\n }\n\n if (targetRef.current !== target) {\n targetRef.current = target as HTMLElement\n const cell = getDOMCellFromTarget(target as HTMLElement)\n\n if (cell && activeCell !== cell) {\n editor.getEditorState().read(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(cell.elem)\n\n if (!tableCellNode) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const tableElement = getTableElement(\n tableNode,\n editor.getElementByKey(tableNode.getKey()),\n )\n if (!tableElement) {\n throw new Error('TableCellResizer: Table element not found.')\n }\n\n targetRef.current = target as HTMLElement\n tableRectRef.current = tableElement.getBoundingClientRect()\n updateActiveCell(cell)\n },\n { editor },\n )\n } else if (cell == null) {\n resetState()\n }\n }\n }\n\n const onMouseDown = (event: MouseEvent) => {\n updateIsMouseDown(true)\n }\n\n const onMouseUp = (event: MouseEvent) => {\n updateIsMouseDown(false)\n }\n\n const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {\n prevRootElement?.removeEventListener('mousemove', onMouseMove)\n prevRootElement?.removeEventListener('mousedown', onMouseDown)\n prevRootElement?.removeEventListener('mouseup', onMouseUp)\n rootElement?.addEventListener('mousemove', onMouseMove)\n rootElement?.addEventListener('mousedown', onMouseDown)\n rootElement?.addEventListener('mouseup', onMouseUp)\n })\n\n return () => {\n removeRootListener()\n }\n }, [activeCell, draggingDirection, editor, resetState])\n\n const isHeightChanging = (direction: MouseDraggingDirection) => {\n if (direction === 'bottom') {\n return true\n }\n return false\n }\n\n const updateRowHeight = useCallback(\n (heightChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n\n const tableRowIndex =\n $getTableRowIndexFromTableCellNode(tableCellNode) + tableCellNode.getRowSpan() - 1\n\n const tableRows = tableNode.getChildren()\n\n if (tableRowIndex >= tableRows.length || tableRowIndex < 0) {\n throw new Error('Expected table cell to be inside of table row.')\n }\n\n const tableRow = tableRows[tableRowIndex]\n\n if (!$isTableRowNode(tableRow)) {\n throw new Error('Expected table row')\n }\n\n let height = tableRow.getHeight()\n if (height === undefined) {\n const rowCells = tableRow.getChildren<TableCellNode>()\n height = Math.min(\n ...rowCells.map((cell) => getCellNodeHeight(cell, editor) ?? Infinity),\n )\n }\n\n const newHeight = Math.max(height + heightChange, MIN_ROW_HEIGHT)\n tableRow.setHeight(newHeight)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const getCellNodeHeight = (\n cell: TableCellNode,\n activeEditor: LexicalEditor,\n ): number | undefined => {\n const domCellNode = activeEditor.getElementByKey(cell.getKey())\n return domCellNode?.clientHeight\n }\n\n const getCellColumnIndex = (tableCellNode: TableCellNode, tableMap: TableMapType) => {\n let columnIndex: number | undefined\n tableMap.forEach((row) => {\n row.forEach((cell, columnIndexInner) => {\n if (cell.cell === tableCellNode) {\n columnIndex = columnIndexInner\n }\n })\n })\n return columnIndex\n }\n\n const updateColumnWidth = useCallback(\n (widthChange: number) => {\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n editor.update(\n () => {\n const tableCellNode = $getNearestNodeFromDOMNode(activeCell.elem)\n if (!$isTableCellNode(tableCellNode)) {\n throw new Error('TableCellResizer: Table cell node not found.')\n }\n\n const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)\n const [tableMap] = $computeTableMapSkipCellCheck(tableNode, null, null)\n const columnIndex = getCellColumnIndex(tableCellNode, tableMap)\n if (columnIndex === undefined) {\n throw new Error('TableCellResizer: Table column not found.')\n }\n\n const colWidths = tableNode.getColWidths()\n if (!colWidths) {\n return\n }\n const width = colWidths[columnIndex]\n if (width === undefined) {\n return\n }\n const newColWidths = [...colWidths]\n const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)\n newColWidths[columnIndex] = newWidth\n tableNode.setColWidths(newColWidths)\n },\n { tag: 'skip-scroll-into-view' },\n )\n },\n [activeCell, editor],\n )\n\n const mouseUpHandler = useCallback(\n (direction: MouseDraggingDirection) => {\n const handler = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n if (mouseStartPosRef.current) {\n const { x, y } = mouseStartPosRef.current\n\n if (activeCell === null) {\n return\n }\n const zoom = calculateZoomLevel(event.target as Element)\n\n if (isHeightChanging(direction)) {\n const heightChange = (event.clientY - y) / zoom\n updateRowHeight(heightChange)\n } else {\n const widthChange = (event.clientX - x) / zoom\n updateColumnWidth(widthChange)\n }\n\n resetState()\n document.removeEventListener('mouseup', handler)\n }\n }\n return handler\n },\n [activeCell, resetState, updateColumnWidth, updateRowHeight],\n )\n\n const toggleResize = useCallback(\n (direction: MouseDraggingDirection): MouseEventHandler<HTMLDivElement> =>\n (event) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (!activeCell) {\n throw new Error('TableCellResizer: Expected active cell.')\n }\n\n mouseStartPosRef.current = {\n x: event.clientX,\n y: event.clientY,\n }\n updateMouseCurrentPos(mouseStartPosRef.current)\n updateDraggingDirection(direction)\n\n document.addEventListener('mouseup', mouseUpHandler(direction))\n },\n [activeCell, mouseUpHandler],\n )\n\n const [resizerStyles, setResizerStyles] = useState<{\n bottom?: null | React.CSSProperties\n left?: null | React.CSSProperties\n right?: null | React.CSSProperties\n top?: null | React.CSSProperties\n }>({\n bottom: null,\n left: null,\n right: null,\n top: null,\n })\n\n useEffect(() => {\n if (activeCell) {\n const { height, left, top, width } = activeCell.elem.getBoundingClientRect()\n const zoom = calculateZoomLevel(activeCell.elem)\n const zoneWidth = 10 // Pixel width of the zone where you can drag the edge\n const styles = {\n bottom: {\n backgroundColor: 'none',\n cursor: 'row-resize',\n height: `${zoneWidth}px`,\n left: `${window.scrollX + left}px`,\n top: `${window.scrollY + top + height - zoneWidth / 2}px`,\n width: `${width}px`,\n },\n right: {\n backgroundColor: 'none',\n cursor: 'col-resize',\n height: `${height}px`,\n left: `${window.scrollX + left + width - zoneWidth / 2}px`,\n top: `${window.scrollY + top}px`,\n width: `${zoneWidth}px`,\n },\n }\n\n const tableRect = tableRectRef.current\n\n if (draggingDirection && mouseCurrentPos && tableRect) {\n if (isHeightChanging(draggingDirection)) {\n styles[draggingDirection].left = `${window.scrollX + tableRect.left}px`\n styles[draggingDirection].top = `${window.scrollY + mouseCurrentPos.y / zoom}px`\n styles[draggingDirection].height = '3px'\n styles[draggingDirection].width = `${tableRect.width}px`\n } else {\n styles[draggingDirection].top = `${window.scrollY + tableRect.top}px`\n styles[draggingDirection].left = `${window.scrollX + mouseCurrentPos.x / zoom}px`\n styles[draggingDirection].width = '3px'\n styles[draggingDirection].height = `${tableRect.height}px`\n }\n\n styles[draggingDirection].backgroundColor = '#adf'\n }\n\n setResizerStyles(styles)\n } else {\n setResizerStyles({\n bottom: null,\n left: null,\n right: null,\n top: null,\n })\n }\n }, [activeCell, draggingDirection, mouseCurrentPos])\n\n return (\n <div ref={resizerRef}>\n {activeCell != null && !isMouseDown && (\n <React.Fragment>\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('right')}\n style={resizerStyles.right || undefined}\n />\n <div\n className={`${editorConfig.editorConfig.lexical.theme.tableCellResizer} TableCellResizer__ui`}\n onMouseDown={toggleResize('bottom')}\n style={resizerStyles.bottom || undefined}\n />\n </React.Fragment>\n )}\n </div>\n )\n}\n\nexport const TableCellResizerPlugin: PluginComponent = () => {\n const [editor] = useLexicalComposerContext()\n const isEditable = useLexicalEditable()\n\n return useMemo(\n () => (isEditable ? createPortal(<TableCellResizer editor={editor} />, document.body) : null),\n [editor, isEditable],\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA+P9B,wBAAgB,uBAAuB,CAAC,EACtC,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,CAO3B"}
|
|
@@ -63,38 +63,44 @@ function TableHoverActionsContainer({
|
|
|
63
63
|
}, {
|
|
64
64
|
editor
|
|
65
65
|
});
|
|
66
|
-
if (tableDOMElement) {
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
if (!tableDOMElement) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// this is the scrollable div container of the table (in case of overflow)
|
|
70
|
+
const tableContainerElement = tableDOMElement.parentElement;
|
|
71
|
+
if (!tableContainerElement) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const {
|
|
75
|
+
bottom: tableElemBottom,
|
|
76
|
+
height: tableElemHeight,
|
|
77
|
+
left: tableElemLeft,
|
|
78
|
+
right: tableElemRight,
|
|
79
|
+
width: tableElemWidth,
|
|
80
|
+
y: tableElemY
|
|
81
|
+
} = tableContainerElement.getBoundingClientRect();
|
|
82
|
+
const {
|
|
83
|
+
left: editorElemLeft,
|
|
84
|
+
y: editorElemY
|
|
85
|
+
} = anchorElem.getBoundingClientRect();
|
|
86
|
+
if (hoveredRowNode) {
|
|
87
|
+
setShownColumn(false);
|
|
88
|
+
setShownRow(true);
|
|
89
|
+
setPosition({
|
|
90
|
+
height: BUTTON_WIDTH_PX,
|
|
91
|
+
left: tableElemLeft - editorElemLeft,
|
|
92
|
+
top: tableElemBottom - editorElemY + 5,
|
|
93
|
+
width: tableElemWidth
|
|
94
|
+
});
|
|
95
|
+
} else if (hoveredColumnNode) {
|
|
96
|
+
setShownColumn(true);
|
|
97
|
+
setShownRow(false);
|
|
98
|
+
setPosition({
|
|
69
99
|
height: tableElemHeight,
|
|
70
|
-
left:
|
|
71
|
-
|
|
72
|
-
width:
|
|
73
|
-
|
|
74
|
-
} = tableDOMElement.getBoundingClientRect();
|
|
75
|
-
const {
|
|
76
|
-
left: editorElemLeft,
|
|
77
|
-
y: editorElemY
|
|
78
|
-
} = anchorElem.getBoundingClientRect();
|
|
79
|
-
if (hoveredRowNode) {
|
|
80
|
-
setShownColumn(false);
|
|
81
|
-
setShownRow(true);
|
|
82
|
-
setPosition({
|
|
83
|
-
height: BUTTON_WIDTH_PX,
|
|
84
|
-
left: tableElemLeft - editorElemLeft,
|
|
85
|
-
top: tableElemBottom - editorElemY + 5,
|
|
86
|
-
width: tableElemWidth
|
|
87
|
-
});
|
|
88
|
-
} else if (hoveredColumnNode) {
|
|
89
|
-
setShownColumn(true);
|
|
90
|
-
setShownRow(false);
|
|
91
|
-
setPosition({
|
|
92
|
-
height: tableElemHeight,
|
|
93
|
-
left: tableElemRight - editorElemLeft + 5,
|
|
94
|
-
top: tableElemY - editorElemY,
|
|
95
|
-
width: BUTTON_WIDTH_PX
|
|
96
|
-
});
|
|
97
|
-
}
|
|
100
|
+
left: tableElemRight - editorElemLeft + 5,
|
|
101
|
+
top: tableElemY - editorElemY,
|
|
102
|
+
width: BUTTON_WIDTH_PX
|
|
103
|
+
});
|
|
98
104
|
}
|
|
99
105
|
}, 50, 250);
|
|
100
106
|
// Hide the buttons on any table dimensions change to prevent last row cells
|
|
@@ -176,6 +182,7 @@ function TableHoverActionsContainer({
|
|
|
176
182
|
}
|
|
177
183
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
178
184
|
children: [isShownRow && /*#__PURE__*/_jsx("button", {
|
|
185
|
+
"aria-label": "Add Row",
|
|
179
186
|
className: editorConfig.editorConfig.lexical.theme.tableAddRows,
|
|
180
187
|
onClick: () => insertAction(true),
|
|
181
188
|
style: {
|
|
@@ -183,6 +190,7 @@ function TableHoverActionsContainer({
|
|
|
183
190
|
},
|
|
184
191
|
type: "button"
|
|
185
192
|
}), isShownColumn && /*#__PURE__*/_jsx("button", {
|
|
193
|
+
"aria-label": "Add Column",
|
|
186
194
|
className: editorConfig.editorConfig.lexical.theme.tableAddColumns,
|
|
187
195
|
onClick: () => insertAction(false),
|
|
188
196
|
style: {
|
package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$getTableAndElementByKey","$getTableColumnIndexFromTableCellNode","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableNode","getTableElement","TableNode","$findMatchingParent","mergeRegister","$getNearestNodeFromDOMNode","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","useDebounce","BUTTON_WIDTH_PX","TableHoverActionsContainer","anchorElem","editor","editorConfig","isShownRow","setShownRow","isShownColumn","setShownColumn","shouldListenMouseMove","setShouldListenMouseMove","position","setPosition","tableSetRef","Set","tableCellDOMNodeRef","debouncedOnMouseMove","event","isOutside","tableDOMNode","getMouseInfo","lexical","current","hoveredRowNode","hoveredColumnNode","tableDOMElement","getEditorState","read","maybeTableCell","table","node","getElementByKey","getKey","rowCount","getChildrenSize","colCount","getChildAtIndex","rowIndex","colIndex","bottom","tableElemBottom","height","tableElemHeight","left","tableElemLeft","right","tableElemRight","width","tableElemWidth","y","tableElemY","getBoundingClientRect","editorElemLeft","editorElemY","top","tableResizeObserver","ResizeObserver","document","addEventListener","removeEventListener","registerMutationListener","mutations","resetObserver","key","type","add","delete","disconnect","tableKey","tableElement","observe","size","skipInitialization","insertAction","insertRow","update","maybeTableNode","selectEnd","isEditable","_jsxs","_Fragment","_jsx","className","theme","tableAddRows","onClick","style","tableAddColumns","target","HTMLElement","closest","tableCell","tableCellResizer","TableHoverActionsPlugin","t0","$","t1","undefined","body","t2"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getTableAndElementByKey,\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableNode,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const tableSetRef = useRef<Set<NodeKey>>(new Set())\n const tableCellDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableCellDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: null | TableCellNode = null\n let hoveredColumnNode: null | TableCellNode = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.getEditorState().read(\n () => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = getTableElement(table, editor.getElementByKey(table.getKey()))\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount = (table.getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n },\n { editor },\n )\n\n if (tableDOMElement) {\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n left: tableElemLeft,\n right: tableElemRight,\n width: tableElemWidth,\n y: tableElemY,\n } = (tableDOMElement as HTMLTableElement).getBoundingClientRect()\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left: tableElemLeft - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width: tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n }\n },\n 50,\n 250,\n )\n\n // Hide the buttons on any table dimensions change to prevent last row cells\n // overlap behind the 'Add Row' button when text entry changes cell height\n const tableResizeObserver = useMemo(() => {\n return new ResizeObserver(() => {\n setShownRow(false)\n setShownColumn(false)\n })\n }, [])\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(\n () => {\n let resetObserver = false\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created': {\n tableSetRef.current.add(key)\n resetObserver = true\n break\n }\n case 'destroyed': {\n tableSetRef.current.delete(key)\n resetObserver = true\n break\n }\n default:\n break\n }\n }\n if (resetObserver) {\n // Reset resize observers\n tableResizeObserver.disconnect()\n for (const tableKey of tableSetRef.current) {\n const { tableElement } = $getTableAndElementByKey(tableKey)\n tableResizeObserver.observe(tableElement)\n }\n setShouldListenMouseMove(tableSetRef.current.size > 0)\n }\n },\n { editor },\n )\n },\n { skipInitialization: false },\n ),\n )\n }, [editor, tableResizeObserver])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableCellDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableCellDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRow__EXPERIMENTAL()\n setShownRow(false)\n } else {\n $insertTableColumn__EXPERIMENTAL()\n setShownColumn(false)\n }\n }\n })\n }\n\n if (!editor?.isEditable()) {\n return null\n }\n\n return (\n <>\n {isShownRow && (\n <button\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n {isShownColumn && (\n <button\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (target && target instanceof HTMLElement) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): null | React.ReactPortal {\n const [editor] = useLexicalComposerContext()\n if (!editor?.isEditable()) {\n return null\n }\n\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","$getTableAndElementByKey","$getTableColumnIndexFromTableCellNode","$getTableRowIndexFromTableCellNode","$insertTableColumn__EXPERIMENTAL","$insertTableRow__EXPERIMENTAL","$isTableCellNode","$isTableNode","getTableElement","TableNode","$findMatchingParent","mergeRegister","$getNearestNodeFromDOMNode","useEffect","useMemo","useRef","useState","React","createPortal","useEditorConfigContext","useDebounce","BUTTON_WIDTH_PX","TableHoverActionsContainer","anchorElem","editor","editorConfig","isShownRow","setShownRow","isShownColumn","setShownColumn","shouldListenMouseMove","setShouldListenMouseMove","position","setPosition","tableSetRef","Set","tableCellDOMNodeRef","debouncedOnMouseMove","event","isOutside","tableDOMNode","getMouseInfo","lexical","current","hoveredRowNode","hoveredColumnNode","tableDOMElement","getEditorState","read","maybeTableCell","table","node","getElementByKey","getKey","rowCount","getChildrenSize","colCount","getChildAtIndex","rowIndex","colIndex","tableContainerElement","parentElement","bottom","tableElemBottom","height","tableElemHeight","left","tableElemLeft","right","tableElemRight","width","tableElemWidth","y","tableElemY","getBoundingClientRect","editorElemLeft","editorElemY","top","tableResizeObserver","ResizeObserver","document","addEventListener","removeEventListener","registerMutationListener","mutations","resetObserver","key","type","add","delete","disconnect","tableKey","tableElement","observe","size","skipInitialization","insertAction","insertRow","update","maybeTableNode","selectEnd","isEditable","_jsxs","_Fragment","_jsx","className","theme","tableAddRows","onClick","style","tableAddColumns","target","HTMLElement","closest","tableCell","tableCellResizer","TableHoverActionsPlugin","t0","$","t1","undefined","body","t2"],"sources":["../../../../../../src/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.tsx"],"sourcesContent":["'use client'\n\nimport type { TableCellNode, TableRowNode } from '@lexical/table'\nimport type { EditorConfig, NodeKey } from 'lexical'\nimport type { JSX } from 'react'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $getTableAndElementByKey,\n $getTableColumnIndexFromTableCellNode,\n $getTableRowIndexFromTableCellNode,\n $insertTableColumn__EXPERIMENTAL,\n $insertTableRow__EXPERIMENTAL,\n $isTableCellNode,\n $isTableNode,\n getTableElement,\n TableNode,\n} from '@lexical/table'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { $getNearestNodeFromDOMNode } from 'lexical'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEditorConfigContext } from '../../../../../lexical/config/client/EditorConfigProvider.js'\nimport { useDebounce } from '../../utils/useDebounce.js'\n\nconst BUTTON_WIDTH_PX = 20\n\nfunction TableHoverActionsContainer({\n anchorElem,\n}: {\n anchorElem: HTMLElement\n}): JSX.Element | null {\n const [editor] = useLexicalComposerContext()\n const editorConfig = useEditorConfigContext()\n const [isShownRow, setShownRow] = useState<boolean>(false)\n const [isShownColumn, setShownColumn] = useState<boolean>(false)\n const [shouldListenMouseMove, setShouldListenMouseMove] = useState<boolean>(false)\n const [position, setPosition] = useState({})\n const tableSetRef = useRef<Set<NodeKey>>(new Set())\n const tableCellDOMNodeRef = useRef<HTMLElement | null>(null)\n\n const debouncedOnMouseMove = useDebounce(\n (event: MouseEvent) => {\n const { isOutside, tableDOMNode } = getMouseInfo(event, editorConfig.editorConfig?.lexical)\n\n if (isOutside) {\n setShownRow(false)\n setShownColumn(false)\n return\n }\n\n if (!tableDOMNode) {\n return\n }\n\n tableCellDOMNodeRef.current = tableDOMNode\n\n let hoveredRowNode: null | TableCellNode = null\n let hoveredColumnNode: null | TableCellNode = null\n let tableDOMElement: HTMLElement | null = null\n\n editor.getEditorState().read(\n () => {\n const maybeTableCell = $getNearestNodeFromDOMNode(tableDOMNode)\n\n if ($isTableCellNode(maybeTableCell)) {\n const table = $findMatchingParent(maybeTableCell, (node) => $isTableNode(node))\n if (!$isTableNode(table)) {\n return\n }\n\n tableDOMElement = getTableElement(table, editor.getElementByKey(table.getKey()))\n\n if (tableDOMElement) {\n const rowCount = table.getChildrenSize()\n const colCount = (table.getChildAtIndex(0) as TableRowNode)?.getChildrenSize()\n\n const rowIndex = $getTableRowIndexFromTableCellNode(maybeTableCell)\n const colIndex = $getTableColumnIndexFromTableCellNode(maybeTableCell)\n\n if (rowIndex === rowCount - 1) {\n hoveredRowNode = maybeTableCell\n } else if (colIndex === colCount - 1) {\n hoveredColumnNode = maybeTableCell\n }\n }\n }\n },\n { editor },\n )\n\n if (!tableDOMElement) {\n return\n }\n\n // this is the scrollable div container of the table (in case of overflow)\n const tableContainerElement = (tableDOMElement as HTMLTableElement).parentElement\n\n if (!tableContainerElement) {\n return\n }\n\n const {\n bottom: tableElemBottom,\n height: tableElemHeight,\n left: tableElemLeft,\n right: tableElemRight,\n width: tableElemWidth,\n y: tableElemY,\n } = tableContainerElement.getBoundingClientRect()\n\n const { left: editorElemLeft, y: editorElemY } = anchorElem.getBoundingClientRect()\n\n if (hoveredRowNode) {\n setShownColumn(false)\n setShownRow(true)\n setPosition({\n height: BUTTON_WIDTH_PX,\n left: tableElemLeft - editorElemLeft,\n top: tableElemBottom - editorElemY + 5,\n width: tableElemWidth,\n })\n } else if (hoveredColumnNode) {\n setShownColumn(true)\n setShownRow(false)\n setPosition({\n height: tableElemHeight,\n left: tableElemRight - editorElemLeft + 5,\n top: tableElemY - editorElemY,\n width: BUTTON_WIDTH_PX,\n })\n }\n },\n 50,\n 250,\n )\n\n // Hide the buttons on any table dimensions change to prevent last row cells\n // overlap behind the 'Add Row' button when text entry changes cell height\n const tableResizeObserver = useMemo(() => {\n return new ResizeObserver(() => {\n setShownRow(false)\n setShownColumn(false)\n })\n }, [])\n\n useEffect(() => {\n if (!shouldListenMouseMove) {\n return\n }\n\n document.addEventListener('mousemove', debouncedOnMouseMove)\n\n return () => {\n setShownRow(false)\n setShownColumn(false)\n\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n }\n }, [shouldListenMouseMove, debouncedOnMouseMove])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerMutationListener(\n TableNode,\n (mutations) => {\n editor.getEditorState().read(\n () => {\n let resetObserver = false\n for (const [key, type] of mutations) {\n switch (type) {\n case 'created': {\n tableSetRef.current.add(key)\n resetObserver = true\n break\n }\n case 'destroyed': {\n tableSetRef.current.delete(key)\n resetObserver = true\n break\n }\n default:\n break\n }\n }\n if (resetObserver) {\n // Reset resize observers\n tableResizeObserver.disconnect()\n for (const tableKey of tableSetRef.current) {\n const { tableElement } = $getTableAndElementByKey(tableKey)\n tableResizeObserver.observe(tableElement)\n }\n setShouldListenMouseMove(tableSetRef.current.size > 0)\n }\n },\n { editor },\n )\n },\n { skipInitialization: false },\n ),\n )\n }, [editor, tableResizeObserver])\n\n const insertAction = (insertRow: boolean) => {\n editor.update(() => {\n if (tableCellDOMNodeRef.current) {\n const maybeTableNode = $getNearestNodeFromDOMNode(tableCellDOMNodeRef.current)\n maybeTableNode?.selectEnd()\n if (insertRow) {\n $insertTableRow__EXPERIMENTAL()\n setShownRow(false)\n } else {\n $insertTableColumn__EXPERIMENTAL()\n setShownColumn(false)\n }\n }\n })\n }\n\n if (!editor?.isEditable()) {\n return null\n }\n\n return (\n <>\n {isShownRow && (\n <button\n aria-label=\"Add Row\"\n className={editorConfig.editorConfig.lexical.theme.tableAddRows}\n onClick={() => insertAction(true)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n {isShownColumn && (\n <button\n aria-label=\"Add Column\"\n className={editorConfig.editorConfig.lexical.theme.tableAddColumns}\n onClick={() => insertAction(false)}\n style={{ ...position }}\n type=\"button\"\n />\n )}\n </>\n )\n}\n\nfunction getMouseInfo(\n event: MouseEvent,\n editorConfig: EditorConfig,\n): {\n isOutside: boolean\n tableDOMNode: HTMLElement | null\n} {\n const target = event.target\n\n if (target && target instanceof HTMLElement) {\n const tableDOMNode = target.closest<HTMLElement>(\n `td.${editorConfig.theme.tableCell}, th.${editorConfig.theme.tableCell}`,\n )\n\n const isOutside = !(\n tableDOMNode ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddRows}`) ||\n target.closest<HTMLElement>(`button.${editorConfig.theme.tableAddColumns}`) ||\n target.closest<HTMLElement>(`div.${editorConfig.theme.tableCellResizer}`)\n )\n\n return { isOutside, tableDOMNode }\n } else {\n return { isOutside: true, tableDOMNode: null }\n }\n}\n\nexport function TableHoverActionsPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement\n}): null | React.ReactPortal {\n const [editor] = useLexicalComposerContext()\n if (!editor?.isEditable()) {\n return null\n }\n\n return createPortal(<TableHoverActionsContainer anchorElem={anchorElem} />, anchorElem)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/experimental_table/markdownTransformer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,2CAA2C,CAAA;AAOlD,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE;IAC7C,eAAe,EAAE,WAAW,EAAE,CAAA;CAC/B,KAAK,
|
|
1
|
+
{"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../src/features/experimental_table/markdownTransformer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,2CAA2C,CAAA;AAOlD,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE;IAC7C,eAAe,EAAE,WAAW,EAAE,CAAA;CAC/B,KAAK,kBA8HJ,CAAA"}
|
|
@@ -39,8 +39,12 @@ export const TableMarkdownTransformer = ({
|
|
|
39
39
|
},
|
|
40
40
|
regExp: TABLE_ROW_REG_EXP,
|
|
41
41
|
replace: (parentNode, _1, match) => {
|
|
42
|
+
const match0 = match[0];
|
|
43
|
+
if (!match0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
42
46
|
// Header row
|
|
43
|
-
if (TABLE_ROW_DIVIDER_REG_EXP.test(
|
|
47
|
+
if (TABLE_ROW_DIVIDER_REG_EXP.test(match0)) {
|
|
44
48
|
const table = parentNode.getPreviousSibling();
|
|
45
49
|
if (!table || !$isTableNode(table)) {
|
|
46
50
|
return;
|
|
@@ -61,7 +65,7 @@ export const TableMarkdownTransformer = ({
|
|
|
61
65
|
parentNode.remove();
|
|
62
66
|
return;
|
|
63
67
|
}
|
|
64
|
-
const matchCells = mapToTableCells(
|
|
68
|
+
const matchCells = mapToTableCells(match0, allTransformers);
|
|
65
69
|
if (matchCells == null) {
|
|
66
70
|
return;
|
|
67
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.js","names":["$createTableCellNode","$createTableNode","$createTableRowNode","$isTableCellNode","$isTableNode","$isTableRowNode","TableCellHeaderStates","TableCellNode","TableNode","TableRowNode","$isParagraphNode","$isTextNode","$convertFromMarkdownString","$convertToMarkdownString","TABLE_ROW_REG_EXP","TABLE_ROW_DIVIDER_REG_EXP","TableMarkdownTransformer","allTransformers","type","dependencies","export","node","output","row","getChildren","rowOutput","isHeaderRow","cell","push","replace","__headerState","ROW","join","map","_","regExp","parentNode","_1","match","test","table","getPreviousSibling","rows","lastRow","length","forEach","setHeaderStyles","remove","matchCells","mapToTableCells","sibling","maxCells","getChildrenSize","firstChild","getFirstChild","cells","getTextContent","Math","max","unshift","previousSibling","tableRow","append","i","$createTableCell","getTableColumnsSize","selectEnd","textContent","NO_STATUS","split","text"],"sources":["../../../src/features/experimental_table/markdownTransformer.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical'\n\nimport {\n $createTableCellNode,\n $createTableNode,\n $createTableRowNode,\n $isTableCellNode,\n $isTableNode,\n $isTableRowNode,\n TableCellHeaderStates,\n TableCellNode,\n TableNode,\n TableRowNode,\n} from '@lexical/table'\nimport { $isParagraphNode, $isTextNode } from 'lexical'\n\nimport {\n $convertFromMarkdownString,\n $convertToMarkdownString,\n type ElementTransformer,\n type Transformer,\n} from '../../packages/@lexical/markdown/index.js'\n\n// Very primitive table setup\nconst TABLE_ROW_REG_EXP = /^\\|(.+)\\|\\s?$/\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst TABLE_ROW_DIVIDER_REG_EXP = /^(\\| ?:?-*:? ?)+\\|\\s?$/\n\nexport const TableMarkdownTransformer: (props: {\n allTransformers: Transformer[]\n}) => ElementTransformer = ({ allTransformers }) => ({\n type: 'element',\n dependencies: [TableNode, TableRowNode, TableCellNode],\n export: (node: LexicalNode) => {\n if (!$isTableNode(node)) {\n return null\n }\n\n const output: string[] = []\n\n for (const row of node.getChildren()) {\n const rowOutput: string[] = []\n if (!$isTableRowNode(row)) {\n continue\n }\n\n let isHeaderRow = false\n for (const cell of row.getChildren()) {\n // It's TableCellNode, so it's just to make flow happy\n if ($isTableCellNode(cell)) {\n rowOutput.push($convertToMarkdownString(allTransformers, cell).replace(/\\n/g, '\\\\n'))\n if (cell.__headerState === TableCellHeaderStates.ROW) {\n isHeaderRow = true\n }\n }\n }\n\n output.push(`| ${rowOutput.join(' | ')} |`)\n if (isHeaderRow) {\n output.push(`| ${rowOutput.map((_) => '---').join(' | ')} |`)\n }\n }\n\n return output.join('\\n')\n },\n regExp: TABLE_ROW_REG_EXP,\n replace: (parentNode, _1, match) => {\n // Header row\n if (TABLE_ROW_DIVIDER_REG_EXP.test(
|
|
1
|
+
{"version":3,"file":"markdownTransformer.js","names":["$createTableCellNode","$createTableNode","$createTableRowNode","$isTableCellNode","$isTableNode","$isTableRowNode","TableCellHeaderStates","TableCellNode","TableNode","TableRowNode","$isParagraphNode","$isTextNode","$convertFromMarkdownString","$convertToMarkdownString","TABLE_ROW_REG_EXP","TABLE_ROW_DIVIDER_REG_EXP","TableMarkdownTransformer","allTransformers","type","dependencies","export","node","output","row","getChildren","rowOutput","isHeaderRow","cell","push","replace","__headerState","ROW","join","map","_","regExp","parentNode","_1","match","match0","test","table","getPreviousSibling","rows","lastRow","length","forEach","setHeaderStyles","remove","matchCells","mapToTableCells","sibling","maxCells","getChildrenSize","firstChild","getFirstChild","cells","getTextContent","Math","max","unshift","previousSibling","tableRow","append","i","$createTableCell","getTableColumnsSize","selectEnd","textContent","NO_STATUS","split","text"],"sources":["../../../src/features/experimental_table/markdownTransformer.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical'\n\nimport {\n $createTableCellNode,\n $createTableNode,\n $createTableRowNode,\n $isTableCellNode,\n $isTableNode,\n $isTableRowNode,\n TableCellHeaderStates,\n TableCellNode,\n TableNode,\n TableRowNode,\n} from '@lexical/table'\nimport { $isParagraphNode, $isTextNode } from 'lexical'\n\nimport {\n $convertFromMarkdownString,\n $convertToMarkdownString,\n type ElementTransformer,\n type Transformer,\n} from '../../packages/@lexical/markdown/index.js'\n\n// Very primitive table setup\nconst TABLE_ROW_REG_EXP = /^\\|(.+)\\|\\s?$/\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst TABLE_ROW_DIVIDER_REG_EXP = /^(\\| ?:?-*:? ?)+\\|\\s?$/\n\nexport const TableMarkdownTransformer: (props: {\n allTransformers: Transformer[]\n}) => ElementTransformer = ({ allTransformers }) => ({\n type: 'element',\n dependencies: [TableNode, TableRowNode, TableCellNode],\n export: (node: LexicalNode) => {\n if (!$isTableNode(node)) {\n return null\n }\n\n const output: string[] = []\n\n for (const row of node.getChildren()) {\n const rowOutput: string[] = []\n if (!$isTableRowNode(row)) {\n continue\n }\n\n let isHeaderRow = false\n for (const cell of row.getChildren()) {\n // It's TableCellNode, so it's just to make flow happy\n if ($isTableCellNode(cell)) {\n rowOutput.push($convertToMarkdownString(allTransformers, cell).replace(/\\n/g, '\\\\n'))\n if (cell.__headerState === TableCellHeaderStates.ROW) {\n isHeaderRow = true\n }\n }\n }\n\n output.push(`| ${rowOutput.join(' | ')} |`)\n if (isHeaderRow) {\n output.push(`| ${rowOutput.map((_) => '---').join(' | ')} |`)\n }\n }\n\n return output.join('\\n')\n },\n regExp: TABLE_ROW_REG_EXP,\n replace: (parentNode, _1, match) => {\n const match0 = match[0]\n if (!match0) {\n return\n }\n // Header row\n if (TABLE_ROW_DIVIDER_REG_EXP.test(match0)) {\n const table = parentNode.getPreviousSibling()\n if (!table || !$isTableNode(table)) {\n return\n }\n\n const rows = table.getChildren()\n const lastRow = rows[rows.length - 1]\n if (!lastRow || !$isTableRowNode(lastRow)) {\n return\n }\n\n // Add header state to row cells\n lastRow.getChildren().forEach((cell) => {\n if (!$isTableCellNode(cell)) {\n return\n }\n cell.setHeaderStyles(TableCellHeaderStates.ROW, TableCellHeaderStates.ROW)\n })\n\n // Remove line\n parentNode.remove()\n return\n }\n\n const matchCells = mapToTableCells(match0, allTransformers)\n\n if (matchCells == null) {\n return\n }\n\n const rows = [matchCells]\n let sibling = parentNode.getPreviousSibling()\n let maxCells = matchCells.length\n\n while (sibling) {\n if (!$isParagraphNode(sibling)) {\n break\n }\n\n if (sibling.getChildrenSize() !== 1) {\n break\n }\n\n const firstChild = sibling.getFirstChild()\n\n if (!$isTextNode(firstChild)) {\n break\n }\n\n const cells = mapToTableCells(firstChild.getTextContent(), allTransformers)\n\n if (cells == null) {\n break\n }\n\n maxCells = Math.max(maxCells, cells.length)\n rows.unshift(cells)\n const previousSibling = sibling.getPreviousSibling()\n sibling.remove()\n sibling = previousSibling\n }\n\n const table = $createTableNode()\n\n for (const cells of rows) {\n const tableRow = $createTableRowNode()\n table.append(tableRow)\n\n for (let i = 0; i < maxCells; i++) {\n tableRow.append(i < cells.length ? cells[i]! : $createTableCell('', allTransformers))\n }\n }\n\n const previousSibling = parentNode.getPreviousSibling()\n if ($isTableNode(previousSibling) && getTableColumnsSize(previousSibling) === maxCells) {\n previousSibling.append(...table.getChildren())\n parentNode.remove()\n } else {\n parentNode.replace(table)\n }\n\n table.selectEnd()\n },\n})\n\nfunction getTableColumnsSize(table: TableNode) {\n const row = table.getFirstChild()\n return $isTableRowNode(row) ? row.getChildrenSize() : 0\n}\n\nconst $createTableCell = (textContent: string, allTransformers: Transformer[]): TableCellNode => {\n textContent = textContent.replace(/\\\\n/g, '\\n')\n const cell = $createTableCellNode(TableCellHeaderStates.NO_STATUS)\n $convertFromMarkdownString(textContent, allTransformers, cell)\n return cell\n}\n\nconst mapToTableCells = (\n textContent: string,\n allTransformers: Transformer[],\n): Array<TableCellNode> | null => {\n const match = textContent.match(TABLE_ROW_REG_EXP)\n if (!match || !match[1]) {\n return null\n }\n return match[1].split('|').map((text) => $createTableCell(text, allTransformers))\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownTransformer.js","names":["$createHeadingNode","$isHeadingNode","HeadingNode","createBlockNode","MarkdownTransformer","enabledHeadingSizes","enabledSizes","map","tag","Number","slice","pattern","size","join","regExp","RegExp","type","dependencies","export","node","exportChildren","level","getTag","repeat","replace","match","length"],"sources":["../../../src/features/heading/markdownTransformer.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\n\nimport type { ElementTransformer } from '../../packages/@lexical/markdown/MarkdownTransformers.js'\n\nimport { createBlockNode } from '../../lexical/utils/markdown/createBlockNode.js'\n\nexport const MarkdownTransformer: (enabledHeadingSizes: HeadingTagType[]) => ElementTransformer = (\n enabledHeadingSizes,\n) => {\n // Convert enabledHeadingSizes to a list of numbers (1 for h1, 2 for h2, etc.)\n const enabledSizes = enabledHeadingSizes.map((tag) => Number(tag.slice(1)))\n\n // Create a regex pattern that matches any of the enabled sizes\n const pattern = `^(${enabledSizes.map((size) => `#{${size}}`).join('|')})\\\\s`\n const regExp = new RegExp(pattern)\n\n return {\n type: 'element',\n dependencies: [HeadingNode],\n export: (node, exportChildren) => {\n if (!$isHeadingNode(node)) {\n return null\n }\n const level = Number(node.getTag().slice(1))\n return '#'.repeat(level) + ' ' + exportChildren(node)\n },\n regExp,\n replace: createBlockNode((match) => {\n const tag = ('h' + match[1]
|
|
1
|
+
{"version":3,"file":"markdownTransformer.js","names":["$createHeadingNode","$isHeadingNode","HeadingNode","createBlockNode","MarkdownTransformer","enabledHeadingSizes","enabledSizes","map","tag","Number","slice","pattern","size","join","regExp","RegExp","type","dependencies","export","node","exportChildren","level","getTag","repeat","replace","match","length"],"sources":["../../../src/features/heading/markdownTransformer.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { $createHeadingNode, $isHeadingNode, HeadingNode } from '@lexical/rich-text'\n\nimport type { ElementTransformer } from '../../packages/@lexical/markdown/MarkdownTransformers.js'\n\nimport { createBlockNode } from '../../lexical/utils/markdown/createBlockNode.js'\n\nexport const MarkdownTransformer: (enabledHeadingSizes: HeadingTagType[]) => ElementTransformer = (\n enabledHeadingSizes,\n) => {\n // Convert enabledHeadingSizes to a list of numbers (1 for h1, 2 for h2, etc.)\n const enabledSizes = enabledHeadingSizes.map((tag) => Number(tag.slice(1)))\n\n // Create a regex pattern that matches any of the enabled sizes\n const pattern = `^(${enabledSizes.map((size) => `#{${size}}`).join('|')})\\\\s`\n const regExp = new RegExp(pattern)\n\n return {\n type: 'element',\n dependencies: [HeadingNode],\n export: (node, exportChildren) => {\n if (!$isHeadingNode(node)) {\n return null\n }\n const level = Number(node.getTag().slice(1))\n return '#'.repeat(level) + ' ' + exportChildren(node)\n },\n regExp,\n replace: createBlockNode((match) => {\n const tag = ('h' + match[1]?.length) as HeadingTagType\n return $createHeadingNode(tag)\n }),\n }\n}\n"],"mappings":"AAEA,SAASA,kBAAkB,EAAEC,cAAc,EAAEC,WAAW,QAAQ;AAIhE,SAASC,eAAe,QAAQ;AAEhC,OAAO,MAAMC,mBAAA,GACXC,mBAAA;EAEA;EACA,MAAMC,YAAA,GAAeD,mBAAA,CAAoBE,GAAG,CAAEC,GAAA,IAAQC,MAAA,CAAOD,GAAA,CAAIE,KAAK,CAAC;EAEvE;EACA,MAAMC,OAAA,GAAU,KAAKL,YAAA,CAAaC,GAAG,CAAEK,IAAA,IAAS,KAAKA,IAAA,GAAO,EAAEC,IAAI,CAAC,UAAU;EAC7E,MAAMC,MAAA,GAAS,IAAIC,MAAA,CAAOJ,OAAA;EAE1B,OAAO;IACLK,IAAA,EAAM;IACNC,YAAA,EAAc,CAACf,WAAA,CAAY;IAC3BgB,MAAA,EAAQA,CAACC,IAAA,EAAMC,cAAA;MACb,IAAI,CAACnB,cAAA,CAAekB,IAAA,GAAO;QACzB,OAAO;MACT;MACA,MAAME,KAAA,GAAQZ,MAAA,CAAOU,IAAA,CAAKG,MAAM,GAAGZ,KAAK,CAAC;MACzC,OAAO,IAAIa,MAAM,CAACF,KAAA,IAAS,MAAMD,cAAA,CAAeD,IAAA;IAClD;IACAL,MAAA;IACAU,OAAA,EAASrB,eAAA,CAAiBsB,KAAA;MACxB,MAAMjB,GAAA,GAAO,MAAMiB,KAAK,CAAC,EAAE,EAAEC,MAAA;MAC7B,OAAO1B,kBAAA,CAAmBQ,GAAA;IAC5B;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/link/client/plugins/autoLink/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAOjD,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,IAAI,CAAA;AAEpE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAuB,UAE3C,MAAM;;;;;SAYrB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/features/link/client/plugins/autoLink/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAOjD,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,IAAI,CAAA;AAEpE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAuB,UAE3C,MAAM;;;;;SAYrB;AAsZD,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,WAAW,CAMvD,CAAA"}
|