@yuntijs/ui 1.0.0 → 1.1.0-beta.10
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/ChatItem/index.js +3 -2
- package/es/ChatItem/style.js +3 -2
- package/es/ChatItem/type.d.ts +4 -0
- package/es/Form/collapse-list/index.js +16 -9
- package/es/Form/collapse-list/utils.d.ts +1 -0
- package/es/Form/collapse-list/utils.js +2 -1
- package/es/Mentions/index.d.ts +13 -3
- package/es/Mentions/index.js +33 -19
- package/es/Mentions/plugins/editor-ref.d.ts +5 -0
- package/es/Mentions/plugins/editor-ref.js +13 -0
- package/es/Mentions/plugins/mention-converter.d.ts +32 -0
- package/es/Mentions/plugins/mention-converter.js +151 -0
- package/es/Mentions/plugins/mention-node/component.js +1 -1
- package/es/Mentions/plugins/mention-picker/hooks.js +1 -0
- package/es/Mentions/plugins/mention-picker/index.d.ts +4 -0
- package/es/Mentions/plugins/mention-picker/index.js +54 -13
- package/es/Mentions/plugins/mention-picker/menu-item.js +19 -3
- package/es/Mentions/plugins/mention-picker/style.js +1 -1
- package/es/Mentions/plugins/mention-picker/utils.d.ts +3 -1
- package/es/Mentions/plugins/mention-picker/utils.js +3 -0
- package/es/Mentions/plugins/shift-enter-key.d.ts +6 -0
- package/es/Mentions/plugins/shift-enter-key.js +48 -0
- package/es/Mentions/style.d.ts +1 -0
- package/es/Mentions/style.js +4 -4
- package/es/Mentions/types.d.ts +1 -0
- package/es/Mentions/utils.d.ts +1 -1
- package/es/Mentions/utils.js +11 -30
- package/es/MonacoEditor/base/helper.d.ts +4 -0
- package/es/MonacoEditor/base/helper.js +13 -4
- package/es/MonacoEditor/base/index.d.ts +2 -2
- package/es/MonacoEditor/base/index.js +33 -10
- package/es/MonacoEditor/base/style.js +1 -1
- package/es/MonacoEditor/index.js +1 -1
- package/es/SelectCard/index.js +1 -1
- package/es/hooks/useHighlight.d.ts +1 -3
- package/es/hooks/useHighlight.js +65 -67
- package/package.json +5 -5
- package/umd/index.min.js +1 -1
- package/umd/index.min.js.map +1 -1
- /package/es/Mentions/plugins/{OnBlurBlockPlugin.d.ts → on-blur-block.d.ts} +0 -0
- /package/es/Mentions/plugins/{OnBlurBlockPlugin.js → on-blur-block.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Flex } from 'antd';
|
|
2
2
|
import { escapeRegExp } from 'lodash-es';
|
|
3
|
-
import React, { memo, useMemo } from 'react';
|
|
3
|
+
import React, { memo, useEffect, useMemo, useRef } from 'react';
|
|
4
4
|
import Typography from "../../../Typography";
|
|
5
5
|
import { useStyles } from "./style";
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -43,6 +43,22 @@ export var MentionMenuItem = /*#__PURE__*/memo(function (_ref) {
|
|
|
43
43
|
before = _useMemo.before,
|
|
44
44
|
middle = _useMemo.middle,
|
|
45
45
|
after = _useMemo.after;
|
|
46
|
+
var ref = useRef(null);
|
|
47
|
+
|
|
48
|
+
// 自动滚动
|
|
49
|
+
useEffect(function () {
|
|
50
|
+
if (isSelected) {
|
|
51
|
+
var _ref$current;
|
|
52
|
+
ref === null || ref === void 0 || (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.scrollIntoView({
|
|
53
|
+
behavior: 'smooth',
|
|
54
|
+
block: 'nearest'
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}, [isSelected]);
|
|
58
|
+
useEffect(function () {
|
|
59
|
+
option.setRefElement(ref === null || ref === void 0 ? void 0 : ref.current);
|
|
60
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
61
|
+
}, []);
|
|
46
62
|
return /*#__PURE__*/_jsxs(Flex, {
|
|
47
63
|
align: "center",
|
|
48
64
|
className: styles.menuItem,
|
|
@@ -53,14 +69,14 @@ export var MentionMenuItem = /*#__PURE__*/memo(function (_ref) {
|
|
|
53
69
|
onMouseEnter: function onMouseEnter() {
|
|
54
70
|
return _onMouseEnter === null || _onMouseEnter === void 0 ? void 0 : _onMouseEnter(index, option);
|
|
55
71
|
},
|
|
56
|
-
ref:
|
|
72
|
+
ref: ref,
|
|
57
73
|
tabIndex: -1,
|
|
74
|
+
title: option.htmlTitle || option.label,
|
|
58
75
|
children: [showIcon && /*#__PURE__*/_jsx(Flex, {
|
|
59
76
|
className: styles.menuItemIcon,
|
|
60
77
|
children: option.icon
|
|
61
78
|
}), /*#__PURE__*/_jsxs("div", {
|
|
62
79
|
className: styles.menuItemLabel,
|
|
63
|
-
title: option.label,
|
|
64
80
|
children: [before, /*#__PURE__*/_jsx(Text, {
|
|
65
81
|
mark: true,
|
|
66
82
|
children: middle
|
|
@@ -7,7 +7,7 @@ export var useStyles = createStyles(function (_ref, _ref2) {
|
|
|
7
7
|
prefixCls = _ref.prefixCls;
|
|
8
8
|
var isSelected = _ref2.isSelected,
|
|
9
9
|
disabled = _ref2.disabled;
|
|
10
|
-
var selectedBg = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n background-color: ", ";\n "])), token.
|
|
10
|
+
var selectedBg = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n background-color: ", ";\n "])), token.colorFillTertiary);
|
|
11
11
|
return {
|
|
12
12
|
anchor: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n z-index: 9999;\n "]))),
|
|
13
13
|
menuEmpty: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n padding: ", "px;\n "])), token.padding),
|
|
@@ -3,6 +3,7 @@ import { MenuOption } from '@lexical/react/LexicalTypeaheadMenuPlugin';
|
|
|
3
3
|
export interface MentionMenuOptionInitParams {
|
|
4
4
|
label: string;
|
|
5
5
|
value: string;
|
|
6
|
+
title?: string;
|
|
6
7
|
data?: any;
|
|
7
8
|
icon?: JSX.Element;
|
|
8
9
|
extraElement?: JSX.Element;
|
|
@@ -16,6 +17,7 @@ export interface MentionMenuOptionInitParams {
|
|
|
16
17
|
export declare class MentionMenuOption extends MenuOption {
|
|
17
18
|
label: string;
|
|
18
19
|
value: string;
|
|
20
|
+
htmlTitle?: string;
|
|
19
21
|
title: string;
|
|
20
22
|
key: string;
|
|
21
23
|
icon?: JSX.Element;
|
|
@@ -27,5 +29,5 @@ export declare class MentionMenuOption extends MenuOption {
|
|
|
27
29
|
data?: any;
|
|
28
30
|
children?: MentionMenuOption[];
|
|
29
31
|
isChild?: boolean;
|
|
30
|
-
constructor({ label, value, data, icon, extraElement, keywords, keyboardShortcut, disabled, onSelect, children, isChild, }: MentionMenuOptionInitParams);
|
|
32
|
+
constructor({ label, value, title, data, icon, extraElement, keywords, keyboardShortcut, disabled, onSelect, children, isChild, }: MentionMenuOptionInitParams);
|
|
31
33
|
}
|
|
@@ -17,6 +17,7 @@ export var MentionMenuOption = /*#__PURE__*/function (_MenuOption) {
|
|
|
17
17
|
var _this;
|
|
18
18
|
var label = _ref.label,
|
|
19
19
|
value = _ref.value,
|
|
20
|
+
title = _ref.title,
|
|
20
21
|
data = _ref.data,
|
|
21
22
|
icon = _ref.icon,
|
|
22
23
|
extraElement = _ref.extraElement,
|
|
@@ -30,6 +31,7 @@ export var MentionMenuOption = /*#__PURE__*/function (_MenuOption) {
|
|
|
30
31
|
_this = _super.call(this, value);
|
|
31
32
|
_defineProperty(_assertThisInitialized(_this), "label", void 0);
|
|
32
33
|
_defineProperty(_assertThisInitialized(_this), "value", void 0);
|
|
34
|
+
_defineProperty(_assertThisInitialized(_this), "htmlTitle", void 0);
|
|
33
35
|
// for Tree, the same as label
|
|
34
36
|
_defineProperty(_assertThisInitialized(_this), "title", void 0);
|
|
35
37
|
// for Tree, the same as value
|
|
@@ -45,6 +47,7 @@ export var MentionMenuOption = /*#__PURE__*/function (_MenuOption) {
|
|
|
45
47
|
_defineProperty(_assertThisInitialized(_this), "isChild", void 0);
|
|
46
48
|
_this.value = value;
|
|
47
49
|
_this.label = label;
|
|
50
|
+
_this.htmlTitle = title;
|
|
48
51
|
_this.title = label;
|
|
49
52
|
_this.key = value;
|
|
50
53
|
_this.keywords = keywords || [];
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
3
|
+
import { CAN_USE_BEFORE_INPUT, IS_APPLE_WEBKIT, IS_IOS, IS_SAFARI } from '@lexical/utils';
|
|
4
|
+
import { $getRoot, $getSelection, $isRangeSelection, COMMAND_PRIORITY_LOW, INSERT_PARAGRAPH_COMMAND, KEY_ENTER_COMMAND } from 'lexical';
|
|
5
|
+
import { useEffect } from 'react';
|
|
6
|
+
export var ShiftEnterKeyPlugin = function ShiftEnterKeyPlugin(_ref) {
|
|
7
|
+
var onPressEnter = _ref.onPressEnter;
|
|
8
|
+
var _useLexicalComposerCo = useLexicalComposerContext(),
|
|
9
|
+
_useLexicalComposerCo2 = _slicedToArray(_useLexicalComposerCo, 1),
|
|
10
|
+
editor = _useLexicalComposerCo2[0];
|
|
11
|
+
useEffect(function () {
|
|
12
|
+
// https://github.com/facebook/lexical/discussions/4464#discussioncomment-5833227
|
|
13
|
+
editor.registerCommand(KEY_ENTER_COMMAND, function (event) {
|
|
14
|
+
var selection = $getSelection();
|
|
15
|
+
if (!$isRangeSelection(selection)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (event !== null) {
|
|
19
|
+
// If we have beforeinput, then we can avoid blocking
|
|
20
|
+
// the default behavior. This ensures that the iOS can
|
|
21
|
+
// intercept that we're actually inserting a paragraph,
|
|
22
|
+
// and autocomplete, autocapitalize etc work as intended.
|
|
23
|
+
// This can also cause a strange performance issue in
|
|
24
|
+
// Safari, where there is a noticeable pause due to
|
|
25
|
+
// preventing the key down of enter.
|
|
26
|
+
if ((IS_IOS || IS_SAFARI || IS_APPLE_WEBKIT) && CAN_USE_BEFORE_INPUT) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
if (event.shiftKey) {
|
|
31
|
+
return editor.dispatchCommand(INSERT_PARAGRAPH_COMMAND, void 0);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
event === null || event === void 0 || event.preventDefault();
|
|
35
|
+
var text = editor.read(function () {
|
|
36
|
+
return $getRoot().getTextContent();
|
|
37
|
+
});
|
|
38
|
+
var value = text.replaceAll('\n\n', '\n');
|
|
39
|
+
onPressEnter(value, {
|
|
40
|
+
event: event
|
|
41
|
+
});
|
|
42
|
+
return true;
|
|
43
|
+
},
|
|
44
|
+
// 优先级要低于 MentionPickerPlugin
|
|
45
|
+
COMMAND_PRIORITY_LOW);
|
|
46
|
+
}, [editor, onPressEnter]);
|
|
47
|
+
return null;
|
|
48
|
+
};
|
package/es/Mentions/style.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AutoSize } from './types';
|
|
2
2
|
export declare const useStyles: (props?: {
|
|
3
3
|
autoSize?: AutoSize | undefined;
|
|
4
|
+
code: boolean;
|
|
4
5
|
} | undefined) => import("antd-style").ReturnStyles<{
|
|
5
6
|
wrapper: import("antd-style").SerializedStyles;
|
|
6
7
|
placeholder: import("antd-style").SerializedStyles;
|
package/es/Mentions/style.js
CHANGED
|
@@ -8,13 +8,13 @@ var calculateHeight = function calculateHeight(rows) {
|
|
|
8
8
|
};
|
|
9
9
|
export var useStyles = createStyles(function (_ref, _ref2) {
|
|
10
10
|
var css = _ref.css,
|
|
11
|
-
token = _ref.token
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
token = _ref.token;
|
|
12
|
+
var autoSize = _ref2.autoSize,
|
|
13
|
+
code = _ref2.code;
|
|
14
14
|
return {
|
|
15
15
|
wrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n "]))),
|
|
16
16
|
placeholder: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n pointer-events: none;\n user-select: none;\n\n position: absolute;\n top: 0;\n left: 13px;\n\n height: ", "px;\n\n font-size: ", "px;\n line-height: ", "px;\n color: ", ";\n "])), inputHeight, token.fontSize, inputHeight, token.colorTextPlaceholder),
|
|
17
|
-
root: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n outline: none;\n border: 1px solid ", ";\n border-radius: ", "px;\n\n margin: 0;\n padding: 4px 11px;\n\n color: ", ";\n font-size: ", "px;\n font-family: ", ";\n\n display: inline-block;\n\n width: 100%;\n min-width: 0;\n\n ", "\n ", "\n overflow: auto;\n\n transition: all ", ";\n &:focus {\n border-color: ", ";\n }\n p {\n margin-bottom: 0;\n margin-block: 0 0;\n line-height: ", "px;\n }\n "])), token.colorBorder, token.borderRadius, token.colorText, token.fontSize, token.fontFamily, (autoSize === null || autoSize === void 0 ? void 0 : autoSize.minRows) && css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n min-height: ", "px;\n "])), calculateHeight(autoSize.minRows)), (autoSize === null || autoSize === void 0 ? void 0 : autoSize.maxRows) && css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n max-height: ", "px;\n "])), calculateHeight(autoSize.maxRows)), token.motionDurationMid, token.colorPrimaryBorder, lineHeight),
|
|
17
|
+
root: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n outline: none;\n border: 1px solid ", ";\n border-radius: ", "px;\n\n margin: 0;\n padding: 4px 11px;\n\n color: ", ";\n font-size: ", "px;\n .align-middle {\n vertical-align: middle;\n }\n font-family: ", ";\n\n display: inline-block;\n\n width: 100%;\n min-width: 0;\n\n ", "\n ", "\n overflow: auto;\n\n transition: all ", ";\n &:focus {\n border-color: ", ";\n }\n p {\n margin-bottom: 0;\n margin-block: 0 0;\n line-height: ", "px;\n }\n "])), token.colorBorder, token.borderRadius, token.colorText, token.fontSize, code ? token.fontFamilyCode : token.fontFamily, (autoSize === null || autoSize === void 0 ? void 0 : autoSize.minRows) && css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n min-height: ", "px;\n "])), calculateHeight(autoSize.minRows)), (autoSize === null || autoSize === void 0 ? void 0 : autoSize.maxRows) && css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n max-height: ", "px;\n "])), calculateHeight(autoSize.maxRows)), token.motionDurationMid, token.colorPrimaryBorder, lineHeight),
|
|
18
18
|
filled: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n background: ", ";\n border-color: transparent;\n &:hover {\n background: ", ";\n }\n &:focus {\n background: ", ";\n }\n "])), token.colorFillTertiary, token.colorFillSecondary, token.colorBgBase),
|
|
19
19
|
borderless: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n background: transparent;\n border: none;\n "]))),
|
|
20
20
|
disabled: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n cursor: not-allowed;\n color: ", ";\n background: ", ";\n "])), token.colorTextDisabled, token.colorBgContainerDisabled)
|
package/es/Mentions/types.d.ts
CHANGED
package/es/Mentions/utils.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ export declare const DELETE_MENTION_COMMAND: import("lexical").LexicalCommand<un
|
|
|
6
6
|
export declare const CLEAR_HIDE_MENU_TIMEOUT: import("lexical").LexicalCommand<unknown>;
|
|
7
7
|
export declare const UPDATE_MENTIONS_OPTIONS: import("lexical").LexicalCommand<unknown>;
|
|
8
8
|
export declare const decoratorTransform: (node: CustomTextNode, getMatch: (text: string) => null | EntityMatch, createNode: (textNode: TextNode) => LexicalNode) => void;
|
|
9
|
-
export declare function textToEditorState(
|
|
9
|
+
export declare function textToEditorState(initialValue: string, triggers: string[]): () => void;
|
package/es/Mentions/utils.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
1
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
-
import { $isTextNode, createCommand } from 'lexical';
|
|
3
|
+
import { $createParagraphNode, $getRoot, $isTextNode, createCommand } from 'lexical';
|
|
4
|
+
import { $convertToMentionNodes } from "./plugins/mention-converter";
|
|
3
5
|
export var INSERT_MENTION_COMMAND = createCommand('INSERT_MENTION_COMMAND');
|
|
4
6
|
export var DELETE_MENTION_COMMAND = createCommand('DELETE_MENTION_COMMAND');
|
|
5
7
|
export var CLEAR_HIDE_MENU_TIMEOUT = createCommand('CLEAR_HIDE_MENU_TIMEOUT');
|
|
@@ -63,33 +65,12 @@ export var decoratorTransform = function decoratorTransform(node, getMatch, crea
|
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
};
|
|
66
|
-
export function textToEditorState(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
root
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
format: 0,
|
|
75
|
-
mode: 'normal',
|
|
76
|
-
style: '',
|
|
77
|
-
text: p,
|
|
78
|
-
type: 'custom-text',
|
|
79
|
-
version: 1
|
|
80
|
-
}],
|
|
81
|
-
direction: 'ltr',
|
|
82
|
-
format: '',
|
|
83
|
-
indent: 0,
|
|
84
|
-
type: 'paragraph',
|
|
85
|
-
version: 1
|
|
86
|
-
};
|
|
87
|
-
}),
|
|
88
|
-
direction: 'ltr',
|
|
89
|
-
format: '',
|
|
90
|
-
indent: 0,
|
|
91
|
-
type: 'root',
|
|
92
|
-
version: 1
|
|
93
|
-
}
|
|
94
|
-
});
|
|
68
|
+
export function textToEditorState(initialValue, triggers) {
|
|
69
|
+
return function () {
|
|
70
|
+
var root = $getRoot();
|
|
71
|
+
root.clear();
|
|
72
|
+
var paragraph = $createParagraphNode();
|
|
73
|
+
paragraph.append.apply(paragraph, _toConsumableArray($convertToMentionNodes(initialValue, triggers)));
|
|
74
|
+
root.append(paragraph);
|
|
75
|
+
};
|
|
95
76
|
}
|
|
@@ -38,14 +38,18 @@ export interface IGeneralManacoEditorProps {
|
|
|
38
38
|
/** style of wrapper */
|
|
39
39
|
style?: CSSProperties;
|
|
40
40
|
enhancers?: EditorEnhancer[];
|
|
41
|
+
placeholder?: string;
|
|
41
42
|
}
|
|
42
43
|
export interface ISingleMonacoEditorProps extends IGeneralManacoEditorProps {
|
|
43
44
|
onChange?: (input: string, event: IEditor.IModelContentChangedEvent) => void;
|
|
45
|
+
onBlur?: (input: string, event: any) => void;
|
|
44
46
|
supportFullScreen?: boolean;
|
|
47
|
+
onFullScreenChange?: (isFullScreen: boolean) => void;
|
|
45
48
|
}
|
|
46
49
|
export interface IDiffMonacoEditorProps extends IGeneralManacoEditorProps {
|
|
47
50
|
onChange?: (input: string, event: IEditor.IModelContentChangedEvent) => void;
|
|
48
51
|
supportFullScreen?: boolean;
|
|
52
|
+
onFullScreenChange?: (isFullScreen: boolean) => void;
|
|
49
53
|
original?: string;
|
|
50
54
|
}
|
|
51
55
|
export declare const WORD_EDITOR_INITIALIZING: string;
|
|
@@ -90,7 +90,8 @@ export var useEditor = function useEditor(type, props) {
|
|
|
90
90
|
language = props.language,
|
|
91
91
|
saveViewState = props.saveViewState,
|
|
92
92
|
defaultValue = props.defaultValue,
|
|
93
|
-
enhancers = props.enhancers
|
|
93
|
+
enhancers = props.enhancers,
|
|
94
|
+
placeholder = props.placeholder;
|
|
94
95
|
var _useState = useState(false),
|
|
95
96
|
_useState2 = _slicedToArray(_useState, 2),
|
|
96
97
|
isEditorReady = _useState2[0],
|
|
@@ -158,20 +159,28 @@ export var useEditor = function useEditor(type, props) {
|
|
|
158
159
|
if (!containerRef.current) {
|
|
159
160
|
return;
|
|
160
161
|
}
|
|
162
|
+
if (editorRef.current) {
|
|
163
|
+
editorRef.current.dispose();
|
|
164
|
+
decomposeRef.current = false;
|
|
165
|
+
}
|
|
161
166
|
var editor;
|
|
162
167
|
if (typeRef.current === 'single') {
|
|
163
168
|
var _ref, _valueRef$current;
|
|
164
169
|
var model = getOrCreateModel(monaco, (_ref = (_valueRef$current = valueRef.current) !== null && _valueRef$current !== void 0 ? _valueRef$current : defaultValueRef.current) !== null && _ref !== void 0 ? _ref : '', languageRef.current, pathRef.current);
|
|
165
170
|
editor = monaco.editor.create(containerRef.current, _objectSpread(_objectSpread({
|
|
166
171
|
automaticLayout: true
|
|
167
|
-
}, INITIAL_OPTIONS),
|
|
172
|
+
}, INITIAL_OPTIONS), {}, {
|
|
173
|
+
placeholder: placeholder
|
|
174
|
+
}, optionRef.current));
|
|
168
175
|
editor.setModel(model);
|
|
169
176
|
} else {
|
|
170
177
|
var originalModel = monaco.editor.createModel(valueRef.current, languageRef.current);
|
|
171
178
|
var modifiedModel = monaco.editor.createModel(valueRef.current, languageRef.current);
|
|
172
179
|
editor = monaco.editor.createDiffEditor(containerRef.current, _objectSpread(_objectSpread({
|
|
173
180
|
automaticLayout: true
|
|
174
|
-
}, DIFF_EDITOR_INITIAL_OPTIONS),
|
|
181
|
+
}, DIFF_EDITOR_INITIAL_OPTIONS), {}, {
|
|
182
|
+
placeholder: placeholder
|
|
183
|
+
}, optionRef.current));
|
|
175
184
|
editor.setModel({
|
|
176
185
|
original: originalModel,
|
|
177
186
|
modified: modifiedModel
|
|
@@ -196,7 +205,7 @@ export var useEditor = function useEditor(type, props) {
|
|
|
196
205
|
setLoading(false);
|
|
197
206
|
}
|
|
198
207
|
});
|
|
199
|
-
}, []);
|
|
208
|
+
}, [placeholder]);
|
|
200
209
|
useEffect(function () {
|
|
201
210
|
var _monacoRef$current;
|
|
202
211
|
if (!isEditorReady) {
|
|
@@ -8,7 +8,7 @@ export declare const SingleMonacoEditorComponent: React.FC<ISingleMonacoEditorPr
|
|
|
8
8
|
variant?: "filled" | "borderless" | "outlined" | undefined;
|
|
9
9
|
}> & {
|
|
10
10
|
displayName: string;
|
|
11
|
-
|
|
11
|
+
default: {
|
|
12
12
|
width: string;
|
|
13
13
|
height: number;
|
|
14
14
|
defaultValue: string;
|
|
@@ -23,7 +23,7 @@ export declare const SingleMonacoEditorComponent: React.FC<ISingleMonacoEditorPr
|
|
|
23
23
|
variant?: "filled" | "borderless" | "outlined" | undefined;
|
|
24
24
|
}> & {
|
|
25
25
|
displayName: string;
|
|
26
|
-
|
|
26
|
+
default: {
|
|
27
27
|
width: string;
|
|
28
28
|
height: number;
|
|
29
29
|
defaultValue: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Icon } from '@lobehub/ui';
|
|
2
2
|
import { Button } from 'antd';
|
|
3
3
|
import { Maximize2, Minimize2 } from 'lucide-react';
|
|
4
|
-
import React, { useEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
5
5
|
import { INITIAL_OPTIONS, WORD_EDITOR_INITIALIZING, useEditor, useFullScreen } from "./helper";
|
|
6
6
|
import { useStyles } from "./style";
|
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -12,12 +12,15 @@ function noop() {}
|
|
|
12
12
|
var SingleMonacoEditor = function SingleMonacoEditor(props) {
|
|
13
13
|
var _props$options;
|
|
14
14
|
var onChange = props.onChange,
|
|
15
|
+
onBlur = props.onBlur,
|
|
15
16
|
enableOutline = props.enableOutline,
|
|
16
17
|
width = props.width,
|
|
17
18
|
height = props.height,
|
|
18
19
|
language = props.language,
|
|
19
|
-
supportFullScreen = props.supportFullScreen
|
|
20
|
+
supportFullScreen = props.supportFullScreen,
|
|
21
|
+
onFullScreenChange = props.onFullScreenChange;
|
|
20
22
|
var onChangeRef = useRef(onChange);
|
|
23
|
+
var onBlurRef = useRef(onBlur);
|
|
21
24
|
var _useEditor = useEditor('single', props),
|
|
22
25
|
isEditorReady = _useEditor.isEditorReady,
|
|
23
26
|
focused = _useEditor.focused,
|
|
@@ -27,6 +30,7 @@ var SingleMonacoEditor = function SingleMonacoEditor(props) {
|
|
|
27
30
|
editorRef = _useEditor.editorRef,
|
|
28
31
|
valueRef = _useEditor.valueRef;
|
|
29
32
|
var subscriptionRef = useRef();
|
|
33
|
+
var subscriptionBlurRef = useRef();
|
|
30
34
|
var _useFullScreen = useFullScreen(editorRef === null || editorRef === void 0 ? void 0 : editorRef.current),
|
|
31
35
|
isFullScreen = _useFullScreen.isFullScreen,
|
|
32
36
|
fullScreen = _useFullScreen.fullScreen;
|
|
@@ -50,9 +54,12 @@ var SingleMonacoEditor = function SingleMonacoEditor(props) {
|
|
|
50
54
|
useEffect(function () {
|
|
51
55
|
onChangeRef.current = onChange;
|
|
52
56
|
}, [onChange]);
|
|
57
|
+
useEffect(function () {
|
|
58
|
+
onBlurRef.current = onBlur;
|
|
59
|
+
}, [onBlur]);
|
|
53
60
|
useEffect(function () {
|
|
54
61
|
if (isEditorReady) {
|
|
55
|
-
var _subscriptionRef$curr
|
|
62
|
+
var _subscriptionRef$curr, _subscriptionBlurRef$;
|
|
56
63
|
var editorInstance = editorRef.current;
|
|
57
64
|
(_subscriptionRef$curr = subscriptionRef.current) === null || _subscriptionRef$curr === void 0 || _subscriptionRef$curr.dispose();
|
|
58
65
|
subscriptionRef.current = editorInstance === null || editorInstance === void 0 ? void 0 : editorInstance.onDidChangeModelContent(function (event) {
|
|
@@ -63,14 +70,21 @@ var SingleMonacoEditor = function SingleMonacoEditor(props) {
|
|
|
63
70
|
(_onChangeRef$current = onChangeRef.current) === null || _onChangeRef$current === void 0 || _onChangeRef$current.call(onChangeRef, editorValue, event);
|
|
64
71
|
}
|
|
65
72
|
});
|
|
73
|
+
(_subscriptionBlurRef$ = subscriptionBlurRef.current) === null || _subscriptionBlurRef$ === void 0 || _subscriptionBlurRef$.dispose();
|
|
74
|
+
subscriptionBlurRef.current = editorInstance === null || editorInstance === void 0 ? void 0 : editorInstance.onDidBlurEditorText(function (event) {
|
|
75
|
+
var _editorInstance$getMo2, _onBlurRef$current;
|
|
76
|
+
var editorValue = editorInstance === null || editorInstance === void 0 || (_editorInstance$getMo2 = editorInstance.getModel()) === null || _editorInstance$getMo2 === void 0 ? void 0 : _editorInstance$getMo2.getValue();
|
|
77
|
+
(_onBlurRef$current = onBlurRef.current) === null || _onBlurRef$current === void 0 || _onBlurRef$current.call(onBlurRef, editorValue, event);
|
|
78
|
+
});
|
|
66
79
|
}
|
|
67
80
|
}, [editorRef, isEditorReady, subscriptionRef, valueRef]);
|
|
68
81
|
useEffect(function () {
|
|
69
82
|
return function () {
|
|
70
|
-
var _subscriptionRef$curr2, _editorInstance$
|
|
83
|
+
var _subscriptionRef$curr2, _subscriptionBlurRef$2, _editorInstance$getMo3, _editorRef$current;
|
|
71
84
|
var editorInstance = editorRef.current;
|
|
72
85
|
(_subscriptionRef$curr2 = subscriptionRef.current) === null || _subscriptionRef$curr2 === void 0 || _subscriptionRef$curr2.dispose();
|
|
73
|
-
|
|
86
|
+
(_subscriptionBlurRef$2 = subscriptionBlurRef.current) === null || _subscriptionBlurRef$2 === void 0 || _subscriptionBlurRef$2.dispose();
|
|
87
|
+
editorInstance === null || editorInstance === void 0 || (_editorInstance$getMo3 = editorInstance.getModel()) === null || _editorInstance$getMo3 === void 0 || _editorInstance$getMo3.dispose();
|
|
74
88
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75
89
|
(_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || _editorRef$current.dispose();
|
|
76
90
|
};
|
|
@@ -86,6 +100,10 @@ var SingleMonacoEditor = function SingleMonacoEditor(props) {
|
|
|
86
100
|
(_monacoRef$current = monacoRef.current) === null || _monacoRef$current === void 0 || _monacoRef$current.editor.setModelLanguage(model, language);
|
|
87
101
|
}
|
|
88
102
|
}, [editorRef, isEditorReady, language, monacoRef]);
|
|
103
|
+
var fullScreenChange = useCallback(function () {
|
|
104
|
+
onFullScreenChange === null || onFullScreenChange === void 0 || onFullScreenChange(!isFullScreen);
|
|
105
|
+
fullScreen();
|
|
106
|
+
}, [fullScreen, isFullScreen, onFullScreenChange]);
|
|
89
107
|
return /*#__PURE__*/_jsxs("div", {
|
|
90
108
|
className: className,
|
|
91
109
|
style: props.style,
|
|
@@ -101,7 +119,7 @@ var SingleMonacoEditor = function SingleMonacoEditor(props) {
|
|
|
101
119
|
icon: /*#__PURE__*/_jsx(Icon, {
|
|
102
120
|
icon: isFullScreen ? Minimize2 : Maximize2
|
|
103
121
|
}),
|
|
104
|
-
onClick:
|
|
122
|
+
onClick: fullScreenChange,
|
|
105
123
|
size: "small",
|
|
106
124
|
type: "text"
|
|
107
125
|
})
|
|
@@ -115,7 +133,8 @@ var DiffMonacoEditor = function DiffMonacoEditor(props) {
|
|
|
115
133
|
language = props.language,
|
|
116
134
|
onChange = props.onChange,
|
|
117
135
|
original = props.original,
|
|
118
|
-
supportFullScreen = props.supportFullScreen
|
|
136
|
+
supportFullScreen = props.supportFullScreen,
|
|
137
|
+
onFullScreenChange = props.onFullScreenChange;
|
|
119
138
|
var onChangeRef = useRef(onChange);
|
|
120
139
|
var _useEditor2 = useEditor('diff', props),
|
|
121
140
|
isEditorReady = _useEditor2.isEditorReady,
|
|
@@ -184,6 +203,10 @@ var DiffMonacoEditor = function DiffMonacoEditor(props) {
|
|
|
184
203
|
(_monacoRef$current2 = monacoRef.current) === null || _monacoRef$current2 === void 0 || _monacoRef$current2.editor.setModelLanguage(originalModel, language);
|
|
185
204
|
(_monacoRef$current3 = monacoRef.current) === null || _monacoRef$current3 === void 0 || _monacoRef$current3.editor.setModelLanguage(modifiedModel, language);
|
|
186
205
|
}, [editorRef, isEditorReady, language, monacoRef]);
|
|
206
|
+
var fullScreenChange = useCallback(function () {
|
|
207
|
+
onFullScreenChange === null || onFullScreenChange === void 0 || onFullScreenChange(!isFullScreen);
|
|
208
|
+
fullScreen();
|
|
209
|
+
}, [fullScreen, isFullScreen, onFullScreenChange]);
|
|
187
210
|
return /*#__PURE__*/_jsxs("div", {
|
|
188
211
|
className: className,
|
|
189
212
|
style: props.style,
|
|
@@ -199,7 +222,7 @@ var DiffMonacoEditor = function DiffMonacoEditor(props) {
|
|
|
199
222
|
icon: /*#__PURE__*/_jsx(Icon, {
|
|
200
223
|
icon: isFullScreen ? Minimize2 : Maximize2
|
|
201
224
|
}),
|
|
202
|
-
onClick:
|
|
225
|
+
onClick: fullScreenChange,
|
|
203
226
|
size: "small",
|
|
204
227
|
type: "text"
|
|
205
228
|
})
|
|
@@ -208,7 +231,7 @@ var DiffMonacoEditor = function DiffMonacoEditor(props) {
|
|
|
208
231
|
};
|
|
209
232
|
var DiffMonacoEditorComponent = Object.assign(DiffMonacoEditor, {
|
|
210
233
|
displayName: 'DiffMonacoEditor',
|
|
211
|
-
|
|
234
|
+
default: {
|
|
212
235
|
width: '100%',
|
|
213
236
|
height: 150,
|
|
214
237
|
defaultValue: '',
|
|
@@ -222,7 +245,7 @@ var DiffMonacoEditorComponent = Object.assign(DiffMonacoEditor, {
|
|
|
222
245
|
});
|
|
223
246
|
export var SingleMonacoEditorComponent = Object.assign(SingleMonacoEditor, {
|
|
224
247
|
displayName: 'SingleMonacoEditor',
|
|
225
|
-
|
|
248
|
+
default: {
|
|
226
249
|
width: '100%',
|
|
227
250
|
height: 150,
|
|
228
251
|
defaultValue: '',
|
|
@@ -34,7 +34,7 @@ export var useStyles = createStyles(function (_ref, _ref2) {
|
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
36
|
return {
|
|
37
|
-
base: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n\n box-sizing: content-box;\n min-height: 100px;\n\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: ", "px;\n &:hover {\n border-color: ", ";\n ", "\n }\n\n &.ve-focused {\n ", "\n ", "\n }\n\n &.ve-outline {\n border: 1px solid var(--color-field-border, rgba(31, 56, 88, 0.05)) !important;\n }\n\n & > .react-monaco-editor-container {\n width: 100%;\n height: 100%;\n min-height: 100px;\n background: transparent;\n\n ", "\n\n .monaco-editor,\n .monaco-editor-background,\n .monaco-editor .inputarea.ime-input,\n .monaco-editor .margin {\n ", "\n }\n\n & > .monaco-editor {\n border-radius: ", "px;\n .overflow-guard,\n .margin {\n border-top-left-radius: ", "px;\n border-bottom-left-radius: ", "px;\n }\n .monaco-scrollable-element {\n border-top-right-radius: ", "px;\n border-bottom-right-radius: ", "px;\n }\n }\n .monaco-diff-editor {\n border-radius: ", "px;\n & > .original > .monaco-editor {\n border-top-left-radius: ", "px;\n border-bottom-left-radius: ", "px;\n .overflow-guard,\n .margin {\n border-top-left-radius: ", "px;\n border-bottom-left-radius: ", "px;\n }\n }\n .diffViewport {\n border-top-right-radius: ", "px;\n border-bottom-right-radius: ", "px;\n }\n }\n }\n\n .syntaxTips {\n position: absolute;\n bottom: 0;\n left: 0;\n\n box-sizing: border-box;\n width: 100%;\n max-height: 0;\n margin: 0;\n padding: 10px 30px;\n\n color: ", ";\n\n background: ", ";\n\n transition: 0.2s ease max-height;\n }\n\n .syntaxTips:hover {\n overflow: auto;\n max-height: 50%;\n }\n\n .syntaxTips .infoIcon {\n position: absolute;\n top: 2px;\n right: 5px;\n transform: rotateY(180deg);\n\n width: 20px;\n height: 16px;\n }\n "])), getBgColor(), variant === 'outlined' ? token.colorBorder : 'transparent', token.borderRadius, variant === 'outlined' ? token.colorPrimaryHover : 'transparent', variant === 'filled' && css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n background-color: ", ";\n "])), token.colorFillSecondary), variant === 'filled' && css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n background-color: ", ";\n "])), token.colorBgBase), variant !== 'borderless' && css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n border-color: ", ";\n "])), token.colorPrimaryActive), isFullScreen && css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n position: fixed;\n z-index: 9998;\n inset: 0;\n\n width: auto !important;\n height: auto !important;\n "]))), !isFullScreen && css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n background-color: transparent;\n "]))), token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius - 1, token.borderRadius - 1, token.colorErrorText, token.colorErrorBg),
|
|
37
|
+
base: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n\n box-sizing: content-box;\n min-height: 100px;\n\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: ", "px;\n &:hover {\n border-color: ", ";\n ", "\n }\n\n &.ve-focused {\n ", "\n ", "\n }\n\n &.ve-outline {\n border: 1px solid var(--color-field-border, rgba(31, 56, 88, 0.05)) !important;\n }\n\n & > .react-monaco-editor-container {\n width: 100%;\n height: 100%;\n min-height: 100px;\n background: transparent;\n\n ", "\n\n .monaco-editor,\n .monaco-editor-background,\n .monaco-editor .inputarea.ime-input,\n .monaco-editor .margin {\n ", "\n }\n\n & > .monaco-editor {\n border-radius: ", "px;\n outline: none;\n .overflow-guard,\n .margin {\n border-top-left-radius: ", "px;\n border-bottom-left-radius: ", "px;\n }\n .monaco-scrollable-element {\n border-top-right-radius: ", "px;\n border-bottom-right-radius: ", "px;\n }\n }\n .monaco-diff-editor {\n border-radius: ", "px;\n & > .gutter {\n outline: none;\n }\n & > .original > .monaco-editor {\n border-top-left-radius: ", "px;\n border-bottom-left-radius: ", "px;\n outline: none;\n .overflow-guard,\n .margin {\n border-top-left-radius: ", "px;\n border-bottom-left-radius: ", "px;\n }\n }\n & > .modified > .monaco-editor {\n outline: none;\n }\n .diffViewport {\n border-top-right-radius: ", "px;\n border-bottom-right-radius: ", "px;\n outline: none;\n }\n }\n }\n\n .syntaxTips {\n position: absolute;\n bottom: 0;\n left: 0;\n\n box-sizing: border-box;\n width: 100%;\n max-height: 0;\n margin: 0;\n padding: 10px 30px;\n\n color: ", ";\n\n background: ", ";\n\n transition: 0.2s ease max-height;\n }\n\n .syntaxTips:hover {\n overflow: auto;\n max-height: 50%;\n }\n\n .syntaxTips .infoIcon {\n position: absolute;\n top: 2px;\n right: 5px;\n transform: rotateY(180deg);\n\n width: 20px;\n height: 16px;\n }\n "])), getBgColor(), variant === 'outlined' ? token.colorBorder : 'transparent', token.borderRadius, variant === 'outlined' ? token.colorPrimaryHover : 'transparent', variant === 'filled' && css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n background-color: ", ";\n "])), token.colorFillSecondary), variant === 'filled' && css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n background-color: ", ";\n "])), token.colorBgBase), variant !== 'borderless' && css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n border-color: ", ";\n "])), token.colorPrimaryActive), isFullScreen && css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n position: fixed;\n z-index: 9998;\n inset: 0;\n\n width: auto !important;\n height: auto !important;\n "]))), !isFullScreen && css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n background-color: transparent;\n "]))), token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius, token.borderRadius - 1, token.borderRadius - 1, token.colorErrorText, token.colorErrorBg),
|
|
38
38
|
fullScreenBtn: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n &.", "-btn {\n position: absolute;\n top: 20px;\n color: ", ";\n transition: none;\n ", "\n }\n "])), prefixCls, token.colorTextSecondary, isFullScreen ? css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n z-index: 9999;\n right: ", "px;\n "])), diff ? 64 : 138) : css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n right: ", "px;\n "])), minimapEnabled || diff ? 64 : 20)),
|
|
39
39
|
loading: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n position: absolute;\n inset: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n font-size: ", "px;\n color: ", ";\n\n background-color: transparent;\n\n &::after {\n content: '';\n width: 16px;\n /* display: inline; */\n animation: ", " steps(3) 1s infinite;\n }\n "])), token.fontSizeSM, token.colorTextTertiary, dots)
|
|
40
40
|
};
|
package/es/MonacoEditor/index.js
CHANGED
|
@@ -28,7 +28,7 @@ export var BaseMonacoEditor = function BaseMonacoEditor(props) {
|
|
|
28
28
|
_props$minimapEnabled = props.minimapEnabled,
|
|
29
29
|
minimapEnabled = _props$minimapEnabled === void 0 ? false : _props$minimapEnabled,
|
|
30
30
|
_props$version = props.version,
|
|
31
|
-
version = _props$version === void 0 ? '0.
|
|
31
|
+
version = _props$version === void 0 ? '0.52.2' : _props$version,
|
|
32
32
|
_props$requireConfig = props.requireConfig,
|
|
33
33
|
requireConfigFromProps = _props$requireConfig === void 0 ? {} : _props$requireConfig,
|
|
34
34
|
options = props.options,
|
package/es/SelectCard/index.js
CHANGED
|
@@ -107,7 +107,7 @@ export var SelectCard = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
107
107
|
}), o.label && !selected && /*#__PURE__*/_jsx(Text, {
|
|
108
108
|
ellipsis: true,
|
|
109
109
|
children: o.label
|
|
110
|
-
}),
|
|
110
|
+
}), o.description && /*#__PURE__*/_jsx(Paragraph, {
|
|
111
111
|
ellipsis: {
|
|
112
112
|
rows: 2
|
|
113
113
|
},
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
export declare const FALLBACK_LANG = "txt";
|
|
2
|
-
export declare const useHighlight: (text: string, lang: string,
|
|
3
|
-
revalidateOnFocus: false;
|
|
4
|
-
}>;
|
|
2
|
+
export declare const useHighlight: (text: string, lang: string, enableTransformer?: boolean) => import("swr/dist/_internal").SWRResponse<string, any, any>;
|
|
5
3
|
export { languageMap } from './languageMap';
|