@univerjs/docs-drawing-ui 1.0.0-alpha.1 → 1.0.0-insiders.20260701-0ef51b0
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/lib/cjs/index.js +129 -2
- package/lib/es/index.js +129 -2
- package/lib/index.js +129 -2
- package/lib/types/controllers/doc-float-dom.controller.d.ts +11 -1
- package/lib/types/controllers/render-controllers/doc-drawing-transform-update.controller.d.ts +2 -1
- package/lib/umd/index.js +1 -1
- package/package.json +10 -10
- package/LICENSE +0 -176
package/lib/cjs/index.js
CHANGED
|
@@ -666,7 +666,10 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
|
|
|
666
666
|
});
|
|
667
667
|
}));
|
|
668
668
|
this.disposeWithMe(this._commandService.onCommandExecuted(async (command) => {
|
|
669
|
-
if (command.id
|
|
669
|
+
if (command.id !== _univerjs_docs.RichTextEditingMutation.id) return;
|
|
670
|
+
const params = command.params;
|
|
671
|
+
if ((params === null || params === void 0 ? void 0 : params.unitId) && params.unitId !== this._context.unitId) return;
|
|
672
|
+
queueMicrotask(() => {
|
|
670
673
|
this._updateDrawingsEditStatus();
|
|
671
674
|
});
|
|
672
675
|
}));
|
|
@@ -1462,6 +1465,30 @@ function calcDocFloatDomPosition(object, renderUnit) {
|
|
|
1462
1465
|
right: left + width
|
|
1463
1466
|
}, renderUnit.scene, opacity, angle);
|
|
1464
1467
|
}
|
|
1468
|
+
function mergeDocFloatDomRuntimeProps(existingProps, param) {
|
|
1469
|
+
const customBlockRenderViewport = pickValidCustomBlockRenderViewport(param.customBlockRenderViewport);
|
|
1470
|
+
if (!customBlockRenderViewport) return existingProps;
|
|
1471
|
+
return {
|
|
1472
|
+
...existingProps,
|
|
1473
|
+
customBlockRenderViewport
|
|
1474
|
+
};
|
|
1475
|
+
}
|
|
1476
|
+
function pickValidCustomBlockRenderViewport(viewport) {
|
|
1477
|
+
const result = {};
|
|
1478
|
+
if (isNonNegativeNumber(viewport === null || viewport === void 0 ? void 0 : viewport.bleedLeft)) result.bleedLeft = viewport.bleedLeft;
|
|
1479
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.bleedWidth)) result.bleedWidth = viewport.bleedWidth;
|
|
1480
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.contentHeight)) result.contentHeight = viewport.contentHeight;
|
|
1481
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.contentWidth)) result.contentWidth = viewport.contentWidth;
|
|
1482
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.height)) result.height = viewport.height;
|
|
1483
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.viewportHeight)) result.viewportHeight = viewport.viewportHeight;
|
|
1484
|
+
return Object.keys(result).length ? result : void 0;
|
|
1485
|
+
}
|
|
1486
|
+
function isPositiveNumber(value) {
|
|
1487
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
1488
|
+
}
|
|
1489
|
+
function isNonNegativeNumber(value) {
|
|
1490
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
1491
|
+
}
|
|
1465
1492
|
let DocFloatDomController = class DocFloatDomController extends _univerjs_core.Disposable {
|
|
1466
1493
|
constructor(_renderManagerService, _drawingManagerService, _drawingRenderService, _canvasFloatDomService, _univerInstanceService, _commandService) {
|
|
1467
1494
|
super();
|
|
@@ -1479,6 +1506,7 @@ let DocFloatDomController = class DocFloatDomController extends _univerjs_core.D
|
|
|
1479
1506
|
}
|
|
1480
1507
|
_initialize() {
|
|
1481
1508
|
this._drawingAddRemoveListener();
|
|
1509
|
+
this._drawingRuntimePropsListener();
|
|
1482
1510
|
this._initScrollAndZoomEvent();
|
|
1483
1511
|
}
|
|
1484
1512
|
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
@@ -1514,6 +1542,12 @@ let DocFloatDomController = class DocFloatDomController extends _univerjs_core.D
|
|
|
1514
1542
|
const rects = await this._drawingRenderService.renderFloatDom(rectParam, renderObject.scene);
|
|
1515
1543
|
if (rects == null || rects.length === 0) return;
|
|
1516
1544
|
for (const rect of rects) {
|
|
1545
|
+
var _renderObject$scene$g;
|
|
1546
|
+
const runtimeParam = rectParam;
|
|
1547
|
+
const runtimeViewport = pickValidCustomBlockRenderViewport(runtimeParam.customBlockRenderViewport);
|
|
1548
|
+
const preserveRuntimeGeometry = isEmbedFloatDomRuntimeParam(runtimeParam);
|
|
1549
|
+
syncRectWithRuntimeParam(rect, runtimeParam, runtimeViewport, void 0, preserveRuntimeGeometry);
|
|
1550
|
+
const runtimeTransform = runtimeViewport || preserveRuntimeGeometry ? createTransformFromRect(rect) : void 0;
|
|
1517
1551
|
this._addHoverForRect(rect);
|
|
1518
1552
|
const disposableCollection = new _univerjs_core.DisposableCollection();
|
|
1519
1553
|
const position$ = new rxjs.BehaviorSubject(calcDocFloatDomPosition(rect, renderObject.renderUnit));
|
|
@@ -1521,7 +1555,10 @@ let DocFloatDomController = class DocFloatDomController extends _univerjs_core.D
|
|
|
1521
1555
|
const data = rectParam.data;
|
|
1522
1556
|
const info = {
|
|
1523
1557
|
dispose: disposableCollection,
|
|
1558
|
+
preserveRuntimeGeometry,
|
|
1524
1559
|
rect,
|
|
1560
|
+
runtimeTransform,
|
|
1561
|
+
runtimeViewport,
|
|
1525
1562
|
position$,
|
|
1526
1563
|
unitId
|
|
1527
1564
|
};
|
|
@@ -1529,6 +1566,8 @@ let DocFloatDomController = class DocFloatDomController extends _univerjs_core.D
|
|
|
1529
1566
|
position$,
|
|
1530
1567
|
id: rectParam.drawingId,
|
|
1531
1568
|
componentKey: rectParam.componentKey,
|
|
1569
|
+
eventPassThrough: preserveRuntimeGeometry ? false : void 0,
|
|
1570
|
+
preserveOnFocusChange: preserveRuntimeGeometry,
|
|
1532
1571
|
onPointerDown: (evt) => {
|
|
1533
1572
|
canvas.dispatchEvent(new PointerEvent(evt.type, evt));
|
|
1534
1573
|
},
|
|
@@ -1542,20 +1581,42 @@ let DocFloatDomController = class DocFloatDomController extends _univerjs_core.D
|
|
|
1542
1581
|
canvas.dispatchEvent(new WheelEvent(evt.type, evt));
|
|
1543
1582
|
},
|
|
1544
1583
|
data,
|
|
1584
|
+
props: mergeDocFloatDomRuntimeProps(void 0, rectParam),
|
|
1545
1585
|
unitId
|
|
1546
1586
|
});
|
|
1547
1587
|
const listener = rect.onTransformChange$.subscribeEvent(() => {
|
|
1548
1588
|
const newPosition = calcDocFloatDomPosition(rect, renderObject.renderUnit);
|
|
1549
1589
|
position$.next(newPosition);
|
|
1550
1590
|
});
|
|
1591
|
+
const scrollListener = subscribeViewportScrollAfter((_renderObject$scene$g = renderObject.scene.getViewport(_univerjs_docs_ui.VIEWPORT_KEY.VIEW_MAIN)) === null || _renderObject$scene$g === void 0 ? void 0 : _renderObject$scene$g.onScrollAfter$, () => position$.next(calcDocFloatDomPosition(rect, renderObject.renderUnit)));
|
|
1551
1592
|
disposableCollection.add(() => {
|
|
1552
1593
|
this._canvasFloatDomService.removeFloatDom(rectParam.drawingId);
|
|
1553
1594
|
});
|
|
1554
1595
|
listener && disposableCollection.add(listener);
|
|
1596
|
+
scrollListener && disposableCollection.add(scrollListener);
|
|
1555
1597
|
this._domLayerInfoMap.set(rectParam.drawingId, info);
|
|
1556
1598
|
}
|
|
1557
1599
|
});
|
|
1558
1600
|
}
|
|
1601
|
+
_drawingRuntimePropsListener() {
|
|
1602
|
+
this.disposeWithMe(this._drawingManagerService.refreshTransform$.subscribe((params) => {
|
|
1603
|
+
params.forEach((param) => {
|
|
1604
|
+
var _this$_canvasFloatDom;
|
|
1605
|
+
const floatDomInfo = this._domLayerInfoMap.get(param.drawingId);
|
|
1606
|
+
if (!floatDomInfo) return;
|
|
1607
|
+
const runtimeParam = param;
|
|
1608
|
+
const runtimeViewport = pickValidCustomBlockRenderViewport(runtimeParam.customBlockRenderViewport);
|
|
1609
|
+
if (runtimeViewport) floatDomInfo.runtimeViewport = runtimeViewport;
|
|
1610
|
+
if (syncRectWithRuntimeParam(floatDomInfo.rect, runtimeParam, floatDomInfo.runtimeViewport, floatDomInfo.runtimeTransform, floatDomInfo.preserveRuntimeGeometry)) {
|
|
1611
|
+
if (runtimeViewport || floatDomInfo.preserveRuntimeGeometry) floatDomInfo.runtimeTransform = createTransformFromRect(floatDomInfo.rect);
|
|
1612
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(floatDomInfo.unitId);
|
|
1613
|
+
if (renderObject) floatDomInfo.position$.next(calcDocFloatDomPosition(floatDomInfo.rect, renderObject.renderUnit));
|
|
1614
|
+
}
|
|
1615
|
+
const currentProps = (_this$_canvasFloatDom = this._canvasFloatDomService.domLayers.find(([id]) => id === param.drawingId)) === null || _this$_canvasFloatDom === void 0 ? void 0 : _this$_canvasFloatDom[1].props;
|
|
1616
|
+
this._canvasFloatDomService.updateFloatDom(param.drawingId, { props: mergeDocFloatDomRuntimeProps(currentProps, param) });
|
|
1617
|
+
});
|
|
1618
|
+
}));
|
|
1619
|
+
}
|
|
1559
1620
|
_addHoverForRect(o) {
|
|
1560
1621
|
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerEnter$.subscribeEvent(() => {
|
|
1561
1622
|
o.cursor = _univerjs_engine_render.CURSOR_TYPE.GRAB;
|
|
@@ -1656,6 +1717,71 @@ DocFloatDomController = __decorate([
|
|
|
1656
1717
|
__decorateParam(4, _univerjs_core.IUniverInstanceService),
|
|
1657
1718
|
__decorateParam(5, _univerjs_core.ICommandService)
|
|
1658
1719
|
], DocFloatDomController);
|
|
1720
|
+
function syncRectWithRuntimeParam(rect, param, fallbackViewport, fallbackTransform, preserveRuntimeGeometry) {
|
|
1721
|
+
const transform = getRuntimeTransform(param, rect, fallbackViewport, fallbackTransform, preserveRuntimeGeometry);
|
|
1722
|
+
if (!transform) return false;
|
|
1723
|
+
rect.transformByState(transform);
|
|
1724
|
+
return true;
|
|
1725
|
+
}
|
|
1726
|
+
function getRuntimeTransform(param, rect, fallbackViewport, fallbackTransform, preserveRuntimeGeometry) {
|
|
1727
|
+
var _param$transform, _param$transforms, _param$customBlockRen, _runtimeViewport$heig2;
|
|
1728
|
+
const transform = (_param$transform = param.transform) !== null && _param$transform !== void 0 ? _param$transform : (_param$transforms = param.transforms) === null || _param$transforms === void 0 ? void 0 : _param$transforms[0];
|
|
1729
|
+
const runtimeViewport = (_param$customBlockRen = param.customBlockRenderViewport) !== null && _param$customBlockRen !== void 0 ? _param$customBlockRen : fallbackViewport;
|
|
1730
|
+
if (!param.customBlockRenderViewport && preserveRuntimeGeometry && fallbackTransform && transform) {
|
|
1731
|
+
var _fallbackTransform$wi, _fallbackTransform$he;
|
|
1732
|
+
return {
|
|
1733
|
+
...transform,
|
|
1734
|
+
width: (_fallbackTransform$wi = fallbackTransform.width) !== null && _fallbackTransform$wi !== void 0 ? _fallbackTransform$wi : transform.width,
|
|
1735
|
+
height: (_fallbackTransform$he = fallbackTransform.height) !== null && _fallbackTransform$he !== void 0 ? _fallbackTransform$he : transform.height
|
|
1736
|
+
};
|
|
1737
|
+
}
|
|
1738
|
+
if (!transform) {
|
|
1739
|
+
var _runtimeViewport$heig;
|
|
1740
|
+
const height = (_runtimeViewport$heig = runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.height) !== null && _runtimeViewport$heig !== void 0 ? _runtimeViewport$heig : runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.contentHeight;
|
|
1741
|
+
if (!isPositiveNumber(height)) return;
|
|
1742
|
+
return {
|
|
1743
|
+
left: rect.left,
|
|
1744
|
+
top: rect.top,
|
|
1745
|
+
width: rect.width,
|
|
1746
|
+
height,
|
|
1747
|
+
angle: rect.angle
|
|
1748
|
+
};
|
|
1749
|
+
}
|
|
1750
|
+
const height = (_runtimeViewport$heig2 = runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.height) !== null && _runtimeViewport$heig2 !== void 0 ? _runtimeViewport$heig2 : runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.contentHeight;
|
|
1751
|
+
if (!isPositiveNumber(height)) return transform;
|
|
1752
|
+
return {
|
|
1753
|
+
...transform,
|
|
1754
|
+
height
|
|
1755
|
+
};
|
|
1756
|
+
}
|
|
1757
|
+
function isEmbedFloatDomRuntimeParam(param) {
|
|
1758
|
+
const data = param.data;
|
|
1759
|
+
if (!data || typeof data !== "object") return false;
|
|
1760
|
+
const candidate = data;
|
|
1761
|
+
return candidate.version === 1 && typeof candidate.embedId === "string" && typeof candidate.hostAnchorId === "string";
|
|
1762
|
+
}
|
|
1763
|
+
function createTransformFromRect(rect) {
|
|
1764
|
+
return {
|
|
1765
|
+
angle: rect.angle,
|
|
1766
|
+
height: rect.height,
|
|
1767
|
+
left: rect.left,
|
|
1768
|
+
top: rect.top,
|
|
1769
|
+
width: rect.width
|
|
1770
|
+
};
|
|
1771
|
+
}
|
|
1772
|
+
function subscribeViewportScrollAfter(scrollEvent, callback) {
|
|
1773
|
+
if (!scrollEvent || typeof scrollEvent !== "object") return;
|
|
1774
|
+
const eventSubject = scrollEvent;
|
|
1775
|
+
if (typeof eventSubject.subscribeEvent === "function") return eventSubject.subscribeEvent(callback);
|
|
1776
|
+
const observable = scrollEvent;
|
|
1777
|
+
if (typeof observable.subscribe === "function") {
|
|
1778
|
+
const subscription = observable.subscribe(callback);
|
|
1779
|
+
return (0, _univerjs_core.toDisposable)(() => {
|
|
1780
|
+
var _subscription$unsubsc;
|
|
1781
|
+
return (_subscription$unsubsc = subscription.unsubscribe) === null || _subscription$unsubsc === void 0 ? void 0 : _subscription$unsubsc.call(subscription);
|
|
1782
|
+
});
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1659
1785
|
|
|
1660
1786
|
//#endregion
|
|
1661
1787
|
//#region src/menu/image.menu.ts
|
|
@@ -1785,7 +1911,7 @@ function InsertEllipseShapeBelowMenuFactory(accessor) {
|
|
|
1785
1911
|
//#endregion
|
|
1786
1912
|
//#region package.json
|
|
1787
1913
|
var name = "@univerjs/docs-drawing-ui";
|
|
1788
|
-
var version = "1.0.0-
|
|
1914
|
+
var version = "1.0.0-insiders.20260701-0ef51b0";
|
|
1789
1915
|
|
|
1790
1916
|
//#endregion
|
|
1791
1917
|
//#region src/config/config.ts
|
|
@@ -2925,6 +3051,7 @@ let DocDrawingTransformUpdateController = class DocDrawingTransformUpdateControl
|
|
|
2925
3051
|
behindText,
|
|
2926
3052
|
transform,
|
|
2927
3053
|
transforms: [transform],
|
|
3054
|
+
customBlockRenderViewport: drawing.customBlockRenderViewport,
|
|
2928
3055
|
isMultiTransform
|
|
2929
3056
|
};
|
|
2930
3057
|
else if (isMultiTransform === _univerjs_core.BooleanNumber.TRUE) updateDrawingMap[drawingId].transforms.push(transform);
|
package/lib/es/index.js
CHANGED
|
@@ -665,7 +665,10 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
|
|
|
665
665
|
});
|
|
666
666
|
}));
|
|
667
667
|
this.disposeWithMe(this._commandService.onCommandExecuted(async (command) => {
|
|
668
|
-
if (command.id
|
|
668
|
+
if (command.id !== RichTextEditingMutation.id) return;
|
|
669
|
+
const params = command.params;
|
|
670
|
+
if ((params === null || params === void 0 ? void 0 : params.unitId) && params.unitId !== this._context.unitId) return;
|
|
671
|
+
queueMicrotask(() => {
|
|
669
672
|
this._updateDrawingsEditStatus();
|
|
670
673
|
});
|
|
671
674
|
}));
|
|
@@ -1461,6 +1464,30 @@ function calcDocFloatDomPosition(object, renderUnit) {
|
|
|
1461
1464
|
right: left + width
|
|
1462
1465
|
}, renderUnit.scene, opacity, angle);
|
|
1463
1466
|
}
|
|
1467
|
+
function mergeDocFloatDomRuntimeProps(existingProps, param) {
|
|
1468
|
+
const customBlockRenderViewport = pickValidCustomBlockRenderViewport(param.customBlockRenderViewport);
|
|
1469
|
+
if (!customBlockRenderViewport) return existingProps;
|
|
1470
|
+
return {
|
|
1471
|
+
...existingProps,
|
|
1472
|
+
customBlockRenderViewport
|
|
1473
|
+
};
|
|
1474
|
+
}
|
|
1475
|
+
function pickValidCustomBlockRenderViewport(viewport) {
|
|
1476
|
+
const result = {};
|
|
1477
|
+
if (isNonNegativeNumber(viewport === null || viewport === void 0 ? void 0 : viewport.bleedLeft)) result.bleedLeft = viewport.bleedLeft;
|
|
1478
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.bleedWidth)) result.bleedWidth = viewport.bleedWidth;
|
|
1479
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.contentHeight)) result.contentHeight = viewport.contentHeight;
|
|
1480
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.contentWidth)) result.contentWidth = viewport.contentWidth;
|
|
1481
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.height)) result.height = viewport.height;
|
|
1482
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.viewportHeight)) result.viewportHeight = viewport.viewportHeight;
|
|
1483
|
+
return Object.keys(result).length ? result : void 0;
|
|
1484
|
+
}
|
|
1485
|
+
function isPositiveNumber(value) {
|
|
1486
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
1487
|
+
}
|
|
1488
|
+
function isNonNegativeNumber(value) {
|
|
1489
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
1490
|
+
}
|
|
1464
1491
|
let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
1465
1492
|
constructor(_renderManagerService, _drawingManagerService, _drawingRenderService, _canvasFloatDomService, _univerInstanceService, _commandService) {
|
|
1466
1493
|
super();
|
|
@@ -1478,6 +1505,7 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1478
1505
|
}
|
|
1479
1506
|
_initialize() {
|
|
1480
1507
|
this._drawingAddRemoveListener();
|
|
1508
|
+
this._drawingRuntimePropsListener();
|
|
1481
1509
|
this._initScrollAndZoomEvent();
|
|
1482
1510
|
}
|
|
1483
1511
|
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
@@ -1513,6 +1541,12 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1513
1541
|
const rects = await this._drawingRenderService.renderFloatDom(rectParam, renderObject.scene);
|
|
1514
1542
|
if (rects == null || rects.length === 0) return;
|
|
1515
1543
|
for (const rect of rects) {
|
|
1544
|
+
var _renderObject$scene$g;
|
|
1545
|
+
const runtimeParam = rectParam;
|
|
1546
|
+
const runtimeViewport = pickValidCustomBlockRenderViewport(runtimeParam.customBlockRenderViewport);
|
|
1547
|
+
const preserveRuntimeGeometry = isEmbedFloatDomRuntimeParam(runtimeParam);
|
|
1548
|
+
syncRectWithRuntimeParam(rect, runtimeParam, runtimeViewport, void 0, preserveRuntimeGeometry);
|
|
1549
|
+
const runtimeTransform = runtimeViewport || preserveRuntimeGeometry ? createTransformFromRect(rect) : void 0;
|
|
1516
1550
|
this._addHoverForRect(rect);
|
|
1517
1551
|
const disposableCollection = new DisposableCollection();
|
|
1518
1552
|
const position$ = new BehaviorSubject(calcDocFloatDomPosition(rect, renderObject.renderUnit));
|
|
@@ -1520,7 +1554,10 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1520
1554
|
const data = rectParam.data;
|
|
1521
1555
|
const info = {
|
|
1522
1556
|
dispose: disposableCollection,
|
|
1557
|
+
preserveRuntimeGeometry,
|
|
1523
1558
|
rect,
|
|
1559
|
+
runtimeTransform,
|
|
1560
|
+
runtimeViewport,
|
|
1524
1561
|
position$,
|
|
1525
1562
|
unitId
|
|
1526
1563
|
};
|
|
@@ -1528,6 +1565,8 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1528
1565
|
position$,
|
|
1529
1566
|
id: rectParam.drawingId,
|
|
1530
1567
|
componentKey: rectParam.componentKey,
|
|
1568
|
+
eventPassThrough: preserveRuntimeGeometry ? false : void 0,
|
|
1569
|
+
preserveOnFocusChange: preserveRuntimeGeometry,
|
|
1531
1570
|
onPointerDown: (evt) => {
|
|
1532
1571
|
canvas.dispatchEvent(new PointerEvent(evt.type, evt));
|
|
1533
1572
|
},
|
|
@@ -1541,20 +1580,42 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1541
1580
|
canvas.dispatchEvent(new WheelEvent(evt.type, evt));
|
|
1542
1581
|
},
|
|
1543
1582
|
data,
|
|
1583
|
+
props: mergeDocFloatDomRuntimeProps(void 0, rectParam),
|
|
1544
1584
|
unitId
|
|
1545
1585
|
});
|
|
1546
1586
|
const listener = rect.onTransformChange$.subscribeEvent(() => {
|
|
1547
1587
|
const newPosition = calcDocFloatDomPosition(rect, renderObject.renderUnit);
|
|
1548
1588
|
position$.next(newPosition);
|
|
1549
1589
|
});
|
|
1590
|
+
const scrollListener = subscribeViewportScrollAfter((_renderObject$scene$g = renderObject.scene.getViewport(VIEWPORT_KEY.VIEW_MAIN)) === null || _renderObject$scene$g === void 0 ? void 0 : _renderObject$scene$g.onScrollAfter$, () => position$.next(calcDocFloatDomPosition(rect, renderObject.renderUnit)));
|
|
1550
1591
|
disposableCollection.add(() => {
|
|
1551
1592
|
this._canvasFloatDomService.removeFloatDom(rectParam.drawingId);
|
|
1552
1593
|
});
|
|
1553
1594
|
listener && disposableCollection.add(listener);
|
|
1595
|
+
scrollListener && disposableCollection.add(scrollListener);
|
|
1554
1596
|
this._domLayerInfoMap.set(rectParam.drawingId, info);
|
|
1555
1597
|
}
|
|
1556
1598
|
});
|
|
1557
1599
|
}
|
|
1600
|
+
_drawingRuntimePropsListener() {
|
|
1601
|
+
this.disposeWithMe(this._drawingManagerService.refreshTransform$.subscribe((params) => {
|
|
1602
|
+
params.forEach((param) => {
|
|
1603
|
+
var _this$_canvasFloatDom;
|
|
1604
|
+
const floatDomInfo = this._domLayerInfoMap.get(param.drawingId);
|
|
1605
|
+
if (!floatDomInfo) return;
|
|
1606
|
+
const runtimeParam = param;
|
|
1607
|
+
const runtimeViewport = pickValidCustomBlockRenderViewport(runtimeParam.customBlockRenderViewport);
|
|
1608
|
+
if (runtimeViewport) floatDomInfo.runtimeViewport = runtimeViewport;
|
|
1609
|
+
if (syncRectWithRuntimeParam(floatDomInfo.rect, runtimeParam, floatDomInfo.runtimeViewport, floatDomInfo.runtimeTransform, floatDomInfo.preserveRuntimeGeometry)) {
|
|
1610
|
+
if (runtimeViewport || floatDomInfo.preserveRuntimeGeometry) floatDomInfo.runtimeTransform = createTransformFromRect(floatDomInfo.rect);
|
|
1611
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(floatDomInfo.unitId);
|
|
1612
|
+
if (renderObject) floatDomInfo.position$.next(calcDocFloatDomPosition(floatDomInfo.rect, renderObject.renderUnit));
|
|
1613
|
+
}
|
|
1614
|
+
const currentProps = (_this$_canvasFloatDom = this._canvasFloatDomService.domLayers.find(([id]) => id === param.drawingId)) === null || _this$_canvasFloatDom === void 0 ? void 0 : _this$_canvasFloatDom[1].props;
|
|
1615
|
+
this._canvasFloatDomService.updateFloatDom(param.drawingId, { props: mergeDocFloatDomRuntimeProps(currentProps, param) });
|
|
1616
|
+
});
|
|
1617
|
+
}));
|
|
1618
|
+
}
|
|
1558
1619
|
_addHoverForRect(o) {
|
|
1559
1620
|
this.disposeWithMe(toDisposable(o.onPointerEnter$.subscribeEvent(() => {
|
|
1560
1621
|
o.cursor = CURSOR_TYPE.GRAB;
|
|
@@ -1655,6 +1716,71 @@ DocFloatDomController = __decorate([
|
|
|
1655
1716
|
__decorateParam(4, IUniverInstanceService),
|
|
1656
1717
|
__decorateParam(5, ICommandService)
|
|
1657
1718
|
], DocFloatDomController);
|
|
1719
|
+
function syncRectWithRuntimeParam(rect, param, fallbackViewport, fallbackTransform, preserveRuntimeGeometry) {
|
|
1720
|
+
const transform = getRuntimeTransform(param, rect, fallbackViewport, fallbackTransform, preserveRuntimeGeometry);
|
|
1721
|
+
if (!transform) return false;
|
|
1722
|
+
rect.transformByState(transform);
|
|
1723
|
+
return true;
|
|
1724
|
+
}
|
|
1725
|
+
function getRuntimeTransform(param, rect, fallbackViewport, fallbackTransform, preserveRuntimeGeometry) {
|
|
1726
|
+
var _param$transform, _param$transforms, _param$customBlockRen, _runtimeViewport$heig2;
|
|
1727
|
+
const transform = (_param$transform = param.transform) !== null && _param$transform !== void 0 ? _param$transform : (_param$transforms = param.transforms) === null || _param$transforms === void 0 ? void 0 : _param$transforms[0];
|
|
1728
|
+
const runtimeViewport = (_param$customBlockRen = param.customBlockRenderViewport) !== null && _param$customBlockRen !== void 0 ? _param$customBlockRen : fallbackViewport;
|
|
1729
|
+
if (!param.customBlockRenderViewport && preserveRuntimeGeometry && fallbackTransform && transform) {
|
|
1730
|
+
var _fallbackTransform$wi, _fallbackTransform$he;
|
|
1731
|
+
return {
|
|
1732
|
+
...transform,
|
|
1733
|
+
width: (_fallbackTransform$wi = fallbackTransform.width) !== null && _fallbackTransform$wi !== void 0 ? _fallbackTransform$wi : transform.width,
|
|
1734
|
+
height: (_fallbackTransform$he = fallbackTransform.height) !== null && _fallbackTransform$he !== void 0 ? _fallbackTransform$he : transform.height
|
|
1735
|
+
};
|
|
1736
|
+
}
|
|
1737
|
+
if (!transform) {
|
|
1738
|
+
var _runtimeViewport$heig;
|
|
1739
|
+
const height = (_runtimeViewport$heig = runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.height) !== null && _runtimeViewport$heig !== void 0 ? _runtimeViewport$heig : runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.contentHeight;
|
|
1740
|
+
if (!isPositiveNumber(height)) return;
|
|
1741
|
+
return {
|
|
1742
|
+
left: rect.left,
|
|
1743
|
+
top: rect.top,
|
|
1744
|
+
width: rect.width,
|
|
1745
|
+
height,
|
|
1746
|
+
angle: rect.angle
|
|
1747
|
+
};
|
|
1748
|
+
}
|
|
1749
|
+
const height = (_runtimeViewport$heig2 = runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.height) !== null && _runtimeViewport$heig2 !== void 0 ? _runtimeViewport$heig2 : runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.contentHeight;
|
|
1750
|
+
if (!isPositiveNumber(height)) return transform;
|
|
1751
|
+
return {
|
|
1752
|
+
...transform,
|
|
1753
|
+
height
|
|
1754
|
+
};
|
|
1755
|
+
}
|
|
1756
|
+
function isEmbedFloatDomRuntimeParam(param) {
|
|
1757
|
+
const data = param.data;
|
|
1758
|
+
if (!data || typeof data !== "object") return false;
|
|
1759
|
+
const candidate = data;
|
|
1760
|
+
return candidate.version === 1 && typeof candidate.embedId === "string" && typeof candidate.hostAnchorId === "string";
|
|
1761
|
+
}
|
|
1762
|
+
function createTransformFromRect(rect) {
|
|
1763
|
+
return {
|
|
1764
|
+
angle: rect.angle,
|
|
1765
|
+
height: rect.height,
|
|
1766
|
+
left: rect.left,
|
|
1767
|
+
top: rect.top,
|
|
1768
|
+
width: rect.width
|
|
1769
|
+
};
|
|
1770
|
+
}
|
|
1771
|
+
function subscribeViewportScrollAfter(scrollEvent, callback) {
|
|
1772
|
+
if (!scrollEvent || typeof scrollEvent !== "object") return;
|
|
1773
|
+
const eventSubject = scrollEvent;
|
|
1774
|
+
if (typeof eventSubject.subscribeEvent === "function") return eventSubject.subscribeEvent(callback);
|
|
1775
|
+
const observable = scrollEvent;
|
|
1776
|
+
if (typeof observable.subscribe === "function") {
|
|
1777
|
+
const subscription = observable.subscribe(callback);
|
|
1778
|
+
return toDisposable(() => {
|
|
1779
|
+
var _subscription$unsubsc;
|
|
1780
|
+
return (_subscription$unsubsc = subscription.unsubscribe) === null || _subscription$unsubsc === void 0 ? void 0 : _subscription$unsubsc.call(subscription);
|
|
1781
|
+
});
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1658
1784
|
|
|
1659
1785
|
//#endregion
|
|
1660
1786
|
//#region src/menu/image.menu.ts
|
|
@@ -1784,7 +1910,7 @@ function InsertEllipseShapeBelowMenuFactory(accessor) {
|
|
|
1784
1910
|
//#endregion
|
|
1785
1911
|
//#region package.json
|
|
1786
1912
|
var name = "@univerjs/docs-drawing-ui";
|
|
1787
|
-
var version = "1.0.0-
|
|
1913
|
+
var version = "1.0.0-insiders.20260701-0ef51b0";
|
|
1788
1914
|
|
|
1789
1915
|
//#endregion
|
|
1790
1916
|
//#region src/config/config.ts
|
|
@@ -2924,6 +3050,7 @@ let DocDrawingTransformUpdateController = class DocDrawingTransformUpdateControl
|
|
|
2924
3050
|
behindText,
|
|
2925
3051
|
transform,
|
|
2926
3052
|
transforms: [transform],
|
|
3053
|
+
customBlockRenderViewport: drawing.customBlockRenderViewport,
|
|
2927
3054
|
isMultiTransform
|
|
2928
3055
|
};
|
|
2929
3056
|
else if (isMultiTransform === BooleanNumber.TRUE) updateDrawingMap[drawingId].transforms.push(transform);
|
package/lib/index.js
CHANGED
|
@@ -665,7 +665,10 @@ let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController ex
|
|
|
665
665
|
});
|
|
666
666
|
}));
|
|
667
667
|
this.disposeWithMe(this._commandService.onCommandExecuted(async (command) => {
|
|
668
|
-
if (command.id
|
|
668
|
+
if (command.id !== RichTextEditingMutation.id) return;
|
|
669
|
+
const params = command.params;
|
|
670
|
+
if ((params === null || params === void 0 ? void 0 : params.unitId) && params.unitId !== this._context.unitId) return;
|
|
671
|
+
queueMicrotask(() => {
|
|
669
672
|
this._updateDrawingsEditStatus();
|
|
670
673
|
});
|
|
671
674
|
}));
|
|
@@ -1461,6 +1464,30 @@ function calcDocFloatDomPosition(object, renderUnit) {
|
|
|
1461
1464
|
right: left + width
|
|
1462
1465
|
}, renderUnit.scene, opacity, angle);
|
|
1463
1466
|
}
|
|
1467
|
+
function mergeDocFloatDomRuntimeProps(existingProps, param) {
|
|
1468
|
+
const customBlockRenderViewport = pickValidCustomBlockRenderViewport(param.customBlockRenderViewport);
|
|
1469
|
+
if (!customBlockRenderViewport) return existingProps;
|
|
1470
|
+
return {
|
|
1471
|
+
...existingProps,
|
|
1472
|
+
customBlockRenderViewport
|
|
1473
|
+
};
|
|
1474
|
+
}
|
|
1475
|
+
function pickValidCustomBlockRenderViewport(viewport) {
|
|
1476
|
+
const result = {};
|
|
1477
|
+
if (isNonNegativeNumber(viewport === null || viewport === void 0 ? void 0 : viewport.bleedLeft)) result.bleedLeft = viewport.bleedLeft;
|
|
1478
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.bleedWidth)) result.bleedWidth = viewport.bleedWidth;
|
|
1479
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.contentHeight)) result.contentHeight = viewport.contentHeight;
|
|
1480
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.contentWidth)) result.contentWidth = viewport.contentWidth;
|
|
1481
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.height)) result.height = viewport.height;
|
|
1482
|
+
if (isPositiveNumber(viewport === null || viewport === void 0 ? void 0 : viewport.viewportHeight)) result.viewportHeight = viewport.viewportHeight;
|
|
1483
|
+
return Object.keys(result).length ? result : void 0;
|
|
1484
|
+
}
|
|
1485
|
+
function isPositiveNumber(value) {
|
|
1486
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
1487
|
+
}
|
|
1488
|
+
function isNonNegativeNumber(value) {
|
|
1489
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
1490
|
+
}
|
|
1464
1491
|
let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
1465
1492
|
constructor(_renderManagerService, _drawingManagerService, _drawingRenderService, _canvasFloatDomService, _univerInstanceService, _commandService) {
|
|
1466
1493
|
super();
|
|
@@ -1478,6 +1505,7 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1478
1505
|
}
|
|
1479
1506
|
_initialize() {
|
|
1480
1507
|
this._drawingAddRemoveListener();
|
|
1508
|
+
this._drawingRuntimePropsListener();
|
|
1481
1509
|
this._initScrollAndZoomEvent();
|
|
1482
1510
|
}
|
|
1483
1511
|
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
@@ -1513,6 +1541,12 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1513
1541
|
const rects = await this._drawingRenderService.renderFloatDom(rectParam, renderObject.scene);
|
|
1514
1542
|
if (rects == null || rects.length === 0) return;
|
|
1515
1543
|
for (const rect of rects) {
|
|
1544
|
+
var _renderObject$scene$g;
|
|
1545
|
+
const runtimeParam = rectParam;
|
|
1546
|
+
const runtimeViewport = pickValidCustomBlockRenderViewport(runtimeParam.customBlockRenderViewport);
|
|
1547
|
+
const preserveRuntimeGeometry = isEmbedFloatDomRuntimeParam(runtimeParam);
|
|
1548
|
+
syncRectWithRuntimeParam(rect, runtimeParam, runtimeViewport, void 0, preserveRuntimeGeometry);
|
|
1549
|
+
const runtimeTransform = runtimeViewport || preserveRuntimeGeometry ? createTransformFromRect(rect) : void 0;
|
|
1516
1550
|
this._addHoverForRect(rect);
|
|
1517
1551
|
const disposableCollection = new DisposableCollection();
|
|
1518
1552
|
const position$ = new BehaviorSubject(calcDocFloatDomPosition(rect, renderObject.renderUnit));
|
|
@@ -1520,7 +1554,10 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1520
1554
|
const data = rectParam.data;
|
|
1521
1555
|
const info = {
|
|
1522
1556
|
dispose: disposableCollection,
|
|
1557
|
+
preserveRuntimeGeometry,
|
|
1523
1558
|
rect,
|
|
1559
|
+
runtimeTransform,
|
|
1560
|
+
runtimeViewport,
|
|
1524
1561
|
position$,
|
|
1525
1562
|
unitId
|
|
1526
1563
|
};
|
|
@@ -1528,6 +1565,8 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1528
1565
|
position$,
|
|
1529
1566
|
id: rectParam.drawingId,
|
|
1530
1567
|
componentKey: rectParam.componentKey,
|
|
1568
|
+
eventPassThrough: preserveRuntimeGeometry ? false : void 0,
|
|
1569
|
+
preserveOnFocusChange: preserveRuntimeGeometry,
|
|
1531
1570
|
onPointerDown: (evt) => {
|
|
1532
1571
|
canvas.dispatchEvent(new PointerEvent(evt.type, evt));
|
|
1533
1572
|
},
|
|
@@ -1541,20 +1580,42 @@ let DocFloatDomController = class DocFloatDomController extends Disposable {
|
|
|
1541
1580
|
canvas.dispatchEvent(new WheelEvent(evt.type, evt));
|
|
1542
1581
|
},
|
|
1543
1582
|
data,
|
|
1583
|
+
props: mergeDocFloatDomRuntimeProps(void 0, rectParam),
|
|
1544
1584
|
unitId
|
|
1545
1585
|
});
|
|
1546
1586
|
const listener = rect.onTransformChange$.subscribeEvent(() => {
|
|
1547
1587
|
const newPosition = calcDocFloatDomPosition(rect, renderObject.renderUnit);
|
|
1548
1588
|
position$.next(newPosition);
|
|
1549
1589
|
});
|
|
1590
|
+
const scrollListener = subscribeViewportScrollAfter((_renderObject$scene$g = renderObject.scene.getViewport(VIEWPORT_KEY.VIEW_MAIN)) === null || _renderObject$scene$g === void 0 ? void 0 : _renderObject$scene$g.onScrollAfter$, () => position$.next(calcDocFloatDomPosition(rect, renderObject.renderUnit)));
|
|
1550
1591
|
disposableCollection.add(() => {
|
|
1551
1592
|
this._canvasFloatDomService.removeFloatDom(rectParam.drawingId);
|
|
1552
1593
|
});
|
|
1553
1594
|
listener && disposableCollection.add(listener);
|
|
1595
|
+
scrollListener && disposableCollection.add(scrollListener);
|
|
1554
1596
|
this._domLayerInfoMap.set(rectParam.drawingId, info);
|
|
1555
1597
|
}
|
|
1556
1598
|
});
|
|
1557
1599
|
}
|
|
1600
|
+
_drawingRuntimePropsListener() {
|
|
1601
|
+
this.disposeWithMe(this._drawingManagerService.refreshTransform$.subscribe((params) => {
|
|
1602
|
+
params.forEach((param) => {
|
|
1603
|
+
var _this$_canvasFloatDom;
|
|
1604
|
+
const floatDomInfo = this._domLayerInfoMap.get(param.drawingId);
|
|
1605
|
+
if (!floatDomInfo) return;
|
|
1606
|
+
const runtimeParam = param;
|
|
1607
|
+
const runtimeViewport = pickValidCustomBlockRenderViewport(runtimeParam.customBlockRenderViewport);
|
|
1608
|
+
if (runtimeViewport) floatDomInfo.runtimeViewport = runtimeViewport;
|
|
1609
|
+
if (syncRectWithRuntimeParam(floatDomInfo.rect, runtimeParam, floatDomInfo.runtimeViewport, floatDomInfo.runtimeTransform, floatDomInfo.preserveRuntimeGeometry)) {
|
|
1610
|
+
if (runtimeViewport || floatDomInfo.preserveRuntimeGeometry) floatDomInfo.runtimeTransform = createTransformFromRect(floatDomInfo.rect);
|
|
1611
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(floatDomInfo.unitId);
|
|
1612
|
+
if (renderObject) floatDomInfo.position$.next(calcDocFloatDomPosition(floatDomInfo.rect, renderObject.renderUnit));
|
|
1613
|
+
}
|
|
1614
|
+
const currentProps = (_this$_canvasFloatDom = this._canvasFloatDomService.domLayers.find(([id]) => id === param.drawingId)) === null || _this$_canvasFloatDom === void 0 ? void 0 : _this$_canvasFloatDom[1].props;
|
|
1615
|
+
this._canvasFloatDomService.updateFloatDom(param.drawingId, { props: mergeDocFloatDomRuntimeProps(currentProps, param) });
|
|
1616
|
+
});
|
|
1617
|
+
}));
|
|
1618
|
+
}
|
|
1558
1619
|
_addHoverForRect(o) {
|
|
1559
1620
|
this.disposeWithMe(toDisposable(o.onPointerEnter$.subscribeEvent(() => {
|
|
1560
1621
|
o.cursor = CURSOR_TYPE.GRAB;
|
|
@@ -1655,6 +1716,71 @@ DocFloatDomController = __decorate([
|
|
|
1655
1716
|
__decorateParam(4, IUniverInstanceService),
|
|
1656
1717
|
__decorateParam(5, ICommandService)
|
|
1657
1718
|
], DocFloatDomController);
|
|
1719
|
+
function syncRectWithRuntimeParam(rect, param, fallbackViewport, fallbackTransform, preserveRuntimeGeometry) {
|
|
1720
|
+
const transform = getRuntimeTransform(param, rect, fallbackViewport, fallbackTransform, preserveRuntimeGeometry);
|
|
1721
|
+
if (!transform) return false;
|
|
1722
|
+
rect.transformByState(transform);
|
|
1723
|
+
return true;
|
|
1724
|
+
}
|
|
1725
|
+
function getRuntimeTransform(param, rect, fallbackViewport, fallbackTransform, preserveRuntimeGeometry) {
|
|
1726
|
+
var _param$transform, _param$transforms, _param$customBlockRen, _runtimeViewport$heig2;
|
|
1727
|
+
const transform = (_param$transform = param.transform) !== null && _param$transform !== void 0 ? _param$transform : (_param$transforms = param.transforms) === null || _param$transforms === void 0 ? void 0 : _param$transforms[0];
|
|
1728
|
+
const runtimeViewport = (_param$customBlockRen = param.customBlockRenderViewport) !== null && _param$customBlockRen !== void 0 ? _param$customBlockRen : fallbackViewport;
|
|
1729
|
+
if (!param.customBlockRenderViewport && preserveRuntimeGeometry && fallbackTransform && transform) {
|
|
1730
|
+
var _fallbackTransform$wi, _fallbackTransform$he;
|
|
1731
|
+
return {
|
|
1732
|
+
...transform,
|
|
1733
|
+
width: (_fallbackTransform$wi = fallbackTransform.width) !== null && _fallbackTransform$wi !== void 0 ? _fallbackTransform$wi : transform.width,
|
|
1734
|
+
height: (_fallbackTransform$he = fallbackTransform.height) !== null && _fallbackTransform$he !== void 0 ? _fallbackTransform$he : transform.height
|
|
1735
|
+
};
|
|
1736
|
+
}
|
|
1737
|
+
if (!transform) {
|
|
1738
|
+
var _runtimeViewport$heig;
|
|
1739
|
+
const height = (_runtimeViewport$heig = runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.height) !== null && _runtimeViewport$heig !== void 0 ? _runtimeViewport$heig : runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.contentHeight;
|
|
1740
|
+
if (!isPositiveNumber(height)) return;
|
|
1741
|
+
return {
|
|
1742
|
+
left: rect.left,
|
|
1743
|
+
top: rect.top,
|
|
1744
|
+
width: rect.width,
|
|
1745
|
+
height,
|
|
1746
|
+
angle: rect.angle
|
|
1747
|
+
};
|
|
1748
|
+
}
|
|
1749
|
+
const height = (_runtimeViewport$heig2 = runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.height) !== null && _runtimeViewport$heig2 !== void 0 ? _runtimeViewport$heig2 : runtimeViewport === null || runtimeViewport === void 0 ? void 0 : runtimeViewport.contentHeight;
|
|
1750
|
+
if (!isPositiveNumber(height)) return transform;
|
|
1751
|
+
return {
|
|
1752
|
+
...transform,
|
|
1753
|
+
height
|
|
1754
|
+
};
|
|
1755
|
+
}
|
|
1756
|
+
function isEmbedFloatDomRuntimeParam(param) {
|
|
1757
|
+
const data = param.data;
|
|
1758
|
+
if (!data || typeof data !== "object") return false;
|
|
1759
|
+
const candidate = data;
|
|
1760
|
+
return candidate.version === 1 && typeof candidate.embedId === "string" && typeof candidate.hostAnchorId === "string";
|
|
1761
|
+
}
|
|
1762
|
+
function createTransformFromRect(rect) {
|
|
1763
|
+
return {
|
|
1764
|
+
angle: rect.angle,
|
|
1765
|
+
height: rect.height,
|
|
1766
|
+
left: rect.left,
|
|
1767
|
+
top: rect.top,
|
|
1768
|
+
width: rect.width
|
|
1769
|
+
};
|
|
1770
|
+
}
|
|
1771
|
+
function subscribeViewportScrollAfter(scrollEvent, callback) {
|
|
1772
|
+
if (!scrollEvent || typeof scrollEvent !== "object") return;
|
|
1773
|
+
const eventSubject = scrollEvent;
|
|
1774
|
+
if (typeof eventSubject.subscribeEvent === "function") return eventSubject.subscribeEvent(callback);
|
|
1775
|
+
const observable = scrollEvent;
|
|
1776
|
+
if (typeof observable.subscribe === "function") {
|
|
1777
|
+
const subscription = observable.subscribe(callback);
|
|
1778
|
+
return toDisposable(() => {
|
|
1779
|
+
var _subscription$unsubsc;
|
|
1780
|
+
return (_subscription$unsubsc = subscription.unsubscribe) === null || _subscription$unsubsc === void 0 ? void 0 : _subscription$unsubsc.call(subscription);
|
|
1781
|
+
});
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1658
1784
|
|
|
1659
1785
|
//#endregion
|
|
1660
1786
|
//#region src/menu/image.menu.ts
|
|
@@ -1784,7 +1910,7 @@ function InsertEllipseShapeBelowMenuFactory(accessor) {
|
|
|
1784
1910
|
//#endregion
|
|
1785
1911
|
//#region package.json
|
|
1786
1912
|
var name = "@univerjs/docs-drawing-ui";
|
|
1787
|
-
var version = "1.0.0-
|
|
1913
|
+
var version = "1.0.0-insiders.20260701-0ef51b0";
|
|
1788
1914
|
|
|
1789
1915
|
//#endregion
|
|
1790
1916
|
//#region src/config/config.ts
|
|
@@ -2924,6 +3050,7 @@ let DocDrawingTransformUpdateController = class DocDrawingTransformUpdateControl
|
|
|
2924
3050
|
behindText,
|
|
2925
3051
|
transform,
|
|
2926
3052
|
transforms: [transform],
|
|
3053
|
+
customBlockRenderViewport: drawing.customBlockRenderViewport,
|
|
2927
3054
|
isMultiTransform
|
|
2928
3055
|
};
|
|
2929
3056
|
else if (isMultiTransform === BooleanNumber.TRUE) updateDrawingMap[drawingId].transforms.push(transform);
|
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import type { ITransformState } from '@univerjs/core';
|
|
17
|
+
import type { IDocFloatDom } from '@univerjs/docs-drawing';
|
|
16
18
|
import type { IDocFloatDomDataBase } from '@univerjs/drawing';
|
|
17
|
-
import type { IBoundRectNoAngle, Scene } from '@univerjs/engine-render';
|
|
19
|
+
import type { IBoundRectNoAngle, IDocsCustomBlockRenderViewport, Scene } from '@univerjs/engine-render';
|
|
18
20
|
import type { IFloatDomLayout } from '@univerjs/ui';
|
|
19
21
|
import { Disposable, ICommandService, IUniverInstanceService } from '@univerjs/core';
|
|
20
22
|
import { IDrawingManagerService } from '@univerjs/drawing';
|
|
@@ -24,6 +26,13 @@ import { CanvasFloatDomService } from '@univerjs/ui';
|
|
|
24
26
|
export declare function calcDocFloatDomPositionByRect(rect: IBoundRectNoAngle, scene: Scene, opacity?: number, angle?: number): IFloatDomLayout;
|
|
25
27
|
interface IDocFloatDomParams extends IDocFloatDomDataBase {
|
|
26
28
|
}
|
|
29
|
+
type IDocFloatDomRuntimeViewport = Partial<Pick<IDocsCustomBlockRenderViewport, 'bleedLeft' | 'bleedWidth' | 'contentHeight' | 'contentWidth' | 'height' | 'viewportHeight'>>;
|
|
30
|
+
interface IDocFloatDomRuntimeParam extends IDocFloatDom {
|
|
31
|
+
customBlockRenderViewport?: IDocFloatDomRuntimeViewport;
|
|
32
|
+
transform?: Partial<ITransformState>;
|
|
33
|
+
transforms?: Array<Partial<ITransformState>>;
|
|
34
|
+
}
|
|
35
|
+
export declare function mergeDocFloatDomRuntimeProps(existingProps: Record<string, unknown> | undefined, param: IDocFloatDomRuntimeParam): Record<string, unknown> | undefined;
|
|
27
36
|
export declare class DocFloatDomController extends Disposable {
|
|
28
37
|
private readonly _renderManagerService;
|
|
29
38
|
private readonly _drawingManagerService;
|
|
@@ -38,6 +47,7 @@ export declare class DocFloatDomController extends Disposable {
|
|
|
38
47
|
private _getSceneAndTransformerByDrawingSearch;
|
|
39
48
|
private _drawingAddRemoveListener;
|
|
40
49
|
private _insertRects;
|
|
50
|
+
private _drawingRuntimePropsListener;
|
|
41
51
|
private _addHoverForRect;
|
|
42
52
|
private _removeDom;
|
|
43
53
|
private _initScrollAndZoomEvent;
|