@ultraviolet/form 2.13.3 → 2.13.4

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.
@@ -40,50 +40,40 @@ const SelectInputField = ({
40
40
  shouldUnregister = false,
41
41
  "data-testid": dataTestId
42
42
  }) => {
43
- const options = useMemo(
44
- () => optionsProp || Children.toArray(children).flat().filter(Boolean).map(({ props: { children: labelChild, ...option } }) => ({
45
- ...option,
46
- label: labelChild
47
- })),
48
- [optionsProp, children]
49
- );
50
- const parse = useMemo(
51
- () => multiple ? parseProp : (option) => parseProp(option?.value ?? null, name),
52
- [multiple, parseProp, name]
53
- );
54
- const format = useCallback(
55
- (val) => {
56
- if (multiple)
57
- return formatProp(val, name);
58
- const find = (opts, valueToFind) => opts?.find(
59
- (option) => option.value === valueToFind
60
- );
61
- let selected = "";
62
- if (val && options) {
63
- selected = find(
64
- options,
65
- val
66
- );
67
- if (!selected) {
68
- selected = options.map(
69
- (curr) => find(
70
- curr.options,
71
- val
72
- )
73
- ).filter(identity);
74
- if (Array.isArray(selected) && selected.length === 0) {
75
- selected = "";
76
- }
43
+ const options = useMemo(() => optionsProp || Children.toArray(children).flat().filter(Boolean).map(({
44
+ props: {
45
+ children: labelChild,
46
+ ...option
47
+ }
48
+ }) => ({
49
+ ...option,
50
+ label: labelChild
51
+ })), [optionsProp, children]);
52
+ const parse = useMemo(() => multiple ? parseProp : (option) => parseProp(option?.value ?? null, name), [multiple, parseProp, name]);
53
+ const format = useCallback((val) => {
54
+ if (multiple)
55
+ return formatProp(val, name);
56
+ const find = (opts, valueToFind) => opts?.find((option) => option.value === valueToFind);
57
+ let selected = "";
58
+ if (val && options) {
59
+ selected = find(options, val);
60
+ if (!selected) {
61
+ selected = options.map((curr) => find(curr.options, val)).filter(identity);
62
+ if (Array.isArray(selected) && selected.length === 0) {
63
+ selected = "";
77
64
  }
78
65
  }
79
- return formatProp(selected, name);
80
- },
81
- [formatProp, multiple, name, options]
82
- );
83
- const { getError } = useErrors();
66
+ }
67
+ return formatProp(selected, name);
68
+ }, [formatProp, multiple, name, options]);
69
+ const {
70
+ getError
71
+ } = useErrors();
84
72
  const {
85
73
  field,
86
- fieldState: { error }
74
+ fieldState: {
75
+ error
76
+ }
87
77
  } = useController({
88
78
  name,
89
79
  shouldUnregister,
@@ -94,44 +84,17 @@ const SelectInputField = ({
94
84
  ...rules
95
85
  }
96
86
  });
97
- return /* @__PURE__ */ jsx(
98
- SelectInput,
99
- {
100
- name: field.name,
101
- animation,
102
- animationDuration,
103
- animationOnChange,
104
- className,
105
- disabled,
106
- error: getError({ label, minLength, maxLength }, error),
107
- id,
108
- inputId,
109
- isClearable,
110
- isLoading,
111
- isMulti: multiple,
112
- customStyle,
113
- isSearchable,
114
- menuPortalTarget,
115
- onBlur: (event) => {
116
- field.onBlur();
117
- onBlur?.(event);
118
- },
119
- onChange: (event, action) => {
120
- field.onChange(parse(event));
121
- onChange?.(event, action);
122
- },
123
- onFocus,
124
- options,
125
- placeholder,
126
- readOnly,
127
- noTopLabel,
128
- required,
129
- value: format(field.value),
130
- emptyState,
131
- "data-testid": dataTestId,
132
- children
133
- }
134
- );
87
+ return /* @__PURE__ */ jsx(SelectInput, { name: field.name, animation, animationDuration, animationOnChange, className, disabled, error: getError({
88
+ label,
89
+ minLength,
90
+ maxLength
91
+ }, error), id, inputId, isClearable, isLoading, isMulti: multiple, customStyle, isSearchable, menuPortalTarget, onBlur: (event) => {
92
+ field.onBlur();
93
+ onBlur?.(event);
94
+ }, onChange: (event, action) => {
95
+ field.onChange(parse(event));
96
+ onChange?.(event, action);
97
+ }, onFocus, options, placeholder, readOnly, noTopLabel, required, value: format(field.value), emptyState, "data-testid": dataTestId, children });
135
98
  };
136
99
  SelectInputField.Option = SelectInput.Option;
137
100
  export {
@@ -40,7 +40,9 @@ const SelectInputFieldV2 = ({
40
40
  }) => {
41
41
  const {
42
42
  field,
43
- fieldState: { error }
43
+ fieldState: {
44
+ error
45
+ }
44
46
  } = useController({
45
47
  name,
46
48
  shouldUnregister,
@@ -49,55 +51,19 @@ const SelectInputFieldV2 = ({
49
51
  ...rules
50
52
  }
51
53
  });
52
- const { getError } = useErrors();
53
- const handleChange = useCallback(
54
- (value) => {
55
- onChange?.(value);
56
- field.onChange(value);
57
- },
58
- [onChange, field]
59
- );
60
- return /* @__PURE__ */ jsx(
61
- SelectInputV2,
62
- {
63
- name: field.name,
64
- options,
65
- required,
66
- size,
67
- "data-testid": dataTestId,
68
- className,
69
- disabled,
70
- id,
71
- label,
72
- onFocus,
73
- onBlur: (event) => {
74
- field.onBlur();
75
- onBlur?.(event);
76
- },
77
- placeholder,
78
- readOnly,
79
- multiselect,
80
- value: field.value,
81
- placeholderSearch,
82
- helper,
83
- emptyState,
84
- searchable,
85
- clearable,
86
- descriptionDirection,
87
- footer,
88
- labelDescription,
89
- error: getError({ label }, error),
90
- success,
91
- loadMore,
92
- isLoading,
93
- selectAll,
94
- selectAllGroup,
95
- autofocus,
96
- optionalInfoPlacement,
97
- "aria-label": ariaLabel,
98
- onChange: handleChange
99
- }
100
- );
54
+ const {
55
+ getError
56
+ } = useErrors();
57
+ const handleChange = useCallback((value) => {
58
+ onChange?.(value);
59
+ field.onChange(value);
60
+ }, [onChange, field]);
61
+ return /* @__PURE__ */ jsx(SelectInputV2, { name: field.name, options, required, size, "data-testid": dataTestId, className, disabled, id, label, onFocus, onBlur: (event) => {
62
+ field.onBlur();
63
+ onBlur?.(event);
64
+ }, placeholder, readOnly, multiselect, value: field.value, placeholderSearch, helper, emptyState, searchable, clearable, descriptionDirection, footer, labelDescription, error: getError({
65
+ label
66
+ }, error), success, loadMore, isLoading, selectAll, selectAllGroup, autofocus, optionalInfoPlacement, "aria-label": ariaLabel, onChange: handleChange });
101
67
  };
102
68
  export {
103
69
  SelectInputFieldV2
@@ -22,7 +22,9 @@ const SelectableCardField = ({
22
22
  }) => {
23
23
  const {
24
24
  field,
25
- fieldState: { error }
25
+ fieldState: {
26
+ error
27
+ }
26
28
  } = useController({
27
29
  name,
28
30
  shouldUnregister,
@@ -32,48 +34,24 @@ const SelectableCardField = ({
32
34
  }
33
35
  });
34
36
  const isChecked = type === "checkbox" && Array.isArray(field.value) && value ? (field.value ?? []).includes(value) : field.value === value;
35
- return /* @__PURE__ */ jsx(
36
- SelectableCard,
37
- {
38
- isError: !!error,
39
- showTick,
40
- checked: isChecked,
41
- className,
42
- disabled,
43
- onChange: (event) => {
44
- if (type === "checkbox") {
45
- const fieldValue = field.value ?? [];
46
- if (fieldValue?.includes(event.currentTarget.value)) {
47
- field.onChange(
48
- fieldValue?.filter(
49
- (currentValue) => currentValue !== event.currentTarget.value
50
- )
51
- );
52
- } else {
53
- field.onChange([...fieldValue, event.currentTarget.value]);
54
- }
55
- } else {
56
- field.onChange(event);
57
- }
58
- onChange?.(event);
59
- },
60
- onBlur: (event) => {
61
- field.onBlur();
62
- onBlur?.(event);
63
- },
64
- onFocus: (event) => {
65
- onFocus?.(event);
66
- },
67
- type,
68
- id,
69
- tooltip,
70
- label,
71
- value: value ?? "",
72
- name: field.name,
73
- "data-testid": dataTestId,
74
- children
37
+ return /* @__PURE__ */ jsx(SelectableCard, { isError: !!error, showTick, checked: isChecked, className, disabled, onChange: (event) => {
38
+ if (type === "checkbox") {
39
+ const fieldValue = field.value ?? [];
40
+ if (fieldValue?.includes(event.currentTarget.value)) {
41
+ field.onChange(fieldValue?.filter((currentValue) => currentValue !== event.currentTarget.value));
42
+ } else {
43
+ field.onChange([...fieldValue, event.currentTarget.value]);
44
+ }
45
+ } else {
46
+ field.onChange(event);
75
47
  }
76
- );
48
+ onChange?.(event);
49
+ }, onBlur: (event) => {
50
+ field.onBlur();
51
+ onBlur?.(event);
52
+ }, onFocus: (event) => {
53
+ onFocus?.(event);
54
+ }, type, id, tooltip, label, value: value ?? "", name: field.name, "data-testid": dataTestId, children });
77
55
  };
78
56
  export {
79
57
  SelectableCardField
@@ -18,10 +18,14 @@ const SelectableCardGroupField = ({
18
18
  type = "radio",
19
19
  shouldUnregister = false
20
20
  }) => {
21
- const { getError } = useErrors();
21
+ const {
22
+ getError
23
+ } = useErrors();
22
24
  const {
23
25
  field,
24
- fieldState: { error }
26
+ fieldState: {
27
+ error
28
+ }
25
29
  } = useController({
26
30
  name,
27
31
  shouldUnregister,
@@ -30,39 +34,21 @@ const SelectableCardGroupField = ({
30
34
  ...rules
31
35
  }
32
36
  });
33
- return /* @__PURE__ */ jsx(
34
- SelectableCardGroup,
35
- {
36
- legend,
37
- name,
38
- type,
39
- showTick,
40
- value: field.value,
41
- onChange: (event) => {
42
- if (type === "checkbox") {
43
- const fieldValue = field.value ?? [];
44
- if (fieldValue?.includes(event.currentTarget.value)) {
45
- field.onChange(
46
- fieldValue?.filter(
47
- (currentValue) => currentValue !== event.currentTarget.value
48
- )
49
- );
50
- } else {
51
- field.onChange([...fieldValue, event.currentTarget.value]);
52
- }
53
- } else {
54
- field.onChange(event);
55
- }
56
- onChange?.(event);
57
- },
58
- error: getError({ label }, error) ?? customError,
59
- className,
60
- columns,
61
- helper,
62
- required,
63
- children
37
+ return /* @__PURE__ */ jsx(SelectableCardGroup, { legend, name, type, showTick, value: field.value, onChange: (event) => {
38
+ if (type === "checkbox") {
39
+ const fieldValue = field.value ?? [];
40
+ if (fieldValue?.includes(event.currentTarget.value)) {
41
+ field.onChange(fieldValue?.filter((currentValue) => currentValue !== event.currentTarget.value));
42
+ } else {
43
+ field.onChange([...fieldValue, event.currentTarget.value]);
44
+ }
45
+ } else {
46
+ field.onChange(event);
64
47
  }
65
- );
48
+ onChange?.(event);
49
+ }, error: getError({
50
+ label
51
+ }, error) ?? customError, className, columns, helper, required, children });
66
52
  };
67
53
  SelectableCardGroupField.Card = SelectableCardGroup.Card;
68
54
  export {
@@ -14,26 +14,12 @@ const Submit = ({
14
14
  fullWidth,
15
15
  onClick
16
16
  }) => {
17
- const { isSubmitting, isValid } = useFormState();
17
+ const {
18
+ isSubmitting,
19
+ isValid
20
+ } = useFormState();
18
21
  const isDisabled = disabled || isSubmitting || !isValid;
19
- return /* @__PURE__ */ jsx(
20
- Button,
21
- {
22
- className,
23
- disabled: isDisabled,
24
- icon,
25
- iconPosition,
26
- isLoading: isSubmitting,
27
- size,
28
- type: "submit",
29
- variant,
30
- sentiment,
31
- tooltip,
32
- fullWidth,
33
- onClick,
34
- children
35
- }
36
- );
22
+ return /* @__PURE__ */ jsx(Button, { className, disabled: isDisabled, icon, iconPosition, isLoading: isSubmitting, size, type: "submit", variant, sentiment, tooltip, fullWidth, onClick, children });
37
23
  };
38
24
  export {
39
25
  Submit
@@ -1,8 +1,12 @@
1
1
  import { jsx } from "@emotion/react/jsx-runtime";
2
2
  import { Alert } from "@ultraviolet/ui";
3
3
  import { useFormState } from "react-hook-form";
4
- const SubmitErrorAlert = ({ className }) => {
5
- const { errors } = useFormState();
4
+ const SubmitErrorAlert = ({
5
+ className
6
+ }) => {
7
+ const {
8
+ errors
9
+ } = useFormState();
6
10
  return errors?.root?.["submit"]?.message ? /* @__PURE__ */ jsx(Alert, { className, sentiment: "danger", children: errors.root["submit"].message }) : null;
7
11
  };
8
12
  export {
@@ -22,10 +22,14 @@ const TagInputField = ({
22
22
  readOnly,
23
23
  tooltip
24
24
  }) => {
25
- const { getError } = useErrors();
25
+ const {
26
+ getError
27
+ } = useErrors();
26
28
  const {
27
29
  field,
28
- fieldState: { error }
30
+ fieldState: {
31
+ error
32
+ }
29
33
  } = useController({
30
34
  name,
31
35
  rules: {
@@ -34,31 +38,12 @@ const TagInputField = ({
34
38
  ...rules
35
39
  }
36
40
  });
37
- return /* @__PURE__ */ jsx(
38
- TagInput,
39
- {
40
- name: field.name,
41
- className,
42
- disabled,
43
- id,
44
- onChange: (newTags) => {
45
- field.onChange(newTags);
46
- onChange?.(newTags);
47
- },
48
- placeholder,
49
- variant,
50
- value: field.value,
51
- "data-testid": dataTestId,
52
- clearable,
53
- label,
54
- labelDescription,
55
- size,
56
- success,
57
- error: getError({ label: label ?? "" }, error),
58
- readOnly,
59
- tooltip
60
- }
61
- );
41
+ return /* @__PURE__ */ jsx(TagInput, { name: field.name, className, disabled, id, onChange: (newTags) => {
42
+ field.onChange(newTags);
43
+ onChange?.(newTags);
44
+ }, placeholder, variant, value: field.value, "data-testid": dataTestId, clearable, label, labelDescription, size, success, error: getError({
45
+ label: label ?? ""
46
+ }, error), readOnly, tooltip });
62
47
  };
63
48
  export {
64
49
  TagInputField
@@ -27,19 +27,21 @@ const TextAreaField = ({
27
27
  validate,
28
28
  regex: regexes
29
29
  }) => {
30
- const { getError } = useErrors();
30
+ const {
31
+ getError
32
+ } = useErrors();
31
33
  const {
32
34
  field,
33
- fieldState: { error }
35
+ fieldState: {
36
+ error
37
+ }
34
38
  } = useController({
35
39
  name,
36
40
  rules: {
37
41
  required,
38
42
  validate: {
39
43
  ...regexes ? {
40
- pattern: (value) => regexes.every(
41
- (regex) => value === void 0 || value === "" || (Array.isArray(regex) ? regex.some((regexOr) => regexOr.test(value)) : regex.test(value))
42
- )
44
+ pattern: (value) => regexes.every((regex) => value === void 0 || value === "" || (Array.isArray(regex) ? regex.some((regexOr) => regexOr.test(value)) : regex.test(value)))
43
45
  } : {},
44
46
  ...validate
45
47
  },
@@ -47,51 +49,21 @@ const TextAreaField = ({
47
49
  maxLength
48
50
  }
49
51
  });
50
- return /* @__PURE__ */ jsx(
51
- TextArea,
52
- {
53
- autoFocus,
54
- className,
55
- clearable,
56
- "data-testid": dataTestId,
57
- disabled,
58
- error: getError(
59
- {
60
- regex: regexes,
61
- minLength,
62
- maxLength,
63
- label,
64
- value: field.value
65
- },
66
- error
67
- ),
68
- helper,
69
- label,
70
- labelDescription,
71
- minLength,
72
- maxLength,
73
- name,
74
- onBlur: (event) => {
75
- onBlur?.(event);
76
- field.onBlur();
77
- },
78
- onChange: (event) => {
79
- field.onChange(event);
80
- onChange?.(event);
81
- },
82
- onFocus: (event) => {
83
- onFocus?.(event);
84
- },
85
- placeholder,
86
- readOnly,
87
- required,
88
- rows,
89
- success,
90
- tabIndex,
91
- tooltip,
92
- value: field.value
93
- }
94
- );
52
+ return /* @__PURE__ */ jsx(TextArea, { autoFocus, className, clearable, "data-testid": dataTestId, disabled, error: getError({
53
+ regex: regexes,
54
+ minLength,
55
+ maxLength,
56
+ label,
57
+ value: field.value
58
+ }, error), helper, label, labelDescription, minLength, maxLength, name, onBlur: (event) => {
59
+ onBlur?.(event);
60
+ field.onBlur();
61
+ }, onChange: (event) => {
62
+ field.onChange(event);
63
+ onChange?.(event);
64
+ }, onFocus: (event) => {
65
+ onFocus?.(event);
66
+ }, placeholder, readOnly, required, rows, success, tabIndex, tooltip, value: field.value });
95
67
  };
96
68
  export {
97
69
  TextAreaField
@@ -50,10 +50,14 @@ const TextInputField = ({
50
50
  shouldUnregister = false,
51
51
  "data-testid": dataTestId
52
52
  }) => {
53
- const { getError } = useErrors();
53
+ const {
54
+ getError
55
+ } = useErrors();
54
56
  const {
55
57
  field,
56
- fieldState: { error }
58
+ fieldState: {
59
+ error
60
+ }
57
61
  } = useController({
58
62
  name,
59
63
  defaultValue,
@@ -62,9 +66,7 @@ const TextInputField = ({
62
66
  required,
63
67
  validate: {
64
68
  ...regexes ? {
65
- pattern: (value) => regexes.every(
66
- (regex) => value === void 0 || value === "" || (Array.isArray(regex) ? regex.some((regexOr) => regexOr.test(value)) : regex.test(value))
67
- )
69
+ pattern: (value) => regexes.every((regex) => value === void 0 || value === "" || (Array.isArray(regex) ? regex.some((regexOr) => regexOr.test(value)) : regex.test(value)))
68
70
  } : {},
69
71
  ...validate
70
72
  },
@@ -81,73 +83,31 @@ const TextInputField = ({
81
83
  }
82
84
  return field.value;
83
85
  };
84
- return /* @__PURE__ */ jsx(
85
- TextInput,
86
- {
87
- name: field.name,
88
- autoCapitalize,
89
- autoComplete,
90
- autoCorrect,
91
- autoFocus,
92
- autoSave,
93
- className,
94
- cols,
95
- disabled,
96
- error: customError ?? getError(
97
- {
98
- regex: regexes,
99
- minLength,
100
- maxLength,
101
- label,
102
- min,
103
- max,
104
- value: field.value
105
- },
106
- error
107
- ),
108
- fillAvailable,
109
- generated,
110
- id,
111
- label,
112
- multiline,
113
- notice,
114
- required,
115
- onBlur: (event) => {
116
- field.onBlur();
117
- onBlur?.(event);
118
- if (formatOnBlur && format) {
119
- field.onChange(format(field.value));
120
- }
121
- },
122
- onChange: (event) => {
123
- if (parse) {
124
- field.onChange(parse(event));
125
- onChange?.(parse(event));
126
- } else {
127
- field.onChange(event);
128
- onChange?.(event);
129
- }
130
- },
131
- onFocus: (event) => {
132
- onFocus?.(event);
133
- },
134
- onKeyUp,
135
- onKeyDown,
136
- placeholder,
137
- random,
138
- readOnly,
139
- resizable,
140
- rows,
141
- type,
142
- noTopLabel,
143
- unit,
144
- valid,
145
- size,
146
- value: transformedValue(),
147
- ref: innerRef,
148
- "data-testid": dataTestId
86
+ return /* @__PURE__ */ jsx(TextInput, { name: field.name, autoCapitalize, autoComplete, autoCorrect, autoFocus, autoSave, className, cols, disabled, error: customError ?? getError({
87
+ regex: regexes,
88
+ minLength,
89
+ maxLength,
90
+ label,
91
+ min,
92
+ max,
93
+ value: field.value
94
+ }, error), fillAvailable, generated, id, label, multiline, notice, required, onBlur: (event) => {
95
+ field.onBlur();
96
+ onBlur?.(event);
97
+ if (formatOnBlur && format) {
98
+ field.onChange(format(field.value));
99
+ }
100
+ }, onChange: (event) => {
101
+ if (parse) {
102
+ field.onChange(parse(event));
103
+ onChange?.(parse(event));
104
+ } else {
105
+ field.onChange(event);
106
+ onChange?.(event);
149
107
  }
150
- );
108
+ }, onFocus: (event) => {
109
+ onFocus?.(event);
110
+ }, onKeyUp, onKeyDown, placeholder, random, readOnly, resizable, rows, type, noTopLabel, unit, valid, size, value: transformedValue(), ref: innerRef, "data-testid": dataTestId });
151
111
  };
152
112
  export {
153
113
  TextInputField