@univerjs/docs-drawing-ui 0.20.1 → 0.21.0
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 +3506 -1
- package/lib/cjs/locale/ca-ES.js +60 -1
- package/lib/cjs/locale/en-US.js +75 -1
- package/lib/cjs/locale/es-ES.js +60 -1
- package/lib/cjs/locale/fa-IR.js +60 -1
- package/lib/cjs/locale/fr-FR.js +60 -1
- package/lib/cjs/locale/ja-JP.js +60 -1
- package/lib/cjs/locale/ko-KR.js +60 -1
- package/lib/cjs/locale/ru-RU.js +60 -1
- package/lib/cjs/locale/sk-SK.js +60 -1
- package/lib/cjs/locale/vi-VN.js +60 -1
- package/lib/cjs/locale/zh-CN.js +60 -1
- package/lib/cjs/locale/zh-TW.js +60 -1
- package/lib/es/index.js +3482 -1
- package/lib/es/locale/ca-ES.js +59 -1
- package/lib/es/locale/en-US.js +74 -1
- package/lib/es/locale/es-ES.js +59 -1
- package/lib/es/locale/fa-IR.js +59 -1
- package/lib/es/locale/fr-FR.js +59 -1
- package/lib/es/locale/ja-JP.js +59 -1
- package/lib/es/locale/ko-KR.js +59 -1
- package/lib/es/locale/ru-RU.js +59 -1
- package/lib/es/locale/sk-SK.js +59 -1
- package/lib/es/locale/vi-VN.js +59 -1
- package/lib/es/locale/zh-CN.js +59 -1
- package/lib/es/locale/zh-TW.js +59 -1
- package/lib/index.js +3482 -1
- package/lib/locale/ca-ES.js +59 -1
- package/lib/locale/en-US.js +74 -1
- package/lib/locale/es-ES.js +59 -1
- package/lib/locale/fa-IR.js +59 -1
- package/lib/locale/fr-FR.js +59 -1
- package/lib/locale/ja-JP.js +59 -1
- package/lib/locale/ko-KR.js +59 -1
- package/lib/locale/ru-RU.js +59 -1
- package/lib/locale/sk-SK.js +59 -1
- package/lib/locale/vi-VN.js +59 -1
- package/lib/locale/zh-CN.js +59 -1
- package/lib/locale/zh-TW.js +59 -1
- package/lib/umd/index.js +1 -1
- package/package.json +13 -13
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1,3506 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@univerjs/core`),t=require(`@univerjs/docs-drawing`),n=require(`@univerjs/docs`),r=require(`@univerjs/docs-ui`),i=require(`@univerjs/engine-render`),a=require(`@univerjs/design`),o=require(`@univerjs/drawing`),s=require(`@univerjs/ui`),c=require(`rxjs`),l=require(`@univerjs/drawing-ui`),u=require(`react`),d=require(`react/jsx-runtime`);const f={id:`doc.command.remove-doc-image`,type:e.CommandType.COMMAND,handler:(t,a)=>{var o,s,c;let l=t.get(e.ICommandService),u=t.get(e.IUniverInstanceService),d=t.get(i.IRenderManagerService),f=u.getCurrentUniverDocInstance();if(a==null||f==null)return!1;let p=d.getRenderById(a.unitId).with(r.DocSelectionRenderService),{drawings:m}=a,h=(o=p.getSegment())==null?``:o,g=new e.TextX,_=e.JSONX.getInstance(),v=(s=(c=f.getSelfOrHeaderFooterModel(h).getBody())==null?void 0:c.customBlocks)==null?[]:s,y=m.map(e=>v.find(t=>t.blockId===e.drawingId)).filter(e=>!!e).sort((e,t)=>e.startIndex>t.startIndex?1:-1),b=m[0].unitId,x=new e.MemoryCursor;x.reset();let S=y[0].startIndex,C=[{startOffset:S,endOffset:S}],w={id:n.RichTextEditingMutation.id,params:{unitId:b,actions:[],textRanges:C}},T=[];for(let t of y){let{startIndex:n}=t;n>x.cursor&&g.push({t:e.TextXActionType.RETAIN,len:n-x.cursor}),g.push({t:e.TextXActionType.DELETE,len:1}),x.moveCursorTo(n+1)}let E=(0,r.getRichTextEditPath)(f,h);T.push(_.editOp(g.serialize(),E));for(let e of y){var D;let{blockId:t}=e,n=((D=f.getDrawings())==null?{}:D)[t],r=f.getDrawingsOrder().indexOf(t),i=_.removeOp([`drawings`,t],n),a=_.removeOp([`drawingsOrder`,r],t);T.push(i),T.push(a)}return w.params.actions=T.reduce((t,n)=>e.JSONX.compose(t,n),null),!!l.syncExecuteCommand(w.id,w.params)}},p={id:`doc.command.delete-drawing`,type:e.CommandType.COMMAND,handler:n=>{let r=n.get(e.ICommandService),i=n.get(t.IDocDrawingService).getFocusDrawings();if(i.length===0)return!1;let{unitId:a}=i[0],o=i.map(e=>{let{unitId:t,subUnitId:n,drawingId:r,drawingType:i}=e;return{unitId:t,subUnitId:n,drawingId:r,drawingType:i}});return r.executeCommand(f.id,{unitId:a,drawings:o})}},m={id:`doc.command.group-doc-image`,type:e.CommandType.COMMAND,handler:(e,t)=>!1},h={id:`doc.command.insert-doc-image`,type:e.CommandType.COMMAND,handler:(t,i)=>{var a,o;if(i==null)return!1;let s=t.get(e.ICommandService),c=t.get(n.DocSelectionManagerService),l=t.get(e.IUniverInstanceService),u=c.getActiveTextRange(),d=l.getCurrentUniverDocInstance();if(u==null||d==null)return!1;let f=d.getUnitId(),{drawings:p}=i,{collapsed:m,startOffset:h,segmentId:g}=u,_=d.getSelfOrHeaderFooterModel(g).getBody();if(_==null)return!1;let v=new e.TextX,y=e.JSONX.getInstance(),b=[],x=(a=(o=d.getSnapshot().drawingsOrder)==null?void 0:o.length)==null?0:a,S=0;if(m)h>0&&v.push({t:e.TextXActionType.RETAIN,len:h});else{var C,w;let t=e.BuildTextUtils.selection.delete([u],_,0,null,!1);v.push(...t);let n=(0,r.getCustomBlockIdsInSelections)(_,[u]),i=(C=d.getDrawings())==null?{}:C,a=(w=d.getDrawingsOrder())==null?[]:w,o=n.sort((e,t)=>a.indexOf(e)>a.indexOf(t)?-1:a.indexOf(e)<a.indexOf(t)?1:0);if(o.length>0)for(let e of o){let t=i[e],n=a.indexOf(e);if(t==null||n<0)continue;let r=y.removeOp([`drawings`,e],t),o=y.removeOp([`drawingsOrder`,n],e);b.push(r),b.push(o),S++}}v.push({t:e.TextXActionType.INSERT,body:{dataStream:`\b`.repeat(p.length),customBlocks:p.map((e,t)=>({startIndex:t,blockId:e.drawingId}))},len:p.length});let T=(0,r.getRichTextEditPath)(d,g),E=y.editOp(v.serialize(),T);b.push(E);for(let e of p){let{drawingId:t}=e,n=y.insertOp([`drawings`,t],e),r=y.insertOp([`drawingsOrder`,x-S],t);b.push(n),b.push(r)}let D={id:n.RichTextEditingMutation.id,params:{unitId:f,actions:[],textRanges:[]}};return D.params.actions=b.reduce((t,n)=>e.JSONX.compose(t,n),null),!!s.syncExecuteCommand(D.id,D.params)}},g={id:`doc.command.set-drawing-arrange`,type:e.CommandType.COMMAND,handler:(r,i)=>{let a=r.get(e.ICommandService),o=r.get(t.IDocDrawingService);if(i==null)return!1;let{unitId:s,subUnitId:c,drawingIds:l,arrangeType:u}=i,d={unitId:s,subUnitId:c,drawingIds:l},f;if(u===e.ArrangeTypeEnum.forward?f=o.getForwardDrawingsOp(d):u===e.ArrangeTypeEnum.backward?f=o.getBackwardDrawingOp(d):u===e.ArrangeTypeEnum.front?f=o.getFrontDrawingsOp(d):u===e.ArrangeTypeEnum.back&&(f=o.getBackDrawingsOp(d)),f==null)return!1;let{redo:p}=f;if(p==null)return!1;let m=[],h=e.Tools.deepClone(p);h=h.slice(3),h.unshift(`drawingsOrder`),m.push(h);let g={id:n.RichTextEditingMutation.id,params:{unitId:s,actions:[],textRanges:null}};return g.params.actions=m.reduce((t,n)=>e.JSONX.compose(t,n),null),!!a.syncExecuteCommand(g.id,g.params)}},_={id:`doc.command.ungroup-doc-image`,type:e.CommandType.COMMAND,handler:(e,n)=>{let r=e.get(t.IDocDrawingService);if(!n)return!1;let i=[];n.forEach(({parent:e,children:t})=>{i.push(e.unitId),t.forEach(e=>{i.push(e.unitId)})});let{unitId:a,subUnitId:o,undo:s,redo:c,objects:l}=r.getUngroupDrawingOp(n);return!1}};function v(e){"@babel/helpers - typeof";return v=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},v(e)}function y(e,t){if(v(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(v(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function b(e){var t=y(e,`string`);return v(t)==`symbol`?t:t+``}function x(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var S=class{constructor(){x(this,`_refreshDrawings$`,new c.BehaviorSubject(null)),x(this,`refreshDrawings$`,this._refreshDrawings$.asObservable())}refreshDrawings(e){this._refreshDrawings$.next(e)}};function C(e,t){return function(n,r){t(n,r,e)}}function w(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let T=class extends e.Disposable{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f){super(),this._context=e,this._commandService=t,this._docSelectionManagerService=n,this._renderManagerSrv=r,this._imageIoService=i,this._docDrawingService=a,this._drawingManagerService=o,this._contextService=s,this._messageService=c,this._localeService=l,this._docSelectionRenderService=u,this._docRefreshDrawingsService=d,this._fileOpenerService=f,this._updateOrderListener(),this._groupDrawingListener(),this._focusDrawingListener(),this._transformDrawingListener(),this._editAreaChangeListener()}dispose(){super.dispose(),delete this._context}async insertDocImage(){let e=await this._fileOpenerService.openFile({multiple:!0,accept:o.DRAWING_IMAGE_ALLOW_IMAGE_LIST.map(e=>`.${e.replace(`image/`,``)}`).join(`,`)}),t=e.length;return t>o.DRAWING_IMAGE_COUNT_LIMIT?(this._messageService.show({type:a.MessageType.Error,content:this._localeService.t(`update-status.exceedMaxCount`,String(o.DRAWING_IMAGE_COUNT_LIMIT))}),!1):t===0?!1:(await this._insertFloatImages(e),!0)}async _insertFloatImages(t){let n=[];try{n=await Promise.all(t.map(e=>this._imageIoService.saveImage(e)))}catch(e){let t=e.message,n=``;switch(t){case o.ImageUploadStatusType.ERROR_EXCEED_SIZE:n=this._localeService.t(`update-status.exceedMaxSize`,String(o.DRAWING_IMAGE_ALLOW_SIZE/(1024*1024)));break;case o.ImageUploadStatusType.ERROR_IMAGE_TYPE:n=this._localeService.t(`update-status.invalidImageType`);break;case o.ImageUploadStatusType.ERROR_IMAGE:n=this._localeService.t(`update-status.invalidImage`);break;default:break}this._messageService.show({type:a.MessageType.Error,content:n})}if(n.length===0)return;let{unitId:i}=this._context,s=[];for(let t of n){if(t==null)continue;let{imageId:n,imageSourceType:a,source:c,base64Cache:l}=t,{width:u,height:d,image:f}=await(0,o.getImageSize)(l||``);this._imageIoService.addImageSourceCache(n,a,f);let p=1;if(u>o.DRAWING_IMAGE_WIDTH_LIMIT||d>o.DRAWING_IMAGE_HEIGHT_LIMIT){let e=o.DRAWING_IMAGE_WIDTH_LIMIT/u,t=o.DRAWING_IMAGE_HEIGHT_LIMIT/d;p=Math.min(e,t)}let m=this._getImagePosition(u*p,d*p);if(m==null)return;let h={unitId:i,subUnitId:i,drawingId:n,drawingType:e.DrawingTypeEnum.DRAWING_IMAGE,imageSourceType:a,source:c,transform:(0,r.docDrawingPositionToTransform)(m),docTransform:m,behindDoc:e.BooleanNumber.FALSE,title:``,description:``,layoutType:e.PositionedObjectLayoutType.INLINE,wrapText:e.WrapTextType.BOTH_SIDES,distB:0,distL:0,distR:0,distT:0};this._isInsertInHeaderFooter()&&(h.isMultiTransform=e.BooleanNumber.TRUE,h.transforms=h.transform?[h.transform]:null),s.push(h)}this._commandService.executeCommand(h.id,{unitId:i,drawings:s})}_isInsertInHeaderFooter(){var e;let{unitId:t}=this._context,r=(e=this._renderManagerSrv.getRenderById(t))==null?void 0:e.with(n.DocSkeletonManagerService).getViewModel(),a=r==null?void 0:r.getEditArea();return a===i.DocumentEditArea.HEADER||a===i.DocumentEditArea.FOOTER}_getImagePosition(t,n){let r=this._docSelectionRenderService.getActiveTextRange(),i=(r==null?void 0:r.getAbsolutePosition())||{left:0,top:0};return{size:{width:t,height:n},positionH:{relativeFrom:e.ObjectRelativeFromH.PAGE,posOffset:i.left},positionV:{relativeFrom:e.ObjectRelativeFromV.PARAGRAPH,posOffset:0},angle:0}}_updateOrderListener(){this.disposeWithMe(this._drawingManagerService.featurePluginOrderUpdate$.subscribe(e=>{let{unitId:t,subUnitId:n,drawingIds:r,arrangeType:i}=e;this._commandService.executeCommand(g.id,{unitId:t,subUnitId:n,drawingIds:r,arrangeType:i})}))}_groupDrawingListener(){this.disposeWithMe(this._drawingManagerService.featurePluginGroupUpdate$.subscribe(e=>{this._commandService.executeCommand(m.id,e)})),this.disposeWithMe(this._drawingManagerService.featurePluginUngroupUpdate$.subscribe(e=>{this._commandService.executeCommand(_.id,e)}))}_getCurrentSceneAndTransformer(){let{scene:e,mainComponent:t}=this._context;if(e==null||t==null)return;let n=e.getTransformerByCreate(),{docsLeft:r,docsTop:i}=t.getOffsetConfig();return{scene:e,transformer:n,docsLeft:r,docsTop:i}}_transformDrawingListener(){let e=this._getCurrentSceneAndTransformer();if(e&&e.transformer)this.disposeWithMe(e.transformer.changeEnd$.pipe((0,c.debounceTime)(30)).subscribe(e=>{this._docSelectionManagerService.refreshSelection()}));else throw Error(`transformer is not init`)}_focusDrawingListener(){this.disposeWithMe(this._drawingManagerService.focus$.subscribe(t=>{var n;let{transformer:r,docsLeft:i,docsTop:a}=(n=this._getCurrentSceneAndTransformer())==null?{}:n;if(t==null||t.length===0)this._contextService.setContextValue(e.FOCUSING_COMMON_DRAWINGS,!1),this._docDrawingService.focusDrawing([]),r&&r.resetProps({zeroTop:0,zeroLeft:0});else{this._contextService.setContextValue(e.FOCUSING_COMMON_DRAWINGS,!0),this._docDrawingService.focusDrawing(t),this._setDrawingSelections(t);let n=this._docSelectionRenderService.getSegment(),o=this._findSegmentIdByDrawingId(t[0].drawingId);n!==o&&this._docSelectionRenderService.setSegment(o),r&&r.resetProps({zeroTop:a,zeroLeft:i})}}))}_findSegmentIdByDrawingId(e){var t;let{unit:n}=this._context,{body:r,headers:i={},footers:a={}}=n.getSnapshot();if(((t=r==null?void 0:r.customBlocks)==null?[]:t).some(t=>t.blockId===e))return``;for(let t of Object.keys(i)){var o;if((o=i[t].body.customBlocks)!=null&&o.some(t=>t.blockId===e))return t}for(let t of Object.keys(a)){var s;if((s=a[t].body.customBlocks)!=null&&s.some(t=>t.blockId===e))return t}return``}_updateDrawingsEditStatus(){var t;if(!this._context)return;let{unit:r,scene:a,unitId:s}=this._context,c=(t=this._renderManagerSrv.getRenderById(s))==null?void 0:t.with(n.DocSkeletonManagerService).getViewModel();if(c==null||r==null)return;let{drawings:l={}}=r.getSnapshot(),u=c.getEditArea()===i.DocumentEditArea.BODY;for(let t of Object.keys(l)){let n=l[t],r=(0,o.getDrawingShapeKeyByDrawingSearch)({unitId:s,drawingId:n.drawingId,subUnitId:s}),i=a.fuzzyMathObjects(r,!0);if(i.length)for(let t of i){a.detachTransformerFrom(t);try{t.setOpacity(.5)}catch{}if(u&&n.isMultiTransform!==e.BooleanNumber.TRUE||!u&&n.isMultiTransform===e.BooleanNumber.TRUE){n.allowTransform!==!1&&a.attachTransformerTo(t);try{t.setOpacity(1)}catch{}}}}}_editAreaChangeListener(){var e;let{unitId:t}=this._context,r=(e=this._renderManagerSrv.getRenderById(t))==null?void 0:e.with(n.DocSkeletonManagerService).getViewModel();r!=null&&(this._updateDrawingsEditStatus(),this.disposeWithMe(r.editAreaChange$.subscribe(()=>{this._updateDrawingsEditStatus()})),this.disposeWithMe(this._docRefreshDrawingsService.refreshDrawings$.subscribe(e=>{e!=null&&queueMicrotask(()=>{this._updateDrawingsEditStatus()})})),this.disposeWithMe(this._commandService.onCommandExecuted(async e=>{e.id===n.RichTextEditingMutation.id&&queueMicrotask(()=>{this._updateDrawingsEditStatus()})})))}_setDrawingSelections(e){var t,n;let{unit:r}=this._context,i=(t=(n=r.getSnapshot().body)==null?void 0:n.customBlocks)==null?[]:t,a=e.map(e=>{let t=e.drawingId,n=i.find(e=>e.blockId===t);return n?n.startIndex:null}).filter(e=>e!==null).map(e=>({startOffset:e,endOffset:e+1}));this._docSelectionManagerService.replaceDocRanges(a)}};T=w([C(1,e.ICommandService),C(2,(0,e.Inject)(n.DocSelectionManagerService)),C(3,i.IRenderManagerService),C(4,o.IImageIoService),C(5,t.IDocDrawingService),C(6,o.IDrawingManagerService),C(7,e.IContextService),C(8,s.IMessageService),C(9,(0,e.Inject)(e.LocaleService)),C(10,(0,e.Inject)(r.DocSelectionRenderService)),C(11,(0,e.Inject)(S)),C(12,s.ILocalFileService)],T);const E={id:`doc.command.insert-float-image`,type:e.CommandType.COMMAND,handler:t=>{var n,r;let a=t.get(e.IUniverInstanceService),o=t.get(i.IRenderManagerService);return(n=(r=(0,i.getCurrentTypeOfRenderer)(e.UniverInstanceType.UNIVER_DOC,a,o))==null?void 0:r.with(T).insertDocImage())==null?!1:n}};let D=function(e){return e.INLINE=`inline`,e.BEHIND_TEXT=`behindText`,e.IN_FRONT_OF_TEXT=`inFrontOfText`,e.WRAP_SQUARE=`wrapSquare`,e.WRAP_TOP_AND_BOTTOM=`wrapTopAndBottom`,e}({});const O={[D.INLINE]:e.PositionedObjectLayoutType.INLINE,[D.WRAP_SQUARE]:e.PositionedObjectLayoutType.WRAP_SQUARE,[D.WRAP_TOP_AND_BOTTOM]:e.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM,[D.IN_FRONT_OF_TEXT]:e.PositionedObjectLayoutType.WRAP_NONE,[D.BEHIND_TEXT]:e.PositionedObjectLayoutType.WRAP_NONE};function k(t,n,i,a,o,s,c){var l;let u=new e.TextX,d=e.JSONX.getInstance(),f=[],p=s.getSelfOrHeaderFooterModel(n).getBody(),m=s.getSelfOrHeaderFooterModel(t).getBody();if(p==null||m==null)return;let h=(l=p.customBlocks)==null||(l=l.find(e=>e.blockId===o))==null?void 0:l.startIndex;if(h!=null){if(a=Math.min(m.dataStream.length-2,a),t===n){if(a<h?(a>0&&u.push({t:e.TextXActionType.RETAIN,len:a}),u.push({t:e.TextXActionType.INSERT,body:{dataStream:`\b`,customBlocks:[{startIndex:0,blockId:o}]},len:1}),u.push({t:e.TextXActionType.RETAIN,len:h-a}),u.push({t:e.TextXActionType.DELETE,len:1})):(h>0&&u.push({t:e.TextXActionType.RETAIN,len:h}),u.push({t:e.TextXActionType.DELETE,len:1}),a-h-1>0&&u.push({t:e.TextXActionType.RETAIN,len:a-h-1}),u.push({t:e.TextXActionType.INSERT,body:{dataStream:`\b`,customBlocks:[{startIndex:0,blockId:o}]},len:1})),a!==h){let e=(0,r.getRichTextEditPath)(s,n),t=d.editOp(u.serialize(),e);f.push(t)}}else{h>0&&u.push({t:e.TextXActionType.RETAIN,len:h}),u.push({t:e.TextXActionType.DELETE,len:1});let l=(0,r.getRichTextEditPath)(s,n),p=d.editOp(u.serialize(),l);f.push(p),u.empty(),a>0&&u.push({t:e.TextXActionType.RETAIN,len:a}),u.push({t:e.TextXActionType.INSERT,body:{dataStream:`\b`,customBlocks:[{startIndex:0,blockId:o}]},len:1}),l=(0,r.getRichTextEditPath)(s,t),p=d.editOp(u.serialize(),l),f.push(p),c.setSegment(t),c.setSegmentPage(i)}return f}}const A={id:`doc.command.update-doc-drawing-wrapping-style`,type:e.CommandType.COMMAND,handler:(t,r)=>{if(r==null)return!1;let{drawings:a,wrappingStyle:o,unitId:s}=r,c=t.get(e.ICommandService),l=t.get(e.IUniverInstanceService),u=t.get(i.IRenderManagerService).getRenderById(s),d=u==null?void 0:u.with(n.DocSkeletonManagerService).getSkeleton().getSkeletonData(),f=u==null?void 0:u.with(n.DocSkeletonManagerService).getViewModel(),p=u==null?void 0:u.scene,m=l.getCurrentUniverDocInstance();if(m==null||d==null||p==null||f==null)return!1;let h=f.getEditArea(),g=p.getTransformerByCreate(),{pages:_,skeHeaders:v,skeFooters:y}=d,b=e.JSONX.getInstance(),x=[],{drawings:S={}}=m.getSnapshot();for(let t of a){let{drawingId:n}=t,r=S[n].layoutType,a=O[o];if(r!==a){let e=b.replaceOp([`drawings`,n,`layoutType`],r,a);x.push(e)}if(o===D.BEHIND_TEXT||o===D.IN_FRONT_OF_TEXT){let t=S[n].behindDoc,r=o===D.BEHIND_TEXT?e.BooleanNumber.TRUE:e.BooleanNumber.FALSE;if(t!==r){let e=b.replaceOp([`drawings`,n,`behindDoc`],t,r);x.push(e)}}if(o===D.INLINE)continue;let s=null,c=0,l=0;for(let e of _){let{headerId:t,footerId:r,marginTop:a,marginLeft:o,marginBottom:u,pageWidth:d,pageHeight:f}=e;switch(h){case i.DocumentEditArea.HEADER:{var C;let e=(C=v.get(t))==null?void 0:C.get(d);e!=null&&e.skeDrawings.has(n)&&(s=e.skeDrawings.get(n),c=e.marginTop,l=o);break}case i.DocumentEditArea.FOOTER:{var w;let e=(w=y.get(r))==null?void 0:w.get(d);e!=null&&e.skeDrawings.has(n)&&(s=e.skeDrawings.get(n),c=f-u+e.marginTop,l=o);break}case i.DocumentEditArea.BODY:e.skeDrawings.has(n)&&(s=e.skeDrawings.get(n),c=a,l=o);break}if(s!=null)break}if(s!=null){let{aTop:t,aLeft:r}=s,i=S[n].docTransform.positionH,a=r;i.relativeFrom===e.ObjectRelativeFromH.MARGIN?a-=l:i.relativeFrom===e.ObjectRelativeFromH.COLUMN&&(a-=s.columnLeft);let o={relativeFrom:i.relativeFrom,posOffset:a};if(i.posOffset!==o.posOffset){let e=b.replaceOp([`drawings`,n,`docTransform`,`positionH`],i,o);x.push(e)}let u=S[n].docTransform.positionV,d=t;u.relativeFrom===e.ObjectRelativeFromV.PAGE?d+=c:u.relativeFrom===e.ObjectRelativeFromV.LINE?d-=s.lineTop:u.relativeFrom===e.ObjectRelativeFromV.PARAGRAPH&&(d-=s.blockAnchorTop);let f={relativeFrom:u.relativeFrom,posOffset:d};if(u.posOffset!==f.posOffset){let e=b.replaceOp([`drawings`,n,`docTransform`,`positionV`],u,f);x.push(e)}}}let T={id:n.RichTextEditingMutation.id,params:{unitId:s,actions:[],textRanges:null}};T.params.actions=x.reduce((t,n)=>e.JSONX.compose(t,n),null);let E=c.syncExecuteCommand(T.id,T.params);return g.refreshControls(),!!E}},j={id:`doc.command.update-doc-drawing-distance`,type:e.CommandType.COMMAND,handler:(t,r)=>{if(r==null)return!1;let i=t.get(e.ICommandService),a=t.get(e.IUniverInstanceService).getCurrentUniverDocInstance();if(a==null)return!1;let{drawings:o,dist:s,unitId:c}=r,l=e.JSONX.getInstance(),u=[],{drawings:d={}}=a.getSnapshot();for(let e of o){let{drawingId:t}=e;for(let[e,n]of Object.entries(s)){let r=d[t][e];if(r!==n){let i=l.replaceOp([`drawings`,t,e],r,n);u.push(i)}}}let f={id:n.RichTextEditingMutation.id,params:{unitId:c,actions:[],textRanges:null}};return f.params.actions=u.reduce((t,n)=>e.JSONX.compose(t,n),null),!!i.syncExecuteCommand(f.id,f.params)}},M={id:`doc.command.update-doc-drawing-wrap-text`,type:e.CommandType.COMMAND,handler:(t,r)=>{if(r==null)return!1;let i=t.get(e.ICommandService),a=t.get(e.IUniverInstanceService).getCurrentUniverDocInstance();if(a==null)return!1;let{drawings:o,wrapText:s,unitId:c}=r,l=e.JSONX.getInstance(),u=[],{drawings:d={}}=a.getSnapshot();for(let e of o){let{drawingId:t}=e,n=d[t].wrapText;if(n!==s){let e=l.replaceOp([`drawings`,t,`wrapText`],n,s);u.push(e)}}let f={id:n.RichTextEditingMutation.id,params:{unitId:c,actions:[],textRanges:null}};return f.params.actions=u.reduce((t,n)=>e.JSONX.compose(t,n),null),!!i.syncExecuteCommand(f.id,f.params)}},N={id:`doc.command.update-drawing-doc-transform`,type:e.CommandType.COMMAND,handler:(t,r)=>{if(r==null)return!1;let a=t.get(e.ICommandService),o=t.get(e.IUniverInstanceService),s=t.get(i.IRenderManagerService).getRenderById(r.unitId),c=s==null?void 0:s.scene;if(c==null)return!1;let l=c.getTransformerByCreate(),u=o.getCurrentUniverDocInstance();if(u==null)return!1;let{drawings:d,unitId:f}=r,p=e.JSONX.getInstance(),m=[],{drawings:h={}}=u.getSnapshot();for(let t of d){let{drawingId:n,key:r,value:i}=t,a=h[n].docTransform[r];if(!e.Tools.diffValue(a,i)){let e=p.replaceOp([`drawings`,n,`docTransform`,r],a,i);m.push(e)}}let g={id:n.RichTextEditingMutation.id,params:{unitId:f,actions:[],textRanges:null,debounce:!0}};g.params.actions=m.reduce((t,n)=>e.JSONX.compose(t,n),null);let _=a.syncExecuteCommand(g.id,g.params);return l.refreshControls(),!!_}},P={id:`doc.command.move-inline-drawing`,type:e.CommandType.COMMAND,handler:(t,a)=>{var o,s;if(a==null)return!1;let c=t.get(i.IRenderManagerService),l=(o=c.getRenderById(a.unitId))==null?void 0:o.with(r.DocSelectionRenderService),u=t.get(S),d=c.getRenderById(a.unitId),f=d==null?void 0:d.scene,p=d==null?void 0:d.with(n.DocSkeletonManagerService).getSkeleton();if(f==null||l==null)return!1;let m=f.getTransformerByCreate(),h=t.get(e.ICommandService),g=t.get(e.IUniverInstanceService).getCurrentUniverDocInstance();if(g==null)return!1;let{drawing:_,unitId:v,offset:y,segmentId:b,segmentPage:x,needRefreshDrawings:C}=a;if(C)return u.refreshDrawings(p),m.refreshControls(),!0;let w=[],{drawingId:T}=_,E=k(b,(s=l.getSegment())==null?``:s,x,y,T,g,l);if(E==null||E.length===0)return u.refreshDrawings(p),m.refreshControls(),!1;w.push(...E);let D={id:n.RichTextEditingMutation.id,params:{unitId:v,actions:[],textRanges:null}};D.params.actions=w.reduce((t,n)=>e.JSONX.compose(t,n),null);let O=h.syncExecuteCommand(D.id,D.params);return m.refreshControls(),!!O}},F={id:`doc.command.transform-non-inline-drawing`,type:e.CommandType.COMMAND,handler:(t,a)=>{var o,s;if(a==null)return!1;let c=t.get(i.IRenderManagerService),l=(o=c.getRenderById(a.unitId))==null?void 0:o.with(r.DocSelectionRenderService),u=c.getRenderById(a.unitId),d=u==null?void 0:u.scene;if(d==null||l==null)return!1;let f=d.getTransformerByCreate(),p=t.get(e.ICommandService),m=t.get(e.IUniverInstanceService).getCurrentUniverDocInstance();if(m==null)return!1;let{drawing:h,unitId:g,offset:_,docTransform:v,segmentId:y,segmentPage:b}=a,x=[],{drawingId:S}=h,C=k(y,(s=l.getSegment())==null?``:s,b,_,S,m,l);if(C==null)return!1;C.length>0&&x.push(...C);let w=e.JSONX.getInstance(),{drawings:T={}}=m.getSnapshot(),{positionH:E,positionV:D,size:O,angle:A}=T[S].docTransform;if(!e.Tools.diffValue(E,v.positionH)){let e=w.replaceOp([`drawings`,S,`docTransform`,`positionH`],E,v.positionH);x.push(e)}if(!e.Tools.diffValue(D,v.positionV)){let e=w.replaceOp([`drawings`,S,`docTransform`,`positionV`],D,v.positionV);x.push(e)}if(!e.Tools.diffValue(O,v.size)){let e=w.replaceOp([`drawings`,S,`docTransform`,`size`],O,v.size);x.push(e)}if(!e.Tools.diffValue(A,v.angle)){let e=w.replaceOp([`drawings`,S,`docTransform`,`angle`],A,v.angle);x.push(e)}let j={id:n.RichTextEditingMutation.id,params:{unitId:g,actions:[],textRanges:null,debounce:!0}};j.params.actions=x.reduce((t,n)=>e.JSONX.compose(t,n),null);let M=p.syncExecuteCommand(j.id,j.params);return f.refreshControls(),!!M}},I={id:`doc.command.move-drawing`,type:e.CommandType.COMMAND,handler:(n,r)=>{let a=n.get(e.ICommandService),o=n.get(t.IDocDrawingService),s=n.get(e.IUniverInstanceService),c=n.get(i.IRenderManagerService),{direction:l}=r,u=o.getFocusDrawings();if(u.length===0)return!1;let d=u[0].unitId,f=c.getRenderById(d),p=f==null?void 0:f.scene;if(p==null)return!1;let m=p.getTransformerByCreate(),h=s.getUniverDocInstance(d),g=u.map(t=>{var n;let{drawingId:r}=t,i=h==null||(n=h.getSnapshot().drawings)==null?void 0:n[r];if(i==null||i.layoutType===e.PositionedObjectLayoutType.INLINE)return null;let{positionH:a,positionV:o}=i.docTransform,s={...a},c={...o};if(l===e.Direction.UP){var u;c.posOffset=((u=c.posOffset)==null?0:u)-2}else if(l===e.Direction.DOWN){var d;c.posOffset=((d=c.posOffset)==null?0:d)+2}else if(l===e.Direction.LEFT){var f;s.posOffset=((f=s.posOffset)==null?0:f)-2}else if(l===e.Direction.RIGHT){var p;s.posOffset=((p=s.posOffset)==null?0:p)+2}return{drawingId:r,key:l===e.Direction.UP||l===e.Direction.DOWN?`positionV`:`positionH`,value:l===e.Direction.UP||l===e.Direction.DOWN?c:s}}).filter(e=>e!=null);if(g.length===0)return!1;let _=a.syncExecuteCommand(N.id,{unitId:d,subUnitId:d,drawings:g});return m.refreshControls(),!!_}},L={id:`doc.operation.clear-drawing-transformer`,type:e.CommandType.MUTATION,handler:(e,t)=>{let n=e.get(i.IRenderManagerService);return t.forEach(e=>{var t;(t=n.getRenderById(e))==null||(t=t.scene.getTransformer())==null||t.debounceRefreshControls()}),!0}},R=`COMPONENT_DOC_DRAWING_PANEL`,z={id:`sidebar.operation.doc-image`,type:e.CommandType.COMMAND,handler:async(t,n)=>{let r=t.get(s.ISidebarService),i=t.get(e.LocaleService),a=t.get(o.IDrawingManagerService);switch(n.value){case`open`:r.open({header:{title:i.t(`docImage.panel.title`)},children:{label:R},onClose:()=>{a.focusDrawing(null)},width:360});break;default:r.close();break}return!0}},B={id:`doc.operation.edit-doc-image`,type:e.CommandType.OPERATION,handler:(t,n)=>{let r=t.get(o.IDrawingManagerService),i=t.get(e.ICommandService);return n==null?!1:(r.focusDrawing([n]),i.executeCommand(z.id,{value:`open`}),!0)}};function V(e,t,n=1,i=0){let{top:a,left:o,bottom:s,right:c}=e,l=c-o,u=s-a,{viewportScrollX:d,viewportScrollY:f}=t.getViewport(r.VIEWPORT_KEY.VIEW_MAIN),{scaleX:p,scaleY:m}=t.getAncestorScale();return{startX:(o-d)*p,startY:(a-f)*m,endX:(o+l-d)*p,endY:(a+u-f)*m,width:l*p,height:u*m,rotate:i,absolute:{left:!1,top:!1},opacity:n==null?1:n}}function H(e,t){let{top:n,left:r,width:i,height:a,angle:o,opacity:s}=e;return V({top:n,left:r,bottom:n+a,right:r+i},t.scene,s,o)}let U=class extends e.Disposable{constructor(e,t,n,r,i,a){super(),this._renderManagerService=e,this._drawingManagerService=t,this._drawingRenderService=n,this._canvasFloatDomService=r,this._univerInstanceService=i,this._commandService=a,x(this,`_domLayerInfoMap`,new Map),this._initialize()}dispose(){super.dispose()}_initialize(){this._drawingAddRemoveListener(),this._initScrollAndZoomEvent()}_getSceneAndTransformerByDrawingSearch(e){if(e==null)return;let t=this._renderManagerService.getRenderById(e);if(t==null)return null;let n=t.scene;return{scene:n,transformer:n.getTransformerByCreate(),renderUnit:t,canvas:t.engine.getCanvasElement()}}_drawingAddRemoveListener(){this.disposeWithMe(this._drawingManagerService.add$.subscribe(e=>{this._insertRects(e)})),this.disposeWithMe(this._drawingManagerService.remove$.subscribe(e=>{e.forEach(e=>{this._removeDom(e.drawingId)})}))}_insertRects(t){t.forEach(async t=>{let{unitId:n}=t;if(!this._univerInstanceService.getUnit(n,e.UniverInstanceType.UNIVER_DOC))return;let r=this._getSceneAndTransformerByDrawingSearch(n);if(r==null)return;let i=this._drawingManagerService.getDrawingByParam(t);if(i==null)return;let a=await this._drawingRenderService.renderFloatDom(i,r.scene);if(!(a==null||a.length===0))for(let t of a){this._addHoverForRect(t);let a=new e.DisposableCollection,o=new c.BehaviorSubject(H(t,r.renderUnit)),s=r.canvas,l=i.data,u={dispose:a,rect:t,position$:o,unitId:n};this._canvasFloatDomService.addFloatDom({position$:o,id:i.drawingId,componentKey:i.componentKey,onPointerDown:e=>{s.dispatchEvent(new PointerEvent(e.type,e))},onPointerMove:e=>{s.dispatchEvent(new PointerEvent(e.type,e))},onPointerUp:e=>{s.dispatchEvent(new PointerEvent(e.type,e))},onWheel:e=>{s.dispatchEvent(new WheelEvent(e.type,e))},data:l,unitId:n});let d=t.onTransformChange$.subscribeEvent(()=>{let e=H(t,r.renderUnit);o.next(e)});a.add(()=>{this._canvasFloatDomService.removeFloatDom(i.drawingId)}),d&&a.add(d),this._domLayerInfoMap.set(i.drawingId,u)}})}_addHoverForRect(t){this.disposeWithMe((0,e.toDisposable)(t.onPointerEnter$.subscribeEvent(()=>{t.cursor=i.CURSOR_TYPE.GRAB}))),this.disposeWithMe((0,e.toDisposable)(t.onPointerLeave$.subscribeEvent(()=>{t.cursor=i.CURSOR_TYPE.DEFAULT})))}_removeDom(e){let t=this._domLayerInfoMap.get(e);if(!t)return;let{unitId:n}=t;this._domLayerInfoMap.delete(e),t.dispose.dispose();let r=this._getSceneAndTransformerByDrawingSearch(n);r&&r.scene.removeObject(t.rect)}_initScrollAndZoomEvent(){let t=e=>{let t=this._getSceneAndTransformerByDrawingSearch(e);t&&this._domLayerInfoMap.forEach(n=>{if(n.unitId!==e)return;let r=H(n.rect,t.renderUnit);n.position$.next(r)})};this.disposeWithMe(this._univerInstanceService.getCurrentTypeOfUnit$(e.UniverInstanceType.UNIVER_DOC).pipe((0,c.map)(e=>{if(!e)return null;let t=e.getUnitId(),n=this._renderManagerService.getRenderById(t);return n?{render:n,unitId:t}:null}),(0,c.switchMap)(t=>t?(0,e.fromEventSubject)(t.render.scene.getViewport(r.VIEWPORT_KEY.VIEW_MAIN).onScrollAfter$).pipe((0,c.map)(()=>({unitId:t.unitId}))):(0,c.of)(null))).subscribe(e=>{if(!e)return;let{unitId:n}=e;t(n)})),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id===r.SetDocZoomRatioOperation.id){let{unitId:n}=e.params;t(n)}}))}insertFloatDom(t,i){var a,o,s;let c=this._univerInstanceService.getCurrentUnitOfType(e.UniverInstanceType.UNIVER_DOC);if(!c)return!1;let l=this._getSceneAndTransformerByDrawingSearch(c.getUnitId());if(!l)return!1;let u=(a=l.renderUnit.with(n.DocSkeletonManagerService).getSkeleton().getSkeletonData())==null?void 0:a.pages[0];if(!u)return!1;let{pageWidth:d,marginLeft:f,marginRight:p}=u,m=d-f-p,g={size:{width:(o=i.width)==null?m:o,height:i.height},positionH:{relativeFrom:e.ObjectRelativeFromH.PAGE,posOffset:0},positionV:{relativeFrom:e.ObjectRelativeFromV.PAGE,posOffset:0},angle:0},_=(s=i.drawingId)==null?(0,e.generateRandomId)():s,v={unitId:c.getUnitId(),drawings:[{drawingId:_,drawingType:e.DrawingTypeEnum.DRAWING_DOM,subUnitId:c.getUnitId(),unitId:c.getUnitId(),...t,title:``,description:``,docTransform:g,layoutType:e.PositionedObjectLayoutType.INLINE,transform:(0,r.docDrawingPositionToTransform)(g)}]};return this._commandService.syncExecuteCommand(h.id,v),_}};U=w([C(0,i.IRenderManagerService),C(1,o.IDrawingManagerService),C(2,(0,e.Inject)(l.DrawingRenderService)),C(3,(0,e.Inject)(s.CanvasFloatDomService)),C(4,e.IUniverInstanceService),C(5,e.ICommandService)],U);const W=`doc.menu.image`,G=E.id,ee=t=>{let r=t.get(n.DocSelectionManagerService),i=t.get(e.IUniverInstanceService);return new c.Observable(e=>{let t=r.textSelection$.subscribe(()=>{let t=r.getActiveTextRange();if(t){var n;let{segmentId:r,startOffset:a,endOffset:o}=t,s=i.getCurrentUniverDocInstance(),c=s==null||(n=s.getSelfOrHeaderFooterModel(r).getBody())==null?void 0:n.tables;if(c&&c.length&&c.some(e=>{let{startIndex:t,endIndex:n}=e;return a>=t&&a<n||o>=t&&o<n})){e.next(!0);return}}else{e.next(!0);return}e.next(!1)});return()=>t.unsubscribe()})};function K(t){return{id:W,type:s.MenuItemType.SUBITEMS,icon:`AddImageIcon`,tooltip:`docImage.title`,disabled$:ee(t),hidden$:(0,s.getMenuHiddenObservable)(t,e.UniverInstanceType.UNIVER_DOC,void 0,e.DOCS_ZEN_EDITOR_UNIT_ID_KEY)}}function te(t){return{id:G,title:`docImage.upload.float`,type:s.MenuItemType.BUTTON,hidden$:(0,s.getMenuHiddenObservable)(t,e.UniverInstanceType.UNIVER_DOC,void 0,e.DOCS_ZEN_EDITOR_UNIT_ID_KEY)}}var ne=`@univerjs/docs-drawing-ui`,re=`0.20.1`;const q=`docs-drawing-ui.config`;Symbol(q);const J={};function Y(t){if(e.JSONX.isNoop(t)||!Array.isArray(t))return null;let n=t.find(e=>Array.isArray(e)&&(e==null?void 0:e[0])===`drawings`);if(n==null||!Array.isArray(n)||n.length<3||typeof n[1]==`string`&&typeof n[2]!=`object`||Array.isArray(n[1])&&typeof n[1][1]!=`object`)return null;let r=[];if(Array.isArray(n==null?void 0:n[1])){for(let e of n)if(Array.isArray(e)){var i,a;r.push({type:!(e==null||(i=e[1])==null)&&i.i?`add`:`remove`,drawingId:e==null?void 0:e[0],drawing:e==null||(a=e[1])==null?void 0:a.i})}}else{var o,s;r.push({type:(o=n[2])!=null&&o.i?`add`:`remove`,drawingId:n[1],drawing:(s=n[2])==null?void 0:s.i})}return r}function ie(e){if(!Array.isArray(e)||e.length<3||e[0]!==`drawingsOrder`)return[];let t=[];for(let n=1;n<e.length;n++){let r=e[n];if(Array.isArray(r)&&typeof r[0]==`number`&&typeof r[1]==`object`)t.push(r[0]);else{t.length=0;break}}return t}let X=class extends e.Disposable{constructor(e,t,n,r,i){super(),this._univerInstanceService=e,this._commandService=t,this._drawingManagerService=n,this._docDrawingService=r,this._renderManagerService=i,this._initialize()}_initialize(){this._commandExecutedListener()}_commandExecutedListener(){this.disposeWithMe(this._commandService.beforeCommandExecuted(e=>{if(e.id!==n.RichTextEditingMutation.id)return;let{unitId:t,actions:r}=e.params,i=Y(r);if(i!=null)for(let{type:e,drawingId:n,drawing:r}of i)e===`add`?this._addDrawings(t,[r]):this._removeDrawings(t,[n])})),this.disposeWithMe(this._commandService.onCommandExecuted(e=>{if(e.id!==n.RichTextEditingMutation.id)return;let{unitId:t,actions:r}=e.params;ie(r).length>0&&this._updateDrawingsOrder(t)})),this.disposeWithMe(this._commandService.onCommandExecuted(t=>{var n;if(t.id!==e.UndoCommand.id&&t.id!==e.RedoCommand.id)return;let r=(n=this._univerInstanceService.getCurrentUniverDocInstance())==null?void 0:n.getUnitId(),i=this._drawingManagerService.getFocusDrawings();if(r==null||i.length===0)return;let a=this._renderManagerService.getRenderById(r),o=a==null?void 0:a.scene;if(o==null)return!1;o.getTransformerByCreate().refreshControls()}))}_addDrawings(e,t){let n=this._drawingManagerService,r=this._docDrawingService,{subUnitId:i,redo:a,objects:o}=this._docDrawingService.getBatchAddOp(t);n.applyJson1(e,i,a),r.applyJson1(e,i,a),n.addNotification(o),r.addNotification(o)}_removeDrawings(e,t){let n=this._drawingManagerService,r=this._docDrawingService,{subUnitId:i,redo:a,objects:o}=this._docDrawingService.getBatchRemoveOp(t.map(t=>({unitId:e,subUnitId:e,drawingId:t})));n.applyJson1(e,i,a),r.applyJson1(e,i,a),n.removeNotification(o),r.removeNotification(o)}_updateDrawingsOrder(e){let t=this._univerInstanceService.getUniverDocInstance(e);if(t==null)return;let n=t.getSnapshot().drawingsOrder;if(n==null)return;let r=this._drawingManagerService,i=this._docDrawingService;r.setDrawingOrder(e,e,n),i.setDrawingOrder(e,e,n);let a={unitId:e,subUnitId:e,drawingIds:n};r.orderNotification(a),i.orderNotification(a)}};X=w([C(0,e.IUniverInstanceService),C(1,e.ICommandService),C(2,o.IDrawingManagerService),C(3,t.IDocDrawingService),C(4,i.IRenderManagerService)],X);const ae=e=>{let{floatDomInfos:t,scene:n,offset:r,bound:i}=e,a=i.right-i.left,o=i.bottom-i.top;return(0,d.jsx)(`div`,{className:`univer-absolute univer-left-0 univer-top-0`,children:(0,u.useMemo)(()=>t.map(e=>{let{width:t=0,height:r=0,left:i=0,top:a=0}=e.transform,o=V({left:i,right:i+t,top:a,bottom:a+r},n),s={position$:new c.BehaviorSubject(o),position:o,id:e.drawingId,componentKey:e.componentKey,onPointerMove:()=>{},onPointerDown:()=>{},onPointerUp:()=>{},onWheel:()=>{},unitId:e.unitId,data:e.data};return[e.drawingId,s]}).filter(([e,t])=>!(t.position.endX<0||t.position.endY<0||t.position.startX>a||t.position.startY>o)),[t,n,r,a,o]).map(([e,t])=>(0,d.jsx)(s.PrintFloatDomSingle,{layer:t,id:e,position:t.position},e))})};let Z=class extends e.Disposable{constructor(e,t,n,r,i){super(),this._docPrintInterceptorService=e,this._drawingRenderService=t,this._drawingManagerService=n,this._componetManager=r,this._injector=i,this._initPrinting(),this._initPrintingDom()}_initPrinting(){this.disposeWithMe(this._docPrintInterceptorService.interceptor.intercept(this._docPrintInterceptorService.interceptor.getInterceptPoints().PRINTING_COMPONENT_COLLECT,{handler:(t,n,r)=>{let{unitId:i,scene:a}=n,o=this._drawingManagerService.getDrawingDataForUnit(i),s=o==null?void 0:o[i];return s&&s.order.forEach(t=>{let n=s.data[t];n.drawingType!==e.DrawingTypeEnum.DRAWING_CHART&&n.drawingType!==e.DrawingTypeEnum.DRAWING_DOM&&this._drawingRenderService.renderDrawing(n,a)}),r()}}))}_initPrintingDom(){this.disposeWithMe(this._docPrintInterceptorService.interceptor.intercept(this._docPrintInterceptorService.interceptor.getInterceptPoints().PRINTING_DOM_COLLECT,{handler:(t,n,r)=>{let{unitId:i}=n,o=this._drawingManagerService.getDrawingDataForUnit(i),c=o==null?void 0:o[i];if(c){let o=c.order.map(t=>{let n=c.data[t];if(n.drawingType===e.DrawingTypeEnum.DRAWING_CHART)return{...n,componentKey:this._componetManager.get(e.DOC_DRAWING_PRINTING_COMPONENT_KEY)};if(n.drawingType===e.DrawingTypeEnum.DRAWING_DOM){let e=this._docPrintInterceptorService.getPrintComponent(n.componentKey);return{...n,componentKey:this._componetManager.get(e||n.componentKey)}}return null}).filter(Boolean);return(0,a.render)((0,d.jsx)((0,s.connectInjector)(ae,this._injector),{unitId:i,floatDomInfos:o,scene:n.scene,skeleton:n.skeleton,offset:n.offset,bound:n.bound}),n.root),t==null||t.add(()=>{(0,a.unmount)(n.root)}),r(t)}}}))}};Z=w([C(0,(0,e.Inject)(r.DocPrintInterceptorService)),C(1,(0,e.Inject)(l.DrawingRenderService)),C(2,o.IDrawingManagerService),C(3,(0,e.Inject)(s.ComponentManager)),C(4,(0,e.Inject)(e.Injector))],Z);function oe(e){let{path:t}=e;return t.some(e=>e===`cells`)}let se=class extends e.Disposable{constructor(e,t,n,r){super(),this._commandService=e,this._univerInstanceService=t,this._drawingManagerService=n,this._renderManagerService=r,x(this,`_liquid`,new i.Liquid),x(this,`_listenerOnImageMap`,new Set),x(this,`_transformerCache`,new Map),x(this,`_anchorShape`,void 0),this._init()}_init(){this._listenDrawingFocus()}_listenDrawingFocus(){this.disposeWithMe(this._drawingManagerService.add$.subscribe(e=>{if(e.length!==0)for(let t of e){let{unitId:e}=t;this._listenerOnImageMap.has(e)||(this._listenTransformerChange(e),this._listenerOnImageMap.add(e))}}))}_listenTransformerChange(t){var n;let r=(n=this._getSceneAndTransformerByDrawingSearch(t))==null?void 0:n.transformer;if(r==null)return;this.disposeWithMe((0,e.toDisposable)(r.changeStart$.subscribe(t=>{this._transformerCache.clear();let{objects:n}=t;for(let t of n.values()){var r;let{oKey:n,width:i,height:a,left:o,top:s,angle:c}=t,l=this._drawingManagerService.getDrawingOKey(n);if(l==null)continue;let u=this._univerInstanceService.getUniverDocInstance(l.unitId),d=u==null||(r=u.getSnapshot().drawings)==null?void 0:r[l.drawingId];if((d==null?void 0:d.layoutType)===e.PositionedObjectLayoutType.INLINE)try{t.setOpacity(.2)}catch{}d!=null&&this._transformerCache.set(l.drawingId,{drawing:d,top:s,left:o,width:i,height:a,angle:c})}})));let i=(0,e.throttle)(this._updateMultipleDrawingDocTransform.bind(this),50);(0,e.throttle)(this._nonInlineDrawingTransform.bind(this),50),this.disposeWithMe((0,e.toDisposable)(r.changing$.subscribe(t=>{let{objects:n,offsetX:r,offsetY:a}=t;if(n.size>1)i(n);else if(n.size===1){let t=this._transformerCache.values().next().value,{width:i,height:o,top:s,left:c,angle:l}=n.values().next().value;if(t&&i===t.width&&o===t.height&&s===t.top&&c===t.left&&l===t.angle)return;t&&(t.drawing.layoutType,e.PositionedObjectLayoutType.INLINE),t&&t.drawing.layoutType===e.PositionedObjectLayoutType.INLINE&&r!=null&&a!=null&&this._updateInlineDrawingAnchor(t.drawing,r,a)}}))),this.disposeWithMe((0,e.toDisposable)(r.changeEnd$.subscribe(t=>{let{objects:n,offsetX:r,offsetY:i}=t;for(let t of n.values()){let n=this._drawingManagerService.getDrawingOKey(t.oKey);if(n==null)continue;let r=this._transformerCache.get(n==null?void 0:n.drawingId);if((r==null?void 0:r.drawing.layoutType)===e.PositionedObjectLayoutType.INLINE)try{t.setOpacity(1)}catch{}}if(this._anchorShape&&this._anchorShape.hide(),n.size>1)this._updateMultipleDrawingDocTransform(n);else if(n.size===1){let t=this._transformerCache.values().next().value,a=n.values().next().value,{width:o,height:s,top:c,left:l,angle:u}=a;if(t&&o===t.width&&s===t.height&&c===t.top&&l===t.left&&u===t.angle)return;t&&t.drawing.layoutType===e.PositionedObjectLayoutType.INLINE?o!==t.width||s!==t.height||u!==t.angle?this._updateDrawingSize(t,a):r!=null&&i!=null&&this._moveInlineDrawing(t.drawing,r,i):t&&this._nonInlineDrawingTransform(t.drawing,a)}this._transformerCache.clear()})))}_updateMultipleDrawingDocTransform(e){if(e.size<1)return;let t=[],n,r;for(let i of e.values()){let{oKey:e,left:a,top:o,angle:s}=i,{width:c,height:l}=i,u=this._drawingManagerService.getDrawingOKey(e);if(u==null)continue;n==null&&(n=u.unitId),r==null&&(r=u.subUnitId);let d=this._transformerCache.get(u.drawingId);if(d==null)continue;let{drawing:f,top:p,left:m,width:h,height:g,angle:_}=d,{width:v,height:y}=this._getPageContentSize(f);if(c=Math.min(c,v),l=Math.min(l,y),(h!==c||g!==l)&&t.push({drawingId:u.drawingId,key:`size`,value:{width:c,height:l}}),_!==s&&t.push({drawingId:u.drawingId,key:`angle`,value:s}),p!==o||m!==a){let e=o-p,n=a-m;e!==0&&t.push({drawingId:u.drawingId,key:`positionV`,value:{relativeFrom:f.docTransform.positionV.relativeFrom,posOffset:f.docTransform.positionV.posOffset+e}}),n!==0&&t.push({drawingId:u.drawingId,key:`positionH`,value:{relativeFrom:f.docTransform.positionH.relativeFrom,posOffset:f.docTransform.positionH.posOffset+n}})}}t.length>0&&n&&r&&this._commandService.executeCommand(N.id,{unitId:n,subUnitId:r,drawings:t})}_updateDrawingAnchor(e){if(this._transformerCache.size!==1)return;let t=this._transformerCache.values().next().value,n=e.values().next().value;this._getDrawingAnchor(t.drawing,n)}_updateInlineDrawingAnchor(e,t,n){var r;if(this._transformerCache.size!==1)return;let{contentBoxPointGroup:i}=(r=this._getInlineDrawingAnchor(e,t,n))==null?{}:r;i!=null&&this._createOrUpdateInlineAnchor(e.unitId,i)}_getInlineDrawingAnchor(e,t,a){var o,s;let c=this._renderManagerService.getRenderById(e.unitId),l=c==null?void 0:c.with(n.DocSkeletonManagerService).getSkeleton();if(c==null)return;let{mainComponent:u,scene:d}=c,f=u,p=d.getViewports()[0],{pageLayoutType:m=i.PageLayoutType.VERTICAL,pageMarginLeft:h,pageMarginTop:g}=f.getOffsetConfig(),_=null,v=!1,y=-1,b=``,x=this._getTransformCoordForDocumentOffset(f,p,t,a);if(x==null)return;let S=(o=this._renderManagerService.getRenderById(e.unitId))==null?void 0:o.with(r.DocSelectionRenderService);if(S==null)return;let C=l==null?void 0:l.findNodeByCoord(x,m,h,g,{strict:!1,segmentId:S.getSegment(),segmentPage:S.getSegmentPage()});if(C){let{node:e,ratioX:t,segmentPage:n,segmentId:r}=C;v=t<.5,_=e,y=n,b=r}if(_==null)return;let w=l==null?void 0:l.findPositionByGlyph(_,y),T=this._getDocObject();if(w==null||l==null||T==null||oe(w))return;let E={...w,isBack:v},{cursorList:D,contentBoxPointGroup:O}=new r.NodePositionConvertToCursor(T.document.getOffsetConfig(),l).getRangePointData(E,E),{startOffset:k}=(s=(0,r.getOneTextSelectionRange)(D))==null?{}:s;if(k!=null)return{offset:k,contentBoxPointGroup:O,segmentId:b,segmentPage:y}}_getDrawingAnchor(t,a){var o,s,c,l,u;let d=this._renderManagerService.getRenderById(t.unitId),f=d==null?void 0:d.with(n.DocSkeletonManagerService).getSkeleton(),p=f==null?void 0:f.getSkeletonData();if(p==null||d==null)return;let{pages:m,skeHeaders:h,skeFooters:g}=p,{mainComponent:_,scene:v}=d,y=_,b=v.getViewports()[0],{pageLayoutType:x=i.PageLayoutType.VERTICAL,pageMarginLeft:S,pageMarginTop:C,docsLeft:w,docsTop:T}=y.getOffsetConfig(),{left:E,top:D,angle:O}=a,{width:k,height:A}=a,{positionV:j,positionH:M}=t.docTransform,{width:N,height:P}=this._getPageContentSize(t);k=Math.min(k,N),A=Math.min(A,P);let F=null,I=``,L=-1,R={...t.docTransform,size:{width:k,height:A},angle:O},{x:z,y:B}=v.getViewportScrollXY(b),V=this._getTransformCoordForDocumentOffset(y,b,E-z,D-B);if(V==null)return;let H=(o=this._renderManagerService.getRenderById(t.unitId))==null?void 0:o.with(r.DocSelectionRenderService);if(H==null)return;let U=f==null?void 0:f.findNodeByCoord(V,x,S,C,{strict:!1,segmentId:H.getSegment(),segmentPage:H.getSegmentPage()});if(U){let{node:e,segmentPage:t,segmentId:n}=U;F=e,L=t,I=n}if(F==null)return;let W=(s=F.parent)==null?void 0:s.parent,G=W==null?void 0:W.parent,ee=(c=G==null?void 0:G.lines.find(e=>e.paragraphIndex===(W==null?void 0:W.paragraphIndex)&&e.paragraphStart))==null?G==null?void 0:G.lines[0]:c,K=G==null||(l=G.parent)==null?void 0:l.parent;if(W==null||G==null||ee==null||K==null)return;this._liquid.reset();let te=K.type;for(let e of m){let{headerId:t,footerId:n,pageHeight:r,pageWidth:a,marginLeft:o,marginBottom:s}=e,c=m.indexOf(e);if(L>-1&&c===L){switch(te){case i.DocumentSkeletonPageType.HEADER:{var ne;let e=(ne=h.get(t))==null?void 0:ne.get(a);if(e)this._liquid.translatePagePadding({marginTop:e.marginTop,marginLeft:o});else throw Error(`header skeleton not found`);break}case i.DocumentSkeletonPageType.FOOTER:{var re;let e=(re=g.get(n))==null?void 0:re.get(a);if(e)this._liquid.translatePagePadding({marginTop:r-s+e.marginTop,marginLeft:o});else throw Error(`footer skeleton not found`);break}}break}if(this._liquid.translatePagePadding(e),e===K)break;this._liquid.restorePagePadding(e),this._liquid.translatePage(e,x,S,C)}if(j.relativeFrom===e.ObjectRelativeFromV.LINE)F=W.divides[0].glyphGroup[0];else{var q,J;F=(q=(J=ee.divides)==null||(J=J[0])==null||(J=J.glyphGroup)==null?void 0:J[0])==null?F:q}switch(R.positionH={relativeFrom:M.relativeFrom,posOffset:E-this._liquid.x-w},M.relativeFrom){case e.ObjectRelativeFromH.MARGIN:R.positionH.posOffset=E-this._liquid.x-w-K.marginLeft;break;case e.ObjectRelativeFromH.COLUMN:R.positionH.posOffset=E-this._liquid.x-w-G.left;break}switch(R.positionV={relativeFrom:j.relativeFrom,posOffset:D-this._liquid.y-T},j.relativeFrom){case e.ObjectRelativeFromV.PAGE:R.positionV.posOffset=D-this._liquid.y-T-K.marginTop;break;case e.ObjectRelativeFromV.LINE:R.positionV.posOffset=D-this._liquid.y-T-W.top;break;case e.ObjectRelativeFromV.PARAGRAPH:R.positionV.posOffset=D-this._liquid.y-T-ee.top;break}if(F==null)return;let Y=f==null?void 0:f.findPositionByGlyph(F,L),ie=this._getDocObject();if(Y==null||f==null||ie==null||oe(Y))return;let X={...Y,isBack:!1},{cursorList:ae}=new r.NodePositionConvertToCursor(ie.document.getOffsetConfig(),f).getRangePointData(X,X),{startOffset:Z}=(u=(0,r.getOneTextSelectionRange)(ae))==null?{}:u;if(Z!=null)return{offset:Z,docTransform:R,segmentId:I,segmentPage:L}}_updateDrawingSize(e,t){let n=[],{drawing:r,width:i,height:a,angle:o}=e,{unitId:s,subUnitId:c}=r,{width:l,height:u,angle:d}=t,{width:f,height:p}=this._getPageContentSize(r);l=Math.min(f,l),u=Math.min(p,u),(l!==i||u!==a)&&n.push({drawingId:r.drawingId,key:`size`,value:{width:l,height:u}}),d!==o&&n.push({drawingId:r.drawingId,key:`angle`,value:d}),n.length>0&&s&&c&&this._commandService.executeCommand(N.id,{unitId:s,subUnitId:c,drawings:n})}_moveInlineDrawing(e,t,n){let r=this._getInlineDrawingAnchor(e,t,n),{offset:i,segmentId:a,segmentPage:o}=r==null?{}:r;return this._commandService.executeCommand(P.id,{unitId:e.unitId,subUnitId:e.unitId,drawing:e,offset:i,segmentId:a,segmentPage:o,needRefreshDrawings:i==null})}_limitDrawingInPage(t,r){let i=this._renderManagerService.getRenderById(t.unitId),{left:a,top:o,width:s,height:c,angle:l}=r,u=i==null?void 0:i.with(n.DocSkeletonManagerService).getSkeleton(),d=u==null?void 0:u.getSkeletonData(),{pages:f}=d==null?{}:d;if(d==null||i==null||f==null)return{left:a,top:o,width:s,height:c,angle:l};let{mainComponent:p}=i,{top:m,pageLayoutType:h,pageMarginLeft:g,pageMarginTop:_}=p,v=o;this._liquid.reset();for(let t of f){let{marginBottom:n,pageHeight:r}=t,i=f[f.indexOf(t)+1];i!=null&&(e.Tools.hasIntersectionBetweenTwoRanges(o,o+c,this._liquid.y+m+r-n,this._liquid.y+m+r+_+i.marginTop)&&(v=o+c/2<this._liquid.y+m+r+_/2?Math.min(o,this._liquid.y+m+r-n-c):Math.max(o,this._liquid.y+m+r+_+i.marginTop)),this._liquid.translatePage(t,h,g,_))}return{left:a,top:v,width:s,height:c,angle:l}}_nonInlineDrawingTransform(t,n,r=!1){let i=t.isMultiTransform===e.BooleanNumber.TRUE?n:this._limitDrawingInPage(t,n);if(r&&i.top!==n.top)return;let a=this._getDrawingAnchor(t,i),{offset:o,docTransform:s,segmentId:c,segmentPage:l}=a==null?{}:a;return o==null||s==null?this._updateMultipleDrawingDocTransform(new Map([[t.drawingId,n]])):this._commandService.executeCommand(F.id,{unitId:t.unitId,subUnitId:t.unitId,drawing:t,offset:o,docTransform:s,segmentId:c,segmentPage:l})}_getSceneAndTransformerByDrawingSearch(e){if(e==null)return;let t=this._renderManagerService.getRenderById(e),n=t==null?void 0:t.scene;if(n!=null)return{scene:n,transformer:n.getTransformerByCreate()}}_getTransformCoordForDocumentOffset(e,t,n,r){let{documentTransform:a}=e.getOffsetConfig(),o=t.transformVector2SceneCoord(i.Vector2.FromArray([n,r]));if(o)return a.clone().invert().applyPoint(o)}_createOrUpdateInlineAnchor(t,n){let a=this._renderManagerService.getRenderById(t);if(a==null)return;let{mainComponent:o,scene:s}=a,{docsLeft:c,docsTop:l}=o.getOffsetConfig(),{left:u,top:d,height:f}=(0,r.getAnchorBounding)(n),p=u+c,m=d+l;if(this._anchorShape){this._anchorShape.transformByState({left:p,top:m,height:f}),this._anchorShape.show();return}let h=new i.Rect(`__InlineDrawingAnchor__`+(0,e.generateRandomId)(6),{left:p,top:m,height:f,strokeWidth:2,stroke:(0,i.getColor)(e.COLORS.darkgray,1),evented:!1});this._anchorShape=h,s.addObject(h,r.TEXT_RANGE_LAYER_INDEX)}_getDocObject(){return(0,r.getDocObject)(this._univerInstanceService,this._renderManagerService)}_getPageContentSize(e){let t=this._renderManagerService.getRenderById(e.unitId),r=t==null?void 0:t.with(n.DocSkeletonManagerService).getSkeleton(),i=r==null?void 0:r.getSkeletonData();if(i==null||t==null)return{width:500,height:500};let{pages:a}=i,o=null;for(let t of a){let{skeDrawings:n}=t;if(n.has(e.drawingId)){o=t;break}}if(o){let{pageWidth:e,pageHeight:t,marginLeft:n,marginBottom:r,marginRight:i,marginTop:a}=o;return{width:Math.max(500,e-n-i),height:Math.max(500,t-a-r)}}else return{width:500,height:500}}};se=w([C(0,e.ICommandService),C(1,e.IUniverInstanceService),C(2,o.IDrawingManagerService),C(3,i.IRenderManagerService)],se);const ce={[s.RibbonInsertGroup.MEDIA]:{[W]:{order:0,menuItemFactory:K,[G]:{order:0,menuItemFactory:te}}}},le=-1e3,ue=1e3,de=t=>{let c=(0,s.useDependency)(e.ICommandService),l=(0,s.useDependency)(e.LocaleService),f=(0,s.useDependency)(o.IDrawingManagerService),p=(0,s.useDependency)(i.IRenderManagerService),m=(0,s.useDependency)(e.IUniverInstanceService),{drawings:h}=t,g=h[0];if(g==null)return;let{unitId:_}=g,v=m.getUniverDocInstance(_),y=v==null?void 0:v.getSnapshot().documentStyle.documentFlavor,b=p.getRenderById(_),x=b==null?void 0:b.scene;if(x==null)return;let S=x.getTransformerByCreate(),C=[{label:l.t(`image-position.column`),value:String(e.ObjectRelativeFromH.COLUMN)},{label:l.t(`image-position.page`),value:String(e.ObjectRelativeFromH.PAGE)},{label:l.t(`image-position.margin`),value:String(e.ObjectRelativeFromH.MARGIN)}],w=[{label:l.t(`image-position.line`),value:String(e.ObjectRelativeFromV.LINE),disabled:y===e.DocumentFlavor.MODERN},{label:l.t(`image-position.page`),value:String(e.ObjectRelativeFromV.PAGE),disabled:y===e.DocumentFlavor.MODERN},{label:l.t(`image-position.margin`),value:String(e.ObjectRelativeFromV.MARGIN),disabled:y===e.DocumentFlavor.MODERN},{label:l.t(`image-position.paragraph`),value:String(e.ObjectRelativeFromV.PARAGRAPH)}],[T,E]=(0,u.useState)(!0),[D,O]=(0,u.useState)({relativeFrom:e.ObjectRelativeFromH.PAGE,posOffset:0}),[k,A]=(0,u.useState)({relativeFrom:e.ObjectRelativeFromV.PAGE,posOffset:0}),[j,M]=(0,u.useState)(!0),[P,F]=(0,u.useState)(!0);function I(e,t){var n;e===`positionH`?O(t):A(t);let i=f.getFocusDrawings();if(i.length===0)return;let a=i.map(e=>({unitId:e.unitId,subUnitId:e.subUnitId,drawingId:e.drawingId}));c.executeCommand(N.id,{unitId:i[0].unitId,subUnitId:i[0].unitId,drawings:a.map(n=>({drawingId:n.drawingId,key:e,value:t}))});let o=(n=p.getRenderById(_))==null?void 0:n.with(r.DocSelectionRenderService);o&&o.blur(),S.refreshControls()}function L(t){var r;let i=D.relativeFrom,a=D.posOffset,o=Number(t);if(i===o)return;let s=f.getFocusDrawings();if(s.length===0)return;let c=s[0].drawingId,l=s[0].unitId,u=null,d=0,m=(r=p.getRenderById(l))==null?void 0:r.with(n.DocSkeletonManagerService).getSkeleton(),h=m==null?void 0:m.getSkeletonData();if(h==null)return;let{pages:g,skeHeaders:_,skeFooters:v}=h;for(let e of g){var y,b;let{marginLeft:t,skeDrawings:n,headerId:r,footerId:i,pageWidth:a}=e;if(n.has(c)){u=n.get(c),d=t;break}let o=(y=_.get(r))==null?void 0:y.get(a);if(o!=null&&o.skeDrawings.has(c)){u=o==null?void 0:o.skeDrawings.get(c),d=t;break}let s=(b=v.get(i))==null?void 0:b.get(a);if(s!=null&&s.skeDrawings.has(c)){u=s==null?void 0:s.skeDrawings.get(c),d=t;break}}if(u==null)return;let x=0;i===e.ObjectRelativeFromH.COLUMN?x-=u.columnLeft:i===e.ObjectRelativeFromH.MARGIN&&(x-=d),o===e.ObjectRelativeFromH.COLUMN?x+=u.columnLeft:o===e.ObjectRelativeFromH.MARGIN?x+=d:e.ObjectRelativeFromH.PAGE,I(`positionH`,{relativeFrom:o,posOffset:(a==null?0:a)-x})}function R(t){var i,a,o,s,c;let l=k.relativeFrom,u=k.posOffset,d=Number(t);if(l===d)return;let h=f.getFocusDrawings();if(h.length===0)return;let{drawingId:g,unitId:_}=h[0],v=m.getUniverDocInstance(_),y=(i=p.getRenderById(_))==null?void 0:i.with(n.DocSkeletonManagerService).getSkeleton(),b=(a=p.getRenderById(_))==null?void 0:a.with(r.DocSelectionRenderService),x=b==null?void 0:b.getSegment(),S=b==null?void 0:b.getSegmentPage(),C=v==null||(o=v.getSelfOrHeaderFooterModel(x).getBody())==null||(o=o.customBlocks)==null?void 0:o.find(e=>e.blockId===g);if(C==null||y==null||b==null)return;let{startIndex:w}=C,T=y.findNodeByCharIndex(w,x,S),E=T==null||(s=T.parent)==null?void 0:s.parent,D=E==null?void 0:E.parent,O=D==null?void 0:D.lines.find(e=>e.paragraphIndex===(E==null?void 0:E.paragraphIndex)&&e.paragraphStart),A=D==null||(c=D.parent)==null?void 0:c.parent;if(T==null||E==null||O==null||D==null||A==null)return;let j=0;l===e.ObjectRelativeFromV.PARAGRAPH?j-=O.top:l===e.ObjectRelativeFromV.LINE?j-=E.top:l===e.ObjectRelativeFromV.PAGE&&(j+=A.marginTop),d===e.ObjectRelativeFromV.PARAGRAPH?j+=O.top:d===e.ObjectRelativeFromV.LINE?j+=E.top:d===e.ObjectRelativeFromV.PAGE&&(j-=A.marginTop),I(`positionV`,{relativeFrom:d,posOffset:(u==null?0:u)-j})}function z(t){var n;let r=v==null?void 0:v.getSnapshot(),i=r==null||(n=r.drawings)==null?void 0:n[t.drawingId];if(i==null)return;let{layoutType:a}=i,{positionH:o,positionV:s}=i.docTransform;O(o),A(s),E(a===e.PositionedObjectLayoutType.INLINE),M(s.relativeFrom===e.ObjectRelativeFromV.PARAGRAPH||s.relativeFrom===e.ObjectRelativeFromV.LINE)}function B(){let e=f.getFocusDrawings();e.length!==0&&z(e[0])}function V(t){M(t),R(t?String(e.ObjectRelativeFromV.PARAGRAPH):String(e.ObjectRelativeFromV.PAGE))}return(0,u.useEffect)(()=>{B();let e=f.focus$.subscribe(e=>{if(e.length===0){F(!1);return}F(!0),z(e[0])}),t=c.onCommandExecuted(async e=>{e.id===n.RichTextEditingMutation.id&&B()});return()=>{e.unsubscribe(),t.dispose()}},[]),(0,d.jsxs)(`div`,{className:(0,a.clsx)(`univer-grid univer-gap-2 univer-py-2 univer-text-gray-400`,{"univer-hidden":!P}),children:[(0,d.jsx)(`header`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:l.t(`image-position.title`)})}),(0,d.jsx)(`div`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:l.t(`image-position.horizontal`)})}),(0,d.jsxs)(`div`,{className:`univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:l.t(`image-position.absolutePosition`)}),(0,d.jsx)(a.InputNumber,{min:le,max:ue,precision:1,disabled:T,value:D.posOffset,onChange:e=>{I(`positionH`,{relativeFrom:D.relativeFrom,posOffset:e})}})]}),(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:l.t(`image-position.toTheRightOf`)}),(0,d.jsx)(a.Select,{value:String(D.relativeFrom),disabled:T,options:C,onChange:L})]})]}),(0,d.jsx)(`div`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:l.t(`image-position.vertical`)})}),(0,d.jsxs)(`div`,{className:`univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:l.t(`image-position.absolutePosition`)}),(0,d.jsx)(a.InputNumber,{min:le,max:ue,precision:1,disabled:T,value:k.posOffset,onChange:e=>{I(`positionV`,{relativeFrom:k.relativeFrom,posOffset:e})}})]}),(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:l.t(`image-position.bellow`)}),(0,d.jsx)(a.Select,{disabled:T,value:String(k.relativeFrom),options:w,onChange:R})]})]}),(0,d.jsx)(`div`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:l.t(`image-position.options`)})}),(0,d.jsx)(`div`,{children:(0,d.jsx)(a.Checkbox,{disabled:T,checked:j,onChange:V,children:l.t(`image-position.moveObjectWithText`)})})]})},fe=t=>{let r=(0,s.useDependency)(e.ICommandService),c=(0,s.useDependency)(e.LocaleService),l=(0,s.useDependency)(o.IDrawingManagerService),f=(0,s.useDependency)(i.IRenderManagerService),p=(0,s.useDependency)(e.IUniverInstanceService),{drawings:m}=t,h=m[0];if(h==null)return null;let{unitId:g}=h,_=p.getUniverDocInstance(g),v=f.getRenderById(g);if((v==null?void 0:v.scene)==null)return null;let[y,b]=(0,u.useState)(!0),[x,S]=(0,u.useState)(!0),[C,w]=(0,u.useState)(!0),[T,E]=(0,u.useState)(D.INLINE),[O,k]=(0,u.useState)(``),[N,P]=(0,u.useState)({distT:0,distL:0,distB:0,distR:0}),[F,I]=(0,u.useState)(!0);function L(e){E(e);let t=l.getFocusDrawings();if(t.length===0)return;let{unitId:n,subUnitId:i}=t[0],a=t.map(({unitId:e,subUnitId:t,drawingId:n})=>({unitId:e,subUnitId:t,drawingId:n}));r.executeCommand(A.id,{unitId:n,subUnitId:i,drawings:a,wrappingStyle:e})}function R(e){k(e);let t=l.getFocusDrawings();if(t.length===0)return;let n=t.map(e=>({unitId:e.unitId,subUnitId:e.subUnitId,drawingId:e.drawingId}));r.executeCommand(M.id,{unitId:t[0].unitId,subUnitId:t[0].unitId,drawings:n,wrapText:e})}function z(e,t){if(e==null)return;P({...N,[t]:e});let n=l.getFocusDrawings();if(n.length===0)return;let i=n.map(e=>({unitId:e.unitId,subUnitId:e.subUnitId,drawingId:e.drawingId}));r.executeCommand(j.id,{unitId:n[0].unitId,subUnitId:n[0].unitId,drawings:i,dist:{[t]:e}})}function B(){let e=l.getFocusDrawings();e.length!==0&&V(e[0])}function V(t){var n;let r=_==null||(n=_.getSnapshot())==null||(n=n.drawings)==null?void 0:n[t.drawingId];if(r==null)return;let{distT:i=0,distL:a=0,distB:o=0,distR:s=0,layoutType:c=e.PositionedObjectLayoutType.INLINE,behindDoc:l=e.BooleanNumber.FALSE,wrapText:u=e.WrapTextType.BOTH_SIDES}=r;if(P({distT:i,distL:a,distB:o,distR:s}),k(u),b(c!==e.PositionedObjectLayoutType.WRAP_SQUARE),c===e.PositionedObjectLayoutType.WRAP_NONE||c===e.PositionedObjectLayoutType.INLINE?S(!0):S(!1),c===e.PositionedObjectLayoutType.WRAP_NONE||c===e.PositionedObjectLayoutType.INLINE||c===e.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM?w(!0):w(!1),c===e.PositionedObjectLayoutType.WRAP_NONE)l===e.BooleanNumber.TRUE?E(D.BEHIND_TEXT):E(D.IN_FRONT_OF_TEXT);else switch(c){case e.PositionedObjectLayoutType.INLINE:E(D.INLINE);break;case e.PositionedObjectLayoutType.WRAP_SQUARE:E(D.WRAP_SQUARE);break;case e.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM:E(D.WRAP_TOP_AND_BOTTOM);break;default:throw Error(`Unsupported layout type: ${c}`)}}return(0,u.useEffect)(()=>{B();let e=l.focus$.subscribe(e=>{if(e.length===0){I(!1);return}I(!0),V(e[0])}),t=r.onCommandExecuted(async e=>{e.id===n.RichTextEditingMutation.id&&B()});return()=>{e.unsubscribe(),t.dispose()}},[]),(0,d.jsxs)(`div`,{className:(0,a.clsx)(`univer-grid univer-gap-2 univer-py-2 univer-text-gray-400`,{"univer-hidden":!F}),children:[(0,d.jsx)(`header`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:c.t(`image-text-wrap.title`)})}),(0,d.jsx)(`div`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:c.t(`image-text-wrap.wrappingStyle`)})}),(0,d.jsx)(`div`,{children:(0,d.jsxs)(a.RadioGroup,{value:T,onChange:L,direction:`vertical`,children:[(0,d.jsx)(a.Radio,{value:D.INLINE,children:c.t(`image-text-wrap.inline`)}),(0,d.jsx)(a.Radio,{value:D.WRAP_SQUARE,children:c.t(`image-text-wrap.square`)}),(0,d.jsx)(a.Radio,{value:D.WRAP_TOP_AND_BOTTOM,children:c.t(`image-text-wrap.topAndBottom`)}),(0,d.jsx)(a.Radio,{value:D.BEHIND_TEXT,children:c.t(`image-text-wrap.behindText`)}),(0,d.jsx)(a.Radio,{value:D.IN_FRONT_OF_TEXT,children:c.t(`image-text-wrap.inFrontText`)})]})}),(0,d.jsx)(`div`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:c.t(`image-text-wrap.wrapText`)})}),(0,d.jsx)(`div`,{children:(0,d.jsxs)(a.RadioGroup,{disabled:y,value:O,onChange:R,direction:`horizontal`,children:[(0,d.jsx)(a.Radio,{value:e.WrapTextType.BOTH_SIDES,children:c.t(`image-text-wrap.bothSide`)}),(0,d.jsx)(a.Radio,{value:e.WrapTextType.LEFT,children:c.t(`image-text-wrap.leftOnly`)}),(0,d.jsx)(a.Radio,{value:e.WrapTextType.RIGHT,children:c.t(`image-text-wrap.rightOnly`)})]})}),(0,d.jsx)(`div`,{className:`univer-text-gray-600 dark:!univer-text-gray-200`,children:(0,d.jsx)(`div`,{children:c.t(`image-text-wrap.distanceFromText`)})}),(0,d.jsxs)(`div`,{className:`univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:c.t(`image-text-wrap.top`)}),(0,d.jsx)(a.InputNumber,{min:0,max:100,disabled:x,precision:1,value:N.distT,onChange:e=>{z(e,`distT`)}})]}),(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:c.t(`image-text-wrap.left`)}),(0,d.jsx)(a.InputNumber,{min:0,max:100,disabled:C,precision:1,value:N.distL,onChange:e=>{z(e,`distL`)}})]})]}),(0,d.jsxs)(`div`,{className:`univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:c.t(`image-text-wrap.bottom`)}),(0,d.jsx)(a.InputNumber,{min:0,max:100,disabled:x,precision:1,value:N.distB,onChange:e=>{z(e,`distB`)}})]}),(0,d.jsxs)(`div`,{children:[(0,d.jsx)(`span`,{children:c.t(`image-text-wrap.right`)}),(0,d.jsx)(a.InputNumber,{min:0,max:100,disabled:C,precision:1,value:N.distR,onChange:e=>{z(e,`distR`)}})]})]})]})},pe=()=>{let e=(0,s.useDependency)(o.IDrawingManagerService),[t,n]=(0,u.useState)(e.getFocusDrawings());return(0,u.useEffect)(()=>{let t=e.focus$.subscribe(e=>{n(e)});return()=>{t.unsubscribe()}},[]),!!(t!=null&&t.length)&&(0,d.jsxs)(`div`,{className:`univer-text-sm`,children:[(0,d.jsx)(l.DrawingCommonPanel,{drawings:t,hasAlign:!1,hasCropper:!1,hasGroup:!1,hasTransform:!1}),(0,d.jsx)(fe,{drawings:t}),(0,d.jsx)(de,{drawings:t})]})};function Q(t){return t.getContextValue(e.FOCUSING_DOC)&&t.getContextValue(e.FOCUSING_UNIVER_EDITOR)&&t.getContextValue(e.FOCUSING_COMMON_DRAWINGS)}const me={id:I.id,description:`shortcut.drawing-move-down`,group:`4_drawing-view`,binding:s.KeyCode.ARROW_DOWN,priority:100,preconditions:Q,staticParameters:{direction:e.Direction.DOWN}},he={id:I.id,description:`shortcut.drawing-move-up`,group:`4_drawing-view`,binding:s.KeyCode.ARROW_UP,priority:100,preconditions:Q,staticParameters:{direction:e.Direction.UP}},ge={id:I.id,description:`shortcut.drawing-move-left`,group:`4_drawing-view`,binding:s.KeyCode.ARROW_LEFT,priority:100,preconditions:Q,staticParameters:{direction:e.Direction.LEFT}},_e={id:I.id,description:`shortcut.drawing-move-right`,group:`4_drawing-view`,binding:s.KeyCode.ARROW_RIGHT,priority:100,preconditions:Q,staticParameters:{direction:e.Direction.RIGHT}},ve={id:p.id,description:`shortcut.drawing-delete`,group:`4_drawing-view`,preconditions:Q,binding:s.KeyCode.DELETE,mac:s.KeyCode.BACKSPACE};let ye=class extends e.Disposable{constructor(e,t,n,r){super(),this._componentManager=e,this._menuManagerService=t,this._commandService=n,this._shortcutService=r,this._init()}_initCustomComponents(){let e=this._componentManager;this.disposeWithMe(e.register(R,pe))}_initMenus(){this._menuManagerService.mergeMenu(ce)}_initCommands(){[E,h,A,j,M,N,P,F,f,z,L,B,m,_,I,p,g].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}_initShortcuts(){[me,he,ge,_e,ve].forEach(e=>{this.disposeWithMe(this._shortcutService.registerShortcut(e))})}_init(){this._initCommands(),this._initCustomComponents(),this._initMenus(),this._initShortcuts()}};ye=w([C(0,(0,e.Inject)(s.ComponentManager)),C(1,s.IMenuManagerService),C(2,e.ICommandService),C(3,s.IShortcutService)],ye);let be=class extends e.Disposable{constructor(e,t,n,r,a,o,s,c){super(),this._context=e,this._docSkeletonManagerService=t,this._commandService=n,this._editorService=r,this._drawingManagerService=a,this._docRefreshDrawingsService=o,this._univerInstanceService=s,this._lifecycleService=c,x(this,`_liquid`,new i.Liquid),this._initialize(),this._commandExecutedListener()}_initialize(){this._initialRenderRefresh(),this._drawingInitializeListener(),this._initResize()}_initialRenderRefresh(){this.disposeWithMe(this._docSkeletonManagerService.currentSkeleton$.subscribe(e=>{e!=null&&this._refreshDrawing(e)})),this.disposeWithMe(this._docRefreshDrawingsService.refreshDrawings$.subscribe(e=>{e!=null&&this._refreshDrawing(e)}))}_commandExecutedListener(){let t=[n.RichTextEditingMutation.id,r.SetDocZoomRatioOperation.id];this.disposeWithMe(this._commandService.onCommandExecuted(n=>{if(t.includes(n.id)){let{unitId:t}=n.params,{unitId:r,mainComponent:i}=this._context;if(t!==r)return;let a=this._docSkeletonManagerService.getSkeleton();if(a==null)return;if(this._editorService.isEditor(r)&&r!==e.DOCS_ZEN_EDITOR_UNIT_ID_KEY){i==null||i.makeDirty();return}this._refreshDrawing(a)}}))}_initResize(){this.disposeWithMe((0,e.fromEventSubject)(this._context.engine.onTransformChange$).pipe((0,c.filter)(e=>e.type===i.TRANSFORM_CHANGE_OBSERVABLE_TYPE.resize),(0,c.debounceTime)(16)).subscribe(()=>{var e;let t=this._docSkeletonManagerService.getSkeleton(),{scene:n}=this._context;(e=n.getTransformer())==null||e.refreshControls(),this._refreshDrawing(t)}))}_refreshDrawing(e){let t=e==null?void 0:e.getSkeletonData(),{mainComponent:n,unitId:r}=this._context,i=n;if(!t)return;let{left:a,top:o,pageLayoutType:s,pageMarginLeft:c,pageMarginTop:l}=i,{pages:u,skeHeaders:d,skeFooters:f}=t,p={};this._liquid.reset();for(let e=0,t=u.length;e<t;e++){let t=u[e],{headerId:n,footerId:i,pageWidth:g}=t;if(n){var m;let e=(m=d.get(n))==null?void 0:m.get(g);e&&this._calculateDrawingPosition(r,e,a,o,p,e.marginTop,t.marginLeft)}if(i){var h;let e=(h=f.get(i))==null?void 0:h.get(g);e&&this._calculateDrawingPosition(r,e,a,o,p,t.pageHeight-t.marginBottom+e.marginTop,t.marginLeft)}this._calculateDrawingPosition(r,t,a,o,p,t.marginTop,t.marginLeft),this._liquid.translatePage(t,s,c,l)}let g=Object.values(p),_=g.filter(e=>!e.isMultiTransform),v=g.filter(e=>e.isMultiTransform);_.length>0&&this._drawingManagerService.refreshTransform(_),this._handleMultiDrawingsTransform(v)}_handleMultiDrawingsTransform(t){let{scene:n,unitId:r}=this._context,i=n.getTransformerByCreate();t.forEach(e=>{let t=this._drawingManagerService.getDrawingByParam(e);t!=null&&(t.transform=e.transform,t.transforms=e.transforms,t.isMultiTransform=e.isMultiTransform)});let a=[...i.getSelectedObjectMap().keys()],o=Object.values(this._drawingManagerService.getDrawingData(r,r)).filter(t=>t.isMultiTransform===e.BooleanNumber.TRUE);this._drawingManagerService.removeNotification(o),t.length>0&&this._drawingManagerService.addNotification(t);for(let e of a){let t=n.getObject(e);t&&i.setSelectedControl(t)}}_calculateDrawingPosition(t,n,r,i,a,o,s){let{skeDrawings:c}=n;this._liquid.translatePagePadding({marginTop:o,marginLeft:s}),c.forEach(n=>{let{aLeft:o,aTop:s,height:c,width:l,angle:u,drawingId:d,drawingOrigin:f}=n,p=f.layoutType===e.PositionedObjectLayoutType.WRAP_NONE&&f.behindDoc===e.BooleanNumber.TRUE,{isMultiTransform:m=e.BooleanNumber.FALSE}=f,h={left:o+r+this._liquid.x,top:s+i+this._liquid.y,width:l,height:c,angle:u};a[d]==null?a[d]={unitId:t,subUnitId:t,drawingId:d,behindText:p,transform:h,transforms:[h],isMultiTransform:m}:m===e.BooleanNumber.TRUE&&a[d].transforms.push(h)}),this._liquid.restorePagePadding({marginTop:o,marginLeft:s})}_drawingInitializeListener(){let t=()=>{let e=this._docSkeletonManagerService.getSkeleton();e!=null&&(this._refreshDrawing(e),this._drawingManagerService.initializeNotification(this._context.unitId))};this._lifecycleService.stage>=e.LifecycleStages.Rendered?this._docSkeletonManagerService.getSkeleton()?t():setTimeout(t,500):this.disposeWithMe(this._lifecycleService.lifecycle$.pipe((0,c.filter)(t=>t===e.LifecycleStages.Rendered)).subscribe(t))}};be=w([C(1,(0,e.Inject)(n.DocSkeletonManagerService)),C(2,e.ICommandService),C(3,r.IEditorService),C(4,o.IDrawingManagerService),C(5,(0,e.Inject)(S)),C(6,e.IUniverInstanceService),C(7,(0,e.Inject)(e.LifecycleService))],be);let xe=class extends e.RxDisposable{constructor(e,t,n,r,i){super(),this._drawingManagerService=e,this._canvasPopManagerService=t,this._renderManagerService=n,this._univerInstanceService=r,this._contextService=i,x(this,`_initImagePopupMenu`,new Set),x(this,`_disposePopups`,[]),this._init()}_init(){this.disposeWithMe(this._univerInstanceService.getCurrentTypeOfUnit$(e.UniverInstanceType.UNIVER_DOC).pipe((0,c.takeUntil)(this.dispose$)).subscribe(e=>this._create(e))),this.disposeWithMe(this._univerInstanceService.getTypeOfUnitDisposed$(e.UniverInstanceType.UNIVER_DOC).pipe((0,c.takeUntil)(this.dispose$)).subscribe(e=>this._dispose(e))),this._univerInstanceService.getAllUnitsForType(e.UniverInstanceType.UNIVER_DOC).forEach(e=>this._create(e))}_dispose(e){let t=e.getUnitId();this._disposePopups.length&&(this._disposePopups.forEach(e=>e.dispose()),this._disposePopups.length=0),this._renderManagerService.removeRender(t)}_create(t){if(!t)return;let n=t.getUnitId();(0,e.isInternalEditorID)(n)||this._renderManagerService.has(n)&&!this._initImagePopupMenu.has(n)&&(this._popupMenuListener(n),this._initImagePopupMenu.add(n))}_hasCropObject(e){let t=e.getAllObjects();for(let e of t)if(e instanceof l.ImageCropperObject)return!0;return!1}_popupMenuListener(t){var n;let r=(n=this._renderManagerService.getRenderById(t))==null?void 0:n.scene;if(!r)return;let i=r.getTransformerByCreate();if(!i)return;let a=this._disposePopups;this.disposeWithMe(i.createControl$.subscribe(()=>{if(this._hasCropObject(r))return;let t=i.getSelectedObjectMap();if(a.forEach(e=>e.dispose()),a.length=0,t.size>1)return;let n=t.values().next().value;if(!n)return;let o=n.oKey,s=this._drawingManagerService.getDrawingOKey(o);if(!s||s.drawingType===e.DrawingTypeEnum.DRAWING_DOM)return;let{unitId:c,subUnitId:u,drawingId:d,drawingType:f}=s,p=this._canvasPopManagerService.attachPopupToObject(n,{componentKey:l.COMPONENT_IMAGE_POPUP_MENU,direction:`horizontal`,offset:[2,0],extraProps:{menuItems:this._getImageMenuItems(c,u,d,f)}},c);a.push(this.disposeWithMe(p)),!this._drawingManagerService.getFocusDrawings().find(e=>e.unitId===c&&e.subUnitId===u&&e.drawingId===d)&&this._drawingManagerService.focusDrawing([{unitId:c,subUnitId:u,drawingId:d}])})),this.disposeWithMe(i.clearControl$.subscribe(()=>{a.forEach(e=>e.dispose()),a.length=0,this._contextService.setContextValue(e.FOCUSING_COMMON_DRAWINGS,!1),this._drawingManagerService.focusDrawing(null)})),this.disposeWithMe(i.changing$.subscribe(()=>{a.forEach(e=>e.dispose()),a.length=0})),this.disposeWithMe(i.changeStart$.subscribe(()=>{a.forEach(e=>e.dispose()),a.length=0}))}_getImageMenuItems(e,t,n,r){return[{label:`image-popup.edit`,index:0,commandId:B.id,commandParams:{unitId:e,subUnitId:t,drawingId:n},disable:!0},{label:`image-popup.delete`,index:1,commandId:f.id,commandParams:{unitId:e,drawings:[{unitId:e,subUnitId:t,drawingId:n}]},disable:!1},{label:`image-popup.crop`,index:2,commandId:l.OpenImageCropOperation.id,commandParams:{unitId:e,subUnitId:t,drawingId:n},disable:!0},{label:`image-popup.reset`,index:3,commandId:l.ImageResetSizeOperation.id,commandParams:[{unitId:e,subUnitId:t,drawingId:n}],disable:!0}]}};xe=w([C(0,o.IDrawingManagerService),C(1,(0,e.Inject)(r.DocCanvasPopManagerService)),C(2,i.IRenderManagerService),C(3,e.IUniverInstanceService),C(4,e.IContextService)],xe);let $=class extends e.Plugin{constructor(t=J,n,r,i){super(),this._config=t,this._injector=n,this._renderManagerSrv=r,this._configService=i;let{...a}=(0,e.merge)({},J,this._config);this._configService.setConfig(q,a)}onStarting(){[[ye],[xe],[se],[X],[S],[U],[Z]].forEach(e=>this._injector.add(e))}onReady(){[[T],[be]].forEach(t=>this._renderManagerSrv.registerRenderModule(e.UniverInstanceType.UNIVER_DOC,t)),this._injector.get(X),this._injector.get(ye),this._injector.get(se),this._injector.get(Z)}onRendered(){this._injector.get(xe),this._injector.get(U)}};x($,`type`,e.UniverInstanceType.UNIVER_DOC),x($,`pluginName`,`DOC_DRAWING_UI_PLUGIN`),x($,`packageName`,ne),x($,`version`,re),$=w([(0,e.DependentOn)(l.UniverDrawingUIPlugin,o.UniverDrawingPlugin,t.UniverDocsDrawingPlugin,s.UniverUIPlugin),C(1,(0,e.Inject)(e.Injector)),C(2,i.IRenderManagerService),C(3,e.IConfigService)],$),exports.ClearDocDrawingTransformerOperation=L,exports.DOCS_IMAGE_MENU_ID=W,exports.DeleteDocDrawingsCommand=p,Object.defineProperty(exports,`DocFloatDomController`,{enumerable:!0,get:function(){return U}}),exports.EditDocDrawingOperation=B,exports.GroupDocDrawingCommand=m,exports.InsertDocDrawingCommand=h,exports.InsertDocImageCommand=E,exports.MoveDocDrawingsCommand=I,exports.RemoveDocDrawingCommand=f,exports.SetDocDrawingArrangeCommand=g,exports.SidebarDocDrawingOperation=z,exports.UngroupDocDrawingCommand=_,Object.defineProperty(exports,`UniverDocsDrawingUIPlugin`,{enumerable:!0,get:function(){return $}});
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
let _univerjs_core = require("@univerjs/core");
|
|
3
|
+
let _univerjs_docs_drawing = require("@univerjs/docs-drawing");
|
|
4
|
+
let _univerjs_docs = require("@univerjs/docs");
|
|
5
|
+
let _univerjs_docs_ui = require("@univerjs/docs-ui");
|
|
6
|
+
let _univerjs_engine_render = require("@univerjs/engine-render");
|
|
7
|
+
let _univerjs_design = require("@univerjs/design");
|
|
8
|
+
let _univerjs_drawing = require("@univerjs/drawing");
|
|
9
|
+
let _univerjs_ui = require("@univerjs/ui");
|
|
10
|
+
let rxjs = require("rxjs");
|
|
11
|
+
let _univerjs_drawing_ui = require("@univerjs/drawing-ui");
|
|
12
|
+
let react = require("react");
|
|
13
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
14
|
+
|
|
15
|
+
//#region src/commands/commands/remove-doc-drawing.command.ts
|
|
16
|
+
/**
|
|
17
|
+
* The command to remove new sheet image
|
|
18
|
+
*/
|
|
19
|
+
const RemoveDocDrawingCommand = {
|
|
20
|
+
id: "doc.command.remove-doc-image",
|
|
21
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
22
|
+
handler: (accessor, params) => {
|
|
23
|
+
var _docSelectionRenderSe, _documentDataModel$ge, _documentDataModel$ge2;
|
|
24
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
25
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
26
|
+
const renderManagerService = accessor.get(_univerjs_engine_render.IRenderManagerService);
|
|
27
|
+
const documentDataModel = univerInstanceService.getCurrentUniverDocInstance();
|
|
28
|
+
if (params == null || documentDataModel == null) return false;
|
|
29
|
+
const docSelectionRenderService = renderManagerService.getRenderById(params.unitId).with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
30
|
+
const { drawings: removeDrawings } = params;
|
|
31
|
+
const segmentId = (_docSelectionRenderSe = docSelectionRenderService.getSegment()) !== null && _docSelectionRenderSe !== void 0 ? _docSelectionRenderSe : "";
|
|
32
|
+
const textX = new _univerjs_core.TextX();
|
|
33
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
34
|
+
const customBlocks = (_documentDataModel$ge = (_documentDataModel$ge2 = documentDataModel.getSelfOrHeaderFooterModel(segmentId).getBody()) === null || _documentDataModel$ge2 === void 0 ? void 0 : _documentDataModel$ge2.customBlocks) !== null && _documentDataModel$ge !== void 0 ? _documentDataModel$ge : [];
|
|
35
|
+
const removeCustomBlocks = removeDrawings.map((drawing) => customBlocks.find((customBlock) => customBlock.blockId === drawing.drawingId)).filter((block) => !!block).sort((a, b) => a.startIndex > b.startIndex ? 1 : -1);
|
|
36
|
+
const unitId = removeDrawings[0].unitId;
|
|
37
|
+
const memoryCursor = new _univerjs_core.MemoryCursor();
|
|
38
|
+
memoryCursor.reset();
|
|
39
|
+
const cursorIndex = removeCustomBlocks[0].startIndex;
|
|
40
|
+
const textRanges = [{
|
|
41
|
+
startOffset: cursorIndex,
|
|
42
|
+
endOffset: cursorIndex
|
|
43
|
+
}];
|
|
44
|
+
const doMutation = {
|
|
45
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
46
|
+
params: {
|
|
47
|
+
unitId,
|
|
48
|
+
actions: [],
|
|
49
|
+
textRanges
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const rawActions = [];
|
|
53
|
+
for (const block of removeCustomBlocks) {
|
|
54
|
+
const { startIndex } = block;
|
|
55
|
+
if (startIndex > memoryCursor.cursor) textX.push({
|
|
56
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
57
|
+
len: startIndex - memoryCursor.cursor
|
|
58
|
+
});
|
|
59
|
+
textX.push({
|
|
60
|
+
t: _univerjs_core.TextXActionType.DELETE,
|
|
61
|
+
len: 1
|
|
62
|
+
});
|
|
63
|
+
memoryCursor.moveCursorTo(startIndex + 1);
|
|
64
|
+
}
|
|
65
|
+
const path = (0, _univerjs_docs_ui.getRichTextEditPath)(documentDataModel, segmentId);
|
|
66
|
+
rawActions.push(jsonX.editOp(textX.serialize(), path));
|
|
67
|
+
for (const block of removeCustomBlocks) {
|
|
68
|
+
var _documentDataModel$ge3;
|
|
69
|
+
const { blockId } = block;
|
|
70
|
+
const drawing = ((_documentDataModel$ge3 = documentDataModel.getDrawings()) !== null && _documentDataModel$ge3 !== void 0 ? _documentDataModel$ge3 : {})[blockId];
|
|
71
|
+
const drawingIndex = documentDataModel.getDrawingsOrder().indexOf(blockId);
|
|
72
|
+
const removeDrawingAction = jsonX.removeOp(["drawings", blockId], drawing);
|
|
73
|
+
const removeDrawingOrderAction = jsonX.removeOp(["drawingsOrder", drawingIndex], blockId);
|
|
74
|
+
rawActions.push(removeDrawingAction);
|
|
75
|
+
rawActions.push(removeDrawingOrderAction);
|
|
76
|
+
}
|
|
77
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
78
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
79
|
+
}, null);
|
|
80
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
81
|
+
return Boolean(result);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
//#endregion
|
|
86
|
+
//#region src/commands/commands/delete-doc-drawing.command.ts
|
|
87
|
+
const DeleteDocDrawingsCommand = {
|
|
88
|
+
id: "doc.command.delete-drawing",
|
|
89
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
90
|
+
handler: (accessor) => {
|
|
91
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
92
|
+
const drawings = accessor.get(_univerjs_docs_drawing.IDocDrawingService).getFocusDrawings();
|
|
93
|
+
if (drawings.length === 0) return false;
|
|
94
|
+
const { unitId } = drawings[0];
|
|
95
|
+
const newDrawings = drawings.map((drawing) => {
|
|
96
|
+
const { unitId, subUnitId, drawingId, drawingType } = drawing;
|
|
97
|
+
return {
|
|
98
|
+
unitId,
|
|
99
|
+
subUnitId,
|
|
100
|
+
drawingId,
|
|
101
|
+
drawingType
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
return commandService.executeCommand(RemoveDocDrawingCommand.id, {
|
|
105
|
+
unitId,
|
|
106
|
+
drawings: newDrawings
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
//#endregion
|
|
112
|
+
//#region src/commands/commands/group-doc-drawing.command.ts
|
|
113
|
+
/**
|
|
114
|
+
* The command to insert new defined name
|
|
115
|
+
*/
|
|
116
|
+
const GroupDocDrawingCommand = {
|
|
117
|
+
id: "doc.command.group-doc-image",
|
|
118
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
119
|
+
handler: (accessor, params) => {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/commands/commands/insert-doc-drawing.command.ts
|
|
126
|
+
/**
|
|
127
|
+
* The command to insert new drawings
|
|
128
|
+
*/
|
|
129
|
+
const InsertDocDrawingCommand = {
|
|
130
|
+
id: "doc.command.insert-doc-image",
|
|
131
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
132
|
+
handler: (accessor, params) => {
|
|
133
|
+
var _documentDataModel$ge, _documentDataModel$ge2;
|
|
134
|
+
if (params == null) return false;
|
|
135
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
136
|
+
const docSelectionManagerService = accessor.get(_univerjs_docs.DocSelectionManagerService);
|
|
137
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
138
|
+
const activeTextRange = docSelectionManagerService.getActiveTextRange();
|
|
139
|
+
const documentDataModel = univerInstanceService.getCurrentUniverDocInstance();
|
|
140
|
+
if (activeTextRange == null || documentDataModel == null) return false;
|
|
141
|
+
const unitId = documentDataModel.getUnitId();
|
|
142
|
+
const { drawings } = params;
|
|
143
|
+
const { collapsed, startOffset, segmentId } = activeTextRange;
|
|
144
|
+
const body = documentDataModel.getSelfOrHeaderFooterModel(segmentId).getBody();
|
|
145
|
+
if (body == null) return false;
|
|
146
|
+
const textX = new _univerjs_core.TextX();
|
|
147
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
148
|
+
const rawActions = [];
|
|
149
|
+
const drawingOrderLength = (_documentDataModel$ge = (_documentDataModel$ge2 = documentDataModel.getSnapshot().drawingsOrder) === null || _documentDataModel$ge2 === void 0 ? void 0 : _documentDataModel$ge2.length) !== null && _documentDataModel$ge !== void 0 ? _documentDataModel$ge : 0;
|
|
150
|
+
let removeDrawingLen = 0;
|
|
151
|
+
if (collapsed) {
|
|
152
|
+
if (startOffset > 0) textX.push({
|
|
153
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
154
|
+
len: startOffset
|
|
155
|
+
});
|
|
156
|
+
} else {
|
|
157
|
+
var _documentDataModel$ge3, _documentDataModel$ge4;
|
|
158
|
+
const dos = _univerjs_core.BuildTextUtils.selection.delete([activeTextRange], body, 0, null, false);
|
|
159
|
+
textX.push(...dos);
|
|
160
|
+
const removedCustomBlockIds = (0, _univerjs_docs_ui.getCustomBlockIdsInSelections)(body, [activeTextRange]);
|
|
161
|
+
const drawings = (_documentDataModel$ge3 = documentDataModel.getDrawings()) !== null && _documentDataModel$ge3 !== void 0 ? _documentDataModel$ge3 : {};
|
|
162
|
+
const drawingOrder = (_documentDataModel$ge4 = documentDataModel.getDrawingsOrder()) !== null && _documentDataModel$ge4 !== void 0 ? _documentDataModel$ge4 : [];
|
|
163
|
+
const sortedRemovedCustomBlockIds = removedCustomBlockIds.sort((a, b) => {
|
|
164
|
+
if (drawingOrder.indexOf(a) > drawingOrder.indexOf(b)) return -1;
|
|
165
|
+
else if (drawingOrder.indexOf(a) < drawingOrder.indexOf(b)) return 1;
|
|
166
|
+
return 0;
|
|
167
|
+
});
|
|
168
|
+
if (sortedRemovedCustomBlockIds.length > 0) for (const blockId of sortedRemovedCustomBlockIds) {
|
|
169
|
+
const drawing = drawings[blockId];
|
|
170
|
+
const drawingIndex = drawingOrder.indexOf(blockId);
|
|
171
|
+
if (drawing == null || drawingIndex < 0) continue;
|
|
172
|
+
const removeDrawingAction = jsonX.removeOp(["drawings", blockId], drawing);
|
|
173
|
+
const removeDrawingOrderAction = jsonX.removeOp(["drawingsOrder", drawingIndex], blockId);
|
|
174
|
+
rawActions.push(removeDrawingAction);
|
|
175
|
+
rawActions.push(removeDrawingOrderAction);
|
|
176
|
+
removeDrawingLen++;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
textX.push({
|
|
180
|
+
t: _univerjs_core.TextXActionType.INSERT,
|
|
181
|
+
body: {
|
|
182
|
+
dataStream: "\b".repeat(drawings.length),
|
|
183
|
+
customBlocks: drawings.map((drawing, i) => ({
|
|
184
|
+
startIndex: i,
|
|
185
|
+
blockId: drawing.drawingId
|
|
186
|
+
}))
|
|
187
|
+
},
|
|
188
|
+
len: drawings.length
|
|
189
|
+
});
|
|
190
|
+
const path = (0, _univerjs_docs_ui.getRichTextEditPath)(documentDataModel, segmentId);
|
|
191
|
+
const placeHolderAction = jsonX.editOp(textX.serialize(), path);
|
|
192
|
+
rawActions.push(placeHolderAction);
|
|
193
|
+
for (const drawing of drawings) {
|
|
194
|
+
const { drawingId } = drawing;
|
|
195
|
+
const addDrawingAction = jsonX.insertOp(["drawings", drawingId], drawing);
|
|
196
|
+
const addDrawingOrderAction = jsonX.insertOp(["drawingsOrder", drawingOrderLength - removeDrawingLen], drawingId);
|
|
197
|
+
rawActions.push(addDrawingAction);
|
|
198
|
+
rawActions.push(addDrawingOrderAction);
|
|
199
|
+
}
|
|
200
|
+
const doMutation = {
|
|
201
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
202
|
+
params: {
|
|
203
|
+
unitId,
|
|
204
|
+
actions: [],
|
|
205
|
+
textRanges: []
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
209
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
210
|
+
}, null);
|
|
211
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
212
|
+
return Boolean(result);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
//#endregion
|
|
217
|
+
//#region src/commands/commands/set-drawing-arrange.command.ts
|
|
218
|
+
/**
|
|
219
|
+
* The command to arrange drawings.
|
|
220
|
+
*/
|
|
221
|
+
const SetDocDrawingArrangeCommand = {
|
|
222
|
+
id: "doc.command.set-drawing-arrange",
|
|
223
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
224
|
+
handler: (accessor, params) => {
|
|
225
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
226
|
+
const docDrawingService = accessor.get(_univerjs_docs_drawing.IDocDrawingService);
|
|
227
|
+
if (params == null) return false;
|
|
228
|
+
const { unitId, subUnitId, drawingIds, arrangeType } = params;
|
|
229
|
+
const drawingOrderMapParam = {
|
|
230
|
+
unitId,
|
|
231
|
+
subUnitId,
|
|
232
|
+
drawingIds
|
|
233
|
+
};
|
|
234
|
+
let jsonOp;
|
|
235
|
+
if (arrangeType === _univerjs_core.ArrangeTypeEnum.forward) jsonOp = docDrawingService.getForwardDrawingsOp(drawingOrderMapParam);
|
|
236
|
+
else if (arrangeType === _univerjs_core.ArrangeTypeEnum.backward) jsonOp = docDrawingService.getBackwardDrawingOp(drawingOrderMapParam);
|
|
237
|
+
else if (arrangeType === _univerjs_core.ArrangeTypeEnum.front) jsonOp = docDrawingService.getFrontDrawingsOp(drawingOrderMapParam);
|
|
238
|
+
else if (arrangeType === _univerjs_core.ArrangeTypeEnum.back) jsonOp = docDrawingService.getBackDrawingsOp(drawingOrderMapParam);
|
|
239
|
+
if (jsonOp == null) return false;
|
|
240
|
+
const { redo } = jsonOp;
|
|
241
|
+
if (redo == null) return false;
|
|
242
|
+
const rawActions = [];
|
|
243
|
+
let redoCopy = _univerjs_core.Tools.deepClone(redo);
|
|
244
|
+
redoCopy = redoCopy.slice(3);
|
|
245
|
+
redoCopy.unshift("drawingsOrder");
|
|
246
|
+
rawActions.push(redoCopy);
|
|
247
|
+
const doMutation = {
|
|
248
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
249
|
+
params: {
|
|
250
|
+
unitId,
|
|
251
|
+
actions: [],
|
|
252
|
+
textRanges: null
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
256
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
257
|
+
}, null);
|
|
258
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
259
|
+
return Boolean(result);
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region src/commands/commands/ungroup-doc-drawing.command.ts
|
|
265
|
+
/**
|
|
266
|
+
* The command to insert new defined name
|
|
267
|
+
*/
|
|
268
|
+
const UngroupDocDrawingCommand = {
|
|
269
|
+
id: "doc.command.ungroup-doc-image",
|
|
270
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
271
|
+
handler: (accessor, params) => {
|
|
272
|
+
const docDrawingService = accessor.get(_univerjs_docs_drawing.IDocDrawingService);
|
|
273
|
+
if (!params) return false;
|
|
274
|
+
const unitIds = [];
|
|
275
|
+
params.forEach(({ parent, children }) => {
|
|
276
|
+
unitIds.push(parent.unitId);
|
|
277
|
+
children.forEach((child) => {
|
|
278
|
+
unitIds.push(child.unitId);
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
const { unitId, subUnitId, undo, redo, objects } = docDrawingService.getUngroupDrawingOp(params);
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
//#endregion
|
|
287
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/typeof.js
|
|
288
|
+
function _typeof(o) {
|
|
289
|
+
"@babel/helpers - typeof";
|
|
290
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
291
|
+
return typeof o;
|
|
292
|
+
} : function(o) {
|
|
293
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
294
|
+
}, _typeof(o);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
//#endregion
|
|
298
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/toPrimitive.js
|
|
299
|
+
function toPrimitive(t, r) {
|
|
300
|
+
if ("object" != _typeof(t) || !t) return t;
|
|
301
|
+
var e = t[Symbol.toPrimitive];
|
|
302
|
+
if (void 0 !== e) {
|
|
303
|
+
var i = e.call(t, r || "default");
|
|
304
|
+
if ("object" != _typeof(i)) return i;
|
|
305
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
306
|
+
}
|
|
307
|
+
return ("string" === r ? String : Number)(t);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
//#endregion
|
|
311
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/toPropertyKey.js
|
|
312
|
+
function toPropertyKey(t) {
|
|
313
|
+
var i = toPrimitive(t, "string");
|
|
314
|
+
return "symbol" == _typeof(i) ? i : i + "";
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
//#endregion
|
|
318
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/defineProperty.js
|
|
319
|
+
function _defineProperty(e, r, t) {
|
|
320
|
+
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
321
|
+
value: t,
|
|
322
|
+
enumerable: !0,
|
|
323
|
+
configurable: !0,
|
|
324
|
+
writable: !0
|
|
325
|
+
}) : e[r] = t, e;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
//#endregion
|
|
329
|
+
//#region src/services/doc-refresh-drawings.service.ts
|
|
330
|
+
var DocRefreshDrawingsService = class {
|
|
331
|
+
constructor() {
|
|
332
|
+
_defineProperty(this, "_refreshDrawings$", new rxjs.BehaviorSubject(null));
|
|
333
|
+
_defineProperty(this, "refreshDrawings$", this._refreshDrawings$.asObservable());
|
|
334
|
+
}
|
|
335
|
+
refreshDrawings(skeleton) {
|
|
336
|
+
this._refreshDrawings$.next(skeleton);
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
//#endregion
|
|
341
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/decorateParam.js
|
|
342
|
+
function __decorateParam(paramIndex, decorator) {
|
|
343
|
+
return function(target, key) {
|
|
344
|
+
decorator(target, key, paramIndex);
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
//#endregion
|
|
349
|
+
//#region \0@oxc-project+runtime@0.124.0/helpers/decorate.js
|
|
350
|
+
function __decorate(decorators, target, key, desc) {
|
|
351
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
352
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
353
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
354
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region src/controllers/render-controllers/doc-drawing-update.render-controller.ts
|
|
359
|
+
let DocDrawingUpdateRenderController = class DocDrawingUpdateRenderController extends _univerjs_core.Disposable {
|
|
360
|
+
constructor(_context, _commandService, _docSelectionManagerService, _renderManagerSrv, _imageIoService, _docDrawingService, _drawingManagerService, _contextService, _messageService, _localeService, _docSelectionRenderService, _docRefreshDrawingsService, _fileOpenerService) {
|
|
361
|
+
super();
|
|
362
|
+
this._context = _context;
|
|
363
|
+
this._commandService = _commandService;
|
|
364
|
+
this._docSelectionManagerService = _docSelectionManagerService;
|
|
365
|
+
this._renderManagerSrv = _renderManagerSrv;
|
|
366
|
+
this._imageIoService = _imageIoService;
|
|
367
|
+
this._docDrawingService = _docDrawingService;
|
|
368
|
+
this._drawingManagerService = _drawingManagerService;
|
|
369
|
+
this._contextService = _contextService;
|
|
370
|
+
this._messageService = _messageService;
|
|
371
|
+
this._localeService = _localeService;
|
|
372
|
+
this._docSelectionRenderService = _docSelectionRenderService;
|
|
373
|
+
this._docRefreshDrawingsService = _docRefreshDrawingsService;
|
|
374
|
+
this._fileOpenerService = _fileOpenerService;
|
|
375
|
+
this._updateOrderListener();
|
|
376
|
+
this._groupDrawingListener();
|
|
377
|
+
this._focusDrawingListener();
|
|
378
|
+
this._transformDrawingListener();
|
|
379
|
+
this._editAreaChangeListener();
|
|
380
|
+
}
|
|
381
|
+
dispose() {
|
|
382
|
+
super.dispose();
|
|
383
|
+
delete this._context;
|
|
384
|
+
}
|
|
385
|
+
async insertDocImage() {
|
|
386
|
+
const files = await this._fileOpenerService.openFile({
|
|
387
|
+
multiple: true,
|
|
388
|
+
accept: _univerjs_drawing.DRAWING_IMAGE_ALLOW_IMAGE_LIST.map((image) => `.${image.replace("image/", "")}`).join(",")
|
|
389
|
+
});
|
|
390
|
+
const fileLength = files.length;
|
|
391
|
+
if (fileLength > _univerjs_drawing.DRAWING_IMAGE_COUNT_LIMIT) {
|
|
392
|
+
this._messageService.show({
|
|
393
|
+
type: _univerjs_design.MessageType.Error,
|
|
394
|
+
content: this._localeService.t("update-status.exceedMaxCount", String(_univerjs_drawing.DRAWING_IMAGE_COUNT_LIMIT))
|
|
395
|
+
});
|
|
396
|
+
return false;
|
|
397
|
+
} else if (fileLength === 0) return false;
|
|
398
|
+
await this._insertFloatImages(files);
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
async _insertFloatImages(files) {
|
|
402
|
+
let imageParams = [];
|
|
403
|
+
try {
|
|
404
|
+
imageParams = await Promise.all(files.map((file) => this._imageIoService.saveImage(file)));
|
|
405
|
+
} catch (error) {
|
|
406
|
+
const type = error.message;
|
|
407
|
+
let content = "";
|
|
408
|
+
switch (type) {
|
|
409
|
+
case _univerjs_drawing.ImageUploadStatusType.ERROR_EXCEED_SIZE:
|
|
410
|
+
content = this._localeService.t("update-status.exceedMaxSize", String(_univerjs_drawing.DRAWING_IMAGE_ALLOW_SIZE / (1024 * 1024)));
|
|
411
|
+
break;
|
|
412
|
+
case _univerjs_drawing.ImageUploadStatusType.ERROR_IMAGE_TYPE:
|
|
413
|
+
content = this._localeService.t("update-status.invalidImageType");
|
|
414
|
+
break;
|
|
415
|
+
case _univerjs_drawing.ImageUploadStatusType.ERROR_IMAGE:
|
|
416
|
+
content = this._localeService.t("update-status.invalidImage");
|
|
417
|
+
break;
|
|
418
|
+
default: break;
|
|
419
|
+
}
|
|
420
|
+
this._messageService.show({
|
|
421
|
+
type: _univerjs_design.MessageType.Error,
|
|
422
|
+
content
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
if (imageParams.length === 0) return;
|
|
426
|
+
const { unitId } = this._context;
|
|
427
|
+
const docDrawingParams = [];
|
|
428
|
+
for (const imageParam of imageParams) {
|
|
429
|
+
if (imageParam == null) continue;
|
|
430
|
+
const { imageId, imageSourceType, source, base64Cache } = imageParam;
|
|
431
|
+
const { width, height, image } = await (0, _univerjs_drawing.getImageSize)(base64Cache || "");
|
|
432
|
+
this._imageIoService.addImageSourceCache(imageId, imageSourceType, image);
|
|
433
|
+
let scale = 1;
|
|
434
|
+
if (width > _univerjs_drawing.DRAWING_IMAGE_WIDTH_LIMIT || height > _univerjs_drawing.DRAWING_IMAGE_HEIGHT_LIMIT) {
|
|
435
|
+
const scaleWidth = _univerjs_drawing.DRAWING_IMAGE_WIDTH_LIMIT / width;
|
|
436
|
+
const scaleHeight = _univerjs_drawing.DRAWING_IMAGE_HEIGHT_LIMIT / height;
|
|
437
|
+
scale = Math.min(scaleWidth, scaleHeight);
|
|
438
|
+
}
|
|
439
|
+
const docTransform = this._getImagePosition(width * scale, height * scale);
|
|
440
|
+
if (docTransform == null) return;
|
|
441
|
+
const docDrawingParam = {
|
|
442
|
+
unitId,
|
|
443
|
+
subUnitId: unitId,
|
|
444
|
+
drawingId: imageId,
|
|
445
|
+
drawingType: _univerjs_core.DrawingTypeEnum.DRAWING_IMAGE,
|
|
446
|
+
imageSourceType,
|
|
447
|
+
source,
|
|
448
|
+
transform: (0, _univerjs_docs_ui.docDrawingPositionToTransform)(docTransform),
|
|
449
|
+
docTransform,
|
|
450
|
+
behindDoc: _univerjs_core.BooleanNumber.FALSE,
|
|
451
|
+
title: "",
|
|
452
|
+
description: "",
|
|
453
|
+
layoutType: _univerjs_core.PositionedObjectLayoutType.INLINE,
|
|
454
|
+
wrapText: _univerjs_core.WrapTextType.BOTH_SIDES,
|
|
455
|
+
distB: 0,
|
|
456
|
+
distL: 0,
|
|
457
|
+
distR: 0,
|
|
458
|
+
distT: 0
|
|
459
|
+
};
|
|
460
|
+
if (this._isInsertInHeaderFooter()) {
|
|
461
|
+
docDrawingParam.isMultiTransform = _univerjs_core.BooleanNumber.TRUE;
|
|
462
|
+
docDrawingParam.transforms = docDrawingParam.transform ? [docDrawingParam.transform] : null;
|
|
463
|
+
}
|
|
464
|
+
docDrawingParams.push(docDrawingParam);
|
|
465
|
+
}
|
|
466
|
+
this._commandService.executeCommand(InsertDocDrawingCommand.id, {
|
|
467
|
+
unitId,
|
|
468
|
+
drawings: docDrawingParams
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
_isInsertInHeaderFooter() {
|
|
472
|
+
var _this$_renderManagerS;
|
|
473
|
+
const { unitId } = this._context;
|
|
474
|
+
const viewModel = (_this$_renderManagerS = this._renderManagerSrv.getRenderById(unitId)) === null || _this$_renderManagerS === void 0 ? void 0 : _this$_renderManagerS.with(_univerjs_docs.DocSkeletonManagerService).getViewModel();
|
|
475
|
+
const editArea = viewModel === null || viewModel === void 0 ? void 0 : viewModel.getEditArea();
|
|
476
|
+
return editArea === _univerjs_engine_render.DocumentEditArea.HEADER || editArea === _univerjs_engine_render.DocumentEditArea.FOOTER;
|
|
477
|
+
}
|
|
478
|
+
_getImagePosition(imageWidth, imageHeight) {
|
|
479
|
+
const activeTextRange = this._docSelectionRenderService.getActiveTextRange();
|
|
480
|
+
const position = (activeTextRange === null || activeTextRange === void 0 ? void 0 : activeTextRange.getAbsolutePosition()) || {
|
|
481
|
+
left: 0,
|
|
482
|
+
top: 0
|
|
483
|
+
};
|
|
484
|
+
return {
|
|
485
|
+
size: {
|
|
486
|
+
width: imageWidth,
|
|
487
|
+
height: imageHeight
|
|
488
|
+
},
|
|
489
|
+
positionH: {
|
|
490
|
+
relativeFrom: _univerjs_core.ObjectRelativeFromH.PAGE,
|
|
491
|
+
posOffset: position.left
|
|
492
|
+
},
|
|
493
|
+
positionV: {
|
|
494
|
+
relativeFrom: _univerjs_core.ObjectRelativeFromV.PARAGRAPH,
|
|
495
|
+
posOffset: 0
|
|
496
|
+
},
|
|
497
|
+
angle: 0
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
_updateOrderListener() {
|
|
501
|
+
this.disposeWithMe(this._drawingManagerService.featurePluginOrderUpdate$.subscribe((params) => {
|
|
502
|
+
const { unitId, subUnitId, drawingIds, arrangeType } = params;
|
|
503
|
+
this._commandService.executeCommand(SetDocDrawingArrangeCommand.id, {
|
|
504
|
+
unitId,
|
|
505
|
+
subUnitId,
|
|
506
|
+
drawingIds,
|
|
507
|
+
arrangeType
|
|
508
|
+
});
|
|
509
|
+
}));
|
|
510
|
+
}
|
|
511
|
+
_groupDrawingListener() {
|
|
512
|
+
this.disposeWithMe(this._drawingManagerService.featurePluginGroupUpdate$.subscribe((params) => {
|
|
513
|
+
this._commandService.executeCommand(GroupDocDrawingCommand.id, params);
|
|
514
|
+
}));
|
|
515
|
+
this.disposeWithMe(this._drawingManagerService.featurePluginUngroupUpdate$.subscribe((params) => {
|
|
516
|
+
this._commandService.executeCommand(UngroupDocDrawingCommand.id, params);
|
|
517
|
+
}));
|
|
518
|
+
}
|
|
519
|
+
_getCurrentSceneAndTransformer() {
|
|
520
|
+
const { scene, mainComponent } = this._context;
|
|
521
|
+
if (scene == null || mainComponent == null) return;
|
|
522
|
+
const transformer = scene.getTransformerByCreate();
|
|
523
|
+
const { docsLeft, docsTop } = mainComponent.getOffsetConfig();
|
|
524
|
+
return {
|
|
525
|
+
scene,
|
|
526
|
+
transformer,
|
|
527
|
+
docsLeft,
|
|
528
|
+
docsTop
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
_transformDrawingListener() {
|
|
532
|
+
const res = this._getCurrentSceneAndTransformer();
|
|
533
|
+
if (res && res.transformer) this.disposeWithMe(res.transformer.changeEnd$.pipe((0, rxjs.debounceTime)(30)).subscribe((params) => {
|
|
534
|
+
this._docSelectionManagerService.refreshSelection();
|
|
535
|
+
}));
|
|
536
|
+
else throw new Error("transformer is not init");
|
|
537
|
+
}
|
|
538
|
+
_focusDrawingListener() {
|
|
539
|
+
this.disposeWithMe(this._drawingManagerService.focus$.subscribe((params) => {
|
|
540
|
+
var _this$_getCurrentScen;
|
|
541
|
+
const { transformer, docsLeft, docsTop } = (_this$_getCurrentScen = this._getCurrentSceneAndTransformer()) !== null && _this$_getCurrentScen !== void 0 ? _this$_getCurrentScen : {};
|
|
542
|
+
if (params == null || params.length === 0) {
|
|
543
|
+
this._contextService.setContextValue(_univerjs_core.FOCUSING_COMMON_DRAWINGS, false);
|
|
544
|
+
this._docDrawingService.focusDrawing([]);
|
|
545
|
+
if (transformer) transformer.resetProps({
|
|
546
|
+
zeroTop: 0,
|
|
547
|
+
zeroLeft: 0
|
|
548
|
+
});
|
|
549
|
+
} else {
|
|
550
|
+
this._contextService.setContextValue(_univerjs_core.FOCUSING_COMMON_DRAWINGS, true);
|
|
551
|
+
this._docDrawingService.focusDrawing(params);
|
|
552
|
+
this._setDrawingSelections(params);
|
|
553
|
+
const prevSegmentId = this._docSelectionRenderService.getSegment();
|
|
554
|
+
const segmentId = this._findSegmentIdByDrawingId(params[0].drawingId);
|
|
555
|
+
if (prevSegmentId !== segmentId) this._docSelectionRenderService.setSegment(segmentId);
|
|
556
|
+
if (transformer) transformer.resetProps({
|
|
557
|
+
zeroTop: docsTop,
|
|
558
|
+
zeroLeft: docsLeft
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
}));
|
|
562
|
+
}
|
|
563
|
+
_findSegmentIdByDrawingId(drawingId) {
|
|
564
|
+
var _body$customBlocks;
|
|
565
|
+
const { unit: DocDataModel } = this._context;
|
|
566
|
+
const { body, headers = {}, footers = {} } = DocDataModel.getSnapshot();
|
|
567
|
+
if (((_body$customBlocks = body === null || body === void 0 ? void 0 : body.customBlocks) !== null && _body$customBlocks !== void 0 ? _body$customBlocks : []).some((b) => b.blockId === drawingId)) return "";
|
|
568
|
+
for (const headerId of Object.keys(headers)) {
|
|
569
|
+
var _headers$headerId$bod;
|
|
570
|
+
if ((_headers$headerId$bod = headers[headerId].body.customBlocks) === null || _headers$headerId$bod === void 0 ? void 0 : _headers$headerId$bod.some((b) => b.blockId === drawingId)) return headerId;
|
|
571
|
+
}
|
|
572
|
+
for (const footerId of Object.keys(footers)) {
|
|
573
|
+
var _footers$footerId$bod;
|
|
574
|
+
if ((_footers$footerId$bod = footers[footerId].body.customBlocks) === null || _footers$footerId$bod === void 0 ? void 0 : _footers$footerId$bod.some((b) => b.blockId === drawingId)) return footerId;
|
|
575
|
+
}
|
|
576
|
+
return "";
|
|
577
|
+
}
|
|
578
|
+
_updateDrawingsEditStatus() {
|
|
579
|
+
var _this$_renderManagerS2;
|
|
580
|
+
if (!this._context) return;
|
|
581
|
+
const { unit: docDataModel, scene, unitId } = this._context;
|
|
582
|
+
const viewModel = (_this$_renderManagerS2 = this._renderManagerSrv.getRenderById(unitId)) === null || _this$_renderManagerS2 === void 0 ? void 0 : _this$_renderManagerS2.with(_univerjs_docs.DocSkeletonManagerService).getViewModel();
|
|
583
|
+
if (viewModel == null || docDataModel == null) return;
|
|
584
|
+
const { drawings = {} } = docDataModel.getSnapshot();
|
|
585
|
+
const isEditBody = viewModel.getEditArea() === _univerjs_engine_render.DocumentEditArea.BODY;
|
|
586
|
+
for (const key of Object.keys(drawings)) {
|
|
587
|
+
const drawing = drawings[key];
|
|
588
|
+
const objectKey = (0, _univerjs_drawing.getDrawingShapeKeyByDrawingSearch)({
|
|
589
|
+
unitId,
|
|
590
|
+
drawingId: drawing.drawingId,
|
|
591
|
+
subUnitId: unitId
|
|
592
|
+
});
|
|
593
|
+
const drawingShapes = scene.fuzzyMathObjects(objectKey, true);
|
|
594
|
+
if (drawingShapes.length) for (const shape of drawingShapes) {
|
|
595
|
+
scene.detachTransformerFrom(shape);
|
|
596
|
+
try {
|
|
597
|
+
shape.setOpacity(.5);
|
|
598
|
+
} catch (e) {}
|
|
599
|
+
if (isEditBody && drawing.isMultiTransform !== _univerjs_core.BooleanNumber.TRUE || !isEditBody && drawing.isMultiTransform === _univerjs_core.BooleanNumber.TRUE) {
|
|
600
|
+
if (drawing.allowTransform !== false) scene.attachTransformerTo(shape);
|
|
601
|
+
try {
|
|
602
|
+
shape.setOpacity(1);
|
|
603
|
+
} catch (e) {}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
_editAreaChangeListener() {
|
|
609
|
+
var _this$_renderManagerS3;
|
|
610
|
+
const { unitId } = this._context;
|
|
611
|
+
const viewModel = (_this$_renderManagerS3 = this._renderManagerSrv.getRenderById(unitId)) === null || _this$_renderManagerS3 === void 0 ? void 0 : _this$_renderManagerS3.with(_univerjs_docs.DocSkeletonManagerService).getViewModel();
|
|
612
|
+
if (viewModel == null) return;
|
|
613
|
+
this._updateDrawingsEditStatus();
|
|
614
|
+
this.disposeWithMe(viewModel.editAreaChange$.subscribe(() => {
|
|
615
|
+
this._updateDrawingsEditStatus();
|
|
616
|
+
}));
|
|
617
|
+
this.disposeWithMe(this._docRefreshDrawingsService.refreshDrawings$.subscribe((skeleton) => {
|
|
618
|
+
if (skeleton == null) return;
|
|
619
|
+
queueMicrotask(() => {
|
|
620
|
+
this._updateDrawingsEditStatus();
|
|
621
|
+
});
|
|
622
|
+
}));
|
|
623
|
+
this.disposeWithMe(this._commandService.onCommandExecuted(async (command) => {
|
|
624
|
+
if (command.id === _univerjs_docs.RichTextEditingMutation.id) queueMicrotask(() => {
|
|
625
|
+
this._updateDrawingsEditStatus();
|
|
626
|
+
});
|
|
627
|
+
}));
|
|
628
|
+
}
|
|
629
|
+
_setDrawingSelections(params) {
|
|
630
|
+
var _unit$getSnapshot$bod, _unit$getSnapshot$bod2;
|
|
631
|
+
const { unit } = this._context;
|
|
632
|
+
const customBlocks = (_unit$getSnapshot$bod = (_unit$getSnapshot$bod2 = unit.getSnapshot().body) === null || _unit$getSnapshot$bod2 === void 0 ? void 0 : _unit$getSnapshot$bod2.customBlocks) !== null && _unit$getSnapshot$bod !== void 0 ? _unit$getSnapshot$bod : [];
|
|
633
|
+
const ranges = params.map((item) => {
|
|
634
|
+
const id = item.drawingId;
|
|
635
|
+
const block = customBlocks.find((b) => b.blockId === id);
|
|
636
|
+
if (block) return block.startIndex;
|
|
637
|
+
return null;
|
|
638
|
+
}).filter((e) => e !== null).map((offset) => ({
|
|
639
|
+
startOffset: offset,
|
|
640
|
+
endOffset: offset + 1
|
|
641
|
+
}));
|
|
642
|
+
this._docSelectionManagerService.replaceDocRanges(ranges);
|
|
643
|
+
}
|
|
644
|
+
};
|
|
645
|
+
DocDrawingUpdateRenderController = __decorate([
|
|
646
|
+
__decorateParam(1, _univerjs_core.ICommandService),
|
|
647
|
+
__decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_docs.DocSelectionManagerService)),
|
|
648
|
+
__decorateParam(3, _univerjs_engine_render.IRenderManagerService),
|
|
649
|
+
__decorateParam(4, _univerjs_drawing.IImageIoService),
|
|
650
|
+
__decorateParam(5, _univerjs_docs_drawing.IDocDrawingService),
|
|
651
|
+
__decorateParam(6, _univerjs_drawing.IDrawingManagerService),
|
|
652
|
+
__decorateParam(7, _univerjs_core.IContextService),
|
|
653
|
+
__decorateParam(8, _univerjs_ui.IMessageService),
|
|
654
|
+
__decorateParam(9, (0, _univerjs_core.Inject)(_univerjs_core.LocaleService)),
|
|
655
|
+
__decorateParam(10, (0, _univerjs_core.Inject)(_univerjs_docs_ui.DocSelectionRenderService)),
|
|
656
|
+
__decorateParam(11, (0, _univerjs_core.Inject)(DocRefreshDrawingsService)),
|
|
657
|
+
__decorateParam(12, _univerjs_ui.ILocalFileService)
|
|
658
|
+
], DocDrawingUpdateRenderController);
|
|
659
|
+
|
|
660
|
+
//#endregion
|
|
661
|
+
//#region src/commands/commands/insert-image.command.ts
|
|
662
|
+
const InsertDocImageCommand = {
|
|
663
|
+
id: "doc.command.insert-float-image",
|
|
664
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
665
|
+
handler: (accessor) => {
|
|
666
|
+
var _getCurrentTypeOfRend, _getCurrentTypeOfRend2;
|
|
667
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
668
|
+
const renderManagerService = accessor.get(_univerjs_engine_render.IRenderManagerService);
|
|
669
|
+
return (_getCurrentTypeOfRend = (_getCurrentTypeOfRend2 = (0, _univerjs_engine_render.getCurrentTypeOfRenderer)(_univerjs_core.UniverInstanceType.UNIVER_DOC, univerInstanceService, renderManagerService)) === null || _getCurrentTypeOfRend2 === void 0 ? void 0 : _getCurrentTypeOfRend2.with(DocDrawingUpdateRenderController).insertDocImage()) !== null && _getCurrentTypeOfRend !== void 0 ? _getCurrentTypeOfRend : false;
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
|
|
673
|
+
//#endregion
|
|
674
|
+
//#region src/commands/commands/update-doc-drawing.command.ts
|
|
675
|
+
let TextWrappingStyle = /* @__PURE__ */ function(TextWrappingStyle) {
|
|
676
|
+
TextWrappingStyle["INLINE"] = "inline";
|
|
677
|
+
TextWrappingStyle["BEHIND_TEXT"] = "behindText";
|
|
678
|
+
TextWrappingStyle["IN_FRONT_OF_TEXT"] = "inFrontOfText";
|
|
679
|
+
TextWrappingStyle["WRAP_SQUARE"] = "wrapSquare";
|
|
680
|
+
TextWrappingStyle["WRAP_TOP_AND_BOTTOM"] = "wrapTopAndBottom";
|
|
681
|
+
return TextWrappingStyle;
|
|
682
|
+
}({});
|
|
683
|
+
const WRAPPING_STYLE_TO_LAYOUT_TYPE = {
|
|
684
|
+
[TextWrappingStyle.INLINE]: _univerjs_core.PositionedObjectLayoutType.INLINE,
|
|
685
|
+
[TextWrappingStyle.WRAP_SQUARE]: _univerjs_core.PositionedObjectLayoutType.WRAP_SQUARE,
|
|
686
|
+
[TextWrappingStyle.WRAP_TOP_AND_BOTTOM]: _univerjs_core.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM,
|
|
687
|
+
[TextWrappingStyle.IN_FRONT_OF_TEXT]: _univerjs_core.PositionedObjectLayoutType.WRAP_NONE,
|
|
688
|
+
[TextWrappingStyle.BEHIND_TEXT]: _univerjs_core.PositionedObjectLayoutType.WRAP_NONE
|
|
689
|
+
};
|
|
690
|
+
function getDeleteAndInsertCustomBlockActions(segmentId, oldSegmentId, segmentPage, offset, drawingId, documentDataModel, docSelectionRenderManager) {
|
|
691
|
+
var _oldBody$customBlocks;
|
|
692
|
+
const textX = new _univerjs_core.TextX();
|
|
693
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
694
|
+
const rawActions = [];
|
|
695
|
+
const oldBody = documentDataModel.getSelfOrHeaderFooterModel(oldSegmentId).getBody();
|
|
696
|
+
const body = documentDataModel.getSelfOrHeaderFooterModel(segmentId).getBody();
|
|
697
|
+
if (oldBody == null || body == null) return;
|
|
698
|
+
const oldOffset = (_oldBody$customBlocks = oldBody.customBlocks) === null || _oldBody$customBlocks === void 0 || (_oldBody$customBlocks = _oldBody$customBlocks.find((block) => block.blockId === drawingId)) === null || _oldBody$customBlocks === void 0 ? void 0 : _oldBody$customBlocks.startIndex;
|
|
699
|
+
if (oldOffset == null) return;
|
|
700
|
+
offset = Math.min(body.dataStream.length - 2, offset);
|
|
701
|
+
if (segmentId === oldSegmentId) {
|
|
702
|
+
if (offset < oldOffset) {
|
|
703
|
+
if (offset > 0) textX.push({
|
|
704
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
705
|
+
len: offset
|
|
706
|
+
});
|
|
707
|
+
textX.push({
|
|
708
|
+
t: _univerjs_core.TextXActionType.INSERT,
|
|
709
|
+
body: {
|
|
710
|
+
dataStream: "\b",
|
|
711
|
+
customBlocks: [{
|
|
712
|
+
startIndex: 0,
|
|
713
|
+
blockId: drawingId
|
|
714
|
+
}]
|
|
715
|
+
},
|
|
716
|
+
len: 1
|
|
717
|
+
});
|
|
718
|
+
textX.push({
|
|
719
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
720
|
+
len: oldOffset - offset
|
|
721
|
+
});
|
|
722
|
+
textX.push({
|
|
723
|
+
t: _univerjs_core.TextXActionType.DELETE,
|
|
724
|
+
len: 1
|
|
725
|
+
});
|
|
726
|
+
} else {
|
|
727
|
+
if (oldOffset > 0) textX.push({
|
|
728
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
729
|
+
len: oldOffset
|
|
730
|
+
});
|
|
731
|
+
textX.push({
|
|
732
|
+
t: _univerjs_core.TextXActionType.DELETE,
|
|
733
|
+
len: 1
|
|
734
|
+
});
|
|
735
|
+
if (offset - oldOffset - 1 > 0) textX.push({
|
|
736
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
737
|
+
len: offset - oldOffset - 1
|
|
738
|
+
});
|
|
739
|
+
textX.push({
|
|
740
|
+
t: _univerjs_core.TextXActionType.INSERT,
|
|
741
|
+
body: {
|
|
742
|
+
dataStream: "\b",
|
|
743
|
+
customBlocks: [{
|
|
744
|
+
startIndex: 0,
|
|
745
|
+
blockId: drawingId
|
|
746
|
+
}]
|
|
747
|
+
},
|
|
748
|
+
len: 1
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
if (offset !== oldOffset) {
|
|
752
|
+
const path = (0, _univerjs_docs_ui.getRichTextEditPath)(documentDataModel, oldSegmentId);
|
|
753
|
+
const action = jsonX.editOp(textX.serialize(), path);
|
|
754
|
+
rawActions.push(action);
|
|
755
|
+
}
|
|
756
|
+
} else {
|
|
757
|
+
if (oldOffset > 0) textX.push({
|
|
758
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
759
|
+
len: oldOffset
|
|
760
|
+
});
|
|
761
|
+
textX.push({
|
|
762
|
+
t: _univerjs_core.TextXActionType.DELETE,
|
|
763
|
+
len: 1
|
|
764
|
+
});
|
|
765
|
+
let path = (0, _univerjs_docs_ui.getRichTextEditPath)(documentDataModel, oldSegmentId);
|
|
766
|
+
let action = jsonX.editOp(textX.serialize(), path);
|
|
767
|
+
rawActions.push(action);
|
|
768
|
+
textX.empty();
|
|
769
|
+
if (offset > 0) textX.push({
|
|
770
|
+
t: _univerjs_core.TextXActionType.RETAIN,
|
|
771
|
+
len: offset
|
|
772
|
+
});
|
|
773
|
+
textX.push({
|
|
774
|
+
t: _univerjs_core.TextXActionType.INSERT,
|
|
775
|
+
body: {
|
|
776
|
+
dataStream: "\b",
|
|
777
|
+
customBlocks: [{
|
|
778
|
+
startIndex: 0,
|
|
779
|
+
blockId: drawingId
|
|
780
|
+
}]
|
|
781
|
+
},
|
|
782
|
+
len: 1
|
|
783
|
+
});
|
|
784
|
+
path = (0, _univerjs_docs_ui.getRichTextEditPath)(documentDataModel, segmentId);
|
|
785
|
+
action = jsonX.editOp(textX.serialize(), path);
|
|
786
|
+
rawActions.push(action);
|
|
787
|
+
docSelectionRenderManager.setSegment(segmentId);
|
|
788
|
+
docSelectionRenderManager.setSegmentPage(segmentPage);
|
|
789
|
+
}
|
|
790
|
+
return rawActions;
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* The command to update drawing wrapping style.
|
|
794
|
+
*/
|
|
795
|
+
const UpdateDocDrawingWrappingStyleCommand = {
|
|
796
|
+
id: "doc.command.update-doc-drawing-wrapping-style",
|
|
797
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
798
|
+
handler: (accessor, params) => {
|
|
799
|
+
if (params == null) return false;
|
|
800
|
+
const { drawings, wrappingStyle, unitId } = params;
|
|
801
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
802
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
803
|
+
const renderObject = accessor.get(_univerjs_engine_render.IRenderManagerService).getRenderById(unitId);
|
|
804
|
+
const skeletonData = renderObject === null || renderObject === void 0 ? void 0 : renderObject.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton().getSkeletonData();
|
|
805
|
+
const viewModel = renderObject === null || renderObject === void 0 ? void 0 : renderObject.with(_univerjs_docs.DocSkeletonManagerService).getViewModel();
|
|
806
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
807
|
+
const documentDataModel = univerInstanceService.getCurrentUniverDocInstance();
|
|
808
|
+
if (documentDataModel == null || skeletonData == null || scene == null || viewModel == null) return false;
|
|
809
|
+
const editArea = viewModel.getEditArea();
|
|
810
|
+
const transformer = scene.getTransformerByCreate();
|
|
811
|
+
const { pages, skeHeaders, skeFooters } = skeletonData;
|
|
812
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
813
|
+
const rawActions = [];
|
|
814
|
+
const { drawings: oldDrawings = {} } = documentDataModel.getSnapshot();
|
|
815
|
+
for (const drawing of drawings) {
|
|
816
|
+
const { drawingId } = drawing;
|
|
817
|
+
const oldLayoutType = oldDrawings[drawingId].layoutType;
|
|
818
|
+
const newLayoutType = WRAPPING_STYLE_TO_LAYOUT_TYPE[wrappingStyle];
|
|
819
|
+
if (oldLayoutType !== newLayoutType) {
|
|
820
|
+
const updateLayoutTypeAction = jsonX.replaceOp([
|
|
821
|
+
"drawings",
|
|
822
|
+
drawingId,
|
|
823
|
+
"layoutType"
|
|
824
|
+
], oldLayoutType, newLayoutType);
|
|
825
|
+
rawActions.push(updateLayoutTypeAction);
|
|
826
|
+
}
|
|
827
|
+
if (wrappingStyle === TextWrappingStyle.BEHIND_TEXT || wrappingStyle === TextWrappingStyle.IN_FRONT_OF_TEXT) {
|
|
828
|
+
const oldBehindDoc = oldDrawings[drawingId].behindDoc;
|
|
829
|
+
const newBehindDoc = wrappingStyle === TextWrappingStyle.BEHIND_TEXT ? _univerjs_core.BooleanNumber.TRUE : _univerjs_core.BooleanNumber.FALSE;
|
|
830
|
+
if (oldBehindDoc !== newBehindDoc) {
|
|
831
|
+
const updateBehindDocAction = jsonX.replaceOp([
|
|
832
|
+
"drawings",
|
|
833
|
+
drawingId,
|
|
834
|
+
"behindDoc"
|
|
835
|
+
], oldBehindDoc, newBehindDoc);
|
|
836
|
+
rawActions.push(updateBehindDocAction);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
if (wrappingStyle === TextWrappingStyle.INLINE) continue;
|
|
840
|
+
let skeDrawing = null;
|
|
841
|
+
let pageMarginTop = 0;
|
|
842
|
+
let pageMarginLeft = 0;
|
|
843
|
+
for (const page of pages) {
|
|
844
|
+
const { headerId, footerId, marginTop, marginLeft, marginBottom, pageWidth, pageHeight } = page;
|
|
845
|
+
switch (editArea) {
|
|
846
|
+
case _univerjs_engine_render.DocumentEditArea.HEADER: {
|
|
847
|
+
var _skeHeaders$get;
|
|
848
|
+
const headerSke = (_skeHeaders$get = skeHeaders.get(headerId)) === null || _skeHeaders$get === void 0 ? void 0 : _skeHeaders$get.get(pageWidth);
|
|
849
|
+
if (headerSke != null && headerSke.skeDrawings.has(drawingId)) {
|
|
850
|
+
skeDrawing = headerSke.skeDrawings.get(drawingId);
|
|
851
|
+
pageMarginTop = headerSke.marginTop;
|
|
852
|
+
pageMarginLeft = marginLeft;
|
|
853
|
+
}
|
|
854
|
+
break;
|
|
855
|
+
}
|
|
856
|
+
case _univerjs_engine_render.DocumentEditArea.FOOTER: {
|
|
857
|
+
var _skeFooters$get;
|
|
858
|
+
const footerSke = (_skeFooters$get = skeFooters.get(footerId)) === null || _skeFooters$get === void 0 ? void 0 : _skeFooters$get.get(pageWidth);
|
|
859
|
+
if (footerSke != null && footerSke.skeDrawings.has(drawingId)) {
|
|
860
|
+
skeDrawing = footerSke.skeDrawings.get(drawingId);
|
|
861
|
+
pageMarginTop = pageHeight - marginBottom + footerSke.marginTop;
|
|
862
|
+
pageMarginLeft = marginLeft;
|
|
863
|
+
}
|
|
864
|
+
break;
|
|
865
|
+
}
|
|
866
|
+
case _univerjs_engine_render.DocumentEditArea.BODY:
|
|
867
|
+
if (page.skeDrawings.has(drawingId)) {
|
|
868
|
+
skeDrawing = page.skeDrawings.get(drawingId);
|
|
869
|
+
pageMarginTop = marginTop;
|
|
870
|
+
pageMarginLeft = marginLeft;
|
|
871
|
+
}
|
|
872
|
+
break;
|
|
873
|
+
}
|
|
874
|
+
if (skeDrawing != null) break;
|
|
875
|
+
}
|
|
876
|
+
if (skeDrawing != null) {
|
|
877
|
+
const { aTop, aLeft } = skeDrawing;
|
|
878
|
+
const oldPositionH = oldDrawings[drawingId].docTransform.positionH;
|
|
879
|
+
let posOffsetH = aLeft;
|
|
880
|
+
if (oldPositionH.relativeFrom === _univerjs_core.ObjectRelativeFromH.MARGIN) posOffsetH -= pageMarginLeft;
|
|
881
|
+
else if (oldPositionH.relativeFrom === _univerjs_core.ObjectRelativeFromH.COLUMN) posOffsetH -= skeDrawing.columnLeft;
|
|
882
|
+
const newPositionH = {
|
|
883
|
+
relativeFrom: oldPositionH.relativeFrom,
|
|
884
|
+
posOffset: posOffsetH
|
|
885
|
+
};
|
|
886
|
+
if (oldPositionH.posOffset !== newPositionH.posOffset) {
|
|
887
|
+
const action = jsonX.replaceOp([
|
|
888
|
+
"drawings",
|
|
889
|
+
drawingId,
|
|
890
|
+
"docTransform",
|
|
891
|
+
"positionH"
|
|
892
|
+
], oldPositionH, newPositionH);
|
|
893
|
+
rawActions.push(action);
|
|
894
|
+
}
|
|
895
|
+
const oldPositionV = oldDrawings[drawingId].docTransform.positionV;
|
|
896
|
+
let posOffsetV = aTop;
|
|
897
|
+
if (oldPositionV.relativeFrom === _univerjs_core.ObjectRelativeFromV.PAGE) posOffsetV += pageMarginTop;
|
|
898
|
+
else if (oldPositionV.relativeFrom === _univerjs_core.ObjectRelativeFromV.LINE) posOffsetV -= skeDrawing.lineTop;
|
|
899
|
+
else if (oldPositionV.relativeFrom === _univerjs_core.ObjectRelativeFromV.PARAGRAPH) posOffsetV -= skeDrawing.blockAnchorTop;
|
|
900
|
+
const newPositionV = {
|
|
901
|
+
relativeFrom: oldPositionV.relativeFrom,
|
|
902
|
+
posOffset: posOffsetV
|
|
903
|
+
};
|
|
904
|
+
if (oldPositionV.posOffset !== newPositionV.posOffset) {
|
|
905
|
+
const action = jsonX.replaceOp([
|
|
906
|
+
"drawings",
|
|
907
|
+
drawingId,
|
|
908
|
+
"docTransform",
|
|
909
|
+
"positionV"
|
|
910
|
+
], oldPositionV, newPositionV);
|
|
911
|
+
rawActions.push(action);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
const doMutation = {
|
|
916
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
917
|
+
params: {
|
|
918
|
+
unitId,
|
|
919
|
+
actions: [],
|
|
920
|
+
textRanges: null
|
|
921
|
+
}
|
|
922
|
+
};
|
|
923
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
924
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
925
|
+
}, null);
|
|
926
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
927
|
+
transformer.refreshControls();
|
|
928
|
+
return Boolean(result);
|
|
929
|
+
}
|
|
930
|
+
};
|
|
931
|
+
/**
|
|
932
|
+
* The command to update drawing wrap text.
|
|
933
|
+
*/
|
|
934
|
+
const UpdateDocDrawingDistanceCommand = {
|
|
935
|
+
id: "doc.command.update-doc-drawing-distance",
|
|
936
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
937
|
+
handler: (accessor, params) => {
|
|
938
|
+
if (params == null) return false;
|
|
939
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
940
|
+
const documentDataModel = accessor.get(_univerjs_core.IUniverInstanceService).getCurrentUniverDocInstance();
|
|
941
|
+
if (documentDataModel == null) return false;
|
|
942
|
+
const { drawings, dist, unitId } = params;
|
|
943
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
944
|
+
const rawActions = [];
|
|
945
|
+
const { drawings: oldDrawings = {} } = documentDataModel.getSnapshot();
|
|
946
|
+
for (const drawing of drawings) {
|
|
947
|
+
const { drawingId } = drawing;
|
|
948
|
+
for (const [key, value] of Object.entries(dist)) {
|
|
949
|
+
const oldValue = oldDrawings[drawingId][key];
|
|
950
|
+
if (oldValue !== value) {
|
|
951
|
+
const action = jsonX.replaceOp([
|
|
952
|
+
"drawings",
|
|
953
|
+
drawingId,
|
|
954
|
+
key
|
|
955
|
+
], oldValue, value);
|
|
956
|
+
rawActions.push(action);
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
const doMutation = {
|
|
961
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
962
|
+
params: {
|
|
963
|
+
unitId,
|
|
964
|
+
actions: [],
|
|
965
|
+
textRanges: null
|
|
966
|
+
}
|
|
967
|
+
};
|
|
968
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
969
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
970
|
+
}, null);
|
|
971
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
972
|
+
return Boolean(result);
|
|
973
|
+
}
|
|
974
|
+
};
|
|
975
|
+
/**
|
|
976
|
+
* The command to update drawing wrap text.
|
|
977
|
+
*/
|
|
978
|
+
const UpdateDocDrawingWrapTextCommand = {
|
|
979
|
+
id: "doc.command.update-doc-drawing-wrap-text",
|
|
980
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
981
|
+
handler: (accessor, params) => {
|
|
982
|
+
if (params == null) return false;
|
|
983
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
984
|
+
const documentDataModel = accessor.get(_univerjs_core.IUniverInstanceService).getCurrentUniverDocInstance();
|
|
985
|
+
if (documentDataModel == null) return false;
|
|
986
|
+
const { drawings, wrapText, unitId } = params;
|
|
987
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
988
|
+
const rawActions = [];
|
|
989
|
+
const { drawings: oldDrawings = {} } = documentDataModel.getSnapshot();
|
|
990
|
+
for (const drawing of drawings) {
|
|
991
|
+
const { drawingId } = drawing;
|
|
992
|
+
const oldWrapText = oldDrawings[drawingId].wrapText;
|
|
993
|
+
if (oldWrapText !== wrapText) {
|
|
994
|
+
const action = jsonX.replaceOp([
|
|
995
|
+
"drawings",
|
|
996
|
+
drawingId,
|
|
997
|
+
"wrapText"
|
|
998
|
+
], oldWrapText, wrapText);
|
|
999
|
+
rawActions.push(action);
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
const doMutation = {
|
|
1003
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
1004
|
+
params: {
|
|
1005
|
+
unitId,
|
|
1006
|
+
actions: [],
|
|
1007
|
+
textRanges: null
|
|
1008
|
+
}
|
|
1009
|
+
};
|
|
1010
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
1011
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
1012
|
+
}, null);
|
|
1013
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
1014
|
+
return Boolean(result);
|
|
1015
|
+
}
|
|
1016
|
+
};
|
|
1017
|
+
/**
|
|
1018
|
+
* The command to update drawing position.
|
|
1019
|
+
*/
|
|
1020
|
+
const UpdateDrawingDocTransformCommand = {
|
|
1021
|
+
id: "doc.command.update-drawing-doc-transform",
|
|
1022
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
1023
|
+
handler: (accessor, params) => {
|
|
1024
|
+
if (params == null) return false;
|
|
1025
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
1026
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
1027
|
+
const renderObject = accessor.get(_univerjs_engine_render.IRenderManagerService).getRenderById(params.unitId);
|
|
1028
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1029
|
+
if (scene == null) return false;
|
|
1030
|
+
const transformer = scene.getTransformerByCreate();
|
|
1031
|
+
const documentDataModel = univerInstanceService.getCurrentUniverDocInstance();
|
|
1032
|
+
if (documentDataModel == null) return false;
|
|
1033
|
+
const { drawings, unitId } = params;
|
|
1034
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
1035
|
+
const rawActions = [];
|
|
1036
|
+
const { drawings: oldDrawings = {} } = documentDataModel.getSnapshot();
|
|
1037
|
+
for (const drawing of drawings) {
|
|
1038
|
+
const { drawingId, key, value } = drawing;
|
|
1039
|
+
const oldValue = oldDrawings[drawingId].docTransform[key];
|
|
1040
|
+
if (!_univerjs_core.Tools.diffValue(oldValue, value)) {
|
|
1041
|
+
const action = jsonX.replaceOp([
|
|
1042
|
+
"drawings",
|
|
1043
|
+
drawingId,
|
|
1044
|
+
"docTransform",
|
|
1045
|
+
key
|
|
1046
|
+
], oldValue, value);
|
|
1047
|
+
rawActions.push(action);
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
const doMutation = {
|
|
1051
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
1052
|
+
params: {
|
|
1053
|
+
unitId,
|
|
1054
|
+
actions: [],
|
|
1055
|
+
textRanges: null,
|
|
1056
|
+
debounce: true
|
|
1057
|
+
}
|
|
1058
|
+
};
|
|
1059
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
1060
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
1061
|
+
}, null);
|
|
1062
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
1063
|
+
transformer.refreshControls();
|
|
1064
|
+
return Boolean(result);
|
|
1065
|
+
}
|
|
1066
|
+
};
|
|
1067
|
+
/**
|
|
1068
|
+
* The command to move inline drawing.
|
|
1069
|
+
*/
|
|
1070
|
+
const IMoveInlineDrawingCommand = {
|
|
1071
|
+
id: "doc.command.move-inline-drawing",
|
|
1072
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
1073
|
+
handler: (accessor, params) => {
|
|
1074
|
+
var _renderManagerService, _docSelectionRenderSe;
|
|
1075
|
+
if (params == null) return false;
|
|
1076
|
+
const renderManagerService = accessor.get(_univerjs_engine_render.IRenderManagerService);
|
|
1077
|
+
const docSelectionRenderService = (_renderManagerService = renderManagerService.getRenderById(params.unitId)) === null || _renderManagerService === void 0 ? void 0 : _renderManagerService.with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
1078
|
+
const docRefreshDrawingsService = accessor.get(DocRefreshDrawingsService);
|
|
1079
|
+
const renderObject = renderManagerService.getRenderById(params.unitId);
|
|
1080
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1081
|
+
const skeleton = renderObject === null || renderObject === void 0 ? void 0 : renderObject.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
1082
|
+
if (scene == null || docSelectionRenderService == null) return false;
|
|
1083
|
+
const transformer = scene.getTransformerByCreate();
|
|
1084
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
1085
|
+
const documentDataModel = accessor.get(_univerjs_core.IUniverInstanceService).getCurrentUniverDocInstance();
|
|
1086
|
+
if (documentDataModel == null) return false;
|
|
1087
|
+
const { drawing, unitId, offset, segmentId: newSegmentId, segmentPage, needRefreshDrawings } = params;
|
|
1088
|
+
if (needRefreshDrawings) {
|
|
1089
|
+
docRefreshDrawingsService.refreshDrawings(skeleton);
|
|
1090
|
+
transformer.refreshControls();
|
|
1091
|
+
return true;
|
|
1092
|
+
}
|
|
1093
|
+
const rawActions = [];
|
|
1094
|
+
const { drawingId } = drawing;
|
|
1095
|
+
const actions = getDeleteAndInsertCustomBlockActions(newSegmentId, (_docSelectionRenderSe = docSelectionRenderService.getSegment()) !== null && _docSelectionRenderSe !== void 0 ? _docSelectionRenderSe : "", segmentPage, offset, drawingId, documentDataModel, docSelectionRenderService);
|
|
1096
|
+
if (actions == null || actions.length === 0) {
|
|
1097
|
+
docRefreshDrawingsService.refreshDrawings(skeleton);
|
|
1098
|
+
transformer.refreshControls();
|
|
1099
|
+
return false;
|
|
1100
|
+
}
|
|
1101
|
+
rawActions.push(...actions);
|
|
1102
|
+
const doMutation = {
|
|
1103
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
1104
|
+
params: {
|
|
1105
|
+
unitId,
|
|
1106
|
+
actions: [],
|
|
1107
|
+
textRanges: null
|
|
1108
|
+
}
|
|
1109
|
+
};
|
|
1110
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
1111
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
1112
|
+
}, null);
|
|
1113
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
1114
|
+
transformer.refreshControls();
|
|
1115
|
+
return Boolean(result);
|
|
1116
|
+
}
|
|
1117
|
+
};
|
|
1118
|
+
/**
|
|
1119
|
+
* The command to transform non-inline drawing.
|
|
1120
|
+
*/
|
|
1121
|
+
const ITransformNonInlineDrawingCommand = {
|
|
1122
|
+
id: "doc.command.transform-non-inline-drawing",
|
|
1123
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
1124
|
+
handler: (accessor, params) => {
|
|
1125
|
+
var _renderManagerService2, _docSelectionRenderSe2;
|
|
1126
|
+
if (params == null) return false;
|
|
1127
|
+
const renderManagerService = accessor.get(_univerjs_engine_render.IRenderManagerService);
|
|
1128
|
+
const docSelectionRenderService = (_renderManagerService2 = renderManagerService.getRenderById(params.unitId)) === null || _renderManagerService2 === void 0 ? void 0 : _renderManagerService2.with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
1129
|
+
const renderObject = renderManagerService.getRenderById(params.unitId);
|
|
1130
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1131
|
+
if (scene == null || docSelectionRenderService == null) return false;
|
|
1132
|
+
const transformer = scene.getTransformerByCreate();
|
|
1133
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
1134
|
+
const documentDataModel = accessor.get(_univerjs_core.IUniverInstanceService).getCurrentUniverDocInstance();
|
|
1135
|
+
if (documentDataModel == null) return false;
|
|
1136
|
+
const { drawing, unitId, offset, docTransform, segmentId: newSegmentId, segmentPage } = params;
|
|
1137
|
+
const rawActions = [];
|
|
1138
|
+
const { drawingId } = drawing;
|
|
1139
|
+
const actions = getDeleteAndInsertCustomBlockActions(newSegmentId, (_docSelectionRenderSe2 = docSelectionRenderService.getSegment()) !== null && _docSelectionRenderSe2 !== void 0 ? _docSelectionRenderSe2 : "", segmentPage, offset, drawingId, documentDataModel, docSelectionRenderService);
|
|
1140
|
+
if (actions == null) return false;
|
|
1141
|
+
if (actions.length > 0) rawActions.push(...actions);
|
|
1142
|
+
const jsonX = _univerjs_core.JSONX.getInstance();
|
|
1143
|
+
const { drawings: oldDrawings = {} } = documentDataModel.getSnapshot();
|
|
1144
|
+
const { positionH: oldPositionH, positionV: oldPositionV, size: oldSize, angle: oldAngle } = oldDrawings[drawingId].docTransform;
|
|
1145
|
+
if (!_univerjs_core.Tools.diffValue(oldPositionH, docTransform.positionH)) {
|
|
1146
|
+
const updateAction = jsonX.replaceOp([
|
|
1147
|
+
"drawings",
|
|
1148
|
+
drawingId,
|
|
1149
|
+
"docTransform",
|
|
1150
|
+
"positionH"
|
|
1151
|
+
], oldPositionH, docTransform.positionH);
|
|
1152
|
+
rawActions.push(updateAction);
|
|
1153
|
+
}
|
|
1154
|
+
if (!_univerjs_core.Tools.diffValue(oldPositionV, docTransform.positionV)) {
|
|
1155
|
+
const updateAction = jsonX.replaceOp([
|
|
1156
|
+
"drawings",
|
|
1157
|
+
drawingId,
|
|
1158
|
+
"docTransform",
|
|
1159
|
+
"positionV"
|
|
1160
|
+
], oldPositionV, docTransform.positionV);
|
|
1161
|
+
rawActions.push(updateAction);
|
|
1162
|
+
}
|
|
1163
|
+
if (!_univerjs_core.Tools.diffValue(oldSize, docTransform.size)) {
|
|
1164
|
+
const updateAction = jsonX.replaceOp([
|
|
1165
|
+
"drawings",
|
|
1166
|
+
drawingId,
|
|
1167
|
+
"docTransform",
|
|
1168
|
+
"size"
|
|
1169
|
+
], oldSize, docTransform.size);
|
|
1170
|
+
rawActions.push(updateAction);
|
|
1171
|
+
}
|
|
1172
|
+
if (!_univerjs_core.Tools.diffValue(oldAngle, docTransform.angle)) {
|
|
1173
|
+
const updateAction = jsonX.replaceOp([
|
|
1174
|
+
"drawings",
|
|
1175
|
+
drawingId,
|
|
1176
|
+
"docTransform",
|
|
1177
|
+
"angle"
|
|
1178
|
+
], oldAngle, docTransform.angle);
|
|
1179
|
+
rawActions.push(updateAction);
|
|
1180
|
+
}
|
|
1181
|
+
const doMutation = {
|
|
1182
|
+
id: _univerjs_docs.RichTextEditingMutation.id,
|
|
1183
|
+
params: {
|
|
1184
|
+
unitId,
|
|
1185
|
+
actions: [],
|
|
1186
|
+
textRanges: null,
|
|
1187
|
+
debounce: true
|
|
1188
|
+
}
|
|
1189
|
+
};
|
|
1190
|
+
doMutation.params.actions = rawActions.reduce((acc, cur) => {
|
|
1191
|
+
return _univerjs_core.JSONX.compose(acc, cur);
|
|
1192
|
+
}, null);
|
|
1193
|
+
const result = commandService.syncExecuteCommand(doMutation.id, doMutation.params);
|
|
1194
|
+
transformer.refreshControls();
|
|
1195
|
+
return Boolean(result);
|
|
1196
|
+
}
|
|
1197
|
+
};
|
|
1198
|
+
|
|
1199
|
+
//#endregion
|
|
1200
|
+
//#region src/commands/commands/move-drawings.command.ts
|
|
1201
|
+
const MoveDocDrawingsCommand = {
|
|
1202
|
+
id: "doc.command.move-drawing",
|
|
1203
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
1204
|
+
handler: (accessor, params) => {
|
|
1205
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
1206
|
+
const docDrawingService = accessor.get(_univerjs_docs_drawing.IDocDrawingService);
|
|
1207
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
1208
|
+
const renderManagerService = accessor.get(_univerjs_engine_render.IRenderManagerService);
|
|
1209
|
+
const { direction } = params;
|
|
1210
|
+
const drawings = docDrawingService.getFocusDrawings();
|
|
1211
|
+
if (drawings.length === 0) return false;
|
|
1212
|
+
const unitId = drawings[0].unitId;
|
|
1213
|
+
const renderObject = renderManagerService.getRenderById(unitId);
|
|
1214
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1215
|
+
if (scene == null) return false;
|
|
1216
|
+
const transformer = scene.getTransformerByCreate();
|
|
1217
|
+
const documentDataModel = univerInstanceService.getUniverDocInstance(unitId);
|
|
1218
|
+
const newDrawings = drawings.map((drawing) => {
|
|
1219
|
+
var _documentDataModel$ge;
|
|
1220
|
+
const { drawingId } = drawing;
|
|
1221
|
+
const drawingData = documentDataModel === null || documentDataModel === void 0 || (_documentDataModel$ge = documentDataModel.getSnapshot().drawings) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge[drawingId];
|
|
1222
|
+
if (drawingData == null || drawingData.layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE) return null;
|
|
1223
|
+
const { positionH, positionV } = drawingData.docTransform;
|
|
1224
|
+
const newPositionH = { ...positionH };
|
|
1225
|
+
const newPositionV = { ...positionV };
|
|
1226
|
+
if (direction === _univerjs_core.Direction.UP) {
|
|
1227
|
+
var _newPositionV$posOffs;
|
|
1228
|
+
newPositionV.posOffset = ((_newPositionV$posOffs = newPositionV.posOffset) !== null && _newPositionV$posOffs !== void 0 ? _newPositionV$posOffs : 0) - 2;
|
|
1229
|
+
} else if (direction === _univerjs_core.Direction.DOWN) {
|
|
1230
|
+
var _newPositionV$posOffs2;
|
|
1231
|
+
newPositionV.posOffset = ((_newPositionV$posOffs2 = newPositionV.posOffset) !== null && _newPositionV$posOffs2 !== void 0 ? _newPositionV$posOffs2 : 0) + 2;
|
|
1232
|
+
} else if (direction === _univerjs_core.Direction.LEFT) {
|
|
1233
|
+
var _newPositionH$posOffs;
|
|
1234
|
+
newPositionH.posOffset = ((_newPositionH$posOffs = newPositionH.posOffset) !== null && _newPositionH$posOffs !== void 0 ? _newPositionH$posOffs : 0) - 2;
|
|
1235
|
+
} else if (direction === _univerjs_core.Direction.RIGHT) {
|
|
1236
|
+
var _newPositionH$posOffs2;
|
|
1237
|
+
newPositionH.posOffset = ((_newPositionH$posOffs2 = newPositionH.posOffset) !== null && _newPositionH$posOffs2 !== void 0 ? _newPositionH$posOffs2 : 0) + 2;
|
|
1238
|
+
}
|
|
1239
|
+
return {
|
|
1240
|
+
drawingId,
|
|
1241
|
+
key: direction === _univerjs_core.Direction.UP || direction === _univerjs_core.Direction.DOWN ? "positionV" : "positionH",
|
|
1242
|
+
value: direction === _univerjs_core.Direction.UP || direction === _univerjs_core.Direction.DOWN ? newPositionV : newPositionH
|
|
1243
|
+
};
|
|
1244
|
+
}).filter((drawing) => drawing != null);
|
|
1245
|
+
if (newDrawings.length === 0) return false;
|
|
1246
|
+
const result = commandService.syncExecuteCommand(UpdateDrawingDocTransformCommand.id, {
|
|
1247
|
+
unitId,
|
|
1248
|
+
subUnitId: unitId,
|
|
1249
|
+
drawings: newDrawings
|
|
1250
|
+
});
|
|
1251
|
+
transformer.refreshControls();
|
|
1252
|
+
return Boolean(result);
|
|
1253
|
+
}
|
|
1254
|
+
};
|
|
1255
|
+
|
|
1256
|
+
//#endregion
|
|
1257
|
+
//#region src/commands/operations/clear-drawing-transformer.operation.ts
|
|
1258
|
+
const ClearDocDrawingTransformerOperation = {
|
|
1259
|
+
id: "doc.operation.clear-drawing-transformer",
|
|
1260
|
+
type: _univerjs_core.CommandType.MUTATION,
|
|
1261
|
+
handler: (accessor, params) => {
|
|
1262
|
+
const renderManagerService = accessor.get(_univerjs_engine_render.IRenderManagerService);
|
|
1263
|
+
params.forEach((unitId) => {
|
|
1264
|
+
var _renderManagerService;
|
|
1265
|
+
(_renderManagerService = renderManagerService.getRenderById(unitId)) === null || _renderManagerService === void 0 || (_renderManagerService = _renderManagerService.scene.getTransformer()) === null || _renderManagerService === void 0 || _renderManagerService.debounceRefreshControls();
|
|
1266
|
+
});
|
|
1267
|
+
return true;
|
|
1268
|
+
}
|
|
1269
|
+
};
|
|
1270
|
+
|
|
1271
|
+
//#endregion
|
|
1272
|
+
//#region src/views/doc-image-panel/component-name.ts
|
|
1273
|
+
/**
|
|
1274
|
+
* Copyright 2023-present DreamNum Co., Ltd.
|
|
1275
|
+
*
|
|
1276
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
1277
|
+
* you may not use this file except in compliance with the License.
|
|
1278
|
+
* You may obtain a copy of the License at
|
|
1279
|
+
*
|
|
1280
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
1281
|
+
*
|
|
1282
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
1283
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
1284
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1285
|
+
* See the License for the specific language governing permissions and
|
|
1286
|
+
* limitations under the License.
|
|
1287
|
+
*/
|
|
1288
|
+
const COMPONENT_DOC_DRAWING_PANEL = "COMPONENT_DOC_DRAWING_PANEL";
|
|
1289
|
+
|
|
1290
|
+
//#endregion
|
|
1291
|
+
//#region src/commands/operations/open-drawing-panel.operation.ts
|
|
1292
|
+
const SidebarDocDrawingOperation = {
|
|
1293
|
+
id: "sidebar.operation.doc-image",
|
|
1294
|
+
type: _univerjs_core.CommandType.COMMAND,
|
|
1295
|
+
handler: async (accessor, params) => {
|
|
1296
|
+
const sidebarService = accessor.get(_univerjs_ui.ISidebarService);
|
|
1297
|
+
const localeService = accessor.get(_univerjs_core.LocaleService);
|
|
1298
|
+
const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
|
|
1299
|
+
switch (params.value) {
|
|
1300
|
+
case "open":
|
|
1301
|
+
sidebarService.open({
|
|
1302
|
+
header: { title: localeService.t("docImage.panel.title") },
|
|
1303
|
+
children: { label: COMPONENT_DOC_DRAWING_PANEL },
|
|
1304
|
+
onClose: () => {
|
|
1305
|
+
drawingManagerService.focusDrawing(null);
|
|
1306
|
+
},
|
|
1307
|
+
width: 360
|
|
1308
|
+
});
|
|
1309
|
+
break;
|
|
1310
|
+
default:
|
|
1311
|
+
sidebarService.close();
|
|
1312
|
+
break;
|
|
1313
|
+
}
|
|
1314
|
+
return true;
|
|
1315
|
+
}
|
|
1316
|
+
};
|
|
1317
|
+
|
|
1318
|
+
//#endregion
|
|
1319
|
+
//#region src/commands/operations/edit-doc-drawing.operation.ts
|
|
1320
|
+
const EditDocDrawingOperation = {
|
|
1321
|
+
id: "doc.operation.edit-doc-image",
|
|
1322
|
+
type: _univerjs_core.CommandType.OPERATION,
|
|
1323
|
+
handler: (accessor, params) => {
|
|
1324
|
+
const drawingManagerService = accessor.get(_univerjs_drawing.IDrawingManagerService);
|
|
1325
|
+
const commandService = accessor.get(_univerjs_core.ICommandService);
|
|
1326
|
+
if (params == null) return false;
|
|
1327
|
+
drawingManagerService.focusDrawing([params]);
|
|
1328
|
+
commandService.executeCommand(SidebarDocDrawingOperation.id, { value: "open" });
|
|
1329
|
+
return true;
|
|
1330
|
+
}
|
|
1331
|
+
};
|
|
1332
|
+
|
|
1333
|
+
//#endregion
|
|
1334
|
+
//#region src/controllers/doc-float-dom.controller.ts
|
|
1335
|
+
function calcDocFloatDomPositionByRect(rect, scene, opacity = 1, angle = 0) {
|
|
1336
|
+
const { top, left, bottom, right } = rect;
|
|
1337
|
+
const width = right - left;
|
|
1338
|
+
const height = bottom - top;
|
|
1339
|
+
const { viewportScrollX, viewportScrollY } = scene.getViewport(_univerjs_docs_ui.VIEWPORT_KEY.VIEW_MAIN);
|
|
1340
|
+
const { scaleX, scaleY } = scene.getAncestorScale();
|
|
1341
|
+
return {
|
|
1342
|
+
startX: (left - viewportScrollX) * scaleX,
|
|
1343
|
+
startY: (top - viewportScrollY) * scaleY,
|
|
1344
|
+
endX: (left + width - viewportScrollX) * scaleX,
|
|
1345
|
+
endY: (top + height - viewportScrollY) * scaleY,
|
|
1346
|
+
width: width * scaleX,
|
|
1347
|
+
height: height * scaleY,
|
|
1348
|
+
rotate: angle,
|
|
1349
|
+
absolute: {
|
|
1350
|
+
left: false,
|
|
1351
|
+
top: false
|
|
1352
|
+
},
|
|
1353
|
+
opacity: opacity !== null && opacity !== void 0 ? opacity : 1
|
|
1354
|
+
};
|
|
1355
|
+
}
|
|
1356
|
+
function calcDocFloatDomPosition(object, renderUnit) {
|
|
1357
|
+
const { top, left, width, height, angle, opacity } = object;
|
|
1358
|
+
return calcDocFloatDomPositionByRect({
|
|
1359
|
+
top,
|
|
1360
|
+
left,
|
|
1361
|
+
bottom: top + height,
|
|
1362
|
+
right: left + width
|
|
1363
|
+
}, renderUnit.scene, opacity, angle);
|
|
1364
|
+
}
|
|
1365
|
+
let DocFloatDomController = class DocFloatDomController extends _univerjs_core.Disposable {
|
|
1366
|
+
constructor(_renderManagerService, _drawingManagerService, _drawingRenderService, _canvasFloatDomService, _univerInstanceService, _commandService) {
|
|
1367
|
+
super();
|
|
1368
|
+
this._renderManagerService = _renderManagerService;
|
|
1369
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1370
|
+
this._drawingRenderService = _drawingRenderService;
|
|
1371
|
+
this._canvasFloatDomService = _canvasFloatDomService;
|
|
1372
|
+
this._univerInstanceService = _univerInstanceService;
|
|
1373
|
+
this._commandService = _commandService;
|
|
1374
|
+
_defineProperty(this, "_domLayerInfoMap", /* @__PURE__ */ new Map());
|
|
1375
|
+
this._initialize();
|
|
1376
|
+
}
|
|
1377
|
+
dispose() {
|
|
1378
|
+
super.dispose();
|
|
1379
|
+
}
|
|
1380
|
+
_initialize() {
|
|
1381
|
+
this._drawingAddRemoveListener();
|
|
1382
|
+
this._initScrollAndZoomEvent();
|
|
1383
|
+
}
|
|
1384
|
+
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
1385
|
+
if (unitId == null) return;
|
|
1386
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
1387
|
+
if (renderObject == null) return null;
|
|
1388
|
+
const scene = renderObject.scene;
|
|
1389
|
+
return {
|
|
1390
|
+
scene,
|
|
1391
|
+
transformer: scene.getTransformerByCreate(),
|
|
1392
|
+
renderUnit: renderObject,
|
|
1393
|
+
canvas: renderObject.engine.getCanvasElement()
|
|
1394
|
+
};
|
|
1395
|
+
}
|
|
1396
|
+
_drawingAddRemoveListener() {
|
|
1397
|
+
this.disposeWithMe(this._drawingManagerService.add$.subscribe((params) => {
|
|
1398
|
+
this._insertRects(params);
|
|
1399
|
+
}));
|
|
1400
|
+
this.disposeWithMe(this._drawingManagerService.remove$.subscribe((params) => {
|
|
1401
|
+
params.forEach((param) => {
|
|
1402
|
+
this._removeDom(param.drawingId);
|
|
1403
|
+
});
|
|
1404
|
+
}));
|
|
1405
|
+
}
|
|
1406
|
+
_insertRects(params) {
|
|
1407
|
+
params.forEach(async (param) => {
|
|
1408
|
+
const { unitId } = param;
|
|
1409
|
+
if (!this._univerInstanceService.getUnit(unitId, _univerjs_core.UniverInstanceType.UNIVER_DOC)) return;
|
|
1410
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1411
|
+
if (renderObject == null) return;
|
|
1412
|
+
const rectParam = this._drawingManagerService.getDrawingByParam(param);
|
|
1413
|
+
if (rectParam == null) return;
|
|
1414
|
+
const rects = await this._drawingRenderService.renderFloatDom(rectParam, renderObject.scene);
|
|
1415
|
+
if (rects == null || rects.length === 0) return;
|
|
1416
|
+
for (const rect of rects) {
|
|
1417
|
+
this._addHoverForRect(rect);
|
|
1418
|
+
const disposableCollection = new _univerjs_core.DisposableCollection();
|
|
1419
|
+
const position$ = new rxjs.BehaviorSubject(calcDocFloatDomPosition(rect, renderObject.renderUnit));
|
|
1420
|
+
const canvas = renderObject.canvas;
|
|
1421
|
+
const data = rectParam.data;
|
|
1422
|
+
const info = {
|
|
1423
|
+
dispose: disposableCollection,
|
|
1424
|
+
rect,
|
|
1425
|
+
position$,
|
|
1426
|
+
unitId
|
|
1427
|
+
};
|
|
1428
|
+
this._canvasFloatDomService.addFloatDom({
|
|
1429
|
+
position$,
|
|
1430
|
+
id: rectParam.drawingId,
|
|
1431
|
+
componentKey: rectParam.componentKey,
|
|
1432
|
+
onPointerDown: (evt) => {
|
|
1433
|
+
canvas.dispatchEvent(new PointerEvent(evt.type, evt));
|
|
1434
|
+
},
|
|
1435
|
+
onPointerMove: (evt) => {
|
|
1436
|
+
canvas.dispatchEvent(new PointerEvent(evt.type, evt));
|
|
1437
|
+
},
|
|
1438
|
+
onPointerUp: (evt) => {
|
|
1439
|
+
canvas.dispatchEvent(new PointerEvent(evt.type, evt));
|
|
1440
|
+
},
|
|
1441
|
+
onWheel: (evt) => {
|
|
1442
|
+
canvas.dispatchEvent(new WheelEvent(evt.type, evt));
|
|
1443
|
+
},
|
|
1444
|
+
data,
|
|
1445
|
+
unitId
|
|
1446
|
+
});
|
|
1447
|
+
const listener = rect.onTransformChange$.subscribeEvent(() => {
|
|
1448
|
+
const newPosition = calcDocFloatDomPosition(rect, renderObject.renderUnit);
|
|
1449
|
+
position$.next(newPosition);
|
|
1450
|
+
});
|
|
1451
|
+
disposableCollection.add(() => {
|
|
1452
|
+
this._canvasFloatDomService.removeFloatDom(rectParam.drawingId);
|
|
1453
|
+
});
|
|
1454
|
+
listener && disposableCollection.add(listener);
|
|
1455
|
+
this._domLayerInfoMap.set(rectParam.drawingId, info);
|
|
1456
|
+
}
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1459
|
+
_addHoverForRect(o) {
|
|
1460
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerEnter$.subscribeEvent(() => {
|
|
1461
|
+
o.cursor = _univerjs_engine_render.CURSOR_TYPE.GRAB;
|
|
1462
|
+
})));
|
|
1463
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(o.onPointerLeave$.subscribeEvent(() => {
|
|
1464
|
+
o.cursor = _univerjs_engine_render.CURSOR_TYPE.DEFAULT;
|
|
1465
|
+
})));
|
|
1466
|
+
}
|
|
1467
|
+
_removeDom(id) {
|
|
1468
|
+
const info = this._domLayerInfoMap.get(id);
|
|
1469
|
+
if (!info) return;
|
|
1470
|
+
const { unitId } = info;
|
|
1471
|
+
this._domLayerInfoMap.delete(id);
|
|
1472
|
+
info.dispose.dispose();
|
|
1473
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1474
|
+
if (renderObject) renderObject.scene.removeObject(info.rect);
|
|
1475
|
+
}
|
|
1476
|
+
_initScrollAndZoomEvent() {
|
|
1477
|
+
const updateDoc = (unitId) => {
|
|
1478
|
+
const renderObject = this._getSceneAndTransformerByDrawingSearch(unitId);
|
|
1479
|
+
if (!renderObject) return;
|
|
1480
|
+
this._domLayerInfoMap.forEach((floatDomInfo) => {
|
|
1481
|
+
if (floatDomInfo.unitId !== unitId) return;
|
|
1482
|
+
const position = calcDocFloatDomPosition(floatDomInfo.rect, renderObject.renderUnit);
|
|
1483
|
+
floatDomInfo.position$.next(position);
|
|
1484
|
+
});
|
|
1485
|
+
};
|
|
1486
|
+
this.disposeWithMe(this._univerInstanceService.getCurrentTypeOfUnit$(_univerjs_core.UniverInstanceType.UNIVER_DOC).pipe((0, rxjs.map)((documentDataModel) => {
|
|
1487
|
+
if (!documentDataModel) return null;
|
|
1488
|
+
const unitId = documentDataModel.getUnitId();
|
|
1489
|
+
const render = this._renderManagerService.getRenderById(unitId);
|
|
1490
|
+
return render ? {
|
|
1491
|
+
render,
|
|
1492
|
+
unitId
|
|
1493
|
+
} : null;
|
|
1494
|
+
}), (0, rxjs.switchMap)((render) => render ? (0, _univerjs_core.fromEventSubject)(render.render.scene.getViewport(_univerjs_docs_ui.VIEWPORT_KEY.VIEW_MAIN).onScrollAfter$).pipe((0, rxjs.map)(() => ({ unitId: render.unitId }))) : (0, rxjs.of)(null))).subscribe((value) => {
|
|
1495
|
+
if (!value) return;
|
|
1496
|
+
const { unitId } = value;
|
|
1497
|
+
updateDoc(unitId);
|
|
1498
|
+
}));
|
|
1499
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((commandInfo) => {
|
|
1500
|
+
if (commandInfo.id === _univerjs_docs_ui.SetDocZoomRatioOperation.id) {
|
|
1501
|
+
const { unitId } = commandInfo.params;
|
|
1502
|
+
updateDoc(unitId);
|
|
1503
|
+
}
|
|
1504
|
+
}));
|
|
1505
|
+
}
|
|
1506
|
+
insertFloatDom(floatDom, opts) {
|
|
1507
|
+
var _skeleton$getSkeleton, _opts$width, _opts$drawingId;
|
|
1508
|
+
const currentDoc = this._univerInstanceService.getCurrentUnitOfType(_univerjs_core.UniverInstanceType.UNIVER_DOC);
|
|
1509
|
+
if (!currentDoc) return false;
|
|
1510
|
+
const render = this._getSceneAndTransformerByDrawingSearch(currentDoc.getUnitId());
|
|
1511
|
+
if (!render) return false;
|
|
1512
|
+
const page = (_skeleton$getSkeleton = render.renderUnit.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton().getSkeletonData()) === null || _skeleton$getSkeleton === void 0 ? void 0 : _skeleton$getSkeleton.pages[0];
|
|
1513
|
+
if (!page) return false;
|
|
1514
|
+
const { pageWidth, marginLeft, marginRight } = page;
|
|
1515
|
+
const width = pageWidth - marginLeft - marginRight;
|
|
1516
|
+
const docTransform = {
|
|
1517
|
+
size: {
|
|
1518
|
+
width: (_opts$width = opts.width) !== null && _opts$width !== void 0 ? _opts$width : width,
|
|
1519
|
+
height: opts.height
|
|
1520
|
+
},
|
|
1521
|
+
positionH: {
|
|
1522
|
+
relativeFrom: _univerjs_core.ObjectRelativeFromH.PAGE,
|
|
1523
|
+
posOffset: 0
|
|
1524
|
+
},
|
|
1525
|
+
positionV: {
|
|
1526
|
+
relativeFrom: _univerjs_core.ObjectRelativeFromV.PAGE,
|
|
1527
|
+
posOffset: 0
|
|
1528
|
+
},
|
|
1529
|
+
angle: 0
|
|
1530
|
+
};
|
|
1531
|
+
const drawingId = (_opts$drawingId = opts.drawingId) !== null && _opts$drawingId !== void 0 ? _opts$drawingId : (0, _univerjs_core.generateRandomId)();
|
|
1532
|
+
const params = {
|
|
1533
|
+
unitId: currentDoc.getUnitId(),
|
|
1534
|
+
drawings: [{
|
|
1535
|
+
drawingId,
|
|
1536
|
+
drawingType: _univerjs_core.DrawingTypeEnum.DRAWING_DOM,
|
|
1537
|
+
subUnitId: currentDoc.getUnitId(),
|
|
1538
|
+
unitId: currentDoc.getUnitId(),
|
|
1539
|
+
...floatDom,
|
|
1540
|
+
title: "",
|
|
1541
|
+
description: "",
|
|
1542
|
+
docTransform,
|
|
1543
|
+
layoutType: _univerjs_core.PositionedObjectLayoutType.INLINE,
|
|
1544
|
+
transform: (0, _univerjs_docs_ui.docDrawingPositionToTransform)(docTransform)
|
|
1545
|
+
}]
|
|
1546
|
+
};
|
|
1547
|
+
this._commandService.syncExecuteCommand(InsertDocDrawingCommand.id, params);
|
|
1548
|
+
return drawingId;
|
|
1549
|
+
}
|
|
1550
|
+
};
|
|
1551
|
+
DocFloatDomController = __decorate([
|
|
1552
|
+
__decorateParam(0, _univerjs_engine_render.IRenderManagerService),
|
|
1553
|
+
__decorateParam(1, _univerjs_drawing.IDrawingManagerService),
|
|
1554
|
+
__decorateParam(2, (0, _univerjs_core.Inject)(_univerjs_drawing_ui.DrawingRenderService)),
|
|
1555
|
+
__decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_ui.CanvasFloatDomService)),
|
|
1556
|
+
__decorateParam(4, _univerjs_core.IUniverInstanceService),
|
|
1557
|
+
__decorateParam(5, _univerjs_core.ICommandService)
|
|
1558
|
+
], DocFloatDomController);
|
|
1559
|
+
|
|
1560
|
+
//#endregion
|
|
1561
|
+
//#region src/menu/image.menu.ts
|
|
1562
|
+
const DOCS_IMAGE_MENU_ID = "doc.menu.image";
|
|
1563
|
+
const IMAGE_MENU_UPLOAD_FLOAT_ID = InsertDocImageCommand.id;
|
|
1564
|
+
const getDisableWhenSelectionInTableObservable = (accessor) => {
|
|
1565
|
+
const docSelectionManagerService = accessor.get(_univerjs_docs.DocSelectionManagerService);
|
|
1566
|
+
const univerInstanceService = accessor.get(_univerjs_core.IUniverInstanceService);
|
|
1567
|
+
return new rxjs.Observable((subscriber) => {
|
|
1568
|
+
const observable = docSelectionManagerService.textSelection$.subscribe(() => {
|
|
1569
|
+
const activeRange = docSelectionManagerService.getActiveTextRange();
|
|
1570
|
+
if (activeRange) {
|
|
1571
|
+
var _docDataModel$getSelf;
|
|
1572
|
+
const { segmentId, startOffset, endOffset } = activeRange;
|
|
1573
|
+
const docDataModel = univerInstanceService.getCurrentUniverDocInstance();
|
|
1574
|
+
const tables = docDataModel === null || docDataModel === void 0 || (_docDataModel$getSelf = docDataModel.getSelfOrHeaderFooterModel(segmentId).getBody()) === null || _docDataModel$getSelf === void 0 ? void 0 : _docDataModel$getSelf.tables;
|
|
1575
|
+
if (tables && tables.length) {
|
|
1576
|
+
if (tables.some((table) => {
|
|
1577
|
+
const { startIndex, endIndex } = table;
|
|
1578
|
+
return startOffset >= startIndex && startOffset < endIndex || endOffset >= startIndex && endOffset < endIndex;
|
|
1579
|
+
})) {
|
|
1580
|
+
subscriber.next(true);
|
|
1581
|
+
return;
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
} else {
|
|
1585
|
+
subscriber.next(true);
|
|
1586
|
+
return;
|
|
1587
|
+
}
|
|
1588
|
+
subscriber.next(false);
|
|
1589
|
+
});
|
|
1590
|
+
return () => observable.unsubscribe();
|
|
1591
|
+
});
|
|
1592
|
+
};
|
|
1593
|
+
function ImageMenuFactory(accessor) {
|
|
1594
|
+
return {
|
|
1595
|
+
id: DOCS_IMAGE_MENU_ID,
|
|
1596
|
+
type: _univerjs_ui.MenuItemType.SUBITEMS,
|
|
1597
|
+
icon: "AddImageIcon",
|
|
1598
|
+
tooltip: "docImage.title",
|
|
1599
|
+
disabled$: getDisableWhenSelectionInTableObservable(accessor),
|
|
1600
|
+
hidden$: (0, _univerjs_ui.getMenuHiddenObservable)(accessor, _univerjs_core.UniverInstanceType.UNIVER_DOC, void 0, _univerjs_core.DOCS_ZEN_EDITOR_UNIT_ID_KEY)
|
|
1601
|
+
};
|
|
1602
|
+
}
|
|
1603
|
+
function UploadFloatImageMenuFactory(_accessor) {
|
|
1604
|
+
return {
|
|
1605
|
+
id: IMAGE_MENU_UPLOAD_FLOAT_ID,
|
|
1606
|
+
title: "docImage.upload.float",
|
|
1607
|
+
type: _univerjs_ui.MenuItemType.BUTTON,
|
|
1608
|
+
hidden$: (0, _univerjs_ui.getMenuHiddenObservable)(_accessor, _univerjs_core.UniverInstanceType.UNIVER_DOC, void 0, _univerjs_core.DOCS_ZEN_EDITOR_UNIT_ID_KEY)
|
|
1609
|
+
};
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
//#endregion
|
|
1613
|
+
//#region package.json
|
|
1614
|
+
var name = "@univerjs/docs-drawing-ui";
|
|
1615
|
+
var version = "0.21.0";
|
|
1616
|
+
|
|
1617
|
+
//#endregion
|
|
1618
|
+
//#region src/config/config.ts
|
|
1619
|
+
/**
|
|
1620
|
+
* Copyright 2023-present DreamNum Co., Ltd.
|
|
1621
|
+
*
|
|
1622
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
1623
|
+
* you may not use this file except in compliance with the License.
|
|
1624
|
+
* You may obtain a copy of the License at
|
|
1625
|
+
*
|
|
1626
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
1627
|
+
*
|
|
1628
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
1629
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
1630
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1631
|
+
* See the License for the specific language governing permissions and
|
|
1632
|
+
* limitations under the License.
|
|
1633
|
+
*/
|
|
1634
|
+
const DOCS_DRAWING_UI_PLUGIN_CONFIG_KEY = "docs-drawing-ui.config";
|
|
1635
|
+
const configSymbol = Symbol(DOCS_DRAWING_UI_PLUGIN_CONFIG_KEY);
|
|
1636
|
+
const defaultPluginConfig = {};
|
|
1637
|
+
|
|
1638
|
+
//#endregion
|
|
1639
|
+
//#region src/controllers/doc-drawing-notification.controller.ts
|
|
1640
|
+
function getAddOrRemoveDrawings(actions) {
|
|
1641
|
+
if (_univerjs_core.JSONX.isNoop(actions) || !Array.isArray(actions)) return null;
|
|
1642
|
+
const drawingsOp = actions.find((action) => Array.isArray(action) && (action === null || action === void 0 ? void 0 : action[0]) === "drawings");
|
|
1643
|
+
if (drawingsOp == null || !Array.isArray(drawingsOp) || drawingsOp.length < 3) return null;
|
|
1644
|
+
if (typeof drawingsOp[1] === "string" && typeof drawingsOp[2] !== "object") return null;
|
|
1645
|
+
if (Array.isArray(drawingsOp[1]) && typeof drawingsOp[1][1] !== "object") return null;
|
|
1646
|
+
const drawings = [];
|
|
1647
|
+
if (Array.isArray(drawingsOp === null || drawingsOp === void 0 ? void 0 : drawingsOp[1])) {
|
|
1648
|
+
for (const op of drawingsOp) if (Array.isArray(op)) {
|
|
1649
|
+
var _ref, _ref2;
|
|
1650
|
+
drawings.push({
|
|
1651
|
+
type: (op === null || op === void 0 || (_ref = op[1]) === null || _ref === void 0 ? void 0 : _ref.i) ? "add" : "remove",
|
|
1652
|
+
drawingId: op === null || op === void 0 ? void 0 : op[0],
|
|
1653
|
+
drawing: op === null || op === void 0 || (_ref2 = op[1]) === null || _ref2 === void 0 ? void 0 : _ref2.i
|
|
1654
|
+
});
|
|
1655
|
+
}
|
|
1656
|
+
} else {
|
|
1657
|
+
var _drawingsOp$, _drawingsOp$2;
|
|
1658
|
+
drawings.push({
|
|
1659
|
+
type: ((_drawingsOp$ = drawingsOp[2]) === null || _drawingsOp$ === void 0 ? void 0 : _drawingsOp$.i) ? "add" : "remove",
|
|
1660
|
+
drawingId: drawingsOp[1],
|
|
1661
|
+
drawing: (_drawingsOp$2 = drawingsOp[2]) === null || _drawingsOp$2 === void 0 ? void 0 : _drawingsOp$2.i
|
|
1662
|
+
});
|
|
1663
|
+
}
|
|
1664
|
+
return drawings;
|
|
1665
|
+
}
|
|
1666
|
+
function getReOrderedDrawings(actions) {
|
|
1667
|
+
if (!Array.isArray(actions) || actions.length < 3 || actions[0] !== "drawingsOrder") return [];
|
|
1668
|
+
const drawingIndexes = [];
|
|
1669
|
+
for (let i = 1; i < actions.length; i++) {
|
|
1670
|
+
const action = actions[i];
|
|
1671
|
+
if (Array.isArray(action) && typeof action[0] === "number" && typeof action[1] === "object") drawingIndexes.push(action[0]);
|
|
1672
|
+
else {
|
|
1673
|
+
drawingIndexes.length = 0;
|
|
1674
|
+
break;
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
return drawingIndexes;
|
|
1678
|
+
}
|
|
1679
|
+
let DocDrawingAddRemoveController = class DocDrawingAddRemoveController extends _univerjs_core.Disposable {
|
|
1680
|
+
constructor(_univerInstanceService, _commandService, _drawingManagerService, _docDrawingService, _renderManagerService) {
|
|
1681
|
+
super();
|
|
1682
|
+
this._univerInstanceService = _univerInstanceService;
|
|
1683
|
+
this._commandService = _commandService;
|
|
1684
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1685
|
+
this._docDrawingService = _docDrawingService;
|
|
1686
|
+
this._renderManagerService = _renderManagerService;
|
|
1687
|
+
this._initialize();
|
|
1688
|
+
}
|
|
1689
|
+
_initialize() {
|
|
1690
|
+
this._commandExecutedListener();
|
|
1691
|
+
}
|
|
1692
|
+
_commandExecutedListener() {
|
|
1693
|
+
this.disposeWithMe(this._commandService.beforeCommandExecuted((command) => {
|
|
1694
|
+
if (command.id !== _univerjs_docs.RichTextEditingMutation.id) return;
|
|
1695
|
+
const { unitId, actions } = command.params;
|
|
1696
|
+
const addOrRemoveDrawings = getAddOrRemoveDrawings(actions);
|
|
1697
|
+
if (addOrRemoveDrawings != null) for (const { type, drawingId, drawing } of addOrRemoveDrawings) if (type === "add") this._addDrawings(unitId, [drawing]);
|
|
1698
|
+
else this._removeDrawings(unitId, [drawingId]);
|
|
1699
|
+
}));
|
|
1700
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
1701
|
+
if (command.id !== _univerjs_docs.RichTextEditingMutation.id) return;
|
|
1702
|
+
const { unitId, actions } = command.params;
|
|
1703
|
+
if (getReOrderedDrawings(actions).length > 0) this._updateDrawingsOrder(unitId);
|
|
1704
|
+
}));
|
|
1705
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
1706
|
+
var _this$_univerInstance;
|
|
1707
|
+
if (command.id !== _univerjs_core.UndoCommand.id && command.id !== _univerjs_core.RedoCommand.id) return;
|
|
1708
|
+
const unitId = (_this$_univerInstance = this._univerInstanceService.getCurrentUniverDocInstance()) === null || _this$_univerInstance === void 0 ? void 0 : _this$_univerInstance.getUnitId();
|
|
1709
|
+
const focusedDrawings = this._drawingManagerService.getFocusDrawings();
|
|
1710
|
+
if (unitId == null || focusedDrawings.length === 0) return;
|
|
1711
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
1712
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
1713
|
+
if (scene == null) return false;
|
|
1714
|
+
scene.getTransformerByCreate().refreshControls();
|
|
1715
|
+
}));
|
|
1716
|
+
}
|
|
1717
|
+
_addDrawings(unitId, drawings) {
|
|
1718
|
+
const drawingManagerService = this._drawingManagerService;
|
|
1719
|
+
const docDrawingService = this._docDrawingService;
|
|
1720
|
+
const { subUnitId, redo: op, objects } = this._docDrawingService.getBatchAddOp(drawings);
|
|
1721
|
+
drawingManagerService.applyJson1(unitId, subUnitId, op);
|
|
1722
|
+
docDrawingService.applyJson1(unitId, subUnitId, op);
|
|
1723
|
+
drawingManagerService.addNotification(objects);
|
|
1724
|
+
docDrawingService.addNotification(objects);
|
|
1725
|
+
}
|
|
1726
|
+
_removeDrawings(unitId, drawingIds) {
|
|
1727
|
+
const drawingManagerService = this._drawingManagerService;
|
|
1728
|
+
const docDrawingService = this._docDrawingService;
|
|
1729
|
+
const { subUnitId, redo: op, objects } = this._docDrawingService.getBatchRemoveOp(drawingIds.map((drawingId) => {
|
|
1730
|
+
return {
|
|
1731
|
+
unitId,
|
|
1732
|
+
subUnitId: unitId,
|
|
1733
|
+
drawingId
|
|
1734
|
+
};
|
|
1735
|
+
}));
|
|
1736
|
+
drawingManagerService.applyJson1(unitId, subUnitId, op);
|
|
1737
|
+
docDrawingService.applyJson1(unitId, subUnitId, op);
|
|
1738
|
+
drawingManagerService.removeNotification(objects);
|
|
1739
|
+
docDrawingService.removeNotification(objects);
|
|
1740
|
+
}
|
|
1741
|
+
_updateDrawingsOrder(unitId) {
|
|
1742
|
+
const documentDataModel = this._univerInstanceService.getUniverDocInstance(unitId);
|
|
1743
|
+
if (documentDataModel == null) return;
|
|
1744
|
+
const drawingsOrder = documentDataModel.getSnapshot().drawingsOrder;
|
|
1745
|
+
if (drawingsOrder == null) return;
|
|
1746
|
+
const drawingManagerService = this._drawingManagerService;
|
|
1747
|
+
const docDrawingService = this._docDrawingService;
|
|
1748
|
+
drawingManagerService.setDrawingOrder(unitId, unitId, drawingsOrder);
|
|
1749
|
+
docDrawingService.setDrawingOrder(unitId, unitId, drawingsOrder);
|
|
1750
|
+
const objects = {
|
|
1751
|
+
unitId,
|
|
1752
|
+
subUnitId: unitId,
|
|
1753
|
+
drawingIds: drawingsOrder
|
|
1754
|
+
};
|
|
1755
|
+
drawingManagerService.orderNotification(objects);
|
|
1756
|
+
docDrawingService.orderNotification(objects);
|
|
1757
|
+
}
|
|
1758
|
+
};
|
|
1759
|
+
DocDrawingAddRemoveController = __decorate([
|
|
1760
|
+
__decorateParam(0, _univerjs_core.IUniverInstanceService),
|
|
1761
|
+
__decorateParam(1, _univerjs_core.ICommandService),
|
|
1762
|
+
__decorateParam(2, _univerjs_drawing.IDrawingManagerService),
|
|
1763
|
+
__decorateParam(3, _univerjs_docs_drawing.IDocDrawingService),
|
|
1764
|
+
__decorateParam(4, _univerjs_engine_render.IRenderManagerService)
|
|
1765
|
+
], DocDrawingAddRemoveController);
|
|
1766
|
+
|
|
1767
|
+
//#endregion
|
|
1768
|
+
//#region src/views/printing-float-dom/index.tsx
|
|
1769
|
+
const DocPrintingFloatDom = (props) => {
|
|
1770
|
+
const { floatDomInfos, scene, offset, bound } = props;
|
|
1771
|
+
const width = bound.right - bound.left;
|
|
1772
|
+
const height = bound.bottom - bound.top;
|
|
1773
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1774
|
+
className: "univer-absolute univer-left-0 univer-top-0",
|
|
1775
|
+
children: (0, react.useMemo)(() => floatDomInfos.map((info) => {
|
|
1776
|
+
const { width = 0, height = 0, left = 0, top = 0 } = info.transform;
|
|
1777
|
+
const domPos = calcDocFloatDomPositionByRect({
|
|
1778
|
+
left,
|
|
1779
|
+
right: left + width,
|
|
1780
|
+
top,
|
|
1781
|
+
bottom: top + height
|
|
1782
|
+
}, scene);
|
|
1783
|
+
const floatDom = {
|
|
1784
|
+
position$: new rxjs.BehaviorSubject(domPos),
|
|
1785
|
+
position: domPos,
|
|
1786
|
+
id: info.drawingId,
|
|
1787
|
+
componentKey: info.componentKey,
|
|
1788
|
+
onPointerMove: () => {},
|
|
1789
|
+
onPointerDown: () => {},
|
|
1790
|
+
onPointerUp: () => {},
|
|
1791
|
+
onWheel: () => {},
|
|
1792
|
+
unitId: info.unitId,
|
|
1793
|
+
data: info.data
|
|
1794
|
+
};
|
|
1795
|
+
return [info.drawingId, floatDom];
|
|
1796
|
+
}).filter(([_, floatDom]) => !(floatDom.position.endX < 0 || floatDom.position.endY < 0 || floatDom.position.startX > width || floatDom.position.startY > height)), [
|
|
1797
|
+
floatDomInfos,
|
|
1798
|
+
scene,
|
|
1799
|
+
offset,
|
|
1800
|
+
width,
|
|
1801
|
+
height
|
|
1802
|
+
]).map(([id, floatDom]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_ui.PrintFloatDomSingle, {
|
|
1803
|
+
layer: floatDom,
|
|
1804
|
+
id,
|
|
1805
|
+
position: floatDom.position
|
|
1806
|
+
}, id))
|
|
1807
|
+
});
|
|
1808
|
+
};
|
|
1809
|
+
|
|
1810
|
+
//#endregion
|
|
1811
|
+
//#region src/controllers/doc-drawing-printing.controller.tsx
|
|
1812
|
+
let DocDrawingPrintingController = class DocDrawingPrintingController extends _univerjs_core.Disposable {
|
|
1813
|
+
constructor(_docPrintInterceptorService, _drawingRenderService, _drawingManagerService, _componetManager, _injector) {
|
|
1814
|
+
super();
|
|
1815
|
+
this._docPrintInterceptorService = _docPrintInterceptorService;
|
|
1816
|
+
this._drawingRenderService = _drawingRenderService;
|
|
1817
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1818
|
+
this._componetManager = _componetManager;
|
|
1819
|
+
this._injector = _injector;
|
|
1820
|
+
this._initPrinting();
|
|
1821
|
+
this._initPrintingDom();
|
|
1822
|
+
}
|
|
1823
|
+
_initPrinting() {
|
|
1824
|
+
this.disposeWithMe(this._docPrintInterceptorService.interceptor.intercept(this._docPrintInterceptorService.interceptor.getInterceptPoints().PRINTING_COMPONENT_COLLECT, { handler: (_param, pos, next) => {
|
|
1825
|
+
const { unitId, scene } = pos;
|
|
1826
|
+
const unitData = this._drawingManagerService.getDrawingDataForUnit(unitId);
|
|
1827
|
+
const subUnitData = unitData === null || unitData === void 0 ? void 0 : unitData[unitId];
|
|
1828
|
+
if (subUnitData) subUnitData.order.forEach((id) => {
|
|
1829
|
+
const drawing = subUnitData.data[id];
|
|
1830
|
+
if (drawing.drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_CHART && drawing.drawingType !== _univerjs_core.DrawingTypeEnum.DRAWING_DOM) this._drawingRenderService.renderDrawing(drawing, scene);
|
|
1831
|
+
});
|
|
1832
|
+
return next();
|
|
1833
|
+
} }));
|
|
1834
|
+
}
|
|
1835
|
+
_initPrintingDom() {
|
|
1836
|
+
this.disposeWithMe(this._docPrintInterceptorService.interceptor.intercept(this._docPrintInterceptorService.interceptor.getInterceptPoints().PRINTING_DOM_COLLECT, { handler: (disposableCollection, pos, next) => {
|
|
1837
|
+
const { unitId } = pos;
|
|
1838
|
+
const unitData = this._drawingManagerService.getDrawingDataForUnit(unitId);
|
|
1839
|
+
const subUnitData = unitData === null || unitData === void 0 ? void 0 : unitData[unitId];
|
|
1840
|
+
if (subUnitData) {
|
|
1841
|
+
const floatDomInfos = subUnitData.order.map((id) => {
|
|
1842
|
+
const drawing = subUnitData.data[id];
|
|
1843
|
+
if (drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_CHART) return {
|
|
1844
|
+
...drawing,
|
|
1845
|
+
componentKey: this._componetManager.get(_univerjs_core.DOC_DRAWING_PRINTING_COMPONENT_KEY)
|
|
1846
|
+
};
|
|
1847
|
+
if (drawing.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM) {
|
|
1848
|
+
const printingComponentKey = this._docPrintInterceptorService.getPrintComponent(drawing.componentKey);
|
|
1849
|
+
return {
|
|
1850
|
+
...drawing,
|
|
1851
|
+
componentKey: this._componetManager.get(printingComponentKey || drawing.componentKey)
|
|
1852
|
+
};
|
|
1853
|
+
}
|
|
1854
|
+
return null;
|
|
1855
|
+
}).filter(Boolean);
|
|
1856
|
+
(0, _univerjs_design.render)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)((0, _univerjs_ui.connectInjector)(DocPrintingFloatDom, this._injector), {
|
|
1857
|
+
unitId,
|
|
1858
|
+
floatDomInfos,
|
|
1859
|
+
scene: pos.scene,
|
|
1860
|
+
skeleton: pos.skeleton,
|
|
1861
|
+
offset: pos.offset,
|
|
1862
|
+
bound: pos.bound
|
|
1863
|
+
}), pos.root);
|
|
1864
|
+
disposableCollection === null || disposableCollection === void 0 || disposableCollection.add(() => {
|
|
1865
|
+
(0, _univerjs_design.unmount)(pos.root);
|
|
1866
|
+
});
|
|
1867
|
+
return next(disposableCollection);
|
|
1868
|
+
}
|
|
1869
|
+
} }));
|
|
1870
|
+
}
|
|
1871
|
+
};
|
|
1872
|
+
DocDrawingPrintingController = __decorate([
|
|
1873
|
+
__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_docs_ui.DocPrintInterceptorService)),
|
|
1874
|
+
__decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_drawing_ui.DrawingRenderService)),
|
|
1875
|
+
__decorateParam(2, _univerjs_drawing.IDrawingManagerService),
|
|
1876
|
+
__decorateParam(3, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager)),
|
|
1877
|
+
__decorateParam(4, (0, _univerjs_core.Inject)(_univerjs_core.Injector))
|
|
1878
|
+
], DocDrawingPrintingController);
|
|
1879
|
+
|
|
1880
|
+
//#endregion
|
|
1881
|
+
//#region src/controllers/doc-drawing-transformer-update.controller.ts
|
|
1882
|
+
const INLINE_DRAWING_ANCHOR_KEY_PREFIX = "__InlineDrawingAnchor__";
|
|
1883
|
+
function isInTableCell(nodePosition) {
|
|
1884
|
+
const { path } = nodePosition;
|
|
1885
|
+
return path.some((p) => p === "cells");
|
|
1886
|
+
}
|
|
1887
|
+
let DocDrawingTransformerController = class DocDrawingTransformerController extends _univerjs_core.Disposable {
|
|
1888
|
+
constructor(_commandService, _univerInstanceService, _drawingManagerService, _renderManagerService) {
|
|
1889
|
+
super();
|
|
1890
|
+
this._commandService = _commandService;
|
|
1891
|
+
this._univerInstanceService = _univerInstanceService;
|
|
1892
|
+
this._drawingManagerService = _drawingManagerService;
|
|
1893
|
+
this._renderManagerService = _renderManagerService;
|
|
1894
|
+
_defineProperty(this, "_liquid", new _univerjs_engine_render.Liquid());
|
|
1895
|
+
_defineProperty(this, "_listenerOnImageMap", /* @__PURE__ */ new Set());
|
|
1896
|
+
_defineProperty(this, "_transformerCache", /* @__PURE__ */ new Map());
|
|
1897
|
+
_defineProperty(this, "_anchorShape", void 0);
|
|
1898
|
+
this._init();
|
|
1899
|
+
}
|
|
1900
|
+
_init() {
|
|
1901
|
+
this._listenDrawingFocus();
|
|
1902
|
+
}
|
|
1903
|
+
_listenDrawingFocus() {
|
|
1904
|
+
this.disposeWithMe(this._drawingManagerService.add$.subscribe((drawingParams) => {
|
|
1905
|
+
if (drawingParams.length === 0) return;
|
|
1906
|
+
for (const drawingParam of drawingParams) {
|
|
1907
|
+
const { unitId } = drawingParam;
|
|
1908
|
+
if (!this._listenerOnImageMap.has(unitId)) {
|
|
1909
|
+
this._listenTransformerChange(unitId);
|
|
1910
|
+
this._listenerOnImageMap.add(unitId);
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
}));
|
|
1914
|
+
}
|
|
1915
|
+
_listenTransformerChange(unitId) {
|
|
1916
|
+
var _this$_getSceneAndTra;
|
|
1917
|
+
const transformer = (_this$_getSceneAndTra = this._getSceneAndTransformerByDrawingSearch(unitId)) === null || _this$_getSceneAndTra === void 0 ? void 0 : _this$_getSceneAndTra.transformer;
|
|
1918
|
+
if (transformer == null) return;
|
|
1919
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changeStart$.subscribe((state) => {
|
|
1920
|
+
this._transformerCache.clear();
|
|
1921
|
+
const { objects } = state;
|
|
1922
|
+
for (const object of objects.values()) {
|
|
1923
|
+
var _documentDataModel$ge;
|
|
1924
|
+
const { oKey, width, height, left, top, angle } = object;
|
|
1925
|
+
const drawing = this._drawingManagerService.getDrawingOKey(oKey);
|
|
1926
|
+
if (drawing == null) continue;
|
|
1927
|
+
const documentDataModel = this._univerInstanceService.getUniverDocInstance(drawing.unitId);
|
|
1928
|
+
const drawingData = documentDataModel === null || documentDataModel === void 0 || (_documentDataModel$ge = documentDataModel.getSnapshot().drawings) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge[drawing.drawingId];
|
|
1929
|
+
if ((drawingData === null || drawingData === void 0 ? void 0 : drawingData.layoutType) === _univerjs_core.PositionedObjectLayoutType.INLINE) try {
|
|
1930
|
+
object.setOpacity(.2);
|
|
1931
|
+
} catch (e) {}
|
|
1932
|
+
if (drawingData != null) this._transformerCache.set(drawing.drawingId, {
|
|
1933
|
+
drawing: drawingData,
|
|
1934
|
+
top,
|
|
1935
|
+
left,
|
|
1936
|
+
width,
|
|
1937
|
+
height,
|
|
1938
|
+
angle
|
|
1939
|
+
});
|
|
1940
|
+
}
|
|
1941
|
+
})));
|
|
1942
|
+
const throttleMultipleDrawingUpdate = (0, _univerjs_core.throttle)(this._updateMultipleDrawingDocTransform.bind(this), 50);
|
|
1943
|
+
(0, _univerjs_core.throttle)(this._nonInlineDrawingTransform.bind(this), 50);
|
|
1944
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changing$.subscribe((state) => {
|
|
1945
|
+
const { objects, offsetX, offsetY } = state;
|
|
1946
|
+
if (objects.size > 1) throttleMultipleDrawingUpdate(objects);
|
|
1947
|
+
else if (objects.size === 1) {
|
|
1948
|
+
const drawingCache = this._transformerCache.values().next().value;
|
|
1949
|
+
const { width, height, top, left, angle } = objects.values().next().value;
|
|
1950
|
+
if (drawingCache && width === drawingCache.width && height === drawingCache.height && top === drawingCache.top && left === drawingCache.left && angle === drawingCache.angle) return;
|
|
1951
|
+
if (drawingCache && drawingCache.drawing.layoutType !== _univerjs_core.PositionedObjectLayoutType.INLINE) {}
|
|
1952
|
+
if (drawingCache && drawingCache.drawing.layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE && offsetX != null && offsetY != null) this._updateInlineDrawingAnchor(drawingCache.drawing, offsetX, offsetY);
|
|
1953
|
+
}
|
|
1954
|
+
})));
|
|
1955
|
+
this.disposeWithMe((0, _univerjs_core.toDisposable)(transformer.changeEnd$.subscribe((state) => {
|
|
1956
|
+
const { objects, offsetX, offsetY } = state;
|
|
1957
|
+
for (const object of objects.values()) {
|
|
1958
|
+
const drawing = this._drawingManagerService.getDrawingOKey(object.oKey);
|
|
1959
|
+
if (drawing == null) continue;
|
|
1960
|
+
const drawingCache = this._transformerCache.get(drawing === null || drawing === void 0 ? void 0 : drawing.drawingId);
|
|
1961
|
+
if ((drawingCache === null || drawingCache === void 0 ? void 0 : drawingCache.drawing.layoutType) === _univerjs_core.PositionedObjectLayoutType.INLINE) try {
|
|
1962
|
+
object.setOpacity(1);
|
|
1963
|
+
} catch (e) {}
|
|
1964
|
+
}
|
|
1965
|
+
if (this._anchorShape) this._anchorShape.hide();
|
|
1966
|
+
if (objects.size > 1) this._updateMultipleDrawingDocTransform(objects);
|
|
1967
|
+
else if (objects.size === 1) {
|
|
1968
|
+
const drawingCache = this._transformerCache.values().next().value;
|
|
1969
|
+
const object = objects.values().next().value;
|
|
1970
|
+
const { width, height, top, left, angle } = object;
|
|
1971
|
+
if (drawingCache && width === drawingCache.width && height === drawingCache.height && top === drawingCache.top && left === drawingCache.left && angle === drawingCache.angle) return;
|
|
1972
|
+
if (drawingCache && drawingCache.drawing.layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE) {
|
|
1973
|
+
if (width !== drawingCache.width || height !== drawingCache.height || angle !== drawingCache.angle) this._updateDrawingSize(drawingCache, object);
|
|
1974
|
+
else if (offsetX != null && offsetY != null) this._moveInlineDrawing(drawingCache.drawing, offsetX, offsetY);
|
|
1975
|
+
} else if (drawingCache) this._nonInlineDrawingTransform(drawingCache.drawing, object);
|
|
1976
|
+
}
|
|
1977
|
+
this._transformerCache.clear();
|
|
1978
|
+
})));
|
|
1979
|
+
}
|
|
1980
|
+
_updateMultipleDrawingDocTransform(objects) {
|
|
1981
|
+
if (objects.size < 1) return;
|
|
1982
|
+
const drawings = [];
|
|
1983
|
+
let unitId;
|
|
1984
|
+
let subUnitId;
|
|
1985
|
+
for (const object of objects.values()) {
|
|
1986
|
+
const { oKey, left, top, angle } = object;
|
|
1987
|
+
let { width, height } = object;
|
|
1988
|
+
const drawing = this._drawingManagerService.getDrawingOKey(oKey);
|
|
1989
|
+
if (drawing == null) continue;
|
|
1990
|
+
if (unitId == null) unitId = drawing.unitId;
|
|
1991
|
+
if (subUnitId == null) subUnitId = drawing.subUnitId;
|
|
1992
|
+
const drawingCache = this._transformerCache.get(drawing.drawingId);
|
|
1993
|
+
if (drawingCache == null) continue;
|
|
1994
|
+
const { drawing: drawingData, top: oldTop, left: oldLeft, width: oldWidth, height: oldHeight, angle: oldAngle } = drawingCache;
|
|
1995
|
+
const { width: maxWidth, height: maxHeight } = this._getPageContentSize(drawingData);
|
|
1996
|
+
width = Math.min(width, maxWidth);
|
|
1997
|
+
height = Math.min(height, maxHeight);
|
|
1998
|
+
if (oldWidth !== width || oldHeight !== height) drawings.push({
|
|
1999
|
+
drawingId: drawing.drawingId,
|
|
2000
|
+
key: "size",
|
|
2001
|
+
value: {
|
|
2002
|
+
width,
|
|
2003
|
+
height
|
|
2004
|
+
}
|
|
2005
|
+
});
|
|
2006
|
+
if (oldAngle !== angle) drawings.push({
|
|
2007
|
+
drawingId: drawing.drawingId,
|
|
2008
|
+
key: "angle",
|
|
2009
|
+
value: angle
|
|
2010
|
+
});
|
|
2011
|
+
if (oldTop !== top || oldLeft !== left) {
|
|
2012
|
+
const verticalDelta = top - oldTop;
|
|
2013
|
+
const horizontalDelta = left - oldLeft;
|
|
2014
|
+
if (verticalDelta !== 0) drawings.push({
|
|
2015
|
+
drawingId: drawing.drawingId,
|
|
2016
|
+
key: "positionV",
|
|
2017
|
+
value: {
|
|
2018
|
+
relativeFrom: drawingData.docTransform.positionV.relativeFrom,
|
|
2019
|
+
posOffset: drawingData.docTransform.positionV.posOffset + verticalDelta
|
|
2020
|
+
}
|
|
2021
|
+
});
|
|
2022
|
+
if (horizontalDelta !== 0) drawings.push({
|
|
2023
|
+
drawingId: drawing.drawingId,
|
|
2024
|
+
key: "positionH",
|
|
2025
|
+
value: {
|
|
2026
|
+
relativeFrom: drawingData.docTransform.positionH.relativeFrom,
|
|
2027
|
+
posOffset: drawingData.docTransform.positionH.posOffset + horizontalDelta
|
|
2028
|
+
}
|
|
2029
|
+
});
|
|
2030
|
+
}
|
|
2031
|
+
}
|
|
2032
|
+
if (drawings.length > 0 && unitId && subUnitId) this._commandService.executeCommand(UpdateDrawingDocTransformCommand.id, {
|
|
2033
|
+
unitId,
|
|
2034
|
+
subUnitId,
|
|
2035
|
+
drawings
|
|
2036
|
+
});
|
|
2037
|
+
}
|
|
2038
|
+
_updateDrawingAnchor(objects) {
|
|
2039
|
+
if (this._transformerCache.size !== 1) return;
|
|
2040
|
+
const drawingCache = this._transformerCache.values().next().value;
|
|
2041
|
+
const object = objects.values().next().value;
|
|
2042
|
+
this._getDrawingAnchor(drawingCache.drawing, object);
|
|
2043
|
+
}
|
|
2044
|
+
_updateInlineDrawingAnchor(drawing, offsetX, offsetY) {
|
|
2045
|
+
var _this$_getInlineDrawi;
|
|
2046
|
+
if (this._transformerCache.size !== 1) return;
|
|
2047
|
+
const { contentBoxPointGroup } = (_this$_getInlineDrawi = this._getInlineDrawingAnchor(drawing, offsetX, offsetY)) !== null && _this$_getInlineDrawi !== void 0 ? _this$_getInlineDrawi : {};
|
|
2048
|
+
if (contentBoxPointGroup == null) return;
|
|
2049
|
+
this._createOrUpdateInlineAnchor(drawing.unitId, contentBoxPointGroup);
|
|
2050
|
+
}
|
|
2051
|
+
_getInlineDrawingAnchor(drawing, offsetX, offsetY) {
|
|
2052
|
+
var _this$_renderManagerS, _getOneTextSelectionR;
|
|
2053
|
+
const currentRender = this._renderManagerService.getRenderById(drawing.unitId);
|
|
2054
|
+
const skeleton = currentRender === null || currentRender === void 0 ? void 0 : currentRender.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
2055
|
+
if (currentRender == null) return;
|
|
2056
|
+
const { mainComponent, scene } = currentRender;
|
|
2057
|
+
const documentComponent = mainComponent;
|
|
2058
|
+
const activeViewport = scene.getViewports()[0];
|
|
2059
|
+
const { pageLayoutType = _univerjs_engine_render.PageLayoutType.VERTICAL, pageMarginLeft, pageMarginTop } = documentComponent.getOffsetConfig();
|
|
2060
|
+
let glyphAnchor = null;
|
|
2061
|
+
let isBack = false;
|
|
2062
|
+
let segmentPageIndex = -1;
|
|
2063
|
+
let segmentId = "";
|
|
2064
|
+
const HALF = .5;
|
|
2065
|
+
const coord = this._getTransformCoordForDocumentOffset(documentComponent, activeViewport, offsetX, offsetY);
|
|
2066
|
+
if (coord == null) return;
|
|
2067
|
+
const docSelectionRenderService = (_this$_renderManagerS = this._renderManagerService.getRenderById(drawing.unitId)) === null || _this$_renderManagerS === void 0 ? void 0 : _this$_renderManagerS.with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
2068
|
+
if (docSelectionRenderService == null) return;
|
|
2069
|
+
const nodeInfo = skeleton === null || skeleton === void 0 ? void 0 : skeleton.findNodeByCoord(coord, pageLayoutType, pageMarginLeft, pageMarginTop, {
|
|
2070
|
+
strict: false,
|
|
2071
|
+
segmentId: docSelectionRenderService.getSegment(),
|
|
2072
|
+
segmentPage: docSelectionRenderService.getSegmentPage()
|
|
2073
|
+
});
|
|
2074
|
+
if (nodeInfo) {
|
|
2075
|
+
const { node, ratioX, segmentPage, segmentId: nodeSegmentId } = nodeInfo;
|
|
2076
|
+
isBack = ratioX < HALF;
|
|
2077
|
+
glyphAnchor = node;
|
|
2078
|
+
segmentPageIndex = segmentPage;
|
|
2079
|
+
segmentId = nodeSegmentId;
|
|
2080
|
+
}
|
|
2081
|
+
if (glyphAnchor == null) return;
|
|
2082
|
+
const nodePosition = skeleton === null || skeleton === void 0 ? void 0 : skeleton.findPositionByGlyph(glyphAnchor, segmentPageIndex);
|
|
2083
|
+
const docObject = this._getDocObject();
|
|
2084
|
+
if (nodePosition == null || skeleton == null || docObject == null) return;
|
|
2085
|
+
if (isInTableCell(nodePosition)) return;
|
|
2086
|
+
const positionWithIsBack = {
|
|
2087
|
+
...nodePosition,
|
|
2088
|
+
isBack
|
|
2089
|
+
};
|
|
2090
|
+
const { cursorList, contentBoxPointGroup } = new _univerjs_docs_ui.NodePositionConvertToCursor(docObject.document.getOffsetConfig(), skeleton).getRangePointData(positionWithIsBack, positionWithIsBack);
|
|
2091
|
+
const { startOffset } = (_getOneTextSelectionR = (0, _univerjs_docs_ui.getOneTextSelectionRange)(cursorList)) !== null && _getOneTextSelectionR !== void 0 ? _getOneTextSelectionR : {};
|
|
2092
|
+
if (startOffset == null) return;
|
|
2093
|
+
return {
|
|
2094
|
+
offset: startOffset,
|
|
2095
|
+
contentBoxPointGroup,
|
|
2096
|
+
segmentId,
|
|
2097
|
+
segmentPage: segmentPageIndex
|
|
2098
|
+
};
|
|
2099
|
+
}
|
|
2100
|
+
_getDrawingAnchor(drawing, object) {
|
|
2101
|
+
var _this$_renderManagerS2, _glyphAnchor$parent, _column$lines$find, _column$parent, _getOneTextSelectionR2;
|
|
2102
|
+
const currentRender = this._renderManagerService.getRenderById(drawing.unitId);
|
|
2103
|
+
const skeleton = currentRender === null || currentRender === void 0 ? void 0 : currentRender.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
2104
|
+
const skeletonData = skeleton === null || skeleton === void 0 ? void 0 : skeleton.getSkeletonData();
|
|
2105
|
+
if (skeletonData == null || currentRender == null) return;
|
|
2106
|
+
const { pages, skeHeaders, skeFooters } = skeletonData;
|
|
2107
|
+
const { mainComponent, scene } = currentRender;
|
|
2108
|
+
const documentComponent = mainComponent;
|
|
2109
|
+
const activeViewport = scene.getViewports()[0];
|
|
2110
|
+
const { pageLayoutType = _univerjs_engine_render.PageLayoutType.VERTICAL, pageMarginLeft, pageMarginTop, docsLeft, docsTop } = documentComponent.getOffsetConfig();
|
|
2111
|
+
const { left, top, angle } = object;
|
|
2112
|
+
let { width, height } = object;
|
|
2113
|
+
const { positionV, positionH } = drawing.docTransform;
|
|
2114
|
+
const { width: maxWidth, height: maxHeight } = this._getPageContentSize(drawing);
|
|
2115
|
+
width = Math.min(width, maxWidth);
|
|
2116
|
+
height = Math.min(height, maxHeight);
|
|
2117
|
+
let glyphAnchor = null;
|
|
2118
|
+
let segmentId = "";
|
|
2119
|
+
let segmentPage = -1;
|
|
2120
|
+
const isBack = false;
|
|
2121
|
+
const docTransform = {
|
|
2122
|
+
...drawing.docTransform,
|
|
2123
|
+
size: {
|
|
2124
|
+
width,
|
|
2125
|
+
height
|
|
2126
|
+
},
|
|
2127
|
+
angle
|
|
2128
|
+
};
|
|
2129
|
+
const { x, y } = scene.getViewportScrollXY(activeViewport);
|
|
2130
|
+
const coord = this._getTransformCoordForDocumentOffset(documentComponent, activeViewport, left - x, top - y);
|
|
2131
|
+
if (coord == null) return;
|
|
2132
|
+
const docSelectionRenderService = (_this$_renderManagerS2 = this._renderManagerService.getRenderById(drawing.unitId)) === null || _this$_renderManagerS2 === void 0 ? void 0 : _this$_renderManagerS2.with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
2133
|
+
if (docSelectionRenderService == null) return;
|
|
2134
|
+
const nodeInfo = skeleton === null || skeleton === void 0 ? void 0 : skeleton.findNodeByCoord(coord, pageLayoutType, pageMarginLeft, pageMarginTop, {
|
|
2135
|
+
strict: false,
|
|
2136
|
+
segmentId: docSelectionRenderService.getSegment(),
|
|
2137
|
+
segmentPage: docSelectionRenderService.getSegmentPage()
|
|
2138
|
+
});
|
|
2139
|
+
if (nodeInfo) {
|
|
2140
|
+
const { node, segmentPage: segmentPageIndex, segmentId: nodeSegmentId } = nodeInfo;
|
|
2141
|
+
glyphAnchor = node;
|
|
2142
|
+
segmentPage = segmentPageIndex;
|
|
2143
|
+
segmentId = nodeSegmentId;
|
|
2144
|
+
}
|
|
2145
|
+
if (glyphAnchor == null) return;
|
|
2146
|
+
const line = (_glyphAnchor$parent = glyphAnchor.parent) === null || _glyphAnchor$parent === void 0 ? void 0 : _glyphAnchor$parent.parent;
|
|
2147
|
+
const column = line === null || line === void 0 ? void 0 : line.parent;
|
|
2148
|
+
const paragraphStartLine = (_column$lines$find = column === null || column === void 0 ? void 0 : column.lines.find((l) => l.paragraphIndex === (line === null || line === void 0 ? void 0 : line.paragraphIndex) && l.paragraphStart)) !== null && _column$lines$find !== void 0 ? _column$lines$find : column === null || column === void 0 ? void 0 : column.lines[0];
|
|
2149
|
+
const page = column === null || column === void 0 || (_column$parent = column.parent) === null || _column$parent === void 0 ? void 0 : _column$parent.parent;
|
|
2150
|
+
if (line == null || column == null || paragraphStartLine == null || page == null) return;
|
|
2151
|
+
this._liquid.reset();
|
|
2152
|
+
const pageType = page.type;
|
|
2153
|
+
for (const p of pages) {
|
|
2154
|
+
const { headerId, footerId, pageHeight, pageWidth, marginLeft, marginBottom } = p;
|
|
2155
|
+
const pIndex = pages.indexOf(p);
|
|
2156
|
+
if (segmentPage > -1 && pIndex === segmentPage) {
|
|
2157
|
+
switch (pageType) {
|
|
2158
|
+
case _univerjs_engine_render.DocumentSkeletonPageType.HEADER: {
|
|
2159
|
+
var _skeHeaders$get;
|
|
2160
|
+
const headerSke = (_skeHeaders$get = skeHeaders.get(headerId)) === null || _skeHeaders$get === void 0 ? void 0 : _skeHeaders$get.get(pageWidth);
|
|
2161
|
+
if (headerSke) this._liquid.translatePagePadding({
|
|
2162
|
+
marginTop: headerSke.marginTop,
|
|
2163
|
+
marginLeft
|
|
2164
|
+
});
|
|
2165
|
+
else throw new Error("header skeleton not found");
|
|
2166
|
+
break;
|
|
2167
|
+
}
|
|
2168
|
+
case _univerjs_engine_render.DocumentSkeletonPageType.FOOTER: {
|
|
2169
|
+
var _skeFooters$get;
|
|
2170
|
+
const footerSke = (_skeFooters$get = skeFooters.get(footerId)) === null || _skeFooters$get === void 0 ? void 0 : _skeFooters$get.get(pageWidth);
|
|
2171
|
+
if (footerSke) this._liquid.translatePagePadding({
|
|
2172
|
+
marginTop: pageHeight - marginBottom + footerSke.marginTop,
|
|
2173
|
+
marginLeft
|
|
2174
|
+
});
|
|
2175
|
+
else throw new Error("footer skeleton not found");
|
|
2176
|
+
break;
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2179
|
+
break;
|
|
2180
|
+
}
|
|
2181
|
+
this._liquid.translatePagePadding(p);
|
|
2182
|
+
if (p === page) break;
|
|
2183
|
+
this._liquid.restorePagePadding(p);
|
|
2184
|
+
this._liquid.translatePage(p, pageLayoutType, pageMarginLeft, pageMarginTop);
|
|
2185
|
+
}
|
|
2186
|
+
if (positionV.relativeFrom === _univerjs_core.ObjectRelativeFromV.LINE) glyphAnchor = line.divides[0].glyphGroup[0];
|
|
2187
|
+
else {
|
|
2188
|
+
var _paragraphStartLine$d, _paragraphStartLine$d2;
|
|
2189
|
+
glyphAnchor = (_paragraphStartLine$d = (_paragraphStartLine$d2 = paragraphStartLine.divides) === null || _paragraphStartLine$d2 === void 0 || (_paragraphStartLine$d2 = _paragraphStartLine$d2[0]) === null || _paragraphStartLine$d2 === void 0 || (_paragraphStartLine$d2 = _paragraphStartLine$d2.glyphGroup) === null || _paragraphStartLine$d2 === void 0 ? void 0 : _paragraphStartLine$d2[0]) !== null && _paragraphStartLine$d !== void 0 ? _paragraphStartLine$d : glyphAnchor;
|
|
2190
|
+
}
|
|
2191
|
+
docTransform.positionH = {
|
|
2192
|
+
relativeFrom: positionH.relativeFrom,
|
|
2193
|
+
posOffset: left - this._liquid.x - docsLeft
|
|
2194
|
+
};
|
|
2195
|
+
switch (positionH.relativeFrom) {
|
|
2196
|
+
case _univerjs_core.ObjectRelativeFromH.MARGIN:
|
|
2197
|
+
docTransform.positionH.posOffset = left - this._liquid.x - docsLeft - page.marginLeft;
|
|
2198
|
+
break;
|
|
2199
|
+
case _univerjs_core.ObjectRelativeFromH.COLUMN:
|
|
2200
|
+
docTransform.positionH.posOffset = left - this._liquid.x - docsLeft - column.left;
|
|
2201
|
+
break;
|
|
2202
|
+
}
|
|
2203
|
+
docTransform.positionV = {
|
|
2204
|
+
relativeFrom: positionV.relativeFrom,
|
|
2205
|
+
posOffset: top - this._liquid.y - docsTop
|
|
2206
|
+
};
|
|
2207
|
+
switch (positionV.relativeFrom) {
|
|
2208
|
+
case _univerjs_core.ObjectRelativeFromV.PAGE:
|
|
2209
|
+
docTransform.positionV.posOffset = top - this._liquid.y - docsTop - page.marginTop;
|
|
2210
|
+
break;
|
|
2211
|
+
case _univerjs_core.ObjectRelativeFromV.LINE:
|
|
2212
|
+
docTransform.positionV.posOffset = top - this._liquid.y - docsTop - line.top;
|
|
2213
|
+
break;
|
|
2214
|
+
case _univerjs_core.ObjectRelativeFromV.PARAGRAPH:
|
|
2215
|
+
docTransform.positionV.posOffset = top - this._liquid.y - docsTop - paragraphStartLine.top;
|
|
2216
|
+
break;
|
|
2217
|
+
}
|
|
2218
|
+
if (glyphAnchor == null) return;
|
|
2219
|
+
const nodePosition = skeleton === null || skeleton === void 0 ? void 0 : skeleton.findPositionByGlyph(glyphAnchor, segmentPage);
|
|
2220
|
+
const docObject = this._getDocObject();
|
|
2221
|
+
if (nodePosition == null || skeleton == null || docObject == null) return;
|
|
2222
|
+
if (isInTableCell(nodePosition)) return;
|
|
2223
|
+
const positionWithIsBack = {
|
|
2224
|
+
...nodePosition,
|
|
2225
|
+
isBack
|
|
2226
|
+
};
|
|
2227
|
+
const { cursorList } = new _univerjs_docs_ui.NodePositionConvertToCursor(docObject.document.getOffsetConfig(), skeleton).getRangePointData(positionWithIsBack, positionWithIsBack);
|
|
2228
|
+
const { startOffset } = (_getOneTextSelectionR2 = (0, _univerjs_docs_ui.getOneTextSelectionRange)(cursorList)) !== null && _getOneTextSelectionR2 !== void 0 ? _getOneTextSelectionR2 : {};
|
|
2229
|
+
if (startOffset == null) return;
|
|
2230
|
+
return {
|
|
2231
|
+
offset: startOffset,
|
|
2232
|
+
docTransform,
|
|
2233
|
+
segmentId,
|
|
2234
|
+
segmentPage
|
|
2235
|
+
};
|
|
2236
|
+
}
|
|
2237
|
+
_updateDrawingSize(drawingCache, object) {
|
|
2238
|
+
const drawings = [];
|
|
2239
|
+
const { drawing, width: oldWidth, height: oldHeight, angle: oldAngle } = drawingCache;
|
|
2240
|
+
const { unitId, subUnitId } = drawing;
|
|
2241
|
+
let { width, height, angle } = object;
|
|
2242
|
+
const { width: maxWidth, height: maxHeight } = this._getPageContentSize(drawing);
|
|
2243
|
+
width = Math.min(maxWidth, width);
|
|
2244
|
+
height = Math.min(maxHeight, height);
|
|
2245
|
+
if (width !== oldWidth || height !== oldHeight) drawings.push({
|
|
2246
|
+
drawingId: drawing.drawingId,
|
|
2247
|
+
key: "size",
|
|
2248
|
+
value: {
|
|
2249
|
+
width,
|
|
2250
|
+
height
|
|
2251
|
+
}
|
|
2252
|
+
});
|
|
2253
|
+
if (angle !== oldAngle) drawings.push({
|
|
2254
|
+
drawingId: drawing.drawingId,
|
|
2255
|
+
key: "angle",
|
|
2256
|
+
value: angle
|
|
2257
|
+
});
|
|
2258
|
+
if (drawings.length > 0 && unitId && subUnitId) this._commandService.executeCommand(UpdateDrawingDocTransformCommand.id, {
|
|
2259
|
+
unitId,
|
|
2260
|
+
subUnitId,
|
|
2261
|
+
drawings
|
|
2262
|
+
});
|
|
2263
|
+
}
|
|
2264
|
+
_moveInlineDrawing(drawing, offsetX, offsetY) {
|
|
2265
|
+
const anchor = this._getInlineDrawingAnchor(drawing, offsetX, offsetY);
|
|
2266
|
+
const { offset, segmentId, segmentPage } = anchor !== null && anchor !== void 0 ? anchor : {};
|
|
2267
|
+
return this._commandService.executeCommand(IMoveInlineDrawingCommand.id, {
|
|
2268
|
+
unitId: drawing.unitId,
|
|
2269
|
+
subUnitId: drawing.unitId,
|
|
2270
|
+
drawing,
|
|
2271
|
+
offset,
|
|
2272
|
+
segmentId,
|
|
2273
|
+
segmentPage,
|
|
2274
|
+
needRefreshDrawings: offset == null
|
|
2275
|
+
});
|
|
2276
|
+
}
|
|
2277
|
+
_limitDrawingInPage(drawing, object) {
|
|
2278
|
+
const currentRender = this._renderManagerService.getRenderById(drawing.unitId);
|
|
2279
|
+
const { left, top, width, height, angle } = object;
|
|
2280
|
+
const skeleton = currentRender === null || currentRender === void 0 ? void 0 : currentRender.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
2281
|
+
const skeletonData = skeleton === null || skeleton === void 0 ? void 0 : skeleton.getSkeletonData();
|
|
2282
|
+
const { pages } = skeletonData !== null && skeletonData !== void 0 ? skeletonData : {};
|
|
2283
|
+
if (skeletonData == null || currentRender == null || pages == null) return {
|
|
2284
|
+
left,
|
|
2285
|
+
top,
|
|
2286
|
+
width,
|
|
2287
|
+
height,
|
|
2288
|
+
angle
|
|
2289
|
+
};
|
|
2290
|
+
const { mainComponent } = currentRender;
|
|
2291
|
+
const { top: docsTop, pageLayoutType, pageMarginLeft, pageMarginTop } = mainComponent;
|
|
2292
|
+
let newTop = top;
|
|
2293
|
+
this._liquid.reset();
|
|
2294
|
+
for (const page of pages) {
|
|
2295
|
+
const { marginBottom, pageHeight } = page;
|
|
2296
|
+
const nextPage = pages[pages.indexOf(page) + 1];
|
|
2297
|
+
if (nextPage == null) continue;
|
|
2298
|
+
if (_univerjs_core.Tools.hasIntersectionBetweenTwoRanges(top, top + height, this._liquid.y + docsTop + pageHeight - marginBottom, this._liquid.y + docsTop + pageHeight + pageMarginTop + nextPage.marginTop)) if (top + height / 2 < this._liquid.y + docsTop + pageHeight + pageMarginTop / 2) newTop = Math.min(top, this._liquid.y + docsTop + pageHeight - marginBottom - height);
|
|
2299
|
+
else newTop = Math.max(top, this._liquid.y + docsTop + pageHeight + pageMarginTop + nextPage.marginTop);
|
|
2300
|
+
this._liquid.translatePage(page, pageLayoutType, pageMarginLeft, pageMarginTop);
|
|
2301
|
+
}
|
|
2302
|
+
return {
|
|
2303
|
+
left,
|
|
2304
|
+
top: newTop,
|
|
2305
|
+
width,
|
|
2306
|
+
height,
|
|
2307
|
+
angle
|
|
2308
|
+
};
|
|
2309
|
+
}
|
|
2310
|
+
_nonInlineDrawingTransform(drawing, object, isMoving = false) {
|
|
2311
|
+
const objectPosition = drawing.isMultiTransform === _univerjs_core.BooleanNumber.TRUE ? object : this._limitDrawingInPage(drawing, object);
|
|
2312
|
+
if (isMoving && objectPosition.top !== object.top) return;
|
|
2313
|
+
const anchor = this._getDrawingAnchor(drawing, objectPosition);
|
|
2314
|
+
const { offset, docTransform, segmentId, segmentPage } = anchor !== null && anchor !== void 0 ? anchor : {};
|
|
2315
|
+
if (offset == null || docTransform == null) return this._updateMultipleDrawingDocTransform(new Map([[drawing.drawingId, object]]));
|
|
2316
|
+
return this._commandService.executeCommand(ITransformNonInlineDrawingCommand.id, {
|
|
2317
|
+
unitId: drawing.unitId,
|
|
2318
|
+
subUnitId: drawing.unitId,
|
|
2319
|
+
drawing,
|
|
2320
|
+
offset,
|
|
2321
|
+
docTransform,
|
|
2322
|
+
segmentId,
|
|
2323
|
+
segmentPage
|
|
2324
|
+
});
|
|
2325
|
+
}
|
|
2326
|
+
_getSceneAndTransformerByDrawingSearch(unitId) {
|
|
2327
|
+
if (unitId == null) return;
|
|
2328
|
+
const renderObject = this._renderManagerService.getRenderById(unitId);
|
|
2329
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
2330
|
+
if (scene == null) return;
|
|
2331
|
+
return {
|
|
2332
|
+
scene,
|
|
2333
|
+
transformer: scene.getTransformerByCreate()
|
|
2334
|
+
};
|
|
2335
|
+
}
|
|
2336
|
+
_getTransformCoordForDocumentOffset(document, viewport, evtOffsetX, evtOffsetY) {
|
|
2337
|
+
const { documentTransform } = document.getOffsetConfig();
|
|
2338
|
+
const originCoord = viewport.transformVector2SceneCoord(_univerjs_engine_render.Vector2.FromArray([evtOffsetX, evtOffsetY]));
|
|
2339
|
+
if (!originCoord) return;
|
|
2340
|
+
return documentTransform.clone().invert().applyPoint(originCoord);
|
|
2341
|
+
}
|
|
2342
|
+
_createOrUpdateInlineAnchor(unitId, pointsGroup) {
|
|
2343
|
+
const currentRender = this._renderManagerService.getRenderById(unitId);
|
|
2344
|
+
if (currentRender == null) return;
|
|
2345
|
+
const { mainComponent, scene } = currentRender;
|
|
2346
|
+
const { docsLeft, docsTop } = mainComponent.getOffsetConfig();
|
|
2347
|
+
const { left: boundingLeft, top: boundingTop, height } = (0, _univerjs_docs_ui.getAnchorBounding)(pointsGroup);
|
|
2348
|
+
const left = boundingLeft + docsLeft;
|
|
2349
|
+
const top = boundingTop + docsTop;
|
|
2350
|
+
if (this._anchorShape) {
|
|
2351
|
+
this._anchorShape.transformByState({
|
|
2352
|
+
left,
|
|
2353
|
+
top,
|
|
2354
|
+
height
|
|
2355
|
+
});
|
|
2356
|
+
this._anchorShape.show();
|
|
2357
|
+
return;
|
|
2358
|
+
}
|
|
2359
|
+
const anchor = new _univerjs_engine_render.Rect(INLINE_DRAWING_ANCHOR_KEY_PREFIX + (0, _univerjs_core.generateRandomId)(6), {
|
|
2360
|
+
left,
|
|
2361
|
+
top,
|
|
2362
|
+
height,
|
|
2363
|
+
strokeWidth: 2,
|
|
2364
|
+
stroke: (0, _univerjs_engine_render.getColor)(_univerjs_core.COLORS.darkgray, 1),
|
|
2365
|
+
evented: false
|
|
2366
|
+
});
|
|
2367
|
+
this._anchorShape = anchor;
|
|
2368
|
+
scene.addObject(anchor, _univerjs_docs_ui.TEXT_RANGE_LAYER_INDEX);
|
|
2369
|
+
}
|
|
2370
|
+
_getDocObject() {
|
|
2371
|
+
return (0, _univerjs_docs_ui.getDocObject)(this._univerInstanceService, this._renderManagerService);
|
|
2372
|
+
}
|
|
2373
|
+
_getPageContentSize(drawing) {
|
|
2374
|
+
const currentRender = this._renderManagerService.getRenderById(drawing.unitId);
|
|
2375
|
+
const skeleton = currentRender === null || currentRender === void 0 ? void 0 : currentRender.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
2376
|
+
const MAX_WIDTH = 500;
|
|
2377
|
+
const MAX_HEIGHT = 500;
|
|
2378
|
+
const skeletonData = skeleton === null || skeleton === void 0 ? void 0 : skeleton.getSkeletonData();
|
|
2379
|
+
if (skeletonData == null || currentRender == null) return {
|
|
2380
|
+
width: MAX_WIDTH,
|
|
2381
|
+
height: MAX_HEIGHT
|
|
2382
|
+
};
|
|
2383
|
+
const { pages } = skeletonData;
|
|
2384
|
+
let page = null;
|
|
2385
|
+
for (const p of pages) {
|
|
2386
|
+
const { skeDrawings } = p;
|
|
2387
|
+
if (skeDrawings.has(drawing.drawingId)) {
|
|
2388
|
+
page = p;
|
|
2389
|
+
break;
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2392
|
+
if (page) {
|
|
2393
|
+
const { pageWidth, pageHeight, marginLeft, marginBottom, marginRight, marginTop } = page;
|
|
2394
|
+
return {
|
|
2395
|
+
width: Math.max(MAX_WIDTH, pageWidth - marginLeft - marginRight),
|
|
2396
|
+
height: Math.max(MAX_HEIGHT, pageHeight - marginTop - marginBottom)
|
|
2397
|
+
};
|
|
2398
|
+
} else return {
|
|
2399
|
+
width: MAX_WIDTH,
|
|
2400
|
+
height: MAX_HEIGHT
|
|
2401
|
+
};
|
|
2402
|
+
}
|
|
2403
|
+
};
|
|
2404
|
+
DocDrawingTransformerController = __decorate([
|
|
2405
|
+
__decorateParam(0, _univerjs_core.ICommandService),
|
|
2406
|
+
__decorateParam(1, _univerjs_core.IUniverInstanceService),
|
|
2407
|
+
__decorateParam(2, _univerjs_drawing.IDrawingManagerService),
|
|
2408
|
+
__decorateParam(3, _univerjs_engine_render.IRenderManagerService)
|
|
2409
|
+
], DocDrawingTransformerController);
|
|
2410
|
+
|
|
2411
|
+
//#endregion
|
|
2412
|
+
//#region src/menu/schema.ts
|
|
2413
|
+
const menuSchema = { [_univerjs_ui.RibbonInsertGroup.MEDIA]: { [DOCS_IMAGE_MENU_ID]: {
|
|
2414
|
+
order: 0,
|
|
2415
|
+
menuItemFactory: ImageMenuFactory,
|
|
2416
|
+
[IMAGE_MENU_UPLOAD_FLOAT_ID]: {
|
|
2417
|
+
order: 0,
|
|
2418
|
+
menuItemFactory: UploadFloatImageMenuFactory
|
|
2419
|
+
}
|
|
2420
|
+
} } };
|
|
2421
|
+
|
|
2422
|
+
//#endregion
|
|
2423
|
+
//#region src/views/doc-image-panel/DocDrawingPosition.tsx
|
|
2424
|
+
const MIN_OFFSET = -1e3;
|
|
2425
|
+
const MAX_OFFSET = 1e3;
|
|
2426
|
+
const DocDrawingPosition = (props) => {
|
|
2427
|
+
const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
|
|
2428
|
+
const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
|
|
2429
|
+
const drawingManagerService = (0, _univerjs_ui.useDependency)(_univerjs_drawing.IDrawingManagerService);
|
|
2430
|
+
const renderManagerService = (0, _univerjs_ui.useDependency)(_univerjs_engine_render.IRenderManagerService);
|
|
2431
|
+
const univerInstanceService = (0, _univerjs_ui.useDependency)(_univerjs_core.IUniverInstanceService);
|
|
2432
|
+
const { drawings } = props;
|
|
2433
|
+
const drawingParam = drawings[0];
|
|
2434
|
+
if (drawingParam == null) return;
|
|
2435
|
+
const { unitId } = drawingParam;
|
|
2436
|
+
const documentDataModel = univerInstanceService.getUniverDocInstance(unitId);
|
|
2437
|
+
const documentFlavor = documentDataModel === null || documentDataModel === void 0 ? void 0 : documentDataModel.getSnapshot().documentStyle.documentFlavor;
|
|
2438
|
+
const renderObject = renderManagerService.getRenderById(unitId);
|
|
2439
|
+
const scene = renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene;
|
|
2440
|
+
if (scene == null) return;
|
|
2441
|
+
const transformer = scene.getTransformerByCreate();
|
|
2442
|
+
const HORIZONTAL_RELATIVE_FROM = [
|
|
2443
|
+
{
|
|
2444
|
+
label: localeService.t("image-position.column"),
|
|
2445
|
+
value: String(_univerjs_core.ObjectRelativeFromH.COLUMN)
|
|
2446
|
+
},
|
|
2447
|
+
{
|
|
2448
|
+
label: localeService.t("image-position.page"),
|
|
2449
|
+
value: String(_univerjs_core.ObjectRelativeFromH.PAGE)
|
|
2450
|
+
},
|
|
2451
|
+
{
|
|
2452
|
+
label: localeService.t("image-position.margin"),
|
|
2453
|
+
value: String(_univerjs_core.ObjectRelativeFromH.MARGIN)
|
|
2454
|
+
}
|
|
2455
|
+
];
|
|
2456
|
+
const VERTICAL_RELATIVE_FROM = [
|
|
2457
|
+
{
|
|
2458
|
+
label: localeService.t("image-position.line"),
|
|
2459
|
+
value: String(_univerjs_core.ObjectRelativeFromV.LINE),
|
|
2460
|
+
disabled: documentFlavor === _univerjs_core.DocumentFlavor.MODERN
|
|
2461
|
+
},
|
|
2462
|
+
{
|
|
2463
|
+
label: localeService.t("image-position.page"),
|
|
2464
|
+
value: String(_univerjs_core.ObjectRelativeFromV.PAGE),
|
|
2465
|
+
disabled: documentFlavor === _univerjs_core.DocumentFlavor.MODERN
|
|
2466
|
+
},
|
|
2467
|
+
{
|
|
2468
|
+
label: localeService.t("image-position.margin"),
|
|
2469
|
+
value: String(_univerjs_core.ObjectRelativeFromV.MARGIN),
|
|
2470
|
+
disabled: documentFlavor === _univerjs_core.DocumentFlavor.MODERN
|
|
2471
|
+
},
|
|
2472
|
+
{
|
|
2473
|
+
label: localeService.t("image-position.paragraph"),
|
|
2474
|
+
value: String(_univerjs_core.ObjectRelativeFromV.PARAGRAPH)
|
|
2475
|
+
}
|
|
2476
|
+
];
|
|
2477
|
+
const [disabled, setDisabled] = (0, react.useState)(true);
|
|
2478
|
+
const [hPosition, setHPosition] = (0, react.useState)({
|
|
2479
|
+
relativeFrom: _univerjs_core.ObjectRelativeFromH.PAGE,
|
|
2480
|
+
posOffset: 0
|
|
2481
|
+
});
|
|
2482
|
+
const [vPosition, setVPosition] = (0, react.useState)({
|
|
2483
|
+
relativeFrom: _univerjs_core.ObjectRelativeFromV.PAGE,
|
|
2484
|
+
posOffset: 0
|
|
2485
|
+
});
|
|
2486
|
+
const [followTextMove, setFollowTextMove] = (0, react.useState)(true);
|
|
2487
|
+
const [showPanel, setShowPanel] = (0, react.useState)(true);
|
|
2488
|
+
function handlePositionChange(direction, value) {
|
|
2489
|
+
var _renderManagerService;
|
|
2490
|
+
if (direction === "positionH") setHPosition(value);
|
|
2491
|
+
else setVPosition(value);
|
|
2492
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2493
|
+
if (focusDrawings.length === 0) return;
|
|
2494
|
+
const drawings = focusDrawings.map((drawing) => {
|
|
2495
|
+
return {
|
|
2496
|
+
unitId: drawing.unitId,
|
|
2497
|
+
subUnitId: drawing.subUnitId,
|
|
2498
|
+
drawingId: drawing.drawingId
|
|
2499
|
+
};
|
|
2500
|
+
});
|
|
2501
|
+
commandService.executeCommand(UpdateDrawingDocTransformCommand.id, {
|
|
2502
|
+
unitId: focusDrawings[0].unitId,
|
|
2503
|
+
subUnitId: focusDrawings[0].unitId,
|
|
2504
|
+
drawings: drawings.map((drawing) => ({
|
|
2505
|
+
drawingId: drawing.drawingId,
|
|
2506
|
+
key: direction,
|
|
2507
|
+
value
|
|
2508
|
+
}))
|
|
2509
|
+
});
|
|
2510
|
+
const docSelectionRenderService = (_renderManagerService = renderManagerService.getRenderById(unitId)) === null || _renderManagerService === void 0 ? void 0 : _renderManagerService.with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
2511
|
+
if (docSelectionRenderService) docSelectionRenderService.blur();
|
|
2512
|
+
transformer.refreshControls();
|
|
2513
|
+
}
|
|
2514
|
+
function handleHorizontalRelativeFromChange(value) {
|
|
2515
|
+
var _renderManagerService2;
|
|
2516
|
+
const prevRelativeFrom = hPosition.relativeFrom;
|
|
2517
|
+
const prevPosOffset = hPosition.posOffset;
|
|
2518
|
+
const relativeFrom = Number(value);
|
|
2519
|
+
if (prevRelativeFrom === relativeFrom) return;
|
|
2520
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2521
|
+
if (focusDrawings.length === 0) return;
|
|
2522
|
+
const drawingId = focusDrawings[0].drawingId;
|
|
2523
|
+
const unitId = focusDrawings[0].unitId;
|
|
2524
|
+
let drawing = null;
|
|
2525
|
+
let pageMarginLeft = 0;
|
|
2526
|
+
const skeleton = (_renderManagerService2 = renderManagerService.getRenderById(unitId)) === null || _renderManagerService2 === void 0 ? void 0 : _renderManagerService2.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
2527
|
+
const skeletonData = skeleton === null || skeleton === void 0 ? void 0 : skeleton.getSkeletonData();
|
|
2528
|
+
if (skeletonData == null) return;
|
|
2529
|
+
const { pages, skeHeaders, skeFooters } = skeletonData;
|
|
2530
|
+
for (const page of pages) {
|
|
2531
|
+
var _skeHeaders$get, _skeFooters$get;
|
|
2532
|
+
const { marginLeft, skeDrawings, headerId, footerId, pageWidth } = page;
|
|
2533
|
+
if (skeDrawings.has(drawingId)) {
|
|
2534
|
+
drawing = skeDrawings.get(drawingId);
|
|
2535
|
+
pageMarginLeft = marginLeft;
|
|
2536
|
+
break;
|
|
2537
|
+
}
|
|
2538
|
+
const headerPage = (_skeHeaders$get = skeHeaders.get(headerId)) === null || _skeHeaders$get === void 0 ? void 0 : _skeHeaders$get.get(pageWidth);
|
|
2539
|
+
if (headerPage === null || headerPage === void 0 ? void 0 : headerPage.skeDrawings.has(drawingId)) {
|
|
2540
|
+
drawing = headerPage === null || headerPage === void 0 ? void 0 : headerPage.skeDrawings.get(drawingId);
|
|
2541
|
+
pageMarginLeft = marginLeft;
|
|
2542
|
+
break;
|
|
2543
|
+
}
|
|
2544
|
+
const footerPage = (_skeFooters$get = skeFooters.get(footerId)) === null || _skeFooters$get === void 0 ? void 0 : _skeFooters$get.get(pageWidth);
|
|
2545
|
+
if (footerPage === null || footerPage === void 0 ? void 0 : footerPage.skeDrawings.has(drawingId)) {
|
|
2546
|
+
drawing = footerPage === null || footerPage === void 0 ? void 0 : footerPage.skeDrawings.get(drawingId);
|
|
2547
|
+
pageMarginLeft = marginLeft;
|
|
2548
|
+
break;
|
|
2549
|
+
}
|
|
2550
|
+
}
|
|
2551
|
+
if (drawing == null) return;
|
|
2552
|
+
let delta = 0;
|
|
2553
|
+
if (prevRelativeFrom === _univerjs_core.ObjectRelativeFromH.COLUMN) delta -= drawing.columnLeft;
|
|
2554
|
+
else if (prevRelativeFrom === _univerjs_core.ObjectRelativeFromH.MARGIN) delta -= pageMarginLeft;
|
|
2555
|
+
if (relativeFrom === _univerjs_core.ObjectRelativeFromH.COLUMN) delta += drawing.columnLeft;
|
|
2556
|
+
else if (relativeFrom === _univerjs_core.ObjectRelativeFromH.MARGIN) delta += pageMarginLeft;
|
|
2557
|
+
else if (relativeFrom === _univerjs_core.ObjectRelativeFromH.PAGE) {}
|
|
2558
|
+
handlePositionChange("positionH", {
|
|
2559
|
+
relativeFrom,
|
|
2560
|
+
posOffset: (prevPosOffset !== null && prevPosOffset !== void 0 ? prevPosOffset : 0) - delta
|
|
2561
|
+
});
|
|
2562
|
+
}
|
|
2563
|
+
function handleVerticalRelativeFromChange(value) {
|
|
2564
|
+
var _renderManagerService3, _renderManagerService4, _documentDataModel$ge, _glyph$parent, _column$parent;
|
|
2565
|
+
const prevRelativeFrom = vPosition.relativeFrom;
|
|
2566
|
+
const prevPosOffset = vPosition.posOffset;
|
|
2567
|
+
const relativeFrom = Number(value);
|
|
2568
|
+
if (prevRelativeFrom === relativeFrom) return;
|
|
2569
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2570
|
+
if (focusDrawings.length === 0) return;
|
|
2571
|
+
const { drawingId, unitId } = focusDrawings[0];
|
|
2572
|
+
const documentDataModel = univerInstanceService.getUniverDocInstance(unitId);
|
|
2573
|
+
const skeleton = (_renderManagerService3 = renderManagerService.getRenderById(unitId)) === null || _renderManagerService3 === void 0 ? void 0 : _renderManagerService3.with(_univerjs_docs.DocSkeletonManagerService).getSkeleton();
|
|
2574
|
+
const docSelectionRenderService = (_renderManagerService4 = renderManagerService.getRenderById(unitId)) === null || _renderManagerService4 === void 0 ? void 0 : _renderManagerService4.with(_univerjs_docs_ui.DocSelectionRenderService);
|
|
2575
|
+
const segmentId = docSelectionRenderService === null || docSelectionRenderService === void 0 ? void 0 : docSelectionRenderService.getSegment();
|
|
2576
|
+
const segmentPage = docSelectionRenderService === null || docSelectionRenderService === void 0 ? void 0 : docSelectionRenderService.getSegmentPage();
|
|
2577
|
+
const drawing = documentDataModel === null || documentDataModel === void 0 || (_documentDataModel$ge = documentDataModel.getSelfOrHeaderFooterModel(segmentId).getBody()) === null || _documentDataModel$ge === void 0 || (_documentDataModel$ge = _documentDataModel$ge.customBlocks) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge.find((c) => c.blockId === drawingId);
|
|
2578
|
+
if (drawing == null || skeleton == null || docSelectionRenderService == null) return;
|
|
2579
|
+
const { startIndex } = drawing;
|
|
2580
|
+
const glyph = skeleton.findNodeByCharIndex(startIndex, segmentId, segmentPage);
|
|
2581
|
+
const line = glyph === null || glyph === void 0 || (_glyph$parent = glyph.parent) === null || _glyph$parent === void 0 ? void 0 : _glyph$parent.parent;
|
|
2582
|
+
const column = line === null || line === void 0 ? void 0 : line.parent;
|
|
2583
|
+
const paragraphStartLine = column === null || column === void 0 ? void 0 : column.lines.find((l) => l.paragraphIndex === (line === null || line === void 0 ? void 0 : line.paragraphIndex) && l.paragraphStart);
|
|
2584
|
+
const page = column === null || column === void 0 || (_column$parent = column.parent) === null || _column$parent === void 0 ? void 0 : _column$parent.parent;
|
|
2585
|
+
if (glyph == null || line == null || paragraphStartLine == null || column == null || page == null) return;
|
|
2586
|
+
let delta = 0;
|
|
2587
|
+
if (prevRelativeFrom === _univerjs_core.ObjectRelativeFromV.PARAGRAPH) delta -= paragraphStartLine.top;
|
|
2588
|
+
else if (prevRelativeFrom === _univerjs_core.ObjectRelativeFromV.LINE) delta -= line.top;
|
|
2589
|
+
else if (prevRelativeFrom === _univerjs_core.ObjectRelativeFromV.PAGE) delta += page.marginTop;
|
|
2590
|
+
if (relativeFrom === _univerjs_core.ObjectRelativeFromV.PARAGRAPH) delta += paragraphStartLine.top;
|
|
2591
|
+
else if (relativeFrom === _univerjs_core.ObjectRelativeFromV.LINE) delta += line.top;
|
|
2592
|
+
else if (relativeFrom === _univerjs_core.ObjectRelativeFromV.PAGE) delta -= page.marginTop;
|
|
2593
|
+
handlePositionChange("positionV", {
|
|
2594
|
+
relativeFrom,
|
|
2595
|
+
posOffset: (prevPosOffset !== null && prevPosOffset !== void 0 ? prevPosOffset : 0) - delta
|
|
2596
|
+
});
|
|
2597
|
+
}
|
|
2598
|
+
function updateState(drawingParam) {
|
|
2599
|
+
var _snapshot$drawings;
|
|
2600
|
+
const snapshot = documentDataModel === null || documentDataModel === void 0 ? void 0 : documentDataModel.getSnapshot();
|
|
2601
|
+
const drawing = snapshot === null || snapshot === void 0 || (_snapshot$drawings = snapshot.drawings) === null || _snapshot$drawings === void 0 ? void 0 : _snapshot$drawings[drawingParam.drawingId];
|
|
2602
|
+
if (drawing == null) return;
|
|
2603
|
+
const { layoutType } = drawing;
|
|
2604
|
+
const { positionH, positionV } = drawing.docTransform;
|
|
2605
|
+
setHPosition(positionH);
|
|
2606
|
+
setVPosition(positionV);
|
|
2607
|
+
setDisabled(layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE);
|
|
2608
|
+
setFollowTextMove(positionV.relativeFrom === _univerjs_core.ObjectRelativeFromV.PARAGRAPH || positionV.relativeFrom === _univerjs_core.ObjectRelativeFromV.LINE);
|
|
2609
|
+
}
|
|
2610
|
+
function updateFocusDrawingState() {
|
|
2611
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2612
|
+
if (focusDrawings.length === 0) return;
|
|
2613
|
+
updateState(focusDrawings[0]);
|
|
2614
|
+
}
|
|
2615
|
+
function handleFollowTextMoveCheck(val) {
|
|
2616
|
+
setFollowTextMove(val);
|
|
2617
|
+
handleVerticalRelativeFromChange(val ? String(_univerjs_core.ObjectRelativeFromV.PARAGRAPH) : String(_univerjs_core.ObjectRelativeFromV.PAGE));
|
|
2618
|
+
}
|
|
2619
|
+
(0, react.useEffect)(() => {
|
|
2620
|
+
updateFocusDrawingState();
|
|
2621
|
+
const subscription = drawingManagerService.focus$.subscribe((drawingParams) => {
|
|
2622
|
+
if (drawingParams.length === 0) {
|
|
2623
|
+
setShowPanel(false);
|
|
2624
|
+
return;
|
|
2625
|
+
}
|
|
2626
|
+
setShowPanel(true);
|
|
2627
|
+
updateState(drawingParams[0]);
|
|
2628
|
+
});
|
|
2629
|
+
const mutationListener = commandService.onCommandExecuted(async (command) => {
|
|
2630
|
+
if (command.id === _univerjs_docs.RichTextEditingMutation.id) updateFocusDrawingState();
|
|
2631
|
+
});
|
|
2632
|
+
return () => {
|
|
2633
|
+
subscription.unsubscribe();
|
|
2634
|
+
mutationListener.dispose();
|
|
2635
|
+
};
|
|
2636
|
+
}, []);
|
|
2637
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2638
|
+
className: (0, _univerjs_design.clsx)("univer-grid univer-gap-2 univer-py-2 univer-text-gray-400", { "univer-hidden": !showPanel }),
|
|
2639
|
+
children: [
|
|
2640
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
|
|
2641
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2642
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-position.title") })
|
|
2643
|
+
}),
|
|
2644
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2645
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2646
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-position.horizontal") })
|
|
2647
|
+
}),
|
|
2648
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2649
|
+
className: "univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2",
|
|
2650
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-position.absolutePosition") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.InputNumber, {
|
|
2651
|
+
min: MIN_OFFSET,
|
|
2652
|
+
max: MAX_OFFSET,
|
|
2653
|
+
precision: 1,
|
|
2654
|
+
disabled,
|
|
2655
|
+
value: hPosition.posOffset,
|
|
2656
|
+
onChange: (val) => {
|
|
2657
|
+
handlePositionChange("positionH", {
|
|
2658
|
+
relativeFrom: hPosition.relativeFrom,
|
|
2659
|
+
posOffset: val
|
|
2660
|
+
});
|
|
2661
|
+
}
|
|
2662
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-position.toTheRightOf") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Select, {
|
|
2663
|
+
value: String(hPosition.relativeFrom),
|
|
2664
|
+
disabled,
|
|
2665
|
+
options: HORIZONTAL_RELATIVE_FROM,
|
|
2666
|
+
onChange: handleHorizontalRelativeFromChange
|
|
2667
|
+
})] })]
|
|
2668
|
+
}),
|
|
2669
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2670
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2671
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-position.vertical") })
|
|
2672
|
+
}),
|
|
2673
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2674
|
+
className: "univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2",
|
|
2675
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-position.absolutePosition") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.InputNumber, {
|
|
2676
|
+
min: MIN_OFFSET,
|
|
2677
|
+
max: MAX_OFFSET,
|
|
2678
|
+
precision: 1,
|
|
2679
|
+
disabled,
|
|
2680
|
+
value: vPosition.posOffset,
|
|
2681
|
+
onChange: (val) => {
|
|
2682
|
+
handlePositionChange("positionV", {
|
|
2683
|
+
relativeFrom: vPosition.relativeFrom,
|
|
2684
|
+
posOffset: val
|
|
2685
|
+
});
|
|
2686
|
+
}
|
|
2687
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-position.bellow") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Select, {
|
|
2688
|
+
disabled,
|
|
2689
|
+
value: String(vPosition.relativeFrom),
|
|
2690
|
+
options: VERTICAL_RELATIVE_FROM,
|
|
2691
|
+
onChange: handleVerticalRelativeFromChange
|
|
2692
|
+
})] })]
|
|
2693
|
+
}),
|
|
2694
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2695
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2696
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-position.options") })
|
|
2697
|
+
}),
|
|
2698
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Checkbox, {
|
|
2699
|
+
disabled,
|
|
2700
|
+
checked: followTextMove,
|
|
2701
|
+
onChange: handleFollowTextMoveCheck,
|
|
2702
|
+
children: localeService.t("image-position.moveObjectWithText")
|
|
2703
|
+
}) })
|
|
2704
|
+
]
|
|
2705
|
+
});
|
|
2706
|
+
};
|
|
2707
|
+
|
|
2708
|
+
//#endregion
|
|
2709
|
+
//#region src/views/doc-image-panel/DocDrawingTextWrap.tsx
|
|
2710
|
+
const MIN_MARGIN = 0;
|
|
2711
|
+
const MAX_MARGIN = 100;
|
|
2712
|
+
const DocDrawingTextWrap = (props) => {
|
|
2713
|
+
const commandService = (0, _univerjs_ui.useDependency)(_univerjs_core.ICommandService);
|
|
2714
|
+
const localeService = (0, _univerjs_ui.useDependency)(_univerjs_core.LocaleService);
|
|
2715
|
+
const drawingManagerService = (0, _univerjs_ui.useDependency)(_univerjs_drawing.IDrawingManagerService);
|
|
2716
|
+
const renderManagerService = (0, _univerjs_ui.useDependency)(_univerjs_engine_render.IRenderManagerService);
|
|
2717
|
+
const univerInstanceService = (0, _univerjs_ui.useDependency)(_univerjs_core.IUniverInstanceService);
|
|
2718
|
+
const { drawings } = props;
|
|
2719
|
+
const drawingParam = drawings[0];
|
|
2720
|
+
if (drawingParam == null) return null;
|
|
2721
|
+
const { unitId } = drawingParam;
|
|
2722
|
+
const documentDataModel = univerInstanceService.getUniverDocInstance(unitId);
|
|
2723
|
+
const renderObject = renderManagerService.getRenderById(unitId);
|
|
2724
|
+
if ((renderObject === null || renderObject === void 0 ? void 0 : renderObject.scene) == null) return null;
|
|
2725
|
+
const [disableWrapText, setDisableWrapText] = (0, react.useState)(true);
|
|
2726
|
+
const [disableDistTB, setDisableDistTB] = (0, react.useState)(true);
|
|
2727
|
+
const [disableDistLR, setDisableDistLR] = (0, react.useState)(true);
|
|
2728
|
+
const [wrappingStyle, setWrappingStyle] = (0, react.useState)(TextWrappingStyle.INLINE);
|
|
2729
|
+
const [wrapText, setWrapText] = (0, react.useState)("");
|
|
2730
|
+
const [distToText, setDistToText] = (0, react.useState)({
|
|
2731
|
+
distT: 0,
|
|
2732
|
+
distL: 0,
|
|
2733
|
+
distB: 0,
|
|
2734
|
+
distR: 0
|
|
2735
|
+
});
|
|
2736
|
+
const [showPanel, setShowPanel] = (0, react.useState)(true);
|
|
2737
|
+
function handleWrappingStyleChange(value) {
|
|
2738
|
+
setWrappingStyle(value);
|
|
2739
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2740
|
+
if (focusDrawings.length === 0) return;
|
|
2741
|
+
const { unitId, subUnitId } = focusDrawings[0];
|
|
2742
|
+
const drawings = focusDrawings.map(({ unitId, subUnitId, drawingId }) => ({
|
|
2743
|
+
unitId,
|
|
2744
|
+
subUnitId,
|
|
2745
|
+
drawingId
|
|
2746
|
+
}));
|
|
2747
|
+
commandService.executeCommand(UpdateDocDrawingWrappingStyleCommand.id, {
|
|
2748
|
+
unitId,
|
|
2749
|
+
subUnitId,
|
|
2750
|
+
drawings,
|
|
2751
|
+
wrappingStyle: value
|
|
2752
|
+
});
|
|
2753
|
+
}
|
|
2754
|
+
function handleWrapTextChange(value) {
|
|
2755
|
+
setWrapText(value);
|
|
2756
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2757
|
+
if (focusDrawings.length === 0) return;
|
|
2758
|
+
const drawings = focusDrawings.map((drawing) => {
|
|
2759
|
+
return {
|
|
2760
|
+
unitId: drawing.unitId,
|
|
2761
|
+
subUnitId: drawing.subUnitId,
|
|
2762
|
+
drawingId: drawing.drawingId
|
|
2763
|
+
};
|
|
2764
|
+
});
|
|
2765
|
+
commandService.executeCommand(UpdateDocDrawingWrapTextCommand.id, {
|
|
2766
|
+
unitId: focusDrawings[0].unitId,
|
|
2767
|
+
subUnitId: focusDrawings[0].unitId,
|
|
2768
|
+
drawings,
|
|
2769
|
+
wrapText: value
|
|
2770
|
+
});
|
|
2771
|
+
}
|
|
2772
|
+
function handleDistToTextChange(value, direction) {
|
|
2773
|
+
if (value == null) return;
|
|
2774
|
+
setDistToText({
|
|
2775
|
+
...distToText,
|
|
2776
|
+
[direction]: value
|
|
2777
|
+
});
|
|
2778
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2779
|
+
if (focusDrawings.length === 0) return;
|
|
2780
|
+
const drawings = focusDrawings.map((drawing) => {
|
|
2781
|
+
return {
|
|
2782
|
+
unitId: drawing.unitId,
|
|
2783
|
+
subUnitId: drawing.subUnitId,
|
|
2784
|
+
drawingId: drawing.drawingId
|
|
2785
|
+
};
|
|
2786
|
+
});
|
|
2787
|
+
commandService.executeCommand(UpdateDocDrawingDistanceCommand.id, {
|
|
2788
|
+
unitId: focusDrawings[0].unitId,
|
|
2789
|
+
subUnitId: focusDrawings[0].unitId,
|
|
2790
|
+
drawings,
|
|
2791
|
+
dist: { [direction]: value }
|
|
2792
|
+
});
|
|
2793
|
+
}
|
|
2794
|
+
function updateFocusDrawingState() {
|
|
2795
|
+
const focusDrawings = drawingManagerService.getFocusDrawings();
|
|
2796
|
+
if (focusDrawings.length === 0) return;
|
|
2797
|
+
updateState(focusDrawings[0]);
|
|
2798
|
+
}
|
|
2799
|
+
function updateState(drawingParam) {
|
|
2800
|
+
var _documentDataModel$ge;
|
|
2801
|
+
const drawing = documentDataModel === null || documentDataModel === void 0 || (_documentDataModel$ge = documentDataModel.getSnapshot()) === null || _documentDataModel$ge === void 0 || (_documentDataModel$ge = _documentDataModel$ge.drawings) === null || _documentDataModel$ge === void 0 ? void 0 : _documentDataModel$ge[drawingParam.drawingId];
|
|
2802
|
+
if (drawing == null) return;
|
|
2803
|
+
const { distT = 0, distL = 0, distB = 0, distR = 0, layoutType = _univerjs_core.PositionedObjectLayoutType.INLINE, behindDoc = _univerjs_core.BooleanNumber.FALSE, wrapText = _univerjs_core.WrapTextType.BOTH_SIDES } = drawing;
|
|
2804
|
+
setDistToText({
|
|
2805
|
+
distT,
|
|
2806
|
+
distL,
|
|
2807
|
+
distB,
|
|
2808
|
+
distR
|
|
2809
|
+
});
|
|
2810
|
+
setWrapText(wrapText);
|
|
2811
|
+
setDisableWrapText(layoutType !== _univerjs_core.PositionedObjectLayoutType.WRAP_SQUARE);
|
|
2812
|
+
if (layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_NONE || layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE) setDisableDistTB(true);
|
|
2813
|
+
else setDisableDistTB(false);
|
|
2814
|
+
if (layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_NONE || layoutType === _univerjs_core.PositionedObjectLayoutType.INLINE || layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM) setDisableDistLR(true);
|
|
2815
|
+
else setDisableDistLR(false);
|
|
2816
|
+
if (layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_NONE) if (behindDoc === _univerjs_core.BooleanNumber.TRUE) setWrappingStyle(TextWrappingStyle.BEHIND_TEXT);
|
|
2817
|
+
else setWrappingStyle(TextWrappingStyle.IN_FRONT_OF_TEXT);
|
|
2818
|
+
else switch (layoutType) {
|
|
2819
|
+
case _univerjs_core.PositionedObjectLayoutType.INLINE:
|
|
2820
|
+
setWrappingStyle(TextWrappingStyle.INLINE);
|
|
2821
|
+
break;
|
|
2822
|
+
case _univerjs_core.PositionedObjectLayoutType.WRAP_SQUARE:
|
|
2823
|
+
setWrappingStyle(TextWrappingStyle.WRAP_SQUARE);
|
|
2824
|
+
break;
|
|
2825
|
+
case _univerjs_core.PositionedObjectLayoutType.WRAP_TOP_AND_BOTTOM:
|
|
2826
|
+
setWrappingStyle(TextWrappingStyle.WRAP_TOP_AND_BOTTOM);
|
|
2827
|
+
break;
|
|
2828
|
+
default: throw new Error(`Unsupported layout type: ${layoutType}`);
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
(0, react.useEffect)(() => {
|
|
2832
|
+
updateFocusDrawingState();
|
|
2833
|
+
const subscription = drawingManagerService.focus$.subscribe((drawingParams) => {
|
|
2834
|
+
if (drawingParams.length === 0) {
|
|
2835
|
+
setShowPanel(false);
|
|
2836
|
+
return;
|
|
2837
|
+
}
|
|
2838
|
+
setShowPanel(true);
|
|
2839
|
+
updateState(drawingParams[0]);
|
|
2840
|
+
});
|
|
2841
|
+
const mutationListener = commandService.onCommandExecuted(async (command) => {
|
|
2842
|
+
if (command.id === _univerjs_docs.RichTextEditingMutation.id) updateFocusDrawingState();
|
|
2843
|
+
});
|
|
2844
|
+
return () => {
|
|
2845
|
+
subscription.unsubscribe();
|
|
2846
|
+
mutationListener.dispose();
|
|
2847
|
+
};
|
|
2848
|
+
}, []);
|
|
2849
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2850
|
+
className: (0, _univerjs_design.clsx)("univer-grid univer-gap-2 univer-py-2 univer-text-gray-400", { "univer-hidden": !showPanel }),
|
|
2851
|
+
children: [
|
|
2852
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
|
|
2853
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2854
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-text-wrap.title") })
|
|
2855
|
+
}),
|
|
2856
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2857
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2858
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-text-wrap.wrappingStyle") })
|
|
2859
|
+
}),
|
|
2860
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_univerjs_design.RadioGroup, {
|
|
2861
|
+
value: wrappingStyle,
|
|
2862
|
+
onChange: handleWrappingStyleChange,
|
|
2863
|
+
direction: "vertical",
|
|
2864
|
+
children: [
|
|
2865
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2866
|
+
value: TextWrappingStyle.INLINE,
|
|
2867
|
+
children: localeService.t("image-text-wrap.inline")
|
|
2868
|
+
}),
|
|
2869
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2870
|
+
value: TextWrappingStyle.WRAP_SQUARE,
|
|
2871
|
+
children: localeService.t("image-text-wrap.square")
|
|
2872
|
+
}),
|
|
2873
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2874
|
+
value: TextWrappingStyle.WRAP_TOP_AND_BOTTOM,
|
|
2875
|
+
children: localeService.t("image-text-wrap.topAndBottom")
|
|
2876
|
+
}),
|
|
2877
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2878
|
+
value: TextWrappingStyle.BEHIND_TEXT,
|
|
2879
|
+
children: localeService.t("image-text-wrap.behindText")
|
|
2880
|
+
}),
|
|
2881
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2882
|
+
value: TextWrappingStyle.IN_FRONT_OF_TEXT,
|
|
2883
|
+
children: localeService.t("image-text-wrap.inFrontText")
|
|
2884
|
+
})
|
|
2885
|
+
]
|
|
2886
|
+
}) }),
|
|
2887
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2888
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2889
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-text-wrap.wrapText") })
|
|
2890
|
+
}),
|
|
2891
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_univerjs_design.RadioGroup, {
|
|
2892
|
+
disabled: disableWrapText,
|
|
2893
|
+
value: wrapText,
|
|
2894
|
+
onChange: handleWrapTextChange,
|
|
2895
|
+
direction: "horizontal",
|
|
2896
|
+
children: [
|
|
2897
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2898
|
+
value: _univerjs_core.WrapTextType.BOTH_SIDES,
|
|
2899
|
+
children: localeService.t("image-text-wrap.bothSide")
|
|
2900
|
+
}),
|
|
2901
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2902
|
+
value: _univerjs_core.WrapTextType.LEFT,
|
|
2903
|
+
children: localeService.t("image-text-wrap.leftOnly")
|
|
2904
|
+
}),
|
|
2905
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.Radio, {
|
|
2906
|
+
value: _univerjs_core.WrapTextType.RIGHT,
|
|
2907
|
+
children: localeService.t("image-text-wrap.rightOnly")
|
|
2908
|
+
})
|
|
2909
|
+
]
|
|
2910
|
+
}) }),
|
|
2911
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2912
|
+
className: "univer-text-gray-600 dark:!univer-text-gray-200",
|
|
2913
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: localeService.t("image-text-wrap.distanceFromText") })
|
|
2914
|
+
}),
|
|
2915
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2916
|
+
className: "univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2",
|
|
2917
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-text-wrap.top") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.InputNumber, {
|
|
2918
|
+
min: MIN_MARGIN,
|
|
2919
|
+
max: MAX_MARGIN,
|
|
2920
|
+
disabled: disableDistTB,
|
|
2921
|
+
precision: 1,
|
|
2922
|
+
value: distToText.distT,
|
|
2923
|
+
onChange: (val) => {
|
|
2924
|
+
handleDistToTextChange(val, "distT");
|
|
2925
|
+
}
|
|
2926
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-text-wrap.left") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.InputNumber, {
|
|
2927
|
+
min: MIN_MARGIN,
|
|
2928
|
+
max: MAX_MARGIN,
|
|
2929
|
+
disabled: disableDistLR,
|
|
2930
|
+
precision: 1,
|
|
2931
|
+
value: distToText.distL,
|
|
2932
|
+
onChange: (val) => {
|
|
2933
|
+
handleDistToTextChange(val, "distL");
|
|
2934
|
+
}
|
|
2935
|
+
})] })]
|
|
2936
|
+
}),
|
|
2937
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2938
|
+
className: "univer-grid univer-grid-cols-2 univer-gap-2 [&>div]:univer-grid [&>div]:univer-gap-2",
|
|
2939
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-text-wrap.bottom") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.InputNumber, {
|
|
2940
|
+
min: MIN_MARGIN,
|
|
2941
|
+
max: MAX_MARGIN,
|
|
2942
|
+
disabled: disableDistTB,
|
|
2943
|
+
precision: 1,
|
|
2944
|
+
value: distToText.distB,
|
|
2945
|
+
onChange: (val) => {
|
|
2946
|
+
handleDistToTextChange(val, "distB");
|
|
2947
|
+
}
|
|
2948
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: localeService.t("image-text-wrap.right") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_design.InputNumber, {
|
|
2949
|
+
min: MIN_MARGIN,
|
|
2950
|
+
max: MAX_MARGIN,
|
|
2951
|
+
disabled: disableDistLR,
|
|
2952
|
+
precision: 1,
|
|
2953
|
+
value: distToText.distR,
|
|
2954
|
+
onChange: (val) => {
|
|
2955
|
+
handleDistToTextChange(val, "distR");
|
|
2956
|
+
}
|
|
2957
|
+
})] })]
|
|
2958
|
+
})
|
|
2959
|
+
]
|
|
2960
|
+
});
|
|
2961
|
+
};
|
|
2962
|
+
|
|
2963
|
+
//#endregion
|
|
2964
|
+
//#region src/views/doc-image-panel/DocDrawingPanel.tsx
|
|
2965
|
+
const DocDrawingPanel = () => {
|
|
2966
|
+
const drawingManagerService = (0, _univerjs_ui.useDependency)(_univerjs_drawing.IDrawingManagerService);
|
|
2967
|
+
const [drawings, setDrawings] = (0, react.useState)(drawingManagerService.getFocusDrawings());
|
|
2968
|
+
(0, react.useEffect)(() => {
|
|
2969
|
+
const focusDispose = drawingManagerService.focus$.subscribe((drawings) => {
|
|
2970
|
+
setDrawings(drawings);
|
|
2971
|
+
});
|
|
2972
|
+
return () => {
|
|
2973
|
+
focusDispose.unsubscribe();
|
|
2974
|
+
};
|
|
2975
|
+
}, []);
|
|
2976
|
+
return !!(drawings === null || drawings === void 0 ? void 0 : drawings.length) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2977
|
+
className: "univer-text-sm",
|
|
2978
|
+
children: [
|
|
2979
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_drawing_ui.DrawingCommonPanel, {
|
|
2980
|
+
drawings,
|
|
2981
|
+
hasAlign: false,
|
|
2982
|
+
hasCropper: false,
|
|
2983
|
+
hasGroup: false,
|
|
2984
|
+
hasTransform: false
|
|
2985
|
+
}),
|
|
2986
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocDrawingTextWrap, { drawings }),
|
|
2987
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocDrawingPosition, { drawings })
|
|
2988
|
+
]
|
|
2989
|
+
});
|
|
2990
|
+
};
|
|
2991
|
+
|
|
2992
|
+
//#endregion
|
|
2993
|
+
//#region src/controllers/shortcuts/drawing.shortcut.ts
|
|
2994
|
+
function whenDocDrawingFocused(contextService) {
|
|
2995
|
+
return contextService.getContextValue(_univerjs_core.FOCUSING_DOC) && contextService.getContextValue(_univerjs_core.FOCUSING_UNIVER_EDITOR) && contextService.getContextValue(_univerjs_core.FOCUSING_COMMON_DRAWINGS);
|
|
2996
|
+
}
|
|
2997
|
+
const MoveDrawingDownShortcutItem = {
|
|
2998
|
+
id: MoveDocDrawingsCommand.id,
|
|
2999
|
+
description: "shortcut.drawing-move-down",
|
|
3000
|
+
group: "4_drawing-view",
|
|
3001
|
+
binding: _univerjs_ui.KeyCode.ARROW_DOWN,
|
|
3002
|
+
priority: 100,
|
|
3003
|
+
preconditions: whenDocDrawingFocused,
|
|
3004
|
+
staticParameters: { direction: _univerjs_core.Direction.DOWN }
|
|
3005
|
+
};
|
|
3006
|
+
const MoveDrawingUpShortcutItem = {
|
|
3007
|
+
id: MoveDocDrawingsCommand.id,
|
|
3008
|
+
description: "shortcut.drawing-move-up",
|
|
3009
|
+
group: "4_drawing-view",
|
|
3010
|
+
binding: _univerjs_ui.KeyCode.ARROW_UP,
|
|
3011
|
+
priority: 100,
|
|
3012
|
+
preconditions: whenDocDrawingFocused,
|
|
3013
|
+
staticParameters: { direction: _univerjs_core.Direction.UP }
|
|
3014
|
+
};
|
|
3015
|
+
const MoveDrawingLeftShortcutItem = {
|
|
3016
|
+
id: MoveDocDrawingsCommand.id,
|
|
3017
|
+
description: "shortcut.drawing-move-left",
|
|
3018
|
+
group: "4_drawing-view",
|
|
3019
|
+
binding: _univerjs_ui.KeyCode.ARROW_LEFT,
|
|
3020
|
+
priority: 100,
|
|
3021
|
+
preconditions: whenDocDrawingFocused,
|
|
3022
|
+
staticParameters: { direction: _univerjs_core.Direction.LEFT }
|
|
3023
|
+
};
|
|
3024
|
+
const MoveDrawingRightShortcutItem = {
|
|
3025
|
+
id: MoveDocDrawingsCommand.id,
|
|
3026
|
+
description: "shortcut.drawing-move-right",
|
|
3027
|
+
group: "4_drawing-view",
|
|
3028
|
+
binding: _univerjs_ui.KeyCode.ARROW_RIGHT,
|
|
3029
|
+
priority: 100,
|
|
3030
|
+
preconditions: whenDocDrawingFocused,
|
|
3031
|
+
staticParameters: { direction: _univerjs_core.Direction.RIGHT }
|
|
3032
|
+
};
|
|
3033
|
+
const DeleteDrawingsShortcutItem = {
|
|
3034
|
+
id: DeleteDocDrawingsCommand.id,
|
|
3035
|
+
description: "shortcut.drawing-delete",
|
|
3036
|
+
group: "4_drawing-view",
|
|
3037
|
+
preconditions: whenDocDrawingFocused,
|
|
3038
|
+
binding: _univerjs_ui.KeyCode.DELETE,
|
|
3039
|
+
mac: _univerjs_ui.KeyCode.BACKSPACE
|
|
3040
|
+
};
|
|
3041
|
+
|
|
3042
|
+
//#endregion
|
|
3043
|
+
//#region src/controllers/doc-drawing.controller.ts
|
|
3044
|
+
/**
|
|
3045
|
+
* Copyright 2023-present DreamNum Co., Ltd.
|
|
3046
|
+
*
|
|
3047
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3048
|
+
* you may not use this file except in compliance with the License.
|
|
3049
|
+
* You may obtain a copy of the License at
|
|
3050
|
+
*
|
|
3051
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
3052
|
+
*
|
|
3053
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3054
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
3055
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3056
|
+
* See the License for the specific language governing permissions and
|
|
3057
|
+
* limitations under the License.
|
|
3058
|
+
*/
|
|
3059
|
+
let DocDrawingUIController = class DocDrawingUIController extends _univerjs_core.Disposable {
|
|
3060
|
+
constructor(_componentManager, _menuManagerService, _commandService, _shortcutService) {
|
|
3061
|
+
super();
|
|
3062
|
+
this._componentManager = _componentManager;
|
|
3063
|
+
this._menuManagerService = _menuManagerService;
|
|
3064
|
+
this._commandService = _commandService;
|
|
3065
|
+
this._shortcutService = _shortcutService;
|
|
3066
|
+
this._init();
|
|
3067
|
+
}
|
|
3068
|
+
_initCustomComponents() {
|
|
3069
|
+
const componentManager = this._componentManager;
|
|
3070
|
+
this.disposeWithMe(componentManager.register(COMPONENT_DOC_DRAWING_PANEL, DocDrawingPanel));
|
|
3071
|
+
}
|
|
3072
|
+
_initMenus() {
|
|
3073
|
+
this._menuManagerService.mergeMenu(menuSchema);
|
|
3074
|
+
}
|
|
3075
|
+
_initCommands() {
|
|
3076
|
+
[
|
|
3077
|
+
InsertDocImageCommand,
|
|
3078
|
+
InsertDocDrawingCommand,
|
|
3079
|
+
UpdateDocDrawingWrappingStyleCommand,
|
|
3080
|
+
UpdateDocDrawingDistanceCommand,
|
|
3081
|
+
UpdateDocDrawingWrapTextCommand,
|
|
3082
|
+
UpdateDrawingDocTransformCommand,
|
|
3083
|
+
IMoveInlineDrawingCommand,
|
|
3084
|
+
ITransformNonInlineDrawingCommand,
|
|
3085
|
+
RemoveDocDrawingCommand,
|
|
3086
|
+
SidebarDocDrawingOperation,
|
|
3087
|
+
ClearDocDrawingTransformerOperation,
|
|
3088
|
+
EditDocDrawingOperation,
|
|
3089
|
+
GroupDocDrawingCommand,
|
|
3090
|
+
UngroupDocDrawingCommand,
|
|
3091
|
+
MoveDocDrawingsCommand,
|
|
3092
|
+
DeleteDocDrawingsCommand,
|
|
3093
|
+
SetDocDrawingArrangeCommand
|
|
3094
|
+
].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
|
|
3095
|
+
}
|
|
3096
|
+
_initShortcuts() {
|
|
3097
|
+
[
|
|
3098
|
+
MoveDrawingDownShortcutItem,
|
|
3099
|
+
MoveDrawingUpShortcutItem,
|
|
3100
|
+
MoveDrawingLeftShortcutItem,
|
|
3101
|
+
MoveDrawingRightShortcutItem,
|
|
3102
|
+
DeleteDrawingsShortcutItem
|
|
3103
|
+
].forEach((item) => {
|
|
3104
|
+
this.disposeWithMe(this._shortcutService.registerShortcut(item));
|
|
3105
|
+
});
|
|
3106
|
+
}
|
|
3107
|
+
_init() {
|
|
3108
|
+
this._initCommands();
|
|
3109
|
+
this._initCustomComponents();
|
|
3110
|
+
this._initMenus();
|
|
3111
|
+
this._initShortcuts();
|
|
3112
|
+
}
|
|
3113
|
+
};
|
|
3114
|
+
DocDrawingUIController = __decorate([
|
|
3115
|
+
__decorateParam(0, (0, _univerjs_core.Inject)(_univerjs_ui.ComponentManager)),
|
|
3116
|
+
__decorateParam(1, _univerjs_ui.IMenuManagerService),
|
|
3117
|
+
__decorateParam(2, _univerjs_core.ICommandService),
|
|
3118
|
+
__decorateParam(3, _univerjs_ui.IShortcutService)
|
|
3119
|
+
], DocDrawingUIController);
|
|
3120
|
+
|
|
3121
|
+
//#endregion
|
|
3122
|
+
//#region src/controllers/render-controllers/doc-drawing-transform-update.controller.ts
|
|
3123
|
+
let DocDrawingTransformUpdateController = class DocDrawingTransformUpdateController extends _univerjs_core.Disposable {
|
|
3124
|
+
constructor(_context, _docSkeletonManagerService, _commandService, _editorService, _drawingManagerService, _docRefreshDrawingsService, _univerInstanceService, _lifecycleService) {
|
|
3125
|
+
super();
|
|
3126
|
+
this._context = _context;
|
|
3127
|
+
this._docSkeletonManagerService = _docSkeletonManagerService;
|
|
3128
|
+
this._commandService = _commandService;
|
|
3129
|
+
this._editorService = _editorService;
|
|
3130
|
+
this._drawingManagerService = _drawingManagerService;
|
|
3131
|
+
this._docRefreshDrawingsService = _docRefreshDrawingsService;
|
|
3132
|
+
this._univerInstanceService = _univerInstanceService;
|
|
3133
|
+
this._lifecycleService = _lifecycleService;
|
|
3134
|
+
_defineProperty(this, "_liquid", new _univerjs_engine_render.Liquid());
|
|
3135
|
+
this._initialize();
|
|
3136
|
+
this._commandExecutedListener();
|
|
3137
|
+
}
|
|
3138
|
+
_initialize() {
|
|
3139
|
+
this._initialRenderRefresh();
|
|
3140
|
+
this._drawingInitializeListener();
|
|
3141
|
+
this._initResize();
|
|
3142
|
+
}
|
|
3143
|
+
_initialRenderRefresh() {
|
|
3144
|
+
this.disposeWithMe(this._docSkeletonManagerService.currentSkeleton$.subscribe((documentSkeleton) => {
|
|
3145
|
+
if (documentSkeleton == null) return;
|
|
3146
|
+
this._refreshDrawing(documentSkeleton);
|
|
3147
|
+
}));
|
|
3148
|
+
this.disposeWithMe(this._docRefreshDrawingsService.refreshDrawings$.subscribe((skeleton) => {
|
|
3149
|
+
if (skeleton == null) return;
|
|
3150
|
+
this._refreshDrawing(skeleton);
|
|
3151
|
+
}));
|
|
3152
|
+
}
|
|
3153
|
+
_commandExecutedListener() {
|
|
3154
|
+
const updateCommandList = [_univerjs_docs.RichTextEditingMutation.id, _univerjs_docs_ui.SetDocZoomRatioOperation.id];
|
|
3155
|
+
this.disposeWithMe(this._commandService.onCommandExecuted((command) => {
|
|
3156
|
+
if (updateCommandList.includes(command.id)) {
|
|
3157
|
+
const { unitId: commandUnitId } = command.params;
|
|
3158
|
+
const { unitId, mainComponent } = this._context;
|
|
3159
|
+
if (commandUnitId !== unitId) return;
|
|
3160
|
+
const skeleton = this._docSkeletonManagerService.getSkeleton();
|
|
3161
|
+
if (skeleton == null) return;
|
|
3162
|
+
if (this._editorService.isEditor(unitId) && unitId !== _univerjs_core.DOCS_ZEN_EDITOR_UNIT_ID_KEY) {
|
|
3163
|
+
mainComponent === null || mainComponent === void 0 || mainComponent.makeDirty();
|
|
3164
|
+
return;
|
|
3165
|
+
}
|
|
3166
|
+
this._refreshDrawing(skeleton);
|
|
3167
|
+
}
|
|
3168
|
+
}));
|
|
3169
|
+
}
|
|
3170
|
+
_initResize() {
|
|
3171
|
+
this.disposeWithMe((0, _univerjs_core.fromEventSubject)(this._context.engine.onTransformChange$).pipe((0, rxjs.filter)((evt) => evt.type === _univerjs_engine_render.TRANSFORM_CHANGE_OBSERVABLE_TYPE.resize), (0, rxjs.debounceTime)(16)).subscribe(() => {
|
|
3172
|
+
var _scene$getTransformer;
|
|
3173
|
+
const skeleton = this._docSkeletonManagerService.getSkeleton();
|
|
3174
|
+
const { scene } = this._context;
|
|
3175
|
+
(_scene$getTransformer = scene.getTransformer()) === null || _scene$getTransformer === void 0 || _scene$getTransformer.refreshControls();
|
|
3176
|
+
this._refreshDrawing(skeleton);
|
|
3177
|
+
}));
|
|
3178
|
+
}
|
|
3179
|
+
_refreshDrawing(skeleton) {
|
|
3180
|
+
const skeletonData = skeleton === null || skeleton === void 0 ? void 0 : skeleton.getSkeletonData();
|
|
3181
|
+
const { mainComponent, unitId } = this._context;
|
|
3182
|
+
const documentComponent = mainComponent;
|
|
3183
|
+
if (!skeletonData) return;
|
|
3184
|
+
const { left: docsLeft, top: docsTop, pageLayoutType, pageMarginLeft, pageMarginTop } = documentComponent;
|
|
3185
|
+
const { pages, skeHeaders, skeFooters } = skeletonData;
|
|
3186
|
+
const updateDrawingMap = {};
|
|
3187
|
+
this._liquid.reset();
|
|
3188
|
+
/**
|
|
3189
|
+
* TODO: @DR-Univer We should not refresh all floating elements, but instead make a diff.
|
|
3190
|
+
*/
|
|
3191
|
+
for (let i = 0, len = pages.length; i < len; i++) {
|
|
3192
|
+
const page = pages[i];
|
|
3193
|
+
const { headerId, footerId, pageWidth } = page;
|
|
3194
|
+
if (headerId) {
|
|
3195
|
+
var _skeHeaders$get;
|
|
3196
|
+
const headerPage = (_skeHeaders$get = skeHeaders.get(headerId)) === null || _skeHeaders$get === void 0 ? void 0 : _skeHeaders$get.get(pageWidth);
|
|
3197
|
+
if (headerPage) this._calculateDrawingPosition(unitId, headerPage, docsLeft, docsTop, updateDrawingMap, headerPage.marginTop, page.marginLeft);
|
|
3198
|
+
}
|
|
3199
|
+
if (footerId) {
|
|
3200
|
+
var _skeFooters$get;
|
|
3201
|
+
const footerPage = (_skeFooters$get = skeFooters.get(footerId)) === null || _skeFooters$get === void 0 ? void 0 : _skeFooters$get.get(pageWidth);
|
|
3202
|
+
if (footerPage) this._calculateDrawingPosition(unitId, footerPage, docsLeft, docsTop, updateDrawingMap, page.pageHeight - page.marginBottom + footerPage.marginTop, page.marginLeft);
|
|
3203
|
+
}
|
|
3204
|
+
this._calculateDrawingPosition(unitId, page, docsLeft, docsTop, updateDrawingMap, page.marginTop, page.marginLeft);
|
|
3205
|
+
this._liquid.translatePage(page, pageLayoutType, pageMarginLeft, pageMarginTop);
|
|
3206
|
+
}
|
|
3207
|
+
const updateDrawings = Object.values(updateDrawingMap);
|
|
3208
|
+
const nonMultiDrawings = updateDrawings.filter((drawing) => !drawing.isMultiTransform);
|
|
3209
|
+
const multiDrawings = updateDrawings.filter((drawing) => drawing.isMultiTransform);
|
|
3210
|
+
if (nonMultiDrawings.length > 0) this._drawingManagerService.refreshTransform(nonMultiDrawings);
|
|
3211
|
+
this._handleMultiDrawingsTransform(multiDrawings);
|
|
3212
|
+
}
|
|
3213
|
+
_handleMultiDrawingsTransform(multiDrawings) {
|
|
3214
|
+
const { scene, unitId } = this._context;
|
|
3215
|
+
const transformer = scene.getTransformerByCreate();
|
|
3216
|
+
multiDrawings.forEach((updateParam) => {
|
|
3217
|
+
const param = this._drawingManagerService.getDrawingByParam(updateParam);
|
|
3218
|
+
if (param == null) return;
|
|
3219
|
+
param.transform = updateParam.transform;
|
|
3220
|
+
param.transforms = updateParam.transforms;
|
|
3221
|
+
param.isMultiTransform = updateParam.isMultiTransform;
|
|
3222
|
+
});
|
|
3223
|
+
const selectedObjectKeys = [...transformer.getSelectedObjectMap().keys()];
|
|
3224
|
+
const allMultiDrawings = Object.values(this._drawingManagerService.getDrawingData(unitId, unitId)).filter((drawing) => drawing.isMultiTransform === _univerjs_core.BooleanNumber.TRUE);
|
|
3225
|
+
this._drawingManagerService.removeNotification(allMultiDrawings);
|
|
3226
|
+
if (multiDrawings.length > 0) this._drawingManagerService.addNotification(multiDrawings);
|
|
3227
|
+
for (const key of selectedObjectKeys) {
|
|
3228
|
+
const drawingShape = scene.getObject(key);
|
|
3229
|
+
if (drawingShape) transformer.setSelectedControl(drawingShape);
|
|
3230
|
+
}
|
|
3231
|
+
}
|
|
3232
|
+
_calculateDrawingPosition(unitId, page, docsLeft, docsTop, updateDrawingMap, marginTop, marginLeft) {
|
|
3233
|
+
const { skeDrawings } = page;
|
|
3234
|
+
this._liquid.translatePagePadding({
|
|
3235
|
+
marginTop,
|
|
3236
|
+
marginLeft
|
|
3237
|
+
});
|
|
3238
|
+
skeDrawings.forEach((drawing) => {
|
|
3239
|
+
const { aLeft, aTop, height, width, angle, drawingId, drawingOrigin } = drawing;
|
|
3240
|
+
const behindText = drawingOrigin.layoutType === _univerjs_core.PositionedObjectLayoutType.WRAP_NONE && drawingOrigin.behindDoc === _univerjs_core.BooleanNumber.TRUE;
|
|
3241
|
+
const { isMultiTransform = _univerjs_core.BooleanNumber.FALSE } = drawingOrigin;
|
|
3242
|
+
const transform = {
|
|
3243
|
+
left: aLeft + docsLeft + this._liquid.x,
|
|
3244
|
+
top: aTop + docsTop + this._liquid.y,
|
|
3245
|
+
width,
|
|
3246
|
+
height,
|
|
3247
|
+
angle
|
|
3248
|
+
};
|
|
3249
|
+
if (updateDrawingMap[drawingId] == null) updateDrawingMap[drawingId] = {
|
|
3250
|
+
unitId,
|
|
3251
|
+
subUnitId: unitId,
|
|
3252
|
+
drawingId,
|
|
3253
|
+
behindText,
|
|
3254
|
+
transform,
|
|
3255
|
+
transforms: [transform],
|
|
3256
|
+
isMultiTransform
|
|
3257
|
+
};
|
|
3258
|
+
else if (isMultiTransform === _univerjs_core.BooleanNumber.TRUE) updateDrawingMap[drawingId].transforms.push(transform);
|
|
3259
|
+
});
|
|
3260
|
+
this._liquid.restorePagePadding({
|
|
3261
|
+
marginTop,
|
|
3262
|
+
marginLeft
|
|
3263
|
+
});
|
|
3264
|
+
}
|
|
3265
|
+
_drawingInitializeListener() {
|
|
3266
|
+
const init = () => {
|
|
3267
|
+
const skeleton = this._docSkeletonManagerService.getSkeleton();
|
|
3268
|
+
if (skeleton == null) return;
|
|
3269
|
+
this._refreshDrawing(skeleton);
|
|
3270
|
+
this._drawingManagerService.initializeNotification(this._context.unitId);
|
|
3271
|
+
};
|
|
3272
|
+
if (this._lifecycleService.stage >= _univerjs_core.LifecycleStages.Rendered) if (this._docSkeletonManagerService.getSkeleton()) init();
|
|
3273
|
+
else setTimeout(init, 500);
|
|
3274
|
+
else this.disposeWithMe(this._lifecycleService.lifecycle$.pipe((0, rxjs.filter)((stage) => stage === _univerjs_core.LifecycleStages.Rendered)).subscribe(init));
|
|
3275
|
+
}
|
|
3276
|
+
};
|
|
3277
|
+
DocDrawingTransformUpdateController = __decorate([
|
|
3278
|
+
__decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_docs.DocSkeletonManagerService)),
|
|
3279
|
+
__decorateParam(2, _univerjs_core.ICommandService),
|
|
3280
|
+
__decorateParam(3, _univerjs_docs_ui.IEditorService),
|
|
3281
|
+
__decorateParam(4, _univerjs_drawing.IDrawingManagerService),
|
|
3282
|
+
__decorateParam(5, (0, _univerjs_core.Inject)(DocRefreshDrawingsService)),
|
|
3283
|
+
__decorateParam(6, _univerjs_core.IUniverInstanceService),
|
|
3284
|
+
__decorateParam(7, (0, _univerjs_core.Inject)(_univerjs_core.LifecycleService))
|
|
3285
|
+
], DocDrawingTransformUpdateController);
|
|
3286
|
+
|
|
3287
|
+
//#endregion
|
|
3288
|
+
//#region src/menu/drawing-popup-menu.controller.ts
|
|
3289
|
+
let DocDrawingPopupMenuController = class DocDrawingPopupMenuController extends _univerjs_core.RxDisposable {
|
|
3290
|
+
constructor(_drawingManagerService, _canvasPopManagerService, _renderManagerService, _univerInstanceService, _contextService) {
|
|
3291
|
+
super();
|
|
3292
|
+
this._drawingManagerService = _drawingManagerService;
|
|
3293
|
+
this._canvasPopManagerService = _canvasPopManagerService;
|
|
3294
|
+
this._renderManagerService = _renderManagerService;
|
|
3295
|
+
this._univerInstanceService = _univerInstanceService;
|
|
3296
|
+
this._contextService = _contextService;
|
|
3297
|
+
_defineProperty(this, "_initImagePopupMenu", /* @__PURE__ */ new Set());
|
|
3298
|
+
_defineProperty(this, "_disposePopups", []);
|
|
3299
|
+
this._init();
|
|
3300
|
+
}
|
|
3301
|
+
_init() {
|
|
3302
|
+
this.disposeWithMe(this._univerInstanceService.getCurrentTypeOfUnit$(_univerjs_core.UniverInstanceType.UNIVER_DOC).pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((documentDataModel) => this._create(documentDataModel)));
|
|
3303
|
+
this.disposeWithMe(this._univerInstanceService.getTypeOfUnitDisposed$(_univerjs_core.UniverInstanceType.UNIVER_DOC).pipe((0, rxjs.takeUntil)(this.dispose$)).subscribe((documentDataModel) => this._dispose(documentDataModel)));
|
|
3304
|
+
this._univerInstanceService.getAllUnitsForType(_univerjs_core.UniverInstanceType.UNIVER_DOC).forEach((documentDataModel) => this._create(documentDataModel));
|
|
3305
|
+
}
|
|
3306
|
+
_dispose(documentDataModel) {
|
|
3307
|
+
const unitId = documentDataModel.getUnitId();
|
|
3308
|
+
if (this._disposePopups.length) {
|
|
3309
|
+
this._disposePopups.forEach((dispose) => dispose.dispose());
|
|
3310
|
+
this._disposePopups.length = 0;
|
|
3311
|
+
}
|
|
3312
|
+
this._renderManagerService.removeRender(unitId);
|
|
3313
|
+
}
|
|
3314
|
+
_create(documentDataModel) {
|
|
3315
|
+
if (!documentDataModel) return;
|
|
3316
|
+
const unitId = documentDataModel.getUnitId();
|
|
3317
|
+
if ((0, _univerjs_core.isInternalEditorID)(unitId)) return;
|
|
3318
|
+
if (this._renderManagerService.has(unitId) && !this._initImagePopupMenu.has(unitId)) {
|
|
3319
|
+
this._popupMenuListener(unitId);
|
|
3320
|
+
this._initImagePopupMenu.add(unitId);
|
|
3321
|
+
}
|
|
3322
|
+
}
|
|
3323
|
+
_hasCropObject(scene) {
|
|
3324
|
+
const objects = scene.getAllObjects();
|
|
3325
|
+
for (const object of objects) if (object instanceof _univerjs_drawing_ui.ImageCropperObject) return true;
|
|
3326
|
+
return false;
|
|
3327
|
+
}
|
|
3328
|
+
_popupMenuListener(unitId) {
|
|
3329
|
+
var _this$_renderManagerS;
|
|
3330
|
+
const scene = (_this$_renderManagerS = this._renderManagerService.getRenderById(unitId)) === null || _this$_renderManagerS === void 0 ? void 0 : _this$_renderManagerS.scene;
|
|
3331
|
+
if (!scene) return;
|
|
3332
|
+
const transformer = scene.getTransformerByCreate();
|
|
3333
|
+
if (!transformer) return;
|
|
3334
|
+
const disposePopups = this._disposePopups;
|
|
3335
|
+
this.disposeWithMe(transformer.createControl$.subscribe(() => {
|
|
3336
|
+
if (this._hasCropObject(scene)) return;
|
|
3337
|
+
const selectedObjects = transformer.getSelectedObjectMap();
|
|
3338
|
+
disposePopups.forEach((dispose) => dispose.dispose());
|
|
3339
|
+
disposePopups.length = 0;
|
|
3340
|
+
if (selectedObjects.size > 1) return;
|
|
3341
|
+
const object = selectedObjects.values().next().value;
|
|
3342
|
+
if (!object) return;
|
|
3343
|
+
const oKey = object.oKey;
|
|
3344
|
+
const drawingParam = this._drawingManagerService.getDrawingOKey(oKey);
|
|
3345
|
+
if (!drawingParam || drawingParam.drawingType === _univerjs_core.DrawingTypeEnum.DRAWING_DOM) return;
|
|
3346
|
+
const { unitId, subUnitId, drawingId, drawingType } = drawingParam;
|
|
3347
|
+
const popup = this._canvasPopManagerService.attachPopupToObject(object, {
|
|
3348
|
+
componentKey: _univerjs_drawing_ui.COMPONENT_IMAGE_POPUP_MENU,
|
|
3349
|
+
direction: "horizontal",
|
|
3350
|
+
offset: [2, 0],
|
|
3351
|
+
extraProps: { menuItems: this._getImageMenuItems(unitId, subUnitId, drawingId, drawingType) }
|
|
3352
|
+
}, unitId);
|
|
3353
|
+
disposePopups.push(this.disposeWithMe(popup));
|
|
3354
|
+
if (this._drawingManagerService.getFocusDrawings().find((drawing) => drawing.unitId === unitId && drawing.subUnitId === subUnitId && drawing.drawingId === drawingId)) return;
|
|
3355
|
+
this._drawingManagerService.focusDrawing([{
|
|
3356
|
+
unitId,
|
|
3357
|
+
subUnitId,
|
|
3358
|
+
drawingId
|
|
3359
|
+
}]);
|
|
3360
|
+
}));
|
|
3361
|
+
this.disposeWithMe(transformer.clearControl$.subscribe(() => {
|
|
3362
|
+
disposePopups.forEach((dispose) => dispose.dispose());
|
|
3363
|
+
disposePopups.length = 0;
|
|
3364
|
+
this._contextService.setContextValue(_univerjs_core.FOCUSING_COMMON_DRAWINGS, false);
|
|
3365
|
+
this._drawingManagerService.focusDrawing(null);
|
|
3366
|
+
}));
|
|
3367
|
+
this.disposeWithMe(transformer.changing$.subscribe(() => {
|
|
3368
|
+
disposePopups.forEach((dispose) => dispose.dispose());
|
|
3369
|
+
disposePopups.length = 0;
|
|
3370
|
+
}));
|
|
3371
|
+
this.disposeWithMe(transformer.changeStart$.subscribe(() => {
|
|
3372
|
+
disposePopups.forEach((dispose) => dispose.dispose());
|
|
3373
|
+
disposePopups.length = 0;
|
|
3374
|
+
}));
|
|
3375
|
+
}
|
|
3376
|
+
_getImageMenuItems(unitId, subUnitId, drawingId, drawingType) {
|
|
3377
|
+
return [
|
|
3378
|
+
{
|
|
3379
|
+
label: "image-popup.edit",
|
|
3380
|
+
index: 0,
|
|
3381
|
+
commandId: EditDocDrawingOperation.id,
|
|
3382
|
+
commandParams: {
|
|
3383
|
+
unitId,
|
|
3384
|
+
subUnitId,
|
|
3385
|
+
drawingId
|
|
3386
|
+
},
|
|
3387
|
+
disable: true
|
|
3388
|
+
},
|
|
3389
|
+
{
|
|
3390
|
+
label: "image-popup.delete",
|
|
3391
|
+
index: 1,
|
|
3392
|
+
commandId: RemoveDocDrawingCommand.id,
|
|
3393
|
+
commandParams: {
|
|
3394
|
+
unitId,
|
|
3395
|
+
drawings: [{
|
|
3396
|
+
unitId,
|
|
3397
|
+
subUnitId,
|
|
3398
|
+
drawingId
|
|
3399
|
+
}]
|
|
3400
|
+
},
|
|
3401
|
+
disable: false
|
|
3402
|
+
},
|
|
3403
|
+
{
|
|
3404
|
+
label: "image-popup.crop",
|
|
3405
|
+
index: 2,
|
|
3406
|
+
commandId: _univerjs_drawing_ui.OpenImageCropOperation.id,
|
|
3407
|
+
commandParams: {
|
|
3408
|
+
unitId,
|
|
3409
|
+
subUnitId,
|
|
3410
|
+
drawingId
|
|
3411
|
+
},
|
|
3412
|
+
disable: true
|
|
3413
|
+
},
|
|
3414
|
+
{
|
|
3415
|
+
label: "image-popup.reset",
|
|
3416
|
+
index: 3,
|
|
3417
|
+
commandId: _univerjs_drawing_ui.ImageResetSizeOperation.id,
|
|
3418
|
+
commandParams: [{
|
|
3419
|
+
unitId,
|
|
3420
|
+
subUnitId,
|
|
3421
|
+
drawingId
|
|
3422
|
+
}],
|
|
3423
|
+
disable: true
|
|
3424
|
+
}
|
|
3425
|
+
];
|
|
3426
|
+
}
|
|
3427
|
+
};
|
|
3428
|
+
DocDrawingPopupMenuController = __decorate([
|
|
3429
|
+
__decorateParam(0, _univerjs_drawing.IDrawingManagerService),
|
|
3430
|
+
__decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_docs_ui.DocCanvasPopManagerService)),
|
|
3431
|
+
__decorateParam(2, _univerjs_engine_render.IRenderManagerService),
|
|
3432
|
+
__decorateParam(3, _univerjs_core.IUniverInstanceService),
|
|
3433
|
+
__decorateParam(4, _univerjs_core.IContextService)
|
|
3434
|
+
], DocDrawingPopupMenuController);
|
|
3435
|
+
|
|
3436
|
+
//#endregion
|
|
3437
|
+
//#region src/plugin.ts
|
|
3438
|
+
let UniverDocsDrawingUIPlugin = class UniverDocsDrawingUIPlugin extends _univerjs_core.Plugin {
|
|
3439
|
+
constructor(_config = defaultPluginConfig, _injector, _renderManagerSrv, _configService) {
|
|
3440
|
+
super();
|
|
3441
|
+
this._config = _config;
|
|
3442
|
+
this._injector = _injector;
|
|
3443
|
+
this._renderManagerSrv = _renderManagerSrv;
|
|
3444
|
+
this._configService = _configService;
|
|
3445
|
+
const { ...rest } = (0, _univerjs_core.merge)({}, defaultPluginConfig, this._config);
|
|
3446
|
+
this._configService.setConfig(DOCS_DRAWING_UI_PLUGIN_CONFIG_KEY, rest);
|
|
3447
|
+
}
|
|
3448
|
+
onStarting() {
|
|
3449
|
+
[
|
|
3450
|
+
[DocDrawingUIController],
|
|
3451
|
+
[DocDrawingPopupMenuController],
|
|
3452
|
+
[DocDrawingTransformerController],
|
|
3453
|
+
[DocDrawingAddRemoveController],
|
|
3454
|
+
[DocRefreshDrawingsService],
|
|
3455
|
+
[DocFloatDomController],
|
|
3456
|
+
[DocDrawingPrintingController]
|
|
3457
|
+
].forEach((dependency) => this._injector.add(dependency));
|
|
3458
|
+
}
|
|
3459
|
+
onReady() {
|
|
3460
|
+
[[DocDrawingUpdateRenderController], [DocDrawingTransformUpdateController]].forEach((m) => this._renderManagerSrv.registerRenderModule(_univerjs_core.UniverInstanceType.UNIVER_DOC, m));
|
|
3461
|
+
this._injector.get(DocDrawingAddRemoveController);
|
|
3462
|
+
this._injector.get(DocDrawingUIController);
|
|
3463
|
+
this._injector.get(DocDrawingTransformerController);
|
|
3464
|
+
this._injector.get(DocDrawingPrintingController);
|
|
3465
|
+
}
|
|
3466
|
+
onRendered() {
|
|
3467
|
+
this._injector.get(DocDrawingPopupMenuController);
|
|
3468
|
+
this._injector.get(DocFloatDomController);
|
|
3469
|
+
}
|
|
3470
|
+
};
|
|
3471
|
+
_defineProperty(UniverDocsDrawingUIPlugin, "type", _univerjs_core.UniverInstanceType.UNIVER_DOC);
|
|
3472
|
+
_defineProperty(UniverDocsDrawingUIPlugin, "pluginName", "DOC_DRAWING_UI_PLUGIN");
|
|
3473
|
+
_defineProperty(UniverDocsDrawingUIPlugin, "packageName", name);
|
|
3474
|
+
_defineProperty(UniverDocsDrawingUIPlugin, "version", version);
|
|
3475
|
+
UniverDocsDrawingUIPlugin = __decorate([
|
|
3476
|
+
(0, _univerjs_core.DependentOn)(_univerjs_drawing_ui.UniverDrawingUIPlugin, _univerjs_drawing.UniverDrawingPlugin, _univerjs_docs_drawing.UniverDocsDrawingPlugin, _univerjs_ui.UniverUIPlugin),
|
|
3477
|
+
__decorateParam(1, (0, _univerjs_core.Inject)(_univerjs_core.Injector)),
|
|
3478
|
+
__decorateParam(2, _univerjs_engine_render.IRenderManagerService),
|
|
3479
|
+
__decorateParam(3, _univerjs_core.IConfigService)
|
|
3480
|
+
], UniverDocsDrawingUIPlugin);
|
|
3481
|
+
|
|
3482
|
+
//#endregion
|
|
3483
|
+
exports.ClearDocDrawingTransformerOperation = ClearDocDrawingTransformerOperation;
|
|
3484
|
+
exports.DOCS_IMAGE_MENU_ID = DOCS_IMAGE_MENU_ID;
|
|
3485
|
+
exports.DeleteDocDrawingsCommand = DeleteDocDrawingsCommand;
|
|
3486
|
+
Object.defineProperty(exports, 'DocFloatDomController', {
|
|
3487
|
+
enumerable: true,
|
|
3488
|
+
get: function () {
|
|
3489
|
+
return DocFloatDomController;
|
|
3490
|
+
}
|
|
3491
|
+
});
|
|
3492
|
+
exports.EditDocDrawingOperation = EditDocDrawingOperation;
|
|
3493
|
+
exports.GroupDocDrawingCommand = GroupDocDrawingCommand;
|
|
3494
|
+
exports.InsertDocDrawingCommand = InsertDocDrawingCommand;
|
|
3495
|
+
exports.InsertDocImageCommand = InsertDocImageCommand;
|
|
3496
|
+
exports.MoveDocDrawingsCommand = MoveDocDrawingsCommand;
|
|
3497
|
+
exports.RemoveDocDrawingCommand = RemoveDocDrawingCommand;
|
|
3498
|
+
exports.SetDocDrawingArrangeCommand = SetDocDrawingArrangeCommand;
|
|
3499
|
+
exports.SidebarDocDrawingOperation = SidebarDocDrawingOperation;
|
|
3500
|
+
exports.UngroupDocDrawingCommand = UngroupDocDrawingCommand;
|
|
3501
|
+
Object.defineProperty(exports, 'UniverDocsDrawingUIPlugin', {
|
|
3502
|
+
enumerable: true,
|
|
3503
|
+
get: function () {
|
|
3504
|
+
return UniverDocsDrawingUIPlugin;
|
|
3505
|
+
}
|
|
3506
|
+
});
|