@fileverse-dev/fortune-react 1.1.65 → 1.1.66-clear-formatting-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.
@@ -113,7 +113,7 @@ var __generator = this && this.__generator || function (thisArg, body) {
113
113
  };
114
114
  }
115
115
  };
116
- import { locale, handleCopy, handlePasteByClick, deleteRowCol, insertRowCol, removeActiveImage, deleteSelectedCellText, sortSelection, createFilter, showImgChooser, handleLink, hideSelected, showSelected, getSheetIndex, api, isAllowEdit, jfrefreshgrid, newComment, getFreezeState, toggleFreeze, clearFilter } from "@fileverse-dev/fortune-core";
116
+ import { locale, handleCopy, handlePasteByClick, deleteRowCol, insertRowCol, removeActiveImage, deleteSelectedCellText, sortSelection, createFilter, showImgChooser, handleLink, hideSelected, showSelected, getSheetIndex, api, isAllowEdit, jfrefreshgrid, newComment, getFreezeState, toggleFreeze, clearFilter, clearSelectedCellFormat, clearColumnsCellsFormat, clearRowsCellsFormat } from "@fileverse-dev/fortune-core";
117
117
  import _ from "lodash";
118
118
  import React, { useContext, useRef, useCallback, useLayoutEffect } from "react";
119
119
  import regeneratorRuntime from "regenerator-runtime";
@@ -996,6 +996,28 @@ var ContextMenu = function ContextMenu() {
996
996
  className: "color-text-secondary w-4 h-4"
997
997
  })))));
998
998
  }
999
+ if (name === "clear-format") {
1000
+ return /*#__PURE__*/React.createElement(Menu, {
1001
+ key: name,
1002
+ onClick: function onClick() {
1003
+ if (context.allowEdit === false) return;
1004
+ setContext(function (draftCtx) {
1005
+ draftCtx.contextMenu = {};
1006
+ if (draftCtx.contextMenu.headerMenu === "row") {
1007
+ clearRowsCellsFormat(draftCtx);
1008
+ } else if (draftCtx.contextMenu.headerMenu === true) {
1009
+ clearColumnsCellsFormat(draftCtx);
1010
+ } else if (!draftCtx.contextMenu.headerMenu) {
1011
+ clearSelectedCellFormat(draftCtx);
1012
+ }
1013
+ });
1014
+ }
1015
+ }, /*#__PURE__*/React.createElement("div", {
1016
+ className: "context-item"
1017
+ }, /*#__PURE__*/React.createElement(LucideIcon, {
1018
+ name: "RemoveFormatting"
1019
+ }), /*#__PURE__*/React.createElement("p", null, "Clear formatting")));
1020
+ }
999
1021
  return null;
1000
1022
  }, [context, setContext, refs.globalCache, rightclick, showAlert, showDialog, drag.noMulti, info.tipRowHeightLimit, info.tipColumnWidthLimit, generalDialog.partiallyError, generalDialog.readOnlyError, generalDialog.dataNullError]);
1001
1023
  useLayoutEffect(function () {
@@ -6,7 +6,7 @@ export var useSmoothScroll = function useSmoothScroll(scrollContainerRef) {
6
6
  context = _a.context,
7
7
  refs = _a.refs,
8
8
  setContext = _a.setContext;
9
- function attachSmoothWheelScroll(scrollContainer, moveScrollBy, getPixelScale) {
9
+ function handleScroll(scrollContainer, moveScrollBy, getPixelScale) {
10
10
  if (getPixelScale === void 0) {
11
11
  getPixelScale = function getPixelScale() {
12
12
  return window.devicePixelRatio || 1;
@@ -29,7 +29,7 @@ export var useSmoothScroll = function useSmoothScroll(scrollContainerRef) {
29
29
  queuedXPixels = 0;
30
30
  queuedYPixels = 0;
31
31
  }
32
- function scheduleScrollUpdate(x, y) {
32
+ function scrollHandler(x, y) {
33
33
  queuedXPixels += x;
34
34
  queuedYPixels += y;
35
35
  if (!animationFrameId) animationFrameId = requestAnimationFrame(applyQueuedScroll);
@@ -50,47 +50,58 @@ export var useSmoothScroll = function useSmoothScroll(scrollContainerRef) {
50
50
  return;
51
51
  }
52
52
  var scaleFactor = getPixelScale();
53
- scheduleScrollUpdate(event.deltaX * scaleFactor, event.deltaY * scaleFactor);
53
+ scrollHandler(event.deltaX * scaleFactor, event.deltaY * scaleFactor);
54
54
  }
55
55
  scrollContainer.addEventListener("wheel", handleWheelEvent, {
56
56
  passive: false
57
57
  });
58
58
  return {
59
- scheduleScrollUpdate: scheduleScrollUpdate,
59
+ scrollHandler: scrollHandler,
60
60
  detach: function detach() {
61
61
  scrollContainer.removeEventListener("wheel", handleWheelEvent);
62
62
  if (animationFrameId) cancelAnimationFrame(animationFrameId);
63
63
  }
64
64
  };
65
65
  }
66
- function attachTouchPanToQueue(containerEl, scheduleScrollUpdate, getPixelScale) {
67
- var dragging = false;
68
- var lastX = 0;
69
- var lastY = 0;
70
- function onPointerDown(e) {
71
- if (e.pointerType !== "touch" && e.pointerType !== "pen") return;
72
- dragging = true;
73
- lastX = e.clientX;
74
- lastY = e.clientY;
75
- containerEl.setPointerCapture(e.pointerId);
76
- e.preventDefault();
66
+ function handleMobileScroll(containerEl, scrollHandler, getPixelScale) {
67
+ var isScrolling = false;
68
+ var gestureStartClientX = 0;
69
+ var gestureStartClientY = 0;
70
+ var lastPointerClientX = 0;
71
+ var lastPointerClientY = 0;
72
+ var PAN_DISTANCE_THRESHOLD_PX = 8;
73
+ function onPointerDown(pointerEvent) {
74
+ if (pointerEvent.pointerType !== "touch" && pointerEvent.pointerType !== "pen") return;
75
+ isScrolling = false;
76
+ gestureStartClientX = pointerEvent.clientX;
77
+ lastPointerClientX = pointerEvent.clientX;
78
+ gestureStartClientY = pointerEvent.clientY;
79
+ lastPointerClientY = pointerEvent.clientY;
80
+ containerEl.setPointerCapture(pointerEvent.pointerId);
77
81
  }
78
- function onPointerMove(e) {
79
- if (!dragging) return;
80
- var dx = e.clientX - lastX;
81
- var dy = e.clientY - lastY;
82
- lastX = e.clientX;
83
- lastY = e.clientY;
82
+ function onPointerMove(pointerEvent) {
83
+ if (pointerEvent.pointerType !== "touch" && pointerEvent.pointerType !== "pen") return;
84
+ var deltaXSinceLastMove = pointerEvent.clientX - lastPointerClientX;
85
+ var deltaYSinceLastMove = pointerEvent.clientY - lastPointerClientY;
86
+ lastPointerClientX = pointerEvent.clientX;
87
+ lastPointerClientY = pointerEvent.clientY;
88
+ if (!isScrolling) {
89
+ var totalXFromGestureStart = lastPointerClientX - gestureStartClientX;
90
+ var totalYFromGestureStart = lastPointerClientY - gestureStartClientY;
91
+ if (totalXFromGestureStart * totalXFromGestureStart + totalYFromGestureStart * totalYFromGestureStart < PAN_DISTANCE_THRESHOLD_PX * PAN_DISTANCE_THRESHOLD_PX) {
92
+ return;
93
+ }
94
+ isScrolling = true;
95
+ }
96
+ pointerEvent.preventDefault();
84
97
  var scale = getPixelScale();
85
- scheduleScrollUpdate(-dx * scale, -dy * scale);
86
- e.preventDefault();
98
+ scrollHandler(-deltaXSinceLastMove * scale, -deltaYSinceLastMove * scale);
87
99
  }
88
100
  function onPointerUp(e) {
89
- if (!dragging) return;
90
- dragging = false;
91
101
  try {
92
102
  containerEl.releasePointerCapture(e.pointerId);
93
103
  } catch (_a) {}
104
+ isScrolling = false;
94
105
  }
95
106
  containerEl.addEventListener("pointerdown", onPointerDown, {
96
107
  passive: false
@@ -107,7 +118,7 @@ export var useSmoothScroll = function useSmoothScroll(scrollContainerRef) {
107
118
  containerEl.removeEventListener("pointercancel", onPointerUp);
108
119
  };
109
120
  }
110
- var makeScrollbarsMoveByPixels = function makeScrollbarsMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl) {
121
+ var makeScrollableAreaMoveByPixels = function makeScrollableAreaMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl) {
111
122
  return function (xPixels, yPixels) {
112
123
  var maxScrollLeft = horizontalScrollbarEl.scrollWidth - horizontalScrollbarEl.clientWidth;
113
124
  var maxScrollTop = verticalScrollbarEl.scrollHeight - verticalScrollbarEl.clientHeight;
@@ -123,19 +134,19 @@ export var useSmoothScroll = function useSmoothScroll(scrollContainerRef) {
123
134
  }
124
135
  };
125
136
  };
126
- function routeWheelScrollToScrollbars(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl) {
127
- var moveScrollbarsByPixels = makeScrollbarsMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl);
128
- var _a = attachSmoothWheelScroll(scrollContainerEl, moveScrollbarsByPixels, function () {
137
+ function mountScrollEventHandlers(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl) {
138
+ var moveScrollableAreaByPixels = makeScrollableAreaMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl);
139
+ var _a = handleScroll(scrollContainerEl, moveScrollableAreaByPixels, function () {
129
140
  return (window.devicePixelRatio || 1) * context.zoomRatio;
130
141
  }),
131
- scheduleScrollUpdate = _a.scheduleScrollUpdate,
132
- detach = _a.detach;
133
- var detachTouch = attachTouchPanToQueue(scrollContainerEl, scheduleScrollUpdate, function () {
142
+ scrollHandler = _a.scrollHandler,
143
+ unmountScrollHandler = _a.detach;
144
+ var unmountMobileScrollHandler = handleMobileScroll(scrollContainerEl, scrollHandler, function () {
134
145
  return (window.devicePixelRatio || 1) * context.zoomRatio;
135
146
  });
136
147
  return function () {
137
- detach();
138
- detachTouch();
148
+ unmountScrollHandler();
149
+ unmountMobileScrollHandler();
139
150
  };
140
151
  }
141
152
  useEffect(function () {
@@ -143,7 +154,7 @@ export var useSmoothScroll = function useSmoothScroll(scrollContainerRef) {
143
154
  var horizontalScrollbarEl = refs.scrollbarX.current;
144
155
  var verticalScrollbarEl = refs.scrollbarY.current;
145
156
  if (!scrollContainerEl || !horizontalScrollbarEl || !verticalScrollbarEl) return function () {};
146
- var unmountScrollHandler = routeWheelScrollToScrollbars(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl);
147
- return unmountScrollHandler;
157
+ var unmountScrollEventHandlers = mountScrollEventHandlers(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl);
158
+ return unmountScrollEventHandlers;
148
159
  }, [context.zoomRatio]);
149
160
  };
@@ -1005,6 +1005,28 @@ var ContextMenu = function ContextMenu() {
1005
1005
  className: "color-text-secondary w-4 h-4"
1006
1006
  })))));
1007
1007
  }
1008
+ if (name === "clear-format") {
1009
+ return /*#__PURE__*/_react.default.createElement(_Menu.default, {
1010
+ key: name,
1011
+ onClick: function onClick() {
1012
+ if (context.allowEdit === false) return;
1013
+ setContext(function (draftCtx) {
1014
+ draftCtx.contextMenu = {};
1015
+ if (draftCtx.contextMenu.headerMenu === "row") {
1016
+ (0, _fortuneCore.clearRowsCellsFormat)(draftCtx);
1017
+ } else if (draftCtx.contextMenu.headerMenu === true) {
1018
+ (0, _fortuneCore.clearColumnsCellsFormat)(draftCtx);
1019
+ } else if (!draftCtx.contextMenu.headerMenu) {
1020
+ (0, _fortuneCore.clearSelectedCellFormat)(draftCtx);
1021
+ }
1022
+ });
1023
+ }
1024
+ }, /*#__PURE__*/_react.default.createElement("div", {
1025
+ className: "context-item"
1026
+ }, /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
1027
+ name: "RemoveFormatting"
1028
+ }), /*#__PURE__*/_react.default.createElement("p", null, "Clear formatting")));
1029
+ }
1008
1030
  return null;
1009
1031
  }, [context, setContext, refs.globalCache, rightclick, showAlert, showDialog, drag.noMulti, info.tipRowHeightLimit, info.tipColumnWidthLimit, generalDialog.partiallyError, generalDialog.readOnlyError, generalDialog.dataNullError]);
1010
1032
  (0, _react.useLayoutEffect)(function () {
@@ -13,7 +13,7 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
13
13
  context = _a.context,
14
14
  refs = _a.refs,
15
15
  setContext = _a.setContext;
16
- function attachSmoothWheelScroll(scrollContainer, moveScrollBy, getPixelScale) {
16
+ function handleScroll(scrollContainer, moveScrollBy, getPixelScale) {
17
17
  if (getPixelScale === void 0) {
18
18
  getPixelScale = function getPixelScale() {
19
19
  return window.devicePixelRatio || 1;
@@ -36,7 +36,7 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
36
36
  queuedXPixels = 0;
37
37
  queuedYPixels = 0;
38
38
  }
39
- function scheduleScrollUpdate(x, y) {
39
+ function scrollHandler(x, y) {
40
40
  queuedXPixels += x;
41
41
  queuedYPixels += y;
42
42
  if (!animationFrameId) animationFrameId = requestAnimationFrame(applyQueuedScroll);
@@ -57,47 +57,58 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
57
57
  return;
58
58
  }
59
59
  var scaleFactor = getPixelScale();
60
- scheduleScrollUpdate(event.deltaX * scaleFactor, event.deltaY * scaleFactor);
60
+ scrollHandler(event.deltaX * scaleFactor, event.deltaY * scaleFactor);
61
61
  }
62
62
  scrollContainer.addEventListener("wheel", handleWheelEvent, {
63
63
  passive: false
64
64
  });
65
65
  return {
66
- scheduleScrollUpdate: scheduleScrollUpdate,
66
+ scrollHandler: scrollHandler,
67
67
  detach: function detach() {
68
68
  scrollContainer.removeEventListener("wheel", handleWheelEvent);
69
69
  if (animationFrameId) cancelAnimationFrame(animationFrameId);
70
70
  }
71
71
  };
72
72
  }
73
- function attachTouchPanToQueue(containerEl, scheduleScrollUpdate, getPixelScale) {
74
- var dragging = false;
75
- var lastX = 0;
76
- var lastY = 0;
77
- function onPointerDown(e) {
78
- if (e.pointerType !== "touch" && e.pointerType !== "pen") return;
79
- dragging = true;
80
- lastX = e.clientX;
81
- lastY = e.clientY;
82
- containerEl.setPointerCapture(e.pointerId);
83
- e.preventDefault();
73
+ function handleMobileScroll(containerEl, scrollHandler, getPixelScale) {
74
+ var isScrolling = false;
75
+ var gestureStartClientX = 0;
76
+ var gestureStartClientY = 0;
77
+ var lastPointerClientX = 0;
78
+ var lastPointerClientY = 0;
79
+ var PAN_DISTANCE_THRESHOLD_PX = 8;
80
+ function onPointerDown(pointerEvent) {
81
+ if (pointerEvent.pointerType !== "touch" && pointerEvent.pointerType !== "pen") return;
82
+ isScrolling = false;
83
+ gestureStartClientX = pointerEvent.clientX;
84
+ lastPointerClientX = pointerEvent.clientX;
85
+ gestureStartClientY = pointerEvent.clientY;
86
+ lastPointerClientY = pointerEvent.clientY;
87
+ containerEl.setPointerCapture(pointerEvent.pointerId);
84
88
  }
85
- function onPointerMove(e) {
86
- if (!dragging) return;
87
- var dx = e.clientX - lastX;
88
- var dy = e.clientY - lastY;
89
- lastX = e.clientX;
90
- lastY = e.clientY;
89
+ function onPointerMove(pointerEvent) {
90
+ if (pointerEvent.pointerType !== "touch" && pointerEvent.pointerType !== "pen") return;
91
+ var deltaXSinceLastMove = pointerEvent.clientX - lastPointerClientX;
92
+ var deltaYSinceLastMove = pointerEvent.clientY - lastPointerClientY;
93
+ lastPointerClientX = pointerEvent.clientX;
94
+ lastPointerClientY = pointerEvent.clientY;
95
+ if (!isScrolling) {
96
+ var totalXFromGestureStart = lastPointerClientX - gestureStartClientX;
97
+ var totalYFromGestureStart = lastPointerClientY - gestureStartClientY;
98
+ if (totalXFromGestureStart * totalXFromGestureStart + totalYFromGestureStart * totalYFromGestureStart < PAN_DISTANCE_THRESHOLD_PX * PAN_DISTANCE_THRESHOLD_PX) {
99
+ return;
100
+ }
101
+ isScrolling = true;
102
+ }
103
+ pointerEvent.preventDefault();
91
104
  var scale = getPixelScale();
92
- scheduleScrollUpdate(-dx * scale, -dy * scale);
93
- e.preventDefault();
105
+ scrollHandler(-deltaXSinceLastMove * scale, -deltaYSinceLastMove * scale);
94
106
  }
95
107
  function onPointerUp(e) {
96
- if (!dragging) return;
97
- dragging = false;
98
108
  try {
99
109
  containerEl.releasePointerCapture(e.pointerId);
100
110
  } catch (_a) {}
111
+ isScrolling = false;
101
112
  }
102
113
  containerEl.addEventListener("pointerdown", onPointerDown, {
103
114
  passive: false
@@ -114,7 +125,7 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
114
125
  containerEl.removeEventListener("pointercancel", onPointerUp);
115
126
  };
116
127
  }
117
- var makeScrollbarsMoveByPixels = function makeScrollbarsMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl) {
128
+ var makeScrollableAreaMoveByPixels = function makeScrollableAreaMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl) {
118
129
  return function (xPixels, yPixels) {
119
130
  var maxScrollLeft = horizontalScrollbarEl.scrollWidth - horizontalScrollbarEl.clientWidth;
120
131
  var maxScrollTop = verticalScrollbarEl.scrollHeight - verticalScrollbarEl.clientHeight;
@@ -130,19 +141,19 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
130
141
  }
131
142
  };
132
143
  };
133
- function routeWheelScrollToScrollbars(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl) {
134
- var moveScrollbarsByPixels = makeScrollbarsMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl);
135
- var _a = attachSmoothWheelScroll(scrollContainerEl, moveScrollbarsByPixels, function () {
144
+ function mountScrollEventHandlers(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl) {
145
+ var moveScrollableAreaByPixels = makeScrollableAreaMoveByPixels(horizontalScrollbarEl, verticalScrollbarEl);
146
+ var _a = handleScroll(scrollContainerEl, moveScrollableAreaByPixels, function () {
136
147
  return (window.devicePixelRatio || 1) * context.zoomRatio;
137
148
  }),
138
- scheduleScrollUpdate = _a.scheduleScrollUpdate,
139
- detach = _a.detach;
140
- var detachTouch = attachTouchPanToQueue(scrollContainerEl, scheduleScrollUpdate, function () {
149
+ scrollHandler = _a.scrollHandler,
150
+ unmountScrollHandler = _a.detach;
151
+ var unmountMobileScrollHandler = handleMobileScroll(scrollContainerEl, scrollHandler, function () {
141
152
  return (window.devicePixelRatio || 1) * context.zoomRatio;
142
153
  });
143
154
  return function () {
144
- detach();
145
- detachTouch();
155
+ unmountScrollHandler();
156
+ unmountMobileScrollHandler();
146
157
  };
147
158
  }
148
159
  (0, _react.useEffect)(function () {
@@ -150,7 +161,7 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
150
161
  var horizontalScrollbarEl = refs.scrollbarX.current;
151
162
  var verticalScrollbarEl = refs.scrollbarY.current;
152
163
  if (!scrollContainerEl || !horizontalScrollbarEl || !verticalScrollbarEl) return function () {};
153
- var unmountScrollHandler = routeWheelScrollToScrollbars(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl);
154
- return unmountScrollHandler;
164
+ var unmountScrollEventHandlers = mountScrollEventHandlers(scrollContainerEl, horizontalScrollbarEl, verticalScrollbarEl);
165
+ return unmountScrollEventHandlers;
155
166
  }, [context.zoomRatio]);
156
167
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fileverse-dev/fortune-react",
3
- "version": "1.1.65",
3
+ "version": "1.1.66-clear-formatting-1",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "module": "es/index.js",
@@ -16,7 +16,7 @@
16
16
  "tsc": "tsc"
17
17
  },
18
18
  "dependencies": {
19
- "@fileverse-dev/fortune-core": "1.1.65",
19
+ "@fileverse-dev/fortune-core": "1.1.66-clear-formatting-1",
20
20
  "@fileverse/ui": "^4.1.7-patch-21",
21
21
  "@tippyjs/react": "^4.2.6",
22
22
  "@types/regenerator-runtime": "^0.13.6",