@ultraviolet/form 2.8.1 → 2.8.3
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.
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SelectableCardGroup } from '@ultraviolet/ui';
|
|
2
|
+
import { useController } from 'react-hook-form';
|
|
3
|
+
import { jsx } from '@emotion/react/jsx-runtime';
|
|
4
|
+
import { useErrors } from '../../providers/ErrorContext/index.js';
|
|
5
|
+
|
|
6
|
+
const SelectableCardGroupField = ({
|
|
7
|
+
className,
|
|
8
|
+
legend,
|
|
9
|
+
name,
|
|
10
|
+
onChange,
|
|
11
|
+
required = false,
|
|
12
|
+
rules,
|
|
13
|
+
children,
|
|
14
|
+
label = '',
|
|
15
|
+
error: customError,
|
|
16
|
+
helper,
|
|
17
|
+
columns = 1,
|
|
18
|
+
showTick,
|
|
19
|
+
type = 'radio',
|
|
20
|
+
shouldUnregister = false
|
|
21
|
+
}) => {
|
|
22
|
+
const {
|
|
23
|
+
getError
|
|
24
|
+
} = useErrors();
|
|
25
|
+
const {
|
|
26
|
+
field,
|
|
27
|
+
fieldState: {
|
|
28
|
+
error
|
|
29
|
+
}
|
|
30
|
+
} = useController({
|
|
31
|
+
name,
|
|
32
|
+
shouldUnregister,
|
|
33
|
+
rules: {
|
|
34
|
+
required,
|
|
35
|
+
...rules
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return jsx(SelectableCardGroup, {
|
|
39
|
+
legend: legend,
|
|
40
|
+
name: name,
|
|
41
|
+
type: type,
|
|
42
|
+
showTick: showTick,
|
|
43
|
+
value: field.value,
|
|
44
|
+
onChange: event => {
|
|
45
|
+
if (type === 'checkbox') {
|
|
46
|
+
const fieldValue = field.value ?? [];
|
|
47
|
+
if (fieldValue?.includes(event.currentTarget.value)) {
|
|
48
|
+
field.onChange(fieldValue?.filter(currentValue => currentValue !== event.currentTarget.value));
|
|
49
|
+
} else {
|
|
50
|
+
field.onChange([...fieldValue, event.currentTarget.value]);
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
field.onChange(event);
|
|
54
|
+
}
|
|
55
|
+
onChange?.(event);
|
|
56
|
+
},
|
|
57
|
+
error: getError({
|
|
58
|
+
label
|
|
59
|
+
}, error) ?? customError,
|
|
60
|
+
className: className,
|
|
61
|
+
columns: columns,
|
|
62
|
+
helper: helper,
|
|
63
|
+
required: required,
|
|
64
|
+
children: children
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
SelectableCardGroupField.Card = SelectableCardGroup.Card;
|
|
68
|
+
|
|
69
|
+
export { SelectableCardGroupField };
|
|
@@ -7,30 +7,38 @@ import { useErrors } from '../../providers/ErrorContext/index.js';
|
|
|
7
7
|
* This component offers a form field based on Ultraviolet UI TextInputV2 component
|
|
8
8
|
*/
|
|
9
9
|
const TextInputField = ({
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
validate,
|
|
11
|
+
regex: regexes,
|
|
12
|
+
id,
|
|
12
13
|
className,
|
|
13
14
|
tabIndex,
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
onChange,
|
|
16
|
+
placeholder,
|
|
17
|
+
disabled = false,
|
|
18
|
+
readOnly = false,
|
|
19
|
+
success,
|
|
16
20
|
helper,
|
|
21
|
+
tooltip,
|
|
17
22
|
label,
|
|
23
|
+
autoFocus,
|
|
24
|
+
required = false,
|
|
25
|
+
'data-testid': dataTestId,
|
|
26
|
+
name,
|
|
27
|
+
onFocus,
|
|
28
|
+
onBlur,
|
|
29
|
+
clearable = false,
|
|
18
30
|
labelDescription,
|
|
31
|
+
type = 'text',
|
|
32
|
+
prefix,
|
|
33
|
+
suffix,
|
|
34
|
+
size = 'large',
|
|
19
35
|
loading,
|
|
20
|
-
|
|
36
|
+
onRandomize,
|
|
21
37
|
minLength,
|
|
22
38
|
maxLength,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
placeholder,
|
|
27
|
-
readOnly,
|
|
28
|
-
required,
|
|
29
|
-
success,
|
|
30
|
-
tooltip,
|
|
31
|
-
type,
|
|
32
|
-
validate,
|
|
33
|
-
regex: regexes
|
|
39
|
+
'aria-labelledby': ariaLabelledBy,
|
|
40
|
+
'aria-label': ariaLabel,
|
|
41
|
+
autoComplete
|
|
34
42
|
}) => {
|
|
35
43
|
const {
|
|
36
44
|
getError
|
|
@@ -92,7 +100,15 @@ const TextInputField = ({
|
|
|
92
100
|
tabIndex: tabIndex,
|
|
93
101
|
tooltip: tooltip,
|
|
94
102
|
type: type,
|
|
95
|
-
value: field.value
|
|
103
|
+
value: field.value,
|
|
104
|
+
id: id,
|
|
105
|
+
prefix: prefix,
|
|
106
|
+
suffix: suffix,
|
|
107
|
+
size: size,
|
|
108
|
+
onRandomize: onRandomize,
|
|
109
|
+
"aria-label": ariaLabel,
|
|
110
|
+
"aria-labelledby": ariaLabelledBy,
|
|
111
|
+
autoComplete: autoComplete
|
|
96
112
|
});
|
|
97
113
|
};
|
|
98
114
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
|
|
2
|
-
import { Checkbox, CheckboxGroup, DateInput, Radio, SelectInput, SelectableCard, NumberInput, NumberInputV2, TagInput, TextArea, TextInput, TextInputV2, TimeInput, Toggle, Button, RadioGroup } from '@ultraviolet/ui';
|
|
2
|
+
import { Checkbox, CheckboxGroup, DateInput, Radio, SelectInput, SelectableCard, NumberInput, NumberInputV2, TagInput, TextArea, TextInput, TextInputV2, TimeInput, Toggle, Button, RadioGroup, SelectableCardGroup } from '@ultraviolet/ui';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { ComponentProps, ReactNode, FocusEvent, ForwardedRef, FocusEventHandler, Ref, JSX } from 'react';
|
|
5
5
|
import * as react_hook_form from 'react-hook-form';
|
|
@@ -301,7 +301,7 @@ type TextInputFieldProps<TFieldValues extends FieldValues, TName extends FieldPa
|
|
|
301
301
|
/**
|
|
302
302
|
* This component offers a form field based on Ultraviolet UI TextInputV2 component
|
|
303
303
|
*/
|
|
304
|
-
declare const TextInputField: <TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({
|
|
304
|
+
declare const TextInputField: <TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ validate, regex: regexes, id, className, tabIndex, onChange, placeholder, disabled, readOnly, success, helper, tooltip, label, autoFocus, required, "data-testid": dataTestId, name, onFocus, onBlur, clearable, labelDescription, type, prefix, suffix, size, loading, onRandomize, minLength, maxLength, "aria-labelledby": ariaLabelledBy, "aria-label": ariaLabel, autoComplete, }: TextInputFieldProps<TFieldValues, TName>) => _emotion_react_jsx_runtime.JSX.Element;
|
|
305
305
|
|
|
306
306
|
type TimeFieldProps<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>> = BaseFieldProps<TFieldValues, TName> & Omit<ComponentProps<typeof TimeInput>, 'onChange'> & {
|
|
307
307
|
name: string;
|
|
@@ -382,6 +382,44 @@ type KeyValueFieldProps<TFieldValues extends FieldValues, TFieldArrayName extend
|
|
|
382
382
|
*/
|
|
383
383
|
declare const KeyValueField: <TFieldValues extends FieldValues = FieldValues, TFieldArrayName extends FieldArrayPath<TFieldValues> = FieldArrayPath<TFieldValues>>({ name, inputKey, inputValue, addButton, maxSize, readonly, control, }: KeyValueFieldProps<TFieldValues, TFieldArrayName>) => _emotion_react_jsx_runtime.JSX.Element;
|
|
384
384
|
|
|
385
|
+
type SelectableCardGroupFieldProps<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>> = BaseFieldProps<TFieldValues, TName> & Omit<BaseFieldProps<TFieldValues, TName>, 'label' | 'onChange'> & Partial<Pick<ComponentProps<typeof SelectableCardGroup>, 'helper' | 'error' | 'columns' | 'children' | 'showTick' | 'type' | 'className' | 'onChange'>> & Pick<ComponentProps<typeof SelectableCardGroup>, 'legend'>;
|
|
386
|
+
declare const SelectableCardGroupField: {
|
|
387
|
+
<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ className, legend, name, onChange, required, rules, children, label, error: customError, helper, columns, showTick, type, shouldUnregister, }: SelectableCardGroupFieldProps<TFieldValues, TName>): JSX.Element;
|
|
388
|
+
Card: ({ value, disabled, children, className, isError, onFocus, onBlur, tooltip, id, label, "data-testid": dataTestId, }: {
|
|
389
|
+
value: string | number;
|
|
390
|
+
onBlur?: react.FocusEventHandler<HTMLInputElement> | undefined;
|
|
391
|
+
disabled?: boolean | undefined;
|
|
392
|
+
children?: react.ReactNode | (({ disabled, checked, }: Pick<{
|
|
393
|
+
name?: string | undefined;
|
|
394
|
+
children?: react.ReactNode | any;
|
|
395
|
+
value: string | number;
|
|
396
|
+
onChange: react.ChangeEventHandler<HTMLInputElement>;
|
|
397
|
+
showTick?: boolean | undefined;
|
|
398
|
+
type?: "checkbox" | "radio" | undefined;
|
|
399
|
+
disabled?: boolean | undefined;
|
|
400
|
+
checked?: boolean | undefined;
|
|
401
|
+
className?: string | undefined;
|
|
402
|
+
isError?: boolean | undefined;
|
|
403
|
+
onFocus?: react.FocusEventHandler<HTMLInputElement> | undefined;
|
|
404
|
+
onBlur?: react.FocusEventHandler<HTMLInputElement> | undefined;
|
|
405
|
+
id?: string | undefined;
|
|
406
|
+
tooltip?: string | undefined;
|
|
407
|
+
label?: react.ReactNode;
|
|
408
|
+
'data-testid'?: string | undefined;
|
|
409
|
+
}, "disabled" | "checked">) => react.ReactNode);
|
|
410
|
+
className?: string | undefined;
|
|
411
|
+
ref?: react.LegacyRef<HTMLDivElement> | undefined;
|
|
412
|
+
name?: string | undefined;
|
|
413
|
+
label?: react.ReactNode;
|
|
414
|
+
onFocus?: react.FocusEventHandler<HTMLInputElement> | undefined;
|
|
415
|
+
id?: string | undefined;
|
|
416
|
+
'data-testid'?: string | undefined;
|
|
417
|
+
tooltip?: string | undefined;
|
|
418
|
+
key?: react.Key | null | undefined;
|
|
419
|
+
isError?: boolean | undefined;
|
|
420
|
+
}) => _emotion_react_jsx_runtime.JSX.Element;
|
|
421
|
+
};
|
|
422
|
+
|
|
385
423
|
type ErrorContextValue = {
|
|
386
424
|
errors: RequiredErrors;
|
|
387
425
|
getError: (meta: MetaField, error?: FieldError) => string | undefined;
|
|
@@ -508,4 +546,4 @@ declare const useFieldArrayDeprecated: <T, TFieldValues extends FieldValues = Fi
|
|
|
508
546
|
};
|
|
509
547
|
};
|
|
510
548
|
|
|
511
|
-
export { type BaseFieldProps, CheckboxField, CheckboxGroupField, DateField, ErrorProvider, FORM_ERROR, Form, type FormErrors, type FormProps, KeyValueField, NumberInputField, NumberInputFieldV2, RadioField, RadioGroupField, SelectInputField, SelectableCardField, Submit, SubmitErrorAlert, TagInputField, TextAreaField, TextInputField$1 as TextInputField, TextInputField as TextInputFieldV2, TimeField, ToggleField, useErrors, useFieldArrayDeprecated, useFieldDeprecated, useFormDeprecated, useFormStateDeprecated, useOnFieldChange };
|
|
549
|
+
export { type BaseFieldProps, CheckboxField, CheckboxGroupField, DateField, ErrorProvider, FORM_ERROR, Form, type FormErrors, type FormProps, KeyValueField, NumberInputField, NumberInputFieldV2, RadioField, RadioGroupField, SelectInputField, SelectableCardField, SelectableCardGroupField, Submit, SubmitErrorAlert, TagInputField, TextAreaField, TextInputField$1 as TextInputField, TextInputField as TextInputFieldV2, TimeField, ToggleField, useErrors, useFieldArrayDeprecated, useFieldDeprecated, useFormDeprecated, useFormStateDeprecated, useOnFieldChange };
|
package/dist/index.js
CHANGED
|
@@ -25,3 +25,4 @@ export { ToggleField } from './components/ToggleField/index.js';
|
|
|
25
25
|
export { Submit } from './components/Submit/index.js';
|
|
26
26
|
export { RadioGroupField } from './components/RadioGroupField/index.js';
|
|
27
27
|
export { KeyValueField } from './components/KeyValueField/index.js';
|
|
28
|
+
export { SelectableCardGroupField } from './components/SelectableCardGroupField/index.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ultraviolet/form",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.3",
|
|
4
4
|
"description": "Ultraviolet Form",
|
|
5
5
|
"homepage": "https://github.com/scaleway/ultraviolet#readme",
|
|
6
6
|
"repository": {
|
|
@@ -36,24 +36,24 @@
|
|
|
36
36
|
"@emotion/styled": "11.11.0",
|
|
37
37
|
"react": "18.x",
|
|
38
38
|
"react-dom": "18.x",
|
|
39
|
-
"react-hook-form": "7.
|
|
39
|
+
"react-hook-form": "7.51.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@babel/core": "7.
|
|
42
|
+
"@babel/core": "7.24.0",
|
|
43
43
|
"@types/final-form-focus": "1.1.7",
|
|
44
|
-
"@types/react": "18.2.
|
|
44
|
+
"@types/react": "18.2.61",
|
|
45
45
|
"@types/react-dom": "18.2.19",
|
|
46
46
|
"react": "18.2.0",
|
|
47
47
|
"react-dom": "18.2.0"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@babel/runtime": "7.
|
|
50
|
+
"@babel/runtime": "7.24.0",
|
|
51
51
|
"@emotion/babel-plugin": "11.11.0",
|
|
52
52
|
"@emotion/react": "11.11.4",
|
|
53
53
|
"@emotion/styled": "11.11.0",
|
|
54
54
|
"react-select": "5.8.0",
|
|
55
|
-
"react-hook-form": "7.
|
|
56
|
-
"@ultraviolet/ui": "1.
|
|
55
|
+
"react-hook-form": "7.51.0",
|
|
56
|
+
"@ultraviolet/ui": "1.41.0"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"build": "rollup -c ../../rollup.config.mjs",
|