import type z from "zod";
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
type IsPrimitive<T> = T extends Primitive ? true : false;
type ArrayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
type DeepPaths<T, Level extends number = 0> = T extends ReadonlyArray<infer U> ? Level extends 10 ? never : `[${ArrayIndex}]` | `[${ArrayIndex}].${DeepPaths<U, Level extends 0 ? 1 : Level>}` : T extends object ? {
    [K in keyof T & (string | number)]: IsPrimitive<T[K]> extends true ? `${K}` : `${K}` | `${K}.${DeepPaths<T[K], Level extends 0 ? 1 : Level>}`;
}[keyof T & (string | number)] : never;
export type FieldPath<T extends z.ZodSchema> = DeepPaths<z.infer<T>>;
export type FieldVisibilityRule<T extends z.ZodSchema> = {
    sourceFields: FieldPath<T>[];
    targetField: FieldPath<T> | FieldPath<T>[];
    when: (values: Record<FieldPath<T>, any>) => boolean;
    type: "hide" | "disable" | "show";
};
export type FieldVisibilityRules<T extends z.ZodSchema> = FieldVisibilityRule<T>[];
export type PathToArray<T extends string> = T extends `${infer First}[${infer Index}].${infer Rest}` ? [First, Index, ...PathToArray<Rest>] : T extends `${infer First}[${infer Index}]` ? [First, Index] : T extends `${infer First}.${infer Rest}` ? [First, ...PathToArray<Rest>] : [T];
export {};
