@algodomain/smart-forms 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/BaseSmartForm.tsx","../src/FormButtons.tsx","../src/SmartForm.tsx","../src/components/ui/motion-highlight.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","../src/smart-fields/SmartTextArea.tsx"],"names":["jsx","jsxs","SubmitButton","React","React2","id","children","Fragment","motion","useContext","createContext","useState","useMemo","footerChildren","regularChildren","isValidElement","useCallback","useEffect","useRef","z"],"mappings":"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","file":"index.js","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 = '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 disabled?: 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 disabled = 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 || disabled}\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 && (\n <Button onClick={onReset} disabled={disabled} variant=\"secondary\">\n Reset Form\n </Button>\n )}\n \n {config.allowSaveDraft && onSaveDraft && (\n <DraftSaveButton onClick={onSaveDraft} disabled={isDraftSaving || disabled} />\n )}\n\n {isLastTab ? (\n <SubmitButton \n onClick={onSubmit} \n disabled={isLoading || isSubmitDisabled || disabled}\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 disabled={disabled}\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'\n\nimport type { Transition } from 'motion/react'\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\ntype MotionHighlightMode = 'children' | 'parent'\n\ntype Bounds = {\n top: number\n left: number\n width: number\n height: number\n}\n\ntype MotionHighlightContextType<T extends string> = {\n mode: MotionHighlightMode\n activeValue: T | null\n setActiveValue: (value: T | null) => void\n setBounds: (bounds: DOMRect) => void\n clearBounds: () => void\n id: string\n hover: boolean\n className?: string\n activeClassName?: string\n setActiveClassName: (className: string) => void\n transition?: Transition\n disabled?: boolean\n enabled?: boolean\n exitDelay?: number\n forceUpdateBounds?: boolean\n}\n\nconst MotionHighlightContext = React.createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MotionHighlightContextType<any> | undefined\n>(undefined)\n\nfunction useMotionHighlight<T extends string>(): MotionHighlightContextType<T> {\n const context = React.useContext(MotionHighlightContext)\n\n if (!context) {\n throw new Error('useMotionHighlight must be used within a MotionHighlightProvider')\n }\n\n return context as unknown as MotionHighlightContextType<T>\n}\n\ntype BaseMotionHighlightProps<T extends string> = {\n mode?: MotionHighlightMode\n value?: T | null\n defaultValue?: T | null\n onValueChange?: (value: T | null) => void\n className?: string\n transition?: Transition\n hover?: boolean\n disabled?: boolean\n enabled?: boolean\n exitDelay?: number\n}\n\ntype ParentModeMotionHighlightProps = {\n boundsOffset?: Partial<Bounds>\n containerClassName?: string\n forceUpdateBounds?: boolean\n}\n\ntype ControlledParentModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> &\n ParentModeMotionHighlightProps & {\n mode: 'parent'\n controlledItems: true\n children: React.ReactNode\n }\n\ntype ControlledChildrenModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> & {\n mode?: 'children' | undefined\n controlledItems: true\n children: React.ReactNode\n}\n\ntype UncontrolledParentModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> &\n ParentModeMotionHighlightProps & {\n mode: 'parent'\n controlledItems?: false\n itemsClassName?: string\n children: React.ReactElement | React.ReactElement[]\n }\n\ntype UncontrolledChildrenModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> & {\n mode?: 'children'\n controlledItems?: false\n itemsClassName?: string\n children: React.ReactElement | React.ReactElement[]\n}\n\ntype MotionHighlightProps<T extends string> = React.ComponentProps<'div'> &\n (\n | ControlledParentModeMotionHighlightProps<T>\n | ControlledChildrenModeMotionHighlightProps<T>\n | UncontrolledParentModeMotionHighlightProps<T>\n | UncontrolledChildrenModeMotionHighlightProps<T>\n )\n\nfunction MotionHighlight<T extends string>({ ref, ...props }: MotionHighlightProps<T>) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n className,\n transition = { type: 'spring', stiffness: 350, damping: 35 },\n hover = false,\n enabled = true,\n controlledItems,\n disabled = false,\n exitDelay = 0.2,\n mode = 'children'\n } = props\n\n const localRef = React.useRef<HTMLDivElement>(null)\n\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n const [activeValue, setActiveValue] = React.useState<T | null>(value ?? defaultValue ?? null)\n const [boundsState, setBoundsState] = React.useState<Bounds | null>(null)\n const [activeClassNameState, setActiveClassNameState] = React.useState<string>('')\n\n const safeSetActiveValue = React.useCallback(\n (id: T | null) => {\n setActiveValue(prev => (prev === id ? prev : id))\n if (id !== activeValue) onValueChange?.(id as T)\n },\n [activeValue, onValueChange]\n )\n\n const safeSetBounds = React.useCallback(\n (bounds: DOMRect) => {\n if (!localRef.current) return\n\n const boundsOffset = (props as ParentModeMotionHighlightProps)?.boundsOffset ?? {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }\n\n const containerRect = localRef.current.getBoundingClientRect()\n\n const newBounds: Bounds = {\n top: bounds.top - containerRect.top + (boundsOffset.top ?? 0),\n left: bounds.left - containerRect.left + (boundsOffset.left ?? 0),\n width: bounds.width + (boundsOffset.width ?? 0),\n height: bounds.height + (boundsOffset.height ?? 0)\n }\n\n setBoundsState(prev => {\n if (\n prev &&\n prev.top === newBounds.top &&\n prev.left === newBounds.left &&\n prev.width === newBounds.width &&\n prev.height === newBounds.height\n ) {\n return prev\n }\n\n return newBounds\n })\n },\n [props]\n )\n\n const clearBounds = React.useCallback(() => {\n setBoundsState(prev => (prev === null ? prev : null))\n }, [])\n\n React.useEffect(() => {\n if (value !== undefined) setActiveValue(value)\n else if (defaultValue !== undefined) setActiveValue(defaultValue)\n }, [value, defaultValue])\n\n const id = React.useId()\n\n React.useEffect(() => {\n if (mode !== 'parent') return\n const container = localRef.current\n\n if (!container) return\n\n const onScroll = () => {\n if (!activeValue) return\n const activeEl = container.querySelector<HTMLElement>(`[data-value=\"${activeValue}\"][data-highlight=\"true\"]`)\n\n if (activeEl) safeSetBounds(activeEl.getBoundingClientRect())\n }\n\n container.addEventListener('scroll', onScroll, { passive: true })\n\n return () => container.removeEventListener('scroll', onScroll)\n }, [mode, activeValue, safeSetBounds])\n\n const render = React.useCallback(\n (children: React.ReactNode) => {\n if (mode === 'parent') {\n return (\n <div\n ref={localRef}\n data-slot='motion-highlight-container'\n className={cn('relative', (props as ParentModeMotionHighlightProps)?.containerClassName)}\n >\n <AnimatePresence initial={false}>\n {boundsState && (\n <motion.div\n data-slot='motion-highlight'\n animate={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 1\n }}\n initial={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 0\n }}\n exit={{\n opacity: 0,\n transition: {\n ...transition,\n delay: (transition?.delay ?? 0) + (exitDelay ?? 0)\n }\n }}\n transition={transition}\n className={cn('bg-muted absolute z-0', className, activeClassNameState)}\n />\n )}\n </AnimatePresence>\n {children}\n </div>\n )\n }\n\n return children\n },\n [mode, props, boundsState, transition, exitDelay, className, activeClassNameState]\n )\n\n return (\n <MotionHighlightContext.Provider\n value={{\n mode,\n activeValue,\n setActiveValue: safeSetActiveValue,\n id,\n hover,\n className,\n transition,\n disabled,\n enabled,\n exitDelay,\n setBounds: safeSetBounds,\n clearBounds,\n activeClassName: activeClassNameState,\n setActiveClassName: setActiveClassNameState,\n forceUpdateBounds: (props as ParentModeMotionHighlightProps)?.forceUpdateBounds\n }}\n >\n {enabled\n ? controlledItems\n ? render(children)\n : render(\n React.Children.map(children, (child, index) => (\n <MotionHighlightItem key={index} className={props?.itemsClassName}>\n {child}\n </MotionHighlightItem>\n ))\n )\n : children}\n </MotionHighlightContext.Provider>\n )\n}\n\nfunction getNonOverridingDataAttributes(\n element: React.ReactElement,\n dataAttributes: Record<string, unknown>\n): Record<string, unknown> {\n return Object.keys(dataAttributes).reduce<Record<string, unknown>>((acc, key) => {\n if ((element.props as Record<string, unknown>)[key] === undefined) {\n acc[key] = dataAttributes[key]\n }\n\n return acc\n }, {})\n}\n\ntype ExtendedChildProps = React.ComponentProps<'div'> & {\n id?: string\n ref?: React.Ref<HTMLElement>\n 'data-active'?: string\n 'data-value'?: string\n 'data-disabled'?: boolean\n 'data-highlight'?: boolean\n 'data-slot'?: string\n}\n\ntype MotionHighlightItemProps = React.ComponentProps<'div'> & {\n children: React.ReactElement\n id?: string\n value?: string\n className?: string\n transition?: Transition\n activeClassName?: string\n disabled?: boolean\n exitDelay?: number\n asChild?: boolean\n forceUpdateBounds?: boolean\n}\n\nfunction MotionHighlightItem({\n ref,\n children,\n id,\n value,\n className,\n transition,\n disabled = false,\n activeClassName,\n exitDelay,\n asChild = false,\n forceUpdateBounds,\n ...props\n}: MotionHighlightItemProps) {\n const itemId = React.useId()\n\n const {\n activeValue,\n setActiveValue,\n mode,\n setBounds,\n clearBounds,\n hover,\n enabled,\n className: contextClassName,\n transition: contextTransition,\n id: contextId,\n disabled: contextDisabled,\n exitDelay: contextExitDelay,\n forceUpdateBounds: contextForceUpdateBounds,\n setActiveClassName\n } = useMotionHighlight()\n\n const element = children as React.ReactElement<ExtendedChildProps>\n const childValue = id ?? value ?? element.props?.['data-value'] ?? element.props?.id ?? itemId\n const isActive = activeValue === childValue\n const isDisabled = disabled === undefined ? contextDisabled : disabled\n const itemTransition = transition ?? contextTransition\n\n const localRef = React.useRef<HTMLDivElement>(null)\n\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n React.useEffect(() => {\n if (mode !== 'parent') return\n let rafId: number\n let previousBounds: Bounds | null = null\n const shouldUpdateBounds = forceUpdateBounds === true || (contextForceUpdateBounds && forceUpdateBounds !== false)\n\n const updateBounds = () => {\n if (!localRef.current) return\n\n const bounds = localRef.current.getBoundingClientRect()\n\n if (shouldUpdateBounds) {\n if (\n previousBounds &&\n previousBounds.top === bounds.top &&\n previousBounds.left === bounds.left &&\n previousBounds.width === bounds.width &&\n previousBounds.height === bounds.height\n ) {\n rafId = requestAnimationFrame(updateBounds)\n\n return\n }\n\n previousBounds = bounds\n rafId = requestAnimationFrame(updateBounds)\n }\n\n setBounds(bounds)\n }\n\n if (isActive) {\n updateBounds()\n setActiveClassName(activeClassName ?? '')\n } else if (!activeValue) clearBounds()\n\n if (shouldUpdateBounds) return () => cancelAnimationFrame(rafId)\n }, [\n mode,\n isActive,\n activeValue,\n setBounds,\n clearBounds,\n activeClassName,\n setActiveClassName,\n forceUpdateBounds,\n contextForceUpdateBounds\n ])\n\n if (!React.isValidElement(children)) return children\n\n const dataAttributes = {\n 'data-active': isActive ? 'true' : 'false',\n 'aria-selected': isActive,\n 'data-disabled': isDisabled,\n 'data-value': childValue,\n 'data-highlight': true\n }\n\n const commonHandlers = hover\n ? {\n onMouseEnter: (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) setActiveValue(childValue)\n element.props.onMouseEnter?.(e)\n },\n onMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) setActiveValue(null)\n element.props.onMouseLeave?.(e)\n }\n }\n : {\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) setActiveValue(childValue)\n element.props.onClick?.(e)\n }\n }\n\n if (asChild) {\n if (mode === 'children') {\n return React.cloneElement(\n element,\n {\n key: childValue,\n ref: localRef,\n className: cn('relative', element.props.className),\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n 'data-slot': 'motion-highlight-item-container'\n }),\n ...commonHandlers,\n ...props\n },\n <>\n <AnimatePresence initial={false}>\n {isActive && !isDisabled && (\n <motion.div\n layoutId={`transition-background-${contextId}`}\n data-slot='motion-highlight'\n className={cn('bg-muted absolute inset-0 z-0', contextClassName, activeClassName)}\n transition={itemTransition}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay: (itemTransition?.delay ?? 0) + (exitDelay ?? contextExitDelay ?? 0)\n }\n }}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n\n <div data-slot='motion-highlight-item' className={cn('relative z-[1]', className)} {...dataAttributes}>\n {children}\n </div>\n </>\n )\n }\n\n return React.cloneElement(element, {\n ref: localRef,\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n 'data-slot': 'motion-highlight-item'\n }),\n ...commonHandlers\n })\n }\n\n return enabled ? (\n <div\n key={childValue}\n ref={localRef}\n data-slot='motion-highlight-item-container'\n className={cn(mode === 'children' && 'relative', className)}\n {...dataAttributes}\n {...props}\n {...commonHandlers}\n >\n {mode === 'children' && (\n <AnimatePresence initial={false}>\n {isActive && !isDisabled && (\n <motion.div\n layoutId={`transition-background-${contextId}`}\n data-slot='motion-highlight'\n className={cn('bg-muted absolute inset-0 z-0', contextClassName, activeClassName)}\n transition={itemTransition}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay: (itemTransition?.delay ?? 0) + (exitDelay ?? contextExitDelay ?? 0)\n }\n }}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n )}\n\n {React.cloneElement(element, {\n className: cn('relative z-[1]', element.props.className),\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n 'data-slot': 'motion-highlight-item'\n })\n })}\n </div>\n ) : (\n children\n )\n}\n\nexport {\n MotionHighlight,\n MotionHighlightItem,\n useMotionHighlight,\n type MotionHighlightProps,\n type MotionHighlightItemProps\n}\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { motion, type Transition } from \"motion/react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { MotionHighlight, MotionHighlightItem } from \"./motion-highlight\"\n\n// Context for tabs configuration\ntype TabsConfigContextType = {\n animate?: boolean\n type?: 'underline' | 'default'\n}\n\nconst TabsConfigContext = React.createContext<TabsConfigContextType>({})\n\nfunction useTabsConfig(): TabsConfigContextType {\n return React.useContext(TabsConfigContext)\n}\n\n// Motion tabs context for default type with animation\ntype TabsContextType<T extends string> = {\n activeValue: T\n handleValueChange: (value: T) => void\n registerTrigger: (value: T, node: HTMLElement | null) => void\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst TabsContext = React.createContext<TabsContextType<any> | undefined>(undefined)\n\nfunction useTabs<T extends string = string>(): TabsContextType<T> {\n const context = React.useContext(TabsContext)\n\n if (!context) {\n throw new Error('useTabs must be used within a TabsProvider')\n }\n\n return context\n}\n\ntype BaseTabsProps = React.ComponentProps<typeof TabsPrimitive.Root> & {\n animate?: boolean\n type?: 'underline' | 'default'\n}\n\nfunction Tabs({\n className,\n animate = false,\n type = 'default',\n ...props\n}: BaseTabsProps) {\n const config = React.useMemo(() => ({ animate, type }), [animate, type])\n\n // For default type with animation, use motion tabs context\n if (type === 'default' && animate) {\n const [activeValue, setActiveValue] = React.useState<string | undefined>(\n props.defaultValue ?? undefined\n )\n const triggersRef = React.useRef(new Map<string, HTMLElement>())\n const initialSet = React.useRef(false)\n const isControlled = props.value !== undefined\n\n React.useEffect(() => {\n if (!isControlled && activeValue === undefined && triggersRef.current.size > 0 && !initialSet.current) {\n const firstTab = Array.from(triggersRef.current.keys())[0]\n setActiveValue(firstTab)\n initialSet.current = true\n }\n }, [activeValue, isControlled])\n\n const registerTrigger = (value: string, node: HTMLElement | null) => {\n if (node) {\n triggersRef.current.set(value, node)\n if (!isControlled && activeValue === undefined && !initialSet.current) {\n setActiveValue(value)\n initialSet.current = true\n }\n } else {\n triggersRef.current.delete(value)\n }\n }\n\n const handleValueChange = (val: string) => {\n if (!isControlled) setActiveValue(val)\n else props.onValueChange?.(val as string)\n }\n\n return (\n <TabsConfigContext.Provider value={config}>\n <TabsContext.Provider\n value={{\n activeValue: (props.value ?? activeValue)!,\n handleValueChange,\n registerTrigger\n }}\n >\n <div data-slot=\"tabs\" className={cn(\"flex flex-col gap-2\", className)} {...(props as React.ComponentProps<'div'>)}>\n {props.children}\n </div>\n </TabsContext.Provider>\n </TabsConfigContext.Provider>\n )\n }\n\n // For all other cases (underline or default without animation), use Radix UI\n return (\n <TabsConfigContext.Provider value={config}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n </TabsConfigContext.Provider>\n )\n}\n\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List> & {\n activeClassName?: string\n transition?: Transition\n}\n\nfunction TabsList({\n className,\n activeClassName,\n transition = {\n type: 'spring',\n stiffness: 200,\n damping: 25\n },\n ...props\n}: TabsListProps) {\n const { animate, type } = useTabsConfig()\n\n // For default type with animation, use MotionHighlight\n if (type === 'default' && animate) {\n const { activeValue } = useTabs()\n\n return (\n <MotionHighlight\n controlledItems\n className={cn('bg-background rounded-sm shadow-sm', activeClassName)}\n value={activeValue}\n transition={transition}\n >\n <div\n role='tablist'\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 as React.ComponentProps<'div'>)}\n >\n {props.children}\n </div>\n </MotionHighlight>\n )\n }\n\n // For underline type, use UnderlineTabsList\n if (type === 'underline') {\n return (\n <UnderlineTabsList\n className={className}\n {...(props as React.ComponentProps<typeof TabsPrimitive.List>)}\n />\n )\n }\n\n // Default Radix UI implementation\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\n// Context for underline tabs to track refs and active tab\ntype UnderlineTabsContextType = {\n registerTrigger: (index: number, element: HTMLButtonElement | null) => void\n activeValue?: string\n}\n\nconst UnderlineTabsContext = React.createContext<UnderlineTabsContextType | undefined>(undefined)\n\nfunction useUnderlineTabs(): UnderlineTabsContextType {\n const context = React.useContext(UnderlineTabsContext)\n if (!context) {\n return { registerTrigger: () => {}, activeValue: undefined }\n }\n return context\n}\n\n// Internal component to manage underline animation state\nfunction UnderlineTabsList({\n children,\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n const { animate } = useTabsConfig()\n const tabRefs = React.useRef<(HTMLButtonElement | null)[]>([])\n const [underlineStyle, setUnderlineStyle] = React.useState({ left: 0, width: 0 })\n const listRef = React.useRef<HTMLDivElement | null>(null)\n\n const registerTrigger = React.useCallback((index: number, element: HTMLButtonElement | null) => {\n tabRefs.current[index] = element\n }, [])\n\n // Update underline position by finding active tab\n const updateUnderline = React.useCallback(() => {\n const activeElement = tabRefs.current.find(el => {\n if (!el) return false\n return el.getAttribute('data-state') === 'active'\n })\n\n if (activeElement && listRef.current) {\n const listRect = listRef.current.getBoundingClientRect()\n const activeRect = activeElement.getBoundingClientRect()\n const left = activeRect.left - listRect.left\n const width = activeRect.width\n\n setUnderlineStyle({ left, width })\n }\n }, [])\n\n // Calculate underline position when active tab changes\n React.useLayoutEffect(() => {\n updateUnderline()\n }, [updateUnderline])\n\n // Monitor for active value changes by observing trigger elements\n React.useEffect(() => {\n if (!listRef.current) return\n\n const observers: MutationObserver[] = []\n\n // Setup observers for existing triggers\n const setupObservers = () => {\n // Clean up old observers\n observers.forEach(obs => obs.disconnect())\n observers.length = 0\n\n // Observe all triggers for data-state changes\n tabRefs.current.forEach(el => {\n if (el) {\n const observer = new MutationObserver(() => {\n updateUnderline()\n })\n observer.observe(el, { attributes: true, attributeFilter: ['data-state'] })\n observers.push(observer)\n }\n })\n }\n\n // Initial setup\n setupObservers()\n\n // Also observe the list for child changes (in case triggers are added/removed)\n const listObserver = new MutationObserver(() => {\n setupObservers()\n updateUnderline()\n })\n\n if (listRef.current) {\n listObserver.observe(listRef.current, {\n childList: true,\n subtree: true\n })\n observers.push(listObserver)\n }\n\n return () => {\n observers.forEach(obs => obs.disconnect())\n }\n }, [updateUnderline])\n\n const contextValue = React.useMemo(\n () => ({ registerTrigger, activeValue: undefined }),\n [registerTrigger]\n )\n\n return (\n <UnderlineTabsContext.Provider value={contextValue}>\n <div ref={listRef} className=\"relative\">\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-background relative rounded-none border-b p-0\",\n className\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n {animate && (\n <motion.div\n className='bg-primary absolute bottom-0 z-20 h-0.5'\n layoutId='underline'\n style={{\n left: underlineStyle.left,\n width: underlineStyle.width\n }}\n transition={{\n type: 'spring',\n stiffness: 400,\n damping: 40\n }}\n />\n )}\n {!animate && underlineStyle.width > 0 && (\n <div\n className='bg-primary absolute bottom-0 z-20 h-0.5 transition-all duration-200'\n style={{\n left: underlineStyle.left,\n width: underlineStyle.width\n }}\n />\n )}\n </div>\n </UnderlineTabsContext.Provider>\n )\n}\n\ntype TabsTriggerProps = React.ComponentProps<typeof TabsPrimitive.Trigger>\n\nfunction TabsTrigger({\n className,\n ...props\n}: TabsTriggerProps) {\n const { animate, type } = useTabsConfig()\n\n // For default type with animation, use MotionHighlightItem\n if (type === 'default' && animate) {\n const { activeValue, handleValueChange, registerTrigger } = useTabs()\n const localRef = React.useRef<HTMLButtonElement | null>(null)\n\n React.useEffect(() => {\n if (props.value) {\n registerTrigger(props.value as string, localRef.current)\n return () => registerTrigger(props.value as string, null)\n }\n }, [props.value, registerTrigger])\n\n const {\n onDrag,\n onDragStart,\n onDragEnd,\n onDragEnter,\n onDragExit,\n onDragLeave,\n onDragOver,\n onDrop,\n onAnimationStart,\n onAnimationEnd,\n onAnimationIteration,\n onTransitionEnd,\n disabled,\n ...motionButtonProps\n } = props as React.ComponentProps<'button'>\n\n return (\n <MotionHighlightItem value={props.value as string} className='size-full' disabled={disabled}>\n <motion.button\n ref={localRef}\n data-slot=\"tabs-trigger\"\n role=\"tab\"\n onClick={() => !disabled && handleValueChange(props.value as string)}\n data-state={activeValue === props.value ? 'active' : 'inactive'}\n disabled={disabled}\n className={cn(\n \"ring-offset-background focus-visible:ring-ring data-[state=active]:text-foreground z-10 inline-flex size-full cursor-pointer items-center justify-center rounded-sm px-2 py-1 text-sm font-medium whitespace-nowrap transition-transform focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...motionButtonProps}\n >\n {props.children}\n </motion.button>\n </MotionHighlightItem>\n )\n }\n\n // For underline type, apply underline-specific styling\n if (type === 'underline') {\n const { registerTrigger } = useUnderlineTabs()\n const [index, setIndex] = React.useState<number>(-1)\n const localRef = React.useRef<HTMLButtonElement | null>(null)\n\n // Find our index by checking siblings\n React.useEffect(() => {\n if (localRef.current && localRef.current.parentElement) {\n const siblings = Array.from(localRef.current.parentElement.children)\n const idx = siblings.indexOf(localRef.current)\n if (idx >= 0) {\n setIndex(idx)\n registerTrigger(idx, localRef.current)\n }\n }\n return () => {\n if (index >= 0) {\n registerTrigger(index, null)\n }\n }\n }, [registerTrigger, index])\n\n return (\n <TabsPrimitive.Trigger\n ref={localRef}\n data-slot=\"tabs-trigger\"\n className={cn(\n \"bg-background dark:data-[state=active]:bg-background relative z-10 pl-10 pr-10 rounded-none border-0 data-[state=active]:shadow-none cursor-pointer\",\n className\n )}\n {...props}\n />\n )\n }\n\n // Default Radix UI implementation\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\n// Track visited tabs for lazy loading with keep-alive\nconst visitedTabsSet = new Set<string>()\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { animate, type } = useTabsConfig()\n\n // For default type with animation, use motion.div with lazy loading\n if (type === 'default' && animate) {\n const { activeValue } = useTabs()\n const isActive = activeValue === props.value\n const value = props.value as string\n\n // Track visited tabs - mark as visited when active\n React.useEffect(() => {\n if (value && isActive) {\n visitedTabsSet.add(value)\n }\n }, [value, isActive])\n\n // Only render if this tab has been visited (lazy loading + keep-alive)\n const shouldRender = visitedTabsSet.has(value) || isActive\n\n if (!shouldRender) {\n return null\n }\n\n const {\n onDrag,\n onDragStart,\n onDragEnd,\n onDragEnter,\n onDragExit,\n onDragLeave,\n onDragOver,\n onDrop,\n onAnimationStart,\n onAnimationEnd,\n onAnimationIteration,\n onTransitionEnd,\n ...motionDivProps\n } = props as React.ComponentProps<'div'>\n\n return (\n <motion.div\n role='tabpanel'\n data-slot=\"tabs-content\"\n className={cn(\"overflow-hidden\", className)}\n initial={{ filter: 'blur(0px)' }}\n animate={{ filter: isActive ? 'blur(0px)' : 'blur(2px)' }}\n exit={{ filter: 'blur(0px)' }}\n transition={{ type: 'spring', stiffness: 300, damping: 20 }}\n style={{\n visibility: isActive ? 'visible' : 'hidden',\n position: isActive ? 'static' : 'absolute',\n width: isActive ? '100%' : '0',\n height: isActive ? 'auto' : '0',\n overflow: isActive ? 'visible' : 'hidden'\n }}\n aria-hidden={!isActive}\n {...motionDivProps}\n >\n {props.children}\n </motion.div>\n )\n }\n\n // Default Radix UI implementation\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, 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 onNext?: () => Promise<void> | void;\n processingOverlay?: ReactNode;\n}\n\nexport interface MultiTabSmartFormProps extends BaseSmartFormProps {\n showProgressBar?: boolean;\n showTabNumbers?: boolean;\n animateTabs?: boolean;\n tabType?: 'underline' | 'default';\n disableManualTabSwitch?: 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 isProcessing?: boolean;\n processingError?: string | null;\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 isProcessing = false,\n processingError = null\n}) => {\n const isLastTab = activeTab === totalTabs - 1;\n const isFirstTab = activeTab === 0;\n\n // Wrap handlers to prevent execution when processing\n const handlePrevious = isProcessing ? () => { } : onPrevious;\n const handleNext = isProcessing ? () => { } : onNext;\n const handleSubmit = isProcessing ? () => { } : onSubmit;\n const handleSaveDraft = isProcessing ? undefined : onSaveDraft;\n const handleReset = isProcessing ? undefined : onReset;\n\n return (\n <>\n <NavigationButtons\n onPrevious={handlePrevious}\n onNext={handleNext}\n onSubmit={handleSubmit}\n onSaveDraft={handleSaveDraft}\n onReset={handleReset}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n isFirstTab={isFirstTab}\n isLastTab={isLastTab}\n disabled={isProcessing}\n />\n {processingError && (\n <div className=\"mt-4 p-3 bg-red-50 border border-red-200 rounded-md text-red-700 text-sm\">\n {processingError}\n </div>\n )}\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 animateTabs = false,\n tabType = 'default',\n disableManualTabSwitch = false,\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 const [processingTab, setProcessingTab] = useState<number | null>(null);\n const [processingError, setProcessingError] = useState<string | null>(null);\n const [maxUnlockedTab, setMaxUnlockedTab] = useState(0); // Tab 0 is always unlocked\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 // Extract tab callbacks and processing overlays from children\n const tabCallbacks = useMemo(() => {\n const callbacks: Array<{ onNext?: () => Promise<void> | void; processingOverlay?: ReactNode }> = [];\n React.Children.forEach(regularChildren, (child) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const props = child.props as TabProps;\n callbacks.push({\n onNext: props.onNext,\n processingOverlay: props.processingOverlay\n });\n }\n });\n return callbacks;\n }, [regularChildren]);\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 animateTabs={animateTabs}\n tabType={tabType}\n tabCallbacks={tabCallbacks}\n processingTab={processingTab}\n setProcessingTab={setProcessingTab}\n processingError={processingError}\n setProcessingError={setProcessingError}\n disableManualTabSwitch={disableManualTabSwitch}\n maxUnlockedTab={maxUnlockedTab}\n setMaxUnlockedTab={setMaxUnlockedTab}\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 animateTabs: boolean;\n tabType: 'underline' | 'default';\n tabCallbacks: Array<{ onNext?: () => Promise<void> | void; processingOverlay?: ReactNode }>;\n processingTab: number | null;\n setProcessingTab: React.Dispatch<React.SetStateAction<number | null>>;\n processingError: string | null;\n setProcessingError: React.Dispatch<React.SetStateAction<string | null>>;\n disableManualTabSwitch?: boolean;\n maxUnlockedTab: number;\n setMaxUnlockedTab: React.Dispatch<React.SetStateAction<number>>;\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 animateTabs,\n tabType,\n tabCallbacks,\n processingTab,\n setProcessingTab,\n processingError,\n setProcessingError,\n disableManualTabSwitch = false,\n maxUnlockedTab,\n setMaxUnlockedTab\n}) => {\n const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors, getValidationErrorMessage } = useSmartForm();\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 // 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 // If manual tab switch is disabled, prevent forward navigation to tabs beyond maxUnlockedTab\n if (disableManualTabSwitch && index > maxUnlockedTab) {\n // Prevent navigation to locked tabs\n return;\n }\n\n onTabChange(index);\n\n // The real-time validation effect will handle tab status updates\n }, [onTabChange, disableManualTabSwitch, maxUnlockedTab]);\n\n // Handle Next with validation\n const handleNextWithValidation = useCallback(async () => {\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 const msg = error.issues[0]?.message ?? '';\n allErrors[field] = getValidationErrorMessage(field, msg);\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\n // Check if current tab has an onNext callback\n const currentTabCallback = tabCallbacks[activeTab];\n if (currentTabCallback?.onNext) {\n try {\n // Set processing state\n setProcessingTab(activeTab);\n setProcessingError(null);\n\n // Execute the callback (handle both sync and async)\n const result = currentTabCallback.onNext();\n if (result instanceof Promise) {\n await result;\n }\n\n // Clear processing state and proceed to next tab\n setProcessingTab(null);\n setProcessingError(null);\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n } catch (error) {\n // Handle error - prevent navigation\n setProcessingTab(null);\n const errorMessage = error instanceof Error ? error.message : 'An error occurred while processing';\n setProcessingError(errorMessage);\n // Don't call onNext() - navigation is prevented\n }\n } else {\n // No callback, proceed normally\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n }\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, check for onNext callback\n const currentTabCallback = tabCallbacks[activeTab];\n if (currentTabCallback?.onNext) {\n try {\n // Set processing state\n setProcessingTab(activeTab);\n setProcessingError(null);\n\n // Execute the callback (handle both sync and async)\n const result = currentTabCallback.onNext();\n if (result instanceof Promise) {\n await result;\n }\n\n // Clear processing state and proceed to next tab\n setProcessingTab(null);\n setProcessingError(null);\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n } catch (error) {\n // Handle error - prevent navigation\n setProcessingTab(null);\n const errorMessage = error instanceof Error ? error.message : 'An error occurred while processing';\n setProcessingError(errorMessage);\n // Don't call onNext() - navigation is prevented\n }\n } else {\n // No callback, proceed normally\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n }\n }\n }, [activeTab, getCombinedTabFields, validateFields, onNext, setCompletedTabs, setValidationErrorTabs, validationRegistry, formData, tabCallbacks, setProcessingTab, setProcessingError, setMaxUnlockedTab, getValidationErrorMessage]);\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 const msg = error.issues[0]?.message ?? '';\n allErrors[field] = getValidationErrorMessage(field, msg);\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, getValidationErrorMessage]);\n\n // Convert activeTab index to tab value for shadcn Tabs\n const activeTabValue = tabs[activeTab] || tabs[0] || '';\n\n return (\n <>\n <Tabs\n value={activeTabValue}\n onValueChange={(value) => {\n const newIndex = tabs.indexOf(value);\n if (newIndex !== -1) {\n handleTabChangeWithErrorCheck(newIndex);\n }\n }}\n className=\"w-full\"\n animate={animateTabs}\n type={tabType}\n >\n <div className=\"w-full mb-8\">\n <TabsList className={`grid w-full`} style={{ gridTemplateColumns: `repeat(${tabs.length}, 1fr)` }}>\n {tabs.map((tab, index) => {\n const isFutureTab = disableManualTabSwitch && index > maxUnlockedTab;\n return (\n <TabsTrigger\n key={tab}\n value={tab}\n disabled={isFutureTab}\n className={`flex items-center gap-2 ${isFutureTab ? 'opacity-50 cursor-not-allowed' : ''}`}\n >\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 })}\n </TabsList>\n </div>\n\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabProps = child.props as TabProps;\n const isCurrentlyProcessing = processingTab === index;\n const hasProcessingOverlay = tabCallbacks[index]?.processingOverlay;\n\n return (\n <TabsContent key={index} value={tabProps.title}>\n <TabIndexProvider tabIndex={index}>\n <div className=\"space-y-6 relative\">\n {tabProps.children}\n {isCurrentlyProcessing && hasProcessingOverlay && (\n <div className=\"fixed inset-0 bg-black/70 z-50 flex items-center justify-center pointer-events-none\">\n <div className=\"pointer-events-auto\">\n {tabCallbacks[index].processingOverlay}\n </div>\n </div>\n )}\n </div>\n </TabIndexProvider>\n </TabsContent>\n );\n }\n return null;\n })}\n\n {/* Hidden render of all tab content for immediate field registration */}\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 className=\"space-y-6\">\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 isProcessing={processingTab === activeTab}\n processingError={processingError}\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","import React, { useEffect, useMemo, useRef } from 'react';\nimport { z } from 'zod';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Textarea } from '../components/ui/textarea';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART TEXTAREA TYPES\n// =============================================================================\n\nexport interface SmartTextAreaProps {\n field: string;\n label?: string;\n rows?: number; // Number of rows for the textarea\n placeholder?: string;\n validation?: any; // Zod schema\n className?: string;\n required?: boolean;\n defaultValue?: any; // Default value for the field (only applied once on mount)\n syncValue?: any; // Value that syncs to form whenever it changes (for external control)\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n charSize?: number; // Optional maximum character count\n // All standard textarea HTML attributes\n autoFocus?: boolean;\n autoComplete?: string;\n autoCorrect?: string;\n autoCapitalize?: string;\n spellCheck?: boolean;\n readOnly?: boolean;\n wrap?: 'soft' | 'hard' | 'off';\n cols?: number;\n maxLength?: number;\n minLength?: number;\n name?: string;\n dirName?: string;\n form?: string;\n}\n\n// =============================================================================\n// SMART TEXTAREA COMPONENT\n// =============================================================================\n\nexport const SmartTextArea: React.FC<SmartTextAreaProps> = ({\n field,\n label,\n rows = 4,\n placeholder,\n validation,\n className = '',\n required = false,\n defaultValue,\n syncValue,\n info,\n subLabel,\n disabled,\n hidden,\n charSize,\n autoFocus,\n autoComplete,\n autoCorrect,\n autoCapitalize,\n spellCheck,\n readOnly,\n wrap,\n cols,\n maxLength,\n minLength,\n name,\n dirName,\n form\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n const displayName = label || field;\n\n // Build Zod schema from minLength/required when no explicit validation is provided\n const builtinValidation = useMemo(() => {\n if (validation) return undefined;\n const preprocess = (v: unknown) => (v === undefined || v === null ? '' : v);\n if (minLength != null) {\n return z.preprocess(preprocess, z.string().min(minLength, `${displayName} must be at least ${minLength} characters`));\n }\n if (required) {\n return z.preprocess(preprocess, z.string().min(1, `${displayName} is required`));\n }\n return undefined;\n }, [validation, minLength, required, displayName]);\n\n const schemaToRegister = validation ?? builtinValidation;\n\n // Register validation for this field (pass label for friendly default error messages)\n useEffect(() => {\n if (schemaToRegister && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, schemaToRegister, { label: displayName });\n }\n }, [schemaToRegister, field, registerValidation, displayName]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Sync value from external source - updates form whenever syncValue changes\n const prevSyncValue = useRef(syncValue);\n useEffect(() => {\n if (syncValue !== undefined && syncValue !== prevSyncValue.current) {\n onChange(syncValue);\n prevSyncValue.current = syncValue;\n }\n }, [syncValue, onChange]);\n\n // Generate placeholder text\n const getPlaceholder = () => {\n if (placeholder) return placeholder;\n if (!label) return `Enter ${field}`;\n return `Enter ${label.toLowerCase()}`;\n };\n\n // Get current character count\n const currentLength = value ? String(value).length : 0;\n const maxChars = charSize || maxLength;\n const showCharCount = maxChars !== undefined;\n\n // Handle value change with character limit enforcement\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n \n // If charSize is set, enforce it\n if (charSize && newValue.length > charSize) {\n return; // Don't update if exceeding charSize\n }\n \n onChange(newValue);\n };\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n <div className=\"relative\">\n <Textarea\n ref={fieldRef}\n value={value || ''}\n onChange={handleChange}\n className={`w-full ${error ? 'border-destructive' : ''} ${showCharCount ? 'pb-8' : ''}`}\n placeholder={getPlaceholder()}\n rows={rows}\n data-field={field}\n disabled={isDisabled}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n autoCorrect={autoCorrect}\n autoCapitalize={autoCapitalize}\n spellCheck={spellCheck}\n readOnly={readOnly}\n wrap={wrap}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n name={name}\n dirName={dirName}\n form={form}\n />\n {showCharCount && (\n <div className=\"absolute bottom-2 right-2 pointer-events-none\">\n <span className={`text-xs bg-background/80 px-1.5 py-0.5 rounded ${\n currentLength > (maxChars || 0) \n ? 'text-destructive' \n : currentLength > (maxChars || 0) * 0.9 \n ? 'text-yellow-600' \n : 'text-muted-foreground'\n }`}>\n {currentLength}/{maxChars}\n </span>\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\n"]}
1
+ {"version":3,"sources":["../src/BaseSmartForm.tsx","../src/FormButtons.tsx","../src/SmartForm.tsx","../src/components/ui/motion-highlight.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","../src/smart-fields/SmartTextArea.tsx"],"names":["jsx","jsxs","SubmitButton","React","React2","id","children","Fragment","motion","useContext","createContext","useState","useMemo","footerChildren","regularChildren","isValidElement","useCallback","useEffect","useRef","z"],"mappings":"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","file":"index.js","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 = '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 disabled?: 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 disabled = 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 || disabled}\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 && (\n <Button onClick={onReset} disabled={disabled} variant=\"secondary\">\n Reset Form\n </Button>\n )}\n \n {config.allowSaveDraft && onSaveDraft && (\n <DraftSaveButton onClick={onSaveDraft} disabled={isDraftSaving || disabled} />\n )}\n\n {isLastTab ? (\n <SubmitButton \n onClick={onSubmit} \n disabled={isLoading || isSubmitDisabled || disabled}\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 disabled={disabled}\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'\n\nimport type { Transition } from 'motion/react'\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/utils'\n\ntype MotionHighlightMode = 'children' | 'parent'\n\ntype Bounds = {\n top: number\n left: number\n width: number\n height: number\n}\n\ntype MotionHighlightContextType<T extends string> = {\n mode: MotionHighlightMode\n activeValue: T | null\n setActiveValue: (value: T | null) => void\n setBounds: (bounds: DOMRect) => void\n clearBounds: () => void\n id: string\n hover: boolean\n className?: string\n activeClassName?: string\n setActiveClassName: (className: string) => void\n transition?: Transition\n disabled?: boolean\n enabled?: boolean\n exitDelay?: number\n forceUpdateBounds?: boolean\n}\n\nconst MotionHighlightContext = React.createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MotionHighlightContextType<any> | undefined\n>(undefined)\n\nfunction useMotionHighlight<T extends string>(): MotionHighlightContextType<T> {\n const context = React.useContext(MotionHighlightContext)\n\n if (!context) {\n throw new Error('useMotionHighlight must be used within a MotionHighlightProvider')\n }\n\n return context as unknown as MotionHighlightContextType<T>\n}\n\ntype BaseMotionHighlightProps<T extends string> = {\n mode?: MotionHighlightMode\n value?: T | null\n defaultValue?: T | null\n onValueChange?: (value: T | null) => void\n className?: string\n transition?: Transition\n hover?: boolean\n disabled?: boolean\n enabled?: boolean\n exitDelay?: number\n}\n\ntype ParentModeMotionHighlightProps = {\n boundsOffset?: Partial<Bounds>\n containerClassName?: string\n forceUpdateBounds?: boolean\n}\n\ntype ControlledParentModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> &\n ParentModeMotionHighlightProps & {\n mode: 'parent'\n controlledItems: true\n children: React.ReactNode\n }\n\ntype ControlledChildrenModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> & {\n mode?: 'children' | undefined\n controlledItems: true\n children: React.ReactNode\n}\n\ntype UncontrolledParentModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> &\n ParentModeMotionHighlightProps & {\n mode: 'parent'\n controlledItems?: false\n itemsClassName?: string\n children: React.ReactElement | React.ReactElement[]\n }\n\ntype UncontrolledChildrenModeMotionHighlightProps<T extends string> = BaseMotionHighlightProps<T> & {\n mode?: 'children'\n controlledItems?: false\n itemsClassName?: string\n children: React.ReactElement | React.ReactElement[]\n}\n\ntype MotionHighlightProps<T extends string> = React.ComponentProps<'div'> &\n (\n | ControlledParentModeMotionHighlightProps<T>\n | ControlledChildrenModeMotionHighlightProps<T>\n | UncontrolledParentModeMotionHighlightProps<T>\n | UncontrolledChildrenModeMotionHighlightProps<T>\n )\n\nfunction MotionHighlight<T extends string>({ ref, ...props }: MotionHighlightProps<T>) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n className,\n transition = { type: 'spring', stiffness: 350, damping: 35 },\n hover = false,\n enabled = true,\n controlledItems,\n disabled = false,\n exitDelay = 0.2,\n mode = 'children'\n } = props\n\n const localRef = React.useRef<HTMLDivElement>(null)\n\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n const [activeValue, setActiveValue] = React.useState<T | null>(value ?? defaultValue ?? null)\n const [boundsState, setBoundsState] = React.useState<Bounds | null>(null)\n const [activeClassNameState, setActiveClassNameState] = React.useState<string>('')\n\n const safeSetActiveValue = React.useCallback(\n (id: T | null) => {\n setActiveValue(prev => (prev === id ? prev : id))\n if (id !== activeValue) onValueChange?.(id as T)\n },\n [activeValue, onValueChange]\n )\n\n const safeSetBounds = React.useCallback(\n (bounds: DOMRect) => {\n if (!localRef.current) return\n\n const boundsOffset = (props as ParentModeMotionHighlightProps)?.boundsOffset ?? {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }\n\n const containerRect = localRef.current.getBoundingClientRect()\n\n const newBounds: Bounds = {\n top: bounds.top - containerRect.top + (boundsOffset.top ?? 0),\n left: bounds.left - containerRect.left + (boundsOffset.left ?? 0),\n width: bounds.width + (boundsOffset.width ?? 0),\n height: bounds.height + (boundsOffset.height ?? 0)\n }\n\n setBoundsState(prev => {\n if (\n prev &&\n prev.top === newBounds.top &&\n prev.left === newBounds.left &&\n prev.width === newBounds.width &&\n prev.height === newBounds.height\n ) {\n return prev\n }\n\n return newBounds\n })\n },\n [props]\n )\n\n const clearBounds = React.useCallback(() => {\n setBoundsState(prev => (prev === null ? prev : null))\n }, [])\n\n React.useEffect(() => {\n if (value !== undefined) setActiveValue(value)\n else if (defaultValue !== undefined) setActiveValue(defaultValue)\n }, [value, defaultValue])\n\n const id = React.useId()\n\n React.useEffect(() => {\n if (mode !== 'parent') return\n const container = localRef.current\n\n if (!container) return\n\n const onScroll = () => {\n if (!activeValue) return\n const activeEl = container.querySelector<HTMLElement>(`[data-value=\"${activeValue}\"][data-highlight=\"true\"]`)\n\n if (activeEl) safeSetBounds(activeEl.getBoundingClientRect())\n }\n\n container.addEventListener('scroll', onScroll, { passive: true })\n\n return () => container.removeEventListener('scroll', onScroll)\n }, [mode, activeValue, safeSetBounds])\n\n const render = React.useCallback(\n (children: React.ReactNode) => {\n if (mode === 'parent') {\n return (\n <div\n ref={localRef}\n data-slot='motion-highlight-container'\n className={cn('relative', (props as ParentModeMotionHighlightProps)?.containerClassName)}\n >\n <AnimatePresence initial={false}>\n {boundsState && (\n <motion.div\n data-slot='motion-highlight'\n animate={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 1\n }}\n initial={{\n top: boundsState.top,\n left: boundsState.left,\n width: boundsState.width,\n height: boundsState.height,\n opacity: 0\n }}\n exit={{\n opacity: 0,\n transition: {\n ...transition,\n delay: (transition?.delay ?? 0) + (exitDelay ?? 0)\n }\n }}\n transition={transition}\n className={cn('bg-muted absolute z-0', className, activeClassNameState)}\n />\n )}\n </AnimatePresence>\n {children}\n </div>\n )\n }\n\n return children\n },\n [mode, props, boundsState, transition, exitDelay, className, activeClassNameState]\n )\n\n return (\n <MotionHighlightContext.Provider\n value={{\n mode,\n activeValue,\n setActiveValue: safeSetActiveValue,\n id,\n hover,\n className,\n transition,\n disabled,\n enabled,\n exitDelay,\n setBounds: safeSetBounds,\n clearBounds,\n activeClassName: activeClassNameState,\n setActiveClassName: setActiveClassNameState,\n forceUpdateBounds: (props as ParentModeMotionHighlightProps)?.forceUpdateBounds\n }}\n >\n {enabled\n ? controlledItems\n ? render(children)\n : render(\n React.Children.map(children, (child, index) => (\n <MotionHighlightItem key={index} className={props?.itemsClassName}>\n {child}\n </MotionHighlightItem>\n ))\n )\n : children}\n </MotionHighlightContext.Provider>\n )\n}\n\nfunction getNonOverridingDataAttributes(\n element: React.ReactElement,\n dataAttributes: Record<string, unknown>\n): Record<string, unknown> {\n return Object.keys(dataAttributes).reduce<Record<string, unknown>>((acc, key) => {\n if ((element.props as Record<string, unknown>)[key] === undefined) {\n acc[key] = dataAttributes[key]\n }\n\n return acc\n }, {})\n}\n\ntype ExtendedChildProps = React.ComponentProps<'div'> & {\n id?: string\n ref?: React.Ref<HTMLElement>\n 'data-active'?: string\n 'data-value'?: string\n 'data-disabled'?: boolean\n 'data-highlight'?: boolean\n 'data-slot'?: string\n}\n\ntype MotionHighlightItemProps = React.ComponentProps<'div'> & {\n children: React.ReactElement\n id?: string\n value?: string\n className?: string\n transition?: Transition\n activeClassName?: string\n disabled?: boolean\n exitDelay?: number\n asChild?: boolean\n forceUpdateBounds?: boolean\n}\n\nfunction MotionHighlightItem({\n ref,\n children,\n id,\n value,\n className,\n transition,\n disabled = false,\n activeClassName,\n exitDelay,\n asChild = false,\n forceUpdateBounds,\n ...props\n}: MotionHighlightItemProps) {\n const itemId = React.useId()\n\n const {\n activeValue,\n setActiveValue,\n mode,\n setBounds,\n clearBounds,\n hover,\n enabled,\n className: contextClassName,\n transition: contextTransition,\n id: contextId,\n disabled: contextDisabled,\n exitDelay: contextExitDelay,\n forceUpdateBounds: contextForceUpdateBounds,\n setActiveClassName\n } = useMotionHighlight()\n\n const element = children as React.ReactElement<ExtendedChildProps>\n const childValue = id ?? value ?? element.props?.['data-value'] ?? element.props?.id ?? itemId\n const isActive = activeValue === childValue\n const isDisabled = disabled === undefined ? contextDisabled : disabled\n const itemTransition = transition ?? contextTransition\n\n const localRef = React.useRef<HTMLDivElement>(null)\n\n React.useImperativeHandle(ref, () => localRef.current as HTMLDivElement)\n\n React.useEffect(() => {\n if (mode !== 'parent') return\n let rafId: number\n let previousBounds: Bounds | null = null\n const shouldUpdateBounds = forceUpdateBounds === true || (contextForceUpdateBounds && forceUpdateBounds !== false)\n\n const updateBounds = () => {\n if (!localRef.current) return\n\n const bounds = localRef.current.getBoundingClientRect()\n\n if (shouldUpdateBounds) {\n if (\n previousBounds &&\n previousBounds.top === bounds.top &&\n previousBounds.left === bounds.left &&\n previousBounds.width === bounds.width &&\n previousBounds.height === bounds.height\n ) {\n rafId = requestAnimationFrame(updateBounds)\n\n return\n }\n\n previousBounds = bounds\n rafId = requestAnimationFrame(updateBounds)\n }\n\n setBounds(bounds)\n }\n\n if (isActive) {\n updateBounds()\n setActiveClassName(activeClassName ?? '')\n } else if (!activeValue) clearBounds()\n\n if (shouldUpdateBounds) return () => cancelAnimationFrame(rafId)\n }, [\n mode,\n isActive,\n activeValue,\n setBounds,\n clearBounds,\n activeClassName,\n setActiveClassName,\n forceUpdateBounds,\n contextForceUpdateBounds\n ])\n\n if (!React.isValidElement(children)) return children\n\n const dataAttributes = {\n 'data-active': isActive ? 'true' : 'false',\n 'aria-selected': isActive,\n 'data-disabled': isDisabled,\n 'data-value': childValue,\n 'data-highlight': true\n }\n\n const commonHandlers = hover\n ? {\n onMouseEnter: (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) setActiveValue(childValue)\n element.props.onMouseEnter?.(e)\n },\n onMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) setActiveValue(null)\n element.props.onMouseLeave?.(e)\n }\n }\n : {\n onClick: (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) setActiveValue(childValue)\n element.props.onClick?.(e)\n }\n }\n\n if (asChild) {\n if (mode === 'children') {\n return React.cloneElement(\n element,\n {\n key: childValue,\n ref: localRef,\n className: cn('relative', element.props.className),\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n 'data-slot': 'motion-highlight-item-container'\n }),\n ...commonHandlers,\n ...props\n },\n <>\n <AnimatePresence initial={false}>\n {isActive && !isDisabled && (\n <motion.div\n layoutId={`transition-background-${contextId}`}\n data-slot='motion-highlight'\n className={cn('bg-muted absolute inset-0 z-0', contextClassName, activeClassName)}\n transition={itemTransition}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay: (itemTransition?.delay ?? 0) + (exitDelay ?? contextExitDelay ?? 0)\n }\n }}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n\n <div data-slot='motion-highlight-item' className={cn('relative z-[1]', className)} {...dataAttributes}>\n {children}\n </div>\n </>\n )\n }\n\n return React.cloneElement(element, {\n ref: localRef,\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n 'data-slot': 'motion-highlight-item'\n }),\n ...commonHandlers\n })\n }\n\n return enabled ? (\n <div\n key={childValue}\n ref={localRef}\n data-slot='motion-highlight-item-container'\n className={cn(mode === 'children' && 'relative', className)}\n {...dataAttributes}\n {...props}\n {...commonHandlers}\n >\n {mode === 'children' && (\n <AnimatePresence initial={false}>\n {isActive && !isDisabled && (\n <motion.div\n layoutId={`transition-background-${contextId}`}\n data-slot='motion-highlight'\n className={cn('bg-muted absolute inset-0 z-0', contextClassName, activeClassName)}\n transition={itemTransition}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: {\n ...itemTransition,\n delay: (itemTransition?.delay ?? 0) + (exitDelay ?? contextExitDelay ?? 0)\n }\n }}\n {...dataAttributes}\n />\n )}\n </AnimatePresence>\n )}\n\n {React.cloneElement(element, {\n className: cn('relative z-[1]', element.props.className),\n ...getNonOverridingDataAttributes(element, {\n ...dataAttributes,\n 'data-slot': 'motion-highlight-item'\n })\n })}\n </div>\n ) : (\n children\n )\n}\n\nexport {\n MotionHighlight,\n MotionHighlightItem,\n useMotionHighlight,\n type MotionHighlightProps,\n type MotionHighlightItemProps\n}\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { motion, type Transition } from \"motion/react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { MotionHighlight, MotionHighlightItem } from \"./motion-highlight\"\n\n// Context for tabs configuration\ntype TabsConfigContextType = {\n animate?: boolean\n type?: 'underline' | 'default'\n}\n\nconst TabsConfigContext = React.createContext<TabsConfigContextType>({})\n\nfunction useTabsConfig(): TabsConfigContextType {\n return React.useContext(TabsConfigContext)\n}\n\n// Motion tabs context for default type with animation\ntype TabsContextType<T extends string> = {\n activeValue: T\n handleValueChange: (value: T) => void\n registerTrigger: (value: T, node: HTMLElement | null) => void\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst TabsContext = React.createContext<TabsContextType<any> | undefined>(undefined)\n\nfunction useTabs<T extends string = string>(): TabsContextType<T> {\n const context = React.useContext(TabsContext)\n\n if (!context) {\n throw new Error('useTabs must be used within a TabsProvider')\n }\n\n return context\n}\n\ntype BaseTabsProps = React.ComponentProps<typeof TabsPrimitive.Root> & {\n animate?: boolean\n type?: 'underline' | 'default'\n}\n\nfunction Tabs({\n className,\n animate = false,\n type = 'default',\n ...props\n}: BaseTabsProps) {\n const config = React.useMemo(() => ({ animate, type }), [animate, type])\n\n // For default type with animation, use motion tabs context\n if (type === 'default' && animate) {\n const [activeValue, setActiveValue] = React.useState<string | undefined>(\n props.defaultValue ?? undefined\n )\n const triggersRef = React.useRef(new Map<string, HTMLElement>())\n const initialSet = React.useRef(false)\n const isControlled = props.value !== undefined\n\n React.useEffect(() => {\n if (!isControlled && activeValue === undefined && triggersRef.current.size > 0 && !initialSet.current) {\n const firstTab = Array.from(triggersRef.current.keys())[0]\n setActiveValue(firstTab)\n initialSet.current = true\n }\n }, [activeValue, isControlled])\n\n const registerTrigger = (value: string, node: HTMLElement | null) => {\n if (node) {\n triggersRef.current.set(value, node)\n if (!isControlled && activeValue === undefined && !initialSet.current) {\n setActiveValue(value)\n initialSet.current = true\n }\n } else {\n triggersRef.current.delete(value)\n }\n }\n\n const handleValueChange = (val: string) => {\n if (!isControlled) setActiveValue(val)\n else props.onValueChange?.(val as string)\n }\n\n // Destructure onValueChange to prevent it from being spread to DOM element\n const { onValueChange, ...divProps } = props as React.ComponentProps<'div'>\n \n return (\n <TabsConfigContext.Provider value={config}>\n <TabsContext.Provider\n value={{\n activeValue: (props.value ?? activeValue)!,\n handleValueChange,\n registerTrigger\n }}\n >\n <div data-slot=\"tabs\" className={cn(\"flex flex-col gap-2\", className)} {...divProps}>\n {props.children}\n </div>\n </TabsContext.Provider>\n </TabsConfigContext.Provider>\n )\n }\n\n // For all other cases (underline or default without animation), use Radix UI\n return (\n <TabsConfigContext.Provider value={config}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n </TabsConfigContext.Provider>\n )\n}\n\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List> & {\n activeClassName?: string\n transition?: Transition\n}\n\nfunction TabsList({\n className,\n activeClassName,\n transition = {\n type: 'spring',\n stiffness: 200,\n damping: 25\n },\n ...props\n}: TabsListProps) {\n const { animate, type } = useTabsConfig()\n\n // For default type with animation, use MotionHighlight\n if (type === 'default' && animate) {\n const { activeValue } = useTabs()\n\n return (\n <MotionHighlight\n controlledItems\n className={cn('bg-background rounded-sm shadow-sm', activeClassName)}\n value={activeValue}\n transition={transition}\n >\n <div\n role='tablist'\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 as React.ComponentProps<'div'>)}\n >\n {props.children}\n </div>\n </MotionHighlight>\n )\n }\n\n // For underline type, use UnderlineTabsList\n if (type === 'underline') {\n return (\n <UnderlineTabsList\n className={className}\n {...(props as React.ComponentProps<typeof TabsPrimitive.List>)}\n />\n )\n }\n\n // Default Radix UI implementation\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\n// Context for underline tabs to track refs and active tab\ntype UnderlineTabsContextType = {\n registerTrigger: (index: number, element: HTMLButtonElement | null) => void\n activeValue?: string\n}\n\nconst UnderlineTabsContext = React.createContext<UnderlineTabsContextType | undefined>(undefined)\n\nfunction useUnderlineTabs(): UnderlineTabsContextType {\n const context = React.useContext(UnderlineTabsContext)\n if (!context) {\n return { registerTrigger: () => {}, activeValue: undefined }\n }\n return context\n}\n\n// Internal component to manage underline animation state\nfunction UnderlineTabsList({\n children,\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n const { animate } = useTabsConfig()\n const tabRefs = React.useRef<(HTMLButtonElement | null)[]>([])\n const [underlineStyle, setUnderlineStyle] = React.useState({ left: 0, width: 0 })\n const listRef = React.useRef<HTMLDivElement | null>(null)\n\n const registerTrigger = React.useCallback((index: number, element: HTMLButtonElement | null) => {\n tabRefs.current[index] = element\n }, [])\n\n // Update underline position by finding active tab\n const updateUnderline = React.useCallback(() => {\n const activeElement = tabRefs.current.find(el => {\n if (!el) return false\n return el.getAttribute('data-state') === 'active'\n })\n\n if (activeElement && listRef.current) {\n const listRect = listRef.current.getBoundingClientRect()\n const activeRect = activeElement.getBoundingClientRect()\n const left = activeRect.left - listRect.left\n const width = activeRect.width\n\n setUnderlineStyle({ left, width })\n }\n }, [])\n\n // Calculate underline position when active tab changes\n React.useLayoutEffect(() => {\n updateUnderline()\n }, [updateUnderline])\n\n // Monitor for active value changes by observing trigger elements\n React.useEffect(() => {\n if (!listRef.current) return\n\n const observers: MutationObserver[] = []\n\n // Setup observers for existing triggers\n const setupObservers = () => {\n // Clean up old observers\n observers.forEach(obs => obs.disconnect())\n observers.length = 0\n\n // Observe all triggers for data-state changes\n tabRefs.current.forEach(el => {\n if (el) {\n const observer = new MutationObserver(() => {\n updateUnderline()\n })\n observer.observe(el, { attributes: true, attributeFilter: ['data-state'] })\n observers.push(observer)\n }\n })\n }\n\n // Initial setup\n setupObservers()\n\n // Also observe the list for child changes (in case triggers are added/removed)\n const listObserver = new MutationObserver(() => {\n setupObservers()\n updateUnderline()\n })\n\n if (listRef.current) {\n listObserver.observe(listRef.current, {\n childList: true,\n subtree: true\n })\n observers.push(listObserver)\n }\n\n return () => {\n observers.forEach(obs => obs.disconnect())\n }\n }, [updateUnderline])\n\n const contextValue = React.useMemo(\n () => ({ registerTrigger, activeValue: undefined }),\n [registerTrigger]\n )\n\n return (\n <UnderlineTabsContext.Provider value={contextValue}>\n <div ref={listRef} className=\"relative\">\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-background relative rounded-none border-b p-0\",\n className\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n {animate && (\n <motion.div\n className='bg-primary absolute bottom-0 z-20 h-0.5'\n layoutId='underline'\n style={{\n left: underlineStyle.left,\n width: underlineStyle.width\n }}\n transition={{\n type: 'spring',\n stiffness: 400,\n damping: 40\n }}\n />\n )}\n {!animate && underlineStyle.width > 0 && (\n <div\n className='bg-primary absolute bottom-0 z-20 h-0.5 transition-all duration-200'\n style={{\n left: underlineStyle.left,\n width: underlineStyle.width\n }}\n />\n )}\n </div>\n </UnderlineTabsContext.Provider>\n )\n}\n\ntype TabsTriggerProps = React.ComponentProps<typeof TabsPrimitive.Trigger>\n\nfunction TabsTrigger({\n className,\n ...props\n}: TabsTriggerProps) {\n const { animate, type } = useTabsConfig()\n\n // For default type with animation, use MotionHighlightItem\n if (type === 'default' && animate) {\n const { activeValue, handleValueChange, registerTrigger } = useTabs()\n const localRef = React.useRef<HTMLButtonElement | null>(null)\n\n React.useEffect(() => {\n if (props.value) {\n registerTrigger(props.value as string, localRef.current)\n return () => registerTrigger(props.value as string, null)\n }\n }, [props.value, registerTrigger])\n\n const {\n onDrag,\n onDragStart,\n onDragEnd,\n onDragEnter,\n onDragExit,\n onDragLeave,\n onDragOver,\n onDrop,\n onAnimationStart,\n onAnimationEnd,\n onAnimationIteration,\n onTransitionEnd,\n disabled,\n ...motionButtonProps\n } = props as React.ComponentProps<'button'>\n\n return (\n <MotionHighlightItem value={props.value as string} className='size-full' disabled={disabled}>\n <motion.button\n ref={localRef}\n data-slot=\"tabs-trigger\"\n role=\"tab\"\n onClick={() => !disabled && handleValueChange(props.value as string)}\n data-state={activeValue === props.value ? 'active' : 'inactive'}\n disabled={disabled}\n className={cn(\n \"ring-offset-background focus-visible:ring-ring data-[state=active]:text-foreground z-10 inline-flex size-full cursor-pointer items-center justify-center rounded-sm px-2 py-1 text-sm font-medium whitespace-nowrap transition-transform focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...motionButtonProps}\n >\n {props.children}\n </motion.button>\n </MotionHighlightItem>\n )\n }\n\n // For underline type, apply underline-specific styling\n if (type === 'underline') {\n const { registerTrigger } = useUnderlineTabs()\n const [index, setIndex] = React.useState<number>(-1)\n const localRef = React.useRef<HTMLButtonElement | null>(null)\n\n // Find our index by checking siblings\n React.useEffect(() => {\n if (localRef.current && localRef.current.parentElement) {\n const siblings = Array.from(localRef.current.parentElement.children)\n const idx = siblings.indexOf(localRef.current)\n if (idx >= 0) {\n setIndex(idx)\n registerTrigger(idx, localRef.current)\n }\n }\n return () => {\n if (index >= 0) {\n registerTrigger(index, null)\n }\n }\n }, [registerTrigger, index])\n\n return (\n <TabsPrimitive.Trigger\n ref={localRef}\n data-slot=\"tabs-trigger\"\n className={cn(\n \"bg-background dark:data-[state=active]:bg-background relative z-10 pl-10 pr-10 rounded-none border-0 data-[state=active]:shadow-none cursor-pointer\",\n className\n )}\n {...props}\n />\n )\n }\n\n // Default Radix UI implementation\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\n// Track visited tabs for lazy loading with keep-alive\nconst visitedTabsSet = new Set<string>()\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { animate, type } = useTabsConfig()\n\n // For default type with animation, use motion.div with lazy loading\n if (type === 'default' && animate) {\n const { activeValue } = useTabs()\n const isActive = activeValue === props.value\n const value = props.value as string\n\n // Track visited tabs - mark as visited when active\n React.useEffect(() => {\n if (value && isActive) {\n visitedTabsSet.add(value)\n }\n }, [value, isActive])\n\n // Only render if this tab has been visited (lazy loading + keep-alive)\n const shouldRender = visitedTabsSet.has(value) || isActive\n\n if (!shouldRender) {\n return null\n }\n\n const {\n onDrag,\n onDragStart,\n onDragEnd,\n onDragEnter,\n onDragExit,\n onDragLeave,\n onDragOver,\n onDrop,\n onAnimationStart,\n onAnimationEnd,\n onAnimationIteration,\n onTransitionEnd,\n ...motionDivProps\n } = props as React.ComponentProps<'div'>\n\n return (\n <motion.div\n role='tabpanel'\n data-slot=\"tabs-content\"\n className={cn(\"overflow-hidden\", className)}\n initial={{ filter: 'blur(0px)' }}\n animate={{ filter: isActive ? 'blur(0px)' : 'blur(2px)' }}\n exit={{ filter: 'blur(0px)' }}\n transition={{ type: 'spring', stiffness: 300, damping: 20 }}\n style={{\n visibility: isActive ? 'visible' : 'hidden',\n position: isActive ? 'static' : 'absolute',\n width: isActive ? '100%' : '0',\n height: isActive ? 'auto' : '0',\n overflow: isActive ? 'visible' : 'hidden'\n }}\n aria-hidden={!isActive}\n {...motionDivProps}\n >\n {props.children}\n </motion.div>\n )\n }\n\n // Default Radix UI implementation\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, 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 onNext?: () => Promise<void> | void;\n processingOverlay?: ReactNode;\n}\n\nexport interface MultiTabSmartFormProps extends BaseSmartFormProps {\n showProgressBar?: boolean;\n showTabNumbers?: boolean;\n animateTabs?: boolean;\n tabType?: 'underline' | 'default';\n disableManualTabSwitch?: 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 isProcessing?: boolean;\n processingError?: string | null;\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 isProcessing = false,\n processingError = null\n}) => {\n const isLastTab = activeTab === totalTabs - 1;\n const isFirstTab = activeTab === 0;\n\n // Wrap handlers to prevent execution when processing\n const handlePrevious = isProcessing ? () => { } : onPrevious;\n const handleNext = isProcessing ? () => { } : onNext;\n const handleSubmit = isProcessing ? () => { } : onSubmit;\n const handleSaveDraft = isProcessing ? undefined : onSaveDraft;\n const handleReset = isProcessing ? undefined : onReset;\n\n return (\n <>\n <NavigationButtons\n onPrevious={handlePrevious}\n onNext={handleNext}\n onSubmit={handleSubmit}\n onSaveDraft={handleSaveDraft}\n onReset={handleReset}\n isLoading={isLoading}\n isDraftSaving={isDraftSaving}\n config={config}\n isFirstTab={isFirstTab}\n isLastTab={isLastTab}\n disabled={isProcessing}\n />\n {processingError && (\n <div className=\"mt-4 p-3 bg-red-50 border border-red-200 rounded-md text-red-700 text-sm\">\n {processingError}\n </div>\n )}\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 animateTabs = false,\n tabType = 'default',\n disableManualTabSwitch = false,\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 const [processingTab, setProcessingTab] = useState<number | null>(null);\n const [processingError, setProcessingError] = useState<string | null>(null);\n const [maxUnlockedTab, setMaxUnlockedTab] = useState(0); // Tab 0 is always unlocked\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 // Extract tab callbacks and processing overlays from children\n const tabCallbacks = useMemo(() => {\n const callbacks: Array<{ onNext?: () => Promise<void> | void; processingOverlay?: ReactNode }> = [];\n React.Children.forEach(regularChildren, (child) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const props = child.props as TabProps;\n callbacks.push({\n onNext: props.onNext,\n processingOverlay: props.processingOverlay\n });\n }\n });\n return callbacks;\n }, [regularChildren]);\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 animateTabs={animateTabs}\n tabType={tabType}\n tabCallbacks={tabCallbacks}\n processingTab={processingTab}\n setProcessingTab={setProcessingTab}\n processingError={processingError}\n setProcessingError={setProcessingError}\n disableManualTabSwitch={disableManualTabSwitch}\n maxUnlockedTab={maxUnlockedTab}\n setMaxUnlockedTab={setMaxUnlockedTab}\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 animateTabs: boolean;\n tabType: 'underline' | 'default';\n tabCallbacks: Array<{ onNext?: () => Promise<void> | void; processingOverlay?: ReactNode }>;\n processingTab: number | null;\n setProcessingTab: React.Dispatch<React.SetStateAction<number | null>>;\n processingError: string | null;\n setProcessingError: React.Dispatch<React.SetStateAction<string | null>>;\n disableManualTabSwitch?: boolean;\n maxUnlockedTab: number;\n setMaxUnlockedTab: React.Dispatch<React.SetStateAction<number>>;\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 animateTabs,\n tabType,\n tabCallbacks,\n processingTab,\n setProcessingTab,\n processingError,\n setProcessingError,\n disableManualTabSwitch = false,\n maxUnlockedTab,\n setMaxUnlockedTab\n}) => {\n const { isLoading, isDraftSaving, submitForm, saveDraft, resetForm, validateFields, formData, validationRegistry, setErrors, getValidationErrorMessage } = useSmartForm();\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 // 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 // If manual tab switch is disabled, prevent forward navigation to tabs beyond maxUnlockedTab\n if (disableManualTabSwitch && index > maxUnlockedTab) {\n // Prevent navigation to locked tabs\n return;\n }\n\n onTabChange(index);\n\n // The real-time validation effect will handle tab status updates\n }, [onTabChange, disableManualTabSwitch, maxUnlockedTab]);\n\n // Handle Next with validation\n const handleNextWithValidation = useCallback(async () => {\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 const msg = error.issues[0]?.message ?? '';\n allErrors[field] = getValidationErrorMessage(field, msg);\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\n // Check if current tab has an onNext callback\n const currentTabCallback = tabCallbacks[activeTab];\n if (currentTabCallback?.onNext) {\n try {\n // Set processing state\n setProcessingTab(activeTab);\n setProcessingError(null);\n\n // Execute the callback (handle both sync and async)\n const result = currentTabCallback.onNext();\n if (result instanceof Promise) {\n await result;\n }\n\n // Clear processing state and proceed to next tab\n setProcessingTab(null);\n setProcessingError(null);\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n } catch (error) {\n // Handle error - prevent navigation\n setProcessingTab(null);\n const errorMessage = error instanceof Error ? error.message : 'An error occurred while processing';\n setProcessingError(errorMessage);\n // Don't call onNext() - navigation is prevented\n }\n } else {\n // No callback, proceed normally\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n }\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, check for onNext callback\n const currentTabCallback = tabCallbacks[activeTab];\n if (currentTabCallback?.onNext) {\n try {\n // Set processing state\n setProcessingTab(activeTab);\n setProcessingError(null);\n\n // Execute the callback (handle both sync and async)\n const result = currentTabCallback.onNext();\n if (result instanceof Promise) {\n await result;\n }\n\n // Clear processing state and proceed to next tab\n setProcessingTab(null);\n setProcessingError(null);\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n } catch (error) {\n // Handle error - prevent navigation\n setProcessingTab(null);\n const errorMessage = error instanceof Error ? error.message : 'An error occurred while processing';\n setProcessingError(errorMessage);\n // Don't call onNext() - navigation is prevented\n }\n } else {\n // No callback, proceed normally\n setMaxUnlockedTab(prev => Math.max(prev, activeTab + 1));\n onNext();\n }\n }\n }, [activeTab, getCombinedTabFields, validateFields, onNext, setCompletedTabs, setValidationErrorTabs, validationRegistry, formData, tabCallbacks, setProcessingTab, setProcessingError, setMaxUnlockedTab, getValidationErrorMessage]);\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 const msg = error.issues[0]?.message ?? '';\n allErrors[field] = getValidationErrorMessage(field, msg);\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, getValidationErrorMessage]);\n\n // Convert activeTab index to tab value for shadcn Tabs\n const activeTabValue = tabs[activeTab] || tabs[0] || '';\n\n return (\n <>\n <Tabs\n value={activeTabValue}\n onValueChange={(value) => {\n const newIndex = tabs.indexOf(value);\n if (newIndex !== -1) {\n handleTabChangeWithErrorCheck(newIndex);\n }\n }}\n className=\"w-full\"\n animate={animateTabs}\n type={tabType}\n >\n <div className=\"w-full mb-8\">\n <TabsList className={`grid w-full`} style={{ gridTemplateColumns: `repeat(${tabs.length}, 1fr)` }}>\n {tabs.map((tab, index) => {\n const isFutureTab = disableManualTabSwitch && index > maxUnlockedTab;\n return (\n <TabsTrigger\n key={tab}\n value={tab}\n disabled={isFutureTab}\n className={`flex items-center gap-2 ${isFutureTab ? 'opacity-50 cursor-not-allowed' : ''}`}\n >\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 })}\n </TabsList>\n </div>\n\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === Tab) {\n const tabProps = child.props as TabProps;\n const isCurrentlyProcessing = processingTab === index;\n const hasProcessingOverlay = tabCallbacks[index]?.processingOverlay;\n\n return (\n <TabsContent key={index} value={tabProps.title}>\n <TabIndexProvider tabIndex={index}>\n <div className=\"space-y-6 relative\">\n {tabProps.children}\n {isCurrentlyProcessing && hasProcessingOverlay && (\n <div className=\"fixed inset-0 bg-black/70 z-50 flex items-center justify-center pointer-events-none\">\n <div className=\"pointer-events-auto\">\n {tabCallbacks[index].processingOverlay}\n </div>\n </div>\n )}\n </div>\n </TabIndexProvider>\n </TabsContent>\n );\n }\n return null;\n })}\n\n {/* Hidden render of all tab content for immediate field registration */}\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 className=\"space-y-6\">\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 isProcessing={processingTab === activeTab}\n processingError={processingError}\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","import React, { useEffect, useMemo, useRef } from 'react';\nimport { z } from 'zod';\nimport { useFormField, useSmartForm } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Textarea } from '../components/ui/textarea';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART TEXTAREA TYPES\n// =============================================================================\n\nexport interface SmartTextAreaProps {\n field: string;\n label?: string;\n rows?: number; // Number of rows for the textarea\n placeholder?: string;\n validation?: any; // Zod schema\n className?: string;\n required?: boolean;\n defaultValue?: any; // Default value for the field (only applied once on mount)\n syncValue?: any; // Value that syncs to form whenever it changes (for external control)\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n disabled?: boolean | ((formData: any) => boolean);\n hidden?: boolean | ((formData: any) => boolean); // Hide field conditionally\n charSize?: number; // Optional maximum character count\n // All standard textarea HTML attributes\n autoFocus?: boolean;\n autoComplete?: string;\n autoCorrect?: string;\n autoCapitalize?: string;\n spellCheck?: boolean;\n readOnly?: boolean;\n wrap?: 'soft' | 'hard' | 'off';\n cols?: number;\n maxLength?: number;\n minLength?: number;\n name?: string;\n dirname?: string;\n form?: string;\n}\n\n// =============================================================================\n// SMART TEXTAREA COMPONENT\n// =============================================================================\n\nexport const SmartTextArea: React.FC<SmartTextAreaProps> = ({\n field,\n label,\n rows = 4,\n placeholder,\n validation,\n className = '',\n required = false,\n defaultValue,\n syncValue,\n info,\n subLabel,\n disabled,\n hidden,\n charSize,\n autoFocus,\n autoComplete,\n autoCorrect,\n autoCapitalize,\n spellCheck,\n readOnly,\n wrap,\n cols,\n maxLength,\n minLength,\n name,\n dirname,\n form\n}) => {\n const { formData } = useSmartForm();\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n\n // Evaluate disabled state\n const isDisabled = typeof disabled === 'function' ? disabled(formData) : disabled || false;\n \n // Evaluate hidden state\n const isHidden = typeof hidden === 'function' ? hidden(formData) : hidden || false;\n \n // Return null if field is hidden\n if (isHidden) return null;\n\n const displayName = label || field;\n\n // Build Zod schema from minLength/required when no explicit validation is provided\n const builtinValidation = useMemo(() => {\n if (validation) return undefined;\n const preprocess = (v: unknown) => (v === undefined || v === null ? '' : v);\n if (minLength != null) {\n return z.preprocess(preprocess, z.string().min(minLength, `${displayName} must be at least ${minLength} characters`));\n }\n if (required) {\n return z.preprocess(preprocess, z.string().min(1, `${displayName} is required`));\n }\n return undefined;\n }, [validation, minLength, required, displayName]);\n\n const schemaToRegister = validation ?? builtinValidation;\n\n // Register validation for this field (pass label for friendly default error messages)\n useEffect(() => {\n if (schemaToRegister && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, schemaToRegister, { label: displayName });\n }\n }, [schemaToRegister, field, registerValidation, displayName]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Sync value from external source - updates form whenever syncValue changes\n const prevSyncValue = useRef(syncValue);\n useEffect(() => {\n if (syncValue !== undefined && syncValue !== prevSyncValue.current) {\n onChange(syncValue);\n prevSyncValue.current = syncValue;\n }\n }, [syncValue, onChange]);\n\n // Generate placeholder text\n const getPlaceholder = () => {\n if (placeholder) return placeholder;\n if (!label) return `Enter ${field}`;\n return `Enter ${label.toLowerCase()}`;\n };\n\n // Get current character count\n const currentLength = value ? String(value).length : 0;\n const maxChars = charSize || maxLength;\n const showCharCount = maxChars !== undefined;\n\n // Handle value change with character limit enforcement\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n \n // If charSize is set, enforce it\n if (charSize && newValue.length > charSize) {\n return; // Don't update if exceeding charSize\n }\n \n onChange(newValue);\n };\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n <div className=\"relative\">\n <Textarea\n ref={fieldRef}\n value={value || ''}\n onChange={handleChange}\n className={`w-full ${error ? 'border-destructive' : ''} ${showCharCount ? 'pb-8' : ''}`}\n placeholder={getPlaceholder()}\n rows={rows}\n data-field={field}\n disabled={isDisabled}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n autoCorrect={autoCorrect}\n autoCapitalize={autoCapitalize}\n spellCheck={spellCheck}\n readOnly={readOnly}\n wrap={wrap}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n name={name}\n dirName={dirname}\n form={form}\n />\n {showCharCount && (\n <div className=\"absolute bottom-2 right-2 pointer-events-none\">\n <span className={`text-xs bg-background/80 px-1.5 py-0.5 rounded ${\n currentLength > (maxChars || 0) \n ? 'text-destructive' \n : currentLength > (maxChars || 0) * 0.9 \n ? 'text-yellow-600' \n : 'text-muted-foreground'\n }`}>\n {currentLength}/{maxChars}\n </span>\n </div>\n )}\n </div>\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};\n\n"]}