@1money/react-ui 1.16.0 → 1.17.0
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.
- package/AGENTS.md +393 -0
- package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
- package/es/components/CheckboxGroup/interface.d.ts +21 -15
- package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
- package/es/components/Form/Form.d.ts +29 -0
- package/es/components/Form/Form.js +188 -0
- package/es/components/Form/FormItem.d.ts +4 -0
- package/es/components/Form/FormItem.js +165 -0
- package/es/components/Form/FormItemContent.d.ts +18 -0
- package/es/components/Form/FormItemContent.js +146 -0
- package/es/components/Form/constants.d.ts +46 -0
- package/es/components/Form/constants.js +65 -0
- package/es/components/Form/helper.d.ts +120 -0
- package/es/components/Form/helper.js +284 -0
- package/es/components/Form/index.d.ts +20 -0
- package/es/components/Form/index.js +21 -0
- package/es/components/Form/interface.d.ts +238 -0
- package/es/components/Form/interface.js +2 -0
- package/es/components/Form/style/Form.css +1 -0
- package/es/components/Form/style/Form.scss +167 -0
- package/es/components/Form/style/css.js +2 -0
- package/es/components/Form/style/index.d.ts +1 -0
- package/es/components/Form/style/index.js +2 -0
- package/es/components/Form/useFormItemContext.d.ts +32 -0
- package/es/components/Form/useFormItemContext.js +55 -0
- package/es/components/Form/useFormItemWatch.d.ts +51 -0
- package/es/components/Form/useFormItemWatch.js +69 -0
- package/es/components/Form/useValidationTrigger.d.ts +40 -0
- package/es/components/Form/useValidationTrigger.js +74 -0
- package/es/components/Input/Input.js +72 -74
- package/es/components/Input/interface.d.ts +9 -9
- package/es/components/InputAmount/InputAmount.js +228 -276
- package/es/components/InputAmount/helper.d.ts +46 -0
- package/es/components/InputAmount/helper.js +115 -0
- package/es/components/ProForm/ProForm.d.ts +33 -0
- package/es/components/ProForm/ProForm.js +208 -0
- package/es/components/ProForm/ProFormDependency.d.ts +12 -0
- package/es/components/ProForm/ProFormDependency.js +61 -0
- package/es/components/ProForm/ProFormList.d.ts +19 -0
- package/es/components/ProForm/ProFormList.js +348 -0
- package/es/components/ProForm/Submitter.d.ts +21 -0
- package/es/components/ProForm/Submitter.js +76 -0
- package/es/components/ProForm/constants.d.ts +34 -0
- package/es/components/ProForm/constants.js +40 -0
- package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
- package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormDigit.js +15 -0
- package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormMoney.js +10 -0
- package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
- package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormPassword.js +16 -0
- package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormRadio.js +13 -0
- package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormSelect.js +13 -0
- package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
- package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormText.js +15 -0
- package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
- package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
- package/es/components/ProForm/fields/createProFormField.js +200 -0
- package/es/components/ProForm/fields/index.d.ts +12 -0
- package/es/components/ProForm/fields/index.js +13 -0
- package/es/components/ProForm/index.d.ts +7 -0
- package/es/components/ProForm/index.js +7 -0
- package/es/components/ProForm/interface.d.ts +306 -0
- package/es/components/ProForm/interface.js +2 -0
- package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
- package/es/components/ProForm/layouts/DrawerForm.js +79 -0
- package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
- package/es/components/ProForm/layouts/ModalForm.js +89 -0
- package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
- package/es/components/ProForm/layouts/QueryFilter.js +132 -0
- package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
- package/es/components/ProForm/layouts/StepsForm.js +295 -0
- package/es/components/ProForm/layouts/index.d.ts +4 -0
- package/es/components/ProForm/layouts/index.js +5 -0
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
- package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
- package/es/components/ProForm/style/ProForm.module.css +1 -0
- package/es/components/ProForm/style/ProForm.module.scss +59 -0
- package/es/components/ProForm/style/css.js +3 -0
- package/es/components/ProForm/style/index.d.ts +1 -0
- package/es/components/ProForm/style/index.js +3 -0
- package/es/components/ProForm/utils.d.ts +72 -0
- package/es/components/ProForm/utils.js +206 -0
- package/es/components/RadioGroup/RadioGroup.js +46 -23
- package/es/components/RadioGroup/interface.d.ts +3 -1
- package/es/components/Select/Select.d.ts +1 -1
- package/es/components/Select/Select.js +113 -106
- package/es/components/Select/constants.d.ts +18 -0
- package/es/components/Select/constants.js +19 -0
- package/es/components/Sidebar/Sidebar.js +21 -23
- package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
- package/es/components/Sidebar/SidebarLogo.js +33 -0
- package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
- package/es/components/Sidebar/SimplySidebar.js +18 -22
- package/es/components/Sidebar/Stepper.js +14 -14
- package/es/components/Sidebar/constants.d.ts +16 -0
- package/es/components/Sidebar/constants.js +17 -0
- package/es/components/Sidebar/style/Stepper.css +1 -1
- package/es/components/Sidebar/style/Stepper.scss +11 -1
- package/es/components/Switch/Switch.js +28 -25
- package/es/components/Switch/interface.d.ts +9 -4
- package/es/components/useControlledState/index.d.ts +14 -0
- package/es/components/useControlledState/index.js +32 -0
- package/es/components/useEventCallback/index.d.ts +11 -0
- package/es/components/useEventCallback/index.js +17 -0
- package/es/components/useLayoutEffect/index.d.ts +11 -0
- package/es/components/useLayoutEffect/index.js +17 -0
- package/es/components/useLayoutState/index.d.ts +13 -0
- package/es/components/useLayoutState/index.js +71 -0
- package/es/components/useMemoizedFn/index.d.ts +12 -0
- package/es/components/useMemoizedFn/index.js +27 -0
- package/es/components/usePrevious/index.d.ts +11 -0
- package/es/components/usePrevious/index.js +19 -0
- package/es/components/useSafeState/index.d.ts +12 -0
- package/es/components/useSafeState/index.js +24 -0
- package/es/components/useSyncState/index.d.ts +14 -0
- package/es/components/useSyncState/index.js +37 -0
- package/es/components/useUpdateEffect/index.d.ts +9 -0
- package/es/components/useUpdateEffect/index.js +19 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +21 -2
- package/es/index.js +19 -1
- package/jest.setup.d.ts +1 -0
- package/jest.setup.ts +1 -0
- package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
- package/lib/components/CheckboxGroup/interface.d.ts +21 -15
- package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
- package/lib/components/Form/Form.d.ts +29 -0
- package/lib/components/Form/Form.js +199 -0
- package/lib/components/Form/FormItem.d.ts +4 -0
- package/lib/components/Form/FormItem.js +176 -0
- package/lib/components/Form/FormItemContent.d.ts +18 -0
- package/lib/components/Form/FormItemContent.js +156 -0
- package/lib/components/Form/constants.d.ts +46 -0
- package/lib/components/Form/constants.js +71 -0
- package/lib/components/Form/helper.d.ts +120 -0
- package/lib/components/Form/helper.js +290 -0
- package/lib/components/Form/index.d.ts +20 -0
- package/lib/components/Form/index.js +45 -0
- package/lib/components/Form/interface.d.ts +238 -0
- package/lib/components/Form/interface.js +6 -0
- package/lib/components/Form/style/Form.css +1 -0
- package/lib/components/Form/style/Form.scss +167 -0
- package/lib/components/Form/style/css.js +4 -0
- package/lib/components/Form/style/index.d.ts +1 -0
- package/lib/components/Form/style/index.js +4 -0
- package/lib/components/Form/useFormItemContext.d.ts +32 -0
- package/lib/components/Form/useFormItemContext.js +62 -0
- package/lib/components/Form/useFormItemWatch.d.ts +51 -0
- package/lib/components/Form/useFormItemWatch.js +76 -0
- package/lib/components/Form/useValidationTrigger.d.ts +40 -0
- package/lib/components/Form/useValidationTrigger.js +81 -0
- package/lib/components/Input/Input.js +71 -73
- package/lib/components/Input/interface.d.ts +9 -9
- package/lib/components/InputAmount/InputAmount.js +230 -278
- package/lib/components/InputAmount/helper.d.ts +46 -0
- package/lib/components/InputAmount/helper.js +122 -0
- package/lib/components/ProForm/ProForm.d.ts +33 -0
- package/lib/components/ProForm/ProForm.js +216 -0
- package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
- package/lib/components/ProForm/ProFormDependency.js +67 -0
- package/lib/components/ProForm/ProFormList.d.ts +19 -0
- package/lib/components/ProForm/ProFormList.js +355 -0
- package/lib/components/ProForm/Submitter.d.ts +21 -0
- package/lib/components/ProForm/Submitter.js +83 -0
- package/lib/components/ProForm/constants.d.ts +34 -0
- package/lib/components/ProForm/constants.js +46 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
- package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
- package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
- package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
- package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
- package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
- package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
- package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
- package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormText.js +22 -0
- package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
- package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
- package/lib/components/ProForm/fields/createProFormField.js +208 -0
- package/lib/components/ProForm/fields/index.d.ts +12 -0
- package/lib/components/ProForm/fields/index.js +90 -0
- package/lib/components/ProForm/index.d.ts +7 -0
- package/lib/components/ProForm/index.js +73 -0
- package/lib/components/ProForm/interface.d.ts +306 -0
- package/lib/components/ProForm/interface.js +6 -0
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
- package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
- package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
- package/lib/components/ProForm/layouts/ModalForm.js +96 -0
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
- package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
- package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
- package/lib/components/ProForm/layouts/StepsForm.js +302 -0
- package/lib/components/ProForm/layouts/index.d.ts +4 -0
- package/lib/components/ProForm/layouts/index.js +40 -0
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
- package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
- package/lib/components/ProForm/style/ProForm.module.css +1 -0
- package/lib/components/ProForm/style/ProForm.module.scss +59 -0
- package/lib/components/ProForm/style/css.js +4 -0
- package/lib/components/ProForm/style/index.d.ts +1 -0
- package/lib/components/ProForm/style/index.js +4 -0
- package/lib/components/ProForm/utils.d.ts +72 -0
- package/lib/components/ProForm/utils.js +213 -0
- package/lib/components/RadioGroup/RadioGroup.js +45 -22
- package/lib/components/RadioGroup/interface.d.ts +3 -1
- package/lib/components/Select/Select.d.ts +1 -1
- package/lib/components/Select/Select.js +114 -107
- package/lib/components/Select/constants.d.ts +18 -0
- package/lib/components/Select/constants.js +25 -0
- package/lib/components/Sidebar/Sidebar.js +21 -23
- package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
- package/lib/components/Sidebar/SidebarLogo.js +39 -0
- package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
- package/lib/components/Sidebar/SimplySidebar.js +17 -21
- package/lib/components/Sidebar/Stepper.js +14 -14
- package/lib/components/Sidebar/constants.d.ts +16 -0
- package/lib/components/Sidebar/constants.js +23 -0
- package/lib/components/Sidebar/style/Stepper.css +1 -1
- package/lib/components/Sidebar/style/Stepper.scss +11 -1
- package/lib/components/Switch/Switch.js +27 -24
- package/lib/components/Switch/interface.d.ts +9 -4
- package/lib/components/useControlledState/index.d.ts +14 -0
- package/lib/components/useControlledState/index.js +39 -0
- package/lib/components/useEventCallback/index.d.ts +11 -0
- package/lib/components/useEventCallback/index.js +24 -0
- package/lib/components/useLayoutEffect/index.d.ts +11 -0
- package/lib/components/useLayoutEffect/index.js +23 -0
- package/lib/components/useLayoutState/index.d.ts +13 -0
- package/lib/components/useLayoutState/index.js +79 -0
- package/lib/components/useMemoizedFn/index.d.ts +12 -0
- package/lib/components/useMemoizedFn/index.js +33 -0
- package/lib/components/usePrevious/index.d.ts +11 -0
- package/lib/components/usePrevious/index.js +25 -0
- package/lib/components/useSafeState/index.d.ts +12 -0
- package/lib/components/useSafeState/index.js +31 -0
- package/lib/components/useSyncState/index.d.ts +14 -0
- package/lib/components/useSyncState/index.js +44 -0
- package/lib/components/useUpdateEffect/index.d.ts +9 -0
- package/lib/components/useUpdateEffect/index.js +25 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +21 -2
- package/lib/index.js +213 -1
- package/package.json +16 -1
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
6
|
+
resolve(value);
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.next(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function rejected(value) {
|
|
18
|
+
try {
|
|
19
|
+
step(generator["throw"](value));
|
|
20
|
+
} catch (e) {
|
|
21
|
+
reject(e);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function step(result) {
|
|
25
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
26
|
+
}
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
import { DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLL_BLOCK, DEFAULT_SCROLL_INLINE, GRID_COLUMNS, GRID_MIN, PERCENT, SELECTOR_DATA_FORM_ITEM_ATTR, SELECTOR_NAME_ATTR, STATUS_ERROR, STATUS_SUCCESS, STATUS_VALIDATING, VALIDATE_PARALLEL } from './constants';
|
|
31
|
+
/**
|
|
32
|
+
* Converts a 12-column grid span to a CSS percentage width string.
|
|
33
|
+
*
|
|
34
|
+
* @param col - Grid column count (0–12). Values are clamped to the valid range.
|
|
35
|
+
* @returns A CSS percentage string (e.g. `"25%"`), or `undefined` when `col` is `null`/`undefined`.
|
|
36
|
+
*/
|
|
37
|
+
export var toPercent = function toPercent(col) {
|
|
38
|
+
if (col == null) return undefined;
|
|
39
|
+
return "".concat(Math.max(GRID_MIN, Math.min(GRID_COLUMNS, col)) / GRID_COLUMNS * PERCENT, "%");
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Type guard that narrows an unknown value to a `FieldError`-like object.
|
|
43
|
+
*
|
|
44
|
+
* `isFieldError` assumes `react-hook-form` places `type` on leaf errors,
|
|
45
|
+
* and `getFirstErrorPath` relies on that to stop descending once a leaf is found.
|
|
46
|
+
* If RHF changes this contract, tighten this predicate (e.g. require `message`/`ref`
|
|
47
|
+
* or another stricter leaf-shape check) to avoid false positives on nested containers.
|
|
48
|
+
*
|
|
49
|
+
* Checks for the presence of `type`, `message`, or `ref` properties which
|
|
50
|
+
* are characteristic of `react-hook-form` field errors.
|
|
51
|
+
*
|
|
52
|
+
* @param value - The value to check.
|
|
53
|
+
* @returns `true` if the value is a `FieldError`-like object.
|
|
54
|
+
*/
|
|
55
|
+
export var isFieldError = function isFieldError(value) {
|
|
56
|
+
if (!value || _typeof(value) !== 'object') return false;
|
|
57
|
+
return 'type' in value || 'message' in value || 'ref' in value;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Walks a nested `FieldErrors` tree (depth-first) and returns the dot-path
|
|
61
|
+
* of the first error encountered.
|
|
62
|
+
*
|
|
63
|
+
* Handles plain objects, arrays (e.g. field arrays), and deeply nested structures.
|
|
64
|
+
*
|
|
65
|
+
* @param errors - The `FieldErrors` object from `react-hook-form`.
|
|
66
|
+
* @returns The dot-separated path (e.g. `"items.0.name"`) or `null` if no error is found.
|
|
67
|
+
*/
|
|
68
|
+
var _getFirstErrorPath = function getFirstErrorPath(errors) {
|
|
69
|
+
for (var _i = 0, _Object$keys = Object.keys(errors); _i < _Object$keys.length; _i++) {
|
|
70
|
+
var key = _Object$keys[_i];
|
|
71
|
+
var value = errors[key];
|
|
72
|
+
if (!value) continue;
|
|
73
|
+
if (isFieldError(value)) return key;
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
for (var i = 0; i < value.length; i += 1) {
|
|
76
|
+
var item = value[i];
|
|
77
|
+
if (!item) continue;
|
|
78
|
+
if (isFieldError(item)) return "".concat(key, ".").concat(i);
|
|
79
|
+
if (item && _typeof(item) === 'object') {
|
|
80
|
+
var child = _getFirstErrorPath(item);
|
|
81
|
+
if (child) return "".concat(key, ".").concat(i, ".").concat(child);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
} else if (_typeof(value) === 'object') {
|
|
85
|
+
var _child = _getFirstErrorPath(value);
|
|
86
|
+
if (_child) return "".concat(key, ".").concat(_child);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Escapes a string for safe use inside a CSS attribute selector.
|
|
93
|
+
*
|
|
94
|
+
* Uses `CSS.escape` when available, with a regex fallback for SSR or
|
|
95
|
+
* environments without native support (e.g. nested field names like `"address.city"`).
|
|
96
|
+
*
|
|
97
|
+
* @param value - The raw attribute value to escape.
|
|
98
|
+
* @returns The escaped string safe for `querySelector`.
|
|
99
|
+
*/
|
|
100
|
+
export { _getFirstErrorPath as getFirstErrorPath };
|
|
101
|
+
export var escapeAttr = function escapeAttr(value) {
|
|
102
|
+
return typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(value) : value.replace(/([^\w-])/g, '\\$1');
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Scrolls the viewport to the first invalid field identified by `name`.
|
|
106
|
+
*
|
|
107
|
+
* Looks up the element using either the standard `name` attribute or the
|
|
108
|
+
* `data-form-item-name` data attribute. Supports custom scroll behavior
|
|
109
|
+
* via the `options` parameter.
|
|
110
|
+
*
|
|
111
|
+
* @param name - The field name (path) to scroll to.
|
|
112
|
+
* @param options - Scroll configuration from `FormProps['scrollToFirstError']`.
|
|
113
|
+
*/
|
|
114
|
+
export var scrollToField = function scrollToField(name, options) {
|
|
115
|
+
var _a, _b, _c;
|
|
116
|
+
if (typeof document === 'undefined') return;
|
|
117
|
+
var config = _typeof(options) === 'object' ? options : {};
|
|
118
|
+
var attrName = escapeAttr(name);
|
|
119
|
+
var selectorByName = "[".concat(SELECTOR_NAME_ATTR, "=\"").concat(attrName, "\"]");
|
|
120
|
+
var selectorByData = "[".concat(SELECTOR_DATA_FORM_ITEM_ATTR, "=\"").concat(attrName, "\"]");
|
|
121
|
+
var el = document.querySelector(selectorByName) || document.querySelector(selectorByData);
|
|
122
|
+
if (!el) return;
|
|
123
|
+
var behavior = (_a = config.behavior) !== null && _a !== void 0 ? _a : DEFAULT_SCROLL_BEHAVIOR;
|
|
124
|
+
if (typeof config.offset === 'number') {
|
|
125
|
+
var rect = el.getBoundingClientRect();
|
|
126
|
+
window.scrollTo({
|
|
127
|
+
top: rect.top + window.scrollY - config.offset,
|
|
128
|
+
behavior: behavior
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
el.scrollIntoView({
|
|
133
|
+
behavior: behavior,
|
|
134
|
+
block: (_b = config.block) !== null && _b !== void 0 ? _b : DEFAULT_SCROLL_BLOCK,
|
|
135
|
+
inline: (_c = config.inline) !== null && _c !== void 0 ? _c : DEFAULT_SCROLL_INLINE
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Resolves the effective validation status for a form field.
|
|
140
|
+
*
|
|
141
|
+
* An explicit `validateStatus` prop takes priority. Otherwise the status is
|
|
142
|
+
* derived from the `fieldState` provided by `react-hook-form`'s Controller.
|
|
143
|
+
*
|
|
144
|
+
* @param explicit - An explicit status override from props.
|
|
145
|
+
* @param fieldState - The Controller field state containing `error` and `isValidating`.
|
|
146
|
+
* @returns The resolved `FormValidateStatus`, or `undefined` if no status applies.
|
|
147
|
+
*/
|
|
148
|
+
export var resolveStatus = function resolveStatus(explicit, fieldState) {
|
|
149
|
+
if (explicit) return explicit;
|
|
150
|
+
if (fieldState === null || fieldState === void 0 ? void 0 : fieldState.isValidating) return STATUS_VALIDATING;
|
|
151
|
+
if (fieldState === null || fieldState === void 0 ? void 0 : fieldState.error) return STATUS_ERROR;
|
|
152
|
+
return undefined;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Normalizes a `validateTrigger` prop into a consistent array form.
|
|
156
|
+
*
|
|
157
|
+
* @param value - A single trigger string, an array, or `undefined`.
|
|
158
|
+
* @returns An array of trigger modes (e.g. `['onChange', 'onBlur']`), or an empty array.
|
|
159
|
+
*/
|
|
160
|
+
export var normalizeValidateTrigger = function normalizeValidateTrigger(value) {
|
|
161
|
+
if (!value) return [];
|
|
162
|
+
return Array.isArray(value) ? value : [value];
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Maps a `FormValidateStatus` to boolean props suitable for Input-like components.
|
|
166
|
+
*
|
|
167
|
+
* @param status - The current validation status.
|
|
168
|
+
* @returns An object with `invalid: true`, `success: true`, or an empty object.
|
|
169
|
+
*/
|
|
170
|
+
export var getStatusProps = function getStatusProps(status) {
|
|
171
|
+
return status === STATUS_ERROR ? {
|
|
172
|
+
invalid: true
|
|
173
|
+
} : status === STATUS_SUCCESS ? {
|
|
174
|
+
success: true
|
|
175
|
+
} : {};
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Performs a shallow comparison of two arrays using `Object.is` for each element.
|
|
179
|
+
*
|
|
180
|
+
* @param a - First array.
|
|
181
|
+
* @param b - Second array.
|
|
182
|
+
* @returns `true` if both arrays have the same length and identical elements by reference.
|
|
183
|
+
*/
|
|
184
|
+
export var shallowEqualArray = function shallowEqualArray(a, b) {
|
|
185
|
+
return a.length === b.length && a.every(function (v, i) {
|
|
186
|
+
return Object.is(v, b[i]);
|
|
187
|
+
});
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Normalizes a custom `ValidateResult` to be compatible with `react-hook-form`.
|
|
191
|
+
*
|
|
192
|
+
* RHF treats `null` as a truthy error value, so this converts `null` to `true` (valid).
|
|
193
|
+
*
|
|
194
|
+
* @param result - The raw validation result.
|
|
195
|
+
* @returns The normalized result (`true` for valid, or an error string/boolean).
|
|
196
|
+
*/
|
|
197
|
+
export var normalizeValidateResult = function normalizeValidateResult(result) {
|
|
198
|
+
return result === null ? true : result;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Wraps a multi-validator record to honor `validateFirst` sequencing.
|
|
202
|
+
*
|
|
203
|
+
* When `mode` is `true`, validators run **sequentially** and stop at the first error.
|
|
204
|
+
* When `mode` is `'parallel'`, all validators run concurrently and the first error found is returned.
|
|
205
|
+
* When `mode` is falsy or `validate` is a single function, the original value is returned unchanged.
|
|
206
|
+
*
|
|
207
|
+
* @template TValues - The shape of the form values.
|
|
208
|
+
* @template TName - The field path type.
|
|
209
|
+
* @param validate - The validator or record of validators from `RegisterOptions`.
|
|
210
|
+
* @param mode - The `validateFirst` mode.
|
|
211
|
+
* @returns A wrapped validator function, or the original value when no wrapping is needed.
|
|
212
|
+
*/
|
|
213
|
+
export var wrapValidate = function wrapValidate(validate, mode) {
|
|
214
|
+
if (!validate || !mode || typeof validate === 'function') return validate;
|
|
215
|
+
var validators = Object.values(validate);
|
|
216
|
+
return function (value, values) {
|
|
217
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
218
|
+
var results, hit, _i2, _validators, fn, result;
|
|
219
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
220
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
221
|
+
case 0:
|
|
222
|
+
if (!(mode === VALIDATE_PARALLEL)) {
|
|
223
|
+
_context2.next = 6;
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
_context2.next = 3;
|
|
227
|
+
return Promise.all(validators.map(function (fn) {
|
|
228
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
229
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
230
|
+
while (1) switch (_context.prev = _context.next) {
|
|
231
|
+
case 0:
|
|
232
|
+
_context.t0 = normalizeValidateResult;
|
|
233
|
+
_context.next = 3;
|
|
234
|
+
return Promise.resolve(fn(value, values));
|
|
235
|
+
case 3:
|
|
236
|
+
_context.t1 = _context.sent;
|
|
237
|
+
return _context.abrupt("return", (0, _context.t0)(_context.t1));
|
|
238
|
+
case 5:
|
|
239
|
+
case "end":
|
|
240
|
+
return _context.stop();
|
|
241
|
+
}
|
|
242
|
+
}, _callee);
|
|
243
|
+
}));
|
|
244
|
+
}));
|
|
245
|
+
case 3:
|
|
246
|
+
results = _context2.sent;
|
|
247
|
+
hit = results.find(function (result) {
|
|
248
|
+
return result !== true && result !== undefined;
|
|
249
|
+
});
|
|
250
|
+
return _context2.abrupt("return", hit !== null && hit !== void 0 ? hit : true);
|
|
251
|
+
case 6:
|
|
252
|
+
_i2 = 0, _validators = validators;
|
|
253
|
+
case 7:
|
|
254
|
+
if (!(_i2 < _validators.length)) {
|
|
255
|
+
_context2.next = 19;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
fn = _validators[_i2];
|
|
259
|
+
_context2.t0 = normalizeValidateResult;
|
|
260
|
+
_context2.next = 12;
|
|
261
|
+
return fn(value, values);
|
|
262
|
+
case 12:
|
|
263
|
+
_context2.t1 = _context2.sent;
|
|
264
|
+
result = (0, _context2.t0)(_context2.t1);
|
|
265
|
+
if (!(result !== true && result !== undefined)) {
|
|
266
|
+
_context2.next = 16;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
return _context2.abrupt("return", result);
|
|
270
|
+
case 16:
|
|
271
|
+
_i2++;
|
|
272
|
+
_context2.next = 7;
|
|
273
|
+
break;
|
|
274
|
+
case 19:
|
|
275
|
+
return _context2.abrupt("return", true);
|
|
276
|
+
case 20:
|
|
277
|
+
case "end":
|
|
278
|
+
return _context2.stop();
|
|
279
|
+
}
|
|
280
|
+
}, _callee2);
|
|
281
|
+
}));
|
|
282
|
+
};
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9oZWxwZXIuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0Zvcm0vaGVscGVyLnRzIl0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIkRFRkFVTFRfU0NST0xMX0JFSEFWSU9SIiwiREVGQVVMVF9TQ1JPTExfQkxPQ0siLCJERUZBVUxUX1NDUk9MTF9JTkxJTkUiLCJHUklEX0NPTFVNTlMiLCJHUklEX01JTiIsIlBFUkNFTlQiLCJTRUxFQ1RPUl9EQVRBX0ZPUk1fSVRFTV9BVFRSIiwiU0VMRUNUT1JfTkFNRV9BVFRSIiwiU1RBVFVTX0VSUk9SIiwiU1RBVFVTX1NVQ0NFU1MiLCJTVEFUVVNfVkFMSURBVElORyIsIlZBTElEQVRFX1BBUkFMTEVMIiwidG9QZXJjZW50IiwiY29sIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiTWF0aCIsIm1heCIsIm1pbiIsImlzRmllbGRFcnJvciIsIl90eXBlb2YiLCJnZXRGaXJzdEVycm9yUGF0aCIsImVycm9ycyIsIl9pIiwiX09iamVjdCRrZXlzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImtleSIsIkFycmF5IiwiaXNBcnJheSIsImkiLCJpdGVtIiwiY2hpbGQiLCJfZ2V0Rmlyc3RFcnJvclBhdGgiLCJlc2NhcGVBdHRyIiwiQ1NTIiwiZXNjYXBlIiwicmVwbGFjZSIsInNjcm9sbFRvRmllbGQiLCJuYW1lIiwib3B0aW9ucyIsIl9hIiwiX2IiLCJfYyIsImRvY3VtZW50IiwiY29uZmlnIiwiYXR0ck5hbWUiLCJzZWxlY3RvckJ5TmFtZSIsInNlbGVjdG9yQnlEYXRhIiwiZWwiLCJxdWVyeVNlbGVjdG9yIiwiYmVoYXZpb3IiLCJvZmZzZXQiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2luZG93Iiwic2Nyb2xsVG8iLCJ0b3AiLCJzY3JvbGxZIiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImlubGluZSIsInJlc29sdmVTdGF0dXMiLCJleHBsaWNpdCIsImZpZWxkU3RhdGUiLCJpc1ZhbGlkYXRpbmciLCJlcnJvciIsIm5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlciIsImdldFN0YXR1c1Byb3BzIiwic3RhdHVzIiwiaW52YWxpZCIsInN1Y2Nlc3MiLCJzaGFsbG93RXF1YWxBcnJheSIsImEiLCJiIiwiZXZlcnkiLCJ2IiwiaXMiLCJub3JtYWxpemVWYWxpZGF0ZVJlc3VsdCIsIndyYXBWYWxpZGF0ZSIsInZhbGlkYXRlIiwibW9kZSIsInZhbGlkYXRvcnMiLCJ2YWx1ZXMiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUyIiwicmVzdWx0cyIsImhpdCIsIl9pMiIsIl92YWxpZGF0b3JzIiwiZm4iLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicHJldiIsImFsbCIsIm1hcCIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwidDAiLCJ0MSIsInNlbnQiLCJhYnJ1cHQiLCJzdG9wIiwiZmluZCJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJQSxTQUFTLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7TUFBRUEsT0FBTyxDQUFDRCxLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtILENBQUMsS0FBS0EsQ0FBQyxHQUFHSyxPQUFP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QUEsQ0FBQVEsRUFBQTtZQUFBLE1BR1IzRyxNQUFNLEtBQUssSUFBSSxJQUFJQSxNQUFNLEtBQUtrQixTQUFTO2NBQUFpRixTQUFBLENBQUF0RyxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUFzRyxTQUFBLENBQUFVLE1BQUEsV0FBUzdHLE1BQU07VUFBQTtZQUFBOEYsR0FBQTtZQUFBSyxTQUFBLENBQUF0RyxJQUFBO1lBQUE7VUFBQTtZQUFBLE9BQUFzRyxTQUFBLENBQUFVLE1BQUEsV0FFckQsSUFBSTtVQUFBO1VBQUE7WUFBQSxPQUFBVixTQUFBLENBQUFXLElBQUE7UUFBQTtNQUFBLEdBQUFuQixRQUFBO0lBQUEsQ0FDWixFQUFBO0VBQUE7QUFDSCxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvRm9ybS9oZWxwZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IERFRkFVTFRfU0NST0xMX0JFSEFWSU9SLCBERUZBVUxUX1NDUk9MTF9CTE9DSywgREVGQVVMVF9TQ1JPTExfSU5MSU5FLCBHUklEX0NPTFVNTlMsIEdSSURfTUlOLCBQRVJDRU5ULCBTRUxFQ1RPUl9EQVRBX0ZPUk1fSVRFTV9BVFRSLCBTRUxFQ1RPUl9OQU1FX0FUVFIsIFNUQVRVU19FUlJPUiwgU1RBVFVTX1NVQ0NFU1MsIFNUQVRVU19WQUxJREFUSU5HLCBWQUxJREFURV9QQVJBTExFTCB9IGZyb20gJy4vY29uc3RhbnRzJztcbi8qKlxuICogQ29udmVydHMgYSAxMi1jb2x1bW4gZ3JpZCBzcGFuIHRvIGEgQ1NTIHBlcmNlbnRhZ2Ugd2lkdGggc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBjb2wgLSBHcmlkIGNvbHVtbiBjb3VudCAoMOKAkzEyKS4gVmFsdWVzIGFyZSBjbGFtcGVkIHRvIHRoZSB2YWxpZCByYW5nZS5cbiAqIEByZXR1cm5zIEEgQ1NTIHBlcmNlbnRhZ2Ugc3RyaW5nIChlLmcuIGBcIjI1JVwiYCksIG9yIGB1bmRlZmluZWRgIHdoZW4gYGNvbGAgaXMgYG51bGxgL2B1bmRlZmluZWRgLlxuICovXG5leHBvcnQgY29uc3QgdG9QZXJjZW50ID0gKGNvbCkgPT4ge1xuICAgIGlmIChjb2wgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYCR7KE1hdGgubWF4KEdSSURfTUlOLCBNYXRoLm1pbihHUklEX0NPTFVNTlMsIGNvbCkpIC8gR1JJRF9DT0xVTU5TKSAqIFBFUkNFTlR9JWA7XG59O1xuLyoqXG4gKiBUeXBlIGd1YXJkIHRoYXQgbmFycm93cyBhbiB1bmtub3duIHZhbHVlIHRvIGEgYEZpZWxkRXJyb3JgLWxpa2Ugb2JqZWN0LlxuICpcbiAqIGBpc0ZpZWxkRXJyb3JgIGFzc3VtZXMgYHJlYWN0LWhvb2stZm9ybWAgcGxhY2VzIGB0eXBlYCBvbiBsZWFmIGVycm9ycyxcbiAqIGFuZCBgZ2V0Rmlyc3RFcnJvclBhdGhgIHJlbGllcyBvbiB0aGF0IHRvIHN0b3AgZGVzY2VuZGluZyBvbmNlIGEgbGVhZiBpcyBmb3VuZC5cbiAqIElmIFJIRiBjaGFuZ2VzIHRoaXMgY29udHJhY3QsIHRpZ2h0ZW4gdGhpcyBwcmVkaWNhdGUgKGUuZy4gcmVxdWlyZSBgbWVzc2FnZWAvYHJlZmBcbiAqIG9yIGFub3RoZXIgc3RyaWN0ZXIgbGVhZi1zaGFwZSBjaGVjaykgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIG9uIG5lc3RlZCBjb250YWluZXJzLlxuICpcbiAqIENoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGB0eXBlYCwgYG1lc3NhZ2VgLCBvciBgcmVmYCBwcm9wZXJ0aWVzIHdoaWNoXG4gKiBhcmUgY2hhcmFjdGVyaXN0aWMgb2YgYHJlYWN0LWhvb2stZm9ybWAgZmllbGQgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBgRmllbGRFcnJvcmAtbGlrZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpZWxkRXJyb3IgPSAodmFsdWUpID0+IHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gJ3R5cGUnIGluIHZhbHVlIHx8ICdtZXNzYWdlJyBpbiB2YWx1ZSB8fCAncmVmJyBpbiB2YWx1ZTtcbn07XG4vKipcbiAqIFdhbGtzIGEgbmVzdGVkIGBGaWVsZEVycm9yc2AgdHJlZSAoZGVwdGgtZmlyc3QpIGFuZCByZXR1cm5zIHRoZSBkb3QtcGF0aFxuICogb2YgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkLlxuICpcbiAqIEhhbmRsZXMgcGxhaW4gb2JqZWN0cywgYXJyYXlzIChlLmcuIGZpZWxkIGFycmF5cyksIGFuZCBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZXMuXG4gKlxuICogQHBhcmFtIGVycm9ycyAtIFRoZSBgRmllbGRFcnJvcnNgIG9iamVjdCBmcm9tIGByZWFjdC1ob29rLWZvcm1gLlxuICogQHJldHVybnMgVGhlIGRvdC1zZXBhcmF0ZWQgcGF0aCAoZS5nLiBgXCJpdGVtcy4wLm5hbWVcImApIG9yIGBudWxsYCBpZiBubyBlcnJvciBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpcnN0RXJyb3JQYXRoID0gKGVycm9ycykgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVycm9ycykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlcnJvcnNba2V5XTtcbiAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNGaWVsZEVycm9yKHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChpc0ZpZWxkRXJyb3IoaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9LiR7aX1gO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGdldEZpcnN0RXJyb3JQYXRoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fS4ke2l9LiR7Y2hpbGR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBnZXRGaXJzdEVycm9yUGF0aCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2hpbGQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX0uJHtjaGlsZH1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogRXNjYXBlcyBhIHN0cmluZyBmb3Igc2FmZSB1c2UgaW5zaWRlIGEgQ1NTIGF0dHJpYnV0ZSBzZWxlY3Rvci5cbiAqXG4gKiBVc2VzIGBDU1MuZXNjYXBlYCB3aGVuIGF2YWlsYWJsZSwgd2l0aCBhIHJlZ2V4IGZhbGxiYWNrIGZvciBTU1Igb3JcbiAqIGVudmlyb25tZW50cyB3aXRob3V0IG5hdGl2ZSBzdXBwb3J0IChlLmcuIG5lc3RlZCBmaWVsZCBuYW1lcyBsaWtlIGBcImFkZHJlc3MuY2l0eVwiYCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHJhdyBhdHRyaWJ1dGUgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nIHNhZmUgZm9yIGBxdWVyeVNlbGVjdG9yYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGVzY2FwZUF0dHIgPSAodmFsdWUpID0+IHR5cGVvZiBDU1MgIT09ICd1bmRlZmluZWQnICYmIENTUy5lc2NhcGVcbiAgICA/IENTUy5lc2NhcGUodmFsdWUpXG4gICAgOiB2YWx1ZS5yZXBsYWNlKC8oW15cXHctXSkvZywgJ1xcXFwkMScpO1xuLyoqXG4gKiBTY3JvbGxzIHRoZSB2aWV3cG9ydCB0byB0aGUgZmlyc3QgaW52YWxpZCBmaWVsZCBpZGVudGlmaWVkIGJ5IGBuYW1lYC5cbiAqXG4gKiBMb29rcyB1cCB0aGUgZWxlbWVudCB1c2luZyBlaXRoZXIgdGhlIHN0YW5kYXJkIGBuYW1lYCBhdHRyaWJ1dGUgb3IgdGhlXG4gKiBgZGF0YS1mb3JtLWl0ZW0tbmFtZWAgZGF0YSBhdHRyaWJ1dGUuIFN1cHBvcnRzIGN1c3RvbSBzY3JvbGwgYmVoYXZpb3JcbiAqIHZpYSB0aGUgYG9wdGlvbnNgIHBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBmaWVsZCBuYW1lIChwYXRoKSB0byBzY3JvbGwgdG8uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNjcm9sbCBjb25maWd1cmF0aW9uIGZyb20gYEZvcm1Qcm9wc1snc2Nyb2xsVG9GaXJzdEVycm9yJ11gLlxuICovXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9GaWVsZCA9IChuYW1lLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBjb25maWcgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgPyBvcHRpb25zIDoge307XG4gICAgY29uc3QgYXR0ck5hbWUgPSBlc2NhcGVBdHRyKG5hbWUpO1xuICAgIGNvbnN0IHNlbGVjdG9yQnlOYW1lID0gYFske1NFTEVDVE9SX05BTUVfQVRUUn09XCIke2F0dHJOYW1lfVwiXWA7XG4gICAgY29uc3Qgc2VsZWN0b3JCeURhdGEgPSBgWyR7U0VMRUNUT1JfREFUQV9GT1JNX0lURU1fQVRUUn09XCIke2F0dHJOYW1lfVwiXWA7XG4gICAgY29uc3QgZWwgPSAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvckJ5TmFtZSkgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvckJ5RGF0YSkpO1xuICAgIGlmICghZWwpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBiZWhhdmlvciA9IChfYSA9IGNvbmZpZy5iZWhhdmlvcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9TQ1JPTExfQkVIQVZJT1I7XG4gICAgaWYgKHR5cGVvZiBjb25maWcub2Zmc2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3A6IHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSBjb25maWcub2Zmc2V0LFxuICAgICAgICAgICAgYmVoYXZpb3IsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmVoYXZpb3IsXG4gICAgICAgIGJsb2NrOiAoX2IgPSBjb25maWcuYmxvY2spICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfU0NST0xMX0JMT0NLLFxuICAgICAgICBpbmxpbmU6IChfYyA9IGNvbmZpZy5pbmxpbmUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IERFRkFVTFRfU0NST0xMX0lOTElORSxcbiAgICB9KTtcbn07XG4vKipcbiAqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIGEgZm9ybSBmaWVsZC5cbiAqXG4gKiBBbiBleHBsaWNpdCBgdmFsaWRhdGVTdGF0dXNgIHByb3AgdGFrZXMgcHJpb3JpdHkuIE90aGVyd2lzZSB0aGUgc3RhdHVzIGlzXG4gKiBkZXJpdmVkIGZyb20gdGhlIGBmaWVsZFN0YXRlYCBwcm92aWRlZCBieSBgcmVhY3QtaG9vay1mb3JtYCdzIENvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIGV4cGxpY2l0IC0gQW4gZXhwbGljaXQgc3RhdHVzIG92ZXJyaWRlIGZyb20gcHJvcHMuXG4gKiBAcGFyYW0gZmllbGRTdGF0ZSAtIFRoZSBDb250cm9sbGVyIGZpZWxkIHN0YXRlIGNvbnRhaW5pbmcgYGVycm9yYCBhbmQgYGlzVmFsaWRhdGluZ2AuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgYEZvcm1WYWxpZGF0ZVN0YXR1c2AsIG9yIGB1bmRlZmluZWRgIGlmIG5vIHN0YXR1cyBhcHBsaWVzLlxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVN0YXR1cyA9IChleHBsaWNpdCwgZmllbGRTdGF0ZSkgPT4ge1xuICAgIGlmIChleHBsaWNpdClcbiAgICAgICAgcmV0dXJuIGV4cGxpY2l0O1xuICAgIGlmIChmaWVsZFN0YXRlID09PSBudWxsIHx8IGZpZWxkU3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpZWxkU3RhdGUuaXNWYWxpZGF0aW5nKVxuICAgICAgICByZXR1cm4gU1RBVFVTX1ZBTElEQVRJTkc7XG4gICAgaWYgKGZpZWxkU3RhdGUgPT09IG51bGwgfHwgZmllbGRTdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmllbGRTdGF0ZS5lcnJvcilcbiAgICAgICAgcmV0dXJuIFNUQVRVU19FUlJPUjtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbi8qKlxuICogTm9ybWFsaXplcyBhIGB2YWxpZGF0ZVRyaWdnZXJgIHByb3AgaW50byBhIGNvbnNpc3RlbnQgYXJyYXkgZm9ybS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHNpbmdsZSB0cmlnZ2VyIHN0cmluZywgYW4gYXJyYXksIG9yIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdHJpZ2dlciBtb2RlcyAoZS5nLiBgWydvbkNoYW5nZScsICdvbkJsdXInXWApLCBvciBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlciA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59O1xuLyoqXG4gKiBNYXBzIGEgYEZvcm1WYWxpZGF0ZVN0YXR1c2AgdG8gYm9vbGVhbiBwcm9wcyBzdWl0YWJsZSBmb3IgSW5wdXQtbGlrZSBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgY3VycmVudCB2YWxpZGF0aW9uIHN0YXR1cy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBpbnZhbGlkOiB0cnVlYCwgYHN1Y2Nlc3M6IHRydWVgLCBvciBhbiBlbXB0eSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdGF0dXNQcm9wcyA9IChzdGF0dXMpID0+IChzdGF0dXMgPT09IFNUQVRVU19FUlJPUlxuICAgID8geyBpbnZhbGlkOiB0cnVlIH1cbiAgICA6IHN0YXR1cyA9PT0gU1RBVFVTX1NVQ0NFU1NcbiAgICAgICAgPyB7IHN1Y2Nlc3M6IHRydWUgfVxuICAgICAgICA6IHt9KTtcbi8qKlxuICogUGVyZm9ybXMgYSBzaGFsbG93IGNvbXBhcmlzb24gb2YgdHdvIGFycmF5cyB1c2luZyBgT2JqZWN0LmlzYCBmb3IgZWFjaCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBhIC0gRmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgaWRlbnRpY2FsIGVsZW1lbnRzIGJ5IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNoYWxsb3dFcXVhbEFycmF5ID0gKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KCh2LCBpKSA9PiBPYmplY3QuaXModiwgYltpXSkpO1xuLyoqXG4gKiBOb3JtYWxpemVzIGEgY3VzdG9tIGBWYWxpZGF0ZVJlc3VsdGAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGByZWFjdC1ob29rLWZvcm1gLlxuICpcbiAqIFJIRiB0cmVhdHMgYG51bGxgIGFzIGEgdHJ1dGh5IGVycm9yIHZhbHVlLCBzbyB0aGlzIGNvbnZlcnRzIGBudWxsYCB0byBgdHJ1ZWAgKHZhbGlkKS5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHJhdyB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHJlc3VsdCAoYHRydWVgIGZvciB2YWxpZCwgb3IgYW4gZXJyb3Igc3RyaW5nL2Jvb2xlYW4pLlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplVmFsaWRhdGVSZXN1bHQgPSAocmVzdWx0KSA9PiAocmVzdWx0ID09PSBudWxsID8gdHJ1ZSA6IHJlc3VsdCk7XG4vKipcbiAqIFdyYXBzIGEgbXVsdGktdmFsaWRhdG9yIHJlY29yZCB0byBob25vciBgdmFsaWRhdGVGaXJzdGAgc2VxdWVuY2luZy5cbiAqXG4gKiBXaGVuIGBtb2RlYCBpcyBgdHJ1ZWAsIHZhbGlkYXRvcnMgcnVuICoqc2VxdWVudGlhbGx5KiogYW5kIHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yLlxuICogV2hlbiBgbW9kZWAgaXMgYCdwYXJhbGxlbCdgLCBhbGwgdmFsaWRhdG9ycyBydW4gY29uY3VycmVudGx5IGFuZCB0aGUgZmlyc3QgZXJyb3IgZm91bmQgaXMgcmV0dXJuZWQuXG4gKiBXaGVuIGBtb2RlYCBpcyBmYWxzeSBvciBgdmFsaWRhdGVgIGlzIGEgc2luZ2xlIGZ1bmN0aW9uLCB0aGUgb3JpZ2luYWwgdmFsdWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEB0ZW1wbGF0ZSBUVmFsdWVzIC0gVGhlIHNoYXBlIG9mIHRoZSBmb3JtIHZhbHVlcy5cbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBwYXRoIHR5cGUuXG4gKiBAcGFyYW0gdmFsaWRhdGUgLSBUaGUgdmFsaWRhdG9yIG9yIHJlY29yZCBvZiB2YWxpZGF0b3JzIGZyb20gYFJlZ2lzdGVyT3B0aW9uc2AuXG4gKiBAcGFyYW0gbW9kZSAtIFRoZSBgdmFsaWRhdGVGaXJzdGAgbW9kZS5cbiAqIEByZXR1cm5zIEEgd3JhcHBlZCB2YWxpZGF0b3IgZnVuY3Rpb24sIG9yIHRoZSBvcmlnaW5hbCB2YWx1ZSB3aGVuIG5vIHdyYXBwaW5nIGlzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHdyYXBWYWxpZGF0ZSA9ICh2YWxpZGF0ZSwgbW9kZSkgPT4ge1xuICAgIGlmICghdmFsaWRhdGUgfHwgIW1vZGUgfHwgdHlwZW9mIHZhbGlkYXRlID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gdmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IE9iamVjdC52YWx1ZXModmFsaWRhdGUpO1xuICAgIHJldHVybiAodmFsdWUsIHZhbHVlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmIChtb2RlID09PSBWQUxJREFURV9QQVJBTExFTCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRvcnMubWFwKChmbikgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVZhbGlkYXRlUmVzdWx0KHlpZWxkIFByb21pc2UucmVzb2x2ZShmbih2YWx1ZSwgdmFsdWVzKSkpO1xuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHJlc3VsdHMuZmluZChyZXN1bHQgPT4gcmVzdWx0ICE9PSB0cnVlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybiBoaXQgIT09IG51bGwgJiYgaGl0ICE9PSB2b2lkIDAgPyBoaXQgOiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZm4gb2YgdmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbm9ybWFsaXplVmFsaWRhdGVSZXN1bHQoeWllbGQgZm4odmFsdWUsIHZhbHVlcykpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xufTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module Form
|
|
3
|
+
*
|
|
4
|
+
* Form components built on top of `react-hook-form` with layout management,
|
|
5
|
+
* validation triggers, scroll-to-error, and value-change subscriptions.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { Form, FormItem } from '@1money/react-ui';
|
|
10
|
+
*
|
|
11
|
+
* <Form defaultValues={{ name: '' }} onFinish={handleSubmit}>
|
|
12
|
+
* <FormItem name="name" label="Name" rules={{ required: true }}>
|
|
13
|
+
* <Input />
|
|
14
|
+
* </FormItem>
|
|
15
|
+
* </Form>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { Form, default } from './Form';
|
|
19
|
+
export { FormItem } from './FormItem';
|
|
20
|
+
export * from './interface';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module Form
|
|
3
|
+
*
|
|
4
|
+
* Form components built on top of `react-hook-form` with layout management,
|
|
5
|
+
* validation triggers, scroll-to-error, and value-change subscriptions.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { Form, FormItem } from '@1money/react-ui';
|
|
10
|
+
*
|
|
11
|
+
* <Form defaultValues={{ name: '' }} onFinish={handleSubmit}>
|
|
12
|
+
* <FormItem name="name" label="Name" rules={{ required: true }}>
|
|
13
|
+
* <Input />
|
|
14
|
+
* </FormItem>
|
|
15
|
+
* </Form>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { Form, default } from './Form';
|
|
19
|
+
export { FormItem } from './FormItem';
|
|
20
|
+
export * from './interface';
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS9pbmRleC50cyIsImNvbXBvbmVudHMvRm9ybS9pbmRleC5qcyJdLCJuYW1lcyI6WyJGb3JtIiwiZGVmYXVsdCIsIkZvcm1JdGVtIl0sIm1hcHBpbmdzIjoiQUFBQTtBQ0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEQ0EsU0FBU0EsSUFBSSxFQUFFQyxPQUFPLFFBQVEsUUFBUTtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsWUFBWTtBQUVyQyxjQUFjLGFBQWEiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvKipcbiAqIEBtb2R1bGUgRm9ybVxuICpcbiAqIEZvcm0gY29tcG9uZW50cyBidWlsdCBvbiB0b3Agb2YgYHJlYWN0LWhvb2stZm9ybWAgd2l0aCBsYXlvdXQgbWFuYWdlbWVudCxcbiAqIHZhbGlkYXRpb24gdHJpZ2dlcnMsIHNjcm9sbC10by1lcnJvciwgYW5kIHZhbHVlLWNoYW5nZSBzdWJzY3JpcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IEZvcm0sIEZvcm1JdGVtIH0gZnJvbSAnQDFtb25leS9yZWFjdC11aSc7XG4gKlxuICogPEZvcm0gZGVmYXVsdFZhbHVlcz17eyBuYW1lOiAnJyB9fSBvbkZpbmlzaD17aGFuZGxlU3VibWl0fT5cbiAqICAgPEZvcm1JdGVtIG5hbWU9XCJuYW1lXCIgbGFiZWw9XCJOYW1lXCIgcnVsZXM9e3sgcmVxdWlyZWQ6IHRydWUgfX0+XG4gKiAgICAgPElucHV0IC8+XG4gKiAgIDwvRm9ybUl0ZW0+XG4gKiA8L0Zvcm0+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHsgRm9ybSwgZGVmYXVsdCB9IGZyb20gJy4vRm9ybSc7XG5leHBvcnQgeyBGb3JtSXRlbSB9IGZyb20gJy4vRm9ybUl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2UnOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import type { Control, DefaultValues, FieldErrors, FieldPath, FieldPathValue, FieldValues, RegisterOptions, UseFormProps, UseFormReturn, ControllerRenderProps, ControllerFieldState } from 'react-hook-form';
|
|
3
|
+
import type { TRIGGER_BLUR, TRIGGER_CHANGE } from './constants';
|
|
4
|
+
/**
|
|
5
|
+
* Subset of `RegisterOptions` used by `FormItem` for declarative validation rules.
|
|
6
|
+
*
|
|
7
|
+
* @template TFieldValues - The shape of the form values.
|
|
8
|
+
*/
|
|
9
|
+
export type FormItemRules<TFieldValues extends FieldValues = FieldValues> = Pick<RegisterOptions<TFieldValues>, 'required' | 'min' | 'max' | 'minLength' | 'maxLength' | 'pattern' | 'validate' | 'deps'>;
|
|
10
|
+
/** Form layout direction. */
|
|
11
|
+
export type FormLayout = 'horizontal' | 'vertical' | 'inline';
|
|
12
|
+
/** Label text alignment within the label column. */
|
|
13
|
+
export type FormLabelAlign = 'left' | 'right';
|
|
14
|
+
/** Form size variant applied to all child items. */
|
|
15
|
+
export type FormSize = 'small' | 'middle' | 'large';
|
|
16
|
+
/** Validation status used for visual feedback on a form field. */
|
|
17
|
+
export type FormValidateStatus = 'success' | 'warning' | 'error' | 'validating';
|
|
18
|
+
/**
|
|
19
|
+
* Shared context value provided by `<Form>` to all descendant `<FormItem>` components.
|
|
20
|
+
*/
|
|
21
|
+
export interface FormContextValue {
|
|
22
|
+
/** Layout direction for the form. */
|
|
23
|
+
layout: FormLayout;
|
|
24
|
+
/** Alignment of labels within the label column. */
|
|
25
|
+
labelAlign: FormLabelAlign;
|
|
26
|
+
/** Label column span in a 12-column grid (0–12). */
|
|
27
|
+
labelCol: number;
|
|
28
|
+
/** Wrapper/control column span in a 12-column grid (0–12). */
|
|
29
|
+
wrapperCol: number;
|
|
30
|
+
/** Size variant applied to all form items. */
|
|
31
|
+
size: FormSize;
|
|
32
|
+
/** When `true`, all form fields are disabled. */
|
|
33
|
+
disabled?: boolean;
|
|
34
|
+
/** Whether to render a colon after each label. */
|
|
35
|
+
colon: boolean;
|
|
36
|
+
/** Whether to show the required asterisk mark on required fields. */
|
|
37
|
+
requiredMark: boolean;
|
|
38
|
+
/** The `react-hook-form` methods instance shared across the form. */
|
|
39
|
+
methods: UseFormReturn<FieldValues>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Props for the `<Form>` component.
|
|
43
|
+
*
|
|
44
|
+
* Extends `react-hook-form`'s `UseFormProps` (excluding `defaultValues`) with
|
|
45
|
+
* layout configuration, submit callbacks, value-change subscriptions, and
|
|
46
|
+
* scroll-to-error behavior.
|
|
47
|
+
*
|
|
48
|
+
* @template TFieldValues - The shape of the form values.
|
|
49
|
+
*/
|
|
50
|
+
export interface FormProps<TFieldValues extends FieldValues = FieldValues> extends Omit<UseFormProps<TFieldValues>, 'defaultValues'> {
|
|
51
|
+
/** Initial values for the form fields. */
|
|
52
|
+
defaultValues?: DefaultValues<TFieldValues>;
|
|
53
|
+
/** An external `useForm()` return value to make the form fully controlled. */
|
|
54
|
+
form?: UseFormReturn<TFieldValues>;
|
|
55
|
+
/** Callback invoked with valid form values on successful submission. */
|
|
56
|
+
onFinish?: (values: TFieldValues) => void | Promise<void>;
|
|
57
|
+
/** Callback invoked with validation errors on failed submission. */
|
|
58
|
+
onFinishFailed?: (errors: FieldErrors<TFieldValues>) => void;
|
|
59
|
+
/** Callback fired when any watched field value changes. */
|
|
60
|
+
onValuesChange?: (values: TFieldValues, info: {
|
|
61
|
+
name?: FieldPath<TFieldValues>;
|
|
62
|
+
type?: string;
|
|
63
|
+
}) => void;
|
|
64
|
+
/** Field paths to subscribe to for `onValuesChange`. If omitted, all fields are watched. */
|
|
65
|
+
watchNames?: Array<FieldPath<TFieldValues>>;
|
|
66
|
+
/**
|
|
67
|
+
* Whether to scroll to the first invalid field on submit failure.
|
|
68
|
+
* Pass `true` for default scroll behavior, or an object to customize scroll options.
|
|
69
|
+
*/
|
|
70
|
+
scrollToFirstError?: boolean | {
|
|
71
|
+
behavior?: ScrollBehavior;
|
|
72
|
+
block?: ScrollLogicalPosition;
|
|
73
|
+
inline?: ScrollLogicalPosition;
|
|
74
|
+
/** Pixel offset from the top when scrolling. */
|
|
75
|
+
offset?: number;
|
|
76
|
+
};
|
|
77
|
+
/** Layout direction. @defaultValue `'horizontal'` */
|
|
78
|
+
layout?: FormLayout;
|
|
79
|
+
/** Label text alignment. @defaultValue `'right'` */
|
|
80
|
+
labelAlign?: FormLabelAlign;
|
|
81
|
+
/** Label column span in a 12-column grid (0–12). @defaultValue `3` */
|
|
82
|
+
labelCol?: number;
|
|
83
|
+
/** Wrapper/control column span in a 12-column grid (0–12). @defaultValue `9` */
|
|
84
|
+
wrapperCol?: number;
|
|
85
|
+
/** Size variant. @defaultValue `'middle'` */
|
|
86
|
+
size?: FormSize;
|
|
87
|
+
/** When `true`, disables all form fields. */
|
|
88
|
+
disabled?: boolean;
|
|
89
|
+
/** Whether to show a colon after each label. @defaultValue `true` */
|
|
90
|
+
colon?: boolean;
|
|
91
|
+
/** Whether to show the required asterisk mark. @defaultValue `true` */
|
|
92
|
+
requiredMark?: boolean;
|
|
93
|
+
/** Additional CSS class name for the `<form>` element. */
|
|
94
|
+
className?: string;
|
|
95
|
+
/** Inline styles for the `<form>` element. */
|
|
96
|
+
style?: CSSProperties;
|
|
97
|
+
/** Form content (typically `<FormItem>` components). */
|
|
98
|
+
children?: ReactNode;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Props passed to a `FormItem` render-prop child function.
|
|
102
|
+
*
|
|
103
|
+
* @template TFieldValues - The shape of the form values.
|
|
104
|
+
*/
|
|
105
|
+
export interface FormItemRenderProps<TFieldValues extends FieldValues = FieldValues> {
|
|
106
|
+
/** Controller field bindings with additional status flags. Only present when `name` is set. */
|
|
107
|
+
field?: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>> & {
|
|
108
|
+
/** `true` when the field has a validation error. */
|
|
109
|
+
invalid?: boolean;
|
|
110
|
+
/** `true` when the field has been successfully validated. */
|
|
111
|
+
success?: boolean;
|
|
112
|
+
};
|
|
113
|
+
/** Controller field state (error, dirty, touched, etc.). Only present when `name` is set. */
|
|
114
|
+
fieldState?: ControllerFieldState;
|
|
115
|
+
/** The `react-hook-form` methods instance for imperative access. */
|
|
116
|
+
form: UseFormReturn<TFieldValues>;
|
|
117
|
+
/** Current snapshot of all form values. */
|
|
118
|
+
values: TFieldValues;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Extended `CSSProperties` including custom CSS variables for label/wrapper widths.
|
|
122
|
+
*/
|
|
123
|
+
export type FormItemStyle = CSSProperties & {
|
|
124
|
+
['--om-form-label-width']?: string;
|
|
125
|
+
['--om-form-wrapper-width']?: string;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Render-prop function signature used by `FormItem` children.
|
|
129
|
+
*
|
|
130
|
+
* @template TFieldValues - The shape of the form values.
|
|
131
|
+
*/
|
|
132
|
+
export type FormItemRenderFn<TFieldValues extends FieldValues> = (props: FormItemRenderProps<TFieldValues>) => ReactNode;
|
|
133
|
+
/**
|
|
134
|
+
* Props for the `<FormItem>` component.
|
|
135
|
+
*
|
|
136
|
+
* Bridges `react-hook-form`'s `Controller` with layout, validation status,
|
|
137
|
+
* and trigger behavior.
|
|
138
|
+
*
|
|
139
|
+
* @template TFieldValues - The shape of the form values.
|
|
140
|
+
*/
|
|
141
|
+
export interface FormItemProps<TFieldValues extends FieldValues = FieldValues> {
|
|
142
|
+
/** Field path within the form values. When omitted, the item renders as a free (uncontrolled) wrapper. */
|
|
143
|
+
name?: FieldPath<TFieldValues>;
|
|
144
|
+
/** Label content rendered beside the field. */
|
|
145
|
+
label?: ReactNode;
|
|
146
|
+
/** Marks the field as required. When `rules.required` is set, this is inferred automatically. */
|
|
147
|
+
required?: boolean;
|
|
148
|
+
/** Declarative validation rules forwarded to `react-hook-form`'s `Controller`. */
|
|
149
|
+
rules?: FormItemRules<TFieldValues>;
|
|
150
|
+
/** Default value for the field. */
|
|
151
|
+
defaultValue?: FieldPathValue<TFieldValues, FieldPath<TFieldValues>>;
|
|
152
|
+
/** Custom help text displayed below the field. Overrides error messages when set. */
|
|
153
|
+
help?: ReactNode;
|
|
154
|
+
/** Extra content rendered below the help text. */
|
|
155
|
+
extra?: ReactNode;
|
|
156
|
+
/** Explicit validation status override. When set, bypasses automatic status derived from `fieldState`. */
|
|
157
|
+
validateStatus?: FormValidateStatus;
|
|
158
|
+
/** Field paths that trigger re-validation of this field when they change. */
|
|
159
|
+
dependencies?: Array<FieldPath<TFieldValues>>;
|
|
160
|
+
/** Additional field paths to watch, causing re-render when their values change. */
|
|
161
|
+
watchNames?: Array<FieldPath<TFieldValues>>;
|
|
162
|
+
/**
|
|
163
|
+
* Controls re-rendering behavior.
|
|
164
|
+
* - `true`: re-renders on every form value change.
|
|
165
|
+
* - A comparator function: re-renders when it returns `true`.
|
|
166
|
+
*/
|
|
167
|
+
shouldUpdate?: boolean | ((prev: TFieldValues, next: TFieldValues) => boolean);
|
|
168
|
+
/** Event(s) that trigger validation. @defaultValue `[]` (validation on submit only) */
|
|
169
|
+
validateTrigger?: 'onChange' | 'onBlur' | Array<'onChange' | 'onBlur'>;
|
|
170
|
+
/**
|
|
171
|
+
* Controls multi-validator execution order.
|
|
172
|
+
* - `true`: runs validators sequentially, stops at first error.
|
|
173
|
+
* - `'parallel'`: runs all validators concurrently, returns first error found.
|
|
174
|
+
*/
|
|
175
|
+
validateFirst?: boolean | 'parallel';
|
|
176
|
+
/** Debounce delay in milliseconds for triggered validation. */
|
|
177
|
+
validateDebounce?: number;
|
|
178
|
+
/** When `true`, renders only the field content without label/wrapper markup. */
|
|
179
|
+
noStyle?: boolean;
|
|
180
|
+
/** The prop name used to bind the controlled value to the child. @defaultValue `'value'` */
|
|
181
|
+
valuePropName?: string;
|
|
182
|
+
/** Additional CSS class name for the form item wrapper. */
|
|
183
|
+
className?: string;
|
|
184
|
+
/** Label column span override (0–12 grid). */
|
|
185
|
+
labelCol?: number;
|
|
186
|
+
/** Wrapper column span override (0–12 grid). */
|
|
187
|
+
wrapperCol?: number;
|
|
188
|
+
/** Field content — either a React node (auto-bound via `cloneElement`) or a render-prop function. */
|
|
189
|
+
children?: ReactNode | ((props: FormItemRenderProps<TFieldValues>) => ReactNode);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Internal props for the `<FormItemContent>` component.
|
|
193
|
+
*
|
|
194
|
+
* This is not part of the public API; it carries resolved context and
|
|
195
|
+
* validation state from `FormItem` down to the render layer.
|
|
196
|
+
*
|
|
197
|
+
* @template TFieldValues - The shape of the form values.
|
|
198
|
+
*/
|
|
199
|
+
export interface FormItemContentProps<TFieldValues extends FieldValues = FieldValues> {
|
|
200
|
+
/** Field path (determines controlled vs free branch). */
|
|
201
|
+
name?: FieldPath<TFieldValues>;
|
|
202
|
+
/** The `react-hook-form` `Control` instance. */
|
|
203
|
+
control: Control<TFieldValues>;
|
|
204
|
+
/** The `react-hook-form` methods instance. */
|
|
205
|
+
methods: UseFormReturn<TFieldValues>;
|
|
206
|
+
/** Merged validation rules. */
|
|
207
|
+
rules?: FormItemRules<TFieldValues>;
|
|
208
|
+
/** Default value for the Controller. */
|
|
209
|
+
defaultValue?: FormItemProps<TFieldValues>['defaultValue'];
|
|
210
|
+
/** Explicit validation status override. */
|
|
211
|
+
validateStatus?: FormValidateStatus;
|
|
212
|
+
/** Prop name used to bind the controlled value. */
|
|
213
|
+
valuePropName: string;
|
|
214
|
+
/** Help text displayed below the field. */
|
|
215
|
+
help?: ReactNode;
|
|
216
|
+
/** Extra content rendered below help text. */
|
|
217
|
+
extra?: ReactNode;
|
|
218
|
+
/** Form context value from the parent `<Form>`. */
|
|
219
|
+
ctx: FormContextValue | null;
|
|
220
|
+
/** Raw children from `FormItem`. */
|
|
221
|
+
children: FormItemProps<TFieldValues>['children'];
|
|
222
|
+
/** Resolved render-prop function, or `null` if children is a React node. */
|
|
223
|
+
renderFn: FormItemRenderFn<TFieldValues> | null;
|
|
224
|
+
/** Current snapshot of all form values. */
|
|
225
|
+
allValues: TFieldValues;
|
|
226
|
+
/** The `shouldUpdate` prop from `FormItem`. */
|
|
227
|
+
shouldUpdate?: FormItemProps<TFieldValues>['shouldUpdate'];
|
|
228
|
+
/** Whether the item should render based on `shouldUpdate` evaluation. */
|
|
229
|
+
shouldRender: boolean;
|
|
230
|
+
/**
|
|
231
|
+
* Wraps an event handler to conditionally trigger validation based on trigger mode.
|
|
232
|
+
*
|
|
233
|
+
* @param mode - The trigger mode (`'onChange'` or `'onBlur'`).
|
|
234
|
+
* @param fn - The original event handler to compose with.
|
|
235
|
+
* @returns A composed handler that calls `fn` and optionally triggers validation.
|
|
236
|
+
*/
|
|
237
|
+
withTrigger: (mode: typeof TRIGGER_CHANGE | typeof TRIGGER_BLUR, fn?: (...args: unknown[]) => void) => (...args: unknown[]) => void;
|
|
238
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL2ludGVyZmFjZS5qcyIsIm5hbWVzIjpbXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9Gb3JtL2ludGVyZmFjZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge307Il0sIm1hcHBpbmdzIjoiQUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.om-react-ui-form,.om-react-ui-form-root{--om-form-spacing-xs:4px;--om-form-spacing-sm:8px;--om-form-spacing-md:12px;--om-form-spacing-lg:16px;--om-form-control-height:44px;--om-form-font-size-base:14px;--om-form-line-height-base:20px;--om-form-font-size-help:12px;--om-form-line-height-help:18px;--om-form-opacity-disabled:0.6}.om-react-ui-form-root{width:100%}.om-react-ui-form-layout-horizontal .om-react-ui-form-item-root{display:flex;align-items:flex-start}.om-react-ui-form-layout-vertical .om-react-ui-form-item-root{display:flex;flex-direction:column}.om-react-ui-form-layout-inline{display:flex;flex-wrap:wrap;gap:var(--om-form-spacing-lg)}.om-react-ui-form-label-left .om-react-ui-form-item-label{text-align:left}.om-react-ui-form-item,.om-react-ui-form-item-root{--om-form-spacing-xs:4px;--om-form-spacing-sm:8px;--om-form-spacing-md:12px;--om-form-spacing-lg:16px;--om-form-control-height:44px;--om-form-font-size-base:14px;--om-form-line-height-base:20px;--om-form-font-size-help:12px;--om-form-line-height-help:18px;--om-form-opacity-disabled:0.6}.om-react-ui-form-item-root{width:100%;margin-bottom:var(--om-form-spacing-lg)}.om-react-ui-form-item-label{display:flex;flex:0 0 var(--om-form-label-width,25%);align-items:center;justify-content:flex-end;min-width:-moz-fit-content;min-width:fit-content;min-height:var(--om-form-control-height);padding-right:var(--om-form-spacing-md);color:#131313;font-size:var(--om-form-font-size-base);line-height:var(--om-form-line-height-base);white-space:nowrap;text-align:right}.om-react-ui-form-item-label-required:before{margin-right:var(--om-form-spacing-xs);color:#ae0000;content:"*"}.om-react-ui-form-item-colon{margin-left:var(--om-form-spacing-xs)}.om-react-ui-form-item-control{flex:1 1 auto;max-width:var(--om-form-wrapper-width,75%)}.om-react-ui-form-item-content{display:flex;flex-direction:column;gap:var(--om-form-spacing-sm)}.om-react-ui-form-item-content-disabled{opacity:var(--om-form-opacity-disabled)}.om-react-ui-form-item-help{color:#646465;font-size:var(--om-form-font-size-help);line-height:var(--om-form-line-height-help)}.om-react-ui-form-item-help-error{color:#ae0000}.om-react-ui-form-item-help-warning{color:#db8600}.om-react-ui-form-item-help-success{color:#1f5800}.om-react-ui-form-item-content-error{--om-form-item-status-color:#ae0000}.om-react-ui-form-item-content-warning{--om-form-item-status-color:#db8600}.om-react-ui-form-item-content-success{--om-form-item-status-color:#1f5800}.om-react-ui-form-item-content-validating{--om-form-item-status-color:#3d7cf5}.om-react-ui-form-item-extra{color:#9fa3a3;font-size:var(--om-form-font-size-help);line-height:var(--om-form-line-height-help)}.om-react-ui-form-layout-vertical .om-react-ui-form-item-label{flex:0 0 auto;justify-content:flex-start;min-width:0;min-height:auto;margin-bottom:var(--om-form-spacing-sm);padding-right:0;white-space:normal;text-align:left}.om-react-ui-form-layout-vertical .om-react-ui-form-item-control{max-width:100%}.om-react-ui-form-layout-inline .om-react-ui-form-item-root{width:auto;margin-bottom:0}
|