@json-render/shadcn 0.9.0 → 0.10.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.
package/README.md CHANGED
@@ -167,12 +167,12 @@ const { registry } = defineRegistry(catalog, {
167
167
  |-----------|-------------|
168
168
  | `Button` | Clickable button with variants |
169
169
  | `Link` | Anchor link |
170
- | `Input` | Text input with label and validation |
171
- | `Textarea` | Multi-line text input |
172
- | `Select` | Dropdown select |
173
- | `Checkbox` | Checkbox input |
174
- | `Radio` | Radio button group |
175
- | `Switch` | Toggle switch |
170
+ | `Input` | Text input with label, validation, and `validateOn` timing |
171
+ | `Textarea` | Multi-line text input with validation and `validateOn` |
172
+ | `Select` | Dropdown select with validation and `validateOn` |
173
+ | `Checkbox` | Checkbox input with validation and `validateOn` |
174
+ | `Radio` | Radio button group with validation and `validateOn` |
175
+ | `Switch` | Toggle switch with validation and `validateOn` |
176
176
  | `Slider` | Range slider |
177
177
  | `Toggle` | Toggle button |
178
178
  | `ToggleGroup` | Group of toggle buttons |
@@ -180,13 +180,24 @@ const { registry } = defineRegistry(catalog, {
180
180
 
181
181
  ## Built-in Actions
182
182
 
183
- State actions (`setState`, `pushState`, `removeState`) are built into the `@json-render/react` schema and handled automatically by `ActionProvider`. They are included in prompts without needing to be declared in your catalog.
183
+ State actions (`setState`, `pushState`, `removeState`, `validateForm`) are built into the `@json-render/react` schema and handled automatically by `ActionProvider`. They are included in prompts without needing to be declared in your catalog.
184
184
 
185
185
  | Action | Description |
186
186
  |--------|-------------|
187
187
  | `setState` | Set a value at a state path |
188
188
  | `pushState` | Push a value onto an array in state |
189
189
  | `removeState` | Remove an item from an array in state |
190
+ | `validateForm` | Validate all fields and write result to state |
191
+
192
+ ### Validation Timing (`validateOn`)
193
+
194
+ All form components support the `validateOn` prop to control when validation runs:
195
+
196
+ | Value | Description | Default For |
197
+ |-------|-------------|-------------|
198
+ | `"change"` | Validate on every input change | Select, Checkbox, Radio, Switch |
199
+ | `"blur"` | Validate when field loses focus | Input, Textarea |
200
+ | `"submit"` | Validate only on form submission | — |
190
201
 
191
202
  ## Exports
192
203
 
@@ -311,6 +311,11 @@ declare const shadcnComponentDefinitions: {
311
311
  message: z.ZodString;
312
312
  args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
313
313
  }, z.core.$strip>>>;
314
+ validateOn: z.ZodNullable<z.ZodEnum<{
315
+ change: "change";
316
+ blur: "blur";
317
+ submit: "submit";
318
+ }>>;
314
319
  }, z.core.$strip>;
315
320
  events: string[];
316
321
  description: string;
@@ -333,6 +338,11 @@ declare const shadcnComponentDefinitions: {
333
338
  message: z.ZodString;
334
339
  args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
335
340
  }, z.core.$strip>>>;
341
+ validateOn: z.ZodNullable<z.ZodEnum<{
342
+ change: "change";
343
+ blur: "blur";
344
+ submit: "submit";
345
+ }>>;
336
346
  }, z.core.$strip>;
337
347
  description: string;
338
348
  };
@@ -348,6 +358,11 @@ declare const shadcnComponentDefinitions: {
348
358
  message: z.ZodString;
349
359
  args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
350
360
  }, z.core.$strip>>>;
361
+ validateOn: z.ZodNullable<z.ZodEnum<{
362
+ change: "change";
363
+ blur: "blur";
364
+ submit: "submit";
365
+ }>>;
351
366
  }, z.core.$strip>;
352
367
  events: string[];
353
368
  description: string;
@@ -357,6 +372,16 @@ declare const shadcnComponentDefinitions: {
357
372
  label: z.ZodString;
358
373
  name: z.ZodString;
359
374
  checked: z.ZodNullable<z.ZodBoolean>;
375
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
376
+ type: z.ZodString;
377
+ message: z.ZodString;
378
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
379
+ }, z.core.$strip>>>;
380
+ validateOn: z.ZodNullable<z.ZodEnum<{
381
+ change: "change";
382
+ blur: "blur";
383
+ submit: "submit";
384
+ }>>;
360
385
  }, z.core.$strip>;
361
386
  events: string[];
362
387
  description: string;
@@ -367,6 +392,16 @@ declare const shadcnComponentDefinitions: {
367
392
  name: z.ZodString;
368
393
  options: z.ZodArray<z.ZodString>;
369
394
  value: z.ZodNullable<z.ZodString>;
395
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
396
+ type: z.ZodString;
397
+ message: z.ZodString;
398
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
399
+ }, z.core.$strip>>>;
400
+ validateOn: z.ZodNullable<z.ZodEnum<{
401
+ change: "change";
402
+ blur: "blur";
403
+ submit: "submit";
404
+ }>>;
370
405
  }, z.core.$strip>;
371
406
  events: string[];
372
407
  description: string;
@@ -376,6 +411,16 @@ declare const shadcnComponentDefinitions: {
376
411
  label: z.ZodString;
377
412
  name: z.ZodString;
378
413
  checked: z.ZodNullable<z.ZodBoolean>;
414
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
415
+ type: z.ZodString;
416
+ message: z.ZodString;
417
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
418
+ }, z.core.$strip>>>;
419
+ validateOn: z.ZodNullable<z.ZodEnum<{
420
+ change: "change";
421
+ blur: "blur";
422
+ submit: "submit";
423
+ }>>;
379
424
  }, z.core.$strip>;
380
425
  events: string[];
381
426
  description: string;
package/dist/catalog.d.ts CHANGED
@@ -311,6 +311,11 @@ declare const shadcnComponentDefinitions: {
311
311
  message: z.ZodString;
312
312
  args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
313
313
  }, z.core.$strip>>>;
314
+ validateOn: z.ZodNullable<z.ZodEnum<{
315
+ change: "change";
316
+ blur: "blur";
317
+ submit: "submit";
318
+ }>>;
314
319
  }, z.core.$strip>;
315
320
  events: string[];
316
321
  description: string;
@@ -333,6 +338,11 @@ declare const shadcnComponentDefinitions: {
333
338
  message: z.ZodString;
334
339
  args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
335
340
  }, z.core.$strip>>>;
341
+ validateOn: z.ZodNullable<z.ZodEnum<{
342
+ change: "change";
343
+ blur: "blur";
344
+ submit: "submit";
345
+ }>>;
336
346
  }, z.core.$strip>;
337
347
  description: string;
338
348
  };
@@ -348,6 +358,11 @@ declare const shadcnComponentDefinitions: {
348
358
  message: z.ZodString;
349
359
  args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
350
360
  }, z.core.$strip>>>;
361
+ validateOn: z.ZodNullable<z.ZodEnum<{
362
+ change: "change";
363
+ blur: "blur";
364
+ submit: "submit";
365
+ }>>;
351
366
  }, z.core.$strip>;
352
367
  events: string[];
353
368
  description: string;
@@ -357,6 +372,16 @@ declare const shadcnComponentDefinitions: {
357
372
  label: z.ZodString;
358
373
  name: z.ZodString;
359
374
  checked: z.ZodNullable<z.ZodBoolean>;
375
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
376
+ type: z.ZodString;
377
+ message: z.ZodString;
378
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
379
+ }, z.core.$strip>>>;
380
+ validateOn: z.ZodNullable<z.ZodEnum<{
381
+ change: "change";
382
+ blur: "blur";
383
+ submit: "submit";
384
+ }>>;
360
385
  }, z.core.$strip>;
361
386
  events: string[];
362
387
  description: string;
@@ -367,6 +392,16 @@ declare const shadcnComponentDefinitions: {
367
392
  name: z.ZodString;
368
393
  options: z.ZodArray<z.ZodString>;
369
394
  value: z.ZodNullable<z.ZodString>;
395
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
396
+ type: z.ZodString;
397
+ message: z.ZodString;
398
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
399
+ }, z.core.$strip>>>;
400
+ validateOn: z.ZodNullable<z.ZodEnum<{
401
+ change: "change";
402
+ blur: "blur";
403
+ submit: "submit";
404
+ }>>;
370
405
  }, z.core.$strip>;
371
406
  events: string[];
372
407
  description: string;
@@ -376,6 +411,16 @@ declare const shadcnComponentDefinitions: {
376
411
  label: z.ZodString;
377
412
  name: z.ZodString;
378
413
  checked: z.ZodNullable<z.ZodBoolean>;
414
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
415
+ type: z.ZodString;
416
+ message: z.ZodString;
417
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
418
+ }, z.core.$strip>>>;
419
+ validateOn: z.ZodNullable<z.ZodEnum<{
420
+ change: "change";
421
+ blur: "blur";
422
+ submit: "submit";
423
+ }>>;
379
424
  }, z.core.$strip>;
380
425
  events: string[];
381
426
  description: string;
package/dist/catalog.js CHANGED
@@ -24,6 +24,14 @@ __export(catalog_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(catalog_exports);
26
26
  var import_zod = require("zod");
27
+ var validationCheckSchema = import_zod.z.array(
28
+ import_zod.z.object({
29
+ type: import_zod.z.string(),
30
+ message: import_zod.z.string(),
31
+ args: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional()
32
+ })
33
+ ).nullable();
34
+ var validateOnSchema = import_zod.z.enum(["change", "blur", "submit"]).nullable();
27
35
  var shadcnComponentDefinitions = {
28
36
  // ==========================================================================
29
37
  // Layout Components
@@ -250,16 +258,11 @@ var shadcnComponentDefinitions = {
250
258
  type: import_zod.z.enum(["text", "email", "password", "number"]).nullable(),
251
259
  placeholder: import_zod.z.string().nullable(),
252
260
  value: import_zod.z.string().nullable(),
253
- checks: import_zod.z.array(
254
- import_zod.z.object({
255
- type: import_zod.z.string(),
256
- message: import_zod.z.string(),
257
- args: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional()
258
- })
259
- ).nullable()
261
+ checks: validationCheckSchema,
262
+ validateOn: validateOnSchema
260
263
  }),
261
264
  events: ["submit", "focus", "blur"],
262
- description: "Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength).",
265
+ description: "Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength). validateOn controls timing (default: blur).",
263
266
  example: {
264
267
  label: "Email",
265
268
  name: "email",
@@ -274,15 +277,10 @@ var shadcnComponentDefinitions = {
274
277
  placeholder: import_zod.z.string().nullable(),
275
278
  rows: import_zod.z.number().nullable(),
276
279
  value: import_zod.z.string().nullable(),
277
- checks: import_zod.z.array(
278
- import_zod.z.object({
279
- type: import_zod.z.string(),
280
- message: import_zod.z.string(),
281
- args: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional()
282
- })
283
- ).nullable()
280
+ checks: validationCheckSchema,
281
+ validateOn: validateOnSchema
284
282
  }),
285
- description: "Multi-line text input. Use { $bindState } on value for binding. Use checks for validation."
283
+ description: "Multi-line text input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: blur)."
286
284
  },
287
285
  Select: {
288
286
  props: import_zod.z.object({
@@ -291,44 +289,45 @@ var shadcnComponentDefinitions = {
291
289
  options: import_zod.z.array(import_zod.z.string()),
292
290
  placeholder: import_zod.z.string().nullable(),
293
291
  value: import_zod.z.string().nullable(),
294
- checks: import_zod.z.array(
295
- import_zod.z.object({
296
- type: import_zod.z.string(),
297
- message: import_zod.z.string(),
298
- args: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional()
299
- })
300
- ).nullable()
292
+ checks: validationCheckSchema,
293
+ validateOn: validateOnSchema
301
294
  }),
302
295
  events: ["change"],
303
- description: "Dropdown select input. Use { $bindState } on value for binding. Use checks for validation."
296
+ description: "Dropdown select input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change)."
304
297
  },
305
298
  Checkbox: {
306
299
  props: import_zod.z.object({
307
300
  label: import_zod.z.string(),
308
301
  name: import_zod.z.string(),
309
- checked: import_zod.z.boolean().nullable()
302
+ checked: import_zod.z.boolean().nullable(),
303
+ checks: validationCheckSchema,
304
+ validateOn: validateOnSchema
310
305
  }),
311
306
  events: ["change"],
312
- description: "Checkbox input. Use { $bindState } on checked for binding."
307
+ description: "Checkbox input. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change)."
313
308
  },
314
309
  Radio: {
315
310
  props: import_zod.z.object({
316
311
  label: import_zod.z.string(),
317
312
  name: import_zod.z.string(),
318
313
  options: import_zod.z.array(import_zod.z.string()),
319
- value: import_zod.z.string().nullable()
314
+ value: import_zod.z.string().nullable(),
315
+ checks: validationCheckSchema,
316
+ validateOn: validateOnSchema
320
317
  }),
321
318
  events: ["change"],
322
- description: "Radio button group. Use { $bindState } on value for binding."
319
+ description: "Radio button group. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change)."
323
320
  },
324
321
  Switch: {
325
322
  props: import_zod.z.object({
326
323
  label: import_zod.z.string(),
327
324
  name: import_zod.z.string(),
328
- checked: import_zod.z.boolean().nullable()
325
+ checked: import_zod.z.boolean().nullable(),
326
+ checks: validationCheckSchema,
327
+ validateOn: validateOnSchema
329
328
  }),
330
329
  events: ["change"],
331
- description: "Toggle switch. Use { $bindState } on checked for binding."
330
+ description: "Toggle switch. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change)."
332
331
  },
333
332
  Slider: {
334
333
  props: import_zod.z.object({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/catalog.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// =============================================================================\n// shadcn/ui Component Definitions\n// =============================================================================\n\n/**\n * shadcn/ui component definitions for json-render catalogs.\n *\n * These can be used directly or extended with custom components.\n * All components are built using Radix UI primitives + Tailwind CSS.\n */\nexport const shadcnComponentDefinitions = {\n // ==========================================================================\n // Layout Components\n // ==========================================================================\n\n Card: {\n props: z.object({\n title: z.string().nullable(),\n description: z.string().nullable(),\n maxWidth: z.enum([\"sm\", \"md\", \"lg\", \"full\"]).nullable(),\n centered: z.boolean().nullable(),\n }),\n slots: [\"default\"],\n description:\n \"Container card for content sections. Use for forms/content boxes, NOT for page headers.\",\n example: { title: \"Overview\", description: \"Your account summary\" },\n },\n\n Stack: {\n props: z.object({\n direction: z.enum([\"horizontal\", \"vertical\"]).nullable(),\n gap: z.enum([\"none\", \"sm\", \"md\", \"lg\"]).nullable(),\n align: z.enum([\"start\", \"center\", \"end\", \"stretch\"]).nullable(),\n justify: z\n .enum([\"start\", \"center\", \"end\", \"between\", \"around\"])\n .nullable(),\n }),\n slots: [\"default\"],\n description: \"Flex container for layouts\",\n example: { direction: \"vertical\", gap: \"md\" },\n },\n\n Grid: {\n props: z.object({\n columns: z.number().nullable(),\n gap: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n }),\n slots: [\"default\"],\n description: \"Grid layout (1-6 columns)\",\n example: { columns: 3, gap: \"md\" },\n },\n\n Separator: {\n props: z.object({\n orientation: z.enum([\"horizontal\", \"vertical\"]).nullable(),\n }),\n description: \"Visual separator line\",\n },\n\n Tabs: {\n props: z.object({\n tabs: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n defaultValue: z.string().nullable(),\n value: z.string().nullable(),\n }),\n slots: [\"default\"],\n events: [\"change\"],\n description:\n \"Tab navigation. Use { $bindState } on value for active tab binding.\",\n },\n\n Accordion: {\n props: z.object({\n items: z.array(\n z.object({\n title: z.string(),\n content: z.string(),\n }),\n ),\n type: z.enum([\"single\", \"multiple\"]).nullable(),\n }),\n description:\n \"Collapsible sections. Items as [{title, content}]. Type 'single' (default) or 'multiple'.\",\n },\n\n Collapsible: {\n props: z.object({\n title: z.string(),\n defaultOpen: z.boolean().nullable(),\n }),\n slots: [\"default\"],\n description: \"Collapsible section with trigger. Children render inside.\",\n },\n\n Dialog: {\n props: z.object({\n title: z.string(),\n description: z.string().nullable(),\n openPath: z.string(),\n }),\n slots: [\"default\"],\n description:\n \"Modal dialog. Set openPath to a boolean state path. Use setState to toggle.\",\n },\n\n Drawer: {\n props: z.object({\n title: z.string(),\n description: z.string().nullable(),\n openPath: z.string(),\n }),\n slots: [\"default\"],\n description:\n \"Bottom sheet drawer. Set openPath to a boolean state path. Use setState to toggle.\",\n },\n\n Carousel: {\n props: z.object({\n items: z.array(\n z.object({\n title: z.string().nullable(),\n description: z.string().nullable(),\n }),\n ),\n }),\n description: \"Horizontally scrollable carousel of cards.\",\n },\n\n // ==========================================================================\n // Data Display Components\n // ==========================================================================\n\n Table: {\n props: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n caption: z.string().nullable(),\n }),\n description:\n 'Data table. columns: header labels. rows: 2D array of cell strings, e.g. [[\"Alice\",\"admin\"],[\"Bob\",\"user\"]].',\n example: {\n columns: [\"Name\", \"Role\"],\n rows: [\n [\"Alice\", \"Admin\"],\n [\"Bob\", \"User\"],\n ],\n },\n },\n\n Heading: {\n props: z.object({\n text: z.string(),\n level: z.enum([\"h1\", \"h2\", \"h3\", \"h4\"]).nullable(),\n }),\n description: \"Heading text (h1-h4)\",\n example: { text: \"Welcome\", level: \"h1\" },\n },\n\n Text: {\n props: z.object({\n text: z.string(),\n variant: z.enum([\"body\", \"caption\", \"muted\", \"lead\", \"code\"]).nullable(),\n }),\n description: \"Paragraph text\",\n example: { text: \"Hello, world!\" },\n },\n\n Image: {\n props: z.object({\n src: z.string().nullable(),\n alt: z.string(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n }),\n description:\n \"Image component. Renders an img tag when src is provided, otherwise a placeholder.\",\n },\n\n Avatar: {\n props: z.object({\n src: z.string().nullable(),\n name: z.string(),\n size: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n }),\n description: \"User avatar with fallback initials\",\n example: { name: \"Jane Doe\", size: \"md\" },\n },\n\n Badge: {\n props: z.object({\n text: z.string(),\n variant: z\n .enum([\"default\", \"secondary\", \"destructive\", \"outline\"])\n .nullable(),\n }),\n description: \"Status badge\",\n example: { text: \"Active\", variant: \"default\" },\n },\n\n Alert: {\n props: z.object({\n title: z.string(),\n message: z.string().nullable(),\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]).nullable(),\n }),\n description: \"Alert banner\",\n example: {\n title: \"Note\",\n message: \"Your changes have been saved.\",\n type: \"success\",\n },\n },\n\n Progress: {\n props: z.object({\n value: z.number(),\n max: z.number().nullable(),\n label: z.string().nullable(),\n }),\n description: \"Progress bar (value 0-100)\",\n example: { value: 65, max: 100, label: \"Upload progress\" },\n },\n\n Skeleton: {\n props: z.object({\n width: z.string().nullable(),\n height: z.string().nullable(),\n rounded: z.boolean().nullable(),\n }),\n description: \"Loading placeholder skeleton\",\n },\n\n Spinner: {\n props: z.object({\n size: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n label: z.string().nullable(),\n }),\n description: \"Loading spinner indicator\",\n },\n\n Tooltip: {\n props: z.object({\n content: z.string(),\n text: z.string(),\n }),\n description: \"Hover tooltip. Shows content on hover over text.\",\n },\n\n Popover: {\n props: z.object({\n trigger: z.string(),\n content: z.string(),\n }),\n description: \"Popover that appears on click of trigger.\",\n },\n\n // ==========================================================================\n // Form Input Components\n // ==========================================================================\n\n Input: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n type: z.enum([\"text\", \"email\", \"password\", \"number\"]).nullable(),\n placeholder: z.string().nullable(),\n value: z.string().nullable(),\n checks: z\n .array(\n z.object({\n type: z.string(),\n message: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n )\n .nullable(),\n }),\n events: [\"submit\", \"focus\", \"blur\"],\n description:\n \"Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength).\",\n example: {\n label: \"Email\",\n name: \"email\",\n type: \"email\",\n placeholder: \"you@example.com\",\n },\n },\n\n Textarea: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n placeholder: z.string().nullable(),\n rows: z.number().nullable(),\n value: z.string().nullable(),\n checks: z\n .array(\n z.object({\n type: z.string(),\n message: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n )\n .nullable(),\n }),\n description:\n \"Multi-line text input. Use { $bindState } on value for binding. Use checks for validation.\",\n },\n\n Select: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n options: z.array(z.string()),\n placeholder: z.string().nullable(),\n value: z.string().nullable(),\n checks: z\n .array(\n z.object({\n type: z.string(),\n message: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n )\n .nullable(),\n }),\n events: [\"change\"],\n description:\n \"Dropdown select input. Use { $bindState } on value for binding. Use checks for validation.\",\n },\n\n Checkbox: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n checked: z.boolean().nullable(),\n }),\n events: [\"change\"],\n description: \"Checkbox input. Use { $bindState } on checked for binding.\",\n },\n\n Radio: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n options: z.array(z.string()),\n value: z.string().nullable(),\n }),\n events: [\"change\"],\n description: \"Radio button group. Use { $bindState } on value for binding.\",\n },\n\n Switch: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n checked: z.boolean().nullable(),\n }),\n events: [\"change\"],\n description: \"Toggle switch. Use { $bindState } on checked for binding.\",\n },\n\n Slider: {\n props: z.object({\n label: z.string().nullable(),\n min: z.number().nullable(),\n max: z.number().nullable(),\n step: z.number().nullable(),\n value: z.number().nullable(),\n }),\n events: [\"change\"],\n description: \"Range slider input. Use { $bindState } on value for binding.\",\n },\n\n // ==========================================================================\n // Action Components\n // ==========================================================================\n\n Button: {\n props: z.object({\n label: z.string(),\n variant: z.enum([\"primary\", \"secondary\", \"danger\"]).nullable(),\n disabled: z.boolean().nullable(),\n }),\n events: [\"press\"],\n description: \"Clickable button. Bind on.press for handler.\",\n example: { label: \"Submit\", variant: \"primary\" },\n },\n\n Link: {\n props: z.object({\n label: z.string(),\n href: z.string(),\n }),\n events: [\"press\"],\n description: \"Anchor link. Bind on.press for click handler.\",\n },\n\n DropdownMenu: {\n props: z.object({\n label: z.string(),\n items: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n value: z.string().nullable(),\n }),\n events: [\"select\"],\n description:\n \"Dropdown menu with trigger button and selectable items. Use { $bindState } on value for selected item binding.\",\n },\n\n Toggle: {\n props: z.object({\n label: z.string(),\n pressed: z.boolean().nullable(),\n variant: z.enum([\"default\", \"outline\"]).nullable(),\n }),\n events: [\"change\"],\n description:\n \"Toggle button. Use { $bindState } on pressed for state binding.\",\n },\n\n ToggleGroup: {\n props: z.object({\n items: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n type: z.enum([\"single\", \"multiple\"]).nullable(),\n value: z.string().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Group of toggle buttons. Type 'single' (default) or 'multiple'. Use { $bindState } on value.\",\n },\n\n ButtonGroup: {\n props: z.object({\n buttons: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n selected: z.string().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Segmented button group. Use { $bindState } on selected for selected value.\",\n },\n\n Pagination: {\n props: z.object({\n totalPages: z.number(),\n page: z.number().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Page navigation. Use { $bindState } on page for current page number.\",\n },\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Type for a component definition\n */\nexport type ComponentDefinition = {\n props: z.ZodType;\n slots?: string[];\n events?: string[];\n description: string;\n example?: Record<string, unknown>;\n};\n\n/**\n * Infer the props type for a shadcn component by name.\n * Derives the TypeScript type directly from the Zod schema,\n * so component implementations stay in sync with catalog definitions.\n *\n * @example\n * ```ts\n * type CardProps = ShadcnProps<\"Card\">;\n * // { title: string | null; description: string | null; ... }\n * ```\n */\nexport type ShadcnProps<K extends keyof typeof shadcnComponentDefinitions> =\n z.output<(typeof shadcnComponentDefinitions)[K][\"props\"]>;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/catalog.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// =============================================================================\n// Shared validation schemas used across form components\n// =============================================================================\n\nconst validationCheckSchema = z\n .array(\n z.object({\n type: z.string(),\n message: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n )\n .nullable();\n\nconst validateOnSchema = z.enum([\"change\", \"blur\", \"submit\"]).nullable();\n\n// =============================================================================\n// shadcn/ui Component Definitions\n// =============================================================================\n\n/**\n * shadcn/ui component definitions for json-render catalogs.\n *\n * These can be used directly or extended with custom components.\n * All components are built using Radix UI primitives + Tailwind CSS.\n */\nexport const shadcnComponentDefinitions = {\n // ==========================================================================\n // Layout Components\n // ==========================================================================\n\n Card: {\n props: z.object({\n title: z.string().nullable(),\n description: z.string().nullable(),\n maxWidth: z.enum([\"sm\", \"md\", \"lg\", \"full\"]).nullable(),\n centered: z.boolean().nullable(),\n }),\n slots: [\"default\"],\n description:\n \"Container card for content sections. Use for forms/content boxes, NOT for page headers.\",\n example: { title: \"Overview\", description: \"Your account summary\" },\n },\n\n Stack: {\n props: z.object({\n direction: z.enum([\"horizontal\", \"vertical\"]).nullable(),\n gap: z.enum([\"none\", \"sm\", \"md\", \"lg\"]).nullable(),\n align: z.enum([\"start\", \"center\", \"end\", \"stretch\"]).nullable(),\n justify: z\n .enum([\"start\", \"center\", \"end\", \"between\", \"around\"])\n .nullable(),\n }),\n slots: [\"default\"],\n description: \"Flex container for layouts\",\n example: { direction: \"vertical\", gap: \"md\" },\n },\n\n Grid: {\n props: z.object({\n columns: z.number().nullable(),\n gap: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n }),\n slots: [\"default\"],\n description: \"Grid layout (1-6 columns)\",\n example: { columns: 3, gap: \"md\" },\n },\n\n Separator: {\n props: z.object({\n orientation: z.enum([\"horizontal\", \"vertical\"]).nullable(),\n }),\n description: \"Visual separator line\",\n },\n\n Tabs: {\n props: z.object({\n tabs: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n defaultValue: z.string().nullable(),\n value: z.string().nullable(),\n }),\n slots: [\"default\"],\n events: [\"change\"],\n description:\n \"Tab navigation. Use { $bindState } on value for active tab binding.\",\n },\n\n Accordion: {\n props: z.object({\n items: z.array(\n z.object({\n title: z.string(),\n content: z.string(),\n }),\n ),\n type: z.enum([\"single\", \"multiple\"]).nullable(),\n }),\n description:\n \"Collapsible sections. Items as [{title, content}]. Type 'single' (default) or 'multiple'.\",\n },\n\n Collapsible: {\n props: z.object({\n title: z.string(),\n defaultOpen: z.boolean().nullable(),\n }),\n slots: [\"default\"],\n description: \"Collapsible section with trigger. Children render inside.\",\n },\n\n Dialog: {\n props: z.object({\n title: z.string(),\n description: z.string().nullable(),\n openPath: z.string(),\n }),\n slots: [\"default\"],\n description:\n \"Modal dialog. Set openPath to a boolean state path. Use setState to toggle.\",\n },\n\n Drawer: {\n props: z.object({\n title: z.string(),\n description: z.string().nullable(),\n openPath: z.string(),\n }),\n slots: [\"default\"],\n description:\n \"Bottom sheet drawer. Set openPath to a boolean state path. Use setState to toggle.\",\n },\n\n Carousel: {\n props: z.object({\n items: z.array(\n z.object({\n title: z.string().nullable(),\n description: z.string().nullable(),\n }),\n ),\n }),\n description: \"Horizontally scrollable carousel of cards.\",\n },\n\n // ==========================================================================\n // Data Display Components\n // ==========================================================================\n\n Table: {\n props: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n caption: z.string().nullable(),\n }),\n description:\n 'Data table. columns: header labels. rows: 2D array of cell strings, e.g. [[\"Alice\",\"admin\"],[\"Bob\",\"user\"]].',\n example: {\n columns: [\"Name\", \"Role\"],\n rows: [\n [\"Alice\", \"Admin\"],\n [\"Bob\", \"User\"],\n ],\n },\n },\n\n Heading: {\n props: z.object({\n text: z.string(),\n level: z.enum([\"h1\", \"h2\", \"h3\", \"h4\"]).nullable(),\n }),\n description: \"Heading text (h1-h4)\",\n example: { text: \"Welcome\", level: \"h1\" },\n },\n\n Text: {\n props: z.object({\n text: z.string(),\n variant: z.enum([\"body\", \"caption\", \"muted\", \"lead\", \"code\"]).nullable(),\n }),\n description: \"Paragraph text\",\n example: { text: \"Hello, world!\" },\n },\n\n Image: {\n props: z.object({\n src: z.string().nullable(),\n alt: z.string(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n }),\n description:\n \"Image component. Renders an img tag when src is provided, otherwise a placeholder.\",\n },\n\n Avatar: {\n props: z.object({\n src: z.string().nullable(),\n name: z.string(),\n size: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n }),\n description: \"User avatar with fallback initials\",\n example: { name: \"Jane Doe\", size: \"md\" },\n },\n\n Badge: {\n props: z.object({\n text: z.string(),\n variant: z\n .enum([\"default\", \"secondary\", \"destructive\", \"outline\"])\n .nullable(),\n }),\n description: \"Status badge\",\n example: { text: \"Active\", variant: \"default\" },\n },\n\n Alert: {\n props: z.object({\n title: z.string(),\n message: z.string().nullable(),\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]).nullable(),\n }),\n description: \"Alert banner\",\n example: {\n title: \"Note\",\n message: \"Your changes have been saved.\",\n type: \"success\",\n },\n },\n\n Progress: {\n props: z.object({\n value: z.number(),\n max: z.number().nullable(),\n label: z.string().nullable(),\n }),\n description: \"Progress bar (value 0-100)\",\n example: { value: 65, max: 100, label: \"Upload progress\" },\n },\n\n Skeleton: {\n props: z.object({\n width: z.string().nullable(),\n height: z.string().nullable(),\n rounded: z.boolean().nullable(),\n }),\n description: \"Loading placeholder skeleton\",\n },\n\n Spinner: {\n props: z.object({\n size: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n label: z.string().nullable(),\n }),\n description: \"Loading spinner indicator\",\n },\n\n Tooltip: {\n props: z.object({\n content: z.string(),\n text: z.string(),\n }),\n description: \"Hover tooltip. Shows content on hover over text.\",\n },\n\n Popover: {\n props: z.object({\n trigger: z.string(),\n content: z.string(),\n }),\n description: \"Popover that appears on click of trigger.\",\n },\n\n // ==========================================================================\n // Form Input Components\n // ==========================================================================\n\n Input: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n type: z.enum([\"text\", \"email\", \"password\", \"number\"]).nullable(),\n placeholder: z.string().nullable(),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"submit\", \"focus\", \"blur\"],\n description:\n \"Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength). validateOn controls timing (default: blur).\",\n example: {\n label: \"Email\",\n name: \"email\",\n type: \"email\",\n placeholder: \"you@example.com\",\n },\n },\n\n Textarea: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n placeholder: z.string().nullable(),\n rows: z.number().nullable(),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n description:\n \"Multi-line text input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: blur).\",\n },\n\n Select: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n options: z.array(z.string()),\n placeholder: z.string().nullable(),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Dropdown select input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Checkbox: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n checked: z.boolean().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Checkbox input. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Radio: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n options: z.array(z.string()),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Radio button group. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Switch: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n checked: z.boolean().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Toggle switch. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Slider: {\n props: z.object({\n label: z.string().nullable(),\n min: z.number().nullable(),\n max: z.number().nullable(),\n step: z.number().nullable(),\n value: z.number().nullable(),\n }),\n events: [\"change\"],\n description: \"Range slider input. Use { $bindState } on value for binding.\",\n },\n\n // ==========================================================================\n // Action Components\n // ==========================================================================\n\n Button: {\n props: z.object({\n label: z.string(),\n variant: z.enum([\"primary\", \"secondary\", \"danger\"]).nullable(),\n disabled: z.boolean().nullable(),\n }),\n events: [\"press\"],\n description: \"Clickable button. Bind on.press for handler.\",\n example: { label: \"Submit\", variant: \"primary\" },\n },\n\n Link: {\n props: z.object({\n label: z.string(),\n href: z.string(),\n }),\n events: [\"press\"],\n description: \"Anchor link. Bind on.press for click handler.\",\n },\n\n DropdownMenu: {\n props: z.object({\n label: z.string(),\n items: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n value: z.string().nullable(),\n }),\n events: [\"select\"],\n description:\n \"Dropdown menu with trigger button and selectable items. Use { $bindState } on value for selected item binding.\",\n },\n\n Toggle: {\n props: z.object({\n label: z.string(),\n pressed: z.boolean().nullable(),\n variant: z.enum([\"default\", \"outline\"]).nullable(),\n }),\n events: [\"change\"],\n description:\n \"Toggle button. Use { $bindState } on pressed for state binding.\",\n },\n\n ToggleGroup: {\n props: z.object({\n items: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n type: z.enum([\"single\", \"multiple\"]).nullable(),\n value: z.string().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Group of toggle buttons. Type 'single' (default) or 'multiple'. Use { $bindState } on value.\",\n },\n\n ButtonGroup: {\n props: z.object({\n buttons: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n selected: z.string().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Segmented button group. Use { $bindState } on selected for selected value.\",\n },\n\n Pagination: {\n props: z.object({\n totalPages: z.number(),\n page: z.number().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Page navigation. Use { $bindState } on page for current page number.\",\n },\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Type for a component definition\n */\nexport type ComponentDefinition = {\n props: z.ZodType;\n slots?: string[];\n events?: string[];\n description: string;\n example?: Record<string, unknown>;\n};\n\n/**\n * Infer the props type for a shadcn component by name.\n * Derives the TypeScript type directly from the Zod schema,\n * so component implementations stay in sync with catalog definitions.\n *\n * @example\n * ```ts\n * type CardProps = ShadcnProps<\"Card\">;\n * // { title: string | null; description: string | null; ... }\n * ```\n */\nexport type ShadcnProps<K extends keyof typeof shadcnComponentDefinitions> =\n z.output<(typeof shadcnComponentDefinitions)[K][\"props\"]>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAMlB,IAAM,wBAAwB,aAC3B;AAAA,EACC,aAAE,OAAO;AAAA,IACP,MAAM,aAAE,OAAO;AAAA,IACf,SAAS,aAAE,OAAO;AAAA,IAClB,MAAM,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACnD,CAAC;AACH,EACC,SAAS;AAEZ,IAAM,mBAAmB,aAAE,KAAK,CAAC,UAAU,QAAQ,QAAQ,CAAC,EAAE,SAAS;AAYhE,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA,EAKxC,MAAM;AAAA,IACJ,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,MACjC,UAAU,aAAE,KAAK,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,SAAS;AAAA,MACtD,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,aACE;AAAA,IACF,SAAS,EAAE,OAAO,YAAY,aAAa,uBAAuB;AAAA,EACpE;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,WAAW,aAAE,KAAK,CAAC,cAAc,UAAU,CAAC,EAAE,SAAS;AAAA,MACvD,KAAK,aAAE,KAAK,CAAC,QAAQ,MAAM,MAAM,IAAI,CAAC,EAAE,SAAS;AAAA,MACjD,OAAO,aAAE,KAAK,CAAC,SAAS,UAAU,OAAO,SAAS,CAAC,EAAE,SAAS;AAAA,MAC9D,SAAS,aACN,KAAK,CAAC,SAAS,UAAU,OAAO,WAAW,QAAQ,CAAC,EACpD,SAAS;AAAA,IACd,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,aAAa;AAAA,IACb,SAAS,EAAE,WAAW,YAAY,KAAK,KAAK;AAAA,EAC9C;AAAA,EAEA,MAAM;AAAA,IACJ,OAAO,aAAE,OAAO;AAAA,MACd,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,MAC7B,KAAK,aAAE,KAAK,CAAC,MAAM,MAAM,IAAI,CAAC,EAAE,SAAS;AAAA,IAC3C,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,aAAa;AAAA,IACb,SAAS,EAAE,SAAS,GAAG,KAAK,KAAK;AAAA,EACnC;AAAA,EAEA,WAAW;AAAA,IACT,OAAO,aAAE,OAAO;AAAA,MACd,aAAa,aAAE,KAAK,CAAC,cAAc,UAAU,CAAC,EAAE,SAAS;AAAA,IAC3D,CAAC;AAAA,IACD,aAAa;AAAA,EACf;AAAA,EAEA,MAAM;AAAA,IACJ,OAAO,aAAE,OAAO;AAAA,MACd,MAAM,aAAE;AAAA,QACN,aAAE,OAAO;AAAA,UACP,OAAO,aAAE,OAAO;AAAA,UAChB,OAAO,aAAE,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,cAAc,aAAE,OAAO,EAAE,SAAS;AAAA,MAClC,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,WAAW;AAAA,IACT,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE;AAAA,QACP,aAAE,OAAO;AAAA,UACP,OAAO,aAAE,OAAO;AAAA,UAChB,SAAS,aAAE,OAAO;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MACA,MAAM,aAAE,KAAK,CAAC,UAAU,UAAU,CAAC,EAAE,SAAS;AAAA,IAChD,CAAC;AAAA,IACD,aACE;AAAA,EACJ;AAAA,EAEA,aAAa;AAAA,IACX,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,aAAa,aAAE,QAAQ,EAAE,SAAS;AAAA,IACpC,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,aAAa;AAAA,EACf;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,MACjC,UAAU,aAAE,OAAO;AAAA,IACrB,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,MACjC,UAAU,aAAE,OAAO;AAAA,IACrB,CAAC;AAAA,IACD,OAAO,CAAC,SAAS;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,UAAU;AAAA,IACR,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE;AAAA,QACP,aAAE,OAAO;AAAA,UACP,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,UAC3B,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,aAAa;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,SAAS,aAAE,MAAM,aAAE,OAAO,CAAC;AAAA,MAC3B,MAAM,aAAE,MAAM,aAAE,MAAM,aAAE,OAAO,CAAC,CAAC;AAAA,MACjC,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,CAAC;AAAA,IACD,aACE;AAAA,IACF,SAAS;AAAA,MACP,SAAS,CAAC,QAAQ,MAAM;AAAA,MACxB,MAAM;AAAA,QACJ,CAAC,SAAS,OAAO;AAAA,QACjB,CAAC,OAAO,MAAM;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS;AAAA,IACP,OAAO,aAAE,OAAO;AAAA,MACd,MAAM,aAAE,OAAO;AAAA,MACf,OAAO,aAAE,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI,CAAC,EAAE,SAAS;AAAA,IACnD,CAAC;AAAA,IACD,aAAa;AAAA,IACb,SAAS,EAAE,MAAM,WAAW,OAAO,KAAK;AAAA,EAC1C;AAAA,EAEA,MAAM;AAAA,IACJ,OAAO,aAAE,OAAO;AAAA,MACd,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,KAAK,CAAC,QAAQ,WAAW,SAAS,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA,IACzE,CAAC;AAAA,IACD,aAAa;AAAA,IACb,SAAS,EAAE,MAAM,gBAAgB;AAAA,EACnC;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,KAAK,aAAE,OAAO,EAAE,SAAS;AAAA,MACzB,KAAK,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,CAAC;AAAA,IACD,aACE;AAAA,EACJ;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,KAAK,aAAE,OAAO,EAAE,SAAS;AAAA,MACzB,MAAM,aAAE,OAAO;AAAA,MACf,MAAM,aAAE,KAAK,CAAC,MAAM,MAAM,IAAI,CAAC,EAAE,SAAS;AAAA,IAC5C,CAAC;AAAA,IACD,aAAa;AAAA,IACb,SAAS,EAAE,MAAM,YAAY,MAAM,KAAK;AAAA,EAC1C;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aACN,KAAK,CAAC,WAAW,aAAa,eAAe,SAAS,CAAC,EACvD,SAAS;AAAA,IACd,CAAC;AAAA,IACD,aAAa;AAAA,IACb,SAAS,EAAE,MAAM,UAAU,SAAS,UAAU;AAAA,EAChD;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,MAC7B,MAAM,aAAE,KAAK,CAAC,QAAQ,WAAW,WAAW,OAAO,CAAC,EAAE,SAAS;AAAA,IACjE,CAAC;AAAA,IACD,aAAa;AAAA,IACb,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,KAAK,aAAE,OAAO,EAAE,SAAS;AAAA,MACzB,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,IACD,aAAa;AAAA,IACb,SAAS,EAAE,OAAO,IAAI,KAAK,KAAK,OAAO,kBAAkB;AAAA,EAC3D;AAAA,EAEA,UAAU;AAAA,IACR,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,SAAS,aAAE,QAAQ,EAAE,SAAS;AAAA,IAChC,CAAC;AAAA,IACD,aAAa;AAAA,EACf;AAAA,EAEA,SAAS;AAAA,IACP,OAAO,aAAE,OAAO;AAAA,MACd,MAAM,aAAE,KAAK,CAAC,MAAM,MAAM,IAAI,CAAC,EAAE,SAAS;AAAA,MAC1C,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,IACD,aAAa;AAAA,EACf;AAAA,EAEA,SAAS;AAAA,IACP,OAAO,aAAE,OAAO;AAAA,MACd,SAAS,aAAE,OAAO;AAAA,MAClB,MAAM,aAAE,OAAO;AAAA,IACjB,CAAC;AAAA,IACD,aAAa;AAAA,EACf;AAAA,EAEA,SAAS;AAAA,IACP,OAAO,aAAE,OAAO;AAAA,MACd,SAAS,aAAE,OAAO;AAAA,MAClB,SAAS,aAAE,OAAO;AAAA,IACpB,CAAC;AAAA,IACD,aAAa;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,MACf,MAAM,aAAE,KAAK,CAAC,QAAQ,SAAS,YAAY,QAAQ,CAAC,EAAE,SAAS;AAAA,MAC/D,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,MACjC,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,IACD,QAAQ,CAAC,UAAU,SAAS,MAAM;AAAA,IAClC,aACE;AAAA,IACF,SAAS;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,MACf,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,MACjC,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,IACD,aACE;AAAA,EACJ;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,MAAM,aAAE,OAAO,CAAC;AAAA,MAC3B,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,MACjC,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,UAAU;AAAA,IACR,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,QAAQ,EAAE,SAAS;AAAA,MAC9B,QAAQ;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,MAAM,aAAE,OAAO,CAAC;AAAA,MAC3B,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQ;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,QAAQ,EAAE,SAAS;AAAA,MAC9B,QAAQ;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,KAAK,aAAE,OAAO,EAAE,SAAS;AAAA,MACzB,KAAK,aAAE,OAAO,EAAE,SAAS;AAAA,MACzB,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aAAa;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,SAAS,aAAE,KAAK,CAAC,WAAW,aAAa,QAAQ,CAAC,EAAE,SAAS;AAAA,MAC7D,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,IACjC,CAAC;AAAA,IACD,QAAQ,CAAC,OAAO;AAAA,IAChB,aAAa;AAAA,IACb,SAAS,EAAE,OAAO,UAAU,SAAS,UAAU;AAAA,EACjD;AAAA,EAEA,MAAM;AAAA,IACJ,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,MAAM,aAAE,OAAO;AAAA,IACjB,CAAC;AAAA,IACD,QAAQ,CAAC,OAAO;AAAA,IAChB,aAAa;AAAA,EACf;AAAA,EAEA,cAAc;AAAA,IACZ,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,OAAO,aAAE;AAAA,QACP,aAAE,OAAO;AAAA,UACP,OAAO,aAAE,OAAO;AAAA,UAChB,OAAO,aAAE,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,QAAQ;AAAA,IACN,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE,OAAO;AAAA,MAChB,SAAS,aAAE,QAAQ,EAAE,SAAS;AAAA,MAC9B,SAAS,aAAE,KAAK,CAAC,WAAW,SAAS,CAAC,EAAE,SAAS;AAAA,IACnD,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,aAAa;AAAA,IACX,OAAO,aAAE,OAAO;AAAA,MACd,OAAO,aAAE;AAAA,QACP,aAAE,OAAO;AAAA,UACP,OAAO,aAAE,OAAO;AAAA,UAChB,OAAO,aAAE,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,MAAM,aAAE,KAAK,CAAC,UAAU,UAAU,CAAC,EAAE,SAAS;AAAA,MAC9C,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,aAAa;AAAA,IACX,OAAO,aAAE,OAAO;AAAA,MACd,SAAS,aAAE;AAAA,QACT,aAAE,OAAO;AAAA,UACP,OAAO,aAAE,OAAO;AAAA,UAChB,OAAO,aAAE,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,UAAU,aAAE,OAAO,EAAE,SAAS;AAAA,IAChC,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AAAA,EAEA,YAAY;AAAA,IACV,OAAO,aAAE,OAAO;AAAA,MACd,YAAY,aAAE,OAAO;AAAA,MACrB,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,CAAC;AAAA,IACD,QAAQ,CAAC,QAAQ;AAAA,IACjB,aACE;AAAA,EACJ;AACF;","names":[]}
package/dist/catalog.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shadcnComponentDefinitions
3
- } from "./chunk-VZQBPEYT.mjs";
3
+ } from "./chunk-F5LRX6LB.mjs";
4
4
  export {
5
5
  shadcnComponentDefinitions
6
6
  };
@@ -1,5 +1,13 @@
1
1
  // src/catalog.ts
2
2
  import { z } from "zod";
3
+ var validationCheckSchema = z.array(
4
+ z.object({
5
+ type: z.string(),
6
+ message: z.string(),
7
+ args: z.record(z.string(), z.unknown()).optional()
8
+ })
9
+ ).nullable();
10
+ var validateOnSchema = z.enum(["change", "blur", "submit"]).nullable();
3
11
  var shadcnComponentDefinitions = {
4
12
  // ==========================================================================
5
13
  // Layout Components
@@ -226,16 +234,11 @@ var shadcnComponentDefinitions = {
226
234
  type: z.enum(["text", "email", "password", "number"]).nullable(),
227
235
  placeholder: z.string().nullable(),
228
236
  value: z.string().nullable(),
229
- checks: z.array(
230
- z.object({
231
- type: z.string(),
232
- message: z.string(),
233
- args: z.record(z.string(), z.unknown()).optional()
234
- })
235
- ).nullable()
237
+ checks: validationCheckSchema,
238
+ validateOn: validateOnSchema
236
239
  }),
237
240
  events: ["submit", "focus", "blur"],
238
- description: "Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength).",
241
+ description: "Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength). validateOn controls timing (default: blur).",
239
242
  example: {
240
243
  label: "Email",
241
244
  name: "email",
@@ -250,15 +253,10 @@ var shadcnComponentDefinitions = {
250
253
  placeholder: z.string().nullable(),
251
254
  rows: z.number().nullable(),
252
255
  value: z.string().nullable(),
253
- checks: z.array(
254
- z.object({
255
- type: z.string(),
256
- message: z.string(),
257
- args: z.record(z.string(), z.unknown()).optional()
258
- })
259
- ).nullable()
256
+ checks: validationCheckSchema,
257
+ validateOn: validateOnSchema
260
258
  }),
261
- description: "Multi-line text input. Use { $bindState } on value for binding. Use checks for validation."
259
+ description: "Multi-line text input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: blur)."
262
260
  },
263
261
  Select: {
264
262
  props: z.object({
@@ -267,44 +265,45 @@ var shadcnComponentDefinitions = {
267
265
  options: z.array(z.string()),
268
266
  placeholder: z.string().nullable(),
269
267
  value: z.string().nullable(),
270
- checks: z.array(
271
- z.object({
272
- type: z.string(),
273
- message: z.string(),
274
- args: z.record(z.string(), z.unknown()).optional()
275
- })
276
- ).nullable()
268
+ checks: validationCheckSchema,
269
+ validateOn: validateOnSchema
277
270
  }),
278
271
  events: ["change"],
279
- description: "Dropdown select input. Use { $bindState } on value for binding. Use checks for validation."
272
+ description: "Dropdown select input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change)."
280
273
  },
281
274
  Checkbox: {
282
275
  props: z.object({
283
276
  label: z.string(),
284
277
  name: z.string(),
285
- checked: z.boolean().nullable()
278
+ checked: z.boolean().nullable(),
279
+ checks: validationCheckSchema,
280
+ validateOn: validateOnSchema
286
281
  }),
287
282
  events: ["change"],
288
- description: "Checkbox input. Use { $bindState } on checked for binding."
283
+ description: "Checkbox input. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change)."
289
284
  },
290
285
  Radio: {
291
286
  props: z.object({
292
287
  label: z.string(),
293
288
  name: z.string(),
294
289
  options: z.array(z.string()),
295
- value: z.string().nullable()
290
+ value: z.string().nullable(),
291
+ checks: validationCheckSchema,
292
+ validateOn: validateOnSchema
296
293
  }),
297
294
  events: ["change"],
298
- description: "Radio button group. Use { $bindState } on value for binding."
295
+ description: "Radio button group. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change)."
299
296
  },
300
297
  Switch: {
301
298
  props: z.object({
302
299
  label: z.string(),
303
300
  name: z.string(),
304
- checked: z.boolean().nullable()
301
+ checked: z.boolean().nullable(),
302
+ checks: validationCheckSchema,
303
+ validateOn: validateOnSchema
305
304
  }),
306
305
  events: ["change"],
307
- description: "Toggle switch. Use { $bindState } on checked for binding."
306
+ description: "Toggle switch. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change)."
308
307
  },
309
308
  Slider: {
310
309
  props: z.object({
@@ -401,4 +400,4 @@ var shadcnComponentDefinitions = {
401
400
  export {
402
401
  shadcnComponentDefinitions
403
402
  };
404
- //# sourceMappingURL=chunk-VZQBPEYT.mjs.map
403
+ //# sourceMappingURL=chunk-F5LRX6LB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/catalog.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// =============================================================================\n// Shared validation schemas used across form components\n// =============================================================================\n\nconst validationCheckSchema = z\n .array(\n z.object({\n type: z.string(),\n message: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n )\n .nullable();\n\nconst validateOnSchema = z.enum([\"change\", \"blur\", \"submit\"]).nullable();\n\n// =============================================================================\n// shadcn/ui Component Definitions\n// =============================================================================\n\n/**\n * shadcn/ui component definitions for json-render catalogs.\n *\n * These can be used directly or extended with custom components.\n * All components are built using Radix UI primitives + Tailwind CSS.\n */\nexport const shadcnComponentDefinitions = {\n // ==========================================================================\n // Layout Components\n // ==========================================================================\n\n Card: {\n props: z.object({\n title: z.string().nullable(),\n description: z.string().nullable(),\n maxWidth: z.enum([\"sm\", \"md\", \"lg\", \"full\"]).nullable(),\n centered: z.boolean().nullable(),\n }),\n slots: [\"default\"],\n description:\n \"Container card for content sections. Use for forms/content boxes, NOT for page headers.\",\n example: { title: \"Overview\", description: \"Your account summary\" },\n },\n\n Stack: {\n props: z.object({\n direction: z.enum([\"horizontal\", \"vertical\"]).nullable(),\n gap: z.enum([\"none\", \"sm\", \"md\", \"lg\"]).nullable(),\n align: z.enum([\"start\", \"center\", \"end\", \"stretch\"]).nullable(),\n justify: z\n .enum([\"start\", \"center\", \"end\", \"between\", \"around\"])\n .nullable(),\n }),\n slots: [\"default\"],\n description: \"Flex container for layouts\",\n example: { direction: \"vertical\", gap: \"md\" },\n },\n\n Grid: {\n props: z.object({\n columns: z.number().nullable(),\n gap: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n }),\n slots: [\"default\"],\n description: \"Grid layout (1-6 columns)\",\n example: { columns: 3, gap: \"md\" },\n },\n\n Separator: {\n props: z.object({\n orientation: z.enum([\"horizontal\", \"vertical\"]).nullable(),\n }),\n description: \"Visual separator line\",\n },\n\n Tabs: {\n props: z.object({\n tabs: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n defaultValue: z.string().nullable(),\n value: z.string().nullable(),\n }),\n slots: [\"default\"],\n events: [\"change\"],\n description:\n \"Tab navigation. Use { $bindState } on value for active tab binding.\",\n },\n\n Accordion: {\n props: z.object({\n items: z.array(\n z.object({\n title: z.string(),\n content: z.string(),\n }),\n ),\n type: z.enum([\"single\", \"multiple\"]).nullable(),\n }),\n description:\n \"Collapsible sections. Items as [{title, content}]. Type 'single' (default) or 'multiple'.\",\n },\n\n Collapsible: {\n props: z.object({\n title: z.string(),\n defaultOpen: z.boolean().nullable(),\n }),\n slots: [\"default\"],\n description: \"Collapsible section with trigger. Children render inside.\",\n },\n\n Dialog: {\n props: z.object({\n title: z.string(),\n description: z.string().nullable(),\n openPath: z.string(),\n }),\n slots: [\"default\"],\n description:\n \"Modal dialog. Set openPath to a boolean state path. Use setState to toggle.\",\n },\n\n Drawer: {\n props: z.object({\n title: z.string(),\n description: z.string().nullable(),\n openPath: z.string(),\n }),\n slots: [\"default\"],\n description:\n \"Bottom sheet drawer. Set openPath to a boolean state path. Use setState to toggle.\",\n },\n\n Carousel: {\n props: z.object({\n items: z.array(\n z.object({\n title: z.string().nullable(),\n description: z.string().nullable(),\n }),\n ),\n }),\n description: \"Horizontally scrollable carousel of cards.\",\n },\n\n // ==========================================================================\n // Data Display Components\n // ==========================================================================\n\n Table: {\n props: z.object({\n columns: z.array(z.string()),\n rows: z.array(z.array(z.string())),\n caption: z.string().nullable(),\n }),\n description:\n 'Data table. columns: header labels. rows: 2D array of cell strings, e.g. [[\"Alice\",\"admin\"],[\"Bob\",\"user\"]].',\n example: {\n columns: [\"Name\", \"Role\"],\n rows: [\n [\"Alice\", \"Admin\"],\n [\"Bob\", \"User\"],\n ],\n },\n },\n\n Heading: {\n props: z.object({\n text: z.string(),\n level: z.enum([\"h1\", \"h2\", \"h3\", \"h4\"]).nullable(),\n }),\n description: \"Heading text (h1-h4)\",\n example: { text: \"Welcome\", level: \"h1\" },\n },\n\n Text: {\n props: z.object({\n text: z.string(),\n variant: z.enum([\"body\", \"caption\", \"muted\", \"lead\", \"code\"]).nullable(),\n }),\n description: \"Paragraph text\",\n example: { text: \"Hello, world!\" },\n },\n\n Image: {\n props: z.object({\n src: z.string().nullable(),\n alt: z.string(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n }),\n description:\n \"Image component. Renders an img tag when src is provided, otherwise a placeholder.\",\n },\n\n Avatar: {\n props: z.object({\n src: z.string().nullable(),\n name: z.string(),\n size: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n }),\n description: \"User avatar with fallback initials\",\n example: { name: \"Jane Doe\", size: \"md\" },\n },\n\n Badge: {\n props: z.object({\n text: z.string(),\n variant: z\n .enum([\"default\", \"secondary\", \"destructive\", \"outline\"])\n .nullable(),\n }),\n description: \"Status badge\",\n example: { text: \"Active\", variant: \"default\" },\n },\n\n Alert: {\n props: z.object({\n title: z.string(),\n message: z.string().nullable(),\n type: z.enum([\"info\", \"success\", \"warning\", \"error\"]).nullable(),\n }),\n description: \"Alert banner\",\n example: {\n title: \"Note\",\n message: \"Your changes have been saved.\",\n type: \"success\",\n },\n },\n\n Progress: {\n props: z.object({\n value: z.number(),\n max: z.number().nullable(),\n label: z.string().nullable(),\n }),\n description: \"Progress bar (value 0-100)\",\n example: { value: 65, max: 100, label: \"Upload progress\" },\n },\n\n Skeleton: {\n props: z.object({\n width: z.string().nullable(),\n height: z.string().nullable(),\n rounded: z.boolean().nullable(),\n }),\n description: \"Loading placeholder skeleton\",\n },\n\n Spinner: {\n props: z.object({\n size: z.enum([\"sm\", \"md\", \"lg\"]).nullable(),\n label: z.string().nullable(),\n }),\n description: \"Loading spinner indicator\",\n },\n\n Tooltip: {\n props: z.object({\n content: z.string(),\n text: z.string(),\n }),\n description: \"Hover tooltip. Shows content on hover over text.\",\n },\n\n Popover: {\n props: z.object({\n trigger: z.string(),\n content: z.string(),\n }),\n description: \"Popover that appears on click of trigger.\",\n },\n\n // ==========================================================================\n // Form Input Components\n // ==========================================================================\n\n Input: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n type: z.enum([\"text\", \"email\", \"password\", \"number\"]).nullable(),\n placeholder: z.string().nullable(),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"submit\", \"focus\", \"blur\"],\n description:\n \"Text input field. Use { $bindState } on value for two-way binding. Use checks for validation (e.g. required, email, minLength). validateOn controls timing (default: blur).\",\n example: {\n label: \"Email\",\n name: \"email\",\n type: \"email\",\n placeholder: \"you@example.com\",\n },\n },\n\n Textarea: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n placeholder: z.string().nullable(),\n rows: z.number().nullable(),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n description:\n \"Multi-line text input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: blur).\",\n },\n\n Select: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n options: z.array(z.string()),\n placeholder: z.string().nullable(),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Dropdown select input. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Checkbox: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n checked: z.boolean().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Checkbox input. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Radio: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n options: z.array(z.string()),\n value: z.string().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Radio button group. Use { $bindState } on value for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Switch: {\n props: z.object({\n label: z.string(),\n name: z.string(),\n checked: z.boolean().nullable(),\n checks: validationCheckSchema,\n validateOn: validateOnSchema,\n }),\n events: [\"change\"],\n description:\n \"Toggle switch. Use { $bindState } on checked for binding. Use checks for validation. validateOn controls timing (default: change).\",\n },\n\n Slider: {\n props: z.object({\n label: z.string().nullable(),\n min: z.number().nullable(),\n max: z.number().nullable(),\n step: z.number().nullable(),\n value: z.number().nullable(),\n }),\n events: [\"change\"],\n description: \"Range slider input. Use { $bindState } on value for binding.\",\n },\n\n // ==========================================================================\n // Action Components\n // ==========================================================================\n\n Button: {\n props: z.object({\n label: z.string(),\n variant: z.enum([\"primary\", \"secondary\", \"danger\"]).nullable(),\n disabled: z.boolean().nullable(),\n }),\n events: [\"press\"],\n description: \"Clickable button. Bind on.press for handler.\",\n example: { label: \"Submit\", variant: \"primary\" },\n },\n\n Link: {\n props: z.object({\n label: z.string(),\n href: z.string(),\n }),\n events: [\"press\"],\n description: \"Anchor link. Bind on.press for click handler.\",\n },\n\n DropdownMenu: {\n props: z.object({\n label: z.string(),\n items: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n value: z.string().nullable(),\n }),\n events: [\"select\"],\n description:\n \"Dropdown menu with trigger button and selectable items. Use { $bindState } on value for selected item binding.\",\n },\n\n Toggle: {\n props: z.object({\n label: z.string(),\n pressed: z.boolean().nullable(),\n variant: z.enum([\"default\", \"outline\"]).nullable(),\n }),\n events: [\"change\"],\n description:\n \"Toggle button. Use { $bindState } on pressed for state binding.\",\n },\n\n ToggleGroup: {\n props: z.object({\n items: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n type: z.enum([\"single\", \"multiple\"]).nullable(),\n value: z.string().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Group of toggle buttons. Type 'single' (default) or 'multiple'. Use { $bindState } on value.\",\n },\n\n ButtonGroup: {\n props: z.object({\n buttons: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n selected: z.string().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Segmented button group. Use { $bindState } on selected for selected value.\",\n },\n\n Pagination: {\n props: z.object({\n totalPages: z.number(),\n page: z.number().nullable(),\n }),\n events: [\"change\"],\n description:\n \"Page navigation. Use { $bindState } on page for current page number.\",\n },\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Type for a component definition\n */\nexport type ComponentDefinition = {\n props: z.ZodType;\n slots?: string[];\n events?: string[];\n description: string;\n example?: Record<string, unknown>;\n};\n\n/**\n * Infer the props type for a shadcn component by name.\n * Derives the TypeScript type directly from the Zod schema,\n * so component implementations stay in sync with catalog definitions.\n *\n * @example\n * ```ts\n * type CardProps = ShadcnProps<\"Card\">;\n * // { title: string | null; description: string | null; ... }\n * ```\n */\nexport type ShadcnProps<K extends keyof typeof shadcnComponentDefinitions> =\n z.output<(typeof shadcnComponentDefinitions)[K][\"props\"]>;\n"],"mappings":"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","names":[]}