@antdv-vue/pro-utils 0.0.0-stage → 2.1.1

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 (174) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/README.md +80 -2
  3. package/dist/autoFocusToFirstChild/index.d.ts +9 -0
  4. package/dist/autoFocusToFirstChild/index.js +36 -0
  5. package/dist/childrenToArray/index.d.ts +7 -0
  6. package/dist/childrenToArray/index.js +8 -0
  7. package/dist/components/CopyToClipboard/copy/index.d.ts +10 -0
  8. package/dist/components/CopyToClipboard/copy/index.js +84 -0
  9. package/dist/components/CopyToClipboard/copy/toggle-selection.d.ts +4 -0
  10. package/dist/components/CopyToClipboard/copy/toggle-selection.js +27 -0
  11. package/dist/components/CopyToClipboard/index.d.ts +14 -0
  12. package/dist/components/CopyToClipboard/index.js +13 -0
  13. package/dist/components/Draggable/Draggable.d.ts +62 -0
  14. package/dist/components/Draggable/Draggable.js +162 -0
  15. package/dist/components/Draggable/DraggableCore.d.ts +40 -0
  16. package/dist/components/Draggable/DraggableCore.js +149 -0
  17. package/dist/components/Draggable/index.d.ts +4 -0
  18. package/dist/components/Draggable/index.js +3 -0
  19. package/dist/components/Draggable/types.d.ts +30 -0
  20. package/dist/components/Draggable/types.js +1 -0
  21. package/dist/components/Draggable/utils/domFns.d.ts +36 -0
  22. package/dist/components/Draggable/utils/domFns.js +165 -0
  23. package/dist/components/Draggable/utils/getPrefix.d.ts +6 -0
  24. package/dist/components/Draggable/utils/getPrefix.js +31 -0
  25. package/dist/components/Draggable/utils/positionFns.d.ts +13 -0
  26. package/dist/components/Draggable/utils/positionFns.js +96 -0
  27. package/dist/components/Draggable/utils/shims.d.ts +7 -0
  28. package/dist/components/Draggable/utils/shims.js +19 -0
  29. package/dist/components/DropdownFooter/index.d.ts +20 -0
  30. package/dist/components/DropdownFooter/index.js +80 -0
  31. package/dist/components/DropdownFooter/style/index.d.ts +8 -0
  32. package/dist/components/DropdownFooter/style/index.js +18 -0
  33. package/dist/components/ErrorBoundary/index.d.ts +25 -0
  34. package/dist/components/ErrorBoundary/index.js +65 -0
  35. package/dist/components/FieldLabel/index.d.ts +31 -0
  36. package/dist/components/FieldLabel/index.js +212 -0
  37. package/dist/components/FieldLabel/style/index.d.ts +8 -0
  38. package/dist/components/FieldLabel/style/index.js +146 -0
  39. package/dist/components/FilterDropdown/index.d.ts +38 -0
  40. package/dist/components/FilterDropdown/index.js +91 -0
  41. package/dist/components/FilterDropdown/style/index.d.ts +8 -0
  42. package/dist/components/FilterDropdown/style/index.js +21 -0
  43. package/dist/components/FormItem/FormItemInput.d.ts +34 -0
  44. package/dist/components/FormItem/FormItemInput.js +163 -0
  45. package/dist/components/FormItem/ItemHolder.d.ts +58 -0
  46. package/dist/components/FormItem/ItemHolder.js +289 -0
  47. package/dist/components/FormItem/index.d.ts +64 -0
  48. package/dist/components/FormItem/index.js +591 -0
  49. package/dist/components/FormList/Field.d.ts +29 -0
  50. package/dist/components/FormList/Field.js +106 -0
  51. package/dist/components/FormList/FieldContext.d.ts +15 -0
  52. package/dist/components/FormList/FieldContext.js +11 -0
  53. package/dist/components/FormList/InternalField.d.ts +51 -0
  54. package/dist/components/FormList/InternalField.js +149 -0
  55. package/dist/components/FormList/ListContext.d.ts +12 -0
  56. package/dist/components/FormList/ListContext.js +11 -0
  57. package/dist/components/FormList/index.d.ts +36 -0
  58. package/dist/components/FormList/index.js +145 -0
  59. package/dist/components/FormList/interface.d.ts +9 -0
  60. package/dist/components/FormList/interface.js +1 -0
  61. package/dist/components/FormList/namePathType.d.ts +9 -0
  62. package/dist/components/FormList/namePathType.js +1 -0
  63. package/dist/components/FormList/utils/index.d.ts +15 -0
  64. package/dist/components/FormList/utils/index.js +37 -0
  65. package/dist/components/InlineErrorFormItem/InlineErrorFormItemPopover.d.ts +21 -0
  66. package/dist/components/InlineErrorFormItem/InlineErrorFormItemPopover.js +95 -0
  67. package/dist/components/InlineErrorFormItem/index.d.ts +14 -0
  68. package/dist/components/InlineErrorFormItem/index.js +44 -0
  69. package/dist/components/InlineErrorFormItem/style/index.d.ts +8 -0
  70. package/dist/components/InlineErrorFormItem/style/index.js +46 -0
  71. package/dist/components/LabelIconTip/index.d.ts +16 -0
  72. package/dist/components/LabelIconTip/index.js +79 -0
  73. package/dist/components/LabelIconTip/style/index.d.ts +8 -0
  74. package/dist/components/LabelIconTip/style/index.js +38 -0
  75. package/dist/components/ProFormContext/index.d.ts +51 -0
  76. package/dist/components/ProFormContext/index.js +11 -0
  77. package/dist/conversionMomentValue/index.d.ts +48 -0
  78. package/dist/conversionMomentValue/index.js +103 -0
  79. package/dist/dateArrayFormatter/index.d.ts +14 -0
  80. package/dist/dateArrayFormatter/index.js +38 -0
  81. package/dist/deepMerge/index.d.ts +4 -0
  82. package/dist/deepMerge/index.js +17 -0
  83. package/dist/genCopyable/index.d.ts +27 -0
  84. package/dist/genCopyable/index.js +82 -0
  85. package/dist/getFieldPropsOrFormItemProps/index.d.ts +18 -0
  86. package/dist/getFieldPropsOrFormItemProps/index.js +15 -0
  87. package/dist/getSlot/index.d.ts +8 -0
  88. package/dist/getSlot/index.js +11 -0
  89. package/dist/hooks/index.d.ts +9 -0
  90. package/dist/hooks/index.js +9 -0
  91. package/dist/hooks/useDebounceFn/index.d.ts +12 -0
  92. package/dist/hooks/useDebounceFn/index.js +34 -0
  93. package/dist/hooks/useDebounceValue/index.d.ts +12 -0
  94. package/dist/hooks/useDebounceValue/index.js +21 -0
  95. package/dist/hooks/useDocumentTitle/index.d.ts +10 -0
  96. package/dist/hooks/useDocumentTitle/index.js +12 -0
  97. package/dist/hooks/useEffect/index.d.ts +6 -0
  98. package/dist/hooks/useEffect/index.js +17 -0
  99. package/dist/hooks/useFetchData/index.d.ts +12 -0
  100. package/dist/hooks/useFetchData/index.js +35 -0
  101. package/dist/hooks/useLayoutEffect/index.d.ts +6 -0
  102. package/dist/hooks/useLayoutEffect/index.js +21 -0
  103. package/dist/hooks/useMemo/index.d.ts +6 -0
  104. package/dist/hooks/useMemo/index.js +13 -0
  105. package/dist/hooks/useState/index.d.ts +6 -0
  106. package/dist/hooks/useState/index.js +11 -0
  107. package/dist/index.d.ts +61 -0
  108. package/dist/index.js +58 -0
  109. package/dist/isBrowser/index.d.ts +4 -0
  110. package/dist/isBrowser/index.js +8 -0
  111. package/dist/isDropdownValueType/index.d.ts +4 -0
  112. package/dist/isDropdownValueType/index.js +8 -0
  113. package/dist/isImg/index.d.ts +5 -0
  114. package/dist/isImg/index.js +7 -0
  115. package/dist/isNil/index.d.ts +4 -0
  116. package/dist/isNil/index.js +6 -0
  117. package/dist/isUrl/index.d.ts +9 -0
  118. package/dist/isUrl/index.js +17 -0
  119. package/dist/merge/index.d.ts +9 -0
  120. package/dist/merge/index.js +20 -0
  121. package/dist/nanoid/index.d.ts +9 -0
  122. package/dist/nanoid/index.js +25 -0
  123. package/dist/normalizeProps/index.d.ts +6 -0
  124. package/dist/normalizeProps/index.js +6 -0
  125. package/dist/omitBoolean/index.d.ts +9 -0
  126. package/dist/omitBoolean/index.js +11 -0
  127. package/dist/omitUndefined/index.d.ts +5 -0
  128. package/dist/omitUndefined/index.js +11 -0
  129. package/dist/omitUndefinedAndEmptyArr/index.d.ts +4 -0
  130. package/dist/omitUndefinedAndEmptyArr/index.js +12 -0
  131. package/dist/parseValueToDay/index.d.ts +7 -0
  132. package/dist/parseValueToDay/index.js +21 -0
  133. package/dist/pickProFormItemProps/index.d.ts +34 -0
  134. package/dist/pickProFormItemProps/index.js +42 -0
  135. package/dist/pickProProps/index.d.ts +4 -0
  136. package/dist/pickProProps/index.js +14 -0
  137. package/dist/pro-utils.esm.js +3672 -0
  138. package/dist/proFieldParsingText/index.d.ts +25 -0
  139. package/dist/proFieldParsingText/index.js +100 -0
  140. package/dist/runFunction/index.d.ts +5 -0
  141. package/dist/runFunction/index.js +8 -0
  142. package/dist/stringify/index.d.ts +7 -0
  143. package/dist/stringify/index.js +10 -0
  144. package/dist/transformBooleanProps/index.d.ts +4 -0
  145. package/dist/transformBooleanProps/index.js +9 -0
  146. package/dist/transformKeySubmitValue/index.d.ts +24 -0
  147. package/dist/transformKeySubmitValue/index.js +200 -0
  148. package/dist/transformVueNodeType/index.d.ts +14 -0
  149. package/dist/transformVueNodeType/index.js +14 -0
  150. package/dist/typing.d.ts +562 -0
  151. package/dist/typing.js +1 -0
  152. package/dist/useEditableArray/components/CancelEditableAction.d.ts +47 -0
  153. package/dist/useEditableArray/components/CancelEditableAction.js +90 -0
  154. package/dist/useEditableArray/components/DeleteEditableAction.d.ts +33 -0
  155. package/dist/useEditableArray/components/DeleteEditableAction.js +63 -0
  156. package/dist/useEditableArray/components/SaveEditableAction.d.ts +33 -0
  157. package/dist/useEditableArray/components/SaveEditableAction.js +79 -0
  158. package/dist/useEditableArray/index.d.ts +66 -0
  159. package/dist/useEditableArray/index.js +584 -0
  160. package/dist/useEditableArray/typing.d.ts +130 -0
  161. package/dist/useEditableArray/typing.js +1 -0
  162. package/dist/useEditableMap/index.d.ts +32 -0
  163. package/dist/useEditableMap/index.js +147 -0
  164. package/dist/useMediaQuery/index.d.ts +44 -0
  165. package/dist/useMediaQuery/index.js +99 -0
  166. package/dist/useMediaQuery/query.d.ts +6 -0
  167. package/dist/useMediaQuery/query.js +17 -0
  168. package/dist/useMountMergeState/index.d.ts +11 -0
  169. package/dist/useMountMergeState/index.js +26 -0
  170. package/dist/usePrevious/index.d.ts +6 -0
  171. package/dist/usePrevious/index.js +11 -0
  172. package/dist/useRefFunction/index.d.ts +4 -0
  173. package/dist/useRefFunction/index.js +11 -0
  174. package/package.json +69 -3
@@ -0,0 +1,130 @@
1
+ import { Key, VueNode as VueNode$1 } from "../typing.js";
2
+ import { ComputedRef, ShallowRef } from "vue";
3
+ import { FormInstance, FormProps } from "antdv-next";
4
+ import { VueNode } from "antdv-next/dist/_util/type";
5
+ import { NamePath } from "antdv-next/dist/form/types";
6
+
7
+ //#region src/useEditableArray/typing.d.ts
8
+ type RowEditableType = 'single' | 'multiple';
9
+ type RecordKey = Key | Key[];
10
+ interface ActionTypeText<T> {
11
+ deleteText?: VueNode$1;
12
+ cancelText?: VueNode$1;
13
+ saveText?: VueNode$1;
14
+ editorType?: 'Array' | 'Map';
15
+ addEditRecord?: (row: T, options?: AddLineOptions) => Promise<boolean>;
16
+ }
17
+ interface SaveEditableActionRef<T = any> {
18
+ /**
19
+ * 直接触发保存动作
20
+ * @throws 如果校验失败,会抛出异常
21
+ */
22
+ save: () => ReturnType<NonNullable<RowEditableConfig<T>['onSave']>> | Promise<void>;
23
+ }
24
+ interface AddLineOptions {
25
+ position?: 'top' | 'bottom';
26
+ recordKey?: RecordKey;
27
+ newRecordType?: 'dataSource' | 'cache';
28
+ /** 要增加到哪个节点下,一般用于多重嵌套表格 */
29
+ parentKey?: RecordKey | (() => RecordKey);
30
+ }
31
+ interface NewLineConfig<T> {
32
+ defaultValue?: T;
33
+ options: AddLineOptions;
34
+ }
35
+ type ActionRenderFunction<T> = (row: T | undefined, config: ActionRenderConfig<T, NewLineConfig<T>>, defaultDoms: {
36
+ save: VueNode$1;
37
+ delete: VueNode$1;
38
+ cancel: VueNode$1;
39
+ }) => VueNode$1[];
40
+ interface RowEditableConfig<DataType> {
41
+ /** @name formProps 控制可编辑表格的 From的设置 */
42
+ formProps?: Omit<FormProps & {
43
+ formRef?: ShallowRef<FormInstance | undefined>;
44
+ onInit?: (values: DataType, form: FormInstance) => void;
45
+ }, 'onFinish'>;
46
+ form?: FormInstance;
47
+ /**
48
+ * @name type 编辑的类型,支持单选和多选
49
+ */
50
+ type?: RowEditableType;
51
+ /** @name editableKeys 正在编辑的列 */
52
+ editableKeys?: Key[];
53
+ /** 正在编辑的列修改的时候 */
54
+ onChange?: (editableKeys: Key[], editableRows?: DataType[] | DataType) => void;
55
+ /** 正在编辑的列修改的时候 */
56
+ onValuesChange?: (record: DataType | undefined, dataSource: DataType[]) => void;
57
+ /** @name actionRender 自定义编辑的操作 */
58
+ actionRender?: ActionRenderFunction<DataType>;
59
+ /** 行保存的时候 */
60
+ onSave?: (/** 行 id,一般是唯一id */
61
+
62
+ key: RecordKey, /** 当前修改的行的值,只有 form 在内的会被设置 */
63
+
64
+ record: DataType & {
65
+ index?: number;
66
+ }, /** 原始值,可以用于判断是否修改 */
67
+
68
+ originRow: DataType & {
69
+ index?: number;
70
+ }, /** 新建一行的配置,一般无用 */
71
+
72
+ newLineConfig?: NewLineConfig<DataType>) => Promise<any>;
73
+ /** 行取消编辑的时候 */
74
+ onCancel?: (/** 行 id,一般是唯一id */
75
+
76
+ key: RecordKey, /** 当前修改的行的值,只有 form 在内的会被设置 */
77
+
78
+ record: DataType & {
79
+ index?: number;
80
+ }, /** 原始值,可以用于判断是否修改 */
81
+
82
+ originRow: DataType & {
83
+ index?: number;
84
+ } | undefined, /** 新建一行的配置,一般无用 */
85
+
86
+ newLineConfig?: NewLineConfig<DataType>) => Promise<any>;
87
+ /** 行删除的时候 */
88
+ onDelete?: (key: RecordKey, row: DataType & {
89
+ index?: number;
90
+ } | undefined) => Promise<any>;
91
+ /** 删除行时的确认消息 */
92
+ deletePopconfirmMessage?: VueNode;
93
+ /** 只能编辑一行的的提示 */
94
+ onlyOneLineEditorAlertMessage?: VueNode;
95
+ /** 同时只能新增一行的提示 */
96
+ onlyAddOneLineAlertMessage?: VueNode;
97
+ /** Table 上设置的name,用于拼接name来获取数据 */
98
+ tableName?: ComputedRef<NamePath<string | number | boolean> | undefined>;
99
+ /** 保存一行的文字 */
100
+ saveText?: VueNode$1;
101
+ /** 取消编辑一行的文字 */
102
+ cancelText?: VueNode$1;
103
+ /** 删除一行的文字 */
104
+ deleteText?: VueNode$1;
105
+ getRealIndex?: (record: DataType) => number;
106
+ }
107
+ type ActionRenderConfig<T, LineConfig = NewLineConfig<T>> = {
108
+ editableKeys?: RowEditableConfig<T>['editableKeys'];
109
+ recordKey: RecordKey; /** Form list 中的行路径;name 模式下通常是数组索引,区别于业务 recordKey。 */
110
+ formRecordKey?: RecordKey;
111
+ preEditRow: T | null;
112
+ /**
113
+ * 多行编辑场景下,按 recordKey 缓存每一行进入编辑前的快照(允许为 null,用于标记“新建行”)
114
+ * 用于避免 preEditRow(单引用)在多行编辑时被覆盖导致取消误删/误还原的问题
115
+ */
116
+ preEditRows?: Map<string, T | null>;
117
+ 'onUpdate:preEditRow': (preEditRow: T | null) => void;
118
+ index?: number;
119
+ cancelEditable: (key: RecordKey) => Promise<boolean | void>; /** 仅结束编辑状态,不触发取消回调或恢复编辑前数据。 */
120
+ finishEditable?: (key: RecordKey) => Promise<boolean | void>;
121
+ onSave: RowEditableConfig<T>['onSave'];
122
+ onCancel: RowEditableConfig<T>['onCancel'];
123
+ onDelete?: RowEditableConfig<T>['onDelete'];
124
+ deletePopconfirmMessage: RowEditableConfig<T>['deletePopconfirmMessage'];
125
+ setEditableRowKeys: (value: Key[]) => void;
126
+ newLineConfig?: LineConfig;
127
+ tableName?: NamePath<string | number | boolean>;
128
+ } & ActionTypeText<T>;
129
+ //#endregion
130
+ export { ActionRenderConfig, ActionRenderFunction, ActionTypeText, AddLineOptions, NewLineConfig, RecordKey, RowEditableConfig, RowEditableType, SaveEditableActionRef };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ import { ActionTypeText, RecordKey, RowEditableConfig } from "../useEditableArray/typing.js";
2
+ import { Key } from "../typing.js";
3
+ import { ComputedRef, Ref } from "vue";
4
+ import * as _$_v_c_util0 from "@v-c/util";
5
+ import { AnyObject } from "antdv-next/dist/_util/type";
6
+ import * as _$vue_jsx_runtime0 from "vue/jsx-runtime";
7
+
8
+ //#region src/useEditableMap/index.d.ts
9
+ /**
10
+ * 一个方便的hooks 用于维护编辑的状态
11
+ *
12
+ * @param props
13
+ */
14
+ declare function useEditableMap<RecordType extends AnyObject>(props: Omit<RowEditableConfig<RecordType>, 'editableKeys' | 'type'> & {
15
+ type?: ComputedRef<RowEditableConfig<RecordType>['type']>;
16
+ editableKeys: ComputedRef<RowEditableConfig<RecordType>['editableKeys']>;
17
+ dataSource?: Ref<RecordType | undefined>;
18
+ childrenColumnName?: string;
19
+ setDataSource: (dataSource?: RecordType) => void;
20
+ }): {
21
+ messageContextHolder: () => _$vue_jsx_runtime0.JSX.Element;
22
+ editableKeys: Ref<Key[], Key[]>;
23
+ setEditableRowKeys: (val: Key[]) => void;
24
+ isEditable: (recordKey: RecordKey) => boolean;
25
+ actionRender: (key: RecordKey, config?: ActionTypeText<RecordType>) => _$_v_c_util0.VueNode[];
26
+ startEditable: (recordKey: RecordKey, recordValue?: any) => boolean;
27
+ cancelEditable: (recordKey: RecordKey) => Promise<boolean>;
28
+ };
29
+ type UseEditableMapType = typeof useEditableMap;
30
+ type UseEditableMapUtilType = ReturnType<UseEditableMapType>;
31
+ //#endregion
32
+ export { UseEditableMapType, UseEditableMapUtilType, useEditableMap };
@@ -0,0 +1,147 @@
1
+ import { useMemo } from "../hooks/useMemo/index.js";
2
+ import { recordKeyToString } from "../useEditableArray/components/CancelEditableAction.js";
3
+ import { defaultActionRender } from "../useEditableArray/index.js";
4
+ import { computed, shallowRef } from "vue";
5
+ import { get, useMergedState } from "@v-c/util";
6
+ import { message } from "antdv-next";
7
+ import { useIntl } from "@antdv-vue/pro-provider";
8
+ //#region src/useEditableMap/index.tsx
9
+ /**
10
+ * 使用map 来删除数据,性能一般 但是准确率比较高
11
+ *
12
+ */
13
+ function editableRowByKey({ data, row }) {
14
+ return {
15
+ ...data,
16
+ ...row
17
+ };
18
+ }
19
+ /**
20
+ * 一个方便的hooks 用于维护编辑的状态
21
+ *
22
+ * @param props
23
+ */
24
+ function useEditableMap(props) {
25
+ /**
26
+ * 点击开始编辑之前的保存数据用的
27
+ */
28
+ const preEditRow = shallowRef(null);
29
+ const editableType = computed(() => props.type?.value || "single");
30
+ const intl = useIntl();
31
+ const [messageApi, ContextHolder] = message.useMessage();
32
+ const [editableKeys, setEditableRowKeys] = useMergedState([], {
33
+ value: computed(() => props.editableKeys.value),
34
+ onChange: props.onChange ? (keys) => {
35
+ props?.onChange?.(keys, props.dataSource?.value);
36
+ } : void 0
37
+ });
38
+ /** 一个用来标志的set 提供了方便的 api 来去重什么的 */
39
+ const editableKeysSet = useMemo(() => {
40
+ const keys = editableType.value === "single" ? editableKeys.value?.slice(0, 1) : editableKeys.value;
41
+ return new Set(keys);
42
+ }, [() => (editableKeys.value || []).join(","), () => editableType.value]);
43
+ /** 这行是不是编辑状态 */
44
+ const isEditable = (recordKey) => {
45
+ if (editableKeys.value?.includes(recordKeyToString(recordKey))) return true;
46
+ return false;
47
+ };
48
+ /**
49
+ * 进入编辑状态
50
+ *
51
+ * @param recordKey
52
+ */
53
+ const startEditable = (recordKey, recordValue) => {
54
+ if (editableKeysSet.value.size > 0 && editableType.value === "single") {
55
+ messageApi.warning(props.onlyOneLineEditorAlertMessage || intl.value.getMessage({
56
+ id: "editableTable.onlyOneLineEditor",
57
+ defaultMessage: "只能同时编辑一行"
58
+ }));
59
+ return false;
60
+ }
61
+ preEditRow.value = recordValue ?? get(props.dataSource?.value, Array.isArray(recordKey) ? recordKey : [recordKey]) ?? null;
62
+ editableKeysSet.value.add(recordKeyToString(recordKey));
63
+ setEditableRowKeys(Array.from(editableKeysSet.value));
64
+ return true;
65
+ };
66
+ /**
67
+ * 退出编辑状态
68
+ *
69
+ * @param recordKey
70
+ */
71
+ const cancelEditable = async (recordKey) => {
72
+ editableKeysSet.value.delete(recordKeyToString(recordKey));
73
+ setEditableRowKeys(Array.from(editableKeysSet.value));
74
+ return true;
75
+ };
76
+ const onCancel = async (recordKey, editRow, originRow, newLine) => {
77
+ if (await props?.onCancel?.(recordKey, editRow, originRow, newLine) === false) return false;
78
+ return true;
79
+ };
80
+ const onSave = async (recordKey, editRow, originRow) => {
81
+ if (await props?.onSave?.(recordKey, editRow, originRow) === false) return false;
82
+ await cancelEditable(recordKey);
83
+ const actionProps = {
84
+ data: props.dataSource?.value,
85
+ row: editRow,
86
+ key: recordKey,
87
+ childrenColumnName: props.childrenColumnName || "children"
88
+ };
89
+ props.setDataSource(editableRowByKey(actionProps));
90
+ return true;
91
+ };
92
+ const saveText = intl.value.getMessage({
93
+ id: "editableTable.action.save",
94
+ defaultMessage: "保存"
95
+ });
96
+ const deleteText = intl.value.getMessage({
97
+ id: "editableTable.action.delete",
98
+ defaultMessage: "删除"
99
+ });
100
+ const cancelText = intl.value.getMessage({
101
+ id: "editableTable.action.cancel",
102
+ defaultMessage: "取消"
103
+ });
104
+ const actionRender = (key, config) => {
105
+ const renderConfig = {
106
+ recordKey: key,
107
+ cancelEditable,
108
+ onCancel,
109
+ onSave,
110
+ editableKeys: editableKeys.value,
111
+ setEditableRowKeys,
112
+ saveText,
113
+ cancelText,
114
+ preEditRow: preEditRow.value,
115
+ "onUpdate:preEditRow": (_preEditRow) => preEditRow.value = _preEditRow,
116
+ deleteText,
117
+ deletePopconfirmMessage: `${intl.value.getMessage({
118
+ id: "deleteThisLine",
119
+ defaultMessage: "删除此项"
120
+ })}?`,
121
+ editorType: "Map",
122
+ ...config
123
+ };
124
+ const renderResult = defaultActionRender(props.dataSource?.value, renderConfig);
125
+ if (props.actionRender) return props.actionRender(props.dataSource?.value, renderConfig, {
126
+ save: renderResult.save,
127
+ delete: renderResult.delete,
128
+ cancel: renderResult.cancel
129
+ });
130
+ return [
131
+ renderResult.save,
132
+ renderResult.delete,
133
+ renderResult.cancel
134
+ ];
135
+ };
136
+ return {
137
+ messageContextHolder: ContextHolder,
138
+ editableKeys,
139
+ setEditableRowKeys,
140
+ isEditable,
141
+ actionRender,
142
+ startEditable,
143
+ cancelEditable
144
+ };
145
+ }
146
+ //#endregion
147
+ export { useEditableMap };
@@ -0,0 +1,44 @@
1
+ import * as _$vue from "vue";
2
+
3
+ //#region src/useMediaQuery/index.d.ts
4
+ declare const MediaQueryEnum: {
5
+ xs: {
6
+ maxWidth: number;
7
+ matchMedia: string;
8
+ };
9
+ sm: {
10
+ minWidth: number;
11
+ maxWidth: number;
12
+ matchMedia: string;
13
+ };
14
+ md: {
15
+ minWidth: number;
16
+ maxWidth: number;
17
+ matchMedia: string;
18
+ };
19
+ lg: {
20
+ minWidth: number;
21
+ maxWidth: number;
22
+ matchMedia: string;
23
+ };
24
+ xl: {
25
+ minWidth: number;
26
+ maxWidth: number;
27
+ matchMedia: string;
28
+ };
29
+ xxl: {
30
+ minWidth: number;
31
+ matchMedia: string;
32
+ };
33
+ };
34
+ type MediaQueryKey = keyof typeof MediaQueryEnum;
35
+ /**
36
+ * loop query screen className
37
+ * Array.find will throw a error
38
+ * `Rendered more hooks than during the previous render.`
39
+ * So should use Array.forEach
40
+ */
41
+ declare function getScreenClassName(): "xs" | "sm" | "md" | "lg" | "xl" | "xxl";
42
+ declare function useMedia(): _$vue.Ref<"xs" | "sm" | "md" | "lg" | "xl" | "xxl", "xs" | "sm" | "md" | "lg" | "xl" | "xxl">;
43
+ //#endregion
44
+ export { MediaQueryEnum, MediaQueryKey, getScreenClassName, useMedia };
@@ -0,0 +1,99 @@
1
+ import { useEffect } from "../hooks/useEffect/index.js";
2
+ import { useState } from "../hooks/useState/index.js";
3
+ import { useMediaQuery } from "./query.js";
4
+ //#region src/useMediaQuery/index.ts
5
+ const MediaQueryEnum = {
6
+ xs: {
7
+ maxWidth: 575,
8
+ matchMedia: "(max-width: 575px)"
9
+ },
10
+ sm: {
11
+ minWidth: 576,
12
+ maxWidth: 767,
13
+ matchMedia: "(min-width: 576px) and (max-width: 767px)"
14
+ },
15
+ md: {
16
+ minWidth: 768,
17
+ maxWidth: 991,
18
+ matchMedia: "(min-width: 768px) and (max-width: 991px)"
19
+ },
20
+ lg: {
21
+ minWidth: 992,
22
+ maxWidth: 1199,
23
+ matchMedia: "(min-width: 992px) and (max-width: 1199px)"
24
+ },
25
+ xl: {
26
+ minWidth: 1200,
27
+ maxWidth: 1599,
28
+ matchMedia: "(min-width: 1200px) and (max-width: 1599px)"
29
+ },
30
+ xxl: {
31
+ minWidth: 1600,
32
+ matchMedia: "(min-width: 1600px)"
33
+ }
34
+ };
35
+ /**
36
+ * loop query screen className
37
+ * Array.find will throw a error
38
+ * `Rendered more hooks than during the previous render.`
39
+ * So should use Array.forEach
40
+ */
41
+ function getScreenClassName() {
42
+ let className = "md";
43
+ if (typeof window === "undefined") return className;
44
+ className = Object.keys(MediaQueryEnum).find((key) => {
45
+ const { matchMedia } = MediaQueryEnum[key];
46
+ return window.matchMedia(matchMedia).matches;
47
+ });
48
+ return className;
49
+ }
50
+ function useMedia() {
51
+ const isMd = useMediaQuery(MediaQueryEnum.md.matchMedia);
52
+ const isLg = useMediaQuery(MediaQueryEnum.lg.matchMedia);
53
+ const isXxl = useMediaQuery(MediaQueryEnum.xxl.matchMedia);
54
+ const isXl = useMediaQuery(MediaQueryEnum.xl.matchMedia);
55
+ const isSm = useMediaQuery(MediaQueryEnum.sm.matchMedia);
56
+ const isXs = useMediaQuery(MediaQueryEnum.xs.matchMedia);
57
+ const [colSpan, setColSpan] = useState(getScreenClassName());
58
+ useEffect(() => {
59
+ if (process.env.NODE_ENV === "TEST") {
60
+ setColSpan(process.env.USE_MEDIA || "md");
61
+ return;
62
+ }
63
+ if (isXxl.value) {
64
+ setColSpan("xxl");
65
+ return;
66
+ }
67
+ if (isXl.value) {
68
+ setColSpan("xl");
69
+ return;
70
+ }
71
+ if (isLg.value) {
72
+ setColSpan("lg");
73
+ return;
74
+ }
75
+ if (isMd.value) {
76
+ setColSpan("md");
77
+ return;
78
+ }
79
+ if (isSm.value) {
80
+ setColSpan("sm");
81
+ return;
82
+ }
83
+ if (isXs.value) {
84
+ setColSpan("xs");
85
+ return;
86
+ }
87
+ setColSpan("md");
88
+ }, [
89
+ () => isMd.value,
90
+ () => isLg.value,
91
+ () => isXxl.value,
92
+ () => isXl.value,
93
+ () => isSm.value,
94
+ () => isXs.value
95
+ ]);
96
+ return colSpan;
97
+ }
98
+ //#endregion
99
+ export { MediaQueryEnum, getScreenClassName, useMedia };
@@ -0,0 +1,6 @@
1
+ import * as _$vue from "vue";
2
+
3
+ //#region src/useMediaQuery/query.d.ts
4
+ declare function useMediaQuery(mediaQuery: string): _$vue.Ref<boolean, boolean>;
5
+ //#endregion
6
+ export { useMediaQuery };
@@ -0,0 +1,17 @@
1
+ import { useLayoutEffect } from "../hooks/useLayoutEffect/index.js";
2
+ import { useState } from "../hooks/useState/index.js";
3
+ //#region src/useMediaQuery/query.ts
4
+ function useMediaQuery(mediaQuery) {
5
+ const isSsr = typeof window === "undefined";
6
+ const [matches, setMatches] = useState(() => isSsr ? false : window.matchMedia(mediaQuery).matches);
7
+ useLayoutEffect(() => {
8
+ if (isSsr) return;
9
+ const mediaQueryList = window.matchMedia(mediaQuery);
10
+ const listener = (e) => setMatches(e.matches);
11
+ mediaQueryList.addEventListener("change", listener);
12
+ return () => mediaQueryList.removeEventListener("change", listener);
13
+ }, [() => mediaQuery]);
14
+ return matches;
15
+ }
16
+ //#endregion
17
+ export { useMediaQuery };
@@ -0,0 +1,11 @@
1
+ import { Ref, UnwrapRef } from "vue";
2
+
3
+ //#region src/useMountMergeState/index.d.ts
4
+ declare function useMountMergeState<T, R = Ref<T>>(defaultStateValue: T | (() => T), option?: {
5
+ defaultValue?: T | (() => T);
6
+ value?: Ref<T> | Ref<UnwrapRef<T>>;
7
+ onChange?: (val: T, prevValue: T) => void;
8
+ postState?: (val: T) => T;
9
+ }): [R, (val: T) => void];
10
+ //#endregion
11
+ export { useMountMergeState };
@@ -0,0 +1,26 @@
1
+ import { ref, toRaw, unref, watch, watchEffect } from "vue";
2
+ //#region src/useMountMergeState/index.ts
3
+ function useMountMergeState(defaultStateValue, option) {
4
+ const { defaultValue, value = ref() } = option || {};
5
+ let initValue = typeof defaultStateValue === "function" ? defaultStateValue() : defaultStateValue;
6
+ if (value.value !== void 0) initValue = unref(value);
7
+ if (defaultValue !== void 0) initValue = typeof defaultValue === "function" ? defaultValue() : defaultValue;
8
+ const innerValue = ref(initValue);
9
+ const mergedValue = ref(initValue);
10
+ watchEffect(() => {
11
+ let val = value.value !== void 0 ? value.value : innerValue.value;
12
+ if (option?.postState) val = option.postState(val);
13
+ mergedValue.value = val;
14
+ });
15
+ function triggerChange(newValue) {
16
+ const preVal = mergedValue.value;
17
+ innerValue.value = newValue;
18
+ if (toRaw(mergedValue.value) !== newValue && option?.onChange) option.onChange(newValue, preVal);
19
+ }
20
+ watch(value, () => {
21
+ innerValue.value = value.value;
22
+ });
23
+ return [mergedValue, triggerChange];
24
+ }
25
+ //#endregion
26
+ export { useMountMergeState };
@@ -0,0 +1,6 @@
1
+ import { Ref } from "vue";
2
+
3
+ //#region src/usePrevious/index.d.ts
4
+ declare function usePrevious<T>(state: Ref<T>): Ref<T | undefined>;
5
+ //#endregion
6
+ export { usePrevious };
@@ -0,0 +1,11 @@
1
+ import { ref, watch } from "vue";
2
+ //#region src/usePrevious/index.ts
3
+ function usePrevious(state) {
4
+ const previous = ref();
5
+ watch(state, (_, oldValue) => {
6
+ previous.value = oldValue;
7
+ }, { immediate: false });
8
+ return previous;
9
+ }
10
+ //#endregion
11
+ export { usePrevious };
@@ -0,0 +1,4 @@
1
+ //#region src/useRefFunction/index.d.ts
2
+ declare function useRefFunction<T extends (...args: any) => any>(reFunction: T): (...rest: Parameters<T>) => ReturnType<T>;
3
+ //#endregion
4
+ export { useRefFunction };
@@ -0,0 +1,11 @@
1
+ import { ref } from "vue";
2
+ //#region src/useRefFunction/index.ts
3
+ function useRefFunction(reFunction) {
4
+ const refValue = ref(null);
5
+ refValue.value = reFunction;
6
+ return (...rest) => {
7
+ return refValue.value?.(...rest);
8
+ };
9
+ }
10
+ //#endregion
11
+ export { useRefFunction };
package/package.json CHANGED
@@ -1,6 +1,72 @@
1
1
  {
2
2
  "name": "@antdv-vue/pro-utils",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "type": "module",
4
+ "version": "2.1.1",
5
+ "description": "@antdv-vue/pro-utils",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/bunnyblueair/pro-components.git",
9
+ "directory": "packages/utils"
10
+ },
11
+ "sideEffects": [
12
+ "./dist/pro-utils.esm.js"
13
+ ],
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./dist/*": {
21
+ "types": "./dist/*.d.ts",
22
+ "import": "./dist/*.js",
23
+ "default": "./dist/*.js"
24
+ },
25
+ "./dist/pro-utils.esm.js": "./dist/pro-utils.esm.js"
26
+ },
27
+ "main": "./dist/index.js",
28
+ "module": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "files": [
31
+ "CHANGELOG.md",
32
+ "LICENSE",
33
+ "README.md",
34
+ "dist",
35
+ "package.json"
36
+ ],
37
+ "scripts": {
38
+ "build": "run-s build:esm build:full-esm",
39
+ "build:esm": "tsdown --config-loader unrun",
40
+ "build:full-esm": "vite build"
41
+ },
42
+ "browserslist": [
43
+ "last 2 versions",
44
+ "Firefox ESR",
45
+ "> 1%",
46
+ "ie >= 11"
47
+ ],
48
+ "peerDependencies": {
49
+ "antdv-next": ">=1.8.0",
50
+ "vue": ">=3.5.30"
51
+ },
52
+ "dependencies": {
53
+ "@antdv-next/cssinjs": "^1.0.6",
54
+ "@antdv-next/icons": "^1.1.1",
55
+ "@antdv-vue/pro-provider": "2.0.0",
56
+ "@v-c/util": "^1.0.21",
57
+ "dayjs": "^1.11.20",
58
+ "es-toolkit": "^1.45.1",
59
+ "safe-stable-stringify": "^2.5.0",
60
+ "swrv": "^1.2.0"
61
+ },
62
+ "devDependencies": {
63
+ "csstype": "^3.2.3",
64
+ "typescript": "~5.9.3"
65
+ },
66
+ "publishConfig": {
67
+ "access": "public"
68
+ },
69
+ "authors": [
70
+ "lucasjeke <lucasjekeqd@gmail.com> (https://github.com/lucasjeke)"
71
+ ]
6
72
  }