@univerjs/sheets-ui
Version:
UniverSheet normal ui-plugin-sheets
1,190 lines (1,189 loc) • 40 kB
JavaScript
import { ICommandService as _, CanceledError as E, IUniverInstanceService as W, RichTextValue as O, DOCS_NORMAL_EDITOR_UNIT_ID_KEY as T, LifecycleService as ie, DisposableCollection as A, LifecycleStages as z, UniverInstanceType as oe, ILogService as U, toDisposable as m, awaitTime as se, InterceptorEffectEnum as ae, generateRandomId as ce } from "@univerjs/core";
import { FUniver as q, FEventName as de } from "@univerjs/core/facade";
import { RichTextEditingMutation as he } from "@univerjs/docs";
import { IRenderManagerService as v, DeviceInputEventType as L, SHEET_VIEWPORT_KEY as le, sheetContentViewportKeys as ge } from "@univerjs/engine-render";
import { SheetsSelectionsService as ue, COMMAND_LISTENER_SKELETON_CHANGE as ve, getSkeletonChangedEffectedRange as Se, SetWorksheetRowIsAutoHeightCommand as me, InterceptCellContentPriority as Ce, SheetInterceptorService as we, INTERCEPTOR_POINT as be } from "@univerjs/sheets";
import { SetCellEditVisibleOperation as f, IEditorBridgeService as R, SetZoomRatioCommand as $, HoverManagerService as p, DragManagerService as M, SheetScrollManagerService as x, SheetPasteShortKeyCommand as B, ISheetClipboardService as Q, SheetSkeletonManagerService as I, SHEET_VIEW_KEY as w, ISheetSelectionRenderService as y, SheetsScrollRenderController as Ee, SetWorksheetColAutoWidthCommand as pe, SetColumnHeaderHeightCommand as fe, SetRowHeaderWidthCommand as ke, SheetCanvasPopManagerService as N, CellAlertManagerService as Ie, IMarkSelectionService as _e, ISheetCellDropdownManagerService as Pe } from "@univerjs/sheets-ui";
import { FSheetHooks as j, FWorkbook as ee, FWorksheet as te, FPermission as re, FRange as ne } from "@univerjs/sheets/facade";
import { KeyCode as D, CutCommand as F, CopyCommand as V, PasteCommand as Z, IClipboardInterfaceService as Re, PLAIN_TEXT_CLIPBOARD_MIME_TYPE as K, HTML_CLIPBOARD_MIME_TYPE as Y, supportClipboardAPI as X, ISidebarService as He, IDialogService as Me, ComponentManager as J } from "@univerjs/ui";
import { filter as u, combineLatest as ye } from "rxjs";
class Ue extends q {
// eslint-disable-next-line max-lines-per-function
_initSheetUIEvent(e) {
const r = e.get(_);
this.registerEventHandler(
this.Event.BeforeSheetEditStart,
() => r.beforeCommandExecuted((t) => {
if (t.id !== f.id) return;
const i = this.getActiveSheet();
if (!i) return;
const { workbook: o, worksheet: s } = i, d = e.get(R), l = t.params, { visible: h, keycode: g, eventType: a } = l, n = d.getEditLocation();
if (h) {
const c = {
row: n.row,
column: n.column,
eventType: a,
keycode: g,
workbook: o,
worksheet: s,
isZenEditor: !1
};
if (this.fireEvent(this.Event.BeforeSheetEditStart, c), c.cancel)
throw new E();
}
})
), this.registerEventHandler(
this.Event.BeforeSheetEditEnd,
() => r.beforeCommandExecuted((t) => {
if (t.id !== f.id) return;
const i = this.getActiveSheet();
if (!i) return;
const { workbook: o, worksheet: s } = i, d = e.get(R), l = e.get(W), h = t.params, { visible: g, keycode: a, eventType: n } = h, c = d.getEditLocation();
if (!g) {
const P = {
row: c.row,
column: c.column,
eventType: n,
keycode: a,
workbook: o,
worksheet: s,
isZenEditor: !1,
value: O.create(l.getUnit(T).getSnapshot()),
isConfirm: a !== D.ESC
};
if (this.fireEvent(this.Event.BeforeSheetEditEnd, P), P.cancel)
throw new E();
}
})
), this.registerEventHandler(
this.Event.SheetEditStarted,
() => r.onCommandExecuted((t) => {
if (t.id !== f.id) return;
const i = this.getCommandSheetTarget(t);
if (!i) return;
const { workbook: o, worksheet: s } = i, d = e.get(R), l = t.params, { visible: h, keycode: g, eventType: a } = l, n = d.getEditLocation();
if (h) {
const c = {
row: n.row,
column: n.column,
eventType: a,
keycode: g,
workbook: o,
worksheet: s,
isZenEditor: !1
};
this.fireEvent(this.Event.SheetEditStarted, c);
}
})
), this.registerEventHandler(
this.Event.SheetEditEnded,
() => r.onCommandExecuted((t) => {
if (t.id !== f.id) return;
const i = this.getCommandSheetTarget(t);
if (!i) return;
const { workbook: o, worksheet: s } = i, d = e.get(R), l = t.params, { visible: h, keycode: g, eventType: a } = l, n = d.getEditLocation();
if (!h) {
const c = {
row: n.row,
column: n.column,
eventType: a,
keycode: g,
workbook: o,
worksheet: s,
isZenEditor: !1,
isConfirm: g !== D.ESC
};
this.fireEvent(this.Event.SheetEditEnded, c);
}
})
), this.registerEventHandler(
this.Event.SheetEditChanging,
() => r.onCommandExecuted((t) => {
if (t.id !== he.id) return;
const i = this.getActiveSheet();
if (!i) return;
const { workbook: o, worksheet: s } = i, d = e.get(R), l = e.get(W), h = t.params;
if (!d.isVisible().visible) return;
const { unitId: g } = h;
if (g === T) {
const { row: a, column: n } = d.getEditLocation(), c = {
workbook: o,
worksheet: s,
row: a,
column: n,
value: O.create(l.getUnit(T).getSnapshot()),
isZenEditor: !1
};
this.fireEvent(this.Event.SheetEditChanging, c);
}
})
), this.registerEventHandler(
this.Event.BeforeSheetZoomChange,
() => r.beforeCommandExecuted((t) => {
if (t.id !== $.id) return;
const i = this.getCommandSheetTarget(t);
if (!i) return;
const { workbook: o, worksheet: s } = i, d = {
zoom: t.params.zoomRatio,
workbook: o,
worksheet: s
};
if (this.fireEvent(this.Event.BeforeSheetZoomChange, d), d.cancel)
throw new E();
})
), this.registerEventHandler(
this.Event.SheetZoomChanged,
() => r.onCommandExecuted((t) => {
if (t.id !== $.id) return;
const i = this.getCommandSheetTarget(t);
if (!i) return;
const { workbook: o, worksheet: s } = i;
this.fireEvent(this.Event.SheetZoomChanged, {
zoom: s.getZoom(),
workbook: o,
worksheet: s
});
})
);
}
// eslint-disable-next-line max-lines-per-function
_initObserverListener(e) {
const r = e.get(v), t = e.get(ie), i = new A();
this.disposeWithMe(t.lifecycle$.subscribe((l) => {
if (l !== z.Rendered) return;
i.dispose();
const h = e.get(p), g = e.get(M);
h && (this.registerEventHandler(
this.Event.CellClicked,
() => {
var a;
return (a = h.currentClickedCell$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.location.unitId, n.location.subUnitId);
c && this.fireEvent(this.Event.CellClicked, {
...c,
...n,
row: n.location.row,
column: n.location.col
});
});
}
), this.registerEventHandler(
this.Event.CellHover,
() => {
var a;
return (a = h.currentRichText$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.CellHover, {
...c,
...n,
row: n.row,
column: n.col
});
});
}
), this.registerEventHandler(
this.Event.CellPointerDown,
() => {
var a;
return (a = h.currentPointerDownCell$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.CellPointerDown, {
...c,
...n,
row: n.row,
column: n.col
});
});
}
), this.registerEventHandler(
this.Event.CellPointerUp,
() => {
var a;
return (a = h.currentPointerUpCell$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.CellPointerUp, {
...c,
...n,
row: n.row,
column: n.col
});
});
}
), this.registerEventHandler(
this.Event.CellPointerMove,
() => {
var a;
return (a = h.currentCellPosWithEvent$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.CellPointerMove, {
...c,
...n,
row: n.row,
column: n.col
});
});
}
), this.registerEventHandler(
this.Event.DragOver,
() => {
var a;
return (a = g.currentCell$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.location.unitId, n.location.subUnitId);
c && this.fireEvent(this.Event.DragOver, {
...c,
...n,
row: n.location.row,
column: n.location.col
});
});
}
), this.registerEventHandler(
this.Event.Drop,
() => {
var a;
return (a = g.endCell$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.location.unitId, n.location.subUnitId);
c && this.fireEvent(this.Event.Drop, {
...c,
...n,
row: n.location.row,
column: n.location.col
});
});
}
), this.registerEventHandler(
this.Event.RowHeaderClick,
() => {
var a;
return (a = h.currentRowHeaderClick$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.RowHeaderClick, {
...c,
row: n.index
});
});
}
), this.registerEventHandler(
this.Event.RowHeaderPointerDown,
() => {
var a;
return (a = h.currentRowHeaderPointerDown$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.RowHeaderPointerDown, {
...c,
row: n.index
});
});
}
), this.registerEventHandler(
this.Event.RowHeaderPointerUp,
() => {
var a;
return (a = h.currentRowHeaderPointerUp$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.RowHeaderPointerUp, {
...c,
row: n.index
});
});
}
), this.registerEventHandler(
this.Event.RowHeaderHover,
() => {
var a;
return (a = h.currentHoveredRowHeader$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.RowHeaderHover, {
...c,
row: n.index
});
});
}
), this.registerEventHandler(
this.Event.ColumnHeaderClick,
() => {
var a;
return (a = h.currentColHeaderClick$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.ColumnHeaderClick, {
...c,
column: n.index
});
});
}
), this.registerEventHandler(
this.Event.ColumnHeaderPointerDown,
() => {
var a;
return (a = h.currentColHeaderPointerDown$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.ColumnHeaderPointerDown, {
...c,
column: n.index
});
});
}
), this.registerEventHandler(
this.Event.ColumnHeaderPointerUp,
() => {
var a;
return (a = h.currentColHeaderPointerUp$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.ColumnHeaderPointerUp, {
...c,
column: n.index
});
});
}
), this.registerEventHandler(
this.Event.ColumnHeaderHover,
() => {
var a;
return (a = h.currentHoveredColHeader$) == null ? void 0 : a.pipe(u((n) => !!n)).subscribe((n) => {
const c = this.getSheetTarget(n.unitId, n.subUnitId);
c && this.fireEvent(this.Event.ColumnHeaderHover, {
...c,
column: n.index
});
});
}
));
})), this.disposeWithMe(i);
const o = /* @__PURE__ */ new Map();
let s;
const d = ye([
r.created$,
t.lifecycle$
]);
this.disposeWithMe(d.subscribe(([l, h]) => {
var P;
if (l.type === oe.UNIVER_SHEET && (s = l), h <= z.Rendered || !s) return;
const g = new A(), a = this.getWorkbook(s.unitId);
if (!a) return;
o.get(s.unitId) && ((P = o.get(s.unitId)) == null || P.dispose()), o.set(s.unitId, g);
const n = s.with(x), c = s.with(ue);
g.add(this.registerEventHandler(
this.Event.Scroll,
() => n.validViewportScrollInfo$.subscribe((S) => {
S && this.fireEvent(this.Event.Scroll, {
workbook: a,
worksheet: a.getActiveSheet(),
...S
});
})
)), g.add(this.registerEventHandler(
this.Event.SelectionMoveStart,
() => c.selectionMoveStart$.subscribe((S) => {
var C;
this.fireEvent(this.Event.SelectionMoveStart, {
workbook: a,
worksheet: a.getActiveSheet(),
selections: (C = S == null ? void 0 : S.map((k) => k.range)) != null ? C : []
});
})
)), g.add(this.registerEventHandler(
this.Event.SelectionMoving,
() => c.selectionMoving$.subscribe((S) => {
var C;
this.fireEvent(this.Event.SelectionMoving, {
workbook: a,
worksheet: a.getActiveSheet(),
selections: (C = S == null ? void 0 : S.map((k) => k.range)) != null ? C : []
});
})
)), g.add(this.registerEventHandler(
this.Event.SelectionMoveEnd,
() => c.selectionMoveEnd$.subscribe((S) => {
var C;
this.fireEvent(this.Event.SelectionMoveEnd, {
workbook: a,
worksheet: a.getActiveSheet(),
selections: (C = S == null ? void 0 : S.map((k) => k.range)) != null ? C : []
});
})
)), g.add(this.registerEventHandler(
this.Event.SelectionChanged,
() => c.selectionChanged$.subscribe((S) => {
var C;
this.fireEvent(this.Event.SelectionChanged, {
workbook: a,
worksheet: a.getActiveSheet(),
selections: (C = S == null ? void 0 : S.map((k) => k.range)) != null ? C : []
});
})
)), s = null, this.disposeWithMe(g);
})), this.disposeWithMe(r.disposed$.subscribe((l) => {
var h;
(h = o.get(l)) == null || h.dispose(), o.delete(l);
})), this.disposeWithMe(() => {
o.forEach((l) => {
l.dispose();
});
});
}
/**
* @ignore
*/
_initialize(e) {
this._initSheetUIEvent(e), this._initObserverListener(e);
const r = e.get(_);
this.registerEventHandler(
this.Event.BeforeClipboardChange,
() => r.beforeCommandExecuted((t) => {
switch (t.id) {
case V.id:
case F.id:
this._beforeClipboardChange();
break;
}
})
), this.registerEventHandler(
this.Event.ClipboardChanged,
() => r.onCommandExecuted((t) => {
switch (t.id) {
case V.id:
case F.id:
this._clipboardChanged();
break;
}
})
), this.registerEventHandler(
this.Event.BeforeClipboardPaste,
() => r.beforeCommandExecuted((t) => {
switch (t.id) {
case B.id:
this._beforeClipboardPaste(t.params);
break;
case Z.id:
this._beforeClipboardPasteAsync();
break;
}
})
), this.registerEventHandler(
this.Event.ClipboardPasted,
() => r.onCommandExecuted((t) => {
switch (t.id) {
case B.id:
this._clipboardPaste(t.params);
break;
case Z.id:
this._clipboardPasteAsync();
break;
}
})
), this.registerEventHandler(
this.Event.SheetSkeletonChanged,
() => r.onCommandExecuted((t) => {
if (ve.indexOf(t.id) > -1) {
const i = this.getActiveSheet();
if (!i) return;
const o = Se(t, i.worksheet.getMaxColumns()).map((s) => {
var d, l;
return (l = (d = this.getWorkbook(s.unitId)) == null ? void 0 : d.getSheetBySheetId(s.subUnitId)) == null ? void 0 : l.getRange(s.range);
}).filter(Boolean);
if (!o.length) return;
this.fireEvent(this.Event.SheetSkeletonChanged, {
workbook: i.workbook,
worksheet: i.worksheet,
payload: t,
skeleton: i.worksheet.getSkeleton(),
effectedRanges: o
});
}
})
);
}
_generateClipboardCopyParam() {
const e = this.getActiveWorkbook(), r = e == null ? void 0 : e.getActiveSheet(), t = e == null ? void 0 : e.getActiveRange();
if (!e || !r || !t)
return;
const o = this._injector.get(Q).generateCopyContent(e.getId(), r.getSheetId(), t.getRange());
if (!o)
return;
const { html: s, plain: d } = o;
return {
workbook: e,
worksheet: r,
text: d,
html: s,
fromSheet: r,
fromRange: t
};
}
_beforeClipboardChange() {
const e = this._generateClipboardCopyParam();
if (e && (this.fireEvent(this.Event.BeforeClipboardChange, e), e.cancel))
throw new E();
}
_clipboardChanged() {
const e = this._generateClipboardCopyParam();
e && this.fireEvent(this.Event.ClipboardChanged, e);
}
_generateClipboardPasteParam(e) {
if (!e)
return;
const { htmlContent: r, textContent: t } = e, i = this.getActiveWorkbook(), o = i == null ? void 0 : i.getActiveSheet();
return !i || !o ? void 0 : {
workbook: i,
worksheet: o,
text: t,
html: r
};
}
async _generateClipboardPasteParamAsync() {
const e = this.getActiveWorkbook(), r = e == null ? void 0 : e.getActiveSheet();
if (!e || !r)
return;
const o = (await this._injector.get(Re).read())[0];
let s;
if (o) {
const d = o.types, l = d.indexOf(K) !== -1 ? await o.getType(K).then((g) => g && g.text()) : "", h = d.indexOf(Y) !== -1 ? await o.getType(Y).then((g) => g && g.text()) : "";
s = {
workbook: e,
worksheet: r,
text: l,
html: h
};
}
return s;
}
_beforeClipboardPaste(e) {
const r = this._generateClipboardPasteParam(e);
if (r && (this.fireEvent(this.Event.BeforeClipboardPaste, r), r.cancel))
throw new E();
}
_clipboardPaste(e) {
const r = this._generateClipboardPasteParam(e);
if (r && (this.fireEvent(this.Event.ClipboardPasted, r), r.cancel))
throw new E();
}
async _beforeClipboardPasteAsync() {
if (!X()) {
this._injector.get(U).warn("[Facade]: The navigator object only supports the browser environment");
return;
}
const e = await this._generateClipboardPasteParamAsync();
if (e && (this.fireEvent(this.Event.BeforeClipboardPaste, e), e.cancel))
throw new E();
}
async _clipboardPasteAsync() {
if (!X()) {
this._injector.get(U).warn("[Facade]: The navigator object only supports the browser environment");
return;
}
const e = await this._generateClipboardPasteParamAsync();
if (e && (this.fireEvent(this.Event.ClipboardPasted, e), e.cancel))
throw new E();
}
customizeColumnHeader(e) {
var h, g;
const r = this.getActiveWorkbook();
if (!r) {
console.error("WorkBook not exist");
return;
}
const t = r == null ? void 0 : r.getId(), i = this._injector.get(v), o = r.getActiveSheet(), s = o.getSheetId(), d = i.getRenderById(t);
d && ((h = e.headerStyle) != null && h.size) && (d.with(I).setColumnHeaderSize(d, s, (g = e.headerStyle) == null ? void 0 : g.size), o == null || o.refreshCanvas()), this._getSheetRenderComponent(t, w.COLUMN).setCustomHeader(e), o == null || o.refreshCanvas();
}
customizeRowHeader(e) {
const r = this.getActiveWorkbook();
if (!r) {
console.error("WorkBook not exist");
return;
}
const t = r == null ? void 0 : r.getId();
this._getSheetRenderComponent(t, w.ROW).setCustomHeader(e);
}
registerSheetRowHeaderExtension(e, ...r) {
const t = this._getSheetRenderComponent(e, w.ROW), i = t.register(...r);
return m(() => {
i.dispose(), t.makeDirty(!0);
});
}
registerSheetColumnHeaderExtension(e, ...r) {
const t = this._getSheetRenderComponent(e, w.COLUMN), i = t.register(...r);
return m(() => {
i.dispose(), t.makeDirty(!0);
});
}
registerSheetMainExtension(e, ...r) {
const t = this._getSheetRenderComponent(e, w.MAIN), i = t.register(...r);
return m(() => {
i.dispose(), t.makeDirty(!0);
});
}
/**
* Get sheet render component from render by unitId and view key.
* @private
* @param {string} unitId The unit id of the spreadsheet.
* @param {SHEET_VIEW_KEY} viewKey The view key of the spreadsheet.
* @returns {Nullable<RenderComponentType>} The render component.
*/
_getSheetRenderComponent(e, r) {
const i = this._injector.get(v).getRenderById(e);
if (!i)
throw new Error(`Render Unit with unitId ${e} not found`);
const { components: o } = i, s = o.get(r);
if (!s)
throw new Error("Render component not found");
return s;
}
/**
* Get sheet hooks.
* @returns {FSheetHooks} FSheetHooks instance
*/
getSheetHooks() {
return this._injector.createInstance(j);
}
pasteIntoSheet(e, r, t) {
return this._commandService.executeCommand(B.id, { htmlContent: e, textContent: r, files: t });
}
}
q.extend(Ue);
class xe extends ee {
openSiderbar(e) {
return this._logDeprecation("openSiderbar"), this._injector.get(He).open(e);
}
openDialog(e) {
this._logDeprecation("openDialog");
const t = this._injector.get(Me).open({
...e,
onClose: () => {
t.dispose();
}
});
return t;
}
customizeColumnHeader(e) {
const r = this._workbook.getUnitId();
this._getSheetRenderComponent(r, w.COLUMN).setCustomHeader(e);
}
customizeRowHeader(e) {
const r = this._workbook.getUnitId();
this._getSheetRenderComponent(r, w.ROW).setCustomHeader(e);
}
/**
* Get sheet render component from render by unitId and view key.
* @private
* @param {string} unitId The unit id of the spreadsheet.
* @param {SHEET_VIEW_KEY} viewKey The view key of the spreadsheet.
* @returns {Nullable<RenderComponentType>} The render component.
*/
_getSheetRenderComponent(e, r) {
const i = this._injector.get(v).getRenderById(e);
if (!i)
throw new Error(`Render Unit with unitId ${e} not found`);
const { components: o } = i, s = o.get(r);
if (!s)
throw new Error("Render component not found");
return s;
}
_logDeprecation(e) {
this._injector.get(U).warn("[FWorkbook]", `${e} is deprecated. Please use the function of the same name on "FUniver".`);
}
generateCellParams(e) {
const r = this.getActiveSheet();
return {
row: e.row,
column: e.col,
workbook: this,
worksheet: r
};
}
onCellClick(e) {
const r = this._injector.get(p);
return m(
r.currentClickedCell$.pipe(u((t) => !!t)).subscribe((t) => {
e(t);
})
);
}
onCellHover(e) {
const r = this._injector.get(p);
return m(
r.currentRichText$.pipe(u((t) => !!t)).subscribe(e)
);
}
onCellPointerDown(e) {
const r = this._injector.get(p);
return m(
r.currentPointerDownCell$.subscribe(e)
);
}
onCellPointerUp(e) {
const r = this._injector.get(p);
return m(
r.currentPointerUpCell$.subscribe(e)
);
}
onCellPointerMove(e) {
const r = this._injector.get(p);
return m(
r.currentCellPosWithEvent$.pipe(u((t) => !!t)).subscribe((t) => {
e(t, t.event);
})
);
}
onDragOver(e) {
const r = this._injector.get(M);
return m(
r.currentCell$.pipe(u((t) => !!t)).subscribe((t) => {
e(t);
})
);
}
onDrop(e) {
const r = this._injector.get(M);
return m(
r.endCell$.pipe(u((t) => !!t)).subscribe((t) => {
e(t);
})
);
}
startEditing() {
return this._injector.get(_).syncExecuteCommand(f.id, {
eventType: L.Dblclick,
unitId: this._workbook.getUnitId(),
visible: !0
});
}
async endEditing(e) {
return this._injector.get(_).syncExecuteCommand(f.id, {
eventType: L.Keyboard,
keycode: e ? D.ENTER : D.ESC,
visible: !1,
unitId: this._workbook.getUnitId()
}), await se(0), !0;
}
endEditingAsync(e = !0) {
return this.endEditing(e);
}
abortEditingAsync() {
return this.endEditingAsync(!1);
}
/**
* Get scroll state of specified sheet.
* @param {string} sheetId - sheet id
* @returns {IScrollState} scroll state
* @example
* ``` ts
* univerAPI.getActiveWorkbook().getScrollStateBySheetId($sheetId)
* ```
*/
getScrollStateBySheetId(e) {
const r = this._workbook.getUnitId(), i = this._injector.get(v).getRenderById(r);
return i ? i.with(x).getScrollStateByParam({ unitId: r, sheetId: e }) : null;
}
disableSelection() {
const e = this._workbook.getUnitId(), t = this._injector.get(v).getRenderById(e);
return t && t.with(y).disableSelection(), this;
}
enableSelection() {
const e = this._workbook.getUnitId(), t = this._injector.get(v).getRenderById(e);
return t && t.with(y).enableSelection(), this;
}
transparentSelection() {
const e = this._workbook.getUnitId(), t = this._injector.get(v).getRenderById(e);
return t && t.with(y).transparentSelection(), this;
}
showSelection() {
const e = this._workbook.getUnitId(), t = this._injector.get(v).getRenderById(e);
return t && t.with(y).showSelection(), this;
}
}
ee.extend(xe);
class De extends te {
refreshCanvas() {
const e = this._injector.get(v), r = this._fWorkbook.id, t = e.getRenderById(r);
if (!t)
throw new Error(`Render Unit with unitId ${r} not found`);
t.with(I).reCalculate();
const i = t.mainComponent;
if (!i)
throw new Error("Main component not found");
return i.makeDirty(), this;
}
zoom(e) {
const r = this._injector.get(_), t = Math.min(Math.max(e, 0.1), 4);
return r.executeCommand($.id, {
unitId: this._workbook.getUnitId(),
subUnitId: this._worksheet.getSheetId(),
zoomRatio: t
}), this;
}
getZoom() {
return this._worksheet.getZoomRatio();
}
getVisibleRange() {
const e = this._workbook.getUnitId(), t = this._injector.get(v).getRenderById(e);
let i = {
startColumn: 0,
startRow: 0,
endColumn: 0,
endRow: 0
};
if (!t) return i;
const s = t.with(I).getCurrentSkeleton();
if (!s) return i;
const d = s == null ? void 0 : s.getVisibleRanges();
if (!d) return i;
i = s.getVisibleRangeByViewport(le.VIEW_MAIN);
for (const [l, h] of d)
ge.indexOf(l) !== -1 && (i.startColumn = Math.min(i.startColumn, h.startColumn), i.startRow = Math.min(i.startRow, h.startRow), i.endColumn = Math.max(i.endColumn, h.endColumn), i.endRow = Math.max(i.endRow, h.endRow));
return i;
}
scrollToCell(e, r) {
const t = this._workbook.getUnitId(), o = this._injector.get(v).getRenderById(t);
return o && (o == null ? void 0 : o.with(Ee)).scrollToCell(e, r), this;
}
getScrollState() {
const e = {
offsetX: 0,
offsetY: 0,
sheetViewStartColumn: 0,
sheetViewStartRow: 0
}, r = this._workbook.getUnitId(), t = this._worksheet.getSheetId(), o = this._injector.get(v).getRenderById(r);
return o && o.with(x).getScrollStateByParam({ unitId: r, sheetId: t }) || e;
}
onScroll(e) {
var o;
const r = this._workbook.getUnitId(), i = (o = this._injector.get(v).getRenderById(r)) == null ? void 0 : o.with(x);
if (i) {
const s = i.validViewportScrollInfo$.subscribe((d) => {
e(d);
});
return m(s);
}
return m(() => {
});
}
getSkeleton() {
var r, t;
const e = (r = this._injector.get(v).getRenderById(this._workbook.getUnitId())) == null ? void 0 : r.with(I);
return (t = e == null ? void 0 : e.getWorksheetSkeleton(this._worksheet.getSheetId())) == null ? void 0 : t.skeleton;
}
autoResizeColumn(e) {
return this.autoResizeColumns(e, 1);
}
autoResizeColumns(e, r) {
const t = this._workbook.getUnitId(), i = this._worksheet.getSheetId(), o = [
{
startColumn: e,
endColumn: e + r - 1,
startRow: 0,
endRow: this._worksheet.getRowCount() - 1
}
];
return this._commandService.syncExecuteCommand(pe.id, {
unitId: t,
subUnitId: i,
ranges: o
}), this;
}
setColumnAutoWidth(e, r) {
return this.autoResizeColumns(e, r);
}
autoResizeRows(e, r) {
const t = this._workbook.getUnitId(), i = this._worksheet.getSheetId(), o = [
{
startRow: e,
endRow: e + r - 1,
startColumn: 0,
endColumn: this._worksheet.getColumnCount() - 1
}
];
return this._commandService.syncExecuteCommand(me.id, {
unitId: t,
subUnitId: i,
ranges: o
}), this;
}
customizeColumnHeader(e) {
var d, l;
const r = this._workbook.getUnitId(), t = this._worksheet.getSheetId(), o = this._injector.get(v).getRenderById(r);
o && ((d = e.headerStyle) != null && d.size) && o.with(I).setColumnHeaderSize(o, t, (l = e.headerStyle) == null ? void 0 : l.size), this._getSheetRenderComponent(r, w.COLUMN).setCustomHeader(e, t);
}
customizeRowHeader(e) {
var d, l;
const r = this._workbook.getUnitId(), t = this._worksheet.getSheetId(), o = this._injector.get(v).getRenderById(r);
o && ((d = e.headerStyle) != null && d.size) && o.with(I).setRowHeaderSize(o, t, (l = e.headerStyle) == null ? void 0 : l.size), this._getSheetRenderComponent(r, w.ROW).setCustomHeader(e, t);
}
setColumnHeaderHeight(e) {
const r = this._workbook.getUnitId(), t = this._worksheet.getSheetId();
return this._commandService.executeCommand(fe.id, {
unitId: r,
subUnitId: t,
size: e
}), this;
}
setRowHeaderWidth(e) {
const r = this._workbook.getUnitId(), t = this._worksheet.getSheetId();
return this._commandService.executeCommand(ke.id, {
unitId: r,
subUnitId: t,
size: e
}), this;
}
/**
* Get sheet render component from render by unitId and view key.
* @private
* @param {string} unitId The unit id of the spreadsheet.
* @param {SHEET_VIEW_KEY} viewKey The view key of the spreadsheet.
* @returns {Nullable<RenderComponentType>} The render component.
*/
_getSheetRenderComponent(e, r) {
const i = this._injector.get(v).getRenderById(e);
if (!i)
throw new Error(`Render Unit with unitId ${e} not found`);
const { components: o } = i, s = o.get(r);
if (!s)
throw new Error("Render component not found");
return s;
}
}
te.extend(De);
class Te extends re {
setPermissionDialogVisible(e) {
this._permissionService.setShowComponents(e);
}
}
re.extend(Te);
class Be extends j {
onCellPointerMove(e) {
return m(this._injector.get(p).currentPosition$.subscribe(e));
}
onCellPointerOver(e) {
return m(this._injector.get(p).currentCell$.subscribe(e));
}
onCellDragOver(e) {
return m(this._injector.get(M).currentCell$.subscribe(e));
}
onCellDrop(e) {
return m(this._injector.get(M).endCell$.subscribe(e));
}
onCellRender(e, r = ae.Style, t = Ce.DATA_VALIDATION) {
return this._injector.get(we).intercept(be.CELL_CONTENT, {
effect: r,
handler: (i, o, s) => (i && !i.customRender && e && (i.customRender = [...e]), s(i)),
priority: t
});
}
onBeforeCellEdit(e) {
return this._injector.get(_).beforeCommandExecuted((r) => {
const t = r.params;
r.id === f.id && t.visible && e(t);
});
}
onAfterCellEdit(e) {
return this._injector.get(_).onCommandExecuted((r) => {
const t = r.params;
r.id === f.id && !t.visible && e(t);
});
}
}
j.extend(Be);
const H = {
CellClicked: "CellClicked",
CellPointerDown: "CellPointerDown",
CellPointerUp: "CellPointerUp",
CellPointerMove: "CellPointerMove",
CellHover: "CellHover"
};
class Ae {
get BeforeClipboardChange() {
return "BeforeClipboardChange";
}
get ClipboardChanged() {
return "ClipboardChanged";
}
get BeforeClipboardPaste() {
return "BeforeClipboardPaste";
}
get ClipboardPasted() {
return "ClipboardPasted";
}
get BeforeSheetEditStart() {
return "BeforeSheetEditStart";
}
get SheetEditStarted() {
return "SheetEditStarted";
}
get SheetEditChanging() {
return "SheetEditChanging";
}
get BeforeSheetEditEnd() {
return "BeforeSheetEditEnd";
}
get SheetEditEnded() {
return "SheetEditEnded";
}
get CellClicked() {
return H.CellClicked;
}
get CellHover() {
return H.CellHover;
}
get CellPointerDown() {
return H.CellPointerDown;
}
get CellPointerUp() {
return H.CellPointerUp;
}
get CellPointerMove() {
return H.CellPointerMove;
}
get DragOver() {
return "DragOver";
}
get Drop() {
return "Drop";
}
get Scroll() {
return "Scroll";
}
get SelectionMoveStart() {
return "SelectionMoveStart";
}
get SelectionChanged() {
return "SelectionChanged";
}
get SelectionMoving() {
return "SelectionMoving";
}
get SelectionMoveEnd() {
return "SelectionMoveEnd";
}
get RowHeaderClick() {
return "RowHeaderClick";
}
get RowHeaderPointerDown() {
return "RowHeaderPointerDown";
}
get RowHeaderPointerUp() {
return "RowHeaderPointerUp";
}
get RowHeaderHover() {
return "RowHeaderHover";
}
get ColumnHeaderClick() {
return "ColumnHeaderClick";
}
get ColumnHeaderPointerDown() {
return "ColumnHeaderPointerDown";
}
get ColumnHeaderPointerUp() {
return "ColumnHeaderPointerUp";
}
get ColumnHeaderHover() {
return "ColumnHeaderHover";
}
get SheetSkeletonChanged() {
return "SheetSkeletonChanged";
}
get BeforeSheetZoomChange() {
return "BeforeSheetZoomChange";
}
get SheetZoomChanged() {
return "SheetZoomChanged";
}
}
de.extend(Ae);
class $e extends ne {
getCell() {
var d;
const e = this._injector.get(v), r = this._injector.get(U), t = this._workbook.getUnitId(), i = this._worksheet.getSheetId(), o = e.getRenderById(t), s = (d = o == null ? void 0 : o.with(I).getSkeletonParam(i)) == null ? void 0 : d.skeleton;
if (!s)
throw r.error("[Facade]: `FRange.getCell` can only be called in current worksheet"), new Error("`FRange.getCell` can only be called in current worksheet");
return s.getCellWithCoordByIndex(this._range.startRow, this._range.startColumn);
}
getCellRect() {
const { startX: e, startY: r, endX: t, endY: i } = this.getCell(), o = { x: e, y: r, width: t - e, height: i - r, top: r, left: e, bottom: i, right: t };
return { ...o, toJSON: () => JSON.stringify(o) };
}
generateHTML() {
var t;
const r = this._injector.get(Q).generateCopyContent(
this._workbook.getUnitId(),
this._worksheet.getSheetId(),
this._range
);
return (t = r == null ? void 0 : r.html) != null ? t : "";
}
attachPopup(e) {
var s, d, l;
e.direction = (s = e.direction) != null ? s : "horizontal", e.extraProps = (d = e.extraProps) != null ? d : {}, e.offset = (l = e.offset) != null ? l : [0, 0];
const { key: r, disposableCollection: t } = G(e, this._injector.get(J)), o = this._injector.get(N).attachPopupToCell(
this._range.startRow,
this._range.startColumn,
{ ...e, componentKey: r },
this.getUnitId(),
this._worksheet.getSheetId()
);
return o ? (t.add(o), t) : (t.dispose(), null);
}
attachAlertPopup(e) {
const r = this._injector.get(Ie), t = {
workbook: this._workbook,
worksheet: this._worksheet,
row: this._range.startRow,
col: this._range.startColumn,
unitId: this.getUnitId(),
subUnitId: this._worksheet.getSheetId()
};
return r.showAlert({
...e,
location: t
}), {
dispose: () => {
r.removeAlert(e.key);
}
};
}
/**
* attachDOMPopup
* @param popup
* @returns {IDisposable} disposable
let sheet = univerAPI.getActiveWorkbook().getActiveSheet();
let range = sheet.getRange(2, 2, 3, 3);
univerAPI.getActiveWorkbook().setActiveRange(range);
let disposable = range.attachDOMPopup({
componentKey: 'univer.sheet.single-dom-popup',
extraProps: { alert: { type: 0, title: 'This is an Info', message: 'This is an info message' } },
});
*/
attachRangePopup(e) {
var s, d, l;
e.direction = (s = e.direction) != null ? s : "top-center", e.extraProps = (d = e.extraProps) != null ? d : {}, e.offset = (l = e.offset) != null ? l : [0, 0];
const { key: r, disposableCollection: t } = G(e, this._injector.get(J)), o = this._injector.get(N).attachRangePopup(
this._range,
{ ...e, componentKey: r },
this.getUnitId(),
this._worksheet.getSheetId()
);
return o ? (t.add(o), t) : (t.dispose(), null);
}
highlight(e, r) {
const t = this._injector.get(_e), i = t.addShape({ range: this._range, style: e, primary: r });
if (!i)
throw new Error("Failed to highlight current range");
return m(() => {
t.removeShape(i);
});
}
showDropdown(e) {
return this._injector.get(Pe).showDropdown(e);
}
}
ne.extend($e);
function G(b, e) {
const { componentKey: r, isVue3: t } = b;
let i;
const o = new A();
return typeof r == "string" ? i = r : (i = `External_${ce(6)}`, o.add(e.register(i, r, { framework: t ? "vue3" : "react" }))), {
key: i,
disposableCollection: o
};
}
export {
G as transformComponentKey
};