@hi-ui/form 4.0.0-alpha.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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/lib/cjs/Form.js +106 -0
  4. package/lib/cjs/Form.js.map +1 -0
  5. package/lib/cjs/FormField.js +44 -0
  6. package/lib/cjs/FormField.js.map +1 -0
  7. package/lib/cjs/FormItem.js +61 -0
  8. package/lib/cjs/FormItem.js.map +1 -0
  9. package/lib/cjs/FormLabel.js +135 -0
  10. package/lib/cjs/FormLabel.js.map +1 -0
  11. package/lib/cjs/FormList.js +166 -0
  12. package/lib/cjs/FormList.js.map +1 -0
  13. package/lib/cjs/FormMessage.js +72 -0
  14. package/lib/cjs/FormMessage.js.map +1 -0
  15. package/lib/cjs/context.js +33 -0
  16. package/lib/cjs/context.js.map +1 -0
  17. package/lib/cjs/index.js +29 -0
  18. package/lib/cjs/index.js.map +1 -0
  19. package/lib/cjs/styles/index.scss.js +22 -0
  20. package/lib/cjs/styles/index.scss.js.map +1 -0
  21. package/lib/cjs/use-form-field.js +114 -0
  22. package/lib/cjs/use-form-field.js.map +1 -0
  23. package/lib/cjs/use-form.js +544 -0
  24. package/lib/cjs/use-form.js.map +1 -0
  25. package/lib/esm/Form.js +83 -0
  26. package/lib/esm/Form.js.map +1 -0
  27. package/lib/esm/FormField.js +35 -0
  28. package/lib/esm/FormField.js.map +1 -0
  29. package/lib/esm/FormItem.js +39 -0
  30. package/lib/esm/FormItem.js.map +1 -0
  31. package/lib/esm/FormLabel.js +113 -0
  32. package/lib/esm/FormLabel.js.map +1 -0
  33. package/lib/esm/FormList.js +145 -0
  34. package/lib/esm/FormList.js.map +1 -0
  35. package/lib/esm/FormMessage.js +51 -0
  36. package/lib/esm/FormMessage.js.map +1 -0
  37. package/lib/esm/context.js +25 -0
  38. package/lib/esm/context.js.map +1 -0
  39. package/lib/esm/index.js +14 -0
  40. package/lib/esm/index.js.map +1 -0
  41. package/lib/esm/styles/index.scss.js +17 -0
  42. package/lib/esm/styles/index.scss.js.map +1 -0
  43. package/lib/esm/use-form-field.js +94 -0
  44. package/lib/esm/use-form-field.js.map +1 -0
  45. package/lib/esm/use-form.js +519 -0
  46. package/lib/esm/use-form.js.map +1 -0
  47. package/lib/types/Form.d.ts +35 -0
  48. package/lib/types/FormField.d.ts +12 -0
  49. package/lib/types/FormItem.d.ts +13 -0
  50. package/lib/types/FormLabel.d.ts +28 -0
  51. package/lib/types/FormList.d.ts +15 -0
  52. package/lib/types/FormMessage.d.ts +27 -0
  53. package/lib/types/FormReset.d.ts +8 -0
  54. package/lib/types/FormSubmit.d.ts +8 -0
  55. package/lib/types/context.d.ts +55 -0
  56. package/lib/types/index.d.ts +6 -0
  57. package/lib/types/types.d.ts +113 -0
  58. package/lib/types/use-form-field.d.ts +37 -0
  59. package/lib/types/use-form.d.ts +78 -0
  60. package/lib/types/utils/index.d.ts +1 -0
  61. package/package.json +68 -0
@@ -0,0 +1,33 @@
1
+ /** @LICENSE
2
+ * @hi-ui/form
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/form#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ Object.defineProperty(exports, '__esModule', {
13
+ value: true
14
+ });
15
+
16
+ var React = require('react');
17
+
18
+ var formContext = /*#__PURE__*/React.createContext(null);
19
+ var FormProvider = formContext.Provider;
20
+
21
+ var useFormContext = function useFormContext() {
22
+ var context = React.useContext(formContext);
23
+
24
+ if (!context) {
25
+ throw new Error('The FormContext should using in Form.');
26
+ }
27
+
28
+ return context;
29
+ };
30
+
31
+ exports.FormProvider = FormProvider;
32
+ exports.useFormContext = useFormContext;
33
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sources":["../../src/context.ts"],"sourcesContent":[null],"names":["formContext","createContext","FormProvider","Provider","useFormContext","context","useContext","Error"],"mappings":";;;;;;;;;;;;;;;;;AAIA,IAAMA,WAAW,gBAAGC,mBAAAA,CAAuD,IAAvDA,CAApB;IAEaC,YAAY,GAAGF,WAAW,CAACG;;IAE3BC,cAAc,GAAG,SAAjBA,cAAiB;MACtBC,OAAO,GAAGC,gBAAAA,CAAWN,WAAXM;;MAEZ,CAACD,SAAS;UACN,IAAIE,KAAJ,CAAU,uCAAV;;;SAGDF;;;;"}
@@ -0,0 +1,29 @@
1
+ /** @LICENSE
2
+ * @hi-ui/form
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/form#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ Object.defineProperty(exports, '__esModule', {
13
+ value: true
14
+ });
15
+
16
+ require('./styles/index.scss.js');
17
+
18
+ var Form = require('./Form.js');
19
+
20
+ var FormItem = require('./FormItem.js');
21
+
22
+ var FormList = require('./FormList.js');
23
+
24
+ exports.FORM_REGISTER_TABLE = Form.FORM_REGISTER_TABLE;
25
+ exports.Form = Form.Form;
26
+ exports["default"] = Form.Form;
27
+ exports.FormItem = FormItem.FormItem;
28
+ exports.FormList = FormList.FormList;
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,22 @@
1
+ /** @LICENSE
2
+ * @hi-ui/form
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/form#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ Object.defineProperty(exports, '__esModule', {
13
+ value: true
14
+ });
15
+ var css_248z = "@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n@use 'sass:map';\n.hi-v4-form {\n max-width: 100%;\n position: relative; }\n.hi-v4-form fieldset {\n margin: 0;\n padding: 0;\n border: 0; }\n.hi-v4-form fieldset + fieldset {\n margin-top: 16px; }\n.hi-v4-form legend {\n margin: 0 0 16px;\n color: #1f2937;\n color: var(--hi-v4-color-gray-800, #1f2937); }\n.hi-v4-form--inline {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n.hi-v4-form--inline .hi-v4-form-label__indent {\n min-height: 32px; }\n.hi-v4-form-label {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n font-size: 0.875rem;\n font-size: var(--hi-v4-text-size-normal, 0.875rem);\n margin-right: 8px;\n margin-right: var(--hi-v4-spacing-4, 8px);\n margin-bottom: 24px; }\n.hi-v4-form-label__text, .hi-v4-form-label__indent {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n vertical-align: top;\n color: #1f2937;\n color: var(--hi-v4-color-gray-800, #1f2937);\n overflow-wrap: break-word; }\n.hi-v4-form-label__text {\n margin-top: 5px;\n min-height: 22px;\n padding-right: 8px;\n padding-right: var(--hi-v4-spacing-4, 8px);\n line-height: 22px; }\n.hi-v4-form-label--placement-left .hi-v4-form-label__text {\n text-align: left; }\n.hi-v4-form-label--placement-right .hi-v4-form-label__text {\n text-align: right; }\n.hi-v4-form-label--placement-top .hi-v4-form-label__text {\n height: 22px;\n padding-right: 8px;\n margin-bottom: 8px; }\n.hi-v4-form-label--required .hi-v4-form-label__text::after {\n margin-right: 4px;\n margin-right: var(--hi-v4-spacing-2, 4px);\n content: '*';\n color: #237ffa;\n color: var(--hi-v4-color-brandblue-500, #237ffa); }\n.hi-v4-form-label .hi-v4-form-label--placement-top {\n padding-right: 0;\n text-align: left;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n margin-bottom: 20px; }\n.hi-v4-form-label__content {\n -webkit-box-flex: 1;\n -ms-flex: 1 1;\n flex: 1 1;\n position: relative;\n vertical-align: top;\n min-height: 32px;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n.hi-v4-form-message {\n font-size: 0.875rem;\n font-size: var(--hi-v4-text-size-normal, 0.875rem);\n min-height: 24px;\n padding: 2px 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n line-height: 20px;\n -webkit-transition: all 0.3s;\n transition: all 0.3s;\n -webkit-transform: translateY(-10%);\n transform: translateY(-10%);\n color: #ff5959;\n color: var(--hi-v4-color-red-500, #ff5959); }\n";
16
+
17
+ var __styleInject__ = require('style-inject/dist/style-inject.es.js')["default"];
18
+
19
+ __styleInject__(css_248z);
20
+
21
+ exports["default"] = css_248z;
22
+ //# sourceMappingURL=index.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,114 @@
1
+ /** @LICENSE
2
+ * @hi-ui/form
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/form#readme
4
+ *
5
+ * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ 'use strict';
11
+
12
+ var _typeof = require("@babel/runtime/helpers/typeof");
13
+
14
+ Object.defineProperty(exports, '__esModule', {
15
+ value: true
16
+ });
17
+
18
+ var React = require('react');
19
+
20
+ var context = require('./context.js');
21
+
22
+ var typeAssertion = require('@hi-ui/type-assertion');
23
+
24
+ var Validater = require('async-validator');
25
+
26
+ var funcUtils = require('@hi-ui/func-utils');
27
+
28
+ function _interopDefaultLegacy(e) {
29
+ return e && _typeof(e) === 'object' && 'default' in e ? e : {
30
+ 'default': e
31
+ };
32
+ }
33
+
34
+ var Validater__default = /*#__PURE__*/_interopDefaultLegacy(Validater);
35
+
36
+ var useFormField = function useFormField(props) {
37
+ var field = props.field,
38
+ rulesProp = props.rules,
39
+ valueType = props.valueType;
40
+
41
+ var _useFormContext = context.useFormContext(),
42
+ getFieldRules = _useFormContext.getFieldRules,
43
+ getFieldProps = _useFormContext.getFieldProps,
44
+ registerField = _useFormContext.registerField,
45
+ unregisterField = _useFormContext.unregisterField;
46
+ /**
47
+ * 处理校验规则,item 优先级大于 form
48
+ */
49
+
50
+
51
+ var fieldRules = React.useMemo(function () {
52
+ // @ts-ignore
53
+ var rules = funcUtils.toArray(rulesProp !== null && rulesProp !== void 0 ? rulesProp : getFieldRules(field)); // switch(valueType) {
54
+ // case: 'string':
55
+ // const scheme = yup.string()
56
+ // rules.reduce((scheme, { name, strategy, validator, message, transform }) => {
57
+ // if (typeof name === 'string' && name in scheme) {
58
+ // if (isFunction(transform)) {
59
+ // scheme = scheme.transform(transform)
60
+ // }
61
+ // // @ts-ignore
62
+ // return scheme[name](message)
63
+ // }
64
+ // }, scheme)
65
+ // case: 'number':
66
+ // case: 'boolean':
67
+ // case: 'array':
68
+ // case: 'object':
69
+ // case: 'date':
70
+ // }
71
+
72
+ return rules.map(function (rule) {
73
+ return Object.assign({
74
+ type: valueType
75
+ }, rule);
76
+ });
77
+ }, [rulesProp, field, getFieldRules, valueType]); // 当前 field 的唯一校验器
78
+
79
+ var fieldValidate = React.useCallback(function (value) {
80
+ var _Validater, _validater$validate;
81
+
82
+ if (!typeAssertion.isArrayNonEmpty(fieldRules)) {
83
+ return Promise.resolve(null);
84
+ } // TODO: rules 处理成 Async Validate 的指定结构
85
+
86
+
87
+ console.log('fieldRules', fieldRules, 'value:', value);
88
+ var validater = new Validater__default['default']((_Validater = {}, _Validater[field] = fieldRules, _Validater)); // @ts-ignore
89
+
90
+ return validater.validate((_validater$validate = {}, _validater$validate[field] = value, _validater$validate), {
91
+ firstFields: true
92
+ }, console.log);
93
+ }, [fieldRules, field]); // 注入当前 field 及其验证规则到 Form
94
+
95
+ React.useEffect(function () {
96
+ if (field) {
97
+ // @ts-ignore
98
+ registerField(field, {
99
+ validate: fieldValidate
100
+ });
101
+ }
102
+
103
+ return function () {
104
+ if (field) {
105
+ // @ts-ignore
106
+ unregisterField(field);
107
+ }
108
+ };
109
+ }, [registerField, unregisterField, field, fieldValidate]);
110
+ return getFieldProps(props);
111
+ };
112
+
113
+ exports.useFormField = useFormField;
114
+ //# sourceMappingURL=use-form-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-form-field.js","sources":["../../src/use-form-field.ts"],"sourcesContent":[null],"names":["useFormField","props","field","rulesProp","rules","valueType","useFormContext","getFieldRules","getFieldProps","registerField","unregisterField","fieldRules","useMemo","toArray","map","rule","type","fieldValidate","useCallback","value","isArrayNonEmpty","Promise","resolve","console","log","validater","Validater","validate","firstFields","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQaA,YAAY,GAAG,SAAfA,YAAe,CAAeC,KAAf;MAClBC,KAAR,GAA+CD,KAA/C,CAAQC;MAAcC,SAAtB,GAA+CF,KAA/C,CAAeG;MAAkBC,SAAjC,GAA+CJ,KAA/C,CAAiCI;;wBAW7BC,sBAAAA;MAJFC,aALF,mBAKEA;MACAC,aANF,mBAMEA;MACAC,aAPF,mBAOEA;MACAC,eARF,mBAQEA;;;;;;MAMIC,UAAU,GAAGC,aAAAA,CAAQ;;QAEnBR,KAAK,GAAGS,iBAAAA,CAAQV,SAAS,SAATA,IAAAA,SAAS,WAATA,GAAAA,SAAAA,GAAaI,aAAa,CAACL,KAAD,CAAlCW;;;;;;;;;;;;;;;;;;;WAqBPT,KAAK,CAACU,GAANV,CAAU,UAACW,IAAD;;AAAaC,QAAAA,IAAI,EAAEX;SAAcU;AAA3C,KAAAX;AAvBiB,GAAPQ,EAwBhB,CAACT,SAAD,EAAYD,KAAZ,EAAmBK,aAAnB,EAAkCF,SAAlC,CAxBgBO;;MA2BbK,aAAa,GAAGC,iBAAAA,CACpB,UAACC,KAAD;;;QACM,CAACC,6BAAAA,CAAgBT,UAAhBS,GAA6B;aACzBC,OAAO,CAACC,OAARD,CAAgB,IAAhBA;;;;AAITE,IAAAA,OAAO,CAACC,GAARD,CAAY,YAAZA,EAA0BZ,UAA1BY,EAAsC,QAAtCA,EAAgDJ,KAAhDI;QAEME,SAAS,GAAG,IAAIC,6BAAJ,8BAEfxB,SAAQS,sBAFO;;WAKXc,SAAS,CAACE,QAAVF,gDAAsBvB,SAAQiB,0BAA9BM,GAAuC;AAAEG,MAAAA,WAAW,EAAE;AAAf,KAAvCH,EAA8DF,OAAO,CAACC,GAAtEC;AAdsB,GAAXP,EAgBpB,CAACP,UAAD,EAAaT,KAAb,CAhBoBgB;;AAoBtBW,EAAAA,eAAAA,CAAU;QACJ3B,OAAO;;AAETO,MAAAA,aAAa,CAACP,KAAD,EAAQ;AACnByB,QAAAA,QAAQ,EAAEV;AADS,OAAR,CAAbR;;;WAKK;UACDP,OAAO;;AAETQ,QAAAA,eAAe,CAACR,KAAD,CAAfQ;;AAHJ;AARO,GAATmB,EAcG,CAACpB,aAAD,EAAgBC,eAAhB,EAAiCR,KAAjC,EAAwCe,aAAxC,CAdHY;SAgBOrB,aAAa,CAACP,KAAD;;;"}