wizzard-stepper-react 1.7.1 → 1.7.2

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/package.json CHANGED
@@ -1,93 +1,92 @@
1
- {
2
- "name": "wizzard-stepper-react",
3
- "version": "1.7.1",
4
- "description": "A flexible, headless, and strictly typed multi-step wizard library for React.",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "import": {
12
- "types": "./dist/index.d.ts",
13
- "default": "./dist/index.js"
14
- },
15
- "require": {
16
- "types": "./dist/index.d.cts",
17
- "default": "./dist/index.cjs"
18
- }
19
- }
20
- },
21
- "files": [
22
- "dist"
23
- ],
24
- "scripts": {
25
- "dev": "tsup --watch",
26
- "build": "tsup",
27
- "lint": "eslint src/**",
28
- "test": "vitest",
29
- "test:run": "vitest run",
30
- "release": "release-it",
31
- "commit": "cz",
32
- "prepare": "husky || true"
33
- },
34
- "overrides": {
35
- "glob": "^9.0.0"
36
- },
37
- "config": {
38
- "commitizen": {
39
- "path": "./node_modules/cz-conventional-changelog"
40
- }
41
- },
42
- "keywords": [
43
- "react",
44
- "wizard",
45
- "stepper",
46
- "form",
47
- "multi-step"
48
- ],
49
- "author": "Aziz Isapov",
50
- "license": "MIT",
51
- "repository": {
52
- "type": "git",
53
- "url": "git+https://github.com/ZizzX/wizzard-stepper-react.git"
54
- },
55
- "bugs": {
56
- "url": "https://github.com/ZizzX/wizzard-stepper-react/issues",
57
- "email": "zizzxiii@gmail.com"
58
- },
59
- "homepage": "https://zizzx.github.io/wizzard-stepper-react/",
60
- "peerDependencies": {
61
- "react": ">=16.8.0",
62
- "react-dom": ">=16.8.0",
63
- "yup": "^1.0.0",
64
- "zod": "^4.0.0"
65
- },
66
- "peerDependenciesMeta": {
67
- "zod": {
68
- "optional": true
69
- },
70
- "yup": {
71
- "optional": true
72
- }
73
- },
74
- "devDependencies": {
75
- "@commitlint/cli": "^20.2.0",
76
- "@commitlint/config-conventional": "^20.2.0",
77
- "@release-it/conventional-changelog": "^10.0.4",
78
- "@types/node": "^25.0.3",
79
- "@types/react": "^19.2.7",
80
- "@types/react-dom": "^19.2.3",
81
- "commitizen": "^4.3.1",
82
- "cz-conventional-changelog": "^3.3.0",
83
- "eslint": "^9.39.2",
84
- "husky": "^9.1.7",
85
- "prettier": "^3.7.4",
86
- "release-it": "^19.2.0",
87
- "tsup": "^8.5.1",
88
- "typescript": "^5.9.3",
89
- "vitest": "^4.0.16",
90
- "yup": "^1.7.1",
91
- "zod": "^4.2.1"
92
- }
93
- }
1
+ {
2
+ "name": "wizzard-stepper-react",
3
+ "version": "1.7.2",
4
+ "description": "A flexible, headless, and strictly typed multi-step wizard library for React.",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.cts",
17
+ "default": "./dist/index.cjs"
18
+ }
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "overrides": {
25
+ "glob": "^9.0.0"
26
+ },
27
+ "config": {
28
+ "commitizen": {
29
+ "path": "./node_modules/cz-conventional-changelog"
30
+ }
31
+ },
32
+ "keywords": [
33
+ "react",
34
+ "wizard",
35
+ "stepper",
36
+ "form",
37
+ "multi-step"
38
+ ],
39
+ "author": "Aziz Isapov",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/ZizzX/wizzard-stepper-react.git"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/ZizzX/wizzard-stepper-react/issues",
47
+ "email": "zizzxiii@gmail.com"
48
+ },
49
+ "homepage": "https://zizzx.github.io/wizzard-stepper-react/",
50
+ "peerDependencies": {
51
+ "react": ">=16.8.0",
52
+ "react-dom": ">=16.8.0",
53
+ "yup": "^1.0.0",
54
+ "zod": "^4.0.0"
55
+ },
56
+ "peerDependenciesMeta": {
57
+ "zod": {
58
+ "optional": true
59
+ },
60
+ "yup": {
61
+ "optional": true
62
+ }
63
+ },
64
+ "devDependencies": {
65
+ "@commitlint/cli": "^20.2.0",
66
+ "@commitlint/config-conventional": "^20.2.0",
67
+ "@release-it/conventional-changelog": "^10.0.4",
68
+ "@types/node": "^25.0.3",
69
+ "@types/react": "^19.2.7",
70
+ "@types/react-dom": "^19.2.3",
71
+ "commitizen": "^4.3.1",
72
+ "cz-conventional-changelog": "^3.3.0",
73
+ "eslint": "^9.39.2",
74
+ "husky": "^9.1.7",
75
+ "prettier": "^3.7.4",
76
+ "release-it": "^19.2.0",
77
+ "tsup": "^8.5.1",
78
+ "typescript": "^5.9.3",
79
+ "vitest": "^4.0.16",
80
+ "yup": "^1.7.1",
81
+ "zod": "^4.2.1"
82
+ },
83
+ "scripts": {
84
+ "dev": "tsup --watch",
85
+ "build": "tsup",
86
+ "lint": "eslint src/**",
87
+ "test": "vitest",
88
+ "test:run": "vitest run",
89
+ "release": "release-it",
90
+ "commit": "cz"
91
+ }
92
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts","../src/context/WizardContext.tsx","../src/adapters/persistence/MemoryAdapter.ts","../src/utils/data.ts","../src/components/WizardStepRenderer.tsx","../src/hooks/useWizard.ts","../src/factory.tsx","../src/adapters/persistence/LocalStorageAdapter.ts","../src/adapters/validation/ZodAdapter.ts","../src/adapters/validation/YupAdapter.ts"],"sourcesContent":["export * from './types';\r\nexport * from './context/WizardContext';\r\n\r\n// Components\r\nexport { WizardStepRenderer } from \"./components/WizardStepRenderer\";\r\n\r\n// Utils\r\nexport { createWizardFactory } from \"./factory\";\r\nexport * from './hooks/useWizard';\r\n\r\nexport * from './adapters/persistence/MemoryAdapter';\r\nexport * from './adapters/persistence/LocalStorageAdapter';\r\n\r\nexport * from './adapters/validation/ZodAdapter';\r\nexport * from './adapters/validation/YupAdapter';\r\nexport * from './utils/data';\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n useCallback,\r\n useSyncExternalStore,\r\n useRef,\r\n useTransition,\r\n} from \"react\";\r\nimport type {\r\n IWizardConfig,\r\n PersistenceMode,\r\n IPersistenceAdapter,\r\n IStepConfig,\r\n IWizardContext,\r\n} from \"../types\";\r\nimport { MemoryAdapter } from \"../adapters/persistence/MemoryAdapter\";\r\nimport { getByPath, setByPath } from \"../utils/data\";\r\n\r\nexport interface IWizardState<T = unknown, StepId extends string = string> {\r\n currentStep: IStepConfig<unknown, T, StepId> | null;\r\n currentStepIndex: number;\r\n isFirstStep: boolean;\r\n isLastStep: boolean;\r\n isLoading: boolean;\r\n isPending: boolean;\r\n activeSteps: IStepConfig<unknown, T, StepId>[];\r\n visitedSteps: Set<StepId>;\r\n completedSteps: Set<StepId>;\r\n errorSteps: Set<StepId>;\r\n store: WizardStore<T>;\r\n}\r\n\r\nexport interface IWizardActions<StepId extends string = string> {\r\n goToNextStep: () => Promise<void>;\r\n goToPrevStep: () => void;\r\n goToStep: (stepId: StepId) => Promise<boolean>;\r\n setStepData: (stepId: StepId, data: unknown) => void;\r\n handleStepChange: (field: string, value: unknown) => void;\r\n validateStep: (sid: StepId) => Promise<boolean>;\r\n validateAll: () => Promise<{\r\n isValid: boolean;\r\n errors: Record<string, Record<string, string>>;\r\n }>;\r\n save: (stepIds?: StepId | StepId[] | boolean) => void;\r\n clearStorage: () => void;\r\n setData: (\r\n path: string,\r\n value: unknown,\r\n options?: { debounceValidation?: number }\r\n ) => void;\r\n updateData: (data: Partial<any>, options?: { replace?: boolean; persist?: boolean }) => void;\r\n getData: (path: string, defaultValue?: unknown) => unknown;\r\n}\r\n\r\nconst WizardStateContext = createContext<IWizardState<any, any> | undefined>(\r\n undefined\r\n);\r\nconst WizardActionsContext = createContext<IWizardActions<any> | undefined>(\r\n undefined\r\n);\r\n\r\n// Advanced: Store for granular subscriptions\r\nexport class WizardStore<T> {\r\n private state: { data: T; errors: Record<string, Record<string, string>> };\r\n private listeners = new Set<() => void>();\r\n errorsMap = new Map<string, Map<string, string>>();\r\n\r\n constructor(initialData: T) {\r\n this.state = {\r\n data: initialData,\r\n errors: {},\r\n };\r\n }\r\n\r\n getSnapshot() {\r\n return this.state;\r\n }\r\n\r\n update(newData: T) {\r\n this.state = { ...this.state, data: newData };\r\n this.notify();\r\n }\r\n\r\n // Sync internal Map to external Object (for backward compat)\r\n private syncErrors() {\r\n const newErrorsObj: Record<string, Record<string, string>> = {};\r\n for (const [stepId, fieldErrors] of this.errorsMap.entries()) {\r\n if (fieldErrors.size > 0) {\r\n newErrorsObj[stepId] = Object.fromEntries(fieldErrors);\r\n }\r\n }\r\n this.state = { ...this.state, errors: newErrorsObj };\r\n this.notify();\r\n }\r\n\r\n // Update from Object (Legacy/State setter)\r\n updateErrors(newErrors: Record<string, Record<string, string>>) {\r\n // Re-build Map to stay in sync\r\n this.errorsMap.clear();\r\n for (const [stepId, fieldErrors] of Object.entries(newErrors)) {\r\n const stepMap = new Map<string, string>();\r\n for (const [field, msg] of Object.entries(fieldErrors)) {\r\n stepMap.set(field, msg);\r\n }\r\n if (stepMap.size > 0) this.errorsMap.set(stepId, stepMap);\r\n }\r\n this.state = { ...this.state, errors: newErrors };\r\n this.notify();\r\n }\r\n\r\n // Optimize: Update Step Errors directly (O(1) Map updated, then Sync)\r\n setStepErrors(stepId: string, errors: Record<string, string> | undefined | null) {\r\n if (!errors || Object.keys(errors).length === 0) {\r\n if (this.errorsMap.has(stepId)) {\r\n this.errorsMap.delete(stepId);\r\n this.syncErrors();\r\n return true; // changed\r\n }\r\n return false;\r\n }\r\n\r\n // Update Map\r\n const stepMap = new Map<string, string>();\r\n for (const [field, msg] of Object.entries(errors)) {\r\n stepMap.set(field, msg);\r\n }\r\n this.errorsMap.set(stepId, stepMap);\r\n \r\n this.syncErrors();\r\n return true;\r\n }\r\n\r\n // Fast Delete (O(1))\r\n deleteError(stepId: string, path: string): boolean {\r\n const stepErrors = this.errorsMap.get(stepId);\r\n if (!stepErrors) return false;\r\n \r\n if (stepErrors.has(path)) {\r\n stepErrors.delete(path);\r\n if (stepErrors.size === 0) {\r\n this.errorsMap.delete(stepId);\r\n }\r\n // Sync to object for public state\r\n this.syncErrors();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private notify() {\r\n this.listeners.forEach((l) => l());\r\n }\r\n\r\n subscribe = (listener: () => void) => {\r\n this.listeners.add(listener);\r\n return () => this.listeners.delete(listener);\r\n };\r\n}\r\n\r\ninterface WizardProviderProps<T, StepId extends string> {\r\n config: IWizardConfig<T, StepId>;\r\n initialData?: T;\r\n initialStepId?: StepId; // New: Start from any step\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function WizardProvider<T extends Record<string, any>, StepId extends string = string>({\r\n config,\r\n initialData,\r\n initialStepId,\r\n children,\r\n}: WizardProviderProps<T, StepId>) {\r\n const [currentStepId, setCurrentStepId] = useState<StepId | \"\">(\"\");\r\n // Optimize: Keep ref to currentStepId to avoid recreating setData on every step change\r\n const currentStepIdRef = useRef<StepId | \"\">(currentStepId);\r\n useEffect(() => {\r\n currentStepIdRef.current = currentStepId;\r\n }, [currentStepId]);\r\n\r\n const [visitedSteps, setVisitedSteps] = useState<Set<StepId>>(new Set());\r\n const [completedSteps, setCompletedSteps] = useState<Set<StepId>>(new Set());\r\n const [errorSteps, setErrorSteps] = useState<Set<StepId>>(new Set());\r\n const [, setAllErrorsState] = useState<\r\n Record<string, Record<string, string>>\r\n >({});\r\n const [isLoading, setIsLoading] = useState<boolean>(true);\r\n const [isPending, startTransition] = useTransition();\r\n\r\n // Store for granular data and errors\r\n const storeRef = useRef(new WizardStore<T>((initialData || {}) as T));\r\n\r\n // Persistence Setup\r\n const persistenceAdapter = useMemo<IPersistenceAdapter>(() => {\r\n return config.persistence?.adapter || new MemoryAdapter();\r\n }, [config.persistence?.adapter]);\r\n\r\n const persistenceMode = config.persistence?.mode || \"onStepChange\";\r\n\r\n // --- Optimization: Static Step Map ---\r\n const stepsMap = useMemo(() => {\r\n const map = new Map<StepId, IStepConfig<any, T, StepId>>();\r\n config.steps.forEach((step: IStepConfig<any, T, StepId>) => map.set(step.id, step));\r\n return map;\r\n }, [config.steps]);\r\n\r\n // We use a ref to track the last calculated steps to ensure referential strictness\r\n const lastActiveStepsRef = useRef<IStepConfig<any, T, StepId>[]>([]);\r\n \r\n // Optimized: Calculate Active Steps reactively from the store\r\n const activeSteps = useSyncExternalStore(\r\n storeRef.current.subscribe,\r\n useCallback(() => {\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const nextActiveSteps = config.steps.filter((step: IStepConfig<any, T, StepId>) => {\r\n if (step.condition) {\r\n return step.condition(currentData);\r\n }\r\n return true;\r\n });\r\n\r\n // Check if structure changed (ids match) - shallow check optimized for step stability\r\n const prevIds = lastActiveStepsRef.current.map(s => s.id).join('.');\r\n const nextIds = nextActiveSteps.map(s => s.id).join('.');\r\n\r\n if (prevIds === nextIds && lastActiveStepsRef.current.length > 0) {\r\n return lastActiveStepsRef.current;\r\n }\r\n\r\n lastActiveStepsRef.current = nextActiveSteps;\r\n return nextActiveSteps;\r\n }, [config.steps])\r\n );\r\n\r\n const activeStepsIndexMap = useMemo(() => {\r\n const map = new Map<StepId, number>();\r\n activeSteps.forEach((s: IStepConfig<any, T, StepId>, i: number) => map.set(s.id, i));\r\n return map;\r\n }, [activeSteps]);\r\n\r\n // Set initial step if not set (with optional initialStepId)\r\n useEffect(() => {\r\n if (!currentStepId && activeSteps.length > 0) {\r\n if (initialStepId) {\r\n // Validation: verify initialStepId exists in active steps\r\n const target = activeSteps.find((s: IStepConfig<any, T, StepId>) => s.id === initialStepId);\r\n if (target) {\r\n setCurrentStepId(target.id);\r\n } else {\r\n // Fallback if initial is invalid/hidden\r\n setCurrentStepId(activeSteps[0].id);\r\n }\r\n } else {\r\n setCurrentStepId(activeSteps[0].id);\r\n }\r\n setIsLoading(false);\r\n }\r\n }, [activeSteps, currentStepId, initialStepId]);\r\n \r\n // --- Optimization: Stable State Reference ---\r\n // We hold all \"changing\" values in a ref so actions can remain stable\r\n const stateRef = useRef({\r\n config,\r\n stepsMap,\r\n activeSteps,\r\n activeStepsIndexMap,\r\n visitedSteps,\r\n completedSteps,\r\n persistenceMode,\r\n persistenceAdapter,\r\n currentStepId\r\n });\r\n\r\n // Update ref on every render - this is fast\r\n stateRef.current = {\r\n config,\r\n stepsMap,\r\n activeSteps,\r\n activeStepsIndexMap,\r\n visitedSteps,\r\n completedSteps,\r\n persistenceMode,\r\n persistenceAdapter,\r\n currentStepId\r\n };\r\n\r\n // Derived state\r\n const currentStep = useMemo(\r\n () => stepsMap.get(currentStepId as StepId) || null,\r\n [stepsMap, currentStepId]\r\n );\r\n const currentStepIndex = useMemo(\r\n () => activeStepsIndexMap.get(currentStepId as StepId) ?? -1,\r\n [activeStepsIndexMap, currentStepId]\r\n );\r\n const isFirstStep = currentStepIndex === 0;\r\n const isLastStep = currentStepIndex === activeSteps.length - 1;\r\n\r\n // Constants\r\n const META_KEY = \"__wizzard_meta__\";\r\n\r\n // Hydration Helper\r\n // Hydration Helper\r\n const hydrate = useCallback(() => {\r\n setIsLoading(true);\r\n const { persistenceAdapter, config } = stateRef.current;\r\n\r\n const metaFn = persistenceAdapter.getStep<{\r\n currentStepId: string;\r\n visited: string[];\r\n completed: string[];\r\n }>(META_KEY);\r\n\r\n if (metaFn) {\r\n if (metaFn.currentStepId) setCurrentStepId(metaFn.currentStepId as StepId);\r\n if (metaFn.visited) setVisitedSteps(new Set(metaFn.visited as StepId[]));\r\n if (metaFn.completed) setCompletedSteps(new Set(metaFn.completed as StepId[]));\r\n }\r\n\r\n const loadedData: Partial<T> = {};\r\n config.steps.forEach((step) => {\r\n const stepData = persistenceAdapter.getStep(step.id);\r\n if (stepData) {\r\n Object.assign(loadedData, stepData);\r\n }\r\n });\r\n\r\n if (Object.keys(loadedData).length > 0) {\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const newData = { ...currentData, ...loadedData };\r\n storeRef.current.update(newData);\r\n }\r\n setIsLoading(false);\r\n }, []); // Empty dependency array!\r\n\r\n useEffect(() => {\r\n hydrate();\r\n }, [hydrate]);\r\n\r\n\r\n // Save logic stabilized\r\n const saveData = useCallback(\r\n (mode: PersistenceMode, stepId: StepId, data: any) => {\r\n const { stepsMap, persistenceAdapter, persistenceMode: globalMode } = stateRef.current;\r\n const stepConfig = stepsMap.get(stepId);\r\n const stepAdapter = stepConfig?.persistenceAdapter;\r\n const stepMode = stepConfig?.persistenceMode;\r\n const adapterToUse = stepAdapter || persistenceAdapter;\r\n const modeToUse = stepMode || globalMode;\r\n\r\n if (mode === modeToUse || mode === \"manual\") {\r\n adapterToUse.saveStep(stepId, data);\r\n }\r\n },\r\n [] \r\n );\r\n\r\n // Debounce timeout for validation\r\n const validationTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\r\n null\r\n );\r\n\r\n const validateStep = useCallback(\r\n async (stepId: StepId, data: T): Promise<boolean> => {\r\n const { stepsMap } = stateRef.current;\r\n const step = stepsMap.get(stepId);\r\n if (!step || !step.validationAdapter) {\r\n return true;\r\n }\r\n\r\n const result = await step.validationAdapter.validate(data);\r\n\r\n if (result.isValid) {\r\n // Clear errors for this step\r\n // Optimized: Use Store Method\r\n const changed = storeRef.current.setStepErrors(stepId, null);\r\n \r\n if (changed) {\r\n setAllErrorsState(storeRef.current.getSnapshot().errors);\r\n setErrorSteps((prev) => {\r\n const next = new Set(prev);\r\n next.delete(stepId);\r\n return next;\r\n });\r\n }\r\n return true;\r\n } else {\r\n // Set errors for this step\r\n // Optimized: Use Store Method\r\n storeRef.current.setStepErrors(stepId, result.errors || null);\r\n setAllErrorsState(storeRef.current.getSnapshot().errors);\r\n \r\n setErrorSteps((prev) => {\r\n const next = new Set(prev);\r\n next.add(stepId);\r\n return next;\r\n });\r\n return false;\r\n }\r\n },\r\n []\r\n );\r\n\r\n // Actions stabilized with useCallback\r\n const setStepData = useCallback(\r\n (stepId: StepId, data: any) => {\r\n const { persistenceMode } = stateRef.current;\r\n const prevData = storeRef.current.getSnapshot().data;\r\n const newData = { ...prevData, ...data };\r\n\r\n storeRef.current.update(newData);\r\n\r\n const stepConfig = stateRef.current.stepsMap.get(stepId as StepId);\r\n const effectiveMode = stepConfig?.persistenceMode || persistenceMode;\r\n\r\n if (effectiveMode === \"onChange\") {\r\n saveData(\"onChange\", stepId, newData);\r\n }\r\n },\r\n [saveData]\r\n );\r\n\r\n const setData = useCallback(\r\n (path: string, value: any, options?: { debounceValidation?: number }) => {\r\n const { persistenceMode, stepsMap } = stateRef.current;\r\n const prevData = storeRef.current.getSnapshot().data;\r\n \r\n const currentValue = getByPath(prevData, path);\r\n if (currentValue === value) return;\r\n\r\n const newData = setByPath(prevData, path, value);\r\n\r\n // --- Batching Strategy: Update Store First ---\r\n storeRef.current.update(newData);\r\n \r\n const activeStepId = stateRef.current.currentStepId;\r\n const stepConfig = stepsMap.get(activeStepId as StepId);\r\n\r\n // 4. Clear Error on Input (UX Improvement + Optimization)\r\n if (activeStepId) {\r\n const wasDeleted = storeRef.current.deleteError(activeStepId, path);\r\n if (wasDeleted) {\r\n // Check if step is now clean to update errorSteps\r\n if (!storeRef.current.errorsMap.has(activeStepId)) {\r\n setErrorSteps(prev => {\r\n const next = new Set(prev);\r\n next.delete(activeStepId);\r\n return next;\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Sync React state last - only for errors to update errorSteps\r\n if (activeStepId && storeRef.current.getSnapshot().errors[activeStepId]) {\r\n startTransition(() => {\r\n setAllErrorsState(storeRef.current.getSnapshot().errors);\r\n });\r\n }\r\n\r\n // Determine Validation Mode\r\n const { config } = stateRef.current;\r\n const mode = stepConfig?.validationMode ?? config.validationMode ?? 'onStepChange';\r\n\r\n // 3. Conditional Validation Logic\r\n if (mode === 'onChange') {\r\n if (options?.debounceValidation) {\r\n if (validationTimeoutRef.current)\r\n clearTimeout(validationTimeoutRef.current);\r\n validationTimeoutRef.current = setTimeout(() => {\r\n try {\r\n if (activeStepId) {\r\n validateStep(activeStepId as StepId, newData).catch((err) => {\r\n console.error(\"[Wizard] Debounced validation failed:\", err);\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"[Wizard] Error starting validation:\", e);\r\n }\r\n }, options.debounceValidation);\r\n } else {\r\n if (activeStepId) validateStep(activeStepId as StepId, newData);\r\n }\r\n } \r\n\r\n const effectivePersistenceMode = stepConfig?.persistenceMode ?? persistenceMode;\r\n if (effectivePersistenceMode === \"onChange\" && activeStepId) {\r\n saveData(\"onChange\", activeStepId as StepId, newData);\r\n }\r\n },\r\n [saveData, validateStep]\r\n );\r\n\r\n const updateData = useCallback(\r\n (data: Partial<T>, options?: { replace?: boolean; persist?: boolean }) => {\r\n const { config } = stateRef.current;\r\n const prevData = storeRef.current.getSnapshot().data;\r\n const newData = options?.replace ? (data as T) : { ...prevData, ...data };\r\n\r\n storeRef.current.update(newData);\r\n\r\n if (options?.persist) {\r\n config.steps.forEach((step) => {\r\n saveData(\"manual\", step.id, newData);\r\n });\r\n }\r\n },\r\n [saveData]\r\n );\r\n\r\n const getData = useCallback((path: string, defaultValue?: any) => {\r\n return getByPath(storeRef.current.getSnapshot().data, path, defaultValue);\r\n }, []);\r\n\r\n // Action: Handle specific field change (helper)\r\n const handleStepChange = useCallback(\r\n (field: string, value: any) => {\r\n const { currentStepId } = stateRef.current;\r\n if (!currentStepId) return;\r\n setData(field, value);\r\n },\r\n [setData]\r\n );\r\n\r\n const validateAll = useCallback(async (): Promise<{\r\n isValid: boolean;\r\n errors: Record<string, Record<string, string>>;\r\n }> => {\r\n const { activeSteps } = stateRef.current;\r\n \r\n // Optimization: Parallel validation\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const validationResults = await Promise.all(\r\n activeSteps.map((step: IStepConfig<any, T, StepId>) => validateStep(step.id, currentData))\r\n );\r\n \r\n const isValid = validationResults.every(Boolean);\r\n const finalErrors = storeRef.current.getSnapshot().errors;\r\n return { isValid, errors: finalErrors };\r\n }, [validateStep]);\r\n\r\n const goToStep = useCallback(\r\n async (stepId: StepId): Promise<boolean> => {\r\n const { \r\n activeStepsIndexMap,\r\n currentStepId, \r\n config, \r\n persistenceMode, \r\n visitedSteps, \r\n completedSteps, \r\n persistenceAdapter,\r\n stepsMap\r\n } = stateRef.current;\r\n\r\n const targetIndex = activeStepsIndexMap.get(stepId) ?? -1;\r\n if (targetIndex === -1) return false;\r\n\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const currentStepIndex = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\r\n const currentStep = stepsMap.get(currentStepId as StepId);\r\n\r\n if (targetIndex > currentStepIndex) {\r\n const shouldValidate =\r\n currentStep?.autoValidate ?? config.autoValidate ?? false;\r\n if (shouldValidate && currentStepId) {\r\n const isValid = await validateStep(currentStepId as StepId, currentData);\r\n if (!isValid) return false;\r\n }\r\n }\r\n\r\n if (currentStep && currentStepId) {\r\n const effectivePersistenceMode = currentStep.persistenceMode ?? persistenceMode;\r\n if (effectivePersistenceMode === \"onStepChange\") {\r\n saveData(\"onStepChange\", currentStepId as StepId, currentData);\r\n }\r\n }\r\n\r\n const nextVisited = new Set(visitedSteps);\r\n if (currentStepId) nextVisited.add(currentStepId as StepId);\r\n \r\n setVisitedSteps(nextVisited);\r\n setCurrentStepId(stepId);\r\n\r\n if (persistenceMode !== \"manual\") {\r\n persistenceAdapter.saveStep(META_KEY, {\r\n currentStepId: stepId,\r\n visited: Array.from(nextVisited),\r\n completed: Array.from(completedSteps),\r\n });\r\n }\r\n\r\n // Lifecycle Callback\r\n if (config.onStepChange) {\r\n config.onStepChange(currentStepId || null, stepId, currentData); // Call hook\r\n }\r\n\r\n window.scrollTo(0, 0);\r\n return true;\r\n },\r\n [saveData, validateStep]\r\n );\r\n \r\n const goToNextStep = useCallback(async () => {\r\n const { activeSteps, activeStepsIndexMap, currentStepId, completedSteps, persistenceMode } = stateRef.current;\r\n const currentStepIndex = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\r\n \r\n if (currentStepIndex === -1 || currentStepIndex === activeSteps.length - 1) return;\r\n \r\n const nextStep = activeSteps[currentStepIndex + 1];\r\n if (nextStep) {\r\n const success = await goToStep(nextStep.id);\r\n if (success) {\r\n const nextCompleted = new Set(completedSteps).add(currentStepId as StepId);\r\n setCompletedSteps(nextCompleted);\r\n\r\n if (persistenceMode !== \"manual\") {\r\n persistenceAdapter.saveStep(META_KEY, {\r\n currentStepId: nextStep.id,\r\n visited: Array.from(new Set(visitedSteps).add(currentStepId as StepId)),\r\n completed: Array.from(nextCompleted),\r\n });\r\n }\r\n }\r\n }\r\n }, [goToStep]); // Only depends on goToStep (which is stable)\r\n\r\n const goToPrevStep = useCallback(() => {\r\n const { activeSteps, activeStepsIndexMap, currentStepId } = stateRef.current;\r\n const currentStepIndex = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\r\n if (currentStepIndex <= 0) return;\r\n const prevStep = activeSteps[currentStepIndex - 1];\r\n if (prevStep) {\r\n goToStep(prevStep.id);\r\n }\r\n }, [goToStep]);\r\n\r\n const clearStorage = useCallback(() => {\r\n stateRef.current.persistenceAdapter.clear();\r\n }, []);\r\n\r\n const save = useCallback(\r\n (stepIds?: StepId | StepId[] | boolean) => {\r\n const { config, currentStepId } = stateRef.current;\r\n const data = storeRef.current.getSnapshot().data;\r\n\r\n if (stepIds === true) {\r\n config.steps.forEach((step) => {\r\n saveData(\"manual\", step.id, data);\r\n });\r\n return;\r\n }\r\n\r\n if (!stepIds) {\r\n if (currentStepId) {\r\n saveData(\"manual\", currentStepId as StepId, data);\r\n }\r\n return;\r\n }\r\n\r\n const ids = Array.isArray(stepIds) ? stepIds : [stepIds];\r\n ids.forEach((id) => {\r\n saveData(\"manual\", id, data);\r\n });\r\n },\r\n [saveData]\r\n );\r\n\r\n // Split values\r\n const stateValue = useMemo<IWizardState<T, StepId>>(\r\n () => ({\r\n currentStep,\r\n currentStepIndex,\r\n isFirstStep,\r\n isLastStep,\r\n isLoading,\r\n isPending,\r\n activeSteps,\r\n visitedSteps,\r\n completedSteps,\r\n errorSteps,\r\n store: storeRef.current,\r\n }),\r\n [\r\n currentStep,\r\n currentStepIndex,\r\n isFirstStep,\r\n isLastStep,\r\n isLoading,\r\n isPending,\r\n activeSteps,\r\n visitedSteps,\r\n completedSteps,\r\n errorSteps,\r\n ]\r\n );\r\n\r\n const actionsValue = useMemo<IWizardActions<StepId>>(\r\n () => ({\r\n goToNextStep,\r\n goToPrevStep,\r\n goToStep,\r\n setStepData: setStepData as (stepId: StepId, data: unknown) => void,\r\n handleStepChange,\r\n validateStep: (sid: StepId) =>\r\n validateStep(sid, storeRef.current.getSnapshot().data),\r\n validateAll,\r\n save,\r\n clearStorage,\r\n setData,\r\n updateData,\r\n getData,\r\n }),\r\n [\r\n goToNextStep,\r\n goToPrevStep,\r\n goToStep,\r\n setStepData,\r\n handleStepChange,\r\n validateStep,\r\n validateAll,\r\n save,\r\n clearStorage,\r\n setData,\r\n updateData,\r\n getData,\r\n ]\r\n );\r\n\r\n return (\r\n <WizardStateContext.Provider value={stateValue}>\r\n <WizardActionsContext.Provider value={actionsValue}>\r\n {children}\r\n </WizardActionsContext.Provider>\r\n </WizardStateContext.Provider>\r\n );\r\n}\r\n\r\nexport function useWizardState<T = unknown, StepId extends string = string>(): IWizardState<T, StepId> {\r\n const context = useContext(WizardStateContext);\r\n if (!context) {\r\n throw new Error(\"useWizardState must be used within a WizardProvider\");\r\n }\r\n return context as IWizardState<T, StepId>;\r\n}\r\n\r\nexport function useWizardValue<TValue = any>(\r\n path: string,\r\n options?: { isEqual?: (a: TValue, b: TValue) => boolean }\r\n): TValue {\r\n const { store } = useWizardState();\r\n const lastStateRef = useRef<any>(null);\r\n const lastValueRef = useRef<any>(null);\r\n const isEqual = options?.isEqual || Object.is;\r\n\r\n const getSnapshot = useCallback(() => {\r\n const fullState = store.getSnapshot();\r\n const data = fullState.data;\r\n if (data === lastStateRef.current) {\r\n return lastValueRef.current;\r\n }\r\n const value = getByPath(data, path) as TValue;\r\n \r\n // Memoization with custom equality\r\n if (lastValueRef.current !== undefined && isEqual(lastValueRef.current, value)) {\r\n lastStateRef.current = data;\r\n return lastValueRef.current;\r\n }\r\n\r\n lastStateRef.current = data;\r\n lastValueRef.current = value;\r\n return value;\r\n }, [store, path, isEqual]);\r\n\r\n return useSyncExternalStore(store.subscribe, getSnapshot);\r\n}\r\n\r\nexport function useWizardError(path: string): string | undefined {\r\n const { store } = useWizardState();\r\n const lastStateRef = useRef<any>(null);\r\n const lastValueRef = useRef<any>(null);\r\n\r\n const getSnapshot = useCallback(() => {\r\n const fullState = store.getSnapshot();\r\n const errors = fullState.errors;\r\n if (errors === lastStateRef.current) {\r\n return lastValueRef.current;\r\n }\r\n\r\n // Flatten errors from all steps or use a specific step?\r\n // Usually validation results are nested like { children: { \"0.name\": \"error\" } }\r\n // but the adapter flattened them to \"children.0.name\"\r\n let foundError: string | undefined;\r\n Object.values(errors).forEach((stepErrors) => {\r\n const typedStepErrors = stepErrors as Record<string, string>;\r\n if (typedStepErrors[path]) foundError = typedStepErrors[path];\r\n });\r\n\r\n lastStateRef.current = errors;\r\n lastValueRef.current = foundError;\r\n return foundError;\r\n }, [store, path]);\r\n\r\n return useSyncExternalStore(store.subscribe, getSnapshot);\r\n}\r\n\r\nexport function useWizardSelector<TSelected = any>(\r\n selector: (state: any) => TSelected,\r\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\r\n): TSelected {\r\n const { store } = useWizardState();\r\n const lastStateRef = useRef<any>(null);\r\n const lastResultRef = useRef<any>(null);\r\n const isEqual = options?.isEqual || Object.is;\r\n\r\n const getSnapshot = useCallback(() => {\r\n const fullState = store.getSnapshot();\r\n if (fullState === lastStateRef.current) {\r\n return lastResultRef.current;\r\n }\r\n \r\n const result = selector(fullState.data);\r\n \r\n // Memoization with custom equality\r\n if (lastResultRef.current !== null && isEqual(lastResultRef.current, result)) {\r\n lastStateRef.current = fullState;\r\n return lastResultRef.current;\r\n }\r\n\r\n lastStateRef.current = fullState;\r\n lastResultRef.current = result;\r\n return result;\r\n }, [store, selector, isEqual]);\r\n\r\n return useSyncExternalStore(store.subscribe, getSnapshot);\r\n}\r\n\r\nexport function useWizardActions<StepId extends string = string>(): IWizardActions<StepId> {\r\n const context = useContext(WizardActionsContext);\r\n if (!context) {\r\n throw new Error(\"useWizardActions must be used within a WizardProvider\");\r\n }\r\n return context as IWizardActions<StepId>;\r\n}\r\n\r\nexport function useWizardContext<T = any, StepId extends string = string>(): IWizardContext<T, StepId> & {\r\n store: WizardStore<T>;\r\n} {\r\n const state = useWizardState<T, StepId>();\r\n const actions = useWizardActions<StepId>();\r\n\r\n // Backward compatibility: subscribe to everything\r\n const wizardData = useWizardSelector<T>((s) => s as T);\r\n const allErrors = useSyncExternalStore(state.store.subscribe, () => state.store.getSnapshot().errors);\r\n\r\n return useMemo(\r\n () => ({\r\n ...state,\r\n ...actions,\r\n wizardData,\r\n allErrors,\r\n }),\r\n [state, actions, wizardData, allErrors]\r\n );\r\n}\r\n","import type { IPersistenceAdapter } from '../../types';\r\n\r\nexport class MemoryAdapter implements IPersistenceAdapter {\r\n private storage: Record<string, any> = {};\r\n\r\n saveStep<T>(stepId: string, data: T): void {\r\n this.storage[stepId] = data;\r\n }\r\n\r\n getStep<T>(stepId: string): T | undefined {\r\n return this.storage[stepId] as T;\r\n }\r\n\r\n clear(): void {\r\n this.storage = {};\r\n }\r\n}\r\n","/**\r\n * Cache for parsed path strings to avoid repetitive regex/split operations.\r\n * Key: path string (e.g., \"users[0].name\")\r\n * Value: array of keys (e.g., [\"users\", \"0\", \"name\"])\r\n */\r\nconst pathCache = new Map<string, string[]>();\r\n\r\n/**\r\n * Parses a string path into an array of keys using a cache.\r\n * Handles dot notation \"a.b\" and bracket notation \"a[0].b\".\r\n */\r\nexport function toPath(path: string): string[] {\r\n if (!path) return [];\r\n if (pathCache.has(path)) {\r\n return pathCache.get(path)!;\r\n }\r\n\r\n // Optimization: Regex only if brackets exist, otherwise fast split\r\n let keys: string[];\r\n if (path.includes('[')) {\r\n keys = path.replace(/\\[(\\d+)\\]/g, '.$1').split('.').filter(Boolean);\r\n } else {\r\n keys = path.split('.').filter(Boolean);\r\n }\r\n\r\n pathCache.set(path, keys);\r\n return keys;\r\n}\r\n\r\n/**\r\n * Retrieves a value from an object by path using cached key parsing.\r\n * Optimized for frequent access.\r\n */\r\nexport function getByPath(obj: any, path: string, defaultValue?: unknown): unknown {\r\n if (!path || obj === undefined || obj === null) return defaultValue ?? obj;\r\n\r\n // Fast path for direct property access (no dots/brackets)\r\n if (!path.includes('.') && !path.includes('[')) {\r\n const val = obj[path];\r\n return val !== undefined ? val : defaultValue;\r\n }\r\n\r\n const keys = toPath(path);\r\n let result = obj;\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n if (result === undefined || result === null) return defaultValue;\r\n result = result[keys[i]];\r\n }\r\n\r\n return result !== undefined ? result : defaultValue;\r\n}\r\n\r\n/**\r\n * Immutably sets a value in an object by path.\r\n * iterative implementation (stack-safe and usually faster).\r\n */\r\nexport function setByPath<T extends object>(obj: T, path: string, value: unknown): T {\r\n if (!path) return value as unknown as T;\r\n\r\n // Fast path: simple property set\r\n if (!path.includes('.') && !path.includes('[')) {\r\n // Optimization: Shallow copy mostly sufficient for root\r\n // If obj is Array, we must be careful, but typings say T extends object\r\n if (Array.isArray(obj)) {\r\n const copy = [...obj] as any;\r\n copy[path] = value;\r\n return copy;\r\n }\r\n return { ...obj, [path]: value };\r\n }\r\n\r\n const keys = toPath(path);\r\n if (keys.length === 0) return value as unknown as T;\r\n\r\n // Shallow clone root\r\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\r\n let current: any = root;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n const nextKey = keys[i + 1];\r\n\r\n // Determine if next level should be array or object\r\n // If key exists, we clone it. If not, we create based on nextKey type (numeric -> array)\r\n const existing = current[key];\r\n let nextLevel;\r\n\r\n if (existing && typeof existing === 'object') {\r\n nextLevel = Array.isArray(existing) ? [...existing] : { ...existing };\r\n } else {\r\n // Predict type based on next key: is it an integer?\r\n const isNumeric = /^\\d+$/.test(nextKey);\r\n nextLevel = isNumeric ? [] : {};\r\n }\r\n\r\n current[key] = nextLevel;\r\n current = nextLevel;\r\n }\r\n\r\n // Set final value\r\n const lastKey = keys[keys.length - 1];\r\n current[lastKey] = value;\r\n\r\n return root as T;\r\n}\r\n\r\n/**\r\n * Simple shallow equality check for objects and arrays.\r\n * Useful for preventing re-renders in selectors.\r\n */\r\nexport function shallowEqual(a: any, b: any): boolean {\r\n if (Object.is(a, b)) return true;\r\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\r\n return false;\r\n }\r\n\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n for (let i = 0; i < keysA.length; i++) {\r\n const key = keysA[i];\r\n if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport { useWizardContext } from \"../context/WizardContext\";\r\n\r\ninterface WizardStepRendererProps {\r\n /**\r\n * Optional wrapper component for each step.\r\n * Useful for adding animations (e.g., Framer Motion).\r\n */\r\n wrapper?: React.ComponentType<{ children: React.ReactNode; key: string }>;\r\n}\r\n\r\n/**\r\n * A declarative component that renders the current step based on the configuration.\r\n * It looks for the `component` property in your `steps` config.\r\n */\r\nexport const WizardStepRenderer: React.FC<WizardStepRendererProps> = ({\r\n wrapper: Wrapper,\r\n}) => {\r\n const { currentStep } = useWizardContext();\r\n\r\n const StepComponent = useMemo(() => {\r\n if (!currentStep?.component) return null;\r\n return currentStep.component;\r\n }, [currentStep]);\r\n\r\n if (!currentStep || !StepComponent) {\r\n return null;\r\n }\r\n\r\n const content = <StepComponent />;\r\n\r\n if (Wrapper) {\r\n return <Wrapper key={currentStep.id}>{content}</Wrapper>;\r\n }\r\n\r\n return content;\r\n};\r\n","import { useWizardContext } from '../context/WizardContext';\r\nimport type { IWizardContext } from '../types';\r\n\r\nexport const useWizard = <T = any, StepId extends string = string>(): IWizardContext<T, StepId> => {\r\n return useWizardContext<T, StepId>();\r\n};\r\n","import React from \"react\";\r\nimport {\r\n WizardProvider as BaseWizardProvider,\r\n useWizardContext as useBaseWizardContext,\r\n useWizardValue as useBaseWizardValue,\r\n useWizardSelector as useBaseWizardSelector,\r\n useWizardError as useBaseWizardError,\r\n useWizardActions as useBaseWizardActions,\r\n useWizardState as useBaseWizardState,\r\n} from \"./context/WizardContext\";\r\nimport { useWizard as useBaseWizard } from \"./hooks/useWizard\";\r\nimport type { IWizardConfig, IWizardContext, IStepConfig } from \"./types\";\r\nimport type { Path, PathValue } from \"./utils/types\";\r\n\r\n/**\r\n * createWizardFactory\r\n *\r\n * Creates a strongly-typed set of Wizard components and hooks for a specific data schema.\r\n * This ensures full type safety across your entire wizard implementation without manual casting.\r\n *\r\n * @template TSchema The shape of your wizard's global data state\r\n */\r\nexport function createWizardFactory<TSchema extends Record<string, any>, StepId extends string = string>() {\r\n /**\r\n * Typed Provider\r\n */\r\n const WizardProvider = ({\r\n config,\r\n initialData,\r\n children,\r\n }: {\r\n config: IWizardConfig<TSchema, StepId>;\r\n initialData?: Partial<TSchema>;\r\n children: React.ReactNode;\r\n }) => {\r\n return (\r\n <BaseWizardProvider<TSchema, StepId>\r\n config={config}\r\n initialData={initialData as TSchema}\r\n >\r\n {children}\r\n </BaseWizardProvider>\r\n );\r\n };\r\n\r\n /**\r\n * Typed useWizard\r\n * Returns the full context with TSchema typed data and methods\r\n */\r\n const useWizard = (): IWizardContext<TSchema, StepId> => {\r\n return useBaseWizard<TSchema, StepId>();\r\n };\r\n\r\n /**\r\n * Typed useWizardContext\r\n * similar to useWizard but explicit about strict context usage\r\n */\r\n const useWizardContext = () => {\r\n return useBaseWizardContext<TSchema, StepId>();\r\n };\r\n\r\n /**\r\n * Typed useWizardValue\r\n * @param path Dot-notation path to the value\r\n */\r\n const useWizardValue = <P extends Path<TSchema>>(\r\n path: P,\r\n options?: { isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean }\r\n ): PathValue<TSchema, P> => {\r\n return useBaseWizardValue<PathValue<TSchema, P>>(path, options);\r\n };\r\n\r\n /**\r\n * Typed useWizardSelector\r\n * @param selector Function to select a slice of state\r\n */\r\n const useWizardSelector = <TSelected,>(\r\n selector: (state: TSchema) => TSelected,\r\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\r\n ): TSelected => {\r\n return useBaseWizardSelector<TSelected>(selector, options);\r\n };\r\n\r\n /**\r\n * Typed useWizardError\r\n * @param path Dot-notation path to check for errors\r\n */\r\n const useWizardError = <P extends Path<TSchema>>(\r\n path: P\r\n ): string | undefined => {\r\n return useBaseWizardError(path);\r\n };\r\n\r\n /**\r\n * Typed useWizardActions\r\n * No generic needed for actions usually, but we wrap it for consistency\r\n */\r\n const useWizardActions = () => {\r\n return useBaseWizardActions<StepId>();\r\n };\r\n\r\n /**\r\n * Typed useWizardState\r\n * Access to raw internal state if needed (advanced)\r\n */\r\n const useWizardState = () => {\r\n return useBaseWizardState<TSchema, StepId>();\r\n };\r\n\r\n /**\r\n * Helper to create a typed step configuration.\r\n * By using this helper, TypeScript can infer TStepData from the validationAdapter or other properties.\r\n */\r\n const createStep = <TStepData = unknown,>(\r\n config: IStepConfig<TStepData, TSchema, StepId>\r\n ) => config;\r\n\r\n return {\r\n WizardProvider,\r\n useWizard,\r\n useWizardContext,\r\n useWizardValue,\r\n useWizardSelector,\r\n useWizardError,\r\n useWizardActions,\r\n useWizardState,\r\n createStep,\r\n };\r\n}\r\n","import type { IPersistenceAdapter } from '../../types';\r\n\r\nexport class LocalStorageAdapter implements IPersistenceAdapter {\r\n private prefix: string;\r\n\r\n constructor(prefix: string = 'wizard_') {\r\n this.prefix = prefix;\r\n }\r\n\r\n private getKey(stepId: string): string {\r\n return `${this.prefix}${stepId}`;\r\n }\r\n\r\n saveStep<T>(stepId: string, data: T): void {\r\n if (typeof window === 'undefined') return;\r\n try {\r\n localStorage.setItem(this.getKey(stepId), JSON.stringify(data));\r\n } catch (error) {\r\n console.warn('LocalStorageAdapter: Failed to save step', error);\r\n }\r\n }\r\n\r\n getStep<T>(stepId: string): T | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n try {\r\n const item = localStorage.getItem(this.getKey(stepId));\r\n return item ? JSON.parse(item) : undefined;\r\n } catch (error) {\r\n console.warn('LocalStorageAdapter: Failed to get step', error);\r\n return undefined;\r\n }\r\n }\r\n\r\n clear(): void {\r\n if (typeof window === 'undefined') return;\r\n Object.keys(localStorage).forEach((key) => {\r\n if (key.startsWith(this.prefix)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n }\r\n}\r\n","import type { IValidatorAdapter, ValidationResult } from '../../types';\r\nimport type { ZodLikeSchema } from './internal-types';\r\n\r\nexport class ZodAdapter<T> implements IValidatorAdapter<T> {\r\n private schema: ZodLikeSchema<T>;\r\n\r\n constructor(schema: ZodLikeSchema<T>) {\r\n this.schema = schema;\r\n }\r\n\r\n async validate(data: unknown): Promise<ValidationResult> {\r\n const result = await this.schema.safeParseAsync(data as T);\r\n if (result.success) {\r\n return { isValid: true };\r\n }\r\n\r\n // Explicitly handle error case\r\n const errors: Record<string, string> = {};\r\n if (result.error) {\r\n result.error.issues.forEach((err) => {\r\n const path = err.path.join('.'); // nested.field\r\n errors[path] = err.message;\r\n });\r\n }\r\n return { isValid: false, errors };\r\n }\r\n}\r\n","import type { IValidatorAdapter, ValidationResult } from '../../types';\r\nimport type { YupLikeSchema, YupLikeError } from './internal-types';\r\n\r\nexport class YupAdapter<T> implements IValidatorAdapter<T> {\r\n private schema: YupLikeSchema<T>;\r\n\r\n constructor(schema: YupLikeSchema<T>) {\r\n this.schema = schema;\r\n }\r\n\r\n async validate(data: unknown): Promise<ValidationResult> {\r\n try {\r\n await this.schema.validate(data as T, { abortEarly: false });\r\n return { isValid: true };\r\n } catch (err) {\r\n if (err && typeof err === 'object' && 'inner' in err) {\r\n const yupError = err as YupLikeError;\r\n const errors: Record<string, string> = {};\r\n yupError.inner.forEach((error) => {\r\n if (error.path) {\r\n errors[error.path] = error.message;\r\n }\r\n });\r\n return { isValid: false, errors };\r\n }\r\n throw err;\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["persistenceAdapter","config","stepsMap","persistenceMode","currentStepId","activeSteps","activeStepsIndexMap","visitedSteps","completedSteps","currentStepIndex","currentStep","import_react","import_jsx_runtime","import_jsx_runtime","WizardProvider","useWizard","useWizardContext","useWizardValue","useWizardSelector","useWizardError","useWizardActions","useWizardState"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context/WizardContext.tsx","../src/adapters/persistence/MemoryAdapter.ts","../src/utils/data.ts","../src/components/WizardStepRenderer.tsx","../src/hooks/useWizard.ts","../src/factory.tsx","../src/adapters/persistence/LocalStorageAdapter.ts","../src/adapters/validation/ZodAdapter.ts","../src/adapters/validation/YupAdapter.ts"],"sourcesContent":["import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n useCallback,\r\n useSyncExternalStore,\r\n useRef,\r\n useTransition,\r\n} from \"react\";\r\nimport type {\r\n IWizardConfig,\r\n PersistenceMode,\r\n IPersistenceAdapter,\r\n IStepConfig,\r\n IWizardContext,\r\n} from \"../types\";\r\nimport { MemoryAdapter } from \"../adapters/persistence/MemoryAdapter\";\r\nimport { getByPath, setByPath } from \"../utils/data\";\r\n\r\nexport interface IWizardState<T = unknown, StepId extends string = string> {\r\n currentStep: IStepConfig<unknown, T, StepId> | null;\r\n currentStepIndex: number;\r\n isFirstStep: boolean;\r\n isLastStep: boolean;\r\n isLoading: boolean;\r\n isPending: boolean;\r\n activeSteps: IStepConfig<unknown, T, StepId>[];\r\n visitedSteps: Set<StepId>;\r\n completedSteps: Set<StepId>;\r\n errorSteps: Set<StepId>;\r\n store: WizardStore<T>;\r\n}\r\n\r\nexport interface IWizardActions<StepId extends string = string> {\r\n goToNextStep: () => Promise<void>;\r\n goToPrevStep: () => void;\r\n goToStep: (stepId: StepId) => Promise<boolean>;\r\n setStepData: (stepId: StepId, data: unknown) => void;\r\n handleStepChange: (field: string, value: unknown) => void;\r\n validateStep: (sid: StepId) => Promise<boolean>;\r\n validateAll: () => Promise<{\r\n isValid: boolean;\r\n errors: Record<string, Record<string, string>>;\r\n }>;\r\n save: (stepIds?: StepId | StepId[] | boolean) => void;\r\n clearStorage: () => void;\r\n setData: (\r\n path: string,\r\n value: unknown,\r\n options?: { debounceValidation?: number }\r\n ) => void;\r\n updateData: (data: Partial<any>, options?: { replace?: boolean; persist?: boolean }) => void;\r\n getData: (path: string, defaultValue?: unknown) => unknown;\r\n}\r\n\r\nconst WizardStateContext = createContext<IWizardState<any, any> | undefined>(\r\n undefined\r\n);\r\nconst WizardActionsContext = createContext<IWizardActions<any> | undefined>(\r\n undefined\r\n);\r\n\r\n// Advanced: Store for granular subscriptions\r\nexport class WizardStore<T> {\r\n private state: { data: T; errors: Record<string, Record<string, string>> };\r\n private listeners = new Set<() => void>();\r\n errorsMap = new Map<string, Map<string, string>>();\r\n\r\n constructor(initialData: T) {\r\n this.state = {\r\n data: initialData,\r\n errors: {},\r\n };\r\n }\r\n\r\n getSnapshot() {\r\n return this.state;\r\n }\r\n\r\n update(newData: T) {\r\n this.state = { ...this.state, data: newData };\r\n this.notify();\r\n }\r\n\r\n // Sync internal Map to external Object (for backward compat)\r\n private syncErrors() {\r\n const newErrorsObj: Record<string, Record<string, string>> = {};\r\n for (const [stepId, fieldErrors] of this.errorsMap.entries()) {\r\n if (fieldErrors.size > 0) {\r\n newErrorsObj[stepId] = Object.fromEntries(fieldErrors);\r\n }\r\n }\r\n this.state = { ...this.state, errors: newErrorsObj };\r\n this.notify();\r\n }\r\n\r\n // Update from Object (Legacy/State setter)\r\n updateErrors(newErrors: Record<string, Record<string, string>>) {\r\n // Re-build Map to stay in sync\r\n this.errorsMap.clear();\r\n for (const [stepId, fieldErrors] of Object.entries(newErrors)) {\r\n const stepMap = new Map<string, string>();\r\n for (const [field, msg] of Object.entries(fieldErrors)) {\r\n stepMap.set(field, msg);\r\n }\r\n if (stepMap.size > 0) this.errorsMap.set(stepId, stepMap);\r\n }\r\n this.state = { ...this.state, errors: newErrors };\r\n this.notify();\r\n }\r\n\r\n // Optimize: Update Step Errors directly (O(1) Map updated, then Sync)\r\n setStepErrors(stepId: string, errors: Record<string, string> | undefined | null) {\r\n if (!errors || Object.keys(errors).length === 0) {\r\n if (this.errorsMap.has(stepId)) {\r\n this.errorsMap.delete(stepId);\r\n this.syncErrors();\r\n return true; // changed\r\n }\r\n return false;\r\n }\r\n\r\n // Update Map\r\n const stepMap = new Map<string, string>();\r\n for (const [field, msg] of Object.entries(errors)) {\r\n stepMap.set(field, msg);\r\n }\r\n this.errorsMap.set(stepId, stepMap);\r\n \r\n this.syncErrors();\r\n return true;\r\n }\r\n\r\n // Fast Delete (O(1))\r\n deleteError(stepId: string, path: string): boolean {\r\n const stepErrors = this.errorsMap.get(stepId);\r\n if (!stepErrors) return false;\r\n \r\n if (stepErrors.has(path)) {\r\n stepErrors.delete(path);\r\n if (stepErrors.size === 0) {\r\n this.errorsMap.delete(stepId);\r\n }\r\n // Sync to object for public state\r\n this.syncErrors();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private notify() {\r\n this.listeners.forEach((l) => l());\r\n }\r\n\r\n subscribe = (listener: () => void) => {\r\n this.listeners.add(listener);\r\n return () => this.listeners.delete(listener);\r\n };\r\n}\r\n\r\ninterface WizardProviderProps<T, StepId extends string> {\r\n config: IWizardConfig<T, StepId>;\r\n initialData?: T;\r\n initialStepId?: StepId; // New: Start from any step\r\n children: React.ReactNode;\r\n}\r\n\r\nexport function WizardProvider<T extends Record<string, any>, StepId extends string = string>({\r\n config,\r\n initialData,\r\n initialStepId,\r\n children,\r\n}: WizardProviderProps<T, StepId>) {\r\n const [currentStepId, setCurrentStepId] = useState<StepId | \"\">(\"\");\r\n // Optimize: Keep ref to currentStepId to avoid recreating setData on every step change\r\n const currentStepIdRef = useRef<StepId | \"\">(currentStepId);\r\n useEffect(() => {\r\n currentStepIdRef.current = currentStepId;\r\n }, [currentStepId]);\r\n\r\n const [visitedSteps, setVisitedSteps] = useState<Set<StepId>>(new Set());\r\n const [completedSteps, setCompletedSteps] = useState<Set<StepId>>(new Set());\r\n const [errorSteps, setErrorSteps] = useState<Set<StepId>>(new Set());\r\n const [, setAllErrorsState] = useState<\r\n Record<string, Record<string, string>>\r\n >({});\r\n const [isLoading, setIsLoading] = useState<boolean>(true);\r\n const [isPending, startTransition] = useTransition();\r\n\r\n // Store for granular data and errors\r\n const storeRef = useRef(new WizardStore<T>((initialData || {}) as T));\r\n\r\n // Persistence Setup\r\n const persistenceAdapter = useMemo<IPersistenceAdapter>(() => {\r\n return config.persistence?.adapter || new MemoryAdapter();\r\n }, [config.persistence?.adapter]);\r\n\r\n const persistenceMode = config.persistence?.mode || \"onStepChange\";\r\n\r\n // --- Optimization: Static Step Map ---\r\n const stepsMap = useMemo(() => {\r\n const map = new Map<StepId, IStepConfig<any, T, StepId>>();\r\n config.steps.forEach((step: IStepConfig<any, T, StepId>) => map.set(step.id, step));\r\n return map;\r\n }, [config.steps]);\r\n\r\n // We use a ref to track the last calculated steps to ensure referential strictness\r\n const lastActiveStepsRef = useRef<IStepConfig<any, T, StepId>[]>([]);\r\n \r\n // Optimized: Calculate Active Steps reactively from the store\r\n const activeSteps = useSyncExternalStore(\r\n storeRef.current.subscribe,\r\n useCallback(() => {\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const nextActiveSteps = config.steps.filter((step: IStepConfig<any, T, StepId>) => {\r\n if (step.condition) {\r\n return step.condition(currentData);\r\n }\r\n return true;\r\n });\r\n\r\n // Check if structure changed (ids match) - shallow check optimized for step stability\r\n const prevIds = lastActiveStepsRef.current.map(s => s.id).join('.');\r\n const nextIds = nextActiveSteps.map(s => s.id).join('.');\r\n\r\n if (prevIds === nextIds && lastActiveStepsRef.current.length > 0) {\r\n return lastActiveStepsRef.current;\r\n }\r\n\r\n lastActiveStepsRef.current = nextActiveSteps;\r\n return nextActiveSteps;\r\n }, [config.steps])\r\n );\r\n\r\n const activeStepsIndexMap = useMemo(() => {\r\n const map = new Map<StepId, number>();\r\n activeSteps.forEach((s: IStepConfig<any, T, StepId>, i: number) => map.set(s.id, i));\r\n return map;\r\n }, [activeSteps]);\r\n\r\n // Set initial step if not set (with optional initialStepId)\r\n useEffect(() => {\r\n if (!currentStepId && activeSteps.length > 0) {\r\n if (initialStepId) {\r\n // Validation: verify initialStepId exists in active steps\r\n const target = activeSteps.find((s: IStepConfig<any, T, StepId>) => s.id === initialStepId);\r\n if (target) {\r\n setCurrentStepId(target.id);\r\n } else {\r\n // Fallback if initial is invalid/hidden\r\n setCurrentStepId(activeSteps[0].id);\r\n }\r\n } else {\r\n setCurrentStepId(activeSteps[0].id);\r\n }\r\n setIsLoading(false);\r\n }\r\n }, [activeSteps, currentStepId, initialStepId]);\r\n \r\n // --- Optimization: Stable State Reference ---\r\n // We hold all \"changing\" values in a ref so actions can remain stable\r\n const stateRef = useRef({\r\n config,\r\n stepsMap,\r\n activeSteps,\r\n activeStepsIndexMap,\r\n visitedSteps,\r\n completedSteps,\r\n persistenceMode,\r\n persistenceAdapter,\r\n currentStepId\r\n });\r\n\r\n // Update ref on every render - this is fast\r\n stateRef.current = {\r\n config,\r\n stepsMap,\r\n activeSteps,\r\n activeStepsIndexMap,\r\n visitedSteps,\r\n completedSteps,\r\n persistenceMode,\r\n persistenceAdapter,\r\n currentStepId\r\n };\r\n\r\n // Derived state\r\n const currentStep = useMemo(\r\n () => stepsMap.get(currentStepId as StepId) || null,\r\n [stepsMap, currentStepId]\r\n );\r\n const currentStepIndex = useMemo(\r\n () => activeStepsIndexMap.get(currentStepId as StepId) ?? -1,\r\n [activeStepsIndexMap, currentStepId]\r\n );\r\n const isFirstStep = currentStepIndex === 0;\r\n const isLastStep = currentStepIndex === activeSteps.length - 1;\r\n\r\n // Constants\r\n const META_KEY = \"__wizzard_meta__\";\r\n\r\n // Hydration Helper\r\n // Hydration Helper\r\n const hydrate = useCallback(() => {\r\n setIsLoading(true);\r\n const { persistenceAdapter, config } = stateRef.current;\r\n\r\n const metaFn = persistenceAdapter.getStep<{\r\n currentStepId: string;\r\n visited: string[];\r\n completed: string[];\r\n }>(META_KEY);\r\n\r\n if (metaFn) {\r\n if (metaFn.currentStepId) setCurrentStepId(metaFn.currentStepId as StepId);\r\n if (metaFn.visited) setVisitedSteps(new Set(metaFn.visited as StepId[]));\r\n if (metaFn.completed) setCompletedSteps(new Set(metaFn.completed as StepId[]));\r\n }\r\n\r\n const loadedData: Partial<T> = {};\r\n config.steps.forEach((step) => {\r\n const stepData = persistenceAdapter.getStep(step.id);\r\n if (stepData) {\r\n Object.assign(loadedData, stepData);\r\n }\r\n });\r\n\r\n if (Object.keys(loadedData).length > 0) {\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const newData = { ...currentData, ...loadedData };\r\n storeRef.current.update(newData);\r\n }\r\n setIsLoading(false);\r\n }, []); // Empty dependency array!\r\n\r\n useEffect(() => {\r\n hydrate();\r\n }, [hydrate]);\r\n\r\n\r\n // Save logic stabilized\r\n const saveData = useCallback(\r\n (mode: PersistenceMode, stepId: StepId, data: any) => {\r\n const { stepsMap, persistenceAdapter, persistenceMode: globalMode } = stateRef.current;\r\n const stepConfig = stepsMap.get(stepId);\r\n const stepAdapter = stepConfig?.persistenceAdapter;\r\n const stepMode = stepConfig?.persistenceMode;\r\n const adapterToUse = stepAdapter || persistenceAdapter;\r\n const modeToUse = stepMode || globalMode;\r\n\r\n if (mode === modeToUse || mode === \"manual\") {\r\n adapterToUse.saveStep(stepId, data);\r\n }\r\n },\r\n [] \r\n );\r\n\r\n // Debounce timeout for validation\r\n const validationTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\r\n null\r\n );\r\n\r\n const validateStep = useCallback(\r\n async (stepId: StepId, data: T): Promise<boolean> => {\r\n const { stepsMap } = stateRef.current;\r\n const step = stepsMap.get(stepId);\r\n if (!step || !step.validationAdapter) {\r\n return true;\r\n }\r\n\r\n const result = await step.validationAdapter.validate(data);\r\n\r\n if (result.isValid) {\r\n // Clear errors for this step\r\n // Optimized: Use Store Method\r\n const changed = storeRef.current.setStepErrors(stepId, null);\r\n \r\n if (changed) {\r\n setAllErrorsState(storeRef.current.getSnapshot().errors);\r\n setErrorSteps((prev) => {\r\n const next = new Set(prev);\r\n next.delete(stepId);\r\n return next;\r\n });\r\n }\r\n return true;\r\n } else {\r\n // Set errors for this step\r\n // Optimized: Use Store Method\r\n storeRef.current.setStepErrors(stepId, result.errors || null);\r\n setAllErrorsState(storeRef.current.getSnapshot().errors);\r\n \r\n setErrorSteps((prev) => {\r\n const next = new Set(prev);\r\n next.add(stepId);\r\n return next;\r\n });\r\n return false;\r\n }\r\n },\r\n []\r\n );\r\n\r\n // Actions stabilized with useCallback\r\n const setStepData = useCallback(\r\n (stepId: StepId, data: any) => {\r\n const { persistenceMode } = stateRef.current;\r\n const prevData = storeRef.current.getSnapshot().data;\r\n const newData = { ...prevData, ...data };\r\n\r\n storeRef.current.update(newData);\r\n\r\n const stepConfig = stateRef.current.stepsMap.get(stepId as StepId);\r\n const effectiveMode = stepConfig?.persistenceMode || persistenceMode;\r\n\r\n if (effectiveMode === \"onChange\") {\r\n saveData(\"onChange\", stepId, newData);\r\n }\r\n },\r\n [saveData]\r\n );\r\n\r\n const setData = useCallback(\r\n (path: string, value: any, options?: { debounceValidation?: number }) => {\r\n const { persistenceMode, stepsMap } = stateRef.current;\r\n const prevData = storeRef.current.getSnapshot().data;\r\n \r\n const currentValue = getByPath(prevData, path);\r\n if (currentValue === value) return;\r\n\r\n const newData = setByPath(prevData, path, value);\r\n\r\n // --- Batching Strategy: Update Store First ---\r\n storeRef.current.update(newData);\r\n \r\n const activeStepId = stateRef.current.currentStepId;\r\n const stepConfig = stepsMap.get(activeStepId as StepId);\r\n\r\n // 4. Clear Error on Input (UX Improvement + Optimization)\r\n if (activeStepId) {\r\n const wasDeleted = storeRef.current.deleteError(activeStepId, path);\r\n if (wasDeleted) {\r\n // Check if step is now clean to update errorSteps\r\n if (!storeRef.current.errorsMap.has(activeStepId)) {\r\n setErrorSteps(prev => {\r\n const next = new Set(prev);\r\n next.delete(activeStepId);\r\n return next;\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Sync React state last - only for errors to update errorSteps\r\n if (activeStepId && storeRef.current.getSnapshot().errors[activeStepId]) {\r\n startTransition(() => {\r\n setAllErrorsState(storeRef.current.getSnapshot().errors);\r\n });\r\n }\r\n\r\n // Determine Validation Mode\r\n const { config } = stateRef.current;\r\n const mode = stepConfig?.validationMode ?? config.validationMode ?? 'onStepChange';\r\n\r\n // 3. Conditional Validation Logic\r\n if (mode === 'onChange') {\r\n if (options?.debounceValidation) {\r\n if (validationTimeoutRef.current)\r\n clearTimeout(validationTimeoutRef.current);\r\n validationTimeoutRef.current = setTimeout(() => {\r\n try {\r\n if (activeStepId) {\r\n validateStep(activeStepId as StepId, newData).catch((err) => {\r\n console.error(\"[Wizard] Debounced validation failed:\", err);\r\n });\r\n }\r\n } catch (e) {\r\n console.error(\"[Wizard] Error starting validation:\", e);\r\n }\r\n }, options.debounceValidation);\r\n } else {\r\n if (activeStepId) validateStep(activeStepId as StepId, newData);\r\n }\r\n } \r\n\r\n const effectivePersistenceMode = stepConfig?.persistenceMode ?? persistenceMode;\r\n if (effectivePersistenceMode === \"onChange\" && activeStepId) {\r\n saveData(\"onChange\", activeStepId as StepId, newData);\r\n }\r\n },\r\n [saveData, validateStep]\r\n );\r\n\r\n const updateData = useCallback(\r\n (data: Partial<T>, options?: { replace?: boolean; persist?: boolean }) => {\r\n const { config } = stateRef.current;\r\n const prevData = storeRef.current.getSnapshot().data;\r\n const newData = options?.replace ? (data as T) : { ...prevData, ...data };\r\n\r\n storeRef.current.update(newData);\r\n\r\n if (options?.persist) {\r\n config.steps.forEach((step) => {\r\n saveData(\"manual\", step.id, newData);\r\n });\r\n }\r\n },\r\n [saveData]\r\n );\r\n\r\n const getData = useCallback((path: string, defaultValue?: any) => {\r\n return getByPath(storeRef.current.getSnapshot().data, path, defaultValue);\r\n }, []);\r\n\r\n // Action: Handle specific field change (helper)\r\n const handleStepChange = useCallback(\r\n (field: string, value: any) => {\r\n const { currentStepId } = stateRef.current;\r\n if (!currentStepId) return;\r\n setData(field, value);\r\n },\r\n [setData]\r\n );\r\n\r\n const validateAll = useCallback(async (): Promise<{\r\n isValid: boolean;\r\n errors: Record<string, Record<string, string>>;\r\n }> => {\r\n const { activeSteps } = stateRef.current;\r\n \r\n // Optimization: Parallel validation\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const validationResults = await Promise.all(\r\n activeSteps.map((step: IStepConfig<any, T, StepId>) => validateStep(step.id, currentData))\r\n );\r\n \r\n const isValid = validationResults.every(Boolean);\r\n const finalErrors = storeRef.current.getSnapshot().errors;\r\n return { isValid, errors: finalErrors };\r\n }, [validateStep]);\r\n\r\n const goToStep = useCallback(\r\n async (stepId: StepId): Promise<boolean> => {\r\n const { \r\n activeStepsIndexMap,\r\n currentStepId, \r\n config, \r\n persistenceMode, \r\n visitedSteps, \r\n completedSteps, \r\n persistenceAdapter,\r\n stepsMap\r\n } = stateRef.current;\r\n\r\n const targetIndex = activeStepsIndexMap.get(stepId) ?? -1;\r\n if (targetIndex === -1) return false;\r\n\r\n const currentData = storeRef.current.getSnapshot().data;\r\n const currentStepIndex = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\r\n const currentStep = stepsMap.get(currentStepId as StepId);\r\n\r\n if (targetIndex > currentStepIndex) {\r\n const shouldValidate =\r\n currentStep?.autoValidate ?? config.autoValidate ?? false;\r\n if (shouldValidate && currentStepId) {\r\n const isValid = await validateStep(currentStepId as StepId, currentData);\r\n if (!isValid) return false;\r\n }\r\n }\r\n\r\n if (currentStep && currentStepId) {\r\n const effectivePersistenceMode = currentStep.persistenceMode ?? persistenceMode;\r\n if (effectivePersistenceMode === \"onStepChange\") {\r\n saveData(\"onStepChange\", currentStepId as StepId, currentData);\r\n }\r\n }\r\n\r\n const nextVisited = new Set(visitedSteps);\r\n if (currentStepId) nextVisited.add(currentStepId as StepId);\r\n \r\n setVisitedSteps(nextVisited);\r\n setCurrentStepId(stepId);\r\n\r\n if (persistenceMode !== \"manual\") {\r\n persistenceAdapter.saveStep(META_KEY, {\r\n currentStepId: stepId,\r\n visited: Array.from(nextVisited),\r\n completed: Array.from(completedSteps),\r\n });\r\n }\r\n\r\n // Lifecycle Callback\r\n if (config.onStepChange) {\r\n config.onStepChange(currentStepId || null, stepId, currentData); // Call hook\r\n }\r\n\r\n window.scrollTo(0, 0);\r\n return true;\r\n },\r\n [saveData, validateStep]\r\n );\r\n \r\n const goToNextStep = useCallback(async () => {\r\n const { activeSteps, activeStepsIndexMap, currentStepId, completedSteps, persistenceMode } = stateRef.current;\r\n const currentStepIndex = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\r\n \r\n if (currentStepIndex === -1 || currentStepIndex === activeSteps.length - 1) return;\r\n \r\n const nextStep = activeSteps[currentStepIndex + 1];\r\n if (nextStep) {\r\n const success = await goToStep(nextStep.id);\r\n if (success) {\r\n const nextCompleted = new Set(completedSteps).add(currentStepId as StepId);\r\n setCompletedSteps(nextCompleted);\r\n\r\n if (persistenceMode !== \"manual\") {\r\n persistenceAdapter.saveStep(META_KEY, {\r\n currentStepId: nextStep.id,\r\n visited: Array.from(new Set(visitedSteps).add(currentStepId as StepId)),\r\n completed: Array.from(nextCompleted),\r\n });\r\n }\r\n }\r\n }\r\n }, [goToStep]); // Only depends on goToStep (which is stable)\r\n\r\n const goToPrevStep = useCallback(() => {\r\n const { activeSteps, activeStepsIndexMap, currentStepId } = stateRef.current;\r\n const currentStepIndex = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\r\n if (currentStepIndex <= 0) return;\r\n const prevStep = activeSteps[currentStepIndex - 1];\r\n if (prevStep) {\r\n goToStep(prevStep.id);\r\n }\r\n }, [goToStep]);\r\n\r\n const clearStorage = useCallback(() => {\r\n stateRef.current.persistenceAdapter.clear();\r\n }, []);\r\n\r\n const save = useCallback(\r\n (stepIds?: StepId | StepId[] | boolean) => {\r\n const { config, currentStepId } = stateRef.current;\r\n const data = storeRef.current.getSnapshot().data;\r\n\r\n if (stepIds === true) {\r\n config.steps.forEach((step) => {\r\n saveData(\"manual\", step.id, data);\r\n });\r\n return;\r\n }\r\n\r\n if (!stepIds) {\r\n if (currentStepId) {\r\n saveData(\"manual\", currentStepId as StepId, data);\r\n }\r\n return;\r\n }\r\n\r\n const ids = Array.isArray(stepIds) ? stepIds : [stepIds];\r\n ids.forEach((id) => {\r\n saveData(\"manual\", id, data);\r\n });\r\n },\r\n [saveData]\r\n );\r\n\r\n // Split values\r\n const stateValue = useMemo<IWizardState<T, StepId>>(\r\n () => ({\r\n currentStep,\r\n currentStepIndex,\r\n isFirstStep,\r\n isLastStep,\r\n isLoading,\r\n isPending,\r\n activeSteps,\r\n visitedSteps,\r\n completedSteps,\r\n errorSteps,\r\n store: storeRef.current,\r\n }),\r\n [\r\n currentStep,\r\n currentStepIndex,\r\n isFirstStep,\r\n isLastStep,\r\n isLoading,\r\n isPending,\r\n activeSteps,\r\n visitedSteps,\r\n completedSteps,\r\n errorSteps,\r\n ]\r\n );\r\n\r\n const actionsValue = useMemo<IWizardActions<StepId>>(\r\n () => ({\r\n goToNextStep,\r\n goToPrevStep,\r\n goToStep,\r\n setStepData: setStepData as (stepId: StepId, data: unknown) => void,\r\n handleStepChange,\r\n validateStep: (sid: StepId) =>\r\n validateStep(sid, storeRef.current.getSnapshot().data),\r\n validateAll,\r\n save,\r\n clearStorage,\r\n setData,\r\n updateData,\r\n getData,\r\n }),\r\n [\r\n goToNextStep,\r\n goToPrevStep,\r\n goToStep,\r\n setStepData,\r\n handleStepChange,\r\n validateStep,\r\n validateAll,\r\n save,\r\n clearStorage,\r\n setData,\r\n updateData,\r\n getData,\r\n ]\r\n );\r\n\r\n return (\r\n <WizardStateContext.Provider value={stateValue}>\r\n <WizardActionsContext.Provider value={actionsValue}>\r\n {children}\r\n </WizardActionsContext.Provider>\r\n </WizardStateContext.Provider>\r\n );\r\n}\r\n\r\nexport function useWizardState<T = unknown, StepId extends string = string>(): IWizardState<T, StepId> {\r\n const context = useContext(WizardStateContext);\r\n if (!context) {\r\n throw new Error(\"useWizardState must be used within a WizardProvider\");\r\n }\r\n return context as IWizardState<T, StepId>;\r\n}\r\n\r\nexport function useWizardValue<TValue = any>(\r\n path: string,\r\n options?: { isEqual?: (a: TValue, b: TValue) => boolean }\r\n): TValue {\r\n const { store } = useWizardState();\r\n const lastStateRef = useRef<any>(null);\r\n const lastValueRef = useRef<any>(null);\r\n const isEqual = options?.isEqual || Object.is;\r\n\r\n const getSnapshot = useCallback(() => {\r\n const fullState = store.getSnapshot();\r\n const data = fullState.data;\r\n if (data === lastStateRef.current) {\r\n return lastValueRef.current;\r\n }\r\n const value = getByPath(data, path) as TValue;\r\n \r\n // Memoization with custom equality\r\n if (lastValueRef.current !== undefined && isEqual(lastValueRef.current, value)) {\r\n lastStateRef.current = data;\r\n return lastValueRef.current;\r\n }\r\n\r\n lastStateRef.current = data;\r\n lastValueRef.current = value;\r\n return value;\r\n }, [store, path, isEqual]);\r\n\r\n return useSyncExternalStore(store.subscribe, getSnapshot);\r\n}\r\n\r\nexport function useWizardError(path: string): string | undefined {\r\n const { store } = useWizardState();\r\n const lastStateRef = useRef<any>(null);\r\n const lastValueRef = useRef<any>(null);\r\n\r\n const getSnapshot = useCallback(() => {\r\n const fullState = store.getSnapshot();\r\n const errors = fullState.errors;\r\n if (errors === lastStateRef.current) {\r\n return lastValueRef.current;\r\n }\r\n\r\n // Flatten errors from all steps or use a specific step?\r\n // Usually validation results are nested like { children: { \"0.name\": \"error\" } }\r\n // but the adapter flattened them to \"children.0.name\"\r\n let foundError: string | undefined;\r\n Object.values(errors).forEach((stepErrors) => {\r\n const typedStepErrors = stepErrors as Record<string, string>;\r\n if (typedStepErrors[path]) foundError = typedStepErrors[path];\r\n });\r\n\r\n lastStateRef.current = errors;\r\n lastValueRef.current = foundError;\r\n return foundError;\r\n }, [store, path]);\r\n\r\n return useSyncExternalStore(store.subscribe, getSnapshot);\r\n}\r\n\r\nexport function useWizardSelector<TSelected = any>(\r\n selector: (state: any) => TSelected,\r\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\r\n): TSelected {\r\n const { store } = useWizardState();\r\n const lastStateRef = useRef<any>(null);\r\n const lastResultRef = useRef<any>(null);\r\n const isEqual = options?.isEqual || Object.is;\r\n\r\n const getSnapshot = useCallback(() => {\r\n const fullState = store.getSnapshot();\r\n if (fullState === lastStateRef.current) {\r\n return lastResultRef.current;\r\n }\r\n \r\n const result = selector(fullState.data);\r\n \r\n // Memoization with custom equality\r\n if (lastResultRef.current !== null && isEqual(lastResultRef.current, result)) {\r\n lastStateRef.current = fullState;\r\n return lastResultRef.current;\r\n }\r\n\r\n lastStateRef.current = fullState;\r\n lastResultRef.current = result;\r\n return result;\r\n }, [store, selector, isEqual]);\r\n\r\n return useSyncExternalStore(store.subscribe, getSnapshot);\r\n}\r\n\r\nexport function useWizardActions<StepId extends string = string>(): IWizardActions<StepId> {\r\n const context = useContext(WizardActionsContext);\r\n if (!context) {\r\n throw new Error(\"useWizardActions must be used within a WizardProvider\");\r\n }\r\n return context as IWizardActions<StepId>;\r\n}\r\n\r\nexport function useWizardContext<T = any, StepId extends string = string>(): IWizardContext<T, StepId> & {\r\n store: WizardStore<T>;\r\n} {\r\n const state = useWizardState<T, StepId>();\r\n const actions = useWizardActions<StepId>();\r\n\r\n // Backward compatibility: subscribe to everything\r\n const wizardData = useWizardSelector<T>((s) => s as T);\r\n const allErrors = useSyncExternalStore(state.store.subscribe, () => state.store.getSnapshot().errors);\r\n\r\n return useMemo(\r\n () => ({\r\n ...state,\r\n ...actions,\r\n wizardData,\r\n allErrors,\r\n }),\r\n [state, actions, wizardData, allErrors]\r\n );\r\n}\r\n","import type { IPersistenceAdapter } from '../../types';\r\n\r\nexport class MemoryAdapter implements IPersistenceAdapter {\r\n private storage: Record<string, any> = {};\r\n\r\n saveStep<T>(stepId: string, data: T): void {\r\n this.storage[stepId] = data;\r\n }\r\n\r\n getStep<T>(stepId: string): T | undefined {\r\n return this.storage[stepId] as T;\r\n }\r\n\r\n clear(): void {\r\n this.storage = {};\r\n }\r\n}\r\n","/**\r\n * Cache for parsed path strings to avoid repetitive regex/split operations.\r\n * Key: path string (e.g., \"users[0].name\")\r\n * Value: array of keys (e.g., [\"users\", \"0\", \"name\"])\r\n */\r\nconst pathCache = new Map<string, string[]>();\r\n\r\n/**\r\n * Parses a string path into an array of keys using a cache.\r\n * Handles dot notation \"a.b\" and bracket notation \"a[0].b\".\r\n */\r\nexport function toPath(path: string): string[] {\r\n if (!path) return [];\r\n if (pathCache.has(path)) {\r\n return pathCache.get(path)!;\r\n }\r\n\r\n // Optimization: Regex only if brackets exist, otherwise fast split\r\n let keys: string[];\r\n if (path.includes('[')) {\r\n keys = path.replace(/\\[(\\d+)\\]/g, '.$1').split('.').filter(Boolean);\r\n } else {\r\n keys = path.split('.').filter(Boolean);\r\n }\r\n\r\n pathCache.set(path, keys);\r\n return keys;\r\n}\r\n\r\n/**\r\n * Retrieves a value from an object by path using cached key parsing.\r\n * Optimized for frequent access.\r\n */\r\nexport function getByPath(obj: any, path: string, defaultValue?: unknown): unknown {\r\n if (!path || obj === undefined || obj === null) return defaultValue ?? obj;\r\n\r\n // Fast path for direct property access (no dots/brackets)\r\n if (!path.includes('.') && !path.includes('[')) {\r\n const val = obj[path];\r\n return val !== undefined ? val : defaultValue;\r\n }\r\n\r\n const keys = toPath(path);\r\n let result = obj;\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n if (result === undefined || result === null) return defaultValue;\r\n result = result[keys[i]];\r\n }\r\n\r\n return result !== undefined ? result : defaultValue;\r\n}\r\n\r\n/**\r\n * Immutably sets a value in an object by path.\r\n * iterative implementation (stack-safe and usually faster).\r\n */\r\nexport function setByPath<T extends object>(obj: T, path: string, value: unknown): T {\r\n if (!path) return value as unknown as T;\r\n\r\n // Fast path: simple property set\r\n if (!path.includes('.') && !path.includes('[')) {\r\n // Optimization: Shallow copy mostly sufficient for root\r\n // If obj is Array, we must be careful, but typings say T extends object\r\n if (Array.isArray(obj)) {\r\n const copy = [...obj] as any;\r\n copy[path] = value;\r\n return copy;\r\n }\r\n return { ...obj, [path]: value };\r\n }\r\n\r\n const keys = toPath(path);\r\n if (keys.length === 0) return value as unknown as T;\r\n\r\n // Shallow clone root\r\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\r\n let current: any = root;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n const nextKey = keys[i + 1];\r\n\r\n // Determine if next level should be array or object\r\n // If key exists, we clone it. If not, we create based on nextKey type (numeric -> array)\r\n const existing = current[key];\r\n let nextLevel;\r\n\r\n if (existing && typeof existing === 'object') {\r\n nextLevel = Array.isArray(existing) ? [...existing] : { ...existing };\r\n } else {\r\n // Predict type based on next key: is it an integer?\r\n const isNumeric = /^\\d+$/.test(nextKey);\r\n nextLevel = isNumeric ? [] : {};\r\n }\r\n\r\n current[key] = nextLevel;\r\n current = nextLevel;\r\n }\r\n\r\n // Set final value\r\n const lastKey = keys[keys.length - 1];\r\n current[lastKey] = value;\r\n\r\n return root as T;\r\n}\r\n\r\n/**\r\n * Simple shallow equality check for objects and arrays.\r\n * Useful for preventing re-renders in selectors.\r\n */\r\nexport function shallowEqual(a: any, b: any): boolean {\r\n if (Object.is(a, b)) return true;\r\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\r\n return false;\r\n }\r\n\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n for (let i = 0; i < keysA.length; i++) {\r\n const key = keysA[i];\r\n if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport { useWizardContext } from \"../context/WizardContext\";\r\n\r\ninterface WizardStepRendererProps {\r\n /**\r\n * Optional wrapper component for each step.\r\n * Useful for adding animations (e.g., Framer Motion).\r\n */\r\n wrapper?: React.ComponentType<{ children: React.ReactNode; key: string }>;\r\n}\r\n\r\n/**\r\n * A declarative component that renders the current step based on the configuration.\r\n * It looks for the `component` property in your `steps` config.\r\n */\r\nexport const WizardStepRenderer: React.FC<WizardStepRendererProps> = ({\r\n wrapper: Wrapper,\r\n}) => {\r\n const { currentStep } = useWizardContext();\r\n\r\n const StepComponent = useMemo(() => {\r\n if (!currentStep?.component) return null;\r\n return currentStep.component;\r\n }, [currentStep]);\r\n\r\n if (!currentStep || !StepComponent) {\r\n return null;\r\n }\r\n\r\n const content = <StepComponent />;\r\n\r\n if (Wrapper) {\r\n return <Wrapper key={currentStep.id}>{content}</Wrapper>;\r\n }\r\n\r\n return content;\r\n};\r\n","import { useWizardContext } from '../context/WizardContext';\r\nimport type { IWizardContext } from '../types';\r\n\r\nexport const useWizard = <T = any, StepId extends string = string>(): IWizardContext<T, StepId> => {\r\n return useWizardContext<T, StepId>();\r\n};\r\n","import React from \"react\";\r\nimport {\r\n WizardProvider as BaseWizardProvider,\r\n useWizardContext as useBaseWizardContext,\r\n useWizardValue as useBaseWizardValue,\r\n useWizardSelector as useBaseWizardSelector,\r\n useWizardError as useBaseWizardError,\r\n useWizardActions as useBaseWizardActions,\r\n useWizardState as useBaseWizardState,\r\n} from \"./context/WizardContext\";\r\nimport { useWizard as useBaseWizard } from \"./hooks/useWizard\";\r\nimport type { IWizardConfig, IWizardContext, IStepConfig } from \"./types\";\r\nimport type { Path, PathValue } from \"./utils/types\";\r\n\r\n/**\r\n * createWizardFactory\r\n *\r\n * Creates a strongly-typed set of Wizard components and hooks for a specific data schema.\r\n * This ensures full type safety across your entire wizard implementation without manual casting.\r\n *\r\n * @template TSchema The shape of your wizard's global data state\r\n */\r\nexport function createWizardFactory<TSchema extends Record<string, any>, StepId extends string = string>() {\r\n /**\r\n * Typed Provider\r\n */\r\n const WizardProvider = ({\r\n config,\r\n initialData,\r\n children,\r\n }: {\r\n config: IWizardConfig<TSchema, StepId>;\r\n initialData?: Partial<TSchema>;\r\n children: React.ReactNode;\r\n }) => {\r\n return (\r\n <BaseWizardProvider<TSchema, StepId>\r\n config={config}\r\n initialData={initialData as TSchema}\r\n >\r\n {children}\r\n </BaseWizardProvider>\r\n );\r\n };\r\n\r\n /**\r\n * Typed useWizard\r\n * Returns the full context with TSchema typed data and methods\r\n */\r\n const useWizard = (): IWizardContext<TSchema, StepId> => {\r\n return useBaseWizard<TSchema, StepId>();\r\n };\r\n\r\n /**\r\n * Typed useWizardContext\r\n * similar to useWizard but explicit about strict context usage\r\n */\r\n const useWizardContext = () => {\r\n return useBaseWizardContext<TSchema, StepId>();\r\n };\r\n\r\n /**\r\n * Typed useWizardValue\r\n * @param path Dot-notation path to the value\r\n */\r\n const useWizardValue = <P extends Path<TSchema>>(\r\n path: P,\r\n options?: { isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean }\r\n ): PathValue<TSchema, P> => {\r\n return useBaseWizardValue<PathValue<TSchema, P>>(path, options);\r\n };\r\n\r\n /**\r\n * Typed useWizardSelector\r\n * @param selector Function to select a slice of state\r\n */\r\n const useWizardSelector = <TSelected,>(\r\n selector: (state: TSchema) => TSelected,\r\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\r\n ): TSelected => {\r\n return useBaseWizardSelector<TSelected>(selector, options);\r\n };\r\n\r\n /**\r\n * Typed useWizardError\r\n * @param path Dot-notation path to check for errors\r\n */\r\n const useWizardError = <P extends Path<TSchema>>(\r\n path: P\r\n ): string | undefined => {\r\n return useBaseWizardError(path);\r\n };\r\n\r\n /**\r\n * Typed useWizardActions\r\n * No generic needed for actions usually, but we wrap it for consistency\r\n */\r\n const useWizardActions = () => {\r\n return useBaseWizardActions<StepId>();\r\n };\r\n\r\n /**\r\n * Typed useWizardState\r\n * Access to raw internal state if needed (advanced)\r\n */\r\n const useWizardState = () => {\r\n return useBaseWizardState<TSchema, StepId>();\r\n };\r\n\r\n /**\r\n * Helper to create a typed step configuration.\r\n * By using this helper, TypeScript can infer TStepData from the validationAdapter or other properties.\r\n */\r\n const createStep = <TStepData = unknown,>(\r\n config: IStepConfig<TStepData, TSchema, StepId>\r\n ) => config;\r\n\r\n return {\r\n WizardProvider,\r\n useWizard,\r\n useWizardContext,\r\n useWizardValue,\r\n useWizardSelector,\r\n useWizardError,\r\n useWizardActions,\r\n useWizardState,\r\n createStep,\r\n };\r\n}\r\n","import type { IPersistenceAdapter } from '../../types';\r\n\r\nexport class LocalStorageAdapter implements IPersistenceAdapter {\r\n private prefix: string;\r\n\r\n constructor(prefix: string = 'wizard_') {\r\n this.prefix = prefix;\r\n }\r\n\r\n private getKey(stepId: string): string {\r\n return `${this.prefix}${stepId}`;\r\n }\r\n\r\n saveStep<T>(stepId: string, data: T): void {\r\n if (typeof window === 'undefined') return;\r\n try {\r\n localStorage.setItem(this.getKey(stepId), JSON.stringify(data));\r\n } catch (error) {\r\n console.warn('LocalStorageAdapter: Failed to save step', error);\r\n }\r\n }\r\n\r\n getStep<T>(stepId: string): T | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n try {\r\n const item = localStorage.getItem(this.getKey(stepId));\r\n return item ? JSON.parse(item) : undefined;\r\n } catch (error) {\r\n console.warn('LocalStorageAdapter: Failed to get step', error);\r\n return undefined;\r\n }\r\n }\r\n\r\n clear(): void {\r\n if (typeof window === 'undefined') return;\r\n Object.keys(localStorage).forEach((key) => {\r\n if (key.startsWith(this.prefix)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n }\r\n}\r\n","import type { IValidatorAdapter, ValidationResult } from '../../types';\r\nimport type { ZodLikeSchema } from './internal-types';\r\n\r\nexport class ZodAdapter<T> implements IValidatorAdapter<T> {\r\n private schema: ZodLikeSchema<T>;\r\n\r\n constructor(schema: ZodLikeSchema<T>) {\r\n this.schema = schema;\r\n }\r\n\r\n async validate(data: unknown): Promise<ValidationResult> {\r\n const result = await this.schema.safeParseAsync(data as T);\r\n if (result.success) {\r\n return { isValid: true };\r\n }\r\n\r\n // Explicitly handle error case\r\n const errors: Record<string, string> = {};\r\n if (result.error) {\r\n result.error.issues.forEach((err) => {\r\n const path = err.path.join('.'); // nested.field\r\n errors[path] = err.message;\r\n });\r\n }\r\n return { isValid: false, errors };\r\n }\r\n}\r\n","import type { IValidatorAdapter, ValidationResult } from '../../types';\r\nimport type { YupLikeSchema, YupLikeError } from './internal-types';\r\n\r\nexport class YupAdapter<T> implements IValidatorAdapter<T> {\r\n private schema: YupLikeSchema<T>;\r\n\r\n constructor(schema: YupLikeSchema<T>) {\r\n this.schema = schema;\r\n }\r\n\r\n async validate(data: unknown): Promise<ValidationResult> {\r\n try {\r\n await this.schema.validate(data as T, { abortEarly: false });\r\n return { isValid: true };\r\n } catch (err) {\r\n if (err && typeof err === 'object' && 'inner' in err) {\r\n const yupError = err as YupLikeError;\r\n const errors: Record<string, string> = {};\r\n yupError.inner.forEach((error) => {\r\n if (error.path) {\r\n errors[error.path] = error.message;\r\n }\r\n });\r\n return { isValid: false, errors };\r\n }\r\n throw err;\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["persistenceAdapter","config","stepsMap","persistenceMode","currentStepId","activeSteps","activeStepsIndexMap","visitedSteps","completedSteps","currentStepIndex","currentStep","useMemo","jsx","useMemo","jsx","WizardProvider","useWizard","useWizardContext","useWizardValue","useWizardSelector","useWizardError","useWizardActions","useWizardState"]}