@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.
- package/dist/esm/Checkbox.d.ts +13 -0
- package/dist/esm/Checkbox.js +57 -0
- package/dist/esm/Checkbox.js.map +1 -0
- package/dist/esm/DatePicker.d.ts +11 -0
- package/dist/esm/DatePicker.js +51 -0
- package/dist/esm/DatePicker.js.map +1 -0
- package/dist/esm/FocusOnError.d.ts +21 -0
- package/dist/esm/FocusOnError.js +70 -0
- package/dist/esm/FocusOnError.js.map +1 -0
- package/dist/esm/FormField.d.ts +17 -0
- package/dist/esm/FormField.js +43 -0
- package/dist/esm/FormField.js.map +1 -0
- package/dist/esm/Input.d.ts +11 -0
- package/dist/esm/Input.js +48 -0
- package/dist/esm/Input.js.map +1 -0
- package/dist/esm/Radio.d.ts +11 -0
- package/dist/esm/Radio.js +49 -0
- package/dist/esm/Radio.js.map +1 -0
- package/dist/esm/RadioGroup.d.ts +11 -0
- package/dist/esm/RadioGroup.js +47 -0
- package/dist/esm/RadioGroup.js.map +1 -0
- package/dist/esm/Select.d.ts +13 -0
- package/dist/esm/Select.js +68 -0
- package/dist/esm/Select.js.map +1 -0
- package/dist/esm/SelectAutocomplete.d.ts +11 -0
- package/dist/esm/SelectAutocomplete.js +57 -0
- package/dist/esm/SelectAutocomplete.js.map +1 -0
- package/dist/esm/Textarea.d.ts +11 -0
- package/dist/esm/Textarea.js +48 -0
- package/dist/esm/Textarea.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/lib/Checkbox.d.ts +13 -0
- package/dist/lib/Checkbox.js +62 -0
- package/dist/lib/Checkbox.js.map +1 -0
- package/dist/lib/DatePicker.d.ts +11 -0
- package/dist/lib/DatePicker.js +56 -0
- package/dist/lib/DatePicker.js.map +1 -0
- package/dist/lib/FocusOnError.d.ts +21 -0
- package/dist/lib/FocusOnError.js +79 -0
- package/dist/lib/FocusOnError.js.map +1 -0
- package/dist/lib/FormField.d.ts +17 -0
- package/dist/lib/FormField.js +47 -0
- package/dist/lib/FormField.js.map +1 -0
- package/dist/lib/Input.d.ts +11 -0
- package/dist/lib/Input.js +53 -0
- package/dist/lib/Input.js.map +1 -0
- package/dist/lib/Radio.d.ts +11 -0
- package/dist/lib/Radio.js +54 -0
- package/dist/lib/Radio.js.map +1 -0
- package/dist/lib/RadioGroup.d.ts +11 -0
- package/dist/lib/RadioGroup.js +52 -0
- package/dist/lib/RadioGroup.js.map +1 -0
- package/dist/lib/Select.d.ts +13 -0
- package/dist/lib/Select.js +73 -0
- package/dist/lib/Select.js.map +1 -0
- package/dist/lib/SelectAutocomplete.d.ts +11 -0
- package/dist/lib/SelectAutocomplete.js +62 -0
- package/dist/lib/SelectAutocomplete.js.map +1 -0
- package/dist/lib/Textarea.d.ts +11 -0
- package/dist/lib/Textarea.js +53 -0
- package/dist/lib/Textarea.js.map +1 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.js +37 -0
- package/dist/lib/index.js.map +1 -0
- 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;;;;"}
|