@algodomain/smart-forms 0.1.0 → 0.1.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/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkY6NGPMDH_cjs = require('./chunk-Y6NGPMDH.cjs');
4
- var chunkYV7RVYMD_cjs = require('./chunk-YV7RVYMD.cjs');
3
+ var chunkY3H6MI5D_cjs = require('./chunk-Y3H6MI5D.cjs');
4
+ var chunkLRMJP5OJ_cjs = require('./chunk-LRMJP5OJ.cjs');
5
5
  var React3 = require('react');
6
6
  var reactToastify = require('react-toastify');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -89,7 +89,9 @@ var BaseSmartForm = ({
89
89
  showReset = false,
90
90
  showProgressBar = true,
91
91
  showTabNumbers = true,
92
- authentication
92
+ authentication,
93
+ includeQueryParams = false,
94
+ queryParamsToInclude
93
95
  }) => {
94
96
  const config = {
95
97
  api,
@@ -112,9 +114,11 @@ var BaseSmartForm = ({
112
114
  showReset,
113
115
  showProgressBar,
114
116
  showTabNumbers,
115
- authentication
117
+ authentication,
118
+ includeQueryParams,
119
+ queryParamsToInclude
116
120
  };
117
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYV7RVYMD_cjs.SmartFormProvider, { config, initialData, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
121
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLRMJP5OJ_cjs.SmartFormProvider, { config, initialData, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
118
122
  /* @__PURE__ */ jsxRuntime.jsx(ToastContainerWrapper, {}),
119
123
  /* @__PURE__ */ jsxRuntime.jsx(FormHeader, { title, subTitle, logo }),
120
124
  children,
@@ -122,15 +126,15 @@ var BaseSmartForm = ({
122
126
  ] }) });
123
127
  };
124
128
  var LoadingSpinner = ({ className = "h-4 w-4" }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: `animate-spin rounded-full border-b-2 border-current ${className}` });
125
- var SubmitButton = ({ onClick, disabled, children, className }) => /* @__PURE__ */ jsxRuntime.jsx(chunkY6NGPMDH_cjs.Button, { onClick, disabled, className, children: disabled ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
129
+ var SubmitButton = ({ onClick, disabled, children, className }) => /* @__PURE__ */ jsxRuntime.jsx(chunkY3H6MI5D_cjs.Button, { onClick, disabled, className, children: disabled ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
126
130
  /* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner, {}),
127
131
  "Submitting..."
128
132
  ] }) : children });
129
- var DraftSaveButton = ({ onClick, disabled }) => /* @__PURE__ */ jsxRuntime.jsx(chunkY6NGPMDH_cjs.Button, { onClick, disabled, variant: "secondary", children: disabled ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
133
+ var DraftSaveButton = ({ onClick, disabled }) => /* @__PURE__ */ jsxRuntime.jsx(chunkY3H6MI5D_cjs.Button, { onClick, disabled, variant: "secondary", children: disabled ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
130
134
  /* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner, {}),
131
135
  "Saving..."
132
136
  ] }) : "Save Draft" });
133
- var ResetButton = ({ onClick }) => /* @__PURE__ */ jsxRuntime.jsx(chunkY6NGPMDH_cjs.Button, { onClick, variant: "secondary", children: "Reset Form" });
137
+ var ResetButton = ({ onClick }) => /* @__PURE__ */ jsxRuntime.jsx(chunkY3H6MI5D_cjs.Button, { onClick, variant: "secondary", children: "Reset Form" });
134
138
  var NavigationButtons = ({
135
139
  onPrevious,
136
140
  onNext,
@@ -151,7 +155,7 @@ var NavigationButtons = ({
151
155
  const isSingleButton = rightSectionButtons === 1 && !hasPreviousButton;
152
156
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center mt-8 pt-6 border-t border-gray-200", children: [
153
157
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: onPrevious && /* @__PURE__ */ jsxRuntime.jsxs(
154
- chunkY6NGPMDH_cjs.Button,
158
+ chunkY3H6MI5D_cjs.Button,
155
159
  {
156
160
  onClick: onPrevious,
157
161
  disabled: isFirstTab,
@@ -177,7 +181,7 @@ var NavigationButtons = ({
177
181
  ]
178
182
  }
179
183
  ) : onNext && /* @__PURE__ */ jsxRuntime.jsxs(
180
- chunkY6NGPMDH_cjs.Button,
184
+ chunkY3H6MI5D_cjs.Button,
181
185
  {
182
186
  onClick: onNext,
183
187
  className: isSingleButton ? "w-full" : "",
@@ -221,7 +225,7 @@ var SimpleFormButtons = ({
221
225
  ] }) });
222
226
  };
223
227
  var SubmitButton2 = () => {
224
- const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, config } = chunkYV7RVYMD_cjs.useSmartForm();
228
+ const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, config } = chunkLRMJP5OJ_cjs.useSmartForm();
225
229
  const shouldShowReset = config.showReset || config.enableLocalStorage;
226
230
  return /* @__PURE__ */ jsxRuntime.jsx(
227
231
  SimpleFormButtons,
@@ -261,7 +265,7 @@ function Tabs({
261
265
  TabsPrimitive__namespace.Root,
262
266
  {
263
267
  "data-slot": "tabs",
264
- className: chunkYV7RVYMD_cjs.cn("flex flex-col gap-2", className),
268
+ className: chunkLRMJP5OJ_cjs.cn("flex flex-col gap-2", className),
265
269
  ...props
266
270
  }
267
271
  );
@@ -274,7 +278,7 @@ function TabsList({
274
278
  TabsPrimitive__namespace.List,
275
279
  {
276
280
  "data-slot": "tabs-list",
277
- className: chunkYV7RVYMD_cjs.cn(
281
+ className: chunkLRMJP5OJ_cjs.cn(
278
282
  "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
279
283
  className
280
284
  ),
@@ -290,7 +294,7 @@ function TabsTrigger({
290
294
  TabsPrimitive__namespace.Trigger,
291
295
  {
292
296
  "data-slot": "tabs-trigger",
293
- className: chunkYV7RVYMD_cjs.cn(
297
+ className: chunkLRMJP5OJ_cjs.cn(
294
298
  "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
295
299
  className
296
300
  ),
@@ -306,7 +310,7 @@ function TabsContent({
306
310
  TabsPrimitive__namespace.Content,
307
311
  {
308
312
  "data-slot": "tabs-content",
309
- className: chunkYV7RVYMD_cjs.cn("flex-1 outline-none", className),
313
+ className: chunkLRMJP5OJ_cjs.cn("flex-1 outline-none", className),
310
314
  ...props
311
315
  }
312
316
  );
@@ -481,7 +485,7 @@ var MultiTabFormContent = ({
481
485
  footerChildren,
482
486
  children
483
487
  }) => {
484
- const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors } = chunkYV7RVYMD_cjs.useSmartForm();
488
+ const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors } = chunkLRMJP5OJ_cjs.useSmartForm();
485
489
  const [maxContentHeight, setMaxContentHeight] = React3.useState(0);
486
490
  const contentRefs = React3.useRef([]);
487
491
  const debounce = (func, wait) => {
@@ -751,7 +755,7 @@ var MultiTabFormContent = ({
751
755
 
752
756
  // src/hooks/useFormWrapper.ts
753
757
  var useFormWrapper = () => {
754
- return chunkYV7RVYMD_cjs.useSmartForm();
758
+ return chunkLRMJP5OJ_cjs.useSmartForm();
755
759
  };
756
760
  var useExternalFormRegistration = () => {
757
761
  const context = React3.useContext(ExternalFormContext);
@@ -773,7 +777,7 @@ var ExternalFieldProvider = ({
773
777
  children,
774
778
  registerField
775
779
  }) => {
776
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYV7RVYMD_cjs.FieldDetectionContext.Provider, { value: { registerField }, children });
780
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLRMJP5OJ_cjs.FieldDetectionContext.Provider, { value: { registerField }, children });
777
781
  };
778
782
 
779
783
  // src/useAutoDetectFields.tsx
@@ -841,43 +845,43 @@ var FormFieldGroup = ({
841
845
 
842
846
  Object.defineProperty(exports, "SmartCheckbox", {
843
847
  enumerable: true,
844
- get: function () { return chunkY6NGPMDH_cjs.SmartCheckbox; }
848
+ get: function () { return chunkY3H6MI5D_cjs.SmartCheckbox; }
845
849
  });
846
850
  Object.defineProperty(exports, "SmartDatePicker", {
847
851
  enumerable: true,
848
- get: function () { return chunkY6NGPMDH_cjs.SmartDatePicker; }
852
+ get: function () { return chunkY3H6MI5D_cjs.SmartDatePicker; }
849
853
  });
850
854
  Object.defineProperty(exports, "SmartRadioGroup", {
851
855
  enumerable: true,
852
- get: function () { return chunkY6NGPMDH_cjs.SmartRadioGroup; }
856
+ get: function () { return chunkY3H6MI5D_cjs.SmartRadioGroup; }
853
857
  });
854
858
  Object.defineProperty(exports, "SmartSelect", {
855
859
  enumerable: true,
856
- get: function () { return chunkY6NGPMDH_cjs.SmartSelect; }
860
+ get: function () { return chunkY3H6MI5D_cjs.SmartSelect; }
857
861
  });
858
862
  Object.defineProperty(exports, "SmartTags", {
859
863
  enumerable: true,
860
- get: function () { return chunkY6NGPMDH_cjs.SmartTags; }
864
+ get: function () { return chunkY3H6MI5D_cjs.SmartTags; }
861
865
  });
862
866
  Object.defineProperty(exports, "SmartFormProvider", {
863
867
  enumerable: true,
864
- get: function () { return chunkYV7RVYMD_cjs.SmartFormProvider; }
868
+ get: function () { return chunkLRMJP5OJ_cjs.SmartFormProvider; }
865
869
  });
866
870
  Object.defineProperty(exports, "SmartInput", {
867
871
  enumerable: true,
868
- get: function () { return chunkYV7RVYMD_cjs.SmartInput; }
872
+ get: function () { return chunkLRMJP5OJ_cjs.SmartInput; }
869
873
  });
870
874
  Object.defineProperty(exports, "useFieldDetection", {
871
875
  enumerable: true,
872
- get: function () { return chunkYV7RVYMD_cjs.useFieldDetection; }
876
+ get: function () { return chunkLRMJP5OJ_cjs.useFieldDetection; }
873
877
  });
874
878
  Object.defineProperty(exports, "useFormField", {
875
879
  enumerable: true,
876
- get: function () { return chunkYV7RVYMD_cjs.useFormField; }
880
+ get: function () { return chunkLRMJP5OJ_cjs.useFormField; }
877
881
  });
878
882
  Object.defineProperty(exports, "useSmartForm", {
879
883
  enumerable: true,
880
- get: function () { return chunkYV7RVYMD_cjs.useSmartForm; }
884
+ get: function () { return chunkLRMJP5OJ_cjs.useSmartForm; }
881
885
  });
882
886
  exports.BaseSmartForm = BaseSmartForm;
883
887
  exports.DraftSaveButton = DraftSaveButton;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/BaseSmartForm.tsx","../src/FormButtons.tsx","../src/SmartForm.tsx","../src/components/ui/tabs.tsx","../src/TabIndexContext.tsx","../src/constants/externalFormContext.ts","../src/MultiTabSmartForm.tsx","../src/hooks/useFormWrapper.ts","../src/hooks/useExternalFormRegistration.ts","../src/useExternalFormFields.tsx","../src/ExternalFieldProvider.tsx","../src/useAutoDetectFields.tsx","../src/useExternalTab.tsx","../src/FormFieldGroup.tsx"],"names":["jsx","ToastContainer","Bounce","jsxs","SmartFormProvider","Button","Fragment","ChevronLeft","ChevronRight","SubmitButton","useSmartForm","React","isValidElement","TabsPrimitive","cn","useContext","createContext","useState","useMemo","footerChildren","regularChildren","useCallback","children","useRef","z","Check","X","useEffect","FieldDetectionContext"],"mappings":"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","file":"index.cjs","sourcesContent":["import React, { type ReactNode } from 'react';\nimport { ToastContainer, Bounce } from 'react-toastify';\nimport { SmartFormProvider } from './SmartFormProvider';\n\n// =============================================================================\n// BASE SMART FORM TYPES\n// =============================================================================\n\nimport type { AuthenticationConfig } from './SmartFormProvider';\n\nexport interface BaseSmartFormProps {\n children: ReactNode;\n api?: string;\n method?: 'POST' | 'PUT' | 'PATCH'; // HTTP method for form submission\n submitButtonText?: string;\n submitButtonIcon?: ReactNode;\n allowSaveDraft?: boolean;\n saveDraftApi?: string;\n enableLocalStorage?: boolean;\n storageKey?: string;\n logFormData?: boolean;\n onSuccess?: (data: unknown) => void;\n onError?: (error: unknown) => void;\n transformData?: (data: any) => any; // Transform data before submission\n className?: string;\n title?: string;\n subTitle?: string;\n logo?: ReactNode;\n footer?: ReactNode;\n initialData?: Record<string, unknown>;\n showReset?: boolean;\n // Additional props for multi-tab forms\n showProgressBar?: boolean;\n showTabNumbers?: boolean;\n // Authentication\n authentication?: AuthenticationConfig; // Authentication configuration\n}\n\n// =============================================================================\n// COMMON UI COMPONENTS\n// =============================================================================\n\nexport const ToastContainerWrapper: React.FC = () => (\n <ToastContainer\n position=\"top-center\"\n autoClose={2000}\n newestOnTop={false}\n closeOnClick\n rtl={false}\n pauseOnFocusLoss\n draggable\n pauseOnHover\n theme=\"light\"\n transition={Bounce}\n />\n);\n\nexport const FormHeader: React.FC<{ title?: string; subTitle?: string; logo?: ReactNode }> = ({ title, subTitle, logo }) => {\n if (!title && !subTitle && !logo) return null;\n\n return (\n <div className=\"mb-4 border-b border-gray-200 pb-4\">\n <div className=\"flex items-center justify-center space-x-4\">\n {logo && (\n <div className=\"flex-shrink-0\">\n {logo}\n </div>\n )}\n {(title || subTitle) && (\n <div className={logo ? \"text-left\" : \"text-center\"}>\n {title && (\n <h1 className=\"text-xl font-bold text-gray-800\">\n {title}\n </h1>\n )}\n {subTitle && (\n <p className=\"text-muted-foreground text-sm\">{subTitle}</p>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const Section: React.FC<{ text?: string }> = ({ text }) => {\n return (\n <div className=\"relative my-6\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-gray-300\" />\n </div>\n <div className=\"relative flex justify-center text-sm\">\n <span className=\"bg-white px-2 text-gray-500\">{text}</span>\n </div>\n </div>\n );\n};\n\nexport const Footer: React.FC<{ children: ReactNode; className?: string }> = ({ children, className = \"\" }) => {\n return (\n <div className={`mt-4 pt-4 border-t border-gray-200 ${className}`}>\n {children}\n </div>\n );\n};\n\n// =============================================================================\n// BASE SMART FORM COMPONENT\n// =============================================================================\n\nexport const BaseSmartForm: React.FC<BaseSmartFormProps> = ({\n children,\n api,\n method = 'POST',\n submitButtonText = 'Submit',\n submitButtonIcon,\n allowSaveDraft = false,\n saveDraftApi,\n enableLocalStorage = false,\n storageKey,\n logFormData = false,\n onSuccess,\n onError,\n transformData,\n className = 'max-w-2xl mx-auto p-6 bg-white',\n title,\n subTitle,\n logo,\n footer,\n initialData = {},\n showReset = false,\n showProgressBar = true,\n showTabNumbers = true,\n authentication\n}) => {\n const config = {\n api,\n method,\n submitButtonText,\n submitButtonIcon,\n allowSaveDraft,\n saveDraftApi,\n enableLocalStorage,\n storageKey,\n logFormData,\n onSuccess,\n onError,\n transformData,\n className,\n title,\n subTitle,\n logo,\n footer,\n showReset,\n showProgressBar,\n showTabNumbers,\n authentication\n };\n\n return (\n <SmartFormProvider config={config} initialData={initialData}>\n <div className={className}>\n <ToastContainerWrapper />\n <FormHeader title={title} subTitle={subTitle} logo={logo} />\n {children}\n {footer && (\n <div className=\"mt-4 pt-4 border-t border-gray-200\">\n {footer}\n </div>\n )}\n </div>\n </SmartFormProvider>\n );\n};\n\n","import React, { type ReactNode } from 'react';\nimport { Button } from './components/ui/button';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\n// =============================================================================\n// FORM BUTTON TYPES\n// =============================================================================\n\ninterface FormConfig {\n submitButtonText?: string;\n submitButtonIcon?: ReactNode;\n allowSaveDraft?: boolean;\n showReset?: boolean;\n enableLocalStorage?: boolean;\n}\n\nexport interface FormButtonProps {\n isLoading: boolean;\n isDraftSaving: boolean;\n config: FormConfig;\n onSubmit: () => void;\n onSaveDraft?: () => void;\n onReset?: () => void;\n}\n\nexport interface NavigationButtonProps extends FormButtonProps {\n onPrevious?: () => void;\n onNext?: () => void;\n isFirstTab?: boolean;\n isLastTab?: boolean;\n}\n\n// =============================================================================\n// LOADING SPINNER COMPONENT\n// =============================================================================\n\nexport const LoadingSpinner: React.FC<{ className?: string }> = ({ className = \"h-4 w-4\" }) => (\n <div className={`animate-spin rounded-full border-b-2 border-current ${className}`}></div>\n);\n\n// =============================================================================\n// SUBMIT BUTTON COMPONENT\n// =============================================================================\n\nexport const SubmitButton: React.FC<{ \n onClick: () => void; \n disabled: boolean; \n children: ReactNode;\n className?: string;\n}> = ({ onClick, disabled, children, className }) => (\n <Button onClick={onClick} disabled={disabled} className={className}>\n {disabled ? (\n <>\n <LoadingSpinner />\n Submitting...\n </>\n ) : (\n children\n )}\n </Button>\n);\n\n// =============================================================================\n// DRAFT SAVE BUTTON COMPONENT\n// =============================================================================\n\nexport const DraftSaveButton: React.FC<{ \n onClick: () => void; \n disabled: boolean; \n}> = ({ onClick, disabled }) => (\n <Button onClick={onClick} disabled={disabled} variant=\"secondary\">\n {disabled ? (\n <>\n <LoadingSpinner />\n Saving...\n </>\n ) : (\n 'Save Draft'\n )}\n </Button>\n);\n\n// =============================================================================\n// RESET BUTTON COMPONENT\n// =============================================================================\n\nexport const ResetButton: React.FC<{ onClick: () => void }> = ({ onClick }) => (\n <Button onClick={onClick} variant=\"secondary\">\n Reset Form\n </Button>\n);\n\n// =============================================================================\n// NAVIGATION BUTTONS COMPONENT\n// =============================================================================\n\nexport const NavigationButtons: React.FC<NavigationButtonProps> = ({\n onPrevious,\n onNext,\n onSubmit,\n onSaveDraft,\n onReset,\n isLoading,\n isDraftSaving,\n config,\n isFirstTab = false,\n isLastTab = false\n}) => {\n // Count buttons in the right section\n const hasResetButton = !!onReset;\n const hasDraftButton = config.allowSaveDraft && !!onSaveDraft;\n const hasSubmitOrNextButton = isLastTab || !!onNext;\n const rightSectionButtons = [hasResetButton, hasDraftButton, hasSubmitOrNextButton].filter(Boolean).length;\n \n // Check if there's only one button in the right section and no previous button\n const hasPreviousButton = !!onPrevious;\n const isSingleButton = rightSectionButtons === 1 && !hasPreviousButton;\n\n return (\n <div className=\"flex justify-between items-center mt-8 pt-6 border-t border-gray-200\">\n <div className=\"flex gap-4\">\n {onPrevious && (\n <Button\n onClick={onPrevious}\n disabled={isFirstTab}\n variant=\"secondary\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Previous\n </Button>\n )}\n </div>\n\n <div className={isSingleButton ? \"w-full\" : \"flex gap-4\"}>\n {onReset && <ResetButton onClick={onReset} />}\n \n {config.allowSaveDraft && onSaveDraft && (\n <DraftSaveButton onClick={onSaveDraft} disabled={isDraftSaving} />\n )}\n\n {isLastTab ? (\n <SubmitButton \n onClick={onSubmit} \n disabled={isLoading}\n className={isSingleButton ? \"w-full\" : \"\"}\n >\n {config.submitButtonIcon}\n {config.submitButtonText || 'Submit'}\n </SubmitButton>\n ) : (\n onNext && (\n <Button \n onClick={onNext}\n className={isSingleButton ? \"w-full\" : \"\"}\n >\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )\n )}\n </div>\n </div>\n );\n};\n\n// =============================================================================\n// SIMPLE FORM BUTTONS COMPONENT (for single-page forms)\n// =============================================================================\n\nexport const SimpleFormButtons: React.FC<FormButtonProps> = ({\n onSubmit,\n onSaveDraft,\n onReset,\n isLoading,\n isDraftSaving,\n config\n}) => {\n // Count how many buttons will be rendered\n const hasResetButton = !!onReset;\n const hasDraftButton = config.allowSaveDraft && !!onSaveDraft;\n const hasSubmitButton = true; // Submit button is always present\n const totalButtons = [hasResetButton, hasDraftButton, hasSubmitButton].filter(Boolean).length;\n \n // If only one button (submit button), make it full width\n const isSingleButton = totalButtons === 1;\n\n return (\n <div className=\"flex justify-end mt-8 pt-6 border-t border-gray-200\">\n <div className={isSingleButton ? \"w-full\" : \"flex gap-4\"}>\n {onReset && <ResetButton onClick={onReset} />}\n \n {config.allowSaveDraft && onSaveDraft && (\n <DraftSaveButton onClick={onSaveDraft} disabled={isDraftSaving} />\n )}\n\n <SubmitButton \n onClick={onSubmit} \n disabled={isLoading}\n className={isSingleButton ? \"w-full\" : \"\"}\n >\n {config.submitButtonIcon}\n {config.submitButtonText || 'Submit'}\n </SubmitButton>\n </div>\n </div>\n );\n};\n","import React, { isValidElement, type ReactElement } from 'react';\nimport { useSmartForm } from './SmartFormProvider';\nimport { BaseSmartForm, type BaseSmartFormProps, Footer } from './BaseSmartForm';\nimport { SimpleFormButtons } from './FormButtons';\n\n// =============================================================================\n// SMART FORM TYPES\n// =============================================================================\n\nexport type SmartFormProps = BaseSmartFormProps;\n\n// =============================================================================\n// SUBMIT BUTTON COMPONENT\n// =============================================================================\n\nconst SubmitButton: React.FC = () => {\n const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, config } = useSmartForm();\n\n const shouldShowReset = config.showReset || config.enableLocalStorage;\n\n return (\n <SimpleFormButtons\n onSubmit={submitForm}\n onSaveDraft={config.allowSaveDraft ? saveDraft : undefined}\n onReset={shouldShowReset ? resetForm : undefined}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n />\n );\n};\n\n// =============================================================================\n// SMART FORM COMPONENT\n// =============================================================================\n\nexport const SmartForm: React.FC<SmartFormProps> = (props) => {\n // Separate Footer components from other children\n const { children, ...otherProps } = props;\n const childArray = React.Children.toArray(children);\n \n const footerChildren: ReactElement[] = [];\n const regularChildren: ReactElement[] = [];\n \n childArray.forEach((child) => {\n if (isValidElement(child) && child.type === Footer) {\n footerChildren.push(child);\n } else {\n regularChildren.push(child as ReactElement);\n }\n });\n\n return (\n <BaseSmartForm {...otherProps}>\n <div className=\"space-y-6\">\n {regularChildren}\n </div>\n <SubmitButton />\n {footerChildren.length > 0 && (\n <div className=\"space-y-4\">\n {footerChildren}\n </div>\n )}\n </BaseSmartForm>\n );\n};\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import React, { useContext } from 'react';\n\ninterface TabIndexContextType {\n tabIndex: number;\n}\n\nconst TabIndexContext = React.createContext<TabIndexContextType | null>(null);\n\nexport const useTabIndex = () => {\n const context = useContext(TabIndexContext);\n return context; // Return null if not in context (for backward compatibility)\n};\n\nexport const TabIndexProvider: React.FC<{ children: React.ReactNode; tabIndex: number }> = ({ \n children, \n tabIndex \n}) => {\n return (\n <TabIndexContext.Provider value={{ tabIndex }}>\n {children}\n </TabIndexContext.Provider>\n );\n};\n","import { createContext } from 'react';\n\n// =============================================================================\n// EXTERNAL FORM REGISTRATION TYPES\n// =============================================================================\n\nexport interface ExternalFormContextType {\n registerTabFields: (tabIndex: number, fields: string[]) => void;\n currentTabIndex: number;\n}\n\nexport const ExternalFormContext = createContext<ExternalFormContextType | null>(null);\n","import React, { useState, useCallback, useMemo, useRef, type ReactNode, isValidElement, type ReactElement } from 'react';\nimport { useSmartForm } from './SmartFormProvider';\nimport { BaseSmartForm, type BaseSmartFormProps, Footer } from './BaseSmartForm';\nimport { NavigationButtons } from './FormButtons';\nimport { z } from 'zod';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from './components/ui/tabs';\nimport { Check, X } from 'lucide-react';\nimport { TabIndexProvider } from './TabIndexContext';\n\nimport { ExternalFormContext } from './constants/externalFormContext';\n\n\n\n// =============================================================================\n// MULTI TAB SMART FORM TYPES\n// =============================================================================\n\nexport interface TabProps {\n title: string;\n children: ReactNode;\n}\n\nexport interface MultiTabSmartFormProps extends BaseSmartFormProps {\n showProgressBar?: boolean;\n showTabNumbers?: boolean;\n}\n\n// =============================================================================\n// TAB COMPONENT\n// =============================================================================\n\nexport const Tab: React.FC<TabProps> = ({ children }) => {\n return <>{children}</>;\n};\n\n\n// =============================================================================\n// NAVIGATION BUTTONS WRAPPER COMPONENT\n// =============================================================================\n\ninterface NavigationButtonsWrapperProps {\n activeTab: number;\n totalTabs: number;\n onPrevious: () => void;\n onNext: () => void;\n onSubmit: () => void;\n onSaveDraft?: () => void;\n onReset?: () => void;\n isLoading: boolean;\n isDraftSaving: boolean;\n config: Record<string, unknown>;\n}\n\nconst NavigationButtonsWrapper: React.FC<NavigationButtonsWrapperProps> = ({\n activeTab,\n totalTabs,\n onPrevious,\n onNext,\n onSubmit,\n onSaveDraft,\n onReset,\n isLoading,\n isDraftSaving,\n config\n}) => {\n const isLastTab = activeTab === totalTabs - 1;\n const isFirstTab = activeTab === 0;\n\n return (\n <NavigationButtons\n onPrevious={onPrevious}\n onNext={onNext}\n onSubmit={onSubmit}\n onSaveDraft={onSaveDraft}\n onReset={onReset}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n isFirstTab={isFirstTab}\n isLastTab={isLastTab}\n />\n );\n};\n\n// =============================================================================\n// MULTI TAB SMART FORM COMPONENT\n// =============================================================================\n\nexport const MultiTabSmartForm: React.FC<MultiTabSmartFormProps> = ({\n children,\n showProgressBar = true,\n showTabNumbers = true,\n ...baseProps\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [tabFields, setTabFields] = useState<string[][]>([]);\n const [completedTabs, setCompletedTabs] = useState<Set<number>>(new Set());\n const [validationErrorTabs, setValidationErrorTabs] = useState<Set<number>>(new Set());\n const [externalTabFields, setExternalTabFields] = useState<{ [tabIndex: number]: string[] }>({});\n\n // Separate Footer components from other children\n const { footerChildren, regularChildren } = useMemo(() => {\n const childArray = React.Children.toArray(children);\n const footerChildren: ReactElement[] = [];\n const regularChildren: ReactElement[] = [];\n \n childArray.forEach((child) => {\n if (isValidElement(child) && child.type === Footer) {\n footerChildren.push(child);\n } else {\n regularChildren.push(child as ReactElement);\n }\n });\n \n return { footerChildren, regularChildren };\n }, [children]);\n\n // Extract tab information from regular children and track fields\n const tabs: string[] = [];\n React.Children.forEach(regularChildren, (child) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const props = child.props as TabProps;\n if (props.title) {\n tabs.push(props.title);\n }\n }\n });\n\n // Helper function to recursively find smart form controls and collect their field names\n const findSmartInputs = useCallback((children: React.ReactNode): string[] => {\n const fields: string[] = [];\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n // Check if it's any smart control with a `field` prop\n const fieldProps = child.props as Record<string, unknown>;\n if (fieldProps && typeof fieldProps === 'object' && 'field' in fieldProps && fieldProps.field) {\n fields.push(fieldProps.field as string);\n }\n // Recurse into children for nested components (e.g., groups)\n else if (child.props && typeof child.props === 'object' && 'children' in child.props) {\n const nestedFields = findSmartInputs((child.props as Record<string, unknown>).children as React.ReactNode);\n fields.push(...nestedFields);\n }\n }\n });\n\n return fields;\n }, []);\n\n // Function to register fields from external forms\n const registerTabFields = useCallback((tabIndex: number, fields: string[]) => {\n setExternalTabFields(prev => ({\n ...prev,\n [tabIndex]: fields\n }));\n }, []);\n\n // Initialize tab fields array\n React.useEffect(() => {\n const fields: string[][] = [];\n React.Children.forEach(regularChildren, (child) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabFieldsInTab = findSmartInputs((child.props as TabProps).children);\n fields.push(tabFieldsInTab);\n }\n });\n setTabFields(fields);\n }, [regularChildren, findSmartInputs]);\n\n // Combine internal and external fields for each tab\n const getCombinedTabFields = useCallback((tabIndex: number) => {\n const internalFields = tabFields[tabIndex] || [];\n const externalFields = externalTabFields[tabIndex] || [];\n return [...internalFields, ...externalFields];\n }, [tabFields, externalTabFields]);\n\n\n const config = {\n ...baseProps,\n showProgressBar,\n showTabNumbers\n };\n\n const handleTabChange = useCallback((index: number) => {\n setActiveTab(index);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (activeTab > 0) {\n setActiveTab(activeTab - 1);\n }\n }, [activeTab]);\n\n const handleNext = useCallback(() => {\n // This will be called from the NavigationButtons component with validation\n if (activeTab < tabs.length - 1) {\n setActiveTab(activeTab + 1);\n }\n }, [activeTab, tabs.length]);\n\n // Memoize the context value to prevent unnecessary re-renders\n const externalFormContextValue = useMemo(() => ({\n registerTabFields,\n currentTabIndex: activeTab\n }), [registerTabFields, activeTab]);\n\n return (\n <BaseSmartForm {...baseProps}>\n <ExternalFormContext.Provider value={externalFormContextValue}>\n <MultiTabFormContent\n activeTab={activeTab}\n tabs={tabs}\n getCombinedTabFields={getCombinedTabFields}\n config={config}\n onTabChange={handleTabChange}\n onPrevious={handlePrevious}\n onNext={handleNext}\n completedTabs={completedTabs}\n setCompletedTabs={setCompletedTabs}\n validationErrorTabs={validationErrorTabs}\n setValidationErrorTabs={setValidationErrorTabs}\n footerChildren={footerChildren}\n >\n {regularChildren}\n </MultiTabFormContent>\n </ExternalFormContext.Provider>\n </BaseSmartForm>\n );\n};\n\n// =============================================================================\n// MULTI TAB FORM CONTENT COMPONENT\n// =============================================================================\n\ninterface MultiTabFormContentProps {\n activeTab: number;\n tabs: string[];\n getCombinedTabFields: (tabIndex: number) => string[];\n config: Record<string, unknown>;\n onTabChange: (index: number) => void;\n onPrevious: () => void;\n onNext: () => void;\n completedTabs: Set<number>;\n setCompletedTabs: React.Dispatch<React.SetStateAction<Set<number>>>;\n validationErrorTabs: Set<number>;\n setValidationErrorTabs: React.Dispatch<React.SetStateAction<Set<number>>>;\n footerChildren: ReactElement[];\n children: ReactNode;\n}\n\nconst MultiTabFormContent: React.FC<MultiTabFormContentProps> = ({\n activeTab,\n tabs,\n getCombinedTabFields,\n config,\n onTabChange,\n onPrevious,\n onNext,\n completedTabs,\n setCompletedTabs,\n validationErrorTabs,\n setValidationErrorTabs,\n footerChildren,\n children\n}) => {\n const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors } = useSmartForm();\n \n // Calculate maximum content height needed across all tabs\n const [maxContentHeight, setMaxContentHeight] = useState<number>(0);\n const contentRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Debounce function for validation\n const debounce = (func: (...args: unknown[]) => void, wait: number) => {\n let timeout: ReturnType<typeof setTimeout>;\n return function executedFunction(...args: unknown[]) {\n const later = () => {\n clearTimeout(timeout);\n func(...args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n };\n\n // Effect to calculate and update maximum content height\n React.useEffect(() => {\n const calculateMaxHeight = () => {\n let maxHeight = 0;\n contentRefs.current.forEach((ref: HTMLDivElement | null) => {\n if (ref) {\n const height = ref.scrollHeight;\n maxHeight = Math.max(maxHeight, height);\n }\n });\n if (maxHeight > 0) {\n setMaxContentHeight(maxHeight);\n }\n };\n\n // Calculate height after a short delay to ensure content is rendered\n const timeoutId = setTimeout(calculateMaxHeight, 100);\n \n // Also calculate on window resize\n window.addEventListener('resize', calculateMaxHeight);\n \n return () => {\n clearTimeout(timeoutId);\n window.removeEventListener('resize', calculateMaxHeight);\n };\n }, [children, activeTab]);\n\n // Real-time tab completion detection (only for green checkmarks)\n React.useEffect(() => {\n const checkTabCompletion = debounce(() => {\n // Check all tabs for completion status (green checkmarks only)\n tabs.forEach((_, tabIndex) => {\n const tabFieldsInTab = getCombinedTabFields(tabIndex);\n \n if (tabFieldsInTab.length === 0) {\n // No fields in this tab, remove from completed set\n setCompletedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(tabIndex);\n return newSet;\n });\n return;\n }\n\n // Check if all fields in this tab are valid\n let allFieldsValid = true;\n let hasAnyValue = false;\n\n for (const field of tabFieldsInTab) {\n const validation = validationRegistry[field];\n const fieldValue = formData[field];\n \n // Check if field has any value\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n hasAnyValue = true;\n }\n\n if (validation) {\n try {\n (validation as z.ZodSchema).parse(fieldValue);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allFieldsValid = false;\n break;\n }\n }\n }\n }\n\n // Update completion status (only green checkmarks)\n if (hasAnyValue && allFieldsValid) {\n // All fields valid - mark as completed and clear any validation errors\n setCompletedTabs(prev => new Set([...prev, tabIndex]));\n setValidationErrorTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(tabIndex);\n return newSet;\n });\n } else {\n // Not complete - remove from completed set\n setCompletedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(tabIndex);\n return newSet;\n });\n }\n });\n }, 300);\n\n checkTabCompletion();\n }, [formData, validationRegistry, getCombinedTabFields, tabs, setCompletedTabs, setValidationErrorTabs]);\n\n // Handle tab change with error checking\n const handleTabChangeWithErrorCheck = useCallback((index: number) => {\n onTabChange(index);\n\n // The real-time validation effect will handle tab status updates\n }, [onTabChange]);\n\n // Handle Next with validation\n const handleNextWithValidation = useCallback(() => {\n const currentTabFields = getCombinedTabFields(activeTab);\n if (currentTabFields.length > 0) {\n // Use form data and validation registry from context to validate synchronously\n\n const allErrors: Record<string, string> = {};\n let isValid = true;\n\n // Validate fields synchronously to get immediate error information\n for (const field of currentTabFields) {\n const validation = validationRegistry[field];\n if (validation) {\n try {\n (validation as z.ZodSchema).parse(formData[field]);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allErrors[field] = error.issues[0]?.message || `Invalid ${field}`;\n isValid = false;\n }\n }\n }\n }\n\n if (isValid) {\n // Mark current tab as completed\n setCompletedTabs(prev => new Set([...prev, activeTab]));\n // Clear validation errors for this tab\n setValidationErrorTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(activeTab);\n return newSet;\n });\n onNext();\n } else {\n // Remove completed status if validation fails\n setCompletedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(activeTab);\n return newSet;\n });\n\n // Mark this tab as having validation errors\n setValidationErrorTabs(prev => new Set([...prev, activeTab]));\n\n // Update errors state\n validateFields(currentTabFields);\n\n // Find the first field with error from our synchronous validation\n const firstErrorField = currentTabFields.find(field => allErrors[field]);\n if (firstErrorField) {\n // Small delay to ensure DOM is updated with error states\n setTimeout(() => {\n const element = document.querySelector(`[data-field=\"${firstErrorField}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n (element as HTMLElement).focus();\n }\n }, 50);\n }\n }\n } else {\n // No fields to validate, proceed\n onNext();\n }\n }, [activeTab, getCombinedTabFields, validateFields, onNext, setCompletedTabs, setValidationErrorTabs, validationRegistry, formData]);\n\n // Handle form submission with validation and tab navigation\n const handleSubmitWithValidation = useCallback(async () => {\n // Perform validation synchronously to get immediate results\n const allErrors: Record<string, string> = {};\n let isValid = true;\n let firstErrorTabIndex = -1;\n\n // Validate all fields and collect errors\n for (const [field, validation] of Object.entries(validationRegistry)) {\n if (validation && typeof (validation as z.ZodSchema).parse === 'function') {\n try {\n (validation as z.ZodSchema).parse(formData[field]);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allErrors[field] = error.issues[0]?.message || `Invalid ${field}`;\n isValid = false;\n }\n }\n }\n }\n\n // Update errors state\n setErrors(allErrors);\n\n if (isValid) {\n // Form is valid, proceed with submission\n await submitForm();\n } else {\n // Clear all validation error tabs first\n setValidationErrorTabs(new Set());\n\n // Find the first tab with errors and mark tabs with errors\n for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {\n const tabFieldsInTab = getCombinedTabFields(tabIndex);\n const hasErrorsInTab = tabFieldsInTab.some(field => allErrors[field]);\n\n if (hasErrorsInTab) {\n // Mark this tab as having validation errors\n setValidationErrorTabs(prev => new Set([...prev, tabIndex]));\n \n if (firstErrorTabIndex === -1) {\n firstErrorTabIndex = tabIndex;\n }\n }\n }\n\n if (firstErrorTabIndex !== -1) {\n // Navigate to the first tab with errors\n onTabChange(firstErrorTabIndex);\n\n // Scroll to first error field in that tab\n setTimeout(() => {\n const tabFieldsInTab = getCombinedTabFields(firstErrorTabIndex);\n const firstErrorField = tabFieldsInTab.find(field => allErrors[field]);\n\n if (firstErrorField) {\n const element = document.querySelector(`[data-field=\"${firstErrorField}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n (element as HTMLElement).focus();\n }\n }\n }, 100);\n }\n }\n }, [submitForm, getCombinedTabFields, onTabChange, tabs.length, validationRegistry, formData, setErrors, setValidationErrorTabs]);\n\n // Convert activeTab index to tab value for shadcn Tabs\n const activeTabValue = tabs[activeTab] || tabs[0] || '';\n\n return (\n <>\n\n <Tabs value={activeTabValue} onValueChange={(value) => {\n const newIndex = tabs.indexOf(value);\n if (newIndex !== -1) {\n handleTabChangeWithErrorCheck(newIndex);\n }\n }} className=\"w-full\">\n <TabsList className={`grid w-full mb-8`} style={{ gridTemplateColumns: `repeat(${tabs.length}, 1fr)` }}>\n {tabs.map((tab, index) => (\n <TabsTrigger key={tab} value={tab} className=\"flex items-center gap-2\">\n {(config.showTabNumbers as boolean) && <span>{index + 1}.</span>}\n {tab}\n {completedTabs.has(index) && (\n <Check className=\"h-4 w-4 text-green-600\" />\n )}\n {validationErrorTabs.has(index) && (\n <X className=\"h-4 w-4 text-red-600\" />\n )}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabProps = child.props as TabProps;\n return (\n <TabsContent key={index} value={tabProps.title}>\n <TabIndexProvider tabIndex={index}>\n <div \n ref={(el) => { contentRefs.current[index] = el; }}\n className=\"space-y-6\"\n style={{ minHeight: maxContentHeight > 0 ? `${maxContentHeight}px` : undefined }}\n >\n {tabProps.children}\n </div>\n </TabIndexProvider>\n </TabsContent>\n );\n }\n return null;\n })}\n\n {/* Hidden render of all tab content for immediate field registration and height calculation */}\n <div style={{ position: 'absolute', left: '-9999px', top: '-9999px', visibility: 'hidden' }}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabProps = child.props as TabProps;\n return (\n <TabIndexProvider key={`hidden-${index}`} tabIndex={index}>\n <div \n ref={(el) => { contentRefs.current[index] = el; }}\n className=\"space-y-6\"\n >\n {tabProps.children}\n </div>\n </TabIndexProvider>\n );\n }\n return null;\n })}\n </div>\n </Tabs>\n\n <NavigationButtonsWrapper\n activeTab={activeTab}\n totalTabs={tabs.length}\n onPrevious={onPrevious}\n onNext={handleNextWithValidation}\n onSubmit={handleSubmitWithValidation}\n onSaveDraft={config.allowSaveDraft ? saveDraft : undefined}\n onReset={(config.showReset || config.enableLocalStorage) ? resetForm : undefined}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n />\n\n {/* Footer components */}\n {footerChildren.length > 0 && (\n <div className=\"space-y-4\">\n {footerChildren}\n </div>\n )}\n\n {/* Progress Indicator */}\n {(config.showProgressBar as boolean) && (\n <div className=\"mt-6\">\n <div className=\"flex justify-between text-sm text-muted-foreground mb-2\">\n <span>Progress</span>\n <span>{Math.round(((activeTab + 1) / tabs.length) * 100)}%</span>\n </div>\n <div className=\"w-full bg-muted rounded-full h-2\">\n <div\n className=\"bg-primary h-2 rounded-full transition-all duration-300\"\n style={{ width: `${((activeTab + 1) / tabs.length) * 100}%` }}\n ></div>\n </div>\n </div>\n )}\n </>\n );\n};\n","import { useSmartForm } from '../SmartFormProvider';\n\n// =============================================================================\n// FORM WRAPPER HOOK\n// =============================================================================\n\nexport const useFormWrapper = () => {\n return useSmartForm();\n};\n","import { useContext } from 'react';\nimport { ExternalFormContext, type ExternalFormContextType } from '../constants/externalFormContext';\n\n// =============================================================================\n// EXTERNAL FORM REGISTRATION HOOK\n// =============================================================================\n\nexport const useExternalFormRegistration = (): ExternalFormContextType => {\n const context = useContext(ExternalFormContext);\n if (!context) {\n throw new Error('useExternalFormRegistration must be used within a MultiTabSmartForm');\n }\n return context;\n};\n","import { useEffect, useMemo } from 'react';\nimport { useExternalFormRegistration } from './hooks/useExternalFormRegistration';\n\n/**\n * Hook for external forms to register their fields with MultiTabSmartForm\n * This allows external forms to participate in validation and tab switching\n */\nexport const useExternalFormFields = (fields: string[], tabIndex: number) => {\n const { registerTabFields } = useExternalFormRegistration();\n\n // Create a stable reference to the fields array\n const stableFields = useMemo(() => fields, [fields.join(',')]);\n\n useEffect(() => {\n if (stableFields.length > 0) {\n registerTabFields(tabIndex, stableFields);\n }\n }, [stableFields, tabIndex, registerTabFields]);\n};\n","import React from 'react';\nimport { FieldDetectionContext } from './FieldDetectionHook';\n\nexport const ExternalFieldProvider: React.FC<{ \n children: React.ReactNode; \n registerField: (fieldName: string) => void \n}> = ({ \n children, \n registerField \n}) => {\n return (\n <FieldDetectionContext.Provider value={{ registerField }}>\n {children}\n </FieldDetectionContext.Provider>\n );\n};\n","import { useCallback, useRef } from 'react';\nimport { useExternalFormRegistration } from './hooks/useExternalFormRegistration';\nimport { ExternalFieldProvider } from './ExternalFieldProvider';\n\n/**\n * Hook that automatically detects SmartInput fields in external forms\n * This eliminates the need to manually specify field names\n */\nexport const useAutoDetectFields = (tabIndex: number) => {\n const { registerTabFields } = useExternalFormRegistration();\n const hasRegistered = useRef(false);\n const detectedFields = useRef<Set<string>>(new Set());\n\n // Function to register a field when it's detected\n const registerField = useCallback((fieldName: string) => {\n detectedFields.current.add(fieldName);\n \n // Register all detected fields with the MultiTabSmartForm\n if (!hasRegistered.current) {\n const fieldsArray = Array.from(detectedFields.current);\n registerTabFields(tabIndex, fieldsArray);\n hasRegistered.current = true;\n }\n }, [tabIndex, registerTabFields]);\n\n return { registerField, ExternalFieldProvider };\n};\n","import { useCallback, useRef, useEffect } from 'react';\nimport { useExternalFormRegistration } from './hooks/useExternalFormRegistration';\nimport { ExternalFieldProvider } from './ExternalFieldProvider';\nimport { useTabIndex } from './TabIndexContext';\n\n/**\n * Hook that automatically detects both tab index and fields in external forms\n * This eliminates the need to manually specify both tab index and field names\n */\nexport const useExternalTab = () => {\n const { registerTabFields } = useExternalFormRegistration();\n const tabIndexContext = useTabIndex();\n const detectedFields = useRef<Set<string>>(new Set());\n const registrationTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hasRegistered = useRef(false);\n\n // Use the tab index from context, or fallback to 0 if not available\n const tabIndex = tabIndexContext?.tabIndex ?? 0;\n\n // Function to register a field when it's detected\n const registerField = useCallback((fieldName: string) => {\n detectedFields.current.add(fieldName);\n \n // Clear any existing timeout\n if (registrationTimeout.current) {\n clearTimeout(registrationTimeout.current);\n }\n \n // Debounce the registration to allow all fields to be detected\n registrationTimeout.current = setTimeout(() => {\n if (!hasRegistered.current) {\n const fieldsArray = Array.from(detectedFields.current);\n if (fieldsArray.length > 0) {\n registerTabFields(tabIndex, fieldsArray);\n hasRegistered.current = true;\n }\n }\n }, 200); // Longer delay to ensure all fields are detected\n }, [tabIndex, registerTabFields]);\n\n // Force registration after component mount to catch all fields\n useEffect(() => {\n const forceRegistrationTimeout = setTimeout(() => {\n if (!hasRegistered.current) {\n const fieldsArray = Array.from(detectedFields.current);\n if (fieldsArray.length > 0) {\n registerTabFields(tabIndex, fieldsArray);\n hasRegistered.current = true;\n }\n }\n }, 1000); // Force registration after 1 second\n\n return () => {\n clearTimeout(forceRegistrationTimeout);\n if (registrationTimeout.current) {\n clearTimeout(registrationTimeout.current);\n }\n };\n }, [tabIndex, registerTabFields]);\n\n return { registerField, ExternalFieldProvider };\n};\n","import React, { type ReactNode } from 'react';\n\n// =============================================================================\n// FORM FIELD GROUP TYPES\n// =============================================================================\n\nexport interface FormFieldGroupProps {\n children: ReactNode;\n className?: string;\n}\n\n// =============================================================================\n// FORM FIELD GROUP COMPONENT\n// =============================================================================\n\nexport const FormFieldGroup: React.FC<FormFieldGroupProps> = ({\n children,\n className = ''\n}) => {\n return (\n <div className={`flex flex-wrap gap-2 md:gap-4 mb-4 ${className}`}>\n {children}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/BaseSmartForm.tsx","../src/FormButtons.tsx","../src/SmartForm.tsx","../src/components/ui/tabs.tsx","../src/TabIndexContext.tsx","../src/constants/externalFormContext.ts","../src/MultiTabSmartForm.tsx","../src/hooks/useFormWrapper.ts","../src/hooks/useExternalFormRegistration.ts","../src/useExternalFormFields.tsx","../src/ExternalFieldProvider.tsx","../src/useAutoDetectFields.tsx","../src/useExternalTab.tsx","../src/FormFieldGroup.tsx"],"names":["jsx","ToastContainer","Bounce","jsxs","SmartFormProvider","Button","Fragment","ChevronLeft","ChevronRight","SubmitButton","useSmartForm","React","isValidElement","TabsPrimitive","cn","useContext","createContext","useState","useMemo","footerChildren","regularChildren","useCallback","children","useRef","z","Check","X","useEffect","FieldDetectionContext"],"mappings":"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","file":"index.cjs","sourcesContent":["import React, { type ReactNode } from 'react';\nimport { ToastContainer, Bounce } from 'react-toastify';\nimport { SmartFormProvider } from './SmartFormProvider';\n\n// =============================================================================\n// BASE SMART FORM TYPES\n// =============================================================================\n\nimport type { AuthenticationConfig } from './SmartFormProvider';\n\nexport interface BaseSmartFormProps {\n children: ReactNode;\n api?: string;\n method?: 'POST' | 'PUT' | 'PATCH'; // HTTP method for form submission\n submitButtonText?: string;\n submitButtonIcon?: ReactNode;\n allowSaveDraft?: boolean;\n saveDraftApi?: string;\n enableLocalStorage?: boolean;\n storageKey?: string;\n logFormData?: boolean;\n onSuccess?: (data: unknown) => void;\n onError?: (error: unknown) => void;\n transformData?: (data: any) => any; // Transform data before submission\n className?: string;\n title?: string;\n subTitle?: string;\n logo?: ReactNode;\n footer?: ReactNode;\n initialData?: Record<string, unknown>;\n showReset?: boolean;\n // Additional props for multi-tab forms\n showProgressBar?: boolean;\n showTabNumbers?: boolean;\n // Authentication\n authentication?: AuthenticationConfig; // Authentication configuration\n // Query parameters\n includeQueryParams?: boolean; // Include URL query parameters in form submission (default: false)\n queryParamsToInclude?: string[]; // Optional array of specific query param names to include\n}\n\n// =============================================================================\n// COMMON UI COMPONENTS\n// =============================================================================\n\nexport const ToastContainerWrapper: React.FC = () => (\n <ToastContainer\n position=\"top-center\"\n autoClose={2000}\n newestOnTop={false}\n closeOnClick\n rtl={false}\n pauseOnFocusLoss\n draggable\n pauseOnHover\n theme=\"light\"\n transition={Bounce}\n />\n);\n\nexport const FormHeader: React.FC<{ title?: string; subTitle?: string; logo?: ReactNode }> = ({ title, subTitle, logo }) => {\n if (!title && !subTitle && !logo) return null;\n\n return (\n <div className=\"mb-4 border-b border-gray-200 pb-4\">\n <div className=\"flex items-center justify-center space-x-4\">\n {logo && (\n <div className=\"flex-shrink-0\">\n {logo}\n </div>\n )}\n {(title || subTitle) && (\n <div className={logo ? \"text-left\" : \"text-center\"}>\n {title && (\n <h1 className=\"text-xl font-bold text-gray-800\">\n {title}\n </h1>\n )}\n {subTitle && (\n <p className=\"text-muted-foreground text-sm\">{subTitle}</p>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const Section: React.FC<{ text?: string }> = ({ text }) => {\n return (\n <div className=\"relative my-6\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-gray-300\" />\n </div>\n <div className=\"relative flex justify-center text-sm\">\n <span className=\"bg-white px-2 text-gray-500\">{text}</span>\n </div>\n </div>\n );\n};\n\nexport const Footer: React.FC<{ children: ReactNode; className?: string }> = ({ children, className = \"\" }) => {\n return (\n <div className={`mt-4 pt-4 border-t border-gray-200 ${className}`}>\n {children}\n </div>\n );\n};\n\n// =============================================================================\n// BASE SMART FORM COMPONENT\n// =============================================================================\n\nexport const BaseSmartForm: React.FC<BaseSmartFormProps> = ({\n children,\n api,\n method = 'POST',\n submitButtonText = 'Submit',\n submitButtonIcon,\n allowSaveDraft = false,\n saveDraftApi,\n enableLocalStorage = false,\n storageKey,\n logFormData = false,\n onSuccess,\n onError,\n transformData,\n className = 'max-w-2xl mx-auto p-6 bg-white',\n title,\n subTitle,\n logo,\n footer,\n initialData = {},\n showReset = false,\n showProgressBar = true,\n showTabNumbers = true,\n authentication,\n includeQueryParams = false,\n queryParamsToInclude\n}) => {\n const config = {\n api,\n method,\n submitButtonText,\n submitButtonIcon,\n allowSaveDraft,\n saveDraftApi,\n enableLocalStorage,\n storageKey,\n logFormData,\n onSuccess,\n onError,\n transformData,\n className,\n title,\n subTitle,\n logo,\n footer,\n showReset,\n showProgressBar,\n showTabNumbers,\n authentication,\n includeQueryParams,\n queryParamsToInclude\n };\n\n return (\n <SmartFormProvider config={config} initialData={initialData}>\n <div className={className}>\n <ToastContainerWrapper />\n <FormHeader title={title} subTitle={subTitle} logo={logo} />\n {children}\n {footer && (\n <div className=\"mt-4 pt-4 border-t border-gray-200\">\n {footer}\n </div>\n )}\n </div>\n </SmartFormProvider>\n );\n};\n\n","import React, { type ReactNode } from 'react';\nimport { Button } from './components/ui/button';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\n// =============================================================================\n// FORM BUTTON TYPES\n// =============================================================================\n\ninterface FormConfig {\n submitButtonText?: string;\n submitButtonIcon?: ReactNode;\n allowSaveDraft?: boolean;\n showReset?: boolean;\n enableLocalStorage?: boolean;\n}\n\nexport interface FormButtonProps {\n isLoading: boolean;\n isDraftSaving: boolean;\n config: FormConfig;\n onSubmit: () => void;\n onSaveDraft?: () => void;\n onReset?: () => void;\n}\n\nexport interface NavigationButtonProps extends FormButtonProps {\n onPrevious?: () => void;\n onNext?: () => void;\n isFirstTab?: boolean;\n isLastTab?: boolean;\n}\n\n// =============================================================================\n// LOADING SPINNER COMPONENT\n// =============================================================================\n\nexport const LoadingSpinner: React.FC<{ className?: string }> = ({ className = \"h-4 w-4\" }) => (\n <div className={`animate-spin rounded-full border-b-2 border-current ${className}`}></div>\n);\n\n// =============================================================================\n// SUBMIT BUTTON COMPONENT\n// =============================================================================\n\nexport const SubmitButton: React.FC<{ \n onClick: () => void; \n disabled: boolean; \n children: ReactNode;\n className?: string;\n}> = ({ onClick, disabled, children, className }) => (\n <Button onClick={onClick} disabled={disabled} className={className}>\n {disabled ? (\n <>\n <LoadingSpinner />\n Submitting...\n </>\n ) : (\n children\n )}\n </Button>\n);\n\n// =============================================================================\n// DRAFT SAVE BUTTON COMPONENT\n// =============================================================================\n\nexport const DraftSaveButton: React.FC<{ \n onClick: () => void; \n disabled: boolean; \n}> = ({ onClick, disabled }) => (\n <Button onClick={onClick} disabled={disabled} variant=\"secondary\">\n {disabled ? (\n <>\n <LoadingSpinner />\n Saving...\n </>\n ) : (\n 'Save Draft'\n )}\n </Button>\n);\n\n// =============================================================================\n// RESET BUTTON COMPONENT\n// =============================================================================\n\nexport const ResetButton: React.FC<{ onClick: () => void }> = ({ onClick }) => (\n <Button onClick={onClick} variant=\"secondary\">\n Reset Form\n </Button>\n);\n\n// =============================================================================\n// NAVIGATION BUTTONS COMPONENT\n// =============================================================================\n\nexport const NavigationButtons: React.FC<NavigationButtonProps> = ({\n onPrevious,\n onNext,\n onSubmit,\n onSaveDraft,\n onReset,\n isLoading,\n isDraftSaving,\n config,\n isFirstTab = false,\n isLastTab = false\n}) => {\n // Count buttons in the right section\n const hasResetButton = !!onReset;\n const hasDraftButton = config.allowSaveDraft && !!onSaveDraft;\n const hasSubmitOrNextButton = isLastTab || !!onNext;\n const rightSectionButtons = [hasResetButton, hasDraftButton, hasSubmitOrNextButton].filter(Boolean).length;\n \n // Check if there's only one button in the right section and no previous button\n const hasPreviousButton = !!onPrevious;\n const isSingleButton = rightSectionButtons === 1 && !hasPreviousButton;\n\n return (\n <div className=\"flex justify-between items-center mt-8 pt-6 border-t border-gray-200\">\n <div className=\"flex gap-4\">\n {onPrevious && (\n <Button\n onClick={onPrevious}\n disabled={isFirstTab}\n variant=\"secondary\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Previous\n </Button>\n )}\n </div>\n\n <div className={isSingleButton ? \"w-full\" : \"flex gap-4\"}>\n {onReset && <ResetButton onClick={onReset} />}\n \n {config.allowSaveDraft && onSaveDraft && (\n <DraftSaveButton onClick={onSaveDraft} disabled={isDraftSaving} />\n )}\n\n {isLastTab ? (\n <SubmitButton \n onClick={onSubmit} \n disabled={isLoading}\n className={isSingleButton ? \"w-full\" : \"\"}\n >\n {config.submitButtonIcon}\n {config.submitButtonText || 'Submit'}\n </SubmitButton>\n ) : (\n onNext && (\n <Button \n onClick={onNext}\n className={isSingleButton ? \"w-full\" : \"\"}\n >\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )\n )}\n </div>\n </div>\n );\n};\n\n// =============================================================================\n// SIMPLE FORM BUTTONS COMPONENT (for single-page forms)\n// =============================================================================\n\nexport const SimpleFormButtons: React.FC<FormButtonProps> = ({\n onSubmit,\n onSaveDraft,\n onReset,\n isLoading,\n isDraftSaving,\n config\n}) => {\n // Count how many buttons will be rendered\n const hasResetButton = !!onReset;\n const hasDraftButton = config.allowSaveDraft && !!onSaveDraft;\n const hasSubmitButton = true; // Submit button is always present\n const totalButtons = [hasResetButton, hasDraftButton, hasSubmitButton].filter(Boolean).length;\n \n // If only one button (submit button), make it full width\n const isSingleButton = totalButtons === 1;\n\n return (\n <div className=\"flex justify-end mt-8 pt-6 border-t border-gray-200\">\n <div className={isSingleButton ? \"w-full\" : \"flex gap-4\"}>\n {onReset && <ResetButton onClick={onReset} />}\n \n {config.allowSaveDraft && onSaveDraft && (\n <DraftSaveButton onClick={onSaveDraft} disabled={isDraftSaving} />\n )}\n\n <SubmitButton \n onClick={onSubmit} \n disabled={isLoading}\n className={isSingleButton ? \"w-full\" : \"\"}\n >\n {config.submitButtonIcon}\n {config.submitButtonText || 'Submit'}\n </SubmitButton>\n </div>\n </div>\n );\n};\n","import React, { isValidElement, type ReactElement } from 'react';\nimport { useSmartForm } from './SmartFormProvider';\nimport { BaseSmartForm, type BaseSmartFormProps, Footer } from './BaseSmartForm';\nimport { SimpleFormButtons } from './FormButtons';\n\n// =============================================================================\n// SMART FORM TYPES\n// =============================================================================\n\nexport type SmartFormProps = BaseSmartFormProps;\n\n// =============================================================================\n// SUBMIT BUTTON COMPONENT\n// =============================================================================\n\nconst SubmitButton: React.FC = () => {\n const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, config } = useSmartForm();\n\n const shouldShowReset = config.showReset || config.enableLocalStorage;\n\n return (\n <SimpleFormButtons\n onSubmit={submitForm}\n onSaveDraft={config.allowSaveDraft ? saveDraft : undefined}\n onReset={shouldShowReset ? resetForm : undefined}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n />\n );\n};\n\n// =============================================================================\n// SMART FORM COMPONENT\n// =============================================================================\n\nexport const SmartForm: React.FC<SmartFormProps> = (props) => {\n // Separate Footer components from other children\n const { children, ...otherProps } = props;\n const childArray = React.Children.toArray(children);\n \n const footerChildren: ReactElement[] = [];\n const regularChildren: ReactElement[] = [];\n \n childArray.forEach((child) => {\n if (isValidElement(child) && child.type === Footer) {\n footerChildren.push(child);\n } else {\n regularChildren.push(child as ReactElement);\n }\n });\n\n return (\n <BaseSmartForm {...otherProps}>\n <div className=\"space-y-6\">\n {regularChildren}\n </div>\n <SubmitButton />\n {footerChildren.length > 0 && (\n <div className=\"space-y-4\">\n {footerChildren}\n </div>\n )}\n </BaseSmartForm>\n );\n};\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import React, { useContext } from 'react';\n\ninterface TabIndexContextType {\n tabIndex: number;\n}\n\nconst TabIndexContext = React.createContext<TabIndexContextType | null>(null);\n\nexport const useTabIndex = () => {\n const context = useContext(TabIndexContext);\n return context; // Return null if not in context (for backward compatibility)\n};\n\nexport const TabIndexProvider: React.FC<{ children: React.ReactNode; tabIndex: number }> = ({ \n children, \n tabIndex \n}) => {\n return (\n <TabIndexContext.Provider value={{ tabIndex }}>\n {children}\n </TabIndexContext.Provider>\n );\n};\n","import { createContext } from 'react';\n\n// =============================================================================\n// EXTERNAL FORM REGISTRATION TYPES\n// =============================================================================\n\nexport interface ExternalFormContextType {\n registerTabFields: (tabIndex: number, fields: string[]) => void;\n currentTabIndex: number;\n}\n\nexport const ExternalFormContext = createContext<ExternalFormContextType | null>(null);\n","import React, { useState, useCallback, useMemo, useRef, type ReactNode, isValidElement, type ReactElement } from 'react';\nimport { useSmartForm } from './SmartFormProvider';\nimport { BaseSmartForm, type BaseSmartFormProps, Footer } from './BaseSmartForm';\nimport { NavigationButtons } from './FormButtons';\nimport { z } from 'zod';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from './components/ui/tabs';\nimport { Check, X } from 'lucide-react';\nimport { TabIndexProvider } from './TabIndexContext';\n\nimport { ExternalFormContext } from './constants/externalFormContext';\n\n\n\n// =============================================================================\n// MULTI TAB SMART FORM TYPES\n// =============================================================================\n\nexport interface TabProps {\n title: string;\n children: ReactNode;\n}\n\nexport interface MultiTabSmartFormProps extends BaseSmartFormProps {\n showProgressBar?: boolean;\n showTabNumbers?: boolean;\n}\n\n// =============================================================================\n// TAB COMPONENT\n// =============================================================================\n\nexport const Tab: React.FC<TabProps> = ({ children }) => {\n return <>{children}</>;\n};\n\n\n// =============================================================================\n// NAVIGATION BUTTONS WRAPPER COMPONENT\n// =============================================================================\n\ninterface NavigationButtonsWrapperProps {\n activeTab: number;\n totalTabs: number;\n onPrevious: () => void;\n onNext: () => void;\n onSubmit: () => void;\n onSaveDraft?: () => void;\n onReset?: () => void;\n isLoading: boolean;\n isDraftSaving: boolean;\n config: Record<string, unknown>;\n}\n\nconst NavigationButtonsWrapper: React.FC<NavigationButtonsWrapperProps> = ({\n activeTab,\n totalTabs,\n onPrevious,\n onNext,\n onSubmit,\n onSaveDraft,\n onReset,\n isLoading,\n isDraftSaving,\n config\n}) => {\n const isLastTab = activeTab === totalTabs - 1;\n const isFirstTab = activeTab === 0;\n\n return (\n <NavigationButtons\n onPrevious={onPrevious}\n onNext={onNext}\n onSubmit={onSubmit}\n onSaveDraft={onSaveDraft}\n onReset={onReset}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n isFirstTab={isFirstTab}\n isLastTab={isLastTab}\n />\n );\n};\n\n// =============================================================================\n// MULTI TAB SMART FORM COMPONENT\n// =============================================================================\n\nexport const MultiTabSmartForm: React.FC<MultiTabSmartFormProps> = ({\n children,\n showProgressBar = true,\n showTabNumbers = true,\n ...baseProps\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [tabFields, setTabFields] = useState<string[][]>([]);\n const [completedTabs, setCompletedTabs] = useState<Set<number>>(new Set());\n const [validationErrorTabs, setValidationErrorTabs] = useState<Set<number>>(new Set());\n const [externalTabFields, setExternalTabFields] = useState<{ [tabIndex: number]: string[] }>({});\n\n // Separate Footer components from other children\n const { footerChildren, regularChildren } = useMemo(() => {\n const childArray = React.Children.toArray(children);\n const footerChildren: ReactElement[] = [];\n const regularChildren: ReactElement[] = [];\n \n childArray.forEach((child) => {\n if (isValidElement(child) && child.type === Footer) {\n footerChildren.push(child);\n } else {\n regularChildren.push(child as ReactElement);\n }\n });\n \n return { footerChildren, regularChildren };\n }, [children]);\n\n // Extract tab information from regular children and track fields\n const tabs: string[] = [];\n React.Children.forEach(regularChildren, (child) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const props = child.props as TabProps;\n if (props.title) {\n tabs.push(props.title);\n }\n }\n });\n\n // Helper function to recursively find smart form controls and collect their field names\n const findSmartInputs = useCallback((children: React.ReactNode): string[] => {\n const fields: string[] = [];\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n // Check if it's any smart control with a `field` prop\n const fieldProps = child.props as Record<string, unknown>;\n if (fieldProps && typeof fieldProps === 'object' && 'field' in fieldProps && fieldProps.field) {\n fields.push(fieldProps.field as string);\n }\n // Recurse into children for nested components (e.g., groups)\n else if (child.props && typeof child.props === 'object' && 'children' in child.props) {\n const nestedFields = findSmartInputs((child.props as Record<string, unknown>).children as React.ReactNode);\n fields.push(...nestedFields);\n }\n }\n });\n\n return fields;\n }, []);\n\n // Function to register fields from external forms\n const registerTabFields = useCallback((tabIndex: number, fields: string[]) => {\n setExternalTabFields(prev => ({\n ...prev,\n [tabIndex]: fields\n }));\n }, []);\n\n // Initialize tab fields array\n React.useEffect(() => {\n const fields: string[][] = [];\n React.Children.forEach(regularChildren, (child) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabFieldsInTab = findSmartInputs((child.props as TabProps).children);\n fields.push(tabFieldsInTab);\n }\n });\n setTabFields(fields);\n }, [regularChildren, findSmartInputs]);\n\n // Combine internal and external fields for each tab\n const getCombinedTabFields = useCallback((tabIndex: number) => {\n const internalFields = tabFields[tabIndex] || [];\n const externalFields = externalTabFields[tabIndex] || [];\n return [...internalFields, ...externalFields];\n }, [tabFields, externalTabFields]);\n\n\n const config = {\n ...baseProps,\n showProgressBar,\n showTabNumbers\n };\n\n const handleTabChange = useCallback((index: number) => {\n setActiveTab(index);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (activeTab > 0) {\n setActiveTab(activeTab - 1);\n }\n }, [activeTab]);\n\n const handleNext = useCallback(() => {\n // This will be called from the NavigationButtons component with validation\n if (activeTab < tabs.length - 1) {\n setActiveTab(activeTab + 1);\n }\n }, [activeTab, tabs.length]);\n\n // Memoize the context value to prevent unnecessary re-renders\n const externalFormContextValue = useMemo(() => ({\n registerTabFields,\n currentTabIndex: activeTab\n }), [registerTabFields, activeTab]);\n\n return (\n <BaseSmartForm {...baseProps}>\n <ExternalFormContext.Provider value={externalFormContextValue}>\n <MultiTabFormContent\n activeTab={activeTab}\n tabs={tabs}\n getCombinedTabFields={getCombinedTabFields}\n config={config}\n onTabChange={handleTabChange}\n onPrevious={handlePrevious}\n onNext={handleNext}\n completedTabs={completedTabs}\n setCompletedTabs={setCompletedTabs}\n validationErrorTabs={validationErrorTabs}\n setValidationErrorTabs={setValidationErrorTabs}\n footerChildren={footerChildren}\n >\n {regularChildren}\n </MultiTabFormContent>\n </ExternalFormContext.Provider>\n </BaseSmartForm>\n );\n};\n\n// =============================================================================\n// MULTI TAB FORM CONTENT COMPONENT\n// =============================================================================\n\ninterface MultiTabFormContentProps {\n activeTab: number;\n tabs: string[];\n getCombinedTabFields: (tabIndex: number) => string[];\n config: Record<string, unknown>;\n onTabChange: (index: number) => void;\n onPrevious: () => void;\n onNext: () => void;\n completedTabs: Set<number>;\n setCompletedTabs: React.Dispatch<React.SetStateAction<Set<number>>>;\n validationErrorTabs: Set<number>;\n setValidationErrorTabs: React.Dispatch<React.SetStateAction<Set<number>>>;\n footerChildren: ReactElement[];\n children: ReactNode;\n}\n\nconst MultiTabFormContent: React.FC<MultiTabFormContentProps> = ({\n activeTab,\n tabs,\n getCombinedTabFields,\n config,\n onTabChange,\n onPrevious,\n onNext,\n completedTabs,\n setCompletedTabs,\n validationErrorTabs,\n setValidationErrorTabs,\n footerChildren,\n children\n}) => {\n const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors } = useSmartForm();\n \n // Calculate maximum content height needed across all tabs\n const [maxContentHeight, setMaxContentHeight] = useState<number>(0);\n const contentRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Debounce function for validation\n const debounce = (func: (...args: unknown[]) => void, wait: number) => {\n let timeout: ReturnType<typeof setTimeout>;\n return function executedFunction(...args: unknown[]) {\n const later = () => {\n clearTimeout(timeout);\n func(...args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n };\n\n // Effect to calculate and update maximum content height\n React.useEffect(() => {\n const calculateMaxHeight = () => {\n let maxHeight = 0;\n contentRefs.current.forEach((ref: HTMLDivElement | null) => {\n if (ref) {\n const height = ref.scrollHeight;\n maxHeight = Math.max(maxHeight, height);\n }\n });\n if (maxHeight > 0) {\n setMaxContentHeight(maxHeight);\n }\n };\n\n // Calculate height after a short delay to ensure content is rendered\n const timeoutId = setTimeout(calculateMaxHeight, 100);\n \n // Also calculate on window resize\n window.addEventListener('resize', calculateMaxHeight);\n \n return () => {\n clearTimeout(timeoutId);\n window.removeEventListener('resize', calculateMaxHeight);\n };\n }, [children, activeTab]);\n\n // Real-time tab completion detection (only for green checkmarks)\n React.useEffect(() => {\n const checkTabCompletion = debounce(() => {\n // Check all tabs for completion status (green checkmarks only)\n tabs.forEach((_, tabIndex) => {\n const tabFieldsInTab = getCombinedTabFields(tabIndex);\n \n if (tabFieldsInTab.length === 0) {\n // No fields in this tab, remove from completed set\n setCompletedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(tabIndex);\n return newSet;\n });\n return;\n }\n\n // Check if all fields in this tab are valid\n let allFieldsValid = true;\n let hasAnyValue = false;\n\n for (const field of tabFieldsInTab) {\n const validation = validationRegistry[field];\n const fieldValue = formData[field];\n \n // Check if field has any value\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n hasAnyValue = true;\n }\n\n if (validation) {\n try {\n (validation as z.ZodSchema).parse(fieldValue);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allFieldsValid = false;\n break;\n }\n }\n }\n }\n\n // Update completion status (only green checkmarks)\n if (hasAnyValue && allFieldsValid) {\n // All fields valid - mark as completed and clear any validation errors\n setCompletedTabs(prev => new Set([...prev, tabIndex]));\n setValidationErrorTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(tabIndex);\n return newSet;\n });\n } else {\n // Not complete - remove from completed set\n setCompletedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(tabIndex);\n return newSet;\n });\n }\n });\n }, 300);\n\n checkTabCompletion();\n }, [formData, validationRegistry, getCombinedTabFields, tabs, setCompletedTabs, setValidationErrorTabs]);\n\n // Handle tab change with error checking\n const handleTabChangeWithErrorCheck = useCallback((index: number) => {\n onTabChange(index);\n\n // The real-time validation effect will handle tab status updates\n }, [onTabChange]);\n\n // Handle Next with validation\n const handleNextWithValidation = useCallback(() => {\n const currentTabFields = getCombinedTabFields(activeTab);\n if (currentTabFields.length > 0) {\n // Use form data and validation registry from context to validate synchronously\n\n const allErrors: Record<string, string> = {};\n let isValid = true;\n\n // Validate fields synchronously to get immediate error information\n for (const field of currentTabFields) {\n const validation = validationRegistry[field];\n if (validation) {\n try {\n (validation as z.ZodSchema).parse(formData[field]);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allErrors[field] = error.issues[0]?.message || `Invalid ${field}`;\n isValid = false;\n }\n }\n }\n }\n\n if (isValid) {\n // Mark current tab as completed\n setCompletedTabs(prev => new Set([...prev, activeTab]));\n // Clear validation errors for this tab\n setValidationErrorTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(activeTab);\n return newSet;\n });\n onNext();\n } else {\n // Remove completed status if validation fails\n setCompletedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(activeTab);\n return newSet;\n });\n\n // Mark this tab as having validation errors\n setValidationErrorTabs(prev => new Set([...prev, activeTab]));\n\n // Update errors state\n validateFields(currentTabFields);\n\n // Find the first field with error from our synchronous validation\n const firstErrorField = currentTabFields.find(field => allErrors[field]);\n if (firstErrorField) {\n // Small delay to ensure DOM is updated with error states\n setTimeout(() => {\n const element = document.querySelector(`[data-field=\"${firstErrorField}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n (element as HTMLElement).focus();\n }\n }, 50);\n }\n }\n } else {\n // No fields to validate, proceed\n onNext();\n }\n }, [activeTab, getCombinedTabFields, validateFields, onNext, setCompletedTabs, setValidationErrorTabs, validationRegistry, formData]);\n\n // Handle form submission with validation and tab navigation\n const handleSubmitWithValidation = useCallback(async () => {\n // Perform validation synchronously to get immediate results\n const allErrors: Record<string, string> = {};\n let isValid = true;\n let firstErrorTabIndex = -1;\n\n // Validate all fields and collect errors\n for (const [field, validation] of Object.entries(validationRegistry)) {\n if (validation && typeof (validation as z.ZodSchema).parse === 'function') {\n try {\n (validation as z.ZodSchema).parse(formData[field]);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allErrors[field] = error.issues[0]?.message || `Invalid ${field}`;\n isValid = false;\n }\n }\n }\n }\n\n // Update errors state\n setErrors(allErrors);\n\n if (isValid) {\n // Form is valid, proceed with submission\n await submitForm();\n } else {\n // Clear all validation error tabs first\n setValidationErrorTabs(new Set());\n\n // Find the first tab with errors and mark tabs with errors\n for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {\n const tabFieldsInTab = getCombinedTabFields(tabIndex);\n const hasErrorsInTab = tabFieldsInTab.some(field => allErrors[field]);\n\n if (hasErrorsInTab) {\n // Mark this tab as having validation errors\n setValidationErrorTabs(prev => new Set([...prev, tabIndex]));\n \n if (firstErrorTabIndex === -1) {\n firstErrorTabIndex = tabIndex;\n }\n }\n }\n\n if (firstErrorTabIndex !== -1) {\n // Navigate to the first tab with errors\n onTabChange(firstErrorTabIndex);\n\n // Scroll to first error field in that tab\n setTimeout(() => {\n const tabFieldsInTab = getCombinedTabFields(firstErrorTabIndex);\n const firstErrorField = tabFieldsInTab.find(field => allErrors[field]);\n\n if (firstErrorField) {\n const element = document.querySelector(`[data-field=\"${firstErrorField}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n (element as HTMLElement).focus();\n }\n }\n }, 100);\n }\n }\n }, [submitForm, getCombinedTabFields, onTabChange, tabs.length, validationRegistry, formData, setErrors, setValidationErrorTabs]);\n\n // Convert activeTab index to tab value for shadcn Tabs\n const activeTabValue = tabs[activeTab] || tabs[0] || '';\n\n return (\n <>\n\n <Tabs value={activeTabValue} onValueChange={(value) => {\n const newIndex = tabs.indexOf(value);\n if (newIndex !== -1) {\n handleTabChangeWithErrorCheck(newIndex);\n }\n }} className=\"w-full\">\n <TabsList className={`grid w-full mb-8`} style={{ gridTemplateColumns: `repeat(${tabs.length}, 1fr)` }}>\n {tabs.map((tab, index) => (\n <TabsTrigger key={tab} value={tab} className=\"flex items-center gap-2\">\n {(config.showTabNumbers as boolean) && <span>{index + 1}.</span>}\n {tab}\n {completedTabs.has(index) && (\n <Check className=\"h-4 w-4 text-green-600\" />\n )}\n {validationErrorTabs.has(index) && (\n <X className=\"h-4 w-4 text-red-600\" />\n )}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabProps = child.props as TabProps;\n return (\n <TabsContent key={index} value={tabProps.title}>\n <TabIndexProvider tabIndex={index}>\n <div \n ref={(el) => { contentRefs.current[index] = el; }}\n className=\"space-y-6\"\n style={{ minHeight: maxContentHeight > 0 ? `${maxContentHeight}px` : undefined }}\n >\n {tabProps.children}\n </div>\n </TabIndexProvider>\n </TabsContent>\n );\n }\n return null;\n })}\n\n {/* Hidden render of all tab content for immediate field registration and height calculation */}\n <div style={{ position: 'absolute', left: '-9999px', top: '-9999px', visibility: 'hidden' }}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabProps = child.props as TabProps;\n return (\n <TabIndexProvider key={`hidden-${index}`} tabIndex={index}>\n <div \n ref={(el) => { contentRefs.current[index] = el; }}\n className=\"space-y-6\"\n >\n {tabProps.children}\n </div>\n </TabIndexProvider>\n );\n }\n return null;\n })}\n </div>\n </Tabs>\n\n <NavigationButtonsWrapper\n activeTab={activeTab}\n totalTabs={tabs.length}\n onPrevious={onPrevious}\n onNext={handleNextWithValidation}\n onSubmit={handleSubmitWithValidation}\n onSaveDraft={config.allowSaveDraft ? saveDraft : undefined}\n onReset={(config.showReset || config.enableLocalStorage) ? resetForm : undefined}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n />\n\n {/* Footer components */}\n {footerChildren.length > 0 && (\n <div className=\"space-y-4\">\n {footerChildren}\n </div>\n )}\n\n {/* Progress Indicator */}\n {(config.showProgressBar as boolean) && (\n <div className=\"mt-6\">\n <div className=\"flex justify-between text-sm text-muted-foreground mb-2\">\n <span>Progress</span>\n <span>{Math.round(((activeTab + 1) / tabs.length) * 100)}%</span>\n </div>\n <div className=\"w-full bg-muted rounded-full h-2\">\n <div\n className=\"bg-primary h-2 rounded-full transition-all duration-300\"\n style={{ width: `${((activeTab + 1) / tabs.length) * 100}%` }}\n ></div>\n </div>\n </div>\n )}\n </>\n );\n};\n","import { useSmartForm } from '../SmartFormProvider';\n\n// =============================================================================\n// FORM WRAPPER HOOK\n// =============================================================================\n\nexport const useFormWrapper = () => {\n return useSmartForm();\n};\n","import { useContext } from 'react';\nimport { ExternalFormContext, type ExternalFormContextType } from '../constants/externalFormContext';\n\n// =============================================================================\n// EXTERNAL FORM REGISTRATION HOOK\n// =============================================================================\n\nexport const useExternalFormRegistration = (): ExternalFormContextType => {\n const context = useContext(ExternalFormContext);\n if (!context) {\n throw new Error('useExternalFormRegistration must be used within a MultiTabSmartForm');\n }\n return context;\n};\n","import { useEffect, useMemo } from 'react';\nimport { useExternalFormRegistration } from './hooks/useExternalFormRegistration';\n\n/**\n * Hook for external forms to register their fields with MultiTabSmartForm\n * This allows external forms to participate in validation and tab switching\n */\nexport const useExternalFormFields = (fields: string[], tabIndex: number) => {\n const { registerTabFields } = useExternalFormRegistration();\n\n // Create a stable reference to the fields array\n const stableFields = useMemo(() => fields, [fields.join(',')]);\n\n useEffect(() => {\n if (stableFields.length > 0) {\n registerTabFields(tabIndex, stableFields);\n }\n }, [stableFields, tabIndex, registerTabFields]);\n};\n","import React from 'react';\nimport { FieldDetectionContext } from './FieldDetectionHook';\n\nexport const ExternalFieldProvider: React.FC<{ \n children: React.ReactNode; \n registerField: (fieldName: string) => void \n}> = ({ \n children, \n registerField \n}) => {\n return (\n <FieldDetectionContext.Provider value={{ registerField }}>\n {children}\n </FieldDetectionContext.Provider>\n );\n};\n","import { useCallback, useRef } from 'react';\nimport { useExternalFormRegistration } from './hooks/useExternalFormRegistration';\nimport { ExternalFieldProvider } from './ExternalFieldProvider';\n\n/**\n * Hook that automatically detects SmartInput fields in external forms\n * This eliminates the need to manually specify field names\n */\nexport const useAutoDetectFields = (tabIndex: number) => {\n const { registerTabFields } = useExternalFormRegistration();\n const hasRegistered = useRef(false);\n const detectedFields = useRef<Set<string>>(new Set());\n\n // Function to register a field when it's detected\n const registerField = useCallback((fieldName: string) => {\n detectedFields.current.add(fieldName);\n \n // Register all detected fields with the MultiTabSmartForm\n if (!hasRegistered.current) {\n const fieldsArray = Array.from(detectedFields.current);\n registerTabFields(tabIndex, fieldsArray);\n hasRegistered.current = true;\n }\n }, [tabIndex, registerTabFields]);\n\n return { registerField, ExternalFieldProvider };\n};\n","import { useCallback, useRef, useEffect } from 'react';\nimport { useExternalFormRegistration } from './hooks/useExternalFormRegistration';\nimport { ExternalFieldProvider } from './ExternalFieldProvider';\nimport { useTabIndex } from './TabIndexContext';\n\n/**\n * Hook that automatically detects both tab index and fields in external forms\n * This eliminates the need to manually specify both tab index and field names\n */\nexport const useExternalTab = () => {\n const { registerTabFields } = useExternalFormRegistration();\n const tabIndexContext = useTabIndex();\n const detectedFields = useRef<Set<string>>(new Set());\n const registrationTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hasRegistered = useRef(false);\n\n // Use the tab index from context, or fallback to 0 if not available\n const tabIndex = tabIndexContext?.tabIndex ?? 0;\n\n // Function to register a field when it's detected\n const registerField = useCallback((fieldName: string) => {\n detectedFields.current.add(fieldName);\n \n // Clear any existing timeout\n if (registrationTimeout.current) {\n clearTimeout(registrationTimeout.current);\n }\n \n // Debounce the registration to allow all fields to be detected\n registrationTimeout.current = setTimeout(() => {\n if (!hasRegistered.current) {\n const fieldsArray = Array.from(detectedFields.current);\n if (fieldsArray.length > 0) {\n registerTabFields(tabIndex, fieldsArray);\n hasRegistered.current = true;\n }\n }\n }, 200); // Longer delay to ensure all fields are detected\n }, [tabIndex, registerTabFields]);\n\n // Force registration after component mount to catch all fields\n useEffect(() => {\n const forceRegistrationTimeout = setTimeout(() => {\n if (!hasRegistered.current) {\n const fieldsArray = Array.from(detectedFields.current);\n if (fieldsArray.length > 0) {\n registerTabFields(tabIndex, fieldsArray);\n hasRegistered.current = true;\n }\n }\n }, 1000); // Force registration after 1 second\n\n return () => {\n clearTimeout(forceRegistrationTimeout);\n if (registrationTimeout.current) {\n clearTimeout(registrationTimeout.current);\n }\n };\n }, [tabIndex, registerTabFields]);\n\n return { registerField, ExternalFieldProvider };\n};\n","import React, { type ReactNode } from 'react';\n\n// =============================================================================\n// FORM FIELD GROUP TYPES\n// =============================================================================\n\nexport interface FormFieldGroupProps {\n children: ReactNode;\n className?: string;\n}\n\n// =============================================================================\n// FORM FIELD GROUP COMPONENT\n// =============================================================================\n\nexport const FormFieldGroup: React.FC<FormFieldGroupProps> = ({\n children,\n className = ''\n}) => {\n return (\n <div className={`flex flex-wrap gap-2 md:gap-4 mb-4 ${className}`}>\n {children}\n </div>\n );\n};\n"]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React$1 from 'react';
2
2
  import React__default, { ReactNode } from 'react';
3
- import { A as AuthenticationConfig, F as FormContextType } from './SmartFormProvider-B-BTl4wO.cjs';
4
- export { b as FormConfig, S as SmartFormProvider, a as useFormField, u as useSmartForm } from './SmartFormProvider-B-BTl4wO.cjs';
3
+ import { A as AuthenticationConfig, F as FormContextType } from './SmartFormProvider-DyJoDBjQ.cjs';
4
+ export { b as FormConfig, S as SmartFormProvider, a as useFormField, u as useSmartForm } from './SmartFormProvider-DyJoDBjQ.cjs';
5
5
  export { a as SmartCheckbox, d as SmartDatePicker, S as SmartInput, f as SmartInputProps, b as SmartRadioGroup, c as SmartSelect, e as SmartTags } from './SmartTags-HmvmCJPT.cjs';
6
6
 
7
7
  interface BaseSmartFormProps {
@@ -28,6 +28,8 @@ interface BaseSmartFormProps {
28
28
  showProgressBar?: boolean;
29
29
  showTabNumbers?: boolean;
30
30
  authentication?: AuthenticationConfig;
31
+ includeQueryParams?: boolean;
32
+ queryParamsToInclude?: string[];
31
33
  }
32
34
  declare const ToastContainerWrapper: React__default.FC;
33
35
  declare const FormHeader: React__default.FC<{
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React$1 from 'react';
2
2
  import React__default, { ReactNode } from 'react';
3
- import { A as AuthenticationConfig, F as FormContextType } from './SmartFormProvider-B-BTl4wO.js';
4
- export { b as FormConfig, S as SmartFormProvider, a as useFormField, u as useSmartForm } from './SmartFormProvider-B-BTl4wO.js';
3
+ import { A as AuthenticationConfig, F as FormContextType } from './SmartFormProvider-DyJoDBjQ.js';
4
+ export { b as FormConfig, S as SmartFormProvider, a as useFormField, u as useSmartForm } from './SmartFormProvider-DyJoDBjQ.js';
5
5
  export { a as SmartCheckbox, d as SmartDatePicker, S as SmartInput, f as SmartInputProps, b as SmartRadioGroup, c as SmartSelect, e as SmartTags } from './SmartTags-HmvmCJPT.js';
6
6
 
7
7
  interface BaseSmartFormProps {
@@ -28,6 +28,8 @@ interface BaseSmartFormProps {
28
28
  showProgressBar?: boolean;
29
29
  showTabNumbers?: boolean;
30
30
  authentication?: AuthenticationConfig;
31
+ includeQueryParams?: boolean;
32
+ queryParamsToInclude?: string[];
31
33
  }
32
34
  declare const ToastContainerWrapper: React__default.FC;
33
35
  declare const FormHeader: React__default.FC<{