diff --git a/packages/core/src/types/interfaces/i-row-data.ts b/packages/core/src/types/interfaces/i-row-data.ts index 362438102e..d146b693d2 100644 --- a/packages/core/src/types/interfaces/i-row-data.ts +++ b/packages/core/src/types/interfaces/i-row-data.ts @@ -40,3 +40,9 @@ export interface IRowData { */ hd?: BooleanNumber; } + +export interface IRowAutoHeightInfo { + row: number; + autoHeight?: number; +} + diff --git a/packages/core/src/types/interfaces/i-selection-data.ts b/packages/core/src/types/interfaces/i-selection-data.ts index 1a23603bf8..7106f5793c 100644 --- a/packages/core/src/types/interfaces/i-selection-data.ts +++ b/packages/core/src/types/interfaces/i-selection-data.ts @@ -72,3 +72,66 @@ export interface ITextRangeParam extends ITextRange { segmentId?: string; //The ID of the header, footer or footnote the location is in. An empty segment ID signifies the document's body. isActive?: boolean; // Whether the text range is active or current range. } + +/** + * Determines whether the cell(row, column) is within the range of the merged cells. + */ +export function getCellInfoInMergeData(row: number, column: number, mergeData?: IRange[]): ISelectionCell { + let isMerged = false; // The upper left cell only renders the content + let isMergedMainCell = false; + let newEndRow = row; + let newEndColumn = column; + let mergeRow = row; + let mergeColumn = column; + + if (mergeData == null) { + return { + actualRow: row, + actualColumn: column, + isMergedMainCell, + isMerged, + endRow: newEndRow, + endColumn: newEndColumn, + startRow: mergeRow, + startColumn: mergeColumn, + }; + } + + for (let i = 0; i < mergeData.length; i++) { + const { + startRow: startRowMarge, + endRow: endRowMarge, + startColumn: startColumnMarge, + endColumn: endColumnMarge, + } = mergeData[i]; + if (row === startRowMarge && column === startColumnMarge) { + newEndRow = endRowMarge; + newEndColumn = endColumnMarge; + mergeRow = startRowMarge; + mergeColumn = startColumnMarge; + + isMergedMainCell = true; + break; + } + if (row >= startRowMarge && row <= endRowMarge && column >= startColumnMarge && column <= endColumnMarge) { + newEndRow = endRowMarge; + newEndColumn = endColumnMarge; + mergeRow = startRowMarge; + mergeColumn = startColumnMarge; + + isMerged = true; + break; + } + } + + return { + actualRow: row, + actualColumn: column, + isMergedMainCell, + isMerged, + endRow: newEndRow, + endColumn: newEndColumn, + startRow: mergeRow, + startColumn: mergeColumn, + }; +} diff --git a/packages/engine-render/src/basics/tools.ts b/packages/engine-render/src/basics/tools.ts index 9cb3888612..64a1217713 100644 --- a/packages/engine-render/src/basics/tools.ts +++ b/packages/engine-render/src/basics/tools.ts @@ -18,13 +18,12 @@ import type { IRange, IRangeWithCoord, IScale, - ISelectionCell, ISelectionCellWithCoord, IStyleBase, LocaleService, Nullable, } from '@univerjs/core'; -import { BaselineOffset, ColorKit, DEFAULT_STYLES, FontStyleType, Rectangle, Tools } from '@univerjs/core'; +import { BaselineOffset, ColorKit, DEFAULT_STYLES, FontStyleType, getCellInfoInMergeData, Rectangle, Tools } from '@univerjs/core'; import * as cjk from 'cjk-regex'; import { FontCache } from '../components/docs/layout/shaping-engine/font-cache'; @@ -599,69 +598,6 @@ export function getCellByIndex( }; } -/** - * Determines whether the cell(row, column) is within the range of the merged cells. - */ -export function getCellInfoInMergeData(row: number, column: number, mergeData?: IRange[]): ISelectionCell { - let isMerged = false; // The upper left cell only renders the content - let isMergedMainCell = false; - let newEndRow = row; - let newEndColumn = column; - let mergeRow = row; - let mergeColumn = column; - - if (mergeData == null) { - return { - actualRow: row, - actualColumn: column, - isMergedMainCell, - isMerged, - endRow: newEndRow, - endColumn: newEndColumn, - startRow: mergeRow, - startColumn: mergeColumn, - }; - } - - for (let i = 0; i < mergeData.length; i++) { - const { - startRow: startRowMarge, - endRow: endRowMarge, - startColumn: startColumnMarge, - endColumn: endColumnMarge, - } = mergeData[i]; - if (row === startRowMarge && column === startColumnMarge) { - newEndRow = endRowMarge; - newEndColumn = endColumnMarge; - mergeRow = startRowMarge; - mergeColumn = startColumnMarge; - - isMergedMainCell = true; - break; - } - if (row >= startRowMarge && row <= endRowMarge && column >= startColumnMarge && column <= endColumnMarge) { - newEndRow = endRowMarge; - newEndColumn = endColumnMarge; - mergeRow = startRowMarge; - mergeColumn = startColumnMarge; - - isMerged = true; - break; - } - } - - return { - actualRow: row, - actualColumn: column, - isMergedMainCell, - isMerged, - endRow: newEndRow, - endColumn: newEndColumn, - startRow: mergeRow, - startColumn: mergeColumn, - }; -} - /** * Determine whether there are any cells in a row that are not in the merged cells, mainly used for the calculation of auto height */ diff --git a/packages/engine-render/src/components/sheets/sheet-skeleton.ts b/packages/engine-render/src/components/sheets/sheet-skeleton.ts index 1a8f5c5cf4..627426f566 100644 --- a/packages/engine-render/src/components/sheets/sheet-skeleton.ts +++ b/packages/engine-render/src/components/sheets/sheet-skeleton.ts @@ -23,6 +23,7 @@ import { DEFAULT_STYLES, DocumentDataModel, extractPureTextFromCell, + getCellInfoInMergeData, getColorStyle, HorizontalAlign, IContextService, @@ -46,6 +47,7 @@ import type { IObjectArrayPrimitiveType, IPaddingData, IRange, + IRowAutoHeightInfo, IRowData, ISelectionCellWithCoord, IStyleBase, @@ -67,7 +69,6 @@ import type { IDocumentSkeletonColumn } from '../../basics/i-document-skeleton-c import { degToRad, getCellByIndex, - getCellInfoInMergeData, getCellPositionByIndex, getFontStyleString, hasUnMergedCellInRow, @@ -137,11 +138,6 @@ export function getDocsSkeletonPageSize(documentSkeleton: DocumentSkeleton, angl }; } -export interface IRowAutoHeightInfo { - row: number; - autoHeight?: number; -} - interface ICellOtherConfig { /** * textRotation diff --git a/packages/sheets-formula/src/controllers/prompt.controller.ts b/packages/sheets-formula/src/controllers/prompt.controller.ts index ea956ffcf2..9dea505dfe 100644 --- a/packages/sheets-formula/src/controllers/prompt.controller.ts +++ b/packages/sheets-formula/src/controllers/prompt.controller.ts @@ -30,6 +30,7 @@ import { DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY, DOCS_NORMAL_EDITOR_UNIT_ID_KEY, FOCUSING_EDITOR_INPUT_FORMULA, + getCellInfoInMergeData, ICommandService, IContextService, isFormulaString, @@ -65,7 +66,6 @@ import { } from '@univerjs/engine-formula'; import { DeviceInputEventType, - getCellInfoInMergeData, IRenderManagerService, ITextSelectionRenderManager, } from '@univerjs/engine-render'; diff --git a/packages/sheets-ui/src/controllers/auto-fill.controller.ts b/packages/sheets-ui/src/controllers/auto-fill.controller.ts index cb38246216..e7266cf870 100644 --- a/packages/sheets-ui/src/controllers/auto-fill.controller.ts +++ b/packages/sheets-ui/src/controllers/auto-fill.controller.ts @@ -19,6 +19,7 @@ import { Direction, Disposable, DisposableCollection, + getCellInfoInMergeData, ICommandService, IUniverInstanceService, LifecycleStages, @@ -29,7 +30,7 @@ import { Tools, UniverInstanceType, } from '@univerjs/core'; -import { DeviceInputEventType, getCellInfoInMergeData } from '@univerjs/engine-render'; +import { DeviceInputEventType } from '@univerjs/engine-render'; import type { IAddWorksheetMergeMutationParams, IRemoveSheetMutationParams, diff --git a/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts b/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts index fdc802852c..e5383c3ae2 100644 --- a/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts +++ b/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts @@ -17,6 +17,7 @@ import type { ICellData, IMutationInfo, IObjectMatrixPrimitiveType, IRange, IStyleData, Workbook } from '@univerjs/core'; import { Disposable, + getCellInfoInMergeData, ICommandService, isICellData, IUniverInstanceService, @@ -31,7 +32,6 @@ import { import { Inject, Injector } from '@wendellhu/redi'; import type { IAddWorksheetMergeMutationParams, IRemoveWorksheetMergeMutationParams, ISetRangeValuesMutationParams } from '@univerjs/sheets'; import { AddMergeUndoMutationFactory, AddWorksheetMergeMutation, getAddMergeMutationRangeByType, RemoveMergeUndoMutationFactory, RemoveWorksheetMergeMutation, SelectionManagerService, SetRangeValuesCommand, SetRangeValuesMutation, SetRangeValuesUndoMutationFactory, SheetInterceptorService } from '@univerjs/sheets'; -import { getCellInfoInMergeData } from '@univerjs/engine-render'; import { ApplyFormatPainterCommand, SetOnceFormatPainterCommand, diff --git a/packages/sheets/package.json b/packages/sheets/package.json index ae26901c89..d6ecec355d 100644 --- a/packages/sheets/package.json +++ b/packages/sheets/package.json @@ -63,7 +63,6 @@ "peerDependencies": { "@univerjs/core": "workspace:*", "@univerjs/engine-formula": "workspace:*", - "@univerjs/engine-render": "workspace:*", "@univerjs/rpc": "workspace:*", "@wendellhu/redi": "0.15.4", "rxjs": ">=7.0.0" @@ -75,7 +74,6 @@ "@univerjs/core": "workspace:*", "@univerjs/engine-formula": "workspace:*", "@univerjs/engine-numfmt": "workspace:*", - "@univerjs/engine-render": "workspace:*", "@univerjs/rpc": "workspace:*", "@univerjs/shared": "workspace:*", "@wendellhu/redi": "0.15.4", diff --git a/packages/sheets/src/basics/selection.ts b/packages/sheets/src/basics/selection.ts index e2e7fdc0db..fda54026a9 100644 --- a/packages/sheets/src/basics/selection.ts +++ b/packages/sheets/src/basics/selection.ts @@ -22,8 +22,7 @@ import type { Nullable, ThemeService, } from '@univerjs/core'; -import { ColorKit, makeCellRangeToRangeData } from '@univerjs/core'; -import { getCellInfoInMergeData } from '@univerjs/engine-render'; +import { ColorKit, getCellInfoInMergeData, makeCellRangeToRangeData } from '@univerjs/core'; export const SELECTION_CONTROL_BORDER_BUFFER_WIDTH = 1.5; // The draggable range of the selection is too thin, making it easy for users to miss. Therefore, a buffer gap is provided to make it easier for users to select. diff --git a/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts b/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts index 7cdfff4565..8e0cd000b2 100644 --- a/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts +++ b/packages/sheets/src/commands/mutations/set-worksheet-row-height.mutation.ts @@ -14,9 +14,8 @@ * limitations under the License. */ -import type { BooleanNumber, IMutation, IObjectArrayPrimitiveType, IRange, Nullable, Workbook } from '@univerjs/core'; +import type { BooleanNumber, IMutation, IObjectArrayPrimitiveType, IRange, IRowAutoHeightInfo, Nullable, Workbook } from '@univerjs/core'; import { CommandType, IUniverInstanceService } from '@univerjs/core'; -import type { IRowAutoHeightInfo } from '@univerjs/engine-render'; import type { IAccessor } from '@wendellhu/redi'; const MAXIMUM_ROW_HEIGHT = 2000; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aab6274b61..95d2f4aead 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1115,9 +1115,6 @@ importers: '@univerjs/engine-numfmt': specifier: workspace:* version: link:../engine-numfmt - '@univerjs/engine-render': - specifier: workspace:* - version: link:../engine-render '@univerjs/rpc': specifier: workspace:* version: link:../rpc