index.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. var re = Object.defineProperty;
  2. var ne = (n, e, t) => e in n ? re(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
  3. var h = (n, e, t) => ne(n, typeof e != "symbol" ? e + "" : e, t);
  4. import { Disposable as $, CommandType as O, useDependency as se, useObservable as ie, UniverInstanceType as x, Inject as p, ICommandService as oe, RANGE_TYPE as v, Rectangle as T, IContextService as ae, ColorKit as ce, Plugin as le, merge as he, Injector as ge, IConfigService as ue } from "@univerjs/core";
  5. import { Shape as de, Rect as fe, IRenderManagerService as _e } from "@univerjs/engine-render";
  6. import { MenuItemType as Se, getMenuHiddenObservable as pe, ContextMenuPosition as ve, ContextMenuGroup as me, ComponentManager as Ce, IMenuManagerService as Re } from "@univerjs/ui";
  7. import { BehaviorSubject as N, combineLatest as be, startWith as He, tap as Oe, merge as j, map as V } from "rxjs";
  8. import Ie, { forwardRef as Z, useRef as ye, createElement as B, useCallback as Ee } from "react";
  9. import { SheetsSelectionsService as we, REF_SELECTIONS_ENABLED as xe, IRefSelectionsService as $e } from "@univerjs/sheets";
  10. import { SheetSkeletonManagerService as Me, getCoordByCell as L } from "@univerjs/sheets-ui";
  11. const Pe = "sheets-crosshair-highlight.config", A = {};
  12. var g = function() {
  13. return g = Object.assign || function(n) {
  14. for (var e, t = 1, r = arguments.length; t < r; t++) {
  15. e = arguments[t];
  16. for (var s in e) Object.prototype.hasOwnProperty.call(e, s) && (n[s] = e[s]);
  17. }
  18. return n;
  19. }, g.apply(this, arguments);
  20. }, Te = function(n, e) {
  21. var t = {};
  22. for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && e.indexOf(r) < 0 && (t[r] = n[r]);
  23. if (n != null && typeof Object.getOwnPropertySymbols == "function")
  24. for (var s = 0, r = Object.getOwnPropertySymbols(n); s < r.length; s++)
  25. e.indexOf(r[s]) < 0 && Object.prototype.propertyIsEnumerable.call(n, r[s]) && (t[r[s]] = n[r[s]]);
  26. return t;
  27. }, F = Z(function(n, e) {
  28. var t = n.icon, r = n.id, s = n.className, i = n.extend, o = Te(n, ["icon", "id", "className", "extend"]), a = "univerjs-icon univerjs-icon-".concat(r, " ").concat(s || "").trim(), c = ye("_".concat(Ve()));
  29. return W(t, "".concat(r), { defIds: t.defIds, idSuffix: c.current }, g({ ref: e, className: a }, o), i);
  30. });
  31. function W(n, e, t, r, s) {
  32. return B(n.tag, g(g({ key: e }, Ne(n, t, s)), r), (je(n, t).children || []).map(function(i, o) {
  33. return W(i, "".concat(e, "-").concat(n.tag, "-").concat(o), t, void 0, s);
  34. }));
  35. }
  36. function Ne(n, e, t) {
  37. var r = g({}, n.attrs);
  38. t != null && t.colorChannel1 && r.fill === "colorChannel1" && (r.fill = t.colorChannel1);
  39. var s = e.defIds;
  40. return !s || s.length === 0 || (n.tag === "use" && r["xlink:href"] && (r["xlink:href"] = r["xlink:href"] + e.idSuffix), Object.entries(r).forEach(function(i) {
  41. var o = i[0], a = i[1];
  42. typeof a == "string" && (r[o] = a.replace(/url\(#(.*)\)/, "url(#$1".concat(e.idSuffix, ")")));
  43. })), r;
  44. }
  45. function je(n, e) {
  46. var t, r = e.defIds;
  47. return !r || r.length === 0 ? n : n.tag === "defs" && (!((t = n.children) === null || t === void 0) && t.length) ? g(g({}, n), { children: n.children.map(function(s) {
  48. return typeof s.attrs.id == "string" && r && r.indexOf(s.attrs.id) > -1 ? g(g({}, s), { attrs: g(g({}, s.attrs), { id: s.attrs.id + e.idSuffix }) }) : s;
  49. }) }) : n;
  50. }
  51. function Ve() {
  52. return Math.random().toString(36).substring(2, 8);
  53. }
  54. F.displayName = "UniverIcon";
  55. var Le = { tag: "svg", attrs: { fill: "none", viewBox: "0 0 16 16", width: "1em", height: "1em" }, children: [{ tag: "path", attrs: { fill: "#E5E5E5", d: "M1.6499 3.65002C1.6499 2.54545 2.54533 1.65002 3.6499 1.65002H12.3499C13.4545 1.65002 14.3499 2.54545 14.3499 3.65002V12.35C14.3499 13.4546 13.4545 14.35 12.3499 14.35H3.6499C2.54533 14.35 1.6499 13.4546 1.6499 12.35V3.65002Z" } }, { tag: "path", attrs: { fill: "#fff", d: "M9.9998 1.65002H5.9998V6H1.6499V10H5.9998V14.35H9.9998V10H14.3499V6H9.9998V1.65002Z" } }, { tag: "path", attrs: { fill: "currentColor", d: "M3.6498 1.05005C2.21386 1.05005 1.0498 2.21411 1.0498 3.65005V12.35C1.0498 13.786 2.21386 14.95 3.6498 14.95H12.3498C13.7857 14.95 14.9498 13.786 14.9498 12.3501V3.65005C14.9498 2.21411 13.7857 1.05005 12.3498 1.05005H3.6498ZM5.4002 2.25005H3.6498C2.87661 2.25005 2.2498 2.87685 2.2498 3.65005V5.40002H5.4002V2.25005ZM2.2498 10.6V12.35C2.2498 13.1232 2.87661 13.75 3.6498 13.75H5.4002V10.6H2.2498ZM6.60019 13.75H9.4002V9.40002H13.7498V6.60002H9.4002V2.25005H6.60019V6.60002H2.25029V9.40002H6.60019V13.75ZM10.6002 2.25005V5.40002H13.7498V3.65005C13.7498 2.87685 13.123 2.25005 12.3498 2.25005H10.6002ZM13.7498 10.6H10.6002V13.75H12.3498C13.123 13.75 13.7498 13.1232 13.7498 12.3501V10.6Z", fillRule: "evenodd", clipRule: "evenodd" } }] }, Y = Z(function(n, e) {
  56. return B(F, Object.assign({}, n, {
  57. id: "cross-highlighting-single",
  58. ref: e,
  59. icon: Le
  60. }));
  61. });
  62. Y.displayName = "CrossHighlightingSingle";
  63. const q = [
  64. "rgba(158, 109, 227, 0.3)",
  65. "rgba(254, 75, 75, 0.3)",
  66. "rgba(255, 140, 81, 0.3)",
  67. "rgba(164, 220, 22, 0.3)",
  68. "rgba(45, 174, 255, 0.3)",
  69. "rgba(58, 96, 247, 0.3)",
  70. "rgba(242, 72, 166, 0.3)",
  71. "rgba(153, 153, 153, 0.3)",
  72. "rgba(158, 109, 227, 0.15)",
  73. "rgba(254, 75, 75, 0.15)",
  74. "rgba(255, 140, 81, 0.15)",
  75. "rgba(164, 220, 22, 0.15)",
  76. "rgba(45, 174, 255, 0.15)",
  77. "rgba(58, 96, 247, 0.15)",
  78. "rgba(242, 72, 166, 0.15)",
  79. "rgba(153, 153, 153, 0.15)"
  80. ];
  81. class S extends $ {
  82. constructor() {
  83. super(...arguments);
  84. h(this, "_enabled$", new N(!1));
  85. h(this, "enabled$", this._enabled$.asObservable());
  86. h(this, "_color$", new N(q[0]));
  87. h(this, "color$", this._color$.asObservable());
  88. }
  89. get enabled() {
  90. return this._enabled$.getValue();
  91. }
  92. get color() {
  93. return this._color$.getValue();
  94. }
  95. dispose() {
  96. this._enabled$.complete();
  97. }
  98. setEnabled(t) {
  99. this._enabled$.next(t);
  100. }
  101. setColor(t) {
  102. this._color$.next(t);
  103. }
  104. }
  105. const M = {
  106. id: "sheet.operation.toggle-crosshair-highlight",
  107. type: O.OPERATION,
  108. handler(n) {
  109. const e = n.get(S), t = e.enabled;
  110. return e.setEnabled(!t), !0;
  111. }
  112. }, J = {
  113. id: "sheet.operation.set-crosshair-highlight-color",
  114. type: O.OPERATION,
  115. handler(n, { value: e }) {
  116. const t = n.get(S);
  117. return t.enabled || t.setEnabled(!0), t.setColor(e), !0;
  118. }
  119. }, Ae = {
  120. id: "sheet.operation.enable-crosshair-highlight",
  121. type: O.OPERATION,
  122. handler(n) {
  123. const e = n.get(S);
  124. return e.enabled ? !1 : (e.setEnabled(!0), !0);
  125. }
  126. }, Ge = {
  127. id: "sheet.operation.disable-crosshair-highlight",
  128. type: O.OPERATION,
  129. handler(n) {
  130. const e = n.get(S);
  131. return e.enabled ? (e.setEnabled(!1), !0) : !1;
  132. }
  133. };
  134. var I = { exports: {} }, m = {};
  135. /**
  136. * @license React
  137. * react-jsx-runtime.production.min.js
  138. *
  139. * Copyright (c) Facebook, Inc. and its affiliates.
  140. *
  141. * This source code is licensed under the MIT license found in the
  142. * LICENSE file in the root directory of this source tree.
  143. */
  144. var G;
  145. function Ue() {
  146. if (G) return m;
  147. G = 1;
  148. var n = Ie, e = Symbol.for("react.element"), t = Symbol.for("react.fragment"), r = Object.prototype.hasOwnProperty, s = n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, i = { key: !0, ref: !0, __self: !0, __source: !0 };
  149. function o(a, c, f) {
  150. var l, d = {}, _ = null, u = null;
  151. f !== void 0 && (_ = "" + f), c.key !== void 0 && (_ = "" + c.key), c.ref !== void 0 && (u = c.ref);
  152. for (l in c) r.call(c, l) && !i.hasOwnProperty(l) && (d[l] = c[l]);
  153. if (a && a.defaultProps) for (l in c = a.defaultProps, c) d[l] === void 0 && (d[l] = c[l]);
  154. return { $$typeof: e, type: a, key: _, ref: u, props: d, _owner: s.current };
  155. }
  156. return m.Fragment = t, m.jsx = o, m.jsxs = o, m;
  157. }
  158. var U;
  159. function De() {
  160. return U || (U = 1, I.exports = Ue()), I.exports;
  161. }
  162. var D = De();
  163. function X(n) {
  164. var e, t, r = "";
  165. if (typeof n == "string" || typeof n == "number") r += n;
  166. else if (typeof n == "object") if (Array.isArray(n)) {
  167. var s = n.length;
  168. for (e = 0; e < s; e++) n[e] && (t = X(n[e])) && (r && (r += " "), r += t);
  169. } else for (t in n) n[t] && (r && (r += " "), r += t);
  170. return r;
  171. }
  172. function ke() {
  173. for (var n, e, t = 0, r = "", s = arguments.length; t < s; t++) (n = arguments[t]) && (e = X(n)) && (r && (r += " "), r += e);
  174. return r;
  175. }
  176. const Ze = "univer-crosshair-highlight-overlay", Be = "univer-crosshair-highlight-item", Fe = "univer-crosshair-highlight-item-selected", y = {
  177. crosshairHighlightOverlay: Ze,
  178. crosshairHighlightItem: Be,
  179. crosshairHighlightItemSelected: Fe
  180. };
  181. function We(n) {
  182. const { onChange: e } = n, t = se(S), r = ie(t.color$), s = Ee((i) => {
  183. e == null || e(i);
  184. }, [e]);
  185. return /* @__PURE__ */ D.jsx("div", { className: y.crosshairHighlightOverlay, children: q.map((i) => /* @__PURE__ */ D.jsx(
  186. "div",
  187. {
  188. className: ke(y.crosshairHighlightItem, {
  189. [y.crosshairHighlightItemSelected]: i === r
  190. }),
  191. style: { backgroundColor: i },
  192. onClick: () => s(i)
  193. },
  194. i
  195. )) });
  196. }
  197. const K = "CROSSHAIR_HIGHLIGHT_OVERLAY_COMPONENT";
  198. function Ye(n) {
  199. const e = n.get(S);
  200. return {
  201. id: M.id,
  202. tooltip: "crosshair.button.tooltip",
  203. type: Se.BUTTON_SELECTOR,
  204. icon: "CrossHighlightingSingle",
  205. selections: [
  206. {
  207. label: {
  208. name: K,
  209. hoverable: !1
  210. }
  211. }
  212. ],
  213. selectionsCommandId: J.id,
  214. activated$: e.enabled$,
  215. hidden$: pe(n, x.UNIVER_SHEET)
  216. };
  217. }
  218. const qe = {
  219. [ve.FOOTER_MENU]: {
  220. [me.OTHERS]: {
  221. [M.id]: {
  222. order: 0,
  223. menuItemFactory: Ye
  224. }
  225. }
  226. }
  227. };
  228. var Je = Object.defineProperty, Xe = Object.getOwnPropertyDescriptor, Ke = (n, e, t, r) => {
  229. for (var s = r > 1 ? void 0 : r ? Xe(e, t) : e, i = n.length - 1, o; i >= 0; i--)
  230. (o = n[i]) && (s = (r ? o(e, t, s) : o(s)) || s);
  231. return r && s && Je(e, t, s), s;
  232. }, E = (n, e) => (t, r) => e(t, r, n);
  233. let b = class extends $ {
  234. constructor(n, e, t) {
  235. super(), this._componentMgr = n, this._menuManagerService = e, this._cmdSrv = t, this._initCommands(), this._initMenus(), this._initComponents();
  236. }
  237. _initCommands() {
  238. [
  239. M,
  240. J,
  241. Ae,
  242. Ge
  243. ].forEach((n) => this._cmdSrv.registerCommand(n));
  244. }
  245. _initMenus() {
  246. this._menuManagerService.mergeMenu(qe);
  247. }
  248. _initComponents() {
  249. this._componentMgr.register(K, We), this._componentMgr.register("CrossHighlightingSingle", Y);
  250. }
  251. };
  252. b = Ke([
  253. E(0, p(Ce)),
  254. E(1, Re),
  255. E(2, oe)
  256. ], b);
  257. const ze = 1;
  258. class Qe {
  259. constructor() {
  260. h(this, "_selectedRanges", []);
  261. h(this, "_ranges", []);
  262. }
  263. addRange(e) {
  264. if (e.rangeType === v.COLUMN || e.rangeType === v.ROW || e.rangeType === v.ALL)
  265. return;
  266. const t = this._getIntersects(e), r = this._getSplitRanges(e, t);
  267. r.length > 0 && this._ranges.push(...r);
  268. }
  269. setSelectedRanges(e) {
  270. this._selectedRanges = e;
  271. }
  272. _getSplitRanges(e, t) {
  273. let r = [e];
  274. for (const s of t.concat(this._selectedRanges)) {
  275. const i = [];
  276. for (const o of r) {
  277. const a = T.subtract(o, s);
  278. a && a.length > 0 && i.push(...a);
  279. }
  280. r = i;
  281. }
  282. return r.filter((s) => s.startRow <= s.endRow && s.startColumn <= s.endColumn);
  283. }
  284. _getIntersects(e) {
  285. const t = [];
  286. for (const r of this._ranges) {
  287. const s = T.getIntersects(r, e);
  288. s && t.push(s);
  289. }
  290. return t;
  291. }
  292. getRanges() {
  293. return this._ranges;
  294. }
  295. reset() {
  296. this._ranges = [], this._selectedRanges = [];
  297. }
  298. }
  299. class et extends de {
  300. constructor(t, r) {
  301. super(t, r);
  302. // protected _showHighLight = false;
  303. h(this, "_color");
  304. r && this.setShapeProps(r);
  305. }
  306. setShapeProps(t) {
  307. typeof t.color < "u" && (this._color = t.color), this.transformByState({
  308. width: t.width,
  309. height: t.height
  310. });
  311. }
  312. _draw(t) {
  313. const r = `rgba(${this._color.r}, ${this._color.g}, ${this._color.b}, ${this._color.a})`;
  314. fe.drawWith(t, {
  315. width: this.width,
  316. height: this.height,
  317. fill: r,
  318. stroke: void 0,
  319. strokeWidth: 0,
  320. evented: !1
  321. });
  322. }
  323. }
  324. var tt = Object.defineProperty, rt = Object.getOwnPropertyDescriptor, nt = (n, e, t, r) => {
  325. for (var s = r > 1 ? void 0 : r ? rt(e, t) : e, i = n.length - 1, o; i >= 0; i--)
  326. (o = n[i]) && (s = (r ? o(e, t, s) : o(s)) || s);
  327. return r && s && tt(e, t, s), s;
  328. }, C = (n, e) => (t, r) => e(t, r, n);
  329. let H = class extends $ {
  330. constructor(e, t, r, s, i, o) {
  331. super();
  332. h(this, "_shapes", []);
  333. h(this, "_rangeCollection", new Qe());
  334. h(this, "_color", "rgba(255,0,0,0.5)");
  335. this._context = e, this._sheetSkeletonManagerService = t, this._sheetsSelectionsService = r, this._sheetsCrosshairHighlightService = s, this._contextService = i, this._refSelectionsService = o, this._initRenderListener();
  336. }
  337. _transformSelection(e, t) {
  338. if (!e)
  339. return;
  340. const r = t.getRowCount(), s = t.getColumnCount(), i = [];
  341. for (const o of e) {
  342. const { startRow: a, endRow: c, startColumn: f, endColumn: l } = o.range;
  343. c - a + 1 === r || l - f + 1 === s || i.push(o.range);
  344. }
  345. this._rangeCollection.setSelectedRanges(i);
  346. for (const o of i)
  347. this.addSelection(o, t);
  348. }
  349. _initRenderListener() {
  350. const e = this._context.unit;
  351. this.disposeWithMe(be([
  352. this._contextService.subscribeContextValue$(xe).pipe(He(!1)),
  353. this._sheetSkeletonManagerService.currentSkeleton$,
  354. this._sheetsCrosshairHighlightService.enabled$,
  355. this._sheetsCrosshairHighlightService.color$.pipe(Oe((t) => this._color = t)),
  356. j(
  357. this._sheetsSelectionsService.selectionMoveStart$,
  358. this._sheetsSelectionsService.selectionMoving$,
  359. this._sheetsSelectionsService.selectionMoveEnd$,
  360. this._sheetsSelectionsService.selectionSet$,
  361. e.activeSheet$.pipe(V(() => this._sheetsSelectionsService.getCurrentSelections()))
  362. ),
  363. j(
  364. this._refSelectionsService.selectionMoveStart$,
  365. this._refSelectionsService.selectionMoving$,
  366. this._refSelectionsService.selectionMoveEnd$,
  367. this._sheetsSelectionsService.selectionSet$,
  368. e.activeSheet$.pipe(V(() => this._refSelectionsService.getCurrentSelections()))
  369. )
  370. ]).subscribe(([t, r, s, i, o, a]) => {
  371. if (this._clear(), !s) return;
  372. const c = t ? a : o;
  373. this._rangeCollection.reset(), this._transformSelection(c, e.getActiveSheet()), this.render(this._rangeCollection.getRanges());
  374. }));
  375. }
  376. addSelection(e, t) {
  377. if (e.rangeType === v.COLUMN || e.rangeType === v.ROW || e.rangeType === v.ALL)
  378. return;
  379. const r = t.getRowCount(), s = t.getColumnCount(), { startRow: i, endRow: o, startColumn: a, endColumn: c } = e, f = {
  380. startRow: i,
  381. endRow: o,
  382. startColumn: 0,
  383. endColumn: a - 1
  384. }, l = {
  385. startRow: i,
  386. endRow: o,
  387. startColumn: c + 1,
  388. endColumn: s
  389. }, d = {
  390. startRow: 0,
  391. endRow: i - 1,
  392. startColumn: a,
  393. endColumn: c
  394. }, _ = {
  395. startRow: o + 1,
  396. endRow: r,
  397. startColumn: a,
  398. endColumn: c
  399. };
  400. for (const u of [f, l, d, _])
  401. u.startRow <= u.endRow && u.startColumn <= u.endColumn && this._rangeCollection.addRange(u);
  402. }
  403. _clear() {
  404. this._shapes.forEach((e) => {
  405. e.dispose();
  406. }), this._shapes = [];
  407. }
  408. _addShapes(e, t, r, s) {
  409. const { startRow: i, endRow: o, startColumn: a, endColumn: c } = e, f = L(i, a, r, s), l = L(o, c, r, s), { startX: d, startY: _ } = f, { endX: u, endY: z } = l, Q = u - d, ee = z - _, te = {
  410. left: d,
  411. top: _,
  412. color: new ce(this._color).toRgb(),
  413. width: Q,
  414. height: ee,
  415. zIndex: ze,
  416. evented: !1
  417. }, P = new et(`crosshair-${t}`, te);
  418. this._shapes.push(P), r.addObject(P);
  419. }
  420. render(e) {
  421. const t = this._sheetSkeletonManagerService.getCurrentSkeleton();
  422. if (!t)
  423. return;
  424. const { scene: r } = this._context;
  425. this._clear();
  426. for (let s = 0; s < e.length; s++) {
  427. const i = e[s];
  428. this._addShapes(i, s, r, t);
  429. }
  430. r.makeDirty(!0);
  431. }
  432. async dispose() {
  433. super.dispose();
  434. }
  435. };
  436. H = nt([
  437. C(1, p(Me)),
  438. C(2, p(we)),
  439. C(3, p(S)),
  440. C(4, p(ae)),
  441. C(5, $e)
  442. ], H);
  443. var st = Object.defineProperty, it = Object.getOwnPropertyDescriptor, ot = (n, e, t, r) => {
  444. for (var s = r > 1 ? void 0 : r ? it(e, t) : e, i = n.length - 1, o; i >= 0; i--)
  445. (o = n[i]) && (s = (r ? o(e, t, s) : o(s)) || s);
  446. return r && s && st(e, t, s), s;
  447. }, w = (n, e) => (t, r) => e(t, r, n), R;
  448. let k = (R = class extends le {
  449. constructor(n = A, e, t, r) {
  450. super(), this._config = n, this._injector = e, this._renderManagerService = t, this._configService = r;
  451. const { ...s } = he(
  452. {},
  453. A,
  454. this._config
  455. );
  456. this._configService.setConfig(Pe, s);
  457. }
  458. onStarting() {
  459. [
  460. [S],
  461. [b]
  462. ].forEach((n) => this._injector.add(n));
  463. }
  464. onReady() {
  465. [
  466. [H]
  467. ].forEach((n) => this._injector.add(n)), this._injector.get(b), this._renderManagerService.registerRenderModule(x.UNIVER_SHEET, [H]);
  468. }
  469. }, h(R, "pluginName", "SHEET_CROSSHAIR_HIGHLIGHT_PLUGIN"), h(R, "type", x.UNIVER_SHEET), R);
  470. k = ot([
  471. w(1, p(ge)),
  472. w(2, _e),
  473. w(3, ue)
  474. ], k);
  475. export {
  476. q as CROSSHAIR_HIGHLIGHT_COLORS,
  477. Ge as DisableCrosshairHighlightOperation,
  478. Ae as EnableCrosshairHighlightOperation,
  479. J as SetCrosshairHighlightColorOperation,
  480. S as SheetsCrosshairHighlightService,
  481. M as ToggleCrosshairHighlightOperation,
  482. k as UniverSheetsCrosshairHighlightPlugin
  483. };