@fileverse-dev/fortune-react 1.2.96 → 1.2.98-play
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/components/ConditionFormat/ConditionRules.js +20 -9
- package/es/components/DataVerification/RangeDialog.js +19 -8
- package/es/components/Dialog/index.css +37 -0
- package/es/components/Dialog/index.js +24 -10
- package/es/components/ErrorState/index.js +6 -3
- package/es/components/LinkEidtCard/index.js +21 -12
- package/es/components/NotationBoxes/index.js +2 -2
- package/es/components/Sheet/use-smooth-scroll.js +145 -0
- package/es/components/SheetOverlay/FormulaHint/index.js +48 -33
- package/es/components/SheetTab/SheetItem.js +29 -16
- package/es/components/SheetTab/index.js +35 -20
- package/es/components/Toolbar/Button.js +10 -3
- package/es/components/Toolbar/Combo.js +10 -2
- package/es/components/Toolbar/CustomButton.js +12 -3
- package/es/components/Toolbar/Select.js +7 -1
- package/es/components/Toolbar/index.css +7 -8
- package/es/components/Toolbar/index.js +2 -2
- package/lib/components/ConditionFormat/ConditionRules.js +20 -9
- package/lib/components/DataVerification/RangeDialog.js +19 -8
- package/lib/components/Dialog/index.css +37 -0
- package/lib/components/Dialog/index.js +24 -10
- package/lib/components/ErrorState/index.js +6 -3
- package/lib/components/LinkEidtCard/index.js +21 -12
- package/lib/components/NotationBoxes/index.js +2 -2
- package/lib/components/Sheet/use-smooth-scroll.js +145 -0
- package/lib/components/SheetOverlay/FormulaHint/index.js +48 -33
- package/lib/components/SheetTab/SheetItem.js +29 -16
- package/lib/components/SheetTab/index.js +35 -20
- package/lib/components/Toolbar/Button.js +10 -3
- package/lib/components/Toolbar/Combo.js +10 -2
- package/lib/components/Toolbar/CustomButton.js +12 -3
- package/lib/components/Toolbar/Select.js +7 -1
- package/lib/components/Toolbar/index.css +7 -8
- package/lib/components/Toolbar/index.js +2 -2
- package/package.json +2 -2
|
@@ -369,8 +369,10 @@ var ConditionRules = function ConditionRules(_a) {
|
|
|
369
369
|
setEditConditionRange(rangeEdit);
|
|
370
370
|
setEditConditionFormatValue(allConditionFormats[key].conditionValue);
|
|
371
371
|
},
|
|
372
|
-
className: "group flex items-center border-b border-gray-200 condition-list-parent",
|
|
373
|
-
key: key
|
|
372
|
+
className: "group flex items-center border-b border-gray-200 condition-list-parent fortune-condition-rules__item fortune-condition-rules__item--".concat(String(key).replace(/[^a-zA-Z0-9-]/g, "-").replace(/-+/g, "-")),
|
|
373
|
+
"data-condition-key": key,
|
|
374
|
+
key: key,
|
|
375
|
+
"data-testid": "condition-rules-item-".concat(key)
|
|
374
376
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
375
377
|
className: "condition-list-pill",
|
|
376
378
|
style: {
|
|
@@ -392,9 +394,11 @@ var ConditionRules = function ConditionRules(_a) {
|
|
|
392
394
|
buttonClickCreateRef.current = true;
|
|
393
395
|
}
|
|
394
396
|
}, /*#__PURE__*/_react.default.createElement("h3", {
|
|
395
|
-
className: "condition-list-type"
|
|
397
|
+
className: "fortune-condition-rules__heading condition-list-type",
|
|
398
|
+
"data-testid": "condition-rules-heading-".concat(key)
|
|
396
399
|
}, conditionformat[allConditionFormats[key].conditionName], " ", (_a = allConditionFormats[key].conditionValue) === null || _a === void 0 ? void 0 : _a[0]), /*#__PURE__*/_react.default.createElement("p", {
|
|
397
|
-
className: "condition-list-range"
|
|
400
|
+
className: "fortune-condition-rules__para condition-list-range",
|
|
401
|
+
"data-testid": "condition-rules-para-".concat(key)
|
|
398
402
|
}, (_b = allConditionFormats[key].cellrange) === null || _b === void 0 ? void 0 : _b.map(function (range) {
|
|
399
403
|
var startCol = (0, _helper.numberToColumn)(range.column[0] + 1);
|
|
400
404
|
var endCol = (0, _helper.numberToColumn)(range.column[1] + 1);
|
|
@@ -402,12 +406,15 @@ var ConditionRules = function ConditionRules(_a) {
|
|
|
402
406
|
var endRow = range.row[1] + 1;
|
|
403
407
|
return "".concat(startCol).concat(startRow, ":").concat(endCol).concat(endRow);
|
|
404
408
|
}).join(", "))), /*#__PURE__*/_react.default.createElement("div", {
|
|
405
|
-
className: "opacity-0 group-hover:opacity-100 transition-opacity"
|
|
409
|
+
className: "fortune-condition-rules__icon fortune-condition-rules__action opacity-0 group-hover:opacity-100 transition-opacity",
|
|
410
|
+
"data-condition-key": key,
|
|
411
|
+
"data-testid": "condition-rules-action-delete-".concat(key)
|
|
406
412
|
}, /*#__PURE__*/_react.default.createElement(_ui.IconButton, {
|
|
407
413
|
elevation: 1,
|
|
408
414
|
icon: "Trash2",
|
|
409
415
|
size: "md",
|
|
410
416
|
variant: "secondary",
|
|
417
|
+
className: "fortune-condition-rules__icon--trash",
|
|
411
418
|
style: {
|
|
412
419
|
border: "0px",
|
|
413
420
|
boxShadow: "none",
|
|
@@ -428,6 +435,7 @@ var ConditionRules = function ConditionRules(_a) {
|
|
|
428
435
|
leftIcon: "Plus",
|
|
429
436
|
size: "md",
|
|
430
437
|
variant: "secondary",
|
|
438
|
+
className: "fortune-condition-rules__cta fortune-condition-rules__cta--add",
|
|
431
439
|
onClick: function onClick() {
|
|
432
440
|
setType("greaterThan");
|
|
433
441
|
setCreate(true);
|
|
@@ -441,11 +449,13 @@ var ConditionRules = function ConditionRules(_a) {
|
|
|
441
449
|
});
|
|
442
450
|
editKeyRef.current = null;
|
|
443
451
|
buttonClickCreateRef.current = true;
|
|
444
|
-
}
|
|
452
|
+
},
|
|
453
|
+
"data-testid": "condition-rules-cta-add"
|
|
445
454
|
}, "Add another rule"))) : (/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
446
|
-
className: "flex flex-col"
|
|
455
|
+
className: "flex flex-col fortune-condition-rules__form"
|
|
447
456
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
448
|
-
className: "condition-rules-value text-heading-xsm"
|
|
457
|
+
className: "fortune-condition-rules__info condition-rules-value text-heading-xsm",
|
|
458
|
+
"data-testid": "condition-rules-info-range"
|
|
449
459
|
}, conditionformat.applyRange, " range"), /*#__PURE__*/_react.default.createElement(_ui.TextField, {
|
|
450
460
|
rightIcon: /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
|
|
451
461
|
name: "Grid2x2",
|
|
@@ -463,7 +473,8 @@ var ConditionRules = function ConditionRules(_a) {
|
|
|
463
473
|
dataSelectRange("conditionRules".concat(type));
|
|
464
474
|
}
|
|
465
475
|
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
|
|
466
|
-
className: "condition-rules-value text-heading-xsm"
|
|
476
|
+
className: "fortune-condition-rules__heading-sm condition-rules-value text-heading-xsm",
|
|
477
|
+
"data-testid": "condition-rules-heading-format"
|
|
467
478
|
}, "Format cells if"), /*#__PURE__*/_react.default.createElement(_ui.Select, {
|
|
468
479
|
value: type,
|
|
469
480
|
onValueChange: function onValueChange(value) {
|
|
@@ -47,7 +47,8 @@ var RangeDialog = function RangeDialog() {
|
|
|
47
47
|
}, [context, context.luckysheet_select_save]);
|
|
48
48
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
49
49
|
id: "range-dialog",
|
|
50
|
-
className: "fortune-dialog",
|
|
50
|
+
className: "fortune-dialog fortune-range-dialog",
|
|
51
|
+
"data-testid": "range-dialog",
|
|
51
52
|
onClick: function onClick(e) {
|
|
52
53
|
return e.stopPropagation();
|
|
53
54
|
},
|
|
@@ -65,32 +66,41 @@ var RangeDialog = function RangeDialog() {
|
|
|
65
66
|
},
|
|
66
67
|
tabIndex: 0
|
|
67
68
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
68
|
-
className: (0, _ui.cn)("flex items-center justify-between border-b color-border-default py-3 px-6")
|
|
69
|
+
className: (0, _ui.cn)("fortune-range-dialog__header flex items-center justify-between border-b color-border-default py-3 px-6"),
|
|
70
|
+
"data-testid": "range-dialog-header"
|
|
69
71
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
-
className: "text-heading-sm"
|
|
72
|
+
className: "fortune-range-dialog__heading text-heading-sm",
|
|
73
|
+
"data-testid": "range-dialog-heading"
|
|
71
74
|
}, dataVerification.selectCellRange), /*#__PURE__*/_react.default.createElement(_ui.IconButton, {
|
|
72
75
|
icon: "X",
|
|
73
76
|
variant: "ghost",
|
|
74
77
|
onClick: close,
|
|
75
|
-
tabIndex: 0
|
|
78
|
+
tabIndex: 0,
|
|
79
|
+
className: "fortune-range-dialog__icon fortune-range-dialog__icon--close",
|
|
80
|
+
"data-testid": "range-dialog-icon-close"
|
|
76
81
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
77
|
-
className: "px-6 pb-6 pt-4 text-body-sm"
|
|
82
|
+
className: "fortune-range-dialog__para px-6 pb-6 pt-4 text-body-sm",
|
|
83
|
+
"data-testid": "range-dialog-para"
|
|
78
84
|
}, /*#__PURE__*/_react.default.createElement(_ui.TextField, {
|
|
79
85
|
className: "w-full",
|
|
80
86
|
readOnly: true,
|
|
81
87
|
placeholder: dataVerification.selectCellRange2,
|
|
82
88
|
value: rangeTxt2
|
|
83
89
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
84
|
-
className: "px-6 pb-6 flex flex-row gap-2 justify-end"
|
|
90
|
+
className: "fortune-range-dialog__actions px-6 pb-6 flex flex-row gap-2 justify-end",
|
|
91
|
+
"data-testid": "range-dialog-actions"
|
|
85
92
|
}, /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
86
93
|
variant: "secondary",
|
|
94
|
+
className: "fortune-range-dialog__cta fortune-range-dialog__cta--close",
|
|
87
95
|
style: {
|
|
88
96
|
minWidth: "80px"
|
|
89
97
|
},
|
|
90
98
|
onClick: close,
|
|
91
|
-
tabIndex: 0
|
|
99
|
+
tabIndex: 0,
|
|
100
|
+
"data-testid": "range-dialog-cta-close"
|
|
92
101
|
}, button.close), /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
93
102
|
variant: "default",
|
|
103
|
+
className: "fortune-range-dialog__cta fortune-range-dialog__cta--confirm",
|
|
94
104
|
style: {
|
|
95
105
|
minWidth: "80px"
|
|
96
106
|
},
|
|
@@ -100,7 +110,8 @@ var RangeDialog = function RangeDialog() {
|
|
|
100
110
|
});
|
|
101
111
|
close();
|
|
102
112
|
},
|
|
103
|
-
tabIndex: 0
|
|
113
|
+
tabIndex: 0,
|
|
114
|
+
"data-testid": "range-dialog-cta-confirm"
|
|
104
115
|
}, button.confirm)));
|
|
105
116
|
};
|
|
106
117
|
var _default = exports.default = RangeDialog;
|
|
@@ -9,6 +9,43 @@
|
|
|
9
9
|
overflow: auto;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/* BEM selectors for testing and styling */
|
|
13
|
+
.fortune-dialog__header {
|
|
14
|
+
/* header container */
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.fortune-dialog__heading {
|
|
18
|
+
/* dialog title */
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.fortune-dialog__para {
|
|
22
|
+
/* dialog body content */
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.fortune-dialog__icon {
|
|
26
|
+
/* icon in header (e.g. close) */
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.fortune-dialog__icon--close {
|
|
30
|
+
/* close button icon */
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.fortune-dialog__actions {
|
|
34
|
+
/* footer action container */
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.fortune-dialog__cta {
|
|
38
|
+
/* primary/secondary action button */
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.fortune-dialog__cta--cancel {
|
|
42
|
+
/* cancel button */
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.fortune-dialog__cta--confirm {
|
|
46
|
+
/* confirm/ok button */
|
|
47
|
+
}
|
|
48
|
+
|
|
12
49
|
.fortune-dialog-box-button-container {
|
|
13
50
|
display: flex;
|
|
14
51
|
align-items: center;
|
|
@@ -36,46 +36,60 @@ var Dialog = function Dialog(_a) {
|
|
|
36
36
|
var button = (0, _fortuneCore.locale)(context).button;
|
|
37
37
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
38
38
|
className: "fortune-dialog",
|
|
39
|
+
"data-testid": "dialog",
|
|
39
40
|
style: __assign(__assign({}, containerStyle), ["Data validation", "Split text to columns", "Resize column"].includes(title) ? {
|
|
40
41
|
maxWidth: "unset"
|
|
41
42
|
} : {})
|
|
42
43
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
43
|
-
className: (0, _ui.cn)("flex items-center justify-between border-b color-border-default py-3 px-6")
|
|
44
|
+
className: (0, _ui.cn)("fortune-dialog__header flex items-center justify-between border-b color-border-default py-3 px-6"),
|
|
45
|
+
"data-testid": "dialog-header"
|
|
44
46
|
}, title ? (/*#__PURE__*/_react.default.createElement("div", {
|
|
45
|
-
className: "text-heading-sm"
|
|
47
|
+
className: "fortune-dialog__heading text-heading-sm",
|
|
48
|
+
"data-testid": "dialog-heading"
|
|
46
49
|
}, title)) : (/*#__PURE__*/_react.default.createElement("div", {
|
|
47
|
-
className: "text-heading-sm"
|
|
50
|
+
className: "fortune-dialog__heading text-heading-sm",
|
|
51
|
+
"data-testid": "dialog-heading"
|
|
48
52
|
}, "Oops! Something went wrong")), /*#__PURE__*/_react.default.createElement(_ui.IconButton, {
|
|
49
53
|
icon: "X",
|
|
50
54
|
variant: "ghost",
|
|
51
55
|
onClick: onCancel,
|
|
52
|
-
tabIndex: 0
|
|
56
|
+
tabIndex: 0,
|
|
57
|
+
className: "fortune-dialog__icon fortune-dialog__icon--close",
|
|
58
|
+
"data-testid": "dialog-icon-close"
|
|
53
59
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
54
|
-
className: "px-6 pb-6 pt-4 text-body-sm",
|
|
55
|
-
style: contentStyle
|
|
60
|
+
className: "fortune-dialog__para px-6 pb-6 pt-4 text-body-sm",
|
|
61
|
+
style: contentStyle,
|
|
62
|
+
"data-testid": "dialog-para"
|
|
56
63
|
}, children), type != null && (/*#__PURE__*/_react.default.createElement("div", {
|
|
57
|
-
className: "px-6 pb-6 flex flex-row gap-2 justify-end"
|
|
64
|
+
className: "fortune-dialog__actions px-6 pb-6 flex flex-row gap-2 justify-end",
|
|
65
|
+
"data-testid": "dialog-actions"
|
|
58
66
|
}, type === "ok" ? (/*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
59
67
|
variant: "default",
|
|
68
|
+
className: "fortune-dialog__cta fortune-dialog__cta--confirm",
|
|
60
69
|
style: {
|
|
61
70
|
minWidth: "80px"
|
|
62
71
|
},
|
|
63
72
|
onClick: onOk,
|
|
64
|
-
tabIndex: 0
|
|
73
|
+
tabIndex: 0,
|
|
74
|
+
"data-testid": "dialog-cta-confirm"
|
|
65
75
|
}, okLabel || button.confirm)) : (/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
66
76
|
variant: "secondary",
|
|
77
|
+
className: "fortune-dialog__cta fortune-dialog__cta--cancel",
|
|
67
78
|
style: {
|
|
68
79
|
minWidth: "80px"
|
|
69
80
|
},
|
|
70
81
|
onClick: onCancel,
|
|
71
|
-
tabIndex: 0
|
|
82
|
+
tabIndex: 0,
|
|
83
|
+
"data-testid": "dialog-cta-cancel"
|
|
72
84
|
}, cancelLabel || button.cancel), /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
73
85
|
variant: "default",
|
|
86
|
+
className: "fortune-dialog__cta fortune-dialog__cta--confirm",
|
|
74
87
|
style: {
|
|
75
88
|
minWidth: "80px"
|
|
76
89
|
},
|
|
77
90
|
onClick: onOk,
|
|
78
|
-
tabIndex: 0
|
|
91
|
+
tabIndex: 0,
|
|
92
|
+
"data-testid": "dialog-cta-confirm"
|
|
79
93
|
}, okLabel || button.confirm))))));
|
|
80
94
|
};
|
|
81
95
|
var _default = exports.default = Dialog;
|
|
@@ -31,11 +31,14 @@ var ErrorBoxes = function ErrorBoxes() {
|
|
|
31
31
|
zIndex: 100,
|
|
32
32
|
borderRadius: "4px"
|
|
33
33
|
},
|
|
34
|
-
className: "shadow-lg flex flex-col gap-2 break-all"
|
|
34
|
+
className: "fortune-error-state shadow-lg flex flex-col gap-2 break-all",
|
|
35
|
+
"data-testid": "error-state"
|
|
35
36
|
}, /*#__PURE__*/_react.default.createElement("h3", {
|
|
36
|
-
className: "text-heading-xsm color-text-danger"
|
|
37
|
+
className: "fortune-error-state__heading text-heading-xsm color-text-danger",
|
|
38
|
+
"data-testid": "error-state-heading"
|
|
37
39
|
}, title), /*#__PURE__*/_react.default.createElement("div", {
|
|
38
|
-
className: "color-text-default text-body-sm"
|
|
40
|
+
className: "fortune-error-state__para color-text-default text-body-sm",
|
|
41
|
+
"data-testid": "error-state-para"
|
|
39
42
|
}, message));
|
|
40
43
|
};
|
|
41
44
|
var _default = exports.default = ErrorBoxes;
|
|
@@ -105,10 +105,13 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
|
|
|
105
105
|
};
|
|
106
106
|
}, [refs.globalCache, isButtonDisabled]);
|
|
107
107
|
var renderToolbarButton = (0, _react.useCallback)(function (iconId, onClick) {
|
|
108
|
+
var iconIdClass = iconId.replace(/[^a-zA-Z0-9-]/g, "-").replace(/-+/g, "-");
|
|
108
109
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
109
|
-
className: "fortune-toolbar-button",
|
|
110
|
+
className: "fortune-link-card__icon fortune-link-card__action fortune-link-card__action--".concat(iconIdClass, " fortune-toolbar-button"),
|
|
111
|
+
"data-icon-id": iconId,
|
|
110
112
|
onClick: onClick,
|
|
111
|
-
tabIndex: 0
|
|
113
|
+
tabIndex: 0,
|
|
114
|
+
"data-testid": "link-card-action-".concat(iconId)
|
|
112
115
|
}, /*#__PURE__*/_react.default.createElement(_SVGIcon.default, {
|
|
113
116
|
name: iconId,
|
|
114
117
|
style: {
|
|
@@ -161,19 +164,21 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
|
|
|
161
164
|
onKeyDown: function onKeyDown(e) {
|
|
162
165
|
e.stopPropagation();
|
|
163
166
|
},
|
|
164
|
-
className: "fortune-link-modify-modal link-toolbar",
|
|
167
|
+
className: "fortune-link-card fortune-link-modify-modal link-toolbar",
|
|
165
168
|
style: {
|
|
166
169
|
left: position.cellLeft + 20,
|
|
167
170
|
top: position.cellBottom - 5
|
|
168
|
-
}
|
|
171
|
+
},
|
|
172
|
+
"data-testid": "link-card"
|
|
169
173
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
170
|
-
className: "link-content",
|
|
174
|
+
className: "fortune-link-card__info link-content",
|
|
171
175
|
onClick: function onClick() {
|
|
172
176
|
setContext(function (draftCtx) {
|
|
173
177
|
return (0, _fortuneCore.goToLink)(draftCtx, r, c, linkType, linkAddress, refs.scrollbarX.current, refs.scrollbarY.current);
|
|
174
178
|
});
|
|
175
179
|
},
|
|
176
|
-
tabIndex: 0
|
|
180
|
+
tabIndex: 0,
|
|
181
|
+
"data-testid": "link-card-info-open"
|
|
177
182
|
}, linkType === "webpage" ? insertLink.openLink : (0, _fortuneCore.replaceHtml)(insertLink.goTo, {
|
|
178
183
|
linkAddress: linkAddress
|
|
179
184
|
})), context.allowEdit === true && /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -197,13 +202,15 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
|
|
|
197
202
|
}));
|
|
198
203
|
}
|
|
199
204
|
return /*#__PURE__*/_react.default.createElement("div", __assign({
|
|
200
|
-
className: "fortune-link-card",
|
|
205
|
+
className: "fortune-link-card fortune-link-card--editing",
|
|
201
206
|
ref: cardRef,
|
|
202
207
|
style: {
|
|
203
208
|
left: position.cellLeft + 20,
|
|
204
209
|
top: cardTop
|
|
205
210
|
}
|
|
206
|
-
}, containerEvent
|
|
211
|
+
}, containerEvent, {
|
|
212
|
+
"data-testid": "link-card-editing"
|
|
213
|
+
}), /*#__PURE__*/_react.default.createElement(_ui.Select, {
|
|
207
214
|
value: linkType,
|
|
208
215
|
onValueChange: function onValueChange(value) {
|
|
209
216
|
if (value === "sheet") {
|
|
@@ -228,9 +235,10 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
|
|
|
228
235
|
value: type.value
|
|
229
236
|
}, type.text);
|
|
230
237
|
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
231
|
-
className: "fortune-input-with-icon"
|
|
238
|
+
className: "fortune-link-card__para fortune-input-with-icon",
|
|
239
|
+
"data-testid": "link-card-para-text"
|
|
232
240
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
233
|
-
className: "input-icon"
|
|
241
|
+
className: "fortune-link-card__icon input-icon"
|
|
234
242
|
}, /*#__PURE__*/_react.default.createElement(_ui.LucideIcon, {
|
|
235
243
|
name: "ALargeSmall"
|
|
236
244
|
})), /*#__PURE__*/_react.default.createElement(_ui.TextField, {
|
|
@@ -283,7 +291,7 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
|
|
|
283
291
|
value: sheet.name
|
|
284
292
|
}, sheet.name);
|
|
285
293
|
}))))), /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
286
|
-
className: "fortune-insert-button",
|
|
294
|
+
className: "fortune-link-card__cta fortune-insert-button",
|
|
287
295
|
disabled: isButtonDisabled,
|
|
288
296
|
onClick: function onClick() {
|
|
289
297
|
if (isButtonDisabled) return;
|
|
@@ -291,7 +299,8 @@ var LinkEditCard = exports.LinkEditCard = function LinkEditCard(_a) {
|
|
|
291
299
|
setContext(function (draftCtx) {
|
|
292
300
|
return (0, _fortuneCore.saveHyperlink)(draftCtx, r, c, linkText, linkType, linkAddress);
|
|
293
301
|
});
|
|
294
|
-
}
|
|
302
|
+
},
|
|
303
|
+
"data-testid": "link-card-cta-insert"
|
|
295
304
|
}, "Insert link"));
|
|
296
305
|
};
|
|
297
306
|
var _default = exports.default = LinkEditCard;
|
|
@@ -83,7 +83,7 @@ var NotationBoxes = function NotationBoxes() {
|
|
|
83
83
|
position: "absolute",
|
|
84
84
|
left: size.left,
|
|
85
85
|
top: size.top,
|
|
86
|
-
zIndex:
|
|
86
|
+
zIndex: 400,
|
|
87
87
|
pointerEvents: "none"
|
|
88
88
|
}
|
|
89
89
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -92,7 +92,7 @@ var NotationBoxes = function NotationBoxes() {
|
|
|
92
92
|
position: "absolute",
|
|
93
93
|
left: left,
|
|
94
94
|
top: top,
|
|
95
|
-
zIndex: isEditing ?
|
|
95
|
+
zIndex: isEditing ? 500 : 400,
|
|
96
96
|
boxShadow: "0 1px 1px #0000002e,0 4px 8px #0000001a"
|
|
97
97
|
},
|
|
98
98
|
onMouseDown: function onMouseDown(e) {
|
|
@@ -69,6 +69,147 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
|
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
+
function handleMouseDragScroll(containerEl, scrollHandler, getPixelScale) {
|
|
73
|
+
var isDragging = false;
|
|
74
|
+
var startX = 0;
|
|
75
|
+
var startY = 0;
|
|
76
|
+
var lastX = 0;
|
|
77
|
+
var lastY = 0;
|
|
78
|
+
var velocityX = 0;
|
|
79
|
+
var velocityY = 0;
|
|
80
|
+
var autoScrollAnimationId = 0;
|
|
81
|
+
var lastMoveTime = 0;
|
|
82
|
+
var scrollDirection = "none";
|
|
83
|
+
var VELOCITY_SMOOTHING = 0.3;
|
|
84
|
+
var MIN_DRAG_THRESHOLD = 5;
|
|
85
|
+
var ACCELERATION_FACTOR = 1.02;
|
|
86
|
+
var MAX_VELOCITY = 50;
|
|
87
|
+
var DIRECTION_LOCK_THRESHOLD = 1.5;
|
|
88
|
+
var EDGE_SCROLL_ZONE = 10;
|
|
89
|
+
function stopAutoScroll() {
|
|
90
|
+
if (autoScrollAnimationId) {
|
|
91
|
+
cancelAnimationFrame(autoScrollAnimationId);
|
|
92
|
+
autoScrollAnimationId = 0;
|
|
93
|
+
}
|
|
94
|
+
velocityX = 0;
|
|
95
|
+
velocityY = 0;
|
|
96
|
+
}
|
|
97
|
+
function autoScroll() {
|
|
98
|
+
if (!isDragging) {
|
|
99
|
+
stopAutoScroll();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (Math.abs(velocityX) > 0.1) {
|
|
103
|
+
velocityX *= ACCELERATION_FACTOR;
|
|
104
|
+
velocityX = Math.max(-MAX_VELOCITY, Math.min(MAX_VELOCITY, velocityX));
|
|
105
|
+
}
|
|
106
|
+
if (Math.abs(velocityY) > 0.1) {
|
|
107
|
+
velocityY *= ACCELERATION_FACTOR;
|
|
108
|
+
velocityY = Math.max(-MAX_VELOCITY, Math.min(MAX_VELOCITY, velocityY));
|
|
109
|
+
}
|
|
110
|
+
var scale = getPixelScale();
|
|
111
|
+
scrollHandler(velocityX * scale, velocityY * scale);
|
|
112
|
+
autoScrollAnimationId = requestAnimationFrame(autoScroll);
|
|
113
|
+
}
|
|
114
|
+
function onMouseDown(e) {
|
|
115
|
+
if (e.button !== 0) return;
|
|
116
|
+
var target = e.target;
|
|
117
|
+
if (target.tagName === "INPUT" || target.tagName === "BUTTON" || target.tagName === "SELECT" || target.tagName === "TEXTAREA" || target.closest("button") || target.closest("input")) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
isDragging = true;
|
|
121
|
+
scrollDirection = "none";
|
|
122
|
+
startX = e.clientX;
|
|
123
|
+
startY = e.clientY;
|
|
124
|
+
lastX = e.clientX;
|
|
125
|
+
lastY = e.clientY;
|
|
126
|
+
lastMoveTime = performance.now();
|
|
127
|
+
velocityX = 0;
|
|
128
|
+
velocityY = 0;
|
|
129
|
+
containerEl.style.cursor = "grabbing";
|
|
130
|
+
e.preventDefault();
|
|
131
|
+
}
|
|
132
|
+
function onMouseMove(e) {
|
|
133
|
+
if (!isDragging) return;
|
|
134
|
+
var currentTime = performance.now();
|
|
135
|
+
var deltaTime = Math.max(1, currentTime - lastMoveTime);
|
|
136
|
+
var deltaX = e.clientX - lastX;
|
|
137
|
+
var deltaY = e.clientY - lastY;
|
|
138
|
+
var totalMovedX = e.clientX - startX;
|
|
139
|
+
var totalMovedY = e.clientY - startY;
|
|
140
|
+
var absMovedX = Math.abs(totalMovedX);
|
|
141
|
+
var absMovedY = Math.abs(totalMovedY);
|
|
142
|
+
var containerRect = containerEl.getBoundingClientRect();
|
|
143
|
+
var mouseX = e.clientX - containerRect.left;
|
|
144
|
+
var mouseY = e.clientY - containerRect.top;
|
|
145
|
+
var isNearLeftEdge = mouseX < EDGE_SCROLL_ZONE;
|
|
146
|
+
var isNearRightEdge = mouseX > containerRect.width - EDGE_SCROLL_ZONE;
|
|
147
|
+
var isNearTopEdge = mouseY < EDGE_SCROLL_ZONE;
|
|
148
|
+
var isNearBottomEdge = mouseY > containerRect.height - EDGE_SCROLL_ZONE;
|
|
149
|
+
if (scrollDirection === "none" && (absMovedX > MIN_DRAG_THRESHOLD || absMovedY > MIN_DRAG_THRESHOLD)) {
|
|
150
|
+
if (absMovedX > absMovedY * DIRECTION_LOCK_THRESHOLD) {
|
|
151
|
+
scrollDirection = "horizontal";
|
|
152
|
+
} else if (absMovedY > absMovedX * DIRECTION_LOCK_THRESHOLD) {
|
|
153
|
+
scrollDirection = "vertical";
|
|
154
|
+
} else {
|
|
155
|
+
scrollDirection = "none";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (scrollDirection === "horizontal" || scrollDirection === "none") {
|
|
159
|
+
if (absMovedX > MIN_DRAG_THRESHOLD) {
|
|
160
|
+
if (isNearLeftEdge || isNearRightEdge) {
|
|
161
|
+
if (Math.abs(deltaX) > 0.1) {
|
|
162
|
+
var instantVelocityX = deltaX / deltaTime * 16;
|
|
163
|
+
velocityX = velocityX * (1 - VELOCITY_SMOOTHING) + instantVelocityX * VELOCITY_SMOOTHING;
|
|
164
|
+
}
|
|
165
|
+
if (!autoScrollAnimationId) {
|
|
166
|
+
autoScrollAnimationId = requestAnimationFrame(autoScroll);
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
velocityX = 0;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
} else {
|
|
173
|
+
velocityX = 0;
|
|
174
|
+
}
|
|
175
|
+
if (scrollDirection === "vertical" || scrollDirection === "none") {
|
|
176
|
+
if (absMovedY > MIN_DRAG_THRESHOLD) {
|
|
177
|
+
if (isNearTopEdge || isNearBottomEdge) {
|
|
178
|
+
if (Math.abs(deltaY) > 0.1) {
|
|
179
|
+
var instantVelocityY = deltaY / deltaTime * 16;
|
|
180
|
+
velocityY = velocityY * (1 - VELOCITY_SMOOTHING) + instantVelocityY * VELOCITY_SMOOTHING;
|
|
181
|
+
}
|
|
182
|
+
if (!autoScrollAnimationId) {
|
|
183
|
+
autoScrollAnimationId = requestAnimationFrame(autoScroll);
|
|
184
|
+
}
|
|
185
|
+
} else {
|
|
186
|
+
velocityY = 0;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
velocityY = 0;
|
|
191
|
+
}
|
|
192
|
+
lastX = e.clientX;
|
|
193
|
+
lastY = e.clientY;
|
|
194
|
+
lastMoveTime = currentTime;
|
|
195
|
+
e.preventDefault();
|
|
196
|
+
}
|
|
197
|
+
function onMouseUp() {
|
|
198
|
+
if (!isDragging) return;
|
|
199
|
+
isDragging = false;
|
|
200
|
+
stopAutoScroll();
|
|
201
|
+
containerEl.style.cursor = "";
|
|
202
|
+
}
|
|
203
|
+
containerEl.addEventListener("mousedown", onMouseDown);
|
|
204
|
+
window.addEventListener("mousemove", onMouseMove);
|
|
205
|
+
window.addEventListener("mouseup", onMouseUp);
|
|
206
|
+
return function () {
|
|
207
|
+
stopAutoScroll();
|
|
208
|
+
containerEl.removeEventListener("mousedown", onMouseDown);
|
|
209
|
+
window.removeEventListener("mousemove", onMouseMove);
|
|
210
|
+
window.removeEventListener("mouseup", onMouseUp);
|
|
211
|
+
};
|
|
212
|
+
}
|
|
72
213
|
function handleMobileScroll(containerEl, scrollHandler, getPixelScale) {
|
|
73
214
|
var isScrolling = false;
|
|
74
215
|
var gestureStartClientX = 0;
|
|
@@ -217,9 +358,13 @@ var useSmoothScroll = exports.useSmoothScroll = function useSmoothScroll(scrollC
|
|
|
217
358
|
var unmountMobileScrollHandler = handleMobileScroll(scrollContainerEl, scrollHandler, function () {
|
|
218
359
|
return (window.devicePixelRatio || 1) * context.zoomRatio;
|
|
219
360
|
});
|
|
361
|
+
var unmountMouseDragHandler = handleMouseDragScroll(scrollContainerEl, scrollHandler, function () {
|
|
362
|
+
return (window.devicePixelRatio || 1) * context.zoomRatio;
|
|
363
|
+
});
|
|
220
364
|
return function () {
|
|
221
365
|
unmountScrollHandler();
|
|
222
366
|
unmountMobileScrollHandler();
|
|
367
|
+
unmountMouseDragHandler();
|
|
223
368
|
};
|
|
224
369
|
}
|
|
225
370
|
(0, _react.useEffect)(function () {
|