@univerjs/action-recorder 0.21.0 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -12,7 +12,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
12
12
 
13
13
  //#region package.json
14
14
  var name = "@univerjs/action-recorder";
15
- var version = "0.21.0";
15
+ var version = "0.21.1";
16
16
 
17
17
  //#endregion
18
18
  //#region src/config/config.ts
package/lib/es/index.js CHANGED
@@ -11,7 +11,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
11
11
 
12
12
  //#region package.json
13
13
  var name = "@univerjs/action-recorder";
14
- var version = "0.21.0";
14
+ var version = "0.21.1";
15
15
 
16
16
  //#endregion
17
17
  //#region src/config/config.ts
package/lib/index.js CHANGED
@@ -11,7 +11,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
11
11
 
12
12
  //#region package.json
13
13
  var name = "@univerjs/action-recorder";
14
- var version = "0.21.0";
14
+ var version = "0.21.1";
15
15
 
16
16
  //#endregion
17
17
  //#region src/config/config.ts
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`react`),require(`@univerjs/sheets`),require(`@univerjs/sheets-filter`),require(`@univerjs/sheets-ui`),require(`@univerjs/ui`),require(`rxjs`),require(`@univerjs/design`),require(`react/jsx-runtime`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`react`,`@univerjs/sheets`,`@univerjs/sheets-filter`,`@univerjs/sheets-ui`,`@univerjs/ui`,`rxjs`,`@univerjs/design`,`react/jsx-runtime`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverActionRecorder={},e.UniverCore,e.React,e.UniverSheets,e.UniverSheetsFilter,e.UniverSheetsUi,e.UniverUi,e.rxjs,e.UniverDesign,e.React))})(this,function(e,t,n,r,i,a,o,s,c,l){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var u=`@univerjs/action-recorder`,d=`0.21.0`;let f=`action-recorder.config`;Symbol(f);let p={};function m({ref:e,...t}){let{icon:r,id:i,className:a,extend:o,...s}=t,c=`univerjs-icon univerjs-icon-${i} ${a||``}`.trim(),l=(0,n.useRef)(`_${v()}`);return h(r,`${i}`,{defIds:r.defIds,idSuffix:l.current},{ref:e,className:c,...s},o)}function h(e,t,r,i,a){return(0,n.createElement)(e.tag,{key:t,...g(e,r,a),...i},(_(e,r).children||[]).map((n,i)=>h(n,`${t}-${e.tag}-${i}`,r,void 0,a)))}function g(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 _(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 v(){return Math.random().toString(36).substring(2,8)}m.displayName=`UniverIcon`;let y={tag:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 17 16`,width:`1em`,height:`1em`},children:[{tag:`g`,attrs:{fill:`currentColor`,clipPath:`url(#record-icon_clip0_1559_19)`},children:[{tag:`path`,attrs:{d:`M7.60303 10C8.7076 10 9.60303 9.10457 9.60303 8C9.60303 6.89543 8.7076 6 7.60303 6C6.49846 6 5.60303 6.89543 5.60303 8C5.60303 9.10457 6.49846 10 7.60303 10Z`}},{tag:`path`,attrs:{d:`M1.66943 5.29023C1.66941 3.85426 2.83349 2.69017 4.26946 2.69019L10.9362 2.69026C12.3192 2.69028 13.45 3.77008 13.5315 5.13259L14.5692 4.55638C15.3024 4.14929 16.2032 4.67947 16.2032 5.51809V10.4819C16.2032 11.3205 15.3024 11.8507 14.5692 11.4436L13.5315 10.8674C13.45 12.2299 12.3192 13.3097 10.9362 13.3097H4.26953C2.83361 13.3097 1.66956 12.1457 1.66953 10.7098L1.66943 5.29023ZM13.5362 9.49743L15.0032 10.312V5.68799L13.5362 6.50254V9.49743ZM4.26945 3.89019C3.49623 3.89018 2.86942 4.517 2.86943 5.29021L2.86953 10.7098C2.86955 11.483 3.49634 12.1097 4.26953 12.1097H10.9362C11.7094 12.1097 12.3362 11.4829 12.3362 10.7097V5.29026C12.3362 4.51707 11.7094 3.89027 10.9362 3.89026L4.26945 3.89019Z`,fillRule:`evenodd`,clipRule:`evenodd`}}]},{tag:`defs`,attrs:{},children:[{tag:`clipPath`,attrs:{id:`record-icon_clip0_1559_19`},children:[{tag:`path`,attrs:{fill:`white`,d:`M0 0H16V16H0z`,transform:`translate(.94)`}}]}]}],defIds:[`record-icon_clip0_1559_19`]},b=(0,n.forwardRef)(function(e,t){return(0,n.createElement)(m,Object.assign({},e,{id:`record-icon`,ref:t,icon:y}))});b.displayName=`RecordIcon`;function x(e){"@babel/helpers - typeof";return x=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},x(e)}function S(e,t){if(x(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(x(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function C(e){var t=S(e,`string`);return x(t)==`symbol`?t:t+``}function w(e,t,n){return(t=C(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e,t){return function(n,r){t(n,r,e)}}function E(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 D=class extends t.Disposable{get recording(){return this._recording$.getValue()}get _recorded(){return this._recorded$.getValue()}get _recordedCommands(){return this._recordedCommands$.getValue()}constructor(e,t,n,r){super(),this._commandSrv=e,this._logService=t,this._localFileService=n,this._instanceService=r,w(this,`_shouldRecordCommands`,new Set),w(this,`_panelOpened$`,new s.BehaviorSubject(!1)),w(this,`panelOpened$`,this._panelOpened$.asObservable()),w(this,`_recorder`,null),w(this,`_recording$`,new s.BehaviorSubject(!1)),w(this,`recording$`,this._recording$.asObservable()),w(this,`_recorded$`,new s.BehaviorSubject([])),w(this,`_recordedCommands$`,new s.BehaviorSubject([])),w(this,`recordedCommands$`,this._recordedCommands$.asObservable())}registerRecordedCommand(e){if(e.type===t.CommandType.MUTATION)throw Error(`[CommandRecorderService] Cannot record mutation commands.`);this._shouldRecordCommands.add(e.id)}togglePanel(e){this._panelOpened$.next(e),e===!1&&this.stopRecording()}startRecording(e=!1){this._recorder=this._commandSrv.onCommandExecuted(n=>{if(this._shouldRecordCommands.has(n.id)){var i;let o=this._recorded,s=this._recordedCommands,c={...n},l=(i=this._instanceService.getFocusedUnit())==null?void 0:i.getUnitId(),{unitId:u=l,subUnitId:d}=c==null?void 0:c.params;if(e&&u&&d){var a;let e=(a=this._instanceService.getUnit(u).getSheetBySheetId(d))==null?void 0:a.getName();c={...c,params:{...c.params,subUnitId:e}}}c.id===r.SetSelectionsOperation.id&&o.length>0&&o[o.length-1].id===r.SetSelectionsOperation.id?o[o.length-1]=c:(o.push(c),this._recorded$.next(o),c.type===t.CommandType.COMMAND&&(s.push(c),this._recordedCommands$.next(s)))}}),this._recording$.next(!0)}stopRecording(){var e;(e=this._recorder)==null||e.dispose(),this._recorder=null,this._recorded$.next([]),this._recordedCommands$.next([]),this._recording$.next(!1)}completeRecording(){let e=this._recorded.slice();this._localFileService.downloadFile(new Blob([JSON.stringify(e,null,2)]),`recorded-commands.json`),this._logService.error(`Recorded commands:`,e),this.stopRecording()}};D=E([T(0,t.ICommandService),T(1,t.ILogService),T(2,o.ILocalFileService),T(3,t.IUniverInstanceService)],D);let O={id:`action-recorder.command.start-recording`,type:t.CommandType.COMMAND,handler:(e,t)=>(e.get(D).startRecording(!!(t!=null&&t.replaceId)),!0)},k={id:`action-recorder.command.complete-recording`,type:t.CommandType.COMMAND,handler:e=>(e.get(D).completeRecording(),!0)},A={id:`action-recorder.command.stop-recording`,type:t.CommandType.COMMAND,handler:e=>(e.get(D).completeRecording(),!0)},j=function(e){return e.DEFAULT=`default`,e.NAME=`name`,e.ACTIVE=`active`,e}({}),M=class extends t.Disposable{constructor(e,t,n,r,i){super(),this._messageService=e,this._instanceService=t,this._localFileService=n,this._logService=r,this._commandService=i}async replayLocalJSON(e=j.DEFAULT){let t=await this._localFileService.openFile({multiple:!1,accept:`.json`});if(t.length!==1)return!1;let n=t[0];try{return this.replayCommands(JSON.parse(await n.text()),{mode:e})}catch{return this._messageService.show({type:c.MessageType.Error,content:`Failed to replay commands from local file ${n.name}.`}),!1}}async replayCommands(e,t){var n;let r=(n=this._instanceService.getFocusedUnit())==null?void 0:n.getUnitId();r||this._logService.error(`[ReplayService]`,`no focused unit to replay commands`);let{mode:i}=t||{};for(let t of e){let{id:e,params:n}=t,s=n;if(s){if(s.unitId!==void 0&&(s.unitId=r),i===j.NAME&&s.subUnitId!==`undefined`){var a;let e=(a=this._instanceService.getFocusedUnit().getSheetBySheetName(s.subUnitId))==null?void 0:a.getSheetId();e?s.subUnitId=e:this._logService.error(`[ReplayService]`,`failed to find subunit by subUnitName = ${s.subUnitId}`)}if(i===j.ACTIVE&&s.subUnitId!==`undefined`){var o;let e=(o=this._instanceService.getFocusedUnit().getActiveSheet())==null?void 0:o.getSheetId();e?s.subUnitId=e:this._logService.error(`[ReplayService]`,`failed to find active subunit`)}if(!await this._commandService.executeCommand(e,n))return!1}else if(!await this._commandService.executeCommand(e))return!1}return!0}async replayCommandsWithDelay(e){var n;let r=(n=this._instanceService.getFocusedUnit())==null?void 0:n.getUnitId();r||this._logService.error(`[ReplayService]`,`no focused unit to replay commands`);for(let n of e){await(0,t.awaitTime)(N());let{id:e,params:i}=n;if(i){if(i.unitId!==void 0&&(i.unitId=r),!await this._commandService.executeCommand(e,i))return!1}else if(!await this._commandService.executeCommand(e))return!1}return!0}};M=E([T(0,o.IMessageService),T(1,t.IUniverInstanceService),T(2,o.ILocalFileService),T(3,t.ILogService),T(4,t.ICommandService)],M);function N(){return Math.floor(Math.random()*800)+200}let P={id:`action-recorder.command.replay-local-records`,type:t.CommandType.COMMAND,handler:async e=>{let t=await e.get(M).replayLocalJSON();return t&&e.get(o.IMessageService).show({type:c.MessageType.Success,content:`Successfully replayed local records`}),t}},F={id:`action-recorder.command.replay-local-records-name`,type:t.CommandType.COMMAND,handler:async e=>{let t=await e.get(M).replayLocalJSON(j.NAME);return t&&e.get(o.IMessageService).show({type:c.MessageType.Success,content:`Successfully replayed local records`}),t}},I={id:`action-recorder.command.replay-local-records-active`,type:t.CommandType.COMMAND,handler:async e=>{let t=await e.get(M).replayLocalJSON(j.ACTIVE);return t&&e.get(o.IMessageService).show({type:c.MessageType.Success,content:`Successfully replayed local records`}),t}},L={id:`action-recorder.operation.open-panel`,type:t.CommandType.OPERATION,handler(e){return e.get(D).togglePanel(!0),!0}},R={id:`action-recorder.operation.close-panel`,type:t.CommandType.OPERATION,handler(e){return e.get(D).togglePanel(!1),!0}},z=`RECORD_MENU_ITEM`;function B(){return{id:z,type:o.MenuItemType.SUBITEMS,icon:`RecordIcon`,tooltip:`action-recorder.menu.title`}}function V(e){let t=e.get(D);return{id:L.id,title:`action-recorder.menu.record`,type:o.MenuItemType.BUTTON,disabled$:t.panelOpened$}}function H(){return{id:P.id,title:`action-recorder.menu.replay-local`,type:o.MenuItemType.BUTTON}}function U(){return{id:F.id,title:`action-recorder.menu.replay-local-name`,type:o.MenuItemType.BUTTON}}function W(){return{id:I.id,title:`action-recorder.menu.replay-local-active`,type:o.MenuItemType.BUTTON}}let G={[o.RibbonOthersGroup.OTHERS]:{[z]:{order:1,menuItemFactory:B,[L.id]:{order:1,menuItemFactory:V},[P.id]:{order:2,menuItemFactory:H},[F.id]:{order:3,menuItemFactory:U},[I.id]:{order:4,menuItemFactory:W}}}};function K(){return(0,o.useObservable)((0,o.useDependency)(D).panelOpened$)?(0,l.jsx)(q,{}):null}function q(){var e;let r=(0,o.useDependency)(t.ICommandService),i=(0,o.useDependency)(D),a=(0,o.useObservable)(i.recording$),s=(0,o.useObservable)(i.recordedCommands$),u=(e=s==null?void 0:s.length)==null?0:e,d=(0,n.useCallback)(()=>{a||r.executeCommand(R.id)},[r,a]),f=(0,n.useCallback)(e=>{a||r.executeCommand(O.id,{replaceId:e})},[r,a]),p=(0,n.useCallback)(()=>{a&&r.executeCommand(k.id)},[r,a]),m=(0,n.useCallback)(()=>{a&&r.executeCommand(A.id)},[r,a]),h=a?u===0?`Recording...`:`${u}: ${s[u-1].id}`:`Start Recording`;return(0,l.jsxs)(`div`,{className:`univer-fixed univer-bottom-20 univer-left-1/2 univer-z-[1000] univer-flex univer-h-16 univer-w-[512px] -univer-translate-x-1/2 univer-items-center univer-rounded-lg univer-bg-white univer-px-5 univer-shadow-lg`,children:[(0,l.jsx)(`div`,{className:`univer-mr-2 univer-size-5 univer-shrink-0 univer-grow-0 univer-text-xl`,children:(0,l.jsx)(b,{})}),(0,l.jsx)(`div`,{className:`univer-flex-1 univer-text-sm`,children:h}),(0,l.jsxs)(`div`,{className:`univer-flex univer-w-64 univer-shrink-0 univer-grow-0 univer-justify-between`,children:[(0,l.jsx)(c.Button,{className:`univer-w-20`,onClick:a?m:d,children:a?`Cancel`:`Close`}),(0,l.jsx)(c.Button,{className:`univer-w-20`,variant:`primary`,onClick:a?p:()=>f(),children:a?`Save`:`Start`}),!a&&(0,l.jsx)(c.Button,{variant:`primary`,onClick:()=>f(!0),children:`Start(N)`})]})]})}let J=class extends t.Disposable{constructor(e,t,n,r,i,a){super(),this._commandSrv=e,this._uiPartsSrv=t,this._menuManagerService=n,this._componentManager=r,this._actionRecorderService=i,this._injector=a,this._initCommands(),this._initUI(),this._initSheetsCommands(),this._initDocsCommands()}_initCommands(){[O,A,k,L,R,P,F,I].forEach(e=>this._commandSrv.registerCommand(e))}_initUI(){this._uiPartsSrv.registerComponent(o.BuiltInUIPart.GLOBAL,()=>(0,o.connectInjector)(K,this._injector)),this.disposeWithMe(this._componentManager.register(`RecordIcon`,b)),this._menuManagerService.mergeMenu(G)}_initSheetsCommands(){[r.CopySheetCommand,r.DeleteRangeMoveLeftCommand,r.DeleteRangeMoveUpCommand,r.DeltaColumnWidthCommand,r.DeltaRowHeightCommand,r.InsertSheetCommand,r.InsertColAfterCommand,r.InsertColBeforeCommand,r.InsertRowAfterCommand,r.InsertRowBeforeCommand,r.RemoveSheetCommand,r.SetStyleCommand,r.AddWorksheetMergeCommand,r.AddWorksheetMergeAllCommand,r.AddWorksheetMergeVerticalCommand,r.AddWorksheetMergeHorizontalCommand,r.SetFrozenCommand,r.CancelFrozenCommand,r.SetHorizontalTextAlignCommand,r.SetOverlineCommand,a.SetRangeBoldCommand,a.SetRangeFontFamilyCommand,a.SetRangeFontSizeCommand,a.SetRangeItalicCommand,a.SetRangeStrickThroughCommand,a.SetRangeSubscriptCommand,a.SetRangeSuperscriptCommand,a.SetRangeTextColorCommand,a.SetRangeUnderlineCommand,r.SetRangeValuesCommand,r.SetStrikeThroughCommand,r.SetTextColorCommand,r.SetTextRotationCommand,r.SetTextWrapCommand,r.SetVerticalTextAlignCommand,a.SheetCopyCommand,a.SheetCutCommand,a.SheetPasteBesidesBorderCommand,a.SheetPasteColWidthCommand,a.SheetPasteCommand,a.SheetPasteFormatCommand,a.SheetPasteShortKeyCommand,a.SheetPasteValueCommand,r.AutoFillCommand,r.RefillCommand,r.SetWorksheetActivateCommand,r.SetWorksheetActiveOperation,r.SetSelectionsOperation,i.SetSheetFilterRangeCommand,i.SetSheetsFilterCriteriaCommand,i.RemoveSheetFilterCommand].forEach(e=>this._actionRecorderService.registerRecordedCommand(e))}_initDocsCommands(){}};J=E([T(0,t.ICommandService),T(1,o.IUIPartsService),T(2,o.IMenuManagerService),T(3,(0,t.Inject)(o.ComponentManager)),T(4,(0,t.Inject)(D)),T(5,(0,t.Inject)(t.Injector))],J);let Y=class extends t.Plugin{constructor(e=p,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{menu:i,...a}=(0,t.merge)({},p,this._config);i&&this._configService.setConfig(`menu`,i,{merge:!0}),this._configService.setConfig(f,a)}onStarting(){(this._config.replayOnly?[[M]]:[[D],[M],[J]]).forEach(e=>this._injector.add(e))}onSteady(){this._config.replayOnly||this._injector.get(J)}};w(Y,`pluginName`,`UNIVER_ACTION_RECORDER_PLUGIN`),w(Y,`packageName`,u),w(Y,`version`,d),Y=E([T(1,(0,t.Inject)(t.Injector)),T(2,t.IConfigService)],Y),Object.defineProperty(e,`ActionRecorderService`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(e,`ActionReplayService`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(e,`UniverActionRecorderPlugin`,{enumerable:!0,get:function(){return Y}})});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`react`),require(`@univerjs/sheets`),require(`@univerjs/sheets-filter`),require(`@univerjs/sheets-ui`),require(`@univerjs/ui`),require(`rxjs`),require(`@univerjs/design`),require(`react/jsx-runtime`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`react`,`@univerjs/sheets`,`@univerjs/sheets-filter`,`@univerjs/sheets-ui`,`@univerjs/ui`,`rxjs`,`@univerjs/design`,`react/jsx-runtime`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverActionRecorder={},e.UniverCore,e.React,e.UniverSheets,e.UniverSheetsFilter,e.UniverSheetsUi,e.UniverUi,e.rxjs,e.UniverDesign,e.React))})(this,function(e,t,n,r,i,a,o,s,c,l){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var u=`@univerjs/action-recorder`,d=`0.21.1`;let f=`action-recorder.config`;Symbol(f);let p={};function m({ref:e,...t}){let{icon:r,id:i,className:a,extend:o,...s}=t,c=`univerjs-icon univerjs-icon-${i} ${a||``}`.trim(),l=(0,n.useRef)(`_${v()}`);return h(r,`${i}`,{defIds:r.defIds,idSuffix:l.current},{ref:e,className:c,...s},o)}function h(e,t,r,i,a){return(0,n.createElement)(e.tag,{key:t,...g(e,r,a),...i},(_(e,r).children||[]).map((n,i)=>h(n,`${t}-${e.tag}-${i}`,r,void 0,a)))}function g(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 _(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 v(){return Math.random().toString(36).substring(2,8)}m.displayName=`UniverIcon`;let y={tag:`svg`,attrs:{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 17 16`,width:`1em`,height:`1em`},children:[{tag:`g`,attrs:{fill:`currentColor`,clipPath:`url(#record-icon_clip0_1559_19)`},children:[{tag:`path`,attrs:{d:`M7.60303 10C8.7076 10 9.60303 9.10457 9.60303 8C9.60303 6.89543 8.7076 6 7.60303 6C6.49846 6 5.60303 6.89543 5.60303 8C5.60303 9.10457 6.49846 10 7.60303 10Z`}},{tag:`path`,attrs:{d:`M1.66943 5.29023C1.66941 3.85426 2.83349 2.69017 4.26946 2.69019L10.9362 2.69026C12.3192 2.69028 13.45 3.77008 13.5315 5.13259L14.5692 4.55638C15.3024 4.14929 16.2032 4.67947 16.2032 5.51809V10.4819C16.2032 11.3205 15.3024 11.8507 14.5692 11.4436L13.5315 10.8674C13.45 12.2299 12.3192 13.3097 10.9362 13.3097H4.26953C2.83361 13.3097 1.66956 12.1457 1.66953 10.7098L1.66943 5.29023ZM13.5362 9.49743L15.0032 10.312V5.68799L13.5362 6.50254V9.49743ZM4.26945 3.89019C3.49623 3.89018 2.86942 4.517 2.86943 5.29021L2.86953 10.7098C2.86955 11.483 3.49634 12.1097 4.26953 12.1097H10.9362C11.7094 12.1097 12.3362 11.4829 12.3362 10.7097V5.29026C12.3362 4.51707 11.7094 3.89027 10.9362 3.89026L4.26945 3.89019Z`,fillRule:`evenodd`,clipRule:`evenodd`}}]},{tag:`defs`,attrs:{},children:[{tag:`clipPath`,attrs:{id:`record-icon_clip0_1559_19`},children:[{tag:`path`,attrs:{fill:`white`,d:`M0 0H16V16H0z`,transform:`translate(.94)`}}]}]}],defIds:[`record-icon_clip0_1559_19`]},b=(0,n.forwardRef)(function(e,t){return(0,n.createElement)(m,Object.assign({},e,{id:`record-icon`,ref:t,icon:y}))});b.displayName=`RecordIcon`;function x(e){"@babel/helpers - typeof";return x=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},x(e)}function S(e,t){if(x(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(x(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function C(e){var t=S(e,`string`);return x(t)==`symbol`?t:t+``}function w(e,t,n){return(t=C(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e,t){return function(n,r){t(n,r,e)}}function E(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 D=class extends t.Disposable{get recording(){return this._recording$.getValue()}get _recorded(){return this._recorded$.getValue()}get _recordedCommands(){return this._recordedCommands$.getValue()}constructor(e,t,n,r){super(),this._commandSrv=e,this._logService=t,this._localFileService=n,this._instanceService=r,w(this,`_shouldRecordCommands`,new Set),w(this,`_panelOpened$`,new s.BehaviorSubject(!1)),w(this,`panelOpened$`,this._panelOpened$.asObservable()),w(this,`_recorder`,null),w(this,`_recording$`,new s.BehaviorSubject(!1)),w(this,`recording$`,this._recording$.asObservable()),w(this,`_recorded$`,new s.BehaviorSubject([])),w(this,`_recordedCommands$`,new s.BehaviorSubject([])),w(this,`recordedCommands$`,this._recordedCommands$.asObservable())}registerRecordedCommand(e){if(e.type===t.CommandType.MUTATION)throw Error(`[CommandRecorderService] Cannot record mutation commands.`);this._shouldRecordCommands.add(e.id)}togglePanel(e){this._panelOpened$.next(e),e===!1&&this.stopRecording()}startRecording(e=!1){this._recorder=this._commandSrv.onCommandExecuted(n=>{if(this._shouldRecordCommands.has(n.id)){var i;let o=this._recorded,s=this._recordedCommands,c={...n},l=(i=this._instanceService.getFocusedUnit())==null?void 0:i.getUnitId(),{unitId:u=l,subUnitId:d}=c==null?void 0:c.params;if(e&&u&&d){var a;let e=(a=this._instanceService.getUnit(u).getSheetBySheetId(d))==null?void 0:a.getName();c={...c,params:{...c.params,subUnitId:e}}}c.id===r.SetSelectionsOperation.id&&o.length>0&&o[o.length-1].id===r.SetSelectionsOperation.id?o[o.length-1]=c:(o.push(c),this._recorded$.next(o),c.type===t.CommandType.COMMAND&&(s.push(c),this._recordedCommands$.next(s)))}}),this._recording$.next(!0)}stopRecording(){var e;(e=this._recorder)==null||e.dispose(),this._recorder=null,this._recorded$.next([]),this._recordedCommands$.next([]),this._recording$.next(!1)}completeRecording(){let e=this._recorded.slice();this._localFileService.downloadFile(new Blob([JSON.stringify(e,null,2)]),`recorded-commands.json`),this._logService.error(`Recorded commands:`,e),this.stopRecording()}};D=E([T(0,t.ICommandService),T(1,t.ILogService),T(2,o.ILocalFileService),T(3,t.IUniverInstanceService)],D);let O={id:`action-recorder.command.start-recording`,type:t.CommandType.COMMAND,handler:(e,t)=>(e.get(D).startRecording(!!(t!=null&&t.replaceId)),!0)},k={id:`action-recorder.command.complete-recording`,type:t.CommandType.COMMAND,handler:e=>(e.get(D).completeRecording(),!0)},A={id:`action-recorder.command.stop-recording`,type:t.CommandType.COMMAND,handler:e=>(e.get(D).completeRecording(),!0)},j=function(e){return e.DEFAULT=`default`,e.NAME=`name`,e.ACTIVE=`active`,e}({}),M=class extends t.Disposable{constructor(e,t,n,r,i){super(),this._messageService=e,this._instanceService=t,this._localFileService=n,this._logService=r,this._commandService=i}async replayLocalJSON(e=j.DEFAULT){let t=await this._localFileService.openFile({multiple:!1,accept:`.json`});if(t.length!==1)return!1;let n=t[0];try{return this.replayCommands(JSON.parse(await n.text()),{mode:e})}catch{return this._messageService.show({type:c.MessageType.Error,content:`Failed to replay commands from local file ${n.name}.`}),!1}}async replayCommands(e,t){var n;let r=(n=this._instanceService.getFocusedUnit())==null?void 0:n.getUnitId();r||this._logService.error(`[ReplayService]`,`no focused unit to replay commands`);let{mode:i}=t||{};for(let t of e){let{id:e,params:n}=t,s=n;if(s){if(s.unitId!==void 0&&(s.unitId=r),i===j.NAME&&s.subUnitId!==`undefined`){var a;let e=(a=this._instanceService.getFocusedUnit().getSheetBySheetName(s.subUnitId))==null?void 0:a.getSheetId();e?s.subUnitId=e:this._logService.error(`[ReplayService]`,`failed to find subunit by subUnitName = ${s.subUnitId}`)}if(i===j.ACTIVE&&s.subUnitId!==`undefined`){var o;let e=(o=this._instanceService.getFocusedUnit().getActiveSheet())==null?void 0:o.getSheetId();e?s.subUnitId=e:this._logService.error(`[ReplayService]`,`failed to find active subunit`)}if(!await this._commandService.executeCommand(e,n))return!1}else if(!await this._commandService.executeCommand(e))return!1}return!0}async replayCommandsWithDelay(e){var n;let r=(n=this._instanceService.getFocusedUnit())==null?void 0:n.getUnitId();r||this._logService.error(`[ReplayService]`,`no focused unit to replay commands`);for(let n of e){await(0,t.awaitTime)(N());let{id:e,params:i}=n;if(i){if(i.unitId!==void 0&&(i.unitId=r),!await this._commandService.executeCommand(e,i))return!1}else if(!await this._commandService.executeCommand(e))return!1}return!0}};M=E([T(0,o.IMessageService),T(1,t.IUniverInstanceService),T(2,o.ILocalFileService),T(3,t.ILogService),T(4,t.ICommandService)],M);function N(){return Math.floor(Math.random()*800)+200}let P={id:`action-recorder.command.replay-local-records`,type:t.CommandType.COMMAND,handler:async e=>{let t=await e.get(M).replayLocalJSON();return t&&e.get(o.IMessageService).show({type:c.MessageType.Success,content:`Successfully replayed local records`}),t}},F={id:`action-recorder.command.replay-local-records-name`,type:t.CommandType.COMMAND,handler:async e=>{let t=await e.get(M).replayLocalJSON(j.NAME);return t&&e.get(o.IMessageService).show({type:c.MessageType.Success,content:`Successfully replayed local records`}),t}},I={id:`action-recorder.command.replay-local-records-active`,type:t.CommandType.COMMAND,handler:async e=>{let t=await e.get(M).replayLocalJSON(j.ACTIVE);return t&&e.get(o.IMessageService).show({type:c.MessageType.Success,content:`Successfully replayed local records`}),t}},L={id:`action-recorder.operation.open-panel`,type:t.CommandType.OPERATION,handler(e){return e.get(D).togglePanel(!0),!0}},R={id:`action-recorder.operation.close-panel`,type:t.CommandType.OPERATION,handler(e){return e.get(D).togglePanel(!1),!0}},z=`RECORD_MENU_ITEM`;function B(){return{id:z,type:o.MenuItemType.SUBITEMS,icon:`RecordIcon`,tooltip:`action-recorder.menu.title`}}function V(e){let t=e.get(D);return{id:L.id,title:`action-recorder.menu.record`,type:o.MenuItemType.BUTTON,disabled$:t.panelOpened$}}function H(){return{id:P.id,title:`action-recorder.menu.replay-local`,type:o.MenuItemType.BUTTON}}function U(){return{id:F.id,title:`action-recorder.menu.replay-local-name`,type:o.MenuItemType.BUTTON}}function W(){return{id:I.id,title:`action-recorder.menu.replay-local-active`,type:o.MenuItemType.BUTTON}}let G={[o.RibbonOthersGroup.OTHERS]:{[z]:{order:1,menuItemFactory:B,[L.id]:{order:1,menuItemFactory:V},[P.id]:{order:2,menuItemFactory:H},[F.id]:{order:3,menuItemFactory:U},[I.id]:{order:4,menuItemFactory:W}}}};function K(){return(0,o.useObservable)((0,o.useDependency)(D).panelOpened$)?(0,l.jsx)(q,{}):null}function q(){var e;let r=(0,o.useDependency)(t.ICommandService),i=(0,o.useDependency)(D),a=(0,o.useObservable)(i.recording$),s=(0,o.useObservable)(i.recordedCommands$),u=(e=s==null?void 0:s.length)==null?0:e,d=(0,n.useCallback)(()=>{a||r.executeCommand(R.id)},[r,a]),f=(0,n.useCallback)(e=>{a||r.executeCommand(O.id,{replaceId:e})},[r,a]),p=(0,n.useCallback)(()=>{a&&r.executeCommand(k.id)},[r,a]),m=(0,n.useCallback)(()=>{a&&r.executeCommand(A.id)},[r,a]),h=a?u===0?`Recording...`:`${u}: ${s[u-1].id}`:`Start Recording`;return(0,l.jsxs)(`div`,{className:`univer-fixed univer-bottom-20 univer-left-1/2 univer-z-[1000] univer-flex univer-h-16 univer-w-[512px] -univer-translate-x-1/2 univer-items-center univer-rounded-lg univer-bg-white univer-px-5 univer-shadow-lg`,children:[(0,l.jsx)(`div`,{className:`univer-mr-2 univer-size-5 univer-shrink-0 univer-grow-0 univer-text-xl`,children:(0,l.jsx)(b,{})}),(0,l.jsx)(`div`,{className:`univer-flex-1 univer-text-sm`,children:h}),(0,l.jsxs)(`div`,{className:`univer-flex univer-w-64 univer-shrink-0 univer-grow-0 univer-justify-between`,children:[(0,l.jsx)(c.Button,{className:`univer-w-20`,onClick:a?m:d,children:a?`Cancel`:`Close`}),(0,l.jsx)(c.Button,{className:`univer-w-20`,variant:`primary`,onClick:a?p:()=>f(),children:a?`Save`:`Start`}),!a&&(0,l.jsx)(c.Button,{variant:`primary`,onClick:()=>f(!0),children:`Start(N)`})]})]})}let J=class extends t.Disposable{constructor(e,t,n,r,i,a){super(),this._commandSrv=e,this._uiPartsSrv=t,this._menuManagerService=n,this._componentManager=r,this._actionRecorderService=i,this._injector=a,this._initCommands(),this._initUI(),this._initSheetsCommands(),this._initDocsCommands()}_initCommands(){[O,A,k,L,R,P,F,I].forEach(e=>this._commandSrv.registerCommand(e))}_initUI(){this._uiPartsSrv.registerComponent(o.BuiltInUIPart.GLOBAL,()=>(0,o.connectInjector)(K,this._injector)),this.disposeWithMe(this._componentManager.register(`RecordIcon`,b)),this._menuManagerService.mergeMenu(G)}_initSheetsCommands(){[r.CopySheetCommand,r.DeleteRangeMoveLeftCommand,r.DeleteRangeMoveUpCommand,r.DeltaColumnWidthCommand,r.DeltaRowHeightCommand,r.InsertSheetCommand,r.InsertColAfterCommand,r.InsertColBeforeCommand,r.InsertRowAfterCommand,r.InsertRowBeforeCommand,r.RemoveSheetCommand,r.SetStyleCommand,r.AddWorksheetMergeCommand,r.AddWorksheetMergeAllCommand,r.AddWorksheetMergeVerticalCommand,r.AddWorksheetMergeHorizontalCommand,r.SetFrozenCommand,r.CancelFrozenCommand,r.SetHorizontalTextAlignCommand,r.SetOverlineCommand,a.SetRangeBoldCommand,a.SetRangeFontFamilyCommand,a.SetRangeFontSizeCommand,a.SetRangeItalicCommand,a.SetRangeStrickThroughCommand,a.SetRangeSubscriptCommand,a.SetRangeSuperscriptCommand,a.SetRangeTextColorCommand,a.SetRangeUnderlineCommand,r.SetRangeValuesCommand,r.SetStrikeThroughCommand,r.SetTextColorCommand,r.SetTextRotationCommand,r.SetTextWrapCommand,r.SetVerticalTextAlignCommand,a.SheetCopyCommand,a.SheetCutCommand,a.SheetPasteBesidesBorderCommand,a.SheetPasteColWidthCommand,a.SheetPasteCommand,a.SheetPasteFormatCommand,a.SheetPasteShortKeyCommand,a.SheetPasteValueCommand,r.AutoFillCommand,r.RefillCommand,r.SetWorksheetActivateCommand,r.SetWorksheetActiveOperation,r.SetSelectionsOperation,i.SetSheetFilterRangeCommand,i.SetSheetsFilterCriteriaCommand,i.RemoveSheetFilterCommand].forEach(e=>this._actionRecorderService.registerRecordedCommand(e))}_initDocsCommands(){}};J=E([T(0,t.ICommandService),T(1,o.IUIPartsService),T(2,o.IMenuManagerService),T(3,(0,t.Inject)(o.ComponentManager)),T(4,(0,t.Inject)(D)),T(5,(0,t.Inject)(t.Injector))],J);let Y=class extends t.Plugin{constructor(e=p,n,r){super(),this._config=e,this._injector=n,this._configService=r;let{menu:i,...a}=(0,t.merge)({},p,this._config);i&&this._configService.setConfig(`menu`,i,{merge:!0}),this._configService.setConfig(f,a)}onStarting(){(this._config.replayOnly?[[M]]:[[D],[M],[J]]).forEach(e=>this._injector.add(e))}onSteady(){this._config.replayOnly||this._injector.get(J)}};w(Y,`pluginName`,`UNIVER_ACTION_RECORDER_PLUGIN`),w(Y,`packageName`,u),w(Y,`version`,d),Y=E([T(1,(0,t.Inject)(t.Injector)),T(2,t.IConfigService)],Y),Object.defineProperty(e,`ActionRecorderService`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(e,`ActionReplayService`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(e,`UniverActionRecorderPlugin`,{enumerable:!0,get:function(){return Y}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/action-recorder",
3
- "version": "0.21.0",
3
+ "version": "0.21.1",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -53,12 +53,12 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@univerjs/icons": "^1.1.1",
56
- "@univerjs/core": "0.21.0",
57
- "@univerjs/design": "0.21.0",
58
- "@univerjs/sheets": "0.21.0",
59
- "@univerjs/sheets-filter": "0.21.0",
60
- "@univerjs/sheets-ui": "0.21.0",
61
- "@univerjs/ui": "0.21.0"
56
+ "@univerjs/core": "0.21.1",
57
+ "@univerjs/design": "0.21.1",
58
+ "@univerjs/sheets": "0.21.1",
59
+ "@univerjs/sheets-ui": "0.21.1",
60
+ "@univerjs/ui": "0.21.1",
61
+ "@univerjs/sheets-filter": "0.21.1"
62
62
  },
63
63
  "devDependencies": {
64
64
  "react": "18.3.1",
@@ -66,7 +66,7 @@
66
66
  "tailwindcss": "3.4.18",
67
67
  "typescript": "^6.0.2",
68
68
  "vitest": "^4.1.4",
69
- "@univerjs-infra/shared": "0.21.0"
69
+ "@univerjs-infra/shared": "0.21.1"
70
70
  },
71
71
  "scripts": {
72
72
  "test": "vitest run",