@ultraviolet/form 2.8.2 → 2.8.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.
@@ -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 };
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';
@@ -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.2",
3
+ "version": "2.8.4",
4
4
  "description": "Ultraviolet Form",
5
5
  "homepage": "https://github.com/scaleway/ultraviolet#readme",
6
6
  "repository": {
@@ -36,7 +36,7 @@
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
42
  "@babel/core": "7.24.0",
@@ -52,8 +52,8 @@
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.1"
55
+ "react-hook-form": "7.51.0",
56
+ "@ultraviolet/ui": "1.41.1"
57
57
  },
58
58
  "scripts": {
59
59
  "build": "rollup -c ../../rollup.config.mjs",