import * as z from "zod/v4";
import { FONT_TYPES } from "./constants.js";
const WeightSchema = z.union([z.string(), z.number()]);
const StyleSchema = z.enum(["normal", "italic", "oblique"]);
const DisplaySchema = z.enum(["auto", "block", "swap", "fallback", "optional"]);
const FormatSchema = z.enum(FONT_TYPES);
const _FontProviderSchema = z.strictObject({
  name: z.string(),
  config: z.record(z.string(), z.any()).optional(),
  init: z.custom((v) => typeof v === "function").optional(),
  resolveFont: z.custom((v) => typeof v === "function"),
  listFonts: z.custom((v) => typeof v === "function").optional()
});
const FontProviderSchema = z.custom((v) => {
  return _FontProviderSchema.safeParse(v).success;
}, "Invalid FontProvider object");
const FontFamilySchema = z.object({
  name: z.string(),
  cssVariable: z.string(),
  provider: FontProviderSchema,
  weights: z.tuple([WeightSchema], WeightSchema).optional(),
  styles: z.tuple([StyleSchema], StyleSchema).optional(),
  subsets: z.tuple([z.string()], z.string()).optional(),
  formats: z.tuple([FormatSchema], FormatSchema).optional(),
  fallbacks: z.array(z.string()).optional(),
  optimizedFallbacks: z.boolean().optional(),
  display: DisplaySchema.optional(),
  stretch: z.string().optional(),
  featureSettings: z.string().optional(),
  variationSettings: z.string().optional(),
  unicodeRange: z.tuple([z.string()], z.string()).optional(),
  options: z.record(z.string(), z.any()).optional()
}).strict();
export {
  DisplaySchema,
  FontFamilySchema,
  FontProviderSchema,
  StyleSchema,
  WeightSchema
};
