one-design-next 0.0.83 → 0.0.85
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/dist/composer/index.js +81 -43
- package/package.json +1 -1
package/dist/composer/index.js
CHANGED
|
@@ -187,27 +187,35 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
187
187
|
setTriggerActiveIndex = _useState8[1];
|
|
188
188
|
/** trigger menu 的命令式句柄:导航语义在 SkillSlot 内,composer 只转发 ↑↓。 */
|
|
189
189
|
var triggerSkillSlotRef = useRef(null);
|
|
190
|
-
/**
|
|
190
|
+
/** 同步标记:handleTriggerKeyDown 已在本轮事件中取消了 trigger,
|
|
191
|
+
* onPressEnter 检测此标记以跳过 stale triggerMenuVisible 拦截。 */
|
|
192
|
+
var triggerDismissedRef = useRef(false);
|
|
193
|
+
/** 当 trigger 被 dismiss(无匹配 skill 按 Enter)时跳过 Popover 关闭动画 */
|
|
191
194
|
var _useState9 = useState(false),
|
|
192
195
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
+
skipTriggerTransition = _useState10[0],
|
|
197
|
+
setSkipTriggerTransition = _useState10[1];
|
|
198
|
+
/** lite 模式下由内容高度驱动的单行 / 多行布局状态。 */
|
|
196
199
|
var _useState11 = useState(false),
|
|
197
200
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
var _useState13 = useState(
|
|
201
|
+
expanded = _useState12[0],
|
|
202
|
+
setExpanded = _useState12[1];
|
|
203
|
+
/** full 模式下由右上角按钮控制的 50vh 展开态。 */
|
|
204
|
+
var _useState13 = useState(false),
|
|
202
205
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
203
|
-
|
|
204
|
-
|
|
206
|
+
fullExpanded = _useState14[0],
|
|
207
|
+
setFullExpanded = _useState14[1];
|
|
208
|
+
/** ComposerEditor 反馈的 editor 自然高度(offsetHeight,未 clamp),用于 lite 升格判断 */
|
|
209
|
+
var _useState15 = useState(0),
|
|
210
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
211
|
+
editorHeight = _useState16[0],
|
|
212
|
+
setEditorHeight = _useState16[1];
|
|
205
213
|
/** editor 内容是否真正达到 maxRows 触顶——配合 SCSS 控制 viewport overflow,
|
|
206
214
|
* 阻止升格 transition / 换行未触顶时的 scrollbar 闪现 */
|
|
207
|
-
var
|
|
208
|
-
|
|
209
|
-
atMax =
|
|
210
|
-
setAtMax =
|
|
215
|
+
var _useState17 = useState(false),
|
|
216
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
217
|
+
atMax = _useState18[0],
|
|
218
|
+
setAtMax = _useState18[1];
|
|
211
219
|
var fileInputRef = useRef(null);
|
|
212
220
|
var editorRef = useRef(null);
|
|
213
221
|
var boxRef = useRef(null);
|
|
@@ -226,10 +234,10 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
226
234
|
preventScroll: true
|
|
227
235
|
});
|
|
228
236
|
}, [disabled]);
|
|
229
|
-
var
|
|
230
|
-
|
|
231
|
-
paramEdit =
|
|
232
|
-
setParamEdit =
|
|
237
|
+
var _useState19 = useState(null),
|
|
238
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
239
|
+
paramEdit = _useState20[0],
|
|
240
|
+
setParamEdit = _useState20[1];
|
|
233
241
|
var openParamPanel = useCallback(function (chipId) {
|
|
234
242
|
if (!renderParamPanel) return;
|
|
235
243
|
requestAnimationFrame(function () {
|
|
@@ -564,10 +572,10 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
564
572
|
* 不夺回焦点时 Enter 会再次激活按钮而不是发送 */
|
|
565
573
|
(_editorRef$current15 = editorRef.current) === null || _editorRef$current15 === void 0 || _editorRef$current15.focus();
|
|
566
574
|
};
|
|
567
|
-
var
|
|
568
|
-
|
|
569
|
-
fileDragOver =
|
|
570
|
-
setFileDragOver =
|
|
575
|
+
var _useState21 = useState(false),
|
|
576
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
577
|
+
fileDragOver = _useState22[0],
|
|
578
|
+
setFileDragOver = _useState22[1];
|
|
571
579
|
var composerBoxFileDragAttrs = fileDragOver ? {
|
|
572
580
|
'data-odn-composer-file-drag': ''
|
|
573
581
|
} : {};
|
|
@@ -686,18 +694,26 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
686
694
|
return true;
|
|
687
695
|
}
|
|
688
696
|
if (e.key === 'Enter' && !e.shiftKey || e.key === 'Tab') {
|
|
689
|
-
var _ref6, _triggerSkillSlotRef$3, _triggerSkillSlotRef$4;
|
|
690
|
-
e.preventDefault();
|
|
697
|
+
var _ref6, _triggerSkillSlotRef$3, _triggerSkillSlotRef$4, _editorRef$current19;
|
|
691
698
|
var _skill = (_ref6 = (_triggerSkillSlotRef$3 = (_triggerSkillSlotRef$4 = triggerSkillSlotRef.current) === null || _triggerSkillSlotRef$4 === void 0 ? void 0 : _triggerSkillSlotRef$4.getActiveSkill()) !== null && _triggerSkillSlotRef$3 !== void 0 ? _triggerSkillSlotRef$3 : filteredSkills === null || filteredSkills === void 0 ? void 0 : filteredSkills[triggerActiveIndex]) !== null && _ref6 !== void 0 ? _ref6 : filteredSkillGroups === null || filteredSkillGroups === void 0 ? void 0 : filteredSkillGroups.flatMap(function (g) {
|
|
692
699
|
return g.skills;
|
|
693
700
|
})[triggerActiveIndex];
|
|
694
|
-
if (_skill)
|
|
695
|
-
|
|
701
|
+
if (_skill) {
|
|
702
|
+
e.preventDefault();
|
|
703
|
+
handleSelectSkill(_skill, 'trigger');
|
|
704
|
+
return true;
|
|
705
|
+
}
|
|
706
|
+
/* 过滤后列表为空(无匹配 skill):取消 trigger,让 Enter 继续走发送流程 */
|
|
707
|
+
(_editorRef$current19 = editorRef.current) === null || _editorRef$current19 === void 0 || _editorRef$current19.cancelTrigger();
|
|
708
|
+
setTriggerInfo(null);
|
|
709
|
+
setSkipTriggerTransition(true);
|
|
710
|
+
triggerDismissedRef.current = true;
|
|
711
|
+
return false;
|
|
696
712
|
}
|
|
697
713
|
if (e.key === 'Escape') {
|
|
698
|
-
var _editorRef$
|
|
714
|
+
var _editorRef$current20;
|
|
699
715
|
e.preventDefault();
|
|
700
|
-
(_editorRef$
|
|
716
|
+
(_editorRef$current20 = editorRef.current) === null || _editorRef$current20 === void 0 || _editorRef$current20.cancelTrigger();
|
|
701
717
|
setTriggerInfo(null);
|
|
702
718
|
return true;
|
|
703
719
|
}
|
|
@@ -705,15 +721,26 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
705
721
|
}, [filteredSkills, filteredSkillGroups, handleSelectSkill, triggerActiveIndex, triggerMenuVisible]);
|
|
706
722
|
|
|
707
723
|
/* trigger 浮 anchor:跟随 caret 的 0×0 隐形元素,给 Popover 当 children。
|
|
708
|
-
* Popover 需要 DOM children 当 reference,没有"虚拟 anchor" API,只能这么搞。
|
|
724
|
+
* Popover 需要 DOM children 当 reference,没有"虚拟 anchor" API,只能这么搞。
|
|
725
|
+
*
|
|
726
|
+
* 使用 position: absolute 而非 fixed——Drawer 等容器的 transform 会创建
|
|
727
|
+
* 新的 containing block,导致 fixed 定位失准。absolute 相对于最近 positioned
|
|
728
|
+
* 祖先([data-odn-composer] 有 position:relative),通过减去 offsetParent
|
|
729
|
+
* 的 viewport rect 得到正确的局部坐标。 */
|
|
709
730
|
var triggerAnchorRef = useRef(null);
|
|
710
731
|
useLayoutEffect(function () {
|
|
711
732
|
var el = triggerAnchorRef.current;
|
|
712
733
|
if (!el || !triggerInfo) return;
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
734
|
+
var offsetParent = el.offsetParent;
|
|
735
|
+
if (offsetParent) {
|
|
736
|
+
var parentRect = offsetParent.getBoundingClientRect();
|
|
737
|
+
el.style.left = "".concat(triggerInfo.rect.left - parentRect.left, "px");
|
|
738
|
+
el.style.top = "".concat(triggerInfo.rect.top - parentRect.top, "px");
|
|
739
|
+
} else {
|
|
740
|
+
// fallback:没有 offsetParent(比如 display:none),用 viewport 坐标
|
|
741
|
+
el.style.left = "".concat(triggerInfo.rect.left, "px");
|
|
742
|
+
el.style.top = "".concat(triggerInfo.rect.top, "px");
|
|
743
|
+
}
|
|
717
744
|
}, [triggerInfo]);
|
|
718
745
|
|
|
719
746
|
/* ---- Derived ---- */
|
|
@@ -1025,9 +1052,9 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
1025
1052
|
"data-odn-composer-file-input": true,
|
|
1026
1053
|
onChange: handleFileChange
|
|
1027
1054
|
});
|
|
1028
|
-
var paramPanelNode = function (_editorRef$current$ge4, _editorRef$
|
|
1055
|
+
var paramPanelNode = function (_editorRef$current$ge4, _editorRef$current21, _boxRef$current) {
|
|
1029
1056
|
if (!paramEdit || !renderParamPanel) return null;
|
|
1030
|
-
var chips = (_editorRef$current$ge4 = (_editorRef$
|
|
1057
|
+
var chips = (_editorRef$current$ge4 = (_editorRef$current21 = editorRef.current) === null || _editorRef$current21 === void 0 ? void 0 : _editorRef$current21.getChips()) !== null && _editorRef$current$ge4 !== void 0 ? _editorRef$current$ge4 : [];
|
|
1031
1058
|
var chip = chips.find(function (c) {
|
|
1032
1059
|
return c.id === paramEdit.chipId;
|
|
1033
1060
|
});
|
|
@@ -1037,8 +1064,8 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
1037
1064
|
chip: chip,
|
|
1038
1065
|
anchor: paramEdit.anchor,
|
|
1039
1066
|
onApply: function onApply(patch) {
|
|
1040
|
-
var _editorRef$
|
|
1041
|
-
(_editorRef$
|
|
1067
|
+
var _editorRef$current22;
|
|
1068
|
+
(_editorRef$current22 = editorRef.current) === null || _editorRef$current22 === void 0 || _editorRef$current22.updateChipData(chip.id, patch);
|
|
1042
1069
|
},
|
|
1043
1070
|
onClose: closeParamPanel
|
|
1044
1071
|
};
|
|
@@ -1067,7 +1094,10 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
1067
1094
|
onInlineRefClick: renderParamPanel ? handleInlineRefClick : undefined
|
|
1068
1095
|
/* 本轮只接 `/`,`@` 留给业务接 mention 搜索时再加 */,
|
|
1069
1096
|
triggers: ['/'],
|
|
1070
|
-
onTriggerChange:
|
|
1097
|
+
onTriggerChange: function onTriggerChange(info) {
|
|
1098
|
+
setTriggerInfo(info);
|
|
1099
|
+
if (info) setSkipTriggerTransition(false);
|
|
1100
|
+
},
|
|
1071
1101
|
onTriggerKeyDown: handleTriggerKeyDown,
|
|
1072
1102
|
onPasteFiles: addFilesFromList,
|
|
1073
1103
|
onHeightChange: function onHeightChange(height, overflow) {
|
|
@@ -1079,9 +1109,14 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
1079
1109
|
onPressEnter: function onPressEnter(e) {
|
|
1080
1110
|
if (e.nativeEvent.isComposing || e.keyCode === 229) return;
|
|
1081
1111
|
// trigger 浮层激活时,普通 Enter 留给浮层做选择;Shift+Enter 继续换行
|
|
1112
|
+
// 但若 handleTriggerKeyDown 已在本轮事件中取消了 trigger(列表为空),则放行
|
|
1082
1113
|
if (triggerMenuVisible && !e.shiftKey) {
|
|
1083
|
-
|
|
1084
|
-
|
|
1114
|
+
if (triggerDismissedRef.current) {
|
|
1115
|
+
triggerDismissedRef.current = false;
|
|
1116
|
+
} else {
|
|
1117
|
+
e.preventDefault();
|
|
1118
|
+
return false;
|
|
1119
|
+
}
|
|
1085
1120
|
}
|
|
1086
1121
|
var isSubmitKey = submitType === 'enter' ? !e.shiftKey : e.shiftKey;
|
|
1087
1122
|
if (!isSubmitKey) return; // 不阻止 → 让 editor 走默认 <br>
|
|
@@ -1103,11 +1138,14 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
1103
1138
|
placement: "topLeft",
|
|
1104
1139
|
offset: 4,
|
|
1105
1140
|
visible: triggerMenuVisible,
|
|
1141
|
+
transitionDuration: skipTriggerTransition ? 0 : undefined,
|
|
1106
1142
|
onVisibleChange: function onVisibleChange(v) {
|
|
1107
1143
|
if (!v) {
|
|
1108
|
-
var _editorRef$
|
|
1109
|
-
(_editorRef$
|
|
1144
|
+
var _editorRef$current23;
|
|
1145
|
+
(_editorRef$current23 = editorRef.current) === null || _editorRef$current23 === void 0 || _editorRef$current23.cancelTrigger();
|
|
1110
1146
|
setTriggerInfo(null);
|
|
1147
|
+
} else {
|
|
1148
|
+
setSkipTriggerTransition(false);
|
|
1111
1149
|
}
|
|
1112
1150
|
},
|
|
1113
1151
|
popupClassName: "odn-composer-skill-popup",
|
|
@@ -1131,7 +1169,7 @@ export var Composer = /*#__PURE__*/forwardRef(function Composer(_ref, ref) {
|
|
|
1131
1169
|
ref: triggerAnchorRef,
|
|
1132
1170
|
"data-odn-composer-trigger-anchor": true,
|
|
1133
1171
|
style: {
|
|
1134
|
-
position: '
|
|
1172
|
+
position: 'absolute',
|
|
1135
1173
|
width: 0,
|
|
1136
1174
|
height: 0,
|
|
1137
1175
|
pointerEvents: 'none'
|