@shipengine/formik-giger 0.2.0 → 0.4.0

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.
Files changed (67) hide show
  1. package/dist/esm/Checkbox.d.ts +13 -0
  2. package/dist/esm/Checkbox.js +57 -0
  3. package/dist/esm/Checkbox.js.map +1 -0
  4. package/dist/esm/DatePicker.d.ts +11 -0
  5. package/dist/esm/DatePicker.js +51 -0
  6. package/dist/esm/DatePicker.js.map +1 -0
  7. package/dist/esm/FocusOnError.d.ts +21 -0
  8. package/dist/esm/FocusOnError.js +70 -0
  9. package/dist/esm/FocusOnError.js.map +1 -0
  10. package/dist/esm/FormField.d.ts +17 -0
  11. package/dist/esm/FormField.js +43 -0
  12. package/dist/esm/FormField.js.map +1 -0
  13. package/dist/esm/Input.d.ts +11 -0
  14. package/dist/esm/Input.js +48 -0
  15. package/dist/esm/Input.js.map +1 -0
  16. package/dist/esm/Radio.d.ts +11 -0
  17. package/dist/esm/Radio.js +49 -0
  18. package/dist/esm/Radio.js.map +1 -0
  19. package/dist/esm/RadioGroup.d.ts +11 -0
  20. package/dist/esm/RadioGroup.js +47 -0
  21. package/dist/esm/RadioGroup.js.map +1 -0
  22. package/dist/esm/Select.d.ts +13 -0
  23. package/dist/esm/Select.js +68 -0
  24. package/dist/esm/Select.js.map +1 -0
  25. package/dist/esm/SelectAutocomplete.d.ts +11 -0
  26. package/dist/esm/SelectAutocomplete.js +57 -0
  27. package/dist/esm/SelectAutocomplete.js.map +1 -0
  28. package/dist/esm/Textarea.d.ts +11 -0
  29. package/dist/esm/Textarea.js +48 -0
  30. package/dist/esm/Textarea.js.map +1 -0
  31. package/dist/esm/index.d.ts +10 -0
  32. package/dist/esm/index.js +11 -0
  33. package/dist/esm/index.js.map +1 -0
  34. package/dist/lib/Checkbox.d.ts +13 -0
  35. package/dist/lib/Checkbox.js +62 -0
  36. package/dist/lib/Checkbox.js.map +1 -0
  37. package/dist/lib/DatePicker.d.ts +11 -0
  38. package/dist/lib/DatePicker.js +56 -0
  39. package/dist/lib/DatePicker.js.map +1 -0
  40. package/dist/lib/FocusOnError.d.ts +21 -0
  41. package/dist/lib/FocusOnError.js +79 -0
  42. package/dist/lib/FocusOnError.js.map +1 -0
  43. package/dist/lib/FormField.d.ts +17 -0
  44. package/dist/lib/FormField.js +47 -0
  45. package/dist/lib/FormField.js.map +1 -0
  46. package/dist/lib/Input.d.ts +11 -0
  47. package/dist/lib/Input.js +53 -0
  48. package/dist/lib/Input.js.map +1 -0
  49. package/dist/lib/Radio.d.ts +11 -0
  50. package/dist/lib/Radio.js +54 -0
  51. package/dist/lib/Radio.js.map +1 -0
  52. package/dist/lib/RadioGroup.d.ts +11 -0
  53. package/dist/lib/RadioGroup.js +52 -0
  54. package/dist/lib/RadioGroup.js.map +1 -0
  55. package/dist/lib/Select.d.ts +13 -0
  56. package/dist/lib/Select.js +73 -0
  57. package/dist/lib/Select.js.map +1 -0
  58. package/dist/lib/SelectAutocomplete.d.ts +11 -0
  59. package/dist/lib/SelectAutocomplete.js +62 -0
  60. package/dist/lib/SelectAutocomplete.js.map +1 -0
  61. package/dist/lib/Textarea.d.ts +11 -0
  62. package/dist/lib/Textarea.js +53 -0
  63. package/dist/lib/Textarea.js.map +1 -0
  64. package/dist/lib/index.d.ts +10 -0
  65. package/dist/lib/index.js +37 -0
  66. package/dist/lib/index.js.map +1 -0
  67. package/package.json +4 -4
@@ -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 };
@@ -0,0 +1,68 @@
1
+ import { getIn } from 'formik';
2
+ import { Option, Select as Select$1 } from '@shipengine/giger';
3
+ import { jsx } from '@emotion/react/jsx-runtime';
4
+
5
+ function fieldToSelect(_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
+ onClickAway,
19
+ onChange,
20
+ ...props
21
+ } = _ref;
22
+ const handleChange = (fieldName, value) => {
23
+ onChange === null || onChange === void 0 ? void 0 : onChange(fieldName, value);
24
+ onFormikChange({
25
+ target: {
26
+ name: field.name,
27
+ value
28
+ }
29
+ });
30
+ };
31
+ const handleClickAway = () => {
32
+ onClickAway === null || onClickAway === void 0 ? void 0 : onClickAway();
33
+ fieldOnBlur({
34
+ target: {
35
+ name: field.name
36
+ }
37
+ });
38
+ };
39
+ return {
40
+ isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),
41
+ disabled: disabled || isSubmitting,
42
+ onClickAway: handleClickAway,
43
+ onChange: handleChange,
44
+ ...field,
45
+ ...props
46
+ };
47
+ }
48
+ function Select(_ref2) {
49
+ let {
50
+ options,
51
+ children,
52
+ ...props
53
+ } = _ref2;
54
+ const formikProps = fieldToSelect(props);
55
+ const renderedOptions = options ? options.map(option => jsx(Option, {
56
+ value: option,
57
+ selected: option === formikProps.value,
58
+ children: option.label
59
+ }, option.label)) : children;
60
+ return jsx(Select$1, {
61
+ ...formikProps,
62
+ children: renderedOptions
63
+ });
64
+ }
65
+ Select.displayName = 'FormikSelect';
66
+
67
+ export { Select, fieldToSelect };
68
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sources":["../../src/Select.tsx"],"sourcesContent":["import { FieldProps, getIn } from 'formik';\n\nimport { ISelectOption, Select as GigerSelect, ISelect as IGigerSelect, Option } from '@shipengine/giger';\n\nexport type SelectProps<FormValues = unknown> = FieldProps<ISelectOption | null, FormValues> &\n Omit<IGigerSelect, 'name' | 'value'> & {\n options?: ISelectOption[];\n };\n\nexport function fieldToSelect<FormValues = unknown>({\n disabled,\n field: { onBlur: fieldOnBlur, onChange: onFormikChange, ...field },\n form: { isSubmitting, touched, errors },\n onClickAway,\n onChange,\n ...props\n}: SelectProps<FormValues>): IGigerSelect {\n const handleChange = (fieldName: string, value: ISelectOption | null) => {\n onChange?.(fieldName, value);\n onFormikChange({ target: { name: field.name, value } });\n };\n\n const handleClickAway = () => {\n onClickAway?.();\n fieldOnBlur({ target: { name: field.name } });\n };\n\n return {\n isInvalid: getIn(touched, field.name) && !!getIn(errors, field.name),\n disabled: disabled || isSubmitting,\n onClickAway: handleClickAway,\n onChange: handleChange,\n ...field,\n ...props,\n };\n}\n\nexport function Select<FormValues = unknown>({ options, children, ...props }: SelectProps<FormValues>): JSX.Element {\n const formikProps = fieldToSelect(props);\n\n const renderedOptions = options\n ? options.map((option) => (\n <Option key={option.label} value={option} selected={option === formikProps.value}>\n {option.label}\n </Option>\n ))\n : children;\n\n return <GigerSelect {...formikProps}>{renderedOptions}</GigerSelect>;\n}\n\nSelect.displayName = 'FormikSelect';\n"],"names":["fieldToSelect","_ref","disabled","field","onBlur","fieldOnBlur","onChange","onFormikChange","form","isSubmitting","touched","errors","onClickAway","props","handleChange","fieldName","value","target","name","handleClickAway","isInvalid","getIn","Select","_ref2","options","children","formikProps","renderedOptions","map","option","_jsx","Option","selected","label","GigerSelect","displayName"],"mappings":";;;;AASO,SAASA,aAAaA,CAAAC,IAAA,EAOa;EAAA,IAPU;IAChDC,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;IACvCC,WAAW;IACXN,QAAQ;IACR,GAAGO,KAAAA;AACkB,GAAC,GAAAZ,IAAA,CAAA;AACtB,EAAA,MAAMa,YAAY,GAAGA,CAACC,SAAiB,EAAEC,KAA2B,KAAK;IACrEV,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAGS,SAAS,EAAEC,KAAK,CAAC,CAAA;AAC5BT,IAAAA,cAAc,CAAC;AAAEU,MAAAA,MAAM,EAAE;QAAEC,IAAI,EAAEf,KAAK,CAACe,IAAI;AAAEF,QAAAA,KAAAA;AAAM,OAAA;AAAE,KAAC,CAAC,CAAA;GAC1D,CAAA;EAED,MAAMG,eAAe,GAAGA,MAAM;AAC1BP,IAAAA,WAAW,KAAXA,IAAAA,IAAAA,WAAW,KAAXA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAW,EAAI,CAAA;AACfP,IAAAA,WAAW,CAAC;AAAEY,MAAAA,MAAM,EAAE;QAAEC,IAAI,EAAEf,KAAK,CAACe,IAAAA;AAAK,OAAA;AAAE,KAAC,CAAC,CAAA;GAChD,CAAA;EAED,OAAO;AACHE,IAAAA,SAAS,EAAEC,KAAK,CAACX,OAAO,EAAEP,KAAK,CAACe,IAAI,CAAC,IAAI,CAAC,CAACG,KAAK,CAACV,MAAM,EAAER,KAAK,CAACe,IAAI,CAAC;IACpEhB,QAAQ,EAAEA,QAAQ,IAAIO,YAAY;AAClCG,IAAAA,WAAW,EAAEO,eAAe;AAC5Bb,IAAAA,QAAQ,EAAEQ,YAAY;AACtB,IAAA,GAAGX,KAAK;IACR,GAAGU,KAAAA;GACN,CAAA;AACL,CAAA;AAEO,SAASS,MAAMA,CAAAC,KAAA,EAA8F;EAAA,IAAvE;IAAEC,OAAO;IAAEC,QAAQ;IAAE,GAAGZ,KAAAA;AAA+B,GAAC,GAAAU,KAAA,CAAA;AACjG,EAAA,MAAMG,WAAW,GAAG1B,aAAa,CAACa,KAAK,CAAC,CAAA;AAExC,EAAA,MAAMc,eAAe,GAAGH,OAAO,GACzBA,OAAO,CAACI,GAAG,CAAEC,MAAM,IACfC,GAAA,CAACC,MAAM,EAAA;AAAoBf,IAAAA,KAAK,EAAEa,MAAO;AAACG,IAAAA,QAAQ,EAAEH,MAAM,KAAKH,WAAW,CAACV,KAAM;IAAAS,QAAA,EAC5EI,MAAM,CAACI,KAAAA;AAAK,GAAA,EADJJ,MAAM,CAACI,KAEZ,CACX,CAAC,GACFR,QAAQ,CAAA;EAEd,OAAOK,GAAA,CAACI,QAAW,EAAA;AAAA,IAAA,GAAKR,WAAW;AAAAD,IAAAA,QAAA,EAAGE,eAAAA;AAAe,GAAc,CAAC,CAAA;AACxE,CAAA;AAEAL,MAAM,CAACa,WAAW,GAAG,cAAc;;;;"}