@cerebruminc/cerebellum 13.0.0 → 13.0.1

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/lib/cjs/Form.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var FormikContainer = require('./FormikContainer-d5d9c1d3.js');
5
+ var FormikContainer = require('./FormikContainer-5bbc7b9d.js');
6
6
  var FormWrapper = require('./FormStyles-91ec9d95.js');
7
7
  var FormFieldTypeEnum = require('./FormFieldTypeEnum.cjs');
8
8
  require('./_tslib-955e611e.js');
@@ -1087,7 +1087,7 @@ var CANCEL_BUTTON_TEXT_DEFAULT$1 = "Cancel";
1087
1087
  var CLEAR_FORM_BUTTON_TEXT = "Clear Form";
1088
1088
  var SUBMIT_BUTTON_TEXT_DEFAULT$1 = "Submit";
1089
1089
  var Form = function (_a) {
1090
- var addButtons = _a.addButtons, addButtonWidth = _a.addButtonWidth, _b = _a.cancelButtonText, cancelButtonText = _b === void 0 ? CANCEL_BUTTON_TEXT_DEFAULT$1 : _b, cancelButtonFunction = _a.cancelButtonFunction, clearFormButton = _a.clearFormButton, clearOnBottom = _a.clearOnBottom, configurableInputFieldActiveIds = _a.configurableInputFieldActiveIds, disableSubmit = _a.disableSubmit, disableSubmitUntilValid = _a.disableSubmitUntilValid, fields = _a.fields, formikProps = _a.formikProps, hasValues = _a.hasValues, hideSubmitButton = _a.hideSubmitButton, leftLabels = _a.leftLabels, _c = _a.leftLabelsRightGutter, leftLabelsRightGutter = _c === void 0 ? 200 : _c, _d = _a.leftLabelWidth, leftLabelWidth = _d === void 0 ? 200 : _d, loading = _a.loading, loadingFieldsNumber = _a.loadingFieldsNumber, maximumHeight = _a.maximumHeight, nextButton = _a.nextButton, observeScrollRef = _a.observeScrollRef, rowGap = _a.rowGap, stickyFooter = _a.stickyFooter, submitAttempt = _a.submitAttempt, submitButtonLoading = _a.submitButtonLoading, setConfigurableInputFieldActiveIds = _a.setConfigurableInputFieldActiveIds, setHasValues = _a.setHasValues, setSubmitAttempt = _a.setSubmitAttempt, submitButtonAlign = _a.submitButtonAlign, _e = _a.submitButtonText, submitButtonText = _e === void 0 ? SUBMIT_BUTTON_TEXT_DEFAULT$1 : _e, submitOnBlur = _a.submitOnBlur, title = _a.title, themeOverride = _a.themeOverride, thinStickyPadding = _a.thinStickyPadding;
1090
+ var addButtons = _a.addButtons, addButtonWidth = _a.addButtonWidth, _b = _a.cancelButtonText, cancelButtonText = _b === void 0 ? CANCEL_BUTTON_TEXT_DEFAULT$1 : _b, cancelButtonFunction = _a.cancelButtonFunction, children = _a.children, clearFormButton = _a.clearFormButton, clearOnBottom = _a.clearOnBottom, configurableInputFieldActiveIds = _a.configurableInputFieldActiveIds, disableSubmit = _a.disableSubmit, disableSubmitUntilValid = _a.disableSubmitUntilValid, fields = _a.fields, formikProps = _a.formikProps, hasValues = _a.hasValues, hideSubmitButton = _a.hideSubmitButton, leftLabels = _a.leftLabels, _c = _a.leftLabelsRightGutter, leftLabelsRightGutter = _c === void 0 ? 200 : _c, _d = _a.leftLabelWidth, leftLabelWidth = _d === void 0 ? 200 : _d, loading = _a.loading, loadingFieldsNumber = _a.loadingFieldsNumber, maximumHeight = _a.maximumHeight, nextButton = _a.nextButton, observeScrollRef = _a.observeScrollRef, rowGap = _a.rowGap, stickyFooter = _a.stickyFooter, submitAttempt = _a.submitAttempt, submitButtonLoading = _a.submitButtonLoading, setConfigurableInputFieldActiveIds = _a.setConfigurableInputFieldActiveIds, setHasValues = _a.setHasValues, setSubmitAttempt = _a.setSubmitAttempt, submitButtonAlign = _a.submitButtonAlign, _e = _a.submitButtonText, submitButtonText = _e === void 0 ? SUBMIT_BUTTON_TEXT_DEFAULT$1 : _e, submitOnBlur = _a.submitOnBlur, title = _a.title, themeOverride = _a.themeOverride, thinStickyPadding = _a.thinStickyPadding;
1091
1091
  var _f = useMeasure.useMeasure(), targetRef = _f[0], targetMeasure = _f[1];
1092
1092
  var theme = styled.useTheme();
1093
1093
  var previousFields = usePrevious.usePrevious(fields);
@@ -1129,7 +1129,7 @@ var Form = function (_a) {
1129
1129
  resetForm();
1130
1130
  setHasValues(false);
1131
1131
  };
1132
- return loading ? (jsxRuntime.jsx(FormLoader, { leftLabels: Boolean(leftLabels), leftLabelsRightGutter: leftLabelsRightGutter, leftLabelWidth: leftLabelWidth, loadingFieldsNumber: loadingFieldsNumber !== null && loadingFieldsNumber !== void 0 ? loadingFieldsNumber : fields.length, rowGap: rowGap }, void 0)) : (jsxRuntime.jsxs(FormWrapper.FormGroup, _tslib.__assign({ ref: targetRef, "$maximumHeight": maximumHeight, "$stickyFooter": stickyFooter, "$themeOverride": themeOverride, "$thinStickyPadding": thinStickyPadding, as: Scroller.ShortScroller }, { children: [jsxRuntime.jsxs(FormWrapper.FormTitleGroup, { children: [jsxRuntime.jsx(FormWrapper.Title, _tslib.__assign({ "$themeOverride": themeOverride }, { children: title }), void 0), clearFormButton && !clearOnBottom && (jsxRuntime.jsx(FormWrapper.ClearFormButtonWrap, _tslib.__assign({ "$clickable": hasValues }, { children: jsxRuntime.jsx(TextLink.TextLink, { clickable: hasValues, fontSize: 12, onClick: clearForm, text: CLEAR_FORM_BUTTON_TEXT, textColorOverride: clearButtonColorFamily.main, textColorHoverOverride: clearButtonColorFamily.hover, textStyle: ButtonColorFamilyEnum.TextStyleEnum.Emphasis }, void 0) }), void 0))] }, void 0), fields.map(function (field, index) {
1132
+ return loading ? (jsxRuntime.jsx(FormLoader, { leftLabels: Boolean(leftLabels), leftLabelsRightGutter: leftLabelsRightGutter, leftLabelWidth: leftLabelWidth, loadingFieldsNumber: loadingFieldsNumber !== null && loadingFieldsNumber !== void 0 ? loadingFieldsNumber : fields.length, rowGap: rowGap }, void 0)) : (jsxRuntime.jsxs(FormWrapper.FormGroup, _tslib.__assign({ ref: targetRef, "$maximumHeight": maximumHeight, "$stickyFooter": stickyFooter, "$themeOverride": themeOverride, "$thinStickyPadding": thinStickyPadding, as: Scroller.ShortScroller }, { children: [children, jsxRuntime.jsxs(FormWrapper.FormTitleGroup, { children: [jsxRuntime.jsx(FormWrapper.Title, _tslib.__assign({ "$themeOverride": themeOverride }, { children: title }), void 0), clearFormButton && !clearOnBottom && (jsxRuntime.jsx(FormWrapper.ClearFormButtonWrap, _tslib.__assign({ "$clickable": hasValues }, { children: jsxRuntime.jsx(TextLink.TextLink, { clickable: hasValues, fontSize: 12, onClick: clearForm, text: CLEAR_FORM_BUTTON_TEXT, textColorOverride: clearButtonColorFamily.main, textColorHoverOverride: clearButtonColorFamily.hover, textStyle: ButtonColorFamilyEnum.TextStyleEnum.Emphasis }, void 0) }), void 0))] }, void 0), fields.map(function (field, index) {
1133
1133
  if (FormFieldTypeEnum.isSplitLine(field) && (!field.showIf || field.showIf({ values: values }))) {
1134
1134
  var key = addOrRemoveById.makeIdString({ array: field.inlineFields, key: "fieldLabel" });
1135
1135
  return (jsxRuntime.jsx(SplitLineField, { fade: FormWrapper.shouldFade({ isDeleting: isDeleting, index: index }), field: field, formikProps: formikProps, formWidth: targetMeasure === null || targetMeasure === void 0 ? void 0 : targetMeasure.width, observeScrollRef: observeScrollRef, rowGap: rowGap, setHasValues: setHasValues, setSubmitAttempt: setSubmitAttempt, submitAttempt: submitAttempt, submitOnBlur: submitOnBlur }, "".concat(key, "_").concat(index)));
@@ -1240,11 +1240,23 @@ Form.defaultProps = {
1240
1240
 
1241
1241
  var CANCEL_BUTTON_TEXT_DEFAULT = "Cancel";
1242
1242
  var SUBMIT_BUTTON_TEXT_DEFAULT = "Submit";
1243
+ var FormSubmitWatcher = function (_a) {
1244
+ var setHasSubmitted = _a.setHasSubmitted;
1245
+ var isValidating = formik.useFormikContext().isValidating;
1246
+ React.useEffect(function () {
1247
+ if (isValidating) {
1248
+ setHasSubmitted(true);
1249
+ }
1250
+ }, [isValidating]);
1251
+ return null; // This component does not render anything
1252
+ };
1243
1253
  var FormikContainer = function (props) {
1244
1254
  var disableSubmitUntilValid = props.disableSubmitUntilValid, enableReinitialize = props.enableReinitialize, fields = props.fields, innerRef = props.innerRef, resetOnSubmit = props.resetOnSubmit, submit = props.submit, _a = props.validateOnBlur, validateOnBlur = _a === void 0 ? false : _a;
1245
1255
  var _b = React.useState(false), submitAttempt = _b[0], setSubmitAttempt = _b[1];
1246
1256
  var _c = React.useState(false), hasValues = _c[0], setHasValues = _c[1];
1247
1257
  var _d = React.useState({}), configurableInputFieldActiveIds = _d[0], setConfigurableInputFieldActiveIds = _d[1];
1258
+ // Track if the form has been submitted. If it has, we're going to validate on change and blur
1259
+ var _e = React.useState(false), hasSubmitted = _e[0], setHasSubmitted = _e[1];
1248
1260
  return (jsxRuntime.jsx(formik.Formik, _tslib.__assign({ enableReinitialize: enableReinitialize, initialValues: FormWrapper.formatInitialValues(fields), innerRef: innerRef, onSubmit: function (values, formikHelpers) {
1249
1261
  var resetForm = formikHelpers.resetForm;
1250
1262
  setSubmitAttempt(false);
@@ -1253,8 +1265,8 @@ var FormikContainer = function (props) {
1253
1265
  resetForm({});
1254
1266
  setHasValues(false);
1255
1267
  }
1256
- }, validateOnBlur: validateOnBlur, validateOnMount: disableSubmitUntilValid, validationSchema: FormWrapper.formatValidation(fields, configurableInputFieldActiveIds) }, { children: function (formikProps) {
1257
- return (jsxRuntime.jsx(Form, _tslib.__assign({}, props, { formikProps: formikProps, hasValues: hasValues, submitAttempt: submitAttempt, setHasValues: setHasValues, setSubmitAttempt: setSubmitAttempt, configurableInputFieldActiveIds: configurableInputFieldActiveIds, setConfigurableInputFieldActiveIds: setConfigurableInputFieldActiveIds }), void 0));
1268
+ }, validateOnBlur: validateOnBlur || hasSubmitted, validateOnChange: validateOnBlur || hasSubmitted, validateOnMount: disableSubmitUntilValid, validationSchema: FormWrapper.formatValidation(fields, configurableInputFieldActiveIds) }, { children: function (formikProps) {
1269
+ return (jsxRuntime.jsx(Form, _tslib.__assign({}, props, { formikProps: formikProps, hasValues: hasValues, submitAttempt: submitAttempt, setHasValues: setHasValues, setSubmitAttempt: setSubmitAttempt, configurableInputFieldActiveIds: configurableInputFieldActiveIds, setConfigurableInputFieldActiveIds: setConfigurableInputFieldActiveIds }, { children: jsxRuntime.jsx(FormSubmitWatcher, { setHasSubmitted: setHasSubmitted }, void 0) }), void 0));
1258
1270
  } }), void 0));
1259
1271
  };
1260
1272
  FormikContainer.defaultProps = {
@@ -1269,4 +1281,4 @@ FormikContainer.defaultProps = {
1269
1281
  };
1270
1282
 
1271
1283
  exports.FormikContainer = FormikContainer;
1272
- //# sourceMappingURL=FormikContainer-d5d9c1d3.js.map
1284
+ //# sourceMappingURL=FormikContainer-5bbc7b9d.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormikContainer-23e9e82c.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FormikContainer-5bbc7b9d.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/lib/cjs/index.cjs CHANGED
@@ -46,7 +46,7 @@ var helpers = require('./helpers-b07f14f3.js');
46
46
  var DrawerDivider = require('./DrawerDivider-8f1e423f.js');
47
47
  var EmailInput = require('./EmailInput-a17bf950.js');
48
48
  var Footer = require('./Footer.cjs');
49
- var FormikContainer = require('./FormikContainer-d5d9c1d3.js');
49
+ var FormikContainer = require('./FormikContainer-5bbc7b9d.js');
50
50
  var FormFieldTypeEnum = require('./FormFieldTypeEnum.cjs');
51
51
  var FiltersBar = require('./FiltersBar-0c09771a.js');
52
52
  var HorizontalTabMenu = require('./HorizontalTabMenu-64d6e3a1.js');
package/lib/esm/Form.js CHANGED
@@ -1,4 +1,4 @@
1
- export { F as Form } from './FormikContainer-23e9e82c.js';
1
+ export { F as Form } from './FormikContainer-420de28e.js';
2
2
  export { F as FormWrapper } from './FormStyles-6cb7c6ff.js';
3
3
  export { FormFieldTypeEnum, RemovableFieldTypeEnum } from './FormFieldTypeEnum.js';
4
4
  import './_tslib-1a4c929e.js';
@@ -1,7 +1,7 @@
1
1
  import { _ as __assign, f as __spreadArray } from './_tslib-1a4c929e.js';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { Fragment, useState, useEffect, useCallback } from 'react';
4
- import { Formik } from 'formik';
4
+ import { Formik, useFormikContext } from 'formik';
5
5
  import { useTheme } from 'styled-components';
6
6
  import { A as AddButton } from './AddButton-59c22abc.js';
7
7
  import './Button.js';
@@ -1085,7 +1085,7 @@ var CANCEL_BUTTON_TEXT_DEFAULT$1 = "Cancel";
1085
1085
  var CLEAR_FORM_BUTTON_TEXT = "Clear Form";
1086
1086
  var SUBMIT_BUTTON_TEXT_DEFAULT$1 = "Submit";
1087
1087
  var Form = function (_a) {
1088
- var addButtons = _a.addButtons, addButtonWidth = _a.addButtonWidth, _b = _a.cancelButtonText, cancelButtonText = _b === void 0 ? CANCEL_BUTTON_TEXT_DEFAULT$1 : _b, cancelButtonFunction = _a.cancelButtonFunction, clearFormButton = _a.clearFormButton, clearOnBottom = _a.clearOnBottom, configurableInputFieldActiveIds = _a.configurableInputFieldActiveIds, disableSubmit = _a.disableSubmit, disableSubmitUntilValid = _a.disableSubmitUntilValid, fields = _a.fields, formikProps = _a.formikProps, hasValues = _a.hasValues, hideSubmitButton = _a.hideSubmitButton, leftLabels = _a.leftLabels, _c = _a.leftLabelsRightGutter, leftLabelsRightGutter = _c === void 0 ? 200 : _c, _d = _a.leftLabelWidth, leftLabelWidth = _d === void 0 ? 200 : _d, loading = _a.loading, loadingFieldsNumber = _a.loadingFieldsNumber, maximumHeight = _a.maximumHeight, nextButton = _a.nextButton, observeScrollRef = _a.observeScrollRef, rowGap = _a.rowGap, stickyFooter = _a.stickyFooter, submitAttempt = _a.submitAttempt, submitButtonLoading = _a.submitButtonLoading, setConfigurableInputFieldActiveIds = _a.setConfigurableInputFieldActiveIds, setHasValues = _a.setHasValues, setSubmitAttempt = _a.setSubmitAttempt, submitButtonAlign = _a.submitButtonAlign, _e = _a.submitButtonText, submitButtonText = _e === void 0 ? SUBMIT_BUTTON_TEXT_DEFAULT$1 : _e, submitOnBlur = _a.submitOnBlur, title = _a.title, themeOverride = _a.themeOverride, thinStickyPadding = _a.thinStickyPadding;
1088
+ var addButtons = _a.addButtons, addButtonWidth = _a.addButtonWidth, _b = _a.cancelButtonText, cancelButtonText = _b === void 0 ? CANCEL_BUTTON_TEXT_DEFAULT$1 : _b, cancelButtonFunction = _a.cancelButtonFunction, children = _a.children, clearFormButton = _a.clearFormButton, clearOnBottom = _a.clearOnBottom, configurableInputFieldActiveIds = _a.configurableInputFieldActiveIds, disableSubmit = _a.disableSubmit, disableSubmitUntilValid = _a.disableSubmitUntilValid, fields = _a.fields, formikProps = _a.formikProps, hasValues = _a.hasValues, hideSubmitButton = _a.hideSubmitButton, leftLabels = _a.leftLabels, _c = _a.leftLabelsRightGutter, leftLabelsRightGutter = _c === void 0 ? 200 : _c, _d = _a.leftLabelWidth, leftLabelWidth = _d === void 0 ? 200 : _d, loading = _a.loading, loadingFieldsNumber = _a.loadingFieldsNumber, maximumHeight = _a.maximumHeight, nextButton = _a.nextButton, observeScrollRef = _a.observeScrollRef, rowGap = _a.rowGap, stickyFooter = _a.stickyFooter, submitAttempt = _a.submitAttempt, submitButtonLoading = _a.submitButtonLoading, setConfigurableInputFieldActiveIds = _a.setConfigurableInputFieldActiveIds, setHasValues = _a.setHasValues, setSubmitAttempt = _a.setSubmitAttempt, submitButtonAlign = _a.submitButtonAlign, _e = _a.submitButtonText, submitButtonText = _e === void 0 ? SUBMIT_BUTTON_TEXT_DEFAULT$1 : _e, submitOnBlur = _a.submitOnBlur, title = _a.title, themeOverride = _a.themeOverride, thinStickyPadding = _a.thinStickyPadding;
1089
1089
  var _f = useMeasure(), targetRef = _f[0], targetMeasure = _f[1];
1090
1090
  var theme = useTheme();
1091
1091
  var previousFields = usePrevious(fields);
@@ -1127,7 +1127,7 @@ var Form = function (_a) {
1127
1127
  resetForm();
1128
1128
  setHasValues(false);
1129
1129
  };
1130
- return loading ? (jsx(FormLoader, { leftLabels: Boolean(leftLabels), leftLabelsRightGutter: leftLabelsRightGutter, leftLabelWidth: leftLabelWidth, loadingFieldsNumber: loadingFieldsNumber !== null && loadingFieldsNumber !== void 0 ? loadingFieldsNumber : fields.length, rowGap: rowGap }, void 0)) : (jsxs(FormGroup, __assign({ ref: targetRef, "$maximumHeight": maximumHeight, "$stickyFooter": stickyFooter, "$themeOverride": themeOverride, "$thinStickyPadding": thinStickyPadding, as: ShortScroller }, { children: [jsxs(FormTitleGroup, { children: [jsx(Title, __assign({ "$themeOverride": themeOverride }, { children: title }), void 0), clearFormButton && !clearOnBottom && (jsx(ClearFormButtonWrap, __assign({ "$clickable": hasValues }, { children: jsx(TextLink, { clickable: hasValues, fontSize: 12, onClick: clearForm, text: CLEAR_FORM_BUTTON_TEXT, textColorOverride: clearButtonColorFamily.main, textColorHoverOverride: clearButtonColorFamily.hover, textStyle: TextStyleEnum.Emphasis }, void 0) }), void 0))] }, void 0), fields.map(function (field, index) {
1130
+ return loading ? (jsx(FormLoader, { leftLabels: Boolean(leftLabels), leftLabelsRightGutter: leftLabelsRightGutter, leftLabelWidth: leftLabelWidth, loadingFieldsNumber: loadingFieldsNumber !== null && loadingFieldsNumber !== void 0 ? loadingFieldsNumber : fields.length, rowGap: rowGap }, void 0)) : (jsxs(FormGroup, __assign({ ref: targetRef, "$maximumHeight": maximumHeight, "$stickyFooter": stickyFooter, "$themeOverride": themeOverride, "$thinStickyPadding": thinStickyPadding, as: ShortScroller }, { children: [children, jsxs(FormTitleGroup, { children: [jsx(Title, __assign({ "$themeOverride": themeOverride }, { children: title }), void 0), clearFormButton && !clearOnBottom && (jsx(ClearFormButtonWrap, __assign({ "$clickable": hasValues }, { children: jsx(TextLink, { clickable: hasValues, fontSize: 12, onClick: clearForm, text: CLEAR_FORM_BUTTON_TEXT, textColorOverride: clearButtonColorFamily.main, textColorHoverOverride: clearButtonColorFamily.hover, textStyle: TextStyleEnum.Emphasis }, void 0) }), void 0))] }, void 0), fields.map(function (field, index) {
1131
1131
  if (isSplitLine(field) && (!field.showIf || field.showIf({ values: values }))) {
1132
1132
  var key = makeIdString({ array: field.inlineFields, key: "fieldLabel" });
1133
1133
  return (jsx(SplitLineField, { fade: shouldFade({ isDeleting: isDeleting, index: index }), field: field, formikProps: formikProps, formWidth: targetMeasure === null || targetMeasure === void 0 ? void 0 : targetMeasure.width, observeScrollRef: observeScrollRef, rowGap: rowGap, setHasValues: setHasValues, setSubmitAttempt: setSubmitAttempt, submitAttempt: submitAttempt, submitOnBlur: submitOnBlur }, "".concat(key, "_").concat(index)));
@@ -1238,11 +1238,23 @@ Form.defaultProps = {
1238
1238
 
1239
1239
  var CANCEL_BUTTON_TEXT_DEFAULT = "Cancel";
1240
1240
  var SUBMIT_BUTTON_TEXT_DEFAULT = "Submit";
1241
+ var FormSubmitWatcher = function (_a) {
1242
+ var setHasSubmitted = _a.setHasSubmitted;
1243
+ var isValidating = useFormikContext().isValidating;
1244
+ useEffect(function () {
1245
+ if (isValidating) {
1246
+ setHasSubmitted(true);
1247
+ }
1248
+ }, [isValidating]);
1249
+ return null; // This component does not render anything
1250
+ };
1241
1251
  var FormikContainer = function (props) {
1242
1252
  var disableSubmitUntilValid = props.disableSubmitUntilValid, enableReinitialize = props.enableReinitialize, fields = props.fields, innerRef = props.innerRef, resetOnSubmit = props.resetOnSubmit, submit = props.submit, _a = props.validateOnBlur, validateOnBlur = _a === void 0 ? false : _a;
1243
1253
  var _b = useState(false), submitAttempt = _b[0], setSubmitAttempt = _b[1];
1244
1254
  var _c = useState(false), hasValues = _c[0], setHasValues = _c[1];
1245
1255
  var _d = useState({}), configurableInputFieldActiveIds = _d[0], setConfigurableInputFieldActiveIds = _d[1];
1256
+ // Track if the form has been submitted. If it has, we're going to validate on change and blur
1257
+ var _e = useState(false), hasSubmitted = _e[0], setHasSubmitted = _e[1];
1246
1258
  return (jsx(Formik, __assign({ enableReinitialize: enableReinitialize, initialValues: formatInitialValues(fields), innerRef: innerRef, onSubmit: function (values, formikHelpers) {
1247
1259
  var resetForm = formikHelpers.resetForm;
1248
1260
  setSubmitAttempt(false);
@@ -1251,8 +1263,8 @@ var FormikContainer = function (props) {
1251
1263
  resetForm({});
1252
1264
  setHasValues(false);
1253
1265
  }
1254
- }, validateOnBlur: validateOnBlur, validateOnMount: disableSubmitUntilValid, validationSchema: formatValidation(fields, configurableInputFieldActiveIds) }, { children: function (formikProps) {
1255
- return (jsx(Form, __assign({}, props, { formikProps: formikProps, hasValues: hasValues, submitAttempt: submitAttempt, setHasValues: setHasValues, setSubmitAttempt: setSubmitAttempt, configurableInputFieldActiveIds: configurableInputFieldActiveIds, setConfigurableInputFieldActiveIds: setConfigurableInputFieldActiveIds }), void 0));
1266
+ }, validateOnBlur: validateOnBlur || hasSubmitted, validateOnChange: validateOnBlur || hasSubmitted, validateOnMount: disableSubmitUntilValid, validationSchema: formatValidation(fields, configurableInputFieldActiveIds) }, { children: function (formikProps) {
1267
+ return (jsx(Form, __assign({}, props, { formikProps: formikProps, hasValues: hasValues, submitAttempt: submitAttempt, setHasValues: setHasValues, setSubmitAttempt: setSubmitAttempt, configurableInputFieldActiveIds: configurableInputFieldActiveIds, setConfigurableInputFieldActiveIds: setConfigurableInputFieldActiveIds }, { children: jsx(FormSubmitWatcher, { setHasSubmitted: setHasSubmitted }, void 0) }), void 0));
1256
1268
  } }), void 0));
1257
1269
  };
1258
1270
  FormikContainer.defaultProps = {
@@ -1267,4 +1279,4 @@ FormikContainer.defaultProps = {
1267
1279
  };
1268
1280
 
1269
1281
  export { FormikContainer as F };
1270
- //# sourceMappingURL=FormikContainer-23e9e82c.js.map
1282
+ //# sourceMappingURL=FormikContainer-420de28e.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormikContainer-d5d9c1d3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FormikContainer-420de28e.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/lib/esm/index.js CHANGED
@@ -47,7 +47,7 @@ import { A as ASTERISK_OFFSET_SPACE } from './helpers-e2f33583.js';
47
47
  export { D as DrawerDivider } from './DrawerDivider-5b10a31b.js';
48
48
  export { E as EmailInput } from './EmailInput-949cc132.js';
49
49
  export { Footer } from './Footer.js';
50
- export { F as Form } from './FormikContainer-23e9e82c.js';
50
+ export { F as Form } from './FormikContainer-420de28e.js';
51
51
  export { FormFieldTypeEnum, RemovableFieldTypeEnum } from './FormFieldTypeEnum.js';
52
52
  export { F as FiltersBar } from './FiltersBar-a6dbd832.js';
53
53
  export { H as HorizontalTabMenu } from './HorizontalTabMenu-417ead69.js';
@@ -1,7 +1,7 @@
1
1
  import { InternalFormType } from "./types";
2
2
  export declare const CLEAR_FORM_BUTTON_TEXT = "Clear Form";
3
3
  export declare const Form: {
4
- <T extends Record<string, any>>({ addButtons, addButtonWidth, cancelButtonText, cancelButtonFunction, clearFormButton, clearOnBottom, configurableInputFieldActiveIds, disableSubmit, disableSubmitUntilValid, fields, formikProps, hasValues, hideSubmitButton, leftLabels, leftLabelsRightGutter, leftLabelWidth, loading, loadingFieldsNumber, maximumHeight, nextButton, observeScrollRef, rowGap, stickyFooter, submitAttempt, submitButtonLoading, setConfigurableInputFieldActiveIds, setHasValues, setSubmitAttempt, submitButtonAlign, submitButtonText, submitOnBlur, title, themeOverride, thinStickyPadding, }: InternalFormType<T>): import("react/jsx-runtime").JSX.Element;
4
+ <T extends Record<string, any>>({ addButtons, addButtonWidth, cancelButtonText, cancelButtonFunction, children, clearFormButton, clearOnBottom, configurableInputFieldActiveIds, disableSubmit, disableSubmitUntilValid, fields, formikProps, hasValues, hideSubmitButton, leftLabels, leftLabelsRightGutter, leftLabelWidth, loading, loadingFieldsNumber, maximumHeight, nextButton, observeScrollRef, rowGap, stickyFooter, submitAttempt, submitButtonLoading, setConfigurableInputFieldActiveIds, setHasValues, setSubmitAttempt, submitButtonAlign, submitButtonText, submitOnBlur, title, themeOverride, thinStickyPadding, }: InternalFormType<T>): import("react/jsx-runtime").JSX.Element;
5
5
  defaultProps: {
6
6
  cancelButtonText: string;
7
7
  nextButton: boolean;
@@ -74,6 +74,7 @@ export interface FormType<FormData extends Record<string, any> = Record<string,
74
74
  validateOnBlur?: boolean;
75
75
  }
76
76
  export interface InternalFormType<T extends Record<string, any> = Record<string, any>> extends FormType<T> {
77
+ children?: ReactNode;
77
78
  disableSubmitUntilValid?: boolean;
78
79
  formikProps: any;
79
80
  hasValues: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cerebruminc/cerebellum",
3
- "version": "13.0.0",
3
+ "version": "13.0.1",
4
4
  "description": "Cerebrum's React Component Library",
5
5
  "type": "module",
6
6
  "main": "lib/cjs/index.cjs",