@univerjs/sheets-crosshair-highlight 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/facade.js CHANGED
@@ -1 +1 @@
1
- let e=require(`@univerjs/core`),t=require(`@univerjs/core/facade`),n=require(`@univerjs/sheets-crosshair-highlight`);var r=class{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}},i=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.EnableCrosshairHighlightOperation.id||e.id===n.DisableCrosshairHighlightOperation.id||e.id===n.ToggleCrosshairHighlightOperation.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,{enabled:this.getCrosshairHighlightEnabled(),...e})}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.SetCrosshairHighlightColorOperation.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightColorChanged,{color:this.getCrosshairHighlightColor(),...e})}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(n.EnableCrosshairHighlightOperation.id):this._commandService.syncExecuteCommand(n.DisableCrosshairHighlightOperation.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(n.SetCrosshairHighlightColorOperation.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(n.SheetsCrosshairHighlightService).enabled}getCrosshairHighlightColor(){return this._injector.get(n.SheetsCrosshairHighlightService).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return n.CROSSHAIR_HIGHLIGHT_COLORS}};t.FEventName.extend(r),t.FUniver.extend(i);
1
+ let e=require(`@univerjs/core`),t=require(`@univerjs/core/facade`),n=require(`@univerjs/sheets-crosshair-highlight`);var r=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.EnableCrosshairHighlightOperation.id||e.id===n.DisableCrosshairHighlightOperation.id||e.id===n.ToggleCrosshairHighlightOperation.id){let e=this.getActiveSheet();if(!e)return;let t={enabled:this.getCrosshairHighlightEnabled(),...e};this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,t)}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.SetCrosshairHighlightColorOperation.id){let e=this.getActiveSheet();if(!e)return;let t={color:this.getCrosshairHighlightColor(),...e};this.fireEvent(this.Event.CrosshairHighlightColorChanged,t)}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(n.EnableCrosshairHighlightOperation.id):this._commandService.syncExecuteCommand(n.DisableCrosshairHighlightOperation.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(n.SetCrosshairHighlightColorOperation.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(n.SheetsCrosshairHighlightService).enabled}getCrosshairHighlightColor(){return this._injector.get(n.SheetsCrosshairHighlightService).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return n.CROSSHAIR_HIGHLIGHT_COLORS}};t.FUniver.extend(r);var i=class extends t.FEventName{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}};t.FEventName.extend(i);
package/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@univerjs/core`),t=require(`rxjs`),n=require(`@univerjs/engine-render`),r=require(`@univerjs/icons`),i=require(`@univerjs/ui`),a=require(`@univerjs/design`),o=require(`react`),s=require(`react/jsx-runtime`),c=require(`@univerjs/sheets`),l=require(`@univerjs/sheets-ui`);function u(e){"@babel/helpers - typeof";return u=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},u(e)}function d(e,t){if(u(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(u(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function f(e){var t=d(e,`string`);return u(t)==`symbol`?t:t+``}function p(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const m=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var h=class extends e.Disposable{constructor(...e){super(...e),p(this,`_enabled$`,new t.BehaviorSubject(!1)),p(this,`enabled$`,this._enabled$.asObservable()),p(this,`_color$`,new t.BehaviorSubject(m[0])),p(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};const g={id:`sheet.operation.toggle-crosshair-highlight`,type:e.CommandType.OPERATION,handler(e){let t=e.get(h),n=t.enabled;return t.setEnabled(!n),!0}},_={id:`sheet.operation.set-crosshair-highlight-color`,type:e.CommandType.OPERATION,handler(e,{value:t}){let n=e.get(h);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},v={id:`sheet.operation.enable-crosshair-highlight`,type:e.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?!1:(t.setEnabled(!0),!0)}},y={id:`sheet.operation.disable-crosshair-highlight`,type:e.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?(t.setEnabled(!1),!0):!1}};var b=`@univerjs/sheets-crosshair-highlight`,x=`0.19.0`;const S=`sheets-crosshair-highlight.config`;Symbol(S);const C={},w=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function T(t){let n=t.get(h);return{id:g.id,tooltip:`crosshair.button.tooltip`,type:i.MenuItemType.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:w,hoverable:!1,selectable:!1}}],selectionsCommandId:_.id,activated$:n.enabled$,hidden$:(0,i.getMenuHiddenObservable)(t,e.UniverInstanceType.UNIVER_SHEET)}}const E={[i.ContextMenuPosition.FOOTER_MENU]:{[i.ContextMenuGroup.OTHERS]:{[g.id]:{order:0,menuItemFactory:T}}}};function D(e){let{onChange:t}=e,n=(0,i.useObservable)((0,i.useDependency)(h).color$),r=(0,o.useCallback)(e=>{t==null||t(e)},[t]);return(0,s.jsx)(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:m.map(e=>(0,s.jsx)(`div`,{className:(0,a.clsx)(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,a.borderClassName,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function O(e,t){return function(n,r){t(n,r,e)}}function k(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 A=class extends e.Disposable{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[g,_,v,y].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(E)}_initComponents(){this._componentMgr.register(w,D),this._componentMgr.register(`CrossHighlightingIcon`,r.CrossHighlightingIcon)}};A=k([O(0,(0,e.Inject)(i.ComponentManager)),O(1,i.IMenuManagerService),O(2,e.ICommandService)],A);var j=class{constructor(){p(this,`_selectedRanges`,[]),p(this,`_ranges`,[])}addRange(t){if(t.rangeType===e.RANGE_TYPE.COLUMN||t.rangeType===e.RANGE_TYPE.ROW||t.rangeType===e.RANGE_TYPE.ALL)return;let n=this._getIntersects(t),r=this._getSplitRanges(t,n);r.length>0&&this._ranges.push(...r)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(t,n){let r=[t];for(let t of n.concat(this._selectedRanges)){let n=[];for(let i of r){let r=e.Rectangle.subtract(i,t);r&&r.length>0&&n.push(...r)}r=n}return r.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(t){let n=[];for(let r of this._ranges){let i=e.Rectangle.getIntersects(r,t);i&&n.push(i)}return n}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},M=class extends n.Shape{constructor(e,t){super(e,t),p(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,r;let i=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(r=this._color)==null?void 0:r.a)==null?.5:t})`;n.Rect.drawWith(e,{width:this.width,height:this.height,fill:i,stroke:void 0,strokeWidth:0,evented:!1})}};let N=class extends e.Disposable{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,p(this,`_shapes`,[]),p(this,`_rangeCollection`,new j),p(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe((0,t.combineLatest)([this._contextService.subscribeContextValue$(c.REF_SELECTIONS_ENABLED).pipe((0,t.startWith)(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe((0,t.tap)(e=>this._color=e)),(0,t.merge)(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,t.map)(()=>this._sheetsSelectionsService.getCurrentSelections()))),(0,t.merge)(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,t.map)(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(t,n){if(t.rangeType===e.RANGE_TYPE.COLUMN||t.rangeType===e.RANGE_TYPE.ROW||t.rangeType===e.RANGE_TYPE.ALL)return;let r=n.getRowCount(),i=n.getColumnCount(),{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,l={startRow:a,endRow:o,startColumn:0,endColumn:s-1},u={startRow:a,endRow:o,startColumn:c+1,endColumn:i},d={startRow:0,endRow:a-1,startColumn:s,endColumn:c},f={startRow:o+1,endRow:r,startColumn:s,endColumn:c};for(let e of[l,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(t,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,u=(0,l.getCoordByCell)(a,s,r,i),d=(0,l.getCoordByCell)(o,c,r,i),{startX:f,startY:p}=u,{endX:m,endY:h}=d,g=m-f,_=h-p,v={left:f,top:p,color:new e.ColorKit(this._color).toRgb(),width:g,height:_,zIndex:1,evented:!1},y=new M(`crosshair-${n}`,v);this._shapes.push(y),r.addObject(y)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};N=k([O(1,(0,e.Inject)(l.SheetSkeletonManagerService)),O(2,(0,e.Inject)(c.SheetsSelectionsService)),O(3,(0,e.Inject)(h)),O(4,(0,e.Inject)(e.IContextService)),O(5,c.IRefSelectionsService)],N);let P=class extends e.Plugin{constructor(t=C,n,r,i){super(),this._config=t,this._injector=n,this._renderManagerService=r,this._configService=i;let{...a}=(0,e.merge)({},C,this._config);this._configService.setConfig(S,a)}onStarting(){[[h],[A]].forEach(e=>this._injector.add(e))}onReady(){[[N]].forEach(e=>this._injector.add(e)),this._injector.get(A),this._renderManagerService.registerRenderModule(e.UniverInstanceType.UNIVER_SHEET,[N])}};p(P,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),p(P,`packageName`,b),p(P,`version`,x),p(P,`type`,e.UniverInstanceType.UNIVER_SHEET),P=k([O(1,(0,e.Inject)(e.Injector)),O(2,n.IRenderManagerService),O(3,e.IConfigService)],P),exports.CROSSHAIR_HIGHLIGHT_COLORS=m,exports.DisableCrosshairHighlightOperation=y,exports.EnableCrosshairHighlightOperation=v,exports.SetCrosshairHighlightColorOperation=_,exports.SheetsCrosshairHighlightService=h,exports.ToggleCrosshairHighlightOperation=g,Object.defineProperty(exports,`UniverSheetsCrosshairHighlightPlugin`,{enumerable:!0,get:function(){return P}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@univerjs/core`),t=require(`rxjs`),n=require(`@univerjs/engine-render`),r=require(`@univerjs/icons`),i=require(`@univerjs/ui`),a=require(`@univerjs/design`),o=require(`react`),s=require(`react/jsx-runtime`),c=require(`@univerjs/sheets`),l=require(`@univerjs/sheets-ui`);function u(e){"@babel/helpers - typeof";return u=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},u(e)}function d(e,t){if(u(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(u(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function f(e){var t=d(e,`string`);return u(t)==`symbol`?t:t+``}function p(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const m=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var h=class extends e.Disposable{constructor(...e){super(...e),p(this,`_enabled$`,new t.BehaviorSubject(!1)),p(this,`enabled$`,this._enabled$.asObservable()),p(this,`_color$`,new t.BehaviorSubject(m[0])),p(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};const g={id:`sheet.operation.toggle-crosshair-highlight`,type:e.CommandType.OPERATION,handler(e){let t=e.get(h),n=t.enabled;return t.setEnabled(!n),!0}},_={id:`sheet.operation.set-crosshair-highlight-color`,type:e.CommandType.OPERATION,handler(e,{value:t}){let n=e.get(h);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},v={id:`sheet.operation.enable-crosshair-highlight`,type:e.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?!1:(t.setEnabled(!0),!0)}},y={id:`sheet.operation.disable-crosshair-highlight`,type:e.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?(t.setEnabled(!1),!0):!1}};var b=`@univerjs/sheets-crosshair-highlight`,x=`0.20.0`;const S=`sheets-crosshair-highlight.config`;Symbol(S);const C={},w=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function T(t){let n=t.get(h);return{id:g.id,tooltip:`crosshair.button.tooltip`,type:i.MenuItemType.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:w,hoverable:!1,selectable:!1}}],selectionsCommandId:_.id,activated$:n.enabled$,hidden$:(0,i.getMenuHiddenObservable)(t,e.UniverInstanceType.UNIVER_SHEET)}}const E={[i.ContextMenuPosition.FOOTER_MENU]:{[i.ContextMenuGroup.OTHERS]:{[g.id]:{order:0,menuItemFactory:T}}}};function D(e){let{onChange:t}=e,n=(0,i.useObservable)((0,i.useDependency)(h).color$),r=(0,o.useCallback)(e=>{t==null||t(e)},[t]);return(0,s.jsx)(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:m.map(e=>(0,s.jsx)(`div`,{className:(0,a.clsx)(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,a.borderClassName,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function O(e,t){return function(n,r){t(n,r,e)}}function k(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 A=class extends e.Disposable{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[g,_,v,y].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(E)}_initComponents(){this._componentMgr.register(w,D),this._componentMgr.register(`CrossHighlightingIcon`,r.CrossHighlightingIcon)}};A=k([O(0,(0,e.Inject)(i.ComponentManager)),O(1,i.IMenuManagerService),O(2,e.ICommandService)],A);var j=class{constructor(){p(this,`_selectedRanges`,[]),p(this,`_ranges`,[])}addRange(t){if(t.rangeType===e.RANGE_TYPE.COLUMN||t.rangeType===e.RANGE_TYPE.ROW||t.rangeType===e.RANGE_TYPE.ALL)return;let n=this._getIntersects(t),r=this._getSplitRanges(t,n);r.length>0&&this._ranges.push(...r)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(t,n){let r=[t];for(let t of n.concat(this._selectedRanges)){let n=[];for(let i of r){let r=e.Rectangle.subtract(i,t);r&&r.length>0&&n.push(...r)}r=n}return r.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(t){let n=[];for(let r of this._ranges){let i=e.Rectangle.getIntersects(r,t);i&&n.push(i)}return n}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},M=class extends n.Shape{constructor(e,t){super(e,t),p(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,r;let i=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(r=this._color)==null?void 0:r.a)==null?.5:t})`;n.Rect.drawWith(e,{width:this.width,height:this.height,fill:i,stroke:void 0,strokeWidth:0,evented:!1})}};let N=class extends e.Disposable{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,p(this,`_shapes`,[]),p(this,`_rangeCollection`,new j),p(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe((0,t.combineLatest)([this._contextService.subscribeContextValue$(c.REF_SELECTIONS_ENABLED).pipe((0,t.startWith)(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe((0,t.tap)(e=>this._color=e)),(0,t.merge)(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,t.map)(()=>this._sheetsSelectionsService.getCurrentSelections()))),(0,t.merge)(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,t.map)(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(t,n){if(t.rangeType===e.RANGE_TYPE.COLUMN||t.rangeType===e.RANGE_TYPE.ROW||t.rangeType===e.RANGE_TYPE.ALL)return;let r=n.getRowCount(),i=n.getColumnCount(),{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,l={startRow:a,endRow:o,startColumn:0,endColumn:s-1},u={startRow:a,endRow:o,startColumn:c+1,endColumn:i},d={startRow:0,endRow:a-1,startColumn:s,endColumn:c},f={startRow:o+1,endRow:r,startColumn:s,endColumn:c};for(let e of[l,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(t,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,u=(0,l.getCoordByCell)(a,s,r,i),d=(0,l.getCoordByCell)(o,c,r,i),{startX:f,startY:p}=u,{endX:m,endY:h}=d,g=m-f,_=h-p,v={left:f,top:p,color:new e.ColorKit(this._color).toRgb(),width:g,height:_,zIndex:1,evented:!1},y=new M(`crosshair-${n}`,v);this._shapes.push(y),r.addObject(y)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};N=k([O(1,(0,e.Inject)(l.SheetSkeletonManagerService)),O(2,(0,e.Inject)(c.SheetsSelectionsService)),O(3,(0,e.Inject)(h)),O(4,(0,e.Inject)(e.IContextService)),O(5,c.IRefSelectionsService)],N);let P=class extends e.Plugin{constructor(t=C,n,r,i){super(),this._config=t,this._injector=n,this._renderManagerService=r,this._configService=i;let{...a}=(0,e.merge)({},C,this._config);this._configService.setConfig(S,a)}onStarting(){[[h],[A]].forEach(e=>this._injector.add(e))}onReady(){[[N]].forEach(e=>this._injector.add(e)),this._injector.get(A),this._renderManagerService.registerRenderModule(e.UniverInstanceType.UNIVER_SHEET,[N])}};p(P,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),p(P,`packageName`,b),p(P,`version`,x),p(P,`type`,e.UniverInstanceType.UNIVER_SHEET),P=k([O(1,(0,e.Inject)(e.Injector)),O(2,n.IRenderManagerService),O(3,e.IConfigService)],P),exports.CROSSHAIR_HIGHLIGHT_COLORS=m,exports.DisableCrosshairHighlightOperation=y,exports.EnableCrosshairHighlightOperation=v,exports.SetCrosshairHighlightColorOperation=_,exports.SheetsCrosshairHighlightService=h,exports.ToggleCrosshairHighlightOperation=g,Object.defineProperty(exports,`UniverSheetsCrosshairHighlightPlugin`,{enumerable:!0,get:function(){return P}});
package/lib/es/facade.js CHANGED
@@ -1 +1 @@
1
- import{ICommandService as e}from"@univerjs/core";import{FEventName as t,FUniver as n}from"@univerjs/core/facade";import{CROSSHAIR_HIGHLIGHT_COLORS as r,DisableCrosshairHighlightOperation as i,EnableCrosshairHighlightOperation as a,SetCrosshairHighlightColorOperation as o,SheetsCrosshairHighlightService as s,ToggleCrosshairHighlightOperation as c}from"@univerjs/sheets-crosshair-highlight";var l=class{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}},u=class extends n{_initialize(t){let n=t.get(e);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>n.onCommandExecuted(e=>{if(e.id===a.id||e.id===i.id||e.id===c.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,{enabled:this.getCrosshairHighlightEnabled(),...e})}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>n.onCommandExecuted(e=>{if(e.id===o.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightColorChanged,{color:this.getCrosshairHighlightColor(),...e})}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(a.id):this._commandService.syncExecuteCommand(i.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(o.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(s).enabled}getCrosshairHighlightColor(){return this._injector.get(s).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return r}};t.extend(l),n.extend(u);export{};
1
+ import{ICommandService as e}from"@univerjs/core";import{FEventName as t,FUniver as n}from"@univerjs/core/facade";import{CROSSHAIR_HIGHLIGHT_COLORS as r,DisableCrosshairHighlightOperation as i,EnableCrosshairHighlightOperation as a,SetCrosshairHighlightColorOperation as o,SheetsCrosshairHighlightService as s,ToggleCrosshairHighlightOperation as c}from"@univerjs/sheets-crosshair-highlight";var l=class extends n{_initialize(t){let n=t.get(e);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>n.onCommandExecuted(e=>{if(e.id===a.id||e.id===i.id||e.id===c.id){let e=this.getActiveSheet();if(!e)return;let t={enabled:this.getCrosshairHighlightEnabled(),...e};this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,t)}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>n.onCommandExecuted(e=>{if(e.id===o.id){let e=this.getActiveSheet();if(!e)return;let t={color:this.getCrosshairHighlightColor(),...e};this.fireEvent(this.Event.CrosshairHighlightColorChanged,t)}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(a.id):this._commandService.syncExecuteCommand(i.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(o.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(s).enabled}getCrosshairHighlightColor(){return this._injector.get(s).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return r}};n.extend(l);var u=class extends t{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}};t.extend(u);export{};
package/lib/es/index.js CHANGED
@@ -1 +1 @@
1
- import{ColorKit as e,CommandType as t,Disposable as n,ICommandService as r,IConfigService as i,IContextService as a,Inject as o,Injector as s,Plugin as c,RANGE_TYPE as l,Rectangle as u,UniverInstanceType as d,merge as f}from"@univerjs/core";import{BehaviorSubject as p,combineLatest as m,map as h,merge as g,startWith as _,tap as v}from"rxjs";import{IRenderManagerService as y,Rect as b,Shape as ee}from"@univerjs/engine-render";import{CrossHighlightingIcon as x}from"@univerjs/icons";import{ComponentManager as te,ContextMenuGroup as S,ContextMenuPosition as C,IMenuManagerService as w,MenuItemType as T,getMenuHiddenObservable as E,useDependency as D,useObservable as O}from"@univerjs/ui";import{borderClassName as k,clsx as A}from"@univerjs/design";import{useCallback as ne}from"react";import{jsx as j}from"react/jsx-runtime";import{IRefSelectionsService as re,REF_SELECTIONS_ENABLED as ie,SheetsSelectionsService as ae}from"@univerjs/sheets";import{SheetSkeletonManagerService as oe,getCoordByCell as M}from"@univerjs/sheets-ui";function N(e){"@babel/helpers - typeof";return N=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},N(e)}function P(e,t){if(N(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(N(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function F(e){var t=P(e,`string`);return N(t)==`symbol`?t:t+``}function I(e,t,n){return(t=F(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var R=class extends n{constructor(...e){super(...e),I(this,`_enabled$`,new p(!1)),I(this,`enabled$`,this._enabled$.asObservable()),I(this,`_color$`,new p(L[0])),I(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};const z={id:`sheet.operation.toggle-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R),n=t.enabled;return t.setEnabled(!n),!0}},B={id:`sheet.operation.set-crosshair-highlight-color`,type:t.OPERATION,handler(e,{value:t}){let n=e.get(R);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},V={id:`sheet.operation.enable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?!1:(t.setEnabled(!0),!0)}},H={id:`sheet.operation.disable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?(t.setEnabled(!1),!0):!1}};var U=`@univerjs/sheets-crosshair-highlight`,W=`0.19.0`;const G=`sheets-crosshair-highlight.config`;Symbol(G);const K={},q=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function se(e){let t=e.get(R);return{id:z.id,tooltip:`crosshair.button.tooltip`,type:T.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:q,hoverable:!1,selectable:!1}}],selectionsCommandId:B.id,activated$:t.enabled$,hidden$:E(e,d.UNIVER_SHEET)}}const J={[C.FOOTER_MENU]:{[S.OTHERS]:{[z.id]:{order:0,menuItemFactory:se}}}};function ce(e){let{onChange:t}=e,n=O(D(R).color$),r=ne(e=>{t==null||t(e)},[t]);return j(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:L.map(e=>j(`div`,{className:A(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,k,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function Y(e,t){return function(n,r){t(n,r,e)}}function X(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 Z=class extends n{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[z,B,V,H].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(J)}_initComponents(){this._componentMgr.register(q,ce),this._componentMgr.register(`CrossHighlightingIcon`,x)}};Z=X([Y(0,o(te)),Y(1,w),Y(2,r)],Z);var le=class{constructor(){I(this,`_selectedRanges`,[]),I(this,`_ranges`,[])}addRange(e){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let t=this._getIntersects(e),n=this._getSplitRanges(e,t);n.length>0&&this._ranges.push(...n)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(e,t){let n=[e];for(let e of t.concat(this._selectedRanges)){let t=[];for(let r of n){let n=u.subtract(r,e);n&&n.length>0&&t.push(...n)}n=t}return n.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(e){let t=[];for(let n of this._ranges){let r=u.getIntersects(n,e);r&&t.push(r)}return t}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},ue=class extends ee{constructor(e,t){super(e,t),I(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,n;let r=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(n=this._color)==null?void 0:n.a)==null?.5:t})`;b.drawWith(e,{width:this.width,height:this.height,fill:r,stroke:void 0,strokeWidth:0,evented:!1})}};let Q=class extends n{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,I(this,`_shapes`,[]),I(this,`_rangeCollection`,new le),I(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe(m([this._contextService.subscribeContextValue$(ie).pipe(_(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe(v(e=>this._color=e)),g(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._sheetsSelectionsService.getCurrentSelections()))),g(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(e,t){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let n=t.getRowCount(),r=t.getColumnCount(),{startRow:i,endRow:a,startColumn:o,endColumn:s}=e,c={startRow:i,endRow:a,startColumn:0,endColumn:o-1},u={startRow:i,endRow:a,startColumn:s+1,endColumn:r},d={startRow:0,endRow:i-1,startColumn:o,endColumn:s},f={startRow:a+1,endRow:n,startColumn:o,endColumn:s};for(let e of[c,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(t,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,l=M(a,s,r,i),u=M(o,c,r,i),{startX:d,startY:f}=l,{endX:p,endY:m}=u,h=p-d,g=m-f,_={left:d,top:f,color:new e(this._color).toRgb(),width:h,height:g,zIndex:1,evented:!1},v=new ue(`crosshair-${n}`,_);this._shapes.push(v),r.addObject(v)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};Q=X([Y(1,o(oe)),Y(2,o(ae)),Y(3,o(R)),Y(4,o(a)),Y(5,re)],Q);let $=class extends c{constructor(e=K,t,n,r){super(),this._config=e,this._injector=t,this._renderManagerService=n,this._configService=r;let{...i}=f({},K,this._config);this._configService.setConfig(G,i)}onStarting(){[[R],[Z]].forEach(e=>this._injector.add(e))}onReady(){[[Q]].forEach(e=>this._injector.add(e)),this._injector.get(Z),this._renderManagerService.registerRenderModule(d.UNIVER_SHEET,[Q])}};I($,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),I($,`packageName`,U),I($,`version`,W),I($,`type`,d.UNIVER_SHEET),$=X([Y(1,o(s)),Y(2,y),Y(3,i)],$);export{L as CROSSHAIR_HIGHLIGHT_COLORS,H as DisableCrosshairHighlightOperation,V as EnableCrosshairHighlightOperation,B as SetCrosshairHighlightColorOperation,R as SheetsCrosshairHighlightService,z as ToggleCrosshairHighlightOperation,$ as UniverSheetsCrosshairHighlightPlugin};
1
+ import{ColorKit as e,CommandType as t,Disposable as n,ICommandService as r,IConfigService as i,IContextService as a,Inject as o,Injector as s,Plugin as c,RANGE_TYPE as l,Rectangle as u,UniverInstanceType as d,merge as f}from"@univerjs/core";import{BehaviorSubject as p,combineLatest as m,map as h,merge as g,startWith as _,tap as v}from"rxjs";import{IRenderManagerService as y,Rect as b,Shape as ee}from"@univerjs/engine-render";import{CrossHighlightingIcon as x}from"@univerjs/icons";import{ComponentManager as te,ContextMenuGroup as S,ContextMenuPosition as C,IMenuManagerService as w,MenuItemType as T,getMenuHiddenObservable as E,useDependency as D,useObservable as O}from"@univerjs/ui";import{borderClassName as k,clsx as A}from"@univerjs/design";import{useCallback as ne}from"react";import{jsx as j}from"react/jsx-runtime";import{IRefSelectionsService as re,REF_SELECTIONS_ENABLED as ie,SheetsSelectionsService as ae}from"@univerjs/sheets";import{SheetSkeletonManagerService as oe,getCoordByCell as M}from"@univerjs/sheets-ui";function N(e){"@babel/helpers - typeof";return N=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},N(e)}function P(e,t){if(N(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(N(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function F(e){var t=P(e,`string`);return N(t)==`symbol`?t:t+``}function I(e,t,n){return(t=F(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var R=class extends n{constructor(...e){super(...e),I(this,`_enabled$`,new p(!1)),I(this,`enabled$`,this._enabled$.asObservable()),I(this,`_color$`,new p(L[0])),I(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};const z={id:`sheet.operation.toggle-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R),n=t.enabled;return t.setEnabled(!n),!0}},B={id:`sheet.operation.set-crosshair-highlight-color`,type:t.OPERATION,handler(e,{value:t}){let n=e.get(R);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},V={id:`sheet.operation.enable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?!1:(t.setEnabled(!0),!0)}},H={id:`sheet.operation.disable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?(t.setEnabled(!1),!0):!1}};var U=`@univerjs/sheets-crosshair-highlight`,W=`0.20.0`;const G=`sheets-crosshair-highlight.config`;Symbol(G);const K={},q=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function se(e){let t=e.get(R);return{id:z.id,tooltip:`crosshair.button.tooltip`,type:T.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:q,hoverable:!1,selectable:!1}}],selectionsCommandId:B.id,activated$:t.enabled$,hidden$:E(e,d.UNIVER_SHEET)}}const J={[C.FOOTER_MENU]:{[S.OTHERS]:{[z.id]:{order:0,menuItemFactory:se}}}};function ce(e){let{onChange:t}=e,n=O(D(R).color$),r=ne(e=>{t==null||t(e)},[t]);return j(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:L.map(e=>j(`div`,{className:A(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,k,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function Y(e,t){return function(n,r){t(n,r,e)}}function X(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 Z=class extends n{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[z,B,V,H].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(J)}_initComponents(){this._componentMgr.register(q,ce),this._componentMgr.register(`CrossHighlightingIcon`,x)}};Z=X([Y(0,o(te)),Y(1,w),Y(2,r)],Z);var le=class{constructor(){I(this,`_selectedRanges`,[]),I(this,`_ranges`,[])}addRange(e){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let t=this._getIntersects(e),n=this._getSplitRanges(e,t);n.length>0&&this._ranges.push(...n)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(e,t){let n=[e];for(let e of t.concat(this._selectedRanges)){let t=[];for(let r of n){let n=u.subtract(r,e);n&&n.length>0&&t.push(...n)}n=t}return n.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(e){let t=[];for(let n of this._ranges){let r=u.getIntersects(n,e);r&&t.push(r)}return t}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},ue=class extends ee{constructor(e,t){super(e,t),I(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,n;let r=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(n=this._color)==null?void 0:n.a)==null?.5:t})`;b.drawWith(e,{width:this.width,height:this.height,fill:r,stroke:void 0,strokeWidth:0,evented:!1})}};let Q=class extends n{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,I(this,`_shapes`,[]),I(this,`_rangeCollection`,new le),I(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe(m([this._contextService.subscribeContextValue$(ie).pipe(_(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe(v(e=>this._color=e)),g(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._sheetsSelectionsService.getCurrentSelections()))),g(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(e,t){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let n=t.getRowCount(),r=t.getColumnCount(),{startRow:i,endRow:a,startColumn:o,endColumn:s}=e,c={startRow:i,endRow:a,startColumn:0,endColumn:o-1},u={startRow:i,endRow:a,startColumn:s+1,endColumn:r},d={startRow:0,endRow:i-1,startColumn:o,endColumn:s},f={startRow:a+1,endRow:n,startColumn:o,endColumn:s};for(let e of[c,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(t,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,l=M(a,s,r,i),u=M(o,c,r,i),{startX:d,startY:f}=l,{endX:p,endY:m}=u,h=p-d,g=m-f,_={left:d,top:f,color:new e(this._color).toRgb(),width:h,height:g,zIndex:1,evented:!1},v=new ue(`crosshair-${n}`,_);this._shapes.push(v),r.addObject(v)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};Q=X([Y(1,o(oe)),Y(2,o(ae)),Y(3,o(R)),Y(4,o(a)),Y(5,re)],Q);let $=class extends c{constructor(e=K,t,n,r){super(),this._config=e,this._injector=t,this._renderManagerService=n,this._configService=r;let{...i}=f({},K,this._config);this._configService.setConfig(G,i)}onStarting(){[[R],[Z]].forEach(e=>this._injector.add(e))}onReady(){[[Q]].forEach(e=>this._injector.add(e)),this._injector.get(Z),this._renderManagerService.registerRenderModule(d.UNIVER_SHEET,[Q])}};I($,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),I($,`packageName`,U),I($,`version`,W),I($,`type`,d.UNIVER_SHEET),$=X([Y(1,o(s)),Y(2,y),Y(3,i)],$);export{L as CROSSHAIR_HIGHLIGHT_COLORS,H as DisableCrosshairHighlightOperation,V as EnableCrosshairHighlightOperation,B as SetCrosshairHighlightColorOperation,R as SheetsCrosshairHighlightService,z as ToggleCrosshairHighlightOperation,$ as UniverSheetsCrosshairHighlightPlugin};
package/lib/facade.js CHANGED
@@ -1 +1 @@
1
- import{ICommandService as e}from"@univerjs/core";import{FEventName as t,FUniver as n}from"@univerjs/core/facade";import{CROSSHAIR_HIGHLIGHT_COLORS as r,DisableCrosshairHighlightOperation as i,EnableCrosshairHighlightOperation as a,SetCrosshairHighlightColorOperation as o,SheetsCrosshairHighlightService as s,ToggleCrosshairHighlightOperation as c}from"@univerjs/sheets-crosshair-highlight";var l=class{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}},u=class extends n{_initialize(t){let n=t.get(e);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>n.onCommandExecuted(e=>{if(e.id===a.id||e.id===i.id||e.id===c.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,{enabled:this.getCrosshairHighlightEnabled(),...e})}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>n.onCommandExecuted(e=>{if(e.id===o.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightColorChanged,{color:this.getCrosshairHighlightColor(),...e})}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(a.id):this._commandService.syncExecuteCommand(i.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(o.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(s).enabled}getCrosshairHighlightColor(){return this._injector.get(s).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return r}};t.extend(l),n.extend(u);export{};
1
+ import{ICommandService as e}from"@univerjs/core";import{FEventName as t,FUniver as n}from"@univerjs/core/facade";import{CROSSHAIR_HIGHLIGHT_COLORS as r,DisableCrosshairHighlightOperation as i,EnableCrosshairHighlightOperation as a,SetCrosshairHighlightColorOperation as o,SheetsCrosshairHighlightService as s,ToggleCrosshairHighlightOperation as c}from"@univerjs/sheets-crosshair-highlight";var l=class extends n{_initialize(t){let n=t.get(e);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>n.onCommandExecuted(e=>{if(e.id===a.id||e.id===i.id||e.id===c.id){let e=this.getActiveSheet();if(!e)return;let t={enabled:this.getCrosshairHighlightEnabled(),...e};this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,t)}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>n.onCommandExecuted(e=>{if(e.id===o.id){let e=this.getActiveSheet();if(!e)return;let t={color:this.getCrosshairHighlightColor(),...e};this.fireEvent(this.Event.CrosshairHighlightColorChanged,t)}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(a.id):this._commandService.syncExecuteCommand(i.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(o.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(s).enabled}getCrosshairHighlightColor(){return this._injector.get(s).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return r}};n.extend(l);var u=class extends t{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}};t.extend(u);export{};
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- import{ColorKit as e,CommandType as t,Disposable as n,ICommandService as r,IConfigService as i,IContextService as a,Inject as o,Injector as s,Plugin as c,RANGE_TYPE as l,Rectangle as u,UniverInstanceType as d,merge as f}from"@univerjs/core";import{BehaviorSubject as p,combineLatest as m,map as h,merge as g,startWith as _,tap as v}from"rxjs";import{IRenderManagerService as y,Rect as b,Shape as ee}from"@univerjs/engine-render";import{CrossHighlightingIcon as x}from"@univerjs/icons";import{ComponentManager as te,ContextMenuGroup as S,ContextMenuPosition as C,IMenuManagerService as w,MenuItemType as T,getMenuHiddenObservable as E,useDependency as D,useObservable as O}from"@univerjs/ui";import{borderClassName as k,clsx as A}from"@univerjs/design";import{useCallback as ne}from"react";import{jsx as j}from"react/jsx-runtime";import{IRefSelectionsService as re,REF_SELECTIONS_ENABLED as ie,SheetsSelectionsService as ae}from"@univerjs/sheets";import{SheetSkeletonManagerService as oe,getCoordByCell as M}from"@univerjs/sheets-ui";function N(e){"@babel/helpers - typeof";return N=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},N(e)}function P(e,t){if(N(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(N(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function F(e){var t=P(e,`string`);return N(t)==`symbol`?t:t+``}function I(e,t,n){return(t=F(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var R=class extends n{constructor(...e){super(...e),I(this,`_enabled$`,new p(!1)),I(this,`enabled$`,this._enabled$.asObservable()),I(this,`_color$`,new p(L[0])),I(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};const z={id:`sheet.operation.toggle-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R),n=t.enabled;return t.setEnabled(!n),!0}},B={id:`sheet.operation.set-crosshair-highlight-color`,type:t.OPERATION,handler(e,{value:t}){let n=e.get(R);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},V={id:`sheet.operation.enable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?!1:(t.setEnabled(!0),!0)}},H={id:`sheet.operation.disable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?(t.setEnabled(!1),!0):!1}};var U=`@univerjs/sheets-crosshair-highlight`,W=`0.19.0`;const G=`sheets-crosshair-highlight.config`;Symbol(G);const K={},q=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function se(e){let t=e.get(R);return{id:z.id,tooltip:`crosshair.button.tooltip`,type:T.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:q,hoverable:!1,selectable:!1}}],selectionsCommandId:B.id,activated$:t.enabled$,hidden$:E(e,d.UNIVER_SHEET)}}const J={[C.FOOTER_MENU]:{[S.OTHERS]:{[z.id]:{order:0,menuItemFactory:se}}}};function ce(e){let{onChange:t}=e,n=O(D(R).color$),r=ne(e=>{t==null||t(e)},[t]);return j(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:L.map(e=>j(`div`,{className:A(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,k,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function Y(e,t){return function(n,r){t(n,r,e)}}function X(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 Z=class extends n{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[z,B,V,H].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(J)}_initComponents(){this._componentMgr.register(q,ce),this._componentMgr.register(`CrossHighlightingIcon`,x)}};Z=X([Y(0,o(te)),Y(1,w),Y(2,r)],Z);var le=class{constructor(){I(this,`_selectedRanges`,[]),I(this,`_ranges`,[])}addRange(e){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let t=this._getIntersects(e),n=this._getSplitRanges(e,t);n.length>0&&this._ranges.push(...n)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(e,t){let n=[e];for(let e of t.concat(this._selectedRanges)){let t=[];for(let r of n){let n=u.subtract(r,e);n&&n.length>0&&t.push(...n)}n=t}return n.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(e){let t=[];for(let n of this._ranges){let r=u.getIntersects(n,e);r&&t.push(r)}return t}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},ue=class extends ee{constructor(e,t){super(e,t),I(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,n;let r=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(n=this._color)==null?void 0:n.a)==null?.5:t})`;b.drawWith(e,{width:this.width,height:this.height,fill:r,stroke:void 0,strokeWidth:0,evented:!1})}};let Q=class extends n{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,I(this,`_shapes`,[]),I(this,`_rangeCollection`,new le),I(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe(m([this._contextService.subscribeContextValue$(ie).pipe(_(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe(v(e=>this._color=e)),g(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._sheetsSelectionsService.getCurrentSelections()))),g(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(e,t){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let n=t.getRowCount(),r=t.getColumnCount(),{startRow:i,endRow:a,startColumn:o,endColumn:s}=e,c={startRow:i,endRow:a,startColumn:0,endColumn:o-1},u={startRow:i,endRow:a,startColumn:s+1,endColumn:r},d={startRow:0,endRow:i-1,startColumn:o,endColumn:s},f={startRow:a+1,endRow:n,startColumn:o,endColumn:s};for(let e of[c,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(t,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,l=M(a,s,r,i),u=M(o,c,r,i),{startX:d,startY:f}=l,{endX:p,endY:m}=u,h=p-d,g=m-f,_={left:d,top:f,color:new e(this._color).toRgb(),width:h,height:g,zIndex:1,evented:!1},v=new ue(`crosshair-${n}`,_);this._shapes.push(v),r.addObject(v)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};Q=X([Y(1,o(oe)),Y(2,o(ae)),Y(3,o(R)),Y(4,o(a)),Y(5,re)],Q);let $=class extends c{constructor(e=K,t,n,r){super(),this._config=e,this._injector=t,this._renderManagerService=n,this._configService=r;let{...i}=f({},K,this._config);this._configService.setConfig(G,i)}onStarting(){[[R],[Z]].forEach(e=>this._injector.add(e))}onReady(){[[Q]].forEach(e=>this._injector.add(e)),this._injector.get(Z),this._renderManagerService.registerRenderModule(d.UNIVER_SHEET,[Q])}};I($,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),I($,`packageName`,U),I($,`version`,W),I($,`type`,d.UNIVER_SHEET),$=X([Y(1,o(s)),Y(2,y),Y(3,i)],$);export{L as CROSSHAIR_HIGHLIGHT_COLORS,H as DisableCrosshairHighlightOperation,V as EnableCrosshairHighlightOperation,B as SetCrosshairHighlightColorOperation,R as SheetsCrosshairHighlightService,z as ToggleCrosshairHighlightOperation,$ as UniverSheetsCrosshairHighlightPlugin};
1
+ import{ColorKit as e,CommandType as t,Disposable as n,ICommandService as r,IConfigService as i,IContextService as a,Inject as o,Injector as s,Plugin as c,RANGE_TYPE as l,Rectangle as u,UniverInstanceType as d,merge as f}from"@univerjs/core";import{BehaviorSubject as p,combineLatest as m,map as h,merge as g,startWith as _,tap as v}from"rxjs";import{IRenderManagerService as y,Rect as b,Shape as ee}from"@univerjs/engine-render";import{CrossHighlightingIcon as x}from"@univerjs/icons";import{ComponentManager as te,ContextMenuGroup as S,ContextMenuPosition as C,IMenuManagerService as w,MenuItemType as T,getMenuHiddenObservable as E,useDependency as D,useObservable as O}from"@univerjs/ui";import{borderClassName as k,clsx as A}from"@univerjs/design";import{useCallback as ne}from"react";import{jsx as j}from"react/jsx-runtime";import{IRefSelectionsService as re,REF_SELECTIONS_ENABLED as ie,SheetsSelectionsService as ae}from"@univerjs/sheets";import{SheetSkeletonManagerService as oe,getCoordByCell as M}from"@univerjs/sheets-ui";function N(e){"@babel/helpers - typeof";return N=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},N(e)}function P(e,t){if(N(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(N(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function F(e){var t=P(e,`string`);return N(t)==`symbol`?t:t+``}function I(e,t,n){return(t=F(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var R=class extends n{constructor(...e){super(...e),I(this,`_enabled$`,new p(!1)),I(this,`enabled$`,this._enabled$.asObservable()),I(this,`_color$`,new p(L[0])),I(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};const z={id:`sheet.operation.toggle-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R),n=t.enabled;return t.setEnabled(!n),!0}},B={id:`sheet.operation.set-crosshair-highlight-color`,type:t.OPERATION,handler(e,{value:t}){let n=e.get(R);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},V={id:`sheet.operation.enable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?!1:(t.setEnabled(!0),!0)}},H={id:`sheet.operation.disable-crosshair-highlight`,type:t.OPERATION,handler(e){let t=e.get(R);return t.enabled?(t.setEnabled(!1),!0):!1}};var U=`@univerjs/sheets-crosshair-highlight`,W=`0.20.0`;const G=`sheets-crosshair-highlight.config`;Symbol(G);const K={},q=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function se(e){let t=e.get(R);return{id:z.id,tooltip:`crosshair.button.tooltip`,type:T.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:q,hoverable:!1,selectable:!1}}],selectionsCommandId:B.id,activated$:t.enabled$,hidden$:E(e,d.UNIVER_SHEET)}}const J={[C.FOOTER_MENU]:{[S.OTHERS]:{[z.id]:{order:0,menuItemFactory:se}}}};function ce(e){let{onChange:t}=e,n=O(D(R).color$),r=ne(e=>{t==null||t(e)},[t]);return j(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:L.map(e=>j(`div`,{className:A(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,k,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function Y(e,t){return function(n,r){t(n,r,e)}}function X(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 Z=class extends n{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[z,B,V,H].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(J)}_initComponents(){this._componentMgr.register(q,ce),this._componentMgr.register(`CrossHighlightingIcon`,x)}};Z=X([Y(0,o(te)),Y(1,w),Y(2,r)],Z);var le=class{constructor(){I(this,`_selectedRanges`,[]),I(this,`_ranges`,[])}addRange(e){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let t=this._getIntersects(e),n=this._getSplitRanges(e,t);n.length>0&&this._ranges.push(...n)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(e,t){let n=[e];for(let e of t.concat(this._selectedRanges)){let t=[];for(let r of n){let n=u.subtract(r,e);n&&n.length>0&&t.push(...n)}n=t}return n.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(e){let t=[];for(let n of this._ranges){let r=u.getIntersects(n,e);r&&t.push(r)}return t}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},ue=class extends ee{constructor(e,t){super(e,t),I(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,n;let r=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(n=this._color)==null?void 0:n.a)==null?.5:t})`;b.drawWith(e,{width:this.width,height:this.height,fill:r,stroke:void 0,strokeWidth:0,evented:!1})}};let Q=class extends n{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,I(this,`_shapes`,[]),I(this,`_rangeCollection`,new le),I(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe(m([this._contextService.subscribeContextValue$(ie).pipe(_(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe(v(e=>this._color=e)),g(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._sheetsSelectionsService.getCurrentSelections()))),g(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe(h(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(e,t){if(e.rangeType===l.COLUMN||e.rangeType===l.ROW||e.rangeType===l.ALL)return;let n=t.getRowCount(),r=t.getColumnCount(),{startRow:i,endRow:a,startColumn:o,endColumn:s}=e,c={startRow:i,endRow:a,startColumn:0,endColumn:o-1},u={startRow:i,endRow:a,startColumn:s+1,endColumn:r},d={startRow:0,endRow:i-1,startColumn:o,endColumn:s},f={startRow:a+1,endRow:n,startColumn:o,endColumn:s};for(let e of[c,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(t,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=t,l=M(a,s,r,i),u=M(o,c,r,i),{startX:d,startY:f}=l,{endX:p,endY:m}=u,h=p-d,g=m-f,_={left:d,top:f,color:new e(this._color).toRgb(),width:h,height:g,zIndex:1,evented:!1},v=new ue(`crosshair-${n}`,_);this._shapes.push(v),r.addObject(v)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};Q=X([Y(1,o(oe)),Y(2,o(ae)),Y(3,o(R)),Y(4,o(a)),Y(5,re)],Q);let $=class extends c{constructor(e=K,t,n,r){super(),this._config=e,this._injector=t,this._renderManagerService=n,this._configService=r;let{...i}=f({},K,this._config);this._configService.setConfig(G,i)}onStarting(){[[R],[Z]].forEach(e=>this._injector.add(e))}onReady(){[[Q]].forEach(e=>this._injector.add(e)),this._injector.get(Z),this._renderManagerService.registerRenderModule(d.UNIVER_SHEET,[Q])}};I($,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),I($,`packageName`,U),I($,`version`,W),I($,`type`,d.UNIVER_SHEET),$=X([Y(1,o(s)),Y(2,y),Y(3,i)],$);export{L as CROSSHAIR_HIGHLIGHT_COLORS,H as DisableCrosshairHighlightOperation,V as EnableCrosshairHighlightOperation,B as SetCrosshairHighlightColorOperation,R as SheetsCrosshairHighlightService,z as ToggleCrosshairHighlightOperation,$ as UniverSheetsCrosshairHighlightPlugin};
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Copyright 2023-present DreamNum Co., Ltd.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import type { IEventBase } from '@univerjs/core/facade';
17
+ import type { FWorkbook, FWorksheet } from '@univerjs/sheets/facade';
18
+ import { FEventName } from '@univerjs/core/facade';
19
+ export interface IFSheetsCrosshairHighlightEventNameMixin {
20
+ /**
21
+ * Triggered when the crosshair highlight is enabled or disabled.
22
+ * @see {@link ICrosshairHighlightEnabledChangedEventParams}
23
+ * @example
24
+ * ```ts
25
+ * const disposable = univerAPI.addEvent(univerAPI.Event.CrosshairHighlightEnabledChanged, (params) => {
26
+ * const { enabled, workbook, worksheet } = params;
27
+ * console.log(params);
28
+ * });
29
+ *
30
+ * // Remove the event listener, use `disposable.dispose()`
31
+ * ```
32
+ */
33
+ readonly CrosshairHighlightEnabledChanged: 'CrosshairHighlightEnabledChanged';
34
+ /**
35
+ * Triggered when the crosshair highlight color is changed.
36
+ * @see {@link ICrosshairHighlightColorChangedEventParams}
37
+ * @example
38
+ * ```ts
39
+ * const disposable = univerAPI.addEvent(univerAPI.Event.CrosshairHighlightColorChanged, (params) => {
40
+ * const { color, workbook, worksheet } = params;
41
+ * console.log(params);
42
+ * });
43
+ *
44
+ * // Remove the event listener, use `disposable.dispose()`
45
+ * ```
46
+ */
47
+ readonly CrosshairHighlightColorChanged: 'CrosshairHighlightColorChanged';
48
+ }
49
+ /**
50
+ * @ignore
51
+ */
52
+ export declare class FSheetsCrosshairHighlightEventNameMixin extends FEventName implements IFSheetsCrosshairHighlightEventNameMixin {
53
+ get CrosshairHighlightEnabledChanged(): 'CrosshairHighlightEnabledChanged';
54
+ get CrosshairHighlightColorChanged(): 'CrosshairHighlightColorChanged';
55
+ }
56
+ export interface ICrosshairHighlightEnabledChangedEventParams extends IEventBase {
57
+ /**
58
+ * Whether the crosshair highlight is enabled.
59
+ */
60
+ enabled: boolean;
61
+ /**
62
+ * The workbook that the crosshair highlight is enabled in.
63
+ */
64
+ workbook: FWorkbook;
65
+ /**
66
+ * The worksheet that the crosshair highlight is enabled in.
67
+ */
68
+ worksheet: FWorksheet;
69
+ }
70
+ export interface ICrosshairHighlightColorChangedEventParams extends IEventBase {
71
+ /**
72
+ * The color of the crosshair highlight.
73
+ */
74
+ color: string;
75
+ /**
76
+ * The workbook that the crosshair highlight is enabled in.
77
+ */
78
+ workbook: FWorkbook;
79
+ /**
80
+ * The worksheet that the crosshair highlight is enabled in.
81
+ */
82
+ worksheet: FWorksheet;
83
+ }
84
+ /**
85
+ * @ignore
86
+ */
87
+ export interface ISheetsCrosshairHighlightEventParamConfig {
88
+ CrosshairHighlightEnabledChanged: ICrosshairHighlightEnabledChangedEventParams;
89
+ CrosshairHighlightColorChanged: ICrosshairHighlightColorChangedEventParams;
90
+ }
91
+ declare module '@univerjs/core/facade' {
92
+ interface FEventName extends IFSheetsCrosshairHighlightEventNameMixin {
93
+ }
94
+ interface IEventParamConfig extends ISheetsCrosshairHighlightEventParamConfig {
95
+ }
96
+ }
@@ -14,88 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { Injector } from '@univerjs/core';
17
- import type { IEventBase } from '@univerjs/core/facade';
18
- import type { FWorkbook, FWorksheet } from '@univerjs/sheets/facade';
19
17
  import { FUniver } from '@univerjs/core/facade';
20
18
  /**
21
19
  * @ignore
22
20
  */
23
- export interface IFSheetCrosshairHighlightEventMixin {
24
- /**
25
- * Triggered when the crosshair highlight is enabled or disabled.
26
- * @see {@link ICrosshairHighlightEnabledChangedEvent}
27
- * @example
28
- * ```ts
29
- * const disposable = univerAPI.addEvent(univerAPI.Event.CrosshairHighlightEnabledChanged, (params) => {
30
- * const { enabled, workbook, worksheet } = params;
31
- * console.log(params);
32
- * });
33
- *
34
- * // Remove the event listener, use `disposable.dispose()`
35
- * ```
36
- */
37
- readonly CrosshairHighlightEnabledChanged: 'CrosshairHighlightEnabledChanged';
38
- /**
39
- * Triggered when the crosshair highlight color is changed.
40
- * @see {@link ICrosshairHighlightColorChangedEvent}
41
- * @example
42
- * ```ts
43
- * const disposable = univerAPI.addEvent(univerAPI.Event.CrosshairHighlightColorChanged, (params) => {
44
- * const { color, workbook, worksheet } = params;
45
- * console.log(params);
46
- * });
47
- *
48
- * // Remove the event listener, use `disposable.dispose()`
49
- * ```
50
- */
51
- readonly CrosshairHighlightColorChanged: 'CrosshairHighlightColorChanged';
52
- }
53
- export interface ICrosshairHighlightEnabledChangedEvent extends IEventBase {
54
- /**
55
- * Whether the crosshair highlight is enabled.
56
- */
57
- enabled: boolean;
58
- /**
59
- * The workbook that the crosshair highlight is enabled in.
60
- */
61
- workbook: FWorkbook;
62
- /**
63
- * The worksheet that the crosshair highlight is enabled in.
64
- */
65
- worksheet: FWorksheet;
66
- }
67
- export interface ICrosshairHighlightColorChangedEvent extends IEventBase {
68
- /**
69
- * The color of the crosshair highlight.
70
- */
71
- color: string;
72
- /**
73
- * The workbook that the crosshair highlight is enabled in.
74
- */
75
- workbook: FWorkbook;
76
- /**
77
- * The worksheet that the crosshair highlight is enabled in.
78
- */
79
- worksheet: FWorksheet;
80
- }
81
- /**
82
- * @ignore
83
- */
84
- export declare class FSheetCrosshairHighlightEventMixin implements IFSheetCrosshairHighlightEventMixin {
85
- get CrosshairHighlightEnabledChanged(): 'CrosshairHighlightEnabledChanged';
86
- get CrosshairHighlightColorChanged(): 'CrosshairHighlightColorChanged';
87
- }
88
- /**
89
- * @ignore
90
- */
91
- export interface ISheetCrosshairHighlightEventConfigs {
92
- CrosshairHighlightEnabledChanged: ICrosshairHighlightEnabledChangedEvent;
93
- CrosshairHighlightColorChanged: ICrosshairHighlightColorChangedEvent;
94
- }
95
- /**
96
- * @ignore
97
- */
98
- export interface IFUniverCrosshairHighlightMixin {
21
+ export interface IFUniverSheetsCrosshairHighlightMixin {
99
22
  /**
100
23
  * Enable or disable crosshair highlight.
101
24
  * @param {boolean} enabled - Whether to enable the crosshair highlight
@@ -144,7 +67,7 @@ export interface IFUniverCrosshairHighlightMixin {
144
67
  /**
145
68
  * @ignore
146
69
  */
147
- export declare class FUniverCrosshairHighlightMixin extends FUniver implements IFUniverCrosshairHighlightMixin {
70
+ export declare class FUniverSheetsCrosshairHighlightMixin extends FUniver implements IFUniverSheetsCrosshairHighlightMixin {
148
71
  /**
149
72
  * @ignore
150
73
  */
@@ -156,10 +79,6 @@ export declare class FUniverCrosshairHighlightMixin extends FUniver implements I
156
79
  get CROSSHAIR_HIGHLIGHT_COLORS(): string[];
157
80
  }
158
81
  declare module '@univerjs/core/facade' {
159
- interface FUniver extends IFUniverCrosshairHighlightMixin {
160
- }
161
- interface FEventName extends IFSheetCrosshairHighlightEventMixin {
162
- }
163
- interface IEventParamConfig extends ISheetCrosshairHighlightEventConfigs {
82
+ interface FUniver extends IFUniverSheetsCrosshairHighlightMixin {
164
83
  }
165
84
  }
@@ -14,4 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import './f-univer';
17
+ import './f-event';
18
+ export type * from './f-event';
17
19
  export type * from './f-univer';
package/lib/umd/facade.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(require(`@univerjs/core`),require(`@univerjs/core/facade`),require(`@univerjs/sheets-crosshair-highlight`)):typeof define==`function`&&define.amd?define([`@univerjs/core`,`@univerjs/core/facade`,`@univerjs/sheets-crosshair-highlight`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverCore,e.UniverCoreFacade,e.UniverSheetsCrosshairHighlight))})(this,function(e,t,n){var r=class{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}},i=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.EnableCrosshairHighlightOperation.id||e.id===n.DisableCrosshairHighlightOperation.id||e.id===n.ToggleCrosshairHighlightOperation.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,{enabled:this.getCrosshairHighlightEnabled(),...e})}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.SetCrosshairHighlightColorOperation.id){let e=this.getActiveSheet();if(!e)return;this.fireEvent(this.Event.CrosshairHighlightColorChanged,{color:this.getCrosshairHighlightColor(),...e})}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(n.EnableCrosshairHighlightOperation.id):this._commandService.syncExecuteCommand(n.DisableCrosshairHighlightOperation.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(n.SetCrosshairHighlightColorOperation.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(n.SheetsCrosshairHighlightService).enabled}getCrosshairHighlightColor(){return this._injector.get(n.SheetsCrosshairHighlightService).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return n.CROSSHAIR_HIGHLIGHT_COLORS}};t.FEventName.extend(r),t.FUniver.extend(i)});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(require(`@univerjs/core`),require(`@univerjs/core/facade`),require(`@univerjs/sheets-crosshair-highlight`)):typeof define==`function`&&define.amd?define([`@univerjs/core`,`@univerjs/core/facade`,`@univerjs/sheets-crosshair-highlight`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverCore,e.UniverCoreFacade,e.UniverSheetsCrosshairHighlight))})(this,function(e,t,n){var r=class extends t.FUniver{_initialize(t){let r=t.get(e.ICommandService);this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightEnabledChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.EnableCrosshairHighlightOperation.id||e.id===n.DisableCrosshairHighlightOperation.id||e.id===n.ToggleCrosshairHighlightOperation.id){let e=this.getActiveSheet();if(!e)return;let t={enabled:this.getCrosshairHighlightEnabled(),...e};this.fireEvent(this.Event.CrosshairHighlightEnabledChanged,t)}}))),this.disposeWithMe(this.registerEventHandler(this.Event.CrosshairHighlightColorChanged,()=>r.onCommandExecuted(e=>{if(e.id===n.SetCrosshairHighlightColorOperation.id){let e=this.getActiveSheet();if(!e)return;let t={color:this.getCrosshairHighlightColor(),...e};this.fireEvent(this.Event.CrosshairHighlightColorChanged,t)}})))}setCrosshairHighlightEnabled(e){return e?this._commandService.syncExecuteCommand(n.EnableCrosshairHighlightOperation.id):this._commandService.syncExecuteCommand(n.DisableCrosshairHighlightOperation.id),this}setCrosshairHighlightColor(e){return this._commandService.syncExecuteCommand(n.SetCrosshairHighlightColorOperation.id,{value:e}),this}getCrosshairHighlightEnabled(){return this._injector.get(n.SheetsCrosshairHighlightService).enabled}getCrosshairHighlightColor(){return this._injector.get(n.SheetsCrosshairHighlightService).color}get CROSSHAIR_HIGHLIGHT_COLORS(){return n.CROSSHAIR_HIGHLIGHT_COLORS}};t.FUniver.extend(r);var i=class extends t.FEventName{get CrosshairHighlightEnabledChanged(){return`CrosshairHighlightEnabledChanged`}get CrosshairHighlightColorChanged(){return`CrosshairHighlightColorChanged`}};t.FEventName.extend(i)});
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`rxjs`),require(`@univerjs/engine-render`),require(`react`),require(`@univerjs/ui`),require(`@univerjs/design`),require(`react/jsx-runtime`),require(`@univerjs/sheets`),require(`@univerjs/sheets-ui`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`rxjs`,`@univerjs/engine-render`,`react`,`@univerjs/ui`,`@univerjs/design`,`react/jsx-runtime`,`@univerjs/sheets`,`@univerjs/sheets-ui`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverSheetsCrosshairHighlight={},e.UniverCore,e.rxjs,e.UniverEngineRender,e.React,e.UniverUi,e.UniverDesign,e.React,e.UniverSheets,e.UniverSheetsUi))})(this,function(e,t,n,r,i,a,o,s,c,l){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function u(e){"@babel/helpers - typeof";return u=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},u(e)}function d(e,t){if(u(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(u(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function f(e){var t=d(e,`string`);return u(t)==`symbol`?t:t+``}function p(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let m=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var h=class extends t.Disposable{constructor(...e){super(...e),p(this,`_enabled$`,new n.BehaviorSubject(!1)),p(this,`enabled$`,this._enabled$.asObservable()),p(this,`_color$`,new n.BehaviorSubject(m[0])),p(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};let g={id:`sheet.operation.toggle-crosshair-highlight`,type:t.CommandType.OPERATION,handler(e){let t=e.get(h),n=t.enabled;return t.setEnabled(!n),!0}},_={id:`sheet.operation.set-crosshair-highlight-color`,type:t.CommandType.OPERATION,handler(e,{value:t}){let n=e.get(h);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},v={id:`sheet.operation.enable-crosshair-highlight`,type:t.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?!1:(t.setEnabled(!0),!0)}},y={id:`sheet.operation.disable-crosshair-highlight`,type:t.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?(t.setEnabled(!1),!0):!1}};var b=`@univerjs/sheets-crosshair-highlight`,x=`0.19.0`;let S=`sheets-crosshair-highlight.config`;Symbol(S);let C={};function w({ref:e,...t}){let{icon:n,id:r,className:a,extend:o,...s}=t,c=`univerjs-icon univerjs-icon-${r} ${a||``}`.trim(),l=(0,i.useRef)(`_${O()}`);return T(n,`${r}`,{defIds:n.defIds,idSuffix:l.current},{ref:e,className:c,...s},o)}function T(e,t,n,r,a){return(0,i.createElement)(e.tag,{key:t,...E(e,n,a),...r},(D(e,n).children||[]).map((r,i)=>T(r,`${t}-${e.tag}-${i}`,n,void 0,a)))}function E(e,t,n){let r={...e.attrs};n!=null&&n.colorChannel1&&r.fill===`colorChannel1`&&(r.fill=n.colorChannel1),e.tag===`mask`&&r.id&&(r.id+=t.idSuffix),Object.entries(r).forEach(([e,n])=>{e===`mask`&&typeof n==`string`&&(r[e]=n.replace(/url\(#(.*)\)/,`url(#$1${t.idSuffix})`))});let{defIds:i}=t;return!i||i.length===0?r:(e.tag===`use`&&r[`xlink:href`]&&(r[`xlink:href`]+=t.idSuffix),Object.entries(r).forEach(([e,n])=>{typeof n==`string`&&(r[e]=n.replace(/url\(#(.*)\)/,`url(#$1${t.idSuffix})`))}),r)}function D(e,t){var n;let{defIds:r}=t;return!r||r.length===0?e:e.tag===`defs`&&(n=e.children)!=null&&n.length?{...e,children:e.children.map(e=>typeof e.attrs.id==`string`&&r&&r.includes(e.attrs.id)?{...e,attrs:{...e.attrs,id:e.attrs.id+t.idSuffix}}:e)}:e}function O(){return Math.random().toString(36).substring(2,8)}w.displayName=`UniverIcon`;let k={tag:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 16 16`,width:`1em`,height:`1em`},children:[{tag:`path`,attrs:{fill:`currentColor`,d:`M3.6498 1.05005C2.21386 1.05005 1.0498 2.21411 1.0498 3.65005V12.35C1.0498 13.786 2.21386 14.95 3.6498 14.95H12.3498C13.7857 14.95 14.9498 13.786 14.9498 12.3501V3.65005C14.9498 2.21411 13.7857 1.05005 12.3498 1.05005H3.6498ZM5.4002 2.25005H3.6498C2.87661 2.25005 2.2498 2.87685 2.2498 3.65005V5.40002H5.4002V2.25005ZM2.2498 10.6V12.35C2.2498 13.1232 2.87661 13.75 3.6498 13.75H5.4002V10.6H2.2498ZM6.60019 13.75H9.4002V9.40002H13.7498V6.60002H9.4002V2.25005H6.60019V6.60002H2.25029V9.40002H6.60019V13.75ZM10.6002 2.25005V5.40002H13.7498V3.65005C13.7498 2.87685 13.123 2.25005 12.3498 2.25005H10.6002ZM13.7498 10.6H10.6002V13.75H12.3498C13.123 13.75 13.7498 13.1232 13.7498 12.3501V10.6Z`,fillRule:`evenodd`,clipRule:`evenodd`}}]},A=(0,i.forwardRef)(function(e,t){return(0,i.createElement)(w,Object.assign({},e,{id:`cross-highlighting-icon`,ref:t,icon:k}))});A.displayName=`CrossHighlightingIcon`;let j=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function M(e){let n=e.get(h);return{id:g.id,tooltip:`crosshair.button.tooltip`,type:a.MenuItemType.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:j,hoverable:!1,selectable:!1}}],selectionsCommandId:_.id,activated$:n.enabled$,hidden$:(0,a.getMenuHiddenObservable)(e,t.UniverInstanceType.UNIVER_SHEET)}}let N={[a.ContextMenuPosition.FOOTER_MENU]:{[a.ContextMenuGroup.OTHERS]:{[g.id]:{order:0,menuItemFactory:M}}}};function P(e){let{onChange:t}=e,n=(0,a.useObservable)((0,a.useDependency)(h).color$),r=(0,i.useCallback)(e=>{t==null||t(e)},[t]);return(0,s.jsx)(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:m.map(e=>(0,s.jsx)(`div`,{className:(0,o.clsx)(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,o.borderClassName,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function F(e,t){return function(n,r){t(n,r,e)}}function I(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 L=class extends t.Disposable{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[g,_,v,y].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(N)}_initComponents(){this._componentMgr.register(j,P),this._componentMgr.register(`CrossHighlightingIcon`,A)}};L=I([F(0,(0,t.Inject)(a.ComponentManager)),F(1,a.IMenuManagerService),F(2,t.ICommandService)],L);var R=class{constructor(){p(this,`_selectedRanges`,[]),p(this,`_ranges`,[])}addRange(e){if(e.rangeType===t.RANGE_TYPE.COLUMN||e.rangeType===t.RANGE_TYPE.ROW||e.rangeType===t.RANGE_TYPE.ALL)return;let n=this._getIntersects(e),r=this._getSplitRanges(e,n);r.length>0&&this._ranges.push(...r)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(e,n){let r=[e];for(let e of n.concat(this._selectedRanges)){let n=[];for(let i of r){let r=t.Rectangle.subtract(i,e);r&&r.length>0&&n.push(...r)}r=n}return r.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(e){let n=[];for(let r of this._ranges){let i=t.Rectangle.getIntersects(r,e);i&&n.push(i)}return n}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},z=class extends r.Shape{constructor(e,t){super(e,t),p(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,n;let i=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(n=this._color)==null?void 0:n.a)==null?.5:t})`;r.Rect.drawWith(e,{width:this.width,height:this.height,fill:i,stroke:void 0,strokeWidth:0,evented:!1})}};let B=class extends t.Disposable{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,p(this,`_shapes`,[]),p(this,`_rangeCollection`,new R),p(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe((0,n.combineLatest)([this._contextService.subscribeContextValue$(c.REF_SELECTIONS_ENABLED).pipe((0,n.startWith)(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe((0,n.tap)(e=>this._color=e)),(0,n.merge)(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,n.map)(()=>this._sheetsSelectionsService.getCurrentSelections()))),(0,n.merge)(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,n.map)(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(e,n){if(e.rangeType===t.RANGE_TYPE.COLUMN||e.rangeType===t.RANGE_TYPE.ROW||e.rangeType===t.RANGE_TYPE.ALL)return;let r=n.getRowCount(),i=n.getColumnCount(),{startRow:a,endRow:o,startColumn:s,endColumn:c}=e,l={startRow:a,endRow:o,startColumn:0,endColumn:s-1},u={startRow:a,endRow:o,startColumn:c+1,endColumn:i},d={startRow:0,endRow:a-1,startColumn:s,endColumn:c},f={startRow:o+1,endRow:r,startColumn:s,endColumn:c};for(let e of[l,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(e,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=e,u=(0,l.getCoordByCell)(a,s,r,i),d=(0,l.getCoordByCell)(o,c,r,i),{startX:f,startY:p}=u,{endX:m,endY:h}=d,g=m-f,_=h-p,v={left:f,top:p,color:new t.ColorKit(this._color).toRgb(),width:g,height:_,zIndex:1,evented:!1},y=new z(`crosshair-${n}`,v);this._shapes.push(y),r.addObject(y)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};B=I([F(1,(0,t.Inject)(l.SheetSkeletonManagerService)),F(2,(0,t.Inject)(c.SheetsSelectionsService)),F(3,(0,t.Inject)(h)),F(4,(0,t.Inject)(t.IContextService)),F(5,c.IRefSelectionsService)],B);let V=class extends t.Plugin{constructor(e=C,n,r,i){super(),this._config=e,this._injector=n,this._renderManagerService=r,this._configService=i;let{...a}=(0,t.merge)({},C,this._config);this._configService.setConfig(S,a)}onStarting(){[[h],[L]].forEach(e=>this._injector.add(e))}onReady(){[[B]].forEach(e=>this._injector.add(e)),this._injector.get(L),this._renderManagerService.registerRenderModule(t.UniverInstanceType.UNIVER_SHEET,[B])}};p(V,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),p(V,`packageName`,b),p(V,`version`,x),p(V,`type`,t.UniverInstanceType.UNIVER_SHEET),V=I([F(1,(0,t.Inject)(t.Injector)),F(2,r.IRenderManagerService),F(3,t.IConfigService)],V),e.CROSSHAIR_HIGHLIGHT_COLORS=m,e.DisableCrosshairHighlightOperation=y,e.EnableCrosshairHighlightOperation=v,e.SetCrosshairHighlightColorOperation=_,e.SheetsCrosshairHighlightService=h,e.ToggleCrosshairHighlightOperation=g,Object.defineProperty(e,`UniverSheetsCrosshairHighlightPlugin`,{enumerable:!0,get:function(){return V}})});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`rxjs`),require(`@univerjs/engine-render`),require(`react`),require(`@univerjs/ui`),require(`@univerjs/design`),require(`react/jsx-runtime`),require(`@univerjs/sheets`),require(`@univerjs/sheets-ui`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`rxjs`,`@univerjs/engine-render`,`react`,`@univerjs/ui`,`@univerjs/design`,`react/jsx-runtime`,`@univerjs/sheets`,`@univerjs/sheets-ui`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverSheetsCrosshairHighlight={},e.UniverCore,e.rxjs,e.UniverEngineRender,e.React,e.UniverUi,e.UniverDesign,e.React,e.UniverSheets,e.UniverSheetsUi))})(this,function(e,t,n,r,i,a,o,s,c,l){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function u(e){"@babel/helpers - typeof";return u=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},u(e)}function d(e,t){if(u(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(u(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function f(e){var t=d(e,`string`);return u(t)==`symbol`?t:t+``}function p(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let m=[`rgba(158, 109, 227, 0.3)`,`rgba(254, 75, 75, 0.3)`,`rgba(255, 140, 81, 0.3)`,`rgba(164, 220, 22, 0.3)`,`rgba(45, 174, 255, 0.3)`,`rgba(58, 96, 247, 0.3)`,`rgba(242, 72, 166, 0.3)`,`rgba(153, 153, 153, 0.3)`,`rgba(158, 109, 227, 0.15)`,`rgba(254, 75, 75, 0.15)`,`rgba(255, 140, 81, 0.15)`,`rgba(164, 220, 22, 0.15)`,`rgba(45, 174, 255, 0.15)`,`rgba(58, 96, 247, 0.15)`,`rgba(242, 72, 166, 0.15)`,`rgba(153, 153, 153, 0.15)`];var h=class extends t.Disposable{constructor(...e){super(...e),p(this,`_enabled$`,new n.BehaviorSubject(!1)),p(this,`enabled$`,this._enabled$.asObservable()),p(this,`_color$`,new n.BehaviorSubject(m[0])),p(this,`color$`,this._color$.asObservable())}get enabled(){return this._enabled$.getValue()}get color(){return this._color$.getValue()}dispose(){this._enabled$.complete()}setEnabled(e){this._enabled$.next(e)}setColor(e){this._color$.next(e)}};let g={id:`sheet.operation.toggle-crosshair-highlight`,type:t.CommandType.OPERATION,handler(e){let t=e.get(h),n=t.enabled;return t.setEnabled(!n),!0}},_={id:`sheet.operation.set-crosshair-highlight-color`,type:t.CommandType.OPERATION,handler(e,{value:t}){let n=e.get(h);return n.enabled||n.setEnabled(!0),n.setColor(t),!0}},v={id:`sheet.operation.enable-crosshair-highlight`,type:t.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?!1:(t.setEnabled(!0),!0)}},y={id:`sheet.operation.disable-crosshair-highlight`,type:t.CommandType.OPERATION,handler(e){let t=e.get(h);return t.enabled?(t.setEnabled(!1),!0):!1}};var b=`@univerjs/sheets-crosshair-highlight`,x=`0.20.0`;let S=`sheets-crosshair-highlight.config`;Symbol(S);let C={};function w({ref:e,...t}){let{icon:n,id:r,className:a,extend:o,...s}=t,c=`univerjs-icon univerjs-icon-${r} ${a||``}`.trim(),l=(0,i.useRef)(`_${O()}`);return T(n,`${r}`,{defIds:n.defIds,idSuffix:l.current},{ref:e,className:c,...s},o)}function T(e,t,n,r,a){return(0,i.createElement)(e.tag,{key:t,...E(e,n,a),...r},(D(e,n).children||[]).map((r,i)=>T(r,`${t}-${e.tag}-${i}`,n,void 0,a)))}function E(e,t,n){let r={...e.attrs};n!=null&&n.colorChannel1&&r.fill===`colorChannel1`&&(r.fill=n.colorChannel1),e.tag===`mask`&&r.id&&(r.id+=t.idSuffix),Object.entries(r).forEach(([e,n])=>{e===`mask`&&typeof n==`string`&&(r[e]=n.replace(/url\(#(.*)\)/,`url(#$1${t.idSuffix})`))});let{defIds:i}=t;return!i||i.length===0?r:(e.tag===`use`&&r[`xlink:href`]&&(r[`xlink:href`]+=t.idSuffix),Object.entries(r).forEach(([e,n])=>{typeof n==`string`&&(r[e]=n.replace(/url\(#(.*)\)/,`url(#$1${t.idSuffix})`))}),r)}function D(e,t){var n;let{defIds:r}=t;return!r||r.length===0?e:e.tag===`defs`&&(n=e.children)!=null&&n.length?{...e,children:e.children.map(e=>typeof e.attrs.id==`string`&&r&&r.includes(e.attrs.id)?{...e,attrs:{...e.attrs,id:e.attrs.id+t.idSuffix}}:e)}:e}function O(){return Math.random().toString(36).substring(2,8)}w.displayName=`UniverIcon`;let k={tag:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 16 16`,width:`1em`,height:`1em`},children:[{tag:`path`,attrs:{fill:`currentColor`,d:`M3.6498 1.05005C2.21386 1.05005 1.0498 2.21411 1.0498 3.65005V12.35C1.0498 13.786 2.21386 14.95 3.6498 14.95H12.3498C13.7857 14.95 14.9498 13.786 14.9498 12.3501V3.65005C14.9498 2.21411 13.7857 1.05005 12.3498 1.05005H3.6498ZM5.4002 2.25005H3.6498C2.87661 2.25005 2.2498 2.87685 2.2498 3.65005V5.40002H5.4002V2.25005ZM2.2498 10.6V12.35C2.2498 13.1232 2.87661 13.75 3.6498 13.75H5.4002V10.6H2.2498ZM6.60019 13.75H9.4002V9.40002H13.7498V6.60002H9.4002V2.25005H6.60019V6.60002H2.25029V9.40002H6.60019V13.75ZM10.6002 2.25005V5.40002H13.7498V3.65005C13.7498 2.87685 13.123 2.25005 12.3498 2.25005H10.6002ZM13.7498 10.6H10.6002V13.75H12.3498C13.123 13.75 13.7498 13.1232 13.7498 12.3501V10.6Z`,fillRule:`evenodd`,clipRule:`evenodd`}}]},A=(0,i.forwardRef)(function(e,t){return(0,i.createElement)(w,Object.assign({},e,{id:`cross-highlighting-icon`,ref:t,icon:k}))});A.displayName=`CrossHighlightingIcon`;let j=`CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT`;function M(e){let n=e.get(h);return{id:g.id,tooltip:`crosshair.button.tooltip`,type:a.MenuItemType.BUTTON_SELECTOR,icon:`CrossHighlightingIcon`,selections:[{label:{name:j,hoverable:!1,selectable:!1}}],selectionsCommandId:_.id,activated$:n.enabled$,hidden$:(0,a.getMenuHiddenObservable)(e,t.UniverInstanceType.UNIVER_SHEET)}}let N={[a.ContextMenuPosition.FOOTER_MENU]:{[a.ContextMenuGroup.OTHERS]:{[g.id]:{order:0,menuItemFactory:M}}}};function P(e){let{onChange:t}=e,n=(0,a.useObservable)((0,a.useDependency)(h).color$),r=(0,i.useCallback)(e=>{t==null||t(e)},[t]);return(0,s.jsx)(`div`,{className:`univer-grid univer-grid-cols-8 univer-gap-x-2 univer-gap-y-3`,children:m.map(e=>(0,s.jsx)(`div`,{className:(0,o.clsx)(`hover:univer-ring-primary-600/40 univer-box-border univer-size-5 univer-cursor-pointer univer-rounded univer-ring-offset-1 univer-transition-shadow hover:univer-ring-[1.5px]`,o.borderClassName,{"univer-ring-[1.5px] univer-ring-primary-600 hover:univer-ring-primary-600":e===n}),style:{backgroundColor:e},onClick:()=>r(e)},e))})}function F(e,t){return function(n,r){t(n,r,e)}}function I(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 L=class extends t.Disposable{constructor(e,t,n){super(),this._componentMgr=e,this._menuManagerService=t,this._cmdSrv=n,this._initCommands(),this._initMenus(),this._initComponents()}_initCommands(){[g,_,v,y].forEach(e=>this._cmdSrv.registerCommand(e))}_initMenus(){this._menuManagerService.mergeMenu(N)}_initComponents(){this._componentMgr.register(j,P),this._componentMgr.register(`CrossHighlightingIcon`,A)}};L=I([F(0,(0,t.Inject)(a.ComponentManager)),F(1,a.IMenuManagerService),F(2,t.ICommandService)],L);var R=class{constructor(){p(this,`_selectedRanges`,[]),p(this,`_ranges`,[])}addRange(e){if(e.rangeType===t.RANGE_TYPE.COLUMN||e.rangeType===t.RANGE_TYPE.ROW||e.rangeType===t.RANGE_TYPE.ALL)return;let n=this._getIntersects(e),r=this._getSplitRanges(e,n);r.length>0&&this._ranges.push(...r)}setSelectedRanges(e){this._selectedRanges=e}_getSplitRanges(e,n){let r=[e];for(let e of n.concat(this._selectedRanges)){let n=[];for(let i of r){let r=t.Rectangle.subtract(i,e);r&&r.length>0&&n.push(...r)}r=n}return r.filter(e=>e.startRow<=e.endRow&&e.startColumn<=e.endColumn)}_getIntersects(e){let n=[];for(let r of this._ranges){let i=t.Rectangle.getIntersects(r,e);i&&n.push(i)}return n}getRanges(){return this._ranges}reset(){this._ranges=[],this._selectedRanges=[]}},z=class extends r.Shape{constructor(e,t){super(e,t),p(this,`_color`,void 0),t&&this.setShapeProps(t)}setShapeProps(e){e.color!==void 0&&(this._color=e.color),this.transformByState({width:e.width,height:e.height})}_draw(e){var t,n;let i=`rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${(t=(n=this._color)==null?void 0:n.a)==null?.5:t})`;r.Rect.drawWith(e,{width:this.width,height:this.height,fill:i,stroke:void 0,strokeWidth:0,evented:!1})}};let B=class extends t.Disposable{constructor(e,t,n,r,i,a){super(),this._context=e,this._sheetSkeletonManagerService=t,this._sheetsSelectionsService=n,this._sheetsCrosshairHighlightService=r,this._contextService=i,this._refSelectionsService=a,p(this,`_shapes`,[]),p(this,`_rangeCollection`,new R),p(this,`_color`,`rgba(255,0,0,0.5)`),this._initRenderListener()}_transformSelection(e,t){if(!e)return;let n=t.getRowCount(),r=t.getColumnCount(),i=[];for(let t of e){let{startRow:e,endRow:a,startColumn:o,endColumn:s}=t.range;a-e+1===n||s-o+1===r||i.push(t.range)}this._rangeCollection.setSelectedRanges(i);for(let e of i)this.addSelection(e,t)}_initRenderListener(){let e=this._context.unit;this.disposeWithMe((0,n.combineLatest)([this._contextService.subscribeContextValue$(c.REF_SELECTIONS_ENABLED).pipe((0,n.startWith)(!1)),this._sheetSkeletonManagerService.currentSkeleton$,this._sheetsCrosshairHighlightService.enabled$,this._sheetsCrosshairHighlightService.color$.pipe((0,n.tap)(e=>this._color=e)),(0,n.merge)(this._sheetsSelectionsService.selectionMoveStart$,this._sheetsSelectionsService.selectionMoving$,this._sheetsSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,n.map)(()=>this._sheetsSelectionsService.getCurrentSelections()))),(0,n.merge)(this._refSelectionsService.selectionMoveStart$,this._refSelectionsService.selectionMoving$,this._refSelectionsService.selectionMoveEnd$,this._sheetsSelectionsService.selectionSet$,e.activeSheet$.pipe((0,n.map)(()=>this._refSelectionsService.getCurrentSelections())))]).subscribe(([t,n,r,i,a,o])=>{if(this._clear(),!r)return;let s=t?o:a;this._rangeCollection.reset(),this._transformSelection(s,e.getActiveSheet()),this.render(this._rangeCollection.getRanges())}))}addSelection(e,n){if(e.rangeType===t.RANGE_TYPE.COLUMN||e.rangeType===t.RANGE_TYPE.ROW||e.rangeType===t.RANGE_TYPE.ALL)return;let r=n.getRowCount(),i=n.getColumnCount(),{startRow:a,endRow:o,startColumn:s,endColumn:c}=e,l={startRow:a,endRow:o,startColumn:0,endColumn:s-1},u={startRow:a,endRow:o,startColumn:c+1,endColumn:i},d={startRow:0,endRow:a-1,startColumn:s,endColumn:c},f={startRow:o+1,endRow:r,startColumn:s,endColumn:c};for(let e of[l,u,d,f])e.startRow<=e.endRow&&e.startColumn<=e.endColumn&&this._rangeCollection.addRange(e)}_clear(){this._shapes.forEach(e=>{e.dispose()}),this._shapes=[]}_addShapes(e,n,r,i){let{startRow:a,endRow:o,startColumn:s,endColumn:c}=e,u=(0,l.getCoordByCell)(a,s,r,i),d=(0,l.getCoordByCell)(o,c,r,i),{startX:f,startY:p}=u,{endX:m,endY:h}=d,g=m-f,_=h-p,v={left:f,top:p,color:new t.ColorKit(this._color).toRgb(),width:g,height:_,zIndex:1,evented:!1},y=new z(`crosshair-${n}`,v);this._shapes.push(y),r.addObject(y)}render(e){let t=this._sheetSkeletonManagerService.getCurrentSkeleton();if(!t)return;let{scene:n}=this._context;this._clear();for(let r=0;r<e.length;r++){let i=e[r];this._addShapes(i,r,n,t)}n.makeDirty(!0)}async dispose(){super.dispose()}};B=I([F(1,(0,t.Inject)(l.SheetSkeletonManagerService)),F(2,(0,t.Inject)(c.SheetsSelectionsService)),F(3,(0,t.Inject)(h)),F(4,(0,t.Inject)(t.IContextService)),F(5,c.IRefSelectionsService)],B);let V=class extends t.Plugin{constructor(e=C,n,r,i){super(),this._config=e,this._injector=n,this._renderManagerService=r,this._configService=i;let{...a}=(0,t.merge)({},C,this._config);this._configService.setConfig(S,a)}onStarting(){[[h],[L]].forEach(e=>this._injector.add(e))}onReady(){[[B]].forEach(e=>this._injector.add(e)),this._injector.get(L),this._renderManagerService.registerRenderModule(t.UniverInstanceType.UNIVER_SHEET,[B])}};p(V,`pluginName`,`SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN`),p(V,`packageName`,b),p(V,`version`,x),p(V,`type`,t.UniverInstanceType.UNIVER_SHEET),V=I([F(1,(0,t.Inject)(t.Injector)),F(2,r.IRenderManagerService),F(3,t.IConfigService)],V),e.CROSSHAIR_HIGHLIGHT_COLORS=m,e.DisableCrosshairHighlightOperation=y,e.EnableCrosshairHighlightOperation=v,e.SetCrosshairHighlightColorOperation=_,e.SheetsCrosshairHighlightService=h,e.ToggleCrosshairHighlightOperation=g,Object.defineProperty(e,`UniverSheetsCrosshairHighlightPlugin`,{enumerable:!0,get:function(){return V}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/sheets-crosshair-highlight",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -63,12 +63,12 @@
63
63
  },
64
64
  "dependencies": {
65
65
  "@univerjs/icons": "^1.1.1",
66
- "@univerjs/core": "0.19.0",
67
- "@univerjs/design": "0.19.0",
68
- "@univerjs/engine-render": "0.19.0",
69
- "@univerjs/sheets": "0.19.0",
70
- "@univerjs/sheets-ui": "0.19.0",
71
- "@univerjs/ui": "0.19.0"
66
+ "@univerjs/core": "0.20.0",
67
+ "@univerjs/engine-render": "0.20.0",
68
+ "@univerjs/sheets": "0.20.0",
69
+ "@univerjs/ui": "0.20.0",
70
+ "@univerjs/sheets-ui": "0.20.0",
71
+ "@univerjs/design": "0.20.0"
72
72
  },
73
73
  "devDependencies": {
74
74
  "postcss": "^8.5.8",
@@ -77,7 +77,7 @@
77
77
  "tailwindcss": "3.4.18",
78
78
  "typescript": "^6.0.2",
79
79
  "vitest": "^4.1.1",
80
- "@univerjs-infra/shared": "0.19.0"
80
+ "@univerjs-infra/shared": "0.20.0"
81
81
  },
82
82
  "scripts": {
83
83
  "test": "vitest run",