@saas-ui/forms 2.0.5 → 2.1.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/CHANGELOG.md +11 -0
- package/dist/ajv/index.js +42 -14
- package/dist/ajv/index.js.map +1 -1
- package/dist/ajv/index.mjs +14 -6
- package/dist/ajv/index.mjs.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +539 -322
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +481 -165
- package/dist/index.mjs.map +1 -1
- package/dist/yup/index.d.ts +2 -2
- package/dist/yup/index.js +120 -82
- package/dist/yup/index.js.map +1 -1
- package/dist/yup/index.mjs +132 -38
- package/dist/yup/index.mjs.map +1 -1
- package/dist/zod/index.d.ts +2 -2
- package/dist/zod/index.js +116 -83
- package/dist/zod/index.js.map +1 -1
- package/dist/zod/index.mjs +124 -35
- package/dist/zod/index.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.mjs
CHANGED
@@ -1,19 +1,16 @@
|
|
1
|
-
|
2
|
-
import React11__default, { useState, useMemo } from 'react';
|
3
|
-
import { useFormContext as useFormContext$1, useForm, FormProvider as FormProvider$1, useFieldArray, useWatch, get, Controller } from 'react-hook-form';
|
4
|
-
export { Controller, appendErrors, useController, useFieldArray, useForm, useFormState, useWatch } from 'react-hook-form';
|
5
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
6
|
-
import { forwardRef, NumberInput as NumberInput$1, NumberInputField, NumberInputStepper, NumberIncrementStepper, NumberDecrementStepper, InputRightElement, Button, InputGroup, Input, RadioGroup, Stack, Radio, createStylesContext, useFormControlContext, useMenuButton, chakra, useMultiStyleConfig, omitThemingProps, Menu, MenuItemOption, Select as Select$1, Switch, Checkbox, HStack, PinInput, FormControl, FormLabel, Text, useControllableState, useFormControl, MenuList, MenuOptionGroup, Box, FormHelperText, FormErrorMessage, PinInputField, useTheme, SimpleGrid, useStyleConfig, useMergeRefs, Textarea } from '@chakra-ui/react';
|
7
|
-
import { ChevronUpIcon, ChevronDownIcon, useStepper, useStep, useStepperContext, StepsItem, Steps, StepperProvider } from '@saas-ui/core';
|
8
|
-
import { ViewIcon, ViewOffIcon, MinusIcon, PlusIcon } from '@saas-ui/core/icons';
|
9
|
-
import { dataAttr, cx, isFunction, runIfFn, callAllHandlers, get as get$1 } from '@chakra-ui/utils';
|
10
|
-
import { createContext } from '@chakra-ui/react-utils';
|
1
|
+
'use client'
|
11
2
|
|
12
3
|
// src/form-context.tsx
|
13
|
-
|
4
|
+
import * as React from "react";
|
5
|
+
import {
|
6
|
+
FormProvider as HookFormProvider,
|
7
|
+
useFormContext as useHookFormContext
|
8
|
+
} from "react-hook-form";
|
9
|
+
import { jsx } from "react/jsx-runtime";
|
10
|
+
var FormContext = React.createContext(null);
|
14
11
|
var useFormContext = () => {
|
15
|
-
const context =
|
16
|
-
const hookContext =
|
12
|
+
const context = React.useContext(FormContext);
|
13
|
+
const hookContext = useHookFormContext();
|
17
14
|
if (!context) {
|
18
15
|
throw new Error("FormProvider must be used within a Form component");
|
19
16
|
}
|
@@ -30,8 +27,16 @@ var useFieldProps = (name) => {
|
|
30
27
|
};
|
31
28
|
var FormProvider = (props) => {
|
32
29
|
const { children, fieldResolver, schema, fields, ...rest } = props;
|
33
|
-
return /* @__PURE__ */ jsx(
|
30
|
+
return /* @__PURE__ */ jsx(HookFormProvider, { ...rest, children: /* @__PURE__ */ jsx(FormContext.Provider, { value: { fieldResolver, schema, fields }, children }) });
|
34
31
|
};
|
32
|
+
|
33
|
+
// src/display-field.tsx
|
34
|
+
import {
|
35
|
+
Text,
|
36
|
+
FormControl,
|
37
|
+
FormLabel
|
38
|
+
} from "@chakra-ui/react";
|
39
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
35
40
|
var DisplayField = ({
|
36
41
|
name,
|
37
42
|
label,
|
@@ -39,8 +44,8 @@ var DisplayField = ({
|
|
39
44
|
...props
|
40
45
|
}) => {
|
41
46
|
return /* @__PURE__ */ jsxs(FormControl, { ...props, children: [
|
42
|
-
label ? /* @__PURE__ */
|
43
|
-
/* @__PURE__ */
|
47
|
+
label ? /* @__PURE__ */ jsx2(FormLabel, { htmlFor: name, children: label }) : null,
|
48
|
+
/* @__PURE__ */ jsx2(Text, { fontSize: "md", children: /* @__PURE__ */ jsx2(FormValue, { name }) })
|
44
49
|
] });
|
45
50
|
};
|
46
51
|
DisplayField.displayName = "DisplayField";
|
@@ -49,18 +54,49 @@ var FormValue = ({ name }) => {
|
|
49
54
|
return getValues(name) || null;
|
50
55
|
};
|
51
56
|
FormValue.displayName = "FormValue";
|
57
|
+
|
58
|
+
// src/field.tsx
|
59
|
+
import * as React6 from "react";
|
60
|
+
|
61
|
+
// src/fields-context.tsx
|
62
|
+
import React5 from "react";
|
63
|
+
|
64
|
+
// src/default-fields.tsx
|
65
|
+
import {
|
66
|
+
forwardRef as forwardRef8,
|
67
|
+
Input as Input2,
|
68
|
+
Textarea,
|
69
|
+
Checkbox,
|
70
|
+
Switch,
|
71
|
+
InputGroup as InputGroup2,
|
72
|
+
PinInputField,
|
73
|
+
HStack,
|
74
|
+
PinInput
|
75
|
+
} from "@chakra-ui/react";
|
76
|
+
|
77
|
+
// src/number-input/number-input.tsx
|
78
|
+
import {
|
79
|
+
forwardRef,
|
80
|
+
NumberInput as ChakraNumberInput,
|
81
|
+
NumberInputField,
|
82
|
+
NumberInputStepper,
|
83
|
+
NumberIncrementStepper,
|
84
|
+
NumberDecrementStepper
|
85
|
+
} from "@chakra-ui/react";
|
86
|
+
import { ChevronDownIcon, ChevronUpIcon } from "@saas-ui/core";
|
87
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
52
88
|
var NumberInput = forwardRef((props, ref) => {
|
53
89
|
const {
|
54
90
|
hideStepper,
|
55
|
-
incrementIcon = /* @__PURE__ */
|
56
|
-
decrementIcon = /* @__PURE__ */
|
91
|
+
incrementIcon = /* @__PURE__ */ jsx3(ChevronUpIcon, {}),
|
92
|
+
decrementIcon = /* @__PURE__ */ jsx3(ChevronDownIcon, {}),
|
57
93
|
...rest
|
58
94
|
} = props;
|
59
|
-
return /* @__PURE__ */
|
60
|
-
/* @__PURE__ */
|
61
|
-
!hideStepper && /* @__PURE__ */
|
62
|
-
/* @__PURE__ */
|
63
|
-
/* @__PURE__ */
|
95
|
+
return /* @__PURE__ */ jsxs2(ChakraNumberInput, { ...rest, ref, children: [
|
96
|
+
/* @__PURE__ */ jsx3(NumberInputField, {}),
|
97
|
+
!hideStepper && /* @__PURE__ */ jsxs2(NumberInputStepper, { children: [
|
98
|
+
/* @__PURE__ */ jsx3(NumberIncrementStepper, { children: incrementIcon }),
|
99
|
+
/* @__PURE__ */ jsx3(NumberDecrementStepper, { children: decrementIcon })
|
64
100
|
] })
|
65
101
|
] });
|
66
102
|
});
|
@@ -68,14 +104,30 @@ NumberInput.defaultProps = {
|
|
68
104
|
hideStepper: false
|
69
105
|
};
|
70
106
|
NumberInput.displayName = "NumberInput";
|
71
|
-
|
107
|
+
|
108
|
+
// src/password-input/password-input.tsx
|
109
|
+
import { useState } from "react";
|
110
|
+
import { forwardRef as forwardRef3, InputGroup, Input } from "@chakra-ui/react";
|
111
|
+
import { ViewIcon, ViewOffIcon } from "@saas-ui/core/icons";
|
112
|
+
|
113
|
+
// src/input-right-button/input-right-button.tsx
|
114
|
+
import {
|
115
|
+
Button,
|
116
|
+
forwardRef as forwardRef2,
|
117
|
+
InputRightElement
|
118
|
+
} from "@chakra-ui/react";
|
119
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
120
|
+
var InputRightButton = forwardRef2(
|
72
121
|
(props, ref) => {
|
73
|
-
return /* @__PURE__ */
|
122
|
+
return /* @__PURE__ */ jsx4(InputRightElement, { w: "auto", px: "1", py: "1", alignItems: "stretch", children: /* @__PURE__ */ jsx4(Button, { ref, height: "auto", ...props }) });
|
74
123
|
}
|
75
124
|
);
|
76
125
|
InputRightButton.id = "InputRightElement";
|
77
126
|
InputRightButton.displayName = "InputRightButton";
|
78
|
-
|
127
|
+
|
128
|
+
// src/password-input/password-input.tsx
|
129
|
+
import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
130
|
+
var PasswordInput = forwardRef3(
|
79
131
|
(props, ref) => {
|
80
132
|
const {
|
81
133
|
viewIcon,
|
@@ -93,18 +145,18 @@ var PasswordInput = forwardRef(
|
|
93
145
|
const label = show ? "Hide password" : "Show password";
|
94
146
|
let icon;
|
95
147
|
if (show) {
|
96
|
-
icon = viewIcon || /* @__PURE__ */
|
148
|
+
icon = viewIcon || /* @__PURE__ */ jsx5(ViewIcon, {});
|
97
149
|
} else {
|
98
|
-
icon = viewOffIcon || /* @__PURE__ */
|
150
|
+
icon = viewOffIcon || /* @__PURE__ */ jsx5(ViewOffIcon, {});
|
99
151
|
}
|
100
152
|
const groupProps = {
|
101
153
|
width: w || width,
|
102
154
|
size,
|
103
155
|
variant
|
104
156
|
};
|
105
|
-
return /* @__PURE__ */
|
157
|
+
return /* @__PURE__ */ jsxs3(InputGroup, { ...groupProps, children: [
|
106
158
|
leftAddon,
|
107
|
-
/* @__PURE__ */
|
159
|
+
/* @__PURE__ */ jsx5(
|
108
160
|
Input,
|
109
161
|
{
|
110
162
|
...inputProps,
|
@@ -113,7 +165,7 @@ var PasswordInput = forwardRef(
|
|
113
165
|
autoComplete: show ? "off" : autoComplete
|
114
166
|
}
|
115
167
|
),
|
116
|
-
/* @__PURE__ */
|
168
|
+
/* @__PURE__ */ jsx5(
|
117
169
|
InputRightButton,
|
118
170
|
{
|
119
171
|
onClick: handleClick,
|
@@ -126,16 +178,27 @@ var PasswordInput = forwardRef(
|
|
126
178
|
}
|
127
179
|
);
|
128
180
|
PasswordInput.displayName = "PasswordInput";
|
181
|
+
|
182
|
+
// src/radio/radio-input.tsx
|
183
|
+
import {
|
184
|
+
forwardRef as forwardRef4,
|
185
|
+
Stack,
|
186
|
+
RadioGroup,
|
187
|
+
Radio
|
188
|
+
} from "@chakra-ui/react";
|
189
|
+
|
190
|
+
// src/utils.ts
|
191
|
+
import * as React3 from "react";
|
129
192
|
var mapNestedFields = (name, children) => {
|
130
|
-
return
|
131
|
-
if (
|
193
|
+
return React3.Children.map(children, (child) => {
|
194
|
+
if (React3.isValidElement(child) && child.props.name) {
|
132
195
|
let childName = child.props.name;
|
133
196
|
if (childName.includes(".")) {
|
134
197
|
childName = childName.replace(/^.*\.(.*)/, "$1");
|
135
198
|
} else if (childName.includes(".$")) {
|
136
199
|
childName = childName.replace(/^.*\.\$(.*)/, "$1");
|
137
200
|
}
|
138
|
-
return
|
201
|
+
return React3.cloneElement(child, {
|
139
202
|
...child.props,
|
140
203
|
name: `${name}.${childName}`
|
141
204
|
});
|
@@ -154,12 +217,15 @@ var mapOptions = (options) => {
|
|
154
217
|
return option;
|
155
218
|
});
|
156
219
|
};
|
157
|
-
|
220
|
+
|
221
|
+
// src/radio/radio-input.tsx
|
222
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
223
|
+
var RadioInput = forwardRef4(
|
158
224
|
({ options: optionsProp, spacing, direction, ...props }, ref) => {
|
159
225
|
const { onBlur, onChange, ...groupProps } = props;
|
160
226
|
const options = mapOptions(optionsProp);
|
161
|
-
return /* @__PURE__ */
|
162
|
-
return /* @__PURE__ */
|
227
|
+
return /* @__PURE__ */ jsx6(RadioGroup, { onChange, ...groupProps, children: /* @__PURE__ */ jsx6(Stack, { spacing, direction, children: options.map(({ value, label, ...radioProps }, i) => {
|
228
|
+
return /* @__PURE__ */ jsx6(
|
163
229
|
Radio,
|
164
230
|
{
|
165
231
|
onBlur,
|
@@ -174,8 +240,34 @@ var RadioInput = forwardRef(
|
|
174
240
|
}
|
175
241
|
);
|
176
242
|
RadioInput.displayName = "RadioInput";
|
243
|
+
|
244
|
+
// src/select/select.tsx
|
245
|
+
import {
|
246
|
+
chakra,
|
247
|
+
forwardRef as forwardRef5,
|
248
|
+
Menu,
|
249
|
+
MenuList,
|
250
|
+
MenuItemOption,
|
251
|
+
MenuOptionGroup,
|
252
|
+
Button as Button2,
|
253
|
+
omitThemingProps,
|
254
|
+
useMultiStyleConfig,
|
255
|
+
useFormControlContext,
|
256
|
+
useMenuButton
|
257
|
+
} from "@chakra-ui/react";
|
258
|
+
import { cx, dataAttr } from "@chakra-ui/utils";
|
259
|
+
import { ChevronDownIcon as ChevronDownIcon2 } from "@saas-ui/core";
|
260
|
+
|
261
|
+
// src/select/select-context.tsx
|
262
|
+
import {
|
263
|
+
createStylesContext,
|
264
|
+
useControllableState,
|
265
|
+
useFormControl
|
266
|
+
} from "@chakra-ui/react";
|
267
|
+
import { createContext as createContext2 } from "@chakra-ui/react-utils";
|
268
|
+
import React4 from "react";
|
177
269
|
var [SelectStylesProvider, useSelectStyles] = createStylesContext("SuiSelect");
|
178
|
-
var [SelectProvider, useSelectContext] =
|
270
|
+
var [SelectProvider, useSelectContext] = createContext2({
|
179
271
|
strict: true
|
180
272
|
});
|
181
273
|
var useSelect = (props) => {
|
@@ -196,14 +288,14 @@ var useSelect = (props) => {
|
|
196
288
|
onChange
|
197
289
|
});
|
198
290
|
const controlProps = useFormControl({ name });
|
199
|
-
const options =
|
291
|
+
const options = React4.useMemo(
|
200
292
|
() => optionsProp && mapOptions(optionsProp),
|
201
293
|
[optionsProp]
|
202
294
|
);
|
203
295
|
const handleChange = (value2) => {
|
204
296
|
setCurrentValue(value2);
|
205
297
|
};
|
206
|
-
const getDisplayValue =
|
298
|
+
const getDisplayValue = React4.useCallback(
|
207
299
|
(value2) => {
|
208
300
|
if (!options) {
|
209
301
|
return value2;
|
@@ -217,7 +309,7 @@ var useSelect = (props) => {
|
|
217
309
|
},
|
218
310
|
[options]
|
219
311
|
);
|
220
|
-
const displayValue =
|
312
|
+
const displayValue = React4.useMemo(
|
221
313
|
() => currentValue ? (Array.isArray(currentValue) ? currentValue : [currentValue]).map(
|
222
314
|
getDisplayValue
|
223
315
|
) : [],
|
@@ -236,7 +328,10 @@ var useSelect = (props) => {
|
|
236
328
|
isDisabled
|
237
329
|
};
|
238
330
|
};
|
239
|
-
|
331
|
+
|
332
|
+
// src/select/select.tsx
|
333
|
+
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
334
|
+
var SelectButton = forwardRef5(
|
240
335
|
(props, ref) => {
|
241
336
|
var _a, _b, _c, _d, _e;
|
242
337
|
const {
|
@@ -257,7 +352,7 @@ var SelectButton = forwardRef(
|
|
257
352
|
onBlur,
|
258
353
|
onFocus
|
259
354
|
} = context || {};
|
260
|
-
const { rightIcon = /* @__PURE__ */
|
355
|
+
const { rightIcon = /* @__PURE__ */ jsx7(ChevronDownIcon2, {}), ...rest } = props;
|
261
356
|
const focusStyles = (_a = styles.field) == null ? void 0 : _a._focusVisible;
|
262
357
|
const readOnlyStyles = (_b = styles.field) == null ? void 0 : _b._readOnly;
|
263
358
|
const invalid = (_c = styles.field) == null ? void 0 : _c._invalid;
|
@@ -279,8 +374,8 @@ var SelectButton = forwardRef(
|
|
279
374
|
h: "auto"
|
280
375
|
};
|
281
376
|
const buttonProps = useMenuButton(rest, ref);
|
282
|
-
return /* @__PURE__ */
|
283
|
-
|
377
|
+
return /* @__PURE__ */ jsx7(
|
378
|
+
Button2,
|
284
379
|
{
|
285
380
|
...buttonProps,
|
286
381
|
...buttonStyles,
|
@@ -294,7 +389,7 @@ var SelectButton = forwardRef(
|
|
294
389
|
"data-focus": dataAttr(isFocused),
|
295
390
|
"data-required": dataAttr(isRequired),
|
296
391
|
rightIcon,
|
297
|
-
children: /* @__PURE__ */
|
392
|
+
children: /* @__PURE__ */ jsx7(
|
298
393
|
chakra.span,
|
299
394
|
{
|
300
395
|
__css: {
|
@@ -313,15 +408,15 @@ var SelectButton = forwardRef(
|
|
313
408
|
}
|
314
409
|
);
|
315
410
|
SelectButton.displayName = "SelectButton";
|
316
|
-
var Select =
|
411
|
+
var Select = forwardRef5((props, ref) => {
|
317
412
|
const { name, children, isDisabled, multiple, ...rest } = props;
|
318
413
|
const styles = useMultiStyleConfig("SuiSelect", props);
|
319
414
|
const menuProps = omitThemingProps(rest);
|
320
415
|
const context = useSelect(props);
|
321
416
|
const { value, controlProps } = context;
|
322
|
-
return /* @__PURE__ */
|
417
|
+
return /* @__PURE__ */ jsx7(SelectProvider, { value: context, children: /* @__PURE__ */ jsx7(SelectStylesProvider, { value: styles, children: /* @__PURE__ */ jsx7(Menu, { ...menuProps, closeOnSelect: !multiple, children: /* @__PURE__ */ jsxs4(chakra.div, { className: cx("sui-select"), children: [
|
323
418
|
children,
|
324
|
-
/* @__PURE__ */
|
419
|
+
/* @__PURE__ */ jsx7(
|
325
420
|
chakra.input,
|
326
421
|
{
|
327
422
|
...controlProps,
|
@@ -336,33 +431,56 @@ var Select = forwardRef((props, ref) => {
|
|
336
431
|
});
|
337
432
|
var SelectList = (props) => {
|
338
433
|
const { defaultValue, value, options, multiple, onChange } = useSelectContext();
|
339
|
-
return /* @__PURE__ */
|
434
|
+
return /* @__PURE__ */ jsx7(MenuList, { maxH: "100vh", overflowY: "auto", ...props, children: /* @__PURE__ */ jsx7(
|
340
435
|
MenuOptionGroup,
|
341
436
|
{
|
342
437
|
defaultValue: defaultValue || value,
|
343
438
|
value,
|
344
439
|
onChange,
|
345
440
|
type: multiple ? "checkbox" : "radio",
|
346
|
-
children: options ? options.map(({ value: value2, label, ...rest }, i) => /* @__PURE__ */
|
441
|
+
children: options ? options.map(({ value: value2, label, ...rest }, i) => /* @__PURE__ */ jsx7(SelectOption, { value: value2, ...rest, children: label || value2 }, i)) : props.children
|
347
442
|
}
|
348
443
|
) });
|
349
444
|
};
|
350
445
|
Select.displayName = "Select";
|
351
|
-
var SelectOption =
|
446
|
+
var SelectOption = forwardRef5(
|
352
447
|
(props, ref) => {
|
353
|
-
return /* @__PURE__ */
|
448
|
+
return /* @__PURE__ */ jsx7(MenuItemOption, { ref, ...props });
|
354
449
|
}
|
355
450
|
);
|
356
451
|
SelectOption.id = "MenuItemOption";
|
357
452
|
SelectOption.displayName = "SelectOption";
|
358
|
-
|
453
|
+
|
454
|
+
// src/select/native-select.tsx
|
455
|
+
import {
|
456
|
+
forwardRef as forwardRef6,
|
457
|
+
Select as ChakraSelect
|
458
|
+
} from "@chakra-ui/react";
|
459
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
460
|
+
var NativeSelect = forwardRef6(
|
359
461
|
({ options, children, ...props }, ref) => {
|
360
|
-
return /* @__PURE__ */
|
361
|
-
return /* @__PURE__ */
|
462
|
+
return /* @__PURE__ */ jsx8(ChakraSelect, { ref, ...props, children: children || (options == null ? void 0 : options.map(({ value, label }) => {
|
463
|
+
return /* @__PURE__ */ jsx8("option", { value, children: label || value }, value);
|
362
464
|
})) });
|
363
465
|
}
|
364
466
|
);
|
365
467
|
NativeSelect.displayName = "NativeSelect";
|
468
|
+
|
469
|
+
// src/create-field.tsx
|
470
|
+
import { Controller } from "react-hook-form";
|
471
|
+
import { forwardRef as forwardRef7, useMergeRefs } from "@chakra-ui/react";
|
472
|
+
import { callAllHandlers } from "@chakra-ui/utils";
|
473
|
+
|
474
|
+
// src/base-field.tsx
|
475
|
+
import { get } from "react-hook-form";
|
476
|
+
import {
|
477
|
+
Box,
|
478
|
+
FormControl as FormControl2,
|
479
|
+
FormLabel as FormLabel2,
|
480
|
+
FormHelperText,
|
481
|
+
FormErrorMessage
|
482
|
+
} from "@chakra-ui/react";
|
483
|
+
import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
366
484
|
var getError = (name, formState) => {
|
367
485
|
return get(formState.errors, name);
|
368
486
|
};
|
@@ -370,18 +488,21 @@ var BaseField = (props) => {
|
|
370
488
|
const { name, label, help, hideLabel, children, ...controlProps } = props;
|
371
489
|
const { formState } = useFormContext();
|
372
490
|
const error = getError(name, formState);
|
373
|
-
return /* @__PURE__ */
|
374
|
-
label && !hideLabel ? /* @__PURE__ */
|
375
|
-
/* @__PURE__ */
|
491
|
+
return /* @__PURE__ */ jsxs5(FormControl2, { ...controlProps, isInvalid: !!error, children: [
|
492
|
+
label && !hideLabel ? /* @__PURE__ */ jsx9(FormLabel2, { children: label }) : null,
|
493
|
+
/* @__PURE__ */ jsxs5(Box, { children: [
|
376
494
|
children,
|
377
|
-
help && !(error == null ? void 0 : error.message) ? /* @__PURE__ */
|
378
|
-
(error == null ? void 0 : error.message) && /* @__PURE__ */
|
495
|
+
help && !(error == null ? void 0 : error.message) ? /* @__PURE__ */ jsx9(FormHelperText, { children: help }) : null,
|
496
|
+
(error == null ? void 0 : error.message) && /* @__PURE__ */ jsx9(FormErrorMessage, { children: error == null ? void 0 : error.message })
|
379
497
|
] })
|
380
498
|
] });
|
381
499
|
};
|
382
500
|
BaseField.displayName = "BaseField";
|
501
|
+
|
502
|
+
// src/create-field.tsx
|
503
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
383
504
|
var _createField = (InputComponent, { displayName, hideLabel, BaseField: BaseField2 }) => {
|
384
|
-
const Field2 =
|
505
|
+
const Field2 = forwardRef7((props, ref) => {
|
385
506
|
const {
|
386
507
|
id,
|
387
508
|
name,
|
@@ -398,7 +519,7 @@ var _createField = (InputComponent, { displayName, hideLabel, BaseField: BaseFie
|
|
398
519
|
required: isRequired,
|
399
520
|
...rules
|
400
521
|
};
|
401
|
-
return /* @__PURE__ */
|
522
|
+
return /* @__PURE__ */ jsx10(
|
402
523
|
BaseField2,
|
403
524
|
{
|
404
525
|
id,
|
@@ -410,7 +531,7 @@ var _createField = (InputComponent, { displayName, hideLabel, BaseField: BaseFie
|
|
410
531
|
isInvalid,
|
411
532
|
isReadOnly,
|
412
533
|
isRequired,
|
413
|
-
children: /* @__PURE__ */
|
534
|
+
children: /* @__PURE__ */ jsx10(
|
414
535
|
InputComponent,
|
415
536
|
{
|
416
537
|
ref,
|
@@ -428,16 +549,16 @@ var _createField = (InputComponent, { displayName, hideLabel, BaseField: BaseFie
|
|
428
549
|
return Field2;
|
429
550
|
};
|
430
551
|
var withControlledInput = (InputComponent) => {
|
431
|
-
return
|
552
|
+
return forwardRef7(
|
432
553
|
({ name, rules, ...inputProps }, ref) => {
|
433
554
|
const { control } = useFormContext();
|
434
|
-
return /* @__PURE__ */
|
555
|
+
return /* @__PURE__ */ jsx10(
|
435
556
|
Controller,
|
436
557
|
{
|
437
558
|
name,
|
438
559
|
control,
|
439
560
|
rules,
|
440
|
-
render: ({ field: { ref: _ref, ...field } }) => /* @__PURE__ */
|
561
|
+
render: ({ field: { ref: _ref, ...field } }) => /* @__PURE__ */ jsx10(
|
441
562
|
InputComponent,
|
442
563
|
{
|
443
564
|
...field,
|
@@ -453,11 +574,11 @@ var withControlledInput = (InputComponent) => {
|
|
453
574
|
);
|
454
575
|
};
|
455
576
|
var withUncontrolledInput = (InputComponent) => {
|
456
|
-
return
|
577
|
+
return forwardRef7(
|
457
578
|
({ name, rules, ...inputProps }, ref) => {
|
458
579
|
const { register } = useFormContext();
|
459
580
|
const { ref: _ref, ...field } = register(name, rules);
|
460
|
-
return /* @__PURE__ */
|
581
|
+
return /* @__PURE__ */ jsx10(
|
461
582
|
InputComponent,
|
462
583
|
{
|
463
584
|
...field,
|
@@ -485,11 +606,14 @@ var createField = (component, options) => {
|
|
485
606
|
});
|
486
607
|
return Field2;
|
487
608
|
};
|
609
|
+
|
610
|
+
// src/default-fields.tsx
|
611
|
+
import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
|
488
612
|
var InputField = createField(
|
489
|
-
|
490
|
-
const input = /* @__PURE__ */
|
613
|
+
forwardRef8(({ type = "text", leftAddon, rightAddon, size, ...rest }, ref) => {
|
614
|
+
const input = /* @__PURE__ */ jsx11(Input2, { type, size, ...rest, ref });
|
491
615
|
if (leftAddon || rightAddon) {
|
492
|
-
return /* @__PURE__ */
|
616
|
+
return /* @__PURE__ */ jsxs6(InputGroup2, { size, children: [
|
493
617
|
leftAddon,
|
494
618
|
input,
|
495
619
|
rightAddon
|
@@ -505,22 +629,22 @@ var NumberInputField2 = createField(
|
|
505
629
|
}
|
506
630
|
);
|
507
631
|
var PasswordInputField = createField(
|
508
|
-
|
632
|
+
forwardRef8((props, ref) => /* @__PURE__ */ jsx11(PasswordInput, { ref, ...props }))
|
509
633
|
);
|
510
634
|
var TextareaField = createField(Textarea);
|
511
635
|
var SwitchField = createField(
|
512
|
-
|
513
|
-
return /* @__PURE__ */
|
636
|
+
forwardRef8(({ type, value, ...rest }, ref) => {
|
637
|
+
return /* @__PURE__ */ jsx11(Switch, { isChecked: !!value, ...rest, ref });
|
514
638
|
}),
|
515
639
|
{
|
516
640
|
isControlled: true
|
517
641
|
}
|
518
642
|
);
|
519
643
|
var SelectField = createField(
|
520
|
-
|
521
|
-
return /* @__PURE__ */
|
522
|
-
/* @__PURE__ */
|
523
|
-
/* @__PURE__ */
|
644
|
+
forwardRef8((props, ref) => {
|
645
|
+
return /* @__PURE__ */ jsxs6(Select, { ref, ...props, children: [
|
646
|
+
/* @__PURE__ */ jsx11(SelectButton, {}),
|
647
|
+
/* @__PURE__ */ jsx11(SelectList, {})
|
524
648
|
] });
|
525
649
|
}),
|
526
650
|
{
|
@@ -528,8 +652,8 @@ var SelectField = createField(
|
|
528
652
|
}
|
529
653
|
);
|
530
654
|
var CheckboxField = createField(
|
531
|
-
|
532
|
-
return /* @__PURE__ */
|
655
|
+
forwardRef8(({ label, type, ...props }, ref) => {
|
656
|
+
return /* @__PURE__ */ jsx11(Checkbox, { ref, ...props, children: label });
|
533
657
|
}),
|
534
658
|
{
|
535
659
|
hideLabel: true
|
@@ -542,13 +666,13 @@ var NativeSelectField = createField(NativeSelect, {
|
|
542
666
|
isControlled: true
|
543
667
|
});
|
544
668
|
var PinField = createField(
|
545
|
-
|
669
|
+
forwardRef8((props, ref) => {
|
546
670
|
const { pinLength = 4, pinType, spacing, ...inputProps } = props;
|
547
671
|
const inputs = [];
|
548
672
|
for (let i = 0; i < pinLength; i++) {
|
549
|
-
inputs.push(/* @__PURE__ */
|
673
|
+
inputs.push(/* @__PURE__ */ jsx11(PinInputField, { ref }, i));
|
550
674
|
}
|
551
|
-
return /* @__PURE__ */
|
675
|
+
return /* @__PURE__ */ jsx11(HStack, { spacing, children: /* @__PURE__ */ jsx11(PinInput, { ...inputProps, type: pinType, children: inputs }) });
|
552
676
|
}),
|
553
677
|
{
|
554
678
|
isControlled: true
|
@@ -569,28 +693,47 @@ var defaultFieldTypes = {
|
|
569
693
|
pin: PinField,
|
570
694
|
"native-select": NativeSelectField
|
571
695
|
};
|
572
|
-
|
696
|
+
|
697
|
+
// src/fields-context.tsx
|
698
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
699
|
+
var FieldsContext = React5.createContext(
|
573
700
|
null
|
574
701
|
);
|
575
702
|
var FieldsProvider = (props) => {
|
576
703
|
const fields = { ...defaultFieldTypes, ...props.value };
|
577
|
-
return /* @__PURE__ */
|
704
|
+
return /* @__PURE__ */ jsx12(FieldsContext.Provider, { value: fields, children: props.children });
|
578
705
|
};
|
579
706
|
var useField = (type) => {
|
580
|
-
const context =
|
707
|
+
const context = React5.useContext(FieldsContext);
|
581
708
|
return (context == null ? void 0 : context[type]) || InputField;
|
582
709
|
};
|
710
|
+
|
711
|
+
// src/field.tsx
|
712
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
583
713
|
var defaultInputType = "text";
|
584
|
-
var Field =
|
714
|
+
var Field = React6.forwardRef(
|
585
715
|
(props, ref) => {
|
586
716
|
const { type = defaultInputType, name } = props;
|
587
717
|
const overrides = useFieldProps(name);
|
588
718
|
const InputComponent = useField((overrides == null ? void 0 : overrides.type) || type);
|
589
|
-
return /* @__PURE__ */
|
719
|
+
return /* @__PURE__ */ jsx13(InputComponent, { ref, ...props, ...overrides });
|
590
720
|
}
|
591
721
|
);
|
722
|
+
|
723
|
+
// src/fields.tsx
|
724
|
+
import * as React10 from "react";
|
725
|
+
|
726
|
+
// src/layout.tsx
|
727
|
+
import * as React7 from "react";
|
728
|
+
import {
|
729
|
+
chakra as chakra2,
|
730
|
+
SimpleGrid,
|
731
|
+
useTheme
|
732
|
+
} from "@chakra-ui/react";
|
733
|
+
import { cx as cx2 } from "@chakra-ui/utils";
|
734
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
592
735
|
var FormLayoutItem = ({ children }) => {
|
593
|
-
return /* @__PURE__ */
|
736
|
+
return /* @__PURE__ */ jsx14(chakra2.div, { children });
|
594
737
|
};
|
595
738
|
FormLayoutItem.displayName = "FormLayoutItem";
|
596
739
|
var FormLayout = ({ children, ...props }) => {
|
@@ -603,14 +746,14 @@ var FormLayout = ({ children, ...props }) => {
|
|
603
746
|
...defaultProps,
|
604
747
|
...props
|
605
748
|
};
|
606
|
-
return /* @__PURE__ */
|
749
|
+
return /* @__PURE__ */ jsx14(
|
607
750
|
SimpleGrid,
|
608
751
|
{
|
609
752
|
...gridProps,
|
610
|
-
className:
|
611
|
-
children:
|
612
|
-
if (
|
613
|
-
return /* @__PURE__ */
|
753
|
+
className: cx2("sui-form__layout", props.className),
|
754
|
+
children: React7.Children.map(children, (child) => {
|
755
|
+
if (React7.isValidElement(child)) {
|
756
|
+
return /* @__PURE__ */ jsx14(FormLayoutItem, { children: child });
|
614
757
|
}
|
615
758
|
return child;
|
616
759
|
})
|
@@ -618,10 +761,26 @@ var FormLayout = ({ children, ...props }) => {
|
|
618
761
|
);
|
619
762
|
};
|
620
763
|
FormLayout.displayName = "FormLayout";
|
621
|
-
|
764
|
+
|
765
|
+
// src/array-field.tsx
|
766
|
+
import * as React9 from "react";
|
767
|
+
import {
|
768
|
+
chakra as chakra3,
|
769
|
+
forwardRef as forwardRef11,
|
770
|
+
Button as Button3
|
771
|
+
} from "@chakra-ui/react";
|
772
|
+
import { PlusIcon, MinusIcon } from "@saas-ui/core/icons";
|
773
|
+
|
774
|
+
// src/use-array-field.tsx
|
775
|
+
import * as React8 from "react";
|
776
|
+
import {
|
777
|
+
useFieldArray
|
778
|
+
} from "react-hook-form";
|
779
|
+
import { createContext as createContext3 } from "@chakra-ui/react-utils";
|
780
|
+
var [ArrayFieldProvider, useArrayFieldContext] = createContext3({
|
622
781
|
name: "ArrayFieldContext"
|
623
782
|
});
|
624
|
-
var [ArrayFieldRowProvider, useArrayFieldRowContext] =
|
783
|
+
var [ArrayFieldRowProvider, useArrayFieldRowContext] = createContext3({
|
625
784
|
name: "ArrayFieldRowContext"
|
626
785
|
});
|
627
786
|
var useArrayField = ({
|
@@ -648,7 +807,7 @@ var useArrayField = ({
|
|
648
807
|
var useArrayFieldRow = ({ index }) => {
|
649
808
|
const { clearErrors } = useFormContext();
|
650
809
|
const { name, remove, fields } = useArrayFieldContext();
|
651
|
-
|
810
|
+
React8.useEffect(() => {
|
652
811
|
clearErrors(name);
|
653
812
|
}, []);
|
654
813
|
return {
|
@@ -656,7 +815,7 @@ var useArrayFieldRow = ({ index }) => {
|
|
656
815
|
isFirst: index === 0,
|
657
816
|
isLast: index === fields.length - 1,
|
658
817
|
name: `${name}.${index}`,
|
659
|
-
remove:
|
818
|
+
remove: React8.useCallback(() => {
|
660
819
|
clearErrors(name);
|
661
820
|
remove(index);
|
662
821
|
}, [index])
|
@@ -681,14 +840,18 @@ var useArrayFieldAddButton = () => {
|
|
681
840
|
isDisabled
|
682
841
|
};
|
683
842
|
};
|
843
|
+
|
844
|
+
// src/array-field.tsx
|
845
|
+
import { isFunction } from "@chakra-ui/utils";
|
846
|
+
import { Fragment, jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
|
684
847
|
var ArrayFieldRow = ({
|
685
848
|
children,
|
686
849
|
index,
|
687
850
|
...rowFieldsProps
|
688
851
|
}) => {
|
689
|
-
return /* @__PURE__ */
|
690
|
-
/* @__PURE__ */
|
691
|
-
/* @__PURE__ */
|
852
|
+
return /* @__PURE__ */ jsxs7(ArrayFieldRowContainer, { index, children: [
|
853
|
+
/* @__PURE__ */ jsx15(ArrayFieldRowFields, { ...rowFieldsProps, children }),
|
854
|
+
/* @__PURE__ */ jsx15(ArrayFieldRemoveButton, {})
|
692
855
|
] });
|
693
856
|
};
|
694
857
|
ArrayFieldRow.displayName = "ArrayFieldRow";
|
@@ -697,7 +860,7 @@ var ArrayFieldRowFields = ({
|
|
697
860
|
...layoutProps
|
698
861
|
}) => {
|
699
862
|
const { name } = useArrayFieldRowContext();
|
700
|
-
return /* @__PURE__ */
|
863
|
+
return /* @__PURE__ */ jsx15(FormLayout, { flex: "1", mr: "2", ...layoutProps, children: mapNestedFields(name, children) });
|
701
864
|
};
|
702
865
|
ArrayFieldRowFields.displayName = "ArrayFieldRowFields";
|
703
866
|
var ArrayFieldRowContainer = ({
|
@@ -713,33 +876,33 @@ var ArrayFieldRowContainer = ({
|
|
713
876
|
width: "100%",
|
714
877
|
mb: 4
|
715
878
|
};
|
716
|
-
return /* @__PURE__ */
|
879
|
+
return /* @__PURE__ */ jsx15(ArrayFieldRowProvider, { value: context, children: /* @__PURE__ */ jsx15(chakra3.div, { ...rest, __css: styles, children }) });
|
717
880
|
};
|
718
881
|
ArrayFieldRowContainer.displayName = "ArrayFieldRowContainer";
|
719
882
|
var ArrayFieldRemoveButton = (props) => {
|
720
|
-
return /* @__PURE__ */
|
883
|
+
return /* @__PURE__ */ jsx15(Button3, { "aria-label": "Remove row", ...useArrayFieldRemoveButton(), ...props, children: props.children || /* @__PURE__ */ jsx15(MinusIcon, {}) });
|
721
884
|
};
|
722
885
|
ArrayFieldRemoveButton.displayName = "ArrayFieldRemoveButton";
|
723
886
|
var ArrayFieldAddButton = (props) => {
|
724
|
-
return /* @__PURE__ */
|
725
|
-
|
887
|
+
return /* @__PURE__ */ jsx15(
|
888
|
+
Button3,
|
726
889
|
{
|
727
890
|
"aria-label": "Add row",
|
728
891
|
float: "right",
|
729
892
|
...useArrayFieldAddButton(),
|
730
893
|
...props,
|
731
|
-
children: props.children || /* @__PURE__ */
|
894
|
+
children: props.children || /* @__PURE__ */ jsx15(PlusIcon, {})
|
732
895
|
}
|
733
896
|
);
|
734
897
|
};
|
735
898
|
ArrayFieldAddButton.displayName = "ArrayFieldAddButton";
|
736
|
-
var ArrayField =
|
899
|
+
var ArrayField = forwardRef11(
|
737
900
|
(props, ref) => {
|
738
901
|
const { children, ...containerProps } = props;
|
739
|
-
const rowFn = isFunction(children) ? children : (fields) => /* @__PURE__ */
|
740
|
-
return /* @__PURE__ */
|
741
|
-
/* @__PURE__ */
|
742
|
-
/* @__PURE__ */
|
902
|
+
const rowFn = isFunction(children) ? children : (fields) => /* @__PURE__ */ jsx15(Fragment, { children: fields.map(({ id }, index) => /* @__PURE__ */ jsx15(ArrayFieldRow, { index, children }, id)) || null });
|
903
|
+
return /* @__PURE__ */ jsxs7(ArrayFieldContainer, { ref, ...containerProps, children: [
|
904
|
+
/* @__PURE__ */ jsx15(ArrayFieldRows, { children: rowFn }),
|
905
|
+
/* @__PURE__ */ jsx15(ArrayFieldAddButton, {})
|
743
906
|
] });
|
744
907
|
}
|
745
908
|
);
|
@@ -751,7 +914,7 @@ var ArrayFieldRows = ({
|
|
751
914
|
return children(fields);
|
752
915
|
};
|
753
916
|
ArrayFieldRows.displayName = "ArrayFieldRows";
|
754
|
-
var ArrayFieldContainer =
|
917
|
+
var ArrayFieldContainer = React9.forwardRef(
|
755
918
|
({
|
756
919
|
name,
|
757
920
|
defaultValue,
|
@@ -769,14 +932,22 @@ var ArrayFieldContainer = React11.forwardRef(
|
|
769
932
|
min: min || (overrides == null ? void 0 : overrides.min),
|
770
933
|
max: max || (overrides == null ? void 0 : overrides.max)
|
771
934
|
});
|
772
|
-
|
773
|
-
return /* @__PURE__ */
|
935
|
+
React9.useImperativeHandle(ref, () => context, [ref, context]);
|
936
|
+
return /* @__PURE__ */ jsx15(ArrayFieldProvider, { value: context, children: /* @__PURE__ */ jsx15(BaseField, { name, ...fieldProps, ...overrides, children }) });
|
774
937
|
}
|
775
938
|
);
|
776
939
|
ArrayFieldContainer.displayName = "ArrayFieldContainer";
|
940
|
+
|
941
|
+
// src/object-field.tsx
|
942
|
+
import {
|
943
|
+
FormControl as FormControl3,
|
944
|
+
FormLabel as FormLabel3,
|
945
|
+
useStyleConfig
|
946
|
+
} from "@chakra-ui/react";
|
947
|
+
import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
|
777
948
|
var FormLegend = (props) => {
|
778
949
|
const styles = useStyleConfig("SuiFormLegend");
|
779
|
-
return /* @__PURE__ */
|
950
|
+
return /* @__PURE__ */ jsx16(FormLabel3, { as: "legend", sx: styles, ...props });
|
780
951
|
};
|
781
952
|
var ObjectField = (props) => {
|
782
953
|
const {
|
@@ -791,9 +962,9 @@ var ObjectField = (props) => {
|
|
791
962
|
const { hideLabel, columns, spacing, ...overrides } = useFieldProps(
|
792
963
|
name
|
793
964
|
);
|
794
|
-
return /* @__PURE__ */
|
795
|
-
/* @__PURE__ */
|
796
|
-
/* @__PURE__ */
|
965
|
+
return /* @__PURE__ */ jsxs8(FormControl3, { name, as: "fieldset", ...fieldProps, ...overrides, children: [
|
966
|
+
/* @__PURE__ */ jsx16(FormLegend, { display: hideLabelProp || hideLabel ? "none" : "block", children: label }),
|
967
|
+
/* @__PURE__ */ jsx16(
|
797
968
|
FormLayout,
|
798
969
|
{
|
799
970
|
columns: columnsProp || columns,
|
@@ -804,10 +975,13 @@ var ObjectField = (props) => {
|
|
804
975
|
] });
|
805
976
|
};
|
806
977
|
ObjectField.displayName = "ObjectField";
|
978
|
+
|
979
|
+
// src/fields.tsx
|
980
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
807
981
|
var mapNestedFields2 = (resolver, name) => {
|
808
982
|
var _a;
|
809
983
|
return (_a = resolver.getNestedFields(name)) == null ? void 0 : _a.map(
|
810
|
-
({ name: name2, type, ...nestedFieldProps }, i) => /* @__PURE__ */
|
984
|
+
({ name: name2, type, ...nestedFieldProps }, i) => /* @__PURE__ */ jsx17(
|
811
985
|
Field,
|
812
986
|
{
|
813
987
|
name: name2,
|
@@ -827,10 +1001,10 @@ var AutoFields = ({
|
|
827
1001
|
const context = useFormContext();
|
828
1002
|
const schema = schemaProp || context.schema;
|
829
1003
|
const fieldResolver = fieldResolverProp || context.fieldResolver;
|
830
|
-
const resolver =
|
831
|
-
const fields =
|
1004
|
+
const resolver = React10.useMemo(() => fieldResolver, [schema, fieldResolver]);
|
1005
|
+
const fields = React10.useMemo(() => resolver == null ? void 0 : resolver.getFields(), [resolver]);
|
832
1006
|
const form = useFormContext();
|
833
|
-
|
1007
|
+
React10.useEffect(() => {
|
834
1008
|
var _a;
|
835
1009
|
if (focusFirstField && ((_a = fields == null ? void 0 : fields[0]) == null ? void 0 : _a.name)) {
|
836
1010
|
form.setFocus(fields[0].name);
|
@@ -839,7 +1013,7 @@ var AutoFields = ({
|
|
839
1013
|
if (!resolver) {
|
840
1014
|
return null;
|
841
1015
|
}
|
842
|
-
return /* @__PURE__ */
|
1016
|
+
return /* @__PURE__ */ jsx17(FormLayout, { ...props, children: fields == null ? void 0 : fields.map(
|
843
1017
|
({
|
844
1018
|
name,
|
845
1019
|
type,
|
@@ -847,16 +1021,21 @@ var AutoFields = ({
|
|
847
1021
|
...fieldProps
|
848
1022
|
}) => {
|
849
1023
|
if (type === "array") {
|
850
|
-
return /* @__PURE__ */
|
1024
|
+
return /* @__PURE__ */ jsx17(ArrayField, { name, ...fieldProps, children: mapNestedFields2(resolver, name) }, name);
|
851
1025
|
} else if (type === "object") {
|
852
|
-
return /* @__PURE__ */
|
1026
|
+
return /* @__PURE__ */ jsx17(ObjectField, { name, ...fieldProps, children: mapNestedFields2(resolver, name) }, name);
|
853
1027
|
}
|
854
|
-
return /* @__PURE__ */
|
1028
|
+
return /* @__PURE__ */ jsx17(Field, { name, type, ...fieldProps }, name);
|
855
1029
|
}
|
856
1030
|
) });
|
857
1031
|
};
|
858
1032
|
AutoFields.displayName = "Fields";
|
859
|
-
|
1033
|
+
|
1034
|
+
// src/submit-button.tsx
|
1035
|
+
import { useFormContext as useFormContext2 } from "react-hook-form";
|
1036
|
+
import { Button as Button4, forwardRef as forwardRef12 } from "@chakra-ui/react";
|
1037
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
1038
|
+
var SubmitButton = forwardRef12(
|
860
1039
|
(props, ref) => {
|
861
1040
|
const {
|
862
1041
|
children = "Submit",
|
@@ -866,10 +1045,10 @@ var SubmitButton = forwardRef(
|
|
866
1045
|
isLoading,
|
867
1046
|
...rest
|
868
1047
|
} = props;
|
869
|
-
const { formState } =
|
1048
|
+
const { formState } = useFormContext2();
|
870
1049
|
const isDisabled = disableIfUntouched && !formState.isDirty || disableIfInvalid && !formState.isValid || isDisabledProp;
|
871
|
-
return /* @__PURE__ */
|
872
|
-
|
1050
|
+
return /* @__PURE__ */ jsx18(
|
1051
|
+
Button4,
|
873
1052
|
{
|
874
1053
|
...rest,
|
875
1054
|
ref,
|
@@ -887,6 +1066,11 @@ SubmitButton.defaultProps = {
|
|
887
1066
|
disableIfInvalid: false
|
888
1067
|
};
|
889
1068
|
SubmitButton.displayName = "SubmitButton";
|
1069
|
+
|
1070
|
+
// src/display-if.tsx
|
1071
|
+
import {
|
1072
|
+
useWatch
|
1073
|
+
} from "react-hook-form";
|
890
1074
|
var DisplayIf = ({
|
891
1075
|
children,
|
892
1076
|
name,
|
@@ -905,7 +1089,28 @@ var DisplayIf = ({
|
|
905
1089
|
return condition(value, context) ? children : null;
|
906
1090
|
};
|
907
1091
|
DisplayIf.displayName = "DisplayIf";
|
908
|
-
|
1092
|
+
|
1093
|
+
// src/step-form.tsx
|
1094
|
+
import * as React12 from "react";
|
1095
|
+
import {
|
1096
|
+
chakra as chakra4,
|
1097
|
+
Button as Button5
|
1098
|
+
} from "@chakra-ui/react";
|
1099
|
+
import { callAllHandlers as callAllHandlers2, cx as cx3 } from "@chakra-ui/utils";
|
1100
|
+
import {
|
1101
|
+
Steps,
|
1102
|
+
StepsItem,
|
1103
|
+
useStepperContext
|
1104
|
+
} from "@saas-ui/core";
|
1105
|
+
|
1106
|
+
// src/use-step-form.tsx
|
1107
|
+
import * as React11 from "react";
|
1108
|
+
import { createContext as createContext4 } from "@chakra-ui/react-utils";
|
1109
|
+
import {
|
1110
|
+
useStepper,
|
1111
|
+
useStep
|
1112
|
+
} from "@saas-ui/core";
|
1113
|
+
var [StepFormProvider, useStepFormContext] = createContext4({
|
909
1114
|
name: "StepFormContext",
|
910
1115
|
errorMessage: "useStepFormContext: `context` is undefined. Seems you forgot to wrap step form components in `<StepForm />`"
|
911
1116
|
});
|
@@ -981,6 +1186,9 @@ function useFormStep(props) {
|
|
981
1186
|
...steps[name] || { name, schema }
|
982
1187
|
};
|
983
1188
|
}
|
1189
|
+
|
1190
|
+
// src/step-form.tsx
|
1191
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
984
1192
|
var FormStepper = (props) => {
|
985
1193
|
const { activeIndex, setIndex } = useStepperContext();
|
986
1194
|
const {
|
@@ -993,10 +1201,10 @@ var FormStepper = (props) => {
|
|
993
1201
|
render,
|
994
1202
|
...rest
|
995
1203
|
} = props;
|
996
|
-
const elements =
|
997
|
-
if (
|
1204
|
+
const elements = React12.Children.map(children, (child) => {
|
1205
|
+
if (React12.isValidElement(child) && (child == null ? void 0 : child.type) === FormStep) {
|
998
1206
|
const { isCompleted } = useFormStep(child.props);
|
999
|
-
return /* @__PURE__ */
|
1207
|
+
return /* @__PURE__ */ jsx19(
|
1000
1208
|
StepsItem,
|
1001
1209
|
{
|
1002
1210
|
render,
|
@@ -1010,11 +1218,11 @@ var FormStepper = (props) => {
|
|
1010
1218
|
}
|
1011
1219
|
return child;
|
1012
1220
|
});
|
1013
|
-
const onChange =
|
1221
|
+
const onChange = React12.useCallback((i) => {
|
1014
1222
|
setIndex(i);
|
1015
1223
|
onChangeProp == null ? void 0 : onChangeProp(i);
|
1016
1224
|
}, []);
|
1017
|
-
return /* @__PURE__ */
|
1225
|
+
return /* @__PURE__ */ jsx19(
|
1018
1226
|
Steps,
|
1019
1227
|
{
|
1020
1228
|
orientation,
|
@@ -1031,19 +1239,19 @@ var FormStep = (props) => {
|
|
1031
1239
|
const { name, children, className, onSubmit, ...rest } = props;
|
1032
1240
|
const step = useFormStep({ name, onSubmit });
|
1033
1241
|
const { isActive } = step;
|
1034
|
-
return isActive ? /* @__PURE__ */
|
1242
|
+
return isActive ? /* @__PURE__ */ jsx19(chakra4.div, { ...rest, className: cx3("sui-form__step", className), children }) : null;
|
1035
1243
|
};
|
1036
1244
|
FormStep.displayName = "FormStep";
|
1037
1245
|
var PrevButton = (props) => {
|
1038
1246
|
const { isFirstStep, isCompleted, prevStep } = useStepperContext();
|
1039
|
-
return /* @__PURE__ */
|
1040
|
-
|
1247
|
+
return /* @__PURE__ */ jsx19(
|
1248
|
+
Button5,
|
1041
1249
|
{
|
1042
1250
|
isDisabled: isFirstStep || isCompleted,
|
1043
1251
|
children: "Back",
|
1044
1252
|
...props,
|
1045
|
-
className:
|
1046
|
-
onClick:
|
1253
|
+
className: cx3("sui-form__prev-button", props.className),
|
1254
|
+
onClick: callAllHandlers2(props.onClick, prevStep)
|
1047
1255
|
}
|
1048
1256
|
);
|
1049
1257
|
};
|
@@ -1051,17 +1259,20 @@ PrevButton.displayName = "PrevButton";
|
|
1051
1259
|
var NextButton = (props) => {
|
1052
1260
|
const { label = "Next", submitLabel = "Complete", ...rest } = props;
|
1053
1261
|
const { isLastStep, isCompleted } = useStepperContext();
|
1054
|
-
return /* @__PURE__ */
|
1262
|
+
return /* @__PURE__ */ jsx19(
|
1055
1263
|
SubmitButton,
|
1056
1264
|
{
|
1057
1265
|
...rest,
|
1058
1266
|
isDisabled: isCompleted,
|
1059
|
-
className:
|
1267
|
+
className: cx3("sui-form__next-button", props.className),
|
1060
1268
|
children: isLastStep || isCompleted ? submitLabel : label
|
1061
1269
|
}
|
1062
1270
|
);
|
1063
1271
|
};
|
1064
1272
|
NextButton.displayName = "NextButton";
|
1273
|
+
|
1274
|
+
// src/field-resolver.ts
|
1275
|
+
import { get as get2 } from "@chakra-ui/utils";
|
1065
1276
|
var mapFields = (schema) => schema && Object.entries(schema).map(([name, { items, label, title, ...field }]) => {
|
1066
1277
|
return {
|
1067
1278
|
...field,
|
@@ -1076,7 +1287,7 @@ var objectFieldResolver = (schema) => {
|
|
1076
1287
|
};
|
1077
1288
|
const getNestedFields = (name) => {
|
1078
1289
|
var _a;
|
1079
|
-
const field =
|
1290
|
+
const field = get2(schema, name);
|
1080
1291
|
if (!field)
|
1081
1292
|
return [];
|
1082
1293
|
if (((_a = field.items) == null ? void 0 : _a.type) === "object") {
|
@@ -1088,10 +1299,13 @@ var objectFieldResolver = (schema) => {
|
|
1088
1299
|
};
|
1089
1300
|
return { getFields, getNestedFields };
|
1090
1301
|
};
|
1302
|
+
|
1303
|
+
// src/watch-field.tsx
|
1304
|
+
import { useWatch as useWatch2 } from "react-hook-form";
|
1091
1305
|
var WatchField = (props) => {
|
1092
1306
|
const { name, defaultValue, isDisabled, isExact } = props;
|
1093
1307
|
const form = useFormContext();
|
1094
|
-
const field =
|
1308
|
+
const field = useWatch2({
|
1095
1309
|
name,
|
1096
1310
|
defaultValue,
|
1097
1311
|
disabled: isDisabled,
|
@@ -1099,7 +1313,16 @@ var WatchField = (props) => {
|
|
1099
1313
|
});
|
1100
1314
|
return props.children(field, form) || null;
|
1101
1315
|
};
|
1102
|
-
|
1316
|
+
|
1317
|
+
// src/form.tsx
|
1318
|
+
import * as React13 from "react";
|
1319
|
+
import { chakra as chakra5, forwardRef as forwardRef13 } from "@chakra-ui/react";
|
1320
|
+
import { cx as cx4, runIfFn } from "@chakra-ui/utils";
|
1321
|
+
import {
|
1322
|
+
useForm
|
1323
|
+
} from "react-hook-form";
|
1324
|
+
import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
|
1325
|
+
var Form = forwardRef13(
|
1103
1326
|
(props, ref) => {
|
1104
1327
|
const {
|
1105
1328
|
mode = "all",
|
@@ -1140,8 +1363,8 @@ var Form = forwardRef(
|
|
1140
1363
|
};
|
1141
1364
|
const methods = useForm(form);
|
1142
1365
|
const { handleSubmit } = methods;
|
1143
|
-
|
1144
|
-
|
1366
|
+
React13.useImperativeHandle(formRef, () => methods, [formRef, methods]);
|
1367
|
+
React13.useEffect(() => {
|
1145
1368
|
let subscription;
|
1146
1369
|
if (onChange) {
|
1147
1370
|
subscription = methods.watch(onChange);
|
@@ -1150,25 +1373,25 @@ var Form = forwardRef(
|
|
1150
1373
|
}, [methods, onChange]);
|
1151
1374
|
let _children = children;
|
1152
1375
|
if (!_children && fieldResolver) {
|
1153
|
-
_children = /* @__PURE__ */
|
1154
|
-
/* @__PURE__ */
|
1155
|
-
/* @__PURE__ */
|
1376
|
+
_children = /* @__PURE__ */ jsxs9(FormLayout, { children: [
|
1377
|
+
/* @__PURE__ */ jsx20(AutoFields, {}),
|
1378
|
+
/* @__PURE__ */ jsx20(SubmitButton, { ...fields == null ? void 0 : fields.submit })
|
1156
1379
|
] });
|
1157
1380
|
}
|
1158
|
-
return /* @__PURE__ */
|
1381
|
+
return /* @__PURE__ */ jsx20(
|
1159
1382
|
FormProvider,
|
1160
1383
|
{
|
1161
1384
|
...methods,
|
1162
1385
|
schema,
|
1163
1386
|
fieldResolver,
|
1164
1387
|
fields,
|
1165
|
-
children: /* @__PURE__ */
|
1166
|
-
|
1388
|
+
children: /* @__PURE__ */ jsx20(
|
1389
|
+
chakra5.form,
|
1167
1390
|
{
|
1168
1391
|
ref,
|
1169
1392
|
onSubmit: handleSubmit(onSubmit, onError),
|
1170
1393
|
...rest,
|
1171
|
-
className:
|
1394
|
+
className: cx4("sui-form", props.className),
|
1172
1395
|
children: runIfFn(_children, {
|
1173
1396
|
Field,
|
1174
1397
|
DisplayIf,
|
@@ -1183,15 +1406,19 @@ var Form = forwardRef(
|
|
1183
1406
|
}
|
1184
1407
|
);
|
1185
1408
|
Form.displayName = "Form";
|
1409
|
+
|
1410
|
+
// src/create-form.tsx
|
1411
|
+
import { forwardRef as forwardRef14 } from "@chakra-ui/react";
|
1412
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
1186
1413
|
function createForm({
|
1187
1414
|
resolver,
|
1188
1415
|
fieldResolver = objectFieldResolver,
|
1189
1416
|
fields
|
1190
1417
|
} = {}) {
|
1191
|
-
const DefaultForm =
|
1418
|
+
const DefaultForm = forwardRef14(
|
1192
1419
|
(props, ref) => {
|
1193
1420
|
const { schema, ...rest } = props;
|
1194
|
-
return /* @__PURE__ */
|
1421
|
+
return /* @__PURE__ */ jsx21(FieldsProvider, { value: fields || {}, children: /* @__PURE__ */ jsx21(
|
1195
1422
|
Form,
|
1196
1423
|
{
|
1197
1424
|
ref,
|
@@ -1206,8 +1433,15 @@ function createForm({
|
|
1206
1433
|
DefaultForm.id = "Form";
|
1207
1434
|
return DefaultForm;
|
1208
1435
|
}
|
1436
|
+
|
1437
|
+
// src/create-step-form.tsx
|
1438
|
+
import { useMemo as useMemo2 } from "react";
|
1439
|
+
import { forwardRef as forwardRef15 } from "@chakra-ui/react";
|
1440
|
+
import { StepperProvider } from "@saas-ui/core";
|
1441
|
+
import { runIfFn as runIfFn2 } from "@chakra-ui/utils";
|
1442
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
1209
1443
|
function createStepForm({ fields, resolver, fieldResolver } = {}) {
|
1210
|
-
const StepForm2 =
|
1444
|
+
const StepForm2 = forwardRef15((props, ref) => {
|
1211
1445
|
const { children, steps, ...rest } = props;
|
1212
1446
|
const stepper = useStepForm({
|
1213
1447
|
resolver,
|
@@ -1215,8 +1449,8 @@ function createStepForm({ fields, resolver, fieldResolver } = {}) {
|
|
1215
1449
|
...props
|
1216
1450
|
});
|
1217
1451
|
const { getFormProps, ...ctx } = stepper;
|
1218
|
-
const context =
|
1219
|
-
return /* @__PURE__ */
|
1452
|
+
const context = useMemo2(() => ctx, [ctx]);
|
1453
|
+
return /* @__PURE__ */ jsx22(StepperProvider, { value: context, children: /* @__PURE__ */ jsx22(StepFormProvider, { value: context, children: /* @__PURE__ */ jsx22(FieldsProvider, { value: fields || {}, children: /* @__PURE__ */ jsx22(Form, { ref, ...rest, ...getFormProps(), children: runIfFn2(children, {
|
1220
1454
|
...stepper,
|
1221
1455
|
Field,
|
1222
1456
|
FormStep,
|
@@ -1228,9 +1462,91 @@ function createStepForm({ fields, resolver, fieldResolver } = {}) {
|
|
1228
1462
|
StepForm2.displayName = `Step${Form.displayName || Form.name}`;
|
1229
1463
|
return StepForm2;
|
1230
1464
|
}
|
1465
|
+
|
1466
|
+
// src/index.ts
|
1467
|
+
import {
|
1468
|
+
appendErrors,
|
1469
|
+
useController,
|
1470
|
+
useFieldArray as useFieldArray2,
|
1471
|
+
useForm as useForm2,
|
1472
|
+
useFormState,
|
1473
|
+
useWatch as useWatch3,
|
1474
|
+
Controller as Controller2
|
1475
|
+
} from "react-hook-form";
|
1231
1476
|
var Form2 = createForm();
|
1232
1477
|
var StepForm = createStepForm();
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1478
|
+
export {
|
1479
|
+
ArrayField,
|
1480
|
+
ArrayFieldAddButton,
|
1481
|
+
ArrayFieldContainer,
|
1482
|
+
ArrayFieldProvider,
|
1483
|
+
ArrayFieldRemoveButton,
|
1484
|
+
ArrayFieldRow,
|
1485
|
+
ArrayFieldRowContainer,
|
1486
|
+
ArrayFieldRowFields,
|
1487
|
+
ArrayFieldRowProvider,
|
1488
|
+
ArrayFieldRows,
|
1489
|
+
AutoFields,
|
1490
|
+
BaseField,
|
1491
|
+
Form as BaseForm,
|
1492
|
+
CheckboxField,
|
1493
|
+
Controller2 as Controller,
|
1494
|
+
DisplayField,
|
1495
|
+
DisplayIf,
|
1496
|
+
Field,
|
1497
|
+
FieldsProvider,
|
1498
|
+
Form2 as Form,
|
1499
|
+
FormLayout,
|
1500
|
+
FormLegend,
|
1501
|
+
FormProvider,
|
1502
|
+
FormStep,
|
1503
|
+
FormStepper,
|
1504
|
+
FormValue,
|
1505
|
+
InputField,
|
1506
|
+
InputRightButton,
|
1507
|
+
NativeSelect,
|
1508
|
+
NativeSelectField,
|
1509
|
+
NextButton,
|
1510
|
+
NumberInputField2 as NumberInputField,
|
1511
|
+
ObjectField,
|
1512
|
+
PasswordInput,
|
1513
|
+
PasswordInputField,
|
1514
|
+
PinField,
|
1515
|
+
PrevButton,
|
1516
|
+
RadioField,
|
1517
|
+
RadioInput,
|
1518
|
+
Select,
|
1519
|
+
SelectButton,
|
1520
|
+
SelectField,
|
1521
|
+
SelectList,
|
1522
|
+
SelectOption,
|
1523
|
+
StepForm,
|
1524
|
+
StepFormProvider,
|
1525
|
+
SubmitButton,
|
1526
|
+
SwitchField,
|
1527
|
+
TextareaField,
|
1528
|
+
WatchField,
|
1529
|
+
appendErrors,
|
1530
|
+
createField,
|
1531
|
+
createForm,
|
1532
|
+
createStepForm,
|
1533
|
+
defaultFieldTypes,
|
1534
|
+
objectFieldResolver,
|
1535
|
+
useArrayField,
|
1536
|
+
useArrayFieldAddButton,
|
1537
|
+
useArrayFieldContext,
|
1538
|
+
useArrayFieldRemoveButton,
|
1539
|
+
useArrayFieldRow,
|
1540
|
+
useArrayFieldRowContext,
|
1541
|
+
useController,
|
1542
|
+
useField,
|
1543
|
+
useFieldArray2 as useFieldArray,
|
1544
|
+
useForm2 as useForm,
|
1545
|
+
useFormContext,
|
1546
|
+
useFormState,
|
1547
|
+
useFormStep,
|
1548
|
+
useStepForm,
|
1549
|
+
useStepFormContext,
|
1550
|
+
useWatch3 as useWatch
|
1551
|
+
};
|
1236
1552
|
//# sourceMappingURL=index.mjs.map
|