@algodomain/smart-forms 0.1.3 → 0.1.4
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/{SmartTags-DPqw9PG1.d.cts → SmartTags-DEpmTDF5.d.cts} +30 -17
- package/dist/{SmartTags-DPqw9PG1.d.ts → SmartTags-DEpmTDF5.d.ts} +30 -17
- package/dist/{chunk-CT6GW6PK.js → chunk-BNQNL7GF.js} +625 -145
- package/dist/chunk-BNQNL7GF.js.map +1 -0
- package/dist/{chunk-3L7TKJIB.js → chunk-RHECLW3K.js} +68 -4
- package/dist/chunk-RHECLW3K.js.map +1 -0
- package/dist/{chunk-TJ6EFR2O.cjs → chunk-VGP3HY5Y.cjs} +729 -239
- package/dist/chunk-VGP3HY5Y.cjs.map +1 -0
- package/dist/{chunk-MBC5TYXA.cjs → chunk-WIBCOQPP.cjs} +68 -4
- package/dist/chunk-WIBCOQPP.cjs.map +1 -0
- package/dist/fields.cjs +162 -479
- package/dist/fields.cjs.map +1 -1
- package/dist/fields.d.cts +3 -23
- package/dist/fields.d.ts +3 -23
- package/dist/fields.js +9 -329
- package/dist/fields.js.map +1 -1
- package/dist/index.cjs +34 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/opinionated.cjs +18 -18
- package/dist/opinionated.js +2 -2
- package/package.json +4 -2
- package/dist/chunk-3L7TKJIB.js.map +0 -1
- package/dist/chunk-CT6GW6PK.js.map +0 -1
- package/dist/chunk-MBC5TYXA.cjs.map +0 -1
- package/dist/chunk-TJ6EFR2O.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkVGP3HY5Y_cjs = require('./chunk-VGP3HY5Y.cjs');
|
|
4
|
+
var chunkWIBCOQPP_cjs = require('./chunk-WIBCOQPP.cjs');
|
|
5
5
|
var React3 = require('react');
|
|
6
6
|
var reactToastify = require('react-toastify');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -120,7 +120,7 @@ var BaseSmartForm = ({
|
|
|
120
120
|
queryParamsToInclude,
|
|
121
121
|
submitDisabled
|
|
122
122
|
};
|
|
123
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
123
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkWIBCOQPP_cjs.SmartFormProvider, { config, initialData, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
|
|
124
124
|
/* @__PURE__ */ jsxRuntime.jsx(ToastContainerWrapper, {}),
|
|
125
125
|
/* @__PURE__ */ jsxRuntime.jsx(FormHeader, { title, subTitle, logo }),
|
|
126
126
|
children,
|
|
@@ -128,15 +128,15 @@ var BaseSmartForm = ({
|
|
|
128
128
|
] }) });
|
|
129
129
|
};
|
|
130
130
|
var LoadingSpinner = ({ className = "h-4 w-4" }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: `animate-spin rounded-full border-b-2 border-current ${className}` });
|
|
131
|
-
var SubmitButton = ({ onClick, disabled, children, className }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
131
|
+
var SubmitButton = ({ onClick, disabled, isLoading, children, className }) => /* @__PURE__ */ jsxRuntime.jsx(chunkVGP3HY5Y_cjs.Button, { onClick, disabled, className, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
132
132
|
/* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner, {}),
|
|
133
133
|
"Submitting..."
|
|
134
134
|
] }) : children });
|
|
135
|
-
var DraftSaveButton = ({ onClick, disabled }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
135
|
+
var DraftSaveButton = ({ onClick, disabled }) => /* @__PURE__ */ jsxRuntime.jsx(chunkVGP3HY5Y_cjs.Button, { onClick, disabled, variant: "secondary", children: disabled ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
136
136
|
/* @__PURE__ */ jsxRuntime.jsx(LoadingSpinner, {}),
|
|
137
137
|
"Saving..."
|
|
138
138
|
] }) : "Save Draft" });
|
|
139
|
-
var ResetButton = ({ onClick }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
139
|
+
var ResetButton = ({ onClick }) => /* @__PURE__ */ jsxRuntime.jsx(chunkVGP3HY5Y_cjs.Button, { onClick, variant: "secondary", children: "Reset Form" });
|
|
140
140
|
var NavigationButtons = ({
|
|
141
141
|
onPrevious,
|
|
142
142
|
onNext,
|
|
@@ -149,7 +149,7 @@ var NavigationButtons = ({
|
|
|
149
149
|
isFirstTab = false,
|
|
150
150
|
isLastTab = false
|
|
151
151
|
}) => {
|
|
152
|
-
const { formData, config: formConfig } =
|
|
152
|
+
const { formData, config: formConfig } = chunkWIBCOQPP_cjs.useSmartForm();
|
|
153
153
|
const isSubmitDisabled = typeof formConfig.submitDisabled === "function" ? formConfig.submitDisabled(formData) : formConfig.submitDisabled || false;
|
|
154
154
|
const hasResetButton = !!onReset;
|
|
155
155
|
const hasDraftButton = config.allowSaveDraft && !!onSaveDraft;
|
|
@@ -159,7 +159,7 @@ var NavigationButtons = ({
|
|
|
159
159
|
const isSingleButton = rightSectionButtons === 1 && !hasPreviousButton;
|
|
160
160
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center mt-8 pt-6 border-t border-gray-200", children: [
|
|
161
161
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: onPrevious && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
162
|
-
|
|
162
|
+
chunkVGP3HY5Y_cjs.Button,
|
|
163
163
|
{
|
|
164
164
|
onClick: onPrevious,
|
|
165
165
|
disabled: isFirstTab,
|
|
@@ -178,6 +178,7 @@ var NavigationButtons = ({
|
|
|
178
178
|
{
|
|
179
179
|
onClick: onSubmit,
|
|
180
180
|
disabled: isLoading || isSubmitDisabled,
|
|
181
|
+
isLoading,
|
|
181
182
|
className: isSingleButton ? "w-full" : "",
|
|
182
183
|
children: [
|
|
183
184
|
config.submitButtonIcon,
|
|
@@ -185,7 +186,7 @@ var NavigationButtons = ({
|
|
|
185
186
|
]
|
|
186
187
|
}
|
|
187
188
|
) : onNext && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
188
|
-
|
|
189
|
+
chunkVGP3HY5Y_cjs.Button,
|
|
189
190
|
{
|
|
190
191
|
onClick: onNext,
|
|
191
192
|
className: isSingleButton ? "w-full" : "",
|
|
@@ -206,7 +207,7 @@ var SimpleFormButtons = ({
|
|
|
206
207
|
isDraftSaving,
|
|
207
208
|
config
|
|
208
209
|
}) => {
|
|
209
|
-
const { formData, config: formConfig } =
|
|
210
|
+
const { formData, config: formConfig } = chunkWIBCOQPP_cjs.useSmartForm();
|
|
210
211
|
const isSubmitDisabled = typeof formConfig.submitDisabled === "function" ? formConfig.submitDisabled(formData) : formConfig.submitDisabled || false;
|
|
211
212
|
const hasResetButton = !!onReset;
|
|
212
213
|
const hasDraftButton = config.allowSaveDraft && !!onSaveDraft;
|
|
@@ -221,6 +222,7 @@ var SimpleFormButtons = ({
|
|
|
221
222
|
{
|
|
222
223
|
onClick: onSubmit,
|
|
223
224
|
disabled: isLoading || isSubmitDisabled,
|
|
225
|
+
isLoading,
|
|
224
226
|
className: isSingleButton ? "w-full" : "",
|
|
225
227
|
children: [
|
|
226
228
|
config.submitButtonIcon,
|
|
@@ -231,7 +233,7 @@ var SimpleFormButtons = ({
|
|
|
231
233
|
] }) });
|
|
232
234
|
};
|
|
233
235
|
var SubmitButton2 = () => {
|
|
234
|
-
const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, config } =
|
|
236
|
+
const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, config } = chunkWIBCOQPP_cjs.useSmartForm();
|
|
235
237
|
const shouldShowReset = config.showReset || config.enableLocalStorage;
|
|
236
238
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
237
239
|
SimpleFormButtons,
|
|
@@ -271,7 +273,7 @@ function Tabs({
|
|
|
271
273
|
TabsPrimitive__namespace.Root,
|
|
272
274
|
{
|
|
273
275
|
"data-slot": "tabs",
|
|
274
|
-
className:
|
|
276
|
+
className: chunkWIBCOQPP_cjs.cn("flex flex-col gap-2", className),
|
|
275
277
|
...props
|
|
276
278
|
}
|
|
277
279
|
);
|
|
@@ -284,7 +286,7 @@ function TabsList({
|
|
|
284
286
|
TabsPrimitive__namespace.List,
|
|
285
287
|
{
|
|
286
288
|
"data-slot": "tabs-list",
|
|
287
|
-
className:
|
|
289
|
+
className: chunkWIBCOQPP_cjs.cn(
|
|
288
290
|
"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
|
|
289
291
|
className
|
|
290
292
|
),
|
|
@@ -300,7 +302,7 @@ function TabsTrigger({
|
|
|
300
302
|
TabsPrimitive__namespace.Trigger,
|
|
301
303
|
{
|
|
302
304
|
"data-slot": "tabs-trigger",
|
|
303
|
-
className:
|
|
305
|
+
className: chunkWIBCOQPP_cjs.cn(
|
|
304
306
|
"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",
|
|
305
307
|
className
|
|
306
308
|
),
|
|
@@ -316,7 +318,7 @@ function TabsContent({
|
|
|
316
318
|
TabsPrimitive__namespace.Content,
|
|
317
319
|
{
|
|
318
320
|
"data-slot": "tabs-content",
|
|
319
|
-
className:
|
|
321
|
+
className: chunkWIBCOQPP_cjs.cn("flex-1 outline-none", className),
|
|
320
322
|
...props
|
|
321
323
|
}
|
|
322
324
|
);
|
|
@@ -491,7 +493,7 @@ var MultiTabFormContent = ({
|
|
|
491
493
|
footerChildren,
|
|
492
494
|
children
|
|
493
495
|
}) => {
|
|
494
|
-
const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors } =
|
|
496
|
+
const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors } = chunkWIBCOQPP_cjs.useSmartForm();
|
|
495
497
|
const [maxContentHeight, setMaxContentHeight] = React3.useState(0);
|
|
496
498
|
const contentRefs = React3.useRef([]);
|
|
497
499
|
const debounce = (func, wait) => {
|
|
@@ -761,7 +763,7 @@ var MultiTabFormContent = ({
|
|
|
761
763
|
|
|
762
764
|
// src/hooks/useFormWrapper.ts
|
|
763
765
|
var useFormWrapper = () => {
|
|
764
|
-
return
|
|
766
|
+
return chunkWIBCOQPP_cjs.useSmartForm();
|
|
765
767
|
};
|
|
766
768
|
var useExternalFormRegistration = () => {
|
|
767
769
|
const context = React3.useContext(ExternalFormContext);
|
|
@@ -783,7 +785,7 @@ var ExternalFieldProvider = ({
|
|
|
783
785
|
children,
|
|
784
786
|
registerField
|
|
785
787
|
}) => {
|
|
786
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
788
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkWIBCOQPP_cjs.FieldDetectionContext.Provider, { value: { registerField }, children });
|
|
787
789
|
};
|
|
788
790
|
|
|
789
791
|
// src/useAutoDetectFields.tsx
|
|
@@ -851,43 +853,47 @@ var FormFieldGroup = ({
|
|
|
851
853
|
|
|
852
854
|
Object.defineProperty(exports, "SmartCheckbox", {
|
|
853
855
|
enumerable: true,
|
|
854
|
-
get: function () { return
|
|
856
|
+
get: function () { return chunkVGP3HY5Y_cjs.SmartCheckbox; }
|
|
857
|
+
});
|
|
858
|
+
Object.defineProperty(exports, "SmartCombobox", {
|
|
859
|
+
enumerable: true,
|
|
860
|
+
get: function () { return chunkVGP3HY5Y_cjs.SmartCombobox; }
|
|
855
861
|
});
|
|
856
862
|
Object.defineProperty(exports, "SmartDatePicker", {
|
|
857
863
|
enumerable: true,
|
|
858
|
-
get: function () { return
|
|
864
|
+
get: function () { return chunkVGP3HY5Y_cjs.SmartDatePicker; }
|
|
859
865
|
});
|
|
860
866
|
Object.defineProperty(exports, "SmartRadioGroup", {
|
|
861
867
|
enumerable: true,
|
|
862
|
-
get: function () { return
|
|
868
|
+
get: function () { return chunkVGP3HY5Y_cjs.SmartRadioGroup; }
|
|
863
869
|
});
|
|
864
870
|
Object.defineProperty(exports, "SmartSelect", {
|
|
865
871
|
enumerable: true,
|
|
866
|
-
get: function () { return
|
|
872
|
+
get: function () { return chunkVGP3HY5Y_cjs.SmartSelect; }
|
|
867
873
|
});
|
|
868
874
|
Object.defineProperty(exports, "SmartTags", {
|
|
869
875
|
enumerable: true,
|
|
870
|
-
get: function () { return
|
|
876
|
+
get: function () { return chunkVGP3HY5Y_cjs.SmartTags; }
|
|
871
877
|
});
|
|
872
878
|
Object.defineProperty(exports, "SmartFormProvider", {
|
|
873
879
|
enumerable: true,
|
|
874
|
-
get: function () { return
|
|
880
|
+
get: function () { return chunkWIBCOQPP_cjs.SmartFormProvider; }
|
|
875
881
|
});
|
|
876
882
|
Object.defineProperty(exports, "SmartInput", {
|
|
877
883
|
enumerable: true,
|
|
878
|
-
get: function () { return
|
|
884
|
+
get: function () { return chunkWIBCOQPP_cjs.SmartInput; }
|
|
879
885
|
});
|
|
880
886
|
Object.defineProperty(exports, "useFieldDetection", {
|
|
881
887
|
enumerable: true,
|
|
882
|
-
get: function () { return
|
|
888
|
+
get: function () { return chunkWIBCOQPP_cjs.useFieldDetection; }
|
|
883
889
|
});
|
|
884
890
|
Object.defineProperty(exports, "useFormField", {
|
|
885
891
|
enumerable: true,
|
|
886
|
-
get: function () { return
|
|
892
|
+
get: function () { return chunkWIBCOQPP_cjs.useFormField; }
|
|
887
893
|
});
|
|
888
894
|
Object.defineProperty(exports, "useSmartForm", {
|
|
889
895
|
enumerable: true,
|
|
890
|
-
get: function () { return
|
|
896
|
+
get: function () { return chunkWIBCOQPP_cjs.useSmartForm; }
|
|
891
897
|
});
|
|
892
898
|
exports.BaseSmartForm = BaseSmartForm;
|
|
893
899
|
exports.DraftSaveButton = DraftSaveButton;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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","useSmartForm","ChevronLeft","ChevronRight","SubmitButton","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 // Submit button disable\n submitDisabled?: boolean | ((formData: any) => boolean);\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 submitDisabled\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 submitDisabled\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';\nimport { useSmartForm } from './SmartFormProvider';\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 submitDisabled?: boolean | ((formData: any) => 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 const { formData, config: formConfig } = useSmartForm();\n \n // Evaluate submitDisabled state\n const isSubmitDisabled = typeof formConfig.submitDisabled === 'function' \n ? formConfig.submitDisabled(formData) \n : formConfig.submitDisabled || 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 || isSubmitDisabled}\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 const { formData, config: formConfig } = useSmartForm();\n \n // Evaluate submitDisabled state\n const isSubmitDisabled = typeof formConfig.submitDisabled === 'function' \n ? formConfig.submitDisabled(formData) \n : formConfig.submitDisabled || false;\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 || isSubmitDisabled}\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","useSmartForm","ChevronLeft","ChevronRight","SubmitButton","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 // Submit button disable\n submitDisabled?: boolean | ((formData: any) => boolean);\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 submitDisabled\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 submitDisabled\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';\nimport { useSmartForm } from './SmartFormProvider';\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 submitDisabled?: boolean | ((formData: any) => 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 isLoading: boolean;\n children: ReactNode;\n className?: string;\n}> = ({ onClick, disabled, isLoading, children, className }) => (\n <Button onClick={onClick} disabled={disabled} className={className}>\n {isLoading ? (\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 const { formData, config: formConfig } = useSmartForm();\n \n // Evaluate submitDisabled state\n const isSubmitDisabled = typeof formConfig.submitDisabled === 'function' \n ? formConfig.submitDisabled(formData) \n : formConfig.submitDisabled || 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 || isSubmitDisabled}\n isLoading={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 const { formData, config: formConfig } = useSmartForm();\n \n // Evaluate submitDisabled state\n const isSubmitDisabled = typeof formConfig.submitDisabled === 'function' \n ? formConfig.submitDisabled(formData) \n : formConfig.submitDisabled || false;\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 || isSubmitDisabled}\n isLoading={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
|
@@ -2,7 +2,8 @@ import * as React$1 from 'react';
|
|
|
2
2
|
import React__default, { ReactNode } from 'react';
|
|
3
3
|
import { A as AuthenticationConfig, F as FormContextType } from './SmartFormProvider-BdyRQakk.cjs';
|
|
4
4
|
export { b as FormConfig, S as SmartFormProvider, a as useFormField, u as useSmartForm } from './SmartFormProvider-BdyRQakk.cjs';
|
|
5
|
-
export { a as SmartCheckbox, d as SmartDatePicker, S as SmartInput,
|
|
5
|
+
export { a as SmartCheckbox, d as SmartCombobox, k as SmartComboboxOption, j as SmartComboboxProps, e as SmartDatePicker, i as SmartDatePickerProps, S as SmartInput, g as SmartInputProps, b as SmartRadioGroup, c as SmartSelect, f as SmartTags } from './SmartTags-DEpmTDF5.cjs';
|
|
6
|
+
import 'react/jsx-runtime';
|
|
6
7
|
|
|
7
8
|
interface BaseSmartFormProps {
|
|
8
9
|
children: ReactNode;
|
|
@@ -153,6 +154,7 @@ declare const LoadingSpinner: React__default.FC<{
|
|
|
153
154
|
declare const SubmitButton: React__default.FC<{
|
|
154
155
|
onClick: () => void;
|
|
155
156
|
disabled: boolean;
|
|
157
|
+
isLoading: boolean;
|
|
156
158
|
children: ReactNode;
|
|
157
159
|
className?: string;
|
|
158
160
|
}>;
|