cnhis-design-vue 3.1.39-release.2 → 3.1.39

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 (81) hide show
  1. package/README.md +123 -123
  2. package/es/components/bpmn-workflow/src/BpmnWorkflow.d.ts +0 -0
  3. package/es/components/bpmn-workflow/types/BpmnViewer.d.ts +1 -0
  4. package/es/components/bpmn-workflow/types/ModelingModule.d.ts +1 -0
  5. package/es/components/bpmn-workflow/types/MoveCanvasModule.d.ts +1 -0
  6. package/es/components/button-print/index.d.ts +16 -1
  7. package/es/components/button-print/src/ButtonPrint.vue.d.ts +16 -1
  8. package/es/components/button-print/src/ButtonPrint.vue2.js +37 -6
  9. package/es/components/button-print/src/utils/print.d.ts +1 -0
  10. package/es/components/button-print/src/utils/print.js +10 -0
  11. package/es/components/fabric-chart/src/utils/index.d.ts +6823 -0
  12. package/es/components/form-render/index.js +2 -2
  13. package/es/components/form-render/src/components/renderer/lineBar/FormCollapse.vue.d.ts +3 -0
  14. package/es/components/form-render/src/components/renderer/lineBar/FormCollapse.vue.js +9 -4
  15. package/es/components/form-render/src/components/renderer/lineBar/index.d.ts +3 -0
  16. package/es/components/form-render/src/components/renderer/radio&checkbox.d.ts +4 -4
  17. package/es/components/form-render/src/components/renderer/radio_checkbox.js +1 -1
  18. package/es/components/form-render/src/components/renderer/select.js +26 -8
  19. package/es/components/form-render/src/hooks/index.js +1 -1
  20. package/es/components/form-render/src/hooks/useFieldListAdaptor.js +2 -1
  21. package/es/components/form-render/src/hooks/useFormRenderOptions.d.ts +4 -3
  22. package/es/components/form-render/src/hooks/useFormRenderOptions.js +53 -13
  23. package/es/components/form-render/src/utils/index.d.ts +2 -4
  24. package/es/components/form-render/src/utils/index.js +1 -15
  25. package/es/components/form-render/style/index.css +1 -1
  26. package/es/components/iho-table/index.d.ts +120 -120
  27. package/es/components/iho-table/src/IhoTable.vue.d.ts +120 -120
  28. package/es/components/iho-table/src/IhoTable.vue.js +6 -6
  29. package/es/components/iho-table/src/hooks/tapHooks/index.d.ts +60 -62
  30. package/es/components/iho-table/src/hooks/tapHooks/index.js +2 -6
  31. package/es/components/iho-table/src/hooks/tapHooks/useEventHooks.d.ts +1 -1
  32. package/es/components/iho-table/src/hooks/tapHooks/useEventHooks.js +2 -2
  33. package/es/components/iho-table/src/plugins/anchorPlugin/tableAnchor.js +2 -1
  34. package/es/components/iho-table/src/plugins/anchorPlugin/useAnchor.d.ts +2 -2
  35. package/es/components/iho-table/src/plugins/anchorPlugin/useAnchor.js +11 -11
  36. package/es/components/iho-table/src/plugins/lowCodeFieldAdaptorPlugin/index.js +1 -0
  37. package/es/components/iho-table/src/plugins/rendererPlugins/editableWidgets/dateRendererPlugin/index.js +4 -1
  38. package/es/components/iho-table/src/plugins/rendererPlugins/editableWidgets/numberRendererPlugin.js +31 -4
  39. package/es/components/iho-table/src/plugins/rendererPlugins/editableWidgets/separateRendererPlugin/editSeparate.vue.d.ts +12 -7
  40. package/es/components/iho-table/src/plugins/rendererPlugins/editableWidgets/separateRendererPlugin/editSeparate.vue.js +13 -8
  41. package/es/components/iho-table/src/plugins/rendererPlugins/editableWidgets/separateRendererPlugin/index.js +8 -6
  42. package/es/components/iho-table/src/plugins/rendererPlugins/editableWidgets/timeRendererPlugin.js +1 -2
  43. package/es/components/iho-table/src/types/index.d.ts +9 -4
  44. package/es/components/index.css +1 -1
  45. package/es/components/index.js +2 -2
  46. package/es/components/keyboard/index.d.ts +4 -0
  47. package/es/components/keyboard/src/Keyboard.vue.d.ts +4 -0
  48. package/es/components/keyboard/src/Keyboard.vue.js +10 -2
  49. package/es/components/keyboard/src/components/InputNumber.vue.d.ts +3 -1
  50. package/es/components/keyboard/src/components/InputNumber.vue.js +13 -1
  51. package/es/components/keyboard/src/components/NumberPanel.vue.d.ts +2 -0
  52. package/es/components/scale-view/src/ScaleView.vue.d.ts +0 -3
  53. package/es/components/scale-view/src/ScaleView.vue.js +1 -1
  54. package/es/env.d.ts +24 -24
  55. package/es/shared/assets/img/failure.js +1 -1
  56. package/es/shared/assets/img/failure.png.js +1 -1
  57. package/es/shared/assets/img/icon-asc.js +1 -1
  58. package/es/shared/assets/img/icon-desc.js +1 -1
  59. package/es/shared/assets/img/no-permission.js +1 -1
  60. package/es/shared/assets/img/no-permission.png.js +1 -1
  61. package/es/shared/assets/img/nodata.js +1 -1
  62. package/es/shared/assets/img/nodata.png.js +1 -1
  63. package/es/shared/assets/img/notfound.js +1 -1
  64. package/es/shared/assets/img/notfound.png.js +1 -1
  65. package/es/shared/assets/img/qr.js +1 -1
  66. package/es/shared/assets/img/qr.png.js +1 -1
  67. package/es/shared/assets/img/success.js +1 -1
  68. package/es/shared/assets/img/success.png.js +1 -1
  69. package/es/shared/assets/img/video.js +1 -1
  70. package/es/shared/assets/img/video.png.js +1 -1
  71. package/es/shared/assets/img/video_default_cover.js +1 -1
  72. package/es/shared/assets/img/video_default_cover.png.js +1 -1
  73. package/es/shared/assets/img/video_hover.js +1 -1
  74. package/es/shared/assets/img/video_play_hover.js +1 -1
  75. package/es/shared/assets/img/xb_big.js +1 -1
  76. package/es/shared/assets/img/xb_big.png.js +1 -1
  77. package/es/shared/assets/img/xb_small.js +1 -1
  78. package/es/shared/assets/img/xb_small.png.js +1 -1
  79. package/es/shared/components/VueDraggable/src/vuedraggable.d.ts +86 -0
  80. package/es/shared/utils/tapable/index.d.ts +139 -0
  81. package/package.json +2 -2
@@ -15,8 +15,8 @@ export { FormItemDepsCollector, useFormItemDeps } from './src/hooks/useFormItemD
15
15
  export { useAnchor } from './src/hooks/useAnchor.js';
16
16
  export { useFormContext } from './src/hooks/useFormContext.js';
17
17
  export { useCommonInjection, useSelectOptionProps } from './src/hooks/useCommonInjection.js';
18
- export { useAutographOptions, useRecommendOptions, useUrlConfigOptions } from './src/hooks/useFormRenderOptions.js';
19
- export { combineExtendKey, createInputSlot, createSlot, createUrlConfigParams, formRenderLog, injectOrProvide, isNestedFieldType, isNestedType, mergeDeepProperties, optionMatcherWithKeyword, parseNumberFromMaybeString, presetRequestHandler, splitExtendKey, validateMessageParser } from './src/utils/index.js';
18
+ export { optionMatcherCache, useAutographOptions, useRecommendOptions, useUrlConfigOptions } from './src/hooks/useFormRenderOptions.js';
19
+ export { combineExtendKey, createInputSlot, createSlot, createUrlConfigParams, formRenderLog, injectOrProvide, isNestedFieldType, isNestedType, keywordMatcher, mergeDeepProperties, parseNumberFromMaybeString, presetRequestHandler, splitExtendKey, validateMessageParser } from './src/utils/index.js';
20
20
  export * from '@formily/core';
21
21
  export { businessDateParser, isIdCard, isMobile, parseAge2Birthday, parseAgeFromContext, parseBirthday, parseIdCard, transformDateFormat } from './src/utils/business.js';
22
22
  export { findNextWidget, queryDecorator, queryInput } from './src/utils/dom.js';
@@ -30,6 +30,9 @@ declare const _default: import("vue").DefineComponent<{
30
30
  }>> & {}>>;
31
31
  _show: import("vue").Ref<boolean>;
32
32
  toggleShow: () => void;
33
+ headerClass: import("vue").ComputedRef<(string | {
34
+ 'form-render__linebarHeader--disabled': boolean;
35
+ })[]>;
33
36
  fieldKey: import("vue").ComputedRef<string>;
34
37
  formItemDepsCollector: import("../../../../../../../es/components/form-render").FormItemDepsCollector;
35
38
  TooltipMessage: import("vue").DefineComponent<{
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, inject, openBlock, createElementBlock, createElementVNode, createTextVNode, toDisplayString, createBlock, createCommentVNode, unref, createVNode, withCtx, renderSlot } from 'vue';
1
+ import { defineComponent, ref, computed, inject, openBlock, createElementBlock, createElementVNode, normalizeClass, unref, createTextVNode, toDisplayString, createBlock, createCommentVNode, Fragment, createVNode, withCtx, renderSlot } from 'vue';
2
2
  import '../../../../index.js';
3
3
  import TooltipMessage from '../../tooltipMessage.vue.js';
4
4
  import { InjectionFormItemDepsCollector, FormItemLineBarDepKeyPrepend } from '../../../constants/index.js';
@@ -28,6 +28,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
28
28
  return;
29
29
  _show.value = !_show.value;
30
30
  }
31
+ const headerClass = computed(() => {
32
+ return ["form-render__linebarHeader", { "form-render__linebarHeader--disabled": !!props.disabled }];
33
+ });
31
34
  const { fieldKey } = useFormField();
32
35
  const formItemDepsCollector = inject(InjectionFormItemDepsCollector);
33
36
  formItemDepsCollector.setDeps(fieldKey.value, FormItemLineBarDepKeyPrepend + fieldKey.value, (v = true) => {
@@ -36,7 +39,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
36
39
  return (_ctx, _cache) => {
37
40
  return openBlock(), createElementBlock("section", _hoisted_1, [
38
41
  createElementVNode("header", {
39
- class: "form-render__linebarHeader",
42
+ class: normalizeClass(unref(headerClass)),
40
43
  onClick: toggleShow
41
44
  }, [
42
45
  createElementVNode("div", _hoisted_2, [
@@ -46,8 +49,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
46
49
  message: __props.remark
47
50
  }, null, 8, ["message"])) : createCommentVNode("v-if", true)
48
51
  ]),
49
- _show.value ? (openBlock(), createBlock(unref(ChevronDown), { key: 0 })) : (openBlock(), createBlock(unref(ChevronUp), { key: 1 }))
50
- ]),
52
+ !__props.disabled ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
53
+ _show.value ? (openBlock(), createBlock(unref(ChevronDown), { key: 0 })) : (openBlock(), createBlock(unref(ChevronUp), { key: 1 }))
54
+ ], 64)) : createCommentVNode("v-if", true)
55
+ ], 2),
51
56
  createVNode(unref(NCollapseTransition), {
52
57
  class: "form-render__linebarItem",
53
58
  show: _show.value
@@ -30,6 +30,9 @@ export declare const LINEBAR: import("vue").DefineComponent<{
30
30
  }>> & {}>>;
31
31
  _show: import("vue").Ref<boolean>;
32
32
  toggleShow: () => void;
33
+ headerClass: import("vue").ComputedRef<(string | {
34
+ 'form-render__linebarHeader--disabled': boolean;
35
+ })[]>;
33
36
  fieldKey: import("vue").ComputedRef<string>;
34
37
  formItemDepsCollector: import("../../../hooks").FormItemDepsCollector;
35
38
  TooltipMessage: import("vue").DefineComponent<{
@@ -2,7 +2,7 @@ import { AnyObject } from '../../../../../../es/shared/types';
2
2
  import { PropType } from 'vue';
3
3
  export declare const RADIO: import("vue").DefineComponent<{
4
4
  value: {
5
- type: (NumberConstructor | ObjectConstructor | StringConstructor)[];
5
+ type: (ArrayConstructor | NumberConstructor | ObjectConstructor | StringConstructor)[];
6
6
  };
7
7
  options: {
8
8
  type: PropType<AnyObject[]>;
@@ -44,7 +44,7 @@ export declare const RADIO: import("vue").DefineComponent<{
44
44
  onChange: {};
45
45
  }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:value"[], "update:value", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
46
46
  value: {
47
- type: (NumberConstructor | ObjectConstructor | StringConstructor)[];
47
+ type: (ArrayConstructor | NumberConstructor | ObjectConstructor | StringConstructor)[];
48
48
  };
49
49
  options: {
50
50
  type: PropType<AnyObject[]>;
@@ -94,7 +94,7 @@ export declare const RADIO: import("vue").DefineComponent<{
94
94
  }>;
95
95
  export declare const CHECKBOX: import("vue").DefineComponent<{
96
96
  value: {
97
- type: (NumberConstructor | ObjectConstructor | StringConstructor)[];
97
+ type: (ArrayConstructor | NumberConstructor | ObjectConstructor | StringConstructor)[];
98
98
  };
99
99
  options: {
100
100
  type: PropType<AnyObject[]>;
@@ -136,7 +136,7 @@ export declare const CHECKBOX: import("vue").DefineComponent<{
136
136
  onChange: {};
137
137
  }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:value"[], "update:value", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
138
138
  value: {
139
- type: (NumberConstructor | ObjectConstructor | StringConstructor)[];
139
+ type: (ArrayConstructor | NumberConstructor | ObjectConstructor | StringConstructor)[];
140
140
  };
141
141
  options: {
142
142
  type: PropType<AnyObject[]>;
@@ -17,7 +17,7 @@ function createComponent(name, Wrapper, Item) {
17
17
  name,
18
18
  props: {
19
19
  value: {
20
- type: [String, Number, Object]
20
+ type: [String, Number, Object, Array]
21
21
  },
22
22
  options: {
23
23
  type: Array,
@@ -1,12 +1,12 @@
1
1
  import { defineComponent, computed, inject, createVNode } from 'vue';
2
- import { cloneDeep } from 'lodash-es';
2
+ import { useDebounceFn } from '@vueuse/core';
3
+ import { cloneDeep, isString } from 'lodash-es';
3
4
  import { useCommonInjection, useSelectOptionProps } from '../../hooks/useCommonInjection.js';
4
5
  import { InjectionChangeContextCollector } from '../../constants/index.js';
5
6
  import '../../../../../shared/utils/index.js';
6
7
  import '../../../index.js';
7
8
  import '../../utils/index.js';
8
9
  import { useFormField } from '../../hooks/useFormField.js';
9
- import '@vueuse/core';
10
10
  import '../../../../../shared/utils/tapable/SyncHook.js';
11
11
  import '../../../../../shared/utils/tapable/SyncBailHook.js';
12
12
  import '../../../../../shared/utils/tapable/SyncWaterfallHook.js';
@@ -23,7 +23,7 @@ import 'date-fns';
23
23
  import { connect, mapProps } from '@formily/vue';
24
24
  import '@vue/shared';
25
25
  import './index.js';
26
- import { useUrlConfigOptions, useAutographOptions, useRecommendOptions } from '../../hooks/useFormRenderOptions.js';
26
+ import { useUrlConfigOptions, useAutographOptions, useRecommendOptions, optionMatcherCache } from '../../hooks/useFormRenderOptions.js';
27
27
  import { NSelect } from 'naive-ui';
28
28
  import { createVisitedSetter, assignUpdateValue, assignClearBindVisited } from '../../utils/schema.js';
29
29
 
@@ -101,7 +101,7 @@ const script = defineComponent({
101
101
  getRecommend,
102
102
  postRecommend,
103
103
  sortedOptions
104
- } = useRecommendOptions(props, options, emit, valueKey);
104
+ } = useRecommendOptions(props, options, emit, labelKey, valueKey);
105
105
  const {
106
106
  field,
107
107
  fieldKey
@@ -115,10 +115,10 @@ const script = defineComponent({
115
115
  return sortedOptions.value.find((option) => option[valueKey.value] === v2);
116
116
  }
117
117
  });
118
- async function fetchData(content = "") {
118
+ const fetchData = useDebounceFn(async (content = "") => {
119
119
  fetchOptions(content);
120
- getRecommend();
121
- }
120
+ getRecommend(content);
121
+ }, 400);
122
122
  const {
123
123
  injectValueValidate,
124
124
  injectValueWatchFromEmpty,
@@ -131,6 +131,23 @@ const script = defineComponent({
131
131
  menuProps,
132
132
  nodeProps
133
133
  } = useSelectOptionProps();
134
+ function renderLabel(option) {
135
+ const label = option[labelKey.value];
136
+ if (!label || !isString(label))
137
+ return "";
138
+ const renderLabels = optionMatcherCache.get(option);
139
+ if (!renderLabels)
140
+ return label;
141
+ return createVNode("section", null, [renderLabels.map((chars, idx) => {
142
+ if (idx === 0 || !chars)
143
+ return null;
144
+ return createVNode("span", {
145
+ "style": {
146
+ color: idx % 2 === 0 ? "var(--n-option-text-color-active)" : ""
147
+ }
148
+ }, [chars]);
149
+ })]);
150
+ }
134
151
  return () => createVNode(NSelect, {
135
152
  "key": key.value,
136
153
  "remote": true,
@@ -144,7 +161,8 @@ const script = defineComponent({
144
161
  "options": sortedOptions.value,
145
162
  "onSearch": fetchData,
146
163
  "onUpdate:show": (show) => show && fetchData(),
147
- "onFocus": createVisitedSetter(field)
164
+ "onFocus": createVisitedSetter(field),
165
+ "renderLabel": renderLabel
148
166
  }, slots);
149
167
  }
150
168
  });
@@ -12,4 +12,4 @@ export { FormItemDepsCollector, useFormItemDeps } from './useFormItemDeps.js';
12
12
  export { useAnchor } from './useAnchor.js';
13
13
  export { useFormContext } from './useFormContext.js';
14
14
  export { useCommonInjection, useSelectOptionProps } from './useCommonInjection.js';
15
- export { useAutographOptions, useRecommendOptions, useUrlConfigOptions } from './useFormRenderOptions.js';
15
+ export { optionMatcherCache, useAutographOptions, useRecommendOptions, useUrlConfigOptions } from './useFormRenderOptions.js';
@@ -276,7 +276,8 @@ function useFieldListAdaptor(collector) {
276
276
  return fin;
277
277
  }, {});
278
278
  function bindIndex(schema, idx) {
279
- return { ...schema, "x-index": idx };
279
+ schema["x-index"] = idx;
280
+ return schema;
280
281
  }
281
282
  function createFieldName(fieldItem) {
282
283
  if (fieldItem.suffixConfig) {
@@ -2,6 +2,7 @@ import { AnyObject, Func } from '../../../../../es/shared/types';
2
2
  import { Ref } from 'vue';
3
3
  import { FormWordbook, RecommendIds, UrlConfig } from '../../../../../es/components/form-render';
4
4
  import { RecommendItem } from '../../../../../es/components/recommend-search/src/types';
5
+ export declare const optionMatcherCache: WeakMap<AnyObject, string[]>;
5
6
  export declare function useRecommendOptions(props: {
6
7
  recommend: boolean;
7
8
  commonList?: RecommendItem[];
@@ -9,10 +10,10 @@ export declare function useRecommendOptions(props: {
9
10
  getRecommendInfo?: () => RecommendIds;
10
11
  recommendCache: boolean;
11
12
  recommendNum: number;
12
- }, options: Ref<AnyObject[]>, emit: Func, valueKey: Ref<string>): {
13
+ }, options: Ref<AnyObject[]>, emit: Func, labelKey: Ref<string>, valueKey: Ref<string>): {
13
14
  postRecommend: (value: unknown) => Promise<void>;
14
- getRecommend: () => Promise<void>;
15
- sortedOptions: import("vue").ComputedRef<any[]>;
15
+ getRecommend: (content?: string) => Promise<void>;
16
+ sortedOptions: import("vue").ComputedRef<AnyObject[]>;
16
17
  };
17
18
  export declare function useUrlConfigOptions(props: {
18
19
  urlConfig?: UrlConfig;
@@ -4,7 +4,7 @@ import { isString, isEqual, omit, isFunction } from 'lodash-es';
4
4
  import { computed, inject, ref, watch } from 'vue';
5
5
  import '../../index.js';
6
6
  import { InjectionAsyncQueue, InjectionFormItemDepsCollector } from '../constants/index.js';
7
- import { createUrlConfigParams, formRenderLog, optionMatcherWithKeyword } from '../utils/index.js';
7
+ import { createUrlConfigParams, formRenderLog, keywordMatcher } from '../utils/index.js';
8
8
  import { useFormField } from './useFormField.js';
9
9
  import { useFormRequest } from './useFormRequest.js';
10
10
 
@@ -21,9 +21,44 @@ function createPropRef(props, key) {
21
21
  }
22
22
  });
23
23
  }
24
- function useRecommendOptions(props, options, emit, valueKey) {
24
+ const optionMatcherCache = /* @__PURE__ */ new WeakMap();
25
+ const searchContentMatcherCache = /* @__PURE__ */ new Map();
26
+ function useSearchContent() {
27
+ const searchContent = ref();
28
+ const searchContentMatcher = computed(() => {
29
+ if (!searchContent.value)
30
+ return /./;
31
+ return new RegExp(
32
+ `(.*)${searchContent.value.split("").map((char) => `(${char})`).join("(.*)")}(.*)`
33
+ );
34
+ });
35
+ function filter(option, labelKey) {
36
+ if (!searchContent.value)
37
+ return true;
38
+ const label = option ? option[labelKey] : "";
39
+ if (!isString(label))
40
+ return false;
41
+ const cacheObj = searchContentMatcherCache.get(searchContent.value) || {};
42
+ const matched = Reflect.has(cacheObj, label) ? cacheObj[label] : label.match(searchContentMatcher.value);
43
+ cacheObj[label] = matched;
44
+ searchContentMatcherCache.set(searchContent.value, cacheObj);
45
+ if (matched) {
46
+ optionMatcherCache.set(option, matched);
47
+ return true;
48
+ }
49
+ return keywordMatcher(label, option.keyword);
50
+ }
51
+ function optionSearchFilter(options, _labelKey) {
52
+ if (!searchContent.value)
53
+ return options;
54
+ return options.filter((option) => filter(option, _labelKey));
55
+ }
56
+ return { searchContent, searchContentMatcher, optionSearchFilter };
57
+ }
58
+ function useRecommendOptions(props, options, emit, labelKey, valueKey) {
25
59
  const commonListRef = createPropRef(props, "commonList");
26
60
  const recentListRef = createPropRef(props, "recentList");
61
+ const { searchContent, optionSearchFilter } = useSearchContent();
27
62
  function getRecommendOption(item) {
28
63
  return jsonParse(item.itemObj);
29
64
  }
@@ -44,7 +79,11 @@ function useRecommendOptions(props, options, emit, valueKey) {
44
79
  return item[valueKey.value] !== option[valueKey.value];
45
80
  }
46
81
  });
47
- return [...commonOptions.value, ...recentOptions.value, ...optionWithoutRecommend];
82
+ return [
83
+ ...optionSearchFilter(commonOptions.value, labelKey.value),
84
+ ...optionSearchFilter(recentOptions.value, labelKey.value),
85
+ ...optionWithoutRecommend
86
+ ];
48
87
  });
49
88
  const { getRecommendRequestInfo, getHttpInstance } = useFormRequest();
50
89
  function getRecommendConfig(type) {
@@ -55,9 +94,10 @@ function useRecommendOptions(props, options, emit, valueKey) {
55
94
  }
56
95
  const { fieldKey } = useFormField();
57
96
  const asyncQueue = inject(InjectionAsyncQueue);
58
- async function getRecommend() {
97
+ async function getRecommend(content) {
59
98
  if (!props.recommend)
60
99
  return;
100
+ searchContent.value = content;
61
101
  if (commonListRef.value && recentListRef.value && props.recommendCache)
62
102
  return;
63
103
  const list = await asyncQueue.addAsync(createParams(fieldKey.value, props.recommendCache));
@@ -125,11 +165,11 @@ function useUrlConfigOptions(props, valueRef) {
125
165
  var _a, _b;
126
166
  return (_b = (_a = props.urlConfig) == null ? void 0 : _a.valueKey) != null ? _b : "value";
127
167
  });
168
+ const { searchContent, optionSearchFilter } = useSearchContent();
128
169
  const remoteOptions = ref(null);
129
- const lastSearch = ref("");
130
170
  const { field, fieldKey } = useFormField();
131
171
  const fetchData = useDebounceFn(async function(content) {
132
- lastSearch.value = content || "";
172
+ searchContent.value = content || "";
133
173
  if (!props.urlConfig) {
134
174
  return remoteOptions.value = null;
135
175
  }
@@ -147,10 +187,10 @@ function useUrlConfigOptions(props, valueRef) {
147
187
  }, 300);
148
188
  const options = computed(() => {
149
189
  if (remoteOptions.value)
150
- return optionMatcherWithKeyword(remoteOptions.value, lastSearch.value, labelKey.value);
190
+ return optionSearchFilter(remoteOptions.value, labelKey.value);
151
191
  if (!Array.isArray(props.options))
152
192
  return [];
153
- return optionMatcherWithKeyword(props.options, lastSearch.value, labelKey.value);
193
+ return optionSearchFilter(props.options, labelKey.value);
154
194
  });
155
195
  const formItemDepsCollector = inject(InjectionFormItemDepsCollector);
156
196
  watch(
@@ -183,12 +223,12 @@ function useAutographOptions(props, valueRef) {
183
223
  var _a, _b;
184
224
  return (_b = (_a = props.wordbook) == null ? void 0 : _a.value_key) != null ? _b : "value";
185
225
  });
226
+ const { searchContent, optionSearchFilter } = useSearchContent();
186
227
  const remoteOptions = ref(null);
187
- const lastSearch = ref("");
188
228
  const { fieldKey } = useFormField();
189
229
  const { getSearchRequestInfo } = useFormRequest();
190
230
  const fetchData = useDebounceFn(async function(content) {
191
- lastSearch.value = content || "";
231
+ searchContent.value = content || "";
192
232
  if (!props.autograph || !props.wordbook) {
193
233
  return remoteOptions.value = null;
194
234
  }
@@ -211,10 +251,10 @@ function useAutographOptions(props, valueRef) {
211
251
  }, 300);
212
252
  const options = computed(() => {
213
253
  if (remoteOptions.value)
214
- return optionMatcherWithKeyword(remoteOptions.value, lastSearch.value, labelKey.value);
254
+ return optionSearchFilter(remoteOptions.value, labelKey.value);
215
255
  if (!Array.isArray(props.options))
216
256
  return [];
217
- return optionMatcherWithKeyword(props.options, lastSearch.value, labelKey.value);
257
+ return optionSearchFilter(props.options, labelKey.value);
218
258
  });
219
259
  watch(
220
260
  () => props.wordbook,
@@ -231,4 +271,4 @@ function useAutographOptions(props, valueRef) {
231
271
  return { labelKey, valueKey, options, fetchData };
232
272
  }
233
273
 
234
- export { useAutographOptions, useRecommendOptions, useUrlConfigOptions };
274
+ export { optionMatcherCache, useAutographOptions, useRecommendOptions, useUrlConfigOptions };
@@ -1,4 +1,4 @@
1
- import { AnyObject, ArrayAble, Nullable } from '../../../../../es/shared/types';
1
+ import { AnyObject, ArrayAble } from '../../../../../es/shared/types';
2
2
  import { GeneralField } from '@formily/core';
3
3
  import { FunctionalComponent, InjectionKey, VNode } from 'vue';
4
4
  import { FieldItem, UrlConfig } from '../types';
@@ -14,9 +14,7 @@ export declare function createSlot(renderer: unknown, props: AnyObject, defaultR
14
14
  };
15
15
  export declare function createInputSlot(props: AnyObject, defaultRenderer?: (v: unknown) => unknown[]): import("vue").ComputedRef<Record<string, FunctionalComponent<{}, {}>>>;
16
16
  export declare function presetRequestHandler(res: unknown): AnyObject[];
17
- export declare function optionMatcherWithKeyword(options: AnyObject[], input: Nullable<string>, key: string, matcherOption?: {
18
- keyword?: string;
19
- }): AnyObject[];
17
+ export declare const keywordMatcher: import("@vueuse/core").UseMemoizedFn<boolean, [text: unknown, keyword: unknown]>;
20
18
  export declare function validateMessageParser(message: string, fieldItem: Omit<FieldItem, 'reactions'>): string;
21
19
  export declare function combineExtendKey(fieldList: FieldItem[], values: AnyObject): AnyObject;
22
20
  export declare function splitExtendKey(fieldList: FieldItem[], values: AnyObject): AnyObject;
@@ -138,20 +138,6 @@ const keywordMatcher = useMemoize(function(text, keyword) {
138
138
  }, "");
139
139
  }
140
140
  });
141
- function optionMatcherWithKeyword(options, input, key, matcherOption = {
142
- keyword: "keyword"
143
- }) {
144
- if (!input)
145
- return options;
146
- return options.filter((option) => {
147
- if (!isString(keyFor(option)))
148
- return;
149
- return keyFor(option).includes(input) || matcherOption.keyword && keywordMatcher(input, option[matcherOption.keyword]);
150
- });
151
- function keyFor(option) {
152
- return option[key];
153
- }
154
- }
155
141
  function validateMessageParser(message, fieldItem) {
156
142
  if (!isString(message) || !message)
157
143
  return "";
@@ -252,4 +238,4 @@ async function createUrlConfigParams({
252
238
  };
253
239
  }
254
240
 
255
- export { combineExtendKey, createInputSlot, createSlot, createUrlConfigParams, formRenderLog, injectOrProvide, isNestedFieldType, isNestedType, mergeDeepProperties, optionMatcherWithKeyword, parseNumberFromMaybeString, presetRequestHandler, splitExtendKey, validateMessageParser };
241
+ export { combineExtendKey, createInputSlot, createSlot, createUrlConfigParams, formRenderLog, injectOrProvide, isNestedFieldType, isNestedType, keywordMatcher, mergeDeepProperties, parseNumberFromMaybeString, presetRequestHandler, splitExtendKey, validateMessageParser };
@@ -1 +1 @@
1
- .annotation-edit{align-items:center;color:#0067ee;cursor:pointer;display:inline-flex;font-size:16px;user-select:none}.annotation-edit.is-active{color:#ff9828}.annotation-edit__icon{align-items:center;display:inline-flex}.annotation-edit__textarea{min-width:200px}.annotation-edit__footer{align-items:center;display:flex;flex-wrap:nowrap;gap:8px;justify-content:space-between;opacity:.5}.annotation-edit__footer>div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.annotation-edit__footer>div:first-of-type{min-width:30%}.recommend-search__menu{min-height:100px}.recommend-search__menuRecommendList{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.recommend-search__menuRecommendList .n-tag{cursor:pointer}.recommend-search__recentRecommend{margin-bottom:8px}.recommend-search__recentRecommend>header{align-items:center;color:rgba(0,0,0,.4);display:flex;justify-content:space-between}.recommend-search__recentRecommend>header .n-icon:hover{color:rgba(0,0,0,.6);cursor:pointer}.recommend-search__commonRecommend{margin-bottom:8px}.recommend-search__commonRecommend>header{align-items:center;color:rgba(0,0,0,.4);display:flex;justify-content:space-between}.recommend-search__commonRecommend>header .n-icon:hover{color:rgba(0,0,0,.6);cursor:pointer}.recommend-search__option{align-items:center;border-radius:4px;cursor:pointer;display:flex;height:32px;justify-content:space-between;padding:0 8px}.recommend-search__optionText{max-width:calc(100% - 24px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recommend-search__option.is-active{color:var(--n-color)!important}.recommend-search__option.is-active .n-icon{font-size:20px}.recommend-search__option:hover{background:rgba(0,0,0,.03)}.recommend-search__optionContainer{margin:-8px -10px}.recommend-search__empty{align-items:center;color:rgba(0,0,0,.3);display:flex;height:100px;justify-content:center}.search-cascader__menuWrapper{display:flex;flex-wrap:nowrap;margin:-8px -14px}.search-cascader__input input{cursor:pointer!important}.search-cascader__option{align-items:center;border-radius:4px;box-sizing:border-box;display:flex;height:32px;justify-content:space-between;padding:0 8px 0 16px;width:100%}.search-cascader__option--active{background:#f8f8f8}.search-cascader__option:hover{background:#f5f5f5;cursor:pointer}.search-cascader__optionWrapper{background:#fff;height:256px;overflow-x:auto;width:calc(var(--menu-width)*1px)}.search-cascader__optionWrapper:not(:last-of-type){border:solid #e5e5e5;border-width:0 1px 0 0}.search-cascader__optionText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 20px)}.search-cascader__option svg{color:#bfbfbf;flex-shrink:0;font-size:12px;width:20px}.search-cascader__option svg.rotate{animation:rotate 1s linear infinite}.search-cascader__emptyWrapper{align-items:center;background:#fff;box-sizing:border-box;display:flex;height:300px;justify-content:center;padding:16px;width:100%}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.form-render__wrapper{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));max-height:var(--form-height);overflow-y:auto;position:relative}.form-render__formItem{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__formItem .n-date-picker,.form-render__formItem .n-input-number{width:100%}.form-render__formItemLabel{align-items:center;display:inline-flex;justify-content:space-between;position:relative}.form-render__formItemLabel--operation{align-items:center;display:flex;gap:2px;position:absolute;right:0;top:50%;transform:translateY(-50%)}.form-render__formItemLabel--tooltip{font-size:0;line-height:1;width:16px}.form-render__formItemLabel--text{white-space:nowrap}.form-render__formItem .n-form-item-label{display:inline-flex}.form-render__formItem .n-form-item-label [annotation-hover-show=true]{visibility:hidden}.form-render__formItem .n-form-item-label:hover [annotation-hover-show=true]{visibility:visible}.form-render__linebar{grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__linebarHeader{align-items:center;background:#f2f2f2;border-radius:4px;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:32px;justify-content:space-between;margin-bottom:8px;padding:0 16px}.form-render__linebarHeader>svg{color:rgba(33,33,33,.4);width:14px}.form-render__linebarHeaderTitle{align-items:center;display:flex;gap:4px;vertical-align:middle}.form-render__linebarHeaderTitle svg{height:16px;transform:translateY(-1px)}.form-render__linebarItem{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__linebreaks{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__inputGroup{align-items:flex-start;display:flex;grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__inputGroup>div{flex:1}.form-render__inputGroup>div:not(:last-of-type) .n-base-selection__border,.form-render__inputGroup>div:not(:last-of-type) .n-input__border{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0}.form-render__inputGroup>div:last-of-type .n-base-selection__border,.form-render__inputGroup>div:last-of-type .n-input__border{border-bottom-left-radius:0;border-top-left-radius:0}.form-render__inputGroup .n-form-item--left-labelled:not(:first-of-type)>label{display:none}.form-render__combination{width:100%}.form-render__combinationHeader{display:flex;gap:12px}.form-render__combinationHeader>h3{font-size:16px;font-weight:700;margin:0;padding:0}.form-render__combinationHeader .n-button__icon{font-size:14px;margin:0 2px 0 0}.form-render__combinationHeaderText{font-size:16px;font-weight:500}.form-render__combinationClose{font-size:16px;height:14px;position:absolute;right:5px;top:5px;width:14px}.form-render__combinationContentJson{position:relative}.form-render__combinationContent{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));position:relative}.form-render__complex{width:100%}.form-render__complexContent--grid{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__complexContent--flex{display:flex!important;gap:0 8px}.form-render__selectMenu .n-scrollbar-rail__scrollbar{display:none!important}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar,.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{display:unset!important;height:6px;width:6px}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px}.form-render__selectMenu .v-vl-items{min-width:100%;width:max-content}.form-render__selectOption .n-base-select-option__content{overflow:visible!important;text-overflow:unset!important;word-break:keep-all!important}.form-render__labelField{align-items:start;display:grid!important;display:inline-grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));grid-template-columns:repeat(var(--column),auto)!important;margin-left:16px}.form-render__labelField .n-form-item{display:inline-grid}.form-render__labelField label.n-form-item-label.n-form-item-label--left-mark{align-items:center}.form-render__labelField .n-checkbox[aria-checked=false] .n-checkbox-box{background-color:transparent}.form-render__labelField .n-checkbox[aria-checked=false] .n-checkbox-icon .check-icon{opacity:0}.form-render__labelField .n-checkbox[aria-checked=false] .n-checkbox-box__border{border:var(--n-border)}.form-render .form-render__formItem .n-checkbox,.form-render .form-render__formItem .n-radio{align-items:center}.form-render .form-render__formItem .n-radio-input{left:auto;right:auto}.form-render .form-render__formItem .n-checkbox-group>.n-space:not([vertical-space=true]),.form-render .form-render__formItem .n-radio-group>.n-space:not([vertical-space=true]){align-items:center!important}.form-render .form-render__formItem .n-checkbox__label{align-items:center;display:inline-flex}
1
+ .annotation-edit{align-items:center;color:#0067ee;cursor:pointer;display:inline-flex;font-size:16px;user-select:none}.annotation-edit.is-active{color:#ff9828}.annotation-edit__icon{align-items:center;display:inline-flex}.annotation-edit__textarea{min-width:200px}.annotation-edit__footer{align-items:center;display:flex;flex-wrap:nowrap;gap:8px;justify-content:space-between;opacity:.5}.annotation-edit__footer>div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.annotation-edit__footer>div:first-of-type{min-width:30%}.recommend-search__menu{min-height:100px}.recommend-search__menuRecommendList{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.recommend-search__menuRecommendList .n-tag{cursor:pointer}.recommend-search__recentRecommend{margin-bottom:8px}.recommend-search__recentRecommend>header{align-items:center;color:rgba(0,0,0,.4);display:flex;justify-content:space-between}.recommend-search__recentRecommend>header .n-icon:hover{color:rgba(0,0,0,.6);cursor:pointer}.recommend-search__commonRecommend{margin-bottom:8px}.recommend-search__commonRecommend>header{align-items:center;color:rgba(0,0,0,.4);display:flex;justify-content:space-between}.recommend-search__commonRecommend>header .n-icon:hover{color:rgba(0,0,0,.6);cursor:pointer}.recommend-search__option{align-items:center;border-radius:4px;cursor:pointer;display:flex;height:32px;justify-content:space-between;padding:0 8px}.recommend-search__optionText{max-width:calc(100% - 24px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recommend-search__option.is-active{color:var(--n-color)!important}.recommend-search__option.is-active .n-icon{font-size:20px}.recommend-search__option:hover{background:rgba(0,0,0,.03)}.recommend-search__optionContainer{margin:-8px -10px}.recommend-search__empty{align-items:center;color:rgba(0,0,0,.3);display:flex;height:100px;justify-content:center}.search-cascader__menuWrapper{display:flex;flex-wrap:nowrap;margin:-8px -14px}.search-cascader__input input{cursor:pointer!important}.search-cascader__option{align-items:center;border-radius:4px;box-sizing:border-box;display:flex;height:32px;justify-content:space-between;padding:0 8px 0 16px;width:100%}.search-cascader__option--active{background:#f8f8f8}.search-cascader__option:hover{background:#f5f5f5;cursor:pointer}.search-cascader__optionWrapper{background:#fff;height:256px;overflow-x:auto;width:calc(var(--menu-width)*1px)}.search-cascader__optionWrapper:not(:last-of-type){border:solid #e5e5e5;border-width:0 1px 0 0}.search-cascader__optionText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 20px)}.search-cascader__option svg{color:#bfbfbf;flex-shrink:0;font-size:12px;width:20px}.search-cascader__option svg.rotate{animation:rotate 1s linear infinite}.search-cascader__emptyWrapper{align-items:center;background:#fff;box-sizing:border-box;display:flex;height:300px;justify-content:center;padding:16px;width:100%}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.form-render__wrapper{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));max-height:var(--form-height);overflow-y:auto;position:relative}.form-render__formItem{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__formItem .n-date-picker,.form-render__formItem .n-input-number{width:100%}.form-render__formItemLabel{align-items:center;display:inline-flex;justify-content:space-between;position:relative}.form-render__formItemLabel--operation{align-items:center;display:flex;gap:2px;position:absolute;right:0;top:50%;transform:translateY(-50%)}.form-render__formItemLabel--tooltip{font-size:0;line-height:1;width:16px}.form-render__formItemLabel--text{white-space:nowrap}.form-render__formItem .n-form-item-label{display:inline-flex}.form-render__formItem .n-form-item-label [annotation-hover-show=true]{visibility:hidden}.form-render__formItem .n-form-item-label:hover [annotation-hover-show=true]{visibility:visible}.form-render__linebar{grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__linebarHeader{align-items:center;background:#f2f2f2;border-radius:4px;cursor:pointer;display:flex;font-size:14px;font-weight:600;height:32px;justify-content:space-between;margin-bottom:8px;padding:0 16px}.form-render__linebarHeader>svg{color:rgba(33,33,33,.4);width:14px}.form-render__linebarHeaderTitle{align-items:center;display:flex;gap:4px;vertical-align:middle}.form-render__linebarHeaderTitle svg{height:16px;transform:translateY(-1px)}.form-render__linebarHeader--disabled{cursor:auto}.form-render__linebarItem{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__linebreaks{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__inputGroup{align-items:flex-start;display:flex;grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__inputGroup>div{flex:1}.form-render__inputGroup>div:not(:last-of-type) .n-base-selection__border,.form-render__inputGroup>div:not(:last-of-type) .n-input__border{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0}.form-render__inputGroup>div:last-of-type .n-base-selection__border,.form-render__inputGroup>div:last-of-type .n-input__border{border-bottom-left-radius:0;border-top-left-radius:0}.form-render__inputGroup .n-form-item--left-labelled:not(:first-of-type)>label{display:none}.form-render__combination{width:100%}.form-render__combinationHeader{display:flex;gap:12px}.form-render__combinationHeader>h3{font-size:16px;font-weight:700;margin:0;padding:0}.form-render__combinationHeader .n-button__icon{font-size:14px;margin:0 2px 0 0}.form-render__combinationHeaderText{font-size:16px;font-weight:500}.form-render__combinationClose{font-size:16px;height:14px;position:absolute;right:5px;top:5px;width:14px}.form-render__combinationContentJson{position:relative}.form-render__combinationContent{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));position:relative}.form-render__complex{width:100%}.form-render__complexContent--grid{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__complexContent--flex{display:flex!important;gap:0 8px}.form-render__selectMenu .n-scrollbar-rail__scrollbar{display:none!important}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar,.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{display:unset!important;height:6px;width:6px}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px}.form-render__selectMenu .v-vl-items{min-width:100%;width:max-content}.form-render__selectOption .n-base-select-option__content{overflow:visible!important;text-overflow:unset!important;word-break:keep-all!important}.form-render__labelField{align-items:start;display:grid!important;display:inline-grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));grid-template-columns:repeat(var(--column),auto)!important;margin-left:16px}.form-render__labelField .n-form-item{display:inline-grid}.form-render__labelField label.n-form-item-label.n-form-item-label--left-mark{align-items:center}.form-render__labelField .n-checkbox[aria-checked=false] .n-checkbox-box{background-color:transparent}.form-render__labelField .n-checkbox[aria-checked=false] .n-checkbox-icon .check-icon{opacity:0}.form-render__labelField .n-checkbox[aria-checked=false] .n-checkbox-box__border{border:var(--n-border)}.form-render .form-render__formItem .n-checkbox,.form-render .form-render__formItem .n-radio{align-items:center}.form-render .form-render__formItem .n-radio-input{left:auto;right:auto}.form-render .form-render__formItem .n-checkbox-group>.n-space:not([vertical-space=true]),.form-render .form-render__formItem .n-radio-group>.n-space:not([vertical-space=true]){align-items:center!important}.form-render .form-render__formItem .n-checkbox__label{align-items:center;display:inline-flex}