@fileverse-dev/fortune-react 1.2.0-patch-1 → 1.2.0-patch-link-ux-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.
@@ -3,7 +3,6 @@ type Props = React.PropsWithChildren<{
3
3
  onClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, container: HTMLDivElement) => void;
4
4
  onMouseLeave?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, container: HTMLDivElement) => void;
5
5
  onMouseEnter?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, container: HTMLDivElement) => void;
6
- isActive?: boolean;
7
6
  }>;
8
7
  declare const Menu: React.FC<Props>;
9
8
  export default Menu;
@@ -1,16 +1,13 @@
1
- import { cn } from "@fileverse/ui";
2
1
  import React, { useRef } from "react";
3
2
  var Menu = function Menu(_a) {
4
3
  var _onClick = _a.onClick,
5
4
  _onMouseLeave = _a.onMouseLeave,
6
5
  _onMouseEnter = _a.onMouseEnter,
7
- children = _a.children,
8
- _b = _a.isActive,
9
- isActive = _b === void 0 ? false : _b;
6
+ children = _a.children;
10
7
  var containerRef = useRef(null);
11
8
  return /*#__PURE__*/React.createElement("div", {
12
9
  ref: containerRef,
13
- className: cn("luckysheet-cols-menuitem luckysheet-mousedown-cancel", isActive && "color-bg-default-hover"),
10
+ className: "luckysheet-cols-menuitem luckysheet-mousedown-cancel",
14
11
  onClick: function onClick(e) {
15
12
  return _onClick === null || _onClick === void 0 ? void 0 : _onClick(e, containerRef.current);
16
13
  },
@@ -82,10 +82,7 @@
82
82
  cursor: pointer;
83
83
  list-style: none;
84
84
  margin: 0;
85
- padding-right: 8px !important;
86
- padding-left: 8px !important;
87
- padding-top: 6px !important;
88
- padding-bottom: 6px !important;
85
+ padding: 8px !important;
89
86
  white-space: nowrap;
90
87
  user-select: none;
91
88
  display: flex;
@@ -115,7 +115,7 @@ var __generator = this && this.__generator || function (thisArg, body) {
115
115
  };
116
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
- import React, { useContext, useRef, useCallback, useLayoutEffect, useState } from "react";
118
+ import React, { useContext, useRef, useCallback, useLayoutEffect } from "react";
119
119
  import regeneratorRuntime from "regenerator-runtime";
120
120
  import Tippy from "@tippyjs/react";
121
121
  import { LucideIcon } from "@fileverse/ui";
@@ -149,9 +149,6 @@ var ContextMenu = function ContextMenu() {
149
149
  info = _b.info,
150
150
  toolbar = _b.toolbar,
151
151
  splitText = _b.splitText;
152
- var _c = useState(""),
153
- activeMenu = _c[0],
154
- setActiveMenu = _c[1];
155
152
  var addRowColRightAvobe = function addRowColRightAvobe(type, direction) {
156
153
  var _a, _b, _c, _d, _e, _f;
157
154
  var positionCol = (_c = (_b = (_a = context.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.column) === null || _c === void 0 ? void 0 : _c[0];
@@ -832,12 +829,6 @@ var ContextMenu = function ContextMenu() {
832
829
  arrow: false,
833
830
  zIndex: 3000,
834
831
  appendTo: document.body,
835
- onShow: function onShow() {
836
- setActiveMenu("sort");
837
- },
838
- onHide: function onHide() {
839
- if (activeMenu === "sort") setActiveMenu("");
840
- },
841
832
  content: /*#__PURE__*/React.createElement("div", {
842
833
  className: "fortune-toolbar-select",
843
834
  style: {
@@ -876,9 +867,7 @@ var ContextMenu = function ContextMenu() {
876
867
  }), /*#__PURE__*/React.createElement("p", null, sort.desc))))),
877
868
  trigger: "mouseenter focus",
878
869
  hideOnClick: false
879
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Menu, {
880
- isActive: activeMenu === "sort"
881
- }, /*#__PURE__*/React.createElement("div", {
870
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement("div", {
882
871
  className: "flex items-center justify-between w-full"
883
872
  }, /*#__PURE__*/React.createElement("div", {
884
873
  className: "context-item"
@@ -918,7 +907,7 @@ var ContextMenu = function ContextMenu() {
918
907
  }, /*#__PURE__*/React.createElement("div", {
919
908
  className: "context-item p-2 w-full",
920
909
  style: {
921
- height: "32px"
910
+ height: "40px"
922
911
  }
923
912
  }, /*#__PURE__*/React.createElement(LucideIcon, {
924
913
  name: "Filter",
@@ -933,22 +922,14 @@ var ContextMenu = function ContextMenu() {
933
922
  }, /*#__PURE__*/React.createElement("div", {
934
923
  className: "context-item p-2 w-full",
935
924
  style: {
936
- height: "32px"
925
+ height: "40px"
937
926
  }
938
927
  }, /*#__PURE__*/React.createElement(LucideIcon, {
939
928
  name: "Eraser"
940
929
  }), /*#__PURE__*/React.createElement("p", null, filter.clearFilter))))),
941
930
  trigger: "mouseenter focus",
942
- hideOnClick: false,
943
- onShow: function onShow() {
944
- setActiveMenu("filter");
945
- },
946
- onHide: function onHide() {
947
- if (activeMenu === "filter") setActiveMenu("");
948
- }
949
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Menu, {
950
- isActive: activeMenu === "filter"
951
- }, /*#__PURE__*/React.createElement("div", {
931
+ hideOnClick: false
932
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement("div", {
952
933
  className: "flex items-center justify-between w-full"
953
934
  }, /*#__PURE__*/React.createElement("div", {
954
935
  className: "context-item"
@@ -1002,12 +983,6 @@ var ContextMenu = function ContextMenu() {
1002
983
  arrow: false,
1003
984
  zIndex: 3000,
1004
985
  appendTo: document.body,
1005
- onShow: function onShow() {
1006
- setActiveMenu("conditionFormat");
1007
- },
1008
- onHide: function onHide() {
1009
- if (activeMenu === "conditionFormat") setActiveMenu("");
1010
- },
1011
986
  content: /*#__PURE__*/React.createElement("div", {
1012
987
  style: {
1013
988
  minWidth: 220
@@ -1018,9 +993,7 @@ var ContextMenu = function ContextMenu() {
1018
993
  })),
1019
994
  trigger: "mouseenter focus",
1020
995
  hideOnClick: false
1021
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Menu, {
1022
- isActive: activeMenu === "conditionFormat"
1023
- }, /*#__PURE__*/React.createElement("div", {
996
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement("div", {
1024
997
  className: "flex items-center justify-between w-full"
1025
998
  }, /*#__PURE__*/React.createElement("div", {
1026
999
  className: "flex items-center gap-2 context-item"
@@ -1056,7 +1029,7 @@ var ContextMenu = function ContextMenu() {
1056
1029
  }), /*#__PURE__*/React.createElement("p", null, "Clear formatting")));
1057
1030
  }
1058
1031
  return null;
1059
- }, [context, setContext, refs.globalCache, rightclick, showAlert, showDialog, drag.noMulti, info.tipRowHeightLimit, info.tipColumnWidthLimit, generalDialog.partiallyError, generalDialog.readOnlyError, generalDialog.dataNullError, activeMenu]);
1032
+ }, [context, setContext, refs.globalCache, rightclick, showAlert, showDialog, drag.noMulti, info.tipRowHeightLimit, info.tipColumnWidthLimit, generalDialog.partiallyError, generalDialog.readOnlyError, generalDialog.dataNullError]);
1060
1033
  useLayoutEffect(function () {
1061
1034
  var _a;
1062
1035
  if (!containerRef.current) {
@@ -8,7 +8,7 @@ var __assign = this && this.__assign || function () {
8
8
  };
9
9
  return __assign.apply(this, arguments);
10
10
  };
11
- import React, { useContext, useState, useMemo, useCallback, useLayoutEffect } from "react";
11
+ import React, { useContext, useState, useMemo, useCallback, useLayoutEffect, useRef, useEffect } from "react";
12
12
  import { locale, saveHyperlink, removeHyperlink, replaceHtml, goToLink, isLinkValid } from "@fileverse-dev/fortune-core";
13
13
  import { Button, TextField, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, LucideIcon } from "@fileverse/ui";
14
14
  import "./index.css";
@@ -28,18 +28,24 @@ export var LinkEditCard = function LinkEditCard(_a) {
28
28
  context = _b.context,
29
29
  setContext = _b.setContext,
30
30
  refs = _b.refs;
31
- var _c = useState(originText),
32
- linkText = _c[0],
33
- setLinkText = _c[1];
34
- var _d = useState(originAddress),
35
- linkAddress = _d[0],
36
- setLinkAddress = _d[1];
37
- var _e = useState(originType),
38
- linkType = _e[0],
39
- setLinkType = _e[1];
40
- var _f = locale(context),
41
- insertLink = _f.insertLink,
42
- linkTypeList = _f.linkTypeList;
31
+ var cardRef = useRef(null);
32
+ var linkAddressRef = useRef(null);
33
+ var linkTextRef = useRef(null);
34
+ var _c = useState(position.cellBottom),
35
+ cardTop = _c[0],
36
+ setCardTop = _c[1];
37
+ var _d = useState(originText),
38
+ linkText = _d[0],
39
+ setLinkText = _d[1];
40
+ var _e = useState(originAddress),
41
+ linkAddress = _e[0],
42
+ setLinkAddress = _e[1];
43
+ var _f = useState(originType),
44
+ linkType = _f[0],
45
+ setLinkType = _f[1];
46
+ var _g = locale(context),
47
+ insertLink = _g.insertLink,
48
+ linkTypeList = _g.linkTypeList;
43
49
  var isLinkAddressValid = isLinkValid(context, linkType, linkAddress);
44
50
  var isButtonDisabled = useMemo(function () {
45
51
  if (!linkText.trim()) return true;
@@ -75,13 +81,20 @@ export var LinkEditCard = function LinkEditCard(_a) {
75
81
  return e.stopPropagation();
76
82
  },
77
83
  onKeyDown: function onKeyDown(e) {
78
- return e.stopPropagation();
84
+ e.stopPropagation();
85
+ if (isButtonDisabled) return;
86
+ if (e.key === "Enter") {
87
+ _.set(refs.globalCache, "linkCard.mouseEnter", false);
88
+ setContext(function (draftCtx) {
89
+ return saveHyperlink(draftCtx, r, c, linkText, linkType, linkAddress);
90
+ });
91
+ }
79
92
  },
80
93
  onDoubleClick: function onDoubleClick(e) {
81
94
  return e.stopPropagation();
82
95
  }
83
96
  };
84
- }, [refs.globalCache]);
97
+ }, [refs.globalCache, isButtonDisabled]);
85
98
  var renderToolbarButton = useCallback(function (iconId, onClick) {
86
99
  return /*#__PURE__*/React.createElement("div", {
87
100
  className: "fortune-toolbar-button",
@@ -100,6 +113,40 @@ export var LinkEditCard = function LinkEditCard(_a) {
100
113
  setLinkText(originText);
101
114
  setLinkType(originType);
102
115
  }, [rc, originAddress, originText, originType]);
116
+ useEffect(function () {
117
+ var dragHandle = document.querySelector(".luckysheet-cs-draghandle-top.luckysheet-cs-draghandle");
118
+ var card = cardRef.current;
119
+ if (!dragHandle || !card) {
120
+ setCardTop(position.cellBottom + 8);
121
+ return;
122
+ }
123
+ var dragRect = dragHandle.getBoundingClientRect();
124
+ var cardRect = card.getBoundingClientRect();
125
+ var viewportHeight = window.innerHeight;
126
+ var spaceBelow = viewportHeight - dragRect.bottom;
127
+ var spaceAbove = dragRect.top;
128
+ var newTop;
129
+ if (spaceBelow < cardRect.height + 16 && spaceAbove > cardRect.height + 16) {
130
+ var cellTop = position.cellBottom - 30;
131
+ newTop = cellTop - cardRect.height - 8;
132
+ } else {
133
+ newTop = position.cellBottom + 8;
134
+ }
135
+ setCardTop(newTop);
136
+ }, [position.cellBottom, isEditing]);
137
+ useEffect(function () {
138
+ var _a, _b;
139
+ if (linkAddressRef.current && !linkAddress && isEditing) {
140
+ (_a = linkAddressRef.current) === null || _a === void 0 ? void 0 : _a.focus({
141
+ preventScroll: true
142
+ });
143
+ }
144
+ if (linkTextRef.current && !linkText && isEditing) {
145
+ (_b = linkTextRef.current) === null || _b === void 0 ? void 0 : _b.focus({
146
+ preventScroll: true
147
+ });
148
+ }
149
+ }, [linkAddressRef, isEditing, linkTextRef]);
103
150
  if (!isEditing) {
104
151
  return /*#__PURE__*/React.createElement("div", __assign({}, containerEvent, {
105
152
  onKeyDown: function onKeyDown(e) {
@@ -142,9 +189,10 @@ export var LinkEditCard = function LinkEditCard(_a) {
142
189
  }
143
190
  return /*#__PURE__*/React.createElement("div", __assign({
144
191
  className: "fortune-link-card",
192
+ ref: cardRef,
145
193
  style: {
146
194
  left: position.cellLeft + 20,
147
- top: position.cellBottom
195
+ top: cardTop
148
196
  }
149
197
  }, containerEvent), /*#__PURE__*/React.createElement(Select, {
150
198
  value: linkType,
@@ -177,6 +225,7 @@ export var LinkEditCard = function LinkEditCard(_a) {
177
225
  }, /*#__PURE__*/React.createElement(LucideIcon, {
178
226
  name: "ALargeSmall"
179
227
  })), /*#__PURE__*/React.createElement(TextField, {
228
+ ref: linkTextRef,
180
229
  placeholder: "Display text",
181
230
  value: linkText,
182
231
  onChange: function onChange(e) {
@@ -192,6 +241,7 @@ export var LinkEditCard = function LinkEditCard(_a) {
192
241
  width: 16,
193
242
  height: 16
194
243
  })), /*#__PURE__*/React.createElement(TextField, {
244
+ ref: linkAddressRef,
195
245
  placeholder: "Paste URL",
196
246
  value: linkAddress,
197
247
  onChange: function onChange(e) {
@@ -306,12 +306,13 @@ var ColumnHeader = function ColumnHeader() {
306
306
  c1 = _a.c1,
307
307
  c2 = _a.c2;
308
308
  return /*#__PURE__*/React.createElement("div", {
309
- className: "fortune-col-header-selected color-bg-tertiary",
309
+ className: "fortune-col-header-selected",
310
310
  key: i,
311
311
  style: _.assign({
312
312
  left: col_pre,
313
313
  width: col - col_pre - 1,
314
314
  display: "block",
315
+ backgroundColor: "#EFC703",
315
316
  mixBlendMode: "multiply"
316
317
  }, fixColumnStyleOverflowInFreeze(context, c1, c2, (_b = refs.globalCache.freezen) === null || _b === void 0 ? void 0 : _b[context.currentSheetId]))
317
318
  });
@@ -6,6 +6,7 @@
6
6
  background: #fff;
7
7
  z-index: 1003;
8
8
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
9
+ border: 1px solid lavender;
9
10
  border-radius: 10px;
10
11
  }
11
12
 
@@ -53,7 +53,7 @@ var FormulaSearch = function FormulaSearch(props) {
53
53
  });
54
54
  if (_.isEmpty(context.functionCandidates) && _.isEmpty(context.defaultCandidates)) return null;
55
55
  return /*#__PURE__*/React.createElement("div", {
56
- className: "flex color-border-default border flex-col luckysheet-formula-search-c-p custom-scroll",
56
+ className: "flex flex-col luckysheet-formula-search-c-p custom-scroll",
57
57
  id: "luckysheet-formula-search-c-p",
58
58
  style: {
59
59
  top: top
@@ -266,12 +266,13 @@ var RowHeader = function RowHeader() {
266
266
  r1 = _a.r1,
267
267
  r2 = _a.r2;
268
268
  return /*#__PURE__*/React.createElement("div", {
269
- className: "fortune-row-header-selected color-bg-tertiary",
269
+ className: "fortune-row-header-selected",
270
270
  key: i,
271
271
  style: _.assign({
272
272
  top: row_pre,
273
273
  height: row - row_pre - 1,
274
274
  display: "block",
275
+ backgroundColor: "#EFC703",
275
276
  mixBlendMode: "multiply"
276
277
  }, fixRowStyleOverflowInFreeze(context, r1, r2, (_b = refs.globalCache.freezen) === null || _b === void 0 ? void 0 : _b[context.currentSheetId]))
277
278
  });
@@ -45,10 +45,12 @@
45
45
  .fortune-row-header-selected {
46
46
  position: absolute;
47
47
  z-index: 10;
48
+ border-right: 1px solid #0188fb;
48
49
  right: 0;
49
50
  width: 100%;
50
51
  margin-top: 2px;
51
52
  display: none;
53
+ background-color: rgba(76, 76, 76, 0.1);
52
54
  }
53
55
 
54
56
  .fortune-col-header-wrap {
@@ -92,10 +94,12 @@
92
94
  cursor: default;
93
95
  position: absolute;
94
96
  z-index: 10;
97
+ border-bottom: 1px solid #0188fb;
95
98
  bottom: 0;
96
99
  height: 100%;
97
100
  margin-left: 0px;
98
101
  display: none;
102
+ background-color: rgba(76, 76, 76, 0.1);
99
103
  }
100
104
 
101
105
  .fortune-left-top {
@@ -133,7 +137,7 @@
133
137
  z-index: 14;
134
138
  /*border:1px solid #fff;*/
135
139
  margin: 0px 0 0 0px;
136
- /* background: rgba(0, 80, 208, 0.15); */
140
+ background: rgba(0, 80, 208, 0.15);
137
141
  display: none;
138
142
  }
139
143
 
@@ -195,7 +199,7 @@
195
199
  z-index: 15;
196
200
  border: 2.5px solid #efc703;
197
201
  margin: -1px 0 0 -1px;
198
- background: rgba(239, 199, 5, 0.02);
202
+ background: rgba(1, 136, 251, 0.15);
199
203
  display: none;
200
204
  box-sizing: content-box;
201
205
  }
@@ -1,5 +1,5 @@
1
1
  import React, { useMemo, useRef, useState } from "react";
2
- import { IconButton, Tooltip, Popover, PopoverContent, PopoverTrigger, cn, Button, LucideIcon } from "@fileverse/ui";
2
+ import { IconButton, Tooltip, Popover, PopoverContent, PopoverTrigger, cn, Button } from "@fileverse/ui";
3
3
  import SVGIcon from "../SVGIcon";
4
4
  import { getLucideIcon } from ".";
5
5
  var Combo = function Combo(_a) {
@@ -49,10 +49,7 @@ var Combo = function Combo(_a) {
49
49
  height: 16
50
50
  })) : (/*#__PURE__*/React.createElement("span", {
51
51
  className: "fortune-toolbar-combo-text"
52
- }, text !== undefined ? text : "")), /*#__PURE__*/React.createElement(LucideIcon, {
53
- className: "w-[16px] h-[16px]",
54
- name: "ChevronDown"
55
- })))) : (/*#__PURE__*/React.createElement("span", null, iconId === "font-color" ? (/*#__PURE__*/React.createElement(Tooltip, {
52
+ }, text !== undefined ? text : ""))))) : (/*#__PURE__*/React.createElement("span", null, iconId === "font-color" ? (/*#__PURE__*/React.createElement(Tooltip, {
56
53
  text: tooltip,
57
54
  placement: "bottom"
58
55
  }, /*#__PURE__*/React.createElement(Button, {
@@ -141,24 +141,12 @@
141
141
 
142
142
  .fortune-toolbar-combo-button {
143
143
  font-size: 12px;
144
- padding-top: 4px;
145
- padding-bottom: 4px;
146
- padding-left: 8px;
147
- padding-right: 8px;
148
- border-radius: 4px;
149
- gap: 8px;
150
- }
151
- .fortune-toolbar-combo-button:hover {
152
- background: hsl(var(--color-bg-default-hover));
153
144
  }
154
145
 
155
146
  .fortune-toolbar-select-option {
156
147
  font-size: 12px;
157
148
  min-width: 60px;
158
- padding-left: 8px;
159
- padding-right: 8px;
160
- padding-top: 6px;
161
- padding-bottom: 6px;
149
+ padding: 8px;
162
150
  cursor: pointer;
163
151
  user-select: none;
164
152
  }
@@ -183,10 +171,6 @@
183
171
  font-weight: 500;
184
172
  font-size: 14px;
185
173
  line-height: 20px;
186
- max-width: 56px;
187
- overflow: hidden;
188
- text-overflow: ellipsis;
189
- white-space: nowrap;
190
174
  }
191
175
 
192
176
  .fortune-toolbar-color-picker-item {
@@ -3,7 +3,6 @@ type Props = React.PropsWithChildren<{
3
3
  onClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, container: HTMLDivElement) => void;
4
4
  onMouseLeave?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, container: HTMLDivElement) => void;
5
5
  onMouseEnter?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, container: HTMLDivElement) => void;
6
- isActive?: boolean;
7
6
  }>;
8
7
  declare const Menu: React.FC<Props>;
9
8
  export default Menu;
@@ -5,20 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _ui = require("@fileverse/ui");
9
8
  var _react = _interopRequireWildcard(require("react"));
10
9
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
11
10
  var Menu = function Menu(_a) {
12
11
  var _onClick = _a.onClick,
13
12
  _onMouseLeave = _a.onMouseLeave,
14
13
  _onMouseEnter = _a.onMouseEnter,
15
- children = _a.children,
16
- _b = _a.isActive,
17
- isActive = _b === void 0 ? false : _b;
14
+ children = _a.children;
18
15
  var containerRef = (0, _react.useRef)(null);
19
16
  return /*#__PURE__*/_react.default.createElement("div", {
20
17
  ref: containerRef,
21
- className: (0, _ui.cn)("luckysheet-cols-menuitem luckysheet-mousedown-cancel", isActive && "color-bg-default-hover"),
18
+ className: "luckysheet-cols-menuitem luckysheet-mousedown-cancel",
22
19
  onClick: function onClick(e) {
23
20
  return _onClick === null || _onClick === void 0 ? void 0 : _onClick(e, containerRef.current);
24
21
  },
@@ -82,10 +82,7 @@
82
82
  cursor: pointer;
83
83
  list-style: none;
84
84
  margin: 0;
85
- padding-right: 8px !important;
86
- padding-left: 8px !important;
87
- padding-top: 6px !important;
88
- padding-bottom: 6px !important;
85
+ padding: 8px !important;
89
86
  white-space: nowrap;
90
87
  user-select: none;
91
88
  display: flex;
@@ -158,9 +158,6 @@ var ContextMenu = function ContextMenu() {
158
158
  info = _b.info,
159
159
  toolbar = _b.toolbar,
160
160
  splitText = _b.splitText;
161
- var _c = (0, _react.useState)(""),
162
- activeMenu = _c[0],
163
- setActiveMenu = _c[1];
164
161
  var addRowColRightAvobe = function addRowColRightAvobe(type, direction) {
165
162
  var _a, _b, _c, _d, _e, _f;
166
163
  var positionCol = (_c = (_b = (_a = context.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.column) === null || _c === void 0 ? void 0 : _c[0];
@@ -841,12 +838,6 @@ var ContextMenu = function ContextMenu() {
841
838
  arrow: false,
842
839
  zIndex: 3000,
843
840
  appendTo: document.body,
844
- onShow: function onShow() {
845
- setActiveMenu("sort");
846
- },
847
- onHide: function onHide() {
848
- if (activeMenu === "sort") setActiveMenu("");
849
- },
850
841
  content: /*#__PURE__*/_react.default.createElement("div", {
851
842
  className: "fortune-toolbar-select",
852
843
  style: {
@@ -885,9 +876,7 @@ var ContextMenu = function ContextMenu() {
885
876
  }), /*#__PURE__*/_react.default.createElement("p", null, sort.desc))))),
886
877
  trigger: "mouseenter focus",
887
878
  hideOnClick: false
888
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Menu.default, {
889
- isActive: activeMenu === "sort"
890
- }, /*#__PURE__*/_react.default.createElement("div", {
879
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Menu.default, null, /*#__PURE__*/_react.default.createElement("div", {
891
880
  className: "flex items-center justify-between w-full"
892
881
  }, /*#__PURE__*/_react.default.createElement("div", {
893
882
  className: "context-item"
@@ -927,7 +916,7 @@ var ContextMenu = function ContextMenu() {
927
916
  }, /*#__PURE__*/_react.default.createElement("div", {
928
917
  className: "context-item p-2 w-full",
929
918
  style: {
930
- height: "32px"
919
+ height: "40px"
931
920
  }
932
921
  }, /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
933
922
  name: "Filter",
@@ -942,22 +931,14 @@ var ContextMenu = function ContextMenu() {
942
931
  }, /*#__PURE__*/_react.default.createElement("div", {
943
932
  className: "context-item p-2 w-full",
944
933
  style: {
945
- height: "32px"
934
+ height: "40px"
946
935
  }
947
936
  }, /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
948
937
  name: "Eraser"
949
938
  }), /*#__PURE__*/_react.default.createElement("p", null, filter.clearFilter))))),
950
939
  trigger: "mouseenter focus",
951
- hideOnClick: false,
952
- onShow: function onShow() {
953
- setActiveMenu("filter");
954
- },
955
- onHide: function onHide() {
956
- if (activeMenu === "filter") setActiveMenu("");
957
- }
958
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Menu.default, {
959
- isActive: activeMenu === "filter"
960
- }, /*#__PURE__*/_react.default.createElement("div", {
940
+ hideOnClick: false
941
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Menu.default, null, /*#__PURE__*/_react.default.createElement("div", {
961
942
  className: "flex items-center justify-between w-full"
962
943
  }, /*#__PURE__*/_react.default.createElement("div", {
963
944
  className: "context-item"
@@ -1011,12 +992,6 @@ var ContextMenu = function ContextMenu() {
1011
992
  arrow: false,
1012
993
  zIndex: 3000,
1013
994
  appendTo: document.body,
1014
- onShow: function onShow() {
1015
- setActiveMenu("conditionFormat");
1016
- },
1017
- onHide: function onHide() {
1018
- if (activeMenu === "conditionFormat") setActiveMenu("");
1019
- },
1020
995
  content: /*#__PURE__*/_react.default.createElement("div", {
1021
996
  style: {
1022
997
  minWidth: 220
@@ -1027,9 +1002,7 @@ var ContextMenu = function ContextMenu() {
1027
1002
  })),
1028
1003
  trigger: "mouseenter focus",
1029
1004
  hideOnClick: false
1030
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Menu.default, {
1031
- isActive: activeMenu === "conditionFormat"
1032
- }, /*#__PURE__*/_react.default.createElement("div", {
1005
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Menu.default, null, /*#__PURE__*/_react.default.createElement("div", {
1033
1006
  className: "flex items-center justify-between w-full"
1034
1007
  }, /*#__PURE__*/_react.default.createElement("div", {
1035
1008
  className: "flex items-center gap-2 context-item"
@@ -1065,7 +1038,7 @@ var ContextMenu = function ContextMenu() {
1065
1038
  }), /*#__PURE__*/_react.default.createElement("p", null, "Clear formatting")));
1066
1039
  }
1067
1040
  return null;
1068
- }, [context, setContext, refs.globalCache, rightclick, showAlert, showDialog, drag.noMulti, info.tipRowHeightLimit, info.tipColumnWidthLimit, generalDialog.partiallyError, generalDialog.readOnlyError, generalDialog.dataNullError, activeMenu]);
1041
+ }, [context, setContext, refs.globalCache, rightclick, showAlert, showDialog, drag.noMulti, info.tipRowHeightLimit, info.tipColumnWidthLimit, generalDialog.partiallyError, generalDialog.readOnlyError, generalDialog.dataNullError]);
1069
1042
  (0, _react.useLayoutEffect)(function () {
1070
1043
  var _a;
1071
1044
  if (!containerRef.current) {
@@ -37,18 +37,24 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
37
37
  context = _b.context,
38
38
  setContext = _b.setContext,
39
39
  refs = _b.refs;
40
- var _c = (0, _react.useState)(originText),
41
- linkText = _c[0],
42
- setLinkText = _c[1];
43
- var _d = (0, _react.useState)(originAddress),
44
- linkAddress = _d[0],
45
- setLinkAddress = _d[1];
46
- var _e = (0, _react.useState)(originType),
47
- linkType = _e[0],
48
- setLinkType = _e[1];
49
- var _f = (0, _fortuneCore.locale)(context),
50
- insertLink = _f.insertLink,
51
- linkTypeList = _f.linkTypeList;
40
+ var cardRef = (0, _react.useRef)(null);
41
+ var linkAddressRef = (0, _react.useRef)(null);
42
+ var linkTextRef = (0, _react.useRef)(null);
43
+ var _c = (0, _react.useState)(position.cellBottom),
44
+ cardTop = _c[0],
45
+ setCardTop = _c[1];
46
+ var _d = (0, _react.useState)(originText),
47
+ linkText = _d[0],
48
+ setLinkText = _d[1];
49
+ var _e = (0, _react.useState)(originAddress),
50
+ linkAddress = _e[0],
51
+ setLinkAddress = _e[1];
52
+ var _f = (0, _react.useState)(originType),
53
+ linkType = _f[0],
54
+ setLinkType = _f[1];
55
+ var _g = (0, _fortuneCore.locale)(context),
56
+ insertLink = _g.insertLink,
57
+ linkTypeList = _g.linkTypeList;
52
58
  var isLinkAddressValid = (0, _fortuneCore.isLinkValid)(context, linkType, linkAddress);
53
59
  var isButtonDisabled = (0, _react.useMemo)(function () {
54
60
  if (!linkText.trim()) return true;
@@ -84,13 +90,20 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
84
90
  return e.stopPropagation();
85
91
  },
86
92
  onKeyDown: function onKeyDown(e) {
87
- return e.stopPropagation();
93
+ e.stopPropagation();
94
+ if (isButtonDisabled) return;
95
+ if (e.key === "Enter") {
96
+ _lodash.default.set(refs.globalCache, "linkCard.mouseEnter", false);
97
+ setContext(function (draftCtx) {
98
+ return (0, _fortuneCore.saveHyperlink)(draftCtx, r, c, linkText, linkType, linkAddress);
99
+ });
100
+ }
88
101
  },
89
102
  onDoubleClick: function onDoubleClick(e) {
90
103
  return e.stopPropagation();
91
104
  }
92
105
  };
93
- }, [refs.globalCache]);
106
+ }, [refs.globalCache, isButtonDisabled]);
94
107
  var renderToolbarButton = (0, _react.useCallback)(function (iconId, onClick) {
95
108
  return /*#__PURE__*/_react.default.createElement("div", {
96
109
  className: "fortune-toolbar-button",
@@ -109,6 +122,40 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
109
122
  setLinkText(originText);
110
123
  setLinkType(originType);
111
124
  }, [rc, originAddress, originText, originType]);
125
+ (0, _react.useEffect)(function () {
126
+ var dragHandle = document.querySelector(".luckysheet-cs-draghandle-top.luckysheet-cs-draghandle");
127
+ var card = cardRef.current;
128
+ if (!dragHandle || !card) {
129
+ setCardTop(position.cellBottom + 8);
130
+ return;
131
+ }
132
+ var dragRect = dragHandle.getBoundingClientRect();
133
+ var cardRect = card.getBoundingClientRect();
134
+ var viewportHeight = window.innerHeight;
135
+ var spaceBelow = viewportHeight - dragRect.bottom;
136
+ var spaceAbove = dragRect.top;
137
+ var newTop;
138
+ if (spaceBelow < cardRect.height + 16 && spaceAbove > cardRect.height + 16) {
139
+ var cellTop = position.cellBottom - 30;
140
+ newTop = cellTop - cardRect.height - 8;
141
+ } else {
142
+ newTop = position.cellBottom + 8;
143
+ }
144
+ setCardTop(newTop);
145
+ }, [position.cellBottom, isEditing]);
146
+ (0, _react.useEffect)(function () {
147
+ var _a, _b;
148
+ if (linkAddressRef.current && !linkAddress && isEditing) {
149
+ (_a = linkAddressRef.current) === null || _a === void 0 ? void 0 : _a.focus({
150
+ preventScroll: true
151
+ });
152
+ }
153
+ if (linkTextRef.current && !linkText && isEditing) {
154
+ (_b = linkTextRef.current) === null || _b === void 0 ? void 0 : _b.focus({
155
+ preventScroll: true
156
+ });
157
+ }
158
+ }, [linkAddressRef, isEditing, linkTextRef]);
112
159
  if (!isEditing) {
113
160
  return /*#__PURE__*/_react.default.createElement("div", __assign({}, containerEvent, {
114
161
  onKeyDown: function onKeyDown(e) {
@@ -151,9 +198,10 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
151
198
  }
152
199
  return /*#__PURE__*/_react.default.createElement("div", __assign({
153
200
  className: "fortune-link-card",
201
+ ref: cardRef,
154
202
  style: {
155
203
  left: position.cellLeft + 20,
156
- top: position.cellBottom
204
+ top: cardTop
157
205
  }
158
206
  }, containerEvent), /*#__PURE__*/_react.default.createElement(_ui.Select, {
159
207
  value: linkType,
@@ -186,6 +234,7 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
186
234
  }, /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
187
235
  name: "ALargeSmall"
188
236
  })), /*#__PURE__*/_react.default.createElement(_ui.TextField, {
237
+ ref: linkTextRef,
189
238
  placeholder: "Display text",
190
239
  value: linkText,
191
240
  onChange: function onChange(e) {
@@ -201,6 +250,7 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
201
250
  width: 16,
202
251
  height: 16
203
252
  })), /*#__PURE__*/_react.default.createElement(_ui.TextField, {
253
+ ref: linkAddressRef,
204
254
  placeholder: "Paste URL",
205
255
  value: linkAddress,
206
256
  onChange: function onChange(e) {
@@ -314,12 +314,13 @@ var ColumnHeader = function ColumnHeader() {
314
314
  c1 = _a.c1,
315
315
  c2 = _a.c2;
316
316
  return /*#__PURE__*/_react.default.createElement("div", {
317
- className: "fortune-col-header-selected color-bg-tertiary",
317
+ className: "fortune-col-header-selected",
318
318
  key: i,
319
319
  style: _lodash.default.assign({
320
320
  left: col_pre,
321
321
  width: col - col_pre - 1,
322
322
  display: "block",
323
+ backgroundColor: "#EFC703",
323
324
  mixBlendMode: "multiply"
324
325
  }, (0, _fortuneCore.fixColumnStyleOverflowInFreeze)(context, c1, c2, (_b = refs.globalCache.freezen) === null || _b === void 0 ? void 0 : _b[context.currentSheetId]))
325
326
  });
@@ -6,6 +6,7 @@
6
6
  background: #fff;
7
7
  z-index: 1003;
8
8
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
9
+ border: 1px solid lavender;
9
10
  border-radius: 10px;
10
11
  }
11
12
 
@@ -62,7 +62,7 @@ var FormulaSearch = function FormulaSearch(props) {
62
62
  });
63
63
  if (_lodash.default.isEmpty(context.functionCandidates) && _lodash.default.isEmpty(context.defaultCandidates)) return null;
64
64
  return /*#__PURE__*/_react.default.createElement("div", {
65
- className: "flex color-border-default border flex-col luckysheet-formula-search-c-p custom-scroll",
65
+ className: "flex flex-col luckysheet-formula-search-c-p custom-scroll",
66
66
  id: "luckysheet-formula-search-c-p",
67
67
  style: {
68
68
  top: top
@@ -274,12 +274,13 @@ var RowHeader = function RowHeader() {
274
274
  r1 = _a.r1,
275
275
  r2 = _a.r2;
276
276
  return /*#__PURE__*/_react.default.createElement("div", {
277
- className: "fortune-row-header-selected color-bg-tertiary",
277
+ className: "fortune-row-header-selected",
278
278
  key: i,
279
279
  style: _lodash.default.assign({
280
280
  top: row_pre,
281
281
  height: row - row_pre - 1,
282
282
  display: "block",
283
+ backgroundColor: "#EFC703",
283
284
  mixBlendMode: "multiply"
284
285
  }, (0, _fortuneCore.fixRowStyleOverflowInFreeze)(context, r1, r2, (_b = refs.globalCache.freezen) === null || _b === void 0 ? void 0 : _b[context.currentSheetId]))
285
286
  });
@@ -45,10 +45,12 @@
45
45
  .fortune-row-header-selected {
46
46
  position: absolute;
47
47
  z-index: 10;
48
+ border-right: 1px solid #0188fb;
48
49
  right: 0;
49
50
  width: 100%;
50
51
  margin-top: 2px;
51
52
  display: none;
53
+ background-color: rgba(76, 76, 76, 0.1);
52
54
  }
53
55
 
54
56
  .fortune-col-header-wrap {
@@ -92,10 +94,12 @@
92
94
  cursor: default;
93
95
  position: absolute;
94
96
  z-index: 10;
97
+ border-bottom: 1px solid #0188fb;
95
98
  bottom: 0;
96
99
  height: 100%;
97
100
  margin-left: 0px;
98
101
  display: none;
102
+ background-color: rgba(76, 76, 76, 0.1);
99
103
  }
100
104
 
101
105
  .fortune-left-top {
@@ -133,7 +137,7 @@
133
137
  z-index: 14;
134
138
  /*border:1px solid #fff;*/
135
139
  margin: 0px 0 0 0px;
136
- /* background: rgba(0, 80, 208, 0.15); */
140
+ background: rgba(0, 80, 208, 0.15);
137
141
  display: none;
138
142
  }
139
143
 
@@ -195,7 +199,7 @@
195
199
  z-index: 15;
196
200
  border: 2.5px solid #efc703;
197
201
  margin: -1px 0 0 -1px;
198
- background: rgba(239, 199, 5, 0.02);
202
+ background: rgba(1, 136, 251, 0.15);
199
203
  display: none;
200
204
  box-sizing: content-box;
201
205
  }
@@ -58,10 +58,7 @@ var Combo = function Combo(_a) {
58
58
  height: 16
59
59
  })) : (/*#__PURE__*/_react.default.createElement("span", {
60
60
  className: "fortune-toolbar-combo-text"
61
- }, text !== undefined ? text : "")), /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
62
- className: "w-[16px] h-[16px]",
63
- name: "ChevronDown"
64
- })))) : (/*#__PURE__*/_react.default.createElement("span", null, iconId === "font-color" ? (/*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
61
+ }, text !== undefined ? text : ""))))) : (/*#__PURE__*/_react.default.createElement("span", null, iconId === "font-color" ? (/*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
65
62
  text: tooltip,
66
63
  placement: "bottom"
67
64
  }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
@@ -141,24 +141,12 @@
141
141
 
142
142
  .fortune-toolbar-combo-button {
143
143
  font-size: 12px;
144
- padding-top: 4px;
145
- padding-bottom: 4px;
146
- padding-left: 8px;
147
- padding-right: 8px;
148
- border-radius: 4px;
149
- gap: 8px;
150
- }
151
- .fortune-toolbar-combo-button:hover {
152
- background: hsl(var(--color-bg-default-hover));
153
144
  }
154
145
 
155
146
  .fortune-toolbar-select-option {
156
147
  font-size: 12px;
157
148
  min-width: 60px;
158
- padding-left: 8px;
159
- padding-right: 8px;
160
- padding-top: 6px;
161
- padding-bottom: 6px;
149
+ padding: 8px;
162
150
  cursor: pointer;
163
151
  user-select: none;
164
152
  }
@@ -183,10 +171,6 @@
183
171
  font-weight: 500;
184
172
  font-size: 14px;
185
173
  line-height: 20px;
186
- max-width: 56px;
187
- overflow: hidden;
188
- text-overflow: ellipsis;
189
- white-space: nowrap;
190
174
  }
191
175
 
192
176
  .fortune-toolbar-color-picker-item {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fileverse-dev/fortune-react",
3
- "version": "1.2.0-patch-1",
3
+ "version": "1.2.0-patch-link-ux-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.2.0-patch-1",
19
+ "@fileverse-dev/fortune-core": "1.2.0-patch-link-ux-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",