@yuntijs/ui 1.2.0-beta.3 → 1.2.0-beta.4

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.
@@ -11,7 +11,7 @@ import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
11
11
  import { ConfigProvider } from 'antd';
12
12
  // @Todo: 升级 0.25.0 后,ops-console 使用的时候出现了只输入 / 无法触发的问题
13
13
  import { $getRoot, TextNode } from 'lexical';
14
- import React, { forwardRef, useMemo } from 'react';
14
+ import React, { forwardRef, useCallback, useMemo } from 'react';
15
15
  import { isBrowser } from "../utils/tools";
16
16
  import { CustomTextNode } from "./plugins/custom-text/node";
17
17
  import { EditablePlugin } from "./plugins/editable";
@@ -129,6 +129,11 @@ export var Mentions = /*#__PURE__*/forwardRef(function (_ref, ref) {
129
129
  return document.fullscreenElement;
130
130
  }
131
131
  }, [getPopContainer]);
132
+ var onMentionPickerOpen = useCallback(function (resolution) {
133
+ var _resolution$match$rep, _resolution$match;
134
+ var _trigger = (_resolution$match$rep = (_resolution$match = resolution.match) === null || _resolution$match === void 0 ? void 0 : _resolution$match.replaceableString) !== null && _resolution$match$rep !== void 0 ? _resolution$match$rep : triggers[0];
135
+ onTrigger === null || onTrigger === void 0 || onTrigger(_trigger);
136
+ }, [onTrigger, triggers]);
132
137
  return /*#__PURE__*/_jsx(LexicalComposer, {
133
138
  initialConfig: _objectSpread(_objectSpread({}, initialConfig), {}, {
134
139
  editable: editable
@@ -151,10 +156,7 @@ export var Mentions = /*#__PURE__*/forwardRef(function (_ref, ref) {
151
156
  })
152
157
  }), editable && /*#__PURE__*/_jsx(MentionPickerPlugin, {
153
158
  allowSpaces: allowSpaces,
154
- onOpen: function onOpen(resolution) {
155
- var _resolution$match$rep, _resolution$match;
156
- return onTrigger === null || onTrigger === void 0 ? void 0 : onTrigger((_resolution$match$rep = (_resolution$match = resolution.match) === null || _resolution$match === void 0 ? void 0 : _resolution$match.replaceableString) !== null && _resolution$match$rep !== void 0 ? _resolution$match$rep : triggers[0]);
157
- },
159
+ onOpen: onMentionPickerOpen,
158
160
  onSelect: onSelect,
159
161
  options: options,
160
162
  overlayClassName: classNames === null || classNames === void 0 ? void 0 : classNames.menuOverlay,
@@ -7,4 +7,5 @@ export var CLEAR_HIDE_MENU_TIMEOUT = createCommand('CLEAR_HIDE_MENU_TIMEOUT');
7
7
  // export const MENTION_REGEX = /{{(.+?)}}/g;
8
8
  // {{plugin-m67m66l8-794.json."id"}}
9
9
  // {{plugin-m67m66l8-794.json."tags"[0]."id"}}
10
- export var MENTION_REGEX = /{{([\w-]{1,50}(\."?[_a-z][\w"[\]]*){1,10})}}/gi;
10
+ // export const MENTION_REGEX = /{{([\w-]{1,50}(\."?[_a-z][\w"[\]]*){1,10})}}/gi;
11
+ export var MENTION_REGEX = /{{[^.}]+\.(.+)}}/gi;
@@ -1,5 +1,5 @@
1
1
  import type { MentionOption } from '../../types';
2
2
  import { MentionMenuOption } from './utils';
3
- export declare const useOptions: (allOptions: MentionOption[], queryString: string | null) => {
3
+ export declare const useOptions: (allOptions: MentionOption[], queryString: string | null, trigger: string | null) => {
4
4
  options: MentionMenuOption[];
5
5
  };
@@ -18,17 +18,20 @@ var filterOptionWithChildren = function filterOptionWithChildren(option, filterO
18
18
  });
19
19
  return option;
20
20
  };
21
- export var useOptions = function useOptions(allOptions, queryString) {
21
+ export var useOptions = function useOptions(allOptions, queryString, trigger) {
22
22
  var _useLexicalComposerCo = useLexicalComposerContext(),
23
23
  _useLexicalComposerCo2 = _slicedToArray(_useLexicalComposerCo, 1),
24
24
  editor = _useLexicalComposerCo2[0];
25
25
  var filterOption = useCallback(function (option) {
26
26
  var _option$keywords;
27
+ if (option.triggers && trigger && !option.triggers.includes(trigger)) {
28
+ return false;
29
+ }
27
30
  var regex = new RegExp(escapeRegExp(queryString), 'i');
28
31
  return regex.test(option.label) || ((_option$keywords = option.keywords) === null || _option$keywords === void 0 ? void 0 : _option$keywords.some(function (keyword) {
29
32
  return regex.test(keyword);
30
33
  })) || false;
31
- }, [queryString]);
34
+ }, [queryString, trigger]);
32
35
  var options = useMemo(function () {
33
36
  var _addOnselect = function _addOnselect(option) {
34
37
  var menuOption = _objectSpread(_objectSpread({}, option), {}, {
@@ -48,9 +51,9 @@ export var useOptions = function useOptions(allOptions, queryString) {
48
51
  var menuOptions = allOptions.map(function (o) {
49
52
  return new MentionMenuOption(_addOnselect(o));
50
53
  });
51
- if (!queryString) {
52
- return menuOptions;
53
- }
54
+ // if (!queryString) {
55
+ // return menuOptions;
56
+ // }
54
57
  return menuOptions.map(function (o) {
55
58
  if (!o.children) {
56
59
  return o;
@@ -59,7 +62,7 @@ export var useOptions = function useOptions(allOptions, queryString) {
59
62
  }).filter(function (o) {
60
63
  return filterOption(o) || (o.children || []).length > 0;
61
64
  });
62
- }, [allOptions, queryString, editor, filterOption]);
65
+ }, [allOptions, editor, filterOption]);
63
66
  return {
64
67
  options: options
65
68
  };
@@ -46,7 +46,7 @@ export var MentionPickerPlugin = /*#__PURE__*/memo(function (_ref) {
46
46
  _useState2 = _slicedToArray(_useState, 2),
47
47
  queryString = _useState2[0],
48
48
  setQueryString = _useState2[1];
49
- var _useOptions = useOptions(allOptions, queryString),
49
+ var _useOptions = useOptions(allOptions, queryString, trigger),
50
50
  options = _useOptions.options;
51
51
  var flatOptions = useMemo(function () {
52
52
  var _flattenTree = function _flattenTree(nodes) {
@@ -10,6 +10,8 @@ export interface MentionMenuOptionInitParams {
10
10
  keywords?: Array<string>;
11
11
  keyboardShortcut?: string;
12
12
  disabled?: boolean;
13
+ /** 指定触发这个选项的 triggers,指定后会根据指定的 triggers 进行筛选 */
14
+ triggers?: string[];
13
15
  onSelect: (queryString: string) => void;
14
16
  isChild?: boolean;
15
17
  children?: MentionMenuOptionInitParams[];
@@ -26,8 +28,9 @@ export declare class MentionMenuOption extends MenuOption {
26
28
  keyboardShortcut?: string;
27
29
  onSelect: (queryString: string) => void;
28
30
  disabled?: boolean;
31
+ triggers?: string[];
29
32
  data?: any;
30
33
  children?: MentionMenuOption[];
31
34
  isChild?: boolean;
32
- constructor({ label, value, title, data, icon, extraElement, keywords, keyboardShortcut, disabled, onSelect, children, isChild, }: MentionMenuOptionInitParams);
35
+ constructor({ label, value, title, data, icon, extraElement, keywords, keyboardShortcut, disabled, triggers, onSelect, children, isChild, }: MentionMenuOptionInitParams);
33
36
  }
@@ -24,6 +24,7 @@ export var MentionMenuOption = /*#__PURE__*/function (_MenuOption) {
24
24
  keywords = _ref.keywords,
25
25
  keyboardShortcut = _ref.keyboardShortcut,
26
26
  disabled = _ref.disabled,
27
+ triggers = _ref.triggers,
27
28
  onSelect = _ref.onSelect,
28
29
  children = _ref.children,
29
30
  isChild = _ref.isChild;
@@ -42,6 +43,7 @@ export var MentionMenuOption = /*#__PURE__*/function (_MenuOption) {
42
43
  _defineProperty(_assertThisInitialized(_this), "keyboardShortcut", void 0);
43
44
  _defineProperty(_assertThisInitialized(_this), "onSelect", void 0);
44
45
  _defineProperty(_assertThisInitialized(_this), "disabled", void 0);
46
+ _defineProperty(_assertThisInitialized(_this), "triggers", void 0);
45
47
  _defineProperty(_assertThisInitialized(_this), "data", void 0);
46
48
  _defineProperty(_assertThisInitialized(_this), "children", void 0);
47
49
  _defineProperty(_assertThisInitialized(_this), "isChild", void 0);
@@ -56,6 +58,7 @@ export var MentionMenuOption = /*#__PURE__*/function (_MenuOption) {
56
58
  _this.keyboardShortcut = keyboardShortcut;
57
59
  _this.onSelect = onSelect.bind(_assertThisInitialized(_this));
58
60
  _this.disabled = disabled;
61
+ _this.triggers = triggers;
59
62
  _this.data = data;
60
63
  _this.isChild = isChild !== null && isChild !== void 0 ? isChild : false;
61
64
  _this.children = children === null || children === void 0 ? void 0 : children.map(function (m) {
@@ -1,4 +1,4 @@
1
- import { MentionMenuOptionInitParams } from './plugins/mention-picker/utils';
1
+ import type { MentionMenuOptionInitParams } from './plugins/mention-picker/utils';
2
2
  export interface MentionOption extends Omit<MentionMenuOptionInitParams, 'onSelect' | 'children'> {
3
3
  /** 选中后展示的 label 名称,不指定则直接使用 label */
4
4
  selectedLabel?: string;
@@ -9,5 +9,6 @@ export declare const decoratorTransform: (node: CustomTextNode, getMatch: (text:
9
9
  export interface TextToEditorStateOptions {
10
10
  /** 光标位置,默认为 end */
11
11
  cursor?: 'start' | 'end' | 'all';
12
+ punctuation?: string;
12
13
  }
13
14
  export declare function textToEditorState(initialValue: string, triggers: string[], options?: TextToEditorStateOptions): () => void;
@@ -67,15 +67,16 @@ export var decoratorTransform = function decoratorTransform(node, getMatch, crea
67
67
  };
68
68
  export function textToEditorState(initialValue, triggers, options) {
69
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
70
  var _ref = options || {
76
71
  cursor: 'end'
77
72
  },
73
+ punctuation = _ref.punctuation,
78
74
  cursor = _ref.cursor;
75
+ var root = $getRoot();
76
+ root.clear();
77
+ var paragraph = $createParagraphNode();
78
+ paragraph.append.apply(paragraph, _toConsumableArray($convertToMentionNodes(initialValue, triggers, punctuation)));
79
+ root.append(paragraph);
79
80
  if (!cursor || cursor === 'end') {
80
81
  // 👇 把光标移动到文本末尾
81
82
  var lastNode = paragraph.getLastDescendant();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuntijs/ui",
3
- "version": "1.2.0-beta.3",
3
+ "version": "1.2.0-beta.4",
4
4
  "description": "☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps",
5
5
  "keywords": [
6
6
  "yuntijs",