@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
- autoFocus,
11
- clearable,
10
+ validate,
11
+ regex: regexes,
12
+ id,
12
13
  className,
13
14
  tabIndex,
14
- 'data-testid': dataTestId,
15
- disabled,
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
- onChange,
36
+ onRandomize,
21
37
  minLength,
22
38
  maxLength,
23
- name,
24
- onFocus,
25
- onBlur,
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>>({ autoFocus, clearable, className, tabIndex, "data-testid": dataTestId, disabled, helper, label, labelDescription, loading, onChange, minLength, maxLength, name, onFocus, onBlur, placeholder, readOnly, required, success, tooltip, type, validate, regex: regexes, }: TextInputFieldProps<TFieldValues, TName>) => _emotion_react_jsx_runtime.JSX.Element;
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.1",
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.50.1"
39
+ "react-hook-form": "7.51.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@babel/core": "7.23.9",
42
+ "@babel/core": "7.24.0",
43
43
  "@types/final-form-focus": "1.1.7",
44
- "@types/react": "18.2.55",
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.23.9",
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.50.1",
56
- "@ultraviolet/ui": "1.40.0"
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",