@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.
Files changed (41) hide show
  1. package/es/ChatItem/index.js +3 -2
  2. package/es/ChatItem/style.js +3 -2
  3. package/es/ChatItem/type.d.ts +4 -0
  4. package/es/Form/collapse-list/index.js +16 -9
  5. package/es/Form/collapse-list/utils.d.ts +1 -0
  6. package/es/Form/collapse-list/utils.js +2 -1
  7. package/es/Mentions/index.d.ts +13 -3
  8. package/es/Mentions/index.js +33 -19
  9. package/es/Mentions/plugins/editor-ref.d.ts +5 -0
  10. package/es/Mentions/plugins/editor-ref.js +13 -0
  11. package/es/Mentions/plugins/mention-converter.d.ts +32 -0
  12. package/es/Mentions/plugins/mention-converter.js +151 -0
  13. package/es/Mentions/plugins/mention-node/component.js +1 -1
  14. package/es/Mentions/plugins/mention-picker/hooks.js +1 -0
  15. package/es/Mentions/plugins/mention-picker/index.d.ts +4 -0
  16. package/es/Mentions/plugins/mention-picker/index.js +54 -13
  17. package/es/Mentions/plugins/mention-picker/menu-item.js +19 -3
  18. package/es/Mentions/plugins/mention-picker/style.js +1 -1
  19. package/es/Mentions/plugins/mention-picker/utils.d.ts +3 -1
  20. package/es/Mentions/plugins/mention-picker/utils.js +3 -0
  21. package/es/Mentions/plugins/shift-enter-key.d.ts +6 -0
  22. package/es/Mentions/plugins/shift-enter-key.js +48 -0
  23. package/es/Mentions/style.d.ts +1 -0
  24. package/es/Mentions/style.js +4 -4
  25. package/es/Mentions/types.d.ts +1 -0
  26. package/es/Mentions/utils.d.ts +1 -1
  27. package/es/Mentions/utils.js +11 -30
  28. package/es/MonacoEditor/base/helper.d.ts +4 -0
  29. package/es/MonacoEditor/base/helper.js +13 -4
  30. package/es/MonacoEditor/base/index.d.ts +2 -2
  31. package/es/MonacoEditor/base/index.js +33 -10
  32. package/es/MonacoEditor/base/style.js +1 -1
  33. package/es/MonacoEditor/index.js +1 -1
  34. package/es/SelectCard/index.js +1 -1
  35. package/es/hooks/useHighlight.d.ts +1 -3
  36. package/es/hooks/useHighlight.js +65 -67
  37. package/package.json +5 -5
  38. package/umd/index.min.js +1 -1
  39. package/umd/index.min.js.map +1 -1
  40. /package/es/Mentions/plugins/{OnBlurBlockPlugin.d.ts → on-blur-block.d.ts} +0 -0
  41. /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: option.setRefElement,
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.colorFillSecondary);
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,6 @@
1
+ import React from 'react';
2
+ import type { MentionsProps } from '..';
3
+ export interface ShiftEnterKeyPluginProps {
4
+ onPressEnter: Required<MentionsProps>['onPressEnter'];
5
+ }
6
+ export declare const ShiftEnterKeyPlugin: React.FC<ShiftEnterKeyPluginProps>;
@@ -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
+ };
@@ -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;
@@ -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
- prefixCls = _ref.prefixCls;
13
- var autoSize = _ref2.autoSize;
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)
@@ -10,3 +10,4 @@ export interface AutoSize {
10
10
  minRows?: number;
11
11
  maxRows?: number;
12
12
  }
13
+ export type { LexicalEditor as MentionsEditor, EditorState as MentionsEditorState } from 'lexical';
@@ -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(text: string): string;
9
+ export declare function textToEditorState(initialValue: string, triggers: string[]): () => void;
@@ -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(text) {
67
- var paragraph = text.split('\n');
68
- return JSON.stringify({
69
- root: {
70
- children: paragraph.map(function (p) {
71
- return {
72
- children: [{
73
- detail: 0,
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), optionRef.current));
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), optionRef.current));
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
- defaultProps: {
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
- defaultProps: {
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$getMo2, _editorRef$current;
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
- editorInstance === null || editorInstance === void 0 || (_editorInstance$getMo2 = editorInstance.getModel()) === null || _editorInstance$getMo2 === void 0 || _editorInstance$getMo2.dispose();
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: fullScreen,
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: fullScreen,
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
- defaultProps: {
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
- defaultProps: {
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
  };
@@ -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.45.0' : _props$version,
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,
@@ -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
- }), !isImg && o.description && /*#__PURE__*/_jsx(Paragraph, {
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, isDarkMode: boolean) => import("swr/dist/_internal").SWRResponse<string, any, {
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';