diff --git a/packages/sheets-drawing-ui/src/facade/f-worksheet.ts b/packages/sheets-drawing-ui/src/facade/f-worksheet.ts index e67e121d64de..75bf987c09a9 100644 --- a/packages/sheets-drawing-ui/src/facade/f-worksheet.ts +++ b/packages/sheets-drawing-ui/src/facade/f-worksheet.ts @@ -100,8 +100,9 @@ export interface IFWorksheetLegacy { }, { width: 100, height: 30, - x: '100%', - y: '100%'}, + marginX: '100%', // margin percent to range width, or pixel + marginY: '100%' + }, 'AIButton') // dom id } @@ -129,11 +130,8 @@ export interface IFWorksheetLegacy { props: { a: 1, }, - data: { - aa: '128', - }, }, - {width: 100, height: 40, x: 0, y: 0}, + {width: 100, height: 40, marginX: 0, marginY: 0, horizonOffsetAlign: 'right'}, 'ai-selector' // dom id ) } diff --git a/packages/sheets-drawing-ui/src/services/canvas-float-dom-manager.service.ts b/packages/sheets-drawing-ui/src/services/canvas-float-dom-manager.service.ts index 9e475d64db25..4c36c28596f5 100644 --- a/packages/sheets-drawing-ui/src/services/canvas-float-dom-manager.service.ts +++ b/packages/sheets-drawing-ui/src/services/canvas-float-dom-manager.service.ts @@ -84,8 +84,10 @@ interface ICanvasFloatDomInfo { export interface IDOMRangeLayout { width: number; height: number; - x?: number; // offsetX - y?: number; // offsetY + horizonOffsetAlign?: 'left' | 'right'; + verticalOffsetAlign?: 'top' | 'bottom'; + marginX?: number; + marginY?: number; } export interface ILimitBound extends IBoundRectNoAngle { @@ -747,8 +749,8 @@ export class SheetCanvasFloatDomManagerService extends Disposable { const domWidth = domPos.width ?? rangeWidth; const domHeight = domPos.height ?? rangeHeight; - const domLeft = rangePosition.startX + calculateOffset(domPos.x, rangeWidth); - const domTop = rangePosition.startY + calculateOffset(domPos.y, rangeHeight); + const domLeft = rangePosition.startX + calculateOffset(domPos.marginX, rangeWidth); + const domTop = rangePosition.startY + calculateOffset(domPos.marginY, rangeHeight); const sheetDrawingParam: ISheetFloatDom = { unitId, @@ -972,8 +974,22 @@ export class SheetCanvasFloatDomManagerService extends Disposable { const domWidth = domLayout.width ?? rangeWidth; const domHeight = domLayout.height ?? rangeHeight; - const domLeft = headerPosition.startX + calculateOffset(domLayout.x, rangeWidth); - const domTop = headerPosition.startY + calculateOffset(domLayout.y, rangeHeight); + let domLeft = 0; + let domTop = 0; + if (domLayout.horizonOffsetAlign === 'right') { + const offsetX = calculateOffset(domLayout.marginX, rangeWidth); + domLeft = headerPosition.endX - offsetX - domWidth; + } else { + // default align left + domLeft = headerPosition.startX + calculateOffset(domLayout.marginX, rangeWidth); + } + + if (domLayout.verticalOffsetAlign === 'bottom') { + const offsetY = calculateOffset(domLayout.marginY, rangeHeight); + domTop = headerPosition.endY - offsetY - domHeight; + } else { + domTop = headerPosition.startY + calculateOffset(domLayout.marginY, rangeHeight); + } const sheetDrawingParam: ISheetFloatDom = { unitId,