tntd 2.7.22 → 2.7.23

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 (80) hide show
  1. package/es/_util/motion.js +16 -0
  2. package/es/_util/motion.js.map +1 -0
  3. package/es/_util/type.js +4 -0
  4. package/es/_util/type.js.map +1 -0
  5. package/es/_util/warning.js +6 -0
  6. package/es/_util/warning.js.map +1 -0
  7. package/es/button/button.js +8 -0
  8. package/es/button/button.js.map +1 -1
  9. package/es/handle/handle.js +102 -0
  10. package/es/handle/handle.js.map +1 -0
  11. package/es/locale/en_US.js +1 -1
  12. package/es/locale/en_US.js.map +1 -1
  13. package/es/mention/index.js +4 -0
  14. package/es/mention/index.js.map +1 -0
  15. package/es/prev-locale.js +1 -1
  16. package/es/prev-locale.js.map +1 -1
  17. package/es/tntd-form/TntdForm/components/Item.js +55 -0
  18. package/es/tntd-form/TntdForm/components/Item.js.map +1 -0
  19. package/es/tntd-form/TntdForm/components/ItemComp.js +186 -0
  20. package/es/tntd-form/TntdForm/components/ItemComp.js.map +1 -0
  21. package/es/tntd-form/TntdForm/components/List.js +102 -0
  22. package/es/tntd-form/TntdForm/components/List.js.map +1 -0
  23. package/es/tntd-form/TntdForm/index.js +55 -0
  24. package/es/tntd-form/TntdForm/index.js.map +1 -0
  25. package/es/tntd-form/TntdForm/interface.js +1 -0
  26. package/es/tntd-form/TntdForm/interface.js.map +1 -0
  27. package/es/tntd-form/TntdForm/store.js +2 -0
  28. package/es/tntd-form/TntdForm/store.js.map +1 -0
  29. package/es/tntd-form/TntdForm/utils.js +219 -0
  30. package/es/tntd-form/TntdForm/utils.js.map +1 -0
  31. package/es/tntd-select/_util/PurePanel.js +68 -0
  32. package/es/tntd-select/_util/PurePanel.js.map +1 -0
  33. package/es/tntd-select/_util/motion.js +31 -0
  34. package/es/tntd-select/_util/motion.js.map +1 -0
  35. package/es/tntd-select/_util/warning.js +6 -0
  36. package/es/tntd-select/_util/warning.js.map +1 -0
  37. package/lib/_util/motion.d.ts +6 -0
  38. package/lib/_util/motion.d.ts.map +1 -0
  39. package/lib/_util/motion.js +20 -0
  40. package/lib/_util/motion.js.map +1 -0
  41. package/lib/_util/type.d.ts +4 -0
  42. package/lib/_util/type.d.ts.map +1 -0
  43. package/lib/_util/type.js +9 -0
  44. package/lib/_util/type.js.map +1 -0
  45. package/lib/_util/warning.d.ts +5 -0
  46. package/lib/_util/warning.d.ts.map +1 -0
  47. package/lib/_util/warning.js +32 -0
  48. package/lib/_util/warning.js.map +1 -0
  49. package/lib/button/button.d.ts.map +1 -1
  50. package/lib/button/button.js +8 -0
  51. package/lib/button/button.js.map +1 -1
  52. package/lib/handle/handle.d.ts +3 -0
  53. package/lib/handle/handle.d.ts.map +1 -0
  54. package/lib/handle/handle.js +130 -0
  55. package/lib/handle/handle.js.map +1 -0
  56. package/lib/locale/en_US.js +1 -1
  57. package/lib/locale/en_US.js.map +1 -1
  58. package/lib/mention/index.js +25 -0
  59. package/lib/prev-locale.js +1 -1
  60. package/lib/prev-locale.js.map +1 -1
  61. package/lib/tntd-form/TntdForm/components/Item.js +65 -0
  62. package/lib/tntd-form/TntdForm/components/ItemComp.js +215 -0
  63. package/lib/tntd-form/TntdForm/components/List.js +123 -0
  64. package/lib/tntd-form/TntdForm/index.js +72 -0
  65. package/lib/tntd-form/TntdForm/interface.js +5 -0
  66. package/lib/tntd-form/TntdForm/store.js +10 -0
  67. package/lib/tntd-form/TntdForm/utils.js +239 -0
  68. package/lib/tntd-select/_util/PurePanel.d.ts +8 -0
  69. package/lib/tntd-select/_util/PurePanel.d.ts.map +1 -0
  70. package/lib/tntd-select/_util/PurePanel.js +99 -0
  71. package/lib/tntd-select/_util/PurePanel.js.map +1 -0
  72. package/lib/tntd-select/_util/motion.d.ts +8 -0
  73. package/lib/tntd-select/_util/motion.d.ts.map +1 -0
  74. package/lib/tntd-select/_util/motion.js +34 -0
  75. package/lib/tntd-select/_util/motion.js.map +1 -0
  76. package/lib/tntd-select/_util/warning.d.ts +5 -0
  77. package/lib/tntd-select/_util/warning.d.ts.map +1 -0
  78. package/lib/tntd-select/_util/warning.js +32 -0
  79. package/lib/tntd-select/_util/warning.js.map +1 -0
  80. package/package.json +1 -1
@@ -0,0 +1,102 @@
1
+ import _isEqual from "lodash/isEqual";
2
+ import _cloneDeep from "lodash/cloneDeep";
3
+ /*
4
+ * @Descripttion: FormList
5
+ * @Author: 郑泳健
6
+ * @Date: 2023-03-06 18:42:08
7
+ * @LastEditors: 郑泳健
8
+ * @LastEditTime: 2023-04-06 17:42:31
9
+ */
10
+ import React, { useState, useEffect, useRef, useContext, memo } from 'react';
11
+ import { getNames } from '../utils';
12
+ import { FormContext } from '../store';
13
+ const List = ({
14
+ name,
15
+ children
16
+ }) => {
17
+ const maxRef = useRef(-1);
18
+ const {
19
+ form,
20
+ initialValues,
21
+ compsRefs,
22
+ updateRefs
23
+ } = useContext(FormContext);
24
+ const [dataLevel, setDataLevel] = useState([]);
25
+ /** 根据一开始记录的渲染shouldUpdate 和 dependencies组件 */
26
+ const updateRender = () => {
27
+ if (Array.isArray(updateRefs.current.shouldUpdateList)) {
28
+ updateRefs.current.shouldUpdateList.forEach(i => {
29
+ var _a, _b;
30
+ (_b = (_a = compsRefs === null || compsRefs === void 0 ? void 0 : compsRefs.current) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.call(_a);
31
+ });
32
+ }
33
+ const list = updateRefs.current.dependencies[getNames(name).join('.')];
34
+ if (Array.isArray(list)) {
35
+ list.forEach(i => {
36
+ var _a, _b;
37
+ (_b = (_a = compsRefs === null || compsRefs === void 0 ? void 0 : compsRefs.current) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.call(_a);
38
+ });
39
+ }
40
+ };
41
+ /** 根据默认数值自动生成dataLevel */
42
+ useEffect(() => {
43
+ let dataSource = initialValues;
44
+ const attrs = getNames(name);
45
+ const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
46
+ for (const key of attrs) {
47
+ dataSource = (dataSource === null || dataSource === void 0 ? void 0 : dataSource[key]) || [{}];
48
+ }
49
+ if (Array.isArray(dataSource)) {
50
+ const _level = dataSource.map((i, index) => {
51
+ return {
52
+ key: index,
53
+ name: `${attrs.join('.')}.${index}`
54
+ };
55
+ });
56
+ setDataLevel(_level);
57
+ maxRef.current = dataSource.length - 1;
58
+ if (form) {
59
+ form.dataLevel[key] = _level;
60
+ }
61
+ updateRender();
62
+ }
63
+ }, [form, initialValues, name]);
64
+ /** 新增一列 */
65
+ const handleAdd = index => {
66
+ const tempDataLevel = _cloneDeep(dataLevel);
67
+ const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
68
+ maxRef.current++;
69
+ const attrs = getNames(name);
70
+ tempDataLevel.splice(index + 1, 0, {
71
+ key: maxRef.current,
72
+ name: `${attrs === null || attrs === void 0 ? void 0 : attrs.join('.')}.${maxRef.current}`
73
+ });
74
+ setDataLevel(tempDataLevel);
75
+ if (form) {
76
+ form.dataLevel[key] = tempDataLevel;
77
+ }
78
+ updateRender();
79
+ };
80
+ /** 删除一列 */
81
+ const handleDel = index => {
82
+ const temp = _cloneDeep(dataLevel);
83
+ const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
84
+ temp.splice(index, 1);
85
+ setDataLevel(temp);
86
+ if (form) {
87
+ form.dataLevel[key] = temp;
88
+ }
89
+ updateRender();
90
+ };
91
+ return React.createElement(React.Fragment, null, children === null || children === void 0 ? void 0 : children(dataLevel, {
92
+ add: handleAdd,
93
+ remove: handleDel
94
+ }));
95
+ };
96
+ // name 没有改变就不需要重复render
97
+ export default memo(List, (nextProps, prevProps) => {
98
+ if (_isEqual(nextProps.name, prevProps.name) && !!prevProps.name) {
99
+ return true;
100
+ }
101
+ return false;
102
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/List.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Descripttion: FormList\n * @Author: 郑泳健\n * @Date: 2023-03-06 18:42:08\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-04-06 17:42:31\n */\n\nimport React, { useState, useEffect, useRef, useContext, memo } from 'react'\nimport { cloneDeep, isEqual } from 'lodash'\nimport { getNames } from '../utils'\nimport { FormContext } from '../store'\nimport type { IFormListProps, IFormContext, ILevel, TAddOrRemove, IObject } from '../interface'\n\nconst List: React.FC<IFormListProps> = ({ name, children }) => {\n const maxRef = useRef(-1)\n const { form, initialValues, compsRefs, updateRefs } = useContext<IFormContext>(FormContext)\n const [dataLevel, setDataLevel] = useState<ILevel[]>([])\n\n /** 根据一开始记录的渲染shouldUpdate 和 dependencies组件 */\n const updateRender = () => {\n if (Array.isArray(updateRefs.current.shouldUpdateList)) {\n updateRefs.current.shouldUpdateList.forEach((i) => {\n compsRefs?.current?.[i]?.()\n })\n }\n\n const list = updateRefs.current.dependencies[getNames(name).join('.')]\n\n if (Array.isArray(list)) {\n list.forEach((i) => {\n compsRefs?.current?.[i]?.()\n })\n }\n }\n\n /** 根据默认数值自动生成dataLevel */\n useEffect(() => {\n let dataSource = initialValues\n const attrs = getNames(name)\n const key: string = Array.isArray(name) ? name?.[0] : name\n\n for (const key of attrs) {\n dataSource = dataSource?.[key] || [{}]\n }\n\n if (Array.isArray(dataSource)) {\n const _level = dataSource.map((i, index) => {\n return {\n key: index,\n name: `${attrs.join('.')}.${index}`,\n }\n })\n setDataLevel(_level)\n maxRef.current = dataSource.length - 1\n if (form) {\n form.dataLevel[key] = _level\n }\n updateRender()\n }\n }, [form, initialValues, name])\n\n /** 新增一列 */\n const handleAdd: TAddOrRemove = (index) => {\n const tempDataLevel = cloneDeep(dataLevel)\n const key: string = Array.isArray(name) ? name?.[0] : name\n maxRef.current++\n const attrs = getNames(name)\n tempDataLevel.splice(index + 1, 0, {\n key: maxRef.current,\n name: `${attrs?.join('.')}.${maxRef.current}`,\n })\n setDataLevel(tempDataLevel)\n if (form) {\n form.dataLevel[key] = tempDataLevel\n }\n updateRender()\n }\n\n /** 删除一列 */\n const handleDel: TAddOrRemove = (index) => {\n const temp = cloneDeep(dataLevel)\n const key: string = Array.isArray(name) ? name?.[0] : name\n temp.splice(index, 1)\n setDataLevel(temp)\n if (form) {\n form.dataLevel[key] = temp\n }\n updateRender()\n }\n\n return <>{children?.(dataLevel, { add: handleAdd, remove: handleDel })}</>\n}\n\n// name 没有改变就不需要重复render\nexport default memo(List, (nextProps, prevProps) => {\n if (isEqual(nextProps.name, prevProps.name) && !!prevProps.name) {\n return true\n }\n return false\n})\n"]}
@@ -0,0 +1,55 @@
1
+ /*
2
+ * @Descripttion: 高性能动态增删form表单
3
+ * @Author: 郑泳健
4
+ * @Date: 2023-02-16 10:43:03
5
+ * @LastEditors: 郑泳健
6
+ * @LastEditTime: 2023-04-06 15:32:07
7
+ */
8
+ import React, { useRef } from 'react';
9
+ import { validateFields, getFieldsValue, getFieldValue } from './utils';
10
+ import { FormContext } from './store';
11
+ import List from './components/List';
12
+ import Item from './components/Item';
13
+ const TntdForm = ({
14
+ form,
15
+ initialValues,
16
+ children
17
+ }) => {
18
+ const updateRefs = useRef({
19
+ shouldUpdateList: [],
20
+ dependencies: {}
21
+ });
22
+ const compsRefs = useRef({});
23
+ return React.createElement(FormContext.Provider, {
24
+ value: {
25
+ form,
26
+ initialValues,
27
+ updateRefs,
28
+ compsRefs
29
+ }
30
+ }, children);
31
+ };
32
+ TntdForm.useForm = () => {
33
+ const form = useRef({
34
+ dataLevel: {},
35
+ formData: {},
36
+ validateFields: () => validateFields(form.current),
37
+ getFieldsValue: () => getFieldsValue(form.current),
38
+ getFieldValue: field => getFieldValue(form.current, field),
39
+ setFieldsValue: obj => {
40
+ for (const i in obj) {
41
+ if (Object.prototype.hasOwnProperty.call(obj, i)) {
42
+ const prefix = (i === null || i === void 0 ? void 0 : i.split('.')) || [];
43
+ const attr = prefix.pop();
44
+ if (attr && form.current.formData[prefix.join('.')][attr]) {
45
+ form.current.formData[prefix.join('.')][attr].setItemValue(obj[i]);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ });
51
+ return [form.current];
52
+ };
53
+ TntdForm.List = List;
54
+ TntdForm.Item = Item;
55
+ export default TntdForm;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,EAAY,MAAM,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AAEpC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAkB,EAAE,EAAE;IACrE,MAAM,UAAU,GAAG,MAAM,CAAa;QACpC,gBAAgB,EAAE,EAAE;QACpB,YAAY,EAAE,EAAE;KACjB,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAE5B,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE;YACL,IAAI;YACJ,aAAa;YACb,UAAU;YACV,SAAS;SACV,IAEA,QAAQ,CACY,CACxB,CAAA;AACH,CAAC,CAAA;AAED,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;IACtB,MAAM,IAAI,GAAuB,MAAM,CAAQ;QAC7C,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAClD,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAClD,aAAa,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3E,cAAc,EAAE,CAAC,GAA+B,EAAE,EAAE;YAClD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;gBACnB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;oBAChD,MAAM,MAAM,GAAG,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAC,GAAG,CAAC,KAAI,EAAE,CAAA;oBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;oBACzB,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;wBACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;qBACnE;iBACF;aACF;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AACpB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AAEpB,eAAe,QAAQ,CAAA","sourcesContent":["/*\n * @Descripttion: 高性能动态增删form表单\n * @Author: 郑泳健\n * @Date: 2023-02-16 10:43:03\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-04-06 15:32:07\n */\nimport React, { useState, useRef } from 'react'\nimport { validateFields, getFieldsValue, getFieldValue } from './utils'\nimport { FormContext } from './store'\nimport type { IForm, ITntdFormProps, IObject, TinitialValueType, IUpdateObj } from './interface'\nimport List from './components/List'\nimport Item from './components/Item'\n\nconst TntdForm = ({ form, initialValues, children }: ITntdFormProps) => {\n const updateRefs = useRef<IUpdateObj>({\n shouldUpdateList: [],\n dependencies: {},\n })\n\n const compsRefs = useRef({})\n\n return (\n <FormContext.Provider\n value={{\n form,\n initialValues,\n updateRefs,\n compsRefs,\n }}\n >\n {children}\n </FormContext.Provider>\n )\n}\n\nTntdForm.useForm = () => {\n const form: { current: IForm } = useRef<IForm>({\n dataLevel: {},\n formData: {},\n validateFields: () => validateFields(form.current),\n getFieldsValue: () => getFieldsValue(form.current),\n getFieldValue: (field: Array<string>) => getFieldValue(form.current, field),\n setFieldsValue: (obj: IObject<TinitialValueType>) => {\n for (const i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n const prefix = i?.split('.') || []\n const attr = prefix.pop()\n if (attr && form.current.formData[prefix.join('.')][attr]) {\n form.current.formData[prefix.join('.')][attr].setItemValue(obj[i])\n }\n }\n }\n },\n })\n\n return [form.current]\n}\n\nTntdForm.List = List\nTntdForm.Item = Item\n\nexport default TntdForm\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 层级\n */\nexport interface ILevel {\n key?: number\n name?: string\n}\n\nexport interface IObject<T> {\n [key: string]: T\n}\n\nexport type TinitialValueType = null | undefined | string | number | boolean\n\n/**\n * 每一个单元格的信息\n */\nexport interface IFormItemData {\n /** 每个formItem的值 */\n value: TinitialValueType\n /** 每个formItem的错误信息 */\n errorMsg: string | undefined\n /** 每个formItem的校验方法, 返回值为该formItem的错误信息,同时会在formItem下面显示错误信息 */\n checkItem: () => string | undefined\n /** 给某个formItem设置值 */\n setItemValue: (value: TinitialValueType, callback?: () => void) => void\n}\n\nexport interface IForm {\n /** 记录每一层级的顺序 */\n dataLevel: IObject<ILevel[]>\n /** 整个form的数据,{content.0: { id: IFormItemData, value: IFormItemData }} */\n formData: IFormData\n /** 先校验,并将结果返回 */\n validateFields: () => Promise<any>\n /** 获取form表单的数据 */\n getFieldsValue: () => object\n /** 获取formItem的数据 */\n getFieldValue: (field: Array<string>) => any\n /** 给某些formItem设置数据 */\n setFieldsValue: (fileds: IObject<TinitialValueType>) => void\n}\n\n/**\n * TntdForm的props\n */\nexport interface ITntdFormProps {\n form: IForm\n initialValues: object\n children: React.ReactNode\n}\n\nexport interface IUpdateObj {\n shouldUpdateList: Array<string>\n dependencies: IObject<string[] | string>\n}\n\nexport interface IFormContext {\n form?: IForm\n initialValues?: IObject<any>\n updateRefs: React.MutableRefObject<IUpdateObj>\n compsRefs: React.MutableRefObject<IObject<() => void>>\n}\n\n/** formList的props */\nexport interface IFormListProps {\n name: string[] | string\n children: (\n dataLevel: ILevel[],\n { add, remove }: { add: TAddOrRemove; remove: TAddOrRemove }\n ) => void\n}\n\n/** 增删事件 */\nexport type TAddOrRemove = (index: number) => void\n\nexport type IFormItem = {\n name: string[] | string\n children: React.ReactChild | React.ReactChild[]\n style: React.CSSProperties\n rules: ValidationRule\n shouldUpdate: boolean\n initialValue: TinitialValueType\n dependencies?: Array<string[] | string>\n} & IFormContext\n\n/** 将某个不可选属性变成必选 */\ntype CustomRequired<T, K extends keyof T> = {\n [P in K]-?: T[P]\n} & Omit<T, K>\n\nexport interface ValidationRule {\n /** validation error message */\n message?: React.ReactNode\n /** indicates whether field is required */\n required?: boolean\n /** custom validate function (Note: callback must be called) */\n validator?: (rule: any, value: any, callback: any) => any\n}\n\nexport interface IFormData {\n [name: string]: {\n [attr: string]: IFormItemData\n }\n}\n\nexport interface IChildrenCompFun {\n onRefresh: () => void\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export const FormContext = React.createContext({});
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAe,EAAkB,CAAC,CAAA","sourcesContent":["import React from 'react'\nimport type { IFormContext } from './interface'\n\nexport const FormContext = React.createContext<IFormContext>({} as IFormContext)\n"]}
@@ -0,0 +1,219 @@
1
+ export const isValidKey = (key, object) => {
2
+ return key in object;
3
+ };
4
+ /**
5
+ * 将xx.xx.xx 转换为数组
6
+ * @param {*} name
7
+ * @returns
8
+ */
9
+ export const getNames = name => {
10
+ let attrs = [];
11
+ if (Array.isArray(name)) {
12
+ const [str, ...rest] = name;
13
+ attrs = str.split('.').concat(rest);
14
+ } else {
15
+ attrs = typeof name === 'string' ? name.split('.') : [];
16
+ }
17
+ return attrs;
18
+ };
19
+ /**
20
+ * 对数据进行校验
21
+ * @param {*} list
22
+ * @param {*} dataLevel
23
+ * @param {*} formData
24
+ * @returns
25
+ */
26
+ export const recursionCheck = (list, dataLevel, formData, errorList = []) => {
27
+ try {
28
+ if (Array.isArray(list)) {
29
+ list.forEach(item => {
30
+ const key = item.name;
31
+ const attrs = Object.keys(formData[key]);
32
+ attrs.forEach(attr => {
33
+ var _a;
34
+ const error = (_a = formData[item.name][attr]) === null || _a === void 0 ? void 0 : _a.checkItem();
35
+ if (error) {
36
+ errorList.push(`${[item.name + '.' + attr]}:`, error);
37
+ }
38
+ });
39
+ if (dataLevel[key]) {
40
+ recursionCheck(dataLevel[key], dataLevel, formData, errorList);
41
+ }
42
+ });
43
+ }
44
+ return errorList;
45
+ } catch (e) {
46
+ if (typeof e === 'string') {
47
+ throw e.toUpperCase();
48
+ } else if (e instanceof Error) {
49
+ throw e.message;
50
+ }
51
+ throw e;
52
+ }
53
+ };
54
+ /**
55
+ * 将数据进行排序
56
+ * @param {*} list
57
+ * @param {*} dataLevel
58
+ * @param {*} formData
59
+ * @param {*} errorList
60
+ * @returns
61
+ */
62
+ export const recursionSort = (list, dataLevel, formData) => {
63
+ try {
64
+ if (Array.isArray(list)) {
65
+ const values = list.reduce((total, item, index) => {
66
+ const attrObj = {};
67
+ const key = item.name;
68
+ const prefixs = key.split('.');
69
+ const attrs = formData[key] ? Object.keys(formData[key]) : [];
70
+ attrs.forEach(attr => {
71
+ var _a;
72
+ attrObj[attr] = (_a = formData[key][attr]) === null || _a === void 0 ? void 0 : _a.value;
73
+ });
74
+ let children = [];
75
+ if (dataLevel[key]) {
76
+ children = recursionSort(dataLevel[key], dataLevel, formData);
77
+ }
78
+ const len = prefixs.length - 2;
79
+ if (total[prefixs[len]]) {
80
+ total[prefixs[len]][index] = Object.assign(Object.assign({}, attrObj), children || []);
81
+ } else {
82
+ total[prefixs[len]] = [Object.assign(Object.assign({}, attrObj), children || [])];
83
+ }
84
+ return total;
85
+ }, {});
86
+ return values;
87
+ }
88
+ } catch (e) {
89
+ if (typeof e === 'string') {
90
+ console.error(e.toUpperCase());
91
+ throw e.toUpperCase();
92
+ } else if (e instanceof Error) {
93
+ console.error(e.message);
94
+ throw e.message;
95
+ }
96
+ throw e;
97
+ }
98
+ };
99
+ /**
100
+ * 获取form表单的value
101
+ * @param {*} formCurrent
102
+ * @returns
103
+ */
104
+ export const getFieldsValue = formCurrent => {
105
+ try {
106
+ const {
107
+ formData,
108
+ dataLevel
109
+ } = formCurrent;
110
+ let firstKey = '';
111
+ // 这里不直接用Object.keys的原因是Object.keys并不能保证一定是按照属性顺序
112
+ for (const i in dataLevel) {
113
+ if (Object.prototype.hasOwnProperty.call(dataLevel, i)) {
114
+ firstKey = i;
115
+ break;
116
+ }
117
+ }
118
+ const recursionStart = dataLevel[firstKey];
119
+ const values = recursionSort(recursionStart, dataLevel, formData);
120
+ return values;
121
+ } catch (e) {
122
+ if (typeof e === 'string') {
123
+ console.error(e.toUpperCase());
124
+ return e.toUpperCase();
125
+ } else if (e instanceof Error) {
126
+ console.error(e.message);
127
+ return e.message;
128
+ }
129
+ return e;
130
+ }
131
+ };
132
+ /**
133
+ * 获取form表单的value
134
+ * @param {*} formCurrent
135
+ * @returns
136
+ */
137
+ export const getFieldValue = (formCurrent, field) => {
138
+ var _a, _b;
139
+ try {
140
+ const {
141
+ formData
142
+ } = formCurrent;
143
+ return formData && ((_b = (_a = formData === null || formData === void 0 ? void 0 : formData[field[0]]) === null || _a === void 0 ? void 0 : _a[field[1]]) === null || _b === void 0 ? void 0 : _b.value);
144
+ } catch (e) {
145
+ if (typeof e === 'string') {
146
+ return e.toUpperCase();
147
+ } else if (e instanceof Error) {
148
+ return e.message;
149
+ }
150
+ return e;
151
+ }
152
+ };
153
+ /**
154
+ * 提交时候校验的方法
155
+ * @param {*} formCurrent
156
+ * @returns
157
+ */
158
+ export const validateFields = formCurrent => {
159
+ return new Promise(resolve => {
160
+ const {
161
+ formData,
162
+ dataLevel
163
+ } = formCurrent;
164
+ let firstKey = '';
165
+ // 这里不直接用Object.keys的原因是Object.keys并不能保证一定是按照属性顺序
166
+ for (const i in dataLevel) {
167
+ if (Object.prototype.hasOwnProperty.call(dataLevel, i)) {
168
+ firstKey = i;
169
+ break;
170
+ }
171
+ }
172
+ const recursionStart = dataLevel[firstKey];
173
+ const errorList = recursionCheck(recursionStart, dataLevel, formData);
174
+ if (Array.isArray(errorList) && errorList.length) {
175
+ console.error(JSON.stringify(errorList));
176
+ } else {
177
+ resolve(recursionSort(recursionStart, dataLevel, formData));
178
+ }
179
+ });
180
+ };
181
+ /** 获取初始化的值 */
182
+ export const getInitValue = (initialValues, names) => {
183
+ let keys = [];
184
+ if (Array.isArray(names)) {
185
+ const [str, ...rest] = names;
186
+ keys = str.split('.').concat(rest);
187
+ }
188
+ if (Array.isArray(keys) && !!keys.length) {
189
+ keys.forEach(i => {
190
+ initialValues = ['', null, undefined].includes(initialValues === null || initialValues === void 0 ? void 0 : initialValues[i]) ? undefined : initialValues === null || initialValues === void 0 ? void 0 : initialValues[i];
191
+ });
192
+ }
193
+ return initialValues;
194
+ };
195
+ /** 校验表单是否正确的方法 */
196
+ export const handleCheckItem = (value, rules) => {
197
+ try {
198
+ if (Array.isArray(rules)) {
199
+ rules.forEach(i => {
200
+ // @ts-ignore
201
+ if (i.required && ['', null, undefined].includes(value)) {
202
+ throw new Error((i === null || i === void 0 ? void 0 : i.message) || 'error');
203
+ }
204
+ if (i === null || i === void 0 ? void 0 : i.validator) {
205
+ i.validator(rules, value, function (_errorMsg) {
206
+ throw new Error(_errorMsg);
207
+ });
208
+ }
209
+ });
210
+ }
211
+ return;
212
+ } catch (e) {
213
+ if (typeof e === 'string') {
214
+ return e.toUpperCase();
215
+ } else if (e instanceof Error) {
216
+ return e.message;
217
+ }
218
+ }
219
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n TinitialValueType,\n ValidationRule,\n IForm,\n IObject,\n ILevel,\n IFormData,\n} from './interface'\n\nexport const isValidKey = (\n key: string | number | symbol,\n object: object\n): key is keyof typeof object => {\n return key in object\n}\n\n/**\n * 将xx.xx.xx 转换为数组\n * @param {*} name\n * @returns\n */\nexport const getNames = (name: string[] | string) => {\n let attrs = []\n if (Array.isArray(name)) {\n const [str, ...rest] = name\n attrs = str.split('.').concat(rest)\n } else {\n attrs = typeof name === 'string' ? name.split('.') : []\n }\n return attrs\n}\n\n/**\n * 对数据进行校验\n * @param {*} list\n * @param {*} dataLevel\n * @param {*} formData\n * @returns\n */\nexport const recursionCheck = (\n list: any,\n dataLevel: IObject<ILevel[]>,\n formData: IFormData,\n errorList: string[] = []\n) => {\n try {\n if (Array.isArray(list)) {\n list.forEach((item) => {\n const key = item.name\n const attrs = Object.keys(formData[key])\n\n attrs.forEach((attr) => {\n const error = formData[item.name][attr]?.checkItem()\n if (error) {\n errorList.push(`${[item.name + '.' + attr]}:`, error)\n }\n })\n if (dataLevel[key]) {\n recursionCheck(dataLevel[key], dataLevel, formData, errorList)\n }\n })\n }\n return errorList\n } catch (e) {\n if (typeof e === 'string') {\n throw e.toUpperCase()\n } else if (e instanceof Error) {\n throw e.message\n }\n throw e\n }\n}\n\n/**\n * 将数据进行排序\n * @param {*} list\n * @param {*} dataLevel\n * @param {*} formData\n * @param {*} errorList\n * @returns\n */\nexport const recursionSort = (list: any, dataLevel: IObject<ILevel[]>, formData: IFormData) => {\n try {\n if (Array.isArray(list)) {\n const values = list.reduce((total, item, index) => {\n const attrObj: IObject<TinitialValueType> = {}\n const key = item.name\n const prefixs = key.split('.')\n const attrs = formData[key] ? Object.keys(formData[key]) : []\n\n attrs.forEach((attr) => {\n attrObj[attr] = formData[key][attr]?.value\n })\n let children = []\n if (dataLevel[key]) {\n children = recursionSort(dataLevel[key], dataLevel, formData)\n }\n\n const len = prefixs.length - 2\n if (total[prefixs[len]]) {\n total[prefixs[len]][index] = {\n ...attrObj,\n ...(children || []),\n }\n } else {\n total[prefixs[len]] = [\n {\n ...attrObj,\n ...(children || []),\n },\n ]\n }\n return total\n }, {})\n return values\n }\n } catch (e) {\n if (typeof e === 'string') {\n console.error(e.toUpperCase())\n throw e.toUpperCase()\n } else if (e instanceof Error) {\n console.error(e.message)\n throw e.message\n }\n throw e\n }\n}\n\n/**\n * 获取form表单的value\n * @param {*} formCurrent\n * @returns\n */\nexport const getFieldsValue = (formCurrent: IForm) => {\n try {\n const { formData, dataLevel } = formCurrent\n let firstKey = ''\n // 这里不直接用Object.keys的原因是Object.keys并不能保证一定是按照属性顺序\n for (const i in dataLevel) {\n if (Object.prototype.hasOwnProperty.call(dataLevel, i)) {\n firstKey = i\n break\n }\n }\n const recursionStart = dataLevel[firstKey]\n const values = recursionSort(recursionStart, dataLevel, formData)\n return values\n } catch (e) {\n if (typeof e === 'string') {\n console.error(e.toUpperCase())\n return e.toUpperCase()\n } else if (e instanceof Error) {\n console.error(e.message)\n return e.message\n }\n return e\n }\n}\n\n/**\n * 获取form表单的value\n * @param {*} formCurrent\n * @returns\n */\nexport const getFieldValue = (formCurrent: IForm, field: string[]) => {\n try {\n const { formData } = formCurrent\n return formData && formData?.[field[0]]?.[field[1]]?.value\n } catch (e) {\n if (typeof e === 'string') {\n return e.toUpperCase()\n } else if (e instanceof Error) {\n return e.message\n }\n return e\n }\n}\n\n/**\n * 提交时候校验的方法\n * @param {*} formCurrent\n * @returns\n */\nexport const validateFields = (formCurrent: IForm) => {\n return new Promise((resolve) => {\n const { formData, dataLevel } = formCurrent\n let firstKey = ''\n // 这里不直接用Object.keys的原因是Object.keys并不能保证一定是按照属性顺序\n for (const i in dataLevel) {\n if (Object.prototype.hasOwnProperty.call(dataLevel, i)) {\n firstKey = i\n break\n }\n }\n const recursionStart = dataLevel[firstKey]\n const errorList = recursionCheck(recursionStart, dataLevel, formData)\n if (Array.isArray(errorList) && errorList.length) {\n console.error(JSON.stringify(errorList))\n } else {\n resolve(recursionSort(recursionStart, dataLevel, formData))\n }\n })\n}\n\n/** 获取初始化的值 */\nexport const getInitValue = (\n initialValues: IObject<any> | undefined,\n names: string[] | string\n): TinitialValueType => {\n let keys: string[] = []\n if (Array.isArray(names)) {\n const [str, ...rest] = names\n keys = str.split('.').concat(rest)\n }\n\n if (Array.isArray(keys) && !!keys.length) {\n keys.forEach((i) => {\n initialValues = ['', null, undefined].includes(initialValues?.[i])\n ? undefined\n : initialValues?.[i]\n })\n }\n\n return initialValues as TinitialValueType\n}\n\n/** 校验表单是否正确的方法 */\nexport const handleCheckItem = (value: TinitialValueType, rules: ValidationRule) => {\n try {\n if (Array.isArray(rules)) {\n rules.forEach((i) => {\n // @ts-ignore\n if (i.required && ['', null, undefined].includes(value)) {\n throw new Error(i?.message || 'error')\n }\n if (i?.validator) {\n i.validator(rules, value, function (_errorMsg: string) {\n throw new Error(_errorMsg)\n })\n }\n })\n }\n return\n } catch (e) {\n if (typeof e === 'string') {\n return e.toUpperCase()\n } else if (e instanceof Error) {\n return e.message\n }\n }\n}\n"]}
@@ -0,0 +1,68 @@
1
+ import useMergedState from 'rc-util/lib/hooks/useMergedState';
2
+ import * as React from 'react';
3
+ import ConfigProvider from '../../config-provider';
4
+ export function withPureRenderTheme(Component) {
5
+ return function PureRenderThemeComponent(props) {
6
+ return (React.createElement(ConfigProvider
7
+ // theme={{
8
+ // token: {
9
+ // motion: false,
10
+ // zIndexPopupBase: 0,
11
+ // },
12
+ // }}
13
+ , null,
14
+ React.createElement(Component, Object.assign({}, props))));
15
+ };
16
+ }
17
+ /* istanbul ignore next */
18
+ export default function genPurePanel(Component, defaultPrefixCls, getDropdownCls, postProps) {
19
+ function PurePanel(props) {
20
+ const { prefixCls: customizePrefixCls, style } = props;
21
+ const holderRef = React.useRef(null);
22
+ const [popupHeight, setPopupHeight] = React.useState(0);
23
+ const [popupWidth, setPopupWidth] = React.useState(0);
24
+ const [open, setOpen] = useMergedState(false, {
25
+ value: props.open,
26
+ });
27
+ // const { getPrefixCls } = React.useContext(ConfigContext);
28
+ const prefixCls = 'antd-select'; // getPrefixCls(defaultPrefixCls || 'select', customizePrefixCls);
29
+ React.useEffect(() => {
30
+ // We do not care about ssr
31
+ setOpen(true);
32
+ if (typeof ResizeObserver !== 'undefined') {
33
+ const resizeObserver = new ResizeObserver((entries) => {
34
+ const element = entries[0].target;
35
+ setPopupHeight(element.offsetHeight + 8);
36
+ setPopupWidth(element.offsetWidth);
37
+ });
38
+ const interval = setInterval(() => {
39
+ var _a;
40
+ const dropdownCls = getDropdownCls
41
+ ? `.${getDropdownCls(prefixCls)}`
42
+ : `.${prefixCls}-dropdown`;
43
+ const popup = (_a = holderRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(dropdownCls);
44
+ if (popup) {
45
+ clearInterval(interval);
46
+ resizeObserver.observe(popup);
47
+ }
48
+ }, 10);
49
+ return () => {
50
+ clearInterval(interval);
51
+ resizeObserver.disconnect();
52
+ };
53
+ }
54
+ }, []);
55
+ let mergedProps = Object.assign(Object.assign({}, props), { style: Object.assign(Object.assign({}, style), { margin: 0 }), open, visible: open, getPopupContainer: () => holderRef.current });
56
+ if (postProps) {
57
+ mergedProps = postProps(mergedProps);
58
+ }
59
+ return (React.createElement("div", { ref: holderRef, style: {
60
+ paddingBottom: popupHeight,
61
+ position: 'relative',
62
+ minWidth: popupWidth,
63
+ } },
64
+ React.createElement(Component, Object.assign({}, mergedProps))));
65
+ }
66
+ return withPureRenderTheme(PurePanel);
67
+ }
68
+ //# sourceMappingURL=PurePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PurePanel.js","sourceRoot":"","sources":["../../../src/tntd-select/_util/PurePanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import useMergedState from 'rc-util/lib/hooks/useMergedState';\nimport * as React from 'react';\nimport ConfigProvider, { ConfigContext } from '../../config-provider';\n\nexport function withPureRenderTheme(Component: any) {\n return function PureRenderThemeComponent(props: any) {\n return (\n <ConfigProvider\n // theme={{\n // token: {\n // motion: false,\n // zIndexPopupBase: 0,\n // },\n // }}\n >\n <Component {...props} />\n </ConfigProvider>\n );\n };\n}\n\nexport interface BaseProps {\n prefixCls?: string;\n style?: React.CSSProperties;\n}\n\n/* istanbul ignore next */\nexport default function genPurePanel<ComponentProps extends BaseProps>(\n Component: any,\n defaultPrefixCls?: string,\n getDropdownCls?: null | ((prefixCls: string) => string),\n postProps?: (props: ComponentProps) => ComponentProps,\n) {\n type WrapProps = Omit<ComponentProps, 'open' | 'visible'> & { open?: boolean };\n\n function PurePanel(props: WrapProps) {\n const { prefixCls: customizePrefixCls, style } = props;\n\n const holderRef = React.useRef<HTMLDivElement>(null);\n const [popupHeight, setPopupHeight] = React.useState(0);\n const [popupWidth, setPopupWidth] = React.useState(0);\n const [open, setOpen] = useMergedState(false, {\n value: props.open,\n });\n\n // const { getPrefixCls } = React.useContext(ConfigContext);\n const prefixCls ='antd-select';// getPrefixCls(defaultPrefixCls || 'select', customizePrefixCls);\n\n React.useEffect(() => {\n // We do not care about ssr\n setOpen(true);\n\n if (typeof ResizeObserver !== 'undefined') {\n const resizeObserver = new ResizeObserver((entries) => {\n const element: HTMLDivElement = entries[0].target as any;\n setPopupHeight(element.offsetHeight + 8);\n setPopupWidth(element.offsetWidth);\n });\n\n const interval = setInterval(() => {\n const dropdownCls = getDropdownCls\n ? `.${getDropdownCls(prefixCls)}`\n : `.${prefixCls}-dropdown`;\n const popup = holderRef.current?.querySelector(dropdownCls);\n\n if (popup) {\n clearInterval(interval);\n resizeObserver.observe(popup);\n }\n }, 10);\n\n return () => {\n clearInterval(interval);\n resizeObserver.disconnect();\n };\n }\n }, []);\n\n let mergedProps: WrapProps = {\n ...props,\n style: {\n ...style,\n margin: 0,\n },\n open,\n visible: open,\n getPopupContainer: () => holderRef.current!,\n };\n\n if (postProps) {\n mergedProps = postProps(mergedProps as ComponentProps);\n }\n\n return (\n <div\n ref={holderRef}\n style={{\n paddingBottom: popupHeight,\n position: 'relative',\n minWidth: popupWidth,\n }}\n >\n <Component {...mergedProps} />\n </div>\n );\n }\n\n return withPureRenderTheme(PurePanel);\n}\n"]}
@@ -0,0 +1,31 @@
1
+ // ================== Collapse Motion ==================
2
+ const getCollapsedHeight = () => ({ height: 0, opacity: 0 });
3
+ const getRealHeight = (node) => {
4
+ const { scrollHeight } = node;
5
+ return { height: scrollHeight, opacity: 1 };
6
+ };
7
+ const getCurrentHeight = (node) => ({ height: node ? node.offsetHeight : 0 });
8
+ const skipOpacityTransition = (_, event) => (event === null || event === void 0 ? void 0 : event.deadline) === true || event.propertyName === 'height';
9
+ const initCollapseMotion = (rootCls = 'ant') => ({
10
+ motionName: `${rootCls}-motion-collapse`,
11
+ onAppearStart: getCollapsedHeight,
12
+ onEnterStart: getCollapsedHeight,
13
+ onAppearActive: getRealHeight,
14
+ onEnterActive: getRealHeight,
15
+ onLeaveStart: getCurrentHeight,
16
+ onLeaveActive: getCollapsedHeight,
17
+ onAppearEnd: skipOpacityTransition,
18
+ onEnterEnd: skipOpacityTransition,
19
+ onLeaveEnd: skipOpacityTransition,
20
+ motionDeadline: 500,
21
+ });
22
+ const SelectPlacements = ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'];
23
+ const getTransitionName = (rootPrefixCls, motion, transitionName) => {
24
+ if (transitionName !== undefined) {
25
+ return transitionName;
26
+ }
27
+ return `${rootPrefixCls}-${motion}`;
28
+ };
29
+ export { getTransitionName };
30
+ export default initCollapseMotion;
31
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/tntd-select/_util/motion.ts"],"names":[],"mappings":"AAGA,wDAAwD;AACxD,MAAM,kBAAkB,GAAuB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACjF,MAAM,aAAa,GAAuB,CAAC,IAAI,EAAE,EAAE;IACjD,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC9C,CAAC,CAAC;AACF,MAAM,gBAAgB,GAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAClG,MAAM,qBAAqB,GAA0B,CAAC,CAAC,EAAE,KAAkB,EAAE,EAAE,CAC7E,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,MAAK,IAAI,IAAK,KAAyB,CAAC,YAAY,KAAK,QAAQ,CAAC;AAEnF,MAAM,kBAAkB,GAAG,CAAC,UAAkB,KAAK,EAAkB,EAAE,CAAC,CAAC;IACvE,UAAU,EAAE,GAAG,OAAO,kBAAkB;IACxC,aAAa,EAAE,kBAAkB;IACjC,YAAY,EAAE,kBAAkB;IAChC,cAAc,EAAE,aAAa;IAC7B,aAAa,EAAE,aAAa;IAC5B,YAAY,EAAE,gBAAgB;IAC9B,aAAa,EAAE,kBAAkB;IACjC,WAAW,EAAE,qBAAqB;IAClC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,cAAc,EAAE,GAAG;CACpB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAIvF,MAAM,iBAAiB,GAAG,CAAC,aAAqB,EAAE,MAAc,EAAE,cAAuB,EAAE,EAAE;IAC3F,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,OAAO,cAAc,CAAC;KACvB;IACD,OAAO,GAAG,aAAa,IAAI,MAAM,EAAE,CAAC;AACtC,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC7B,eAAe,kBAAkB,CAAC","sourcesContent":["import type { CSSMotionProps, MotionEndEventHandler, MotionEventHandler } from 'rc-motion';\nimport type { MotionEvent } from 'rc-motion/lib/interface';\n\n// ================== Collapse Motion ==================\nconst getCollapsedHeight: MotionEventHandler = () => ({ height: 0, opacity: 0 });\nconst getRealHeight: MotionEventHandler = (node) => {\n const { scrollHeight } = node;\n return { height: scrollHeight, opacity: 1 };\n};\nconst getCurrentHeight: MotionEventHandler = (node) => ({ height: node ? node.offsetHeight : 0 });\nconst skipOpacityTransition: MotionEndEventHandler = (_, event: MotionEvent) =>\n event?.deadline === true || (event as TransitionEvent).propertyName === 'height';\n\nconst initCollapseMotion = (rootCls: string = 'ant'): CSSMotionProps => ({\n motionName: `${rootCls}-motion-collapse`,\n onAppearStart: getCollapsedHeight,\n onEnterStart: getCollapsedHeight,\n onAppearActive: getRealHeight,\n onEnterActive: getRealHeight,\n onLeaveStart: getCurrentHeight,\n onLeaveActive: getCollapsedHeight,\n onAppearEnd: skipOpacityTransition,\n onEnterEnd: skipOpacityTransition,\n onLeaveEnd: skipOpacityTransition,\n motionDeadline: 500,\n});\n\nconst SelectPlacements = ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'] as const;\n\nexport type SelectCommonPlacement = typeof SelectPlacements[number];\n\nconst getTransitionName = (rootPrefixCls: string, motion: string, transitionName?: string) => {\n if (transitionName !== undefined) {\n return transitionName;\n }\n return `${rootPrefixCls}-${motion}`;\n};\n\nexport { getTransitionName };\nexport default initCollapseMotion;"]}
@@ -0,0 +1,6 @@
1
+ import warning, { resetWarned } from 'rc-util/lib/warning';
2
+ export { resetWarned };
3
+ export default (valid, component, message) => {
4
+ warning(valid, `[antd: ${component}] ${message}`);
5
+ };
6
+ //# sourceMappingURL=warning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warning.js","sourceRoot":"","sources":["../../../src/tntd-select/_util/warning.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,eAAe,CAAC,KAAc,EAAE,SAAiB,EAAE,OAAe,EAAQ,EAAE;IAC1E,OAAO,CAAC,KAAK,EAAE,UAAU,SAAS,KAAK,OAAO,EAAE,CAAC,CAAA;AACnD,CAAC,CAAA","sourcesContent":["import warning, { resetWarned } from 'rc-util/lib/warning'\n\nexport { resetWarned }\n\nexport default (valid: boolean, component: string, message: string): void => {\n warning(valid, `[antd: ${component}] ${message}`)\n}\n"]}
@@ -0,0 +1,6 @@
1
+ declare const SelectPlacements: ["bottomLeft", "bottomRight", "topLeft", "topRight"];
2
+ export declare type SelectCommonPlacement = typeof SelectPlacements[number];
3
+ declare const getTransitionDirection: (placement: SelectCommonPlacement | undefined) => "slide-down" | "slide-up";
4
+ declare const getTransitionName: (rootPrefixCls: string, motion: string, transitionName?: string | undefined) => string;
5
+ export { getTransitionName, getTransitionDirection };
6
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../src/_util/motion.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,gBAAgB,sDAA4D,CAAC;AACnF,oBAAY,qBAAqB,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEpE,QAAA,MAAM,sBAAsB,cAAe,qBAAqB,GAAG,SAAS,8BAK3E,CAAC;AAEF,QAAA,MAAM,iBAAiB,kBAAmB,MAAM,UAAU,MAAM,gDAK/D,CAAC;AACF,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTransitionDirection = exports.getTransitionName = void 0;
4
+ const type_1 = require("./type");
5
+ const SelectPlacements = (0, type_1.tuple)('bottomLeft', 'bottomRight', 'topLeft', 'topRight');
6
+ const getTransitionDirection = (placement) => {
7
+ if (placement !== undefined && (placement === 'topLeft' || placement === 'topRight')) {
8
+ return `slide-down`;
9
+ }
10
+ return `slide-up`;
11
+ };
12
+ exports.getTransitionDirection = getTransitionDirection;
13
+ const getTransitionName = (rootPrefixCls, motion, transitionName) => {
14
+ if (transitionName !== undefined) {
15
+ return transitionName;
16
+ }
17
+ return `${rootPrefixCls}-${motion}`;
18
+ };
19
+ exports.getTransitionName = getTransitionName;
20
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../src/_util/motion.tsx"],"names":[],"mappings":";;;AAAA,iCAA+B;AAE/B,MAAM,gBAAgB,GAAG,IAAA,YAAK,EAAC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAGnF,MAAM,sBAAsB,GAAG,CAAC,SAA4C,EAAE,EAAE;IAC9E,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU,CAAC,EAAE;QACpF,OAAO,YAAY,CAAC;KACrB;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAQ0B,wDAAsB;AANlD,MAAM,iBAAiB,GAAG,CAAC,aAAqB,EAAE,MAAc,EAAE,cAAuB,EAAE,EAAE;IAC3F,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,OAAO,cAAc,CAAC;KACvB;IACD,OAAO,GAAG,aAAa,IAAI,MAAM,EAAE,CAAC;AACtC,CAAC,CAAC;AACO,8CAAiB","sourcesContent":["import { tuple } from './type';\n\nconst SelectPlacements = tuple('bottomLeft', 'bottomRight', 'topLeft', 'topRight');\nexport type SelectCommonPlacement = typeof SelectPlacements[number];\n\nconst getTransitionDirection = (placement: SelectCommonPlacement | undefined) => {\n if (placement !== undefined && (placement === 'topLeft' || placement === 'topRight')) {\n return `slide-down`;\n }\n return `slide-up`;\n};\n\nconst getTransitionName = (rootPrefixCls: string, motion: string, transitionName?: string) => {\n if (transitionName !== undefined) {\n return transitionName;\n }\n return `${rootPrefixCls}-${motion}`;\n};\nexport { getTransitionName, getTransitionDirection };"]}
@@ -0,0 +1,4 @@
1
+ export declare type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
2
+ export declare const tuple: <T extends string[]>(...args: T) => T;
3
+ export declare const tupleNum: <T extends number[]>(...args: T) => T;
4
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/_util/type.ts"],"names":[],"mappings":"AAAA,oBAAY,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtE,eAAO,MAAM,KAAK,uCAA2C,CAAC;AAE9D,eAAO,MAAM,QAAQ,uCAA2C,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tupleNum = exports.tuple = void 0;
4
+ // https://stackoverflow.com/questions/46176165/ways-to-get-string-literal-type-of-array-values-without-enum-overhead
5
+ const tuple = (...args) => args;
6
+ exports.tuple = tuple;
7
+ const tupleNum = (...args) => args;
8
+ exports.tupleNum = tupleNum;
9
+ //# sourceMappingURL=type.js.map