@univerjs/action-recorder 0.6.10 → 0.7.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.js +4 -1
- package/lib/es/index.js +222 -204
- package/lib/index.css +1 -1
- package/lib/index.js +222 -204
- package/lib/umd/index.js +4 -1
- package/package.json +11 -11
package/lib/umd/index.js
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
(function(c,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("@univerjs/sheets-filter"),require("@univerjs/sheets-ui"),require("@univerjs/ui"),require("rxjs"),require("@univerjs/design"),require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","@univerjs/sheets-filter","@univerjs/sheets-ui","@univerjs/ui","rxjs","@univerjs/design","react/jsx-runtime","react"],a):(c=typeof globalThis<"u"?globalThis:c||self,a(c.UniverActionRecorder={},c.UniverCore,c.UniverSheets,c.UniverSheetsFilter,c.UniverSheetsUi,c.UniverUi,c.rxjs,c.UniverDesign,c.React,c.React))})(this,function(c,a,l,b,m,s,P,h,p,C){"use strict";var ge=Object.defineProperty;var pe=(c,a,l)=>a in c?ge(c,a,{enumerable:!0,configurable:!0,writable:!0,value:l}):c[a]=l;var g=(c,a,l)=>pe(c,typeof a!="symbol"?a+"":a,l);var F;var f=function(){return f=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++){t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},f.apply(this,arguments)},J=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},L=C.forwardRef(function(e,t){var n=e.icon,r=e.id,o=e.className,i=e.extend,d=J(e,["icon","id","className","extend"]),u="univerjs-icon univerjs-icon-".concat(r," ").concat(o||"").trim(),v=C.useRef("_".concat(K()));return x(n,"".concat(r),{defIds:n.defIds,idSuffix:v.current},f({ref:t,className:u},d),i)});function x(e,t,n,r,o){return C.createElement(e.tag,f(f({key:t},G(e,n,o)),r),(Z(e,n).children||[]).map(function(i,d){return x(i,"".concat(t,"-").concat(e.tag,"-").concat(d),n,void 0,o)}))}function G(e,t,n){var r=f({},e.attrs);n!=null&&n.colorChannel1&&r.fill==="colorChannel1"&&(r.fill=n.colorChannel1),e.tag==="mask"&&r.id&&(r.id=r.id+t.idSuffix),Object.entries(r).forEach(function(i){var d=i[0],u=i[1];d==="mask"&&typeof u=="string"&&(r[d]=u.replace(/url\(#(.*)\)/,"url(#$1".concat(t.idSuffix,")")))});var o=t.defIds;return!o||o.length===0||(e.tag==="use"&&r["xlink:href"]&&(r["xlink:href"]=r["xlink:href"]+t.idSuffix),Object.entries(r).forEach(function(i){var d=i[0],u=i[1];typeof u=="string"&&(r[d]=u.replace(/url\(#(.*)\)/,"url(#$1".concat(t.idSuffix,")")))})),r}function Z(e,t){var n,r=t.defIds;return!r||r.length===0?e:e.tag==="defs"&&(!((n=e.children)===null||n===void 0)&&n.length)?f(f({},e),{children:e.children.map(function(o){return typeof o.attrs.id=="string"&&r&&r.indexOf(o.attrs.id)>-1?f(f({},o),{attrs:f(f({},o.attrs),{id:o.attrs.id+t.idSuffix})}):o})}):e}function K(){return Math.random().toString(36).substring(2,8)}L.displayName="UniverIcon";var Y={tag:"svg",attrs:{fill:"none",viewBox:"0 0 17 16",width:"1em",height:"1em"},children:[{tag:"g",attrs:{fill:"currentColor",clipPath:"url(#record-single_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-single_clip0_1559_19"},children:[{tag:"path",attrs:{fill:"#fff",d:"M0 0H16V16H0z",transform:"translate(.94)"}}]}]}],defIds:["record-single_clip0_1559_19"]},j=C.forwardRef(function(e,t){return C.createElement(L,Object.assign({},e,{id:"record-single",ref:t,icon:Y}))});j.displayName="RecordSingle";var Q=Object.getOwnPropertyDescriptor,X=(e,t,n,r)=>{for(var o=r>1?void 0:r?Q(t,n):t,i=e.length-1,d;i>=0;i--)(d=e[i])&&(o=d(o)||o);return o},M=(e,t)=>(n,r)=>t(n,r,e);c.ActionRecorderService=class extends a.Disposable{constructor(n,r,o,i){super();g(this,"_shouldRecordCommands",new Set);g(this,"_panelOpened$",new P.BehaviorSubject(!1));g(this,"panelOpened$",this._panelOpened$.asObservable());g(this,"_recorder",null);g(this,"_recording$",new P.BehaviorSubject(!1));g(this,"recording$",this._recording$.asObservable());g(this,"_recorded$",new P.BehaviorSubject([]));g(this,"_recordedCommands$",new P.BehaviorSubject([]));g(this,"recordedCommands$",this._recordedCommands$.asObservable());this._commandSrv=n,this._logService=r,this._localFileService=o,this._instanceService=i}get recording(){return this._recording$.getValue()}get _recorded(){return this._recorded$.getValue()}get _recordedCommands(){return this._recordedCommands$.getValue()}registerRecordedCommand(n){if(n.type===a.CommandType.MUTATION)throw new Error("[CommandRecorderService] Cannot record mutation commands.");this._shouldRecordCommands.add(n.id)}togglePanel(n){this._panelOpened$.next(n),n===!1&&this.stopRecording()}startRecording(n=!1){this._recorder=this._commandSrv.onCommandExecuted(r=>{var o,i;if(this._shouldRecordCommands.has(r.id)){const d=this._recorded,u=this._recordedCommands;let v={...r};const _=(o=this._instanceService.getFocusedUnit())==null?void 0:o.getUnitId(),{unitId:y=_,subUnitId:S}=v==null?void 0:v.params;if(n&&y&&S){const E=(i=this._instanceService.getUnit(y).getSheetBySheetId(S))==null?void 0:i.getName();v={...v,params:{...v.params,subUnitId:E}}}v.id===l.SetSelectionsOperation.id&&d.length>0&&d[d.length-1].id===l.SetSelectionsOperation.id?d[d.length-1]=v:(d.push(v),this._recorded$.next(d),v.type===a.CommandType.COMMAND&&(u.push(v),this._recordedCommands$.next(u)))}}),this._recording$.next(!0)}stopRecording(){var n;(n=this._recorder)==null||n.dispose(),this._recorder=null,this._recorded$.next([]),this._recordedCommands$.next([]),this._recording$.next(!1)}completeRecording(){const n=this._recorded.slice();this._localFileService.downloadFile(new Blob([JSON.stringify(n,null,2)]),"recorded-commands.json"),this._logService.error("Recorded commands:",n),this.stopRecording()}},c.ActionRecorderService=X([M(0,a.ICommandService),M(1,a.ILogService),M(2,s.ILocalFileService),M(3,a.IUniverInstanceService)],c.ActionRecorderService);const B={id:"action-recorder.command.start-recording",type:a.CommandType.COMMAND,handler:(e,t)=>(e.get(c.ActionRecorderService).startRecording(!!(t!=null&&t.replaceId)),!0)},k={id:"action-recorder.command.complete-recording",type:a.CommandType.COMMAND,handler:e=>(e.get(c.ActionRecorderService).completeRecording(),!0)},V={id:"action-recorder.command.stop-recording",type:a.CommandType.COMMAND,handler:e=>(e.get(c.ActionRecorderService).completeRecording(),!0)};var ee=Object.getOwnPropertyDescriptor,ne=(e,t,n,r)=>{for(var o=r>1?void 0:r?ee(t,n):t,i=e.length-1,d;i>=0;i--)(d=e[i])&&(o=d(o)||o);return o},I=(e,t)=>(n,r)=>t(n,r,e),N=(e=>(e.DEFAULT="default",e.NAME="name",e.ACTIVE="active",e))(N||{});c.ActionReplayService=class extends a.Disposable{constructor(t,n,r,o,i){super(),this._messageService=t,this._instanceService=n,this._localFileService=r,this._logService=o,this._commandService=i}async replayLocalJSON(t="default"){const n=await this._localFileService.openFile({multiple:!1,accept:".json"});if(n.length!==1)return!1;const r=n[0];try{return this.replayCommands(JSON.parse(await r.text()),{mode:t})}catch{return this._messageService.show({type:h.MessageType.Error,content:`Failed to replay commands from local file ${r.name}.`}),!1}}async replayCommands(t,n){var i,d,u;const r=(i=this._instanceService.getFocusedUnit())==null?void 0:i.getUnitId();r||this._logService.error("[ReplayService]","no focused unit to replay commands");const{mode:o}=n||{};for(const v of t){const{id:_,params:y}=v,S=y;if(S){if(typeof S.unitId<"u"&&(S.unitId=r),o==="name"&&S.subUnitId!=="undefined"){const A=(d=this._instanceService.getFocusedUnit().getSheetBySheetName(S.subUnitId))==null?void 0:d.getSheetId();A?S.subUnitId=A:this._logService.error("[ReplayService]",`failed to find subunit by subUnitName = ${S.subUnitId}`)}if(o==="active"&&S.subUnitId!=="undefined"){const A=(u=this._instanceService.getFocusedUnit().getActiveSheet())==null?void 0:u.getSheetId();A?S.subUnitId=A:this._logService.error("[ReplayService]","failed to find active subunit")}if(!await this._commandService.executeCommand(_,y))return!1}else if(!await this._commandService.executeCommand(_))return!1}return!0}async replayCommandsWithDelay(t){var r;const n=(r=this._instanceService.getFocusedUnit())==null?void 0:r.getUnitId();n||this._logService.error("[ReplayService]","no focused unit to replay commands");for(const o of t){await a.awaitTime(re());const{id:i,params:d}=o;if(d){if(typeof d.unitId<"u"&&(d.unitId=n),!await this._commandService.executeCommand(i,d))return!1}else if(!await this._commandService.executeCommand(i))return!1}return!0}},c.ActionReplayService=ne([I(0,s.IMessageService),I(1,a.IUniverInstanceService),I(2,s.ILocalFileService),I(3,a.ILogService),I(4,a.ICommandService)],c.ActionReplayService);function re(){return Math.floor(Math.random()*800)+200}const w={id:"action-recorder.command.replay-local-records",type:a.CommandType.COMMAND,handler:async e=>{const n=await e.get(c.ActionReplayService).replayLocalJSON();return n&&e.get(s.IMessageService).show({type:h.MessageType.Success,content:"Successfully replayed local records"}),n}},U={id:"action-recorder.command.replay-local-records-name",type:a.CommandType.COMMAND,handler:async e=>{const n=await e.get(c.ActionReplayService).replayLocalJSON(N.NAME);return n&&e.get(s.IMessageService).show({type:h.MessageType.Success,content:"Successfully replayed local records"}),n}},$={id:"action-recorder.command.replay-local-records-active",type:a.CommandType.COMMAND,handler:async e=>{const n=await e.get(c.ActionReplayService).replayLocalJSON(N.ACTIVE);return n&&e.get(s.IMessageService).show({type:h.MessageType.Success,content:"Successfully replayed local records"}),n}},D={id:"action-recorder.operation.open-panel",type:a.CommandType.OPERATION,handler(e){return e.get(c.ActionRecorderService).togglePanel(!0),!0}},W={id:"action-recorder.operation.close-panel",type:a.CommandType.OPERATION,handler(e){return e.get(c.ActionRecorderService).togglePanel(!1),!0}},O={actionRecorderPanel:"univer-action-recorder-panel",actionRecorderPanelIcon:"univer-action-recorder-panel-icon",actionRecorderPanelIconRecording:"univer-action-recorder-panel-icon-recording",actionRecorderPanelTitle:"univer-action-recorder-panel-title",actionRecorderPanelActions:"univer-action-recorder-panel-actions"};function te(){const e=s.useDependency(c.ActionRecorderService);return s.useObservable(e.panelOpened$)?p.jsx(oe,{}):null}function oe(){var y;const e=s.useDependency(a.ICommandService),t=s.useDependency(c.ActionRecorderService),n=s.useObservable(t.recording$),r=s.useObservable(t.recordedCommands$),o=(y=r==null?void 0:r.length)!=null?y:0,i=C.useCallback(()=>{n||e.executeCommand(W.id)},[e,n]),d=C.useCallback(S=>{n||e.executeCommand(B.id,{replaceId:S})},[e,n]),u=C.useCallback(()=>{n&&e.executeCommand(k.id)},[e,n]),v=C.useCallback(()=>{n&&e.executeCommand(V.id)},[e,n]),_=n?o===0?"Recording...":`${o}: ${r[o-1].id}`:"Start Recording";return p.jsxs("div",{className:O.actionRecorderPanel,children:[p.jsx("div",{className:h.clsx(O.actionRecorderPanelIcon,n?O.actionRecorderPanelIconRecording:!1),children:p.jsx(j,{})}),p.jsx("div",{className:O.actionRecorderPanelTitle,children:_}),p.jsxs("div",{className:O.actionRecorderPanelActions,children:[p.jsx(h.Button,{onClick:n?v:i,children:n?"Cancel":"Close"}),p.jsx(h.Button,{variant:"primary",onClick:n?u:()=>d(),children:n?"Save":"Start"}),!n&&p.jsx(h.Button,{variant:"primary",onClick:()=>d(!0),children:"Start(N)"})]})]})}const q="RECORD_MENU_ITEM";function ce(){return{id:q,type:s.MenuItemType.SUBITEMS,icon:"RecordSingle",tooltip:"action-recorder.menu.title"}}function ie(e){const t=e.get(c.ActionRecorderService);return{id:D.id,title:"action-recorder.menu.record",type:s.MenuItemType.BUTTON,disabled$:t.panelOpened$}}function ae(){return{id:w.id,title:"action-recorder.menu.replay-local",type:s.MenuItemType.BUTTON}}function de(){return{id:U.id,title:"action-recorder.menu.replay-local-name",type:s.MenuItemType.BUTTON}}function le(){return{id:$.id,title:"action-recorder.menu.replay-local-active",type:s.MenuItemType.BUTTON}}const se={[s.RibbonStartGroup.OTHERS]:{[q]:{order:10,menuItemFactory:ce,[D.id]:{order:1,menuItemFactory:ie},[w.id]:{order:2,menuItemFactory:ae},[U.id]:{order:3,menuItemFactory:de},[$.id]:{order:4,menuItemFactory:le}}}};var me=Object.getOwnPropertyDescriptor,ue=(e,t,n,r)=>{for(var o=r>1?void 0:r?me(t,n):t,i=e.length-1,d;i>=0;i--)(d=e[i])&&(o=d(o)||o);return o},R=(e,t)=>(n,r)=>t(n,r,e);let T=class extends a.Disposable{constructor(e,t,n,r,o,i){super(),this._commandSrv=e,this._uiPartsSrv=t,this._menuManagerService=n,this._componentManager=r,this._actionRecorderService=o,this._injector=i,this._initCommands(),this._initUI(),this._initSheetsCommands(),this._initDocsCommands()}_initCommands(){[B,V,k,D,W,w,U,$].forEach(e=>this._commandSrv.registerCommand(e))}_initUI(){this._uiPartsSrv.registerComponent(s.BuiltInUIPart.GLOBAL,()=>s.connectInjector(te,this._injector)),this._componentManager.register("RecordSingle",j),this._menuManagerService.mergeMenu(se)}_initSheetsCommands(){[l.CopySheetCommand,l.DeleteRangeMoveLeftCommand,l.DeleteRangeMoveUpCommand,l.DeltaColumnWidthCommand,l.DeltaRowHeightCommand,l.InsertSheetCommand,l.InsertColAfterCommand,l.InsertColBeforeCommand,l.InsertRowAfterCommand,l.InsertRowBeforeCommand,l.RemoveSheetCommand,l.SetStyleCommand,l.AddWorksheetMergeCommand,l.AddWorksheetMergeAllCommand,l.AddWorksheetMergeVerticalCommand,l.AddWorksheetMergeHorizontalCommand,l.SetFrozenCommand,l.CancelFrozenCommand,l.SetHorizontalTextAlignCommand,l.SetOverlineCommand,m.SetRangeBoldCommand,m.SetRangeFontFamilyCommand,m.SetRangeFontSizeCommand,m.SetRangeItalicCommand,m.SetRangeStrickThroughCommand,m.SetRangeSubscriptCommand,m.SetRangeSuperscriptCommand,m.SetRangeTextColorCommand,m.SetRangeUnderlineCommand,l.SetRangeValuesCommand,l.SetStrikeThroughCommand,l.SetTextColorCommand,l.SetTextRotationCommand,l.SetTextWrapCommand,l.SetVerticalTextAlignCommand,m.SheetCopyCommand,m.SheetCutCommand,m.SheetPasteBesidesBorderCommand,m.SheetPasteColWidthCommand,m.SheetPasteCommand,m.SheetPasteFormatCommand,m.SheetPasteShortKeyCommand,m.SheetPasteValueCommand,m.AutoFillCommand,m.RefillCommand,l.SetWorksheetActivateCommand,l.SetWorksheetActiveOperation,l.SetSelectionsOperation,b.SetSheetFilterRangeCommand,b.SetSheetsFilterCriteriaCommand,b.RemoveSheetFilterCommand].forEach(e=>this._actionRecorderService.registerRecordedCommand(e))}_initDocsCommands(){}};T=ue([R(0,a.ICommandService),R(1,s.IUIPartsService),R(2,s.IMenuManagerService),R(3,a.Inject(s.ComponentManager)),R(4,a.Inject(c.ActionRecorderService)),R(5,a.Inject(a.Injector))],T);const ve="action-recorder.config",H={};var Se=Object.getOwnPropertyDescriptor,fe=(e,t,n,r)=>{for(var o=r>1?void 0:r?Se(t,n):t,i=e.length-1,d;i>=0;i--)(d=e[i])&&(o=d(o)||o);return o},z=(e,t)=>(n,r)=>t(n,r,e);c.UniverActionRecorderPlugin=(F=class extends a.Plugin{constructor(t=H,n,r){super(),this._config=t,this._injector=n,this._configService=r;const{menu:o,...i}=a.merge({},H,this._config);o&&this._configService.setConfig("menu",o,{merge:!0}),this._configService.setConfig(ve,i)}onStarting(){(this._config.replayOnly?[[c.ActionReplayService]]:[[c.ActionRecorderService],[c.ActionReplayService],[T]]).forEach(n=>this._injector.add(n))}onSteady(){this._config.replayOnly||this._injector.get(T)}},g(F,"pluginName","UNIVER_ACTION_RECORDER_PLUGIN"),F),c.UniverActionRecorderPlugin=fe([z(1,a.Inject(a.Injector)),z(2,a.IConfigService)],c.UniverActionRecorderPlugin),Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(o,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("@univerjs/sheets-filter"),require("@univerjs/sheets-ui"),require("@univerjs/ui"),require("rxjs"),require("@univerjs/design"),require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","@univerjs/sheets-filter","@univerjs/sheets-ui","@univerjs/ui","rxjs","@univerjs/design","react/jsx-runtime","react"],a):(o=typeof globalThis<"u"?globalThis:o||self,a(o.UniverActionRecorder={},o.UniverCore,o.UniverSheets,o.UniverSheetsFilter,o.UniverSheetsUi,o.UniverUi,o.rxjs,o.UniverDesign,o.React,o.React))})(this,function(o,a,s,T,m,l,A,y,p,C){"use strict";var Se=Object.defineProperty;var ge=(o,a,s)=>a in o?Se(o,a,{enumerable:!0,configurable:!0,writable:!0,value:s}):o[a]=s;var g=(o,a,s)=>ge(o,typeof a!="symbol"?a+"":a,s);var D;var S=function(){return S=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++){t=arguments[r];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},S.apply(this,arguments)},H=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r},F=C.forwardRef(function(e,t){var r=e.icon,n=e.id,i=e.className,c=e.extend,d=H(e,["icon","id","className","extend"]),u="univerjs-icon univerjs-icon-".concat(n," ").concat(i||"").trim(),v=C.useRef("_".concat(Z()));return E(r,"".concat(n),{defIds:r.defIds,idSuffix:v.current},S({ref:t,className:u},d),c)});function E(e,t,r,n,i){return C.createElement(e.tag,S(S({key:t},J(e,r,i)),n),(G(e,r).children||[]).map(function(c,d){return E(c,"".concat(t,"-").concat(e.tag,"-").concat(d),r,void 0,i)}))}function J(e,t,r){var n=S({},e.attrs);r!=null&&r.colorChannel1&&n.fill==="colorChannel1"&&(n.fill=r.colorChannel1),e.tag==="mask"&&n.id&&(n.id=n.id+t.idSuffix),Object.entries(n).forEach(function(c){var d=c[0],u=c[1];d==="mask"&&typeof u=="string"&&(n[d]=u.replace(/url\(#(.*)\)/,"url(#$1".concat(t.idSuffix,")")))});var i=t.defIds;return!i||i.length===0||(e.tag==="use"&&n["xlink:href"]&&(n["xlink:href"]=n["xlink:href"]+t.idSuffix),Object.entries(n).forEach(function(c){var d=c[0],u=c[1];typeof u=="string"&&(n[d]=u.replace(/url\(#(.*)\)/,"url(#$1".concat(t.idSuffix,")")))})),n}function G(e,t){var r,n=t.defIds;return!n||n.length===0?e:e.tag==="defs"&&(!((r=e.children)===null||r===void 0)&&r.length)?S(S({},e),{children:e.children.map(function(i){return typeof i.attrs.id=="string"&&n&&n.indexOf(i.attrs.id)>-1?S(S({},i),{attrs:S(S({},i.attrs),{id:i.attrs.id+t.idSuffix})}):i})}):e}function Z(){return Math.random().toString(36).substring(2,8)}F.displayName="UniverIcon";var K={tag:"svg",attrs:{fill:"none",viewBox:"0 0 17 16",width:"1em",height:"1em"},children:[{tag:"g",attrs:{fill:"currentColor",clipPath:"url(#record-single_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-single_clip0_1559_19"},children:[{tag:"path",attrs:{fill:"#fff",d:"M0 0H16V16H0z",transform:"translate(.94)"}}]}]}],defIds:["record-single_clip0_1559_19"]},w=C.forwardRef(function(e,t){return C.createElement(F,Object.assign({},e,{id:"record-single",ref:t,icon:K}))});w.displayName="RecordSingle";var Y=Object.getOwnPropertyDescriptor,Q=(e,t,r,n)=>{for(var i=n>1?void 0:n?Y(t,r):t,c=e.length-1,d;c>=0;c--)(d=e[c])&&(i=d(i)||i);return i},M=(e,t)=>(r,n)=>t(r,n,e);o.ActionRecorderService=class extends a.Disposable{constructor(r,n,i,c){super();g(this,"_shouldRecordCommands",new Set);g(this,"_panelOpened$",new A.BehaviorSubject(!1));g(this,"panelOpened$",this._panelOpened$.asObservable());g(this,"_recorder",null);g(this,"_recording$",new A.BehaviorSubject(!1));g(this,"recording$",this._recording$.asObservable());g(this,"_recorded$",new A.BehaviorSubject([]));g(this,"_recordedCommands$",new A.BehaviorSubject([]));g(this,"recordedCommands$",this._recordedCommands$.asObservable());this._commandSrv=r,this._logService=n,this._localFileService=i,this._instanceService=c}get recording(){return this._recording$.getValue()}get _recorded(){return this._recorded$.getValue()}get _recordedCommands(){return this._recordedCommands$.getValue()}registerRecordedCommand(r){if(r.type===a.CommandType.MUTATION)throw new Error("[CommandRecorderService] Cannot record mutation commands.");this._shouldRecordCommands.add(r.id)}togglePanel(r){this._panelOpened$.next(r),r===!1&&this.stopRecording()}startRecording(r=!1){this._recorder=this._commandSrv.onCommandExecuted(n=>{var i,c;if(this._shouldRecordCommands.has(n.id)){const d=this._recorded,u=this._recordedCommands;let v={...n};const R=(i=this._instanceService.getFocusedUnit())==null?void 0:i.getUnitId(),{unitId:h=R,subUnitId:f}=v==null?void 0:v.params;if(r&&h&&f){const x=(c=this._instanceService.getUnit(h).getSheetBySheetId(f))==null?void 0:c.getName();v={...v,params:{...v.params,subUnitId:x}}}v.id===s.SetSelectionsOperation.id&&d.length>0&&d[d.length-1].id===s.SetSelectionsOperation.id?d[d.length-1]=v:(d.push(v),this._recorded$.next(d),v.type===a.CommandType.COMMAND&&(u.push(v),this._recordedCommands$.next(u)))}}),this._recording$.next(!0)}stopRecording(){var r;(r=this._recorder)==null||r.dispose(),this._recorder=null,this._recorded$.next([]),this._recordedCommands$.next([]),this._recording$.next(!1)}completeRecording(){const r=this._recorded.slice();this._localFileService.downloadFile(new Blob([JSON.stringify(r,null,2)]),"recorded-commands.json"),this._logService.error("Recorded commands:",r),this.stopRecording()}},o.ActionRecorderService=Q([M(0,a.ICommandService),M(1,a.ILogService),M(2,l.ILocalFileService),M(3,a.IUniverInstanceService)],o.ActionRecorderService);const L={id:"action-recorder.command.start-recording",type:a.CommandType.COMMAND,handler:(e,t)=>(e.get(o.ActionRecorderService).startRecording(!!(t!=null&&t.replaceId)),!0)},B={id:"action-recorder.command.complete-recording",type:a.CommandType.COMMAND,handler:e=>(e.get(o.ActionRecorderService).completeRecording(),!0)},k={id:"action-recorder.command.stop-recording",type:a.CommandType.COMMAND,handler:e=>(e.get(o.ActionRecorderService).completeRecording(),!0)};var X=Object.getOwnPropertyDescriptor,ee=(e,t,r,n)=>{for(var i=n>1?void 0:n?X(t,r):t,c=e.length-1,d;c>=0;c--)(d=e[c])&&(i=d(i)||i);return i},I=(e,t)=>(r,n)=>t(r,n,e),j=(e=>(e.DEFAULT="default",e.NAME="name",e.ACTIVE="active",e))(j||{});o.ActionReplayService=class extends a.Disposable{constructor(t,r,n,i,c){super(),this._messageService=t,this._instanceService=r,this._localFileService=n,this._logService=i,this._commandService=c}async replayLocalJSON(t="default"){const r=await this._localFileService.openFile({multiple:!1,accept:".json"});if(r.length!==1)return!1;const n=r[0];try{return this.replayCommands(JSON.parse(await n.text()),{mode:t})}catch{return this._messageService.show({type:y.MessageType.Error,content:`Failed to replay commands from local file ${n.name}.`}),!1}}async replayCommands(t,r){var c,d,u;const n=(c=this._instanceService.getFocusedUnit())==null?void 0:c.getUnitId();n||this._logService.error("[ReplayService]","no focused unit to replay commands");const{mode:i}=r||{};for(const v of t){const{id:R,params:h}=v,f=h;if(f){if(typeof f.unitId<"u"&&(f.unitId=n),i==="name"&&f.subUnitId!=="undefined"){const O=(d=this._instanceService.getFocusedUnit().getSheetBySheetName(f.subUnitId))==null?void 0:d.getSheetId();O?f.subUnitId=O:this._logService.error("[ReplayService]",`failed to find subunit by subUnitName = ${f.subUnitId}`)}if(i==="active"&&f.subUnitId!=="undefined"){const O=(u=this._instanceService.getFocusedUnit().getActiveSheet())==null?void 0:u.getSheetId();O?f.subUnitId=O:this._logService.error("[ReplayService]","failed to find active subunit")}if(!await this._commandService.executeCommand(R,h))return!1}else if(!await this._commandService.executeCommand(R))return!1}return!0}async replayCommandsWithDelay(t){var n;const r=(n=this._instanceService.getFocusedUnit())==null?void 0:n.getUnitId();r||this._logService.error("[ReplayService]","no focused unit to replay commands");for(const i of t){await a.awaitTime(re());const{id:c,params:d}=i;if(d){if(typeof d.unitId<"u"&&(d.unitId=r),!await this._commandService.executeCommand(c,d))return!1}else if(!await this._commandService.executeCommand(c))return!1}return!0}},o.ActionReplayService=ee([I(0,l.IMessageService),I(1,a.IUniverInstanceService),I(2,l.ILocalFileService),I(3,a.ILogService),I(4,a.ICommandService)],o.ActionReplayService);function re(){return Math.floor(Math.random()*800)+200}const N={id:"action-recorder.command.replay-local-records",type:a.CommandType.COMMAND,handler:async e=>{const r=await e.get(o.ActionReplayService).replayLocalJSON();return r&&e.get(l.IMessageService).show({type:y.MessageType.Success,content:"Successfully replayed local records"}),r}},P={id:"action-recorder.command.replay-local-records-name",type:a.CommandType.COMMAND,handler:async e=>{const r=await e.get(o.ActionReplayService).replayLocalJSON(j.NAME);return r&&e.get(l.IMessageService).show({type:y.MessageType.Success,content:"Successfully replayed local records"}),r}},U={id:"action-recorder.command.replay-local-records-active",type:a.CommandType.COMMAND,handler:async e=>{const r=await e.get(o.ActionReplayService).replayLocalJSON(j.ACTIVE);return r&&e.get(l.IMessageService).show({type:y.MessageType.Success,content:"Successfully replayed local records"}),r}},$={id:"action-recorder.operation.open-panel",type:a.CommandType.OPERATION,handler(e){return e.get(o.ActionRecorderService).togglePanel(!0),!0}},V={id:"action-recorder.operation.close-panel",type:a.CommandType.OPERATION,handler(e){return e.get(o.ActionRecorderService).togglePanel(!1),!0}};function ne(){const e=l.useDependency(o.ActionRecorderService);return l.useObservable(e.panelOpened$)?p.jsx(te,{}):null}function te(){var h;const e=l.useDependency(a.ICommandService),t=l.useDependency(o.ActionRecorderService),r=l.useObservable(t.recording$),n=l.useObservable(t.recordedCommands$),i=(h=n==null?void 0:n.length)!=null?h:0,c=C.useCallback(()=>{r||e.executeCommand(V.id)},[e,r]),d=C.useCallback(f=>{r||e.executeCommand(L.id,{replaceId:f})},[e,r]),u=C.useCallback(()=>{r&&e.executeCommand(B.id)},[e,r]),v=C.useCallback(()=>{r&&e.executeCommand(k.id)},[e,r]),R=r?i===0?"Recording...":`${i}: ${n[i-1].id}`:"Start Recording";return p.jsxs("div",{className:`
|
|
2
|
+
univer-fixed univer-bottom-20 univer-left-1/2 univer-z-[1000] univer-flex univer-h-16 univer-w-[512px]
|
|
3
|
+
-univer-translate-x-1/2 univer-items-center univer-rounded-lg univer-bg-white univer-px-5 univer-shadow-lg
|
|
4
|
+
`,children:[p.jsx("div",{className:"univer-mr-2 univer-size-5 univer-shrink-0 univer-grow-0 univer-text-xl",children:p.jsx(w,{})}),p.jsx("div",{className:"univer-flex-1 univer-text-[13px]",children:R}),p.jsxs("div",{className:"univer-flex univer-w-64 univer-shrink-0 univer-grow-0 univer-justify-between",children:[p.jsx(y.Button,{className:"univer-w-20",onClick:r?v:c,children:r?"Cancel":"Close"}),p.jsx(y.Button,{className:"univer-w-20",variant:"primary",onClick:r?u:()=>d(),children:r?"Save":"Start"}),!r&&p.jsx(y.Button,{variant:"primary",onClick:()=>d(!0),children:"Start(N)"})]})]})}const W="RECORD_MENU_ITEM";function ie(){return{id:W,type:l.MenuItemType.SUBITEMS,icon:"RecordSingle",tooltip:"action-recorder.menu.title"}}function oe(e){const t=e.get(o.ActionRecorderService);return{id:$.id,title:"action-recorder.menu.record",type:l.MenuItemType.BUTTON,disabled$:t.panelOpened$}}function ce(){return{id:N.id,title:"action-recorder.menu.replay-local",type:l.MenuItemType.BUTTON}}function ae(){return{id:P.id,title:"action-recorder.menu.replay-local-name",type:l.MenuItemType.BUTTON}}function de(){return{id:U.id,title:"action-recorder.menu.replay-local-active",type:l.MenuItemType.BUTTON}}const se={[l.RibbonStartGroup.OTHERS]:{[W]:{order:10,menuItemFactory:ie,[$.id]:{order:1,menuItemFactory:oe},[N.id]:{order:2,menuItemFactory:ce},[P.id]:{order:3,menuItemFactory:ae},[U.id]:{order:4,menuItemFactory:de}}}};var le=Object.getOwnPropertyDescriptor,me=(e,t,r,n)=>{for(var i=n>1?void 0:n?le(t,r):t,c=e.length-1,d;c>=0;c--)(d=e[c])&&(i=d(i)||i);return i},_=(e,t)=>(r,n)=>t(r,n,e);let b=class extends a.Disposable{constructor(e,t,r,n,i,c){super(),this._commandSrv=e,this._uiPartsSrv=t,this._menuManagerService=r,this._componentManager=n,this._actionRecorderService=i,this._injector=c,this._initCommands(),this._initUI(),this._initSheetsCommands(),this._initDocsCommands()}_initCommands(){[L,k,B,$,V,N,P,U].forEach(e=>this._commandSrv.registerCommand(e))}_initUI(){this._uiPartsSrv.registerComponent(l.BuiltInUIPart.GLOBAL,()=>l.connectInjector(ne,this._injector)),this._componentManager.register("RecordSingle",w),this._menuManagerService.mergeMenu(se)}_initSheetsCommands(){[s.CopySheetCommand,s.DeleteRangeMoveLeftCommand,s.DeleteRangeMoveUpCommand,s.DeltaColumnWidthCommand,s.DeltaRowHeightCommand,s.InsertSheetCommand,s.InsertColAfterCommand,s.InsertColBeforeCommand,s.InsertRowAfterCommand,s.InsertRowBeforeCommand,s.RemoveSheetCommand,s.SetStyleCommand,s.AddWorksheetMergeCommand,s.AddWorksheetMergeAllCommand,s.AddWorksheetMergeVerticalCommand,s.AddWorksheetMergeHorizontalCommand,s.SetFrozenCommand,s.CancelFrozenCommand,s.SetHorizontalTextAlignCommand,s.SetOverlineCommand,m.SetRangeBoldCommand,m.SetRangeFontFamilyCommand,m.SetRangeFontSizeCommand,m.SetRangeItalicCommand,m.SetRangeStrickThroughCommand,m.SetRangeSubscriptCommand,m.SetRangeSuperscriptCommand,m.SetRangeTextColorCommand,m.SetRangeUnderlineCommand,s.SetRangeValuesCommand,s.SetStrikeThroughCommand,s.SetTextColorCommand,s.SetTextRotationCommand,s.SetTextWrapCommand,s.SetVerticalTextAlignCommand,m.SheetCopyCommand,m.SheetCutCommand,m.SheetPasteBesidesBorderCommand,m.SheetPasteColWidthCommand,m.SheetPasteCommand,m.SheetPasteFormatCommand,m.SheetPasteShortKeyCommand,m.SheetPasteValueCommand,m.AutoFillCommand,m.RefillCommand,s.SetWorksheetActivateCommand,s.SetWorksheetActiveOperation,s.SetSelectionsOperation,T.SetSheetFilterRangeCommand,T.SetSheetsFilterCriteriaCommand,T.RemoveSheetFilterCommand].forEach(e=>this._actionRecorderService.registerRecordedCommand(e))}_initDocsCommands(){}};b=me([_(0,a.ICommandService),_(1,l.IUIPartsService),_(2,l.IMenuManagerService),_(3,a.Inject(l.ComponentManager)),_(4,a.Inject(o.ActionRecorderService)),_(5,a.Inject(a.Injector))],b);const ue="action-recorder.config",q={};var ve=Object.getOwnPropertyDescriptor,fe=(e,t,r,n)=>{for(var i=n>1?void 0:n?ve(t,r):t,c=e.length-1,d;c>=0;c--)(d=e[c])&&(i=d(i)||i);return i},z=(e,t)=>(r,n)=>t(r,n,e);o.UniverActionRecorderPlugin=(D=class extends a.Plugin{constructor(t=q,r,n){super(),this._config=t,this._injector=r,this._configService=n;const{menu:i,...c}=a.merge({},q,this._config);i&&this._configService.setConfig("menu",i,{merge:!0}),this._configService.setConfig(ue,c)}onStarting(){(this._config.replayOnly?[[o.ActionReplayService]]:[[o.ActionRecorderService],[o.ActionReplayService],[b]]).forEach(r=>this._injector.add(r))}onSteady(){this._config.replayOnly||this._injector.get(b)}},g(D,"pluginName","UNIVER_ACTION_RECORDER_PLUGIN"),D),o.UniverActionRecorderPlugin=fe([z(1,a.Inject(a.Injector)),z(2,a.IConfigService)],o.UniverActionRecorderPlugin),Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/action-recorder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0-beta.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "",
|
|
6
6
|
"author": "DreamNum <developer@univer.ai>",
|
|
@@ -52,13 +52,13 @@
|
|
|
52
52
|
"rxjs": ">=7.0.0"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@univerjs/icons": "^0.3.
|
|
56
|
-
"@univerjs/core": "0.
|
|
57
|
-
"@univerjs/
|
|
58
|
-
"@univerjs/sheets": "0.
|
|
59
|
-
"@univerjs/
|
|
60
|
-
"@univerjs/sheets-ui": "0.
|
|
61
|
-
"@univerjs/ui": "0.
|
|
55
|
+
"@univerjs/icons": "^0.3.22",
|
|
56
|
+
"@univerjs/core": "0.7.0-beta.0",
|
|
57
|
+
"@univerjs/sheets": "0.7.0-beta.0",
|
|
58
|
+
"@univerjs/sheets-filter": "0.7.0-beta.0",
|
|
59
|
+
"@univerjs/design": "0.7.0-beta.0",
|
|
60
|
+
"@univerjs/sheets-ui": "0.7.0-beta.0",
|
|
61
|
+
"@univerjs/ui": "0.7.0-beta.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"less": "^4.3.0",
|
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
"rxjs": "^7.8.1",
|
|
67
67
|
"tailwindcss": "^3.4.17",
|
|
68
68
|
"typescript": "^5.8.3",
|
|
69
|
-
"vite": "^6.3.
|
|
70
|
-
"vitest": "^3.1.
|
|
71
|
-
"@univerjs-infra/shared": "0.
|
|
69
|
+
"vite": "^6.3.3",
|
|
70
|
+
"vitest": "^3.1.2",
|
|
71
|
+
"@univerjs-infra/shared": "0.7.0-beta.0"
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|
|
74
74
|
"test": "vitest run",
|