import { defineCatalog } from "@json-render/core"
import { schema } from "@json-render/react-native/schema"
import { z } from "zod"

export const catalog = defineCatalog(schema, {
	components: {
		View: {
			props: z.object({
				style: z.string().nullable(),
			}),
			slots: ["default"],
			description:
				"Generic layout container. The style prop accepts a twrnc class string (e.g. 'flex-row gap-2 p-4 items-center').",
			example: { style: "flex-row gap-2 p-4" },
		},
		Button: {
			props: z.object({
				label: z.string(),
				leadingIcon: z.string().nullable(),
				trailingIcon: z.string().nullable(),
			}),
			events: ["press"],
			slots: [],
			description:
				"Pressable button with a label and optional Feather icons. Icon values are Feather icon names (e.g. 'plus', 'arrow-right'). Bind on.press to trigger an action.",
			example: { label: "Add item", leadingIcon: "plus", trailingIcon: null },
		},
		FeedCard: {
			props: z.object({
				style: z.string().nullable(),
			}),
			slots: ["default"],
			description:
				"Bordered card container for feed content. The style prop accepts a twrnc class string.",
			example: { style: "p-4 gap-2" },
		},
		SansSerifText: {
			props: z.object({
				text: z.string(),
				style: z.string().nullable(),
			}),
			slots: [],
			description:
				"Sans-serif text (Inter font). The style prop accepts a twrnc class string for size, weight, color, etc.",
			example: { text: "Hello world", style: "text-base font-medium" },
		},
		SerifText: {
			props: z.object({
				text: z.string(),
				style: z.string().nullable(),
			}),
			slots: [],
			description:
				"Serif text (Source Serif 4 font). The style prop accepts a twrnc class string for size, color, etc.",
			example: { text: "Heading", style: "text-xl" },
		},
		MonospaceText: {
			props: z.object({
				text: z.string(),
				style: z.string().nullable(),
			}),
			slots: [],
			description:
				"Monospace text (Menlo font). The style prop accepts a twrnc class string for size, color, etc.",
			example: { text: "const x = 42", style: "text-sm" },
		},
	},
	actions: {},
})
