@availity/form
Version:
Form Wrapper around formik using reactstrap components
825 lines (811 loc) • 31.7 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.js
var src_exports = {};
__export(src_exports, {
Checkbox: () => Checkbox_default,
CheckboxGroup: () => CheckboxGroup_default,
CurrencyInput: () => CurrencyInput_default,
Feedback: () => Feedback_default,
Field: () => Field_default,
Form: () => Form_default,
FormGroup: () => FormGroup_default,
Input: () => Input_default,
Label: () => Label_default,
Radio: () => Radio_default,
RadioGroup: () => RadioGroup_default,
RequiredAsterisk: () => RequiredAsterisk,
RequiredKey: () => RequiredKey
});
module.exports = __toCommonJS(src_exports);
// src/Form.js
var import_react = __toESM(require("react"));
var import_prop_types = __toESM(require("prop-types"));
var import_uuid = require("uuid");
var import_reactstrap = require("reactstrap");
var import_formik = require("formik");
var useFormikFocusFirstInvalidField = (id, focusInvalidField, invalidInputSelectors) => {
const formik = (0, import_formik.useFormikContext)();
const [submitCount, setSubmitCount] = (0, import_react.useState)(formik.submitCount);
(0, import_react.useEffect)(() => {
if (focusInvalidField && !formik.isValid && formik.submitCount > submitCount) {
const form = document.getElementById(id);
const firstInvalidInput = form.querySelector(invalidInputSelectors);
firstInvalidInput == null ? void 0 : firstInvalidInput.focus();
setSubmitCount(formik.submitCount);
}
}, [id, focusInvalidField, formik.isValid, formik.submitCount, invalidInputSelectors, submitCount, formik.errors]);
};
var FocusableForm = (_a) => {
var _b = _a, { children, focusProps } = _b, rest = __objRest(_b, ["children", "focusProps"]);
useFormikFocusFirstInvalidField(...focusProps);
return /* @__PURE__ */ import_react.default.createElement(import_reactstrap.Form, __spreadValues({}, rest), children);
};
var Form = (_a) => {
var _b = _a, {
initialValues,
enableReinitialize,
onSubmit,
initialStatus,
initialErrors,
initialTouched,
onReset,
validationSchema,
validate,
focusInvalidField,
id,
innerRef,
invalidInputSelectors,
children
} = _b, rest = __objRest(_b, [
"initialValues",
"enableReinitialize",
"onSubmit",
"initialStatus",
"initialErrors",
"initialTouched",
"onReset",
"validationSchema",
"validate",
"focusInvalidField",
"id",
"innerRef",
"invalidInputSelectors",
"children"
]);
const formId = id || (0, import_uuid.v4)();
const focusProps = [id = formId, focusInvalidField, invalidInputSelectors];
return /* @__PURE__ */ import_react.default.createElement(import_formik.Formik, {
initialValues,
enableReinitialize,
onSubmit,
onReset,
initialStatus,
initialErrors,
initialTouched,
validationSchema,
validate,
innerRef
}, (props) => /* @__PURE__ */ import_react.default.createElement(FocusableForm, __spreadValues({
"data-testid": "form-container",
tag: import_formik.Form,
id: formId,
focusProps
}, rest), typeof children === "function" ? children(props) : children));
};
Form.propTypes = {
children: import_prop_types.default.oneOfType([import_prop_types.default.func, import_prop_types.default.node]),
enableReinitialize: import_prop_types.default.bool,
focusInvalidField: import_prop_types.default.bool,
id: import_prop_types.default.string,
initialErrors: import_prop_types.default.object,
initialStatus: import_prop_types.default.any,
initialTouched: import_prop_types.default.object,
initialValues: import_prop_types.default.object.isRequired,
innerRef: import_prop_types.default.any,
invalidInputSelectors: import_prop_types.default.string,
onReset: import_prop_types.default.func,
onSubmit: import_prop_types.default.func,
validate: import_prop_types.default.func,
validationSchema: import_prop_types.default.object
};
Form.defaultProps = {
focusInvalidField: true,
invalidInputSelectors: 'input[aria-invalid="true"], div.is-invalid input:first-of-type:not([hidden]):not([style*="display:none"]):not([style*="display: none"])',
onSubmit: () => {
}
};
FocusableForm.propTypes = {
children: import_prop_types.default.node,
focusProps: import_prop_types.default.array
};
var Form_default = Form;
// src/Field.js
var import_react6 = __toESM(require("react"));
var import_prop_types6 = __toESM(require("prop-types"));
var import_reactstrap6 = require("reactstrap");
var import_uuid3 = require("uuid");
// src/Feedback.js
var import_react2 = __toESM(require("react"));
var import_prop_types2 = __toESM(require("prop-types"));
var import_reactstrap2 = require("reactstrap");
var import_formik2 = require("formik");
var AvFeedback = (_a) => {
var _b = _a, { children } = _b, rest = __objRest(_b, ["children"]);
return /* @__PURE__ */ import_react2.default.createElement(import_reactstrap2.FormFeedback, __spreadValues({}, rest), /* @__PURE__ */ import_react2.default.createElement("i", {
className: "icon icon-attention",
"aria-hidden": true
}), /* @__PURE__ */ import_react2.default.createElement("div", {
className: "sr-only"
}, "Error:"), children);
};
var Feedback = (_a) => {
var _b = _a, { name } = _b, rest = __objRest(_b, ["name"]);
const feedbackId = `${name}-feedback`.toLowerCase();
return /* @__PURE__ */ import_react2.default.createElement(import_formik2.ErrorMessage, __spreadValues({
id: feedbackId,
component: AvFeedback,
name
}, rest));
};
AvFeedback.propTypes = {
children: import_prop_types2.default.node
};
Feedback.propTypes = {
name: import_prop_types2.default.string.isRequired
};
var Feedback_default = Feedback;
// src/FormGroup.js
var import_react3 = __toESM(require("react"));
var import_prop_types3 = __toESM(require("prop-types"));
var import_reactstrap3 = require("reactstrap");
var import_classnames = __toESM(require("classnames"));
var import_formik3 = require("formik");
var FormGroup = (_a) => {
var _b = _a, { className, for: For } = _b, props = __objRest(_b, ["className", "for"]);
const [, metadata] = (0, import_formik3.useField)(For);
const classname = (0, import_classnames.default)(className, metadata.touched && metadata.error && `text-danger`);
return /* @__PURE__ */ import_react3.default.createElement(import_reactstrap3.FormGroup, __spreadValues({
className: classname
}, props));
};
FormGroup.propTypes = {
className: import_prop_types3.default.string,
for: import_prop_types3.default.string
};
var FormGroup_default = FormGroup;
// src/Input.js
var import_react4 = __toESM(require("react"));
var import_prop_types4 = __toESM(require("prop-types"));
var import_classnames2 = __toESM(require("classnames"));
var import_reactstrap4 = require("reactstrap");
var import_formik4 = require("formik");
var Input = (_a) => {
var _b = _a, { tag: Tag, className, onChange: propsOnChange, validate, name, feedback, help, required } = _b, rest = __objRest(_b, ["tag", "className", "onChange", "validate", "name", "feedback", "help", "required"]);
const [_a2, ..._b2] = (0, import_formik4.useField)({
name,
validate
}), _c = _a2, { onChange } = _c, field = __objRest(_c, ["onChange"]), [metadata] = _b2;
const classes = (0, import_classnames2.default)(className, metadata.touched ? "is-touched" : "is-untouched", metadata.error ? "av-invalid" : "av-valid", metadata.touched && metadata.error && "is-invalid", rest.type === "checkbox" && metadata.touched && metadata.error && "was-validated");
const error = !!metadata.touched && !!metadata.error;
const feedbackId = error && feedback ? `${name}-feedback`.toLowerCase() : "";
const helpMessageId = help ? ` ${name}-helpmessage`.toLowerCase() : "";
const extraProps = {};
if (rest.type === "checkbox") {
extraProps.checked = !!field.value;
}
return /* @__PURE__ */ import_react4.default.createElement(Tag, __spreadValues(__spreadValues(__spreadValues({
className: classes,
onChange: (e) => {
onChange(e);
if (propsOnChange) {
propsOnChange(e);
}
},
name,
invalid: error,
"aria-describedby": feedbackId + helpMessageId,
"aria-required": required
}, field), extraProps), rest));
};
Input.propTypes = {
className: import_prop_types4.default.string,
feedback: import_prop_types4.default.bool,
help: import_prop_types4.default.bool,
name: import_prop_types4.default.string.isRequired,
onChange: import_prop_types4.default.func,
required: import_prop_types4.default.bool,
tag: import_prop_types4.default.oneOfType([import_prop_types4.default.func, import_prop_types4.default.string]),
validate: import_prop_types4.default.func
};
Input.defaultProps = {
tag: import_reactstrap4.Input
};
var Input_default = Input;
// src/Label.js
var import_react5 = __toESM(require("react"));
var import_prop_types5 = __toESM(require("prop-types"));
var import_uuid2 = require("uuid");
var import_reactstrap5 = require("reactstrap");
var import_help = require("@availity/help");
var RequiredAsterisk = () => /* @__PURE__ */ import_react5.default.createElement("strong", {
className: "text-danger d-inline align-text-top",
"data-testid": "required-asterisk",
style: {
fontSize: "130%",
lineHeight: "100%"
}
}, "*");
var RequiredKey = () => /* @__PURE__ */ import_react5.default.createElement("div", null, "Fields marked with an asterisk ", /* @__PURE__ */ import_react5.default.createElement(RequiredAsterisk, null), " are required.");
var Label = (_a) => {
var _b = _a, { helpId, id, required, children } = _b, attributes = __objRest(_b, ["helpId", "id", "required", "children"]);
const labelId = id || (0, import_uuid2.v4)();
const Wrapper = ({ children: children2 }) => {
if (helpId && (attributes.className || attributes.style)) {
return /* @__PURE__ */ import_react5.default.createElement("div", {
className: attributes.className,
style: attributes.style
}, children2);
}
return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, children2);
};
return /* @__PURE__ */ import_react5.default.createElement(Wrapper, null, /* @__PURE__ */ import_react5.default.createElement(import_reactstrap5.Label, __spreadValues({
id: labelId,
"data-testid": "label"
}, attributes), required ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(RequiredAsterisk, null), " ") : null, children), helpId ? /* @__PURE__ */ import_react5.default.createElement(import_help.FieldHelpIcon, {
labelId,
id: helpId
}) : null);
};
Label.propTypes = {
id: import_prop_types5.default.string,
helpId: import_prop_types5.default.string,
required: import_prop_types5.default.bool,
children: import_prop_types5.default.oneOfType([import_prop_types5.default.func, import_prop_types5.default.node])
};
var Label_default = Label;
// src/Field.js
var colSizes = ["xs", "sm", "md", "lg", "xl"];
var Field = (_a) => {
var _b = _a, {
helpMessage,
helpId,
required,
label,
labelHidden,
inputClass,
labelClass,
name: id,
size,
disabled,
readOnly,
grid,
labelAttrs,
groupAttrs,
prepend,
append,
children
} = _b, attributes = __objRest(_b, [
"helpMessage",
"helpId",
"required",
"label",
"labelHidden",
"inputClass",
"labelClass",
"name",
"size",
"disabled",
"readOnly",
"grid",
"labelAttrs",
"groupAttrs",
"prepend",
"append",
"children"
]);
let row = false;
const inputId = attributes.id || (0, import_uuid3.v4)();
const col = {};
const labelCol = {};
if (grid) {
for (const colSize of colSizes) {
if (grid[colSize]) {
row = true;
const sizeNum = Number.parseInt(grid[colSize], 10);
col[colSize] = sizeNum;
labelCol[colSize] = 12 - sizeNum;
}
}
}
let input = /* @__PURE__ */ import_react6.default.createElement(Input_default, __spreadValues({
name: id,
id: inputId,
className: inputClass,
size,
required,
disabled,
readOnly,
feedback: true,
help: !!helpMessage
}, attributes));
if (prepend || append) {
input = /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.InputGroup, null, prepend && /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.InputGroupAddon, {
addonType: "prepend"
}, typeof prepend === "string" ? /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.InputGroupText, null, prepend) : prepend), input, append && /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.InputGroupAddon, {
addonType: "append"
}, typeof append === "string" ? /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.InputGroupText, null, append) : append), /* @__PURE__ */ import_react6.default.createElement(Feedback_default, {
name: id
}));
}
const help = helpMessage ? /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.FormText, {
id: `${id}-helpmessage`.toLowerCase()
}, helpMessage) : null;
const feedback = /* @__PURE__ */ import_react6.default.createElement(Feedback_default, {
name: id
});
let inputRow = row ? /* @__PURE__ */ import_react6.default.createElement(import_reactstrap6.Col, __spreadValues({}, col), input, !prepend && !append && /* @__PURE__ */ import_react6.default.createElement(Feedback_default, {
name: id
}), help) : input;
if (children && typeof children === "function") {
inputRow = children({ input: inputRow, feedback });
}
const check = attributes.type === "checkbox";
return /* @__PURE__ */ import_react6.default.createElement(FormGroup_default, __spreadValues({
for: id,
check,
disabled,
row
}, groupAttrs), check && inputRow, label && /* @__PURE__ */ import_react6.default.createElement(Label_default, __spreadValues(__spreadValues({
id: `${inputId}-label`,
for: inputId,
className: labelClass,
hidden: labelHidden,
size,
required: !!required,
helpId,
disabled
}, labelCol), labelAttrs), label), !check && inputRow, !row && !prepend && !append && feedback, !row && help);
};
Field.propTypes = {
name: import_prop_types6.default.string.isRequired,
append: import_prop_types6.default.node,
children: import_prop_types6.default.func,
disabled: import_prop_types6.default.bool,
grid: import_prop_types6.default.object,
groupAttrs: import_prop_types6.default.object,
helpId: import_prop_types6.default.string,
helpMessage: import_prop_types6.default.node,
inputClass: import_prop_types6.default.string,
label: import_prop_types6.default.node,
labelAttrs: import_prop_types6.default.object,
labelClass: import_prop_types6.default.string,
labelHidden: import_prop_types6.default.bool,
prepend: import_prop_types6.default.node,
readOnly: import_prop_types6.default.bool,
required: import_prop_types6.default.bool,
size: import_prop_types6.default.string,
tag: import_prop_types6.default.oneOfType([import_prop_types6.default.func, import_prop_types6.default.string])
};
Field.defaultProps = {
tag: import_reactstrap6.Input
};
var Field_default = Field;
// src/CheckboxGroup.js
var import_react7 = __toESM(require("react"));
var import_prop_types7 = __toESM(require("prop-types"));
var import_classnames3 = __toESM(require("classnames"));
var import_formik5 = require("formik");
var CheckboxGroupContext = (0, import_react7.createContext)();
var useCheckboxGroup = (name) => {
const { setFieldValue } = (0, import_formik5.useFormikContext)();
const _a = (0, import_react7.useContext)(CheckboxGroupContext), { name: groupName, groupOnChange, value = [] } = _a, rest = __objRest(_a, ["name", "groupOnChange", "value"]);
const toggle = () => {
const valueArray = [...value];
const indexOfVal = valueArray.indexOf(name);
if (indexOfVal === -1) {
valueArray.push(name);
} else {
valueArray.splice(indexOfVal, 1);
}
setFieldValue(groupName, valueArray);
if (groupOnChange) {
groupOnChange(valueArray);
}
};
return __spreadValues({ toggle, value: value.indexOf(name) > -1 }, rest);
};
var CheckboxGroup = (_a) => {
var _b = _a, {
name,
children,
onChange: groupOnChange,
groupClassName,
label,
labelClassName,
required,
helpId
} = _b, rest = __objRest(_b, [
"name",
"children",
"onChange",
"groupClassName",
"label",
"labelClassName",
"required",
"helpId"
]);
const [field, metadata] = (0, import_formik5.useField)(name);
const classes = (0, import_classnames3.default)(groupClassName, "form-control border-0 p-0 h-auto", metadata.touched ? "is-touched" : "is-untouched", metadata.touched && metadata.error && "is-invalid");
let tag = "div";
let legend = null;
if (label) {
tag = "fieldset";
const legendId = `${name}-legend`.toLowerCase();
const srRequiredAsterisk = required ? "* " : null;
const styles = { cursor: "default", lineHeight: "inherit", color: "#000" };
const labelClasses = (0, import_classnames3.default)("form-inline", labelClassName, !labelClassName && "h4 font-weight-normal");
legend = /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, /* @__PURE__ */ import_react7.default.createElement("legend", {
id: legendId,
className: "sr-only"
}, srRequiredAsterisk, label), /* @__PURE__ */ import_react7.default.createElement("div", {
className: labelClasses,
style: styles
}, /* @__PURE__ */ import_react7.default.createElement(Label_default, {
tag: "div",
"aria-hidden": true,
helpId,
required
}, label)));
}
return /* @__PURE__ */ import_react7.default.createElement(CheckboxGroupContext.Provider, {
value: __spreadProps(__spreadValues({}, field), { groupOnChange, metadata })
}, /* @__PURE__ */ import_react7.default.createElement(FormGroup_default, __spreadValues({
tag,
for: name
}, rest), legend, /* @__PURE__ */ import_react7.default.createElement("div", {
className: classes,
"data-testid": `check-items-${name}`
}, children), /* @__PURE__ */ import_react7.default.createElement(Feedback_default, {
name
})));
};
CheckboxGroup.propTypes = {
children: import_prop_types7.default.node,
groupClassName: import_prop_types7.default.string,
helpId: import_prop_types7.default.string,
label: import_prop_types7.default.node,
name: import_prop_types7.default.string.isRequired,
onChange: import_prop_types7.default.func,
labelClassName: import_prop_types7.default.string,
required: import_prop_types7.default.bool
};
var CheckboxGroup_default = CheckboxGroup;
// src/Checkbox.js
var import_react8 = __toESM(require("react"));
var import_prop_types8 = __toESM(require("prop-types"));
var import_reactstrap7 = require("reactstrap");
var import_uuid4 = require("uuid");
var import_classnames4 = __toESM(require("classnames"));
var Checkbox = (_a) => {
var _b = _a, {
className,
groupClassName,
groupName,
helpId,
id,
inline,
label,
value: checkValue
} = _b, attributes = __objRest(_b, [
"className",
"groupClassName",
"groupName",
"helpId",
"id",
"inline",
"label",
"value"
]);
const { value, toggle, metadata } = useCheckboxGroup(checkValue);
const [inputId] = (0, import_react8.useState)(id || (0, import_uuid4.v4)());
const classes = (0, import_classnames4.default)(className, metadata.touched ? "is-touched" : "is-untouched", metadata.touched && metadata.error && "is-invalid");
const errorIndicated = !!metadata.touched && !!metadata.error;
const groupFeedbackId = errorIndicated && groupName ? `${groupName}-feedback`.toLowerCase() : "";
const labelId = `${inputId}-label`.toLowerCase();
return /* @__PURE__ */ import_react8.default.createElement(FormGroup_default, {
for: inputId,
className: groupClassName,
check: true,
inline,
disabled: attributes.disabled
}, /* @__PURE__ */ import_react8.default.createElement(import_reactstrap7.Input, __spreadProps(__spreadValues({
id: inputId,
name: inputId,
className: classes,
type: "checkbox",
invalid: errorIndicated,
"aria-describedby": groupFeedbackId
}, attributes), {
value: checkValue,
checked: value,
onChange: toggle
})), /* @__PURE__ */ import_react8.default.createElement(Label_default, {
check: true,
id: labelId,
for: inputId,
helpId
}, label));
};
Checkbox.propTypes = {
className: import_prop_types8.default.string,
disabled: import_prop_types8.default.bool,
groupClassName: import_prop_types8.default.string,
groupName: import_prop_types8.default.string,
helpId: import_prop_types8.default.string,
id: import_prop_types8.default.string,
inline: import_prop_types8.default.bool,
label: import_prop_types8.default.string,
value: import_prop_types8.default.oneOfType([import_prop_types8.default.string, import_prop_types8.default.bool, import_prop_types8.default.object])
};
Checkbox.defaultProps = {
inline: true
};
var Checkbox_default = Checkbox;
// src/RadioGroup.js
var import_react9 = __toESM(require("react"));
var import_prop_types9 = __toESM(require("prop-types"));
var import_classnames5 = __toESM(require("classnames"));
var import_formik6 = require("formik");
var RadioGroupContext = (0, import_react9.createContext)();
var useRadioGroup = (radioValue) => {
const { setFieldValue } = (0, import_formik6.useFormikContext)();
const _a = (0, import_react9.useContext)(RadioGroupContext), { name: groupName, value = "", groupOnChange } = _a, rest = __objRest(_a, ["name", "value", "groupOnChange"]);
const setValue = () => {
setFieldValue(groupName, radioValue);
if (groupOnChange) {
groupOnChange(radioValue);
}
};
return __spreadValues({ groupName, setValue, value: value === radioValue }, rest);
};
var RadioGroup = (_a) => {
var _b = _a, {
name,
children,
label,
onChange: groupOnChange,
groupClassName,
inline = false,
helpId,
labelClassName,
required
} = _b, rest = __objRest(_b, [
"name",
"children",
"label",
"onChange",
"groupClassName",
"inline",
"helpId",
"labelClassName",
"required"
]);
const [field, metadata] = (0, import_formik6.useField)(name);
const classes = (0, import_classnames5.default)(groupClassName, "form-control border-0 p-0 h-auto", metadata.touched ? "is-touched" : "is-untouched", metadata.touched && metadata.error && "is-invalid");
let tag = "div";
let legend = null;
if (label) {
tag = "fieldset";
const legendId = `${name}-legend`.toLowerCase();
const styles = { cursor: "default", lineHeight: "inherit", color: "#000" };
const labelClasses = (0, import_classnames5.default)("form-inline", labelClassName, !labelClassName && "h4 font-weight-normal");
legend = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("legend", {
id: legendId,
className: "sr-only"
}, required ? "* " : null, label), /* @__PURE__ */ import_react9.default.createElement("div", {
className: labelClasses,
style: styles
}, /* @__PURE__ */ import_react9.default.createElement(Label_default, {
tag: "div",
"aria-hidden": true,
helpId,
required
}, label)));
}
return /* @__PURE__ */ import_react9.default.createElement(RadioGroupContext.Provider, {
value: __spreadProps(__spreadValues({}, field), { groupOnChange, metadata, inline })
}, /* @__PURE__ */ import_react9.default.createElement(FormGroup_default, __spreadValues({
tag,
for: name
}, rest), legend, /* @__PURE__ */ import_react9.default.createElement("div", {
className: classes,
"data-testid": `radio-items-${name}`
}, children), /* @__PURE__ */ import_react9.default.createElement(Feedback_default, {
name
})));
};
RadioGroup.propTypes = {
children: import_prop_types9.default.node,
groupClassName: import_prop_types9.default.string,
helpId: import_prop_types9.default.string,
inline: import_prop_types9.default.bool,
label: import_prop_types9.default.node,
name: import_prop_types9.default.string,
onChange: import_prop_types9.default.func,
labelClassName: import_prop_types9.default.string,
required: import_prop_types9.default.bool
};
var RadioGroup_default = RadioGroup;
// src/Radio.js
var import_react10 = __toESM(require("react"));
var import_prop_types10 = __toESM(require("prop-types"));
var import_reactstrap8 = require("reactstrap");
var import_uuid5 = require("uuid");
var import_classnames6 = __toESM(require("classnames"));
var Radio = (_a) => {
var _b = _a, { label, id, name, value: checkValue, className, groupClassName, children, helpId } = _b, attributes = __objRest(_b, ["label", "id", "name", "value", "className", "groupClassName", "children", "helpId"]);
const { value, setValue, metadata, inline } = useRadioGroup(checkValue);
const [inputId] = (0, import_react10.useState)(id || (0, import_uuid5.v4)());
const classes = (0, import_classnames6.default)(className, metadata.touched ? "is-touched" : "is-untouched", metadata.touched && metadata.error && "is-invalid");
const errorIndicated = !!metadata.touched && !!metadata.error;
const feedbackId = errorIndicated && name ? `${name}-feedback`.toLowerCase() : "";
const labelId = `${inputId}-label`.toLowerCase();
return /* @__PURE__ */ import_react10.default.createElement(FormGroup_default, {
for: inputId,
check: true,
className: groupClassName,
inline,
disabled: attributes.disabled
}, /* @__PURE__ */ import_react10.default.createElement(import_reactstrap8.Input, __spreadProps(__spreadValues({
id: inputId,
name: name || inputId,
className: classes,
type: "radio",
invalid: errorIndicated,
"aria-describedby": feedbackId
}, attributes), {
value: checkValue,
checked: value,
onChange: setValue
})), /* @__PURE__ */ import_react10.default.createElement(Label_default, {
check: true,
id: labelId,
for: inputId,
helpId
}, label || children));
};
Radio.propTypes = {
children: import_prop_types10.default.node,
className: import_prop_types10.default.string,
disabled: import_prop_types10.default.bool,
groupClassName: import_prop_types10.default.string,
helpId: import_prop_types10.default.string,
id: import_prop_types10.default.string,
label: import_prop_types10.default.node,
name: import_prop_types10.default.string,
value: import_prop_types10.default.oneOfType([import_prop_types10.default.string, import_prop_types10.default.bool, import_prop_types10.default.object])
};
var Radio_default = Radio;
// src/CurrencyInput.tsx
var import_react11 = __toESM(require("react"));
var import_react_currency_input_field = __toESM(require("react-currency-input-field"));
var import_classnames7 = __toESM(require("classnames"));
var import_formik7 = require("formik");
var CurrencyInput = (_a) => {
var _b = _a, { id, name, value, placeholder, disabled, onValueChanged } = _b, attributes = __objRest(_b, ["id", "name", "value", "placeholder", "disabled", "onValueChanged"]);
const { setFieldValue, setFieldTouched } = (0, import_formik7.useFormikContext)();
const [, metadata] = (0, import_formik7.useField)({
name
});
const classes = (0, import_classnames7.default)(metadata.touched ? "is-touched" : "is-untouched", metadata.error ? "av-invalid" : "av-valid", metadata.touched && metadata.error && "is-invalid", "form-control");
const formatDecimals = async (value2) => {
setFieldTouched(name, true);
if (value2 === "") {
setFieldValue(name, void 0);
if (onValueChanged) {
onValueChanged(void 0);
}
return;
}
const noCommasValue = value2 == null ? void 0 : value2.replace(/,/g, "");
const number = Number(noCommasValue);
const options = {
minimumFractionDigits: 2,
maximumFractionDigits: 2
};
const decimalValue = number.toLocaleString(void 0, options).replace(/,/g, "");
setFieldValue(name, decimalValue);
if (onValueChanged) {
onValueChanged(decimalValue);
}
};
return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(import_react_currency_input_field.default, __spreadValues({
id,
name,
className: classes,
prefix: "$",
placeholder,
disabled,
decimalsLimit: 2,
value,
"aria-invalid": !!metadata.error,
onBlur: async (event) => {
formatDecimals(event.target.value.replace("$", ""));
},
onValueChange: onValueChanged,
allowNegativeValue: false,
transformRawValue: (rawValue) => {
if (rawValue && rawValue.startsWith(".")) {
return `0${rawValue}`;
}
return rawValue;
}
}, attributes)), /* @__PURE__ */ import_react11.default.createElement(Feedback_default, {
name
}));
};
var CurrencyInput_default = CurrencyInput;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Checkbox,
CheckboxGroup,
CurrencyInput,
Feedback,
Field,
Form,
FormGroup,
Input,
Label,
Radio,
RadioGroup,
RequiredAsterisk,
RequiredKey
});