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