@shipengine/formik-giger 0.3.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. package/README.md +6 -6
  2. package/dist/esm/Checkbox.d.ts +13 -0
  3. package/dist/esm/Checkbox.js +57 -0
  4. package/dist/esm/Checkbox.js.map +1 -0
  5. package/dist/esm/DatePicker.d.ts +11 -0
  6. package/dist/esm/DatePicker.js +51 -0
  7. package/dist/esm/DatePicker.js.map +1 -0
  8. package/dist/esm/FocusOnError.d.ts +21 -0
  9. package/dist/esm/FocusOnError.js +70 -0
  10. package/dist/esm/FocusOnError.js.map +1 -0
  11. package/dist/esm/FormField.d.ts +17 -0
  12. package/dist/esm/FormField.js +43 -0
  13. package/dist/esm/FormField.js.map +1 -0
  14. package/dist/esm/Input.d.ts +11 -0
  15. package/dist/esm/Input.js +48 -0
  16. package/dist/esm/Input.js.map +1 -0
  17. package/dist/esm/Radio.d.ts +11 -0
  18. package/dist/esm/Radio.js +49 -0
  19. package/dist/esm/Radio.js.map +1 -0
  20. package/dist/esm/RadioGroup.d.ts +11 -0
  21. package/dist/esm/RadioGroup.js +47 -0
  22. package/dist/esm/RadioGroup.js.map +1 -0
  23. package/dist/esm/Select.d.ts +13 -0
  24. package/dist/esm/Select.js +68 -0
  25. package/dist/esm/Select.js.map +1 -0
  26. package/dist/esm/SelectAutocomplete.d.ts +11 -0
  27. package/dist/esm/SelectAutocomplete.js +57 -0
  28. package/dist/esm/SelectAutocomplete.js.map +1 -0
  29. package/dist/esm/Textarea.d.ts +11 -0
  30. package/dist/esm/Textarea.js +48 -0
  31. package/dist/esm/Textarea.js.map +1 -0
  32. package/dist/esm/index.d.ts +10 -0
  33. package/dist/esm/index.js +11 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/lib/Checkbox.d.ts +13 -0
  36. package/dist/lib/Checkbox.js +62 -0
  37. package/dist/lib/Checkbox.js.map +1 -0
  38. package/dist/lib/DatePicker.d.ts +11 -0
  39. package/dist/lib/DatePicker.js +56 -0
  40. package/dist/lib/DatePicker.js.map +1 -0
  41. package/dist/lib/FocusOnError.d.ts +21 -0
  42. package/dist/lib/FocusOnError.js +79 -0
  43. package/dist/lib/FocusOnError.js.map +1 -0
  44. package/dist/lib/FormField.d.ts +17 -0
  45. package/dist/lib/FormField.js +47 -0
  46. package/dist/lib/FormField.js.map +1 -0
  47. package/dist/lib/Input.d.ts +11 -0
  48. package/dist/lib/Input.js +53 -0
  49. package/dist/lib/Input.js.map +1 -0
  50. package/dist/lib/Radio.d.ts +11 -0
  51. package/dist/lib/Radio.js +54 -0
  52. package/dist/lib/Radio.js.map +1 -0
  53. package/dist/lib/RadioGroup.d.ts +11 -0
  54. package/dist/lib/RadioGroup.js +52 -0
  55. package/dist/lib/RadioGroup.js.map +1 -0
  56. package/dist/lib/Select.d.ts +13 -0
  57. package/dist/lib/Select.js +73 -0
  58. package/dist/lib/Select.js.map +1 -0
  59. package/dist/lib/SelectAutocomplete.d.ts +11 -0
  60. package/dist/lib/SelectAutocomplete.js +62 -0
  61. package/dist/lib/SelectAutocomplete.js.map +1 -0
  62. package/dist/lib/Textarea.d.ts +11 -0
  63. package/dist/lib/Textarea.js +53 -0
  64. package/dist/lib/Textarea.js.map +1 -0
  65. package/dist/lib/index.d.ts +10 -0
  66. package/dist/lib/index.js +37 -0
  67. package/dist/lib/index.js.map +1 -0
  68. package/package.json +4 -4
package/README.md CHANGED
@@ -1,20 +1,20 @@
1
- # `@packlink/formik-giger`
1
+ # `@shipengine/formik-giger`
2
2
 
3
- Bindings for using [Formik](https://github.com/formium/formik) with [Giger](https://github.com/packlink-dev/giger).
3
+ Bindings for using [Formik](https://github.com/formium/formik) with [Giger](https://github.com/shipengine/giger).
4
4
 
5
5
  ## Usage
6
6
 
7
- Check [stories](https://github.com/packlink-dev/giger/tree/master/packages/integrations/formik/src/stories) for examples on how to integrate this package in your application.
7
+ Check [stories](https://github.com/shipengine/giger/tree/master/packages/integrations/formik/src/stories) for examples on how to integrate this package in your application.
8
8
 
9
9
  ### FormField
10
10
 
11
- With Design team we think about a "global" solution for the spaces (margin / paddings) at the `Input` component ([Giger](https://ui-components.packlink.com/?path=/story/components-forms-input--input-type-text)) so thats why `FormField` component exists, this component accepts any children (Input, Select, etc) and a [message interface](https://github.com/packlink-dev/giger/blob/master/src/components/Form/FormField/FormField.tsx#L10) so we can forget to declare the Input + FieldMessage paddings across Packlink.
11
+ With Design team we think about a "global" solution for the spaces (margin / paddings) at the `Input` component ([Giger](http://ui-components.packitos.com:6006/?path=/story/forms-input--canvas)) so thats why `FormField` component exists, this component accepts any children (Input, Select, etc) and a [message interface](https://github.com/shipengine/giger/blob/master/src/components/Form/FormField/FormField.tsx#L10) so we can forget to declare the Input + FieldMessage paddings across our codebase.
12
12
 
13
13
  This component (FormField - Phavior) it's easy to use:
14
14
 
15
15
  ```js
16
16
  import { Field } from 'formik';
17
- import { FormField, Input } from '@packlink/formik-giger';
17
+ import { FormField, Input } from '@shipengine/formik-giger';
18
18
 
19
19
  <FormField name="username">
20
20
  <Field component={Input} label="username" />
@@ -27,7 +27,7 @@ Plus: this will render the error message when there is an error, but you can als
27
27
  ```js
28
28
  import { Field } from 'formik';
29
29
  import { FieldMessageType } from '@shipengine/giger';
30
- import { FormField, Input } from '@packlink/formik-giger';
30
+ import { FormField, Input } from '@shipengine/formik-giger';
31
31
 
32
32
  <FormField
33
33
  name="username"
@@ -0,0 +1,13 @@
1
+ import { FieldProps } from 'formik';
2
+ import { ICheckboxProps } from '@shipengine/giger';
3
+
4
+ interface CheckboxProps extends FieldProps, Omit<ICheckboxProps, 'name' | 'form' | 'touched' | 'checked' | 'defaultChecked' | 'type'> {
5
+ type?: string;
6
+ }
7
+ declare function fieldToCheckbox({ disabled, field: { onBlur: fieldOnBlur, value, onChange: onFormikChange, ...field }, form: { isSubmitting, errors, touched }, onBlur, onChange, ...props }: CheckboxProps): ICheckboxProps;
8
+ declare function Checkbox(props: CheckboxProps): JSX.Element;
9
+ declare namespace Checkbox {
10
+ var displayName: string;
11
+ }
12
+
13
+ export { Checkbox, CheckboxProps, fieldToCheckbox };
@@ -0,0 +1,57 @@
1
+ import { getIn } from 'formik';
2
+ import { Checkbox as Checkbox$1 } from '@shipengine/giger';
3
+ import { jsx } from '@emotion/react/jsx-runtime';
4
+
5
+ function fieldToCheckbox(_ref) {
6
+ let {
7
+ disabled,
8
+ field: {
9
+ onBlur: fieldOnBlur,
10
+ value,
11
+ onChange: onFormikChange,
12
+ ...field
13
+ },
14
+ form: {
15
+ isSubmitting,
16
+ errors,
17
+ touched
18
+ },
19
+ onBlur,
20
+ onChange,
21
+ ...props
22
+ } = _ref;
23
+ /**
24
+ * Checkbox can be used as a single item and as a part of multiple choices
25
+ * (sharing the "name" attribute) In that case the field value will be an array
26
+ * as multiple inputs have the same name.
27
+ * For all other scenarios "value" will be the input value (string, boolean, number ...)
28
+ */
29
+ const checkboxIsPartOfMultiple = Array.isArray(value);
30
+ const indeterminate = !checkboxIsPartOfMultiple && value == null;
31
+ const handleChange = e => {
32
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
33
+ onFormikChange(e);
34
+ };
35
+ return {
36
+ isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),
37
+ disabled: disabled || isSubmitting,
38
+ checked: checkboxIsPartOfMultiple ? value.includes(props.value) : Boolean(value),
39
+ value,
40
+ indeterminate,
41
+ onBlur: onBlur !== null && onBlur !== void 0 ? onBlur : function (e) {
42
+ fieldOnBlur(e !== null && e !== void 0 ? e : field.name);
43
+ },
44
+ onChange: handleChange,
45
+ ...field,
46
+ ...props
47
+ };
48
+ }
49
+ function Checkbox(props) {
50
+ return jsx(Checkbox$1, {
51
+ ...fieldToCheckbox(props)
52
+ });
53
+ }
54
+ Checkbox.displayName = 'FormikCheckbox';
55
+
56
+ export { Checkbox, fieldToCheckbox };
57
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../src/Checkbox.tsx"],"sourcesContent":["import { FieldProps, getIn } from 'formik';\nimport { ChangeEvent, FocusEvent } from 'react';\n\nimport { Checkbox as GigerCheckbox, ICheckboxProps as GigerCheckboxProps } from '@shipengine/giger';\n\nexport interface CheckboxProps\n extends FieldProps,\n Omit<\n GigerCheckboxProps,\n | 'name'\n | 'form'\n | 'touched'\n | 'checked'\n | 'defaultChecked'\n // Excluded for conflict with Field type\n | 'type'\n > {\n type?: string;\n}\n\nexport function fieldToCheckbox({\n disabled,\n field: { onBlur: fieldOnBlur, value, onChange: onFormikChange, ...field },\n form: { isSubmitting, errors, touched },\n onBlur,\n onChange,\n ...props\n}: CheckboxProps): GigerCheckboxProps {\n /**\n * Checkbox can be used as a single item and as a part of multiple choices\n * (sharing the \"name\" attribute) In that case the field value will be an array\n * as multiple inputs have the same name.\n * For all other scenarios \"value\" will be the input value (string, boolean, number ...)\n */\n const checkboxIsPartOfMultiple = Array.isArray(value);\n\n const indeterminate = !checkboxIsPartOfMultiple && value == null;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onFormikChange(e);\n };\n\n return {\n isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),\n disabled: disabled || isSubmitting,\n checked: checkboxIsPartOfMultiple ? value.includes(props.value) : Boolean(value),\n value,\n indeterminate,\n onBlur:\n onBlur ??\n function (e: FocusEvent) {\n fieldOnBlur(e ?? field.name);\n },\n onChange: handleChange,\n ...field,\n ...props,\n };\n}\n\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n return <GigerCheckbox {...fieldToCheckbox(props)} />;\n}\n\nCheckbox.displayName = 'FormikCheckbox';\n"],"names":["fieldToCheckbox","_ref","disabled","field","onBlur","fieldOnBlur","value","onChange","onFormikChange","form","isSubmitting","errors","touched","props","checkboxIsPartOfMultiple","Array","isArray","indeterminate","handleChange","e","isInvalid","getIn","name","checked","includes","Boolean","Checkbox","_jsx","GigerCheckbox","displayName"],"mappings":";;;;AAoBO,SAASA,eAAeA,CAAAC,IAAA,EAOO;EAAA,IAPN;IAC5BC,QAAQ;AACRC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,MAAM,EAAEC,WAAW;MAAEC,KAAK;AAAEC,MAAAA,QAAQ,EAAEC,cAAc;MAAE,GAAGL,KAAAA;KAAO;AACzEM,IAAAA,IAAI,EAAE;MAAEC,YAAY;MAAEC,MAAM;AAAEC,MAAAA,OAAAA;KAAS;IACvCR,MAAM;IACNG,QAAQ;IACR,GAAGM,KAAAA;AACQ,GAAC,GAAAZ,IAAA,CAAA;AACZ;AACJ;AACA;AACA;AACA;AACA;AACI,EAAA,MAAMa,wBAAwB,GAAGC,KAAK,CAACC,OAAO,CAACV,KAAK,CAAC,CAAA;AAErD,EAAA,MAAMW,aAAa,GAAG,CAACH,wBAAwB,IAAIR,KAAK,IAAI,IAAI,CAAA;EAEhE,MAAMY,YAAY,GAAIC,CAAgC,IAAK;AACvDZ,IAAAA,QAAQ,aAARA,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,QAAQ,CAAGY,CAAC,CAAC,CAAA;IACbX,cAAc,CAACW,CAAC,CAAC,CAAA;GACpB,CAAA;EAED,OAAO;AACHC,IAAAA,SAAS,EAAEC,KAAK,CAACT,OAAO,EAAET,KAAK,CAACmB,IAAI,CAAC,IAAI,CAAC,CAACD,KAAK,CAACV,MAAM,EAAER,KAAK,CAACmB,IAAI,CAAC;IACpEpB,QAAQ,EAAEA,QAAQ,IAAIQ,YAAY;AAClCa,IAAAA,OAAO,EAAET,wBAAwB,GAAGR,KAAK,CAACkB,QAAQ,CAACX,KAAK,CAACP,KAAK,CAAC,GAAGmB,OAAO,CAACnB,KAAK,CAAC;IAChFA,KAAK;IACLW,aAAa;IACbb,MAAM,EACFA,MAAM,KAANA,IAAAA,IAAAA,MAAM,cAANA,MAAM,GACN,UAAUe,CAAa,EAAE;MACrBd,WAAW,CAACc,CAAC,KAAA,IAAA,IAADA,CAAC,KAAA,KAAA,CAAA,GAADA,CAAC,GAAIhB,KAAK,CAACmB,IAAI,CAAC,CAAA;KAC/B;AACLf,IAAAA,QAAQ,EAAEW,YAAY;AACtB,IAAA,GAAGf,KAAK;IACR,GAAGU,KAAAA;GACN,CAAA;AACL,CAAA;AAEO,SAASa,QAAQA,CAACb,KAAoB,EAAe;EACxD,OAAOc,GAAA,CAACC,UAAa,EAAA;IAAA,GAAK5B,eAAe,CAACa,KAAK,CAAA;AAAC,GAAG,CAAC,CAAA;AACxD,CAAA;AAEAa,QAAQ,CAACG,WAAW,GAAG,gBAAgB;;;;"}
@@ -0,0 +1,11 @@
1
+ import { FieldProps } from 'formik';
2
+ import { IDatePickerProps as IDatePickerProps$1, WithCommonProps } from '@shipengine/giger';
3
+
4
+ type IDatePickerProps<FormValues = unknown> = FieldProps<Date | null, FormValues> & Omit<IDatePickerProps$1, 'name'> & WithCommonProps<unknown>;
5
+ declare function fieldToDateField<FormValues = unknown>({ disabled, field: { name, onChange: onFormikChange, ...field }, form: { isSubmitting, errors, touched, setFieldTouched }, onClickConfirm, ...props }: IDatePickerProps<FormValues>): IDatePickerProps$1;
6
+ declare function DatePicker<FormValues = unknown>({ ...props }: IDatePickerProps<FormValues>): JSX.Element;
7
+ declare namespace DatePicker {
8
+ var displayName: string;
9
+ }
10
+
11
+ export { DatePicker, IDatePickerProps, fieldToDateField };
@@ -0,0 +1,51 @@
1
+ import { getIn } from 'formik';
2
+ import { DatePicker as DatePicker$1 } from '@shipengine/giger';
3
+ import { jsx } from '@emotion/react/jsx-runtime';
4
+
5
+ function fieldToDateField(_ref) {
6
+ let {
7
+ disabled,
8
+ field: {
9
+ name,
10
+ onChange: onFormikChange,
11
+ ...field
12
+ },
13
+ form: {
14
+ isSubmitting,
15
+ errors,
16
+ touched,
17
+ setFieldTouched
18
+ },
19
+ onClickConfirm,
20
+ ...props
21
+ } = _ref;
22
+ const handleClickConfirm = date => {
23
+ setFieldTouched(name);
24
+ onFormikChange({
25
+ target: {
26
+ name,
27
+ value: date
28
+ }
29
+ });
30
+ onClickConfirm === null || onClickConfirm === void 0 ? void 0 : onClickConfirm(date);
31
+ };
32
+ return {
33
+ disabled: disabled || isSubmitting,
34
+ isInvalid: getIn(touched, name) && getIn(errors, name),
35
+ onClickConfirm: handleClickConfirm,
36
+ ...field,
37
+ ...props
38
+ };
39
+ }
40
+ function DatePicker(_ref2) {
41
+ let {
42
+ ...props
43
+ } = _ref2;
44
+ return jsx(DatePicker$1, {
45
+ ...fieldToDateField(props)
46
+ });
47
+ }
48
+ DatePicker.displayName = 'FormikDatePicker';
49
+
50
+ export { DatePicker, fieldToDateField };
51
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","sources":["../../src/DatePicker.tsx"],"sourcesContent":["import { FieldProps, getIn } from 'formik';\n\nimport {\n WithCommonProps,\n DatePicker as GigerDatePicker,\n IDatePickerProps as GigerDatePickerProps,\n} from '@shipengine/giger';\n\nexport type IDatePickerProps<FormValues = unknown> = FieldProps<Date | null, FormValues> &\n Omit<GigerDatePickerProps, 'name'> &\n WithCommonProps<unknown>;\n\nexport function fieldToDateField<FormValues = unknown>({\n disabled,\n field: { name, onChange: onFormikChange, ...field },\n form: { isSubmitting, errors, touched, setFieldTouched },\n onClickConfirm,\n ...props\n}: IDatePickerProps<FormValues>): GigerDatePickerProps {\n const handleClickConfirm = (date: Date | [Date, Date]) => {\n setFieldTouched(name);\n onFormikChange({ target: { name, value: date } });\n onClickConfirm?.(date);\n };\n\n return {\n disabled: disabled || isSubmitting,\n isInvalid: getIn(touched, name) && getIn(errors, name),\n onClickConfirm: handleClickConfirm,\n ...field,\n ...props,\n };\n}\n\nexport function DatePicker<FormValues = unknown>({ ...props }: IDatePickerProps<FormValues>): JSX.Element {\n return <GigerDatePicker {...fieldToDateField(props)} />;\n}\n\nDatePicker.displayName = 'FormikDatePicker';\n"],"names":["fieldToDateField","_ref","disabled","field","name","onChange","onFormikChange","form","isSubmitting","errors","touched","setFieldTouched","onClickConfirm","props","handleClickConfirm","date","target","value","isInvalid","getIn","DatePicker","_ref2","_jsx","GigerDatePicker","displayName"],"mappings":";;;;AAYO,SAASA,gBAAgBA,CAAAC,IAAA,EAMuB;EAAA,IANA;IACnDC,QAAQ;AACRC,IAAAA,KAAK,EAAE;MAAEC,IAAI;AAAEC,MAAAA,QAAQ,EAAEC,cAAc;MAAE,GAAGH,KAAAA;KAAO;AACnDI,IAAAA,IAAI,EAAE;MAAEC,YAAY;MAAEC,MAAM;MAAEC,OAAO;AAAEC,MAAAA,eAAAA;KAAiB;IACxDC,cAAc;IACd,GAAGC,KAAAA;AACuB,GAAC,GAAAZ,IAAA,CAAA;EAC3B,MAAMa,kBAAkB,GAAIC,IAAyB,IAAK;IACtDJ,eAAe,CAACP,IAAI,CAAC,CAAA;AACrBE,IAAAA,cAAc,CAAC;AAAEU,MAAAA,MAAM,EAAE;QAAEZ,IAAI;AAAEa,QAAAA,KAAK,EAAEF,IAAAA;AAAK,OAAA;AAAE,KAAC,CAAC,CAAA;AACjDH,IAAAA,cAAc,aAAdA,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,cAAc,CAAGG,IAAI,CAAC,CAAA;GACzB,CAAA;EAED,OAAO;IACHb,QAAQ,EAAEA,QAAQ,IAAIM,YAAY;AAClCU,IAAAA,SAAS,EAAEC,KAAK,CAACT,OAAO,EAAEN,IAAI,CAAC,IAAIe,KAAK,CAACV,MAAM,EAAEL,IAAI,CAAC;AACtDQ,IAAAA,cAAc,EAAEE,kBAAkB;AAClC,IAAA,GAAGX,KAAK;IACR,GAAGU,KAAAA;GACN,CAAA;AACL,CAAA;AAEO,SAASO,UAAUA,CAAAC,KAAA,EAAgF;EAAA,IAAzD;IAAE,GAAGR,KAAAA;AAAoC,GAAC,GAAAQ,KAAA,CAAA;EACvF,OAAOC,GAAA,CAACC,YAAe,EAAA;IAAA,GAAKvB,gBAAgB,CAACa,KAAK,CAAA;AAAC,GAAG,CAAC,CAAA;AAC3D,CAAA;AAEAO,UAAU,CAACI,WAAW,GAAG,kBAAkB;;;;"}
@@ -0,0 +1,21 @@
1
+ interface IFocusOnErrorProps {
2
+ initialValidation?: boolean;
3
+ focusDelay?: number;
4
+ }
5
+ /**
6
+ * Use FocusOnError when Formik is in the same component and you don't have
7
+ * access to useFormikContext, otherwise useFocusOnError can be used.
8
+ */
9
+ declare function FocusOnError({ initialValidation, focusDelay }: IFocusOnErrorProps): JSX.Element;
10
+ /**
11
+ * Focus the first element with error in the form after triggering Formik onSubmit.
12
+ * If used with initialValidation `true`, it will focus after form initialization.
13
+ * * Important * The order is based on the errors object, and the errors key order is based on
14
+ * the order used in the validation schema.
15
+ *
16
+ * @param initialValidation boolean true if the focus is desired on form initialization
17
+ * @param focusDelay number milliseconds to delay the focus on the input
18
+ */
19
+ declare function useFocusOnError(initialValidation?: boolean, focusDelay?: number): void;
20
+
21
+ export { FocusOnError, IFocusOnErrorProps, useFocusOnError };
@@ -0,0 +1,70 @@
1
+ import flatten from 'flat';
2
+ import { Fragment, useRef, useEffect } from 'react';
3
+ import { useFormikContext } from 'formik';
4
+ import { jsx } from '@emotion/react/jsx-runtime';
5
+
6
+ /**
7
+ * Use FocusOnError when Formik is in the same component and you don't have
8
+ * access to useFormikContext, otherwise useFocusOnError can be used.
9
+ */
10
+ function FocusOnError(_ref) {
11
+ let {
12
+ initialValidation = false,
13
+ focusDelay = 0
14
+ } = _ref;
15
+ useFocusOnError(initialValidation, focusDelay);
16
+ return jsx(Fragment, {});
17
+ }
18
+
19
+ /**
20
+ * Focus the first element with error in the form after triggering Formik onSubmit.
21
+ * If used with initialValidation `true`, it will focus after form initialization.
22
+ * * Important * The order is based on the errors object, and the errors key order is based on
23
+ * the order used in the validation schema.
24
+ *
25
+ * @param initialValidation boolean true if the focus is desired on form initialization
26
+ * @param focusDelay number milliseconds to delay the focus on the input
27
+ */
28
+ function useFocusOnError() {
29
+ let initialValidation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
30
+ let focusDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
31
+ const {
32
+ errors,
33
+ isSubmitting,
34
+ isValidating,
35
+ validateForm
36
+ } = useFormikContext();
37
+ const validateOnInit = useRef(initialValidation);
38
+ useEffect(() => {
39
+ if (validateOnInit.current) {
40
+ runImperativeValidation();
41
+ validateOnInit.current = false;
42
+ return;
43
+ }
44
+ if (isSubmitting && !isValidating) {
45
+ focusFirstElementWithError(errors);
46
+ }
47
+ function focusFirstElementWithError(errorsObject) {
48
+ if (!Object.keys(errorsObject).length) return;
49
+ const flattenedErrorsObj = flatten(errorsObject);
50
+ const names = Object.keys(flattenedErrorsObj);
51
+ const firstErrorElementName = names === null || names === void 0 ? void 0 : names[0];
52
+ if (firstErrorElementName) {
53
+ const element = window.document.querySelector(`form [name="${firstErrorElementName}"]`);
54
+ element === null || element === void 0 ? void 0 : element.scrollIntoView({
55
+ behavior: 'smooth'
56
+ });
57
+ setTimeout(() => {
58
+ element === null || element === void 0 ? void 0 : element.focus();
59
+ }, focusDelay);
60
+ }
61
+ }
62
+ async function runImperativeValidation() {
63
+ const validationErrors = await validateForm();
64
+ focusFirstElementWithError(validationErrors);
65
+ }
66
+ }, [errors, focusDelay, isSubmitting, isValidating, validateForm]);
67
+ }
68
+
69
+ export { FocusOnError, useFocusOnError };
70
+ //# sourceMappingURL=FocusOnError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FocusOnError.js","sources":["../../src/FocusOnError.tsx"],"sourcesContent":["import flatten from 'flat';\nimport { Fragment, useEffect, useRef } from 'react';\nimport { FormikErrors, useFormikContext } from 'formik';\n\nexport interface IFocusOnErrorProps {\n initialValidation?: boolean;\n focusDelay?: number;\n}\n\n/**\n * Use FocusOnError when Formik is in the same component and you don't have\n * access to useFormikContext, otherwise useFocusOnError can be used.\n */\nexport function FocusOnError({ initialValidation = false, focusDelay = 0 }: IFocusOnErrorProps): JSX.Element {\n useFocusOnError(initialValidation, focusDelay);\n\n return <Fragment />;\n}\n\n/**\n * Focus the first element with error in the form after triggering Formik onSubmit.\n * If used with initialValidation `true`, it will focus after form initialization.\n * * Important * The order is based on the errors object, and the errors key order is based on\n * the order used in the validation schema.\n *\n * @param initialValidation boolean true if the focus is desired on form initialization\n * @param focusDelay number milliseconds to delay the focus on the input\n */\nexport function useFocusOnError(initialValidation = false, focusDelay = 0): void {\n const { errors, isSubmitting, isValidating, validateForm } = useFormikContext();\n const validateOnInit = useRef(initialValidation);\n\n useEffect(() => {\n if (validateOnInit.current) {\n runImperativeValidation();\n validateOnInit.current = false;\n return;\n }\n\n if (isSubmitting && !isValidating) {\n focusFirstElementWithError(errors);\n }\n\n function focusFirstElementWithError(errorsObject: FormikErrors<unknown>) {\n if (!Object.keys(errorsObject).length) return;\n\n const flattenedErrorsObj: Record<string, unknown> = flatten(errorsObject);\n const names = Object.keys(flattenedErrorsObj);\n const firstErrorElementName = names?.[0];\n\n if (firstErrorElementName) {\n const element = window.document.querySelector<HTMLElement>(`form [name=\"${firstErrorElementName}\"]`);\n element?.scrollIntoView({ behavior: 'smooth' });\n\n setTimeout(() => {\n element?.focus();\n }, focusDelay);\n }\n }\n\n async function runImperativeValidation() {\n const validationErrors = await validateForm();\n focusFirstElementWithError(validationErrors);\n }\n }, [errors, focusDelay, isSubmitting, isValidating, validateForm]);\n}\n"],"names":["FocusOnError","_ref","initialValidation","focusDelay","useFocusOnError","_jsx","Fragment","arguments","length","undefined","errors","isSubmitting","isValidating","validateForm","useFormikContext","validateOnInit","useRef","useEffect","current","runImperativeValidation","focusFirstElementWithError","errorsObject","Object","keys","flattenedErrorsObj","flatten","names","firstErrorElementName","element","window","document","querySelector","scrollIntoView","behavior","setTimeout","focus","validationErrors"],"mappings":";;;;;AASA;AACA;AACA;AACA;AACO,SAASA,YAAYA,CAAAC,IAAA,EAAiF;EAAA,IAAhF;AAAEC,IAAAA,iBAAiB,GAAG,KAAK;AAAEC,IAAAA,UAAU,GAAG,CAAA;AAAsB,GAAC,GAAAF,IAAA,CAAA;AAC1FG,EAAAA,eAAe,CAACF,iBAAiB,EAAEC,UAAU,CAAC,CAAA;AAE9C,EAAA,OAAOE,GAAA,CAACC,QAAQ,EAAA,EAAE,CAAC,CAAA;AACvB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASF,eAAeA,GAAkD;AAAA,EAAA,IAAjDF,iBAAiB,GAAAK,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;AAAA,EAAA,IAAEJ,UAAU,GAAAI,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC,CAAA;EACrE,MAAM;IAAEG,MAAM;IAAEC,YAAY;IAAEC,YAAY;AAAEC,IAAAA,YAAAA;GAAc,GAAGC,gBAAgB,EAAE,CAAA;AAC/E,EAAA,MAAMC,cAAc,GAAGC,MAAM,CAACd,iBAAiB,CAAC,CAAA;AAEhDe,EAAAA,SAAS,CAAC,MAAM;IACZ,IAAIF,cAAc,CAACG,OAAO,EAAE;AACxBC,MAAAA,uBAAuB,EAAE,CAAA;MACzBJ,cAAc,CAACG,OAAO,GAAG,KAAK,CAAA;AAC9B,MAAA,OAAA;AACJ,KAAA;AAEA,IAAA,IAAIP,YAAY,IAAI,CAACC,YAAY,EAAE;MAC/BQ,0BAA0B,CAACV,MAAM,CAAC,CAAA;AACtC,KAAA;IAEA,SAASU,0BAA0BA,CAACC,YAAmC,EAAE;MACrE,IAAI,CAACC,MAAM,CAACC,IAAI,CAACF,YAAY,CAAC,CAACb,MAAM,EAAE,OAAA;AAEvC,MAAA,MAAMgB,kBAA2C,GAAGC,OAAO,CAACJ,YAAY,CAAC,CAAA;AACzE,MAAA,MAAMK,KAAK,GAAGJ,MAAM,CAACC,IAAI,CAACC,kBAAkB,CAAC,CAAA;MAC7C,MAAMG,qBAAqB,GAAGD,KAAK,KAAA,IAAA,IAALA,KAAK,KAALA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,KAAK,CAAG,CAAC,CAAC,CAAA;AAExC,MAAA,IAAIC,qBAAqB,EAAE;QACvB,MAAMC,OAAO,GAAGC,MAAM,CAACC,QAAQ,CAACC,aAAa,CAAe,CAAA,YAAA,EAAcJ,qBAAsB,CAAA,EAAA,CAAG,CAAC,CAAA;AACpGC,QAAAA,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEI,cAAc,CAAC;AAAEC,UAAAA,QAAQ,EAAE,QAAA;AAAS,SAAC,CAAC,CAAA;AAE/CC,QAAAA,UAAU,CAAC,MAAM;AACbN,UAAAA,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAEO,KAAK,EAAE,CAAA;SACnB,EAAEhC,UAAU,CAAC,CAAA;AAClB,OAAA;AACJ,KAAA;IAEA,eAAegB,uBAAuBA,GAAG;AACrC,MAAA,MAAMiB,gBAAgB,GAAG,MAAMvB,YAAY,EAAE,CAAA;MAC7CO,0BAA0B,CAACgB,gBAAgB,CAAC,CAAA;AAChD,KAAA;AACJ,GAAC,EAAE,CAAC1B,MAAM,EAAEP,UAAU,EAAEQ,YAAY,EAAEC,YAAY,EAAEC,YAAY,CAAC,CAAC,CAAA;AACtE;;;;"}
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+ import { WithChildrenCommonProps, FieldMessageType } from '@shipengine/giger';
3
+
4
+ interface IFormFieldMessage {
5
+ type: FieldMessageType;
6
+ content: ReactNode;
7
+ }
8
+ type FormFieldProps = WithChildrenCommonProps<{
9
+ name: string;
10
+ message?: IFormFieldMessage;
11
+ }>;
12
+ declare function FormField({ name, children, message, ...rest }: FormFieldProps): JSX.Element;
13
+ declare namespace FormField {
14
+ var displayName: string;
15
+ }
16
+
17
+ export { FormField };
@@ -0,0 +1,43 @@
1
+ import { useField } from 'formik';
2
+ import { cloneElement, useMemo } from 'react';
3
+ import { FormField as FormField$1, FieldMessageType } from '@shipengine/giger';
4
+ import { jsx } from '@emotion/react/jsx-runtime';
5
+
6
+ const useFieldMessage = (fieldName, defaultMessage) => {
7
+ const [, meta] = useField(fieldName);
8
+ const formFieldMessage = useMemo(() => {
9
+ if (meta.error && meta.touched) {
10
+ return {
11
+ type: FieldMessageType.ERROR,
12
+ content: meta.error
13
+ };
14
+ } else if ((defaultMessage === null || defaultMessage === void 0 ? void 0 : defaultMessage.type) === FieldMessageType.HINT || (defaultMessage === null || defaultMessage === void 0 ? void 0 : defaultMessage.type) === FieldMessageType.INFO || (defaultMessage === null || defaultMessage === void 0 ? void 0 : defaultMessage.type) === FieldMessageType.SUCCESS) {
15
+ return {
16
+ type: defaultMessage.type,
17
+ content: defaultMessage.content
18
+ };
19
+ }
20
+ return undefined;
21
+ }, [defaultMessage === null || defaultMessage === void 0 ? void 0 : defaultMessage.content, defaultMessage === null || defaultMessage === void 0 ? void 0 : defaultMessage.type, meta.error, meta.touched]);
22
+ return formFieldMessage;
23
+ };
24
+ function FormField(_ref) {
25
+ let {
26
+ name,
27
+ children,
28
+ message,
29
+ ...rest
30
+ } = _ref;
31
+ const formFieldMessage = useFieldMessage(name, message);
32
+ return jsx(FormField$1, {
33
+ message: formFieldMessage,
34
+ ...rest,
35
+ children: /*#__PURE__*/cloneElement(children, {
36
+ name
37
+ })
38
+ });
39
+ }
40
+ FormField.displayName = 'FormikFormField';
41
+
42
+ export { FormField };
43
+ //# sourceMappingURL=FormField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormField.js","sources":["../../src/FormField.tsx"],"sourcesContent":["import { useField } from 'formik';\nimport { useMemo, cloneElement, ReactNode, ReactElement } from 'react';\n\nimport { FieldMessageType, FormField as GigerFormField, WithChildrenCommonProps } from '@shipengine/giger';\n\ninterface IFormFieldMessage {\n type: FieldMessageType;\n content: ReactNode;\n}\n\ntype UseFieldMessageReturn =\n | {\n type: FieldMessageType;\n content: string;\n }\n | undefined;\n\nconst useFieldMessage = (fieldName: string, defaultMessage?: IFormFieldMessage): UseFieldMessageReturn => {\n const [, meta] = useField(fieldName);\n\n const formFieldMessage = useMemo(() => {\n if (meta.error && meta.touched) {\n return {\n type: FieldMessageType.ERROR,\n content: meta.error,\n };\n } else if (\n defaultMessage?.type === FieldMessageType.HINT ||\n defaultMessage?.type === FieldMessageType.INFO ||\n defaultMessage?.type === FieldMessageType.SUCCESS\n ) {\n return {\n type: defaultMessage.type,\n content: defaultMessage.content,\n };\n }\n\n return undefined;\n }, [defaultMessage?.content, defaultMessage?.type, meta.error, meta.touched]) as UseFieldMessageReturn;\n\n return formFieldMessage;\n};\n\ntype FormFieldProps = WithChildrenCommonProps<{\n name: string;\n message?: IFormFieldMessage;\n}>;\n\nexport function FormField({ name, children, message, ...rest }: FormFieldProps): JSX.Element {\n const formFieldMessage = useFieldMessage(name, message);\n\n return (\n <GigerFormField message={formFieldMessage} {...rest}>\n {cloneElement(children as ReactElement, { name })}\n </GigerFormField>\n );\n}\n\nFormField.displayName = 'FormikFormField';\n"],"names":["useFieldMessage","fieldName","defaultMessage","meta","useField","formFieldMessage","useMemo","error","touched","type","FieldMessageType","ERROR","content","HINT","INFO","SUCCESS","undefined","FormField","_ref","name","children","message","rest","_jsx","GigerFormField","cloneElement","displayName"],"mappings":";;;;;AAiBA,MAAMA,eAAe,GAAGA,CAACC,SAAiB,EAAEC,cAAkC,KAA4B;AACtG,EAAA,MAAM,GAAGC,IAAI,CAAC,GAAGC,QAAQ,CAACH,SAAS,CAAC,CAAA;AAEpC,EAAA,MAAMI,gBAAgB,GAAGC,OAAO,CAAC,MAAM;AACnC,IAAA,IAAIH,IAAI,CAACI,KAAK,IAAIJ,IAAI,CAACK,OAAO,EAAE;MAC5B,OAAO;QACHC,IAAI,EAAEC,gBAAgB,CAACC,KAAK;QAC5BC,OAAO,EAAET,IAAI,CAACI,KAAAA;OACjB,CAAA;AACL,KAAC,MAAM,IACH,CAAAL,cAAc,KAAdA,IAAAA,IAAAA,cAAc,uBAAdA,cAAc,CAAEO,IAAI,MAAKC,gBAAgB,CAACG,IAAI,IAC9C,CAAAX,cAAc,aAAdA,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,cAAc,CAAEO,IAAI,MAAKC,gBAAgB,CAACI,IAAI,IAC9C,CAAAZ,cAAc,KAAA,IAAA,IAAdA,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,cAAc,CAAEO,IAAI,MAAKC,gBAAgB,CAACK,OAAO,EACnD;MACE,OAAO;QACHN,IAAI,EAAEP,cAAc,CAACO,IAAI;QACzBG,OAAO,EAAEV,cAAc,CAACU,OAAAA;OAC3B,CAAA;AACL,KAAA;AAEA,IAAA,OAAOI,SAAS,CAAA;GACnB,EAAE,CAACd,cAAc,KAAdA,IAAAA,IAAAA,cAAc,KAAdA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAc,CAAEU,OAAO,EAAEV,cAAc,KAAdA,IAAAA,IAAAA,cAAc,uBAAdA,cAAc,CAAEO,IAAI,EAAEN,IAAI,CAACI,KAAK,EAAEJ,IAAI,CAACK,OAAO,CAAC,CAA0B,CAAA;AAEtG,EAAA,OAAOH,gBAAgB,CAAA;AAC3B,CAAC,CAAA;AAOM,SAASY,SAASA,CAAAC,IAAA,EAAoE;EAAA,IAAnE;IAAEC,IAAI;IAAEC,QAAQ;IAAEC,OAAO;IAAE,GAAGC,IAAAA;AAAqB,GAAC,GAAAJ,IAAA,CAAA;AAC1E,EAAA,MAAMb,gBAAgB,GAAGL,eAAe,CAACmB,IAAI,EAAEE,OAAO,CAAC,CAAA;EAEvD,OACIE,GAAA,CAACC,WAAc,EAAA;AAACH,IAAAA,OAAO,EAAEhB,gBAAiB;AAAA,IAAA,GAAKiB,IAAI;AAAAF,IAAAA,QAAA,eAC9CK,YAAY,CAACL,QAAQ,EAAkB;AAAED,MAAAA,IAAAA;KAAM,CAAA;AAAC,GACrC,CAAC,CAAA;AAEzB,CAAA;AAEAF,SAAS,CAACS,WAAW,GAAG,iBAAiB;;;;"}
@@ -0,0 +1,11 @@
1
+ import { FieldProps } from 'formik';
2
+ import { IInputProps } from '@shipengine/giger';
3
+
4
+ type InputProps<FormValues = unknown> = FieldProps<string | number | undefined, FormValues> & Omit<IInputProps, 'name' | 'value'>;
5
+ declare function fieldToInput<FormValues = unknown>({ disabled, field: { onBlur: fieldOnBlur, onChange: onFormikChange, ...field }, form: { isSubmitting, touched, errors }, onBlur, onChange, ...props }: InputProps<FormValues>): IInputProps;
6
+ declare function Input<FormValues = unknown>({ ...props }: InputProps<FormValues>): JSX.Element;
7
+ declare namespace Input {
8
+ var displayName: string;
9
+ }
10
+
11
+ export { Input, InputProps, fieldToInput };
@@ -0,0 +1,48 @@
1
+ import { getIn } from 'formik';
2
+ import { Input as Input$1 } from '@shipengine/giger';
3
+ import { jsx } from '@emotion/react/jsx-runtime';
4
+
5
+ function fieldToInput(_ref) {
6
+ let {
7
+ disabled,
8
+ field: {
9
+ onBlur: fieldOnBlur,
10
+ onChange: onFormikChange,
11
+ ...field
12
+ },
13
+ form: {
14
+ isSubmitting,
15
+ touched,
16
+ errors
17
+ },
18
+ onBlur,
19
+ onChange,
20
+ ...props
21
+ } = _ref;
22
+ const handleChange = e => {
23
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
24
+ onFormikChange(e);
25
+ };
26
+ return {
27
+ isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),
28
+ disabled: disabled || isSubmitting,
29
+ onBlur: onBlur !== null && onBlur !== void 0 ? onBlur : function (e) {
30
+ fieldOnBlur(e !== null && e !== void 0 ? e : field.name);
31
+ },
32
+ onChange: handleChange,
33
+ ...field,
34
+ ...props
35
+ };
36
+ }
37
+ function Input(_ref2) {
38
+ let {
39
+ ...props
40
+ } = _ref2;
41
+ return jsx(Input$1, {
42
+ ...fieldToInput(props)
43
+ });
44
+ }
45
+ Input.displayName = 'FormikInput';
46
+
47
+ export { Input, fieldToInput };
48
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sources":["../../src/Input.tsx"],"sourcesContent":["import { FieldProps, getIn } from 'formik';\nimport { ChangeEvent, FocusEvent } from 'react';\n\nimport { Input as GigerInput, IInputProps as IGigerInputProps } from '@shipengine/giger';\n\nexport type InputProps<FormValues = unknown> = FieldProps<string | number | undefined, FormValues> &\n Omit<IGigerInputProps, 'name' | 'value'>;\n\nexport function fieldToInput<FormValues = unknown>({\n disabled,\n field: { onBlur: fieldOnBlur, onChange: onFormikChange, ...field },\n form: { isSubmitting, touched, errors },\n onBlur,\n onChange,\n ...props\n}: InputProps<FormValues>): IGigerInputProps {\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onFormikChange(e);\n };\n\n return {\n isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),\n disabled: disabled || isSubmitting,\n onBlur:\n onBlur ??\n function (e: FocusEvent) {\n fieldOnBlur(e ?? field.name);\n },\n onChange: handleChange,\n ...field,\n ...props,\n };\n}\n\nexport function Input<FormValues = unknown>({ ...props }: InputProps<FormValues>): JSX.Element {\n return <GigerInput {...fieldToInput(props)} />;\n}\n\nInput.displayName = 'FormikInput';\n"],"names":["fieldToInput","_ref","disabled","field","onBlur","fieldOnBlur","onChange","onFormikChange","form","isSubmitting","touched","errors","props","handleChange","e","isInvalid","getIn","name","Input","_ref2","_jsx","GigerInput","displayName"],"mappings":";;;;AAQO,SAASA,YAAYA,CAAAC,IAAA,EAOiB;EAAA,IAPM;IAC/CC,QAAQ;AACRC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,MAAM,EAAEC,WAAW;AAAEC,MAAAA,QAAQ,EAAEC,cAAc;MAAE,GAAGJ,KAAAA;KAAO;AAClEK,IAAAA,IAAI,EAAE;MAAEC,YAAY;MAAEC,OAAO;AAAEC,MAAAA,MAAAA;KAAQ;IACvCP,MAAM;IACNE,QAAQ;IACR,GAAGM,KAAAA;AACiB,GAAC,GAAAX,IAAA,CAAA;EACrB,MAAMY,YAAY,GAAIC,CAAgC,IAAK;AACvDR,IAAAA,QAAQ,aAARA,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,QAAQ,CAAGQ,CAAC,CAAC,CAAA;IACbP,cAAc,CAACO,CAAC,CAAC,CAAA;GACpB,CAAA;EAED,OAAO;AACHC,IAAAA,SAAS,EAAEC,KAAK,CAACN,OAAO,EAAEP,KAAK,CAACc,IAAI,CAAC,IAAI,CAAC,CAACD,KAAK,CAACL,MAAM,EAAER,KAAK,CAACc,IAAI,CAAC;IACpEf,QAAQ,EAAEA,QAAQ,IAAIO,YAAY;IAClCL,MAAM,EACFA,MAAM,KAANA,IAAAA,IAAAA,MAAM,cAANA,MAAM,GACN,UAAUU,CAAa,EAAE;MACrBT,WAAW,CAACS,CAAC,KAAA,IAAA,IAADA,CAAC,KAAA,KAAA,CAAA,GAADA,CAAC,GAAIX,KAAK,CAACc,IAAI,CAAC,CAAA;KAC/B;AACLX,IAAAA,QAAQ,EAAEO,YAAY;AACtB,IAAA,GAAGV,KAAK;IACR,GAAGS,KAAAA;GACN,CAAA;AACL,CAAA;AAEO,SAASM,KAAKA,CAAAC,KAAA,EAA0E;EAAA,IAAnD;IAAE,GAAGP,KAAAA;AAA8B,GAAC,GAAAO,KAAA,CAAA;EAC5E,OAAOC,GAAA,CAACC,OAAU,EAAA;IAAA,GAAKrB,YAAY,CAACY,KAAK,CAAA;AAAC,GAAG,CAAC,CAAA;AAClD,CAAA;AAEAM,KAAK,CAACI,WAAW,GAAG,aAAa;;;;"}
@@ -0,0 +1,11 @@
1
+ import { FieldProps } from 'formik';
2
+ import { RadioProps as RadioProps$1 } from '@shipengine/giger';
3
+
4
+ type RadioProps = FieldProps & Omit<RadioProps$1, 'name' | 'checked'>;
5
+ declare function fieldToRadio({ disabled, field: { onBlur: fieldOnBlur, value: selectedValue, onChange: onFormikChange, ...field }, form: { isSubmitting, errors, touched }, onBlur, onChange, value, ...props }: RadioProps): RadioProps$1;
6
+ declare function Radio(props: RadioProps): JSX.Element;
7
+ declare namespace Radio {
8
+ var displayName: string;
9
+ }
10
+
11
+ export { Radio, RadioProps, fieldToRadio };
@@ -0,0 +1,49 @@
1
+ import { getIn } from 'formik';
2
+ import { Radio as Radio$1 } from '@shipengine/giger';
3
+ import { jsx } from '@emotion/react/jsx-runtime';
4
+
5
+ function fieldToRadio(_ref) {
6
+ let {
7
+ disabled,
8
+ field: {
9
+ onBlur: fieldOnBlur,
10
+ value: selectedValue,
11
+ onChange: onFormikChange,
12
+ ...field
13
+ },
14
+ form: {
15
+ isSubmitting,
16
+ errors,
17
+ touched
18
+ },
19
+ onBlur,
20
+ onChange,
21
+ value,
22
+ ...props
23
+ } = _ref;
24
+ const handleChange = e => {
25
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
26
+ onFormikChange(e);
27
+ };
28
+ return {
29
+ isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),
30
+ disabled: disabled || isSubmitting,
31
+ value,
32
+ onBlur: onBlur !== null && onBlur !== void 0 ? onBlur : function (e) {
33
+ fieldOnBlur(e !== null && e !== void 0 ? e : field.name);
34
+ },
35
+ onChange: handleChange,
36
+ checked: selectedValue === value,
37
+ ...field,
38
+ ...props
39
+ };
40
+ }
41
+ function Radio(props) {
42
+ return jsx(Radio$1, {
43
+ ...fieldToRadio(props)
44
+ });
45
+ }
46
+ Radio.displayName = 'FormikRadio';
47
+
48
+ export { Radio, fieldToRadio };
49
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sources":["../../src/Radio.tsx"],"sourcesContent":["import { FieldProps, getIn } from 'formik';\nimport { ChangeEvent, FocusEvent } from 'react';\n\nimport { Radio as GigerRadio, RadioProps as GigerRadioProps } from '@shipengine/giger';\n\nexport type RadioProps = FieldProps & Omit<GigerRadioProps, 'name' | 'checked'>;\n\nexport function fieldToRadio({\n disabled,\n field: { onBlur: fieldOnBlur, value: selectedValue, onChange: onFormikChange, ...field },\n form: { isSubmitting, errors, touched },\n onBlur,\n onChange,\n value,\n ...props\n}: RadioProps): GigerRadioProps {\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onFormikChange(e);\n };\n\n return {\n isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),\n disabled: disabled || isSubmitting,\n value,\n onBlur:\n onBlur ??\n function (e: FocusEvent) {\n fieldOnBlur(e ?? field.name);\n },\n onChange: handleChange,\n checked: selectedValue === value,\n ...field,\n ...props,\n };\n}\n\nexport function Radio(props: RadioProps): JSX.Element {\n return <GigerRadio {...fieldToRadio(props)} />;\n}\n\nRadio.displayName = 'FormikRadio';\n"],"names":["fieldToRadio","_ref","disabled","field","onBlur","fieldOnBlur","value","selectedValue","onChange","onFormikChange","form","isSubmitting","errors","touched","props","handleChange","e","isInvalid","getIn","name","checked","Radio","_jsx","GigerRadio","displayName"],"mappings":";;;;AAOO,SAASA,YAAYA,CAAAC,IAAA,EAQI;EAAA,IARH;IACzBC,QAAQ;AACRC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,MAAM,EAAEC,WAAW;AAAEC,MAAAA,KAAK,EAAEC,aAAa;AAAEC,MAAAA,QAAQ,EAAEC,cAAc;MAAE,GAAGN,KAAAA;KAAO;AACxFO,IAAAA,IAAI,EAAE;MAAEC,YAAY;MAAEC,MAAM;AAAEC,MAAAA,OAAAA;KAAS;IACvCT,MAAM;IACNI,QAAQ;IACRF,KAAK;IACL,GAAGQ,KAAAA;AACK,GAAC,GAAAb,IAAA,CAAA;EACT,MAAMc,YAAY,GAAIC,CAAgC,IAAK;AACvDR,IAAAA,QAAQ,aAARA,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,QAAQ,CAAGQ,CAAC,CAAC,CAAA;IACbP,cAAc,CAACO,CAAC,CAAC,CAAA;GACpB,CAAA;EAED,OAAO;AACHC,IAAAA,SAAS,EAAEC,KAAK,CAACL,OAAO,EAAEV,KAAK,CAACgB,IAAI,CAAC,IAAI,CAAC,CAACD,KAAK,CAACN,MAAM,EAAET,KAAK,CAACgB,IAAI,CAAC;IACpEjB,QAAQ,EAAEA,QAAQ,IAAIS,YAAY;IAClCL,KAAK;IACLF,MAAM,EACFA,MAAM,KAANA,IAAAA,IAAAA,MAAM,cAANA,MAAM,GACN,UAAUY,CAAa,EAAE;MACrBX,WAAW,CAACW,CAAC,KAAA,IAAA,IAADA,CAAC,KAAA,KAAA,CAAA,GAADA,CAAC,GAAIb,KAAK,CAACgB,IAAI,CAAC,CAAA;KAC/B;AACLX,IAAAA,QAAQ,EAAEO,YAAY;IACtBK,OAAO,EAAEb,aAAa,KAAKD,KAAK;AAChC,IAAA,GAAGH,KAAK;IACR,GAAGW,KAAAA;GACN,CAAA;AACL,CAAA;AAEO,SAASO,KAAKA,CAACP,KAAiB,EAAe;EAClD,OAAOQ,GAAA,CAACC,OAAU,EAAA;IAAA,GAAKvB,YAAY,CAACc,KAAK,CAAA;AAAC,GAAG,CAAC,CAAA;AAClD,CAAA;AAEAO,KAAK,CAACG,WAAW,GAAG,aAAa;;;;"}
@@ -0,0 +1,11 @@
1
+ import { FieldProps } from 'formik';
2
+ import { IRadioGroupProps } from '@shipengine/giger';
3
+
4
+ type RadioGroupProps = FieldProps & Omit<IRadioGroupProps, 'name' | 'value'>;
5
+ declare function fieldToRadioGroup({ disabled, field: { onBlur: fieldOnBlur, value, onChange: onFormikChange, ...field }, form: { isSubmitting, errors, touched }, onBlur, onChange, ...props }: RadioGroupProps): IRadioGroupProps;
6
+ declare function RadioGroup(props: RadioGroupProps): JSX.Element;
7
+ declare namespace RadioGroup {
8
+ var displayName: string;
9
+ }
10
+
11
+ export { RadioGroup, RadioGroupProps, fieldToRadioGroup };
@@ -0,0 +1,47 @@
1
+ import { getIn } from 'formik';
2
+ import { RadioGroup as RadioGroup$1 } from '@shipengine/giger';
3
+ import { jsx } from '@emotion/react/jsx-runtime';
4
+
5
+ function fieldToRadioGroup(_ref) {
6
+ let {
7
+ disabled,
8
+ field: {
9
+ onBlur: fieldOnBlur,
10
+ value,
11
+ onChange: onFormikChange,
12
+ ...field
13
+ },
14
+ form: {
15
+ isSubmitting,
16
+ errors,
17
+ touched
18
+ },
19
+ onBlur,
20
+ onChange,
21
+ ...props
22
+ } = _ref;
23
+ const handleChange = e => {
24
+ onChange && onChange(e);
25
+ onFormikChange(e);
26
+ };
27
+ return {
28
+ isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),
29
+ disabled: disabled || isSubmitting,
30
+ value,
31
+ onBlur: onBlur !== null && onBlur !== void 0 ? onBlur : function (e) {
32
+ fieldOnBlur(e !== null && e !== void 0 ? e : field.name);
33
+ },
34
+ onChange: handleChange,
35
+ ...field,
36
+ ...props
37
+ };
38
+ }
39
+ function RadioGroup(props) {
40
+ return jsx(RadioGroup$1, {
41
+ ...fieldToRadioGroup(props)
42
+ });
43
+ }
44
+ RadioGroup.displayName = 'FormikRadioGroup';
45
+
46
+ export { RadioGroup, fieldToRadioGroup };
47
+ //# sourceMappingURL=RadioGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../src/RadioGroup.tsx"],"sourcesContent":["import { ChangeEvent, FocusEvent } from 'react';\nimport { FieldProps, getIn } from 'formik';\n\nimport { RadioGroup as GigerRadioGroup, IRadioGroupProps as GigerRadioGroupProps } from '@shipengine/giger';\n\nexport type RadioGroupProps = FieldProps & Omit<GigerRadioGroupProps, 'name' | 'value'>;\n\nexport function fieldToRadioGroup({\n disabled,\n field: { onBlur: fieldOnBlur, value, onChange: onFormikChange, ...field },\n form: { isSubmitting, errors, touched },\n onBlur,\n onChange,\n ...props\n}: RadioGroupProps): GigerRadioGroupProps {\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange && onChange(e);\n onFormikChange(e);\n };\n\n return {\n isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),\n disabled: disabled || isSubmitting,\n value,\n onBlur:\n onBlur ??\n function (e: FocusEvent) {\n fieldOnBlur(e ?? field.name);\n },\n onChange: handleChange,\n ...field,\n ...props,\n };\n}\n\nexport function RadioGroup(props: RadioGroupProps): JSX.Element {\n return <GigerRadioGroup {...fieldToRadioGroup(props)} />;\n}\n\nRadioGroup.displayName = 'FormikRadioGroup';\n"],"names":["fieldToRadioGroup","_ref","disabled","field","onBlur","fieldOnBlur","value","onChange","onFormikChange","form","isSubmitting","errors","touched","props","handleChange","e","isInvalid","getIn","name","RadioGroup","_jsx","GigerRadioGroup","displayName"],"mappings":";;;;AAOO,SAASA,iBAAiBA,CAAAC,IAAA,EAOS;EAAA,IAPR;IAC9BC,QAAQ;AACRC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,MAAM,EAAEC,WAAW;MAAEC,KAAK;AAAEC,MAAAA,QAAQ,EAAEC,cAAc;MAAE,GAAGL,KAAAA;KAAO;AACzEM,IAAAA,IAAI,EAAE;MAAEC,YAAY;MAAEC,MAAM;AAAEC,MAAAA,OAAAA;KAAS;IACvCR,MAAM;IACNG,QAAQ;IACR,GAAGM,KAAAA;AACU,GAAC,GAAAZ,IAAA,CAAA;EACd,MAAMa,YAAY,GAAIC,CAAgC,IAAK;AACvDR,IAAAA,QAAQ,IAAIA,QAAQ,CAACQ,CAAC,CAAC,CAAA;IACvBP,cAAc,CAACO,CAAC,CAAC,CAAA;GACpB,CAAA;EAED,OAAO;AACHC,IAAAA,SAAS,EAAEC,KAAK,CAACL,OAAO,EAAET,KAAK,CAACe,IAAI,CAAC,IAAI,CAAC,CAACD,KAAK,CAACN,MAAM,EAAER,KAAK,CAACe,IAAI,CAAC;IACpEhB,QAAQ,EAAEA,QAAQ,IAAIQ,YAAY;IAClCJ,KAAK;IACLF,MAAM,EACFA,MAAM,KAANA,IAAAA,IAAAA,MAAM,cAANA,MAAM,GACN,UAAUW,CAAa,EAAE;MACrBV,WAAW,CAACU,CAAC,KAAA,IAAA,IAADA,CAAC,KAAA,KAAA,CAAA,GAADA,CAAC,GAAIZ,KAAK,CAACe,IAAI,CAAC,CAAA;KAC/B;AACLX,IAAAA,QAAQ,EAAEO,YAAY;AACtB,IAAA,GAAGX,KAAK;IACR,GAAGU,KAAAA;GACN,CAAA;AACL,CAAA;AAEO,SAASM,UAAUA,CAACN,KAAsB,EAAe;EAC5D,OAAOO,GAAA,CAACC,YAAe,EAAA;IAAA,GAAKrB,iBAAiB,CAACa,KAAK,CAAA;AAAC,GAAG,CAAC,CAAA;AAC5D,CAAA;AAEAM,UAAU,CAACG,WAAW,GAAG,kBAAkB;;;;"}
@@ -0,0 +1,13 @@
1
+ import { FieldProps } from 'formik';
2
+ import { ISelectOption, ISelect } from '@shipengine/giger';
3
+
4
+ type SelectProps<FormValues = unknown> = FieldProps<ISelectOption | null, FormValues> & Omit<ISelect, 'name' | 'value'> & {
5
+ options?: ISelectOption[];
6
+ };
7
+ declare function fieldToSelect<FormValues = unknown>({ disabled, field: { onBlur: fieldOnBlur, onChange: onFormikChange, ...field }, form: { isSubmitting, touched, errors }, onClickAway, onChange, ...props }: SelectProps<FormValues>): ISelect;
8
+ declare function Select<FormValues = unknown>({ options, children, ...props }: SelectProps<FormValues>): JSX.Element;
9
+ declare namespace Select {
10
+ var displayName: string;
11
+ }
12
+
13
+ export { Select, SelectProps, fieldToSelect };