/**
 * Reserved key used inside a step slot to declare its stored-data shape.
 *
 * Authors NEVER write `__stored` in step config at runtime — it is a type-level brand only.
 * `useStepper` strips it from incoming step objects defensively in case it ever appears.
 */
type StoredBrand<T = unknown> = {
    readonly __stored?: T;
};
/**
 * Generic constraint for a consumer's step-id → slot type map.
 *
 * Each slot value may declare:
 * - Any author-defined fields (any names): `schema`, `defaultValues`, `validation`, etc.
 * - An optional `__stored?: T` brand declaring the stored-data type for
 *   `setStepData` / `getStepData` / `storedData`.
 *
 * @example
 * ```ts
 * type MyStepperMap = {
 *   welcome: {
 *     schema: typeof welcomeSchema;
 *     defaultValues: z.infer<typeof welcomeSchema>;
 *     __stored?: z.infer<typeof welcomeSchema>;
 *   };
 *   setup: { __stored?: { mode: 'quick' | 'advanced' } };
 *   intro: { bannerText: string };
 *   done:  {};
 * };
 * ```
 */
type StepperTypeMap = Record<string, StoredBrand & Record<string, unknown>>;
export type { StoredBrand };
export default StepperTypeMap;
