envoc-form 5.0.6 → 6.0.1-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/README.md +4636 -1236
- package/dist/index.cjs +21685 -0
- package/dist/index.d.ts +599 -0
- package/dist/index.js +21617 -0
- package/package.json +73 -77
- package/dist/css/envoc-form-styles.css +0 -3
- package/dist/css/envoc-form-styles.css.map +0 -1
- package/es/AddressInput/AddressInput.d.ts +0 -24
- package/es/AddressInput/AddressInput.js +0 -20
- package/es/AddressInput/UsStates.d.ts +0 -3
- package/es/AddressInput/UsStates.js +0 -53
- package/es/ConfirmBaseForm/ConfirmBaseForm.d.ts +0 -26
- package/es/ConfirmBaseForm/ConfirmBaseForm.js +0 -42
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +0 -24
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -60
- package/es/DatePicker/DatePickerGroup.d.ts +0 -13
- package/es/DatePicker/DatePickerGroup.js +0 -87
- package/es/DatePicker/DatePickerHelper.d.ts +0 -3
- package/es/DatePicker/DatePickerHelper.js +0 -1
- package/es/DatePicker/StringDateOnlyPickerGroup.d.ts +0 -9
- package/es/DatePicker/StringDateOnlyPickerGroup.js +0 -29
- package/es/DatePicker/StringDatePickerGroup.d.ts +0 -9
- package/es/DatePicker/StringDatePickerGroup.js +0 -24
- package/es/Field/CustomFieldInputProps.d.ts +0 -7
- package/es/Field/CustomFieldInputProps.js +0 -1
- package/es/Field/CustomFieldMetaProps.d.ts +0 -4
- package/es/Field/CustomFieldMetaProps.js +0 -1
- package/es/Field/Field.d.ts +0 -28
- package/es/Field/Field.js +0 -51
- package/es/Field/FieldErrorScrollTarget.d.ts +0 -2
- package/es/Field/FieldErrorScrollTarget.js +0 -12
- package/es/Field/FieldNameContext.d.ts +0 -3
- package/es/Field/FieldNameContext.js +0 -3
- package/es/Field/FieldSection.d.ts +0 -7
- package/es/Field/FieldSection.js +0 -9
- package/es/Field/InjectedFieldProps.d.ts +0 -7
- package/es/Field/InjectedFieldProps.js +0 -1
- package/es/Field/StandAloneInput.d.ts +0 -13
- package/es/Field/StandAloneInput.js +0 -50
- package/es/Field/useStandardField.d.ts +0 -21
- package/es/Field/useStandardField.js +0 -92
- package/es/FieldArray/FieldArray.d.ts +0 -24
- package/es/FieldArray/FieldArray.js +0 -77
- package/es/File/FileGroup.d.ts +0 -10
- package/es/File/FileGroup.js +0 -53
- package/es/File/FileList.d.ts +0 -5
- package/es/File/FileList.js +0 -10
- package/es/File/humanFileSize.d.ts +0 -1
- package/es/File/humanFileSize.js +0 -6
- package/es/Form/FocusError.d.ts +0 -7
- package/es/Form/FocusError.js +0 -42
- package/es/Form/Form.d.ts +0 -33
- package/es/Form/Form.js +0 -141
- package/es/Form/FormBasedPreventNavigation.d.ts +0 -6
- package/es/Form/FormBasedPreventNavigation.js +0 -20
- package/es/Form/LegacyFormBasedPreventNavigation.d.ts +0 -17
- package/es/Form/LegacyFormBasedPreventNavigation.js +0 -69
- package/es/Form/NewFormBasedPreventNavigation.d.ts +0 -14
- package/es/Form/NewFormBasedPreventNavigation.js +0 -39
- package/es/Form/ServerErrorContext.d.ts +0 -11
- package/es/Form/ServerErrorContext.js +0 -9
- package/es/FormActions.d.ts +0 -12
- package/es/FormActions.js +0 -16
- package/es/FormDefaults.d.ts +0 -4
- package/es/FormDefaults.js +0 -2
- package/es/Group.d.ts +0 -16
- package/es/Group.js +0 -14
- package/es/Input/CheckboxGroup.d.ts +0 -6
- package/es/Input/CheckboxGroup.js +0 -14
- package/es/Input/CheckboxInputGroup.d.ts +0 -13
- package/es/Input/CheckboxInputGroup.js +0 -41
- package/es/Input/IconInputGroup.d.ts +0 -12
- package/es/Input/IconInputGroup.js +0 -43
- package/es/Input/InputGroup.d.ts +0 -12
- package/es/Input/InputGroup.js +0 -34
- package/es/Input/MoneyInputGroup.d.ts +0 -9
- package/es/Input/MoneyInputGroup.js +0 -43
- package/es/Input/NumberInputGroup.d.ts +0 -9
- package/es/Input/NumberInputGroup.js +0 -43
- package/es/Input/PhoneNumberInputGroup.d.ts +0 -10
- package/es/Input/PhoneNumberInputGroup.js +0 -47
- package/es/Input/StringInputGroup.d.ts +0 -8
- package/es/Input/StringInputGroup.js +0 -43
- package/es/Normalization/NormalizationFunction.d.ts +0 -4
- package/es/Normalization/NormalizationFunction.js +0 -1
- package/es/Normalization/normalizers.d.ts +0 -4
- package/es/Normalization/normalizers.js +0 -32
- package/es/Select/BooleanSelectGroup.d.ts +0 -7
- package/es/Select/BooleanSelectGroup.js +0 -28
- package/es/Select/NumberSelectGroup.d.ts +0 -9
- package/es/Select/NumberSelectGroup.js +0 -21
- package/es/Select/SelectGroup.d.ts +0 -27
- package/es/Select/SelectGroup.js +0 -65
- package/es/Select/SelectGroupPropsHelper.d.ts +0 -3
- package/es/Select/SelectGroupPropsHelper.js +0 -1
- package/es/Select/StringSelectGroup.d.ts +0 -9
- package/es/Select/StringSelectGroup.js +0 -21
- package/es/StandardFormActions.d.ts +0 -11
- package/es/StandardFormActions.js +0 -14
- package/es/SubmitFormButton.d.ts +0 -10
- package/es/SubmitFormButton.js +0 -40
- package/es/TextArea/TextAreaGroup.d.ts +0 -9
- package/es/TextArea/TextAreaGroup.js +0 -35
- package/es/Validation/ValidatedApiResult.d.ts +0 -6
- package/es/Validation/ValidatedApiResult.js +0 -1
- package/es/Validation/ValidationError.d.ts +0 -5
- package/es/Validation/ValidationError.js +0 -1
- package/es/Validation/ValidationFunction.d.ts +0 -4
- package/es/Validation/ValidationFunction.js +0 -1
- package/es/Validation/validators.d.ts +0 -18
- package/es/Validation/validators.js +0 -77
- package/es/index.d.ts +0 -77
- package/es/index.js +0 -52
- package/es/setupTests.d.ts +0 -1
- package/es/setupTests.js +0 -1
- package/es/utils/objectContainsNonSerializableProperty.d.ts +0 -1
- package/es/utils/objectContainsNonSerializableProperty.js +0 -14
- package/es/utils/objectToFormData.d.ts +0 -10
- package/es/utils/objectToFormData.js +0 -77
- package/es/utils/typeChecks.d.ts +0 -8
- package/es/utils/typeChecks.js +0 -18
- package/lib/AddressInput/AddressInput.d.ts +0 -24
- package/lib/AddressInput/AddressInput.js +0 -26
- package/lib/AddressInput/UsStates.d.ts +0 -3
- package/lib/AddressInput/UsStates.js +0 -55
- package/lib/ConfirmBaseForm/ConfirmBaseForm.d.ts +0 -26
- package/lib/ConfirmBaseForm/ConfirmBaseForm.js +0 -45
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +0 -24
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -66
- package/lib/DatePicker/DatePickerGroup.d.ts +0 -13
- package/lib/DatePicker/DatePickerGroup.js +0 -95
- package/lib/DatePicker/DatePickerHelper.d.ts +0 -3
- package/lib/DatePicker/DatePickerHelper.js +0 -2
- package/lib/DatePicker/StringDateOnlyPickerGroup.d.ts +0 -9
- package/lib/DatePicker/StringDateOnlyPickerGroup.js +0 -35
- package/lib/DatePicker/StringDatePickerGroup.d.ts +0 -9
- package/lib/DatePicker/StringDatePickerGroup.js +0 -30
- package/lib/Field/CustomFieldInputProps.d.ts +0 -7
- package/lib/Field/CustomFieldInputProps.js +0 -2
- package/lib/Field/CustomFieldMetaProps.d.ts +0 -4
- package/lib/Field/CustomFieldMetaProps.js +0 -2
- package/lib/Field/Field.d.ts +0 -28
- package/lib/Field/Field.js +0 -56
- package/lib/Field/FieldErrorScrollTarget.d.ts +0 -2
- package/lib/Field/FieldErrorScrollTarget.js +0 -15
- package/lib/Field/FieldNameContext.d.ts +0 -3
- package/lib/Field/FieldNameContext.js +0 -9
- package/lib/Field/FieldSection.d.ts +0 -7
- package/lib/Field/FieldSection.js +0 -12
- package/lib/Field/InjectedFieldProps.d.ts +0 -7
- package/lib/Field/InjectedFieldProps.js +0 -2
- package/lib/Field/StandAloneInput.d.ts +0 -13
- package/lib/Field/StandAloneInput.js +0 -76
- package/lib/Field/useStandardField.d.ts +0 -21
- package/lib/Field/useStandardField.js +0 -95
- package/lib/FieldArray/FieldArray.d.ts +0 -24
- package/lib/FieldArray/FieldArray.js +0 -83
- package/lib/File/FileGroup.d.ts +0 -10
- package/lib/File/FileGroup.js +0 -58
- package/lib/File/FileList.d.ts +0 -5
- package/lib/File/FileList.js +0 -13
- package/lib/File/humanFileSize.d.ts +0 -1
- package/lib/File/humanFileSize.js +0 -10
- package/lib/Form/FocusError.d.ts +0 -7
- package/lib/Form/FocusError.js +0 -48
- package/lib/Form/Form.d.ts +0 -33
- package/lib/Form/Form.js +0 -147
- package/lib/Form/FormBasedPreventNavigation.d.ts +0 -6
- package/lib/Form/FormBasedPreventNavigation.js +0 -26
- package/lib/Form/LegacyFormBasedPreventNavigation.d.ts +0 -17
- package/lib/Form/LegacyFormBasedPreventNavigation.js +0 -72
- package/lib/Form/NewFormBasedPreventNavigation.d.ts +0 -14
- package/lib/Form/NewFormBasedPreventNavigation.js +0 -42
- package/lib/Form/ServerErrorContext.d.ts +0 -11
- package/lib/Form/ServerErrorContext.js +0 -15
- package/lib/FormActions.d.ts +0 -12
- package/lib/FormActions.js +0 -22
- package/lib/FormDefaults.d.ts +0 -4
- package/lib/FormDefaults.js +0 -5
- package/lib/Group.d.ts +0 -16
- package/lib/Group.js +0 -20
- package/lib/Input/CheckboxGroup.d.ts +0 -6
- package/lib/Input/CheckboxGroup.js +0 -20
- package/lib/Input/CheckboxInputGroup.d.ts +0 -13
- package/lib/Input/CheckboxInputGroup.js +0 -46
- package/lib/Input/IconInputGroup.d.ts +0 -12
- package/lib/Input/IconInputGroup.js +0 -48
- package/lib/Input/InputGroup.d.ts +0 -12
- package/lib/Input/InputGroup.js +0 -39
- package/lib/Input/MoneyInputGroup.d.ts +0 -9
- package/lib/Input/MoneyInputGroup.js +0 -48
- package/lib/Input/NumberInputGroup.d.ts +0 -9
- package/lib/Input/NumberInputGroup.js +0 -48
- package/lib/Input/PhoneNumberInputGroup.d.ts +0 -10
- package/lib/Input/PhoneNumberInputGroup.js +0 -52
- package/lib/Input/StringInputGroup.d.ts +0 -8
- package/lib/Input/StringInputGroup.js +0 -48
- package/lib/Normalization/NormalizationFunction.d.ts +0 -4
- package/lib/Normalization/NormalizationFunction.js +0 -2
- package/lib/Normalization/normalizers.d.ts +0 -4
- package/lib/Normalization/normalizers.js +0 -37
- package/lib/Select/BooleanSelectGroup.d.ts +0 -7
- package/lib/Select/BooleanSelectGroup.js +0 -35
- package/lib/Select/NumberSelectGroup.d.ts +0 -9
- package/lib/Select/NumberSelectGroup.js +0 -29
- package/lib/Select/SelectGroup.d.ts +0 -27
- package/lib/Select/SelectGroup.js +0 -71
- package/lib/Select/SelectGroupPropsHelper.d.ts +0 -3
- package/lib/Select/SelectGroupPropsHelper.js +0 -2
- package/lib/Select/StringSelectGroup.d.ts +0 -9
- package/lib/Select/StringSelectGroup.js +0 -29
- package/lib/StandardFormActions.d.ts +0 -11
- package/lib/StandardFormActions.js +0 -20
- package/lib/SubmitFormButton.d.ts +0 -10
- package/lib/SubmitFormButton.js +0 -45
- package/lib/TextArea/TextAreaGroup.d.ts +0 -9
- package/lib/TextArea/TextAreaGroup.js +0 -40
- package/lib/Validation/ValidatedApiResult.d.ts +0 -6
- package/lib/Validation/ValidatedApiResult.js +0 -2
- package/lib/Validation/ValidationError.d.ts +0 -5
- package/lib/Validation/ValidationError.js +0 -2
- package/lib/Validation/ValidationFunction.d.ts +0 -4
- package/lib/Validation/ValidationFunction.js +0 -2
- package/lib/Validation/validators.d.ts +0 -18
- package/lib/Validation/validators.js +0 -90
- package/lib/index.d.ts +0 -77
- package/lib/index.js +0 -121
- package/lib/setupTests.d.ts +0 -1
- package/lib/setupTests.js +0 -3
- package/lib/utils/objectContainsNonSerializableProperty.d.ts +0 -1
- package/lib/utils/objectContainsNonSerializableProperty.js +0 -17
- package/lib/utils/objectToFormData.d.ts +0 -10
- package/lib/utils/objectToFormData.js +0 -79
- package/lib/utils/typeChecks.d.ts +0 -8
- package/lib/utils/typeChecks.js +0 -29
- package/src/AddressInput/AddressInput.test.tsx +0 -27
- package/src/AddressInput/AddressInput.tsx +0 -82
- package/src/AddressInput/UsStates.ts +0 -55
- package/src/AddressInput/__snapshots__/AddressInput.test.tsx.snap +0 -182
- package/src/ConfirmBaseForm/ConfirmBaseForm.test.tsx +0 -24
- package/src/ConfirmBaseForm/ConfirmBaseForm.tsx +0 -74
- package/src/ConfirmBaseForm/__snapshots__/ConfirmBaseForm.test.tsx.snap +0 -23
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.test.tsx +0 -24
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.tsx +0 -87
- package/src/ConfirmDeleteForm/__snapshots__/ConfirmDeleteForm.test.tsx.snap +0 -25
- package/src/DatePicker/DatePicker.test.tsx +0 -48
- package/src/DatePicker/DatePickerGroup.tsx +0 -109
- package/src/DatePicker/DatePickerHelper.ts +0 -4
- package/src/DatePicker/StringDateOnlyPickerGroup.tsx +0 -28
- package/src/DatePicker/StringDatePickerGroup.tsx +0 -20
- package/src/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -152
- package/src/Field/CustomFieldInputProps.ts +0 -10
- package/src/Field/CustomFieldMetaProps.ts +0 -5
- package/src/Field/Field.tsx +0 -113
- package/src/Field/FieldErrorScrollTarget.tsx +0 -12
- package/src/Field/FieldNameContext.ts +0 -6
- package/src/Field/FieldSection.tsx +0 -18
- package/src/Field/InjectedFieldProps.ts +0 -8
- package/src/Field/StandAloneInput.tsx +0 -55
- package/src/Field/useStandardField.ts +0 -125
- package/src/FieldArray/FieldArray.tsx +0 -154
- package/src/File/FileGroup.test.tsx +0 -35
- package/src/File/FileGroup.tsx +0 -82
- package/src/File/FileList.tsx +0 -21
- package/src/File/__snapshots__/FileGroup.test.tsx.snap +0 -34
- package/src/File/humanFileSize.ts +0 -8
- package/src/Form/FocusError.tsx +0 -55
- package/src/Form/Form.test.tsx +0 -14
- package/src/Form/Form.tsx +0 -234
- package/src/Form/FormBasedPreventNavigation.tsx +0 -56
- package/src/Form/LegacyFormBasedPreventNavigation.tsx +0 -77
- package/src/Form/NewFormBasedPreventNavigation.tsx +0 -59
- package/src/Form/ServerErrorContext.ts +0 -18
- package/src/Form/__snapshots__/Form.test.tsx.snap +0 -10
- package/src/FormActions.tsx +0 -47
- package/src/FormDefaults.ts +0 -2
- package/src/Group.tsx +0 -62
- package/src/Input/CheckboxGroup.tsx +0 -60
- package/src/Input/CheckboxInputGroup.tsx +0 -78
- package/src/Input/IconInputGroup.tsx +0 -54
- package/src/Input/InputGroup.tsx +0 -66
- package/src/Input/MoneyInputGroup.tsx +0 -47
- package/src/Input/NumberInputGroup.tsx +0 -45
- package/src/Input/PhoneNumberInputGroup.tsx +0 -45
- package/src/Input/StringInputGroup.tsx +0 -50
- package/src/Input/__Tests__/CheckboxInputGroup.test.tsx +0 -26
- package/src/Input/__Tests__/IconInputGroup.test.tsx +0 -35
- package/src/Input/__Tests__/MoneyInputGroup.test.tsx +0 -37
- package/src/Input/__Tests__/NumberInputGroup.test.tsx +0 -35
- package/src/Input/__Tests__/PhoneNumberInputGroup.test.tsx +0 -36
- package/src/Input/__Tests__/StringInputGroup.test.tsx +0 -27
- package/src/Input/__Tests__/__snapshots__/CheckboxInputGroup.test.tsx.snap +0 -33
- package/src/Input/__Tests__/__snapshots__/IconInputGroup.test.tsx.snap +0 -32
- package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +0 -34
- package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +0 -32
- package/src/Input/__Tests__/__snapshots__/PhoneNumberInputGroup.test.tsx.snap +0 -33
- package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +0 -31
- package/src/Normalization/NormalizationFunction.ts +0 -4
- package/src/Normalization/normalizers.ts +0 -44
- package/src/Select/BooleanSelectGroup.tsx +0 -28
- package/src/Select/NumberSelectGroup.tsx +0 -16
- package/src/Select/SelectGroup.tsx +0 -124
- package/src/Select/SelectGroupPropsHelper.ts +0 -4
- package/src/Select/StringSelectGroup.tsx +0 -16
- package/src/Select/__tests__/BooleanSelectGroup.test.tsx +0 -35
- package/src/Select/__tests__/NumberSelectGroup.test.tsx +0 -87
- package/src/Select/__tests__/StringSelectGroup.test.tsx +0 -89
- package/src/Select/__tests__/__snapshots__/BooleanSelectGroup.test.tsx.snap +0 -98
- package/src/Select/__tests__/__snapshots__/NumberSelectGroup.test.tsx.snap +0 -195
- package/src/Select/__tests__/__snapshots__/StringSelectGroup.test.tsx.snap +0 -195
- package/src/StandardFormActions.tsx +0 -41
- package/src/SubmitFormButton.tsx +0 -54
- package/src/TextArea/TextAreaGroup.tsx +0 -64
- package/src/Validation/ValidatedApiResult.ts +0 -8
- package/src/Validation/ValidationError.ts +0 -6
- package/src/Validation/ValidationFunction.ts +0 -4
- package/src/Validation/validators.test.tsx +0 -81
- package/src/Validation/validators.ts +0 -97
- package/src/__Tests__/FormTestBase.tsx +0 -65
- package/src/__Tests__/RealisticForm.test.tsx +0 -82
- package/src/__Tests__/StandardFormActions.test.tsx +0 -17
- package/src/__Tests__/SubmitFormButton.test.tsx +0 -17
- package/src/__Tests__/__snapshots__/StandardFormActions.test.tsx.snap +0 -27
- package/src/__Tests__/__snapshots__/SubmitFormButton.test.tsx.snap +0 -20
- package/src/__Tests__/index.ts +0 -3
- package/src/_variables.scss +0 -11
- package/src/index.ts +0 -156
- package/src/react-app-env.d.ts +0 -1
- package/src/setupTests.ts +0 -1
- package/src/styles.scss +0 -0
- package/src/utils/objectContainsNonSerializableProperty.test.tsx +0 -49
- package/src/utils/objectContainsNonSerializableProperty.ts +0 -17
- package/src/utils/objectToFormData.test.tsx +0 -76
- package/src/utils/objectToFormData.ts +0 -105
- package/src/utils/typeChecks.ts +0 -18
@@ -1,41 +0,0 @@
|
|
1
|
-
import { MouseEventHandler } from 'react';
|
2
|
-
import { clsx } from 'clsx';
|
3
|
-
import { useFormikContext } from 'formik';
|
4
|
-
import { FormDefaults } from './FormDefaults';
|
5
|
-
import SubmitFormButton from './SubmitFormButton';
|
6
|
-
|
7
|
-
export interface StandardFormActionsProps {
|
8
|
-
/** Allow the form to be submitted without any changes. By default this is not allowed. */
|
9
|
-
allowPristineSubmit?: boolean;
|
10
|
-
/** The cancel button's `onClick`.
|
11
|
-
* @defaultValue `window.history.back()`
|
12
|
-
*/
|
13
|
-
handleCancel?: MouseEventHandler<HTMLButtonElement>;
|
14
|
-
}
|
15
|
-
|
16
|
-
/** Standard submit and cancel buttons. */
|
17
|
-
export default function StandardFormActions({
|
18
|
-
allowPristineSubmit,
|
19
|
-
handleCancel,
|
20
|
-
}: StandardFormActionsProps) {
|
21
|
-
const { isSubmitting } = useFormikContext();
|
22
|
-
|
23
|
-
return (
|
24
|
-
<>
|
25
|
-
<SubmitFormButton allowPristineSubmit={allowPristineSubmit} />
|
26
|
-
|
27
|
-
<button
|
28
|
-
className={clsx(
|
29
|
-
FormDefaults.cssClassPrefix + 'standard-form-actions-cancel-button'
|
30
|
-
)}
|
31
|
-
type="button"
|
32
|
-
disabled={isSubmitting}
|
33
|
-
onClick={handleCancel || goBack}>
|
34
|
-
Cancel
|
35
|
-
</button>
|
36
|
-
</>
|
37
|
-
);
|
38
|
-
function goBack() {
|
39
|
-
window.history.back();
|
40
|
-
}
|
41
|
-
}
|
package/src/SubmitFormButton.tsx
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
import React, { LegacyRef } from 'react';
|
2
|
-
import { clsx } from 'clsx';
|
3
|
-
import { useFormikContext } from 'formik';
|
4
|
-
import { FormDefaults } from './FormDefaults';
|
5
|
-
|
6
|
-
export interface SubmitFormButtonProps
|
7
|
-
extends Omit<React.HTMLProps<HTMLButtonElement>, 'type'> {
|
8
|
-
/** Allow the form to be submitted without any changes. By default this is not allowed. */
|
9
|
-
allowPristineSubmit?: boolean;
|
10
|
-
/** Text to display on the button. Default text is 'Submit'. */
|
11
|
-
children?: React.ReactNode;
|
12
|
-
}
|
13
|
-
|
14
|
-
function SubmitFormButton(
|
15
|
-
{
|
16
|
-
allowPristineSubmit,
|
17
|
-
children,
|
18
|
-
disabled,
|
19
|
-
title,
|
20
|
-
className,
|
21
|
-
...props
|
22
|
-
}: SubmitFormButtonProps,
|
23
|
-
ref: LegacyRef<HTMLButtonElement>
|
24
|
-
) {
|
25
|
-
const { isSubmitting, dirty } = useFormikContext();
|
26
|
-
const preventSubmit = (!dirty && !allowPristineSubmit) || isSubmitting;
|
27
|
-
const buttonName = typeof children === 'string' ? children : 'Submit';
|
28
|
-
return (
|
29
|
-
<button
|
30
|
-
{...props}
|
31
|
-
ref={ref}
|
32
|
-
type="submit"
|
33
|
-
disabled={preventSubmit || disabled}
|
34
|
-
aria-label={buttonName}
|
35
|
-
title={
|
36
|
-
title || isSubmitting
|
37
|
-
? 'Loading, please wait...'
|
38
|
-
: preventSubmit
|
39
|
-
? "You haven't made any changes"
|
40
|
-
: ''
|
41
|
-
}
|
42
|
-
className={clsx(
|
43
|
-
FormDefaults.cssClassPrefix + 'submit-form-button',
|
44
|
-
className
|
45
|
-
)}>
|
46
|
-
{children || 'Submit'}
|
47
|
-
</button>
|
48
|
-
);
|
49
|
-
}
|
50
|
-
|
51
|
-
/** Generic submit button for forms. */
|
52
|
-
export default React.forwardRef(
|
53
|
-
SubmitFormButton
|
54
|
-
) as React.FunctionComponent<SubmitFormButtonProps>;
|
@@ -1,64 +0,0 @@
|
|
1
|
-
import React, { LegacyRef } from 'react';
|
2
|
-
import { clsx } from 'clsx';
|
3
|
-
import { InjectedFieldProps } from '../Field/InjectedFieldProps';
|
4
|
-
import { FormDefaults } from '../FormDefaults';
|
5
|
-
import Group, { GroupProps } from '../Group';
|
6
|
-
|
7
|
-
export interface TextAreaGroupProps
|
8
|
-
extends InjectedFieldProps<string | undefined | null>,
|
9
|
-
Omit<
|
10
|
-
React.HTMLProps<HTMLTextAreaElement>,
|
11
|
-
keyof InjectedFieldProps<any> | 'children' | 'className' | 'label'
|
12
|
-
>,
|
13
|
-
Omit<GroupProps, keyof InjectedFieldProps<any> | 'children'> {
|
14
|
-
icon?: React.ReactNode;
|
15
|
-
}
|
16
|
-
|
17
|
-
function TextAreaGroup(
|
18
|
-
{
|
19
|
-
input,
|
20
|
-
meta,
|
21
|
-
label,
|
22
|
-
helpText,
|
23
|
-
className,
|
24
|
-
required,
|
25
|
-
disabled,
|
26
|
-
icon,
|
27
|
-
...rest
|
28
|
-
}: TextAreaGroupProps,
|
29
|
-
ref: LegacyRef<HTMLTextAreaElement>
|
30
|
-
) {
|
31
|
-
return (
|
32
|
-
<Group
|
33
|
-
input={input}
|
34
|
-
meta={meta}
|
35
|
-
required={required}
|
36
|
-
disabled={disabled}
|
37
|
-
label={label}
|
38
|
-
helpText={helpText}
|
39
|
-
className={clsx(
|
40
|
-
className,
|
41
|
-
FormDefaults.cssClassPrefix + 'text-area-group'
|
42
|
-
)}>
|
43
|
-
{icon}
|
44
|
-
<textarea
|
45
|
-
{...input}
|
46
|
-
{...rest}
|
47
|
-
value={input.value ?? ''}
|
48
|
-
onChange={(val) => input.onChange(val.target.value)}
|
49
|
-
ref={ref}
|
50
|
-
className={clsx(
|
51
|
-
className,
|
52
|
-
FormDefaults.cssClassPrefix + 'text-area-group'
|
53
|
-
)}
|
54
|
-
/>
|
55
|
-
</Group>
|
56
|
-
);
|
57
|
-
}
|
58
|
-
|
59
|
-
/** Generic controlled `<textarea/>` wrapped by a `<Group/>` */
|
60
|
-
const TextAreaGroupWithRef = React.forwardRef(
|
61
|
-
TextAreaGroup
|
62
|
-
) as React.ComponentType<TextAreaGroupProps>;
|
63
|
-
|
64
|
-
export default TextAreaGroupWithRef;
|
@@ -1,8 +0,0 @@
|
|
1
|
-
import { ValidationError } from './ValidationError';
|
2
|
-
|
3
|
-
// TODO: this means that all template projects MUST have this API shape - thoughts?
|
4
|
-
/** The root result from a typical envoc API call when forms are returned */
|
5
|
-
export interface ValidatedApiResult {
|
6
|
-
validationFailures?: ValidationError[];
|
7
|
-
hasErrors?: boolean;
|
8
|
-
}
|
@@ -1,81 +0,0 @@
|
|
1
|
-
import { integer, length, maxLength, maxValue, minValue } from './validators';
|
2
|
-
|
3
|
-
describe('integer validator', () => {
|
4
|
-
it('accepts an integer', () => {
|
5
|
-
const returned = integer('123');
|
6
|
-
expect(returned).toBe(undefined);
|
7
|
-
});
|
8
|
-
|
9
|
-
it("doesn't accept a float", () => {
|
10
|
-
const returned = integer('123.5569');
|
11
|
-
expect(returned).toBe('Must be a whole number');
|
12
|
-
});
|
13
|
-
});
|
14
|
-
|
15
|
-
describe('length validator', () => {
|
16
|
-
it('fails for invalid Length', () => {
|
17
|
-
const length10 = length(10);
|
18
|
-
const tooLong = length10('01234567890');
|
19
|
-
const tooShort = length10('aaa');
|
20
|
-
expect(tooLong).toBe('Length must be 10');
|
21
|
-
expect(tooShort).toBe('Length must be 10');
|
22
|
-
});
|
23
|
-
|
24
|
-
it('succeeds for correct length', () => {
|
25
|
-
const length10 = length(10);
|
26
|
-
const validString = length10('0123456789');
|
27
|
-
const validNumber = length10(1234567890);
|
28
|
-
expect(validString).toBe(undefined);
|
29
|
-
expect(validNumber).toBe(undefined);
|
30
|
-
});
|
31
|
-
});
|
32
|
-
|
33
|
-
describe('maxValue validator', () => {
|
34
|
-
it('fails for invalid value', () => {
|
35
|
-
const maxValue10 = maxValue(10);
|
36
|
-
const tooBig = maxValue10(11);
|
37
|
-
expect(tooBig).toBe('Maximum value 10 exceeded');
|
38
|
-
});
|
39
|
-
|
40
|
-
it('succeeds for valid value', () => {
|
41
|
-
const maxValue10 = maxValue(10);
|
42
|
-
const maxAllowable = maxValue10(10);
|
43
|
-
const lowAllowable = maxValue10(1);
|
44
|
-
expect(maxAllowable).toBe(undefined);
|
45
|
-
expect(lowAllowable).toBe(undefined);
|
46
|
-
});
|
47
|
-
});
|
48
|
-
|
49
|
-
describe('minValue validator', () => {
|
50
|
-
it('fails for invalid value', () => {
|
51
|
-
const minValue10 = minValue(10);
|
52
|
-
const tooSmall = minValue10(9);
|
53
|
-
expect(tooSmall).toBe('Minimum value 10 not met');
|
54
|
-
});
|
55
|
-
|
56
|
-
it('succeeds for valid value', () => {
|
57
|
-
const minValue10 = minValue(10);
|
58
|
-
const minAllowable = minValue10(10);
|
59
|
-
const highAllowable = minValue10(15);
|
60
|
-
expect(minAllowable).toBe(undefined);
|
61
|
-
expect(highAllowable).toBe(undefined);
|
62
|
-
});
|
63
|
-
});
|
64
|
-
|
65
|
-
describe('maxLength validator', () => {
|
66
|
-
it('fails for invalid value', () => {
|
67
|
-
const maxLength10 = maxLength(10);
|
68
|
-
const stringTooLong = maxLength10('012345678910');
|
69
|
-
const numberTooLong = maxLength10(1234567890123);
|
70
|
-
expect(stringTooLong).toBe('Maximum length 10 exceeded');
|
71
|
-
expect(numberTooLong).toBe('Maximum length 10 exceeded');
|
72
|
-
});
|
73
|
-
|
74
|
-
it('succeeds for valid value', () => {
|
75
|
-
const maxLength10 = maxLength(10);
|
76
|
-
const exactMatch = maxLength10('0123456789');
|
77
|
-
const shortValid = maxLength10('0123');
|
78
|
-
expect(exactMatch).toBe(undefined);
|
79
|
-
expect(shortValid).toBe(undefined);
|
80
|
-
});
|
81
|
-
});
|
@@ -1,97 +0,0 @@
|
|
1
|
-
import { ValidationFunction } from './ValidationFunction';
|
2
|
-
|
3
|
-
export const required = (value: any) =>
|
4
|
-
Array.isArray(value)
|
5
|
-
? value.length > 0
|
6
|
-
? undefined
|
7
|
-
: 'Required'
|
8
|
-
: value || value === false || value === 0
|
9
|
-
? undefined
|
10
|
-
: 'Required';
|
11
|
-
|
12
|
-
/** Asserts that the value is a certain number of characters. numbers are coerced to a string */
|
13
|
-
export const length =
|
14
|
-
(len: number) => (value: string | number | undefined | null) => {
|
15
|
-
const hasError = getLengthOfValue(value) !== len;
|
16
|
-
return !hasError ? undefined : `Length must be ${len}`;
|
17
|
-
};
|
18
|
-
|
19
|
-
export const integer = (val: string | number | undefined | null) => {
|
20
|
-
if (!val) {
|
21
|
-
return undefined;
|
22
|
-
}
|
23
|
-
if (!Number.isInteger(typeof val === 'number' ? val : parseFloat(val))) {
|
24
|
-
return 'Must be a whole number';
|
25
|
-
}
|
26
|
-
};
|
27
|
-
|
28
|
-
export const maxLength =
|
29
|
-
(len: number) => (value: string | number | undefined | null) => {
|
30
|
-
const hasError = getLengthOfValue(value) > len;
|
31
|
-
return !hasError ? undefined : `Maximum length ${len} exceeded`;
|
32
|
-
};
|
33
|
-
|
34
|
-
export const maxCount =
|
35
|
-
(count: number) => (value: { isDeleted?: boolean }[] | undefined | null) => {
|
36
|
-
const hasError =
|
37
|
-
!!value && value.filter((x) => !x.isDeleted).length > count;
|
38
|
-
return !hasError ? undefined : `Should not have more than ${count}`;
|
39
|
-
};
|
40
|
-
|
41
|
-
export const minCount =
|
42
|
-
(count: number) => (value: { isDeleted?: boolean }[] | undefined | null) => {
|
43
|
-
const hasError = !value || value.filter((x) => !x.isDeleted).length < count;
|
44
|
-
return !hasError ? undefined : `Should have at least ${count}`;
|
45
|
-
};
|
46
|
-
|
47
|
-
export const maxValue = (max: number) => (value: number | undefined | null) => {
|
48
|
-
const hasError = !!value && value > max;
|
49
|
-
return !hasError ? undefined : `Maximum value ${max} exceeded`;
|
50
|
-
};
|
51
|
-
|
52
|
-
export const minValue = (min: number) => (value: number | undefined | null) => {
|
53
|
-
const hasError = !value || value < min;
|
54
|
-
return !hasError ? undefined : `Minimum value ${min} not met`;
|
55
|
-
};
|
56
|
-
|
57
|
-
/** Validate for a ZIP Code. Accepts formats: ##### and #####-#### */
|
58
|
-
export const zipCode = (value: string | undefined | null) => {
|
59
|
-
return value && !/^[0-9]{5}(?:-[0-9]{4})?$/.test(value)
|
60
|
-
? 'Invalid ZIP Code'
|
61
|
-
: undefined;
|
62
|
-
};
|
63
|
-
|
64
|
-
/** One of the validators provided must be true. */
|
65
|
-
export const any =
|
66
|
-
<TValue>(validatorList: ValidationFunction<TValue>[]) =>
|
67
|
-
(value: TValue) => {
|
68
|
-
if (validatorList.length === 0 || !value) {
|
69
|
-
return;
|
70
|
-
}
|
71
|
-
|
72
|
-
return validatorList.reduce(
|
73
|
-
(isAnyTrue, x) => (isAnyTrue ? isAnyTrue : x(value)),
|
74
|
-
undefined as string | undefined
|
75
|
-
);
|
76
|
-
};
|
77
|
-
|
78
|
-
function getLengthOfValue(value: string | number | undefined | null) {
|
79
|
-
if (value === null) {
|
80
|
-
return 0;
|
81
|
-
}
|
82
|
-
switch (typeof value) {
|
83
|
-
case 'undefined':
|
84
|
-
return 0;
|
85
|
-
case 'string':
|
86
|
-
return value.length;
|
87
|
-
case 'number':
|
88
|
-
// TODO: this seems iffy to me - what if the actual visible value is a fixed length or some special format (e.g. with commas?)
|
89
|
-
return value.toString().length;
|
90
|
-
default:
|
91
|
-
assertUnreachable(value);
|
92
|
-
return 0;
|
93
|
-
}
|
94
|
-
}
|
95
|
-
function assertUnreachable(x: never) {
|
96
|
-
return null;
|
97
|
-
}
|
@@ -1,65 +0,0 @@
|
|
1
|
-
import { HashRouter } from 'react-router-dom';
|
2
|
-
import { Form, FormBuilderProp } from '../';
|
3
|
-
import { ValidatedApiResult } from '../Validation/ValidatedApiResult';
|
4
|
-
|
5
|
-
interface FormTestBaseProps<TForm extends object> {
|
6
|
-
children: (formBuilder: FormBuilderProp<TForm>) => JSX.Element;
|
7
|
-
initialValues?: TForm;
|
8
|
-
handleSubmit?: (data: TForm | FormData) => Promise<ValidatedApiResult>;
|
9
|
-
}
|
10
|
-
|
11
|
-
export default function FormTestBase<TForm extends PersonDto>({
|
12
|
-
children,
|
13
|
-
initialValues,
|
14
|
-
handleSubmit,
|
15
|
-
}: FormTestBaseProps<TForm>) {
|
16
|
-
return (
|
17
|
-
<HashRouter>
|
18
|
-
<Form
|
19
|
-
onSubmit={handleSubmit ? handleSubmit : onSubmit}
|
20
|
-
initialValues={initialValues}>
|
21
|
-
{children}
|
22
|
-
</Form>
|
23
|
-
</HashRouter>
|
24
|
-
);
|
25
|
-
|
26
|
-
async function onSubmit(data: TForm | FormData): Promise<ValidatedApiResult> {
|
27
|
-
const isFormData = data instanceof FormData;
|
28
|
-
const result = await fetch('/api/submit', {
|
29
|
-
body: isFormData ? data : JSON.stringify(data),
|
30
|
-
method: 'POST',
|
31
|
-
headers: {
|
32
|
-
'Content-Type': isFormData ? 'multipart/form-data' : 'application/json',
|
33
|
-
'X-Show-Errors': `Errors go here`,
|
34
|
-
},
|
35
|
-
});
|
36
|
-
|
37
|
-
const apiResult = await (result.json() as Promise<ValidatedApiResult>);
|
38
|
-
|
39
|
-
if (!apiResult.hasErrors) {
|
40
|
-
alert('submitted');
|
41
|
-
}
|
42
|
-
|
43
|
-
return apiResult;
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
|
-
export interface PersonDto {
|
48
|
-
name?: string | undefined;
|
49
|
-
nameWithIcon?: string | undefined;
|
50
|
-
numberOfArms?: number;
|
51
|
-
phoneNumber?: string;
|
52
|
-
yearlySalaryUSD?: number;
|
53
|
-
isCool?: boolean;
|
54
|
-
isMusicEnjoyer?: boolean;
|
55
|
-
gradDate?: string;
|
56
|
-
favoriteDate?: string;
|
57
|
-
favoriteNumber?: number;
|
58
|
-
favoriteColor?: string;
|
59
|
-
favoriteColors?: string[];
|
60
|
-
favoriteNames?: string[];
|
61
|
-
allowLogin?: boolean;
|
62
|
-
userRoles?: number[];
|
63
|
-
profileImage?: any;
|
64
|
-
favoritePictures?: any[];
|
65
|
-
}
|
@@ -1,82 +0,0 @@
|
|
1
|
-
import { render, screen, waitFor } from '@testing-library/react';
|
2
|
-
import user from '@testing-library/user-event';
|
3
|
-
import FormTestBase from './FormTestBase';
|
4
|
-
import { Form, StringInputGroup, ValidatedApiResult } from '../';
|
5
|
-
import { PersonDto } from '../__Tests__/FormTestBase';
|
6
|
-
import StandardFormActions from '../StandardFormActions';
|
7
|
-
import { validators } from '../';
|
8
|
-
|
9
|
-
const handleSubmitMock = jest.fn((value: PersonDto | FormData) => {
|
10
|
-
//return value;
|
11
|
-
return new Promise<ValidatedApiResult>((res, rej) => {
|
12
|
-
setTimeout(() => {
|
13
|
-
res({});
|
14
|
-
}, 15);
|
15
|
-
});
|
16
|
-
});
|
17
|
-
|
18
|
-
describe('Realistic Form', () => {
|
19
|
-
it('Validates, resolves validation, submits values', async () => {
|
20
|
-
global.scrollTo = jest.fn();
|
21
|
-
const fullForm = (
|
22
|
-
<FormTestBase handleSubmit={handleSubmitMock}>
|
23
|
-
{({ Field }) => (
|
24
|
-
<>
|
25
|
-
<Field name="name" label="name" Component={StringInputGroup} />
|
26
|
-
<Field
|
27
|
-
name="nameWithIcon"
|
28
|
-
label="Name with Icon"
|
29
|
-
Component={StringInputGroup}
|
30
|
-
validate={validators.required}
|
31
|
-
/>
|
32
|
-
<StandardFormActions />
|
33
|
-
<Form.DisplayFormState />
|
34
|
-
</>
|
35
|
-
)}
|
36
|
-
</FormTestBase>
|
37
|
-
);
|
38
|
-
|
39
|
-
render(fullForm);
|
40
|
-
const nameInput = screen.getByLabelText('name');
|
41
|
-
const formSubmitButton = screen.getByRole('button', {
|
42
|
-
name: 'Submit',
|
43
|
-
});
|
44
|
-
//The form should start off with the submit button disabled
|
45
|
-
expect(formSubmitButton).toBeDisabled();
|
46
|
-
|
47
|
-
//Enter a name into the name input
|
48
|
-
user.click(nameInput);
|
49
|
-
user.type(nameInput, 'Travis Overmier');
|
50
|
-
expect(nameInput).toHaveValue('Travis Overmier');
|
51
|
-
|
52
|
-
//Submit should be enabled, click submit
|
53
|
-
expect(formSubmitButton).toBeEnabled();
|
54
|
-
user.click(formSubmitButton);
|
55
|
-
|
56
|
-
//Submit should disable while 'submitting' then re-enable
|
57
|
-
expect(formSubmitButton).toBeDisabled();
|
58
|
-
await waitFor(() => {
|
59
|
-
expect(formSubmitButton).toBeEnabled();
|
60
|
-
});
|
61
|
-
|
62
|
-
//Validation message should appear
|
63
|
-
const nameWithIconInput = screen.getByLabelText('Name with Icon');
|
64
|
-
expect(nameWithIconInput).toHaveErrorMessage('Required');
|
65
|
-
|
66
|
-
//Fill in field, error message goes away
|
67
|
-
user.type(nameWithIconInput, 'Kyle Joiner');
|
68
|
-
user.tab();
|
69
|
-
await waitFor(() => {
|
70
|
-
expect(nameWithIconInput).not.toHaveErrorMessage();
|
71
|
-
});
|
72
|
-
|
73
|
-
//Click the submit button
|
74
|
-
user.click(formSubmitButton);
|
75
|
-
await waitFor(() => {
|
76
|
-
expect(handleSubmitMock).toHaveBeenCalled();
|
77
|
-
expect(JSON.stringify(handleSubmitMock.mock.calls[0][0])).toBe(
|
78
|
-
`{"name":"Travis Overmier","nameWithIcon":"Kyle Joiner"}`
|
79
|
-
);
|
80
|
-
});
|
81
|
-
});
|
82
|
-
});
|
@@ -1,17 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { render } from '@testing-library/react';
|
3
|
-
import FormTestBase from './FormTestBase';
|
4
|
-
import StandardFormActions from '../StandardFormActions';
|
5
|
-
|
6
|
-
describe('StandardFormActions', () => {
|
7
|
-
it('renders without crashing', () => {
|
8
|
-
render(<FormTestBase>{() => <StandardFormActions />}</FormTestBase>);
|
9
|
-
});
|
10
|
-
|
11
|
-
it('has matching snapshot', () => {
|
12
|
-
const renderResult = render(
|
13
|
-
<FormTestBase>{() => <StandardFormActions />}</FormTestBase>
|
14
|
-
);
|
15
|
-
expect(renderResult.asFragment()).toMatchSnapshot();
|
16
|
-
});
|
17
|
-
});
|
@@ -1,17 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { render } from '@testing-library/react';
|
3
|
-
import FormTestBase from './FormTestBase';
|
4
|
-
import SubmitFormButton from '../SubmitFormButton';
|
5
|
-
|
6
|
-
describe('SubmitFormButton', () => {
|
7
|
-
it('renders without crashing', () => {
|
8
|
-
render(<FormTestBase>{() => <SubmitFormButton />}</FormTestBase>);
|
9
|
-
});
|
10
|
-
|
11
|
-
it('has matching snapshot', () => {
|
12
|
-
const renderResult = render(
|
13
|
-
<FormTestBase>{() => <SubmitFormButton />}</FormTestBase>
|
14
|
-
);
|
15
|
-
expect(renderResult.asFragment()).toMatchSnapshot();
|
16
|
-
});
|
17
|
-
});
|
@@ -1,27 +0,0 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`StandardFormActions has matching snapshot 1`] = `
|
4
|
-
<DocumentFragment>
|
5
|
-
<form
|
6
|
-
action="#"
|
7
|
-
class="envoc-form-form"
|
8
|
-
>
|
9
|
-
<button
|
10
|
-
aria-label="Submit"
|
11
|
-
class="envoc-form-submit-form-button"
|
12
|
-
disabled=""
|
13
|
-
title="You haven't made any changes"
|
14
|
-
type="submit"
|
15
|
-
>
|
16
|
-
Submit
|
17
|
-
</button>
|
18
|
-
|
19
|
-
<button
|
20
|
-
class="envoc-form-standard-form-actions-cancel-button"
|
21
|
-
type="button"
|
22
|
-
>
|
23
|
-
Cancel
|
24
|
-
</button>
|
25
|
-
</form>
|
26
|
-
</DocumentFragment>
|
27
|
-
`;
|
@@ -1,20 +0,0 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`SubmitFormButton has matching snapshot 1`] = `
|
4
|
-
<DocumentFragment>
|
5
|
-
<form
|
6
|
-
action="#"
|
7
|
-
class="envoc-form-form"
|
8
|
-
>
|
9
|
-
<button
|
10
|
-
aria-label="Submit"
|
11
|
-
class="envoc-form-submit-form-button"
|
12
|
-
disabled=""
|
13
|
-
title="You haven't made any changes"
|
14
|
-
type="submit"
|
15
|
-
>
|
16
|
-
Submit
|
17
|
-
</button>
|
18
|
-
</form>
|
19
|
-
</DocumentFragment>
|
20
|
-
`;
|
package/src/__Tests__/index.ts
DELETED
package/src/_variables.scss
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
//These variables are normally in the template directly,
|
2
|
-
|
3
|
-
$red: #f86c6b;
|
4
|
-
// Couldn't find these variables directly from coreui/bootstrap
|
5
|
-
$input-border-color: #c2cfd6;
|
6
|
-
$input-border-color--focused: #8ad4ee;
|
7
|
-
$input-box-shadow--focused: 0 0 0 0.2rem rgba(32, 168, 216, 0.25);
|
8
|
-
|
9
|
-
//Taken from react-select because it fit better in the color scheme and is more readable.
|
10
|
-
$input-disabled-background-color: hsl(0, 0%, 95%);
|
11
|
-
$input-disabled-border-color: hsl(0, 0%, 90%);
|