json-render-nuxt-ui 0.0.2 → 0.0.3

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.
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/catalog.ts
21
+ var catalog_exports = {};
22
+ __export(catalog_exports, {
23
+ nuxtUiComponentDefinitions: () => nuxtUiComponentDefinitions
24
+ });
25
+ module.exports = __toCommonJS(catalog_exports);
26
+ var import_zod = require("zod");
27
+ var nuxtUiComponentDefinitions = {
28
+ Stack: {
29
+ props: import_zod.z.object({
30
+ gap: import_zod.z.enum(["none", "xs", "sm", "md", "lg", "xl"]).optional()
31
+ }),
32
+ slots: ["default"],
33
+ description: "Vertical flex container that spaces children evenly. Use as the top-level wrapper or to group elements with consistent vertical rhythm."
34
+ },
35
+ Row: {
36
+ props: import_zod.z.object({
37
+ gap: import_zod.z.enum(["none", "xs", "sm", "md", "lg", "xl"]).optional(),
38
+ align: import_zod.z.enum(["start", "center", "end", "stretch"]).optional(),
39
+ justify: import_zod.z.enum(["start", "center", "end", "between", "around"]).optional(),
40
+ wrap: import_zod.z.boolean().optional()
41
+ }),
42
+ slots: ["default"],
43
+ description: "Horizontal flex container for side-by-side layouts (e.g. input + button, icon row, grid cells)."
44
+ },
45
+ Divider: {
46
+ props: import_zod.z.object({
47
+ label: import_zod.z.string().optional()
48
+ }),
49
+ description: "Horizontal rule / visual separator between sections. Optional centered label."
50
+ },
51
+ Text: {
52
+ props: import_zod.z.object({
53
+ content: import_zod.z.string(),
54
+ size: import_zod.z.enum(["xs", "sm", "md", "lg"]).optional(),
55
+ color: import_zod.z.enum(["default", "muted", "dimmed"]).optional()
56
+ }),
57
+ description: "Plain text paragraph. Use for descriptions, instructions, or any body copy that is not a heading."
58
+ },
59
+ Card: {
60
+ props: import_zod.z.object({
61
+ title: import_zod.z.string().optional(),
62
+ description: import_zod.z.string().nullable().optional()
63
+ }),
64
+ slots: ["default"],
65
+ description: "Container card with optional title and description. Renders children in the card body with vertical spacing."
66
+ },
67
+ Header: {
68
+ props: import_zod.z.object({
69
+ text: import_zod.z.string(),
70
+ level: import_zod.z.enum(["h1", "h2", "h3", "h4", "h5", "h6"]).optional(),
71
+ description: import_zod.z.string().nullable().optional()
72
+ }),
73
+ description: "Section header text with configurable heading level and optional supporting description."
74
+ },
75
+ Button: {
76
+ props: import_zod.z.object({
77
+ label: import_zod.z.string(),
78
+ color: import_zod.z.enum([
79
+ "primary",
80
+ "secondary",
81
+ "success",
82
+ "info",
83
+ "warning",
84
+ "error",
85
+ "neutral"
86
+ ]).optional(),
87
+ variant: import_zod.z.enum(["solid", "outline", "soft", "subtle", "ghost", "link"]).optional(),
88
+ size: import_zod.z.enum(["xs", "sm", "md", "lg", "xl"]).optional(),
89
+ icon: import_zod.z.string().optional(),
90
+ loading: import_zod.z.boolean().optional(),
91
+ disabled: import_zod.z.boolean().optional()
92
+ }),
93
+ description: "Clickable button supporting Nuxt UI color/variant/size options. Emits press on click.",
94
+ events: ["press"]
95
+ },
96
+ Input: {
97
+ props: import_zod.z.object({
98
+ value: import_zod.z.string().nullable().optional(),
99
+ placeholder: import_zod.z.string().optional(),
100
+ type: import_zod.z.enum(["text", "email", "password", "search", "tel", "url", "number"]).optional(),
101
+ size: import_zod.z.enum(["xs", "sm", "md", "lg", "xl"]).optional(),
102
+ disabled: import_zod.z.boolean().optional(),
103
+ autofocus: import_zod.z.boolean().optional()
104
+ }),
105
+ description: "Text input field. Supports two-way binding via $bindState on value and emits change on input.",
106
+ events: ["change"]
107
+ },
108
+ Select: {
109
+ props: import_zod.z.object({
110
+ value: import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.boolean()]).nullable().optional(),
111
+ items: import_zod.z.array(
112
+ import_zod.z.union([
113
+ import_zod.z.string(),
114
+ import_zod.z.object({
115
+ label: import_zod.z.string(),
116
+ value: import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.boolean()]),
117
+ disabled: import_zod.z.boolean().optional()
118
+ })
119
+ ])
120
+ ).optional(),
121
+ placeholder: import_zod.z.string().optional(),
122
+ size: import_zod.z.enum(["xs", "sm", "md", "lg", "xl"]).optional(),
123
+ disabled: import_zod.z.boolean().optional()
124
+ }),
125
+ description: "Select input with item list and optional two-way binding via $bindState on value.",
126
+ events: ["change"]
127
+ },
128
+ Checkbox: {
129
+ props: import_zod.z.object({
130
+ checked: import_zod.z.boolean().nullable().optional(),
131
+ label: import_zod.z.string().optional(),
132
+ description: import_zod.z.string().nullable().optional(),
133
+ disabled: import_zod.z.boolean().optional()
134
+ }),
135
+ description: "Checkbox control with optional label/description and two-way binding via $bindState on checked.",
136
+ events: ["change"]
137
+ },
138
+ Textarea: {
139
+ props: import_zod.z.object({
140
+ value: import_zod.z.string().nullable().optional(),
141
+ placeholder: import_zod.z.string().optional(),
142
+ rows: import_zod.z.number().int().positive().optional(),
143
+ autoresize: import_zod.z.boolean().optional(),
144
+ maxrows: import_zod.z.number().int().positive().optional(),
145
+ disabled: import_zod.z.boolean().optional()
146
+ }),
147
+ description: "Multiline text input supporting rows/autoresize and two-way binding via $bindState on value.",
148
+ events: ["change"]
149
+ },
150
+ Switch: {
151
+ props: import_zod.z.object({
152
+ checked: import_zod.z.boolean().nullable().optional(),
153
+ label: import_zod.z.string().optional(),
154
+ description: import_zod.z.string().nullable().optional(),
155
+ disabled: import_zod.z.boolean().optional()
156
+ }),
157
+ description: "Boolean toggle switch with optional label/description and two-way binding via $bindState on checked.",
158
+ events: ["change"]
159
+ },
160
+ Dialog: {
161
+ props: import_zod.z.object({
162
+ open: import_zod.z.boolean().optional(),
163
+ title: import_zod.z.string().optional(),
164
+ description: import_zod.z.string().nullable().optional(),
165
+ confirmLabel: import_zod.z.string().optional(),
166
+ cancelLabel: import_zod.z.string().optional(),
167
+ confirmColor: import_zod.z.enum([
168
+ "primary",
169
+ "secondary",
170
+ "success",
171
+ "info",
172
+ "warning",
173
+ "error",
174
+ "neutral"
175
+ ]).optional(),
176
+ confirmVariant: import_zod.z.enum(["solid", "outline", "soft", "subtle", "ghost", "link"]).optional(),
177
+ closeOnConfirm: import_zod.z.boolean().optional()
178
+ }),
179
+ slots: ["default"],
180
+ description: "Modal dialog wrapper with optional title/description and cancel/confirm actions.",
181
+ events: ["openChange", "confirm", "cancel"]
182
+ }
183
+ };
184
+ // Annotate the CommonJS export names for ESM import in node:
185
+ 0 && (module.exports = {
186
+ nuxtUiComponentDefinitions
187
+ });
188
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/catalog.ts"],"sourcesContent":["import { z } from \"zod\";\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\nexport const nuxtUiComponentDefinitions = {\n Stack: {\n props: z.object({\n gap: z.enum([\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n }),\n slots: [\"default\"],\n description:\n \"Vertical flex container that spaces children evenly. Use as the top-level wrapper or to group elements with consistent vertical rhythm.\",\n },\n Row: {\n props: z.object({\n gap: z.enum([\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n align: z.enum([\"start\", \"center\", \"end\", \"stretch\"]).optional(),\n justify: z.enum([\"start\", \"center\", \"end\", \"between\", \"around\"]).optional(),\n wrap: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Horizontal flex container for side-by-side layouts (e.g. input + button, icon row, grid cells).\",\n },\n Divider: {\n props: z.object({\n label: z.string().optional(),\n }),\n description:\n \"Horizontal rule / visual separator between sections. Optional centered label.\",\n },\n Text: {\n props: z.object({\n content: z.string(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\"]).optional(),\n color: z.enum([\"default\", \"muted\", \"dimmed\"]).optional(),\n }),\n description:\n \"Plain text paragraph. Use for descriptions, instructions, or any body copy that is not a heading.\",\n },\n Card: {\n props: z.object({\n title: z.string().optional(),\n description: z.string().nullable().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Container card with optional title and description. Renders children in the card body with vertical spacing.\",\n },\n Header: {\n props: z.object({\n text: z.string(),\n level: z.enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]).optional(),\n description: z.string().nullable().optional(),\n }),\n description:\n \"Section header text with configurable heading level and optional supporting description.\",\n },\n Button: {\n props: z.object({\n label: z.string(),\n color: z\n .enum([\n \"primary\",\n \"secondary\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"neutral\",\n ])\n .optional(),\n variant: z\n .enum([\"solid\", \"outline\", \"soft\", \"subtle\", \"ghost\", \"link\"])\n .optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n icon: z.string().optional(),\n loading: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Clickable button supporting Nuxt UI color/variant/size options. Emits press on click.\",\n events: [\"press\"],\n },\n Input: {\n props: z.object({\n value: z.string().nullable().optional(),\n placeholder: z.string().optional(),\n type: z\n .enum([\"text\", \"email\", \"password\", \"search\", \"tel\", \"url\", \"number\"])\n .optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n disabled: z.boolean().optional(),\n autofocus: z.boolean().optional(),\n }),\n description:\n \"Text input field. Supports two-way binding via $bindState on value and emits change on input.\",\n events: [\"change\"],\n },\n Select: {\n props: z.object({\n value: z.union([z.string(), z.number(), z.boolean()]).nullable().optional(),\n items: z\n .array(\n z.union([\n z.string(),\n z.object({\n label: z.string(),\n value: z.union([z.string(), z.number(), z.boolean()]),\n disabled: z.boolean().optional(),\n }),\n ])\n )\n .optional(),\n placeholder: z.string().optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Select input with item list and optional two-way binding via $bindState on value.\",\n events: [\"change\"],\n },\n Checkbox: {\n props: z.object({\n checked: z.boolean().nullable().optional(),\n label: z.string().optional(),\n description: z.string().nullable().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Checkbox control with optional label/description and two-way binding via $bindState on checked.\",\n events: [\"change\"],\n },\n Textarea: {\n props: z.object({\n value: z.string().nullable().optional(),\n placeholder: z.string().optional(),\n rows: z.number().int().positive().optional(),\n autoresize: z.boolean().optional(),\n maxrows: z.number().int().positive().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Multiline text input supporting rows/autoresize and two-way binding via $bindState on value.\",\n events: [\"change\"],\n },\n Switch: {\n props: z.object({\n checked: z.boolean().nullable().optional(),\n label: z.string().optional(),\n description: z.string().nullable().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Boolean toggle switch with optional label/description and two-way binding via $bindState on checked.\",\n events: [\"change\"],\n },\n Dialog: {\n props: z.object({\n open: z.boolean().optional(),\n title: z.string().optional(),\n description: z.string().nullable().optional(),\n confirmLabel: z.string().optional(),\n cancelLabel: z.string().optional(),\n confirmColor: z\n .enum([\n \"primary\",\n \"secondary\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"neutral\",\n ])\n .optional(),\n confirmVariant: z\n .enum([\"solid\", \"outline\", \"soft\", \"subtle\", \"ghost\", \"link\"])\n .optional(),\n closeOnConfirm: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Modal dialog wrapper with optional title/description and cancel/confirm actions.\",\n events: [\"openChange\", \"confirm\", \"cancel\"],\n },\n} satisfies Record<string, ComponentDefinition>;\n\n/**\n * Infer the props type for a Nuxt UI component by name.\n * Derives the TypeScript type directly from the Zod schema,\n * so component implementations stay in sync with catalog definitions.\n */\nexport type NuxtUiComponentName = keyof typeof nuxtUiComponentDefinitions;\nexport type NuxtUiProps<K extends NuxtUiComponentName> = z.output<\n (typeof nuxtUiComponentDefinitions)[K][\"props\"]\n>;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,7 @@
1
+ import {
2
+ nuxtUiComponentDefinitions
3
+ } from "./chunk-C6RGC4NH.mjs";
4
+ export {
5
+ nuxtUiComponentDefinitions
6
+ };
7
+ //# sourceMappingURL=catalog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,164 @@
1
+ // src/catalog.ts
2
+ import { z } from "zod";
3
+ var nuxtUiComponentDefinitions = {
4
+ Stack: {
5
+ props: z.object({
6
+ gap: z.enum(["none", "xs", "sm", "md", "lg", "xl"]).optional()
7
+ }),
8
+ slots: ["default"],
9
+ description: "Vertical flex container that spaces children evenly. Use as the top-level wrapper or to group elements with consistent vertical rhythm."
10
+ },
11
+ Row: {
12
+ props: z.object({
13
+ gap: z.enum(["none", "xs", "sm", "md", "lg", "xl"]).optional(),
14
+ align: z.enum(["start", "center", "end", "stretch"]).optional(),
15
+ justify: z.enum(["start", "center", "end", "between", "around"]).optional(),
16
+ wrap: z.boolean().optional()
17
+ }),
18
+ slots: ["default"],
19
+ description: "Horizontal flex container for side-by-side layouts (e.g. input + button, icon row, grid cells)."
20
+ },
21
+ Divider: {
22
+ props: z.object({
23
+ label: z.string().optional()
24
+ }),
25
+ description: "Horizontal rule / visual separator between sections. Optional centered label."
26
+ },
27
+ Text: {
28
+ props: z.object({
29
+ content: z.string(),
30
+ size: z.enum(["xs", "sm", "md", "lg"]).optional(),
31
+ color: z.enum(["default", "muted", "dimmed"]).optional()
32
+ }),
33
+ description: "Plain text paragraph. Use for descriptions, instructions, or any body copy that is not a heading."
34
+ },
35
+ Card: {
36
+ props: z.object({
37
+ title: z.string().optional(),
38
+ description: z.string().nullable().optional()
39
+ }),
40
+ slots: ["default"],
41
+ description: "Container card with optional title and description. Renders children in the card body with vertical spacing."
42
+ },
43
+ Header: {
44
+ props: z.object({
45
+ text: z.string(),
46
+ level: z.enum(["h1", "h2", "h3", "h4", "h5", "h6"]).optional(),
47
+ description: z.string().nullable().optional()
48
+ }),
49
+ description: "Section header text with configurable heading level and optional supporting description."
50
+ },
51
+ Button: {
52
+ props: z.object({
53
+ label: z.string(),
54
+ color: z.enum([
55
+ "primary",
56
+ "secondary",
57
+ "success",
58
+ "info",
59
+ "warning",
60
+ "error",
61
+ "neutral"
62
+ ]).optional(),
63
+ variant: z.enum(["solid", "outline", "soft", "subtle", "ghost", "link"]).optional(),
64
+ size: z.enum(["xs", "sm", "md", "lg", "xl"]).optional(),
65
+ icon: z.string().optional(),
66
+ loading: z.boolean().optional(),
67
+ disabled: z.boolean().optional()
68
+ }),
69
+ description: "Clickable button supporting Nuxt UI color/variant/size options. Emits press on click.",
70
+ events: ["press"]
71
+ },
72
+ Input: {
73
+ props: z.object({
74
+ value: z.string().nullable().optional(),
75
+ placeholder: z.string().optional(),
76
+ type: z.enum(["text", "email", "password", "search", "tel", "url", "number"]).optional(),
77
+ size: z.enum(["xs", "sm", "md", "lg", "xl"]).optional(),
78
+ disabled: z.boolean().optional(),
79
+ autofocus: z.boolean().optional()
80
+ }),
81
+ description: "Text input field. Supports two-way binding via $bindState on value and emits change on input.",
82
+ events: ["change"]
83
+ },
84
+ Select: {
85
+ props: z.object({
86
+ value: z.union([z.string(), z.number(), z.boolean()]).nullable().optional(),
87
+ items: z.array(
88
+ z.union([
89
+ z.string(),
90
+ z.object({
91
+ label: z.string(),
92
+ value: z.union([z.string(), z.number(), z.boolean()]),
93
+ disabled: z.boolean().optional()
94
+ })
95
+ ])
96
+ ).optional(),
97
+ placeholder: z.string().optional(),
98
+ size: z.enum(["xs", "sm", "md", "lg", "xl"]).optional(),
99
+ disabled: z.boolean().optional()
100
+ }),
101
+ description: "Select input with item list and optional two-way binding via $bindState on value.",
102
+ events: ["change"]
103
+ },
104
+ Checkbox: {
105
+ props: z.object({
106
+ checked: z.boolean().nullable().optional(),
107
+ label: z.string().optional(),
108
+ description: z.string().nullable().optional(),
109
+ disabled: z.boolean().optional()
110
+ }),
111
+ description: "Checkbox control with optional label/description and two-way binding via $bindState on checked.",
112
+ events: ["change"]
113
+ },
114
+ Textarea: {
115
+ props: z.object({
116
+ value: z.string().nullable().optional(),
117
+ placeholder: z.string().optional(),
118
+ rows: z.number().int().positive().optional(),
119
+ autoresize: z.boolean().optional(),
120
+ maxrows: z.number().int().positive().optional(),
121
+ disabled: z.boolean().optional()
122
+ }),
123
+ description: "Multiline text input supporting rows/autoresize and two-way binding via $bindState on value.",
124
+ events: ["change"]
125
+ },
126
+ Switch: {
127
+ props: z.object({
128
+ checked: z.boolean().nullable().optional(),
129
+ label: z.string().optional(),
130
+ description: z.string().nullable().optional(),
131
+ disabled: z.boolean().optional()
132
+ }),
133
+ description: "Boolean toggle switch with optional label/description and two-way binding via $bindState on checked.",
134
+ events: ["change"]
135
+ },
136
+ Dialog: {
137
+ props: z.object({
138
+ open: z.boolean().optional(),
139
+ title: z.string().optional(),
140
+ description: z.string().nullable().optional(),
141
+ confirmLabel: z.string().optional(),
142
+ cancelLabel: z.string().optional(),
143
+ confirmColor: z.enum([
144
+ "primary",
145
+ "secondary",
146
+ "success",
147
+ "info",
148
+ "warning",
149
+ "error",
150
+ "neutral"
151
+ ]).optional(),
152
+ confirmVariant: z.enum(["solid", "outline", "soft", "subtle", "ghost", "link"]).optional(),
153
+ closeOnConfirm: z.boolean().optional()
154
+ }),
155
+ slots: ["default"],
156
+ description: "Modal dialog wrapper with optional title/description and cancel/confirm actions.",
157
+ events: ["openChange", "confirm", "cancel"]
158
+ }
159
+ };
160
+
161
+ export {
162
+ nuxtUiComponentDefinitions
163
+ };
164
+ //# sourceMappingURL=chunk-C6RGC4NH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/catalog.ts"],"sourcesContent":["import { z } from \"zod\";\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\nexport const nuxtUiComponentDefinitions = {\n Stack: {\n props: z.object({\n gap: z.enum([\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n }),\n slots: [\"default\"],\n description:\n \"Vertical flex container that spaces children evenly. Use as the top-level wrapper or to group elements with consistent vertical rhythm.\",\n },\n Row: {\n props: z.object({\n gap: z.enum([\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n align: z.enum([\"start\", \"center\", \"end\", \"stretch\"]).optional(),\n justify: z.enum([\"start\", \"center\", \"end\", \"between\", \"around\"]).optional(),\n wrap: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Horizontal flex container for side-by-side layouts (e.g. input + button, icon row, grid cells).\",\n },\n Divider: {\n props: z.object({\n label: z.string().optional(),\n }),\n description:\n \"Horizontal rule / visual separator between sections. Optional centered label.\",\n },\n Text: {\n props: z.object({\n content: z.string(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\"]).optional(),\n color: z.enum([\"default\", \"muted\", \"dimmed\"]).optional(),\n }),\n description:\n \"Plain text paragraph. Use for descriptions, instructions, or any body copy that is not a heading.\",\n },\n Card: {\n props: z.object({\n title: z.string().optional(),\n description: z.string().nullable().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Container card with optional title and description. Renders children in the card body with vertical spacing.\",\n },\n Header: {\n props: z.object({\n text: z.string(),\n level: z.enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]).optional(),\n description: z.string().nullable().optional(),\n }),\n description:\n \"Section header text with configurable heading level and optional supporting description.\",\n },\n Button: {\n props: z.object({\n label: z.string(),\n color: z\n .enum([\n \"primary\",\n \"secondary\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"neutral\",\n ])\n .optional(),\n variant: z\n .enum([\"solid\", \"outline\", \"soft\", \"subtle\", \"ghost\", \"link\"])\n .optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n icon: z.string().optional(),\n loading: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Clickable button supporting Nuxt UI color/variant/size options. Emits press on click.\",\n events: [\"press\"],\n },\n Input: {\n props: z.object({\n value: z.string().nullable().optional(),\n placeholder: z.string().optional(),\n type: z\n .enum([\"text\", \"email\", \"password\", \"search\", \"tel\", \"url\", \"number\"])\n .optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n disabled: z.boolean().optional(),\n autofocus: z.boolean().optional(),\n }),\n description:\n \"Text input field. Supports two-way binding via $bindState on value and emits change on input.\",\n events: [\"change\"],\n },\n Select: {\n props: z.object({\n value: z.union([z.string(), z.number(), z.boolean()]).nullable().optional(),\n items: z\n .array(\n z.union([\n z.string(),\n z.object({\n label: z.string(),\n value: z.union([z.string(), z.number(), z.boolean()]),\n disabled: z.boolean().optional(),\n }),\n ])\n )\n .optional(),\n placeholder: z.string().optional(),\n size: z.enum([\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]).optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Select input with item list and optional two-way binding via $bindState on value.\",\n events: [\"change\"],\n },\n Checkbox: {\n props: z.object({\n checked: z.boolean().nullable().optional(),\n label: z.string().optional(),\n description: z.string().nullable().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Checkbox control with optional label/description and two-way binding via $bindState on checked.\",\n events: [\"change\"],\n },\n Textarea: {\n props: z.object({\n value: z.string().nullable().optional(),\n placeholder: z.string().optional(),\n rows: z.number().int().positive().optional(),\n autoresize: z.boolean().optional(),\n maxrows: z.number().int().positive().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Multiline text input supporting rows/autoresize and two-way binding via $bindState on value.\",\n events: [\"change\"],\n },\n Switch: {\n props: z.object({\n checked: z.boolean().nullable().optional(),\n label: z.string().optional(),\n description: z.string().nullable().optional(),\n disabled: z.boolean().optional(),\n }),\n description:\n \"Boolean toggle switch with optional label/description and two-way binding via $bindState on checked.\",\n events: [\"change\"],\n },\n Dialog: {\n props: z.object({\n open: z.boolean().optional(),\n title: z.string().optional(),\n description: z.string().nullable().optional(),\n confirmLabel: z.string().optional(),\n cancelLabel: z.string().optional(),\n confirmColor: z\n .enum([\n \"primary\",\n \"secondary\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"neutral\",\n ])\n .optional(),\n confirmVariant: z\n .enum([\"solid\", \"outline\", \"soft\", \"subtle\", \"ghost\", \"link\"])\n .optional(),\n closeOnConfirm: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Modal dialog wrapper with optional title/description and cancel/confirm actions.\",\n events: [\"openChange\", \"confirm\", \"cancel\"],\n },\n} satisfies Record<string, ComponentDefinition>;\n\n/**\n * Infer the props type for a Nuxt UI component by name.\n * Derives the TypeScript type directly from the Zod schema,\n * so component implementations stay in sync with catalog definitions.\n */\nexport type NuxtUiComponentName = keyof typeof nuxtUiComponentDefinitions;\nexport type NuxtUiProps<K extends NuxtUiComponentName> = z.output<\n (typeof nuxtUiComponentDefinitions)[K][\"props\"]\n>;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,50 @@
1
+ import { h, Component } from 'vue';
2
+ import { BaseComponentProps } from '@json-render/vue';
3
+ import { NuxtUiComponentName, NuxtUiProps, ComponentDefinition } from './catalog.mjs';
4
+ export { nuxtUiComponentDefinitions } from './catalog.mjs';
5
+ import 'zod';
6
+
7
+ type ComponentMap = {
8
+ [K in NuxtUiComponentName]: (ctx: BaseComponentProps<NuxtUiProps<K>>) => ReturnType<typeof h>;
9
+ };
10
+ declare const nuxtUiComponents: ComponentMap;
11
+
12
+ type NuxtAppLike = {
13
+ vueApp: {
14
+ component(name: string, comp: Component): void;
15
+ };
16
+ };
17
+ /**
18
+ * Globally register the Nuxt UI components that json-render-nuxt-ui
19
+ * needs at runtime.
20
+ *
21
+ * Nuxt auto-imports resolve `@nuxt/ui` components at compile time via
22
+ * template transforms — they are NOT registered globally at runtime. The
23
+ * json-render component registry uses Vue's `resolveComponent()`, so the
24
+ * components it references must be registered on the Vue app instance.
25
+ *
26
+ * @param nuxtApp The Nuxt app instance (from `defineNuxtPlugin` callback).
27
+ * @param resolved Object mapping Nuxt UI component names (e.g. `UCard`) to
28
+ * their Vue component implementations — import these from `#components`.
29
+ * @param catalogComponents The catalog component names to register globals for.
30
+ * Only the Nuxt UI globals required by these components are registered. Pass
31
+ * an array of names (`['Card', 'Button']`) or an object whose keys are names
32
+ * (e.g. `nuxtUiComponentDefinitions` or a custom subset).
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { registerNuxtUiGlobals, nuxtUiComponentDefinitions } from "json-render-nuxt-ui";
37
+ * import { UCard, UButton, UInput, USelect, UCheckbox, UTextarea, USwitch, UModal } from "#components";
38
+ *
39
+ * export default defineNuxtPlugin((nuxtApp) => {
40
+ * registerNuxtUiGlobals(
41
+ * nuxtApp,
42
+ * { UCard, UButton, UInput, USelect, UCheckbox, UTextarea, USwitch, UModal },
43
+ * nuxtUiComponentDefinitions,
44
+ * );
45
+ * });
46
+ * ```
47
+ */
48
+ declare function registerNuxtUiGlobals(nuxtApp: NuxtAppLike, resolved: Record<string, Component>, catalogComponents: NuxtUiComponentName[] | Partial<Record<NuxtUiComponentName, ComponentDefinition>>): void;
49
+
50
+ export { ComponentDefinition, NuxtUiProps, nuxtUiComponents, registerNuxtUiGlobals };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,50 @@
1
- declare function helloWord(): string;
1
+ import { h, Component } from 'vue';
2
+ import { BaseComponentProps } from '@json-render/vue';
3
+ import { NuxtUiComponentName, NuxtUiProps, ComponentDefinition } from './catalog.js';
4
+ export { nuxtUiComponentDefinitions } from './catalog.js';
5
+ import 'zod';
2
6
 
3
- export { helloWord };
7
+ type ComponentMap = {
8
+ [K in NuxtUiComponentName]: (ctx: BaseComponentProps<NuxtUiProps<K>>) => ReturnType<typeof h>;
9
+ };
10
+ declare const nuxtUiComponents: ComponentMap;
11
+
12
+ type NuxtAppLike = {
13
+ vueApp: {
14
+ component(name: string, comp: Component): void;
15
+ };
16
+ };
17
+ /**
18
+ * Globally register the Nuxt UI components that json-render-nuxt-ui
19
+ * needs at runtime.
20
+ *
21
+ * Nuxt auto-imports resolve `@nuxt/ui` components at compile time via
22
+ * template transforms — they are NOT registered globally at runtime. The
23
+ * json-render component registry uses Vue's `resolveComponent()`, so the
24
+ * components it references must be registered on the Vue app instance.
25
+ *
26
+ * @param nuxtApp The Nuxt app instance (from `defineNuxtPlugin` callback).
27
+ * @param resolved Object mapping Nuxt UI component names (e.g. `UCard`) to
28
+ * their Vue component implementations — import these from `#components`.
29
+ * @param catalogComponents The catalog component names to register globals for.
30
+ * Only the Nuxt UI globals required by these components are registered. Pass
31
+ * an array of names (`['Card', 'Button']`) or an object whose keys are names
32
+ * (e.g. `nuxtUiComponentDefinitions` or a custom subset).
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { registerNuxtUiGlobals, nuxtUiComponentDefinitions } from "json-render-nuxt-ui";
37
+ * import { UCard, UButton, UInput, USelect, UCheckbox, UTextarea, USwitch, UModal } from "#components";
38
+ *
39
+ * export default defineNuxtPlugin((nuxtApp) => {
40
+ * registerNuxtUiGlobals(
41
+ * nuxtApp,
42
+ * { UCard, UButton, UInput, USelect, UCheckbox, UTextarea, USwitch, UModal },
43
+ * nuxtUiComponentDefinitions,
44
+ * );
45
+ * });
46
+ * ```
47
+ */
48
+ declare function registerNuxtUiGlobals(nuxtApp: NuxtAppLike, resolved: Record<string, Component>, catalogComponents: NuxtUiComponentName[] | Partial<Record<NuxtUiComponentName, ComponentDefinition>>): void;
49
+
50
+ export { ComponentDefinition, NuxtUiProps, nuxtUiComponents, registerNuxtUiGlobals };