@wizzard-packages/react 0.1.1 → 0.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/context/WizardContext.tsx","../src/hooks/useWizard.ts","../src/factory.tsx","../src/components/WizardStepRenderer.tsx"],"sourcesContent":["export * from './factory';\nexport * from './context/WizardContext';\nexport * from './components/WizardStepRenderer';\nexport * from './hooks/useWizard';\nexport * from './types';\n\n// Re-export core for convenience and backward compatibility\nexport { WizardStore } from '@wizzard-packages/core';\nexport { loggerMiddleware } from '@wizzard-packages/middleware';\nexport type {\n IWizardState,\n IWizardActions,\n IWizardContext,\n IStepConfig,\n IWizardConfig,\n ValidationResult,\n IValidatorAdapter,\n PersistenceMode,\n WizardMiddleware,\n} from '@wizzard-packages/core';\n","import React, {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n useCallback,\n useSyncExternalStore,\n useRef,\n} from 'react';\nimport {\n type IWizardConfig,\n type IPersistenceAdapter,\n type IStepConfig,\n type IWizardContext,\n type IWizardState,\n type IWizardActions,\n type IWizardStore,\n type WizardEventHandler,\n type WizardEventName,\n WizardStore,\n getByPath,\n setByPath,\n} from '@wizzard-packages/core';\nimport { MemoryAdapter } from '@wizzard-packages/persistence';\n\nconst WizardStateContext = createContext<IWizardState<any, any> | undefined>(undefined);\nconst WizardActionsContext = createContext<IWizardActions<any> | undefined>(undefined);\nconst WizardStoreContext = createContext<IWizardStore<any, any> | undefined>(undefined);\n\n/**\n * Props for WizardProvider.\n */\nexport interface WizardProviderProps<T, StepId extends string> {\n config: IWizardConfig<T, StepId>;\n initialData?: T;\n initialStepId?: StepId;\n children: React.ReactNode;\n}\n\n/**\n * Component that provides the wizard context to its children.\n */\nexport function WizardProvider<T extends Record<string, any>, StepId extends string = string>({\n config,\n initialData,\n initialStepId,\n children,\n}: WizardProviderProps<T, StepId>) {\n const [localConfig, setLocalConfig] = useState<IWizardConfig<T, StepId>>(config);\n\n const storeRef = useRef<IWizardStore<T, StepId>>(null as unknown as IWizardStore<T, StepId>);\n\n if (!storeRef.current) {\n storeRef.current = new WizardStore<T, StepId>((initialData || {}) as T, config.middlewares);\n }\n\n const isInitialized = useRef(false);\n\n const persistenceAdapter = useMemo<IPersistenceAdapter>(() => {\n return localConfig.persistence?.adapter || new MemoryAdapter();\n }, [localConfig.persistence?.adapter]);\n\n const persistenceMode = localConfig.persistence?.mode || 'onStepChange';\n const META_KEY = '__wizzard_meta__';\n\n const snapshot = useSyncExternalStore<IWizardState<T, StepId>>(\n storeRef.current.subscribe,\n storeRef.current.getSnapshot\n );\n\n const {\n activeSteps,\n currentStepId,\n history,\n visitedSteps,\n completedSteps,\n data,\n errors: _errors,\n } = snapshot;\n\n const stepsMap = useMemo(() => {\n const map = new Map<StepId, IStepConfig<T, StepId>>();\n localConfig.steps.forEach((step: IStepConfig<T, StepId>) => map.set(step.id, step));\n return map;\n }, [localConfig.steps]);\n\n useEffect(() => {\n setLocalConfig(config);\n }, [config]);\n\n const activeStepsIndexMap = useMemo(() => {\n const map = new Map<StepId, number>();\n activeSteps.forEach((s: IStepConfig<T, StepId>, i: number) => map.set(s.id, i));\n return map;\n }, [activeSteps]);\n\n const stateRef = useRef({\n config: localConfig,\n stepsMap,\n activeSteps,\n activeStepsIndexMap,\n visitedSteps,\n completedSteps,\n persistenceMode,\n persistenceAdapter,\n currentStepId,\n history,\n });\n\n const validationDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n stateRef.current = {\n config: localConfig,\n stepsMap,\n activeSteps,\n activeStepsIndexMap,\n visitedSteps,\n completedSteps,\n persistenceMode,\n persistenceAdapter,\n currentStepId,\n history,\n };\n });\n\n useEffect(() => {\n return () => {\n if (validationDebounceRef.current) {\n clearTimeout(validationDebounceRef.current);\n }\n };\n }, []);\n\n const trackEvent = useCallback<WizardEventHandler<StepId>>(\n (name: WizardEventName, payload: any) => {\n localConfig.analytics?.onEvent(name as any, payload);\n },\n [localConfig.analytics]\n );\n\n const resolveActiveStepsHelper = useCallback(\n (data: T) => storeRef.current.resolveActiveSteps(data),\n []\n );\n\n const validateStep = useCallback((stepId: StepId) => storeRef.current.validateStep(stepId), []);\n\n const goToStep = useCallback(\n async (\n stepId: StepId,\n providedActiveSteps?: IStepConfig<T, StepId>[],\n options: { validate?: boolean } = { validate: true }\n ): Promise<boolean> => {\n return storeRef.current.goToStep(stepId, {\n validate: options.validate,\n providedActiveSteps: providedActiveSteps as any,\n });\n },\n []\n );\n\n const goToNextStep = useCallback(async () => {\n const { currentStepId } = stateRef.current;\n if (!currentStepId) return;\n\n const currentData = storeRef.current.getSnapshot().data;\n const step = stepsMap.get(currentStepId as StepId);\n\n const shouldVal = step?.autoValidate ?? localConfig.autoValidate ?? !!step?.validationAdapter;\n\n if (shouldVal) {\n const ok = await validateStep(currentStepId as StepId);\n if (!ok) return;\n }\n\n const resolvedSteps = await resolveActiveStepsHelper(currentData);\n const idx = resolvedSteps.findIndex((s: IStepConfig<T, StepId>) => s.id === currentStepId);\n\n if (idx !== -1 && idx < resolvedSteps.length - 1) {\n const nextStepId = resolvedSteps[idx + 1].id;\n const success = await goToStep(nextStepId as any, resolvedSteps as any, {\n validate: false,\n });\n if (success) {\n const currentSnapshot = storeRef.current.getSnapshot();\n if (!currentSnapshot.errorSteps.has(currentStepId as StepId)) {\n const nextComp = new Set(currentSnapshot.completedSteps);\n nextComp.add(currentStepId as StepId);\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextComp },\n });\n }\n }\n }\n }, [goToStep, resolveActiveStepsHelper, validateStep, stepsMap, localConfig]);\n\n const goToPrevStep = useCallback(async () => {\n const { currentStepId, activeSteps, activeStepsIndexMap } = stateRef.current;\n const idx = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\n if (idx > 0) await goToStep(activeSteps[idx - 1].id as any);\n }, [goToStep]);\n\n const handleStepDependencies = useCallback(\n (paths: string[], initialData: any) => {\n let currentData = { ...initialData };\n const allClearedPaths = new Set<string>();\n const { completedSteps, visitedSteps } = storeRef.current.getSnapshot();\n const nextComp = new Set(completedSteps);\n const nextVis = new Set(visitedSteps);\n let statusChanged = false;\n\n const processDependencies = (changedPaths: string[]) => {\n const newlyClearedPaths: string[] = [];\n\n localConfig.steps.forEach((step: IStepConfig<T, StepId>) => {\n const isDependent = step.dependsOn?.some((p: string) =>\n changedPaths.some(\n (path) => path === p || p.startsWith(path + '.') || path.startsWith(p + '.')\n )\n );\n\n if (isDependent) {\n if (nextComp.delete(step.id as StepId)) {\n statusChanged = true;\n }\n if (nextVis.delete(step.id as StepId)) {\n statusChanged = true;\n }\n\n if (step.clearData) {\n if (typeof step.clearData === 'function') {\n const patch = step.clearData(currentData, changedPaths);\n Object.keys(patch).forEach((key) => {\n if (currentData[key] !== patch[key]) {\n currentData[key] = patch[key];\n newlyClearedPaths.push(key);\n allClearedPaths.add(key);\n }\n });\n } else {\n const pathsToClear = Array.isArray(step.clearData)\n ? step.clearData\n : [step.clearData];\n pathsToClear.forEach((p: string) => {\n const val = getByPath(currentData, p);\n if (val !== undefined) {\n currentData = setByPath(currentData, p, undefined);\n newlyClearedPaths.push(p);\n allClearedPaths.add(p);\n }\n });\n }\n }\n }\n });\n\n if (newlyClearedPaths.length > 0) {\n processDependencies(newlyClearedPaths);\n }\n };\n\n processDependencies(paths);\n\n if (statusChanged) {\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextComp },\n });\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: nextVis },\n });\n }\n\n return {\n newData: currentData,\n hasClearing: allClearedPaths.size > 0,\n clearedPaths: Array.from(allClearedPaths),\n };\n },\n [localConfig.steps]\n );\n\n const setData = useCallback(\n (path: string, value: any, options?: { debounceValidation?: number }) => {\n const { stepsMap, currentStepId } = stateRef.current;\n const prevData = storeRef.current.getSnapshot().data;\n if (getByPath(prevData, path) === value) return;\n\n const baseData = setByPath(prevData, path, value);\n const { newData, hasClearing } = handleStepDependencies([path], baseData);\n\n if (!hasClearing) {\n storeRef.current.dispatch({\n type: 'SET_DATA',\n payload: {\n path,\n value,\n options: { ...options, __from_set_data__: true },\n },\n });\n } else {\n storeRef.current.dispatch({\n type: 'UPDATE_DATA',\n payload: {\n data: newData,\n options: { replace: true, __from_set_data__: true, path },\n },\n });\n }\n\n if (currentStepId) {\n storeRef.current.deleteError(currentStepId as StepId, path);\n const step = stepsMap.get(currentStepId as StepId);\n const mode = step?.validationMode || localConfig.validationMode || 'onStepChange';\n\n if (mode === 'onChange') {\n const debounceMs =\n options?.debounceValidation ?? localConfig.validationDebounceTime ?? 300;\n if (validationDebounceRef.current) {\n clearTimeout(validationDebounceRef.current);\n }\n validationDebounceRef.current = setTimeout(() => {\n validateStep(currentStepId as StepId);\n }, debounceMs);\n }\n }\n },\n [localConfig, validateStep, handleStepDependencies]\n );\n\n const updateData = useCallback(\n (data: Partial<T>, options?: { replace?: boolean; persist?: boolean }) => {\n const prev = storeRef.current.getSnapshot().data;\n const baseData = (options?.replace ? (data as T) : { ...prev, ...data }) as T;\n\n const { newData } = handleStepDependencies(Object.keys(data), baseData);\n\n storeRef.current.update(newData as T, Object.keys(data));\n if (options?.persist) {\n if (storeRef.current.save) {\n storeRef.current.save(storeRef.current.getSnapshot().currentStepId as StepId);\n }\n }\n },\n [handleStepDependencies]\n );\n\n const reset = useCallback(() => {\n storeRef.current.setInitialData(initialData || ({} as T));\n storeRef.current.update((initialData || {}) as T);\n storeRef.current.updateErrors({} as Record<StepId, Record<string, string>>);\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: new Set() },\n });\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: new Set() },\n });\n storeRef.current.dispatch({\n type: 'SET_ERROR_STEPS',\n payload: { steps: new Set() },\n });\n if (activeSteps.length > 0) {\n const startId = activeSteps[0].id;\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: startId as StepId },\n });\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [startId as StepId] },\n });\n } else {\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: '' as StepId },\n });\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [] },\n });\n }\n persistenceAdapter.clear();\n trackEvent('wizard_reset', { data: initialData } as any);\n }, [initialData, activeSteps, persistenceAdapter, trackEvent]);\n\n const stateValue = useMemo<IWizardState<T, StepId>>(\n () => ({\n ...snapshot,\n config: localConfig,\n }),\n [snapshot, localConfig]\n );\n\n const actionsValue = useMemo<IWizardActions<StepId>>(\n () => ({\n goToNextStep,\n goToPrevStep,\n goToStep: (sid: StepId, optionsOrUndefined?: any, thirdArg?: any) => {\n // Handle both signatures:\n // 1. goToStep(id, options)\n // 2. goToStep(id, undefined, options) - mistakenly used by user but likely legacy or internal leak\n\n let finalOptions = optionsOrUndefined;\n if (thirdArg && optionsOrUndefined === undefined) {\n finalOptions = thirdArg;\n }\n\n return goToStep(sid, undefined, finalOptions);\n },\n setStepData: (_stepId: StepId, data: any) => {\n const next = { ...storeRef.current.getSnapshot().data, ...data };\n storeRef.current.update(next as T, Object.keys(data));\n },\n handleStepChange: (f: string, v: any) => {\n if (stateRef.current.currentStepId) setData(f, v);\n },\n validateStep: (sid: StepId) => validateStep(sid),\n validateAll: async () => {\n storeRef.current.updateMeta({ isBusy: true });\n const data = storeRef.current.getSnapshot().data;\n const active = await resolveActiveStepsHelper(data);\n const results = await Promise.all(\n active.map((s: IStepConfig<T, StepId>) => validateStep(s.id as StepId))\n );\n storeRef.current.updateMeta({ isBusy: false });\n return {\n isValid: results.every(Boolean),\n errors: storeRef.current.getSnapshot().errors,\n };\n },\n save: (ids?: StepId | StepId[] | boolean) => {\n if (ids === true) {\n localConfig.steps.forEach((s: IStepConfig<T, StepId>) =>\n storeRef.current.save(s.id as StepId)\n );\n } else if (!ids) {\n storeRef.current.save();\n } else {\n (Array.isArray(ids) ? ids : [ids]).forEach((id) => storeRef.current.save(id as StepId));\n }\n },\n clearStorage: () => persistenceAdapter.clear(),\n reset,\n setData,\n updateData,\n getData: (p: string, d?: any) => getByPath(storeRef.current.getSnapshot().data, p, d),\n updateConfig: (nc: any) => {\n setLocalConfig((prev: IWizardConfig<T, StepId>) => ({ ...prev, ...nc }));\n },\n }),\n [\n goToNextStep,\n goToPrevStep,\n goToStep,\n validateStep,\n reset,\n setData,\n updateData,\n persistenceAdapter,\n localConfig,\n resolveActiveStepsHelper,\n ]\n );\n\n useEffect(() => {\n if (!isInitialized.current) {\n storeRef.current.injectPersistence(persistenceAdapter);\n storeRef.current.dispatch({\n type: 'INIT',\n payload: { data: initialData || ({} as T), config: localConfig as any },\n });\n storeRef.current.hydrate();\n isInitialized.current = true;\n } else {\n storeRef.current.updateMeta({ config: localConfig as any });\n }\n }, [initialData, localConfig, persistenceAdapter]);\n\n useEffect(() => {\n let isMounted = true;\n const timeoutId = setTimeout(async () => {\n const resolved = await resolveActiveStepsHelper(data);\n if (isMounted) {\n storeRef.current.dispatch({\n type: 'SET_ACTIVE_STEPS',\n payload: { steps: resolved as any },\n });\n }\n }, 200);\n\n return () => {\n isMounted = false;\n clearTimeout(timeoutId);\n };\n }, [data, resolveActiveStepsHelper]);\n\n const hasHydratedRef = useRef(false);\n\n useEffect(() => {\n if (hasHydratedRef.current) return;\n hasHydratedRef.current = true;\n\n const meta = persistenceAdapter.getStep<{\n currentStepId: string;\n visited: string[];\n completed: string[];\n history: string[];\n }>(META_KEY);\n if (meta) {\n if (meta.currentStepId) {\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: meta.currentStepId as StepId },\n });\n }\n if (meta.visited)\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: new Set(meta.visited as StepId[]) },\n });\n if (meta.completed)\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: new Set(meta.completed as StepId[]) },\n });\n if (meta.history) {\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: meta.history as StepId[] },\n });\n }\n }\n\n const currentSnapshot = storeRef.current.getSnapshot();\n const currentActiveSteps = currentSnapshot.activeSteps;\n\n if (!currentSnapshot.currentStepId && currentActiveSteps.length > 0) {\n const startId =\n initialStepId &&\n currentActiveSteps.some((s: IStepConfig<T, StepId>) => s.id === initialStepId)\n ? initialStepId\n : currentActiveSteps[0].id;\n\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: startId as StepId },\n });\n\n if (currentSnapshot.history.length === 0) {\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [startId as StepId] },\n });\n }\n\n const currentVisited = new Set(currentSnapshot.visitedSteps);\n if (!currentVisited.has(startId as StepId)) {\n currentVisited.add(startId as StepId);\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: currentVisited },\n });\n }\n }\n\n if (currentActiveSteps.length > 0 && currentSnapshot.isLoading) {\n storeRef.current.updateMeta({ isLoading: false });\n }\n }, [activeSteps, initialStepId, persistenceAdapter]);\n\n return (\n <WizardStoreContext.Provider value={storeRef.current as any}>\n <WizardStateContext.Provider value={stateValue}>\n <WizardActionsContext.Provider value={actionsValue}>\n {children}\n </WizardActionsContext.Provider>\n </WizardStateContext.Provider>\n </WizardStoreContext.Provider>\n );\n}\n\n/**\n * Reads the full wizard state.\n */\nexport function useWizardState<T = unknown, StepId extends string = string>(): IWizardState<\n T,\n StepId\n> {\n const context = useContext(WizardStateContext);\n if (!context) throw new Error('useWizardState must be used within a WizardProvider');\n return context as IWizardState<T, StepId>;\n}\n\n/**\n * Subscribes to a specific data value by path.\n */\nexport function useWizardValue<TValue = any>(\n path: string,\n options?: { isEqual?: (a: TValue, b: TValue) => boolean }\n): TValue {\n const store = useContext(WizardStoreContext);\n if (!store) throw new Error('useWizardValue must be used within a WizardProvider');\n const lastStateRef = useRef<any>(null);\n const lastValueRef = useRef<any>(null);\n const getSnapshot = useCallback(() => {\n const data = store.getSnapshot().data;\n if (data === lastStateRef.current) return lastValueRef.current;\n const value = getByPath(data, path) as TValue;\n if (\n lastValueRef.current !== undefined &&\n (options?.isEqual || Object.is)(lastValueRef.current, value)\n ) {\n lastStateRef.current = data;\n return lastValueRef.current;\n }\n lastStateRef.current = data;\n lastValueRef.current = value;\n return value;\n }, [store, path, options?.isEqual]);\n return useSyncExternalStore(store.subscribe, getSnapshot);\n}\n\n/**\n * Returns the first error message for a path across all steps.\n */\nexport function useWizardError(path: string): string | undefined {\n const store = useContext(WizardStoreContext);\n if (!store) throw new Error('useWizardError must be used within a WizardProvider');\n const getSnapshot = useCallback(() => {\n const errors = store.getSnapshot().errors;\n for (const [_, stepErrors] of Object.entries(errors)) {\n const typed = stepErrors as Record<string, string>;\n if (typed[path]) return typed[path];\n }\n return undefined;\n }, [store, path]);\n return useSyncExternalStore(store.subscribe, getSnapshot);\n}\n\n/**\n * Selects a derived value from the wizard state with optional equality check.\n */\nexport function useWizardSelector<TSelected = any>(\n selector: (state: any) => TSelected,\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\n): TSelected {\n const store = useContext(WizardStoreContext);\n if (!store) throw new Error('useWizardSelector must be used within a WizardProvider');\n\n const lastResultRef = useRef<TSelected | null>(null);\n\n const getSnapshot = useCallback(() => {\n const full = store.getSnapshot();\n const res = selector(full);\n\n if (\n lastResultRef.current !== null &&\n (options?.isEqual || Object.is)(lastResultRef.current, res)\n ) {\n return lastResultRef.current;\n }\n\n lastResultRef.current = res;\n return res;\n }, [store, selector, options?.isEqual]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot);\n}\n\n/**\n * Returns the wizard actions API.\n */\nexport function useWizardActions<StepId extends string = string>(): IWizardActions<StepId> {\n const context = useContext(WizardActionsContext);\n if (!context) throw new Error('useWizardActions must be used within a WizardProvider');\n return context as IWizardActions<StepId>;\n}\n\n/**\n * Returns combined wizard state, actions, and derived errors.\n */\nexport function useWizardContext<T = any, StepId extends string = string>(): IWizardContext<\n T,\n StepId\n> {\n const state = useWizardState<T, StepId>();\n const actions = useWizardActions<StepId>();\n const store = useContext(WizardStoreContext) as IWizardStore<T, StepId>;\n const data = useWizardSelector((s: IWizardState<T, StepId>) => s.data);\n const allErrors = useWizardSelector((s: IWizardState<T, StepId>) => s.errors);\n const errors = useMemo(() => {\n const flat: Record<string, string> = {};\n Object.values(allErrors).forEach((stepErrors) => {\n Object.assign(flat, stepErrors as Record<string, string>);\n });\n return flat;\n }, [allErrors]);\n\n const { data: _d, errors: _e, ...stateProps } = state as any;\n return useMemo(\n () => ({\n ...stateProps,\n ...actions,\n data,\n allErrors,\n errors,\n store,\n }),\n [stateProps, actions, data, allErrors, errors, store]\n ) as IWizardContext<T, StepId>;\n}\n","import { useWizardContext } from '../context/WizardContext';\nimport type { IWizardContext } from '../types';\n\n/**\n * Alias for useWizardContext.\n */\nexport const useWizard = <T = any, StepId extends string = string>(): IWizardContext<T, StepId> => {\n return useWizardContext<T, StepId>();\n};\n","import React from 'react';\nimport {\n WizardProvider as BaseWizardProvider,\n useWizardContext as useBaseWizardContext,\n useWizardValue as useBaseWizardValue,\n useWizardSelector as useBaseWizardSelector,\n useWizardError as useBaseWizardError,\n useWizardActions as useBaseWizardActions,\n useWizardState as useBaseWizardState,\n} from './context/WizardContext';\nimport { useWizard as useBaseWizard } from './hooks/useWizard';\nimport type { IWizardConfig, IWizardContext, IStepConfig, Path, PathValue } from '@wizzard-packages/core';\n\n/**\n * createWizardFactory\n *\n * Creates a strongly-typed set of Wizard components and hooks for a specific data schema.\n *\n * @template TSchema The shape of your wizard's global data state\n */\nexport function createWizardFactory<\n TSchema extends Record<string, any>,\n StepId extends string = string,\n>() {\n const WizardProvider = ({\n config,\n initialData,\n children,\n }: {\n config: IWizardConfig<TSchema, StepId>;\n initialData?: Partial<TSchema>;\n children: React.ReactNode;\n }) => {\n return (\n <BaseWizardProvider<TSchema, StepId> config={config} initialData={initialData as TSchema}>\n {children}\n </BaseWizardProvider>\n );\n };\n\n const useWizard = (): IWizardContext<TSchema, StepId> => {\n return useBaseWizard<TSchema, StepId>() as any;\n };\n\n const useWizardContext = () => {\n return useBaseWizardContext<TSchema, StepId>() as any;\n };\n\n const useWizardValue = <P extends Path<TSchema>>(\n path: P,\n options?: {\n isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean;\n }\n ): PathValue<TSchema, P> => {\n return useBaseWizardValue<PathValue<TSchema, P>>(path as string, options);\n };\n\n const useWizardSelector = <TSelected,>(\n selector: (state: IWizardContext<TSchema, StepId>) => TSelected,\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\n ): TSelected => {\n return useBaseWizardSelector<TSelected>(selector as any, options);\n };\n\n const useWizardError = <P extends Path<TSchema>>(path: P): string | undefined => {\n return useBaseWizardError(path as string);\n };\n\n const useWizardActions = () => {\n return useBaseWizardActions<StepId>();\n };\n\n const useWizardState = () => {\n return useBaseWizardState<TSchema, StepId>();\n };\n\n const useBreadcrumbs = () => {\n return useBaseWizardState<TSchema, StepId>().breadcrumbs;\n };\n\n const createStep = (config: IStepConfig<TSchema, StepId>) => config;\n\n return {\n WizardProvider,\n useWizard,\n useWizardContext,\n useWizardValue,\n useWizardSelector,\n useWizardError,\n useWizardActions,\n useWizardState,\n useBreadcrumbs,\n createStep,\n };\n}\n","import React, { useMemo, Suspense } from 'react';\nimport { useWizardContext } from '../context/WizardContext';\n\n/**\n * Props for rendering the current step component.\n */\nexport interface WizardStepRendererProps {\n wrapper?: React.ComponentType<{ children: React.ReactNode; key: string }>;\n fallback?: React.ReactNode;\n}\n\n/**\n * Renders the active step component with optional wrapper and suspense fallback.\n */\nexport const WizardStepRenderer: React.FC<WizardStepRendererProps> = ({\n wrapper: Wrapper,\n fallback = null,\n}) => {\n const { currentStep } = useWizardContext();\n\n const StepComponent = useMemo(() => {\n if (!currentStep?.component) return null;\n return currentStep.component;\n }, [currentStep]);\n\n if (!currentStep || !StepComponent) {\n return null;\n }\n\n const content = (\n <Suspense fallback={fallback}>\n <StepComponent />\n </Suspense>\n );\n\n if (Wrapper) {\n return <Wrapper key={currentStep.id}>{content}</Wrapper>;\n }\n\n return content;\n};\n"],"mappings":"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","names":["data","currentStepId","activeSteps","activeStepsIndexMap","initialData","completedSteps","visitedSteps","stepsMap","import_jsx_runtime","WizardProvider","useWizard","useWizardContext","useWizardValue","useWizardSelector","useWizardError","useWizardActions","useWizardState","import_react","import_jsx_runtime","import_core"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/context/WizardContext.tsx","../src/internal/dependencies.ts","../src/hooks/useWizard.ts","../src/factory.tsx","../src/components/WizardStepRenderer.tsx","../src/store.ts"],"sourcesContent":["export * from './factory';\nexport * from './context/WizardContext';\nexport * from './components/WizardStepRenderer';\nexport * from './hooks/useWizard';\nexport * from './store';\nexport * from './types';\n\n// Re-export core for convenience and backward compatibility\nexport { WizardStore } from '@wizzard-packages/core';\nexport { loggerMiddleware } from '@wizzard-packages/middleware';\nexport type {\n IWizardState,\n IWizardActions,\n IWizardContext,\n IStepConfig,\n IWizardConfig,\n ValidationResult,\n IValidatorAdapter,\n PersistenceMode,\n WizardMiddleware,\n} from '@wizzard-packages/core';\n","import React, {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n useCallback,\n useSyncExternalStore,\n useRef,\n} from 'react';\nimport {\n type IWizardConfig,\n type IPersistenceAdapter,\n type IStepConfig,\n type Path,\n type PathValue,\n type IWizardContext,\n type IWizardState,\n type IWizardActions,\n type IWizardStore,\n type WizardEventHandler,\n type WizardEventName,\n WizardStore,\n getByPath,\n setByPath,\n} from '@wizzard-packages/core';\nimport { MemoryAdapter } from '@wizzard-packages/persistence';\nimport { applyStepDependencies } from '../internal/dependencies';\n\nconst UNSET = Symbol('wizard_unset');\n\nconst shallowEqual = (a: Record<string, any> | null, b: Record<string, any> | null) => {\n if (a === b) return true;\n if (!a || !b) return false;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.is(a[key], b[key])) return false;\n }\n return true;\n};\n\nconst WizardStateContext = createContext<IWizardState<any, any> | undefined>(undefined);\nconst WizardActionsContext = createContext<IWizardActions<any> | undefined>(undefined);\nconst WizardStoreContext = createContext<IWizardStore<any, any> | undefined>(undefined);\n\n/**\n * Props for WizardProvider.\n */\nexport interface WizardProviderProps<T, StepId extends string> {\n config: IWizardConfig<T, StepId>;\n initialData?: T;\n initialStepId?: StepId;\n children: React.ReactNode;\n}\n\n/**\n * Component that provides the wizard context to its children.\n */\nexport function WizardProvider<T extends Record<string, any>, StepId extends string = string>({\n config,\n initialData,\n initialStepId,\n children,\n}: WizardProviderProps<T, StepId>) {\n const [localConfig, setLocalConfig] = useState<IWizardConfig<T, StepId>>(config);\n\n const storeRef = useRef<IWizardStore<T, StepId>>(null as unknown as IWizardStore<T, StepId>);\n\n if (!storeRef.current) {\n storeRef.current = new WizardStore<T, StepId>((initialData || {}) as T, config.middlewares);\n }\n\n const isInitialized = useRef(false);\n\n const persistenceAdapter = useMemo<IPersistenceAdapter>(() => {\n return localConfig.persistence?.adapter || new MemoryAdapter();\n }, [localConfig.persistence?.adapter]);\n\n const persistenceMode = localConfig.persistence?.mode || 'onStepChange';\n const META_KEY = '__wizzard_meta__';\n\n const snapshot = useSyncExternalStore<IWizardState<T, StepId>>(\n storeRef.current.subscribe,\n storeRef.current.getSnapshot,\n storeRef.current.getSnapshot\n );\n\n const {\n activeSteps,\n currentStepId,\n history,\n visitedSteps,\n completedSteps,\n data,\n errors: _errors,\n } = snapshot;\n\n const stepsMap = useMemo(() => {\n const map = new Map<StepId, IStepConfig<T, StepId>>();\n localConfig.steps.forEach((step: IStepConfig<T, StepId>) => map.set(step.id, step));\n return map;\n }, [localConfig.steps]);\n\n useEffect(() => {\n setLocalConfig(config);\n }, [config]);\n\n const activeStepsIndexMap = useMemo(() => {\n const map = new Map<StepId, number>();\n activeSteps.forEach((s: IStepConfig<T, StepId>, i: number) => map.set(s.id, i));\n return map;\n }, [activeSteps]);\n\n const stateRef = useRef({\n config: localConfig,\n stepsMap,\n activeSteps,\n activeStepsIndexMap,\n visitedSteps,\n completedSteps,\n persistenceMode,\n persistenceAdapter,\n currentStepId,\n history,\n });\n\n const validationDebounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n stateRef.current = {\n config: localConfig,\n stepsMap,\n activeSteps,\n activeStepsIndexMap,\n visitedSteps,\n completedSteps,\n persistenceMode,\n persistenceAdapter,\n currentStepId,\n history,\n };\n });\n\n useEffect(() => {\n return () => {\n if (validationDebounceRef.current) {\n clearTimeout(validationDebounceRef.current);\n }\n };\n }, []);\n\n const trackEvent = useCallback<WizardEventHandler<StepId>>(\n (name: WizardEventName, payload: any) => {\n localConfig.analytics?.onEvent(name as any, payload);\n },\n [localConfig.analytics]\n );\n\n const resolveActiveStepsHelper = useCallback(\n (data: T) => storeRef.current.resolveActiveSteps(data),\n []\n );\n\n const validateStep = useCallback((stepId: StepId) => storeRef.current.validateStep(stepId), []);\n\n const goToStep = useCallback(\n async (\n stepId: StepId,\n providedActiveSteps?: IStepConfig<T, StepId>[],\n options: { validate?: boolean } = { validate: true }\n ): Promise<boolean> => {\n return storeRef.current.goToStep(stepId, {\n validate: options.validate,\n providedActiveSteps: providedActiveSteps as any,\n });\n },\n []\n );\n\n const goToNextStep = useCallback(async () => {\n const { currentStepId } = stateRef.current;\n if (!currentStepId) return;\n\n const currentData = storeRef.current.getSnapshot().data;\n const step = stepsMap.get(currentStepId as StepId);\n\n const shouldVal = step?.autoValidate ?? localConfig.autoValidate ?? !!step?.validationAdapter;\n\n if (shouldVal) {\n const ok = await validateStep(currentStepId as StepId);\n if (!ok) return;\n }\n\n const resolvedSteps = await resolveActiveStepsHelper(currentData);\n const idx = resolvedSteps.findIndex((s: IStepConfig<T, StepId>) => s.id === currentStepId);\n\n if (idx !== -1 && idx < resolvedSteps.length - 1) {\n const nextStepId = resolvedSteps[idx + 1].id;\n const success = await goToStep(nextStepId as any, resolvedSteps as any, {\n validate: false,\n });\n if (success) {\n const currentSnapshot = storeRef.current.getSnapshot();\n if (!currentSnapshot.errorSteps.has(currentStepId as StepId)) {\n const nextComp = new Set(currentSnapshot.completedSteps);\n nextComp.add(currentStepId as StepId);\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextComp },\n });\n }\n }\n }\n }, [goToStep, resolveActiveStepsHelper, validateStep, stepsMap, localConfig]);\n\n const goToPrevStep = useCallback(async () => {\n const { currentStepId, activeSteps, activeStepsIndexMap } = stateRef.current;\n const idx = activeStepsIndexMap.get(currentStepId as StepId) ?? -1;\n if (idx > 0) await goToStep(activeSteps[idx - 1].id as any);\n }, [goToStep]);\n\n const setData = useCallback(\n (path: string, value: any, options?: { debounceValidation?: number }) => {\n const { stepsMap, currentStepId } = stateRef.current;\n const prevData = storeRef.current.getSnapshot().data;\n if (getByPath(prevData, path) === value) return;\n\n const baseData = setByPath(prevData, path, value);\n const { newData, hasClearing, statusChanged, nextCompletedSteps, nextVisitedSteps } =\n applyStepDependencies(localConfig, storeRef.current, baseData, [path]);\n\n if (statusChanged) {\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextCompletedSteps },\n });\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: nextVisitedSteps },\n });\n }\n\n if (!hasClearing) {\n storeRef.current.dispatch({\n type: 'SET_DATA',\n payload: {\n path,\n value,\n options: { ...options, __from_set_data__: true },\n },\n });\n } else {\n storeRef.current.dispatch({\n type: 'UPDATE_DATA',\n payload: {\n data: newData,\n options: { replace: true, __from_set_data__: true, path },\n },\n });\n }\n\n if (currentStepId) {\n storeRef.current.deleteError(currentStepId as StepId, path);\n const step = stepsMap.get(currentStepId as StepId);\n const mode = step?.validationMode || localConfig.validationMode || 'onStepChange';\n\n if (mode === 'onChange') {\n const debounceMs =\n options?.debounceValidation ?? localConfig.validationDebounceTime ?? 300;\n if (validationDebounceRef.current) {\n clearTimeout(validationDebounceRef.current);\n }\n validationDebounceRef.current = setTimeout(() => {\n validateStep(currentStepId as StepId);\n }, debounceMs);\n }\n }\n },\n [localConfig, validateStep]\n );\n\n const updateData = useCallback(\n (data: Partial<T>, options?: { replace?: boolean; persist?: boolean }) => {\n const prev = storeRef.current.getSnapshot().data;\n const baseData = (options?.replace ? (data as T) : { ...prev, ...data }) as T;\n\n const { newData, statusChanged, nextCompletedSteps, nextVisitedSteps } =\n applyStepDependencies(localConfig, storeRef.current, baseData, Object.keys(data));\n\n if (statusChanged) {\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextCompletedSteps },\n });\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: nextVisitedSteps },\n });\n }\n\n storeRef.current.update(newData as T, Object.keys(data));\n if (options?.persist) {\n if (storeRef.current.save) {\n storeRef.current.save(storeRef.current.getSnapshot().currentStepId as StepId);\n }\n }\n },\n [localConfig]\n );\n\n const reset = useCallback(() => {\n storeRef.current.setInitialData(initialData || ({} as T));\n storeRef.current.update((initialData || {}) as T);\n storeRef.current.updateErrors({} as Record<StepId, Record<string, string>>);\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: new Set() },\n });\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: new Set() },\n });\n storeRef.current.dispatch({\n type: 'SET_ERROR_STEPS',\n payload: { steps: new Set() },\n });\n if (activeSteps.length > 0) {\n const startId = activeSteps[0].id;\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: startId as StepId },\n });\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [startId as StepId] },\n });\n } else {\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: '' as StepId },\n });\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [] },\n });\n }\n persistenceAdapter.clear();\n trackEvent('wizard_reset', { data: initialData } as any);\n }, [initialData, activeSteps, persistenceAdapter, trackEvent]);\n\n const stateValue = useMemo<IWizardState<T, StepId>>(\n () => ({\n ...snapshot,\n config: localConfig,\n }),\n [snapshot, localConfig]\n );\n\n const actionsValue = useMemo<IWizardActions<StepId>>(\n () => ({\n goToNextStep,\n goToPrevStep,\n goToStep: (sid: StepId, optionsOrUndefined?: any, thirdArg?: any) => {\n // Handle both signatures:\n // 1. goToStep(id, options)\n // 2. goToStep(id, undefined, options) - mistakenly used by user but likely legacy or internal leak\n\n let finalOptions = optionsOrUndefined;\n if (thirdArg && optionsOrUndefined === undefined) {\n finalOptions = thirdArg;\n }\n\n return goToStep(sid, undefined, finalOptions);\n },\n setStepData: (_stepId: StepId, data: any) => {\n const next = { ...storeRef.current.getSnapshot().data, ...data };\n storeRef.current.update(next as T, Object.keys(data));\n },\n handleStepChange: (f: string, v: any) => {\n if (stateRef.current.currentStepId) setData(f, v);\n },\n validateStep: (sid: StepId) => validateStep(sid),\n validateAll: async () => {\n storeRef.current.updateMeta({ isBusy: true });\n const data = storeRef.current.getSnapshot().data;\n const active = await resolveActiveStepsHelper(data);\n const results = await Promise.all(\n active.map((s: IStepConfig<T, StepId>) => validateStep(s.id as StepId))\n );\n storeRef.current.updateMeta({ isBusy: false });\n return {\n isValid: results.every(Boolean),\n errors: storeRef.current.getSnapshot().errors,\n };\n },\n save: (ids?: StepId | StepId[] | boolean) => {\n if (ids === true) {\n localConfig.steps.forEach((s: IStepConfig<T, StepId>) =>\n storeRef.current.save(s.id as StepId)\n );\n } else if (!ids) {\n storeRef.current.save();\n } else {\n (Array.isArray(ids) ? ids : [ids]).forEach((id) => storeRef.current.save(id as StepId));\n }\n },\n clearStorage: () => persistenceAdapter.clear(),\n reset,\n setData,\n updateData,\n getData: (p: string, d?: any) => getByPath(storeRef.current.getSnapshot().data, p, d),\n updateConfig: (nc: any) => {\n setLocalConfig((prev: IWizardConfig<T, StepId>) => ({ ...prev, ...nc }));\n },\n }),\n [\n goToNextStep,\n goToPrevStep,\n goToStep,\n validateStep,\n reset,\n setData,\n updateData,\n persistenceAdapter,\n localConfig,\n resolveActiveStepsHelper,\n ]\n );\n\n useEffect(() => {\n if (!isInitialized.current) {\n storeRef.current.injectPersistence(persistenceAdapter);\n storeRef.current.dispatch({\n type: 'INIT',\n payload: { data: initialData || ({} as T), config: localConfig as any },\n });\n storeRef.current.hydrate();\n isInitialized.current = true;\n } else {\n storeRef.current.updateMeta({ config: localConfig as any });\n }\n }, [initialData, localConfig, persistenceAdapter]);\n\n useEffect(() => {\n let isMounted = true;\n const timeoutId = setTimeout(async () => {\n const resolved = await resolveActiveStepsHelper(data);\n if (isMounted) {\n storeRef.current.dispatch({\n type: 'SET_ACTIVE_STEPS',\n payload: { steps: resolved as any },\n });\n }\n }, 200);\n\n return () => {\n isMounted = false;\n clearTimeout(timeoutId);\n };\n }, [data, resolveActiveStepsHelper]);\n\n const hasHydratedRef = useRef(false);\n\n useEffect(() => {\n if (hasHydratedRef.current) return;\n hasHydratedRef.current = true;\n\n const meta = persistenceAdapter.getStep<{\n currentStepId: string;\n visited: string[];\n completed: string[];\n history: string[];\n }>(META_KEY);\n if (meta) {\n if (meta.currentStepId) {\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: meta.currentStepId as StepId },\n });\n }\n if (meta.visited)\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: new Set(meta.visited as StepId[]) },\n });\n if (meta.completed)\n storeRef.current.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: new Set(meta.completed as StepId[]) },\n });\n if (meta.history) {\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: meta.history as StepId[] },\n });\n }\n }\n\n const currentSnapshot = storeRef.current.getSnapshot();\n const currentActiveSteps = currentSnapshot.activeSteps;\n\n if (!currentSnapshot.currentStepId && currentActiveSteps.length > 0) {\n const startId =\n initialStepId &&\n currentActiveSteps.some((s: IStepConfig<T, StepId>) => s.id === initialStepId)\n ? initialStepId\n : currentActiveSteps[0].id;\n\n storeRef.current.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: startId as StepId },\n });\n\n if (currentSnapshot.history.length === 0) {\n storeRef.current.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [startId as StepId] },\n });\n }\n\n const currentVisited = new Set(currentSnapshot.visitedSteps);\n if (!currentVisited.has(startId as StepId)) {\n currentVisited.add(startId as StepId);\n storeRef.current.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: currentVisited },\n });\n }\n }\n\n if (currentActiveSteps.length > 0 && currentSnapshot.isLoading) {\n storeRef.current.updateMeta({ isLoading: false });\n }\n }, [activeSteps, initialStepId, persistenceAdapter]);\n\n return (\n <WizardStoreContext.Provider value={storeRef.current as any}>\n <WizardStateContext.Provider value={stateValue}>\n <WizardActionsContext.Provider value={actionsValue}>\n {children}\n </WizardActionsContext.Provider>\n </WizardStateContext.Provider>\n </WizardStoreContext.Provider>\n );\n}\n\n/**\n * Reads the full wizard state.\n */\nexport function useWizardState<T = unknown, StepId extends string = string>(): IWizardState<\n T,\n StepId\n> {\n const context = useContext(WizardStateContext);\n if (!context) throw new Error('useWizardState must be used within a WizardProvider');\n return context as IWizardState<T, StepId>;\n}\n\n/**\n * Subscribes to a specific data value by path.\n */\nexport function useWizardValue<TValue = any>(\n path: string,\n options?: { isEqual?: (a: TValue, b: TValue) => boolean }\n): TValue {\n const store = useContext(WizardStoreContext);\n if (!store) throw new Error('useWizardValue must be used within a WizardProvider');\n const lastStateRef = useRef<any>(null);\n const lastValueRef = useRef<any>(UNSET);\n const getSnapshot = useCallback(() => {\n const data = store.getSnapshot().data;\n if (data === lastStateRef.current && lastValueRef.current !== UNSET) {\n return lastValueRef.current;\n }\n const value = getByPath(data, path) as TValue;\n if (\n lastValueRef.current !== UNSET &&\n (options?.isEqual || Object.is)(lastValueRef.current, value)\n ) {\n lastStateRef.current = data;\n return lastValueRef.current;\n }\n lastStateRef.current = data;\n lastValueRef.current = value;\n return value;\n }, [store, path, options?.isEqual]);\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\n/**\n * Returns a value and setter for a path (useState-like API).\n */\nexport function useWizardField<T, P extends Path<T>>(\n path: P,\n options?: { isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean }\n): [PathValue<T, P>, (value: PathValue<T, P>) => void] {\n const value = useWizardValue<PathValue<T, P>>(path as string, options);\n const { setData } = useWizardActions();\n const setValue = useCallback(\n (next: PathValue<T, P>) => {\n setData(path as string, next);\n },\n [setData, path]\n );\n\n return [value, setValue];\n}\n\n/**\n * Returns the first error message for a path across all steps.\n */\nexport function useWizardError(path: string): string | undefined {\n const store = useContext(WizardStoreContext);\n if (!store) throw new Error('useWizardError must be used within a WizardProvider');\n const getSnapshot = useCallback(() => {\n const errors = store.getSnapshot().errors;\n for (const [_, stepErrors] of Object.entries(errors)) {\n const typed = stepErrors as Record<string, string>;\n if (typed[path]) return typed[path];\n }\n return undefined;\n }, [store, path]);\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\n/**\n * Selects a derived value from the wizard state with optional equality check.\n */\nexport function useWizardSelector<TSelected = any>(\n selector: (state: any) => TSelected,\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\n): TSelected {\n const store = useContext(WizardStoreContext);\n if (!store) throw new Error('useWizardSelector must be used within a WizardProvider');\n\n const lastResultRef = useRef<TSelected | typeof UNSET>(UNSET);\n\n const getSnapshot = useCallback(() => {\n const full = store.getSnapshot();\n const res = selector(full);\n\n if (\n lastResultRef.current !== UNSET &&\n (options?.isEqual || Object.is)(lastResultRef.current, res)\n ) {\n return lastResultRef.current;\n }\n\n lastResultRef.current = res;\n return res;\n }, [store, selector, options?.isEqual]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\n/**\n * Returns the wizard actions API.\n */\nexport function useWizardActions<StepId extends string = string>(): IWizardActions<StepId> {\n const context = useContext(WizardActionsContext);\n if (!context) throw new Error('useWizardActions must be used within a WizardProvider');\n return context as IWizardActions<StepId>;\n}\n\n/**\n * Returns combined wizard state, actions, and derived errors.\n */\nexport function useWizardContext<T = any, StepId extends string = string>(): IWizardContext<\n T,\n StepId\n> {\n const state = useWizardState<T, StepId>();\n const actions = useWizardActions<StepId>();\n const store = useContext(WizardStoreContext) as IWizardStore<T, StepId>;\n const data = useWizardSelector((s: IWizardState<T, StepId>) => s.data);\n const allErrors = useWizardSelector((s: IWizardState<T, StepId>) => s.errors);\n const errors = useMemo(() => {\n const flat: Record<string, string> = {};\n Object.values(allErrors).forEach((stepErrors) => {\n Object.assign(flat, stepErrors as Record<string, string>);\n });\n return flat;\n }, [allErrors]);\n\n const { data: _d, errors: _e, ...stateProps } = state as any;\n return useMemo(\n () => ({\n ...stateProps,\n ...actions,\n data,\n allErrors,\n errors,\n store,\n }),\n [stateProps, actions, data, allErrors, errors, store]\n ) as IWizardContext<T, StepId>;\n}\n\n/**\n * Returns current step config.\n */\nexport function useWizardCurrentStep<T = any, StepId extends string = string>() {\n return useWizardSelector((s: IWizardState<T, StepId>) => s.currentStep);\n}\n\n/**\n * Returns active steps list.\n */\nexport function useWizardSteps<T = any, StepId extends string = string>() {\n return useWizardSelector((s: IWizardState<T, StepId>) => s.activeSteps);\n}\n\n/**\n * Returns frequently-used meta state with shallow equality.\n */\nexport function useWizardMeta<T = any, StepId extends string = string>() {\n return useWizardSelector(\n (s: IWizardState<T, StepId>) => ({\n currentStepId: s.currentStepId,\n currentStepIndex: s.currentStepIndex,\n isFirstStep: s.isFirstStep,\n isLastStep: s.isLastStep,\n isLoading: s.isLoading,\n isBusy: s.isBusy,\n isDirty: s.isDirty,\n progress: s.progress,\n activeStepsCount: s.activeStepsCount,\n goToStepResult: s.goToStepResult,\n }),\n { isEqual: shallowEqual }\n );\n}\n\n/**\n * Returns all errors by step (shallow-equal).\n */\nexport function useWizardAllErrors<T = any, StepId extends string = string>() {\n return useWizardSelector((s: IWizardState<T, StepId>) => s.errors, {\n isEqual: shallowEqual,\n });\n}\n\n/**\n * Returns flattened errors map (path -> message).\n */\nexport function useWizardFlatErrors<T = any, StepId extends string = string>() {\n const allErrors = useWizardAllErrors<T, StepId>();\n return useMemo(() => {\n const flat: Record<string, string> = {};\n Object.values(allErrors).forEach((stepErrors) => {\n Object.assign(flat, stepErrors as Record<string, string>);\n });\n return flat;\n }, [allErrors]);\n}\n","import {\n type IWizardConfig,\n type IWizardStore,\n type IStepConfig,\n getByPath,\n setByPath,\n} from '@wizzard-packages/core';\n\nexport interface StepDependenciesResult<T extends Record<string, any>, StepId extends string> {\n newData: T;\n hasClearing: boolean;\n clearedPaths: string[];\n statusChanged: boolean;\n nextCompletedSteps: Set<StepId>;\n nextVisitedSteps: Set<StepId>;\n}\n\nexport const applyStepDependencies = <T extends Record<string, any>, StepId extends string>(\n config: IWizardConfig<T, StepId>,\n store: IWizardStore<T, StepId>,\n baseData: T,\n changedPaths: string[]\n): StepDependenciesResult<T, StepId> => {\n let currentData = { ...baseData } as T;\n const allClearedPaths = new Set<string>();\n const snapshot = store.getSnapshot();\n const nextCompletedSteps = new Set(snapshot.completedSteps);\n const nextVisitedSteps = new Set(snapshot.visitedSteps);\n let statusChanged = false;\n\n const processDependencies = (paths: string[]) => {\n const newlyClearedPaths: string[] = [];\n\n config.steps.forEach((step: IStepConfig<T, StepId>) => {\n const isDependent = step.dependsOn?.some((p: string) =>\n paths.some((path) => path === p || p.startsWith(path + '.') || path.startsWith(p + '.'))\n );\n\n if (!isDependent) return;\n\n if (nextCompletedSteps.delete(step.id as StepId)) {\n statusChanged = true;\n }\n if (nextVisitedSteps.delete(step.id as StepId)) {\n statusChanged = true;\n }\n\n if (!step.clearData) return;\n\n if (typeof step.clearData === 'function') {\n const patch = step.clearData(currentData, paths);\n Object.keys(patch).forEach((key) => {\n if ((currentData as any)[key] !== (patch as any)[key]) {\n (currentData as any)[key] = (patch as any)[key];\n newlyClearedPaths.push(key);\n allClearedPaths.add(key);\n }\n });\n } else {\n const pathsToClear = Array.isArray(step.clearData) ? step.clearData : [step.clearData];\n pathsToClear.forEach((p: string) => {\n const val = getByPath(currentData, p);\n if (val !== undefined) {\n currentData = setByPath(currentData, p, undefined);\n newlyClearedPaths.push(p);\n allClearedPaths.add(p);\n }\n });\n }\n });\n\n if (newlyClearedPaths.length > 0) {\n processDependencies(newlyClearedPaths);\n }\n };\n\n processDependencies(changedPaths);\n\n return {\n newData: currentData,\n hasClearing: allClearedPaths.size > 0,\n clearedPaths: Array.from(allClearedPaths),\n statusChanged,\n nextCompletedSteps,\n nextVisitedSteps,\n };\n};\n","import { useWizardContext } from '../context/WizardContext';\nimport type { IWizardContext } from '../types';\n\n/**\n * Alias for useWizardContext.\n */\nexport const useWizard = <T = any, StepId extends string = string>(): IWizardContext<T, StepId> => {\n return useWizardContext<T, StepId>();\n};\n","import React from 'react';\nimport {\n WizardProvider as BaseWizardProvider,\n useWizardContext as useBaseWizardContext,\n useWizardValue as useBaseWizardValue,\n useWizardSelector as useBaseWizardSelector,\n useWizardError as useBaseWizardError,\n useWizardActions as useBaseWizardActions,\n useWizardState as useBaseWizardState,\n} from './context/WizardContext';\nimport { useWizard as useBaseWizard } from './hooks/useWizard';\nimport type {\n IWizardConfig,\n IWizardContext,\n IStepConfig,\n Path,\n PathValue,\n} from '@wizzard-packages/core';\nimport type { IWizardActionsTyped } from './types';\n\n/**\n * createWizardFactory\n *\n * Creates a strongly-typed set of Wizard components and hooks for a specific data schema.\n *\n * @template TSchema The shape of your wizard's global data state\n */\nexport function createWizardFactory<\n TSchema extends Record<string, any>,\n StepId extends string = string,\n>() {\n const WizardProvider = ({\n config,\n initialData,\n initialStepId,\n children,\n }: {\n config: IWizardConfig<TSchema, StepId>;\n initialData?: Partial<TSchema>;\n initialStepId?: StepId;\n children: React.ReactNode;\n }) => {\n return (\n <BaseWizardProvider<TSchema, StepId>\n config={config}\n initialData={initialData as TSchema}\n initialStepId={initialStepId}\n >\n {children}\n </BaseWizardProvider>\n );\n };\n\n const useWizard = (): IWizardContext<TSchema, StepId> => {\n return useBaseWizard<TSchema, StepId>() as any;\n };\n\n const useWizardContext = () => {\n return useBaseWizardContext<TSchema, StepId>() as any;\n };\n\n const useWizardValue = <P extends Path<TSchema>>(\n path: P,\n options?: {\n isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean;\n }\n ): PathValue<TSchema, P> => {\n return useBaseWizardValue<PathValue<TSchema, P>>(path as string, options);\n };\n\n const useWizardField = <P extends Path<TSchema>>(\n path: P,\n options?: {\n isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean;\n }\n ): [PathValue<TSchema, P>, (value: PathValue<TSchema, P>) => void] => {\n const value = useWizardValue(path, options);\n const { setData } = useWizardActions();\n return [value, (next) => setData(path, next)];\n };\n\n const useWizardSelector = <TSelected,>(\n selector: (state: IWizardContext<TSchema, StepId>) => TSelected,\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\n ): TSelected => {\n return useBaseWizardSelector<TSelected>(selector as any, options);\n };\n\n const useWizardError = <P extends Path<TSchema>>(path: P): string | undefined => {\n return useBaseWizardError(path as string);\n };\n\n const useWizardActions = () => {\n return useBaseWizardActions<StepId>() as IWizardActionsTyped<TSchema, StepId>;\n };\n\n const useWizardState = () => {\n return useBaseWizardState<TSchema, StepId>();\n };\n\n const useBreadcrumbs = () => {\n return useBaseWizardState<TSchema, StepId>().breadcrumbs;\n };\n\n const createStep = (config: IStepConfig<TSchema, StepId>) => config;\n\n return {\n WizardProvider,\n useWizard,\n useWizardContext,\n useWizardValue,\n useWizardField,\n useWizardSelector,\n useWizardError,\n useWizardActions,\n useWizardState,\n useBreadcrumbs,\n createStep,\n };\n}\n","import React, { useMemo, Suspense } from 'react';\nimport { useWizardContext } from '../context/WizardContext';\n\n/**\n * Props for rendering the current step component.\n */\nexport interface WizardStepRendererProps {\n wrapper?: React.ComponentType<{ children: React.ReactNode; key: string }>;\n fallback?: React.ReactNode;\n}\n\n/**\n * Renders the active step component with optional wrapper and suspense fallback.\n */\nexport const WizardStepRenderer: React.FC<WizardStepRendererProps> = ({\n wrapper: Wrapper,\n fallback = null,\n}) => {\n const { currentStep } = useWizardContext();\n\n const StepComponent = useMemo(() => {\n if (!currentStep?.component) return null;\n return currentStep.component;\n }, [currentStep]);\n\n if (!currentStep || !StepComponent) {\n return null;\n }\n\n const content = (\n <Suspense fallback={fallback}>\n <StepComponent />\n </Suspense>\n );\n\n if (Wrapper) {\n return <Wrapper key={currentStep.id}>{content}</Wrapper>;\n }\n\n return content;\n};\n","import { useCallback, useRef, useSyncExternalStore } from 'react';\nimport {\n type IWizardConfig,\n type IPersistenceAdapter,\n type IWizardState,\n type IWizardStore,\n type IStepConfig,\n type Path,\n type PathValue,\n WizardStore,\n getByPath,\n setByPath,\n} from '@wizzard-packages/core';\nimport { MemoryAdapter } from '@wizzard-packages/persistence';\nimport type { IWizardActionsTyped } from './types';\nimport { applyStepDependencies } from './internal/dependencies';\n\nconst UNSET = Symbol('wizard_store_unset');\nconst META_KEY = '__wizzard_meta__';\n\nexport interface CreateWizardStoreOptions<T, StepId extends string = string> {\n config: IWizardConfig<T, StepId>;\n initialData?: T;\n initialStepId?: StepId;\n}\n\nexport interface WizardStoreBundle<T, StepId extends string = string> {\n store: IWizardStore<T, StepId>;\n actions: IWizardActionsTyped<T, StepId>;\n}\n\nconst applyStoredMeta = <T, StepId extends string>(\n store: IWizardStore<T, StepId>,\n adapter: IPersistenceAdapter\n) => {\n const meta = adapter.getStep<{\n currentStepId: string;\n visited: string[];\n completed: string[];\n history: string[];\n }>(META_KEY);\n\n if (!meta) return;\n\n if (meta.currentStepId) {\n store.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: meta.currentStepId as StepId },\n });\n }\n if (meta.visited) {\n store.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: new Set(meta.visited as StepId[]) },\n });\n }\n if (meta.completed) {\n store.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: new Set(meta.completed as StepId[]) },\n });\n }\n if (meta.history) {\n store.dispatch({\n type: 'SET_HISTORY',\n payload: { history: meta.history as StepId[] },\n });\n }\n};\n\nconst ensureInitialStep = <T, StepId extends string>(\n store: IWizardStore<T, StepId>,\n activeSteps: IStepConfig<T, StepId>[],\n initialStepId?: StepId\n) => {\n const snapshot = store.getSnapshot();\n if (snapshot.currentStepId || activeSteps.length === 0) return;\n\n const startId =\n initialStepId && activeSteps.some((s) => s.id === initialStepId)\n ? initialStepId\n : activeSteps[0].id;\n\n store.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: startId as StepId },\n });\n\n if (snapshot.history.length === 0) {\n store.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [startId as StepId] },\n });\n }\n\n const currentVisited = new Set(snapshot.visitedSteps);\n if (!currentVisited.has(startId as StepId)) {\n currentVisited.add(startId as StepId);\n store.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: currentVisited },\n });\n }\n};\n\nconst resolveAndSetActiveSteps = async <T, StepId extends string>(\n store: IWizardStore<T, StepId>,\n data: T,\n initialStepId?: StepId\n) => {\n const resolved = await store.resolveActiveSteps(data);\n store.dispatch({\n type: 'SET_ACTIVE_STEPS',\n payload: { steps: resolved as any },\n });\n ensureInitialStep(store, resolved, initialStepId);\n\n const snapshot = store.getSnapshot();\n if (resolved.length > 0 && snapshot.isLoading) {\n store.updateMeta({ isLoading: false });\n }\n};\n\nconst createWizardActions = <T extends Record<string, any>, StepId extends string>(\n store: IWizardStore<T, StepId>,\n config: IWizardConfig<T, StepId>,\n persistenceAdapter: IPersistenceAdapter,\n initialData: T\n): IWizardActionsTyped<T, StepId> => {\n let currentConfig = config;\n const validationDebounceRef = { current: null as ReturnType<typeof setTimeout> | null };\n const stepsMap = new Map<StepId, IStepConfig<T, StepId>>();\n currentConfig.steps.forEach((step) => stepsMap.set(step.id as StepId, step));\n\n const resolveActiveStepsHelper = (data: T) => store.resolveActiveSteps(data);\n const validateStep = (stepId: StepId) => store.validateStep(stepId);\n\n const setData = <P extends Path<T>>(\n path: P,\n value: PathValue<T, P>,\n options?: { debounceValidation?: number }\n ) => {\n const prevData = store.getSnapshot().data;\n if (getByPath(prevData, path as string) === value) return;\n\n const baseData = setByPath(prevData, path as string, value);\n const { newData, hasClearing, statusChanged, nextCompletedSteps, nextVisitedSteps } =\n applyStepDependencies(currentConfig, store, baseData, [path as string]);\n\n if (statusChanged) {\n store.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextCompletedSteps },\n });\n store.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: nextVisitedSteps },\n });\n }\n\n if (!hasClearing) {\n store.dispatch({\n type: 'SET_DATA',\n payload: {\n path: path as string,\n value,\n options: { ...options, __from_set_data__: true },\n },\n });\n } else {\n store.dispatch({\n type: 'UPDATE_DATA',\n payload: {\n data: newData,\n options: { replace: true, __from_set_data__: true, path },\n },\n });\n }\n\n const snapshot = store.getSnapshot();\n const currentStepId = snapshot.currentStepId as StepId;\n if (currentStepId) {\n store.deleteError(currentStepId, path as string);\n const step = stepsMap.get(currentStepId);\n const mode = step?.validationMode || currentConfig.validationMode || 'onStepChange';\n\n if (mode === 'onChange') {\n const debounceMs =\n options?.debounceValidation ?? currentConfig.validationDebounceTime ?? 300;\n if (validationDebounceRef.current) {\n clearTimeout(validationDebounceRef.current);\n }\n validationDebounceRef.current = setTimeout(() => {\n void validateStep(currentStepId);\n }, debounceMs);\n }\n }\n };\n\n const updateData = (data: Partial<T>, options?: { replace?: boolean; persist?: boolean }) => {\n const prev = store.getSnapshot().data;\n const baseData = (options?.replace ? (data as T) : { ...prev, ...data }) as T;\n const { newData, statusChanged, nextCompletedSteps, nextVisitedSteps } = applyStepDependencies(\n currentConfig,\n store,\n baseData,\n Object.keys(data)\n );\n\n if (statusChanged) {\n store.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextCompletedSteps },\n });\n store.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: nextVisitedSteps },\n });\n }\n\n store.update(newData as T, Object.keys(data));\n if (options?.persist) {\n store.save(store.getSnapshot().currentStepId as StepId);\n }\n };\n\n const reset = () => {\n store.setInitialData(initialData || ({} as T));\n store.update((initialData || ({} as T)) as T);\n store.updateErrors({} as Record<StepId, Record<string, string>>);\n store.dispatch({\n type: 'SET_VISITED_STEPS',\n payload: { steps: new Set() },\n });\n store.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: new Set() },\n });\n store.dispatch({\n type: 'SET_ERROR_STEPS',\n payload: { steps: new Set() },\n });\n\n const snapshot = store.getSnapshot();\n if (snapshot.activeSteps.length > 0) {\n const startId = snapshot.activeSteps[0].id;\n store.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: startId as StepId },\n });\n store.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [startId as StepId] },\n });\n } else {\n store.dispatch({\n type: 'SET_CURRENT_STEP_ID',\n payload: { stepId: '' as StepId },\n });\n store.dispatch({\n type: 'SET_HISTORY',\n payload: { history: [] },\n });\n }\n\n persistenceAdapter.clear();\n currentConfig.analytics?.onEvent('wizard_reset', { data: initialData } as any);\n };\n\n const goToStep = (\n stepId: StepId,\n providedActiveSteps?: any[],\n options?: { validate?: boolean }\n ) => {\n return store.goToStep(stepId, {\n validate: options?.validate ?? true,\n providedActiveSteps: providedActiveSteps as any,\n });\n };\n\n const goToNextStep = async () => {\n const snapshot = store.getSnapshot();\n const currentStepId = snapshot.currentStepId as StepId;\n if (!currentStepId) return;\n\n const step = stepsMap.get(currentStepId);\n const shouldVal = step?.autoValidate ?? currentConfig.autoValidate ?? !!step?.validationAdapter;\n\n if (shouldVal) {\n const ok = await validateStep(currentStepId);\n if (!ok) return;\n }\n\n const resolvedSteps = await resolveActiveStepsHelper(snapshot.data);\n const idx = resolvedSteps.findIndex((s) => s.id === currentStepId);\n\n if (idx !== -1 && idx < resolvedSteps.length - 1) {\n const nextStepId = resolvedSteps[idx + 1].id;\n const success = await goToStep(nextStepId as StepId, resolvedSteps as any, {\n validate: false,\n });\n if (success) {\n const currentSnapshot = store.getSnapshot();\n if (!currentSnapshot.errorSteps.has(currentStepId)) {\n const nextComp = new Set(currentSnapshot.completedSteps);\n nextComp.add(currentStepId);\n store.dispatch({\n type: 'SET_COMPLETED_STEPS',\n payload: { steps: nextComp },\n });\n }\n }\n }\n };\n\n const goToPrevStep = async () => {\n const snapshot = store.getSnapshot();\n const idx = snapshot.activeSteps.findIndex((s) => s.id === snapshot.currentStepId);\n if (idx > 0) {\n await goToStep(snapshot.activeSteps[idx - 1].id as StepId);\n }\n };\n\n const setStepData = (_stepId: StepId, data: any) => {\n const next = { ...store.getSnapshot().data, ...data };\n store.update(next as T, Object.keys(data));\n };\n\n const handleStepChange = (field: string, value: any) => {\n if (store.getSnapshot().currentStepId) {\n setData(field as Path<T>, value as any);\n }\n };\n\n const validateAll = async () => {\n const result = await store.validateAll();\n return result;\n };\n\n const save = (ids?: StepId | StepId[] | boolean) => {\n if (ids === true) {\n currentConfig.steps.forEach((s) => store.save(s.id as StepId));\n } else if (!ids) {\n store.save();\n } else {\n (Array.isArray(ids) ? ids : [ids]).forEach((id) => store.save(id as StepId));\n }\n };\n\n const clearStorage = () => persistenceAdapter.clear();\n\n const getData = <P extends Path<T>>(path: P, defaultValue?: PathValue<T, P>) => {\n return getByPath(store.getSnapshot().data, path as string, defaultValue) as PathValue<T, P>;\n };\n\n const updateConfig = (nextConfig: Partial<IWizardConfig<any, StepId>>) => {\n currentConfig = { ...currentConfig, ...nextConfig } as IWizardConfig<T, StepId>;\n stepsMap.clear();\n currentConfig.steps.forEach((step) => stepsMap.set(step.id as StepId, step));\n store.updateMeta({ config: currentConfig as any });\n };\n\n return {\n goToNextStep,\n goToPrevStep,\n goToStep,\n setStepData,\n handleStepChange,\n validateStep,\n validateAll,\n save,\n clearStorage,\n reset,\n setData,\n updateData,\n getData,\n updateConfig,\n };\n};\n\n/**\n * Create a standalone store + actions bundle without React Context.\n */\nexport const createWizardStore = <T extends Record<string, any>, StepId extends string = string>(\n options: CreateWizardStoreOptions<T, StepId>\n): WizardStoreBundle<T, StepId> => {\n const initialData = (options.initialData || ({} as T)) as T;\n const store = new WizardStore<T, StepId>(initialData, options.config.middlewares);\n const persistenceAdapter = options.config.persistence?.adapter || new MemoryAdapter();\n\n store.injectPersistence(persistenceAdapter);\n store.dispatch({\n type: 'INIT',\n payload: { data: initialData, config: options.config as any },\n });\n store.hydrate();\n applyStoredMeta(store, persistenceAdapter);\n void resolveAndSetActiveSteps(store, store.getSnapshot().data, options.initialStepId);\n\n return {\n store,\n actions: createWizardActions(store, options.config, persistenceAdapter, initialData),\n };\n};\n\n/**\n * Hook: read the full store snapshot without React Context.\n */\nexport const useWizardStoreState = <T, StepId extends string = string>(\n store: IWizardStore<T, StepId>\n): IWizardState<T, StepId> => {\n return useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n};\n\n/**\n * Hook: subscribe to a value path without React Context.\n */\nexport const useWizardStoreValue = <T, P extends Path<T>>(\n store: IWizardStore<T, any>,\n path: P,\n options?: { isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean }\n): PathValue<T, P> => {\n const lastStateRef = useRef<any>(UNSET);\n const lastValueRef = useRef<any>(UNSET);\n\n const getSnapshot = useCallback(() => {\n const data = store.getSnapshot().data;\n if (data === lastStateRef.current && lastValueRef.current !== UNSET) {\n return lastValueRef.current;\n }\n\n const value = getByPath(data, path as string) as PathValue<T, P>;\n if (\n lastValueRef.current !== UNSET &&\n (options?.isEqual || Object.is)(lastValueRef.current, value)\n ) {\n lastStateRef.current = data;\n return lastValueRef.current;\n }\n\n lastStateRef.current = data;\n lastValueRef.current = value;\n return value;\n }, [store, path, options?.isEqual]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n};\n\n/**\n * Hook: value + setter for a path without React Context.\n */\nexport const useWizardStoreField = <T, P extends Path<T>>(\n store: IWizardStore<T, any>,\n setData: (path: P, value: PathValue<T, P>) => void,\n path: P,\n options?: { isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean }\n): [PathValue<T, P>, (value: PathValue<T, P>) => void] => {\n const value = useWizardStoreValue<T, P>(store, path, options);\n const setValue = useCallback(\n (next: PathValue<T, P>) => {\n setData(path, next);\n },\n [setData, path]\n );\n\n return [value, setValue];\n};\n\n/**\n * Hook: read the first error for a path without React Context.\n */\nexport const useWizardStoreError = (\n store: IWizardStore<any, any>,\n path: string\n): string | undefined => {\n const getSnapshot = useCallback(() => {\n const errors = store.getSnapshot().errors;\n for (const [_, stepErrors] of Object.entries(errors)) {\n const typed = stepErrors as Record<string, string>;\n if (typed[path]) return typed[path];\n }\n return undefined;\n }, [store, path]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n};\n\n/**\n * Hook: select derived state without React Context.\n */\nexport const useWizardStoreSelector = <TSelected>(\n store: IWizardStore<any, any>,\n selector: (state: any) => TSelected,\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\n): TSelected => {\n const lastResultRef = useRef<TSelected | typeof UNSET>(UNSET);\n\n const getSnapshot = useCallback(() => {\n const full = store.getSnapshot();\n const res = selector(full);\n\n if (\n lastResultRef.current !== UNSET &&\n (options?.isEqual || Object.is)(lastResultRef.current, res)\n ) {\n return lastResultRef.current;\n }\n\n lastResultRef.current = res;\n return res;\n }, [store, selector, options?.isEqual]);\n\n return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n};\n\n/**\n * Helper: build store-bound hooks for a single store instance.\n */\nexport const createWizardHooks = <T, StepId extends string = string>(\n store: IWizardStore<T, StepId>,\n actions?: IWizardActionsTyped<T, StepId>\n) => ({\n useWizardState: () => useWizardStoreState<T, StepId>(store),\n useWizardValue: <P extends Path<T>>(\n path: P,\n options?: { isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean }\n ) => useWizardStoreValue<T, P>(store, path, options),\n useWizardField: <P extends Path<T>>(\n path: P,\n options?: { isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean }\n ) => {\n if (!actions) {\n throw new Error('useWizardField requires actions. Pass actions to createWizardHooks.');\n }\n return useWizardStoreField<T, P>(store, actions.setData, path, options);\n },\n useWizardError: (path: string) => useWizardStoreError(store, path),\n useWizardSelector: <TSelected>(\n selector: (state: IWizardState<T, StepId>) => TSelected,\n options?: { isEqual?: (a: TSelected, b: TSelected) => boolean }\n ) => useWizardStoreSelector<TSelected>(store, selector, options),\n});\n"],"mappings":"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","names":["import_core","META_KEY","data","currentStepId","activeSteps","activeStepsIndexMap","stepsMap","import_jsx_runtime","WizardProvider","useWizard","useWizardContext","useWizardValue","useWizardField","useWizardActions","useWizardSelector","useWizardError","useWizardState","import_react","import_jsx_runtime","import_react","import_core","import_persistence","UNSET","import_core"]}
package/dist/index.d.cts CHANGED
@@ -1,10 +1,41 @@
1
1
  import * as _wizzard_packages_core from '@wizzard-packages/core';
2
- import { IWizardConfig, IWizardContext as IWizardContext$1, Path, PathValue, IStepConfig, IWizardState, IWizardActions as IWizardActions$1 } from '@wizzard-packages/core';
2
+ import { IWizardActions as IWizardActions$1, Path, PathValue, IWizardContext as IWizardContext$1, IWizardState, IWizardConfig, IStepConfig, IWizardStore } from '@wizzard-packages/core';
3
3
  export { IStepConfig, IValidatorAdapter, IWizardActions, IWizardConfig, IWizardContext, IWizardState, PersistenceMode, ValidationResult, WizardMiddleware, WizardStore } from '@wizzard-packages/core';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import React from 'react';
6
6
  export { loggerMiddleware } from '@wizzard-packages/middleware';
7
7
 
8
+ /**
9
+ * Handle returned by components for imperative access to the wizard.
10
+ */
11
+ interface IWizardHandle<T = unknown, StepId extends string = string> {
12
+ state: IWizardState<T, StepId>;
13
+ actions: IWizardActions<StepId>;
14
+ }
15
+ /**
16
+ * React-specific actions
17
+ */
18
+ interface IWizardActions<StepId extends string = string> extends IWizardActions$1<StepId> {
19
+ }
20
+ /**
21
+ * Typed actions for strongly-typed paths.
22
+ */
23
+ type IWizardActionsTyped<T, StepId extends string = string> = Omit<IWizardActions$1<StepId>, 'setData' | 'updateData' | 'getData'> & {
24
+ setData: <P extends Path<T>>(path: P, value: PathValue<T, P>, options?: {
25
+ debounceValidation?: number;
26
+ }) => void;
27
+ updateData: (data: Partial<T>, options?: {
28
+ replace?: boolean;
29
+ persist?: boolean;
30
+ }) => void;
31
+ getData: <P extends Path<T>>(path: P, defaultValue?: PathValue<T, P>) => PathValue<T, P>;
32
+ };
33
+ /**
34
+ * Core Wizard Context State
35
+ */
36
+ interface IWizardContext<T = unknown, StepId extends string = string> extends IWizardContext$1<T, StepId> {
37
+ }
38
+
8
39
  /**
9
40
  * createWizardFactory
10
41
  *
@@ -13,9 +44,10 @@ export { loggerMiddleware } from '@wizzard-packages/middleware';
13
44
  * @template TSchema The shape of your wizard's global data state
14
45
  */
15
46
  declare function createWizardFactory<TSchema extends Record<string, any>, StepId extends string = string>(): {
16
- WizardProvider: ({ config, initialData, children, }: {
47
+ WizardProvider: ({ config, initialData, initialStepId, children, }: {
17
48
  config: IWizardConfig<TSchema, StepId>;
18
49
  initialData?: Partial<TSchema>;
50
+ initialStepId?: StepId;
19
51
  children: React.ReactNode;
20
52
  }) => react_jsx_runtime.JSX.Element;
21
53
  useWizard: () => IWizardContext$1<TSchema, StepId>;
@@ -23,11 +55,14 @@ declare function createWizardFactory<TSchema extends Record<string, any>, StepId
23
55
  useWizardValue: <P extends Path<TSchema>>(path: P, options?: {
24
56
  isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean;
25
57
  }) => PathValue<TSchema, P>;
58
+ useWizardField: <P extends Path<TSchema>>(path: P, options?: {
59
+ isEqual?: (a: PathValue<TSchema, P>, b: PathValue<TSchema, P>) => boolean;
60
+ }) => [PathValue<TSchema, P>, (value: PathValue<TSchema, P>) => void];
26
61
  useWizardSelector: <TSelected>(selector: (state: IWizardContext$1<TSchema, StepId>) => TSelected, options?: {
27
62
  isEqual?: (a: TSelected, b: TSelected) => boolean;
28
63
  }) => TSelected;
29
64
  useWizardError: <P extends Path<TSchema>>(path: P) => string | undefined;
30
- useWizardActions: () => _wizzard_packages_core.IWizardActions<StepId>;
65
+ useWizardActions: () => IWizardActionsTyped<TSchema, StepId>;
31
66
  useWizardState: () => _wizzard_packages_core.IWizardState<TSchema, StepId>;
32
67
  useBreadcrumbs: () => _wizzard_packages_core.IBreadcrumb<StepId>[];
33
68
  createStep: (config: IStepConfig<TSchema, StepId>) => IStepConfig<TSchema, StepId>;
@@ -56,6 +91,12 @@ declare function useWizardState<T = unknown, StepId extends string = string>():
56
91
  declare function useWizardValue<TValue = any>(path: string, options?: {
57
92
  isEqual?: (a: TValue, b: TValue) => boolean;
58
93
  }): TValue;
94
+ /**
95
+ * Returns a value and setter for a path (useState-like API).
96
+ */
97
+ declare function useWizardField<T, P extends Path<T>>(path: P, options?: {
98
+ isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean;
99
+ }): [PathValue<T, P>, (value: PathValue<T, P>) => void];
59
100
  /**
60
101
  * Returns the first error message for a path across all steps.
61
102
  */
@@ -74,6 +115,37 @@ declare function useWizardActions<StepId extends string = string>(): IWizardActi
74
115
  * Returns combined wizard state, actions, and derived errors.
75
116
  */
76
117
  declare function useWizardContext<T = any, StepId extends string = string>(): IWizardContext$1<T, StepId>;
118
+ /**
119
+ * Returns current step config.
120
+ */
121
+ declare function useWizardCurrentStep<T = any, StepId extends string = string>(): IStepConfig<T, StepId> | null;
122
+ /**
123
+ * Returns active steps list.
124
+ */
125
+ declare function useWizardSteps<T = any, StepId extends string = string>(): IStepConfig<T, StepId>[];
126
+ /**
127
+ * Returns frequently-used meta state with shallow equality.
128
+ */
129
+ declare function useWizardMeta<T = any, StepId extends string = string>(): {
130
+ currentStepId: "" | StepId;
131
+ currentStepIndex: number;
132
+ isFirstStep: boolean;
133
+ isLastStep: boolean;
134
+ isLoading: boolean;
135
+ isBusy: boolean;
136
+ isDirty: boolean;
137
+ progress: number;
138
+ activeStepsCount: number;
139
+ goToStepResult: boolean | "init" | null | undefined;
140
+ };
141
+ /**
142
+ * Returns all errors by step (shallow-equal).
143
+ */
144
+ declare function useWizardAllErrors<T = any, StepId extends string = string>(): Record<StepId, Record<string, string>>;
145
+ /**
146
+ * Returns flattened errors map (path -> message).
147
+ */
148
+ declare function useWizardFlatErrors<T = any, StepId extends string = string>(): Record<string, string>;
77
149
 
78
150
  /**
79
151
  * Props for rendering the current step component.
@@ -91,26 +163,64 @@ interface WizardStepRendererProps {
91
163
  declare const WizardStepRenderer: React.FC<WizardStepRendererProps>;
92
164
 
93
165
  /**
94
- * Handle returned by components for imperative access to the wizard.
166
+ * Alias for useWizardContext.
95
167
  */
96
- interface IWizardHandle<T = unknown, StepId extends string = string> {
97
- state: IWizardState<T, StepId>;
98
- actions: IWizardActions<StepId>;
168
+ declare const useWizard: <T = any, StepId extends string = string>() => IWizardContext<T, StepId>;
169
+
170
+ interface CreateWizardStoreOptions<T, StepId extends string = string> {
171
+ config: IWizardConfig<T, StepId>;
172
+ initialData?: T;
173
+ initialStepId?: StepId;
174
+ }
175
+ interface WizardStoreBundle<T, StepId extends string = string> {
176
+ store: IWizardStore<T, StepId>;
177
+ actions: IWizardActionsTyped<T, StepId>;
99
178
  }
100
179
  /**
101
- * React-specific actions
180
+ * Create a standalone store + actions bundle without React Context.
102
181
  */
103
- interface IWizardActions<StepId extends string = string> extends IWizardActions$1<StepId> {
104
- }
182
+ declare const createWizardStore: <T extends Record<string, any>, StepId extends string = string>(options: CreateWizardStoreOptions<T, StepId>) => WizardStoreBundle<T, StepId>;
105
183
  /**
106
- * Core Wizard Context State
184
+ * Hook: read the full store snapshot without React Context.
107
185
  */
108
- interface IWizardContext<T = unknown, StepId extends string = string> extends IWizardContext$1<T, StepId> {
109
- }
110
-
186
+ declare const useWizardStoreState: <T, StepId extends string = string>(store: IWizardStore<T, StepId>) => IWizardState<T, StepId>;
111
187
  /**
112
- * Alias for useWizardContext.
188
+ * Hook: subscribe to a value path without React Context.
113
189
  */
114
- declare const useWizard: <T = any, StepId extends string = string>() => IWizardContext<T, StepId>;
190
+ declare const useWizardStoreValue: <T, P extends Path<T>>(store: IWizardStore<T, any>, path: P, options?: {
191
+ isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean;
192
+ }) => PathValue<T, P>;
193
+ /**
194
+ * Hook: value + setter for a path without React Context.
195
+ */
196
+ declare const useWizardStoreField: <T, P extends Path<T>>(store: IWizardStore<T, any>, setData: (path: P, value: PathValue<T, P>) => void, path: P, options?: {
197
+ isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean;
198
+ }) => [PathValue<T, P>, (value: PathValue<T, P>) => void];
199
+ /**
200
+ * Hook: read the first error for a path without React Context.
201
+ */
202
+ declare const useWizardStoreError: (store: IWizardStore<any, any>, path: string) => string | undefined;
203
+ /**
204
+ * Hook: select derived state without React Context.
205
+ */
206
+ declare const useWizardStoreSelector: <TSelected>(store: IWizardStore<any, any>, selector: (state: any) => TSelected, options?: {
207
+ isEqual?: (a: TSelected, b: TSelected) => boolean;
208
+ }) => TSelected;
209
+ /**
210
+ * Helper: build store-bound hooks for a single store instance.
211
+ */
212
+ declare const createWizardHooks: <T, StepId extends string = string>(store: IWizardStore<T, StepId>, actions?: IWizardActionsTyped<T, StepId>) => {
213
+ useWizardState: () => IWizardState<T, StepId>;
214
+ useWizardValue: <P extends Path<T>>(path: P, options?: {
215
+ isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean;
216
+ }) => PathValue<T, P>;
217
+ useWizardField: <P extends Path<T>>(path: P, options?: {
218
+ isEqual?: (a: PathValue<T, P>, b: PathValue<T, P>) => boolean;
219
+ }) => [PathValue<T, P>, (value: PathValue<T, P>) => void];
220
+ useWizardError: (path: string) => string | undefined;
221
+ useWizardSelector: <TSelected>(selector: (state: IWizardState<T, StepId>) => TSelected, options?: {
222
+ isEqual?: (a: TSelected, b: TSelected) => boolean;
223
+ }) => TSelected;
224
+ };
115
225
 
116
- export { type IWizardHandle, WizardProvider, type WizardProviderProps, WizardStepRenderer, type WizardStepRendererProps, createWizardFactory, useWizard, useWizardActions, useWizardContext, useWizardError, useWizardSelector, useWizardState, useWizardValue };
226
+ export { type CreateWizardStoreOptions, type IWizardActionsTyped, type IWizardHandle, WizardProvider, type WizardProviderProps, WizardStepRenderer, type WizardStepRendererProps, type WizardStoreBundle, createWizardFactory, createWizardHooks, createWizardStore, useWizard, useWizardActions, useWizardAllErrors, useWizardContext, useWizardCurrentStep, useWizardError, useWizardField, useWizardFlatErrors, useWizardMeta, useWizardSelector, useWizardState, useWizardSteps, useWizardStoreError, useWizardStoreField, useWizardStoreSelector, useWizardStoreState, useWizardStoreValue, useWizardValue };